/miles/GlobalMBA/mba/sns_00/upload/bbs/include/global.func.php
PHP | 1854 lines | 1662 code | 172 blank | 20 comment | 527 complexity | 775cf43bf3ba215b1c9f3a26670bbd2c MD5 | raw file
Possible License(s): LGPL-3.0, Apache-2.0, LGPL-2.1, BSD-3-Clause
- <?php
-
- /*
- [Discuz!] (C)2001-2009 Comsenz Inc.
- This is NOT a freeware, use is subject to license terms
-
- $Id: global.func.php 21342 2010-01-06 08:52:53Z zhaoxiongfei $
- */
-
- if(!defined('IN_DISCUZ')) {
- exit('Access Denied');
- }
-
-
- function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
-
- $ckey_length = 4;
- $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);
- $keya = md5(substr($key, 0, 16));
- $keyb = md5(substr($key, 16, 16));
- $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
-
- $cryptkey = $keya.md5($keya.$keyc);
- $key_length = strlen($cryptkey);
-
- $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
- $string_length = strlen($string);
-
- $result = '';
- $box = range(0, 255);
-
- $rndkey = array();
- for($i = 0; $i <= 255; $i++) {
- $rndkey[$i] = ord($cryptkey[$i % $key_length]);
- }
-
- for($j = $i = 0; $i < 256; $i++) {
- $j = ($j + $box[$i] + $rndkey[$i]) % 256;
- $tmp = $box[$i];
- $box[$i] = $box[$j];
- $box[$j] = $tmp;
- }
-
- for($a = $j = $i = 0; $i < $string_length; $i++) {
- $a = ($a + 1) % 256;
- $j = ($j + $box[$a]) % 256;
- $tmp = $box[$a];
- $box[$a] = $box[$j];
- $box[$j] = $tmp;
- $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
- }
-
- if($operation == 'DECODE') {
- if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
- return substr($result, 26);
- } else {
- return '';
- }
- } else {
- return $keyc.str_replace('=', '', base64_encode($result));
- }
-
- }
-
- function aidencode($aid) {
- static $sidauth = '';
- $sidauth = $sidauth != '' ? $sidauth : authcode($GLOBALS['sid'], 'ENCODE', $GLOBALS['authkey']);
- return rawurlencode(base64_encode($aid.'|'.substr(md5($aid.md5($GLOBALS['authkey']).$GLOBALS['timestamp']), 0, 8).'|'.$GLOBALS['timestamp'].'|'.$sidauth));
- }
-
- function clearcookies() {
- global $discuz_uid, $discuz_user, $discuz_pw, $discuz_secques, $adminid, $credits;
- foreach(array('sid', 'auth', 'visitedfid', 'onlinedetail', 'loginuser', 'activationauth', 'indextype') as $k) {
- dsetcookie($k);
- }
- $discuz_uid = $adminid = $credits = 0;
- $discuz_user = $discuz_pw = $discuz_secques = '';
- }
-
- function checklowerlimit($creditsarray, $coef = 1) {
- if(is_array($creditsarray)) {
- global $extcredits, $id;
- foreach($creditsarray as $id => $addcredits) {
- $addcredits = $addcredits * $coef;
- if($addcredits < 0 && ($GLOBALS['extcredits'.$id] < $extcredits[$id]['lowerlimit'] || (($GLOBALS['extcredits'.$id] + $addcredits) < $extcredits[$id]['lowerlimit']))) {
- showmessage('credits_policy_lowerlimit');
- }
- }
- }
- }
-
-
- function checkmd5($md5, $verified, $salt = '') {
- if(md5($md5.$salt) == $verified) {
- $result = !empty($salt) ? 1 : 2;
- } elseif(empty($salt)) {
- $result = $md5 == $verified ? 3 : ((strlen($verified) == 16 && substr($md5, 8, 16) == $verified) ? 4 : 0);
- } else {
- $result = 0;
- }
- return $result;
- }
-
- function checktplrefresh($maintpl, $subtpl, $timecompare, $templateid, $tpldir) {
- global $tplrefresh;
- if(empty($timecompare) || $tplrefresh == 1 || ($tplrefresh > 1 && !($GLOBALS['timestamp'] % $tplrefresh))) {
- if(empty($timecompare) || @filemtime($subtpl) > $timecompare) {
- require_once DISCUZ_ROOT.'./include/template.func.php';
- parse_template($maintpl, $templateid, $tpldir);
- return TRUE;
- }
- }
- return FALSE;
- }
-
- function cutstr($string, $length, $dot = ' ...') {
- global $charset;
-
- if(strlen($string) <= $length) {
- return $string;
- }
-
- $string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
-
- $strcut = '';
- if(strtolower($charset) == 'utf-8') {
-
- $n = $tn = $noc = 0;
- while($n < strlen($string)) {
-
- $t = ord($string[$n]);
- if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
- $tn = 1; $n++; $noc++;
- } elseif(194 <= $t && $t <= 223) {
- $tn = 2; $n += 2; $noc += 2;
- } elseif(224 <= $t && $t <= 239) {
- $tn = 3; $n += 3; $noc += 2;
- } elseif(240 <= $t && $t <= 247) {
- $tn = 4; $n += 4; $noc += 2;
- } elseif(248 <= $t && $t <= 251) {
- $tn = 5; $n += 5; $noc += 2;
- } elseif($t == 252 || $t == 253) {
- $tn = 6; $n += 6; $noc += 2;
- } else {
- $n++;
- }
-
- if($noc >= $length) {
- break;
- }
-
- }
- if($noc > $length) {
- $n -= $tn;
- }
-
- $strcut = substr($string, 0, $n);
-
- } else {
- for($i = 0; $i < $length; $i++) {
- $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
- }
- }
-
- $strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);
-
- return $strcut.$dot;
- }
-
- function daddslashes($string, $force = 0) {
- !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
- if(!MAGIC_QUOTES_GPC || $force) {
- if(is_array($string)) {
- foreach($string as $key => $val) {
- $string[$key] = daddslashes($val, $force);
- }
- } else {
- $string = addslashes($string);
- }
- }
- return $string;
- }
-
- function datecheck($ymd, $sep='-') {
- if(!empty($ymd)) {
- list($year, $month, $day) = explode($sep, $ymd);
- return checkdate($month, $day, $year);
- } else {
- return FALSE;
- }
- }
-
- function debuginfo() {
- if($GLOBALS['debug']) {
- global $db, $discuz_starttime, $debuginfo;
- $mtime = explode(' ', microtime());
- $debuginfo = array('time' => number_format(($mtime[1] + $mtime[0] - $discuz_starttime), 6), 'queries' => $db->querynum);
- return TRUE;
- } else {
- return FALSE;
- }
- }
-
- function dexit($message = '') {
- echo $message;
- output();
- exit();
- }
-
- function dfopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {
- $return = '';
- $matches = parse_url($url);
- $host = $matches['host'];
- $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
- $port = !empty($matches['port']) ? $matches['port'] : 80;
-
- if($post) {
- $out = "POST $path HTTP/1.0\r\n";
- $out .= "Accept: */*\r\n";
- //$out .= "Referer: $boardurl\r\n";
- $out .= "Accept-Language: zh-cn\r\n";
- $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
- $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
- $out .= "Host: $host\r\n";
- $out .= 'Content-Length: '.strlen($post)."\r\n";
- $out .= "Connection: Close\r\n";
- $out .= "Cache-Control: no-cache\r\n";
- $out .= "Cookie: $cookie\r\n\r\n";
- $out .= $post;
- } else {
- $out = "GET $path HTTP/1.0\r\n";
- $out .= "Accept: */*\r\n";
- //$out .= "Referer: $boardurl\r\n";
- $out .= "Accept-Language: zh-cn\r\n";
- $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
- $out .= "Host: $host\r\n";
- $out .= "Connection: Close\r\n";
- $out .= "Cookie: $cookie\r\n\r\n";
- }
- $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
- if(!$fp) {
- return '';
- } else {
- stream_set_blocking($fp, $block);
- stream_set_timeout($fp, $timeout);
- @fwrite($fp, $out);
- $status = stream_get_meta_data($fp);
- if(!$status['timed_out']) {
- while (!feof($fp)) {
- if(($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) {
- break;
- }
- }
-
- $stop = false;
- while(!feof($fp) && !$stop) {
- $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
- $return .= $data;
- if($limit) {
- $limit -= strlen($data);
- $stop = $limit <= 0;
- }
- }
- }
- @fclose($fp);
- return $return;
- }
- }
-
- function dhtmlspecialchars($string) {
- if(is_array($string)) {
- foreach($string as $key => $val) {
- $string[$key] = dhtmlspecialchars($val);
- }
- } else {
- $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1',
- //$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1',
- str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string));
- }
- return $string;
- }
-
- function dheader($string, $replace = true, $http_response_code = 0) {
- $string = str_replace(array("\r", "\n"), array('', ''), $string);
- if(empty($http_response_code) || PHP_VERSION < '4.3' ) {
- @header($string, $replace);
- } else {
- @header($string, $replace, $http_response_code);
- }
- if(preg_match('/^\s*location:/is', $string)) {
- exit();
- }
- }
-
- function dreferer($default = '') {
- global $referer, $indexname;
-
- $default = empty($default) ? $indexname : '';
- if(empty($referer) && isset($GLOBALS['_SERVER']['HTTP_REFERER'])) {
- $referer = preg_replace("/([\?&])((sid\=[a-z0-9]{6})(&|$))/i", '\\1', $GLOBALS['_SERVER']['HTTP_REFERER']);
- $referer = substr($referer, -1) == '?' ? substr($referer, 0, -1) : $referer;
- } else {
- $referer = dhtmlspecialchars($referer);
- }
-
- if(strpos($referer, 'logging.php')) {
- $referer = $default;
- }
- return $referer;
- }
-
- function dsetcookie($var, $value = '', $life = 0, $prefix = 1, $httponly = false) {
- global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;
- $var = ($prefix ? $cookiepre : '').$var;
- if($value == '' || $life < 0) {
- $value = '';
- $life = -1;
- }
- $life = $life > 0 ? $timestamp + $life : ($life < 0 ? $timestamp - 31536000 : 0);
- $path = $httponly && PHP_VERSION < '5.2.0' ? "$cookiepath; HttpOnly" : $cookiepath;
- $secure = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
- if(PHP_VERSION < '5.2.0') {
- setcookie($var, $value, $life, $path, $cookiedomain, $secure);
- } else {
- setcookie($var, $value, $life, $path, $cookiedomain, $secure, $httponly);
- }
- }
-
- function dunlink($filename, $havethumb = 0, $remote = 0) {
- global $authkey, $ftp, $attachdir;
- if($remote) {
- require_once DISCUZ_ROOT.'./include/ftp.func.php';
- if(!$ftp['connid']) {
- if(!($ftp['connid'] = dftp_connect($ftp['host'], $ftp['username'], authcode($ftp['password'], 'DECODE', md5($authkey)), $ftp['attachdir'], $ftp['port'], $ftp['ssl']))) {
- return;
- }
- }
- dftp_delete($ftp['connid'], $filename);
- $havethumb && dftp_delete($ftp['connid'], $filename.'.thumb.jpg');
- } else {
- @unlink($attachdir.'/'.$filename);
- $havethumb && @unlink($attachdir.'/'.$filename.'.thumb.jpg');
- }
- }
-
- function dgmdate($format, $timestamp, $convert = 1) {
- $s = gmdate($format, $timestamp);
- if($GLOBALS['dateconvert'] && $convert) {
- if($GLOBALS['discuz_uid']) {
- if(!isset($GLOBALS['disableddateconvert'])) {
- $customshow = str_pad(base_convert($GLOBALS['customshow'], 10, 3), 4, '0', STR_PAD_LEFT);
- $GLOBALS['disableddateconvert'] = $customshow{0};
- }
- if($GLOBALS['disableddateconvert']) {
- return $s;
- }
- }
- if(!isset($GLOBALS['todaytimestamp'])) {
- $GLOBALS['todaytimestamp'] = $GLOBALS['timestamp'] - ($GLOBALS['timestamp'] + $GLOBALS['timeoffset'] * 3600) % 86400 + $GLOBALS['timeoffset'] * 3600;
- }
- $lang = $GLOBALS['dlang']['date'];
- $time = $GLOBALS['timestamp'] + $GLOBALS['timeoffset'] * 3600 - $timestamp;
- if($timestamp >= $GLOBALS['todaytimestamp']) {
- if($time > 3600) {
- return '<span title="'.$s.'">'.intval($time / 3600).' '.$lang[4].$lang[0].'</span>';
- } elseif($time > 1800) {
- return '<span title="'.$s.'">'.$lang[5].$lang[4].$lang[0].'</span>';
- } elseif($time > 60) {
- return '<span title="'.$s.'">'.intval($time / 60).' '.$lang[6].$lang[0].'</span>';
- } elseif($time > 0) {
- return '<span title="'.$s.'">'.$time.' '.$lang[7].$lang[0].'</span>';
- } elseif($time == 0) {
- return '<span title="'.$s.'">'.$lang[8].'</span>';
- } else {
- return $s;
- }
- } elseif(($days = intval(($GLOBALS['todaytimestamp'] - $timestamp) / 86400)) >= 0 && $days < 7) {
- if($days == 0) {
- return '<span title="'.$s.'">'.$lang[2].' '.gmdate($GLOBALS['timeformat'], $timestamp).'</span>';
- } elseif($days == 1) {
- return '<span title="'.$s.'">'.$lang[3].' '.gmdate($GLOBALS['timeformat'], $timestamp).'</span>';
- } else {
- return '<span title="'.$s.'">'.($days + 1).' '.$lang[1].$lang[0].' '.gmdate($GLOBALS['timeformat'], $timestamp).'</span>';
- }
- } else {
- return $s;
- }
- } else {
- return $s;
- }
- }
-
- function errorlog($type, $message, $halt = 1) {
- global $timestamp, $discuz_userss, $onlineip, $_SERVER;
- $user = empty($discuz_userss) ? '' : $discuz_userss.'<br />';
- $user .= $onlineip.'|'.$_SERVER['REMOTE_ADDR'];
- writelog('errorlog', dhtmlspecialchars("$timestamp\t$type\t$user\t".str_replace(array("\r", "\n"), array(' ', ' '), trim($message))));
- if($halt) {
- exit();
- }
- }
-
- function fileext($filename) {
- return trim(substr(strrchr($filename, '.'), 1, 10));
- }
-
- function formhash($specialadd = '') {
- global $discuz_user, $discuz_uid, $discuz_pw, $timestamp, $discuz_auth_key;
- $hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : '';
- return substr(md5(substr($timestamp, 0, -7).$discuz_user.$discuz_uid.$discuz_pw.$discuz_auth_key.$hashadd.$specialadd), 8, 8);
- }
-
- function forumperm($permstr) {
- global $groupid, $extgroupids;
-
- $groupidarray = array($groupid);
- foreach(explode("\t", $extgroupids) as $extgroupid) {
- if($extgroupid = intval(trim($extgroupid))) {
- $groupidarray[] = $extgroupid;
- }
- }
- return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);
- }
-
- function formulaperm($formula, $type = 0, $wap = FALSE) {
- global $db, $tablepre, $_DSESSION, $extcredits, $formulamessage, $usermsg, $forum, $language, $medalstatus, $discuz_uid, $timestamp;
-
- $formula = unserialize($formula);
- $medalperm = $formula['medal'];
- $permusers = $formula['users'];
- $permmessage = $formula['message'];
- if(!$type && $medalstatus && $medalperm) {
- $exists = 1;
- $formulamessage = '';
- $medalpermc = $medalperm;
- if($discuz_uid) {
- $medals = explode("\t", $db->result_first("SELECT medals FROM {$tablepre}memberfields WHERE uid='$discuz_uid'"));
- foreach($medalperm as $k => $medal) {
- foreach($medals as $r) {
- list($medalid) = explode("|", $r);
- if($medalid == $medal) {
- $exists = 0;
- unset($medalpermc[$k]);
- }
- }
- }
- } else {
- $exists = 0;
- }
- if($medalpermc) {
- if(!$wap) {
- @include DISCUZ_ROOT.'./forumdata/cache/cache_medals.php';
- foreach($medalpermc as $medal) {
- if($_DCACHE['medals'][$medal]) {
- $formulamessage .= '<img src="images/common/'.$_DCACHE['medals'][$medal]['image'].'" />'.$_DCACHE['medals'][$medal]['name'].' ';
- }
- }
- showmessage('forum_permforum_nomedal', NULL, 'NOPERM');
- } else {
- wapmsg('forum_nopermission');
- }
- }
- }
- $formula = $formula[1];
- if(!$type && ($_DSESSION['adminid'] == 1 || $forum['ismoderator'])) {
- return FALSE;
- }
- if(!$type && $permusers) {
- $permusers = str_replace(array("\r\n", "\r"), array("\n", "\n"), $permusers);
- $permusers = explode("\n", trim($permusers));
- if(!in_array($GLOBALS['discuz_user'], $permusers)) {
- showmessage('forum_permforum_disallow', NULL, 'NOPERM');
- }
- }
- if(!$formula) {
- return FALSE;
- }
- if(strexists($formula, '$memberformula[')) {
- preg_match_all("/\\\$memberformula\['(\w+?)'\]/", $formula, $a);
- $fields = $profilefields = array();
- $mfadd = '';
- foreach($a[1] as $field) {
- switch($field) {
- case 'regdate':
- $formula = preg_replace("/\{(\d{4})\-(\d{1,2})\-(\d{1,2})\}/e", "'\\1-'.sprintf('%02d', '\\2').'-'.sprintf('%02d', '\\3')", $formula);
- case 'regday':
- $fields[] = 'm.regdate';break;
- case 'regip':
- case 'lastip':
- $formula = preg_replace("/\{([\d\.]+?)\}/", "'\\1'", $formula);
- $fields[] = 'm.'.$field;break;
- case substr($field, 0, 6) == 'field_':
- $profilefields[] = $field;
- case 'buyercredit':
- case 'sellercredit':
- $mfadd = "LEFT JOIN {$tablepre}memberfields mf ON m.uid=mf.uid";
- $fields[] = 'mf.'.$field;break;
- }
- }
- $memberformula = array();
- if($discuz_uid) {
- $memberformula = $db->fetch_first("SELECT ".implode(',', $fields)." FROM {$tablepre}members m $mfadd WHERE m.uid='$discuz_uid'");
- if(in_array('regday', $a[1])) {
- $memberformula['regday'] = intval(($timestamp - $memberformula['regdate']) / 86400);
- }
- if(in_array('regdate', $a[1])) {
- $memberformula['regdate'] = date('Y-m-d', $memberformula['regdate']);
- }
- $memberformula['lastip'] = $memberformula['lastip'] ? $memberformula['lastip'] : $GLOBALS['onlineip'];
- } else {
- if(isset($memberformula['regip'])) {
- $memberformula['regip'] = $GLOBALS['onlineip'];
- }
- if(isset($memberformula['lastip'])) {
- $memberformula['lastip'] = $GLOBALS['onlineip'];
- }
- }
- }
- @eval("\$formulaperm = ($formula) ? TRUE : FALSE;");
- if(!$formulaperm || $type == 2) {
- if(!$permmessage) {
- include_once language('misc');
- $search = array('$memberformula[\'regdate\']', '$memberformula[\'regday\']', '$memberformula[\'regip\']', '$memberformula[\'lastip\']', '$memberformula[\'buyercredit\']', '$memberformula[\'sellercredit\']', '$_DSESSION[\'digestposts\']', '$_DSESSION[\'posts\']', '$_DSESSION[\'threads\']', '$_DSESSION[\'oltime\']', '$_DSESSION[\'pageviews\']');
- $replace = array($language['formulaperm_regdate'], $language['formulaperm_regday'], $language['formulaperm_regip'], $language['formulaperm_lastip'], $language['formulaperm_buyercredit'], $language['formulaperm_sellercredit'], $language['formulaperm_digestposts'], $language['formulaperm_posts'], $language['formulaperm_threads'], $language['formulaperm_oltime'], $language['formulaperm_pageviews']);
- for($i = 1; $i <= 8; $i++) {
- $search[] = '$_DSESSION[\'extcredits'.$i.'\']';
- $replace[] = $extcredits[$i]['title'] ? $extcredits[$i]['title'] : $language['formulaperm_extcredits'].$i;
- }
- if($profilefields) {
- @include DISCUZ_ROOT.'./forumdata/cache/cache_profilefields.php';
- foreach($profilefields as $profilefield) {
- $search[] = '$memberformula[\''.$profilefield.'\']';
- $replace[] = !empty($_DCACHE['fields_optional'][$profilefield]) ? $_DCACHE['fields_optional'][$profilefield]['title'] : $_DCACHE['fields_required'][$profilefield]['title'];
- }
- }
- $i = 0;$usermsg = '';
- foreach($search as $s) {
- if(!in_array($s, array('$memberformula[\'regdate\']', '$memberformula[\'regip\']', '$memberformula[\'lastip\']'))) {
- $usermsg .= strexists($formula, $s) ? '<br /> '.$replace[$i].': '.(@eval('return intval('.$s.');')) : '';
- } elseif($s == '$memberformula[\'regdate\']') {
- $usermsg .= strexists($formula, $s) ? '<br /> '.$replace[$i].': '.(@eval('return '.$s.';')) : '';
- }
- $i++;
- }
- $search = array_merge($search, array('and', 'or', '>=', '<=', '=='));
- $replace = array_merge($replace, array(' <b>'.$language['formulaperm_and'].'</b> ', ' <b>'.$language['formulaperm_or'].'</b> ', '≥', '≤', '='));
- $formulamessage = str_replace($search, $replace, $formula);
- } else {
- $formulamessage = nl2br(htmlspecialchars($permmessage));
- }
-
- if($type == 1 || $type == 2) {
- return $formulamessage;
- } elseif(!$wap) {
- if(!$permmessage) {
- showmessage('forum_permforum_nopermission', NULL, 'NOPERM');
- } else {
- showmessage('forum_permforum_nopermission_custommsg', NULL, 'NOPERM');
- }
- } else {
- wapmsg('forum_nopermission');
- }
- }
- return TRUE;
- }
-
- function getgroupid($uid, $group, &$member) {
- global $creditsformula, $db, $tablepre, $dzfeed_limit;
-
- if(!empty($creditsformula)) {
- $updatearray = array();
- eval("\$credits = round($creditsformula);");
-
- if($credits != $member['credits']) {
-
- $send_feed = false;
- if(is_array($dzfeed_limit['user_credit'])) foreach($dzfeed_limit['user_credit'] as $val) {
- if($member['credits'] < $val && $credits > $val) {
- $send_feed = true;
- $count = $val;
- }
- }
- if($send_feed) {
- $arg = $data = array();
- $arg['type'] = 'user_credit';
- $arg['uid'] = $uid;
- $arg['username'] = addslashes($member['username'] ? $member['username'] : $member['discuz_user']);
- $data['title']['actor'] = "<a href=\"space.php?uid={$arg[uid]}\" target=\"_blank\">".($member['username'] ? $member['username'] : $member['discuz_user'])."</a>";
- $data['title']['count'] = $count;
- add_feed($arg, $data);
- }
-
- $updatearray[] = "credits='$credits'";
- $member['credits'] = $credits;
- }
-
- if($group['type'] == 'member' && !($member['credits'] >= $group['creditshigher'] && $member['credits'] < $group['creditslower'])) {
- $query = $db->query("SELECT groupid FROM {$tablepre}usergroups WHERE type='member' AND $member[credits]>=creditshigher AND $member[credits]<creditslower LIMIT 1");
- if($db->num_rows($query)) {
- $newgroupid = $db->result($query, 0);
- $query = $db->query("SELECT groupid FROM {$tablepre}members WHERE uid='$uid'");
- $member['groupid'] = $db->result($query, 0);
- if($member['groupid'] != $newgroupid) {
- $member['groupid'] = $newgroupid;
- $updatearray[] = "groupid='$member[groupid]'";
-
- include language('notice');
- $grouptitle = $db->result_first("SELECT grouptitle FROM {$tablepre}usergroups WHERE groupid='$member[groupid]'");
- $data = array();
- $data['usergroup'] = "<a href=\"faq.php?action=grouppermission&searchgroupid={$member[groupid]}\" target=\"_blank\">{$grouptitle}</a>";
- $msg_template = $language['user_usergroup'];
- $message = transval($msg_template, $data);
- sendnotice($uid, $message, 'systempm');
-
- if(is_array($dzfeed_limit['user_usergroup']) && in_array($member['groupid'], $dzfeed_limit['user_usergroup'])) {
- $arg = $data = array();
- $arg['type'] = 'user_usergroup';
- $arg['uid'] = $uid;
- $arg['username'] = addslashes($member['username'] ? $member['username'] : $member['discuz_user']);
- $data['title']['actor'] = "<a href=\"space.php?uid={$arg[uid]}\" target=\"_blank\">".($member['username'] ? $member['username'] : $member['discuz_user'])."</a>";
- $data['title']['usergroup'] = "<a href=\"faq.php?action=grouppermission&searchgroupid={$member[groupid]}\" target=\"_blank\">{$grouptitle}</a>";
- add_feed($arg, $data);
- }
- }
- }
- }
- if($updatearray) {
- $db->query("UPDATE {$tablepre}members SET ".implode(', ', $updatearray)." WHERE uid='$uid'");
- }
- }
-
- return $member['groupid'];
- }
-
- function getrobot() {
- if(!defined('IS_ROBOT')) {
- $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
- $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
- if(!strexists($_SERVER['HTTP_USER_AGENT'], 'http://') && preg_match("/($kw_browsers)/i", $_SERVER['HTTP_USER_AGENT'])) {
- define('IS_ROBOT', FALSE);
- } elseif(preg_match("/($kw_spiders)/i", $_SERVER['HTTP_USER_AGENT'])) {
- define('IS_ROBOT', TRUE);
- } else {
- define('IS_ROBOT', FALSE);
- }
- }
- return IS_ROBOT;
- }
-
- function get_home($uid) {
- $uid = sprintf("%05d", $uid);
- $dir1 = substr($uid, 0, -4);
- $dir2 = substr($uid, -4, 2);
- $dir3 = substr($uid, -2, 2);
- return $dir1.'/'.$dir2.'/'.$dir3;
- }
-
- function groupexpiry($terms) {
- $terms = is_array($terms) ? $terms : unserialize($terms);
- $groupexpiry = isset($terms['main']['time']) ? intval($terms['main']['time']) : 0;
- if(is_array($terms['ext'])) {
- foreach($terms['ext'] as $expiry) {
- if((!$groupexpiry && $expiry) || $expiry < $groupexpiry) {
- $groupexpiry = $expiry;
- }
- }
- }
- return $groupexpiry;
- }
-
- function ipaccess($ip, $accesslist) {
- return preg_match("/^(".str_replace(array("\r\n", ' '), array('|', ''), preg_quote($accesslist, '/')).")/", $ip);
- }
-
- function implodeids($array) {
- if(!empty($array)) {
- return "'".implode("','", is_array($array) ? $array : array($array))."'";
- } else {
- return '';
- }
- }
-
- function ipbanned($onlineip) {
- global $ipaccess, $timestamp, $cachelost;
-
- if($ipaccess && !ipaccess($onlineip, $ipaccess)) {
- return TRUE;
- }
-
- $cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/cache_ipbanned.php') ? '' : ' ipbanned';
- if(empty($_DCACHE['ipbanned'])) {
- return FALSE;
- } else {
- if($_DCACHE['ipbanned']['expiration'] < $timestamp) {
- @unlink(DISCUZ_ROOT.'./forumdata/cache/cache_ipbanned.php');
- }
- return preg_match("/^(".$_DCACHE['ipbanned']['regexp'].")$/", $onlineip);
- }
- }
-
- function isemail($email) {
- return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);
- }
-
- function language($file, $templateid = 0, $tpldir = '') {
- $tpldir = $tpldir ? $tpldir : TPLDIR;
- $templateid = $templateid ? $templateid : TEMPLATEID;
-
- $languagepack = DISCUZ_ROOT.'./'.$tpldir.'/'.$file.'.lang.php';
- if(file_exists($languagepack)) {
- return $languagepack;
- } elseif($templateid != 1 && $tpldir != './templates/default') {
- return language($file, 1, './templates/default');
- } else {
- return FALSE;
- }
- }
-
- function modthreadkey($tid) {
- global $adminid, $discuz_user, $discuz_uid, $discuz_pw, $timestamp, $discuz_auth_key;
- return $adminid > 0 ? md5($discuz_user.$discuz_uid.$discuz_auth_key.substr($timestamp, 0, -7).$tid) : '';
- }
-
- function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $autogoto = TRUE, $simple = FALSE) {
- global $maxpage;
- $ajaxtarget = !empty($_GET['ajaxtarget']) ? " ajaxtarget=\"".dhtmlspecialchars($_GET['ajaxtarget'])."\" " : '';
-
- if(defined('IN_ADMINCP')) {
- $shownum = $showkbd = TRUE;
- $lang['prev'] = '‹‹';
- $lang['next'] = '››';
- } else {
- $shownum = $showkbd = FALSE;
- $lang['prev'] = ' ';
- $lang['next'] = $GLOBALS['dlang']['nextpage'];
- }
-
- $multipage = '';
- $mpurl .= strpos($mpurl, '?') ? '&' : '?';
- $realpages = 1;
- if($num > $perpage) {
- $offset = 2;
-
- $realpages = @ceil($num / $perpage);
- $pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;
-
- if($page > $pages) {
- $from = 1;
- $to = $pages;
- } else {
- $from = $curpage - $offset;
- $to = $from + $page - 1;
- if($from < 1) {
- $to = $curpage + 1 - $from;
- $from = 1;
- if($to - $from < $page) {
- $to = $page;
- }
- } elseif($to > $pages) {
- $from = $pages - $page + 1;
- $to = $pages;
- }
- }
-
- $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="'.$mpurl.'page=1" class="first"'.$ajaxtarget.'>1 ...</a>' : '').
- ($curpage > 1 && !$simple ? '<a href="'.$mpurl.'page='.($curpage - 1).'" class="prev"'.$ajaxtarget.'>'.$lang['prev'].'</a>' : '');
- for($i = $from; $i <= $to; $i++) {
- $multipage .= $i == $curpage ? '<strong>'.$i.'</strong>' :
- '<a href="'.$mpurl.'page='.$i.($ajaxtarget && $i == $pages && $autogoto ? '#' : '').'"'.$ajaxtarget.'>'.$i.'</a>';
- }
-
- $multipage .= ($to < $pages ? '<a href="'.$mpurl.'page='.$pages.'" class="last"'.$ajaxtarget.'>... '.$realpages.'</a>' : '').
- ($curpage < $pages && !$simple ? '<a href="'.$mpurl.'page='.($curpage + 1).'" class="next"'.$ajaxtarget.'>'.$lang['next'].'</a>' : '').
- ($showkbd && !$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3" onkeydown="if(event.keyCode==13) {window.location=\''.$mpurl.'page=\'+this.value; return false;}" /></kbd>' : '');
-
- $multipage = $multipage ? '<div class="pages">'.($shownum && !$simple ? '<em> '.$num.' </em>' : '').$multipage.'</div>' : '';
- }
- $maxpage = $realpages;
- return $multipage;
- }
-
- function output() {
- if(defined('DISCUZ_OUTPUTED')) {
- return;
- }
- define('DISCUZ_OUTPUTED', 1);
- global $sid, $transsidstatus, $rewritestatus, $ftp, $advlist, $thread, $inajax, $forumdomains, $binddomains, $indexname;
-
- if($advlist && !defined('IN_ADMINCP') && !$inajax) {
- include template('adv');
- }
- funcstat();
- stat_code();
-
- if(($transsidstatus = empty($GLOBALS['_DCOOKIE']['sid']) && $transsidstatus) || $rewritestatus || ($binddomains && $forumdomains)) {
- $content = ob_get_contents();
- if($transsidstatus) {
- $searcharray = array
- (
- "/\<a(\s*[^\>]+\s*)href\=([\"|\']?)([^\"\'\s]+)/ies",
- "/(\<form.+?\>)/is"
- );
- $replacearray = array
- (
- "transsid('\\3','<a\\1href=\\2')",
- "\\1\n<input type=\"hidden\" name=\"sid\" value=\"$sid\" />"
- );
- $content = preg_replace($searcharray, $replacearray, $content);
- }
-
- if($binddomains && $forumdomains) {
- $bindsearcharray = $bindreplacearray = array();
- $indexname = basename($indexname);
- foreach($forumdomains as $fid => $domain) {
- $bindsearcharray[] = "href=\"forumdisplay.php?fid=$fid&";
- $bindreplacearray[] = 'href="http://'.$domain.'/'.$indexname.'?';
- $bindsearcharray[] = "href=\"forumdisplay.php?fid=$fid";
- $bindreplacearray[] = 'href="http://'.$domain.'/'.$indexname;
- }
- $content = str_replace($bindsearcharray, $bindreplacearray, $content);
- }
-
- if($rewritestatus) {
- $searcharray = $replacearray = array();
- if($rewritestatus & 1) {
- $searcharray[] = "/\<a href\=\"forumdisplay\.php\?fid\=(\d+)(&page\=(\d+))?\"([^\>]*)\>/e";
- $replacearray[] = "rewrite_forum('\\1', '\\3', '\\4')";
- }
- if($rewritestatus & 2) {
- $searcharray[] = "/\<a href\=\"viewthread\.php\?tid\=(\d+)(&extra\=page\%3D(\d+))?(&page\=(\d+))?\"([^\>]*)\>/e";
- $replacearray[] = "rewrite_thread('\\1', '\\5', '\\3', '\\6')";
- }
- if($rewritestatus & 4) {
- $searcharray[] = "/\<a href\=\"space\.php\?(uid\=(\d+)|username\=([^&]+?))\"([^\>]*)\>/e";
- $replacearray[] = "rewrite_space('\\2', '\\3', '\\4')";
- }
- if($rewritestatus & 8) {
- $searcharray[] = "/\<a href\=\"tag\.php\?name\=([^&]+?)\"([^\>]*)\>/e";
- $replacearray[] = "rewrite_tag('\\1', '\\2')";
- }
- $content = preg_replace($searcharray, $replacearray, $content);
- }
-
- ob_end_clean();
- $GLOBALS['gzipcompress'] ? ob_start('ob_gzhandler') : ob_start();
-
- echo $content;
- }
- if($ftp['connid']) {
- @ftp_close($ftp['connid']);
- }
- $ftp = array();
-
- if(defined('CACHE_FILE') && CACHE_FILE && !defined('CACHE_FORBIDDEN')) {
- global $cachethreaddir;
- if(diskfreespace(DISCUZ_ROOT.'./'.$cachethreaddir) > 1000000) {
- if($fp = @fopen(CACHE_FILE, 'w')) {
- flock($fp, LOCK_EX);
- fwrite($fp, empty($content) ? ob_get_contents() : $content);
- }
- @fclose($fp);
- chmod(CACHE_FILE, 0777);
- }
- }
- }
-
- function periodscheck($periods, $showmessage = 1) {
- global $timestamp, $disableperiodctrl, $_DCACHE, $banperiods;
-
- if(!$disableperiodctrl && $_DCACHE['settings'][$periods]) {
- $now = gmdate('G.i', $timestamp + $_DCACHE['settings']['timeoffset'] * 3600);
- foreach(explode("\r\n", str_replace(':', '.', $_DCACHE['settings'][$periods])) as $period) {
- list($periodbegin, $periodend) = explode('-', $period);
- if(($periodbegin > $periodend && ($now >= $periodbegin || $now < $periodend)) || ($periodbegin < $periodend && $now >= $periodbegin && $now < $periodend)) {
- $banperiods = str_replace("\r\n", ', ', $_DCACHE['settings'][$periods]);
- if($showmessage) {
- showmessage('period_nopermission', NULL, 'NOPERM');
- } else {
- return TRUE;
- }
- }
- }
- }
- return FALSE;
- }
-
- function quescrypt($questionid, $answer) {
- return $questionid > 0 && $answer != '' ? substr(md5($answer.md5($questionid)), 16, 8) : '';
- }
-
- function rewrite_thread($tid, $page = 0, $prevpage = 0, $extra = '') {
- return '<a href="thread-'.$tid.'-'.($page ? $page : 1).'-'.($prevpage && !IS_ROBOT ? $prevpage : 1).'.html"'.stripslashes($extra).'>';
- }
-
- function rewrite_forum($fid, $page = 0, $extra = '') {
- return '<a href="forum-'.$fid.'-'.($page ? $page : 1).'.html"'.stripslashes($extra).'>';
- }
-
- function rewrite_space($uid, $username, $extra = '') {
- $GLOBALS['rewritecompatible'] && $username = rawurlencode($username);
- return '<a href="space-'.($uid ? 'uid-'.$uid : 'username-'.$username).'.html"'.stripslashes($extra).'>';
- }
-
- function rewrite_tag($name, $extra = '') {
- $GLOBALS['rewritecompatible'] && $name = rawurlencode($name);
- return '<a href="tag-'.$name.'.html"'.stripslashes($extra).'>';
- }
-
- function random($length, $numeric = 0) {
- PHP_VERSION < '4.2.0' ? mt_srand((double)microtime() * 1000000) : mt_srand();
- $seed = base_convert(md5(print_r($_SERVER, 1).microtime()), 16, $numeric ? 10 : 35);
- $seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed));
- $hash = '';
- $max = strlen($seed) - 1;
- for($i = 0; $i < $length; $i++) {
- $hash .= $seed[mt_rand(0, $max)];
- }
- return $hash;
- }
-
- function request($cachekey, $fid = 0, $type = 0, $return = 0) {
- global $timestamp, $_DCACHE;
- $datalist = '';
- if($fid && CURSCRIPT == 'forumdisplay') {
- $specialfid = $GLOBALS['forum']['fid'];
- $key = $cachekey = empty($GLOBALS['infosidestatus']['f'.$specialfid][$type]) ? $GLOBALS['infosidestatus'][$type] : $GLOBALS['infosidestatus']['f'.$specialfid][$type];
- $cachekey .= '_fid'.$specialfid;
- } else {
- $specialfid = 0;
- if(!$type) {
- $key = $cachekey;
- } else {
- $key = $cachekey = $cachekey[$type];
- }
- }
- $cachefile = DISCUZ_ROOT.'./forumdata/cache/request_'.md5($cachekey).'.php';
- if(((@!include($cachefile)) || $expiration < $timestamp) && (!file_exists($cachefile.'.lock') || $timestamp - filemtime($cachefile.'.lock') > 3600)) {
- include_once DISCUZ_ROOT.'./forumdata/cache/cache_request.php';
- require_once DISCUZ_ROOT.'./include/request.func.php';
- parse_str($_DCACHE['request'][$key]['url'], $requestdata);
- $datalist = parse_request($requestdata, $cachefile, 0, $specialfid, $key);
- }
- if(!empty($nocachedata)) {
- include_once DISCUZ_ROOT.'./forumdata/cache/cache_request.php';
- require_once DISCUZ_ROOT.'./include/request.func.php';
- foreach($nocachedata as $key => $v) {
- $cachefile = DISCUZ_ROOT.'./forumdata/cache/request_'.md5($key).'.php';
- if(!file_exists($cachefile.'.lock')) {
- parse_str($_DCACHE['request'][$key]['url'], $requestdata);
- $datalist = str_replace($v, parse_request($requestdata, $cachefile, 0, $specialfid, $key), $datalist);
- }
- }
- }
- if(!$return) {
- echo $datalist;
- } else {
- return $datalist;
- }
- }
-
- function sendmail($email_to, $email_subject, $email_message, $email_from = '') {
- extract($GLOBALS, EXTR_SKIP);
- require DISCUZ_ROOT.'./include/sendmail.inc.php';
- }
-
- function sendnotice($toid, $message, $type, $extraid = 0, $actor = array(), $uselang = 1) {
- if(!$toid || $message === '') {
- return;
- }
- extract($GLOBALS, EXTR_SKIP);
- if($uselang) {
- include language('notice');
- if(isset($language[$message])) {
- eval("\$message = addslashes(\"".$language[$message]."\");");
- }
- }
-
- $typeid = $prompts[$type]['id'];
- if(!$typeid) {
- return;
- }
- $toids = explode(',', $toid);
- foreach($toids as $toid) {
- $keysadd = $valuesadd = $statnewnotice = '';
- if($extraid && $actor) {
- $promptmsg = $db->fetch_first("SELECT actor FROM {$tablepre}promptmsgs WHERE uid='$toid' AND typeid='$typeid' AND extraid='$extraid' LIMIT 1");
- if($promptmsg) {
- list($actorcount, $actors) = explode("\t", $promptmsg['actor']);
- $actorarray = array_unique(explode(',', $actors));
- if(!in_array($actor['user'], $actorarray)) {
- array_unshift($actorarray, $actor['user']);
- $actors = implode(',', array_slice($actorarray, 0, $actor['maxusers']));
- $actorcount++;
- }
- $statnewnotice = 1;
- $db->query("UPDATE {$tablepre}promptmsgs SET actor='".addslashes($actorcount."\t".$actors)."', dateline='$timestamp', new='1' WHERE uid='$toid' AND typeid='$typeid' AND extraid='$extraid'");
- } else {
- $statnewnotice = 1;
- $db->query("INSERT INTO {$tablepre}promptmsgs (typeid, uid, new, dateline, message, extraid, actor) VALUES ('$typeid', '$toid', '1', '$timestamp', '$message', '$extraid', '".addslashes("1\t".$actor['user'])."')");
- }
- } else {
- $statnewnotice = 1;
- $db->query("INSERT INTO {$tablepre}promptmsgs (typeid, uid, new, dateline, message) VALUES ('$typeid', '$toid', '1', '$timestamp', '$message')");
- }
- if($statnewnotice) {
- write_statlog('', 'action=counttype&typeid='.$typeid, '', '', 'notice.php');
- }
- $count = $db->result_first("SELECT count(*) FROM {$tablepre}promptmsgs WHERE uid='$toid' AND typeid='$typeid' AND new='1'");
- updateprompt($type, $toid, $count);
- }
- }
-
- function sendpm($toid, $subject, $message, $fromid = '') {
- if($fromid === '') {
- require_once DISCUZ_ROOT.'./uc_client/client.php';
- $fromid = $discuz_uid;
- }
- if($fromid) {
- uc_pm_send($fromid, $toid, $subject, $message);
- } else {
- global $promptkeys;
- if(in_array($subject, $promptkeys)) {
- $type = $subject;
- } else {
- extract($GLOBALS, EXTR_SKIP);
- require_once DISCUZ_ROOT.'./include/discuzcode.func.php';
- eval("\$message = addslashes(\"".$message."\");");
- $type = 'systempm';
- $message = '<div>'.$subject.' {time}<br />'.discuzcode($message, 1, 0).'</div>';
- }
- sendnotice($toid, $message, $type);
- }
- }
-
- function showmessage($message, $url_forward = '', $extra = '', $forwardtype = 0) {
- extract($GLOBALS, EXTR_SKIP);
- global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist;
- define('CACHE_FORBIDDEN', TRUE);
- $hookscriptmessage = $show_message = $message;$messagehandle = 0;
- $msgforward = unserialize($_DCACHE['settings']['msgforward']);
- $refreshtime = intval($msgforward['refreshtime']);
- $refreshtime = empty($forwardtype) ? $refreshtime : ($refreshtime ? $refreshtime : 3);
- $msgforward['refreshtime'] = $refreshtime * 1000;
- $url_forward = empty($url_forward) ? '' : (empty($_DCOOKIE['sid']) && $transsidstatus ? transsid($url_forward) : $url_forward);
- $seccodecheck = $seccodestatus & 2;
- if($_DCACHE['settings']['funcsiteid'] && $_DCACHE['settings']['funckey'] && $funcstatinfo && !IS_ROBOT) {
- $statlogfile = DISCUZ_ROOT.'./forumdata/funcstat.log';
- if($fp = @fopen($statlogfile, 'a')) {
- @flock($fp, 2);
- if(is_array($funcstatinfo)) {
- $funcstatinfo = array_unique($funcstatinfo);
- foreach($funcstatinfo as $funcinfo) {
- fwrite($fp, funcstat_query($funcinfo, $message)."\n");
- }
- } else {
- fwrite($fp, funcstat_query($funcstatinfo, $message)."\n");
- }
- fclose($fp);
- $funcstatinfo = $GLOBALS['funcstatinfo'] = '';
- }
- }
-
- if(!defined('STAT_DISABLED') && STAT_ID > 0 && !IS_ROBOT) {
- write_statlog($message);
- }
-
- if($url_forward && (!empty($quickforward) || empty($inajax) && $msgforward['quick'] && $msgforward['messages'] && @in_array($message, $msgforward['messages']))) {
- updatesession();
- dheader("location: ".str_replace('&', '&', $url_forward));
- }
- if(!empty($infloat)) {
- if($extra) {
- $messagehandle = $extra;
- }
- $extra = '';
- }
- if(in_array($extra, array('HALTED', 'NOPERM'))) {
- $discuz_action = 254;
- } else {
- $discuz_action = 255;
- }
-
- include language('messages');
-
- $vars = explode(':', $message);
- if(count($vars) == 2 && isset($scriptlang[$vars[0]][$vars[1]])) {
- eval("\$show_message = \"".str_replace('"', '\"', $scriptlang[$vars[0]][$vars[1]])."\";");
- } elseif(isset($language[$message])) {
- $pre = $inajax ? 'ajax_' : '';
- eval("\$show_message = \"".(isset($language[$pre.$message]) ? $language[$pre.$message] : $language[$message])."\";");
- unset($pre);
- }
-
- if(empty($infloat)) {
- $show_message .= $url_forward && empty($inajax) ? '<script>setTimeout("window.location.href =\''.$url_forward.'\';", '.$msgforward['refreshtime'].');</script>' : '';
- } elseif($handlekey) {
- $show_message = str_replace("'", "\'", $show_message);
- if($url_forward) {
- $show_message = "<script type=\"text/javascript\" reload=\"1\">\nif($('return_$handlekey')) $('return_$handlekey').className = 'onright';\nif(typeof submithandle_$handlekey =='function') {submithandle_$handlekey('$url_forward', '$show_message');} else {location.href='$url_forward'}\n</script>";
- } else {
- $show_message .= "<script type=\"text/javascript\" reload=\"1\">\nif(typeof messagehandle_$handlekey =='function') {messagehandle_$handlekey('$messagehandle', '$show_message');}\n</script>";
- }
- }
-
- if($advlist = array_merge($globaladvs ? $globaladvs['type'] : array(), $redirectadvs ? $redirectadvs['type'] : array())) {
- $advitems = ($globaladvs ? $globaladvs['items'] : array()) + ($redirectadvs ? $redirectadvs['items'] : array());
- foreach($advlist AS $type => $redirectadvs) {
- $advlist[$type] = $advitems[$redirectadvs[array_rand($redirectadvs)]];
- }
- }
-
- if($extra == 'NOPERM') {
- include template('nopermission');
- } else {
- include template('showmessage');
- }
- dexit();
- }
-
- function showmessagenoperm($type, $fid) {
- include DISCUZ_ROOT.'./forumdata/cache/cache_nopermission.php';
- include DISCUZ_ROOT.'./forumdata/cache/cache_usergroups.php';
- $v = $noperms[$fid][$type][$GLOBALS['groupid']][0];
- $gids = $noperms[$fid][$type][$GLOBALS['groupid']][1];
- $comma = $GLOBALS['permgroups'] = '';
- foreach($gids as $gid) {
- if($gid && $_DCACHE['usergroups'][$gid]) {
- $GLOBALS['permgroups'] .= $comma.$_DCACHE['usergroups'][$gid]['grouptitle'];
- $comma = ', ';
- }
- }
- showmessage($type.'_'.$v.'_nopermission', NULL, 'NOPERM');
- }
-
- function site() {
- return $_SERVER['HTTP_HOST'];
- }
-
- function strexists($haystack, $needle) {
- return !(strpos($haystack, $needle) === FALSE);
- }
-
- function seccodeconvert(&$seccode) {
- global $seccodedata, $charset;
- $seccode = substr($seccode, -6);
- if($seccodedata['type'] == 1) {
- include_once language('seccode');
- $len = strtoupper($charset) == 'GBK' ? 2 : 3;
- $code = array(substr($seccode, 0, 3), substr($seccode, 3, 3));
- $seccode = '';
- for($i = 0; $i < 2; $i++) {
- $seccode .= substr($lang['chn'], $code[$i] * $len, $len);
- }
- return;
- } elseif($seccodedata['type'] == 3) {
- $s = sprintf('%04s', base_convert($seccode, 10, 20));
- $seccodeunits = 'CEFHKLMNOPQRSTUVWXYZ';
- } else {
- $s = sprintf('%04s', base_convert($seccode, 10, 24));
- $seccodeunits = 'BCEFGHJKMPQRTVWXY2346789';
- }
- $seccode = '';
- for($i = 0; $i < 4; $i++) {
- $unit = ord($s{$i});
- $seccode .= ($unit >= 0x30 && $unit <= 0x39) ? $seccodeunits[$unit - 0x30] : $seccodeunits[$unit - 0x57];
- }
- }
-
- function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {
- if(empty($GLOBALS[$var])) {
- return FALSE;
- } else {
- global $_SERVER, $seclevel, $seccode, $seccodedata, $seccodeverify, $secanswer, $_DCACHE, $_DCOOKIE, $timestamp, $discuz_uid;
- if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && $GLOBALS['formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||
- preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {
- if($seccodecheck) {
- if(!$seclevel) {
- $key = $seccodedata['type'] != 3 ? '' : $_DCACHE['settings']['authkey'].date('Ymd');
- list($seccode, $expiration, $seccodeuid) = explode("\t", authcode($_DCOOKIE['secc'], 'DECODE', $key));
- if($seccodeuid != $discuz_uid || $timestamp - $expiration > 600) {
- showmessage('submit_seccode_invalid');
- }
- dsetcookie('secc', '');
- } else {
- $tmp = substr($seccode, 0, 1);
- }
- seccodeconvert($seccode);
- if(strtoupper($seccodeverify) != $seccode) {
- showmessage('submit_seccode_invalid');
- }
- $seclevel && $seccode = random(6, 1) + $tmp * 1000000;
- }
- if($secqaacheck) {
- if(!$seclevel) {
- list($seccode, $expiration, $seccodeuid) = explode("\t", authcode($_DCOOKIE['secq'], 'DECODE'));
- if($seccodeuid != $discuz_uid || $timestamp - $expiration > 600) {
- showmessage('submit_secqaa_invalid');
- }
- dsetcookie('secq', '');
- }
- require_once DISCUZ_ROOT.'./forumdata/cache/cache_secqaa.php';
- if(md5($secanswer) != $_DCACHE['secqaa'][substr($seccode, 0, 1)]['answer']) {
- showmessage('submit_secqaa_invalid');
- }
- $seclevel && $seccode = random(1, 1) * 1000000 + substr($seccode, -6);
- }
- return TRUE;
- } else {
- showmessage('submit_invalid');
- }
- }
- }
-
- function template($file, $templateid = 0, $tpldir = '') {
- global $inajax, $hookscript;
- if(strexists($file, ':')) {
- list($templateid, $file) = explode(':', $file);
- $tpldir = './plugins/'.$templateid.'/templates';
- }
- $file .= $inajax && ($file == 'header' || $file == 'footer') ? '_ajax' : '';
- $tpldir = $tpldir ? $tpldir : TPLDIR;
- $templateid = $templateid ? $templateid : TEMPLATEID;
- $tplfile = DISCUZ_ROOT.'./'.$tpldir.'/'.$file.'.htm';
- $filebak = $file;
- $file == 'header' && CURSCRIPT && $file = 'header_'.CURSCRIPT;
- $objfile = DISCUZ_ROOT.'./forumdata/templates/'.STYLEID.'_'.$templateid.'_'.$file.'.tpl.php';
- if($templateid != 1 && !file_exists($tplfile)) {
- $tplfile = DISCUZ_ROOT.'./templates/default/'.$filebak.'.htm';
- }
- @checktplrefresh($tplfile, $tplfile, filemtime($objfile), $templateid, $tpldir);
-
- return $objfile;
- }
-
- function transsid($url, $tag = '', $wml = 0) {
- global $sid;
- $tag = stripslashes($tag);
- if(!$tag || (!preg_match("/^(http:\/\/|mailto:|#|javascript)/i", $url) && !strpos($url, 'sid='))) {
- if($pos = strpos($url, '#')) {
- $urlret = substr($url, $pos);
- $url = substr($url, 0, $pos);
- } else {
- $urlret = '';
- }
- $url .= (strpos($url, '?') ? ($wml ? '&' : '&') : '?').'sid='.$sid.$urlret;
- }
- return $tag.$url;
- }
-
- function typeselect($curtypeid = 0) {
- if($threadtypes = $GLOBALS['forum']['threadtypes']) {
- $html = '<select name="typeid" id="typeid"><option value="0"> </option>';
- foreach($threadtypes['types'] as $typeid => $name) {
- $html .= '<option value="'.$typeid.'" '.($curtypeid == $typeid ? 'selected' : '').'>'.strip_tags($name).'</option>';
- }
- $html .= '</select>';
- return $html;
- } else {
- return '';
- }
- }
-
- function sortselect($cursortid = 0, $modelid = 0, $onchange = '') {
- global $fid, $sid, $extra;
- if($threadsorts = $GLOBALS['forum']['threadsorts']) {
- $onchange = $onchange ? $onchange : "onchange=\"ajaxget('post.php?action=threadsorts&sortid='+this.options[this.selectedIndex].value+'&fid=$fid&sid=$sid', 'threadsorts', 'threadsortswait')\"";
- $selecthtml = '';
- foreach($threadsorts['types'] as $sortid => $name) {
- $sorthtml = '<option value="'.$sortid.'" '.($cursortid == $sortid ? 'selected="selected"' : '').' class="special">'.strip_tags($name).'</option>';
- $selecthtml .= $modelid ? ($threadsorts['modelid'][$sortid] == $modelid ? $sorthtml : '') : $sorthtml;
- }
- $hiddeninput = $cursortid ? '<input type="hidden" name="sortid" value="'.$cursortid.'" />' : '';
- $html = '<select name="sortid" '.$onchange.'><option value="0"> </option>'.$selecthtml.'</select><span id="threadsortswait"></span>'.$hiddeninput;
- return $html;
- } else {
- return '';
- }
- }
-
- function updatecredits($uids, $creditsarray, $coef = 1, $extrasql = '') {
- if($uids && ((!empty($creditsarray) && is_array($creditsarray)) || $extrasql)) {
- global $db, $tablepre, $discuz_uid, $creditnotice, $cookiecredits;
- $self = $creditnotice && $uids == $discuz_uid;
- if($self && !isset($cookiecredits)) {
- $cookiecredits = !empty($_COOKIE['discuz_creditnotice']) ? explode('D', $_COOKIE['discuz_creditnotice']) : array_fill(0, 9, 0);
- }
- $creditsadd = $comma = '';
- foreach($creditsarray as $id => $addcredits) {
- $creditsadd .= $comma.'extcredits'.$id.'=extcredits'.$id.'+('.intval($addcredits).')*('.$coef.')';
- $comma = ', ';
- if($self) {
- $cookiecredits[$id] += intval($addcredits) * $coef;
- }
- }
- if($self) {
- dsetcookie('discuz_creditnotice', implode('D', $cookiecredits).'D'.$discuz_uid, 43200, 0);
- }
-
- if($creditsadd || $extrasql) {
- $db->query("UPDATE {$tablepre}members SET $creditsadd ".($creditsadd && $extrasql ? ', ' : '')." $extrasql WHERE uid IN ('$uids')", 'UNBUFFERED');
- }
- }
- }
-
- function updatesession() {
- if(!empty($GLOBALS['sessionupdated'])) {
- return TRUE;
- }
-
- global $db, $tablepre, $sessionexists, $sessionupdated, $sid, $onlineip, $discuz_uid, $discuz_user, $timestamp, $lastactivity, $seccode,
- $pvfrequence, $spageviews, $lastolupdate, $oltimespan, $onlinehold, $groupid, $styleid, $invisible, $discuz_action, $fid, $tid;
-
- $fid = intval($fid);
- $tid = intval($tid);
-
- if($oltimespan && $discuz_uid && $lastactivity && $timestamp - ($lastolupdate ? $lastolupdate : $lastactivity) > $oltimespan * 60) {
- $lastolupdate = $timestamp;
- $db->query("UPDATE {$tablepre}onlinetime SET total=total+'$oltimespan', thismonth=thismonth+'$oltimespan', lastupdate='$timestamp' WHERE uid='$discuz_uid' AND lastupdate<='".($timestamp - $oltimespan * 60)."'");
- if(!$db->affected_rows()) {
- $db->query("INSERT INTO {$tablepre}onlinetime (uid, thismonth, total, lastupdate)
- VALUES ('$discuz_uid', '$oltimespan', '$oltimespan', '$timestamp')", 'SILENT');
- }
- } else {
- $lastolupdate = intval($lastolupdate);
- }
-
- if($sessionexists == 1) {
- if($pvfrequence && $discuz_uid) {
- if($spageviews >= $pvfrequence) {
- $pageviewsadd = ', pageviews=\'0\'';
- $db->query("UPDATE {$tablepre}members SET pageviews=pageviews+'$spageviews' WHERE uid='$discuz_uid'", 'UNBUFFERED');
- } else {
- $pageviewsadd = ', pageviews=pageviews+1';
- }
- } else {
- $pageviewsadd = '';
- }
- $db->query("UPDATE {$tablepre}sessions SET uid='$discuz_uid', username='$discuz_user', groupid='$groupid', styleid='$styleid', invisible='$invisible', action='$discuz_action', lastactivity='$timestamp', lastolupdate='$lastolupdate', seccode='$seccode', fid='$fid', tid='$tid' $pageviewsadd WHERE sid='$sid'");
- } else {
- $ips = explode('.', $onlineip);
-
- $db->query("DELETE FROM {$tablepre}sessions WHERE sid='$sid' OR lastactivity<($timestamp-$onlinehold) OR ('$discuz_uid'<>'0' AND uid='$discuz_uid') OR (uid='0' AND ip1='$ips[0]' AND ip2='$ips[1]' AND ip3='$ips[2]' AND ip4='$ips[3]' AND lastactivity>$timestamp-60)");
- $db->query("INSERT INTO {$tablepre}sessions (sid, ip1, ip2, ip3, ip4, uid, username, groupid, styleid, invisible, action, lastactivity, lastolupdate, seccode, fid, tid)
- VALUES ('$sid', '$ips[0]', '$ips[1]', '$ips[2]', '$ips[3]', '$discuz_uid', '$discuz_user', '$groupid', '$styleid', '$invisible', '$discuz_action', '$timestamp', '$lastolupdate', '$seccode', '$fid', '$tid')", 'SILENT');
- if($discuz_uid && $timestamp - $lastactivity > 21600) {
- if($oltimespan && $timestamp - $lastactivity > 86400) {
- $query = $db->query("SELECT total FROM {$tablepre}onlinetime WHERE uid='$discuz_uid'");
- $oltimeadd = ', oltime='.round(intval($db->result($query, 0)) / 60);
- } else {
- $oltimeadd = '';
- }
- $db->query("UPDATE {$tablepre}members SET lastip='$onlineip', lastvisit=lastactivity, lastactivity='$timestamp' $oltimeadd WHERE uid='$discuz_uid'", 'UNBUFFERED');
- }
- }
-
- $sessionupdated = 1;
- }
- function updatemodworks($modaction, $posts = 1) {
- global $modworkstatus, $db, $tablepre, $discuz_uid, $timestamp, $_DCACHE;
- $today = gmdate('Y-m-d', $timestamp + $_DCACHE['settings']['timeoffset'] * 3600);
- if($modworkstatus && $modaction && $posts) {
- $db->query("UPDATE {$tablepre}modworks SET count=count+1, posts=posts+'$posts' WHERE uid='$discuz_uid' AND modaction='$modaction' AND dateline='$today'");
- if(!$db->affected_rows()) {
- $db->query("INSERT INTO {$tablepre}modworks (uid, modaction, dateline, count, posts) VALUES ('$discuz_uid', '$modaction', '$today', 1, '$posts')");
- }
- }
- }
-
- function updateannouncements($threadarray) {
- global $db, $tablepre, $discuz_user, $timestamp;
- if($threadarray && is_array($threadarray)) {
- $endtime = $timestamp + 3600;
- foreach($threadarray as $thread) {
- $db->query("INSERT INTO {$tablepre}announcements (author, subject, type, starttime, endtime, message) VALUES ('$discuz_user', '$thread[subject]', 1, '$timestamp', '$endtime', '$thread[url]')");
- }
- }
- }
-
- function writelog($file, $log) {
- global $timestamp, $_DCACHE;
- $yearmonth = gmdate('Ym', $timestamp + $_DCACHE['settings']['timeoffset'] * 3600);
- $logdir = DISCUZ_ROOT.'./forumdata/logs/';
- $logfile = $logdir.$yearmonth.'_'.$file.'.php';
- if(@filesize($logfile) > 2048000) {
- $dir = opendir($logdir);
- $length = strlen($file);
- $maxid = $id = 0;
- while($entry = readdir($dir)) {
- if(strexists($entry, $yearmonth.'_'.$file)) {
- $id = intval(substr($entry, $length + 8, -4));
- $id > $maxid && $maxid = $id;
- }
- }
- closedir($dir);
-
- $logfilebak = $logdir.$yearmonth.'_'.$file.'_'.($maxid + 1).'.php';
- @rename($logfile, $logfilebak);
- }
- if($fp = @fopen($logfile, 'a')) {
- @flock($fp, 2);
- $log = is_array($log) ? $log : array($log);
- foreach($log as $tmp) {
- fwrite($fp, "<?PHP exit;?>\t".str_replace(array('<?', '?>'), '', $tmp)."\n");
- }
- fclose($fp);
- }
- }
-
- function wipespecial($str) {
- return str_replace(array( "\n", "\r", '..'), array('', '', ''), $str);
- }
-
- function discuz_uc_avatar($uid, $size = '', $returnsrc = FALSE) {
- if($uid > 0) {
- $size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
- $uid = abs(intval($uid));
- if(empty($GLOBALS['avatarmethod'])) {
- return $returnsrc ? UC_API.'/avatar.php?uid='.$uid.'&size='.$size : '<img src="'.UC_API.'/avatar.php?uid='.$uid.'&size='.$size.'" />';
- } else {
- $uid = sprintf("%09d", $uid);
- $dir1 = substr($uid, 0, 3);
- $dir2 = substr($uid, 3, 2);
- $dir3 = substr($uid, 5, 2);
- $file = UC_API.'/data/avatar/'.$dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).'_avatar_'.$size.'.jpg';
- return $returnsrc ? $file : '<img src="'.$file.'" onerror="this.onerror=null;this.src=\''.UC_API.'/images/noavatar_'.$size.'.gif\'" />';
- }
- } else {
- $file = $GLOBALS['boardurl'].IMGDIR.'/syspm.gif';
- return $returnsrc ? $file : '<img src="'.$file.'" />';
- }
- }
-
-
- function loadmultiserver($type = '') {
- global $db, $dbcharset, $multiserver;
- $type = empty($type) && defined('CURSCRIPT') ? CURSCRIPT : $type;
- static $sdb = null;
- if($type && !empty($multiserver['enable'][$type])) {
- if(!is_a($sdb, 'dbstuff')) $sdb = new dbstuff();
- if($sdb->link > 0) {
- return $sdb;
- } elseif($sdb->link === null && (!empty($multiserver['slave']['dbhost']) || !empty($multiserver[$type]['dbhost']))) {
- $setting = !empty($multiserver[$type]['host']) ? $multiserver[$type] : $multiserver['slave'];
- $sdb->connect($setting['dbhost'], $setting['dbuser'], $setting['dbpw'], $setting['dbname'], $setting['pconnect'], false, $dbcharset);
- if($sdb->link) {
- return $sdb;
- } else {
- $sdb->link = -32767;
- }
- }
- }
- return $db;
- }
-
- function swapclass($classname) {
- global $swapc;
- $swapc = isset($swapc) && $swapc != $classname ? $classname : '';
- return $swapc;
- }
-
- function hookscript($script, $type = 'funcs', $param = array()) {
- global $hookscript, $pluginhooks, $pluginclasses, $pluginlangs, $adminid, $scriptlang;
- foreach($hookscript[$script]['module'] as $identifier => $include) {
- $hooksadminid[$identifier] = !$hookscript[$script]['adminid'][$identifier] || ($hookscript[$script]['adminid'][$identifier] && $adminid > 0 && $hookscript[$script]['adminid'][$identifier] >= $adminid);
- if($hooksadminid[$identifier]) {
- if(@in_array($identifier, $pluginlangs)) {
- @include_once DISCUZ_ROOT.'./forumdata/cache/cache_scriptlang.php';
- }
- @include_once DISCUZ_ROOT.'./plugins/'.$include.'.class.php';
- }
- }
- if(is_array($hookscript[$script][$type])) {
- foreach($hookscript[$script][$type] as $hookkey => $hookfuncs) {
- foreach($hookfuncs as $hookfunc) {
- if($hooksadminid[$hookfunc[0]]) {
- if(!isset($pluginclasses[$hookfunc[0]])) {
- eval('$pluginclasses[$hookfunc[0]] = new plugin_'.$hookfunc[0].';');
- }
- eval('$return = $pluginclasses[$hookfunc[0]]->'.$hookfunc[1].'($param);');
- if(is_array($return)) {
- foreach($return as $k => $v) {
- $pluginhooks[$hookkey][$k] .= $v;
- }
- } else {
- $pluginhooks[$hookkey] .= $return;
- }
- }
- }
- }
- }
- }
-
- function hookscriptoutput($tplfile) {
- global $hookscript, $hookscriptmessage;
- if(isset($hookscript['global']['module'])) {
- hookscript('global');
- }
- if(isset($hookscript[CURSCRIPT]['outputfuncs'])) {
- hookscript(CURSCRIPT, 'outputfuncs', array('template' => $tplfile, 'message' => $hookscriptmessage));
- }
- }
-
- function updateprompt($key, $uid, $number, $updatedb = 1) {
- global $db, $tablepre, $prompts;
- $prompts = $prompts ? $prompts : $GLOBALS['_DCACHE']['settings']['prompts'];
- if($updatedb) {
- if($number) {
- $db->query("REPLACE INTO {$tablepre}prompt (uid, typeid, number) VALUES ('$uid', '".$prompts[$key]['id']."', '$number')");
- $db->query("UPDATE {$tablepre}members SET prompt=prompt|1 WHERE uid='$uid'", 'UNBUFFERED');
- } else {
- $db->query("DELETE FROM {$tablepre}prompt WHERE uid='$uid' AND typeid='".$prompts[$key]['id']."'");
- if(!$db->result_first("SELECT count(*) FROM {$tablepre}prompt WHERE uid='$uid'")) {
- $db->query("UPDATE {$tablepre}members SET prompt=prompt^1 WHERE uid='$discuz_uid' AND prompt=prompt|1", 'UNBUFFERED');
- }
- }
- }
- return '$(\'prompt_'.$key.'\').innerHTML=\''.$prompts[$key]['name'].($number ? ' ('.$number.')\';$(\'prompt_'.$key.'\').parentNode.style.display=\'\';' : '\';');
- }
-
- function manyoulog($type, $uid, $action, $fuid = 0) {
- if(!$GLOBALS['my_status'] || !in_array($type, array('user', 'friend')) || !in_array($action, array('add', 'update', 'delete'))) {
- return;
- }
- $logfile = DISCUZ_ROOT.'./forumdata/logs/manyou_'.$type.'.log';
- if($fp = @fopen($logfile, 'a')) {
- @flock($fp, 2);
- $uids = !is_array($uid) ? array($uid) : $uid;
- $fuid = intval($fuid);
- foreach($uids as $uid) {
- fwrite($fp, "<?PHP exit;?>\t".$GLOBALS['timestamp']."\t".$uid."\t".$action.($fuid ? "\t".$fuid : '')."\n");
- }
- fclose($fp);
- }
- }
-
- function add_feed($arg, $data, $template = '') {
- global $tablepre, $db, $timestamp;
-
- $type = 'default';
- $fid = 0;
- $typeid = 0;
- $sortid = 0;
- $appid = '';
- $uid = 0;
- $username = '';
-
- extract($arg, EXTR_OVERWRITE);
-
- if(empty($data['title'])) {
- return false;
- }
-
- if($uid && in_array($type, array('thread_views', 'thread_replies', 'thread_rate', 'post_rate', 'user_credit', 'user_threads', 'user_posts', 'user_digest'))) {
-
- include language('notice');
-
- $title_template = $language[$type];
- $body_template = $language[$type];
- $noticemsg['title'] = transval($title_template, $data['title']);
- $noticemsg['body'] = transval($body_template, $data['body']);
-
- $message = $noticemsg['title'];
- if($noticemsg['body']) {
- $message .= '<br /><br />'.$noticemsg['body'];
- }
- if(in_array($type, array('thread_views', 'thread_replies', 'thread_rate', 'post_rate'))) {
- sendnotice($uid, $message, 'threads');
- } else {
- sendnotice($uid, $message, 'systempm');
- }
-
- }
-
- $db->query("INSERT INTO {$tablepre}feeds (type, fid, typeid, sortid, appid, uid, username, data, template, dateline)
- VALUES ('$type', '$fid', '$typeid', '$sortid', '$appid', '$uid', '$username', '".addslashes(serialize($data))."', '".addslashes(serialize($template))."', '$timestamp')");
- return $db->insert_id();
- }
-
- function get_feed($conf = array()) {
- global $tablepre, $db, $timestamp;
-
- $where = '1';
- $page_url = '';
- if(empty($conf['type'])) {
- $where .= " AND type != 'manyou'";
- } elseif($conf['type'] = trim($conf['type'])) {
- $where .= " AND type='$conf[type]'";
- $page_url .= "type={$conf[type]}&";
- }
- if($conf['fid'] = intval($conf['fid'])) {
- $where .= " AND fid='$conf[fid]'";
- $page_url .= "fid={$conf[fid]}&";
- }
- if($conf['typeid'] = intval($conf['typeid'])) {
- $where .= " AND typeid='$conf[typeid]'";
- $page_url .= "typeid={$conf[typeid]}&";
- }
- if($conf['sortid'] = intval($conf['sortid'])) {
- $where .= " AND sortid='$conf[sortid]'";
- $page_url .= "sortid={$conf[sortid]}&";
- }
- if(!empty($conf['uid']) && is_array($conf['uid'])) {
- $where .= " AND uid IN (".implodeids($conf['uid']).")";
- } elseif($conf['uid'] = intval($conf['uid'])) {
- $where .= " AND uid='$conf[uid]'";
- $page_url .= "uid={$conf[uid]}&";
- }
- if(!empty($conf['appid']) && is_array($conf['appid'])) {
- $where .= " AND appid IN (".implodeids($conf['appid']).")";
- }
-
- $conf['num'] = empty($conf['num']) ? 3 : intval($conf['num']);
- if($conf['multipage']) {
- $page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
- $start_limit = ($page - 1) * $conf['num'];
- } else {
- $start_limit = 0;
- }
-
- $sql = "SELECT * FROM {$tablepre}feeds WHERE $where ORDER BY feed_id DESC LIMIT $start_limit, $conf[num]";
-
- $nocache = true;
- if($conf['cachelife'] = intval($conf['cachelife'])) {
- $cache_file = DISCUZ_ROOT.'./forumdata/feedcaches/'.md5($sql);
- $nocache = !file_exists($cache_file) || (filemtime($cache_file) < $timestamp - $conf['cachelife']);
- }
-
- if($nocache) {
- include language('dz_feeds');
-
- $feedlist = array();
- $feedlist['data'] = array();
- if($conf['multipage']) {
- $feeds = $db->result_first("SELECT COUNT(*) FROM {$tablepre}feeds WHERE $where");
- $page_url = $page_url ? (strpos($conf['page_url'], '?') ? $conf['page_url'].'&'.$page_url : $conf['page_url'].'?'.$page_url) : $conf['page_url'];
- $feedlist['multipage'] = multi($feeds, $conf['num'], $page, $page_url);
- }
-
- $query = $db->query($sql);
- while($row = $db->fetch_array($query)) {
- $row['data'] = unserialize($row['data']);
- $row['template'] = empty($row['template']) ? array() : unserialize($row['template']);
- $title_template = empty($row['template']['title']) ? $language['feed_'.$row['type'].'_title'] : $row['template']['title'];
- $body_template = empty($row['template']['body']) ? $language['feed_'.$row['type'].'_body'] : $row['template']['body'];
-
- $feed = array();
- $feed['title'] = transval($title_template, $row['data']['title']);
- $feed['body'] = transval($body_template, $row['data']['body']);
- $feed['dbdateline'] = $row['dateline'];
- $feed['dateline'] = dgmdate($GLOBALS['timeformat'], $row['dateline'] + $GLOBALS['timeoffset'] * 3600);
- $feed['image'] = array();
- if(is_array($row['data']['image'])) foreach($row['data']['image'] as $val) {
- $feed['image'][] = '<a href="'.$val['link'].'" target="_blank"><img src="'.$val['src'].'" /></a>';
- }
- $feed['icon'] = 'images/feeds/'.$row['type'].'.gif';
- $feed['appid'] = $row['appid'];
- $feed['uid'] = $row['uid'];
- $feed['username'] = $row['username'];
- $feedlist['data'][$row['feed_id']] = $feed;
- }
- if($conf['cachelife']) {
- if($fp = @fopen($cache_file, 'w')) {
- flock($fp, LOCK_EX);
- fwrite($fp, serialize($feedlist));
- }
- @fclose($fp);
- @chmod(CACHE_FILE, 0777);
- }
- } else {
- $feedlist = unserialize(file_get_contents($cache_file));
- }
- return $feedlist;
- }
-
- function transval($template, $data) {
- if(empty($template) || empty($data)) return;
- $trans = array();
- foreach($data as $key => $val) {
- $trans['{'.$key.'}'] = $val;
- }
- return strtr($template, $trans);
- }
-
- function stat_code($scriptpath = '', $imgcode = 0) {
- if(!defined('STAT_DISABLED') && STAT_ID > 0 && !IS_ROBOT) {
- $statserver = 'http://stat.discuz.com/';
- if(!defined('CACHE_FILE') || $GLOBALS['discuz_uid']) {
- $url = $statserver.'stat.php?q='.rawurlencode(base64_encode(stat_query('', '', '', $scriptpath)));
- echo !$imgcode ? '<script type="text/javascript" src="'.$url.'" reload="1"></script>' : '<img src="'.$url.'&img=1" />';
- $statlogold = DISCUZ_ROOT.'./forumdata/stat.log';
- if(file_exists($statlogold)) {
- $statlogfile = DISCUZ_ROOT.'./forumdata/stat.log.'.random(3);
- @rename($statlogold, $statlogfile);
- if(($logs = @file($statlogfile)) !== FALSE && is_array($logs)) {
- foreach($logs as $log) {
- if($log) {
- $url = $statserver.'stat.php?q='.rawurlencode(base64_encode(trim($log)));
- echo !$imgcode ? '<script type="text/javascript" src="'.$url.'" reload="1"></script>' : '<img src="'.$url.'&img=1" />';
- }
- }
- }
- @unlink($statlogfile);
- }
- } else {
- echo '<script type="text/javascript" src="'.$statserver.'stat.php" reload="1"></script>';
- echo '<script text="text/javascript" reload="1">
- if(window.addEventListener) {
- window.addEventListener("load", function () {document.body.stat("", "'.$GLOBALS['BASESCRIPT'].'")}, false);
- } else if(document.attachEvent) {
- window.attachEvent("onload", function () {document.body.stat("", "'.$GLOBALS['BASESCRIPT'].'")});
- }
- </script>';
- }
- }
- }
-
- function stat_query($message = '', $query = '', $referer = '', $scriptpath = '', $script = '') {
- preg_match("/(Netscape|Lynx|Opera|Konqueror|MSIE|Firefox|Safari|Chrome)[\/\s]([\.\d]+)/", $_SERVER['HTTP_USER_AGENT'], $a);
- empty($a[1]) && preg_match("/Mozilla[\/\s]([\.\d]+)/", $_SERVER['HTTP_USER_AGENT'], $a);
- $query = array(
- 'siteid' => STAT_ID,
- 'timestamp' => $GLOBALS['timestamp'],
- 'sid' => $GLOBALS['sid'],
- 'uid' => $GLOBALS['discuz_uid'],
- 'ip' => $GLOBALS['onlineip'],
- 'script' => !$script ? $scriptpath.basename($_SERVER['SCRIPT_NAME']) : $script,
- 'query' => !$query ? $_SERVER['QUERY_STRING'] : $query,
- 'referer' => !$referer ? $_SERVER['HTTP_REFERER'] : $referer,
- 'message' => !$message ? '' : $message,
- 'succeed' => !$message ? '' : (strpos($message, 'succeed') !== FALSE ? 1 : 0),
- 'browser' => !empty($a[1]) ? $a[1].'/'.$a[2] : 'Other',
- );
- $s = '';
- foreach($query as $k => $v) {
- trim($v) !== '' && $s .= '&'.$k.'='.rawurlencode($v);
- }
- return substr($s, 1);
- }
-
- function write_statlog($message = '', $query = '', $referer = '', $scriptpath = '', $script = '') {
- if(defined('STAT_ID') && STAT_ID > 0) {
- $statlogfile = DISCUZ_ROOT.'./forumdata/stat.log';
- if($fp = @fopen($statlogfile, 'a')) {
- @flock($fp, 2);
- fwrite($fp, stat_query($message, $query, $referer, $scriptpath, $script)."\n");
- fclose($fp);
- }
- }
- }
-
- function funcstat($funcinfo = '', $scriptpath = '', $imgcode = 0) {
- global $_DCACHE, $funcstatinfo;
- $funcsiteid = $_DCACHE['settings']['funcsiteid'];
- $funckey = $_DCACHE['settings']['funckey'];
- $funcinfo = empty($funcinfo) ? $funcstatinfo : $funcinfo;
- if(is_array($funcinfo)) {
- $funcinfo = array_unique($funcinfo);
- foreach($funcinfo as $finfo) {
- funcstat($finfo);
- }
- } else {
- list($funcmark, $funcversion) = explode(',', $funcinfo);
- if($funcsiteid && $funckey && $funcmark && $funcversion && !IS_ROBOT) {
- $statserver = 'http://stat.discuz.com/func/';
- if(!defined('CACHE_FILE') || $GLOBALS['discuz_uid']) {
- $url = $statserver.'funcstat.php?q='.rawurlencode(base64_encode(funcstat_query($funcinfo,'', '', '', $scriptpath)));
- echo !$imgcode ? '<script type="text/javascript" src="'.$url.'" reload="1"></script>' : '<img src="'.$url.'&img=1" />';
- $statlogold = DISCUZ_ROOT.'./forumdata/funcstat.log';
- if(file_exists($statlogold)) {
- $statlogfile = DISCUZ_ROOT.'./forumdata/funcstat.log.'.random(3);
- @rename($statlogold, $statlogfile);
- if(($logs = @file($statlogfile)) !== FALSE && is_array($logs)) {
- foreach($logs as $log) {
- if($log) {
- $url = $statserver.'funcstat.php?q='.rawurlencode(base64_encode(trim($log)));
- echo !$imgcode ? '<script type="text/javascript" src="'.$url.'" reload="1"></script>' : '<img src="'.$url.'&img=1" />';
- }
- }
- }
- @unlink($statlogfile);
- }
- }
- }
- }
-
-
- }
-
- function funcstat_query($funcinfo, $message = '', $query = '', $referer = '', $scriptpath = '', $script = '') {
- preg_match("/(Netscape|Lynx|Opera|Konqueror|MSIE|Firefox|Safari|Chrome)[\/\s]([\.\d]+)/", $_SERVER['HTTP_USER_AGENT'], $a);
- empty($a[1]) && preg_match("/Mozilla[\/\s]([\.\d]+)/", $_SERVER['HTTP_USER_AGENT'], $a);
- if(empty($funcinfo)) {
- return;
- }
- list($funcmark, $funcversion) = explode(',', $funcinfo);
- $query = array(
- 'funcmark' => $funcmark,
- 'funcversion' => $funcversion,
- 'siteid' => $GLOBALS['_DCACHE']['settings']['funcsiteid'],
- 'timestamp' => $GLOBALS['timestamp'],
- 'sid' => $GLOBALS['sid'],
- 'uid' => $GLOBALS['discuz_uid'],
- 'ip' => $GLOBALS['onlineip'],
- 'script' => !$script ? $scriptpath.basename($_SERVER['SCRIPT_NAME']) : $script,
- 'query' => !$query ? $_SERVER['QUERY_STRING'] : $query,
- 'referer' => !$referer ? $_SERVER['HTTP_REFERER'] : $referer,
- 'message' => !$message ? '' : $message,
- 'succeed' => !$message ? '' : (strpos($message, 'succeed') !== FALSE ? 1 : 0),
- 'browser' => !empty($a[1]) ? $a[1].'/'.$a[2] : 'Other',
- );
- if($GLOBALS['adminid'] == 1) {
- $query['adminid'] = 1;
- }
- if($GLOBALS['discuz_uid']) {
- $mq = $GLOBALS['db']->query("SELECT gender,regdate,bday,groupid,lastvisit,lastactivity,lastpost,posts FROM {$GLOBALS[tablepre]}members WHERE uid='$GLOBALS[discuz_uid]'");
- $m = $GLOBALS['db']->fetch_array($mq);
- foreach($m as $k => $v) {
- $query[$k] = $v;
- }
- }
- $s = '';
- foreach($query as $k => $v) {
- trim($v) !== '' && $s .= '&'.$k.'='.rawurlencode($v);
- }
- return substr($s, 1);
- }
-
- function setstatus($position, $value, $baseon = null) {
- $t = pow(2, $position - 1);
- if($value) {
- $t = $baseon | $t;
- } elseif ($baseon !== null) {
- $t = $baseon & ~$t;
- } else {
- $t = ~$t;
- }
- return $t & 0xFFFF;
- }
-
- function getstatus($status, $position) {
- $t = $status & pow(2, $position - 1) ? 1 : 0;
- return $t;
- }
-
- function buildbitsql($fieldname, $position, $value) {
- $t = " `$fieldname`=`$fieldname`";
- if($value) {
- $t .= ' | '.setstatus($position, 1);
- } else {
- $t .= ' & '.setstatus($position, 0);
- }
- return $t.' ';
- }
- ?>