API CHANGE: Added includeMainSite argument to Subsite::accessible_sites() and replaced all usage of hasMainSitePermission with this method. (from r88971)

This commit is contained in:
Tom Rix 2010-03-01 21:32:37 +00:00
parent 2b97d272f2
commit 7d46edfd0e
4 changed files with 30 additions and 37 deletions

View File

@ -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',

View File

@ -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() {

View File

@ -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(

View File

@ -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;
}