diff --git a/code/LeftAndMainSubsites.php b/code/LeftAndMainSubsites.php index d4d6a37..9fe8f5b 100644 --- a/code/LeftAndMainSubsites.php +++ b/code/LeftAndMainSubsites.php @@ -124,6 +124,12 @@ class LeftAndMainSubsites extends Extension { function augmentNewSiteTreeItem(&$item) { $item->SubsiteID = Subsite::currentSubsiteID(); } + + function onAfterSave($record) { + if($record->hasMethod('RelatedPages') && $record->RelatedPages()) { + FormResponse::status_message('Saved, please update related pages.', 'good'); + } + } } diff --git a/code/RelatedPageLink.php b/code/RelatedPageLink.php new file mode 100644 index 0000000..0092ddb --- /dev/null +++ b/code/RelatedPageLink.php @@ -0,0 +1,62 @@ + 'SiteTree', + 'RelatedPage' => 'SiteTree' + ); + + function getCMSFields() { + $subsites = Subsite::getSubsitesForMember(); + if(!$subsites) $subsites = new DataObjectSet(); + if(Subsite::hasMainSitePermission()) { + $subsites->push(new ArrayData(array('Title' => 'Main site', 'ID' => 0))); + } + + if($subsites->Count()) { + $subsiteSelectionField = new DropdownField( + "CopyContentFromID_SubsiteID", + "Subsite", + $subsites->toDropdownMap('ID', 'Title'), + ($this->CopyContentFromID) ? $this->CopyContentFrom()->SubsiteID : Session::get('SubsiteID') + ); + } + + // Setup the linking to the original page. + $pageSelectionField = new SubsitesTreeDropdownField( + "RelatedPageID", + _t('VirtualPage.CHOOSE', "Choose a page to link to"), + "SiteTree", + "ID", + "MenuTitle" + ); + + $pageSelectionField->setFilterFunction(create_function('$item', 'return $item->ClassName != "VirtualPage";')); + + if($subsites->Count()) { + $fields = new FieldSet( + $subsiteSelectionField, + $pageSelectionField + ); + } else { + $fields = new FieldSet( + $pageSelectionField + ); + } + + return $fields; + } + + function RelatedPageAdminLink() { + return '' . Convert::raw2xml($this->RelatedPage()->Title) . ''; + } +} + +?> diff --git a/code/SiteTreeSubsites.php b/code/SiteTreeSubsites.php index 92615ee..55f9d31 100644 --- a/code/SiteTreeSubsites.php +++ b/code/SiteTreeSubsites.php @@ -34,7 +34,10 @@ class SiteTreeSubsites extends SiteTreeDecorator { return array( 'has_one' => array( 'Subsite' => 'Subsite', // The subsite that this page belongs to - 'MasterPage' => 'SiteTree', // Optional; the page that is the content master + 'MasterPage' => 'SiteTree',// Optional; the page that is the content master + ), + 'has_many' => array( + 'RelatedPages' => 'SiteTree' ) ); } @@ -150,6 +153,23 @@ class SiteTreeSubsites extends SiteTreeDecorator { 'URLSegment' ); } + + // Related pages + $fields->addFieldToTab( + 'Root.Related', + 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.

') + ); + $fields->addFieldToTab( + 'Root.Related', + $related = new ComplexTableField( + $this, + 'RelatedPages', + 'RelatedPageLink', + array( + 'RelatedPageAdminLink' => 'Page' + ) + ) + ); } /** diff --git a/code/Subsite.php b/code/Subsite.php index b9e6a72..5f376cc 100644 --- a/code/Subsite.php +++ b/code/Subsite.php @@ -464,8 +464,8 @@ JS; return DataObject::get( 'Subsite', "{$q}Group_Members{$q}.{$q}MemberID{$q} = $member->ID - AND {$q}Permission{$q}.{$q}Code{$q} IN ($SQL_codes, 'ADMIN') - AND ({$q}Subdomain{$q} IS NOT NULL OR {$q}Subsite{$q}.{$q}ClassName{$q} IN ($templateClassList)) AND {$q}Subsite{$q}.{$q}Title{$q} != ''", + AND {$q}Permission{$q}.{$q}Code{$q} IN ($SQL_codes, 'ADMIN', 'SUBSITE_ACCESS_ALL') + AND {$q}Subsite{$q}.{$q}Title{$q} != ''", '', "LEFT JOIN {$q}Group{$q} ON ({$q}SubsiteID{$q} = {$q}Subsite{$q}.{$q}ID{$q} OR {$q}SubsiteID{$q} = 0) LEFT JOIN {$q}Group_Members{$q} ON {$q}Group_Members{$q}.{$q}GroupID{$q} = {$q}Group{$q}.{$q}ID{$q}