owner->class}.currentPage"); } // Update current subsite in session Subsite::changeSubsite($_GET['SubsiteID']); //Redirect to clear the current page $this->owner->redirect('admin/pages'); } } /** * Set the title of the CMS tree */ function getCMSTreeTitle() { $subsite = Subsite::currentSubSite(); return $subsite ? Convert::raw2xml($subsite->Title) : _t('LeftAndMain.SITECONTENTLEFT'); } function updatePageOptions(&$fields) { $fields->push(new HiddenField('SubsiteID', 'SubsiteID', Subsite::currentSubsiteID())); } public function Subsites() { $accessPerm = 'CMS_ACCESS_'. $this->owner->class; switch($this->owner->class) { case "AssetAdmin": $subsites = Subsite::accessible_sites($accessPerm, true, "Shared files & images"); break; case "SecurityAdmin": $subsites = Subsite::accessible_sites($accessPerm, true, "Groups accessing all sites"); if($subsites->find('ID',0)) { $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 $showMainSite = !DataObject::get_one('Subsite',"\"DefaultSite\"=1 AND \"IsPublic\"=1"); $subsites = Subsite::accessible_sites($accessPerm, $showMainSite); break; case "SubsiteAdmin": $subsites = Subsite::accessible_sites('ADMIN', true); break; default: $subsites = Subsite::accessible_sites($accessPerm); break; } return $subsites; } public function SubsiteList() { $list = $this->Subsites(); $currentSubsiteID = Subsite::currentSubsiteID(); if($list->Count() > 1) { $output = ''; Requirements::javascript('subsites/javascript/LeftAndMain_Subsites.js'); return $output; } else if($list->Count() == 1) { if($list->First()->DefaultSite==false) { $output = ''; Requirements::javascript('subsites/javascript/LeftAndMain_Subsites.js'); return $output; }else { return ''.$list->First()->Title.''; } } } public function CanAddSubsites() { return Permission::check("ADMIN", "any", null, "all"); } /** * Alternative security checker for LeftAndMain. * If security isn't found, then it will switch to a subsite where we do have access. */ public function alternateAccessCheck() { $className = $this->owner->class; // Switch to the subsite of the current page if ($this->owner->class == 'CMSMain' && $currentPage = $this->owner->currentPage()) { if (Subsite::currentSubsiteID() != $currentPage->SubsiteID) { Subsite::changeSubsite($currentPage->SubsiteID); } } // Switch to a subsite that this user can actually access. $member = Member::currentUser(); if($member && Permission::checkMember($member, 'ADMIN')) return true; // admin can access all subsites $sites = Subsite::accessible_sites("CMS_ACCESS_{$this->owner->class}", true)->map('ID', 'Title'); if(is_object($sites)) $sites = $sites->toArray(); if($sites && !isset($sites[Subsite::currentSubsiteID()])) { $siteIDs = array_keys($sites); Subsite::changeSubsite($siteIDs[0]); return true; } // Switch to a different top-level menu item $menu = CMSMenu::get_menu_items(); foreach($menu as $candidate) { if($candidate->controller != $this->owner->class) { $sites = Subsite::accessible_sites("CMS_ACCESS_{$candidate->controller}", true)->map('ID', 'Title'); if(is_object($sites)) $sites = $sites->toArray(); if($sites && !isset($sites[Subsite::currentSubsiteID()])) { $siteIDs = array_keys($sites); Subsite::changeSubsite($siteIDs[0]); $cClass = $candidate->controller; $cObj = new $cClass(); $this->owner->redirect($cObj->Link()); return null; } } } // If all of those fail, you really don't have access to the CMS return null; } function augmentNewSiteTreeItem(&$item) { $item->SubsiteID = isset($_POST['SubsiteID']) ? $_POST['SubsiteID'] : Subsite::currentSubsiteID(); } function onAfterSave($record) { if($record->hasMethod('NormalRelated') && ($record->NormalRelated() || $record->ReverseRelated())) { $this->owner->response->addHeader('X-Status', rawurlencode(_t('LeftAndMainSubsites.Saved', 'Saved, please update related pages.'))); } } }