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);
 }
コード例 #2
0
 /**
  * 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;
 }
コード例 #3
0
 /**
  * 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;
 }
コード例 #4
0
	/**
	 * @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
		);
	}