From 7d46edfd0ee9fa558fa8bacc82466a408948da73 Mon Sep 17 00:00:00 2001 From: Tom Rix Date: Mon, 1 Mar 2010 21:32:37 +0000 Subject: [PATCH] API CHANGE: Added includeMainSite argument to Subsite::accessible_sites() and replaced all usage of hasMainSitePermission with this method. (from r88971) --- code/GroupSubsites.php | 10 ++-------- code/LeftAndMainSubsites.php | 32 +++++++++++++------------------- code/RelatedPageLink.php | 6 +----- code/Subsite.php | 19 ++++++++++++++----- 4 files changed, 30 insertions(+), 37 deletions(-) diff --git a/code/GroupSubsites.php b/code/GroupSubsites.php index 8e76ee2..1019ed9 100644 --- a/code/GroupSubsites.php +++ b/code/GroupSubsites.php @@ -19,14 +19,8 @@ class GroupSubsites extends DataObjectDecorator implements PermissionProvider { function updateCMSFields(&$fields) { if($this->owner->canEdit() ){ - $subsiteMap = array(); - if(Subsite::hasMainSitePermission(Member::currentUser(), array('ADMIN', 'SECURITY_SUBSITE_GROUP'))) { - $subsiteMap[0] = 'Main site'; - } - $subsites = Subsite::accessible_sites(array('ADMIN', 'SECURITY_SUBSITE_GROUP')); - if($subsites) foreach($subsites as $subsite) { - $subsiteMap[$subsite->ID] = $subsite->Title; - } + $subsites = Subsite::accessible_sites(array('ADMIN', 'SECURITY_SUBSITE_GROUP'), true); + $subsiteMap = $subsites->toDropdownMap(); $tab = $fields->findOrMakeTab( 'Root.Subsites', diff --git a/code/LeftAndMainSubsites.php b/code/LeftAndMainSubsites.php index 12875eb..b48e841 100644 --- a/code/LeftAndMainSubsites.php +++ b/code/LeftAndMainSubsites.php @@ -56,39 +56,33 @@ class LeftAndMainSubsites extends Extension { } public function Subsites() { - $siteList = new DataObjectSet(); - $subsites = Subsite::accessible_sites('CMS_ACCESS_' . $this->owner->class); - + $accessPerm = 'CMS_ACCESS_'. $this->owner->class; if(defined('DB::USE_ANSI_SQL')) $q="\""; else $q='`'; - $mainSiteTitle = null; switch($this->owner->class) { case "AssetAdmin": - $mainSiteTitle = "Shared files & images"; break; - case "SecurityAdmin": - $mainSiteTitle = "Groups accessing all sites"; - $siteList->push(new ArrayData(array('Title' => 'All groups', 'ID' => -1))); + $subsites = Subsite::accessible_sites($accessPerm, true, "Shared files & images"); break; + + case "SecurityAdmin": + $subsites = Subsite::accessible_sites($accessPerm, true, "Groups accessing all sites"); + $subsites->push(new ArrayData(array('Title' => 'All groups', 'ID' => -1))); + break; + case "CMSMain": // If there's a default site then main site has no meaning - if(!DataObject::get_one('Subsite', "{$q}DefaultSite{$q} = 1 AND {$q}IsPublic{$q} = 1")) { - $mainSiteTitle = "Main site"; - } + $showMainSite = !DataObject::get_one('Subsite',"{$q}DefaultSite{$q} AND {$q}IsPublic{$q}"); + $subsites = Subsite::accessible_sites($accessPerm, $showMainSite); break; + default: - $mainSiteTitle = "Main site"; + $subsites = Subsite::accessible_sites($accessPerm); break; } - if($mainSiteTitle && Subsite::hasMainSitePermission(Member::currentUser(), array('CMS_ACCESS_' . $this->owner->class, 'ADMIN'))) - $siteList->push(new ArrayData(array('Title' => $mainSiteTitle, 'ID' => 0))); - - if($subsites) - $siteList->merge($subsites); - - return $siteList; + return $subsites; } public function SubsiteList() { diff --git a/code/RelatedPageLink.php b/code/RelatedPageLink.php index 6235c30..ea8f119 100644 --- a/code/RelatedPageLink.php +++ b/code/RelatedPageLink.php @@ -18,12 +18,8 @@ class RelatedPageLink extends DataObject { ); function getCMSFields() { - $subsites = Subsite::accessible_sites("CMS_ACCESS_CMSMain"); + $subsites = Subsite::accessible_sites("CMS_ACCESS_CMSMain", true); if(!$subsites) $subsites = new DataObjectSet(); - - if(Subsite::hasMainSitePermission(null, array("CMS_ACCESS_CMSMain"))) { - $subsites->push(new ArrayData(array('Title' => 'Main site', 'ID' => 0))); - } if($subsites->Count()) { $subsiteSelectionField = new DropdownField( diff --git a/code/Subsite.php b/code/Subsite.php index c51b3d1..3741ff6 100644 --- a/code/Subsite.php +++ b/code/Subsite.php @@ -417,8 +417,10 @@ JS; * Sites and Templates will only be included if they have a Title * * @param $permCode array|string Either a single permission code or an array of permission codes. + * @param $includeMainSite If true, the main site will be included if appropriate. + * @param $mainSiteTitle The label to give to the main site */ - function accessible_sites($permCode) { + function accessible_sites($permCode, $includeMainSite = false, $mainSiteTitle = "Main site") { $member = Member::currentUser(); if(is_array($permCode)) $SQL_codes = "'" . implode("', '", Convert::raw2sql($permCode)) . "'"; @@ -426,10 +428,6 @@ JS; if(!$member) return new DataObjectSet(); - if (Permission::check('ADMIN') || Permission::check('SUBSITE_ACCESS_ALL')) { - return DataObject::get('Subsite'); - } - $templateClassList = "'" . implode("', '", ClassInfo::subclassesFor("Subsite_Template")) . "'"; if(defined('DB::USE_ANSI_SQL')) @@ -467,6 +465,17 @@ JS; $subsites->push($subsite); } } + + // Include the main site + if(!$subsites) $subsites = new DataObjectSet(); + if($includeMainSite) { + if(!is_array($permCode)) $permCode = array($permCode); + if(self::hasMainSitePermission($member, $permCode)) { + $mainSite = new Subsite(); + $mainSite->Title = $mainSiteTitle; + $subsites->insertFirst($mainSite); + } + } return $subsites; }