/** * * Return array of children * @param bool $externalLinking true if this command is executed on external linking popup. That means we need to retun all available zones, not only content management. * @param string $parentType * @param mixed $parentWebsiteId * @param int $parentLanguageId * @param string $parentZoneName * @param mixed $parentId */ private function _getList($externalLinking, $parentType, $parentWebsiteId, $parentLanguageId, $parentZoneName, $parentId) { global $site; global $parametersMod; $jsTreeId = self::_jsTreeId($parentWebsiteId, $parentLanguageId, $parentZoneName, $parentId); //store status only on local menu tree if (true || $parentWebsiteId == 0) { $_SESSION['modules']['standard']['menu_management']['openNode'][$jsTreeId] = 1; } $site->requireConfig('standard/menu_management/remotes.php'); $remotes = Remotes::getRemotes(); $answer = array(); switch ($parentType) { case '': //return websites $items = ModelTree::getWebsites(); $answer = array(); foreach ($items as $itemKey => $item) { $state = 'closed'; $children = false; if ($itemKey == 0) { $state = 'open'; $children = $this->_getList($externalLinking, 'website', $item['id'], null, null, $item['id']); } $answer[] = array('attr' => array('id' => $this->_jsTreeId($item['id']), 'rel' => 'website', 'websiteId' => $item['id'], 'pageId' => $item['id']), 'data' => $item['title'], 'state' => $state, 'children' => $children); } break; case 'website': //parent node is website if ($parentId == 0) { //if this local website $items = ModelTree::getLanguages(); } else { //if remote website if (isset($remotes[$parentWebsiteId - 1])) { //if requested remote is within remotes configuration list $remote = $remotes[$parentWebsiteId - 1]; $items = $this->_remoteRequest($remote, 'getLanguages'); } } //generate jsTree response array foreach ($items as $itemsKey => $item) { $state = 'closed'; $children = false; $jsTreeId = $this->_jsTreeId($parentWebsiteId, $item['id'], $parentZoneName, $parentId); //if node status is open if (!empty($_SESSION['modules']['standard']['menu_management']['openNode'][$jsTreeId])) { $state = 'open'; $children = $this->_getList($externalLinking, 'language', $parentWebsiteId, $item['id'], null, $item['id']); if (count($children) == 0) { $children = false; $state = 'leaf'; } } $answer[] = array('attr' => array('id' => $jsTreeId, 'rel' => 'language', 'websiteId' => $parentWebsiteId, 'languageId' => $item['id'], 'pageId' => $item['id']), 'data' => $item['title'] . '', 'state' => $state, 'children' => $children); } break; case 'language': //parent node is language if ($parentWebsiteId == 0) { $items = ModelTree::getZones($externalLinking); } else { if (isset($remotes[$parentWebsiteId - 1])) { $remote = $remotes[$parentWebsiteId - 1]; $data = array('includeNonManagedZones' => $externalLinking); $items = $this->_remoteRequest($remote, 'getZones', $data); } else { trigger_error('Can\'t find required remote website. ' . $parentWebsiteId); return; } } //generate jsTree response array foreach ($items as $itemKey => $item) { $state = 'closed'; $children = false; $jsTreeId = $this->_jsTreeId($parentWebsiteId, $parentLanguageId, $item['id'], $item['id']); //if node status is open if (!empty($_SESSION['modules']['standard']['menu_management']['openNode'][$jsTreeId])) { $state = 'open'; $children = $this->_getList($externalLinking, 'zone', $parentWebsiteId, $parentLanguageId, $item['id'], $item['id']); if (count($children) == 0) { $children = false; $state = 'leaf'; } } $answer[] = array('attr' => array('id' => $jsTreeId, 'rel' => 'zone', 'websiteId' => $parentWebsiteId, 'languageId' => $parentLanguageId, 'zoneName' => $item['id'], 'pageId' => $item['id']), 'data' => $item['title'] . '', 'state' => $state, 'children' => $children); } break; case 'zone': //parent node is zone if ($parentWebsiteId == 0) { $items = ModelTree::getZonePages($parentLanguageId, $parentZoneName); } else { if (isset($remotes[$parentWebsiteId - 1])) { $remote = $remotes[$parentWebsiteId - 1]; $data = array('languageId' => $parentLanguageId, 'zoneName' => $parentZoneName); $items = $this->_remoteRequest($remote, 'getZonePages', $data); } } //generate jsTree response array foreach ($items as $itemKey => $item) { $state = 'closed'; $children = false; $jsTreeId = $this->_jsTreeId($parentWebsiteId, $parentLanguageId, $parentZoneName, $item['id']); //if node status is open if (!empty($_SESSION['modules']['standard']['menu_management']['openNode'][$jsTreeId])) { $state = 'open'; $children = $this->_getList($externalLinking, 'page', $parentWebsiteId, $parentLanguageId, $parentZoneName, $item['id']); if (count($children) == 0) { $children = false; $state = 'leaf'; } } $answer[] = array('attr' => array('id' => $jsTreeId, 'rel' => 'page', 'websiteId' => $parentWebsiteId, 'languageId' => $parentLanguageId, 'zoneName' => $parentZoneName, 'pageId' => $item['id']), 'data' => $item['title'] . '', 'state' => $state, 'children' => $children); } break; case 'page': //parent node is page if ($parentWebsiteId == 0) { $items = ModelTree::getPages($parentId); } else { $remote = $remotes[$parentWebsiteId - 1]; $data = array('parentId' => $parentId); $items = $this->_remoteRequest($remote, 'getPages', $data); } //generate jsTree response array foreach ($items as $itemKey => $item) { $state = 'closed'; $children = false; $jsTreeId = $this->_jsTreeId($parentWebsiteId, $parentLanguageId, $parentZoneName, $item['id']); if ($item['visible']) { $icon = ''; } else { $icon = BASE_URL . MODULE_DIR . 'standard/menu_management/img/file_hidden.png'; } //if node status is open if (!empty($_SESSION['modules']['standard']['menu_management']['openNode'][$jsTreeId])) { $state = 'open'; $children = $this->_getList($externalLinking, 'page', $parentWebsiteId, $parentLanguageId, $parentZoneName, $item['id']); if (count($children) == 0) { $children = false; $state = 'leaf'; } } $answer[] = array('attr' => array('id' => $jsTreeId, 'rel' => 'page', 'websiteId' => $parentWebsiteId, 'languageId' => $parentLanguageId, 'zoneName' => $parentZoneName, 'pageId' => $item['id']), 'data' => array('title' => $item['title'] . '', 'icon' => $icon), 'state' => $state, 'children' => $children); } break; default: trigger_error('Unknown type ' . $parentType); return false; break; } return $answer; }
function makeActions() { global $site; global $parametersMod; if (!isset($_REQUEST['action'])) { return; } switch ($_REQUEST['action']) { case 'getLanguages': if (!$this->_adminAccess()) { return; } $answer = array('response' => ModelTree::getLanguages(), 'status' => 'success'); $this->_printJson($answer); break; case 'getZones': if (!$this->_adminAccess()) { return; } if (!isset($_REQUEST['includeNonManagedZones'])) { trigger_error('Required parameters is not set'); return; } $answer = array('response' => ModelTree::getZones($_REQUEST['includeNonManagedZones']), 'status' => 'success'); $this->_printJson($answer); break; case 'getZonePages': if (!$this->_adminAccess()) { return; } if (!isset($_REQUEST['languageId'])) { trigger_error('Language id is not set'); return; } if (!isset($_REQUEST['zoneName'])) { trigger_error('Zone name is not set'); return; } $answer = array('response' => ModelTree::getZonePages($_REQUEST['languageId'], $_REQUEST['zoneName']), 'status' => 'success'); $this->_printJson($answer); break; case 'getPages': if (!$this->_adminAccess()) { return; } if (!isset($_REQUEST['parentId'])) { trigger_error('Parent ID is not set'); return; } $answer = array('response' => ModelTree::getPages($_REQUEST['parentId']), 'status' => 'success'); $this->_printJson($answer); break; case 'getData': if (!$this->_adminAccess()) { return; } if (!isset($_REQUEST['pageId'])) { trigger_error('Page ID is not set'); return; } $pageId = $_REQUEST['pageId']; $pages = array($this->_getPageDataRecursion($pageId)); $data = array('status' => 'success', 'response' => $pages); $this->_printJson($data); break; } \Db::disconnect(); exit; }