Ejemplo n.º 1
0
 /**
  * @return string
  */
 public function transform()
 {
     /** @var $site SMSSite */
     $site = $this->getDIServiceObject('APF\\extensions\\apfelsms', 'Site');
     $siteTitle = StringAssistant::escapeSpecialCharacters($site->getWebsiteTitle());
     $currentPage = $site->getCurrentPage();
     if ($currentPage === null) {
         $pageTitle = $siteTitle;
     } else {
         /** @var $currentPage SMSPage */
         $pageTitle = $currentPage->getNavTitle();
     }
     $pageTitle = StringAssistant::escapeSpecialCharacters($pageTitle);
     return str_replace(['{PAGETITLE}', '{SITETITLE}'], [$pageTitle, $siteTitle], self::$titleTemplate);
 }
Ejemplo n.º 2
0
 public function transform()
 {
     /** @var $SMSM SMSManager */
     $SMSM = $this->getDIServiceObject('APF\\extensions\\apfelsms', 'Manager');
     $page = $SMSM->getSite()->getCurrentPage();
     $pageId = $this->getAttribute('pageId');
     if (!empty($pageId)) {
         try {
             $page = $SMSM->getPage($pageId);
         } catch (SMSException $e) {
             return 'Untitled';
             // no title could be found (no valid ID)
         }
     }
     return StringAssistant::escapeSpecialCharacters($page->getTitle());
 }
Ejemplo n.º 3
0
 /**
  * @param SMSPage[] $navPages
  * @param $depth
  *
  * @return string
  * @version v0.1
  *          v0.2 (15.05.2013) Added support to keep certain request parameters in url
  */
 protected function buildMenuEntries(array $navPages, $depth)
 {
     $lastCount = count($navPages);
     $count = 0;
     $buffer = '';
     $url = $this->getUrlPrototype();
     foreach ($navPages as $navPage) {
         $count++;
         $linkURL = $navPage->getLink(clone $url);
         $linkTitle = $navPage->getNavTitle();
         $linkText = $linkTitle;
         $linkClasses = '';
         if ($count == 1) {
             $linkClasses .= 'first ';
         }
         if ($count == $lastCount) {
             $linkClasses .= 'last ';
         }
         if ($navPage->isActive()) {
             $linkClasses .= 'active ';
         }
         if ($navPage->isCurrentPage()) {
             $linkClasses .= 'current ';
         }
         $children = $navPage->getChildren();
         if (($depth > 1 || $this->autoDepth && $navPage->isActive()) && count($children) > 0) {
             // cull entries which not should be displayed
             $subEntries = $this->cullEntries($children);
             if (count($subEntries) > 0) {
                 $template = $this->getTemplate('navEntryWithSubs');
                 if ($this->autoDepth) {
                     $newDepth = 1;
                 } else {
                     $newDepth = $depth - 1;
                 }
                 // recursive for subEntries
                 $template->setPlaceHolder('subEntries', $this->buildMenuEntries($subEntries, $newDepth));
             } else {
                 $template = $this->getTemplate('navEntry');
             }
         } else {
             $template = $this->getTemplate('navEntry');
         }
         $template->setPlaceHolder('URL', StringAssistant::escapeSpecialCharacters($linkURL));
         $template->setPlaceHolder('TITLE', StringAssistant::escapeSpecialCharacters($linkTitle));
         $template->setPlaceHolder('CLASSES', $linkClasses);
         $template->setPlaceHolder('TEXT', StringAssistant::escapeSpecialCharacters($linkText));
         $buffer .= $template->transformTemplate();
     }
     return $buffer;
 }
 public function transformContent()
 {
     /** @var $SMSM SMSManager */
     $SMSM = $this->getDIServiceObject('APF\\extensions\\apfelsms', 'Manager');
     $this->SMSM = $SMSM;
     $doc = $this->getDocument();
     $basePageId = $doc->getAttribute('SMSBreadcrumbNavBasePageId');
     ////
     // fetch base page
     if (!empty($basePageId)) {
         $basePage = $this->SMSM->getPage($basePageId);
     } else {
         $basePage = $this->SMSM->getSite()->getStartPage();
     }
     $currentPage = $this->SMSM->getSite()->getCurrentPage();
     $basePageLevel = $basePage->getLevel();
     $basePageId = $basePage->getId();
     ////
     // collect all breadcrumbs
     /** @var $reverseCrumbArray \APF\extensions\apfelsms\biz\pages\SMSPage[] */
     $reverseCrumbArray = [];
     $crumb = $currentPage;
     do {
         // Ignore origanisation-/system-nodes (hidden nodes without title)
         $crumbNavTitle = $crumb->getNavTitle();
         if (!($crumb->isHidden() && empty($crumbNavTitle))) {
             $reverseCrumbArray[] = $crumb;
         }
         $oldCrumb = $crumb;
         $crumb = $oldCrumb->getParent();
     } while ($crumb !== null && $basePageLevel <= $oldCrumb->getLevel() && $crumb->getId() != $basePageId);
     // add the base page, if not same as current page
     if ($currentPage->getId() != $basePageId) {
         $reverseCrumbArray[] = $basePage;
     }
     /** @var $crumbArray \APF\extensions\apfelsms\biz\pages\SMSPage[] */
     $crumbArray = array_reverse($reverseCrumbArray);
     ////
     // build breadcrumbs
     $buffer = '';
     $lastKey = count($crumbArray) - 1;
     $url = $this->getUrlPrototype();
     foreach ($crumbArray as $key => $crumb) {
         $template = $this->getTemplate('breadcrumb');
         $linkURL = $crumb->getLink(clone $url);
         $linkText = $crumb->getNavTitle();
         if ($crumb->getId() == $basePageId) {
             // allow custom title for basePage
             $linkText = $doc->getAttribute('SMSBreadcrumbNavBasePageIdTitle', $crumb->getNavTitle());
         }
         if (empty($linkText)) {
             $linkText = $crumb->getId();
         }
         $linkTitle = $linkText;
         $linkClasses = ' level_' . $crumb->getLevel();
         if ($key == $lastKey) {
             $linkClasses .= ' last active current';
         }
         if ($key == 0) {
             $linkClasses .= ' first';
         }
         $template->setPlaceHolder('URL', StringAssistant::escapeSpecialCharacters($linkURL));
         $template->setPlaceHolder('TITLE', StringAssistant::escapeSpecialCharacters($linkTitle));
         $template->setPlaceHolder('TEXT', StringAssistant::escapeSpecialCharacters($linkText));
         $template->setPlaceHolder('CLASSES', $linkClasses);
         $buffer .= $template->transformTemplate();
     }
     $containerTemplate = $this->getTemplate('breadcrumbNavigationContainer');
     $containerTemplate->setPlaceHolder('breadcrumbs', $buffer);
     $containerTemplate->transformOnPlace();
 }
Ejemplo n.º 5
0
 public function transform()
 {
     /** @var $SMSS SMSSite */
     $SMSS = $this->getDIServiceObject('APF\\extensions\\apfelsms', 'Site');
     return StringAssistant::escapeSpecialCharacters($SMSS->getWebsiteTitle());
 }
Ejemplo n.º 6
0
 public function transform()
 {
     $pageId = $this->getAttribute('pid');
     $attList = null;
     if (empty($pageId)) {
         $pageId = $this->getAttribute('id');
         $attList = array_diff(self::$attributeList, ['id']);
         // remove id from attribute list
     }
     if (empty($pageId)) {
         throw new InvalidArgumentException('No page id defined', E_USER_ERROR);
     }
     /** @var $SMSM SMSManager */
     $SMSM = $this->getDIServiceObject('APF\\extensions\\apfelsms', 'Manager');
     ////
     // evaluate magic page ids
     $magicPageIds = ['__current', '__referer', '__start', '__parent', '__next', '__prev'];
     if (in_array($pageId, $magicPageIds)) {
         switch ($pageId) {
             case '__current':
                 // current page
                 $pageId = $SMSM->getSite()->getCurrentPageId();
                 break;
             case '__referer':
                 // previous visited page
                 // get http referer
                 if ($this->getRequest()->getReferrer() === null) {
                     // fallback on current page
                     $pageId = $SMSM->getSite()->getCurrentPageId();
                     break;
                 }
                 $pageRequestParamName = $SMSM->getPageRequestParamName();
                 $referrerUrl = Url::fromReferrer(true);
                 $currentUrl = Url::fromCurrent(true);
                 // protection against url xss
                 if ($referrerUrl->getHost() == $currentUrl->getHost()) {
                     $pageId = $referrerUrl->getQueryParameter($pageRequestParamName);
                 }
                 if (empty($pageId)) {
                     // safety fallback on current page
                     $pageId = $SMSM->getSite()->getCurrentPageId();
                 }
                 // test for valid page id
                 try {
                     $SMSM->getPage($pageId);
                 } catch (SMSException $e) {
                     $pageId = $SMSM->getSite()->getCurrentPageId();
                 }
                 break;
             case '__start':
                 $pageId = $SMSM->getSite()->getStartPageId();
                 break;
             case '__parent':
                 $currentPage = $SMSM->getSite()->getCurrentPage();
                 $parentPage = $currentPage->getParent();
                 if ($parentPage === null) {
                     $pageId = $SMSM->getSite()->getStartPageId();
                 } else {
                     $pageId = $parentPage->getId();
                 }
                 break;
             case '__next':
             case '__prev':
                 $currentPage = $SMSM->getSite()->getCurrentPage();
                 $siblings = $currentPage->getSiblings(true);
                 if (empty($siblings)) {
                     return '';
                 }
                 /** @var SMSPage[] $visibleSiblings */
                 $visibleSiblings = [];
                 foreach ($siblings as $sibling) {
                     if ($sibling->isHidden()) {
                         continue;
                     }
                     $visibleSiblings[] = $sibling;
                 }
                 $currentIndex = null;
                 $currentId = $currentPage->getId();
                 foreach ($visibleSiblings as $index => $sibling) {
                     if ($sibling->getId() == $currentId) {
                         $currentIndex = $index;
                         break;
                     }
                 }
                 if ($pageId == '__next') {
                     $summand = 1;
                 } else {
                     $summand = -1;
                 }
                 $index = $currentIndex + $summand;
                 if (!isset($visibleSiblings[$index])) {
                     return '';
                 }
                 $pageId = $visibleSiblings[$index]->getId();
                 break;
         }
     }
     // fetch page object
     try {
         $page = $SMSM->getPage($pageId);
     } catch (SMSException $e) {
         // fallback on 404 error page (not found)
         $page = $SMSM->getSite()->get404Page();
     }
     // prepare URL generation
     $url = Url::fromCurrent();
     $url->resetQuery();
     // add anchor to url when set
     $anchor = $this->getAttribute('anchor');
     if (!empty($anchor)) {
         $url->setAnchor($anchor);
     }
     $content = $this->getContent();
     if (empty($content)) {
         $content = StringAssistant::escapeSpecialCharacters($page->getNavTitle());
     }
     $this->setAttribute('title', $this->getAttribute('title', $page->getTitle()));
     $this->setAttribute('href', $page->getLink($url));
     // is there an modified attribute list (without id attribute) ?
     if (!is_array($attList)) {
         $attList = self::$attributeList;
     }
     return str_replace(['{ATTR}', '{TEXT}'], [$this->getAttributesAsString($this->attributes, $attList), $content], self::$template);
 }