ENHANCEMENT: display only members of Administrators and Blog Management groups in the blog holder's blog owners dropdown field

FEATURE: allow blog owner customisation
This commit is contained in:
Saophalkun Ponlu 2010-05-24 04:22:56 +00:00
parent 3e952feefc
commit d9d12dd621
3 changed files with 74 additions and 2 deletions

View File

@ -28,12 +28,14 @@ class BlogHolder extends BlogTree implements PermissionProvider {
);
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', DataObject::get('Member')->toDropDownMap('ID', 'Name', 'None')));
$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);
@ -41,6 +43,24 @@ class BlogHolder extends BlogTree implements PermissionProvider {
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 );
}

View File

@ -54,6 +54,21 @@ class BlogHolderTest extends SapphireTest {
}
}
function testBlogOwners() {
$mainblog = $this->objFromFixture('BlogHolder', 'mainblog');
$actualMembers = array_values($mainblog->blogOwners()->toDropDownMap('ID', 'Name'));
$expectedMembers = array(
'ADMIN User', // test default admin
'Admin One',
'Admin Two',
'Blog Owner One',
'Blog Owner Three',
'Blog Owner Two',
);
$this->assertEquals($expectedMembers, $actualMembers);
}
}
?>

View File

@ -25,4 +25,41 @@ BlogEntry:
Tags: tag1,tag2,tag3
Permission:
admin:
Code: ADMIN
blogOwners:
Code: BLOGMANAGEMENT
Group:
admin:
Title: Admin
Permissions: =>Permission.admin
blogOwners:
Title: Blog Owners
Permissions: =>Permission.blogOwners
Member:
admin1:
Name: Admin One
Groups: =>Group.admin
admin2:
Name: Admin Two
Groups: =>Group.admin
blogOwner1:
Name: Blog Owner One
Groups: =>Group.blogOwners
blogOwner2:
Name: Blog Owner Two
Groups: =>Group.blogOwners
blogOwner3:
Name: Blog Owner Three
Groups: =>Group.admin, =>Group.blogOwners
noBody:
Name: No Body