silverstripe-cms/code/Controllers/SilverStripeNavigatorItem_ArchiveLink.php

72 lines
2.5 KiB
PHP
Raw Normal View History

<?php
namespace SilverStripe\CMS\Controllers;
use SilverStripe\CMS\Model\RedirectorPage;
2016-09-08 09:33:32 +02:00
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
{
2017-01-25 21:59:25 +01:00
/** @config */
private static $priority = 40;
2017-01-25 21:59:25 +01:00
public function getHTML()
{
2016-09-07 11:24:30 +02:00
$linkClass = $this->isActive() ? 'ss-ui-button current' : 'ss-ui-button';
2017-04-20 03:15:29 +02:00
$linkTitle = _t('SilverStripe\\CMS\\Controllers\\ContentController.ARCHIVEDSITE', 'Preview version');
2016-09-07 11:24:30 +02:00
$recordLink = Convert::raw2att(Controller::join_links(
$this->record->AbsoluteLink(),
2022-04-13 07:07:59 +02:00
'?archiveDate=' . urlencode($this->record->LastEdited ?? '')
2016-09-07 11:24:30 +02:00
));
return "<a class=\"{$linkClass}\" href=\"$recordLink\" target=\"_blank\">$linkTitle</a>";
2017-01-25 21:59:25 +01:00
}
2017-01-25 21:59:25 +01:00
public function getTitle()
{
2017-04-20 03:15:29 +02:00
return _t('SilverStripe\\CMS\\Controllers\\SilverStripeNavigator.ARCHIVED', 'Archived');
2017-01-25 21:59:25 +01:00
}
2017-01-25 21:59:25 +01:00
public function getMessage()
{
2016-09-07 11:24:30 +02:00
$date = Versioned::current_archived_date();
if (empty($date)) {
return null;
}
2016-09-08 09:33:32 +02:00
/** @var DBDatetime $dateObj */
2016-09-07 11:24:30 +02:00
$dateObj = DBField::create_field('Datetime', $date);
2017-04-20 03:45:23 +02:00
$title = _t('SilverStripe\\CMS\\Controllers\\ContentController.NOTEWONTBESHOWN', 'Note: this message will not be shown to your visitors');
2016-09-07 11:24:30 +02:00
return "<div id=\"SilverStripeNavigatorMessage\" title=\"{$title}\">"
2017-04-20 03:15:29 +02:00
. _t('SilverStripe\\CMS\\Controllers\\ContentController.ARCHIVEDSITEFROM', 'Archived site from')
2016-09-07 11:24:30 +02:00
. "<br />" . $dateObj->Nice() . "</div>";
2017-01-25 21:59:25 +01:00
}
2017-01-25 21:59:25 +01:00
public function getLink()
{
$link = $this->record->PreviewLink();
return $link ? Controller::join_links($link, '?archiveDate=' . urlencode($this->record->LastEdited ?? '')) : '';
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)
&& $record->hasStages()
2017-01-25 21:59:25 +01:00
&& $this->isArchived()
// Don't follow redirects in preview, they break the CMS editing form
&& !($record instanceof RedirectorPage)
&& $this->getLink()
2017-01-25 21:59:25 +01:00
);
}
2017-01-25 21:59:25 +01:00
public function isActive()
{
return $this->isArchived();
}
}