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 = '"
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.
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
- <% control MainMenu %>
-
-
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 @@
-
- <% end_if %>
-
-<% control MainMenu %>
-
-
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");