<?php
/**
* @author:  Bunzia Alexander <nifus@mail.ru> <http://www.weblancer.net/users/nifus/>
* @copyright: Copyright (c) 2010, Bunzia Alexander
* @version: 1.1
* @license: http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @package HiLo CMS
*/

  /**
  * Запрет кэширования
  *
  */
  function sys_header_no_cache(){
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
    header("Cache-Control: no-cache, must-revalidate"); 
    header("Pragma: no-cache"); 
    header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
  }

  /**
  * Добавляем новый формат отображения даты. 
  * Теперь можно выводить русские названия месяцев указав "м" в строке формата. 
  * Это аналог "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);
  }
  
	


	/**
	* Таймер, для измерения скорости исполнения кода
	*
	*/
	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):
	    sys_header_no_cache();
		  if ( $MAIN_USER -> is_admin() ){
		    //$page = new sys_pages('error/404.html');
		    //$page -> execute();
			  $t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/files/tmpl_ie6.html' );
			  echo $t -> execute();
			  exit();
		  }
		  break;	
		
		//	ошибка доступа
	case(ERROR_403):
	  sys_header_no_cache();
		header('HTTP/1.1 403 Access Error');
		if (  MAIN_DEBUG_MODE  ){
		  $info = debug_backtrace();
			$size = sizeof($info);
			$result = '<ul>';
			for($i=($size-1);$i>=0;$i--){
				$result.='<li>'.$info[$i]['file'].'('.$info[$i]['line'].')</li>';
			}
			$result .= '</ul>';
			echo $result;
			echo F_ACCESS_CLOSE;
		}else{
		  //$page = new sys_pages('error/403.html');
		  //$page -> execute();
			$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){
				$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($_COOKIE,true), $txt);
				
				//$info = debug_backtrace();
				//$txt =  str_replace('{debug_dump}',var_export($info,true), $txt);
				sys_log(MAIN_FATAL_LOG, $txt);
		}
		echo  $msg;
		exit();
		break;
		
		//	критические ошибки
	case(ERROR_500):
		
		$msg = !empty($msg) ? $msg : E_500_MSG;
		if ( MAIN_DEBUG_MODE ){
			var_dump($_REQUEST);
			$info = debug_backtrace();
			$size = sizeof($info);
			$result = '<ul>';
			for($i=($size-1);$i>=0;$i--){
				$result.='<li>'.$info[$i]['file'].'('.$info[$i]['line'].')</li>';
			}
			$result .= '</ul>';
			header('HTTP/1.1 500 Internal Error');
			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($_COOKIE,true), $txt);
				
				$info = debug_backtrace();
				$txt =  str_replace('{debug_dump}',var_export($info,true), $txt);
				sys_log(MAIN_FATAL_LOG, $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 "<p>$msg ($file: $line )</p>";
		}
		
		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'):
		
	    if (  MAIN_DEBUG_MODE  ){
	    	$info = debug_backtrace();
			$size = sizeof($info);
			$result = '<ul>';
			for($i=($size-1);$i>=0;$i--){
				$result.='<li>'.$info[$i]['file'].'('.$info[$i]['line'].')</li>';
			}
			$result .= '</ul>';
			echo (!empty($msg) ? $msg :F_NOT_FOUND);
			echo $result;
		}else{
			header('HTTP/1.1 404 Not Found');
			sys_log(F_NOT_FOUND.':'.$_SERVER['REQUEST_URI'],$file,$line);
			$t = new PHPTAL( MAIN_SOURCE_PATH.'/tmpl/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][]= '<li>'.$msg.'</li>';
			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;
	}
	
	/**
	* Перехватываем ошибки php
	*
	*
	*/
	function sys_error($errno, $errstr, $errfile, $errline){
	  
		$exseptions = array(2048,8);
			//	 не подключился файл
		if ( $errno ==2 ){
			sys_error(ERROR_MESSAGE,$errno.':'.$errstr, $errfile,$errline);
		}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=''){	
		$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('SYSTEM_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);
	}
	
		//	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('#&nbsp;#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 ( strlen($word)<=2 ){
				continue;
			}
			$min_word=$stemmer->stem_word($word);
			 if ( strlen($min_word)<3 ){
				$min_word.='00';
			}elseif ( strlen($min_word)<4 ){
				$min_word.='0';
			}
		    $word_array[]=$min_word;
		} 
		return (implode(' ',$word_array));
	}
	
		//	проверяет, может ли быть $v алиасом
	function sys_is_alias($v){
		if  ( empty($v) ){
			 return false;
		}
	
		if ( preg_match("#[^0-9a-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");
      //  добавлен модификатор u для удаления мусора в utf кодировке
    $string = preg_replace('#[^0-9a-zйцукенгшщзхъэждлорпавыфячсмитьбюё]#iu',' ',$string);
    $string = trim($string);
		$string = preg_replace('# {1,}#','-',$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(){
	/*global $MAIN_DB,$MAIN_PAGE;
		$modules = array(
			'news',
			'glossary'
		);
		
		
		foreach( $modules as $m ){
			$row = array();
			$file = MAIN_SOURCE_PATH.'/modules/'.$m.'/cache/map.xml';
			if ( !file_exists($file) ){
				continue;
			} 
			$row['url'] = MAIN_SOURCE_URL.'/modules/'.$m.'/cache/map.xml';
			$row['date'] = date('Y-m-d',filectime($file) );
			$search[]=arr_to_obj($row);
		}
		$t = new PHPTAL( false );
		$t -> setOutputMode(PHPTAL::XML);
		$t -> setSource(TMPL_MAIN_MAP_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.ru/ping/RPC2');
		if ( empty($url) || empty($title) ){
			sys_error( ERROR_500 );
		}
		
		$t = new PHPTAL( false );
		$t -> setOutputMode(PHPTAL::XML);
		$t -> setSource(TMPL_PING_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){		
				sys_error(ERROR_MESSAGE, sprintf(F_CANT_OPEN_CONNECT,$host) );
				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") ){	
				sys_error(ERROR_MESSAGE, sprintf(F_BAD_ANSWER,$response) );
				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;
	}
	

  /**
  * конверт переносов строки в <br>
  *
  *
  */
  function sys_convert_br($text) {
	  $find[]    = "/(\015\012)|(\015)|(\012)/";
	  $replace[] = "<br />";
	  $text      = preg_replace($find, $replace, $text);
	  return $text;
  }
	
	
	
/****************
*	Шаблоны для парсера
***************/

	//	пинг файл для яндекса
define("TMPL_PING_XML",
<<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
    <methodName>weblogUpdates.ping</methodName>
    <params>
        <param>
            <value tal:content="title">Лучший подарок — это книга</value>
        </param>
        <param>
            <value tal:content="url">http://clubs.ya.ru/company/rss/posts.xml</value>
        </param>
    </params>
</methodCall>
EOF
);

/*
	//	общий файл-мап
define("TMPL_MAIN_MAP_XML",
<<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<tal:block tal:condition="rows" tal:repeat="r rows">
	   	<sitemap >
		  <loc tal:content="r/url" />
		  <lastmod  tal:content="r/date" />
	  	 </sitemap>
	</tal:block>	
</sitemapindex>
EOF
);
	//	шаблон для генерации rss-ленты для модулей
define('TMPL_RSS_MAIN',<<<TMPL_RSS_MAIN
<?xml version="1.0"?>
<rss version="2.0">
<channel>
	<title tal:content="site_name">Название сайта</title>
	<link  tal:content="site_url">http://www.goupstate.com/</link>
	<description tal:content="site_desc">Описание</description>
	<language>ru-ru</language>
	<pubDate  tal:content="time_pub">Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
	<docs tal:content="rss_url">http://blogs.law.harvard.edu/tech/rss</docs>
	 
	 
	<ttl>10</ttl>
	<image tal:condition="NULL">
		<title tal:content="site_name">Название сайта</title>
		<url tal:content="site_logo_url">http://site.ru/source/tmpl/img/logo.png</url>
		<link tal:content="site_url">Ссылка на сайт</link>
		<width>295</width>
		<height>102</height>
		<description>Последние материалы проекта ПоРемонту.ru</description>
	</image>
	
	

	<item tal:condition="rows" tal:repeat="r rows">
		<title tal:content="r/title">Название материала</title>
		<link tal:content="r/url">Ссылка на материал</link>
		<description tal:content="r/short_desc"></description>
		<guid tal:content="r/url">Ссылка на материал</guid>
		<pubDate tal:content="r/time_add">Дата публикации</pubDate>
		<category tal:content="r/module">Модуль</category>
	</item>
	
</channel>
</rss>
TMPL_RSS_MAIN
);
	//	шаблон для генерации sitemap для модулей
define("TMPL_MAP_XML",
<<<EOF
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <tal:block tal:condition="rows" tal:repeat="r rows">  
   <url>
      <loc tal:content="r/url"	 />
      <lastmod  tal:content="r/time_last_mod" />
   </url>
   </tal:block>
</urlset>
EOF
);*/


define("TMPL_FATAL_ERROR_LOG",
<<<EOF
{time}: {msg}
-----DEBUG-------------
{debug_dump}
-----------------------

-----REQUEST DUMP------
{request_dump}
-----------------------
-----COOKIE DUMP------
{cookie_dump}
========================================================================================
========================================================================================
========================================================================================
========================================================================================
\n\r
EOF
);

define("TMPL_DATA_LOG",
<<<EOF
{time}: 
-----REQUEST-------------
{request_dump}
-----------------------

-----COOKIE DUMP------
{cookie_dump}
-----------------------
-----FILES DUMP------
{files_dump}
========================================================================================
========================================================================================
========================================================================================
========================================================================================
\n\r
EOF
);

define("TMPL_ACCESS_LOG",
<<<EOF
{time}: {ip}: {client} 
{request}
-------------------------------\n
EOF
);

define("TMPL_ERROR_LOG",
<<<EOF
{time}: {request}: {msg}
-------------------------------\n
EOF
);

?>
