芝麻web文件管理V1.00
编辑当前文件:/home/prismawe/clients/canaldegap.fr_old/lib/content.functions.php
Smarty(); global $CMS_ADMIN_PAGE; if( isset($CMS_ADMIN_PAGE) && $CMS_ADMIN_PAGE == 1 ) { $this->template_dir = $config["root_path"].'/'.$config['admin_dir'].'/templates/'; $this->config_dir = $config["root_path"].'/'.$config['admin_dir'].'/configs/'; } else { $this->template_dir = $config["root_path"].'/tmp/templates/'; $this->config_dir = $config["root_path"].'/tmp/configs/'; } $this->compile_dir = TMP_TEMPLATES_C_LOCATION; $this->cache_dir = TMP_CACHE_LOCATION; #$this->plugins_dir = array($config["root_path"].'/lib/smarty/plugins',$config["root_path"].'/plugins',$config["root_path"].'/plugins/cache'); $this->plugins_dir = array($config["root_path"].'/lib/smarty/plugins',$config["root_path"].'/plugins'); $this->compiler_file = 'CMS_Compiler.class.php'; $this->compiler_class = 'CMS_Compiler'; //use_sub_dirs doesn't work in safe mode //if (ini_get("safe_mode") != "1") // $this->use_sub_dirs = true; //$this->caching = false; //$this->compile_check = true; $this->assign('app_name','CMS'); //$this->debugging = false; //$this->force_compile = false; $this->cache_plugins = false; if ($config["debug"] == true) { //$this->caching = false; $this->force_compile = true; $this->debugging = true; } if (is_sitedown()) { $this->caching = false; $this->force_compile = true; } if (isset($CMS_ADMIN_PAGE) && $CMS_ADMIN_PAGE == 1) { $this->caching = false; $this->force_compile = true; } load_plugins($this); $this->register_resource("db", array(&$this, "template_get_template", "template_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("print", array(&$this, "template_get_template", "template_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("template", array(&$this, "template_get_template", "template_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("tpl_top", array(&$this, "template_top_get_template", "template_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("tpl_head", array(&$this, "template_head_get_template", "template_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("tpl_body", array(&$this, "template_body_get_template", "template_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("htmlblob", array(&$this, "global_content_get_template", "global_content_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("globalcontent", array(&$this, "global_content_get_template", "global_content_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("content", array(&$this, "content_get_template", "content_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("module", array(&$this, "module_get_template", "module_get_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("module_db_tpl", array(&$this, "module_db_template", "module_db_timestamp", "db_get_secure", "db_get_trusted")); $this->register_resource("module_file_tpl", array(&$this, "module_file_template", "module_file_timestamp", "db_get_secure", "db_get_trusted")); } /** * wrapper for include() retaining $this * @return mixed */ function _include($filename, $once=false, $params=null) { if ($filename != '') { if ($once) { return include_once($filename); } else { return include($filename); } } } function trigger_error($error_msg, $error_type = E_USER_WARNING) { var_dump("Smarty error: $error_msg"); } function module_file_template($tpl_name, &$tpl_source, &$smarty_obj) { $params = split(';', $tpl_name); if (count($params) == 2 && file_exists(dirname(dirname(__FILE__)) . '/module_custom/' . $params[0] . '/templates/' . $params[1])) { $tpl_source = @file_get_contents(dirname(dirname(__FILE__)) . '/module_custom/' . $params[0] . '/templates/' . $params[1]); return true; } else if (count($params) == 2 && file_exists(dirname(dirname(__FILE__)) . '/modules/' . $params[0] . '/templates/' . $params[1])) { $tpl_source = @file_get_contents(dirname(dirname(__FILE__)) . '/modules/' . $params[0] . '/templates/' . $params[1]); return true; } return false; } function module_file_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { $params = split(';', $tpl_name); if (count($params) == 2 && file_exists(dirname(dirname(__FILE__)) . '/modules/' . $params[0] . '/templates/' . $params[1])) { $tpl_timestamp = filemtime(dirname(dirname(__FILE__)) . '/modules/' . $params[0] . '/templates/' . $params[1]); return true; } return false; } function module_db_template($tpl_name, &$tpl_source, &$smarty_obj) { global $gCms; $db = &$gCms->GetDb(); $config = $gCms->config; $query = "SELECT content from ".cms_db_prefix()."module_templates WHERE module_name = ? and template_name = ?"; $row = $db->GetRow($query, split(';', $tpl_name)); if ($row) { $tpl_source = $row['content']; return true; } return false; } function module_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { global $gCms; $db = &$gCms->GetDb(); $config = $gCms->config; if( isset($gCms->variables['module_template_cache']) && isset($gCms->variables['module_template_cache'][$tpl_name]) ) { $tpl_timestamp = $gCms->variables['module_template_cache'][$tpl_name]; return true; } $query = "SELECT module_name,template_name,modified_date FROM ".cms_db_prefix()."module_templates"; $results = $db->GetArray($query); if( !count($results) ) return false; if( !isset($gCms->variables['module_template_cache']) ) { $gCms->variables['module_template_cache'] = array(); } foreach( $results as $row ) { $key = $row['module_name'].';'.$row['template_name']; $val = $db->UnixTimeStamp($row['modified_date']); $gCms->variables['module_template_cache'][$key] = $val; } $tpl_timestamp = $gCms->variables['module_template_cache'][$tpl_name]; return true; } function global_content_get_template($tpl_name, &$tpl_source, &$smarty_obj) { debug_buffer('start global_content_get_template'); global $gCms; $config =& $gCms->config; $gcbops =& $gCms->GetGlobalContentOperations(); $oneblob = $gcbops->LoadHtmlBlobByName($tpl_name); if ($oneblob) { $text = $oneblob->content; #Perform the content htmlblob callback /* reset($gCms->modules); while (list($key) = each($gCms->modules)) { $value =& $gCms->modules[$key]; if ($gCms->modules[$key]['installed'] == true && $gCms->modules[$key]['active'] == true) { $gCms->modules[$key]['object']->ContentHtmlBlob($text); } } */ $tpl_source = $text; #So no one can do anything nasty, take out the php smarty tags. Use a user #defined plugin instead. if (!(isset($config["use_smarty_php_tags"]) && $config["use_smarty_php_tags"] == true)) { $tpl_source = ereg_replace("\{\/?php\}", "", $tpl_source); } } else { $tpl_source = ""; } debug_buffer('end global_content_get_template'); return true; } function global_content_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { debug_buffer('start global_content_get_timestamp'); global $gCms; $gcbops =& $gCms->GetGlobalContentOperations(); $oneblob = $gcbops->LoadHtmlBlobByName($tpl_name); if ($oneblob) { $tpl_timestamp = $oneblob->modified_date; debug_buffer('end global_content_get_timestamp'); return true; } else { return false; } } function template_top_get_template($tpl_name, &$tpl_source, &$smarty_obj) { global $gCms; $config =& $gCms->GetConfig(); if (is_sitedown()) { $tpl_source = ''; return true; } else { if ($tpl_name == 'notemplate') { $tpl_source = ''; return true; } if( isset($gCms->variables['template']) ) { $tpl_source = $gCms->variables['template']; } else { $pageinfo = $gCms->variables['pageinfo']; $templateops =& $gCms->GetTemplateOperations(); $templateobj =& $templateops->LoadTemplateByID($pageinfo->template_id); if (isset($templateobj) && $templateobj !== FALSE) { $tpl_source = $templateobj->content; $gCms->variables['template'] = $tpl_source; } } $pos = stripos($tpl_source,'GetConfig(); if (is_sitedown()) { $tpl_source = ''; return true; } else { if ($tpl_name == 'notemplate') { $tpl_source = ''; return true; } if( isset($gCms->variables['template']) ) { $tpl_source = $gCms->variables['template']; } else { $pageinfo = $gCms->variables['pageinfo']; $templateops =& $gCms->GetTemplateOperations(); $templateobj =& $templateops->LoadTemplateByID($pageinfo->template_id); if (isset($templateobj) && $templateobj !== FALSE) { $tpl_source = $templateobj->content; $gCms->variables['template'] = $tpl_source; } } $pos1 = stripos($tpl_source,''); if( $pos1 === FALSE || $pos2 === FALSE ) { // return an empty string // assume it was processed in the top $tpl_source = ''; return true; } $tpl_source = substr($tpl_source,$pos1,$pos2-$pos1+7); return true; } return false; } function template_body_get_template($tpl_name, &$tpl_source, &$smarty_obj) { global $gCms; $config =& $gCms->GetConfig(); if (is_sitedown()) { header('HTTP/1.0 503 Service Unavailable'); header('Status: 503 Service Unavailable'); $tpl_source = get_site_preference('sitedownmessage'); return true; } else { if ($tpl_name == 'notemplate') { $tpl_source = '{content}'; return true; } if( isset($gCms->variables['template']) ) { $tpl_source = $gCms->variables['template']; } else { $pageinfo = $gCms->variables['pageinfo']; $templateops =& $gCms->GetTemplateOperations(); $templateobj =& $templateops->LoadTemplateByID($pageinfo->template_id); if (isset($templateobj) && $templateobj !== FALSE) { $tpl_source = $templateobj->content; $gCms->variables['template'] = $tpl_source; } } $pos = stripos($tpl_source,''); if( $pos === FALSE ) { // this probably means it's not an html template // just return an empty string // and assume that the tpl_head stuff // returned the entire template $tpl_source = ''; return true; } $tpl_source = substr($tpl_source,$pos+7); return true; } return false; } function template_get_template($tpl_name, &$tpl_source, &$smarty_obj) { global $gCms; $config =& $gCms->GetConfig(); if (is_sitedown()) { $tpl_source = get_site_preference('sitedownmessage'); return true; } else { $pageinfo = $gCms->variables['pageinfo']; if ($tpl_name == 'notemplate') { $tpl_source = '{content}'; return true; } else if (isset($_GET["print"])) { // this should really just go. $script = ''; if (isset($_GET["js"]) and $_GET["js"] == 1) $script = ''; if (isset($_GET["goback"]) and $_GET["goback"] == 0) { $tpl_source = ''.''.'
{title}
{metadata}{stylesheet}{literal}{/literal}{content}'.$script.''; } else { $hm =& $gCms->GetHierarchyManager(); if ('mod_rewrite' == $config['url_rewriting']) { $curnode =& $hm->getNodeByAlias($tpl_name); } else { $curnode =& $hm->getNodeById($tpl_name); } $curcontent =& $curnode->GetContent(); $page_url = $curcontent->GetURL(); $tpl_source = ''.''.'
{title}
{metadata}{stylesheet}{literal}{/literal}
« Go Back
{content}'.$script.''; } return true; } if( isset($_SESSION['cms_preview']) ) { return 'DEBUG: IN PREVIEW
'; // get serialized data filename $tpl_name = trim($_SESSION['cms_preview']); unset($_SESSION['cms_preview']); $fname = ''; if (is_writable($config["previews_path"])) { $fname = cms_join_path($config["previews_path"] , $tpl_name); } else { $fname = cms_join_path(TMP_CACHE_LOCATION , $tpl_name); } if( !file_exists($fname) ) { $tpl_source = 'Error: Cache file: '.$tpl_name.' does not exist.'; return false; } // get the serialized data $handle = fopen($fname, "r"); $data = unserialize(fread($handle, filesize($fname))); fclose($handle); unlink($fname); $tpl_source = $data["template"]; return true; } else { global $gCms; $templateops =& $gCms->GetTemplateOperations(); $templateobj =& $templateops->LoadTemplateByID($pageinfo->template_id); if (isset($templateobj) && $templateobj !== FALSE) { $tpl_source = $templateobj->content; #So no one can do anything nasty, take out the php smarty tags. Use a user #defined plugin instead. if (!(isset($config["use_smarty_php_tags"]) && $config["use_smarty_php_tags"] == true)) { $tpl_source = ereg_replace("\{\/?php\}", "", $tpl_source); } //do_cross_reference($pageinfo->template_id, 'template', $tpl_source); return true; } } return false; } } function template_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { global $gCms; if (is_sitedown() || $tpl_name == 'notemplate') { $tpl_timestamp = time(); return true; } else if (isset($_GET['id']) && isset($_GET[$_GET['id'].'showtemplate']) && $_GET[$_GET['id'].'showtemplate'] == 'false') { $tpl_timestamp = time(); return true; } else if (isset($_GET['print'])) { $tpl_timestamp = time(); return true; } else { $pageinfo = &$gCms->variables['pageinfo']; $tpl_timestamp = $pageinfo->template_modified_date; return true; } } function content_get_template($tpl_name, &$tpl_source, &$smarty_obj) { global $gCms; $config =& $gCms->GetConfig(); $pageinfo = &$gCms->variables['pageinfo']; if (isset($pageinfo) && $pageinfo->content_id == -1) { #We've a custom error message... return it here header("HTTP/1.0 404 Not Found"); header("Status: 404 Not Found"); if ($tpl_name == 'content_en') $tpl_source = get_site_preference('custom404'); else $tpl_source = ''; return true; } else if( isset($_SESSION['cms_preview_data']) && $pageinfo->content_id == '__CMS_PREVIEW_PAGE__' ) { if( !isset($_SESSION['cms_preview_data']['content_obj']) ) { $contentops =& $gCms->GetContentOperations(); $_SESSION['cms_preview_data']['content_obj'] = $contentops->LoadContentFromSerializedData($_SESSION['cms_preview_data']); $contentobj =& $_SESSION['cms_preview_data']['content_obj']; } $contentobj =& $_SESSION['cms_preview_data']['content_obj']; $tpl_source = $contentobj->Show($tpl_name); #So no one can do anything nasty, take out the php smarty tags. Use a user #defined plugin instead. if (!(isset($config["use_smarty_php_tags"]) && $config["use_smarty_php_tags"] == true)) { $tpl_source = ereg_replace("\{\/?php\}", "", $tpl_source); } return true; } else { $manager =& $gCms->GetHierarchyManager(); $node =& $manager->sureGetNodeById($pageinfo->content_id); $contentobj =& $node->GetContent(); if (isset($contentobj) && $contentobj !== FALSE) { $tpl_source = $contentobj->Show($tpl_name); #So no one can do anything nasty, take out the php smarty tags. Use a user #defined plugin instead. if (!(isset($config["use_smarty_php_tags"]) && $config["use_smarty_php_tags"] == true)) { $tpl_source = ereg_replace("\{\/?php\}", "", $tpl_source); } //do_cross_reference($pageinfo->content_id, 'content', $tpl_source); return true; } } return false; } function content_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { global $gCms; $pageinfo =& $gCms->variables['pageinfo']; if (isset($pageinfo) && $pageinfo->content_id == -1) { #We've a custom error message... set a current timestamp $tpl_timestamp = time(); } else { if ($pageinfo->cachable) { $tpl_timestamp = $pageinfo->content_modified_date; } else { $tpl_timestamp = time(); } } return true; } function module_get_template ($tpl_name, &$tpl_source, &$smarty_obj) { global $gCms; $pageinfo =& $gCms->variables['pageinfo']; $config = $gCms->config; #Run the execute_user function and replace {content} with it's output if (isset($gCms->modules[$tpl_name])) { @ob_start(); $id = $smarty_obj->id; $returnid = isset($pageinfo)?$pageinfo->content_id:''; $params = GetModuleParameters($id); $action = 'default'; if (isset($params['action'])) { $action = $params['action']; } echo $gCms->modules[$tpl_name]['object']->DoActionBase($action, $id, $params, isset($pageinfo)?$pageinfo->content_id:''); $modoutput = @ob_get_contents(); @ob_end_clean(); $tpl_source = $modoutput; } header("Content-Type: ".$gCms->variables['content-type']."; charset=" . get_encoding()); if (isset($gCms->variables['content-filename']) && $gCms->variables['content-filename'] != '') { header('Content-Disposition: attachment; filename="'.$gCms->variables['content-filename'].'"'); header("Pragma: public"); } #So no one can do anything nasty, take out the php smarty tags. Use a user #defined plugin instead. if (!(isset($config["use_smarty_php_tags"]) && $config["use_smarty_php_tags"] == true)) { $tpl_source = ereg_replace("\{\/?php\}", "", $tpl_source); } return true; } function module_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) { $tpl_timestamp = time(); return true; } function db_get_secure($tpl_name, &$smarty_obj) { // assume all templates are secure return true; } function db_get_trusted($tpl_name, &$smarty_obj) { // not used for templates } } /** * Loads all plugins into the system * * @since 0.5 */ function load_plugins(&$smarty) { global $gCms; $plugins = &$gCms->cmsplugins; $userplugins = &$gCms->userplugins; $userpluginfunctions = &$gCms->userpluginfunctions; $db = &$gCms->GetDb(); if (isset($db)) { #if (@is_dir(dirname(dirname(__FILE__))."/plugins/cache")) #{ # search_plugins($smarty, $plugins, dirname(dirname(__FILE__))."/plugins/cache", true); #} search_plugins($smarty, $plugins, dirname(dirname(__FILE__))."/plugins", false); $query = "SELECT * FROM ".cms_db_prefix()."userplugins"; $result = &$db->Execute($query); while ($result && !$result->EOF) { if (!in_array($result->fields['userplugin_name'], $plugins)) { $plugins[] =& $result->fields['userplugin_name']; $userplugins[$result->fields['userplugin_name']] = $result->fields['userplugin_id']; $functionname = "cms_tmp_".$result->fields['userplugin_name']."_userplugin_function"; //Only register valid code if (!(@eval('function '.$functionname.'($params, &$smarty) {'.$result->fields['code'].'}') === FALSE)) { $smarty->register_function($result->fields['userplugin_name'], $functionname, false); //Register the function in a hash so that we can call it from other places by name $userpluginfunctions[$result->fields['userplugin_name']] = $functionname; } } $result->MoveNext(); } sort($plugins); } } function search_plugins(&$smarty, &$plugins, $dir, $caching) { global $CMS_LOAD_ALL_PLUGINS; $types=array('function','compiler','prefilter','postfilter','outputfilter','modifier','block'); $handle=opendir($dir); while ($file = readdir($handle)) { // This hides the dummy function.summarize.php // (function.summarize.php was renamed to modifier.summarize.php in 1.0.3) // This code can be deleted once the dummy is removed from the distribution // TODO: DELETE if ( $file == 'function.summarize.php' && substr(file_get_contents(cms_join_path($dir, $file)), 9, 9) == '__DUMMY__' ) { continue; } // END TODO: DELETE $path_parts = pathinfo($file); if (isset($path_parts['extension']) && $path_parts['extension'] == 'php') { //Valid plugins will always have a 3 part filename $filearray = explode('.', $path_parts['basename']); if (count($filearray == 3)) { $filename = cms_join_path($dir, $file); //The part we care about is the middle one... $file = $filearray[1]; if (!isset($plugins[$file]) && in_array($filearray[0],$types)) { $key=array_search($filearray[0],$types); $load=true; switch ($key) { case 0: if (isset($CMS_LOAD_ALL_PLUGINS)) $smarty->register_function($file, "smarty_cms_function_" . $file, $caching); else $load=false; break; case 1: $smarty->register_compiler_function($file, "smarty_cms_compiler_" . $file, $caching); break; case 2: $smarty->register_prefilter("smarty_cms_prefilter_" . $file); break; case 3: $smarty->register_postfilter("smarty_cms_postfilter_" . $file); break; case 4: $smarty->register_outputfilter("smarty_cms_outputfilter_" . $file); break; case 5: $smarty->register_modifier($file, "smarty_cms_modifier_" . $file); break; case 6: $smarty->register_block($file, "smarty_cms_block_" . $file); break; } if ($load){ $plugins[]=$file; require_once($filename);} } } } } closedir($handle); } function do_cross_reference($parent_id, $parent_type, $content) { global $gCms; $db =& $gCms->GetDb(); //Delete old ones from the database $query = 'DELETE FROM '.cms_db_prefix().'crossref WHERE parent_id = ? AND parent_type = ?'; $db->Execute($query, array($parent_id, $parent_type)); //Do global content blocks $matches = array(); preg_match_all('/\{(?:html_blob|global_content).*?name=["\']([^"]+)["\'].*?\}/', $content, $matches); if (isset($matches[1])) { $selquery = 'SELECT htmlblob_id FROM '.cms_db_prefix().'htmlblobs WHERE htmlblob_name = ?'; $insquery = 'INSERT INTO '.cms_db_prefix().'crossref (parent_id, parent_type, child_id, child_type, create_date, modified_date) VALUES (?,?,?,\'global_content\','.$db->DBTimeStamp(time()).','.$db->DBTimeStamp(time()).')'; foreach ($matches[1] as $name) { $result = &$db->Execute($selquery, array($name)); while ($result && !$result->EOF) { $db->Execute($insquery, array($parent_id, $parent_type, $result->fields['htmlblob_id'])); $result->MoveNext(); } if ($result) $result->Close(); } } } function remove_cross_references($parent_id, $parent_type) { global $gCms; $db =& $gCms->GetDb(); //Delete old ones from the database $query = 'DELETE FROM '.cms_db_prefix().'crossref WHERE parent_id = ? AND parent_type = ?'; $db->Execute($query, array($parent_id, $parent_type)); } function remove_cross_references_by_child($child_id, $child_type) { global $gCms; $db =& $gCms->GetDb(); //Delete old ones from the database $query = 'DELETE FROM '.cms_db_prefix().'crossref WHERE child_id = ? AND child_type = ?'; $db->Execute($query, array($child_id, $child_type)); } function global_content_regex_callback($matches) { global $gCms; if (isset($matches[1])) { $gcbops =& $gCms->GetGlobalContentOperations(); $oneblob = $gcbops->LoadHtmlBlobByName($matches[1]); if ($oneblob) { $text = $oneblob->content; #Perform the content htmlblob callback reset($gCms->modules); while (list($key) = each($gCms->modules)) { $value =& $gCms->modules[$key]; if ($gCms->modules[$key]['installed'] == true && $gCms->modules[$key]['active'] == true) { $gCms->modules[$key]['object']->GlobalContentPreCompile($text); } } Events::SendEvent('Core', 'GlobalContentPreCompile', array('content' => &$text)); return $text; } else { return ""; } } else { return ""; } } function is_sitedown() { if( get_site_preference('enablesitedownmessage') !== '1' ) return FALSE; $excludes = get_site_preference('sitedownexcludes',''); if( !isset($_SERVER['REMOTE_ADDR']) ) return TRUE; if( empty($excludes) ) return TRUE; $ret = cms_ipmatches($_SERVER['REMOTE_ADDR'],$excludes); if( $ret ) return FALSE; return TRUE; } # vim:ts=4 sw=4 noet ?>