From e938c60e9a23a019ba67ba23da7ebb3ac21df59e Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Sun, 4 Mar 2012 22:10:25 +0100 Subject: [PATCH 01/20] ENHANCEMENT Using chosen.js selection instead of a TreeDropdownField to select groups in SiteConfig->getCMSFields() and SiteTree->getCMSFields() --- code/model/SiteConfig.php | 12 +++++++++--- code/model/SiteTree.php | 9 +++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/code/model/SiteConfig.php b/code/model/SiteConfig.php index ae23562f..1d9d537b 100644 --- a/code/model/SiteConfig.php +++ b/code/model/SiteConfig.php @@ -44,6 +44,9 @@ class SiteConfig extends DataObject implements PermissionProvider { function getCMSFields() { Requirements::javascript(CMS_DIR . "/javascript/SitetreeAccess.js"); + $groupsMap = DataList::create('Group')->map('ID', 'Breadcrumbs')->toArray(); + asort($groupsMap); + $fields = new FieldList( new TabSet("Root", $tabMain = new Tab('Main', @@ -53,11 +56,14 @@ class SiteConfig extends DataObject implements PermissionProvider { ), $tabAccess = new Tab('Access', $viewersOptionsField = new OptionsetField("CanViewType", _t('SiteConfig.VIEWHEADER', "Who can view pages on this site?")), - $viewerGroupsField = new TreeMultiselectField("ViewerGroups", _t('SiteTree.VIEWERGROUPS', "Viewer Groups")), + $viewerGroupsField = Object::create('ListboxField', "ViewerGroups", _t('SiteTree.VIEWERGROUPS', "Viewer Groups")) + ->setMultiple(true)->setSource($groupsMap), $editorsOptionsField = new OptionsetField("CanEditType", _t('SiteConfig.EDITHEADER', "Who can edit pages on this site?")), - $editorGroupsField = new TreeMultiselectField("EditorGroups", _t('SiteTree.EDITORGROUPS', "Editor Groups")), + $editorGroupsField = Object::create('ListboxField', "EditorGroups", _t('SiteTree.EDITORGROUPS', "Editor Groups")) + ->setMultiple(true)->setSource($groupsMap), $topLevelCreatorsOptionsField = new OptionsetField("CanCreateTopLevelType", _t('SiteConfig.TOPLEVELCREATE', "Who can create pages in the root of the site?")), - $topLevelCreatorsGroupsField = new TreeMultiselectField("CreateTopLevelGroups", _t('SiteTree.TOPLEVELCREATORGROUPS', "Top level creators")) + $topLevelCreatorsGroupsField = Object::create('ListboxField', "CreateTopLevelGroups", _t('SiteTree.TOPLEVELCREATORGROUPS', "Top level creators")) + ->setMultiple(true)->setSource($groupsMap) ) ) ); diff --git a/code/model/SiteTree.php b/code/model/SiteTree.php index ff63dac9..162f1ab4 100644 --- a/code/model/SiteTree.php +++ b/code/model/SiteTree.php @@ -1890,6 +1890,9 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid * @return FieldList */ function getSettingsFields() { + $groupsMap = DataList::create('Group')->map('ID', 'Breadcrumbs')->toArray(); + asort($groupsMap); + $fields = new FieldList( $rootTab = new TabSet("Root", $tabBehaviour = new Tab('Settings', @@ -1925,12 +1928,14 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid "CanViewType", _t('SiteTree.ACCESSHEADER', "Who can view this page?") ), - $viewerGroupsField = new TreeMultiselectField("ViewerGroups", $this->fieldLabel('ViewerGroups')), + $viewerGroupsField = Object::create('ListboxField', "ViewerGroups", _t('SiteTree.VIEWERGROUPS', "Viewer Groups")) + ->setMultiple(true)->setSource($groupsMap), $editorsOptionsField = new OptionsetField( "CanEditType", _t('SiteTree.EDITHEADER', "Who can edit this page?") ), - $editorGroupsField = new TreeMultiselectField("EditorGroups", $this->fieldLabel('EditorGroups')) + $editorGroupsField = Object::create('ListboxField', "EditorGroups", _t('SiteTree.EDITORGROUPS', "Editor Groups")) + ->setMultiple(true)->setSource($groupsMap) ) ) ); From e0a67a80c722b79fcb52263b35db9cae0b1fc28e Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Mon, 5 Mar 2012 16:07:53 +0100 Subject: [PATCH 02/20] BUGFIX Restored old permission code model, broken due to new controller structure. Introduced LeftAndMain::$required_permission_codes as a way to control permissions independently of subclasses, and "cluster" multiple classes under a single code. --- code/controllers/AssetAdmin.php | 12 ++++- code/controllers/CMSFileAddController.php | 2 +- code/controllers/CMSMain.php | 50 +++++-------------- code/controllers/CMSPageAddController.php | 1 + code/controllers/CMSPageEditController.php | 1 + code/controllers/CMSPageHistoryController.php | 1 + .../controllers/CMSPageSettingsController.php | 3 +- code/controllers/CMSPagesController.php | 1 + code/controllers/ReportAdmin.php | 12 ++++- code/model/SiteTree.php | 2 +- lang/en_US.php | 2 +- 11 files changed, 43 insertions(+), 44 deletions(-) diff --git a/code/controllers/AssetAdmin.php b/code/controllers/AssetAdmin.php index bf707c96..34839bf0 100644 --- a/code/controllers/AssetAdmin.php +++ b/code/controllers/AssetAdmin.php @@ -6,7 +6,7 @@ * @package cms * @subpackage assets */ -class AssetAdmin extends LeftAndMain { +class AssetAdmin extends LeftAndMain implements PermissionProvider{ static $url_segment = 'assets'; @@ -558,6 +558,16 @@ JS return $items; } + + function providePermissions() { + $title = _t("AssetAdmin.MENUTITLE", LeftAndMain::menu_title_for_class($this->class)); + return array( + "CMS_ACCESS_AssetAdmin" => array( + 'name' => sprintf(_t('CMSMain.ACCESS', "Access to '%s' section"), $title), + 'category' => _t('Permission.CMS_ACCESS_CATEGORY', 'CMS Access') + ) + ); + } } /** diff --git a/code/controllers/CMSFileAddController.php b/code/controllers/CMSFileAddController.php index 5487aa6f..4d94051e 100644 --- a/code/controllers/CMSFileAddController.php +++ b/code/controllers/CMSFileAddController.php @@ -2,8 +2,8 @@ class CMSFileAddController extends AssetAdmin { static $url_segment = 'assets/add'; - static $url_priority = 60; + static $required_permission_codes = 'CMS_ACCESS_AssetAdmin'; // public function upload($request) { // $formHtml = $this->renderWith(array('AssetAdmin_UploadContent')); diff --git a/code/controllers/CMSMain.php b/code/controllers/CMSMain.php index 1384c32c..8a0765f4 100644 --- a/code/controllers/CMSMain.php +++ b/code/controllers/CMSMain.php @@ -553,7 +553,8 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr $form->setTemplate($this->getTemplatesWithSuffix('_EditForm')); // Use