From 4bacd35fc44640208bb2f01ee68676a9701ba40a Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Thu, 1 Jun 2017 21:37:48 +1200 Subject: [PATCH] List "view/edit all" groups in group permission field See https://github.com/silverstripe/silverstripe-cms/issues/794 --- code/Model/SiteTree.php | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/code/Model/SiteTree.php b/code/Model/SiteTree.php index 7f220b43..c128d9ed 100755 --- a/code/Model/SiteTree.php +++ b/code/Model/SiteTree.php @@ -1926,12 +1926,18 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi */ public function getSettingsFields() { - $groupsMap = array(); - foreach (Group::get() as $group) { - // Listboxfield values are escaped, use ASCII char instead of » - $groupsMap[$group->ID] = $group->getBreadcrumbs(' > '); - } - asort($groupsMap); + $mapFn = function ($groups = []) { + $map = []; + foreach ($groups as $group) { + // Listboxfield values are escaped, use ASCII char instead of » + $map[$group->ID] = $group->getBreadcrumbs(' > '); + } + asort($map); + return $map; + }; + $groupsMap = $mapFn(Group::get()); + $viewAllGroupsMap = $mapFn(Permission::get_groups_by_permission(['SITETREE_VIEW_ALL', 'ADMIN'])); + $editAllGroupsMap = $mapFn(Permission::get_groups_by_permission(['SITETREE_EDIT_ALL', 'ADMIN'])); $fields = new FieldList( $rootTab = new TabSet( @@ -2017,6 +2023,22 @@ class SiteTree extends DataObject implements PermissionProvider, i18nEntityProvi unset($editorsOptionsSource[InheritedPermissions::ANYONE]); $editorsOptionsField->setSource($editorsOptionsSource); + if ($viewAllGroupsMap) { + $viewerGroupsField->setDescription(_t( + 'SilverStripe\\CMS\\Model\\SiteTree.VIEWER_GROUPS_FIELD_DESC', + 'Groups with global view permissions: {groupList}', + ['groupList' => implode(', ', array_values($viewAllGroupsMap))] + )); + } + + if ($editAllGroupsMap) { + $editorGroupsField->setDescription(_t( + 'SilverStripe\\CMS\\Model\\SiteTree.EDITOR_GROUPS_FIELD_DESC', + 'Groups with global edit permissions: {groupList}', + ['groupList' => implode(', ', array_values($editAllGroupsMap))] + )); + } + if (!Permission::check('SITETREE_GRANT_ACCESS')) { $fields->makeFieldReadonly($viewersOptionsField); if ($this->CanEditType === InheritedPermissions::ONLY_THESE_USERS) {