<?php

/*
*	Copyright VeryIDE,2007-2010
*	http://www.veryide.com/
*
*	系统函数包
*
*	$Id: system.php,v2 10:12 2009-4-14 Leilei $
*/

/*
	根据当前文件得到缩略图地址
	$file	源文件
	$size	尺寸
*/
function fix_thumb( $file , $size = null ){
	
	$size = is_array($size) ? $size[0] ."-". $size[1] : "thumb";
	
	return substr_replace($file,"-$size.",strrpos($file,"."),1);
	
}

/*
	处理多域名下附件路径问题
	$text	内容块
*/
function fix_file($text){
	
	//VeryIDE 绝对地址
	$_HTTP_ = defined("VI_HOST") && VI_HOST ? VI_HOST :"";
	
	return str_replace(array("/veryide/","../../","/../"),array($_HTTP_,$_HTTP_,"/"),$text);	
}

/*
	过滤XML标准规定的无效字节
	$xml	XML内容块
*/
function fix_xml($xml){
	return preg_replace("/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/",'',$xml);
}

/*
	修正JSON不支持中文的问题	
	
	$data	JSON字符串或数组
	return	返回修正后的数组
*/
function fix_json( $data ){
	global $Project;
	
	//如果参数是JSON字符串，就转换为数组
	if(  is_string( $data ) ){
		
		$temp = array();
		
		//兼容GBK中文
		if( $Project["charset"] == "gbk" ){
			$array = json_decode(iconv('GBK', 'UTF-8', $data),true);
			
			if( is_array($array) ){
				foreach ($array as $key => $val){
					$temp[$key] = iconv('UTF-8', 'GBK', $val);
				}
			}
		}else{
			$temp = json_decode($data,true);	
		}
		
		
	}else{
		//否则将数组转换为JSON字符
		
		$temp = '';		
				
		//兼容GBK中文
		if( $Project["charset"] == "gbk" ){				
			foreach ($data as $key => $val){
				$data[$key] = iconv('GBK','UTF-8', $val);
			}
		}
		
		$temp = json_encode($data);
		
	}
	
	return $temp;
	
}

/*
	格式化GET中的数组
	$name	参数名称
	$array	数组值
	$ignore	要忽略的值
*/
function format_get($name,$array,$ignore=array()){
	if( !is_array($array) ) return;
	
	$arg = '';
	foreach( $array as $key => $val ){
		if (!in_array($key, $ignore)) {
			$arg .= $name."[$key]=".urlencode($val)."&";
		}
	}
	
	return  substr($arg,0,strlen($arg)-1);
}


/*格式化数据表名称*/
function format_table($table){
	$table = str_replace("{TableManPre}",VI_DBMANPRE,$table);
	$table = str_replace("{TableModPre}",VI_DBMODPRE,$table);
	return $table;	
}

/*编码JSON中的中文字符*/
function format_json($code){
	global $Project;
	
	//编码方式
	$ucs = defined("VI_UCS") && VI_UCS ? VI_UCS :"UCS-2";
	
	return preg_replace("#\\\u([0-9a-f]{4}+)#ie", "iconv('".$ucs."', '".$Project["charset"]."//IGNORE', pack('H4', '\\1'))", $code);	
	//return preg_replace("#\\\u([0-9a-f]{4}+)#ie", "iconv('UCS-2', '".$Project["charset"]."', pack('H4', '\\1'))", $code);
}

/*格式化字符集名称*/
function format_charset($charset,$reset=false){
	if( $reset ){
		return str_replace('utf8', 'utf-8', $charset);	
	}else{
		return str_replace('-', '', $charset);	
	}
}

/*字符截取,自动区分编码*/
function format_substr($str,$slen,$ext=""){
	global $Project;
	if($Project["charset"]=="utf-8"){
		return utf_substr($str,$slen);
	}else{
		return gbk_substr($str,$slen);
	}
}

/*
	打开或关闭 MySQL
	$close	为空或 false 为打开数据库，true 关闭数据库
*/
function reader_mysql($close=false){
	global $Project;
	global $db,$mysql;
	
	if(!$close){
		require_once(dirname(__FILE__)."/../class/db.mysql.php");
	
		//mysql open
		$db = new mysql_db(VI_DBHOST.":".VI_DBPORT, VI_DBUSER, VI_DBPASS, VI_DBNAME);
		$db -> setCharset( (VI_DBCHARSET?VI_DBCHARSET:$Project["charset"]) );
		$db -> connection();
		$mysql = $db ->_db_connect_id;
		
		//$Project["queries"]++;
		
		return $db ->_errno;
	}else{
		$db -> close();
	}
}

//系统设置
function reader_config(){
	global $Project;
	global $Product;
	global $Licence;
	global $Setting;
	
	echo '
	Mo.store.site		="'.$Setting["setting"]["site"].'";
	Mo.store.web		="'.$Setting["setting"]["url"].'";
	Mo.store.domain		="'.$Global["domain"].'";
	Mo.store.root		="'.VI_BASE.'";
	Mo.store.product		="'.$Product["appname"].'";
	Mo.store.version		="'.$Project["version"].'";
	Mo.store.build		="'.$Project["build"].'";
	Mo.store.licence		="'.$Licence["type"].'";
	';
}

/*
	注册用户 Session
	$row		单条用户数据记录
*/
function reader_session($row){
	//注册会话
	session_register("Manager");
		
	//用户信息
	$_SESSION["Manager"]=array();
	
	foreach ($row as $key => $val) {
		$_SESSION["Manager"][$key]=$val;
	}			
	
}

/*
	页面重定向
	$url		目标地址
	$msg		页面消息
*/
function reader_redirect($url,$msg){
	$msg=urlencode($msg);
	if($msg){
		if (strrpos($url,"=")>0 || strrpos($url,"%3d")>0){
			$url.="&VMSG=".$msg;
		}else{
			$url.="?VMSG=".$msg;
		}
	}
	header("Location: ".$url);
}

/*读取页面标题*/
function reader_title($file){
	global $Project;
	
	$php = sreadfile(dirname(__FILE__)."/../include/".$file.".php");
	
	preg_match("/<\!\-\-(.+?)\-\->/i", $php, $mathes);
	
	if(!empty($mathes[1])){
		$name = $mathes[1];
	
		require_once(dirname(__FILE__)."/../function/verify.php");
		
		if(is_gb2312($name) && $Project["charset"]=="utf-8"){
			$name = iconv("gbk" ,$Project["charset"], $name);
		}
		
		if(is_utf8($name) && $Project["charset"]=="gbk"){
			$name = iconv("utf-8" ,$Project["charset"], $name);
		}
	}
	
	return $name;
}

/*
	加载模块
	$appid	目录名称
	$file		文件名称，不包括扩展名
*/
function loader_module($appid,$file){
	global $Project;
	global $Modules;
	global $VICACHE;
	
	if(is_array($file)){
		foreach ($file as $key) {
			
			$file = VI_ROOT."/".$Project["module"]."/".$appid."/".$key.".php";
			
			if( file_exists($file) ){
				require($file);		
			}else{
				return false;
			}
		}
	}else{
		$file = VI_ROOT."/".$Project["module"]."/".$appid."/".$file.".php";
		
		if( file_exists($file) ){
			require($file);		
		}else{
			return false;
		}
	}
	
}

/*
	加载缓存
	$appid	目录名称
	$file		文件名称，不包括扩展名
	$url		不存在缓存时跳转的URL
*/
function loader_cache($appid,$file,$url=""){
	global $Project;
	global $VICACHE;
	
	if( $appid ){
		$cache = VI_ROOT."/".$Project["cache"]."/".$appid."/".$file.".php";
	}else{
		$cache = VI_ROOT."/".$Project["cache"]."/".$file.".php";
	}
	
	if( file_exists($cache) ){
		require($cache);		
		return true;
		
	}elseif( $url ){
		
		if (strrpos($url,"=")>0 || strrpos($url,"%3d")>0){
			$url.="&jump=".GetCurUrl();
		}else{
			$url.="?jump=".GetCurUrl();
		}
		
		header("Location:".VI_BASE."veryide.error.php?action=cache&cache=".($id ? $file."/".$id : $file)."&url=".urlencode($url));
	}else{
		return false;
	}
}

/*
	加载样式
	$src			路径
	$charset	字符集
	$version		版本号
*/
function loader_style($src,$charset,$version){
	$style = '';
	if(is_array($src)){
		foreach ($src as $key => $value) {
			$style.= '<link type="text/css" rel="stylesheet" charset="'.$charset.'" href="'.$value.'?ver='.$version.'" />'.chr(13);
		}
	}else{
		return '<link type="text/css" rel="stylesheet" charset="'.$charset.'" href="'.$src.'?ver='.$version.'" />'.chr(13);
	}
	
	return $style;
}

/*
	加载脚本
	$src			路径
	$charset	字符集
	$version		版本号
*/
function loader_script($src,$charset,$version){
	$script = '';
	if(is_array($src)){
		foreach ($src as $key => $value) {
			$script.= '<script type="text/javascript" charset="'.$charset.'" src="'.$value.'?ver='.$version.'"></script>'.chr(13);
		}
	}else{
		return '<script type="text/javascript" charset="'.$charset.'" src="'.$src.'?ver='.$version.'"></script>'.chr(13);
	}
	
	return $script;
}


/*
	加载图片
	$src			路径
	$title			标题
	$class			样式
	$click			点击事件
*/
function loader_image( $src, $title="", $class="", $click=""){
	global $Project;
	return '<img src="'.VI_BASE."/image/".$src.'" title="'.$title.'" alt="'.$title.'" class="'.$class.'" '.($click?'onclick="'.$click.'" style="cursor:pointer;"':'').' />';
}

/*加载设置信息*/
function loader_setting($file){
	global $Project;
	global $Modules;
	global $VICACHE;
	global $Product;
	
	//VeryIDE 绝对目录
	//$root = realpath(dirname(__FILE__)."/../")."\\";
	
	//从 include 子目录加载
	require("include/".$file.".php");
}

//建立错误日志
function show_log(){
	global $Project;

	$fp=@fopen($Project["cache"]."sys.log.txt","a+");
	$time=date("Y-m-d H:i:s");
	$msg="{VisitedTime:$time}\t{VisiterIP:$_SERVER[REMOTE_ADDR]}\t{Errormsg:".mysql_error()."}\t{File:->$_SERVER[PHP_SELF]}\t{User:$_SESSION[user]}\r\n";
	@fputs($fp,$msg);
	@fclose($fp);
}

/*显示公告板*/
function show_board($image,$string){
	return '
	<div id="board">
		<img src="image/icon/help_48.png" class="logo" />
		<?php echo $Project["support"];?>
		<p>VeryIDE FAQ<br>
		本FAQ手册集合了在使用过程中一些常见问题解答和操作技巧，本页会持续更新<br>
		如有疑问，请联系我们（QQ交流群：<a href="http://qun.qq.com/air/#84110806" target="_blank">84110806</a>）服务邮件地址：<img src="image/icon/letter.png" align="absmiddle" /> <a href="mailto:<?php echo $Project["email"];?>"><?php echo $Project["email"];?></a></p>
		<span class="clear"></span>
	</div>';
}

function show_error($errno, $errstr, $errfile, $errline){

	//为了安全起见，不暴露出真实物理路径，下面两行过滤实际路径
	$errfile=str_replace(getcwd(),"",$errfile);
	$errstr=str_replace(getcwd(),"",$errstr);
	
	switch ($errno) {
		case E_USER_ERROR:
	
			 echo "<div id='error'><b>USER ERROR：</b> <br /><br />\n <em>$errstr</em> \n<br /><br />";
				echo "  Fatal error on line $errline in file $errfile";
				echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
				echo "Aborting...<br />\n</div>";
				exit(1);
			break;
	
		case E_USER_WARNING:
				echo "<div id='error'><b>USER WARNING：</b> <br /><br /> <em>$errstr</em> <br />\n</div>";
				exit(1);
			break;
	
		case E_USER_NOTICE:
				echo "<div id='error'><b>USER NOTICE</b> <br /><br /> <em>$errstr</em> <br />\n</div>";
				exit(1);
			break;
	
		default:
				//echo "Unknown error type: [$errno] $errstr<br />\n";
			break;
	}
	
	/* Don't execute PHP internal error handler */
	return true;
}

/*
	登录状态检查
	$jump	是否登录后转到本页，true 或 false
*/
function checker_login($jump=true){
	global $Project;
	
	if(!$_SESSION["Manager"]["account"] && strpos(strtolower($_SERVER['PHP_SELF']),"admin.login.php")==0){
		header("Location:".VI_BASE."module/system/admin.login.php".($jump?'?jump='.urlencode(GetCurUrl()):''));
	}
}



/*
	页面权限
*/
function checker_page(){
	global $Project;
	global $Group;
	
	//当前模块	
	$appid = str_replace( VI_BASE.'module/', '', dirname($_SERVER["REQUEST_URI"]) );
	
	if( $appid == "system" && array_key_exists(GetCurFile(),$Project["pages"]) && !array_key_exists(GetCurFile(),$Group) && !array_key_exists("*",$Group) ){
		header("Location:".VI_BASE."module/system/serve.error.php?action=page&page=".GetCurFile());
		exit();
	}

}

/*
	功能权限
	$func		权限名称
	$debug	显示调试信息
*/
function checker_func($func,$debug=false){
	global $Group;
	
	if( !array_key_exists($func,$Group) && !array_key_exists("*",$Group) ){		
		
		if( $debug ){
			return "<div id='state' class='failure'>没有 <strong>".$func."</strong> 权限！您可能无法继续本页某些操作，请联系系统管理员。</div>";
		}else{			
			header("Location:".VI_BASE."module/system/serve.error.php?action=func&func=".$func);
			exit();			
		}
	}
}

/*
	检查类是否存在
	$class	类名称
*/
function checker_class($class){	
	if( !class_exists($class) ){
		header("Location:".VI_BASE."module/system/serve.error.php?action=class&class=".$class);
		exit();
	}
}

/*
	检查变量是否为空
*/
function checker_empty(){
	$numargs = func_num_args();
	$arg_list = func_get_args();
	for ($i = 0; $i < $numargs; $i++) {
		if( empty($arg_list[$i]) ){
			header("Location:".VI_BASE."module/system/serve.error.php?action=empty&empty=".$i);
			exit();
		}
	}
}

/*
	写入事件到系统日志
	$mysql	数据连接
	$event	事件标识
	$start	发生时间
	$last	最后更新时间
	$desc	描述内容
*/
function event_insert( $mysql, $event, $start, $last, $desc = "" ){
	global $Project;
	
	$sql="insert into ".VI_DBMANPRE."event(account,aid,event,dateline,modify,ip,description) values('".$_SESSION["Manager"]["account"]."',".$_SESSION["Manager"]["id"].",'".$event."','".$start."','".$last."','".GetIP()."','".$desc."')";
	
	mysql_query($sql,$mysql);
	
	$Project["queries"]++;
}

/*
	删除过期系统日志
	$uid	用户ID
	$event	事件标识
*/
function event_delete( $uid, $event ){
	global $Global;
	global $db;

	if( !$uid ) return;

	//删除日志
	$sql = "select * from ".VI_DBMANPRE."event where event='$event' and aid=".$uid;
	$rows = $db -> query($sql);
	
	if($rows > $Global["logsize"]-1){
	
		//删除日志_不支持子查询
		$sql = "delete from ".VI_DBMANPRE."event where event='$event' and dateline<".(time()-604800)." and aid=".$uid;
	
		$db -> execute($sql);
	}

}

?>