From 94601547aff8347d2d3ebfaf39549c7a281ec9e6 Mon Sep 17 00:00:00 2001 From: Will Rossiter Date: Sat, 7 Feb 2009 02:19:27 +0000 Subject: [PATCH] FEATURE: added userblog support. Thanks simon_w - #3463 --- code/BlogEntry.php | 5 ++++- code/BlogHolder.php | 35 ++++++++++++++++++++++++------- code/BlogManagementWidget.php | 8 +++++-- templates/BlogManagementWidget.ss | 4 ++-- templates/Layout/BlogEntry.ss | 2 +- 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/code/BlogEntry.php b/code/BlogEntry.php index 8a36c12..bb73f93 100644 --- a/code/BlogEntry.php +++ b/code/BlogEntry.php @@ -167,6 +167,9 @@ class BlogEntry extends Page { } } + function IsOwner() { + return $this->Parent()->IsOwner(); + } /** * Call this to enable WYSIWYG editing on your blog entries. * By default the blog uses BBCode @@ -194,7 +197,7 @@ class BlogEntry_Controller extends Page_Controller { * Gets a link to unpublish the blog entry */ function unpublishPost() { - if(!Permission::check('ADMIN')) { + if(!$this->IsOwner()) { Security::permissionFailure( $this, 'Unpublishing blogs is an administrator task. Please log in.' diff --git a/code/BlogHolder.php b/code/BlogHolder.php index 5cccf10..8a166a3 100644 --- a/code/BlogHolder.php +++ b/code/BlogHolder.php @@ -15,11 +15,13 @@ class BlogHolder extends Page { static $db = array( 'LandingPageFreshness' => 'Varchar', 'Name' => 'Varchar', - 'TrackBacksEnabled' => 'Boolean' + 'TrackBacksEnabled' => 'Boolean', + 'AllowCustomAuthors' => 'Boolean', ); static $has_one = array( - "SideBar" => "WidgetArea" + "SideBar" => "WidgetArea", + 'Owner' => 'Member', ); static $has_many = array(); @@ -57,6 +59,8 @@ class BlogHolder extends Page { ))); $fields->addFieldToTab('Root.Content.Main', new CheckboxField('TrackBacksEnabled', 'Enable TrackBacks')); + $fields->addFieldToTab('Root.Content.Main', new DropdownField('OwnerID', 'Blog owner', DataObject::get('Member')->toDropDownMap('ID', 'Name', 'None'))); + $fields->addFieldToTab('Root.Content.Main', new CheckboxField('AllowCustomAuthors', 'Allow non-admins to have a custom author field')); return $fields; } @@ -119,6 +123,15 @@ class BlogHolder extends Page { 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('ADMIN') || (Member::CurrentMember() && Member::CurrentMember()->ID == $this->OwnerID); + } + /** * Create default blog setup */ @@ -260,7 +273,7 @@ class BlogHolder_Controller extends Page_Controller { * Post a new blog entry */ function post(){ - if(!Permission::check('ADMIN')){ + if(!$this->IsOwner()){ Security::permissionFailure($this, _t('BlogHolder.HAVENTPERM', 'Posting blogs is an administrator task. Please log in.')); } @@ -315,11 +328,14 @@ class BlogHolder_Controller extends Page_Controller { } 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 TextField("Author",_t('BlogEntry.AU'),$membername), + new $field("Author",_t('BlogEntry.AU'),$membername), $contentfield, $tagfield, new LiteralField("Tagsnote","