⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cache.func.php

📁 极限网络智能办公系统 Office Automation V3.0官方100%源代码.
💻 PHP
📖 第 1 页 / 共 4 页
字号:
<?php

/*
	[Discuz!] (C)2001-2007 Comsenz Inc.
	This is NOT a freeware, use is subject to license terms

	$RCSfile: cache.func.php,v $
	$Revision: 1.130.2.28 $
	$Date: 2007/03/23 14:47:43 $
*/

define('DISCUZ_KERNEL_VERSION', '5.5.0');
define('DISCUZ_KERNEL_RELEASE', '20070324');

if(isset($_GET['kernel_version'])) {
	exit('Crossday Discuz! Board<br>Developed by Comsenz Inc.<br><br>Version: '.DISCUZ_KERNEL_VERSION.'<br>Release: '.DISCUZ_KERNEL_RELEASE);
} elseif(!defined('IN_DISCUZ')) {
	exit('Access Denied');
}

function arrayeval($array, $level = 0) {
	$space = '';
	for($i = 0; $i <= $level; $i++) {
		$space .= "\t";
	}
	$evaluate = "Array\n$space(\n";
	$comma = $space;
	if(is_array($array)) {
		foreach($array as $key => $val) {
			$key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key;
			$val = !is_array($val) && (!preg_match("/^\-?[1-9]\d*$/", $val) || strlen($val) > 12) ? '\''.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 updatecache($cachename = '') {
	global $db, $bbname, $tablepre, $maxbdays;

	$cachescript = array
		(
		'settings'	=> array('settings'),
		'jswizard'	=> array('jswizard'),
		'index'		=> array('announcements', 'onlinelist', 'forumlinks', 'advs', 'supe_updateusers', 'supe_updateitems'),
		'forumdisplay'	=> array('announcements_forum', 'pmlist', 'globalstick', 'forums', 'icons', 'onlinelist', 'smiliestable', 'advs'),
		'viewthread'	=> array('forums', 'pmlist', 'usergroups', 'ranks', 'bbcodes', 'smilies', 'fields_thread', 'smiliestable', 'advs'),
		'pm'		=> array('smiliestable'),
		'post'		=> array('bbcodes_display', 'bbcodes', 'smilies_display', 'smilies', 'icons'),
		'blog'		=> array('usergroups', 'ranks', 'bbcodes', 'smilies'),
		'forums'	=> array('forums'),
		'profilefields'	=> array('fields_required', 'fields_optional'),
		'censor'	=> array('censor'),
		'ipbanned'	=> array('ipbanned'),
		'bbcodes'	=> array('bbcodes', 'smilies'),
		'medals'	=> array('medals'),
		'magics'	=> array('magics'),
		'usergroups'	=> array('usergroups'),
		'topicadmin'	=> array('modreasons'),
		'archiver'      => array('advs'),
		'register'      => array('advs'),
		'faqs'		=> array('faqs'),
		'secqaa'	=> array('secqaa'),
		'updatecircles'	=> array('supe_updatecircles')
		);
	if($maxbdays) {
		$cachescript['birthdays'] = array('birthdays');
		$cachescript['index'][]   = 'birthdays_index';
	}

	foreach($cachescript as $script => $cachenames) {
		if(!$cachename || (!is_array($cachename) && in_array($cachename, $cachenames)) || (is_array($cachename) && array_intersect($cachename, $cachenames))) {
			writetocache($script, $cachenames);
		}
	}

	if(!$cachename || $cachename == 'styles') {
		$stylevars = array();
		$query = $db->query("SELECT * FROM {$tablepre}stylevars");
		while($var = $db->fetch_array($query)) {
			$stylevars[$var['styleid']][$var['variable']] = $var['substitute'];
		}
		$query = $db->query("SELECT s.*, t.directory AS tpldir FROM {$tablepre}styles s LEFT JOIN {$tablepre}templates t ON s.templateid=t.templateid");
		while($data = $db->fetch_array($query)) {
			$data = array_merge($data, $stylevars[$data['styleid']]);

			$data['bgcode'] = strpos($data['bgcolor'], '.') ? (preg_match('/^http:\/\//i', $data['bgcolor']) ? "background-image: url(\"$data[bgcolor]\")" : "background-image: url(\"$data[imgdir]/$data[bgcolor]\")") : "background-color: $data[bgcolor]";
			$data['catbgcode'] = strpos($data['catcolor'], '.') ? (preg_match('/^http:\/\//i', $data['catcolor']) ? "background-image: url(\"$data[catcolor]\")" : "background-image: url(\"$data[imgdir]/$data[catcolor]\")") : "background-color: $data[catcolor]";
			$data['headerbgcode'] = strpos($data['headercolor'], '.') ? (preg_match('/^http:\/\//i', $data['headercolor']) ? "background-image: url(\"$data[headercolor]\")" : "background-image: url(\"$data[imgdir]/$data[headercolor]\")") : "background-color: $data[headercolor]";
			$data['headermenubgcode'] = strpos($data['headermenu'], '.') ? (preg_match('/^http:\/\//i', $data['headermenu']) ? "background-image: url(\"$data[headermenu]\")" : "background-image: url(\"$data[imgdir]/$data[headermenu]\")") : "background-color: $data[headermenu]";
			$data['framebg'] = preg_match('/^http:\/\//i', $data['framebg']) ? $data['framebg'] : $data['imgdir'].'/'.$data['framebg'];
			$data['frameswitch'] = preg_match('/^http:\/\//i', $data['frameswitch']) ? $data['frameswitch'] : $data['imgdir'].'/'.$data['frameswitch'];
			if(strstr($data['boardimg'], ',')) {
				$flash = explode(",", $data['boardimg']);
				$flash[0] = trim($flash[0]);
				$flash[0] = preg_match('/^http:\/\//i', $flash[0]) ? $flash[0] : $data['imgdir'].'/'.$flash[0];
				$data['boardlogo'] = "<embed src=\"".$flash[0]."\" width=\"".trim($flash[1])."\" height=\"".trim($flash[2])."\" type=\"application/x-shockwave-flash\"></embed>";
			} else {
				$data['boardimg'] = preg_match('/^http:\/\//i', $data['boardimg']) ? $data['boardimg'] : $data['imgdir'].'/'.$data['boardimg'];
				$data['boardlogo'] = "<img src=\"$data[boardimg]\" alt=\"$bbname\" border=\"0\" />";
			}
			$data['bold'] = $data['nobold'] ? 'normal' : 'bold';
			writetocache($data['styleid'], '', getcachevars($data, 'CONST'), 'style_');
			writetocsscache($data);
		}
	}

	if(!$cachename || $cachename == 'usergroups') {
		$query = $db->query("SELECT * FROM {$tablepre}usergroups u
					LEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid");
		while($data = $db->fetch_array($query)) {
			$ratearray = array();
			if($data['raterange']) {
				foreach(explode("\n", $data['raterange']) as $rating) {
					$rating = explode("\t", $rating);
					$ratearray[$rating[0]] = array('min' => $rating[1], 'max' => $rating[2], 'mrpd' => $rating[3]);
				}
			}
			$data['raterange'] = $ratearray;
			$data['grouptitle'] = $data['color'] ? '<font color="'.$data['color'].'">'.$data['grouptitle'].'</font>' : $data['grouptitle'];
			$data['grouptype'] = $data['type'];
			$data['grouppublic'] = $data['system'] != 'private';
			$data['groupcreditshigher'] = $data['creditshigher'];
			$data['groupcreditslower'] = $data['creditslower'];
			unset($data['type'], $data['system'], $data['creditshigher'], $data['creditslower'], $data['color'], $data['groupavatar'], $data['admingid']);
			foreach($data as $key => $val) {
				if(!isset($data[$key])) {
					unset($data[$key]);
				}
			}
			writetocache($data['groupid'], '', getcachevars($data), 'usergroup_');
		}
	}

	if(!$cachename || $cachename == 'admingroups') {
		$query = $db->query("SELECT * FROM {$tablepre}admingroups");
		while($data = $db->fetch_array($query)) {
			writetocache($data['admingid'], '', getcachevars($data), 'admingroup_');
		}
	}

	if(!$cachename || $cachename == 'plugins') {
		$query = $db->query("SELECT pluginid, available, adminid, name, identifier, datatables, directory, copyright, modules FROM {$tablepre}plugins");
		while($plugin = $db->fetch_array($query)) {
			$data = array_merge($plugin, array('modules' => array()), array('vars' => array()));
			$plugin['modules'] = unserialize($plugin['modules']);
			if(is_array($plugin['modules'])) {
				foreach($plugin['modules'] as $module) {
					$data['modules'][$module['name']] = $module;
				}
			}
			$queryvars = $db->query("SELECT variable, value FROM {$tablepre}pluginvars WHERE pluginid='$plugin[pluginid]'");
			while($var = $db->fetch_array($queryvars)) {
				$data['vars'][$var['variable']] = $var['value'];
			}
			writetocache($plugin['identifier'], '', "\$_DPLUGIN['$plugin[identifier]'] = ".arrayeval($data), 'plugin_');
		}
	}

	if(empty($cachename) || in_array($cachename, array('forums', 'usergroups', 'settings'))) {
		updatespacesettings();
	}
}

function updatespacesettings() {
	global $db, $tablepre, $initcredits;

	$query = $db->query("SELECT groupid, readaccess FROM {$tablepre}usergroups WHERE creditshigher<=".intval($initcredits)." AND ".intval($initcredits)."<creditslower LIMIT 1");
	$groupinfo = $db->fetch_array($query);
	$fids = 0;
	$query = $db->query("SELECT ff.fid, ff.viewperm FROM {$tablepre}forumfields ff,{$tablepre}forums f WHERE f.fid=ff.fid AND f.status>'0' AND ff.password=''");
	while($forum = $db->fetch_array($query)) {
		if(empty($forum['viewperm']) || in_array($groupinfo['groupid'], explode("\t", $forum['viewperm']))) {
			$fids .= ','.$forum['fid'];
		}
	}
	$spacesettings = array('parms' => array('infids' => $fids, 'groupid' => $groupinfo['groupid'], 'readaccess' => $groupinfo['readaccess']));
	writetocache('spacesettings', '', getcachevars($spacesettings));
}

function updatesettings() {
	global $_DCACHE;
	if(isset($_DCACHE['settings']) && is_array($_DCACHE['settings'])) {
		writetocache('settings', '', '$_DCACHE[\'settings\'] = '.arrayeval($_DCACHE['settings']));
	}
}

function writetocache($script, $cachenames, $cachedata = '', $prefix = 'cache_') {
	global $authkey, $timestamp;
	if(is_array($cachenames) && !$cachedata) {
		foreach($cachenames as $name) {
			$cachedata .= getcachearray($name, $script);
		}
	}

	$dir = DISCUZ_ROOT.'./forumdata/cache/';
	if(!is_dir($dir)) {
		@mkdir($dir, 0777);
	}
	if($fp = @fopen("$dir$prefix$script.php", 'wb')) {
		fwrite($fp, "<?php\n//Discuz! cache file, DO NOT modify me!".
			"\n//Created: ".date("M j, Y, G:i").
			"\n//Identify: ".md5($prefix.$script.'.php'.$cachedata.$authkey)."\n\n$cachedata?>");
		fclose($fp);
	} else {
		dexit('Can not write to cache files, please check directory ./forumdata/ and ./forumdata/cache/ .');
	}
}

function writetocsscache($data) {
	$csstemplates = array('css', 'css_editor');
	$styleid = $data['styleid'];
	include_once DISCUZ_ROOT.'./forumdata/cache/style_'.$styleid.'.php';
	$cachedir = DISCUZ_ROOT.'./forumdata/cache/';
	foreach($csstemplates as $css) {
		$cssfile = template($css, $styleid, $data['tpldir']);
		$cssfile = !file_exists($cssfile) ? template($css, 1, './templates/default/') : $cssfile;
		$fp = fopen($cssfile, 'r');
		$cssdata = fread($fp, filesize($cssfile));
		fclose($fp);
		$cssdata = preg_replace("/<\?=([A-Z0-9]+)\?>/e", '\$data[strtolower(\'\1\')]', $cssdata);
		$cssdata = preg_replace("/<\?.+?\?>\s*/", '', $cssdata);
		$cssdata = !preg_match('/^http:\/\//i', $data['imgdir']) ? str_replace("url(\"$data[imgdir]", "url(\"../../$data[imgdir]", $cssdata) : $cssdata;
		$cssdata = !preg_match('/^http:\/\//i', $data['imgdir']) ? str_replace("url($data[imgdir]", "url(../../$data[imgdir]", $cssdata) : $cssdata;
		$extra = substr($css, 3);
		if(@$fp = fopen($cachedir.'style_'.$styleid.$extra.'.css', 'w')) {
			fwrite($fp, $cssdata);
			fclose($fp);
		} else {
			dexit('Can not write to cache files, please check directory ./forumdata/ and ./forumdata/cache/ .');
		}
	}
}

function getcachearray($cachename, $script = '') {
	global $db, $timestamp, $tablepre, $timeoffset, $maxbdays, $smcols, $smrows;

	$cols = '*';
	$conditions = '';
	switch($cachename) {
		case 'settings':
			$table = 'settings';
			$conditions = "WHERE variable NOT IN ('bbrules', 'bbrulestxt', 'closedreason', 'creditsnotify', 'backupdir', 'custombackup', 'jswizard', 'maxonlines', 'modreasons', 'newsletter', 'welcomemsg', 'welcomemsgtxt') AND variable NOT LIKE 'jswizard_%'";
			break;
		case 'jswizard':
			$table = 'settings';
			$conditions = "WHERE variable LIKE 'jswizard_%'";
			break;
		case 'usergroups':
			$table = 'usergroups';
			$cols = 'groupid, type, grouptitle, creditshigher, creditslower, stars, color, groupavatar, readaccess, allowavatar, allowcusbbcode, allowuseblog';
			$conditions = "ORDER BY creditslower";
			break;
		case 'ranks':
			$table = 'ranks';
			$cols = 'ranktitle, postshigher, stars, color';
			$conditions = "ORDER BY postshigher DESC";
			break;
		case 'announcements':
			$table = 'announcements';
			$cols = 'id, subject, type, starttime, endtime, message, displayorder, groups';
			$conditions = "WHERE starttime<='$timestamp' AND (endtime>='$timestamp' OR endtime='0') ORDER BY displayorder, starttime DESC, id DESC";
			break;
		case 'announcements_forum':
			$table = 'announcements a';
			$cols = 'a.id, a.author, a.message, m.uid AS authorid, a.subject, a.type, a.starttime, a.displayorder';
			$conditions = "LEFT JOIN {$tablepre}members m ON m.username=a.author WHERE a.type!=2 AND a.groups = '' AND a.starttime<='$timestamp' ORDER BY a.displayorder, a.starttime DESC, a.id DESC LIMIT 1";
			break;
		case 'pmlist':
			$table = 'announcements a';
			$cols = 'id, subject, starttime, endtime, message, groups';
			$conditions = "WHERE type=2 AND starttime<='$timestamp' AND (endtime>='$timestamp' OR endtime='0') ORDER BY displayorder, starttime DESC, id DESC";
			break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -