mirror of
https://github.com/silverstripe/silverstripe-subsites
synced 2024-09-29 20:59:10 +02:00
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:
parent
2b97d272f2
commit
7d46edfd0e
@ -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',
|
||||
|
@ -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() {
|
||||
|
@ -18,13 +18,9 @@ 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(
|
||||
"CopyContentFromID_SubsiteID",
|
||||
|
@ -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'))
|
||||
@ -468,6 +466,17 @@ JS;
|
||||
}
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user