silverstripe-cms/code/Controllers/SilverStripeNavigatorItem_LiveLink.php

90 lines
2.6 KiB
PHP
Raw Normal View History

<?php
namespace SilverStripe\CMS\Controllers;
use SilverStripe\CMS\Model\RedirectorPage;
use SilverStripe\Control\Controller;
use SilverStripe\Core\Config\Config;
2016-09-08 09:33:32 +02:00
use SilverStripe\Core\Convert;
use SilverStripe\ORM\DataObject;
use SilverStripe\Versioned\Versioned;
class SilverStripeNavigatorItem_LiveLink extends SilverStripeNavigatorItem
{
2017-01-25 21:59:25 +01:00
/** @config */
private static $priority = 30;
2017-01-25 21:59:25 +01:00
public function getHTML()
{
$livePage = $this->getLivePage();
2016-09-07 11:24:30 +02:00
if (!$livePage) {
return null;
}
$linkClass = $this->isActive() ? 'class="current" ' : '';
2017-04-20 03:15:29 +02:00
$linkTitle = _t('SilverStripe\\CMS\\Controllers\\ContentController.PUBLISHEDSITE', 'Published Site');
2016-09-07 11:24:30 +02:00
$recordLink = Convert::raw2att(Controller::join_links($livePage->AbsoluteLink(), "?stage=Live"));
return "<a {$linkClass} href=\"$recordLink\">$linkTitle</a>";
2017-01-25 21:59:25 +01:00
}
2017-01-25 21:59:25 +01:00
public function getTitle()
{
return _t(
2017-04-20 03:15:29 +02:00
'SilverStripe\\CMS\\Controllers\\ContentController.PUBLISHED',
2017-01-25 21:59:25 +01:00
'Published',
'Used for the Switch between draft and published view mode. Needs to be a short label'
);
}
2017-01-25 21:59:25 +01:00
public function getMessage()
{
return "<div id=\"SilverStripeNavigatorMessage\" title=\"" . _t(
2017-04-20 03:45:23 +02:00
'SilverStripe\\CMS\\Controllers\\ContentController.NOTEWONTBESHOWN',
2017-01-25 21:59:25 +01:00
'Note: this message will not be shown to your visitors'
) . "\">" . _t(
2017-04-20 03:15:29 +02:00
'SilverStripe\\CMS\\Controllers\\ContentController.PUBLISHEDSITE',
2017-01-25 21:59:25 +01:00
'Published Site'
) . "</div>";
}
2017-01-25 21:59:25 +01:00
public function getLink()
{
$link = $this->getLivePage()->PreviewLink();
return $link ? Controller::join_links($link, '?stage=Live') : '';
2017-01-25 21:59:25 +01:00
}
2017-01-25 21:59:25 +01:00
public function canView($member = null)
{
/** @var Versioned|DataObject $record */
$record = $this->record;
2017-01-25 21:59:25 +01:00
return (
$record->hasExtension(Versioned::class)
&& $this->showLiveLink()
&& $record->hasStages()
2017-01-25 21:59:25 +01:00
&& $this->getLivePage()
&& $this->getLink()
2017-01-25 21:59:25 +01:00
);
}
/**
* @return bool
*/
public function showLiveLink()
{
return (bool)Config::inst()->get(get_class($this->record), 'show_live_link');
}
2017-01-25 21:59:25 +01:00
public function isActive()
{
return (
(!Versioned::get_stage() || Versioned::get_stage() == 'Live')
&& !$this->isArchived()
);
}
2017-01-25 21:59:25 +01:00
protected function getLivePage()
{
$baseClass = $this->record->baseClass();
return Versioned::get_by_stage($baseClass, Versioned::LIVE)->byID($this->record->ID);
}
}