2022-01-31 02:28:02 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace SilverStripe\CMS\Controllers;
|
|
|
|
|
|
|
|
use SilverStripe\CMS\Controllers\SilverStripeNavigatorItem;
|
|
|
|
use SilverStripe\Core\Config\Config;
|
|
|
|
use SilverStripe\Core\Convert;
|
2023-03-01 01:41:01 +01:00
|
|
|
use SilverStripe\Dev\Deprecation;
|
|
|
|
use SilverStripe\ORM\CMSPreviewable;
|
2022-01-31 02:28:02 +01:00
|
|
|
use SilverStripe\Security\Member;
|
|
|
|
use SilverStripe\Versioned\Versioned;
|
|
|
|
|
2023-03-01 01:41:01 +01:00
|
|
|
/**
|
|
|
|
* Class will be moved from `silverstripe/cms` to `silverstripe/admin`.
|
|
|
|
* @deprecated 4.13.0 Will be renamed SilverStripe\Admin\Navigator\SilverStripeNavigatorItem_Unversioned
|
|
|
|
*/
|
2022-01-31 02:28:02 +01:00
|
|
|
class SilverStripeNavigatorItem_Unversioned extends SilverStripeNavigatorItem
|
|
|
|
{
|
2023-03-01 01:41:01 +01:00
|
|
|
public function __construct(CMSPreviewable $record)
|
|
|
|
{
|
|
|
|
Deprecation::withNoReplacement(function () {
|
|
|
|
Deprecation::notice(
|
|
|
|
'4.13.0',
|
|
|
|
'Will be renamed SilverStripe\Admin\Navigator\SilverStripeNavigatorItem_Unversioned',
|
|
|
|
Deprecation::SCOPE_CLASS
|
|
|
|
);
|
|
|
|
});
|
|
|
|
parent::__construct($record);
|
|
|
|
}
|
|
|
|
|
2022-01-31 02:28:02 +01:00
|
|
|
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()
|
|
|
|
{
|
2022-05-04 02:43:23 +02:00
|
|
|
return $this->getRecord()->PreviewLink() ?? '';
|
2022-01-31 02:28:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
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 (
|
2022-05-06 04:30:01 +02:00
|
|
|
$this->recordIsUnversioned()
|
2022-01-31 02:28:02 +01:00
|
|
|
&& $this->showUnversionedLink()
|
2022-05-04 02:43:23 +02:00
|
|
|
&& $this->getLink()
|
2022-01-31 02:28:02 +01:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2022-05-06 04:30:01 +02:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2022-01-31 02:28:02 +01:00
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
}
|
|
|
|
}
|