예제 #1
0
 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;
 }
예제 #2
0
 /**
  *
  * 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;
 }
예제 #3
0
 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;
 }