2010-04-14 05:51:56 +02:00
< ? php
2010-04-14 06:00:43 +02:00
/**
* @ package cms
* @ subpackage content
*/
class SilverStripeNavigator {
2010-04-14 05:51:56 +02:00
2010-04-14 06:00:43 +02:00
/**
* @ 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
);
}
}
2010-04-14 05:51:56 +02:00
/**
* Navigator items are links that appear in the $SilverStripeNavigator bar .
* To add an item , extends this class .
2010-04-14 06:00:43 +02:00
*
* @ package cms
* @ subpackage content
2010-04-14 05:51:56 +02:00
*/
class SilverStripeNavigatorItem extends Object {
2010-04-14 06:03:40 +02:00
function getHTML ( $page ) {}
function getMessage ( $page ) {}
2010-04-14 05:51:56 +02:00
}
2010-04-14 06:00:43 +02:00
/**
* @ package cms
* @ subpackage content
*/
2010-04-14 05:51:56 +02:00
class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem {
static $priority = 10 ;
2010-04-14 06:03:40 +02:00
function getHTML ( $page ) {
2010-04-14 05:52:52 +02:00
if ( is_a ( Controller :: curr (), 'CMSMain' )) {
return '<a class="current">CMS</a>' ;
} else {
2010-04-14 06:03:40 +02:00
$cmsLink = 'admin/show/' . $page -> ID ;
$cmsLink = " <a href= \" $cmsLink\ " class = \ " newWindow \" target= \" cms \" > " . _t ( 'ContentController.CMS' , 'CMS' ) . " </a> " ;
2010-04-14 05:51:56 +02:00
2010-04-14 05:52:52 +02:00
return $cmsLink ;
}
2010-04-14 05:51:56 +02:00
}
2010-04-14 05:53:19 +02:00
function getLink ( $page ) {
if ( is_a ( Controller :: curr (), 'CMSMain' )) {
2010-04-14 06:03:40 +02:00
return Controller :: curr () -> AbsoluteLink ( 'show' ) . $page -> ID ;
2010-04-14 05:53:19 +02:00
}
}
2010-04-14 05:51:56 +02:00
}
2010-04-14 06:00:43 +02:00
/**
* @ package cms
* @ subpackage content
*/
2010-04-14 05:51:56 +02:00
class SilverStripeNavigatorItem_StageLink extends SilverStripeNavigatorItem {
static $priority = 20 ;
2010-04-14 06:03:40 +02:00
function getHTML ( $page ) {
2010-04-14 05:52:28 +02:00
if ( Versioned :: current_stage () == 'Stage' && ! ( ClassInfo :: exists ( 'SiteTreeFutureState' ) && SiteTreeFutureState :: get_future_datetime ())) {
2010-04-14 05:51:56 +02:00
return " <a class= \" current \" > " . _t ( 'ContentController.DRAFTSITE' , 'Draft Site' ) . " </a> " ;
} else {
2010-04-14 06:03:40 +02:00
$thisPage = $page -> Link ();
return " <a href= \" $thisPage ?stage=Stage \" class= \" newWindow \" target= \" site \" style= \" left : -1px; \" > " . _t ( 'ContentController.DRAFTSITE' , 'Draft Site' ) . " </a> " ;
2010-04-14 05:51:56 +02:00
}
}
2010-04-14 06:03:40 +02:00
function getMessage ( $page ) {
2010-04-14 05:51:56 +02:00
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> " ;
}
}
2010-04-14 06:03:40 +02:00
function getLink ( $page ) {
if ( Versioned :: current_stage () == 'Stage' ) {
return $page -> AbsoluteLink () . '?stage=Stage' ;
}
}
2010-04-14 05:51:56 +02:00
}
2010-04-14 06:00:43 +02:00
/**
* @ package cms
* @ subpackage content
*/
2010-04-14 05:51:56 +02:00
class SilverStripeNavigatorItem_LiveLink extends SilverStripeNavigatorItem {
static $priority = 30 ;
2010-04-14 06:03:40 +02:00
function getHTML ( $page ) {
2010-04-14 05:51:56 +02:00
if ( Versioned :: current_stage () == 'Live' ) {
return " <a class= \" current \" > " . _t ( 'ContentController.PUBLISHEDSITE' , 'Published Site' ) . " </a> " ;
} else {
2010-04-14 06:03:40 +02:00
$thisPage = $page -> Link ();
return " <a href= \" $thisPage ?stage=Live \" class= \" newWindow \" target= \" site \" style= \" left : -3px; \" > " . _t ( 'ContentController.PUBLISHEDSITE' , 'Published Site' ) . " </a> " ;
2010-04-14 05:51:56 +02:00
}
}
2010-04-14 06:03:40 +02:00
function getMessage ( $page ) {
2010-04-14 05:51:56 +02:00
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> " ;
}
}
2010-04-14 06:03:40 +02:00
function getLink ( $page ) {
if ( Versioned :: current_stage () == 'Live' ) {
return $page -> AbsoluteLink () . '?stage=Live' ;
}
}
2010-04-14 05:51:56 +02:00
}
2010-04-14 06:00:43 +02:00
/**
* @ package cms
* @ subpackage content
*/
2010-04-14 05:51:56 +02:00
class SilverStripeNavigatorItem_ArchiveLink extends SilverStripeNavigatorItem {
static $priority = 40 ;
2010-04-14 06:03:40 +02:00
function getHTML ( $page ) {
2010-04-14 05:51:56 +02:00
if ( Versioned :: current_archived_date ()) {
return " <a class= \" current \" > " . _t ( 'ContentController.ARCHIVEDSITE' , 'Archived Site' ) . " </a> " ;
}
}
2010-04-14 06:03:40 +02:00
function getMessage ( $page ) {
2010-04-14 05:51:56 +02:00
if ( $date = Versioned :: current_archived_date ()) {
$dateObj = Object :: create ( 'Datetime' , $date , null );
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> " ;
}
}
2010-04-14 06:03:40 +02:00
function getLink ( $page ) {
if ( $date = Versioned :: current_archived_date ()) {
return $page -> AbsoluteLink () . '?archiveDate=' . $date ;
}
}
2010-04-14 05:51:56 +02:00
}
2010-04-14 06:00:43 +02:00
?>