function __construct() { $this->__table = 'page'; parent::__construct(); $this->setHeadline('title'); // form & validation $this->form_header = 'title'; $this->form_field_labels['filename'] = 'Filename<br /><small class="highlight">(nonfiction use)</small>'; // always ignore these as they are updated programatically $this->form_ignore_fields = array('path', 'sort_order', 'static_content'); if (!defined('SITE_DISCLAIMER') || !SITE_DISCLAIMER || !defined('SITE_DISCLAIMER_ID') || !SITE_DISCLAIMER_ID) { $this->form_ignore_fields[] = 'disclaimer_required'; $this->form_ignore_fields[] = 'disclaimer_recursive'; } // always require the title $this->form_required_fields = array('title'); // cache lifetime options $this->form_elements['cache_lifetime'] = array('select', 'cache_lifetime', 'Cache Lifetime', array(0 => 'no caching', 5 * 60 => '5 minutes', 15 * 60 => '15 minutes', 60 * 60 => '1 hour', 60 * 60 * 8 => '8 hours', 60 * 60 * 24 => '1 day', 60 * 60 * 24 * 7 => '1 week', '-1' => 'indefinite')); // cache lifetime options $this->form_elements['client_cache_lifetime'] = array('select', 'client_cache_lifetime', 'Client Cache Lifetime', array(0 => 'no caching', 5 * 60 => '5 minutes', 15 * 60 => '15 minutes', 60 * 60 => '1 hour', 60 * 60 * 8 => '8 hours', 60 * 60 * 24 => '1 day', 60 * 60 * 24 * 7 => '1 week', '-1' => 'indefinite')); // this is a foreign key $this->form_elements['page_template_id'] = array('foreignkey', 'page_template_id', 'Template', array('model' => 'page_template', 'headline' => 'template_name')); // Ignore printable - not being used in nterchange 3 at all. $this->form_ignore_fields[] = 'printable'; // Ignore permissions field - not being used in nterchange 3 at the moment. $this->form_ignore_fields[] = 'permissions_id'; // check for workflow being used if (SITE_WORKFLOW) { $this->form_elements['workflow_group_id'] = array('foreignkey', 'workflow_group_id', 'Workflow Group', array('model' => 'workflow_group', 'headline' => 'workflow_title', 'addEmptyOption' => true)); $this->form_field_labels['workflow_recursive'] = 'Cascade Workflow'; } else { $this->form_ignore_fields[] = 'workflow_group_id'; $this->form_ignore_fields[] = 'workflow_recursive'; } if (!SECURE_SITE) { $this->form_ignore_fields[] = 'secure_page'; } $this->form_rules[] = array('parent_id', 'You cannot make a page a child of itself.', 'callback', array(&$this, 'checkChildOfItself')); // cache lifetime should be indefinite by default $this->form_field_defaults['cache_lifetime'] = '-1'; $this->form_field_defaults['client_cache_lifetime'] = '3600'; $this->form_field_defaults['visible'] = 1; $this->form_field_defaults['active'] = 1; }
/** * * 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; }