/** * **/ function getPagesList($fieldname, $selected, $add_empty = false) { $pages_list = CAT_Helper_Page::getPages(CAT_Backend::isBackend()); $deleted = CAT_Helper_Page::getPagesByVisibility('deleted'); if (count($deleted)) { $arrh = CAT_Helper_Array::getInstance(); foreach ($deleted as $page) { $arrh->ArrayRemove($page, $pages_list, 'page_id'); } } if ($add_empty) { array_unshift($pages_list, array('page_id' => 0, 'parent' => 0, 'level' => 0, 'is_open' => false, 'menu_title' => CAT_Helper_Page::getInstance()->lang()->translate('[none (use internal)]'))); } return CAT_Helper_ListBuilder::getInstance(true)->config(array('space' => '|-- '))->dropdown($fieldname, $pages_list, 0, $selected); }
/** * Allows modules to register a file which should be allowed to load the * config.php directly. * * This is only allowed in installation context! * * @access public * @param string $module - module name * @param string $filepath - relative file path **/ public static function sec_register_file($module, $filepath) { global $admin; if (!CAT_Backend::isBackend() && !is_object($admin) && !defined('CAT_INSTALL')) { self::getInstance()->log()->logCrit("sec_register_file() called outside admin context!"); self::$error = "sec_register_file() called outside admin context!"; return false; } // check permissions if (!CAT_Users::checkPermission('Addons', 'modules_install') && !defined('CAT_INSTALL')) { self::getInstance()->log()->logCrit("sec_register_file() called without modules_install perms!"); self::$error = "sec_register_file() called without modules_install perms!"; return false; } // this will remove ../.. from $filepath $filepath = CAT_Helper_Directory::sanitizePath($filepath); if (!is_dir(CAT_PATH . '/modules/' . $module)) { self::getInstance()->log()->logCrit("sec_register_file() called for non existing module [{$module}] (path: [{$filepath}])"); self::$error = "sec_register_file() called for non existing module [{$module}] (path: [{$filepath}])"; return false; } if (!file_exists(CAT_Helper_Directory::sanitizePath(CAT_PATH . '/modules/' . $module . '/' . $filepath))) { self::getInstance()->log()->logCrit("sec_register_file() called for non existing file [{$filepath}] (module: [{$module}])"); self::$error = "sec_register_file() called for non existing file [{$filepath}] (module: [{$module}])"; return false; } $self = self::getInstance(); $q = $self->db()->query('SELECT * FROM `:prefix:addons` WHERE directory=:dir', array('dir' => $module)); if (!$q->rowCount()) { self::getInstance()->log()->logCrit("sec_register_file() called for non existing module [{$module}] (path: [{$filepath}]) - not found in addons table!"); self::$error = "sec_register_file() called for non existing module [{$module}] (path: [{$filepath}]) - not found in addons table!"; return false; } $row = $q->fetchRow(); // remove trailing / from $filepath $filepath = preg_replace('~^/~', '', $filepath); $q = $self->db()->query('SELECT * FROM `:prefix:class_secure` WHERE module=:mod AND filepath=:path', array('mod' => $row['addon_id'], 'path' => '/modules/' . $module . '/' . $filepath)); if (!$q->rowCount()) { $self->db()->query('REPLACE INTO `:prefix:class_secure` VALUES ( :id, :path )', array('id' => $row['addon_id'], 'path' => '/modules/' . $module . '/' . $filepath)); return $self->db()->isError() ? false : true; } return true; }
//************************************************************************** if (!defined('SESSION_STARTED')) { session_name(APP_NAME . 'sessionid'); $cookie_settings = session_get_cookie_params(); session_set_cookie_params(3 * 3600, $cookie_settings["path"], $cookie_settings["domain"], strtolower(substr($_SERVER['SERVER_PROTOCOL'], 0, 5)) === 'https', true); unset($cookie_settings); session_start(); CAT_Registry::register('SESSION_STARTED', true, true); } if (defined('ENABLED_ASP') && ENABLED_ASP && !isset($_SESSION['session_started'])) { $_SESSION['session_started'] = time(); } //************************************************************************** // frontend only //************************************************************************** if (!CAT_Backend::isBackend() && !defined('CAT_AJAX_CALL') && !defined('CAT_LOGIN_PHASE') && defined('ENABLE_CSRFMAGIC') && true === ENABLE_CSRFMAGIC) { CAT_Helper_Protect::getInstance()->enableCSRFMagic(); } //************************************************************************** // Get users language //************************************************************************** $val = CAT_Helper_Validate::getInstance(); $user_lang = $val->sanitizeGet('lang'); if ($user_lang && $user_lang != '' && !is_numeric($user_lang) && strlen($user_lang) == 2 && file_exists(CAT_PATH . '/languages/' . $user_lang . '.php')) { CAT_Registry::register('LANGUAGE', strtoupper($user_lang), true); } if (!CAT_Registry::exists('LANGUAGE')) { CAT_Registry::register('LANGUAGE', DEFAULT_LANGUAGE, true); } // Load Language file if (!defined('LANGUAGE_LOADED')) {
// ========================================================= // ! Get display name of person who last modified the page // ========================================================= $user = $users->get_user_details($results_array['modified_by']); // ================================= // ! Add permissions to $data_dwoo // ================================= $permission['pages'] = $users->checkPermission('Pages', 'pages') ? true : false; $permission['pages_add'] = $users->checkPermission('Pages', 'pages_add') ? true : false; $permission['pages_add_l0'] = $users->checkPermission('Pages', 'pages_add_l0') ? true : false; $permission['pages_modify'] = $users->checkPermission('Pages', 'pages_modify') ? true : false; $permission['pages_delete'] = $users->checkPermission('Pages', 'pages_delete') ? true : false; $permission['pages_settings'] = $users->checkPermission('Pages', 'pages_settings') ? true : false; $permission['pages_intro'] = $users->checkPermission('Pages', 'pages_intro') != true || INTRO_PAGE != 'enabled' ? false : true; // list of all pages for dropdown, sorted by parent->child $pages = CAT_Helper_ListBuilder::sort(CAT_Helper_Page::getPages(CAT_Backend::isBackend()), 0); // ============================================= // ! Add result_array to the template variable // ============================================= $ajax = array('description' => $results_array['description'], 'keywords' => $results_array['keywords'], 'language' => $results_array['language'], 'level' => $results_array['level'], 'menu' => $results_array['menu'], 'menu_title' => htmlspecialchars_decode($results_array['menu_title'], ENT_QUOTES), 'modified_when' => $results_array['modified_when'] != 0 ? CAT_Helper_DateTime::getDate($results_array['modified_when']) : 'Unknown', 'page_id' => $results_array['page_id'], 'page_title' => htmlspecialchars_decode($results_array['page_title'], ENT_QUOTES), 'parent' => $results_array['parent'], 'searching' => $results_array['searching'] == 0 ? false : true, 'short_link' => substr($results_array['link'], strripos($results_array['link'], '/') + 1), 'target' => $results_array['target'], 'template' => $results_array['template'], 'visibility' => $results_array['visibility'], 'display_name' => $user['display_name'], 'username' => $user['username'], 'DISPLAY_MENU_LIST' => MULTIPLE_MENUS != false ? true : false, 'DISPLAY_LANGUAGE_LIST' => PAGE_LANGUAGES != false ? true : false, 'DISPLAY_SEARCHING' => SEARCH != false ? true : false, 'admin_groups' => explode(',', str_replace('_', '', $results_array['admin_groups'])), 'viewing_groups' => explode(',', str_replace('_', '', $results_array['viewing_groups'])), 'parent_list' => $pages, 'PAGE_EXTENSION' => $backend->db()->query("SELECT `value` FROM `:prefix:settings` WHERE name = 'page_extension'")->fetchColumn()); $ajax['variants'] = array(); $info = CAT_Helper_Addons::checkInfo(CAT_PATH . '/templates/' . CAT_Helper_Page::getPageTemplate($results_array['page_id'])); if (isset($info['module_variants']) && is_array($info['module_variants']) && count($info['module_variants'])) { $ajax['variants'] = $info['module_variants']; array_unshift($ajax['variants'], ''); } $ajax['template_variant'] = CAT_Helper_Page::getPageSettings($results_array['page_id'], 'internal', 'template_variant'); // ==================== // ! Return values // ==================== print json_encode($ajax);
/** * returns a list of page_id's containing the children of given parent * * @access public * @param integer $parent (default:0) * @param boolean $add_sections (default:false) * @return array **/ public static function getPagesByParent($parent = 0, $add_sections = false) { if (!count(self::$pages_by_parent)) { $pages = self::getPages(CAT_Backend::isBackend()); foreach ($pages as $page) { self::$pages_by_parent[$page['parent']][] = $page['page_id']; } } return isset(self::$pages_by_parent[$parent]) ? self::$pages_by_parent[$parent] : array(); }
/** * prints a formatted error message * * @access public * @param string $message - error message * @param string $link - page to forward to * @param boolean $print_header * @param mixed $args - additional args to print * **/ public static function printError($message = NULL, $link = 'index.php', $print_header = true, $args = NULL) { global $parser; $print_footer = false; $caller = debug_backtrace(); // remove first item (it's the printError() method itself) array_shift($caller); // if called by printFatalError(), shift again... if (isset($caller[0]['function']) && $caller[0]['function'] == 'printFatalError') { array_shift($caller); } $caller_class = isset($caller[0]['class']) ? $caller[0]['class'] : NULL; // remove path info from file $file = isset($caller[1]) && isset($caller[1]['file']) ? basename($caller[1]['file']) : (isset($caller[0]) && isset($caller[0]['file']) ? basename($caller[0]['file']) : NULL); $line = isset($caller[1]) && isset($caller[1]['line']) ? $caller[1]['line'] : (isset($caller[0]) && isset($caller[0]['line']) ? $caller[0]['line'] : NULL); $function = isset($caller[1]) && isset($caller[1]['function']) ? $caller[1]['function'] : (isset($caller[0]) && isset($caller[0]['function']) ? $caller[0]['function'] : NULL); if (true === is_array($message)) { $message = implode("<br />", $message); } if ($file) { $logger = CAT_Helper_KLogger::instance(CAT_PATH . '/temp/logs', 2); $logger->logFatal(sprintf('Fatal error with message [%s] emitted in [%s] line [%s] method [%s]', $message, $file, $line, $function)); if ($args) { $logger->logFatal(var_export($args, 1)); } } $message = CAT_Object::lang()->translate($message); // avoid "headers already sent" error if (!headers_sent() && $print_header) { $print_footer = true; if (!is_object($parser) || !CAT_Backend::isBackend() && !defined('CAT_PAGE_CONTENT_DONE')) { self::err_page_header(); } } if (!is_object($parser) || !CAT_Backend::isBackend() && !defined('CAT_PAGE_CONTENT_DONE')) { echo CAT_Object::lang()->translate('Ooops... A fatal error occured while processing your request!'), "<br /><br />", CAT_Object::lang()->translate('Error message'), ":<br />", CAT_Object::lang()->translate($message), "<br /><br />"; echo CAT_Object::lang()->translate("We're sorry!"); } else { $parser->output('error.tpl', array('message' => $message, 'file' => $file, 'line' => $line, 'function' => $function, 'link' => $link)); } if ($print_footer && !is_object($parser)) { self::err_page_footer(); } }
foreach ($avail as $i => &$l) { if ($l['VALUE'] == $page['language']) { unset($avail[$i]); break; } } // remove already linked languages if (is_array($items) && count($items)) { foreach ($items as $item) { $arrh->ArrayRemove($item['lang'], $avail, 'VALUE'); } } // =========== // ! get pages // =========== $pages_list = CAT_Helper_Page::getPages(CAT_Backend::isBackend()); // skip current page $arrh->ArrayRemove($page_id, $pages_list, 'page_id'); // skip already linked pages if (is_array($items) && count($items)) { foreach ($items as $item) { $arrh->ArrayRemove($item['link_page_id'], $pages_list, 'page_id'); } } // skip deleted pages $deleted = CAT_Helper_Page::getPagesByVisibility('deleted'); foreach ($deleted as $item) { $arrh->ArrayRemove($item['page_id'], $pages_list, 'page_id'); } // ========================================================= // ! Get display name of person who last modified the page