コード例 #1
0
 /**
  * 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;
 }
コード例 #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
 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');
 }
コード例 #5
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;
 }
 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);
 }
コード例 #7
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
		);
	}
 /**
  * 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;
     }
 }
コード例 #9
0
 /**
  * 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'];
     }
 }
コード例 #10
0
 /**
  * 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'];
     }
 }
コード例 #11
0
 /**
  * @return array
  */
 function SwitchView()
 {
     if ($page = $this->currentPage()) {
         $nav = SilverStripeNavigator::get_for_record($page);
         return $nav['items'];
     }
 }
コード例 #12
0
    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>";
            }
        }
    }