diff --git a/core/control/ContentController.php b/core/control/ContentController.php index dfd627bb2..3ea090944 100755 --- a/core/control/ContentController.php +++ b/core/control/ContentController.php @@ -296,28 +296,7 @@ class ContentController extends Controller { $items = ''; $message = ''; - if(Director::isDev() || Permission::check('CMS_ACCESS_CMSMain') || Permission::check('VIEW_DRAFT_CONTENT')) { - Requirements::css(SAPPHIRE_DIR . '/css/SilverStripeNavigator.css'); - - Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery/jquery.js'); - Requirements::customScript(<<dataRecord) { $return = $nav = SilverStripeNavigator::get_for_record($this->dataRecord); $items = $return['items']; diff --git a/core/control/SilverStripeNavigatorItem.php b/core/control/SilverStripeNavigatorItem.php index 8568bc188..7dbe5cb90 100644 --- a/core/control/SilverStripeNavigatorItem.php +++ b/core/control/SilverStripeNavigatorItem.php @@ -53,8 +53,8 @@ class SilverStripeNavigator { * @subpackage content */ class SilverStripeNavigatorItem extends Object { - function getHTML($controller) {} - function getMessage($controller) {} + function getHTML($page) {} + function getMessage($page) {} } /** @@ -64,12 +64,12 @@ class SilverStripeNavigatorItem extends Object { class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem { static $priority = 10; - function getHTML($controller) { + function getHTML($page) { if(is_a(Controller::curr(), 'CMSMain')) { return 'CMS'; } else { - $cmsLink = 'admin/show/' . $controller->ID; - $cmsLink = "". _t('ContentController.CMS', 'CMS') .""; + $cmsLink = 'admin/show/' . $page->ID; + $cmsLink = "". _t('ContentController.CMS', 'CMS') .""; return $cmsLink; } @@ -77,7 +77,7 @@ class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem { function getLink($page) { if(is_a(Controller::curr(), 'CMSMain')) { - return Controller::curr()->AbsoluteLink() . 'show/' . $page->ID; + return Controller::curr()->AbsoluteLink('show') . $page->ID; } } @@ -90,20 +90,26 @@ class SilverStripeNavigatorItem_CMSLink extends SilverStripeNavigatorItem { class SilverStripeNavigatorItem_StageLink extends SilverStripeNavigatorItem { static $priority = 20; - function getHTML($controller) { + function getHTML($page) { if(Versioned::current_stage() == 'Stage' && !(ClassInfo::exists('SiteTreeFutureState') && SiteTreeFutureState::get_future_datetime())) { return "". _t('ContentController.DRAFTSITE', 'Draft Site') .""; } else { - $thisPage = $controller->Link(); - return "". _t('ContentController.DRAFTSITE', 'Draft Site') .""; + $thisPage = $page->Link(); + return "". _t('ContentController.DRAFTSITE', 'Draft Site') .""; } } - function getMessage($controller) { + function getMessage($page) { if(Versioned::current_stage() == 'Stage') { return "
". _t('ContentController.DRAFTSITE', 'Draft Site') ."
"; } } + + function getLink($page) { + if(Versioned::current_stage() == 'Stage') { + return $page->AbsoluteLink() . '?stage=Stage'; + } + } } /** @@ -113,20 +119,26 @@ class SilverStripeNavigatorItem_StageLink extends SilverStripeNavigatorItem { class SilverStripeNavigatorItem_LiveLink extends SilverStripeNavigatorItem { static $priority = 30; - function getHTML($controller) { + function getHTML($page) { if(Versioned::current_stage() == 'Live') { return "". _t('ContentController.PUBLISHEDSITE', 'Published Site') .""; } else { - $thisPage = $controller->Link(); - return "". _t('ContentController.PUBLISHEDSITE', 'Published Site') .""; + $thisPage = $page->Link(); + return "". _t('ContentController.PUBLISHEDSITE', 'Published Site') .""; } } - function getMessage($controller) { + function getMessage($page) { if(Versioned::current_stage() == 'Live') { return "
". _t('ContentController.PUBLISHEDSITE', 'Published Site') ."
"; } } + + function getLink($page) { + if(Versioned::current_stage() == 'Live') { + return $page->AbsoluteLink() . '?stage=Live'; + } + } } /** @@ -136,19 +148,25 @@ class SilverStripeNavigatorItem_LiveLink extends SilverStripeNavigatorItem { class SilverStripeNavigatorItem_ArchiveLink extends SilverStripeNavigatorItem { static $priority = 40; - function getHTML($controller) { + function getHTML($page) { if(Versioned::current_archived_date()) { return "". _t('ContentController.ARCHIVEDSITE', 'Archived Site') .""; } } - function getMessage($controller) { + function getMessage($page) { if($date = Versioned::current_archived_date()) { $dateObj = Object::create('Datetime', $date, null); return "
". _t('ContentController.ARCHIVEDSITEFROM', 'Archived site from') ."
" . $dateObj->Nice() . "
"; } } + + function getLink($page) { + if($date = Versioned::current_archived_date()) { + return $page->AbsoluteLink() . '?archiveDate=' . $date; + } + } } ?> \ No newline at end of file diff --git a/core/model/SiteTree.php b/core/model/SiteTree.php index e635826e2..ef5ca0cf8 100755 --- a/core/model/SiteTree.php +++ b/core/model/SiteTree.php @@ -1848,8 +1848,16 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid } function getNavigatorItems() { + Requirements::css(SAPPHIRE_DIR . '/css/SilverStripeNavigator.css'); + Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/behaviour/behaviour.js'); + // Requirements::javascript(THIRDPARTY_DIR . '/prototype.js'); + Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery/jquery.js'); + Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-livequery/jquery.livequery.js'); + Requirements::javascript(SAPPHIRE_DIR . '/javascript/SilverStripeNavigator.js'); + $items = ''; $message = ''; + $link = ''; $navItemClasses = ClassInfo::subclassesFor('SilverStripeNavigatorItem'); array_shift($navItemClasses); @@ -1874,6 +1882,13 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid if($text) $items .= $text; $newMessage = $obj->getMessage($this); if($newMessage) $message = $newMessage; + $newLink = $obj->getLink($this); + if($newLink) $link = $newLink; + } + + if($link) { + $data = new ArrayData(array('Link' => $link)); + $items .= $data->renderWith(array('SilverStripeNavigatorLink')); } return array( diff --git a/css/SilverStripeNavigator.css b/css/SilverStripeNavigator.css index 53ddf7b6c..290ecbc1b 100755 --- a/css/SilverStripeNavigator.css +++ b/css/SilverStripeNavigator.css @@ -81,3 +81,21 @@ padding-bottom:4px; padding-right:20px; } + +#SilverStripeNavigatorLinkPopup { + display: none; + position: absolute; + top: -50px; + height: 40px; + width: 280px; + left: 200px; + background-color: white; + border: 1px solid black; + z-index: 100; + color: black; + padding: 5px; +} + +#SilverStripeNavigatorLinkPopup input { + width: 250px; +} diff --git a/templates/SilverStripeNavigatorLink.ss b/templates/SilverStripeNavigatorLink.ss new file mode 100644 index 000000000..0112cfa0e --- /dev/null +++ b/templates/SilverStripeNavigatorLink.ss @@ -0,0 +1,5 @@ +Link +
+

To share this page, copy and paste the link below.

+ +