<?php
/*
[UCenter Home] (C) 2007-2008 Comsenz Inc.
$Id: function_cache.php 13229 2009-08-24 04:17:00Z zhengqingpeng $
*/
if(!defined('IN_UCHOME')) {
exit('Access Denied');
}
//¸üÐÂÅäÖÃÎļþ
function config_cache($updatedata=true) {
global $_SGLOBAL;
$_SCONFIG = array();
$query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('config'));
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
if($value['var'] == 'privacy') {
$value['datavalue'] = empty($value['datavalue'])?array():unserialize($value['datavalue']);
}
$_SCONFIG[$value['var']] = $value['datavalue'];
}
cache_write('config', '_SCONFIG', $_SCONFIG);
if($updatedata) {
$setting = data_get('setting');
$_SGLOBAL['setting'] = empty($setting)?array():unserialize($setting);
cache_write('setting', "_SGLOBAL['setting']", $_SGLOBAL['setting']);
$mail = data_get('mail');
$_SGLOBAL['mail'] = empty($mail)?array():unserialize($mail);
cache_write('mail', "_SGLOBAL['mail']", $_SGLOBAL['mail']);
$spam = data_get('spam');
$_SGLOBAL['spam'] = empty($spam)?array():unserialize($spam);
cache_write('spam', "_SGLOBAL['spam']", $_SGLOBAL['spam']);
}
}
//¸üÐÂnetworkÅäÖÃÎļþ
function network_cache() {
global $_SGLOBAL, $_SCONFIG;
$setting = data_get('network');
$_SGLOBAL['network'] = empty($setting)?array():unserialize($setting);
cache_write('network', "_SGLOBAL['network']", $_SGLOBAL['network']);
}
//¸üÐÂÓû§×éCACHE
function usergroup_cache() {
global $_SGLOBAL;
$usergroup = $_SGLOBAL['grouptitle'] = array();
$highest = true;
$lower = '';
$query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('usergroup')." ORDER BY explower DESC");
while ($group = $_SGLOBAL['db']->fetch_array($query)) {
$group['maxattachsize'] = intval($group['maxattachsize']) * 1024 * 1024;//M
if($group['system'] == 0) {
//ÊÇ·ñÊÇ×î¸ßÉÏÏÞ
if($highest) {
$group['exphigher'] = 999999999;
$highest = false;
$lower = $group['explower'];
} else {
$group['exphigher'] = $lower - 1;
$lower = $group['explower'];
}
}
$group['magicaward'] = unserialize($group['magicaward']);
$usergroup = array($group['gid'] => $group);
$_SGLOBAL['grouptitle'][$group['gid']] = array(
'grouptitle' => $group['grouptitle'],
'color' => $group['color'],
'icon' => $group['icon']
);
//Éú³É»º´æÎļþ
cache_write('usergroup_'.$group['gid'], "_SGLOBAL['usergroup']", $usergroup);
}
//Éú³É»º´æÎļþ
cache_write('usergroup', "_SGLOBAL['grouptitle']", $_SGLOBAL['grouptitle']);
}
//¸üÐÂÓû§À¸Ä¿»º´æ
function profilefield_cache() {
global $_SGLOBAL;
$_SGLOBAL['profilefield'] = array();
$query = $_SGLOBAL['db']->query('SELECT fieldid, title, formtype, maxsize, required, invisible, allowsearch, choice FROM '.tname('profilefield')." ORDER BY displayorder");
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
$_SGLOBAL['profilefield'][$value['fieldid']] = $value;
}
cache_write('profilefield', "_SGLOBAL['profilefield']", $_SGLOBAL['profilefield']);
}
//¸üÐÂȺ×éÀ¸Ä¿»º´æ
function profield_cache() {
global $_SGLOBAL;
$_SGLOBAL['profield'] = array();
$query = $_SGLOBAL['db']->query('SELECT fieldid, title, formtype, inputnum, mtagminnum, manualmoderator, manualmember FROM '.tname('profield')." ORDER BY displayorder");
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
$_SGLOBAL['profield'][$value['fieldid']] = $value;
}
cache_write('profield', "_SGLOBAL['profield']", $_SGLOBAL['profield']);
}
//¸üдÊÓïÆÁ±Î
function censor_cache() {
global $_SGLOBAL;
$_SGLOBAL['censor'] = $banned = $banwords = array();
$censorarr = explode("\n", data_get('censor'));
foreach($censorarr as $censor) {
$censor = trim($censor);
if(empty($censor)) continue;
list($find, $replace) = explode('=', $censor);
$findword = $find;
$find = preg_replace("/\\\{(\d+)\\\}/", ".{0,\\1}", preg_quote($find, '/'));
switch($replace) {
case '{BANNED}':
$banwords[] = preg_replace("/\\\{(\d+)\\\}/", "*", preg_quote($findword, '/'));
$banned[] = $find;
break;
default:
$_SGLOBAL['censor']['filter']['find'][] = '/'.$find.'/i';
$_SGLOBAL['censor']['filter']['replace'][] = $replace;
break;
}
}
if($banned) {
$_SGLOBAL['censor']['banned'] = '/('.implode('|', $banned).')/i';
$_SGLOBAL['censor']['banword'] = implode(', ', $banwords);
}
cache_write('censor', "_SGLOBAL['censor']", $_SGLOBAL['censor']);
}
//¸üлý·Ö¹æÔò
function creditrule_cache() {
global $_SGLOBAL;
$_SGLOBAL['creditrule'] = array();
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('creditrule'));
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
$_SGLOBAL['creditrule'][$value['action']] = $value;
}
cache_write('creditrule', "_SGLOBAL['creditrule']", $_SGLOBAL['creditrule']);
}
//¸üÐÂ¹ã¸æ»º´æ
function ad_cache() {
global $_SGLOBAL;
$_SGLOBAL['ad'] = array();
$query = $_SGLOBAL['db']->query('SELECT adid, pagetype FROM '.tname('ad')." WHERE system='1' AND available='1'");
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
$_SGLOBAL['ad'][$value['pagetype']][] = $value['adid'];
}
cache_write('ad', "_SGLOBAL['ad']", $_SGLOBAL['ad']);
}
//¸üÐÂÓû§Ïòµ¼ÈÎÎñ
function task_cache() {
global $_SGLOBAL;
$_SGLOBAL['task'] = array();
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('task')." WHERE available='1' ORDER BY displayorder");
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
if((empty($value['endtime']) || $value['endtime'] >= $_SGLOBAL['timestamp']) && (empty($value['maxnum']) || $value['maxnum']>$value['num'])) {
$_SGLOBAL['task'][$value['taskid']] = $value;
}
}
cache_write('task', "_SGLOBAL['task']", $_SGLOBAL['task']);
}
//¸üеã»÷Æ÷
function click_cache() {
global $_SGLOBAL;
$_SGLOBAL['click'] = array();
$query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('click')." ORDER BY displayorder");
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
$_SGLOBAL['click'][$value['idtype']][$value['clickid']] = $value;
}
cache_write('click', "_SGLOBAL['click']", $_SGLOBAL['click']);
}
//¸üÐÂÄ£¿é
function block_cache() {
global $_SGLOBAL;
$_SGLOBAL['block'] = array();
$query = $_SGLOBAL['db']->query('SELECT bid, cachetime FROM '.tname('block'));
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
$_SGLOBAL['block'][$value['bid']] = $value['cachetime'];
}
cache_write('block', "_SGLOBAL['block']", $_SGLOBAL['block']);
}
//¸üÐÂÄ£°åÎļþ
function tpl_cache() {
include_once(S_ROOT.'./source/function_cp.php');
$dir = S_ROOT.'./data/tpl_cache';
$files = sreaddir($dir);
foreach ($files as $file) {
@unlink($dir.'/'.$file);
}
}
//¸üÐÂÄ£¿é»º´æ
function block_data_cache() {
global $_SGLOBAL, $_SCONFIG;
if($_SCONFIG['cachemode'] == 'database') {
$query = $_SGLOBAL['db']->query("SHOW TABLE STATUS LIKE '".tname('cache')."%'");
while($table = $_SGLOBAL['db']->fetch_array($query)) {
$_SGLOBAL['db']->query("TRUNCATE TABLE `$table[Name]`");
}
} else {
include_once(S_ROOT.'./source/function_cp.php');
deltreedir(S_ROOT.'./data/block_cache');
}
}
//¸üÐÂMYOPĬÈÏÓ¦ÓÃ
function userapp_cache() {
global $_SGLOBAL, $_SCONFIG;
$_SGLOBAL['userapp'] = array();
if($_SCONFIG['my_status']) {
$query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('myapp')." WHERE flag='1' ORDER BY displayorder", 'SILENT');
while ($value = $_SGLOBAL['db']->fetch_array($query)) {
$_SGLOBAL['userapp'][$value['appid']] = $value;
}
}
cache_write('userapp', "_SGLOBAL['userapp']", $_SGLOBAL['userapp']);
}
//¸üÐÂÓ¦ÓÃÃû
function app_cache() {
global $_SGLOBAL;
$relatedtag = unserialize(data_get('relatedtag'));
$default_open = 0;
if(empty($relatedtag)) {
//´ÓUCȡӦÓÃ
$relatedtag = array();
include_once S_ROOT.'./uc_client/client.php';
$relatedtag['data'] = uc_app_ls();
$default_open = 1;
}
$_SGLOBAL['app'] = array();
foreach($relatedtag['data'] as $appid => $data) {
if($default_open) {
$data['open'] = 1;
}
if($appid == UC_APPID) {//µ±Ç°Ó¦ÓÃ
$data['open'] = 0;
}
$_SGLOBAL['app'][$appid] = array(
'name' => $data['name'],
'url' => $data['url'],
'type' => $data['type'],
'open'=>$data['open'],
'icon' => $data['type']=='OTHER'?'default':strtolower($data['type'])
);
}
cache_write('app', "_SGLOBAL['app']", $_SGLOBAL['app']);
}
// ¸üл·ÖÀà
function eventclass_cache(){
global $_SGLOBAL;
$_SGLOBAL['eventclass'] = array();
// ´ÓÊý¾Ý¿â»ñÈ¡
$query = $_SGLOBAL['db']->query("SELECT * FROM " . tname("eventclass") . " ORDER BY displayorder");
while($value = $_SGLOBAL['db']->fetch_array($query)){
if($value['poster']) {
$value['poster'] = "data/event/".$value['classid'].".jpg";
} else {
$value['poster'] = "image/event/default.jpg";
}
$_SGLOBAL['eventclass'][$value['classid']] = $value;
}
cache_write('eventclass', "_SGLOBAL['eventclass']", $_SGLOBAL['eventclass']);
}
//¸üеÀ¾ßÐÅÏ¢
function magic_cache(){
global $_SGLOBAL;
$_SGLOBAL['magic'] = array();
// ´ÓÊý¾Ý¿â»ñÈ¡
$query = $_SGLOBAL['db']->query("SELECT mid, name FROM ".tname('magic')." WHERE close='0'");
while($value = $_SGLOBAL['db']->fetch_array($query)){
$_SGLOBAL['magic'][$value['mid']] = $value['name'];
}
cache_write('magic', "_SGLOBAL['magic']", $_SGLOBAL['magic']);
}
//µÝ¹éÇå¿ÕĿ¼
function deltreedir($dir) {
$files = sreaddir($dir);
foreach ($files as $file) {
if(is_dir("$dir/$file")) {
deltreedir("$dir/$file");
} else {
@unlink("$dir/$file");
}
}
}
//Êý×éת»»³É×Ö´®
function arrayeval($array, $level = 0) {
$space = '';
for($i = 0; $i <= $level; $i++) {
$space .= "\t";
}
$evaluate = "Array\n$space(\n";
$comma = $space;
foreach($array as $key => $val) {
$key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key;
$val = !is_array($val) && (!preg_match("/^\-?\d+$/", $val) || strlen($val) > 12 || substr($val, 0, 1)=='0') ? '\''.addcslashes($val, '\'\\').'\'' : $val;
if(is_array($val)) {
$evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
} else {
$evaluate .= "$comma$key => $val";
}
$comma = ",\n$space";
}
$evaluate .= "\n$space)";
return $evaluate;
}
//дÈë
function cache_write($name, $var, $values) {
$cachefile = S_ROOT.'./data/data_'.$name.'.php';
$cachetext = "<?php\r\n".
"if(!defined('IN_UCHOME')) exit('Access Denied');\r\n".
'$'.$var.'='.arrayeval($values).
"\r\n?>";
if(!swritefile($cachefile, $cachetext)) {
exit("File: $cachefile write error.");
}
}
?>