* @copyright: Copyright (c) 2010, Bunzia Alexander * @version: 1.0 * @license: http://www.gnu.org/copyleft/gpl.html GNU/GPL * @package HiLo CMS */ /*function sys_ajax_window($title,$msg){ echo '<![CDATA['.$title .']]>'; exit(); } function sys_ajax_result($msg){ echo ''; exit(); } function sys_ajax_debug($msg){ sys_error(ERROR_501,$msg); } function sys_ajax_msg($msg){ echo ''; exit(); }*/ //1315398910 //1315355710 //2011.09.07 04:35:10 function sys_timestamp_convert($format,$date){ switch($format){ default: return false; break; case('d.m.Y H:i:s'): case('d.m.y H:i:s'): case('d.m.Y'): case('d.m.y'): if ( !preg_match('#([0-9]{2,2})\.([0-9]{2,2})\.([0-9]{2,4})?#',$date,$res) ){ return false; } return mktime(0,0,0,$res[2],$res[1],$res[3]); case('Y.m.d H:i:s'): if ( !preg_match('#([0-9]{2,4})\.([0-9]{2,2})\.([0-9]{2,2})\s?([0-9]{2,2})?:?([0-9]{2,2})?:([0-9]{2,2})?#',$date,$res) ){ return false; } //m.d.Y // echo mktime($res[4],$res[5],$res[6],$res[2],$res[3],$res[1]); // echo date($format,mktime($res[4],$res[5],$res[6],$res[2],$res[3],$res[1])); //exit(); break; } } /** * Добавляем новый формат отображения даты. * Теперь можно выводить русские названия месяцев указав "м" в строке формата. * Это аналог "m" для английского языка * * @subpackage ПоРемонту.ру * @var str $format форма вывода времени * @var int $t timestamp */ function sys_date($format,$timestamp){ if ( empty($format) ){ sys_error(ERROR_500); } $date = date($format,$timestamp); $m = date('n',$timestamp); $en = constant('F_MONTH_SP_'.$m); return str_replace( 'м',$en,$date); } /** * Добавляем новый формат отображения даты. * Теперь можно выводить русские названия месяцев указав "м" в строке формата. * Это аналог "m" для английского языка * * @subpackage ПоРемонту.ру * @var str $format форма вывода времени * @var int $t timestamp */ function sys_str_to_date($format='d.m.Y',$data){ if ( empty($format) ){ sys_error(ERROR_500); } if ( empty($data) ){ return false; } //preg_match() $date = explode('.',$format,$timestamp); $m = date('n',$timestamp); $en = constant('F_MONTH_SP_'.$m); return str_replace( 'м',$en,$date); } function sys_include($file){ global $MAIN_MCACHE; die($file); /*if ( MAIN_CACHE_MODE==1 ){ return $MAIN_MCACHE->get( $file ); } $txt = file_get_contents($file); if ( !$txt ){ sys_error('500','file not found'); } return $txt;*/ } // контроль времени function sys_timer($end=0){ $end = !empty($end) ? $end : MAIN_TIME_BEGIN; $time_start = explode(' ', $end); $time_end = explode(' ', microtime()); return $parse_time = number_format(($time_end[1] + $time_end[0] - ($time_start[1] + $time_start[0])), 3); } // удаляем все последствия экранирования в массиве $value function sys_clear_slashes($value){ return (is_array($value) ? array_map('sys_clear_slashes', $value) : stripslashes($value)); } // приводит значение $a к числовому типу, испольузется в купе с array_map для очистки массивов function sys_intval($a){ return intval($a); } function sys_error($type,$msg='',$file='',$line=''){ global $MAIN_ERROR,$MAIN_USER; switch($type){ // для IE6 путь закрыт case(ERROR_IE6): //header('HTTP/1.1 301 Moved Permanently'); if ( MAIN_ADMIN==0 ){ $t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/default/files/ie6/ie6.html' ); echo $t -> execute(); exit(); } break; // ошибка доступа case(ERROR_403): case('403'): header('HTTP/1.1 403 Access Error'); if ( MAIN_DEBUG_MODE ){ $info = debug_backtrace(); $size = sizeof($info); $result = ''; echo $result; echo F_ACCESS_CLOSE; }else{ $t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/files/access_error.html' ); echo $t -> execute(); } exit(); break; // критическая ошибка при обработке ajax запроса case(ERROR_501): $msg = !empty($msg) ? $msg : E_500_MSG; if ( false!==MAIN_FATAL_LOG){ $info = debug_backtrace(); $txt = str_replace('{debug_dump}',var_export($info,true), $txt); sys_log(MAIN_FATAL_LOG, $txt); } echo ''; exit(); break; // критические ошибки case(ERROR_500): case('500'): $msg = !empty($msg) ? $msg : E_500_MSG; if ( MAIN_DEBUG_MODE ){ var_dump($_REQUEST); $info = debug_backtrace(); $size = sizeof($info); $result = ''; header('HTTP/1.1 500 Internal Error '.$msg.$result); echo "$msg $result"; }else{ // формируем отчёт о фатальной ошибке if ( false!==MAIN_FATAL_LOG){ $txt = str_replace('{time}',date('h:i',MAIN_TIME), TMPL_FATAL_ERROR_LOG); $txt = str_replace('{msg}',$msg, $txt); //$txt = str_replace('{request_dump}',var_export($_REQUEST,true), $txt); $txt = str_replace('{cookie_dump}',var_export($_SERVER,true), $txt); } $t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/files/critical_error.html' ); echo $t -> execute(); } exit(); break; // просто ошибки программирования case(ERROR_MESSAGE): if ( MAIN_DEBUG_MODE ){ echo "

$msg ($file: $line )

"; } if ( false!==MAIN_ERROR_LOG){ $txt = str_replace('{time}',date('h:i',MAIN_TIME), TMPL_ERROR_LOG); $txt = str_replace('{msg}',"$msg ($file: $line )", $txt); $txt = str_replace('{request}',$_SERVER['REQUEST_URI'], $txt); sys_log(MAIN_ERROR_LOG, $txt); } //$MAIN_ERROR['error'] = array('msg' =>$msg,'file'=>$file,'line'=>$line ); break; // закрытый сайт case(CLOSE_SITE_MSG): if ( MAIN_DEBUG_MODE){ return FALSE; }else{ $t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/files/maintenance.html' ); echo $t -> execute(); exit(); } break; // несуществующа страничка case(ERROR_404): case('404'): HL::triggerEvents('on_error', array('type'=>ERROR_404,'msg'=>$msg,'file'=>$file,'line'=> $line) ); if ( MAIN_DEBUG_MODE ){ $info = debug_backtrace(); $size = sizeof($info); $result = ''; echo (!empty($msg) ? $msg :F_NOT_FOUND); echo $result; }else{ //include_once( MAIN_SOURCE_PATH.'/modules/poremontu/events/poremontu_event_redirect.php'); //poremontu_event_redirect(); //header('HTTP/1.1 404 Not Found'); //sys_log(MAIN_NOTFOUND_LOG, (F_NOT_FOUND.':'.$_SERVER['REQUEST_URI'].':'.$file.':'.$line."\n\r") ) ; //$t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/default/msg/404.html' ); //echo $t -> execute(); } exit(); break; // лог сообщений дебага case(TIME_MSG): $MAIN_ERROR[TIME_MSG][]= array($msg['time'],$msg['text'],$file."[ $line ]" ); break; // лог sql запросов case(SQL_MSG): $MAIN_ERROR[SQL_MSG][]= array($msg['time'],$msg['sql'],$file."[ $line ]" ); break; // знает что default: $RC_ERROR[$error_type][]= '
  • '.$msg.'
  • '; break; } } // логируем function sys_log( $file,$msg){ if (!$handle = fopen($file, 'a')) { return FALSE; // die('Файл "'.$file.'" не доступен для записи' ); } if ( fwrite($handle, $msg) === FALSE) { return FALSE; } fclose($handle); } // логирование данных function sys_data_log(){ if ( false===MAIN_DATA_LOG){ return false; } $txt = str_replace('{time}',date('h:i',MAIN_TIME), TMPL_DATA_LOG); $txt = str_replace('{request_dump}',var_export($_REQUEST,true), $txt); $txt = str_replace('{cookie_dump}',var_export($_COOKIE,true), $txt); $txt = str_replace('{files_dump}',var_export($_FILES,true), $txt); sys_log(MAIN_DATA_LOG,$txt); return true; } // логирование данных function sys_access_log(){ if ( false===MAIN_ACCESS_LOG){ return false; } $txt = str_replace('{time}',date('h:i',MAIN_TIME), TMPL_ACCESS_LOG); $txt = str_replace('{ip}',MAIN_USER_IP, $txt); $txt = str_replace('{client}',$_SERVER['HTTP_USER_AGENT'], $txt); $txt = str_replace('{request}',$_SERVER['REQUEST_URI'], $txt); sys_log(MAIN_ACCESS_LOG,$txt); return true; } function sys_control_error($errno, $errstr, $errfile, $errline){ $exseptions = array(2048,8); // не подключился файл if ( $errno ==2 ){ // sys_error(500,$errstr); }elseif( in_array($errno,$exseptions) ){ return false; }else{ sys_error(ERROR_MESSAGE,$errno.':'.$errstr, $errfile,$errline); } } // получаем ip function sys_get_ip(){ if ( getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown') ){ $ip = getenv('HTTP_X_FORWARDED_FOR'); $ip = preg_replace('/,.*/', '', $ip); }elseif (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')){ $ip = getenv('HTTP_CLIENT_IP'); }elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')){ $ip = getenv('REMOTE_ADDR'); }elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')){ $ip = $_SERVER['REMOTE_ADDR']; }else{ sys_error(ERROR_403); } return $ip; } /** * Правиряем правильность e-Mail адреса * Authors : Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net | * : Marcus Bointon (coolbru) coolbru@users.sourceforge.net * */ function sys_is_mail($email) { if ( function_exists('filter_var') ) { if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { return false; } else { return true; } } return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email); /*if ( !preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9-]+)+$/i", $email) ) { return false; } return true;*/ } function check_img_name($text) { die('устаревшая функция check_img_name в functions.php'); if ( empty($text) ){ return false; } if ( !preg_match('#[0-9]*\.(jpg|jpeg|gif|png)#i',$text)){ return false; } return true; } // проверяем имя модуля function sys_check_module_name($text) { if ( empty($text) ){ return false; } $text= preg_replace('#[^a-z0-9_]#i','',$text); return $text; } // проверяем название функции генерирующей страницу function sys_check_func_name($text) { die('устаревшая функция sys_check_func_name в functions.php'); return system_check_page_name($text); } //функция записи РІ файл function system_write_file($file,$data){ die('устаревшая функция system_write_file в functions.php'); } /** * Генерируем произвольную строку * * @project cms * @name sys_str_rand * @param int count Длинна генерируемой строки * @return strung Произвольная строка */ // генерируем случайную строку function sys_str_rand($count) { $consonents = "123456789bcdfghjklmnpqrstvwxyz"; $makepass=''; for ($i=0; $i<$count; $i++) { $makepass .= substr($consonents, mt_rand(0, strlen($consonents)-1), 1); } return $makepass; } /** * Генерируем случайное имя файла с расширением $ext для директории $d * * @param: string dir Директрия * @param: string ext Расширение файла * @param: string rand Случайная последовательность * @return: strung Имя файла с расширением ext уникальное для директории d */ function sys_filename_rand($dir, $ext,$rand='1'){ $name = $rand.'_'.MAIN_TIME.'.'.$ext; return (file_exists($dir.'/'.$name) ) ? sys_filename_rand($dir, $ext, sys_str_rand(4) ) : $name; } // отключаем генерацию блоков на странице function sys_block_disable(){ define('SYS_BLOCKS_GENERATE_OK',true); } function sys_blocks_disable(){ define('SYS_BLOCKS_GENERATE_OK',true); } function sys_blocks_enable(){ global $MAIN_PAGE; $MAIN_PAGE -> blocks(); } /** * Убираем html * * @var str $v текст для обработки * @return str текст с испорченным html */ function sys_in_html($v){ return htmlspecialchars($v,ENT_QUOTES); } /** * Экранируем спец-символы для использованием строки в sql-запросе * * @var str $v текст для обработки * @return str текст с экранированными спец-символами */ function sys_in_sql($v){ return mysql_real_escape_string($v); } // проверяем название page-страницы function sys_is_page($p_name){ if ( preg_match('#[^a-z0-9-_]#iU',$p_name) ){ return FALSE; } return TRUE; } // определяем IE6 или нет перед нами function sys_is_ie6(){ if ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.0') ){ return TRUE; }else{ return FALSE; } } // генерируем url function sys_url(){ $ListArg = func_get_args(); $url = $ListArg[0]; unset( $ListArg[0] ); if ( empty($url) ){ sys_error(ERROR_500,"URL template not found"); } return vsprintf($url,$ListArg); } /** * мультиязыная версия * */ function sys_ml_url($key,$array,$lang='ru'){ /*$ListArg = func_get_args(); $url = $ListArg[0]; unset( $ListArg[0] );*/ if ( empty($key) ){ sys_error(ERROR_500,"URL template not found"); } if ( $lang!='ru' ){ $url = MAIN_URL.'/'.$lang; }else{ $url=MAIN_URL; } return $url.vsprintf($key,$array); } // 301 рекдирект на $url function sys_redirect($url){ Header( "HTTP/1.1 301 Moved Permanently" ); Header( "Location: $url" ); exit(); } // записываем файл function sys_write_file($file,$data){ //chmod($file,'0777'); if( !file_put_contents($file,$data) ){ sys_error('500', sprintf(F_WRITE_ERROR,$file) ); return FALSE; } ///chmod($file,'0777'); return TRUE; } // переводим массив в объект ( нужно для шаблонизатора) function arr_to_obj($array){ $s = new stdClass; foreach( $array AS $k=>$v ){ $s -> $k = $v; } return $s; } // прячем внешние ссылки за редирек, кроме ссылок-исключений function sys_url_to_redirect($text){ return preg_replace_callback ('#href\s*=\s*(\'|")http://(.*)(\'|")#iUs','inc_url_to_redirect_callback',$text); } // очищаем текст от ссылок через редирект function sys_redirect_to_url($text){ return preg_replace('#'.MAIN_URL.'/redirect\.php\?url=#i','http://',$text); } // вспомогательная функция обратного вызова function inc_url_to_redirect_callback($url){ global $MAIN_PAGE; if ( preg_match('#'.str_replace(',','|',$MAIN_PAGE -> config("sys_url_list") ).'#iUs',$url[2]) ){ return 'href="http://'.$url[2].'"'; }else{ return 'href="'.MAIN_URL.'/redirect.php?url='.$url[2].'"'; } } /** * Обрезать текст до заданной длины * * @var: str $text обрезаемый текст * @var: int $size Ограничения на максимальную длинну результируещей строки * @var: int $min_size Ограничения на минимальную длинну результируещей строки * @return: str */ function sys_short_text($text,$size=600,$min_size=30){ $text = preg_replace('# #Us','',$text); $text = trim(strip_tags($text)); if ( preg_match('#^.{'.$size.','.($size+250).'} #iUs',$text,$txt) ){ $text = $txt[0]; } return $text; } // формируем из $v текст эффективный для морфологического поиска function sys_clear_text($v){ if ( is_numeric($v) ){ return $v; } include_once(MAIN_SOURCE_PATH.'/inc/class.morf.php'); $stemmer = new Lingua_Stem_Ru(); $v = preg_replace("/[^\w\x7F-\xFF\s]/"," ",strip_tags($v)); $v = explode(' ',$v); foreach ($v as $word) { if ( mb_strlen($word,'UTF-8')<=2 ){ continue; } $min_word=$stemmer->stem_word($word); if ( mb_strlen($min_word,'UTF-8')<3 ){ $min_word.='00'; }elseif ( mb_strlen($min_word,'UTF-8')<4 ){ $min_word.='0'; } $word_array[]=$min_word; } return trim(implode(' ',$word_array)); } // проверяет, может ли быть $v алиасом function sys_is_alias($v){ if ( empty($v) ){ return false; } if ( preg_match("#[^0-9.a-z_-]#i", $v) ) { return false; } return true; } function sys_check_safe_dir($v){ if ( preg_match('#[^a-z-0-9/_]#',$v) ){ return false; } return true; } // переводим utf строку в транслит function sys_translit($string){ $string = mb_strtolower($string, "utf-8"); $string = preg_replace('#[^0-9a-zйцукенгшщзхъэждлорпавыфячсмитьбюё]#iu',' ',$string); $string = trim($string); $string = preg_replace('#\s{1,}#isu','-',$string); $tr = array( "а"=>"a","б"=>"b", "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"zh", "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l", "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r", "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h", "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"", "ы"=>"yi","ь"=>"","ю"=>"e","э"=>"e","ю"=>"yu","я"=>"ya" ); return strtr($string,$tr); } // проверяет, может ли быть $v названием файла function sys_is_file($v){ if ( preg_match('#[^a-z0-9_.]#i',$v) ){ return false; } return true; } // собираем по всему сайту сообщения function build_rss(){ /*global $MAIN_DB,$MAIN_PAGE; $modules = array( 'news_sql_rss' => MAIN_SOURCE_PATH.'/modules/news/inc/class.news.php', ); $sql = array(); foreach( $modules as $f => $url ){ include_once( $url ); if ( !function_exists($f) ){ sys_error('500'); } $sql[]= $f() ; } $sql = implode(" UNION ALL ",$sql); $sql .=' ORDER BY time_add DESC LIMIT 0,20'; $res = $MAIN_DB -> query($sql); $search = array(); while( $row = $MAIN_DB -> fetch_array($res) ){ $row['time_add'] = date("r", $row['time_add']); $row['url'] = MAIN_URL.$row['url']; $search[]=arr_to_obj($row); } $t = new PHPTAL( false ); $t -> setOutputMode(PHPTAL::XML); $t -> setSource(TMPL_RSS_MAIN); $t -> rows = $search; $t -> site_name = $MAIN_PAGE -> config('sys_site_name'); $t -> time_pub = date("r", MAIN_TIME ); $t -> rss_url = RSS_URL; $t -> site_url = MAIN_URL; $t -> site_desc = $MAIN_PAGE -> config('sys_site_desc'); sys_write_file( RSS_PATH, $t -> execute() ); return true;*/ } function build_map(){ $modules = array( 'news', ); foreach( $modules as $m ){ $file = MAIN_PATH.'/tmp/map/'.$m.'.xml'; if ( !file_exists($file) ){ continue; } $search[]=array('url'=>MAIN_URL.'/tmp/map/'.$m.'.xml', 'date'=>date('Y-m-d',filectime($file) ) ); } $t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/default/xml/main_map.xml' ); $t -> setOutputMode(PHPTAL::XML); $t -> rows = $search; sys_write_file( SITEMAP_XML_PATH, $t -> execute() ); return true; } function ping($url,$title){ /*$pings = array('http://ping.blogs.yandex.ru/RPC2','http://blogsearch.google.com/ping/RPC2'); if ( empty($url) || empty($title) ){ sys_error( ERROR_500 ); } $t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/default/xml/ping.xml' ); $t -> setOutputMode(PHPTAL::XML); $t -> url = $url; $t -> title = $title; $data = $t -> execute(); $len = strlen($data); foreach( $pings as $p ){ $parse = parse_url($p); $host = $parse['host']; $port = isset($parse['port'])?$parse['port']:80; $uri = isset($parse['path'])?$parse['path']:'/'; $fp=fsockopen($host,$port,$errno,$errstr); if(!$fp){ continue; } $out = "POST $uri HTTP/1.0\r\n"; $out .= "User-Agent: BlogPing/1.0\r\n"; $out .= "Host: $host\r\n"; $out .= "Content-Type: text/xml\r\n"; $out .= "Content-length: $len\r\n\r\n"; $out .= $data; fwrite($fp, $out); // если отладка выключена, то анализ делать не нужно if ( MAIN_DEBUG_MODE!==true ){ continue; } $response = ''; while(!feof($fp) ){ $response.=fgets($fp, 128); } fclose($fp); if( !strstr($response,"Thanks for the ping") ){ continue; } }*/ return true; } // пересчитываем байты в подходящие единицы function byte_to_str($v){ if( $v < 1000 ){ return sprintf(F_BYTE,$v); }elseif( $v>=1000 && $v< 1000000 ){ return sprintf(F_KB_BYTE,(round($v/1000)) ); }elseif( $v>=1000000 ){ return sprintf(F_MB_BYTE,(round($v/1000000)) ); } return false; } /** * конверт переносов строки в
    * * */ function sys_convert_br($text) { $find[] = "/(\015\012)|(\015)|(\012)/"; $replace[] = "
    "; $text = preg_replace($find, $replace, $text); return $text; } function sys_check_lang($text) { if ( preg_match('#^[a-z]{2,5}$#i',$text) ){ return true; } return false; } /** * Добавляем тег в систему * */ function sys_tag_add($tag,$key,$module_id=0) { global $MAIN_DB; $tag = trim($tag); if ( empty($tag) ){ return false; } $key= intval($key); if ( empty($key) ){ return false; } $module_id = intval($module_id); if ( empty($module_id) ){ include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.modules.php'); $m = modules::load_path(MAIN_MODULE); $module_id = $m -> id(); } $sql = " INSERT INTO ".$MAIN_DB -> prefix("system_tags_link")." SET tag='".sys_in_sql($tag)."', module_id='".$module_id."', key='".$key."'"; $MAIN_DB -> query($sql); return true; } /** * Удаляем тег * */ function sys_tag_del($module_id=0,$key=0,$tag='') { global $MAIN_DB; $module_id = intval($module_id); if ( empty($module_id) ){ include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.modules.php'); $m = modules::load_path(MAIN_MODULE); $module_id = $m -> id(); } $where_key = !empty($key) ? " AND id='".sys_in_sql($key)."'" : ""; $where_tag = !empty($tag) ? " AND tag='".sys_in_sql($tag)."'" : ""; $sql = "DELETE FROM ".$MAIN_DB -> prefix("system_tags_link")." WHERE module_id='$module_id' ".$where_key.$where_tag; $MAIN_DB -> query($sql); return true; } /** * загружаем выбранный плагин * */ function sys_plugin($name) { include_once(MAIN_SOURCE_PATH.'/modules/admin/inc/class.plugins.php'); return plugins::load_name($name); } /**************** * Шаблоны для парсера ***************/ // пинг файл для яндекса define("TMPL_PING_XML", << Название сайта http://www.goupstate.com/ Описание ru-ru Tue, 10 Jun 2003 04:00:00 GMT http://blogs.law.harvard.edu/tech/rss 10 Название сайта http://site.ru/source/tmpl/img/logo.png Ссылка на сайт 295 102 Последние материалы проекта ПоРемонту.ru Название материала Ссылка на материал Ссылка на материал Дата публикации Модуль TMPL_RSS_MAIN ); // шаблон для генерации sitemap для модулей define("TMPL_MAP_XML", << EOF );*/ define("TMPL_FATAL_ERROR_LOG", <<