mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
190 lines
6.0 KiB
PHP
190 lines
6.0 KiB
PHP
<?php
|
|
/**
|
|
* @package cms
|
|
* @subpackage content
|
|
*/
|
|
class SilverStripeNavigator {
|
|
|
|
/**
|
|
* @param SiteTree $record
|
|
* @return Array template data
|
|
*/
|
|
static function get_for_record($record) {
|
|
$items = '';
|
|
$message = '';
|
|
|
|
$navItemClasses = ClassInfo::subclassesFor('SilverStripeNavigatorItem');
|
|
array_shift($navItemClasses);
|
|
|
|
// Sort menu items according to priority
|
|
$menuPriority = array();
|
|
$i = 0;
|
|
foreach($navItemClasses as $navItemClass) {
|
|
if($navItemClass == 'SilverStripeNavigatorItem') continue;
|
|
|
|
$i++;
|
|
$obj = new $navItemClass();
|
|
// This funny litle formula ensures that the first item added with the same priority will be left-most.
|
|
$priority = Object::get_static($navItemClass, 'priority');
|
|
$menuPriority[$priority * 100 - 1] = $obj;
|
|
}
|
|
ksort($menuPriority);
|
|
|
|
foreach($menuPriority as $obj) {
|
|
$text = $obj->getHTML($record);
|
|
if($text) $items .= $text;
|
|
$newMessage = $obj->getMessage($record);
|
|
if($newMessage) $message = $newMessage;
|
|
}
|
|
|
|
return array(
|
|
'items' => $items,
|
|
'message' => $message
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Navigator items are links that appear in the $SilverStripeNavigator bar.
|
|
* To add an item, extends this class.
|
|
*
|
|
* @package cms
|
|
* @subpackage content
|
|
*/
|
|
class SilverStripeNavigatorItem extends Object {
|
|
function getHTML($page) {}
|
|
function getMessage($page) {}
|
|
}
|
|
|
|
/**
|
|
* @package cms
|
|
* @subpackage content
|
|
*/
|
|
class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem {
|
|
static $priority = 10;
|
|
|
|
function getHTML($page) {
|
|
if(is_a(Controller::curr(), 'CMSMain')) {
|
|
return '<a class="current">CMS</a>';
|
|
} else {
|
|
$cmsLink = Convert::raw2att('admin/show/' . $page->ID);
|
|
$cmsLink = "<a href=\"$cmsLink\" class=\"newWindow\" target=\"cms\">". _t('ContentController.CMS', 'CMS') ."</a>";
|
|
|
|
return $cmsLink;
|
|
}
|
|
}
|
|
|
|
function getLink($page) {
|
|
if(is_a(Controller::curr(), 'CMSMain')) {
|
|
return Controller::curr()->AbsoluteLink('show') . $page->ID;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* @package cms
|
|
* @subpackage content
|
|
*/
|
|
class SilverStripeNavigatorItem_StageLink extends SilverStripeNavigatorItem {
|
|
static $priority = 20;
|
|
|
|
function getHTML($page) {
|
|
// TODO cmsworkflow module coupling
|
|
if(Versioned::current_stage() == 'Stage' && !(ClassInfo::exists('SiteTreeFutureState') && SiteTreeFutureState::get_future_datetime())) {
|
|
return "<a class=\"current\">". _t('ContentController.DRAFTSITE', 'Draft Site') ."</a>";
|
|
} else {
|
|
$draftPage = Versioned::get_one_by_stage('SiteTree', 'Stage', '"SiteTree"."ID" = ' . $page->ID);
|
|
if($draftPage) {
|
|
$pageLink = Convert::raw2att(Controller::join_links($draftPage->AbsoluteLink(), "?stage=Stage"));
|
|
return "<a href=\"$pageLink\" class=\"newWindow\" target=\"site\" style=\"left : -1px;\">". _t('ContentController.DRAFTSITE', 'Draft Site') ."</a>";
|
|
}
|
|
}
|
|
}
|
|
|
|
function getMessage($page) {
|
|
if(Versioned::current_stage() == 'Stage') {
|
|
return "<div id=\"SilverStripeNavigatorMessage\" title=\"". _t('ContentControl.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors') ."\">". _t('ContentController.DRAFTSITE', 'Draft Site') ."</div>";
|
|
}
|
|
}
|
|
|
|
function getLink($page) {
|
|
if(Versioned::current_stage() == 'Stage') {
|
|
return Controller::join_links($page->AbsoluteLink(), '?stage=Stage');
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @package cms
|
|
* @subpackage content
|
|
*/
|
|
class SilverStripeNavigatorItem_LiveLink extends SilverStripeNavigatorItem {
|
|
static $priority = 30;
|
|
|
|
function getHTML($page) {
|
|
if(Versioned::current_stage() == 'Live') {
|
|
return "<a class=\"current\">". _t('ContentController.PUBLISHEDSITE', 'Published Site') ."</a>";
|
|
} else {
|
|
$livePage = Versioned::get_one_by_stage('SiteTree', 'Live', '"SiteTree"."ID" = ' . $page->ID);
|
|
if($livePage) {
|
|
$pageLink = Convert::raw2att(Controller::join_links($livePage->AbsoluteLink(), "?stage=Live"));
|
|
return "<a href=\"$pageLink\" class=\"newWindow\" target=\"site\" style=\"left : -3px;\">". _t('ContentController.PUBLISHEDSITE', 'Published Site') ."</a>";
|
|
}
|
|
}
|
|
}
|
|
|
|
function getMessage($page) {
|
|
if(Versioned::current_stage() == 'Live') {
|
|
return "<div id=\"SilverStripeNavigatorMessage\" title=\"". _t('ContentControl.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors') ."\">". _t('ContentController.PUBLISHEDSITE', 'Published Site') ."</div>";
|
|
}
|
|
}
|
|
|
|
function getLink($page) {
|
|
if(Versioned::current_stage() == 'Live') {
|
|
return Controller::join_links($page->AbsoluteLink(), '?stage=Live');
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @package cms
|
|
* @subpackage content
|
|
*/
|
|
class SilverStripeNavigatorItem_ArchiveLink extends SilverStripeNavigatorItem {
|
|
static $priority = 40;
|
|
|
|
function getHTML($page) {
|
|
if(Versioned::current_archived_date()) {
|
|
return "<a class=\"current\">". _t('ContentController.ARCHIVEDSITE', 'Archived Site') ."</a>";
|
|
} else {
|
|
// Display the archive link if the page currently displayed in the CMS is other version than live and draft
|
|
$currentDraft = Versioned::get_one_by_stage('SiteTree', 'Draft', '"SiteTree"."ID" = ' . $page->ID);
|
|
$currentLive = Versioned::get_one_by_stage('SiteTree', 'Live', '"SiteTree"."ID" = ' . $page->ID);
|
|
if(
|
|
(!$currentDraft || ($currentDraft && $page->Version != $currentDraft->Version))
|
|
&& (!$currentLive || ($currentLive && $page->Version != $currentLive->Version))
|
|
) {
|
|
$pageLink = Convert::raw2att($page->AbsoluteLink());
|
|
return "<a href=\"$pageLink?archiveDate={$page->LastEdited}\" class=\"newWindow\" target=\"site\" style=\"left : -3px;\">". _t('ContentController.ARCHIVEDSITE', 'Archived Site') ."</a>";
|
|
}
|
|
}
|
|
}
|
|
|
|
function getMessage($page) {
|
|
if($date = Versioned::current_archived_date()) {
|
|
$dateObj = Object::create('Datetime');
|
|
$dateObj->setValue($date);
|
|
return "<div id=\"SilverStripeNavigatorMessage\" title=\"". _t('ContentControl.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors') ."\">". _t('ContentController.ARCHIVEDSITEFROM', 'Archived site from') ."<br>" . $dateObj->Nice() . "</div>";
|
|
}
|
|
}
|
|
|
|
function getLink($page) {
|
|
if($date = Versioned::current_archived_date()) {
|
|
return $page->AbsoluteLink() . '?archiveDate=' . $date;
|
|
}
|
|
}
|
|
}
|
|
|
|
?>
|