/** * 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); }