Example #1
0
 /**
  * initialize; fills the internal pages array
  *
  * @access private
  * @param  boolean $force - always reload
  * @return void
  **/
 private static function init($force = false)
 {
     global $page_id;
     if (CAT_Registry::exists('CAT_HELPER_PAGE_INITIALIZED') && !$force) {
         return;
     }
     if (!self::$instance) {
         self::getInstance(true);
     }
     // add configurable dirs to forbidden array (level 0)
     foreach (array(PAGES_DIRECTORY, MEDIA_DIRECTORY, CAT_BACKEND_FOLDER) as $dir) {
         $dir = preg_replace('~^/~', '', $dir);
         if (!in_array($dir, self::$instance->_config['forbidden_l0'])) {
             array_push(self::$instance->_config['forbidden_l0'], $dir);
         }
     }
     // fill pages array
     if (count(self::$pages) == 0 || $force) {
         $now = time();
         $result = self::$instance->db()->query('SELECT * FROM `:prefix:pages` ORDER BY `level` ASC, `position` ASC');
         if ($result && $result->rowCount() > 0) {
             $children_count = array();
             $direct_parent = 0;
             while (false !== ($row = $result->fetch())) {
                 $row['children'] = 0;
                 $row['is_parent'] = false;
                 $row['has_children'] = false;
                 // same as is_parent!
                 $row['is_editable'] = false;
                 $row['is_in_trail'] = false;
                 $row['is_direct_parent'] = false;
                 $row['is_current'] = false;
                 $row['is_open'] = false;
                 $row['be_tree_is_open'] = isset($_COOKIE[session_name() . 'pageid_' . $row['page_id']]) ? true : false;
                 // for page tree
                 $row['href'] = CAT_URL . PAGES_DIRECTORY . $row['link'] . PAGE_EXTENSION;
                 // mark editable pages by checking user perms and page
                 // visibility
                 // --------------------- NOT READY YET! ----------------------------------------
                 if (CAT_Users::ami_group_member($row['admin_groups'])) {
                     if (CAT_Registry::get('PAGE_TRASH') !== 'true' || $row['visibility'] !== 'deleted') {
                         $row['is_editable'] = true;
                         self::$pages_editable++;
                     }
                 }
                 // --------------------- NOT READY YET! ----------------------------------------
                 // mark current page
                 if (isset($page_id) && $row['page_id'] == $page_id) {
                     $row['is_current'] = true;
                     $direct_parent = $row['parent'];
                 }
                 // count children; this lets us mark pages that have
                 // children later
                 if (!isset($children_count[$row['parent']])) {
                     $children_count[$row['parent']] = 1;
                 } else {
                     $children_count[$row['parent']]++;
                 }
                 // add any other settings
                 $set = self::$instance->db()->query('SELECT * FROM `:prefix:pages_settings` WHERE page_id=:id', array('id' => $row['page_id']));
                 if ($set && $set->rowCount() > 0) {
                     while (false !== ($set_row = $set->fetch())) {
                         if (!isset($row['settings'])) {
                             $row['settings'] = array();
                         }
                         if (!isset($row['settings'][$set_row['set_type']])) {
                             $row[$set_row['set_type']] = array();
                         }
                         if (!isset($row['settings'][$set_row['set_type']][$set_row['set_name']])) {
                             $row[$set_row['set_type']][$set_row['set_name']] = array();
                         }
                         $row['settings'][$set_row['set_type']][$set_row['set_name']][] = $set_row['set_value'];
                     }
                 }
                 self::$pages[] = $row;
                 end(self::$pages);
                 self::$pages_by_id[$row['page_id']] = key(self::$pages);
                 reset(self::$pages);
             }
             // end while()
             // mark pages that have children
             foreach (self::$pages as $i => $page) {
                 if (isset($children_count[$page['page_id']])) {
                     self::$pages[$i]['children'] = $children_count[$page['page_id']];
                     self::$pages[$i]['is_parent'] = true;
                     self::$pages[$i]['has_children'] = true;
                 }
                 if ($direct_parent && $page['page_id'] == $direct_parent) {
                     self::$pages[$i]['is_direct_parent'] = true;
                 }
             }
             // resolve the trail
             $trail = array();
             if (isset($page_id) && isset(self::$pages_by_id[$page_id])) {
                 // mark parents
                 $trail = explode(",", '0,' . self::$pages[self::$pages_by_id[$page_id]]['page_trail']);
                 array_pop($trail);
                 // remove the current page
                 foreach ($trail as $id) {
                     if (isset(self::$pages_by_id[$id]) && isset(self::$pages[self::$pages_by_id[$id]])) {
                         self::$pages[self::$pages_by_id[$id]]['is_in_trail'] = true;
                     }
                 }
             }
             // add 'virtual' page -1
             if (!isset(self::$pages_by_id['-1'])) {
                 self::$pages_by_id['-1'] = 0;
             }
         }
         // end if($result)
     }
     CAT_Registry::register('CAT_HELPER_PAGE_INITIALIZED', true);
 }