'Boolean', 'AllowCustomAuthors' => 'Boolean', ); static $has_one = array( 'Owner' => 'Member', ); static $allowed_children = array( 'BlogEntry' ); function getCMSFields() { $blogOwners = $this->blogOwners(); SiteTree::disableCMSFieldsExtensions(); $fields = parent::getCMSFields(); SiteTree::enableCMSFieldsExtensions(); $fields->addFieldToTab('Root.Content.Main', new CheckboxField('TrackBacksEnabled', 'Enable TrackBacks')); $fields->addFieldToTab('Root.Content.Main', new DropdownField('OwnerID', 'Blog owner', $blogOwners->toDropDownMap('ID', 'Name', 'None'))); $fields->addFieldToTab('Root.Content.Main', new CheckboxField('AllowCustomAuthors', 'Allow non-admins to have a custom author field')); $this->extend('updateCMSFields', $fields); return $fields; } /** * Get members who have BLOGMANAGEMENT and ADMIN permission */ function blogOwners($sort = 'Name', $direction = "ASC") { $adminMembers = Permission::get_members_by_permission('ADMIN'); $blogOwners = Permission::get_members_by_permission('BLOGMANAGEMENT'); if(!$adminMembers) $adminMembers = new DataObjectSet(); if(!$blogOwners) $blogOwners = new DataObjectSet(); $blogOwners->merge($adminMembers); $blogOwners->sort($sort, $direction); $this->extend('extendBlogOwners', $blogOwners); return $blogOwners; } public function BlogHolderIDs() { return array( $this->ID ); } /* * @todo: These next few functions don't really belong in the model. Can we remove them? */ /** * Only display the blog entries that have the specified tag */ function ShowTag() { if($this->request->latestParam('Action') == 'tag') { return Convert::raw2xml(Director::urlParam('ID')); } } /** * Check if url has "/post" */ function isPost() { return $this->request->latestParam('Action') == 'post'; } /** * Link for creating a new blog entry */ function postURL(){ return $this->Link('post'); } /** * Returns true if the current user is an admin, or is the owner of this blog * * @return Boolean */ function IsOwner() { return (Permission::check('BLOGMANAGEMENT') || Permission::check('ADMIN')); } /** * Create default blog setup */ function requireDefaultRecords() { parent::requireDefaultRecords(); $blogHolder = DataObject::get_one('BlogHolder'); //TODO: This does not check for whether this blogholder is an orphan or not if(!$blogHolder) { $blogholder = new BlogHolder(); $blogholder->Title = "Blog"; $blogholder->URLSegment = "blog"; $blogholder->Status = "Published"; $widgetarea = new WidgetArea(); $widgetarea->write(); $blogholder->SideBarID = $widgetarea->ID; $blogholder->write(); $blogholder->publish("Stage", "Live"); $managementwidget = new BlogManagementWidget(); $managementwidget->ParentID = $widgetarea->ID; $managementwidget->write(); $tagcloudwidget = new TagCloudWidget(); $tagcloudwidget->ParentID = $widgetarea->ID; $tagcloudwidget->write(); $archivewidget = new ArchiveWidget(); $archivewidget->ParentID = $widgetarea->ID; $archivewidget->write(); $widgetarea->write(); $blog = new BlogEntry(); $blog->Title = _t('BlogHolder.SUCTITLE', "SilverStripe blog module successfully installed"); $blog->URLSegment = 'sample-blog-entry'; $blog->Tags = _t('BlogHolder.SUCTAGS',"silverstripe, blog"); $blog->Content = _t('BlogHolder.SUCCONTENT',"

Congratulations, the SilverStripe blog module has been successfully installed. This blog entry can be safely deleted. You can configure aspects of your blog (such as the widgets displayed in the sidebar) in the CMS.

"); $blog->Status = "Published"; $blog->ParentID = $blogholder->ID; $blog->write(); $blog->publish("Stage", "Live"); DB::alteration_message("Blog page created","created"); } } } class BlogHolder_Controller extends BlogTree_Controller { static $allowed_actions = array( 'index', 'tag', 'date', 'metaweblog', 'postblog' => 'BLOGMANAGEMENT', 'post' => 'BLOGMANAGEMENT', 'BlogEntryForm' => 'BLOGMANAGEMENT', ); function init() { parent::init(); Requirements::themedCSS("bbcodehelp"); } /** * Return list of usable tags for help */ function BBTags() { return BBCodeParser::usable_tags(); } function providePermissions() { return array("BLOGMANAGEMENT" => "Blog management"); } /** * Post a new blog entry */ function post(){ if(!Permission::check('BLOGMANAGEMENT')) return Security::permissionFailure(); $page = $this->customise(array( 'Content' => false, 'Form' => $this->BlogEntryForm() )); return $page->renderWith('Page'); } /** * A simple form for creating blog entries */ function BlogEntryForm() { if(!Permission::check('BLOGMANAGEMENT')) return Security::permissionFailure(); $id = 0; if($this->request->latestParam('ID')) { $id = (int) $this->request->latestParam('ID'); } $codeparser = new BBCodeParser(); $membername = Member::currentMember() ? Member::currentMember()->getName() : ""; if(BlogEntry::$allow_wysiwyg_editing) { $contentfield = new HtmlEditorField("BlogPost", _t("BlogEntry.CN")); } else { $contentfield = new CompositeField( new LiteralField("BBCodeHelper",""._t("BlogEntry.BBH")."
" ), new TextareaField("BlogPost", _t("BlogEntry.CN"),20), // This is called BlogPost as the id #Content is generally used already new LiteralField("BBCodeTags","
".$codeparser->useable_tagsHTML()."
") ); } if(class_exists('TagField')) { $tagfield = new TagField('Tags', null, null, 'BlogEntry'); $tagfield->setSeparator(', '); } else { $tagfield = new TextField('Tags'); } $field = 'TextField'; if(!$this->AllowCustomAuthors && !Permission::check('ADMIN')) { $field = 'ReadonlyField'; } $fields = new FieldSet( new HiddenField("ID", "ID"), new TextField("Title", _t('BlogHolder.SJ', "Subject")), new $field("Author", _t('BlogEntry.AU'), $membername), $contentfield, $tagfield, new LiteralField("Tagsnote"," ") ); $submitAction = new FormAction('postblog', _t('BlogHolder.POST', 'Post blog entry')); $actions = new FieldSet($submitAction); $validator = new RequiredFields('Title','Content'); $form = new Form($this, 'BlogEntryForm',$fields, $actions,$validator); if($id != 0) { $entry = DataObject::get_by_id('BlogEntry', $id); if($entry->IsOwner()) { $form->loadDataFrom($entry); $form->datafieldByName('BlogPost')->setValue($entry->Content); } } else { $form->loadDataFrom(array("Author" => Cookie::get("BlogHolder_Name"))); } return $form; } function postblog($data, $form) { if(!Permission::check('BLOGMANAGEMENT')) return Security::permissionFailure(); Cookie::set("BlogHolder_Name", $data['Author']); $blogentry = false; if(isset($data['ID']) && $data['ID']) { $blogentry = DataObject::get_by_id("BlogEntry", $data['ID']); if(!$blogentry->IsOwner()) { unset($blogentry); } } if(!$blogentry) { $blogentry = new BlogEntry(); } $form->saveInto($blogentry); $blogentry->ParentID = $this->ID; $blogentry->Content = str_replace("\r\n", "\n", $form->datafieldByName('BlogPost')->dataValue()); if(Object::has_extension($this->ClassName, 'Translatable')) { $blogentry->Locale = $this->Locale; } $blogentry->Status = "Published"; $blogentry->writeToStage("Stage"); $blogentry->publish("Stage", "Live"); Director::redirect($this->Link()); } } ?>