mirror of
https://github.com/silverstripe/silverstripe-cms
synced 2024-10-22 08:05:56 +02:00
Merge pull request #2761 from creative-commoners/pulls/5/migrate-preview-bits
API Migrate SilverStripeNagivator classes
This commit is contained in:
commit
e5cea70b54
@ -8,6 +8,7 @@ use SilverStripe\Admin\AdminRootController;
|
|||||||
use SilverStripe\Admin\CMSBatchActionHandler;
|
use SilverStripe\Admin\CMSBatchActionHandler;
|
||||||
use SilverStripe\Admin\LeftAndMain;
|
use SilverStripe\Admin\LeftAndMain;
|
||||||
use SilverStripe\Admin\LeftAndMainFormRequestHandler;
|
use SilverStripe\Admin\LeftAndMainFormRequestHandler;
|
||||||
|
use SilverStripe\Admin\Navigator\SilverStripeNavigator;
|
||||||
use SilverStripe\CMS\BatchActions\CMSBatchAction_Archive;
|
use SilverStripe\CMS\BatchActions\CMSBatchAction_Archive;
|
||||||
use SilverStripe\CMS\BatchActions\CMSBatchAction_Publish;
|
use SilverStripe\CMS\BatchActions\CMSBatchAction_Publish;
|
||||||
use SilverStripe\CMS\BatchActions\CMSBatchAction_Restore;
|
use SilverStripe\CMS\BatchActions\CMSBatchAction_Restore;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace SilverStripe\CMS\Controllers;
|
namespace SilverStripe\CMS\Controllers;
|
||||||
|
|
||||||
|
use SilverStripe\Admin\Navigator\SilverStripeNavigator;
|
||||||
use SilverStripe\CMS\Model\SiteTree;
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Control\Director;
|
use SilverStripe\Control\Director;
|
||||||
|
@ -1,107 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\CMS\Controllers;
|
|
||||||
|
|
||||||
use SilverStripe\ORM\CMSPreviewable;
|
|
||||||
use SilverStripe\Core\ClassInfo;
|
|
||||||
use SilverStripe\ORM\ArrayList;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\ORM\SS_List;
|
|
||||||
use SilverStripe\View\ViewableData;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility class representing links to different views of a record
|
|
||||||
* for CMS authors, usually for {@link SiteTree} objects with "stage" and "live" links.
|
|
||||||
* Useful both in the CMS and alongside the page template (for logged in authors).
|
|
||||||
* The class can be used for any {@link DataObject} subclass implementing the {@link CMSPreviewable} interface.
|
|
||||||
*
|
|
||||||
* New item types can be defined by extending the {@link SilverStripeNavigatorItem} class,
|
|
||||||
* for example the "cmsworkflow" module defines a new "future state" item with a date selector
|
|
||||||
* to view embargoed data at a future point in time. So the item doesn't always have to be a simple link.
|
|
||||||
*/
|
|
||||||
class SilverStripeNavigator extends ViewableData
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var DataObject|\SilverStripe\ORM\CMSPreviewable
|
|
||||||
*/
|
|
||||||
protected $record;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param DataObject|\SilverStripe\ORM\CMSPreviewable $record
|
|
||||||
*/
|
|
||||||
public function __construct(CMSPreviewable $record)
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
$this->record = $record;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return SS_List of SilverStripeNavigatorItem
|
|
||||||
*/
|
|
||||||
public function getItems()
|
|
||||||
{
|
|
||||||
$items = [];
|
|
||||||
|
|
||||||
$classes = ClassInfo::subclassesFor(SilverStripeNavigatorItem::class);
|
|
||||||
array_shift($classes);
|
|
||||||
|
|
||||||
// Sort menu items according to priority
|
|
||||||
foreach ($classes as $class) {
|
|
||||||
/** @var SilverStripeNavigatorItem $item */
|
|
||||||
$item = new $class($this->record);
|
|
||||||
if (!$item->canView()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This funny litle formula ensures that the first item added with the same priority will be left-most.
|
|
||||||
$priority = $item->getPriority() * 100 - 1;
|
|
||||||
|
|
||||||
// Ensure that we can have duplicates with the same (default) priority
|
|
||||||
while (isset($items[$priority])) {
|
|
||||||
$priority++;
|
|
||||||
}
|
|
||||||
|
|
||||||
$items[$priority] = $item;
|
|
||||||
}
|
|
||||||
ksort($items);
|
|
||||||
|
|
||||||
// Drop the keys and let the ArrayList handle the numbering, so $First, $Last and others work properly.
|
|
||||||
return new ArrayList(array_values($items ?? []));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return DataObject|\SilverStripe\ORM\CMSPreviewable
|
|
||||||
*/
|
|
||||||
public function getRecord()
|
|
||||||
{
|
|
||||||
return $this->record;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param DataObject|CMSPreviewable $record
|
|
||||||
* @return array template data
|
|
||||||
*/
|
|
||||||
public static function get_for_record($record)
|
|
||||||
{
|
|
||||||
$html = '';
|
|
||||||
$message = '';
|
|
||||||
$navigator = new SilverStripeNavigator($record);
|
|
||||||
$items = $navigator->getItems();
|
|
||||||
foreach ($items as $item) {
|
|
||||||
$text = $item->getHTML();
|
|
||||||
if ($text) {
|
|
||||||
$html .= $text;
|
|
||||||
}
|
|
||||||
$newMessage = $item->getMessage();
|
|
||||||
if ($newMessage && $item->isActive()) {
|
|
||||||
$message = $newMessage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
|
||||||
'items' => $html,
|
|
||||||
'message' => $message
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,136 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\CMS\Controllers;
|
|
||||||
|
|
||||||
use SilverStripe\ORM\CMSPreviewable;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
use SilverStripe\Security\Member;
|
|
||||||
use SilverStripe\View\ViewableData;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Navigator items are links that appear in the $SilverStripeNavigator bar.
|
|
||||||
* To add an item, extend this class - it will be automatically picked up.
|
|
||||||
* When instanciating items manually, please ensure to call {@link canView()}.
|
|
||||||
*/
|
|
||||||
abstract class SilverStripeNavigatorItem extends ViewableData
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param DataObject|CMSPreviewable
|
|
||||||
*/
|
|
||||||
protected $record;
|
|
||||||
|
|
||||||
/** @var string */
|
|
||||||
protected $recordLink;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param DataObject|CMSPreviewable $record
|
|
||||||
*/
|
|
||||||
public function __construct(CMSPreviewable $record)
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
$this->record = $record;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string HTML, mostly a link - but can be more complex as well.
|
|
||||||
* For example, a "future state" item might show a date selector.
|
|
||||||
*/
|
|
||||||
abstract public function getHTML();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
* Get the Title of an item
|
|
||||||
*/
|
|
||||||
abstract public function getTitle();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Machine-friendly name.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getName()
|
|
||||||
{
|
|
||||||
return substr(static::class, strpos(static::class, '_') + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Optional link to a specific view of this record.
|
|
||||||
* Not all items are simple links, please use {@link getHTML()}
|
|
||||||
* to represent an item in markup unless you know what you're doing.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getLink()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getMessage()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return DataObject
|
|
||||||
*/
|
|
||||||
public function getRecord()
|
|
||||||
{
|
|
||||||
return $this->record;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public function getPriority()
|
|
||||||
{
|
|
||||||
return $this->config()->get('priority');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* As items might convey different record states like a "stage" or "live" table,
|
|
||||||
* an item can be active (showing the record in this state).
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function isActive()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filters items based on member permissions or other criteria,
|
|
||||||
* such as if a state is generally available for the current record.
|
|
||||||
*
|
|
||||||
* @param Member $member
|
|
||||||
* @return Boolean
|
|
||||||
*/
|
|
||||||
public function canView($member = null)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Counts as "archived" if the current record is a different version from both live and draft.
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function isArchived()
|
|
||||||
{
|
|
||||||
/** @var Versioned|DataObject $record */
|
|
||||||
$record = $this->record;
|
|
||||||
if (!$record->hasExtension(Versioned::class) || !$record->hasStages()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($record->_cached_isArchived)) {
|
|
||||||
$record->_cached_isArchived = $record->isArchived();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $record->_cached_isArchived;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,71 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace SilverStripe\CMS\Controllers;
|
|
||||||
|
|
||||||
use SilverStripe\CMS\Model\RedirectorPage;
|
|
||||||
use SilverStripe\Control\Controller;
|
|
||||||
use SilverStripe\Core\Convert;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\ORM\FieldType\DBDatetime;
|
|
||||||
use SilverStripe\ORM\FieldType\DBField;
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
|
|
||||||
class SilverStripeNavigatorItem_ArchiveLink extends SilverStripeNavigatorItem
|
|
||||||
{
|
|
||||||
/** @config */
|
|
||||||
private static $priority = 40;
|
|
||||||
|
|
||||||
public function getHTML()
|
|
||||||
{
|
|
||||||
$linkClass = $this->isActive() ? 'ss-ui-button current' : 'ss-ui-button';
|
|
||||||
$linkTitle = _t('SilverStripe\\CMS\\Controllers\\ContentController.ARCHIVEDSITE', 'Preview version');
|
|
||||||
$recordLink = Convert::raw2att(Controller::join_links(
|
|
||||||
$this->record->AbsoluteLink(),
|
|
||||||
'?archiveDate=' . urlencode($this->record->LastEdited ?? '')
|
|
||||||
));
|
|
||||||
return "<a class=\"{$linkClass}\" href=\"$recordLink\" target=\"_blank\">$linkTitle</a>";
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTitle()
|
|
||||||
{
|
|
||||||
return _t('SilverStripe\\CMS\\Controllers\\SilverStripeNavigator.ARCHIVED', 'Archived');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMessage()
|
|
||||||
{
|
|
||||||
$date = Versioned::current_archived_date();
|
|
||||||
if (empty($date)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
/** @var DBDatetime $dateObj */
|
|
||||||
$dateObj = DBField::create_field('Datetime', $date);
|
|
||||||
$title = _t('SilverStripe\\CMS\\Controllers\\ContentController.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors');
|
|
||||||
return "<div id=\"SilverStripeNavigatorMessage\" title=\"{$title}\">"
|
|
||||||
. _t('SilverStripe\\CMS\\Controllers\\ContentController.ARCHIVEDSITEFROM', 'Archived site from')
|
|
||||||
. "<br />" . $dateObj->Nice() . "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLink()
|
|
||||||
{
|
|
||||||
$link = $this->record->PreviewLink();
|
|
||||||
return $link ? Controller::join_links($link, '?archiveDate=' . urlencode($this->record->LastEdited ?? '')) : '';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function canView($member = null)
|
|
||||||
{
|
|
||||||
/** @var Versioned|DataObject $record */
|
|
||||||
$record = $this->record;
|
|
||||||
return (
|
|
||||||
$record->hasExtension(Versioned::class)
|
|
||||||
&& $record->hasStages()
|
|
||||||
&& $this->isArchived()
|
|
||||||
// Don't follow redirects in preview, they break the CMS editing form
|
|
||||||
&& !($record instanceof RedirectorPage)
|
|
||||||
&& $this->getLink()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isActive()
|
|
||||||
{
|
|
||||||
return $this->isArchived();
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,6 +3,7 @@
|
|||||||
namespace SilverStripe\CMS\Controllers;
|
namespace SilverStripe\CMS\Controllers;
|
||||||
|
|
||||||
use SilverStripe\Admin\LeftAndMain;
|
use SilverStripe\Admin\LeftAndMain;
|
||||||
|
use SilverStripe\Admin\Navigator\SilverStripeNavigatorItem;
|
||||||
use SilverStripe\CMS\Model\RedirectorPage;
|
use SilverStripe\CMS\Model\RedirectorPage;
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
|
|
||||||
|
@ -1,89 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace SilverStripe\CMS\Controllers;
|
|
||||||
|
|
||||||
use SilverStripe\CMS\Model\RedirectorPage;
|
|
||||||
use SilverStripe\Control\Controller;
|
|
||||||
use SilverStripe\Core\Config\Config;
|
|
||||||
use SilverStripe\Core\Convert;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
|
|
||||||
class SilverStripeNavigatorItem_LiveLink extends SilverStripeNavigatorItem
|
|
||||||
{
|
|
||||||
/** @config */
|
|
||||||
private static $priority = 30;
|
|
||||||
|
|
||||||
public function getHTML()
|
|
||||||
{
|
|
||||||
$livePage = $this->getLivePage();
|
|
||||||
if (!$livePage) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$linkClass = $this->isActive() ? 'class="current" ' : '';
|
|
||||||
$linkTitle = _t('SilverStripe\\CMS\\Controllers\\ContentController.PUBLISHEDSITE', 'Published Site');
|
|
||||||
$recordLink = Convert::raw2att(Controller::join_links($livePage->AbsoluteLink(), "?stage=Live"));
|
|
||||||
return "<a {$linkClass} href=\"$recordLink\">$linkTitle</a>";
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTitle()
|
|
||||||
{
|
|
||||||
return _t(
|
|
||||||
'SilverStripe\\CMS\\Controllers\\ContentController.PUBLISHED',
|
|
||||||
'Published',
|
|
||||||
'Used for the Switch between draft and published view mode. Needs to be a short label'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMessage()
|
|
||||||
{
|
|
||||||
return "<div id=\"SilverStripeNavigatorMessage\" title=\"" . _t(
|
|
||||||
'SilverStripe\\CMS\\Controllers\\ContentController.NOTEWONTBESHOWN',
|
|
||||||
'Note: this message will not be shown to your visitors'
|
|
||||||
) . "\">" . _t(
|
|
||||||
'SilverStripe\\CMS\\Controllers\\ContentController.PUBLISHEDSITE',
|
|
||||||
'Published Site'
|
|
||||||
) . "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLink()
|
|
||||||
{
|
|
||||||
$link = $this->getLivePage()->PreviewLink();
|
|
||||||
return $link ? Controller::join_links($link, '?stage=Live') : '';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function canView($member = null)
|
|
||||||
{
|
|
||||||
/** @var Versioned|DataObject $record */
|
|
||||||
$record = $this->record;
|
|
||||||
return (
|
|
||||||
$record->hasExtension(Versioned::class)
|
|
||||||
&& $this->showLiveLink()
|
|
||||||
&& $record->hasStages()
|
|
||||||
&& $this->getLivePage()
|
|
||||||
&& $this->getLink()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function showLiveLink()
|
|
||||||
{
|
|
||||||
return (bool)Config::inst()->get(get_class($this->record), 'show_live_link');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isActive()
|
|
||||||
{
|
|
||||||
return (
|
|
||||||
(!Versioned::get_stage() || Versioned::get_stage() == 'Live')
|
|
||||||
&& !$this->isArchived()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getLivePage()
|
|
||||||
{
|
|
||||||
$baseClass = $this->record->baseClass();
|
|
||||||
return Versioned::get_by_stage($baseClass, Versioned::LIVE)->byID($this->record->ID);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,99 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace SilverStripe\CMS\Controllers;
|
|
||||||
|
|
||||||
use SilverStripe\CMS\Model\RedirectorPage;
|
|
||||||
use SilverStripe\Control\Controller;
|
|
||||||
use SilverStripe\Core\Config\Config;
|
|
||||||
use SilverStripe\Core\ClassInfo;
|
|
||||||
use SilverStripe\Core\Convert;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
use SiteTreeFutureState;
|
|
||||||
|
|
||||||
class SilverStripeNavigatorItem_StageLink extends SilverStripeNavigatorItem
|
|
||||||
{
|
|
||||||
/** @config */
|
|
||||||
private static $priority = 20;
|
|
||||||
|
|
||||||
public function getHTML()
|
|
||||||
{
|
|
||||||
$draftPage = $this->getDraftPage();
|
|
||||||
if (!$draftPage) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
$linkClass = $this->isActive() ? 'class="current" ' : '';
|
|
||||||
$linkTitle = _t('SilverStripe\\CMS\\Controllers\\ContentController.DRAFTSITE', 'Draft Site');
|
|
||||||
$recordLink = Convert::raw2att(Controller::join_links($draftPage->AbsoluteLink(), "?stage=Stage"));
|
|
||||||
return "<a {$linkClass} href=\"$recordLink\">$linkTitle</a>";
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTitle()
|
|
||||||
{
|
|
||||||
return _t(
|
|
||||||
'SilverStripe\\CMS\\Controllers\\ContentController.DRAFT',
|
|
||||||
'Draft',
|
|
||||||
'Used for the Switch between draft and published view mode. Needs to be a short label'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMessage()
|
|
||||||
{
|
|
||||||
return "<div id=\"SilverStripeNavigatorMessage\" title=\"" . _t(
|
|
||||||
'SilverStripe\\CMS\\Controllers\\ContentController.NOTEWONTBESHOWN',
|
|
||||||
'Note: this message will not be shown to your visitors'
|
|
||||||
) . "\">" . _t(
|
|
||||||
'SilverStripe\\CMS\\Controllers\\ContentController.DRAFTSITE',
|
|
||||||
'Draft Site'
|
|
||||||
) . "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLink()
|
|
||||||
{
|
|
||||||
$date = Versioned::current_archived_date();
|
|
||||||
$link = $this->record->PreviewLink();
|
|
||||||
if (!$link) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
return Controller::join_links(
|
|
||||||
$link,
|
|
||||||
'?stage=Stage',
|
|
||||||
$date ? '?archiveDate=' . $date : null
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function canView($member = null)
|
|
||||||
{
|
|
||||||
/** @var Versioned|DataObject $record */
|
|
||||||
$record = $this->record;
|
|
||||||
return (
|
|
||||||
$record->hasExtension(Versioned::class)
|
|
||||||
&& $this->showStageLink()
|
|
||||||
&& $record->hasStages()
|
|
||||||
&& $this->getDraftPage()
|
|
||||||
&& $this->getLink()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function showStageLink()
|
|
||||||
{
|
|
||||||
return (bool)Config::inst()->get(get_class($this->record), 'show_stage_link');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isActive()
|
|
||||||
{
|
|
||||||
return (
|
|
||||||
Versioned::get_stage() == 'Stage'
|
|
||||||
&& !(ClassInfo::exists('SiteTreeFutureState') && SiteTreeFutureState::get_future_datetime())
|
|
||||||
&& !$this->isArchived()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function getDraftPage()
|
|
||||||
{
|
|
||||||
$baseClass = $this->record->baseClass();
|
|
||||||
return Versioned::get_by_stage($baseClass, Versioned::DRAFT)->byID($this->record->ID);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\CMS\Controllers;
|
|
||||||
|
|
||||||
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem;
|
|
||||||
use SilverStripe\Core\Config\Config;
|
|
||||||
use SilverStripe\Core\Convert;
|
|
||||||
use SilverStripe\Security\Member;
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
|
|
||||||
class SilverStripeNavigatorItem_Unversioned extends SilverStripeNavigatorItem
|
|
||||||
{
|
|
||||||
public function getHTML()
|
|
||||||
{
|
|
||||||
$recordLink = Convert::raw2att($this->getLink());
|
|
||||||
$linkTitle = _t('SilverStripe\\CMS\\Controllers\\ContentController.UNVERSIONEDPREVIEW', 'Preview');
|
|
||||||
return "<a class=\"current\" href=\"$recordLink\">$linkTitle</a>";
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLink()
|
|
||||||
{
|
|
||||||
return $this->getRecord()->PreviewLink() ?? '';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTitle()
|
|
||||||
{
|
|
||||||
return _t(
|
|
||||||
'SilverStripe\\CMS\\Controllers\\ContentController.UNVERSIONEDPREVIEW',
|
|
||||||
'Preview',
|
|
||||||
'Used for the Switch between states (if any other other states are added). Needs to be a short label'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* True if the record doesn't have the Versioned extension and is configured to display this item.
|
|
||||||
*
|
|
||||||
* @param Member $member
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function canView($member = null)
|
|
||||||
{
|
|
||||||
return (
|
|
||||||
$this->recordIsUnversioned()
|
|
||||||
&& $this->showUnversionedLink()
|
|
||||||
&& $this->getLink()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function recordIsUnversioned(): bool
|
|
||||||
{
|
|
||||||
$record = $this->getRecord();
|
|
||||||
// If the record has the Versioned extension, it can be considered unversioned
|
|
||||||
// for the purposes of this class if it has no stages and is not archived.
|
|
||||||
if ($record->hasExtension(Versioned::class)) {
|
|
||||||
return (!$record->hasStages()) && !$this->isArchived();
|
|
||||||
}
|
|
||||||
// Completely unversioned.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* True if the record is configured to display this item.
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function showUnversionedLink(): bool
|
|
||||||
{
|
|
||||||
return (bool) Config::inst()->get(get_class($this->record), 'show_unversioned_preview_link');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This item is always active, as there are unlikely to be other preview states available for the record.
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function isActive()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -114,8 +114,6 @@ en:
|
|||||||
SilverStripe\CMS\Controllers\CMSSiteTreeFilter_StatusRemovedFromDraftPages:
|
SilverStripe\CMS\Controllers\CMSSiteTreeFilter_StatusRemovedFromDraftPages:
|
||||||
Title: 'Live but removed from draft'
|
Title: 'Live but removed from draft'
|
||||||
SilverStripe\CMS\Controllers\ContentController:
|
SilverStripe\CMS\Controllers\ContentController:
|
||||||
ARCHIVEDSITE: 'Preview version'
|
|
||||||
ARCHIVEDSITEFROM: 'Archived site from'
|
|
||||||
CMS: CMS
|
CMS: CMS
|
||||||
DRAFT: Draft
|
DRAFT: Draft
|
||||||
DRAFTSITE: 'Draft Site'
|
DRAFTSITE: 'Draft Site'
|
||||||
@ -134,11 +132,8 @@ en:
|
|||||||
Password: Password
|
Password: Password
|
||||||
PostInstallTutorialIntro: 'This website is a simplistic version of a SilverStripe 3 site. To extend this, please take a look at {link}.'
|
PostInstallTutorialIntro: 'This website is a simplistic version of a SilverStripe 3 site. To extend this, please take a look at {link}.'
|
||||||
StartEditing: 'You can start editing your content by opening <a href="{link}">the CMS</a>.'
|
StartEditing: 'You can start editing your content by opening <a href="{link}">the CMS</a>.'
|
||||||
UNVERSIONEDPREVIEW: Preview
|
|
||||||
UnableDeleteInstall: 'Unable to delete installation files. Please delete the files below manually'
|
UnableDeleteInstall: 'Unable to delete installation files. Please delete the files below manually'
|
||||||
VIEWPAGEIN: 'View Page in:'
|
VIEWPAGEIN: 'View Page in:'
|
||||||
SilverStripe\CMS\Controllers\SilverStripeNavigator:
|
|
||||||
ARCHIVED: Archived
|
|
||||||
SilverStripe\CMS\Forms\AnchorLinkFormFactory:
|
SilverStripe\CMS\Forms\AnchorLinkFormFactory:
|
||||||
ANCHORVALUE: Anchor
|
ANCHORVALUE: Anchor
|
||||||
SilverStripe\CMS\Forms\InternalLinkFormFactory:
|
SilverStripe\CMS\Forms\InternalLinkFormFactory:
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
<div class="cms-preview fill-height flexbox-area-grow" data-layout-type="border">
|
|
||||||
<div class="panel flexbox-area-grow fill-height">
|
|
||||||
<div class="preview-note">
|
|
||||||
<div class="icon font-icon-monitor display-1"></div>
|
|
||||||
<%t SilverStripe\CMS\Controllers\CMSPageHistoryController.NO_PREVIEW 'No preview available' %>
|
|
||||||
</div>
|
|
||||||
<div class="preview__device">
|
|
||||||
<div class="preview-device-outer">
|
|
||||||
<div class="preview-device-inner">
|
|
||||||
<iframe src="about:blank" class="center" name="cms-preview-iframe"></iframe>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="toolbar toolbar--south cms-content-controls cms-preview-controls"></div>
|
|
||||||
</div>
|
|
@ -1,238 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\CMS\Tests\Controllers;
|
|
||||||
|
|
||||||
use SilverStripe\CMS\Controllers\SilverStripeNavigator;
|
|
||||||
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem_ArchiveLink;
|
|
||||||
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem_LiveLink;
|
|
||||||
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem_StageLink;
|
|
||||||
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem_Unversioned;
|
|
||||||
use SilverStripe\Dev\SapphireTest;
|
|
||||||
|
|
||||||
class SilverStripeNavigatorTest extends SapphireTest
|
|
||||||
{
|
|
||||||
protected static $fixture_file = 'CMSMainTest.yml';
|
|
||||||
|
|
||||||
protected static $extra_dataobjects = [
|
|
||||||
SilverStripeNavigatorTest\UnstagedRecord::class,
|
|
||||||
SilverStripeNavigatorTest\UnversionedRecord::class,
|
|
||||||
SilverStripeNavigatorTest\VersionedRecord::class,
|
|
||||||
];
|
|
||||||
|
|
||||||
public function testGetItemsAutoDiscovery(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\VersionedRecord();
|
|
||||||
$record->PreviewLinkTestProperty = 'some-value';
|
|
||||||
$record->write();
|
|
||||||
$navigator = new SilverStripeNavigator($record);
|
|
||||||
$classes = array_map('get_class', $navigator->getItems()->toArray());
|
|
||||||
|
|
||||||
$this->assertContains(
|
|
||||||
SilverStripeNavigatorTest_TestItem::class,
|
|
||||||
$classes,
|
|
||||||
'Autodiscovers new classes'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetItemsPublished(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\VersionedRecord();
|
|
||||||
$record->PreviewLinkTestProperty = 'some-value';
|
|
||||||
$record->write();
|
|
||||||
$record->publishRecursive();
|
|
||||||
$navigator = new SilverStripeNavigator($record);
|
|
||||||
$classes = array_map('get_class', $navigator->getItems()->toArray());
|
|
||||||
|
|
||||||
// Has the live and staged links
|
|
||||||
$this->assertContains(SilverStripeNavigatorItem_LiveLink::class, $classes);
|
|
||||||
$this->assertContains(SilverStripeNavigatorItem_StageLink::class, $classes);
|
|
||||||
|
|
||||||
// Does not have the other links
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_ArchiveLink::class, $classes);
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_Unversioned::class, $classes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetItemsStaged(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\VersionedRecord();
|
|
||||||
$record->PreviewLinkTestProperty = 'some-value';
|
|
||||||
$record->write();
|
|
||||||
$navigator = new SilverStripeNavigator($record);
|
|
||||||
$classes = array_map('get_class', $navigator->getItems()->toArray());
|
|
||||||
|
|
||||||
// Has the stage link
|
|
||||||
$this->assertContains(SilverStripeNavigatorItem_StageLink::class, $classes);
|
|
||||||
|
|
||||||
// Does not have the other links
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_ArchiveLink::class, $classes);
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_LiveLink::class, $classes);
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_Unversioned::class, $classes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetItemsArchived(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\VersionedRecord();
|
|
||||||
$record->PreviewLinkTestProperty = 'some-value';
|
|
||||||
$record->write();
|
|
||||||
$record->doArchive();
|
|
||||||
$navigator = new SilverStripeNavigator($record);
|
|
||||||
$classes = array_map('get_class', $navigator->getItems()->toArray());
|
|
||||||
|
|
||||||
// Has the archived link
|
|
||||||
$this->assertContains(SilverStripeNavigatorItem_ArchiveLink::class, $classes);
|
|
||||||
|
|
||||||
// Does not have the other links
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_LiveLink::class, $classes);
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_StageLink::class, $classes);
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_UnversionedLink::class, $classes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetItemsUnstaged(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\UnstagedRecord();
|
|
||||||
$record->previewLinkTestProperty = 'some-value';
|
|
||||||
$record->write();
|
|
||||||
$navigator = new SilverStripeNavigator($record);
|
|
||||||
$classes = array_map('get_class', $navigator->getItems()->toArray());
|
|
||||||
|
|
||||||
// Has the unversioned link
|
|
||||||
$this->assertContains(SilverStripeNavigatorItem_Unversioned::class, $classes);
|
|
||||||
|
|
||||||
// Does not have the other links
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_ArchiveLink::class, $classes);
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_LiveLink::class, $classes);
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_StageLink::class, $classes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetItemsUnversioned(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\UnversionedRecord();
|
|
||||||
$record->previewLinkTestProperty = 'some-value';
|
|
||||||
$record->write();
|
|
||||||
$navigator = new SilverStripeNavigator($record);
|
|
||||||
$classes = array_map('get_class', $navigator->getItems()->toArray());
|
|
||||||
|
|
||||||
// Has the unversioned link
|
|
||||||
$this->assertContains(SilverStripeNavigatorItem_Unversioned::class, $classes);
|
|
||||||
|
|
||||||
// Does not have the other links
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_ArchiveLink::class, $classes);
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_LiveLink::class, $classes);
|
|
||||||
$this->assertNotContains(SilverStripeNavigatorItem_StageLink::class, $classes);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCanViewPublished(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\VersionedRecord();
|
|
||||||
$record->write();
|
|
||||||
$record->publishRecursive();
|
|
||||||
$liveLinkItem = new SilverStripeNavigatorItem_LiveLink($record);
|
|
||||||
$stagedLinkItem = new SilverStripeNavigatorItem_StageLink($record);
|
|
||||||
$archivedLinkItem = new SilverStripeNavigatorItem_ArchiveLink($record);
|
|
||||||
$unversionedLinkItem = new SilverStripeNavigatorItem_Unversioned($record);
|
|
||||||
|
|
||||||
// Cannot view staged and live links when there's no preview link
|
|
||||||
$this->assertFalse($liveLinkItem->canView());
|
|
||||||
$this->assertFalse($stagedLinkItem->canView());
|
|
||||||
|
|
||||||
$record->PreviewLinkTestProperty = 'some-value';
|
|
||||||
$record->write();
|
|
||||||
$record->publishRecursive();
|
|
||||||
|
|
||||||
// Can view staged and live links
|
|
||||||
$this->assertTrue($liveLinkItem->canView());
|
|
||||||
$this->assertTrue($stagedLinkItem->canView());
|
|
||||||
// Cannot view the other links
|
|
||||||
$this->assertFalse($archivedLinkItem->canView());
|
|
||||||
$this->assertFalse($unversionedLinkItem->canView());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCanViewStaged(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\VersionedRecord();
|
|
||||||
$record->write();
|
|
||||||
$liveLinkItem = new SilverStripeNavigatorItem_LiveLink($record);
|
|
||||||
$stagedLinkItem = new SilverStripeNavigatorItem_StageLink($record);
|
|
||||||
$archivedLinkItem = new SilverStripeNavigatorItem_ArchiveLink($record);
|
|
||||||
$unversionedLinkItem = new SilverStripeNavigatorItem_Unversioned($record);
|
|
||||||
|
|
||||||
// Cannot view staged link when there's no preview link
|
|
||||||
$this->assertFalse($stagedLinkItem->canView());
|
|
||||||
|
|
||||||
$record->PreviewLinkTestProperty = 'some-value';
|
|
||||||
|
|
||||||
// Can view staged link
|
|
||||||
$this->assertTrue($stagedLinkItem->canView());
|
|
||||||
// Cannot view the other links
|
|
||||||
$this->assertFalse($liveLinkItem->canView());
|
|
||||||
$this->assertFalse($archivedLinkItem->canView());
|
|
||||||
$this->assertFalse($unversionedLinkItem->canView());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCanViewArchived(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\VersionedRecord();
|
|
||||||
$record->write();
|
|
||||||
$record->doArchive();
|
|
||||||
$liveLinkItem = new SilverStripeNavigatorItem_LiveLink($record);
|
|
||||||
$stagedLinkItem = new SilverStripeNavigatorItem_StageLink($record);
|
|
||||||
$archivedLinkItem = new SilverStripeNavigatorItem_ArchiveLink($record);
|
|
||||||
$unversionedLinkItem = new SilverStripeNavigatorItem_Unversioned($record);
|
|
||||||
|
|
||||||
// Cannot view archived link when there's no preview link
|
|
||||||
$this->assertFalse($archivedLinkItem->canView());
|
|
||||||
|
|
||||||
$record->PreviewLinkTestProperty = 'some-value';
|
|
||||||
|
|
||||||
// Can view archived link
|
|
||||||
$this->assertTrue($archivedLinkItem->canView());
|
|
||||||
// Cannot view the other links
|
|
||||||
$this->assertFalse($liveLinkItem->canView());
|
|
||||||
$this->assertFalse($stagedLinkItem->canView());
|
|
||||||
$this->assertFalse($unversionedLinkItem->canView());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCanViewUnstaged(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\UnstagedRecord();
|
|
||||||
$record->write();
|
|
||||||
$liveLinkItem = new SilverStripeNavigatorItem_LiveLink($record);
|
|
||||||
$stagedLinkItem = new SilverStripeNavigatorItem_StageLink($record);
|
|
||||||
$archivedLinkItem = new SilverStripeNavigatorItem_ArchiveLink($record);
|
|
||||||
$unversionedLinkItem = new SilverStripeNavigatorItem_Unversioned($record);
|
|
||||||
|
|
||||||
// Cannot view unversioned link when there's no preview link
|
|
||||||
$this->assertFalse($unversionedLinkItem->canView());
|
|
||||||
|
|
||||||
$record->previewLinkTestProperty = 'some-value';
|
|
||||||
|
|
||||||
// Can view unversioned link
|
|
||||||
$this->assertTrue($unversionedLinkItem->canView());
|
|
||||||
// Cannot view the other links
|
|
||||||
$this->assertFalse($liveLinkItem->canView());
|
|
||||||
$this->assertFalse($stagedLinkItem->canView());
|
|
||||||
$this->assertFalse($archivedLinkItem->canView());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCanViewUnversioned(): void
|
|
||||||
{
|
|
||||||
$record = new SilverStripeNavigatorTest\UnversionedRecord();
|
|
||||||
$record->write();
|
|
||||||
$liveLinkItem = new SilverStripeNavigatorItem_LiveLink($record);
|
|
||||||
$stagedLinkItem = new SilverStripeNavigatorItem_StageLink($record);
|
|
||||||
$archivedLinkItem = new SilverStripeNavigatorItem_ArchiveLink($record);
|
|
||||||
$unversionedLinkItem = new SilverStripeNavigatorItem_Unversioned($record);
|
|
||||||
|
|
||||||
// Cannot view unversioned link when there's no preview link
|
|
||||||
$this->assertFalse($unversionedLinkItem->canView());
|
|
||||||
|
|
||||||
$record->previewLinkTestProperty = 'some-value';
|
|
||||||
|
|
||||||
// Can view unversioned link
|
|
||||||
$this->assertTrue($unversionedLinkItem->canView());
|
|
||||||
// Cannot view the other links
|
|
||||||
$this->assertFalse($liveLinkItem->canView());
|
|
||||||
$this->assertFalse($stagedLinkItem->canView());
|
|
||||||
$this->assertFalse($archivedLinkItem->canView());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\CMS\Tests\Controllers\SilverStripeNavigatorTest;
|
|
||||||
|
|
||||||
use SilverStripe\Dev\TestOnly;
|
|
||||||
use SilverStripe\ORM\CMSPreviewable;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Versioned but not staged
|
|
||||||
*/
|
|
||||||
class UnstagedRecord extends DataObject implements TestOnly, CMSPreviewable
|
|
||||||
{
|
|
||||||
private static $table_name = 'SilverStripeNavigatorTest_UnstagedRecord';
|
|
||||||
|
|
||||||
private static $show_stage_link = true;
|
|
||||||
|
|
||||||
private static $show_live_link = true;
|
|
||||||
|
|
||||||
private static $show_unversioned_preview_link = true;
|
|
||||||
|
|
||||||
private static $extensions = [
|
|
||||||
Versioned::class . '.versioned',
|
|
||||||
];
|
|
||||||
|
|
||||||
public $previewLinkTestProperty = null;
|
|
||||||
|
|
||||||
public function PreviewLink($action = null)
|
|
||||||
{
|
|
||||||
return $this->previewLinkTestProperty;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* To determine preview mechanism (e.g. embedded / iframe)
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getMimeType()
|
|
||||||
{
|
|
||||||
return 'text/html';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function CMSEditLink()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\CMS\Tests\Controllers\SilverStripeNavigatorTest;
|
|
||||||
|
|
||||||
use SilverStripe\Dev\TestOnly;
|
|
||||||
use SilverStripe\ORM\CMSPreviewable;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
|
|
||||||
class UnversionedRecord extends DataObject implements TestOnly, CMSPreviewable
|
|
||||||
{
|
|
||||||
private static $table_name = 'SilverStripeNavigatorTest_UnversionedRecord';
|
|
||||||
|
|
||||||
private static $show_stage_link = true;
|
|
||||||
|
|
||||||
private static $show_live_link = true;
|
|
||||||
|
|
||||||
private static $show_unversioned_preview_link = true;
|
|
||||||
|
|
||||||
public $previewLinkTestProperty = null;
|
|
||||||
|
|
||||||
public function PreviewLink($action = null)
|
|
||||||
{
|
|
||||||
return $this->previewLinkTestProperty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMimeType()
|
|
||||||
{
|
|
||||||
return 'text/html';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function CMSEditLink()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\CMS\Tests\Controllers\SilverStripeNavigatorTest;
|
|
||||||
|
|
||||||
use SilverStripe\Dev\TestOnly;
|
|
||||||
use SilverStripe\ORM\CMSPreviewable;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\Versioned\Versioned;
|
|
||||||
|
|
||||||
class VersionedRecord extends DataObject implements TestOnly, CMSPreviewable
|
|
||||||
{
|
|
||||||
private static $table_name = 'SilverStripeNavigatorTest_VersionedRecord';
|
|
||||||
|
|
||||||
private static $show_stage_link = true;
|
|
||||||
|
|
||||||
private static $show_live_link = true;
|
|
||||||
|
|
||||||
private static $show_unversioned_preview_link = true;
|
|
||||||
|
|
||||||
private static $db = [
|
|
||||||
'PreviewLinkTestProperty' => 'Text',
|
|
||||||
];
|
|
||||||
|
|
||||||
private static $extensions = [
|
|
||||||
Versioned::class,
|
|
||||||
];
|
|
||||||
|
|
||||||
public function PreviewLink($action = null)
|
|
||||||
{
|
|
||||||
return $this->PreviewLinkTestProperty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMimeType()
|
|
||||||
{
|
|
||||||
return 'text/html';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function CMSEditLink()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace SilverStripe\CMS\Tests\Controllers;
|
|
||||||
|
|
||||||
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem;
|
|
||||||
use SilverStripe\Dev\TestOnly;
|
|
||||||
|
|
||||||
class SilverStripeNavigatorTest_TestItem extends SilverStripeNavigatorItem implements TestOnly
|
|
||||||
{
|
|
||||||
public function getTitle()
|
|
||||||
{
|
|
||||||
return self::class;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getHTML()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user