public function testGeneration() { echo "test auto navigation...\n"; class_carrier::getInstance()->getObjDB()->flushQueryCache(); $objTestNavigation = new class_module_navigation_tree(); $objTestNavigation->setStrName("autotest"); $objTestNavigation->setStrFolderId(self::$strFolderSystemid); $objTestNavigation->updateObjectToDb(); $arrNodes = $objTestNavigation->getCompleteNaviStructure(); $this->assertEquals(2, count($arrNodes["subnodes"])); $objFirstNode = $arrNodes["subnodes"][0]["node"]; $this->assertEquals("testpage1", $objFirstNode->getStrName()); $this->assertEquals("testpage1", $objFirstNode->getStrPageI()); $objFirstNode = $arrNodes["subnodes"][1]["node"]; $this->assertEquals("testpage2", $objFirstNode->getStrName()); $this->assertEquals("testpage2a", $objFirstNode->getStrPageI()); $arrNodesOnSecLevel = $arrNodes["subnodes"][1]["subnodes"][0]; $this->assertEquals(0, count($arrNodesOnSecLevel["subnodes"])); $objFirstNode = $arrNodesOnSecLevel["node"]; $this->assertEquals("testpage2a", $objFirstNode->getStrName()); $this->assertEquals("testpage2a", $objFirstNode->getStrPageI()); $objTestNavigation->deleteObjectFromDatabase(); }
/** * Searches the current page in other navigation-trees found on the current page. * This can be useful to avoid a session-based "opening" of the current tree. * The user may find it confusing, if the current tree remains opened but he clicked * a navigation-point of another tree. * * @return bool */ private function isPageVisibleInOtherNavigation() { //load the placeholders placed on the current page-template. therefore, instantiate a page-object $objPageData = class_module_pages_page::getPageByName($this->getPagename()); $objMasterPageData = class_module_pages_page::getPageByName("master"); if ($objPageData != null) { //analyze the placeholders on the page, faster than iterating the the elements available in the db $strTemplateId = $this->objTemplate->readTemplate("/module_pages/" . $objPageData->getStrTemplate()); $arrElementsTemplate = array_merge($this->objTemplate->getElements($strTemplateId, 0), $this->objTemplate->getElements($strTemplateId, 1)); //loop elements to remove navigation-elements. to do so, get the current elements-name (maybe the user renamed the default "navigation") foreach ($arrElementsTemplate as $arrPlaceholder) { if ($arrPlaceholder["placeholder"] != $this->arrElementData["page_element_ph_placeholder"]) { //loop the elements-list foreach ($arrPlaceholder["elementlist"] as $arrOneElement) { if ($arrOneElement["element"] == $this->arrElementData["page_element_ph_element"]) { //seems as we have a navigation-element different than the current one. //check, if the element is installed on the current page $arrElements = class_module_pages_pageelement::getElementsByPlaceholderAndPage($objPageData->getSystemid(), $arrPlaceholder["placeholder"], $this->getStrPortalLanguage()); //maybe on the masters-page? if (count($arrElements) == 0 && $objMasterPageData != null) { $arrElements = class_module_pages_pageelement::getElementsByPlaceholderAndPage($objMasterPageData->getSystemid(), $arrPlaceholder["placeholder"], $this->getStrPortalLanguage()); } if (count($arrElements) > 0) { foreach ($arrElements as $objElement) { //wohooooo, an element was found. //check, if the current point is in the tree linked by the navigation - if it's a different navigation.... //load the real-pageelement $objRealElement = new class_element_navigation_portal($objElement); $arrContent = $objRealElement->getElementContent($objElement->getSystemid()); if (count($arrContent) == 0) { continue; } //navigation found. trigger loading of nodes if not yet happend if (!isset($this->arrTempNodes[$arrContent["navigation_id"]])) { $objNavigation = new class_module_navigation_tree($arrContent["navigation_id"]); if ($objNavigation->getStatus() == 0) { $this->arrTempNodes[$arrContent["navigation_id"]] = array("node" => null, "subnodes" => array()); } else { $this->arrTempNodes[$arrContent["navigation_id"]] = $objNavigation->getCompleteNaviStructure(); } } //search navigation tree $this->arrNodeTempHelper = array(); foreach ($this->arrTempNodes[$arrContent["navigation_id"]]["subnodes"] as $objOneNodeToScan) { $this->searchPageInNavigationTreeHelper(0, $this->strCurrentSite, $objOneNodeToScan); } $intMaxLevel = 0; $objEntry = null; foreach ($this->arrNodeTempHelper as $intLevel => $arrNodes) { if (count($arrNodes) > 0 && $intLevel >= $intMaxLevel) { $intMaxLevel = $intLevel; $objEntry = $arrNodes[0]; } } //jepp, page found in another tree, so return true if ($objEntry != null) { return true; } } } } } } } } return false; }