diff --git a/core/control/ContentController.php b/core/control/ContentController.php index 0c236376e..9618fb6db 100755 --- a/core/control/ContentController.php +++ b/core/control/ContentController.php @@ -293,6 +293,8 @@ class ContentController extends Controller { public function SilverStripeNavigator() { $member = Member::currentUser(); + $items = ''; + $message = ''; if(Director::isDev() || Permission::check('CMS_ACCESS_CMSMain') || Permission::check('VIEW_DRAFT_CONTENT')) { Requirements::css(SAPPHIRE_DIR . '/css/SilverStripeNavigator.css'); @@ -313,55 +315,44 @@ class ContentController extends Controller { })(jQuery); JS ); + - if($this->dataRecord){ - $thisPage = $this->dataRecord->Link(); - $cmsLink = 'admin/show/' . $this->dataRecord->ID; - $cmsLink = "". _t('ContentController.CMS', 'CMS') .""; - } else { - /** - * HGS: If this variable is missing a notice is raised. Subclasses of ContentController - * are required to implement RelativeLink anyway, so this should work even if the - * dataRecord isn't set. - */ - $thisPage = $this->Link(); - $cmsLink = ''; - } - - $archiveLink = ""; - - if($date = Versioned::current_archived_date()) { - $dateObj = Object::create('Datetime', $date, null); - // $dateObj->setVal($date); - - $archiveLink = "". _t('ContentController.ARCHIVEDSITE', 'Archived Site') .""; - $liveLink = "". _t('ContentController.PUBLISHEDSITE', 'Published Site') .""; - $stageLink = "". _t('ContentController.DRAFTSITE', 'Draft Site') .""; - $message = "
"; - - } else if(Versioned::current_stage() == 'Stage') { - $stageLink = "". _t('ContentController.DRAFTSITE', 'Draft Site') .""; - $liveLink = "". _t('ContentController.PUBLISHEDSITE', 'Published Site') .""; - $message = " "; - - } else { - $liveLink = "". _t('ContentController.PUBLISHEDSITE', 'Published Site') .""; - $stageLink = "". _t('ContentController.DRAFTSITE', 'Draft Site') .""; - $message = " "; + + if($this->dataRecord) { + $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($this->dataRecord); + if($text) $items .= $text; + if(!$message) $message = $obj->getMessage($this); + } } if($member) { $firstname = Convert::raw2xml($member->FirstName); - $surname = Convert::raw2xml($member->Surame); + $surname = Convert::raw2xml($member->Surname); $logInMessage = _t('ContentController.LOGGEDINAS', 'Logged in as') ." {$firstname} {$surname} - ". _t('ContentController.LOGOUT', 'Log out'). ""; } else { $logInMessage = _t('ContentController.NOTLOGGEDIN', 'Not logged in') ." - ". _t('ContentController.LOGIN', 'Login') .""; } $viewPageIn = _t('ContentController.VIEWPAGEIN', 'View Page in:'); - /** - * HGS: cmsLink is now only set if there is a dataRecord. You can't view the page in the - * CMS if there is no dataRecord - */ + return <<