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 "$linkTitle"; } 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 "
" . _t( 'SilverStripe\\CMS\\Controllers\\ContentController.DRAFTSITE', 'Draft Site' ) . "
"; } 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); } }