'Boolean', 'ShowFullEntry' => 'Boolean', ); private static $has_one = array( 'Owner' => 'Member', ); private static $allowed_children = array( 'BlogEntry' ); public function getCMSFields() { $blogOwners = $this->blogOwners(); // Add holder fields prior to extensions being called $this->beforeUpdateCMSFields(function($fields) use ($blogOwners) { $fields->addFieldsToTab( 'Root.Main', array( DropdownField::create('OwnerID', 'Blog owner', $blogOwners->map('ID', 'Name')->toArray()) ->setEmptyString('(None)') ->setHasEmptyDefault(true), CheckboxField::create('AllowCustomAuthors', 'Allow non-admins to have a custom author field'), CheckboxField::create("ShowFullEntry", "Show Full Entry") ->setDescription('Show full content in overviews rather than summary') ), "Content" ); }); return parent::getCMSFields(); } /** * Get members who have BLOGMANAGEMENT and ADMIN permission * * @param array $sort * @param string $direction * @return SS_List */ public function blogOwners($sort = array('FirstName'=>'ASC','Surname'=>'ASC'), $direction = null) { $members = Permission::get_members_by_permission(array('ADMIN', 'BLOGMANAGEMENT')); $members->sort($sort); $this->extend('extendBlogOwners', $members); return $members; } 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 */ public function ShowTag() { if($this->request->latestParam('Action') == 'tag') { return Convert::raw2xml(Director::urlParam('ID')); } } /** * Check if url has "/post" */ public function isPost() { return $this->request->latestParam('Action') == 'post'; } /** * Link for creating a new blog entry */ public function postURL() { return $this->Link('post'); } /** * Returns true if the current user is an admin, or is the owner of this blog * * @return bool */ public function IsOwner() { return (Permission::check('BLOGMANAGEMENT') || Permission::check('ADMIN')); } /** * Create default blog setup */ public function requireDefaultRecords() { parent::requireDefaultRecords(); // Skip creation of default records if(!self::config()->create_default_pages) return; $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"; $blogholder->write(); $blogholder->publish("Stage", "Live"); // Add default widgets to first found WidgetArea relationship if(class_exists('WidgetArea')) { foreach($this->has_one() as $name => $class) { if($class == 'WidgetArea' || is_subclass_of($class, 'WidgetArea')) { $relationName = "{$name}ID"; $widgetarea = new WidgetArea(); $widgetarea->write(); $blogholder->$relationName = $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(); break; // only apply to one } } } $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 in the CMS.
"); $blog->Status = "Published"; $blog->ParentID = $blogholder->ID; $blog->write(); $blog->publish("Stage", "Live"); DB::alteration_message("Blog page created","created"); } } public function providePermissions() { return array("BLOGMANAGEMENT" => "Blog management"); } } class BlogHolder_Controller extends BlogTree_Controller { private static $allowed_actions = array( 'index', 'tag', 'date', 'metaweblog', 'postblog' => 'BLOGMANAGEMENT', 'post', 'BlogEntryForm' => 'BLOGMANAGEMENT', ); public function init() { parent::init(); Requirements::themedCSS("bbcodehelp"); } /** * Return list of usable tags for help */ public function BBTags() { return BBCodeParser::usable_tags(); } /** * Post a new blog entry */ public 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 * * @return Form */ public function BlogEntryForm() { if(!Permission::check('BLOGMANAGEMENT')) return Security::permissionFailure(); $codeparser = BBCodeParser::create(); $membername = Member::currentUser() ? Member::currentUser()->getName() : ""; if(BlogEntry::$allow_wysiwyg_editing) { $contentfield = HtmlEditorField::create("BlogPost", _t("BlogEntry.CN")); } else { $contentfield = CompositeField::create( LiteralField::create( "BBCodeHelper", ""._t("BlogEntry.BBH")."" ), TextareaField::create( "BlogPost", _t("BlogEntry.CN"), 20 ), // This is called BlogPost as the id #Content is generally used already LiteralField::create( "BBCodeTags", "