Add extension hooks to blog entry form (so we can customise management form)

This commit is contained in:
Morven Lewis-Everley 2014-08-05 14:28:47 +01:00 committed by Daniel Hensby
parent 09a297da3b
commit 3b9c623ca8

View File

@ -14,16 +14,16 @@
class BlogHolder extends BlogTree implements PermissionProvider { class BlogHolder extends BlogTree implements PermissionProvider {
private static $icon = "blog/images/blogholder-file.png"; private static $icon = "blog/images/blogholder-file.png";
private static $description = "Displays listings of blog entries"; private static $description = "Displays listings of blog entries";
private static $singular_name = 'Blog Holder Page'; private static $singular_name = 'Blog Holder Page';
private static $plural_name = 'Blog Holder Pages'; private static $plural_name = 'Blog Holder Pages';
private static $db = array( private static $db = array(
'AllowCustomAuthors' => 'Boolean', 'AllowCustomAuthors' => 'Boolean',
'ShowFullEntry' => 'Boolean', 'ShowFullEntry' => 'Boolean',
); );
private static $has_one = array( private static $has_one = array(
@ -35,14 +35,14 @@ class BlogHolder extends BlogTree implements PermissionProvider {
); );
function getCMSFields() { function getCMSFields() {
$blogOwners = $this->blogOwners(); $blogOwners = $this->blogOwners();
SiteTree::disableCMSFieldsExtensions(); SiteTree::disableCMSFieldsExtensions();
$fields = parent::getCMSFields(); $fields = parent::getCMSFields();
SiteTree::enableCMSFieldsExtensions(); SiteTree::enableCMSFieldsExtensions();
$fields->addFieldToTab( $fields->addFieldToTab(
'Root.Main', 'Root.Main',
DropdownField::create('OwnerID', 'Blog owner', $blogOwners->map('ID', 'Name')->toArray()) DropdownField::create('OwnerID', 'Blog owner', $blogOwners->map('ID', 'Name')->toArray())
->setEmptyString('(None)') ->setEmptyString('(None)')
->setHasEmptyDefault(true), ->setHasEmptyDefault(true),
@ -50,9 +50,9 @@ class BlogHolder extends BlogTree implements PermissionProvider {
); );
$fields->addFieldToTab('Root.Main', new CheckboxField('AllowCustomAuthors', 'Allow non-admins to have a custom author field'), "Content"); $fields->addFieldToTab('Root.Main', new CheckboxField('AllowCustomAuthors', 'Allow non-admins to have a custom author field'), "Content");
$fields->addFieldToTab( $fields->addFieldToTab(
"Root.Main", "Root.Main",
CheckboxField::create("ShowFullEntry", "Show Full Entry") CheckboxField::create("ShowFullEntry", "Show Full Entry")
->setDescription('Show full content in overviews rather than summary'), ->setDescription('Show full content in overviews rather than summary'),
"Content" "Content"
); );
@ -60,18 +60,18 @@ class BlogHolder extends BlogTree implements PermissionProvider {
return $fields; return $fields;
} }
/** /**
* Get members who have BLOGMANAGEMENT and ADMIN permission * Get members who have BLOGMANAGEMENT and ADMIN permission
*/ */
function blogOwners($sort = array('FirstName'=>'ASC','Surname'=>'ASC'), $direction = null) { function blogOwners($sort = array('FirstName'=>'ASC','Surname'=>'ASC'), $direction = null) {
$members = Permission::get_members_by_permission(array('ADMIN','BLOGMANAGEMENT')); $members = Permission::get_members_by_permission(array('ADMIN','BLOGMANAGEMENT'));
$members->sort($sort); $members->sort($sort);
$this->extend('extendBlogOwners', $members); $this->extend('extendBlogOwners', $members);
return $members; return $members;
} }
@ -120,10 +120,10 @@ class BlogHolder extends BlogTree implements PermissionProvider {
*/ */
function requireDefaultRecords() { function requireDefaultRecords() {
parent::requireDefaultRecords(); parent::requireDefaultRecords();
// Skip creation of default records // Skip creation of default records
if(!self::config()->create_default_pages) return; if(!self::config()->create_default_pages) return;
if(!BlogHolder::get()->exists()) { if(!BlogHolder::get()->exists()) {
$blogholder = new BlogHolder(); $blogholder = new BlogHolder();
$blogholder->Title = "Blog"; $blogholder->Title = "Blog";
@ -156,7 +156,7 @@ class BlogHolder extends BlogTree implements PermissionProvider {
$archivewidget->ParentID = $widgetarea->ID; $archivewidget->ParentID = $widgetarea->ID;
$archivewidget->write(); $archivewidget->write();
$widgetarea->write(); $widgetarea->write();
break; // only apply to one break; // only apply to one
} }
@ -196,7 +196,7 @@ class BlogHolder_Controller extends BlogTree_Controller {
'post', 'post',
'BlogEntryForm' => 'BLOGMANAGEMENT', 'BlogEntryForm' => 'BLOGMANAGEMENT',
); );
function init() { function init() {
parent::init(); parent::init();
Requirements::themedCSS("bbcodehelp"); Requirements::themedCSS("bbcodehelp");
@ -225,9 +225,9 @@ class BlogHolder_Controller extends BlogTree_Controller {
/** /**
* A simple form for creating blog entries * A simple form for creating blog entries
*/ */
function BlogEntryForm() { function BlogEntryForm() {
if(!Permission::check('BLOGMANAGEMENT')) return Security::permissionFailure(); if(!Permission::check('BLOGMANAGEMENT')) return Security::permissionFailure();
$id = 0; $id = 0;
if($this->request->latestParam('ID')) { if($this->request->latestParam('ID')) {
@ -252,7 +252,7 @@ class BlogHolder_Controller extends BlogTree_Controller {
} else { } else {
$tagfield = new TextField('Tags'); $tagfield = new TextField('Tags');
} }
$field = 'TextField'; $field = 'TextField';
if(!$this->AllowCustomAuthors && !Permission::check('ADMIN')) { if(!$this->AllowCustomAuthors && !Permission::check('ADMIN')) {
$field = 'ReadonlyField'; $field = 'ReadonlyField';
@ -266,7 +266,7 @@ class BlogHolder_Controller extends BlogTree_Controller {
new LiteralField("Tagsnote"," <label id='tagsnote'>"._t('BlogHolder.TE', "For example: sport, personal, science fiction")."<br/>" . new LiteralField("Tagsnote"," <label id='tagsnote'>"._t('BlogHolder.TE', "For example: sport, personal, science fiction")."<br/>" .
_t('BlogHolder.SPUC', "Please separate tags using commas.")."</label>") _t('BlogHolder.SPUC', "Please separate tags using commas.")."</label>")
); );
$submitAction = new FormAction('postblog', _t('BlogHolder.POST', 'Post blog entry')); $submitAction = new FormAction('postblog', _t('BlogHolder.POST', 'Post blog entry'));
$actions = new FieldList($submitAction); $actions = new FieldList($submitAction);
@ -285,6 +285,8 @@ class BlogHolder_Controller extends BlogTree_Controller {
$form->loadDataFrom(array("Author" => Cookie::get("BlogHolder_Name"))); $form->loadDataFrom(array("Author" => Cookie::get("BlogHolder_Name")));
} }
$this->extend("updateBlogEntryForm", $form);
return $form; return $form;
} }
@ -311,15 +313,19 @@ class BlogHolder_Controller extends BlogTree_Controller {
$blogentry->Content = str_replace("\r\n", "\n", $form->Fields()->fieldByName('BlogPost')->dataValue()); $blogentry->Content = str_replace("\r\n", "\n", $form->Fields()->fieldByName('BlogPost')->dataValue());
if(Object::has_extension($this->ClassName, 'Translatable')) { if(Object::has_extension($this->ClassName, 'Translatable')) {
$blogentry->Locale = $this->Locale; $blogentry->Locale = $this->Locale;
} }
$this->extend("onBeforePostBlog", $blogentry);
$oldMode = Versioned::get_reading_mode(); $oldMode = Versioned::get_reading_mode();
Versioned::reading_stage('Stage'); Versioned::reading_stage('Stage');
$blogentry->write(); $blogentry->write();
$blogentry->publish("Stage", "Live"); $blogentry->publish("Stage", "Live");
Versioned::set_reading_mode($oldMode); Versioned::set_reading_mode($oldMode);
$this->extend("onAfterPostBlog", $blogentry);
$this->redirect($this->Link()); $this->redirect($this->Link());
} }
} }