variables['content_obj']) && is_object($gCms->variables['content_obj']) ) { $res = $gCms->variables['content_obj']; } return $res; } /** * Given an array of content_type and seralized_content, reconstructs a * content object. It will handled loading the content type if it hasn't * already been loaded. * * @return mixed The unserialized content object */ public function &LoadContentFromSerializedData(&$data) { if( !isset($data['content_type']) && !isset($data['serialized_content']) ) return FALSE; $contenttype = 'content'; if( isset($data['content_type']) ) $contenttype = $data['content_type']; $contentobj = $this->CreateNewContent($contenttype); $contentobj = unserialize($data['serialized_content']); return $contentobj; } /** * Load a specific content type * * This method is called from the autoloader. There is no need to call it internally * * @internal * @access private * @final * @since 1.9 * @param mixed The type. Either a string, or an instance of CmsContentTypePlaceHolder */ final public function LoadContentType($type) { if( is_object($type) && $type instanceof CmsContentTypePlaceHolder ) { $type = $type->type; } $ctph = $this->_get_content_type($type); if( is_object($ctph) ) { if( !class_exists( $ctph->class ) && file_exists( $ctph->filename ) ) { include_once( $ctph->filename ); } } return $ctph; } /** * Creates a new, empty content object of the given type. * * if the content type is registered with the system, * and the class does not exist, the appropriate filename will be included * and then, if possible a new object of the designated type will be * instantiated. * * @param mixed The type. Either a string, or an instance of CmsContentTypePlaceHolder * @return mixed The new content object */ public function &CreateNewContent($type) { if( is_object($type) && $type instanceof CmsContentTypePlaceHolder ) { $type = $type->type; } $result = NULL; $ctph = $this->LoadContentType($type); if( is_object($ctph) && class_exists($ctph->class) ) { $result = new $ctph->class; } return $result; } /** * Given a content id, load and return the loaded content object. * * @param integer $id The id of the content object to load * @param boolean $loadprops Also load the properties of that content object. Defaults to false. * @return mixed The loaded content object. If nothing is found, returns FALSE. */ function &LoadContentFromId($id,$loadprops=false) { if( cms_content_cache::content_exists($id) ) { return cms_content_cache::get_content($id); } $result = FALSE; $gCms = cmsms(); $db = $gCms->GetDb(); $query = "SELECT * FROM ".cms_db_prefix()."content WHERE content_id = ?"; $row = $db->GetRow($query, array($id)); if ($row) { $classtype = strtolower($row['type']); $contentobj = $this->CreateNewContent($classtype); if ($contentobj) { $contentobj->LoadFromData($row, $loadprops); cms_content_cache::add_content($id,$row['content_alias'],$contentobj); return $contentobj; } } return $result; } /** * Given a content alias, load and return the loaded content object. * * @param integer $id The id of the content object to load * @param boolean $only_active If true, only return the object if it's active flag is true. Defaults to false. * @return mixed The loaded content object. If nothing is found, returns NULL. */ function &LoadContentFromAlias($alias, $only_active = false) { if( cms_content_cache::content_exists($alias) ) { return cms_content_cache::get_content($alias); } $gCms = cmsms(); $db = $gCms->GetDb(); $row = ''; if (is_numeric($alias) && strpos($alias,'.') === FALSE && strpos($alias,',') === FALSE) //Fix for postgres { $query = "SELECT * FROM ".cms_db_prefix()."content WHERE content_id = ?"; if ($only_active == true) { $query .= " AND active = 1"; } $row = $db->GetRow($query, array($alias)); } else { $query = "SELECT * FROM ".cms_db_prefix()."content WHERE content_alias = ?"; if ($only_active == true) { $query .= " AND active = 1"; } $row = $db->GetRow($query, array($alias)); } if ($row) { #Make sure the type exists. If so, instantiate and load if (in_array($row['type'], array_keys($this->ListContentTypes()))) { $classtype = strtolower($row['type']); $contentobj = $this->CreateNewContent($classtype); $contentobj->LoadFromData($row, TRUE); cms_content_cache::add_content($row['content_id'],$row['content_alias'],$contentobj); return $contentobj; } else { $tmp = NULL; return $tmp; } } else { $tmp = NULL; return $tmp; } } /** * Returns the id of the content marked as default. * * @return integer The id of the default content page */ function GetDefaultContent() { if( $this->_default_content_id ) return $this->_default_content_id; $gCms = cmsms(); $db = $gCms->GetDb(); $result = -1; $query = "SELECT content_id FROM ".cms_db_prefix()."content WHERE default_content = 1"; $row = $db->GetRow($query); if ($row) { $result = $row['content_id']; } else { #Just get something... $query = "SELECT content_id FROM ".cms_db_prefix()."content"; $row = $db->GetRow($query); if ($row) { $result = $row['content_id']; } } $this->_default_content_id = $result; return $result; } /** * Load standard CMS content types * * This internal method looks through the contenttypes directory * and loads the placeholders for them. * * @since 1.9 * @access private * @internal */ private function _get_std_content_types() { $result = array(); $dir = dirname(__FILE__).'/contenttypes'; $files = glob($dir.'/*.inc.php'); if( is_array($files) ) { foreach( $files as $one ) { $obj = new CmsContentTypePlaceHolder(); $class = basename($one,'.inc.php'); $type = strtolower($class); $obj->class = $class; $obj->type = strtolower($class); $obj->filename = $one; $obj->loaded = false; if( $obj->type == 'link' ) { // cough... big hack... cough. $obj->friendlyname_key = 'contenttype_redirlink'; } else { $obj->friendlyname_key = 'contenttype_'.$obj->type; } //$obj->friendlyname = $class; $result[$type] = $obj; } } return $result; } private function _get_content_types() { if( !is_array($this->_content_types) ) { // get the standard ones. $content_types = $this->_get_std_content_types(); $this->_content_types = $content_types; // get the list of modules that have content types. // and load them. content types from modules are // registered in the constructor. $module_list = module_meta::get_instance()->module_list_by_method('HasContentType'); if( is_array($module_list) && count($module_list) ) { foreach( $module_list as $module_name ) { cms_utils::get_module($module_name); } } } return $this->_content_types; } /** * Function to return a content type given it's name * * @since 1.9 * @access private * @internal * @param string The content type name * @return CmsContentTypePlaceHolder placeholder object. */ private function _get_content_type($name) { $name = strtolower($name); $this->_get_content_types(); if( is_array($this->_content_types) ) { if( isset($this->_content_types[$name]) && $this->_content_types[$name] instanceof CmsContentTypePlaceHolder ) return $this->_content_types[$name]; } } /** * Register a new content type * * @since 1.9 * @param CmsContentTypePlaceHolder Reference to placeholder object */ public function register_content_type(CmsContentTypePlaceHolder& $obj) { $this->_get_content_types(); if( isset($this->_content_types[$obj->type]) ) return FALSE; $this->_content_types[$obj->type] = $obj; return TRUE; } /** * Returns a hash of valid content types (classes that extend ContentBase) * The key is the name of the class that would be saved into the database. The * value would be the text returned by the type's FriendlyName() method. * * @param boolean optionally return keys as class names. * @param boolean optionally trim the list of content types that are allowed by the site preference. * @return array List of content types registered in the system. */ function ListContentTypes($byclassname = false,$allowed = false) { $disallowed_a = array(); { $tmp = get_site_preference('disallowed_contenttypes'); if( $tmp ) $disallowed_a = explode(',',$tmp); } $this->_get_content_types(); $types = $this->_content_types; if ( isset($types) ) { $result = array(); foreach( $types as $obj ) { global $CMS_ADMIN_PAGE; if( !isset($obj->friendlyname) && isset($obj->friendlyname_key) && isset($CMS_ADMIN_PAGE) ) { $txt = lang($obj->friendlyname_key); $obj->friendlyname = $txt; } if( !$allowed || count($disallowed_a) == 0 || !in_array($obj->type,$disallowed_a) ) { if( $byclassname ) { $result[$obj->class] = $obj->friendlyname; } else { $result[$obj->type] = $obj->friendlyname; } } } return $result; } } /** * Updates the hierarchy position of one item * * @param integer $contentid The content id to update * @return void */ function SetHierarchyPosition($contentid) { $gCms = cmsms(); $db = $gCms->GetDb(); $current_hierarchy_position = ''; $current_id_hierarchy_position = ''; $current_hierarchy_path = ''; $current_parent_id = $contentid; $count = 0; while ($current_parent_id > -1) { $query = "SELECT item_order, parent_id, content_alias FROM ".cms_db_prefix()."content WHERE content_id = ?"; $row = $db->GetRow($query, array($current_parent_id)); if ($row) { $current_hierarchy_position = str_pad($row['item_order'], 5, '0', STR_PAD_LEFT) . "." . $current_hierarchy_position; $current_id_hierarchy_position = $current_parent_id . '.' . $current_id_hierarchy_position; $current_hierarchy_path = $row['content_alias'] . '/' . $current_hierarchy_path; $current_parent_id = $row['parent_id']; $count++; } else { $current_parent_id = -1; } } if (strlen($current_hierarchy_position) > 0) { $current_hierarchy_position = substr($current_hierarchy_position, 0, strlen($current_hierarchy_position) - 1); } if (strlen($current_id_hierarchy_position) > 0) { $current_id_hierarchy_position = substr($current_id_hierarchy_position, 0, strlen($current_id_hierarchy_position) - 1); } if (strlen($current_hierarchy_path) > 0) { $current_hierarchy_path = substr($current_hierarchy_path, 0, strlen($current_hierarchy_path) - 1); } $query = "SELECT prop_name FROM ".cms_db_prefix()."content_props WHERE content_id = ?"; $prop_name_array = $db->GetCol($query, array($contentid)); debug_buffer(array($current_hierarchy_position, $current_id_hierarchy_position, implode(',', $prop_name_array), $contentid)); $query = "UPDATE ".cms_db_prefix()."content SET hierarchy = ?, id_hierarchy = ?, hierarchy_path = ?, prop_names = ? WHERE content_id = ?"; $db->Execute($query, array($current_hierarchy_position, $current_id_hierarchy_position, $current_hierarchy_path, implode(',', $prop_name_array), $contentid)); cms_content_cache::clear(); } /** * Updates the hierarchy position of all items * * @return void */ function SetAllHierarchyPositions() { $db = cmsms()->GetDb(); $query = "SELECT content_id FROM ".cms_db_prefix()."content"; $dbresult = $db->Execute($query); while ($dbresult && !$dbresult->EOF) { $this->SetHierarchyPosition($dbresult->fields['content_id']); $dbresult->MoveNext(); } if ($dbresult) $dbresult->Close(); cms_content_cache::clear(); } /** * Loads a set of content objects into the cached tree. * * @param boolean $loadprops If true, load the properties of those content objects * @param boolean $onlyexpanded Not implemented * @param boolean $loadcontent If false, only create the nodes in the tree, * don't load the content objects * @return mixed The cached tree of content */ function &GetAllContentAsHierarchy($loadcontent = false) { debug_buffer('', 'starting tree'); $gCms = cmsms(); $db = $gCms->GetDb(); $tree = null; $cachefilename = TMP_CACHE_LOCATION . '/contentcache.php'; $loadedcache = false; if (file_exists($cachefilename)) { $last_modified = cms_utils::get_app_data('last_content_modification'); if( $last_modified <= 0 ); { $query = 'SELECT modified_date FROM '.cms_db_prefix().'content ORDER BY modified_date DESC'; $val = $db->GetOne($query); $last_modified = $db->UnixTimeStamp($val); cms_utils::set_app_data('last_content_modification',$last_modified); } if ($last_modified > 0 && $last_modified < filemtime($cachefilename)) { debug_buffer('Content tree file needs loading'); $handle = fopen($cachefilename, "r"); $data = fread($handle, filesize($cachefilename)); fclose($handle); $tree = unserialize(substr($data, 16)); if (strtolower(get_class($tree)) == 'cms_content_tree') { $loadedcache = true; } else { $loadedcache = false; } } } if (!$loadedcache) { debug_buffer('', 'Start Loading Children into Tree'); $query = 'SELECT content_id,parent_id,content_alias FROM '.cms_db_prefix().'content ORDER BY parent_id,item_order'; $nodes = $db->GetArray($query); $tree = cms_tree_operations::load_from_list($nodes); debug_buffer('', 'End Loading Children into Tree'); } if (!$loadedcache) { debug_buffer("Serializing..."); @file_put_contents($cachefilename, ''.serialize($tree)); } if( $loadcontent ) { $this->LoadChildren(-1, true, true); } debug_buffer('', 'ending tree'); return $tree; } /** * Loads additional, active children into a given tree object * * @param integer $id The parent of the content objects to load into the tree * @param boolean $loadprops If true, load the properties of all loaded content objects * @param boolean $all If true, load all content objects, even inactive ones. * @param array (optional) array of explicit content ids to load * @return void * @author Ted Kulp */ function LoadChildren($id, $loadprops = false, $all = false, $explicit_ids = array() ) { $gCms = cmsms(); $db = $gCms->GetDb(); $contentrows = ''; if( is_array($explicit_ids) && count($explicit_ids) ) { $loaded_ids = cms_content_cache::get_loaded_page_ids(); if( is_array($loaded_ids) && count($loaded_ids) ) { $tmp = array(); foreach( $explicit_ids as $one ) { if( in_array($one,$loaded_ids) ) continue; $tmp[] = $one; } if( count($tmp) == 0 ) return; $explicit_ids = $tmp; } $expr = 'content_id IN ('.implode(',',$explicit_ids).')'; if( !$all ) $expr .= ' AND active = 1'; // note, this is mysql specific... $query = 'SELECT * FROM '.cms_db_prefix().'content FORCE INDEX ('.cms_db_prefix().'index_content_by_idhier) WHERE '.$expr.' ORDER BY hierarchy'; $contentrows = $db->GetArray($query); } else { if( !$id ) { $id = -1; } // get the content rows $query = "SELECT * FROM ".cms_db_prefix()."content WHERE parent_id = ? AND active = 1 ORDER BY hierarchy"; if( $all ) $query = "SELECT * FROM ".cms_db_prefix()."content WHERE parent_id = ? ORDER BY hierarchy"; $contentrows = $db->GetArray($query, array($id)); } $contentprops = null; // get the content ids from the returned data if( $loadprops ) { $child_ids = array(); for( $i = 0; $i < count($contentrows); $i++ ) { $child_ids[] = $contentrows[$i]['content_id']; } $tmp = null; if( count($child_ids) ) { // get all the properties for the child_ids $query = 'SELECT * FROM '.cms_db_prefix().'content_props WHERE content_id IN ('.implode(',',$child_ids).') ORDER BY content_id'; $tmp = $db->GetArray($query); } // re-organize the tmp data into a hash of arrays of properties for each content id. if( $tmp ) { $contentprops = array(); for( $i = 0; $i < count($tmp); $i++ ) { $content_id = $tmp[$i]['content_id']; if( in_array($content_id,$child_ids) ) { if( !isset($contentprops[$content_id]) ) $contentprops[$content_id] = array(); $contentprops[$content_id][] = $tmp[$i]; } } unset($tmp); } } // build the content objects for( $i = 0; $i < count($contentrows); $i++ ) { $row = $contentrows[$i]; $id = $row['content_id']; if (!in_array($row['type'], array_keys($this->ListContentTypes()))) continue; $contentobj = $this->CreateNewContent($row['type']); if ($contentobj) { $contentobj->LoadFromData($row, false); if( $loadprops && $contentprops && isset($contentprops[$id]) ) { // load the properties from local cache. $props = $contentprops[$id]; foreach( $props as $oneprop ) { $contentobj->SetPropertyValueNoLoad($oneprop['prop_name'],$oneprop['content']); } } // cache the content objects cms_content_cache::add_content($id,$contentobj->Alias(),$contentobj); } } } /** * Sets the default content to the given id * * @param integer $id The id to set as default * @return void * @author Ted Kulp */ function SetDefaultContent($id) { $gCms = cmsms(); $db = $gCms->GetDb(); $query = "SELECT content_id FROM ".cms_db_prefix()."content WHERE default_content=1"; $old_id = $db->GetOne($query); if (isset($old_id)) { $one = new Content(); $one->LoadFromId($old_id); $one->SetDefaultContent(false); $one->Save(); } $one = new Content(); $one->LoadFromId($id); $one->SetDefaultContent(true); $one->Save(); } public function LoadAllContent($loadprops = FALSE,$inactive = FALSE,$showinmenu = FALSE) { static $_loaded = 0; if( $_loaded == 1 ) return; $_loaded = 1; $db = cmsms()->GetDb(); $expr = array(); $parms = array(); if( !$inactive ) { $expr[] = 'active = ?'; $parms[] = 1; } if( $showinmenu ) { $expr[] = 'show_in_menu = ?'; $parms[] = 1; } $loaded_ids = cms_content_cache::get_loaded_page_ids(); if( is_array($loaded_ids) && count($loaded_ids) ) { $expr[] = 'content_id NOT IN ('.implode(',',$loaded_ids).')'; } $query = 'SELECT * FROM '.cms_db_prefix().'content FORCE INDEX ('.cms_db_prefix().'index_content_by_idhier)'; if( count($expr) ) $query .= ' WHERE '.implode(' AND ',$expr); $contentrows = $db->GetArray($query,$parms); if( $loadprops ) { $child_ids = array(); for( $i = 0; $i < count($contentrows); $i++ ) { $child_ids[] = $contentrows[$i]['content_id']; } $tmp = null; if( count($child_ids) ) { // get all the properties for the child_ids $query = 'SELECT * FROM '.cms_db_prefix().'content_props WHERE content_id IN ('.implode(',',$child_ids).') ORDER BY content_id'; $tmp = $db->GetArray($query); } // re-organize the tmp data into a hash of arrays of properties for each content id. if( $tmp ) { $contentprops = array(); for( $i = 0; $i < count($tmp); $i++ ) { $content_id = $tmp[$i]['content_id']; if( in_array($content_id,$child_ids) ) { if( !isset($contentprops[$content_id]) ) $contentprops[$content_id] = array(); $contentprops[$content_id][] = $tmp[$i]; } } unset($tmp); } } // build the content objects for( $i = 0; $i < count($contentrows); $i++ ) { $row = $contentrows[$i]; $id = $row['content_id']; if (!in_array($row['type'], array_keys($this->ListContentTypes()))) continue; $contentobj = $this->CreateNewContent($row['type']); if ($contentobj) { $contentobj->LoadFromData($row, false); if( $loadprops && $contentprops && isset($contentprops[$id]) ) { // load the properties from local cache. $props = $contentprops[$id]; foreach( $props as $oneprop ) { $contentobj->SetPropertyValueNoLoad($oneprop['prop_name'],$oneprop['content']); } } // cache the content objects cms_content_cache::add_content($id,$contentobj->Alias(),$contentobj); } } } /** * Returns an array of all content objects in the system, active or not. * * @param boolean $loadprops Not implemented * @return array The array of content objects */ function &GetAllContent($loadprops=true) { debug_buffer('get all content...'); $gCms = cmsms(); $tree = $gCms->GetHierarchyManager(); $list = $tree->getFlatList(); $this->LoadAllContent($loadprops); $output = array(); foreach( $list as &$one ) { $tmp = $one->GetContent(false,true,true); if( is_object($tmp) ) $output[] = $tmp; } debug_buffer('end get all content...'); return $output; } /** * Create a hierarchical ordered dropdown of all the content objects in the system for use * in the admin and various modules. If $current or $parent variables are passed, care is taken * to make sure that children which could cause a loop are hidden, in cases of when you're creating * a dropdown for changing a content object's parent. * * @param string $current The currently selected content object. If none is given, we show all items. * @param string $parent The parent of the currently selected content object. If none is given, we show all items. * @param string $name The html name of the dropdown * @param boolean $allowcurrent Overrides the logic if $current and/or $parent are passed. Defaults to false. * @param boolean $use_perms If true, checks authorship permissions on pages and only shows those the current * user has access to. * @param boolean $ignore_current Ignores the value of $current totally by not marking any items as invalid. * @param boolean $allow_all If true, show all items, even if the content object * doesn't have a valid link. Defaults to false. * @param boolean $use_name if true use Name() else use MenuText() Defaults to using the system preference. * @return string The html dropdown of the hierarchy */ function CreateHierarchyDropdown($current = '', $parent = '', $name = 'parent_id', $allowcurrent = 0, $use_perms = 0, $ignore_current = 0, $allow_all = false, $use_name = null) { $result = ''; $userid = -1; if( is_null($use_name) ) { $use_name = get_site_preference('listcontent_showtitle',true); } $allcontent = $this->GetAllContent(false); if ($allcontent !== FALSE && count($allcontent) > 0) { if( $use_perms ) { $userid = get_userid(); } if( ($userid > 0 && check_permission($userid,'Manage All Content')) || $userid == -1 || $parent == -1 ) { $result .= ''; } $curhierarchy = ''; foreach ($allcontent as $one) { if( !is_object($one) ) continue; $value = $one->Id(); if ($value == $current) { // Grab hierarchy just in case we need to check children // (which will always be after) $curhierarchy = $one->Hierarchy(); if( !$allowcurrent ) { // Then jump out. We don't want ourselves in the list. continue; } $value = -1; } // If it doesn't have a valid link... // don't include it. if( !$allow_all && !$one->HasUsableLink() ) { continue; } // If it's a child of the current, we don't want to show it as it // could cause a deadlock. if (!$allowcurrent && $curhierarchy != '' && strstr($one->Hierarchy() . '.', $curhierarchy . '.') == $one->Hierarchy() . '.') { continue; } // If we have a valid userid... only include pages where this user // has write access... or is an admin user... or has appropriate permission. if( $userid > 0 && $one->Id() != $parent) { if( !check_permission($userid,'Manage All Content') && !check_authorship($userid,$one->Id()) ) { continue; } } // Don't include content types that do not want children either... if (!$one->WantsChildren()) continue; { $result .= ''; } else { $result .= '>'.$one->Hierarchy().'. - '.$txt.''; } } } } if( !empty($result) ) { $result = ''; } return $result; } /** * Gets the content id of the page marked as default * * @return integer The id of the default page. false if not found. */ function GetDefaultPageID() { return $this->GetDefaultContent(); } /** * Returns the content id given a valid content alias. * * @param string $alias The alias to query * @return integer The resulting id. false if not found. */ function GetPageIDFromAlias( $alias ) { $res = cms_content_cache::get_id_from_alias($alias); if( $res !== FALSE ) return $res; $gCms = cmsms(); $db = $gCms->GetDb(); if (is_numeric($alias) && strpos($alias,'.') == FALSE && strpos($alias,',') == FALSE) { return $alias; } $params = array($alias); $query = "SELECT content_id FROM ".cms_db_prefix()."content WHERE content_alias = ?"; $row = $db->GetRow($query, $params); if (!$row) { return false; } return $row['content_id']; } /** * Returns the content id given a valid hierarchical position. * * @param string $position The position to query * @return integer The resulting id. false if not found. */ function GetPageIDFromHierarchy($position) { $gCms = cmsms(); $db = $gCms->GetDb(); $query = "SELECT content_id FROM ".cms_db_prefix()."content WHERE hierarchy = ?"; $row = $db->GetRow($query, array($this->CreateUnfriendlyHierarchyPosition($position))); if (!$row) { return false; } return $row['content_id']; } /** * Returns the content alias given a valid content id. * * @param integer $id The content id to query * @return string The resulting content alias. false if not found. */ function GetPageAliasFromID( $id ) { $res = cms_content_cache::get_alias_from_id($id); if( $res !== FALSE ) return $res; $gCms = cmsms(); $db = $gCms->GetDb(); if (!is_numeric($id) && strpos($id,'.') == TRUE && strpos($id,',') == TRUE) { return $id; } $params = array($id); $query = "SELECT content_alias FROM ".cms_db_prefix()."content WHERE content_id = ?"; $row = $db->GetRow($query, $params); if ( !$row ) { return false; } return $row['content_alias']; } /** * Checks to see if a content alias is valid and not in use. * * @param string $alias The content alias to check * @param string $content_id The id of the current page, for used alias checks on existing pages * @return string The error, if any. If there is no error, returns FALSE. */ function CheckAliasError($alias, $content_id = -1) { $gCms = cmsms(); $db = $gCms->GetDb(); $error = FALSE; if (preg_match('/^\d+$/', $alias)) { $error = lang('aliasnotaninteger'); } else if (!preg_match('/^[\-\_\w]+$/', $alias)) { $error = lang('aliasmustbelettersandnumbers'); } else { $params = array($alias); $query = "SELECT content_id FROM ".cms_db_prefix()."content WHERE content_alias = ?"; if ($content_id > -1) { $query .= " AND content_id != ?"; $params[] = $content_id; } $row = $db->GetRow($query, $params); if ($row) { $error = lang('aliasalreadyused'); } } return $error; } /** * Clears the content cache * * @ignore * @internal * @access private * @return void */ function ClearCache() { $gCms = cmsms(); $smarty = $gCms->GetSmarty(); cms_content_cache::clear(); unset($gCms->hrinstance); $smarty->clear_all_cache(); $smarty->clear_compiled_tpl(); if (is_file(TMP_CACHE_LOCATION . '/contentcache.php')) { unlink(TMP_CACHE_LOCATION . '/contentcache.php'); } @touch(cms_join_path(TMP_CACHE_LOCATION,'index.html')); @touch(cms_join_path(TMP_TEMPLATES_C_LOCATION,'index.html')); } /** * Converts a friendly hierarchy (1.1.1) to an unfriendly hierarchy (00001.00001.00001) for * use in the database. * * @param string $position The hierarchy position to convert * @return string The unfriendly version of the hierarchy string */ function CreateFriendlyHierarchyPosition($position) { #Change padded numbers back into user-friendly values $tmp = ''; $levels = preg_split('/\./', $position); foreach ($levels as $onelevel) { $tmp .= ltrim($onelevel, '0') . '.'; } $tmp = rtrim($tmp, '.'); return $tmp; } /** * Converts an unfriendly hierarchy (00001.00001.00001) to a friendly hierarchy (1.1.1) for * use in the database. * * @param string $position The hierarchy position to convert * @return string The friendly version of the hierarchy string */ function CreateUnfriendlyHierarchyPosition($position) { #Change user-friendly values into padded numbers $tmp = ''; $levels = preg_split('/\./', $position); foreach ($levels as $onelevel) { $tmp .= str_pad($onelevel, 5, '0', STR_PAD_LEFT) . '.'; } $tmp = rtrim($tmp, '.'); return $tmp; } /** * Grab URLs from the content table and register them with the route manager. * * @since 1.9 * @author Robert Campbell * @internal * @access private */ public function register_routes() { $gCms = cmsms(); $db = $gCms->GetDb(); $query = 'SELECT content_id,page_url FROM '.cms_db_prefix().'content WHERE active = 1 AND default_content = 0 AND page_url != \'\''; $data = $db->GetArray($query); if( is_array($data) ) { foreach( $data as $onerow ) { $route = new CmsRoute($onerow['page_url'],$onerow['content_id'],'',TRUE); cms_route_manager::register($route); } } } public function quickfind_node_by_id($id) { if( !is_array($this->_quickfind) ) { $this->_quickfind = cmsms()->GetHierarchyManager()->getFlatList(); ksort($this->_quickfind); } if( isset($this->_quickfind[$id]) ) return $this->_quickfind[$id]; } } /** * @package CMS * @ignore */ class ContentManager extends ContentOperations { } ?>