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); }
/** * 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; }
/** * 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; }
/** * @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 ); }