diff --git a/_config/config.yml b/_config/config.yml index 40ea542..21aff02 100644 --- a/_config/config.yml +++ b/_config/config.yml @@ -1,5 +1,4 @@ SiteTree: - content_review_gridfield_threshold: 500 extensions: - SiteTreeContentReview Group: @@ -15,5 +14,6 @@ CMSPageSettingsController: extensions: - ContentReviewCMSExtension SiteConfig: + content_review_gridfield_threshold: 2000 extensions: - ContentReviewDefaultSettings \ No newline at end of file diff --git a/code/extensions/ContentReviewDefaultSettings.php b/code/extensions/ContentReviewDefaultSettings.php index 3b2ceab..aba5bde 100644 --- a/code/extensions/ContentReviewDefaultSettings.php +++ b/code/extensions/ContentReviewDefaultSettings.php @@ -51,6 +51,15 @@ class ContentReviewDefaultSettings extends DataExtension */ private static $content_review_template = 'ContentReviewEmail'; + /** + * The number of members in which the dropdown will morph into a gridfield + * + * @config + * + * @var int + */ + private static $content_review_gridfield_threshold = 500; + /** * @return string */ @@ -120,19 +129,18 @@ class ContentReviewDefaultSettings extends DataExtension $usersMap = $users->map('ID', 'Title')->toArray(); asort($usersMap); - $userField = ListboxField::create('OwnerUsers', _t('ContentReview.PAGEOWNERUSERS', 'Users'), $usersMap) - ->setMultiple(true) - ->setAttribute('data-placeholder', _t('ContentReview.ADDUSERS', 'Add users')) - ->setDescription(_t('ContentReview.OWNERUSERSDESCRIPTION', 'Page owners that are responsible for reviews')); - - - if(Member::get()->count() > Config::inst()->get('SiteTree', 'content_review_gridfield_threshold')) { - $gridfieldconfig = GridFieldConfig_RelationEditor::create(); - $gridfieldconfig->removeComponentsByType(new GridFieldAddNewButton()); - $userField = GridField::create('OwnerUsers', _t("ContentReview.PAGEOWNERUSERS", "Users"), - $this->OwnerUsers()->Sort('FirstName'), $gridfieldconfig) - ->setDescription(_t('ContentReview.OWNERUSERSDESCRIPTION', 'Page owners that are responsible for reviews')); - } + if(Member::get()->count() > Config::inst()->get('SiteConfig', 'content_review_gridfield_threshold')) { + $gridfieldconfig = GridFieldConfig_RelationEditor::create(); + $gridfieldconfig->removeComponentsByType(new GridFieldAddNewButton()); + $userField = GridField::create('OwnerUsers', _t("ContentReview.PAGEOWNERUSERS", "Users"), + $this->OwnerUsers()->Sort('FirstName'), $gridfieldconfig) + ->setDescription(_t('ContentReview.OWNERUSERSDESCRIPTION', 'Page owners that are responsible for reviews')); + } else { + $userField = ListboxField::create('OwnerUsers', _t('ContentReview.PAGEOWNERUSERS', 'Users'), $usersMap) + ->setMultiple(true) + ->setAttribute('data-placeholder', _t('ContentReview.ADDUSERS', 'Add users')) + ->setDescription(_t('ContentReview.OWNERUSERSDESCRIPTION', 'Page owners that are responsible for reviews')); + } $fields->addFieldToTab('Root.ContentReview', $userField); diff --git a/code/extensions/SiteTreeContentReview.php b/code/extensions/SiteTreeContentReview.php index d9588b0..8364f9e 100644 --- a/code/extensions/SiteTreeContentReview.php +++ b/code/extensions/SiteTreeContentReview.php @@ -347,20 +347,21 @@ class SiteTreeContentReview extends DataExtension implements PermissionProvider $users = Permission::get_members_by_permission(array("CMS_ACCESS_CMSMain", "ADMIN")); $usersMap = $users->map("ID", "Title")->toArray(); asort($usersMap); - $userField = ListboxField::create("OwnerUsers", _t("ContentReview.PAGEOWNERUSERS", "Users"), $usersMap) - ->setMultiple(true) - ->addExtraClass('custom-setting') - ->setAttribute("data-placeholder", _t("ContentReview.ADDUSERS", "Add users")) - ->setDescription(_t('ContentReview.OWNERUSERSDESCRIPTION', 'Page owners that are responsible for reviews')); - if(Member::get()->count() > Config::inst()->get('SiteTree', 'content_review_gridfield_threshold')) { - // grid field for large numbers of users - $gridfieldconfig = GridFieldConfig_RelationEditor::create(); - $gridfieldconfig->removeComponentsByType(new GridFieldAddNewButton()); - $userField = GridField::create('OwnerUsers', _t("ContentReview.PAGEOWNERUSERS", "Users"), - $this->OwnerUsers(), $gridfieldconfig) - ->setDescription(_t('ContentReview.OWNERUSERSDESCRIPTION', 'Page owners that are responsible for reviews')); - } + if(Member::get()->count() > Config::inst()->get('SiteConfig', 'content_review_gridfield_threshold')) { + // grid field for large numbers of users + $gridfieldconfig = GridFieldConfig_RelationEditor::create(); + $gridfieldconfig->removeComponentsByType(new GridFieldAddNewButton()); + $userField = GridField::create('OwnerUsers', _t("ContentReview.PAGEOWNERUSERS", "Users"), + $this->OwnerUsers(), $gridfieldconfig) + ->setDescription(_t('ContentReview.OWNERUSERSDESCRIPTION', 'Page owners that are responsible for reviews')); + } else { + $userField = ListboxField::create("OwnerUsers", _t("ContentReview.PAGEOWNERUSERS", "Users"), $usersMap) + ->setMultiple(true) + ->addExtraClass('custom-setting') + ->setAttribute("data-placeholder", _t("ContentReview.ADDUSERS", "Add users")) + ->setDescription(_t('ContentReview.OWNERUSERSDESCRIPTION', 'Page owners that are responsible for reviews')); + } $groupsMap = array(); diff --git a/tests/SiteTreeContentReviewTest.php b/tests/SiteTreeContentReviewTest.php index fbdb9d6..9fe993b 100644 --- a/tests/SiteTreeContentReviewTest.php +++ b/tests/SiteTreeContentReviewTest.php @@ -334,4 +334,34 @@ class SiteTreeContentReviewTest extends ContentReviewBaseTest SS_Datetime::clear_mock_now(); } + public function testSiteSettingsFieldsListBox() + { + $author = $this->objFromFixture("Member", "editor"); + + $this->logInAs($author); + + /** @var Page|SiteTreeContentReview $page */ + $page = $this->objFromFixture("Page", "contact"); + + $fields = $page->getSettingsFields(); + + $this->assertTrue($fields->dataFieldByName('OwnerUsers') instanceof ListboxField); + } + + public function testSiteSettingsFieldsGridfield() + { + $author = $this->objFromFixture("Member", "editor"); + + $this->logInAs($author); + + /** @var Page|SiteTreeContentReview $page */ + $page = $this->objFromFixture("Page", "contact"); + + // update the minimum threshhold to change to gridfield + Config::inst()->update('SiteConfig', 'content_review_gridfield_threshold', 1); + + $fields = $page->getSettingsFields(); + + $this->assertTrue($fields->dataFieldByName('OwnerUsers') instanceof GridField); + } }