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;
 }