/** * Additional magic happens here. Trick LeftAndMain into thinking we're a previewable SiteTree object. * * @return Form */ public function ItemEditForm() { Requirements::javascript(MODULATOR_PATH . '/javascript/LeftAndMain.Preview.js'); $form = parent::ItemEditForm(); $record = $this->getRecord(); // Hide the 'Save & publish' button if we're on a brand new module. if ($record && $record->ID == 0) { $actions = $form->Actions(); // Remove the publish button on the pre-module state $actions->removeByName('action_publish'); // Remove the save action if there are no sub-classes to instantiate $classes = ClassInfo::subclassesFor('PageModule'); unset($classes['PageModule']); if (!count($classes)) { $actions->removeByName('action_save'); } } // Enable CMS preview // .cms-previewable enables the preview panel in the front-end // .cms-pagemodule CSS class is used by our javascript to handle previews if ($form && is_object($form)) { $form->addExtraClass('cms-previewable cms-pagemodule'); } // Creat a navigaor and point it at the parent page $navigator = new SilverStripeNavigator($this->record->Page()); $navField = new LiteralField('SilverStripeNavigator', $navigator->renderWith('LeftAndMain_SilverStripeNavigator')); $navField->setAllowHTML(true); $fields = $form->Fields(); $fields->push($navField); return $form; }
/** * Provides a front-end utility menu with administrative functions and developer tools * Relies on SilverStripeNavigator * * @return string */ public function BetterNavigator() { $isDev = Director::isDev(); if ($isDev || Permission::check('CMS_ACCESS_CMSMain') || Permission::check('VIEW_DRAFT_CONTENT')) { if ($this->owner && $this->owner->dataRecord) { //Get SilverStripeNavigator links & stage info (CMS/Stage/Live/Archive) $nav = array(); $navigator = new SilverStripeNavigator($this->owner->dataRecord); $items = $navigator->getItems(); foreach ($items as $item) { $nav[$item->getName()] = array('Link' => $item->getLink(), 'Active' => $item->isActive()); } //Is the logged in member nominated as a developer? $member = Member::currentUser(); $devs = Config::inst()->get('BetterNavigator', 'developers'); $isDeveloper = $member && is_array($devs) ? in_array($member->Email, $devs) : false; //Add other data for template $nav = array_merge($nav, array('Member' => $member, 'Stage' => Versioned::current_stage(), 'LoginLink' => Config::inst()->get('Security', 'login_url'), 'Mode' => Director::get_environment_type(), 'IsDeveloper' => $isDeveloper)); //Merge with page data, send to template and render $nav = new ArrayData($nav); $page = $this->owner->customise($nav); return $page->renderWith('BetterNavigator'); } } return false; }
public function getSilverStripeNavigator() { $record = $this->getRecord($this->currentPageID(), $this->getRequest()->param('VersionID')); if ($record) { $navigator = new SilverStripeNavigator($record); return $navigator->renderWith($this->getTemplatesWithSuffix('_SilverStripeNavigator')); } else { return false; } }
private function injectNavigatorAndPreview(&$form, &$fields) { $editForm = $fields->fieldByName('EditForm'); //TODO: Do we need to verify we are in the right controller? $template = Controller::curr()->getTemplatesWithSuffix('_SilverStripeNavigator'); $navigator = new SilverStripeNavigator($this->owner->record); $field = new LiteralField('SilverStripeNavigator', $navigator->renderWith($template)); $field->setAllowHTML(true); $fields->push($field); $form->addExtraClass('cms-previewable'); $form->addExtraClass(' cms-previewabledataobject'); $form->removeExtraClass('cms-panel-padded center'); }
/** * Provides a front-end utility menu with administrative functions and developer tools * Relies on SilverStripeNavigator * * @return string */ public function BetterNavigator() { // Make sure this is a page if (!($this->owner && $this->owner->dataRecord && $this->owner->dataRecord instanceof SiteTree && $this->owner->dataRecord->ID > 0)) { return false; } // Only show navigator to appropriate users $isDev = Director::isDev(); $canViewDraft = Permission::check('VIEW_DRAFT_CONTENT') || Permission::check('CMS_ACCESS_CMSMain'); if ($isDev || $canViewDraft) { // Get SilverStripeNavigator links & stage info (CMS/Stage/Live/Archive) $nav = array(); $viewing = ''; $navigator = new SilverStripeNavigator($this->owner->dataRecord); $items = $navigator->getItems(); foreach ($items as $item) { $name = $item->getName(); $active = $item->isActive(); $nav[$name] = array('Link' => $item->getLink(), 'Active' => $active); if ($active) { if ($name == 'LiveLink') { $viewing = 'Live'; } if ($name == 'StageLink') { $viewing = 'Draft'; } if ($name == 'ArchiveLink') { $viewing = 'Archived'; } } } // Only show edit link if user has permission to edit this page $editLink = $this->owner->dataRecord->canEdit() && Permission::check('CMS_ACCESS_CMSMain') || $isDev ? $nav['CMSLink']['Link'] : false; // Is the logged in member nominated as a developer? $member = Member::currentUser(); $devs = Config::inst()->get('BetterNavigator', 'developers'); $identifierField = Member::config()->unique_identifier_field; $isDeveloper = $member && is_array($devs) ? in_array($member->{$identifierField}, $devs) : false; // Add other data for template $backURL = '?BackURL=' . urlencode($this->owner->Link()); $bNData = array_merge($nav, array('Member' => $member, 'Stage' => Versioned::current_stage(), 'Viewing' => $viewing, 'LoginLink' => Config::inst()->get('Security', 'login_url') . $backURL, 'LogoutLink' => 'Security/logout' . $backURL, 'EditLink' => $editLink, 'Mode' => Director::get_environment_type(), 'IsDeveloper' => $isDeveloper)); // Merge with page data, send to template and render $bNData = new ArrayData($bNData); $page = $this->owner->customise(array('BetterNavigator' => $bNData)); return $page->renderWith('BetterNavigator'); } return false; }
public function testCanView() { $page = $this->objFromFixture('Page', 'page1'); $admin = $this->objFromFixture('Member', 'admin'); $author = $this->objFromFixture('Member', 'assetsonlyuser'); $navigator = new SilverStripeNavigator($page); // TODO Shouldn't be necessary but SapphireTest logs in as ADMIN by default $this->logInWithPermission('CMS_ACCESS_AssetAdmin'); $items = $navigator->getItems(); $classes = array_map('get_class', $items->toArray()); $this->assertNotContains('SilverStripeNavigatorTest_ProtectedTestItem', $classes); $this->logInWithPermission('ADMIN'); $items = $navigator->getItems(); $classes = array_map('get_class', $items->toArray()); $this->assertContains('SilverStripeNavigatorTest_ProtectedTestItem', $classes); }
/** * @param DataObject $record * @return Array template data */ 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) $message = $newMessage; } return array( 'items' => $html, 'message' => $message ); }
/** * Used for preview controls * * @return ArrayData */ public function getSilverStripeNavigator() { $newsletter = $this->record; if ($newsletter) { $navigator = new SilverStripeNavigator($newsletter); //create the link the send a preview email $member = Member::currentUser(); $emailLink = '?email='; if ($member) { $emailLink .= $member->Email; } $navigator->customise(new ArrayData(array('EmailPreviewLink' => $newsletter->Link('emailpreview' . $emailLink)))); Requirements::javascript(NEWSLETTER_DIR . '/javascript/NewsletterAdminEmailPreview.js'); return $navigator->renderWith('NewsletterAdmin_SilverStripeNavigator'); } else { return false; } }
/** * Overloads the LeftAndMain::ShowView. Allows to pass a page as a parameter, so we are able * to switch view also for archived versions. */ public function SwitchView($page = null) { if (!$page) { $page = $this->currentModule(); } if ($page) { $nav = SilverStripeNavigator::get_for_record($page); return $nav['items']; } }
/** * Overloads the LeftAndMain::ShowView. Allows to pass a page as a parameter, so we are able * to switch view also for archived versions. */ function SwitchView($page = null) { if (!$page) { $page = $this->currentPage(); } if ($page) { $nav = SilverStripeNavigator::get_for_record($page); Requirements::customScript("window.name = windowName('cms');"); return $nav['items']; } }
/** * @return array */ function SwitchView() { if ($page = $this->currentPage()) { $nav = SilverStripeNavigator::get_for_record($page); return $nav['items']; } }
public function SilverStripeNavigator() { $member = Member::currentUser(); $items = ''; $message = ''; if (Director::isDev() || Permission::check('CMS_ACCESS_CMSMain') || Permission::check('VIEW_DRAFT_CONTENT')) { if ($this->dataRecord) { Requirements::css(SAPPHIRE_DIR . '/css/SilverStripeNavigator.css'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/behaviour/behaviour.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery/jquery.js'); Requirements::javascript(SAPPHIRE_DIR . '/thirdparty/jquery-livequery/jquery.livequery.js'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/SilverStripeNavigator.js'); $return = $nav = SilverStripeNavigator::get_for_record($this->dataRecord); $items = $return['items']; $message = $return['message']; } if ($member) { $firstname = Convert::raw2xml($member->FirstName); $surname = Convert::raw2xml($member->Surname); $logInMessage = _t('ContentController.LOGGEDINAS', 'Logged in as') . " {$firstname} {$surname} - <a href=\"Security/logout\">" . _t('ContentController.LOGOUT', 'Log out') . "</a>"; } else { $logInMessage = _t('ContentController.NOTLOGGEDIN', 'Not logged in') . " - <a href=\"Security/login\">" . _t('ContentController.LOGIN', 'Login') . "</a>"; } $viewPageIn = _t('ContentController.VIEWPAGEIN', 'View Page in:'); return <<<HTML \t\t\t\t<div id="SilverStripeNavigator"> \t\t\t\t\t<div class="holder"> \t\t\t\t\t<div id="logInStatus"> \t\t\t\t\t\t{$logInMessage} \t\t\t\t\t</div> \t\t\t\t\t<div id="switchView" class="bottomTabs"> \t\t\t\t\t\t<div class="blank">{$viewPageIn} </div> \t\t\t\t\t\t{$items} \t\t\t\t\t</div> \t\t\t\t\t</div> \t\t\t\t</div> \t\t\t\t\t{$message} HTML; // On live sites we should still see the archived message } else { if ($date = Versioned::current_archived_date()) { Requirements::css(SAPPHIRE_DIR . '/css/SilverStripeNavigator.css'); $dateObj = Object::create('Datetime', $date, null); // $dateObj->setVal($date); return "<div id=\"SilverStripeNavigatorMessage\">" . _t('ContentController.ARCHIVEDSITEFROM') . "<br>" . $dateObj->Nice() . "</div>"; } } }