diff --git a/_config.php b/_config.php index 4dc1385..f244a00 100644 --- a/_config.php +++ b/_config.php @@ -15,6 +15,8 @@ Object::add_extension('LeftAndMain', 'ControllerSubsites'); Object::add_extension('Group', 'GroupSubsites'); Object::add_extension('File', 'FileSubsites'); Object::add_extension('ErrorPage', 'ErrorPageSubsite'); -if (class_exists('SiteConfig')) Object::add_extension('SiteConfig', 'SiteConfigSubsites'); +Object::add_extension('SiteConfig', 'SiteConfigSubsites'); + +SS_Report::add_excluded_reports('SubsiteReportWrapper'); ?> \ No newline at end of file diff --git a/code/SubsiteAdmin.php b/code/SubsiteAdmin.php index e1ffa29..2cad9f1 100644 --- a/code/SubsiteAdmin.php +++ b/code/SubsiteAdmin.php @@ -6,83 +6,26 @@ */ class SubsiteAdmin extends ModelAdmin { - static $managed_models = array('Subsite'); + static $managed_models = array('Subsite', 'Subsite_Template'); static $url_segment = 'subsites'; static $menu_title = "Subsites"; + + public $showImportForm=false; - static $collection_controller_class = "SubsiteAdmin_CollectionController"; -} - -class SubsiteAdmin_CollectionController extends ModelAdmin_CollectionController { - function AddForm() { - $form = parent::AddForm(); - - $templates = DataObject::get('Subsite_Template', '', 'Title'); - $templateArray = array('' => "(No template)"); - if($templates) { - $templateArray = $templateArray + $templates->map('ID', 'Title'); - } - - $form->Fields()->addFieldsToTab('Root.Configuration', array( - new DropdownField('Type', 'Type', array( - 'subsite' => 'New site', - 'template' => 'New template', - )), - new DropdownField('TemplateID', 'Copy structure from:', $templateArray) - )); + public function getEditForm($id = null) { + $form = parent::getEditForm($id); + if($this->modelClass=='Subsite') { + $grid=$form->Fields()->dataFieldByName('Subsite'); + if($grid) { + $grid->getConfig()->addComponent(new GridFieldAddFromTemplateButton('toolbar-header-right')); + $grid->getConfig()->addComponent(new GridFieldAddFromTemplate()); + } + } + + return $form; } - - function doCreate($data, $form, $request) { - if(isset($data['TemplateID']) && $data['TemplateID']) { - $template = DataObject::get_by_id('Subsite_Template', $data['TemplateID']); - } else { - $template = null; - } - - // Create subsite from existing template - switch($data['Type']) { - case 'template': - if($template) $subsite = $template->duplicate(); - else { - $subsite = new Subsite_Template(); - $subsite->write(); - } - break; - - case 'subsite': - default: - if($template) $subsite = $template->createInstance($data['Title']); - else { - $subsite = new Subsite(); - $subsite->Title = $data['Title']; - $subsite->write(); - } - break; - } - - $form->dataFieldByName('Domains')->setExtraData(array( - "SubsiteID" => $subsite->ID, - )); - $form->saveInto($subsite); - $subsite->write(); - - if(Director::is_ajax()) { - $recordController = new ModelAdmin_RecordController($this, $request, $subsite->ID); - return new SS_HTTPResponse( - $recordController->EditForm()->forAjaxTemplate(), - 200, - sprintf( - _t('ModelAdmin.LOADEDFOREDITING', "Loaded '%s' for editing."), - $subsite->Title - ) - ); - } else { - Director::redirect(Controller::join_links($this->Link(), $subsitess->ID , 'edit')); - } - } } - ?> diff --git a/code/SubsiteDomain.php b/code/SubsiteDomain.php deleted file mode 100644 index 51964d6..0000000 --- a/code/SubsiteDomain.php +++ /dev/null @@ -1,20 +0,0 @@ - "Varchar(255)", - "IsPrimary" => "Boolean", - ); - static $has_one = array( - "Subsite" => "Subsite", - ); - - /** - * Whenever a Subsite Domain is written, rewrite the hostmap - * - * @return void - */ - public function onAfterWrite() { - Subsite::writeHostMap(); - } -} \ No newline at end of file diff --git a/code/SubsiteReportWrapper.php b/code/SubsiteReportWrapper.php index 6a698eb..a229e19 100644 --- a/code/SubsiteReportWrapper.php +++ b/code/SubsiteReportWrapper.php @@ -24,7 +24,7 @@ class SubsiteReportWrapper extends SS_ReportWrapper { if($fields) { $fields->insertBefore($subsiteField, $fields->First()->Name()); } else { - $fields = new FieldSet($subsiteField); + $fields = new FieldList($subsiteField); } return $fields; } diff --git a/code/SubsitesTreeDropdownField.php b/code/SubsitesTreeDropdownField.php deleted file mode 100644 index 70cf127..0000000 --- a/code/SubsitesTreeDropdownField.php +++ /dev/null @@ -1,60 +0,0 @@ -subsiteID = $id; - } - - function getSubsiteID() { - return $this->subsiteID; - } - - function gettree(SS_HTTPRequest $request) { - $oldSubsiteID = Session::get('SubsiteID'); - Session::set('SubsiteID', $this->subsiteID); - - $results = parent::tree($request); - - Session::set('SubsiteID', $oldSubsiteID); - - return $results; - } - - public function getsubtree(SS_HTTPRequest $request) { - $oldSubsiteID = Session::get('SubsiteID'); - Session::set('SubsiteID', $this->subsiteID); - - $obj = $this->objectForKey($_REQUEST['SubtreeRootID']); - - if(!$obj) user_error("Can't find database record $this->sourceObject with $this->keyField = $_REQUEST[SubtreeRootID]", E_USER_ERROR); - - if($this->filterFunc) $obj->setMarkingFilterFunction($this->filterFunc); - else if($this->sourceObject == 'Folder') $obj->setMarkingFilter('ClassName', 'Folder'); - $obj->markPartialTree(); - - $eval = '"
  • name . '-$child->' . $this->keyField . '\" class=\"$child->class" . $child->markingClasses() . "\">" . $child->' . $this->labelField . ' . ""'; - $tree = $obj->getChildrenAsUL("", $eval, null, true); - echo substr(trim($tree), 4,-5); - - Session::set('SubsiteID', $oldSubsiteID); - } - -} \ No newline at end of file diff --git a/code/SubsitesVirtualPage.php b/code/SubsitesVirtualPage.php index afa5523..a333d96 100644 --- a/code/SubsitesVirtualPage.php +++ b/code/SubsitesVirtualPage.php @@ -1,27 +1,32 @@ 'Varchar(255)', 'CustomMetaKeywords' => 'Varchar(255)', 'CustomMetaDescription' => 'Text', 'CustomExtraMeta' => 'HTMLText' ); - function getCMSFields() { + public function getCMSFields() { $fields = parent::getCMSFields(); $subsites = DataObject::get('Subsite'); - if(!$subsites) $subsites = new DataObjectSet(); + if(!$subsites) { + $subsites = new ArrayList(); + }else { + $subsites=ArrayList::create($subsites->toArray()); + } + $subsites->push(new ArrayData(array('Title' => 'Main site', 'ID' => 0))); $subsiteSelectionField = new DropdownField( "CopyContentFromID_SubsiteID", "Subsite", - $subsites->toDropdownMap('ID', 'Title'), + $subsites->map('ID', 'Title'), ($this->CopyContentFromID) ? $this->CopyContentFrom()->SubsiteID : Session::get('SubsiteID') ); $fields->addFieldToTab( - 'Root.Content.Main', + 'Root.Main', $subsiteSelectionField, 'CopyContentFromID' ); @@ -36,36 +41,37 @@ class SubsitesVirtualPage extends VirtualPage { ); if(Controller::has_curr() && Controller::curr()->getRequest()) { - $subsiteID = Controller::curr()->getRequest()->getVar('CopyContentFromID_SubsiteID'); + $subsiteID = Controller::curr()->getRequest()->postVar('CopyContentFromID_SubsiteID'); $pageSelectionField->setSubsiteID($subsiteID); } $fields->replaceField('CopyContentFromID', $pageSelectionField); // Create links back to the original object in the CMS if($this->CopyContentFromID) { - $editLink = "admin/show/$this->CopyContentFromID/?SubsiteID=" . $this->CopyContentFrom()->SubsiteID; + $editLink = "admin/page/edit/show/$this->CopyContentFromID/?SubsiteID=" . $this->CopyContentFrom()->SubsiteID; $linkToContent = " " . _t('VirtualPage.EDITCONTENT', 'Click here to edit the content') . ""; $fields->removeByName("VirtualPageContentLinkLabel"); $fields->addFieldToTab( - "Root.Content.Main", + "Root.Main", $linkToContentLabelField = new LabelField('VirtualPageContentLinkLabel', $linkToContent), 'Title' ); $linkToContentLabelField->setAllowHTML(true); } - - $fields->addFieldToTab('Root.Content.Metadata', new TextField('CustomMetaTitle', 'Title (overrides inherited value from the source)'), 'MetaTitle'); - $fields->addFieldToTab('Root.Content.Metadata', new TextareaField('CustomMetaKeywords', 'Keywords (overrides inherited value from the source)'), 'MetaKeywords'); - $fields->addFieldToTab('Root.Content.Metadata', new TextareaField('CustomMetaDescription', 'Description (overrides inherited value from the source)'), 'MetaDescription'); - $fields->addFieldToTab('Root.Content.Metadata', new TextField('CustomExtraMeta', 'Custom Meta Tags (overrides inherited value from the source)'), 'ExtraMeta'); + + + $fields->addFieldToTab('Root.Metadata', new TextField('CustomMetaTitle', 'Title (overrides inherited value from the source)'), 'MetaTitle'); + $fields->addFieldToTab('Root.Metadata', new TextareaField('CustomMetaKeywords', 'Keywords (overrides inherited value from the source)'), 'MetaKeywords'); + $fields->addFieldToTab('Root.Metadata', new TextareaField('CustomMetaDescription', 'Description (overrides inherited value from the source)'), 'MetaDescription'); + $fields->addFieldToTab('Root.Metadata', new TextField('CustomExtraMeta', 'Custom Meta Tags (overrides inherited value from the source)'), 'ExtraMeta'); return $fields; } - function getVirtualFields() { + public function getVirtualFields() { $fields = parent::getVirtualFields(); foreach($fields as $k => $v) { if($v == 'SubsiteID') unset($fields[$k]); @@ -76,14 +82,14 @@ class SubsitesVirtualPage extends VirtualPage { return $fields; } - function syncLinkTracking() { + public function syncLinkTracking() { $oldState = Subsite::$disable_subsite_filter; Subsite::$disable_subsite_filter = true; if ($this->CopyContentFromID) $this->HasBrokenLink = DataObject::get_by_id('SiteTree', $this->CopyContentFromID) ? false : true; Subsite::$disable_subsite_filter = $oldState; } - function onBeforeWrite() { + public function onBeforeWrite() { parent::onBeforeWrite(); if($this->CustomMetaTitle) $this->MetaTitle = $this->CustomMetaTitle; @@ -104,7 +110,7 @@ class SubsitesVirtualPage extends VirtualPage { } } - function validURLSegment() { + public function validURLSegment() { $isValid = parent::validURLSegment(); // Veto the validation rules if its false. In this case, some logic @@ -146,13 +152,13 @@ class SubsitesVirtualPage extends VirtualPage { class SubsitesVirtualPage_Controller extends VirtualPage_Controller { - function reloadContent() { + public function reloadContent() { $this->failover->copyFrom($this->failover->CopyContentFrom()); $this->failover->write(); return; } - function init(){ + public function init(){ $origDisableSubsiteFilter = Subsite::$disable_subsite_filter; Subsite::$disable_subsite_filter = true; diff --git a/code/ControllerSubsites.php b/code/extensions/ControllerSubsites.php similarity index 94% rename from code/ControllerSubsites.php rename to code/extensions/ControllerSubsites.php index 5eca052..82b3cfd 100644 --- a/code/ControllerSubsites.php +++ b/code/extensions/ControllerSubsites.php @@ -1,20 +1,20 @@ -Theme) - SSViewer::set_theme($theme); - } - } - - function CurrentSubsite(){ - if($subsite = Subsite::currentSubsite()){ - return $subsite; - } - } -} - +Theme) + SSViewer::set_theme($theme); + } + } + + function CurrentSubsite(){ + if($subsite = Subsite::currentSubsite()){ + return $subsite; + } + } +} + ?> \ No newline at end of file diff --git a/code/ErrorPageSubsite.php b/code/extensions/ErrorPageSubsite.php similarity index 96% rename from code/ErrorPageSubsite.php rename to code/extensions/ErrorPageSubsite.php index bb09979..2cd468d 100644 --- a/code/ErrorPageSubsite.php +++ b/code/extensions/ErrorPageSubsite.php @@ -1,5 +1,5 @@ owner->class != 'File') return null; return array( - 'has_one' => array( - 'Subsite' => 'Subsite', - ), - ); + 'has_one' => array( + 'Subsite' => 'Subsite', + ) + ); } /** @@ -31,13 +30,13 @@ class FileSubsites extends DataObjectDecorator { /** * Add subsites-specific fields to the folder editor. */ - function updateCMSFields(FieldSet &$fields) { + function updateCMSFields(FieldList $fields) { if($this->owner instanceof Folder) { $sites = Subsite::accessible_sites('CMS_ACCESS_AssetAdmin'); - $dropdownValues = ($sites) ? $sites->toDropdownMap() : array(); + $dropdownValues = ($sites) ? $sites->map()->toArray() : array(); $dropdownValues[0] = 'All sites'; ksort($dropdownValues); - if($sites)$fields->addFieldToTab('Root.Details', new DropdownField("SubsiteID", "Subsite", $dropdownValues)); + if($sites)$fields->push(new DropdownField("SubsiteID", "Subsite", $dropdownValues)); } } @@ -47,14 +46,14 @@ class FileSubsites extends DataObjectDecorator { function augmentSQL(SQLQuery &$query) { // If you're querying by ID, ignore the sub-site - this is a bit ugly... (but it was WAYYYYYYYYY worse) if(!$query->where || !preg_match('/\.(\'|"|`|)ID(\'|"|`|)/', $query->where[0])) { - if($context = DataObject::context_obj()) $subsiteID = (int) $context->SubsiteID; - else $subsiteID = (int) Subsite::currentSubsiteID(); + /*if($context = DataObject::context_obj()) $subsiteID = (int) $context->SubsiteID; + else */$subsiteID = (int) Subsite::currentSubsiteID(); // The foreach is an ugly way of getting the first key :-) foreach($query->from as $tableName => $info) { - $where = "\"$tableName\".\"SubsiteID\" IN (0, $subsiteID)"; - $query->where[] = $where; - break; + $where = "\"$tableName\".\"SubsiteID\" IN (0, $subsiteID)"; + $query->where[] = $where; + break; } $isCounting = strpos($query->select[0], 'COUNT') !== false; diff --git a/code/GroupSubsites.php b/code/extensions/GroupSubsites.php similarity index 91% rename from code/GroupSubsites.php rename to code/extensions/GroupSubsites.php index ad024e0..06679cb 100644 --- a/code/GroupSubsites.php +++ b/code/extensions/GroupSubsites.php @@ -4,12 +4,9 @@ * * @package subsites */ -class GroupSubsites extends DataObjectDecorator implements PermissionProvider { +class GroupSubsites extends DataExtension implements PermissionProvider { function extraStatics() { - if(!method_exists('DataObjectDecorator', 'load_extra_statics')) { - if($this->owner->class != 'Group') return null; - } return array( 'db' => array( 'AccessAllSubsites' => 'Boolean', @@ -60,7 +57,7 @@ class GroupSubsites extends DataObjectDecorator implements PermissionProvider { $fields->findOrMakeTab('Root.Subsites',_t('GroupSubsites.SECURITYTABTITLE','Subsites')); $subsites = Subsite::accessible_sites(array('ADMIN', 'SECURITY_SUBSITE_GROUP'), true); - $subsiteMap = $subsites->toDropdownMap(); + $subsiteMap = $subsites->map(); // Interface is different if you have the rights to modify subsite group values on // all subsites @@ -116,16 +113,18 @@ class GroupSubsites extends DataObjectDecorator implements PermissionProvider { // If you're querying by ID, ignore the sub-site - this is a bit ugly... if(!$query->filtersOnID()) { - if($context = DataObject::context_obj()) $subsiteID = (int)$context->SubsiteID; - else $subsiteID = (int)Subsite::currentSubsiteID(); + /*if($context = DataObject::context_obj()) $subsiteID = (int)$context->SubsiteID; + else */$subsiteID = (int)Subsite::currentSubsiteID(); // Don't filter by Group_Subsites if we've already done that $hasGroupSubsites = false; - foreach($query->from as $item) if(strpos($item, 'Group_Subsites') !== false) { - $hasGroupSubsites = true; - break; + foreach($query->from as $item) { + if((is_array($item) && strpos($item['table'], 'Group_Subsites')!==false) || (!is_array($item) && strpos($item, 'Group_Subsites')!==false)) { + $hasGroupSubsites = true; + break; + } } - + if(!$hasGroupSubsites) { if($subsiteID) { $query->leftJoin("Group_Subsites", "\"Group_Subsites\".\"GroupID\" diff --git a/code/LeftAndMainSubsites.php b/code/extensions/LeftAndMainSubsites.php similarity index 69% rename from code/LeftAndMainSubsites.php rename to code/extensions/LeftAndMainSubsites.php index 73c0bda..3249235 100644 --- a/code/LeftAndMainSubsites.php +++ b/code/extensions/LeftAndMainSubsites.php @@ -16,9 +16,12 @@ class LeftAndMainSubsites extends Extension { if(!Session::get('SubsiteID') || $_REQUEST['SubsiteID'] != Session::get('SubsiteID')) { Session::clear("{$this->owner->class}.currentPage"); } - + // Update current subsite in session Subsite::changeSubsite($_REQUEST['SubsiteID']); + + //Redirect to clear the current page + $this->owner->redirect('admin/pages'); } } @@ -35,54 +38,10 @@ class LeftAndMainSubsites extends Extension { } 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; - - default: - $subsites = Subsite::accessible_sites($accessPerm); - break; - } - - return $subsites; + return Subsite::accessible_sites('ADMIN'); } public function SubsiteList() { - if ($this->owner->class == 'AssetAdmin') { - // See if the right decorator is there.... - $file = new File(); - if (!$file->hasExtension('FileSubsites')) { - return false; - } - } - - // Whitelist for admin sections which are subsite aware. - // For example, don't show subsite list in reports section, it doesn't have - // any effect there - subsites are filtered through a custom dropdown there, see SubsiteReportWrapper. - if(!( - $this->owner instanceof AssetAdmin - || $this->owner instanceof SecurityAdmin - || $this->owner instanceof CMSMain) - ) { - return false; - } - $list = $this->Subsites(); $currentSubsiteID = Subsite::currentSubsiteID(); @@ -101,7 +60,22 @@ class LeftAndMainSubsites extends Extension { Requirements::javascript('subsites/javascript/LeftAndMain_Subsites.js'); return $output; } else if($list->Count() == 1) { - return $list->First()->Title; + if($list->First()->DefaultSite==false) { + $output = ''; + + Requirements::javascript('subsites/javascript/LeftAndMain_Subsites.js'); + return $output; + }else { + return ''.$list->First()->Title.''; + } } } @@ -125,9 +99,11 @@ class LeftAndMainSubsites extends Extension { // Switch to a subsite that this user can actually access. $member = Member::currentUser(); - if ($member && $member->isAdmin()) return true; //admin can access all subsites - - $sites = Subsite::accessible_sites("CMS_ACCESS_{$this->owner->class}")->toDropdownMap(); + if ($member && Permission::check('ADMIN')) { + return true; //admin can access all subsites + } + + $sites = Subsite::accessible_sites("CMS_ACCESS_{$this->owner->class}")->map('ID', 'Title')->toArray(); if($sites && !isset($sites[Subsite::currentSubsiteID()])) { $siteIDs = array_keys($sites); Subsite::changeSubsite($siteIDs[0]); @@ -139,7 +115,7 @@ class LeftAndMainSubsites extends Extension { foreach($menu as $candidate) { if($candidate->controller != $this->owner->class) { - $sites = Subsite::accessible_sites("CMS_ACCESS_{$candidate->controller}")->toDropdownMap(); + $sites = Subsite::accessible_sites("CMS_ACCESS_{$candidate->controller}")->map('ID', 'Title')->toArray(); if($sites && !isset($sites[Subsite::currentSubsiteID()])) { $siteIDs = array_keys($sites); Subsite::changeSubsite($siteIDs[0]); diff --git a/code/SiteConfigSubsites.php b/code/extensions/SiteConfigSubsites.php similarity index 85% rename from code/SiteConfigSubsites.php rename to code/extensions/SiteConfigSubsites.php index bccd501..aa7e879 100644 --- a/code/SiteConfigSubsites.php +++ b/code/extensions/SiteConfigSubsites.php @@ -3,7 +3,7 @@ /** * Extension for the SiteConfig object to add subsites support */ -class SiteConfigSubsites extends DataObjectDecorator { +class SiteConfigSubsites extends DataExtension { function extraStatics() { return array( 'has_one' => array( @@ -20,8 +20,8 @@ class SiteConfigSubsites extends DataObjectDecorator { // If you're querying by ID, ignore the sub-site - this is a bit ugly... if (!$query->where || (!preg_match('/\.(\'|"|`|)ID(\'|"|`|)( ?)=/', $query->where[0]) && !preg_match('/\.?(\'|"|`|)SubsiteID(\'|"|`|)( ?)=/', $query->where[0]))) { - if($context = DataObject::context_obj()) $subsiteID = (int)$context->SubsiteID; - else $subsiteID = (int)Subsite::currentSubsiteID(); + /*if($context = DataObject::context_obj()) $subsiteID = (int)$context->SubsiteID; + else */$subsiteID = (int)Subsite::currentSubsiteID(); $tableName = array_shift(array_keys($query->from)); if($tableName != 'SiteConfig') return; diff --git a/code/SiteTreeSubsites.php b/code/extensions/SiteTreeSubsites.php similarity index 86% rename from code/SiteTreeSubsites.php rename to code/extensions/SiteTreeSubsites.php index e9e5e5d..fdbdd4f 100644 --- a/code/SiteTreeSubsites.php +++ b/code/extensions/SiteTreeSubsites.php @@ -3,7 +3,7 @@ /** * Extension for the SiteTree object to add subsites support */ -class SiteTreeSubsites extends SiteTreeDecorator { +class SiteTreeSubsites extends DataExtension { static $template_variables = array( '((Company Name))' => 'Title' ); @@ -28,7 +28,6 @@ class SiteTreeSubsites extends SiteTreeDecorator { function extraStatics() { - if(!method_exists('DataObjectDecorator', 'load_extra_statics') && $this->owner->class != 'SiteTree') return null; return array( 'has_one' => array( 'Subsite' => 'Subsite', // The subsite that this page belongs to @@ -67,8 +66,8 @@ class SiteTreeSubsites extends SiteTreeDecorator { if (Subsite::$force_subsite) $subsiteID = Subsite::$force_subsite; else { - if($context = DataObject::context_obj()) $subsiteID = (int)$context->SubsiteID; - else $subsiteID = (int)Subsite::currentSubsiteID(); + /*if($context = DataObject::context_obj()) $subsiteID = (int)$context->SubsiteID; + else */$subsiteID = (int)Subsite::currentSubsiteID(); } // The foreach is an ugly way of getting the first key :-) @@ -94,12 +93,18 @@ class SiteTreeSubsites extends SiteTreeDecorator { $subsite = $this->owner->Subsite(); if($subsite && $subsite->ID) { $baseUrl = 'http://' . $subsite->domain() . '/'; - $fields->removeByName('BaseUrlLabel'); - $fields->addFieldToTab( - 'Root.Content.Metadata', - new LabelField('BaseUrlLabel',$baseUrl), - 'URLSegment' - ); + $fields->removeByName('URLSegment'); + + $baseLink = Controller::join_links ( + $baseUrl, + (SiteTree::nested_urls() && $this->ParentID ? $this->owner->Parent()->RelativeLink(true) : null) + ); + + $url = (strlen($baseLink) > 36) ? "..." .substr($baseLink, -32) : $baseLink; + $urlsegment = new SiteTreeURLSegmentField("URLSegment", $this->owner->fieldLabel('URLSegment')); + $urlsegment->setURLPrefix($url); + $urlsegment->setHelpText(SiteTree::nested_urls() && count($this->owner->Children()) ? $this->owner->fieldLabel('LinkChangeNote'): false); + $fields->addFieldToTab('Root.Metadata', $urlsegment, 'MetaTitle'); } $relatedCount = 0; @@ -113,19 +118,13 @@ class SiteTreeSubsites extends SiteTreeDecorator { // Related pages $tab->push(new LiteralField('RelatedNote', '

    You can list pages here that are related to this page.
    When this page is updated, you will get a reminder to check whether these related pages need to be updated as well.

    ')); $tab->push( - $related = new ComplexTableField( - $this, - 'RelatedPages', - 'RelatedPageLink', - array( - 'RelatedPageAdminLink' => 'Page', - 'AbsoluteLink' => 'URL', - ) - ) + $related=new GridField('RelatedPages', 'Related Pages', $this->owner->RelatedPages(), GridFieldConfig_Base::create()) ); + $related->setModelClass('RelatedPageLink'); + // The 'show' link doesn't provide any useful info - $related->setPermissions(array('add', 'edit', 'delete')); + //$related->setPermissions(array('add', 'edit', 'delete')); if($reverse) { $text = '

    In addition, this page is marked as related by the following pages:

    '; @@ -144,16 +143,13 @@ class SiteTreeSubsites extends SiteTreeDecorator { */ function ReverseRelated() { return DataObject::get('RelatedPageLink', "\"RelatedPageLink\".\"RelatedPageID\" = {$this->owner->ID} - AND R2.\"ID\" IS NULL", '', - "INNER JOIN \"SiteTree\" ON \"SiteTree\".\"ID\" = \"RelatedPageLink\".\"MasterPageID\" - LEFT JOIN \"RelatedPageLink\" AS R2 ON R2.\"MasterPageID\" = {$this->owner->ID} - AND R2.\"RelatedPageID\" = \"RelatedPageLink\".\"MasterPageID\" - " - ); + AND R2.\"ID\" IS NULL", '') + ->innerJoin('SiteTree', "\"SiteTree\".\"ID\" = \"RelatedPageLink\".\"MasterPageID\"") + ->leftJoin('RelatedPageLink', "R2.\"MasterPageID\" = {$this->owner->ID} AND R2.\"RelatedPageID\" = \"RelatedPageLink\".\"MasterPageID\"", 'R2'); } function NormalRelated() { - $return = new DataObjectSet(); + $return = new ArrayList(); $links = DataObject::get('RelatedPageLink', '"MasterPageID" = ' . $this->owner->ID); if($links) foreach($links as $link) { if($link->RelatedPage()->exists()) { diff --git a/code/forms/GridFieldAddFromTemplateButton.php b/code/forms/GridFieldAddFromTemplateButton.php new file mode 100644 index 0000000..641aabd --- /dev/null +++ b/code/forms/GridFieldAddFromTemplateButton.php @@ -0,0 +1,148 @@ +targetFragment = $targetFragment; + } + + public function getHTMLFragments($gridField) { + $data = new ArrayData(array( + 'NewFromTemplateLink' => $gridField->Link('newFromTemplate'), + )); + return array( + $this->targetFragment => $data->renderWith('GridFieldAddFromTemplateButton'), + ); + } + +} + +class GridFieldAddFromTemplate extends GridFieldDetailForm { + public function getURLHandlers($gridField) { + return array( + 'newFromTemplate'=>'newFromTemplate', + ); + } + + public function newFromTemplate($gridField, $request) { + $controller = $gridField->getForm()->Controller(); + + if(is_numeric($request->param('ID'))) { + $record = $gridField->getList()->byId($request->param("ID")); + } else { + $record = Object::create($gridField->getModelClass()); + } + + + $handler = Object::create('GridFieldAddFromTemplate_ItemRequest', $gridField, $this, $record, $controller, $this->name); + $handler->setTemplate($this->template); + + return $handler->handleRequest($request, DataModel::inst()); + } +} + +class GridFieldAddFromTemplate_ItemRequest extends GridFieldDetailForm_ItemRequest { + public function Link($action = null) { + return $this->gridField->Link('newFromTemplate'); + } + + function edit($request) { + $controller = $this->getToplevelController(); + $form = $this->NewFromTemplateForm($this->gridField, $request); + + $return = $this->customise(array( + 'Backlink' => $controller->Link(), + 'ItemEditForm' => $form, + ))->renderWith($this->template); + + if($controller->isAjax()) { + return $return; + } else { + // If not requested by ajax, we need to render it within the controller context+template + return $controller->customise(array( + // TODO CMS coupling + 'Content' => $return, + )); + } + } + + public function NewFromTemplateForm() { + $templates=DataObject::get('Subsite_Template'); + + $fields=new FieldList( + new DropdownField('TemplateID', _t('GridFieldAddFromTemplate.TEMPLATE', '_Template'), $templates->map('ID', 'Name')) + ); + + $actions=new FieldList( + FormAction::create('doCreateFromTemplate', _t('GridFieldDetailsForm.Create', 'Create'))->setUseButtonTag(true)->addExtraClass('ss-ui-action-constructive')->setAttribute('data-icon', 'add') + ); + + // Add a Cancel link which is a button-like link and link back to one level up. + $curmbs = $this->Breadcrumbs(); + if($curmbs && $curmbs->count()>=2){ + $one_level_up = $curmbs->offsetGet($curmbs->count()-2); + $text = " + Link."\"> + Cancel + "; + $actions->push(new LiteralField('cancelbutton', $text)); + } + + $validator=new RequiredFields('TemplateID'); + + $form=new Form($this, 'NewFromTemplateForm', $fields, $actions, $validator); + + // TODO Coupling with CMS + $toplevelController = $this->getToplevelController(); + if($toplevelController && $toplevelController instanceof LeftAndMain) { + // Always show with base template (full width, no other panels), + // regardless of overloaded CMS controller templates. + // TODO Allow customization, e.g. to display an edit form alongside a search form from the CMS controller + $form->setTemplate('LeftAndMain_EditForm'); + $form->addExtraClass('cms-content cms-edit-form center ss-tabset'); + if($form->Fields()->hasTabset()) $form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet'); + // TODO Link back to controller action (and edited root record) rather than index, + // which requires more URL knowledge than the current link to this field gives us. + // The current root record is held in session only, + // e.g. page/edit/show/6/ vs. page/edit/EditForm/field/MyGridField/.... + $form->Backlink = $toplevelController->Link(); + } + + return $form; + } + + public function doCreateFromTemplate($data, Form $form) { + $template=DataObject::get_by_id('Subsite_Template', intval($data['TemplateID'])); + + if($template) { + $subsite=$template->createInstance($data['Title']); + $subsite->write(); + + $this->record($subsite); + return $this->redirect(parent::Link()); + }else { + $form->sessionMessage(_t('GridFieldAddFromTemplate.TEMPLATE_NOT_FOUND', '_The selected template could not be found'), 'bad'); + return $this->redirectBack(); + } + } + + /** + * CMS-specific functionality: Passes through navigation breadcrumbs + * to the template, and includes the currently edited record (if any). + * see {@link LeftAndMain->Breadcrumbs()} for details. + * + * @param boolean $unlinked + * @return ArrayData + */ + function Breadcrumbs($unlinked = false) { + if(!$this->popupController->hasMethod('Breadcrumbs')) return; + + $items = $this->popupController->Breadcrumbs($unlinked); + $items->push(new ArrayData(array( + 'Title' => sprintf(_t('GridFieldAddFromTemplate.NewFromTemplate', 'New %s from template'), $this->record->singular_name()), + 'Link' => false + ))); + + return $items; + } +} \ No newline at end of file diff --git a/code/SubsiteAgnosticTableListField.php b/code/forms/SubsiteAgnosticTableListField.php similarity index 100% rename from code/SubsiteAgnosticTableListField.php rename to code/forms/SubsiteAgnosticTableListField.php diff --git a/code/forms/SubsitesTreeDropdownField.php b/code/forms/SubsitesTreeDropdownField.php new file mode 100644 index 0000000..bacbc76 --- /dev/null +++ b/code/forms/SubsitesTreeDropdownField.php @@ -0,0 +1,40 @@ +subsiteID = $id; + } + + function getSubsiteID() { + return $this->subsiteID; + } + + function tree(SS_HTTPRequest $request) { + $oldSubsiteID = Session::get('SubsiteID'); + Session::set('SubsiteID', $this->subsiteID); + + $results = parent::tree($request); + + Session::set('SubsiteID', $oldSubsiteID); + + return $results; + } +} \ No newline at end of file diff --git a/code/RelatedPageLink.php b/code/model/RelatedPageLink.php similarity index 86% rename from code/RelatedPageLink.php rename to code/model/RelatedPageLink.php index f4f7f06..d8b01e2 100644 --- a/code/RelatedPageLink.php +++ b/code/model/RelatedPageLink.php @@ -16,10 +16,15 @@ class RelatedPageLink extends DataObject { // bind a has_many to. 'MasterPage' => 'SiteTree', ); + + public static $summary_fields=array( + 'RelatedPageAdminLink' => 'Page', + 'AbsoluteLink' => 'URL', + ); function getCMSFields() { $subsites = Subsite::accessible_sites("CMS_ACCESS_CMSMain"); - if(!$subsites) $subsites = new DataObjectSet(); + if(!$subsites) $subsites = new ArrayList(); if(Subsite::hasMainSitePermission(null, array("CMS_ACCESS_CMSMain"))) { $subsites->push(new ArrayData(array('Title' => 'Main site', "\"ID\"" => 0))); @@ -47,8 +52,8 @@ class RelatedPageLink extends DataObject { $pageSelectionField->setFilterFunction(create_function('$item', 'return $item->ClassName != "VirtualPage";')); - if($subsites->Count()) $fields = new FieldSet($subsiteSelectionField, $pageSelectionField); - else $fields = new FieldSet($pageSelectionField); + if($subsites->Count()) $fields = new FieldList($subsiteSelectionField, $pageSelectionField); + else $fields = new FieldList($pageSelectionField); return $fields; } diff --git a/code/Subsite.php b/code/model/Subsite.php similarity index 90% rename from code/Subsite.php rename to code/model/Subsite.php index 7d5e3fa..0cf17ea 100644 --- a/code/Subsite.php +++ b/code/model/Subsite.php @@ -146,7 +146,7 @@ class Subsite extends DataObject implements PermissionProvider { function domain() { if($this->ID) { $domains = DataObject::get("SubsiteDomain", "\"SubsiteID\" = $this->ID", "\"IsPrimary\" DESC","", 1); - if($domains) { + if($domains && $domains->Count()>0) { $domain = $domains->First()->Domain; // If there are wildcards in the primary domain (not recommended), make some // educated guesses about what to replace them with: @@ -178,10 +178,7 @@ class Subsite extends DataObject implements PermissionProvider { * Show the configuration fields for each subsite */ function getCMSFields() { - $domainTable = new TableField("Domains", "SubsiteDomain", - array("Domain" => "Domain (use * as a wildcard)", "IsPrimary" => "Primary domain?"), - array("Domain" => "TextField", "IsPrimary" => "CheckboxField"), - "SubsiteID", $this->ID); + $domainTable = new GridField("Domains", "Domains", $this->Domains(), GridFieldConfig_RecordEditor::create(10)); $languageSelector = new DropdownField('Language', 'Language', i18n::get_common_locales()); @@ -192,7 +189,7 @@ class Subsite extends DataObject implements PermissionProvider { } asort($pageTypeMap); - $fields = new FieldSet( + $fields = new FieldList( new TabSet('Root', new Tab('Configuration', new HeaderField($this->getClassName() . ' configuration', 2), @@ -238,7 +235,7 @@ class Subsite extends DataObject implements PermissionProvider { } function getCMSActions() { - return new FieldSet( + return new FieldList( new FormAction('callPageMethod', "Create copy", null, 'adminDuplicate') ); } @@ -285,7 +282,7 @@ JS; $id = self::getSubsiteIDForDomain(); Session::set('SubsiteID', $id); } - + return (int)$id; } @@ -341,12 +338,12 @@ JS; $SQL_host = Convert::raw2sql($host); $matchingDomains = DataObject::get("SubsiteDomain", "'$SQL_host' LIKE replace(\"SubsiteDomain\".\"Domain\",'*','%')", - "\"IsPrimary\" DESC", "INNER JOIN \"Subsite\" ON \"Subsite\".\"ID\" = \"SubsiteDomain\".\"SubsiteID\" AND + "\"IsPrimary\" DESC")->innerJoin('Subsite', "\"Subsite\".\"ID\" = \"SubsiteDomain\".\"SubsiteID\" AND \"Subsite\".\"IsPublic\"=1"); - if($matchingDomains) { - $subsiteIDs = array_unique($matchingDomains->column('SubsiteID')); - $subsiteDomains = array_unique($matchingDomains->column('Domain')); + if($matchingDomains && $matchingDomains->Count()>0) { + $subsiteIDs = array_unique($matchingDomains->map('SubsiteID')->keys()); + $subsiteDomains = array_unique($matchingDomains->map('Domain')->keys()); if(sizeof($subsiteIDs) > 1) { throw new UnexpectedValueException(sprintf( "Multiple subsites match on '%s': %s", @@ -473,12 +470,12 @@ JS; * @param $includeMainSite If true, the main site will be included if appropriate. * @param $mainSiteTitle The label to give to the main site * @param $member - * @return DataObjectSet of {@link Subsite} instances + * @return DataList of {@link Subsite} instances */ function accessible_sites($permCode, $includeMainSite = false, $mainSiteTitle = "Main site", $member = null) { // Rationalise member arguments if(!$member) $member = Member::currentUser(); - if(!$member) return new DataObjectSet(); + if(!$member) return new ArrayList(); if(!is_object($member)) $member = DataObject::get_by_id('Member', $member); // Rationalise permCode argument @@ -496,39 +493,22 @@ JS; $subsites = DataObject::get( 'Subsite', "\"Subsite\".\"Title\" != ''", - '', - "LEFT JOIN \"Group_Subsites\" - ON \"Group_Subsites\".\"SubsiteID\" = \"Subsite\".\"ID\" - INNER JOIN \"Group\" ON \"Group\".\"ID\" = \"Group_Subsites\".\"GroupID\" - OR \"Group\".\"AccessAllSubsites\" = 1 - INNER JOIN \"Group_Members\" - ON \"Group_Members\".\"GroupID\"=\"Group\".\"ID\" - AND \"Group_Members\".\"MemberID\" = $member->ID - INNER JOIN \"Permission\" - ON \"Group\".\"ID\"=\"Permission\".\"GroupID\" - AND \"Permission\".\"Code\" IN ($SQL_codes, 'ADMIN')" - ); - if(!$subsites) $subsites = new DataObjectSet(); + '')->leftJoin('Group_Subsites', "\"Group_Subsites\".\"SubsiteID\" = \"Subsite\".\"ID\"") + ->innerJoin('Group', "\"Group\".\"ID\" = \"Group_Subsites\".\"GroupID\" OR \"Group\".\"AccessAllSubsites\" = 1") + ->innerJoin('Group_Members', "\"Group_Members\".\"GroupID\"=\"Group\".\"ID\" AND \"Group_Members\".\"MemberID\" = $member->ID") + ->innerJoin('Permission', "\"Group\".\"ID\"=\"Permission\".\"GroupID\" AND \"Permission\".\"Code\" IN ($SQL_codes, 'ADMIN')"); + + if(!$subsites) $subsites = new ArrayList(); $rolesSubsites = DataObject::get( 'Subsite', "\"Subsite\".\"Title\" != ''", - '', - "LEFT JOIN \"Group_Subsites\" - ON \"Group_Subsites\".\"SubsiteID\" = \"Subsite\".\"ID\" - INNER JOIN \"Group\" ON \"Group\".\"ID\" = \"Group_Subsites\".\"GroupID\" - OR \"Group\".\"AccessAllSubsites\" = 1 - INNER JOIN \"Group_Members\" - ON \"Group_Members\".\"GroupID\"=\"Group\".\"ID\" - AND \"Group_Members\".\"MemberID\" = $member->ID - INNER JOIN \"Group_Roles\" - ON \"Group_Roles\".\"GroupID\"=\"Group\".\"ID\" - INNER JOIN \"PermissionRole\" - ON \"Group_Roles\".\"PermissionRoleID\"=\"PermissionRole\".\"ID\" - INNER JOIN \"PermissionRoleCode\" - ON \"PermissionRole\".\"ID\"=\"PermissionRoleCode\".\"RoleID\" - AND \"PermissionRoleCode\".\"Code\" IN ($SQL_codes, 'ADMIN')" - ); + '')->leftJoin('Group_Subsites', "\"Group_Subsites\".\"SubsiteID\" = \"Subsite\".\"ID\"") + ->innerJoin('Group', "\"Group\".\"ID\" = \"Group_Subsites\".\"GroupID\" OR \"Group\".\"AccessAllSubsites\" = 1") + ->innerJoin('Group_Members', "\"Group_Members\".\"GroupID\"=\"Group\".\"ID\" AND \"Group_Members\".\"MemberID\" = $member->ID") + ->innerJoin('Group_Roles', "\"Group_Roles\".\"GroupID\"=\"Group\".\"ID\"") + ->innerJoin('PermissionRole', "\"Group_Roles\".\"PermissionRoleID\"=\"PermissionRole\".\"ID\"") + ->innerJoin('PermissionRoleCode', "\"PermissionRole\".\"ID\"=\"PermissionRoleCode\".\"RoleID\" AND \"PermissionRoleCode\".\"Code\" IN ($SQL_codes, 'ADMIN')"); if(!$subsites && $rolesSubsites) return $rolesSubsites; @@ -539,13 +519,16 @@ JS; } // Include the main site - if(!$subsites) $subsites = new DataObjectSet(); + if(!$subsites) $subsites = new ArrayList(); if($includeMainSite) { if(!is_array($permCode)) $permCode = array($permCode); if(self::hasMainSitePermission($member, $permCode)) { + $subsites=$subsites->toArray(); + $mainSite = new Subsite(); $mainSite->Title = $mainSiteTitle; - $subsites->insertFirst($mainSite); + array_unshift($subsites, $mainSite); + $subsites=ArrayList::create($subsites); } } @@ -593,10 +576,10 @@ JS; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** - * Return the FieldSet that will build the search form in the CMS + * Return the FieldList that will build the search form in the CMS */ function adminSearchFields() { - return new FieldSet( + return new FieldList( new TextField('Name', 'Sub-site name') ); } diff --git a/code/model/SubsiteDomain.php b/code/model/SubsiteDomain.php new file mode 100644 index 0000000..4f2564c --- /dev/null +++ b/code/model/SubsiteDomain.php @@ -0,0 +1,32 @@ + "Varchar(255)", + "IsPrimary" => "Boolean", + ); + static $has_one = array( + "Subsite" => "Subsite", + ); + + public static $summary_fields=array( + 'Domain'=>'Domain', + 'IsPrimary'=>'Is Primary Domain' + ); + + /** + * Whenever a Subsite Domain is written, rewrite the hostmap + * + * @return void + */ + public function onAfterWrite() { + Subsite::writeHostMap(); + } + + public function getCMSFields() { + return new FieldList( + new TextField('Domain', _t('SubsiteDomain.DOMAIN', '_Domain'), null, 255), + new CheckboxField('IsPrimary', _t('SubsiteDomain.IS_PRIMARY', '_Is Primary Domain')) + ); + } +} \ No newline at end of file diff --git a/css/LeftAndMain_Subsites.css b/css/LeftAndMain_Subsites.css index effb454..ec8983c 100644 --- a/css/LeftAndMain_Subsites.css +++ b/css/LeftAndMain_Subsites.css @@ -24,19 +24,19 @@ padding: 3px; } +.cms-login-status.subsites { + padding-bottom: 7px; +} + #SubsitesSelect, #SubsitesSelect option { font-size: 12px; } #SubsitesSelect { - max-width: 200px; + width: 171px; padding: 3px; } -#top #MainMenu #Menu-help { - margin-right: 260px; -} - #AddSubsiteLink { display: block; font-size: 80%; @@ -55,4 +55,8 @@ body.SubsiteAdmin .right form #URL .fieldgroup * { font-size: 11px; +} + +.cms-add-form #PageType li .class-SubsitesVirtualPage, .class-SubsitesVirtualPage a .jstree-pageicon { + background-position: 0 -32px !important; } \ No newline at end of file diff --git a/javascript/LeftAndMain_Subsites.js b/javascript/LeftAndMain_Subsites.js index 8a27ce8..c4dbdd1 100644 --- a/javascript/LeftAndMain_Subsites.js +++ b/javascript/LeftAndMain_Subsites.js @@ -1,53 +1,53 @@ -Behaviour.register({ - '#SubsiteActions select' : { - onchange: function() { - document.location.href = SiteTreeHandlers.controller_url + '?SubsiteID=' + this.value; - } - }, - - // Subsite tab of Group editor - '#Form_EditForm_AccessAllSubsites' : { - initialize: function () { - this.showHideSubsiteList(); - var i=0,items=this.getElementsByTagName('input'); - for(i=0;i

    -
    -
    - $SubsiteList - $ApplicationLogoText -
    -
    diff --git a/templates/Includes/CMSTopMenu_alternative.ss b/templates/Includes/CMSTopMenu_alternative.ss deleted file mode 100644 index 7dd85e9..0000000 --- a/templates/Includes/CMSTopMenu_alternative.ss +++ /dev/null @@ -1,15 +0,0 @@ - - -
    -
    - $SubsiteList -
    -
    diff --git a/templates/Includes/GridFieldAddFromTemplateButton.ss b/templates/Includes/GridFieldAddFromTemplateButton.ss new file mode 100644 index 0000000..069eda1 --- /dev/null +++ b/templates/Includes/GridFieldAddFromTemplateButton.ss @@ -0,0 +1 @@ +<% _t('GridFieldAddFromTemplateButton.AddFromTemplate', '_Add New from Template') %> \ No newline at end of file diff --git a/templates/LeftAndMain_Menu.ss b/templates/LeftAndMain_Menu.ss new file mode 100644 index 0000000..21fed4a --- /dev/null +++ b/templates/LeftAndMain_Menu.ss @@ -0,0 +1,59 @@ +
    +
    + + + + + +
    + +
    + +
    + +
    + » + « +
    +
    \ No newline at end of file diff --git a/tests/FileSubsitesTest.php b/tests/FileSubsitesTest.php index 5f2429b..8fa5bcb 100644 --- a/tests/FileSubsitesTest.php +++ b/tests/FileSubsitesTest.php @@ -11,7 +11,7 @@ class FileSubsitesTest extends SapphireTest { $this->assertEquals(' * FileTitle', $file->alternateTreeTitle()); $file->SubsiteID = $this->objFromFixture('Subsite', 'domaintest1')->ID; $this->assertEquals('FileTitle', $file->TreeTitle()); - $this->assertTrue(singleton('Folder')->getCMSFields() instanceof FieldSet); + $this->assertTrue(singleton('Folder')->getCMSFields() instanceof FieldList); Subsite::changeSubsite(1); $this->assertEquals($file->cacheKeyComponent(), 'subsite-1'); } diff --git a/tests/GroupSubsitesTest.php b/tests/GroupSubsitesTest.php index 6069a31..187c2ce 100644 --- a/tests/GroupSubsitesTest.php +++ b/tests/GroupSubsitesTest.php @@ -8,7 +8,7 @@ class GroupSubsitesTest extends SapphireTest { function testTrivialFeatures() { $this->assertTrue(is_array(singleton('GroupSubsites')->extraStatics())); $this->assertTrue(is_array(singleton('GroupSubsites')->providePermissions())); - $this->assertTrue(singleton('Group')->getCMSFields() instanceof FieldSet); + $this->assertTrue(singleton('Group')->getCMSFields() instanceof FieldList); } function testAlternateTreeTitle() { diff --git a/tests/SiteTreeSubsitesTest.php b/tests/SiteTreeSubsitesTest.php index d38a536..898f6a7 100644 --- a/tests/SiteTreeSubsitesTest.php +++ b/tests/SiteTreeSubsitesTest.php @@ -41,8 +41,8 @@ class SiteTreeSubsitesTest extends SapphireTest { function testBasicSanity() { $this->assertTrue(singleton('SiteTree')->getSiteConfig() instanceof SiteConfig); - $this->assertTrue(singleton('SiteTree')->getCMSFields() instanceof FieldSet); - $this->assertTrue(singleton('SubsitesVirtualPage')->getCMSFields() instanceof FieldSet); + $this->assertTrue(singleton('SiteTree')->getCMSFields() instanceof FieldList); + $this->assertTrue(singleton('SubsitesVirtualPage')->getCMSFields() instanceof FieldList); $this->assertTrue(is_array(singleton('SiteTreeSubsites')->extraStatics())); } @@ -58,7 +58,7 @@ class SiteTreeSubsitesTest extends SapphireTest { } function testRelatedPages() { - $this->assertTrue(singleton('RelatedPageLink')->getCMSFields() instanceof FieldSet); + $this->assertTrue(singleton('RelatedPageLink')->getCMSFields() instanceof FieldList); $importantpage = $this->objFromFixture('SiteTree', 'importantpage'); $contact = $this->objFromFixture('SiteTree', 'contact'); @@ -68,13 +68,13 @@ class SiteTreeSubsitesTest extends SapphireTest { $link->RelatedPageID = $contact->ID; $link->write(); $importantpage->RelatedPages()->add($link); - $this->assertTrue(singleton('SiteTree')->getCMSFields() instanceof FieldSet); + $this->assertTrue(singleton('SiteTree')->getCMSFields() instanceof FieldList); $this->assertEquals($importantpage->NormalRelated()->Count(), 1); $this->assertEquals($contact->ReverseRelated()->Count(), 1); - $this->assertTrue($importantpage->getCMSFields() instanceof FieldSet); - $this->assertTrue($contact->getCMSFields() instanceof FieldSet); + $this->assertTrue($importantpage->getCMSFields() instanceof FieldList); + $this->assertTrue($contact->getCMSFields() instanceof FieldList); $this->assertEquals($importantpage->canView(), $link->canView()); $this->assertEquals($importantpage->canEdit(), $link->canEdit()); diff --git a/tests/SubsiteAdminTest.php b/tests/SubsiteAdminTest.php index 2988540..c6b1ce4 100644 --- a/tests/SubsiteAdminTest.php +++ b/tests/SubsiteAdminTest.php @@ -102,7 +102,7 @@ class SubsiteAdminTest extends SapphireTest { $ids[$subsite->ID] = true; } - $this->assertTrue($subsite->adminSearchFields() instanceof FieldSet); + $this->assertTrue($subsite->adminSearchFields() instanceof FieldList); $this->assertArrayHasKey(0, $ids, "Main site accessible"); $this->assertArrayHasKey($this->idFromFixture('Subsite_Template','main'), $ids, "Site with no groups inaccesible"); $this->assertArrayHasKey($this->idFromFixture('Subsite_Template','subsite1'), $ids, "Subsite1 Template inaccessible");