示例#1
0
 /**
  * Get selected pages for a block to display in overview page
  * @see $this->_showOverview()
  *
  * @param integer                                                 $blockId            Block id
  * @param string                                                  $placeholder        Placeholder (global, direct)
  * @param \ContentTree                                            $objContentTree     ContentTree instance
  * @param \Cx\Core\ContentManager\Model\Repository\PageRepository $pageRepo           PageRepository instance
  *
  * @return string Return the selected pages as <ul><li></li></ul>
  */
 function getSelectedPages($blockId, $placeholder, \ContentTree $objContentTree, \Cx\Core\ContentManager\Model\Repository\PageRepository $pageRepo)
 {
     $pageLinkTemplate = '<li><a href="%1$s" target="_blank">%2$s</a></li>';
     $blockAssociatedPageIds = $this->_getAssociatedPageIds($blockId, $placeholder);
     $selectedPages = array();
     $strSelectedPages = '';
     foreach ($objContentTree->getTree() as $arrData) {
         if (!in_array($arrData['catid'], $blockAssociatedPageIds)) {
             continue;
         }
         $page = $pageRepo->findOneById($arrData['catid']);
         if (!$page) {
             continue;
         }
         $selectedPages[] = sprintf($pageLinkTemplate, \Cx\Core\Routing\Url::fromPage($page)->toString(), contrexx_raw2xhtml($arrData['catname']));
     }
     if ($selectedPages) {
         $strSelectedPages = '<ul>' . implode($selectedPages) . '</ul>';
     }
     return $strSelectedPages;
 }
示例#2
0
 /**
  * Converts a tree level to JSON
  * @param Cx\Core\ContentManager\Model\Entity\Node $root Root node of the current level
  * @param Array $logs List of all logs (used to get the username)
  * @return String JSON data
  */
 private function tree_to_jstree_array($root, $flat = false, &$actions = null)
 {
     $fallback_langs = $this->fallbacks;
     $sorted_tree = array();
     foreach ($root->getChildren() as $node) {
         $sorted_tree[$node->getLft()] = $node;
     }
     ksort($sorted_tree);
     // get open nodes
     $open_nodes = array();
     if (isset($_COOKIE['jstree_open'])) {
         $tmp_open_nodes = explode(',', $_COOKIE['jstree_open']);
         foreach ($tmp_open_nodes as $node) {
             $node_id = substr($node, 6);
             $open_nodes[$node_id] = true;
         }
     }
     $output = array();
     $tree = array();
     $nodeLevels = array();
     foreach ($sorted_tree as $node) {
         $data = array();
         $metadata = array();
         $children = array();
         // if this node is expanded (toggled)
         $toggled = isset($open_nodes[$node->getId()]) && $open_nodes[$node->getId()];
         if (!$flat || $toggled) {
             $children = $this->tree_to_jstree_array($node, $flat);
         }
         $last_resort = 0;
         $numberOfPages = 0;
         /**
          * I (<*****@*****.**> cannot recall the reason why to
          * get alias pages too but I think there was one (probably not a nice one)
          * @todo Write unit tests for CM then try $node->getPages()
          * if the above is done do the following too
          * @todo Replace $numberOfPages by $pages = $node->getPages(), then just count them
          */
         foreach ($node->getPages(false, true) as $page) {
             // don't display aliases in cm's tree
             if ($page->getType() == \Cx\Core\ContentManager\Model\Entity\Page::TYPE_ALIAS) {
                 continue 2;
             }
             $numberOfPages++;
             $user = $page->getUpdatedBy();
             $data[\FWLanguage::getLanguageCodeById($page->getLang())] = array('language' => \FWLanguage::getLanguageCodeById($page->getLang()), 'title' => $page->getTitle(), 'attr' => array('id' => $page->getId(), 'data-href' => json_encode(array('slug' => $page->getSlug(), 'path' => $page->getPath(), 'module' => $page->getModule() . ' ' . $page->getCmd(), 'lastupdate' => $page->getUpdatedAt()->format('d.m.Y H:i'), 'level' => $page->getNode()->getLvl(), 'user' => $user)), 'frontend_access_id' => $page->getFrontendAccessId(), 'backend_access_id' => $page->getBackendAccessId(), 'protected' => $page->isFrontendProtected(), 'locked' => $page->isBackendProtected()));
             $editingStatus = $page->getEditingStatus();
             if ($page->isActive()) {
                 if ($editingStatus == 'hasDraft') {
                     $publishingStatus = 'published draft';
                 } else {
                     if ($editingStatus == 'hasDraftWaiting') {
                         $publishingStatus = 'published draft waiting';
                     } else {
                         $publishingStatus = 'published';
                     }
                 }
             } else {
                 if ($editingStatus == 'hasDraft') {
                     $publishingStatus = 'unpublished draft';
                 } else {
                     if ($editingStatus == 'hasDraftWaiting') {
                         $publishingStatus = 'unpublished draft waiting';
                     } else {
                         $publishingStatus = 'unpublished';
                     }
                 }
             }
             if ($page->isBackendProtected() && !\Permission::checkAccess($page->getBackendAccessId(), 'dynamic', true)) {
                 $publishingStatus .= ' locked';
             }
             $metadata[$page->getId()] = array('visibility' => $page->getStatus(), 'publishing' => $publishingStatus);
             $last_resort = \FWLanguage::getLanguageCodeById($page->getLang());
         }
         if ($numberOfPages == 0) {
             continue;
         }
         foreach ($fallback_langs as $lang => $fallback) {
             // fallback can be false, array_key_exists does not like booleans
             if (!$fallback) {
                 $fallback = null;
             }
             if (!array_key_exists($lang, $data) && array_key_exists($fallback, $data)) {
                 $data[$lang]['language'] = $lang;
                 $data[$lang]['title'] = $data[$fallback]['title'];
                 if ($data[$fallback]['attr']['id'] == 'broken') {
                     $data[$lang]['attr']['id'] = 'broken';
                 } else {
                     $data[$lang]['attr']['id'] = '0';
                 }
             } else {
                 if (!array_key_exists($lang, $data)) {
                     $data[$lang]['language'] = $lang;
                     if (array_key_exists($last_resort, $data)) {
                         $data[$lang]['title'] = $data[$last_resort]['title'];
                         $data[$lang]['attr']['id'] = '0';
                     } else {
                         $data[$lang]['title'] = 'No Title';
                         $data[$lang]['attr']['id'] = 'broken';
                     }
                 }
             }
             $metadata[0] = array('visibility' => 'active', 'publishing' => 'unpublished');
             $metadata['broken'] = array('visibility' => 'broken', 'publishing' => 'unpublished');
         }
         $state = array();
         if (count($node->getChildren()) > 0) {
             if ($toggled) {
                 $state = array('state' => 'open');
             } else {
                 $state = array('state' => 'closed');
             }
         }
         $nodeLevels[$node->getId()] = $node->getLvl();
         if (isset($children['nodeLevels'])) {
             $nodeLevels = $nodeLevels + $children['nodeLevels'];
         }
         $tree[] = array_merge(array('attr' => array('id' => 'node_' . $node->getId(), 'rel_id' => $node->getId()), 'data' => array_values($data), 'children' => isset($children['tree']) ? $children['tree'] : array(), 'metadata' => $metadata), $state);
     }
     $output['tree'] = $tree;
     $output['nodeLevels'] = $nodeLevels;
     $output['hasHome'] = array();
     foreach (\FWLanguage::getActiveFrontendLanguages() as $lang) {
         $page = $this->pageRepo->findOneBy(array('module' => 'Home', 'cmd' => '', 'lang' => $lang['id']));
         $output['hasHome'][$lang['lang']] = $page ? $page->getId() : false;
     }
     return $output;
 }