<?php /** * [Discuz!] (C)2001-2099 Comsenz Inc. * This is NOT a freeware, use is subject to license terms * * $Id: function_core.php 32277 2012-12-13 08:25:50Z zhangjie $ */ if (!defined('IN_DISCUZ')) { exit('Access Denied'); } define('DISCUZ_CORE_FUNCTION', true); function system_error($message, $show = true, $save = true, $halt = true) { require_once libfile('class/error'); discuz_error::system_error($message, $show, $save, $halt); } function updatesession($force = false) { global $_G; static $updated = false; if (!$updated) { if ($_G['uid']) { if ($_G['cookie']['ulastactivity']) { $ulastactivity = authcode($_G['cookie']['ulastactivity'], 'DECODE'); } else { $ulastactivity = getuserprofile('lastactivity'); dsetcookie('ulastactivity', authcode($ulastactivity, 'ENCODE'), 31536000); } } $discuz = & discuz_core::instance(); $oltimespan = $_G['setting']['oltimespan']; $lastolupdate = $discuz->session->var['lastolupdate']; if ($_G['uid'] && $oltimespan && TIMESTAMP - ($lastolupdate ? $lastolupdate : $ulastactivity) > $oltimespan * 60) { DB::query("UPDATE " . DB::table('common_onlinetime') . " SET total=total+'$oltimespan', thismonth=thismonth+'$oltimespan', lastupdate='" . TIMESTAMP . "' WHERE uid='{$_G['uid']}'"); if (!DB::affected_rows()) { DB::insert('common_onlinetime', array( 'uid' => $_G['uid'], 'thismonth' => $oltimespan, 'total' => $oltimespan, 'lastupdate' => TIMESTAMP, )); } $discuz->session->set('lastolupdate', TIMESTAMP); } foreach ($discuz->session->var as $k => $v) { if (isset($_G['member'][$k]) && $k != 'lastactivity') { $discuz->session->set($k, $_G['member'][$k]); } } foreach ($_G['action'] as $k => $v) { $discuz->session->set($k, $v); } $discuz->session->update(); $updated = true; if ($_G['uid'] && TIMESTAMP - $ulastactivity > 21600) { if ($oltimespan && TIMESTAMP - $ulastactivity > 43200) { $total = DB::result_first("SELECT total FROM " . DB::table('common_onlinetime') . " WHERE uid='$_G[uid]'"); DB::update('common_member_count', array('oltime' => round(intval($total) / 60)), "uid='$_G[uid]'", 1); } dsetcookie('ulastactivity', authcode(TIMESTAMP, 'ENCODE'), 31536000); DB::update('common_member_status', array('lastip' => $_G['clientip'], 'lastactivity' => TIMESTAMP, 'lastvisit' => TIMESTAMP), "uid='$_G[uid]'", 1); } } return $updated; } function dmicrotime() { return array_sum(explode(' ', microtime())); } function setglobal($key, $value, $group = null) { global $_G; $k = explode('/', $group === null ? $key : $group . '/' . $key); switch (count($k)) { case 1: $_G[$k[0]] = $value; break; case 2: $_G[$k[0]][$k[1]] = $value; break; case 3: $_G[$k[0]][$k[1]][$k[2]] = $value; break; case 4: $_G[$k[0]][$k[1]][$k[2]][$k[3]] = $value; break; case 5: $_G[$k[0]][$k[1]][$k[2]][$k[3]][$k[4]] = $value; break; } return true; } function getglobal($key, $group = null) { global $_G; $k = explode('/', $group === null ? $key : $group . '/' . $key); switch (count($k)) { case 1: return isset($_G[$k[0]]) ? $_G[$k[0]] : null; break; case 2: return isset($_G[$k[0]][$k[1]]) ? $_G[$k[0]][$k[1]] : null; break; case 3: return isset($_G[$k[0]][$k[1]][$k[2]]) ? $_G[$k[0]][$k[1]][$k[2]] : null; break; case 4: return isset($_G[$k[0]][$k[1]][$k[2]][$k[3]]) ? $_G[$k[0]][$k[1]][$k[2]][$k[3]] : null; break; case 5: return isset($_G[$k[0]][$k[1]][$k[2]][$k[3]][$k[4]]) ? $_G[$k[0]][$k[1]][$k[2]][$k[3]][$k[4]] : null; break; } return null; } function getgpc($k, $type = 'GP') { $type = strtoupper($type); switch ($type) { case 'G': $var = &$_GET; break; case 'P': $var = &$_POST; break; case 'C': $var = &$_COOKIE; break; default: if (isset($_GET[$k])) { $var = &$_GET; } else { $var = &$_POST; } break; } return isset($var[$k]) ? $var[$k] : NULL; } function getuserbyuid($uid) { static $users = array(); if (empty($users[$uid])) { $users[$uid] = DB::fetch_first("SELECT * FROM " . DB::table('common_member') . " WHERE uid='$uid'"); } return $users[$uid]; } function getuserprofile($field) { global $_G; if (isset($_G['member'][$field])) { return $_G['member'][$field]; } static $tablefields = array( 'count' => array('extcredits1', 'extcredits2', 'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8', 'friends', 'posts', 'threads', 'digestposts', 'doings', 'blogs', 'albums', 'sharings', 'attachsize', 'views', 'oltime', 'todayattachs', 'todayattachsize'), 'status' => array('regip', 'lastip', 'lastvisit', 'lastactivity', 'lastpost', 'lastsendmail', 'invisible', 'buyercredit', 'sellercredit', 'favtimes', 'sharetimes', 'profileprogress'), 'field_forum' => array('publishfeed', 'customshow', 'customstatus', 'medals', 'sightml', 'groupterms', 'authstr', 'groups', 'attentiongroup'), 'field_home' => array('videophoto', 'spacename', 'spacedescription', 'domain', 'addsize', 'addfriend', 'menunum', 'theme', 'spacecss', 'blockposition', 'recentnote', 'spacenote', 'privacy', 'feedfriend', 'acceptemail', 'magicgift', 'stickblogs'), 'profile' => array('realname', 'gender', 'birthyear', 'birthmonth', 'birthday', 'constellation', 'zodiac', 'telephone', 'mobile', 'idcardtype', 'idcard', 'address', 'zipcode', 'nationality', 'birthprovince', 'birthcity', 'resideprovince', 'residecity', 'residedist', 'residecommunity', 'residesuite', 'graduateschool', 'company', 'education', 'occupation', 'position', 'revenue', 'affectivestatus', 'lookingfor', 'bloodtype', 'height', 'weight', 'alipay', 'icq', 'qq', 'yahoo', 'msn', 'taobao', 'site', 'bio', 'interest', 'field1', 'field2', 'field3', 'field4', 'field5', 'field6', 'field7', 'field8'), 'verify' => array('verify1', 'verify2', 'verify3', 'verify4', 'verify5', 'verify6', 'verify7'), ); $profiletable = ''; foreach ($tablefields as $table => $fields) { if (in_array($field, $fields)) { $profiletable = $table; break; } } if ($profiletable) { $data = array(); if ($_G['uid']) { $data = DB::fetch_first("SELECT " . implode(', ', $tablefields[$profiletable]) . " FROM " . DB::table('common_member_' . $profiletable) . " WHERE uid='$_G[uid]'"); } if (!$data) { foreach ($tablefields[$profiletable] as $k) { $data[$k] = ''; } } $_G['member'] = array_merge(is_array($_G['member']) ? $_G['member'] : array(), $data); return $_G['member'][$field]; } } function daddslashes($string, $force = 1) { if (is_array($string)) { $keys = array_keys($string); foreach ($keys as $key) { $val = $string[$key]; unset($string[$key]); $string[addslashes($key)] = daddslashes($val, $force); } } else { $string = addslashes($string); } return $string; } function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; $key = md5($key != '' ? $key : getglobal('authkey')); $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 fsocketopen($hostname, $port = 80, &$errno, &$errstr, $timeout = 15) { $fp = ''; if (function_exists('fsockopen')) { $fp = @fsockopen($hostname, $port, $errno, $errstr, $timeout); } elseif (function_exists('pfsockopen')) { $fp = @pfsockopen($hostname, $port, $errno, $errstr, $timeout); } elseif (function_exists('stream_socket_client')) { $fp = @stream_socket_client($hostname . ':' . $port, $errno, $errstr, $timeout); } return $fp; } function dfsockopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 5, $block = TRUE) { require_once libfile('function/filesock'); return _dfsockopen($url, $limit, $post, $cookie, $bysocket, $ip, $timeout, $block); } function dhtmlspecialchars($string) { if (is_array($string)) { foreach ($string as $key => $val) { $string[$key] = dhtmlspecialchars($val); } } else { $string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string); if (strpos($string, '&#') !== false) { $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string); } } return $string; } function dexit($message = '') { echo $message; output(); exit(); } function dheader($string, $replace = true, $http_response_code = 0) { $islocation = substr(strtolower(trim($string)), 0, 8) == 'location'; if (defined('IN_MOBILE') && strpos($string, 'mobile') === false && $islocation) { if (strpos($string, '?') === false) { $string = $string . '?mobile=yes'; } else { if (strpos($string, '#') === false) { $string = $string . '&mobile=yes'; } else { $str_arr = explode('#', $string); $str_arr[0] = $str_arr[0] . '&mobile=yes'; $string = implode('#', $str_arr); } } } $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 ($islocation) { exit(); } } function dsetcookie($var, $value = '', $life = 0, $prefix = 1, $httponly = false) { global $_G; $config = $_G['config']['cookie']; $_G['cookie'][$var] = $value; $var = ($prefix ? $config['cookiepre'] : '') . $var; $_COOKIE[$var] = $value; if ($value == '' || $life < 0) { $value = ''; $life = -1; } if (defined('IN_MOBILE')) { $httponly = false; } $life = $life > 0 ? getglobal('timestamp') + $life : ($life < 0 ? getglobal('timestamp') - 31536000 : 0); $path = $httponly && PHP_VERSION < '5.2.0' ? $config['cookiepath'] . '; HttpOnly' : $config['cookiepath']; //$secure = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0; $secure = 0; if (PHP_VERSION < '5.2.0') { setcookie($var, $value, $life, $path, $config['cookiedomain'], $secure); } else { setcookie($var, $value, $life, $path, $config['cookiedomain'], $secure, $httponly); } } function getcookie($key) { global $_G; return isset($_G['cookie'][$key]) ? $_G['cookie'][$key] : ''; } function fileext($filename) { return addslashes(strtolower(substr(strrchr($filename, '.'), 1, 10))); } function formhash($specialadd = '') { global $_G; $hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : ''; return substr(md5(substr($_G['timestamp'], 0, -7) . $_G['username'] . $_G['uid'] . $_G['authkey'] . $hashadd . $specialadd), 8, 8); } function checkrobot($useragent = '') { static $kw_spiders = array('bot', 'crawl', 'spider', 'slurp', 'sohu-search', 'lycos', 'robozilla'); static $kw_browsers = array('msie', 'netscape', 'opera', 'konqueror', 'mozilla'); $useragent = strtolower(empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent); if (strpos($useragent, 'http://') === false && dstrpos($useragent, $kw_browsers)) return false; if (dstrpos($useragent, $kw_spiders)) return true; return false; } function checkmobile() { global $_G; $mobile = array(); static $mobilebrowser_list = array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini', 'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung', 'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser', 'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource', 'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone', 'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop', 'benq', 'haier', '^lct', '320x320', '240x320', '176x220'); $useragent = strtolower($_SERVER['HTTP_USER_AGENT']); if (($v = dstrpos($useragent, $mobilebrowser_list, true))) { $_G['mobile'] = $v; return true; } $brower = array('mozilla', 'chrome', 'safari', 'opera', 'm3gate', 'winwap', 'openwave', 'myop'); if (dstrpos($useragent, $brower)) return false; $_G['mobile'] = 'unknown'; if ($_GET['mobile'] === 'yes') { return true; } else { return false; } } function dstrpos($string, &$arr, $returnvalue = false) { if (empty($string)) return false; foreach ((array) $arr as $v) { if (strpos($string, $v) !== false) { $return = $returnvalue ? $v : true; return $return; } } return false; } function isemail($email) { return strlen($email) > 6 && preg_match("/^([A-Za-z0-9\-_.+]+)@([A-Za-z0-9\-]+[.][A-Za-z0-9\-.]+)$/", $email); } function quescrypt($questionid, $answer) { return $questionid > 0 && $answer != '' ? substr(md5($answer . md5($questionid)), 16, 8) : ''; } function random($length, $numeric = 0) { $seed = base_convert(md5(microtime() . $_SERVER['DOCUMENT_ROOT']), 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 strexists($string, $find) { return !(strpos($string, $find) === FALSE); } function avatar($uid, $size = 'middle', $returnsrc = FALSE, $real = FALSE, $static = FALSE, $ucenterurl = '') { global $_G; static $staticavatar; if ($staticavatar === null) { $staticavatar = $_G['setting']['avatarmethod']; } $ucenterurl = empty($ucenterurl) ? $_G['setting']['ucenterurl'] : $ucenterurl; //$size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle'; $size = 'middle'; $uid = abs(intval($uid)); if (!$staticavatar && !$static) { return $returnsrc ? $ucenterurl . '/avatar.php?uid=' . $uid . '&size=' . $size : '<img src="' . $ucenterurl . '/avatar.php?uid=' . $uid . '&size=' . $size . ($real ? '&type=real' : '') . '" />'; } else { $uid = sprintf("%09d", $uid); $dir1 = substr($uid, 0, 3); $dir2 = substr($uid, 3, 2); $dir3 = substr($uid, 5, 2); //$file = $ucenterurl . '/data/avatar/' . $dir1 . '/' . $dir2 . '/' . $dir3 . '/' . substr($uid, -2) . ($real ? '_real' : '') . '_avatar_' . $size . '.jpg'; $file = 'https://upbbsimg.cehome.com/avatar/'.$dir1 . '/' . $dir2 . '/' . $dir3 . '/' . substr($uid, -2) . ($real ? '_real' : '') . '_avatar_' . $size . '.jpg?r='.random(6); return $returnsrc ? $file : '<img src="' . $file . '" onerror="this.onerror=null;this.src=\'' . $ucenterurl . '/images/noavatar_' . $size . '.gif\'" />'; } } function lang($file, $langvar = null, $vars = array(), $default = null) { global $_G; list($path, $file) = explode('/', $file); if (!$file) { $file = $path; $path = ''; } if ($path != 'plugin') { $key = $path == '' ? $file : $path . '_' . $file; if (!isset($_G['lang'][$key])) { include DISCUZ_ROOT . './source/language/' . ($path == '' ? '' : $path . '/') . 'lang_' . $file . '.php'; $_G['lang'][$key] = $lang; } if (defined('IN_MOBILE') && !defined('TPL_DEFAULT')) { include DISCUZ_ROOT . './source/language/mobile/lang_template.php'; $_G['lang'][$key] = array_merge($_G['lang'][$key], $lang); } $returnvalue = &$_G['lang']; } else { if (empty($_G['config']['plugindeveloper'])) { loadcache('pluginlanguage_script'); } elseif (!isset($_G['cache']['pluginlanguage_script'][$file]) && preg_match("/^[a-z]+[a-z0-9_]*$/i", $file)) { if (@include(DISCUZ_ROOT . './data/plugindata/' . $file . '.lang.php')) { $_G['cache']['pluginlanguage_script'][$file] = $scriptlang[$file]; } else { loadcache('pluginlanguage_script'); } } $returnvalue = & $_G['cache']['pluginlanguage_script']; $key = &$file; } $return = $langvar !== null ? (isset($returnvalue[$key][$langvar]) ? $returnvalue[$key][$langvar] : null) : $returnvalue[$key]; $return = $return === null ? ($default !== null ? $default : $langvar) : $return; $searchs = $replaces = array(); if ($vars && is_array($vars)) { foreach ($vars as $k => $v) { $searchs[] = '{' . $k . '}'; $replaces[] = $v; } } if (is_string($return) && strpos($return, '{_G/') !== false) { preg_match_all('/\{_G\/(.+?)\}/', $return, $gvar); foreach ($gvar[0] as $k => $v) { $searchs[] = $v; $replaces[] = getglobal($gvar[1][$k]); } } $return = str_replace($searchs, $replaces, $return); return $return; } function checktplrefresh($maintpl, $subtpl, $timecompare, $templateid, $cachefile, $tpldir, $file) { static $tplrefresh, $timestamp, $targettplname; if ($tplrefresh === null) { $tplrefresh = getglobal('config/output/tplrefresh'); $timestamp = getglobal('timestamp'); } if (empty($timecompare) || $tplrefresh == 1 || ($tplrefresh > 1 && !($timestamp % $tplrefresh))) { if (empty($timecompare) || @filemtime(DISCUZ_ROOT . $subtpl) > $timecompare) { require_once DISCUZ_ROOT . '/source/class/class_template.php'; $template = new template(); $template->parse_template($maintpl, $templateid, $tpldir, $file, $cachefile); if ($targettplname === null) { $targettplname = getglobal('style/tplfile'); if (!empty($targettplname)) { $targettplname = strtr($targettplname, ':', '_'); update_template_block($targettplname, $template->blocks); } $targettplname = true; } return TRUE; } } return FALSE; } function template($file, $templateid = 0, $tpldir = '', $gettplfile = 0, $primaltpl = '') { global $_G; static $_init_style = false; if ($_init_style === false) { $discuz = & discuz_core::instance(); $discuz->_init_style(); $_init_style = true; } $oldfile = $file; if (strpos($file, ':') !== false) { $clonefile = ''; list($templateid, $file, $clonefile) = explode(':', $file); $oldfile = $file; $file = empty($clonefile) || STYLEID != $_G['cache']['style_default']['styleid'] ? $file : $file . '_' . $clonefile; if ($templateid == 'diy' && STYLEID == $_G['cache']['style_default']['styleid']) { $_G['style']['prefile'] = ''; $diypath = DISCUZ_ROOT . './data/diy/'; //DIY???????? $preend = '_diy_preview'; $_G['gp_preview'] = !empty($_G['gp_preview']) ? $_G['gp_preview'] : ''; $curtplname = $oldfile; $basescript = $_G['mod'] == 'viewthread' && !empty($_G['thread']) ? 'forum' : $_G['basescript']; if (isset($_G['cache']['diytemplatename' . $basescript])) { $diytemplatename = &$_G['cache']['diytemplatename' . $basescript]; } else { if (!isset($_G['cache']['diytemplatename'])) { loadcache('diytemplatename'); } $diytemplatename = &$_G['cache']['diytemplatename']; } $tplsavemod = 0; if (isset($diytemplatename[$file]) && file_exists($diypath . $file . '.htm') && ($tplsavemod = 1) || empty($_G['forum']['styleid']) && ($file = $primaltpl ? $primaltpl : $oldfile) && isset($diytemplatename[$file]) && file_exists($diypath . $file . '.htm')) { $tpldir = 'data/diy'; !$gettplfile && $_G['style']['tplsavemod'] = $tplsavemod; $curtplname = $file; if ($_G['gp_diy'] == 'yes' || $_G['gp_preview'] == 'yes') { //DIY??????????????????ж? $flag = file_exists($diypath . $file . $preend . '.htm'); if ($_G['gp_preview'] == 'yes') { $file .= $flag ? $preend : ''; } else { $_G['style']['prefile'] = $flag ? 1 : ''; } } } else { $file = $primaltpl ? $primaltpl : $oldfile; } $tplrefresh = $_G['config']['output']['tplrefresh']; if ($tpldir == 'data/diy' && ($tplrefresh == 1 || ($tplrefresh > 1 && !($_G['timestamp'] % $tplrefresh))) && filemtime($diypath . $file . '.htm') < filemtime(DISCUZ_ROOT . TPLDIR . '/' . ($primaltpl ? $primaltpl : $oldfile) . '.htm')) { if (!updatediytemplate($file)) { unlink($diypath . $file . '.htm'); $tpldir = ''; } } if (!$gettplfile && empty($_G['style']['tplfile'])) { $_G['style']['tplfile'] = empty($clonefile) ? $curtplname : $oldfile . ':' . $clonefile; } $_G['style']['prefile'] = !empty($_G['gp_preview']) && $_G['gp_preview'] == 'yes' ? '' : $_G['style']['prefile']; } else { $tpldir = './source/plugin/' . $templateid . '/template'; } } $file .=!empty($_G['inajax']) && ($file == 'common/header' || $file == 'common/footer') ? '_ajax' : ''; $tpldir = $tpldir ? $tpldir : (defined('TPLDIR') ? TPLDIR : ''); $templateid = $templateid ? $templateid : (defined('TEMPLATEID') ? TEMPLATEID : ''); $filebak = $file; if (defined('IN_MOBILE') && !defined('TPL_DEFAULT') && strpos($file, 'mobile/') === false || $_G['forcemobilemessage']) { $file = 'mobile/' . $oldfile; } if (!$tpldir) { $tpldir = './template/default'; } $tplfile = $tpldir . '/' . $file . '.htm'; $file == 'common/header' && defined('CURMODULE') && CURMODULE && $file = 'common/header_' . $_G['basescript'] . '_' . CURMODULE; if (defined('IN_MOBILE') && !defined('TPL_DEFAULT')) { if (strpos($tpldir, 'plugin')) { if (!file_exists(DISCUZ_ROOT . $tpldir . '/' . $file . '.htm')) { require_once libfile('class/error'); discuz_error::template_error('template_notfound', $tpldir . '/' . $file . '.htm'); } else { $mobiletplfile = $tpldir . '/' . $file . '.htm'; } } !$mobiletplfile && $mobiletplfile = $file . '.htm'; if (strpos($tpldir, 'plugin') && file_exists(DISCUZ_ROOT . $mobiletplfile)) { $tplfile = $mobiletplfile; } elseif (!file_exists(DISCUZ_ROOT . TPLDIR . '/' . $mobiletplfile)) { $mobiletplfile = './template/default/' . $mobiletplfile; if (!file_exists(DISCUZ_ROOT . $mobiletplfile) && !$_G['forcemobilemessage']) { $tplfile = str_replace('mobile/', '', $tplfile); $file = str_replace('mobile/', '', $file); define('TPL_DEFAULT', true); } else { $tplfile = $mobiletplfile; } } else { $tplfile = TPLDIR . '/' . $mobiletplfile; } } $cachefile = './data/template/' . (defined('STYLEID') ? STYLEID . '_' : '_') . $templateid . '_' . str_replace('/', '_', $file) . '.tpl.php'; if ($templateid != 1 && !file_exists(DISCUZ_ROOT . $tplfile) && !file_exists(DISCUZ_ROOT . ($tplfile = $tpldir . $filebak . '.htm'))) { $tplfile = './template/default/' . $filebak . '.htm'; } if ($gettplfile) { return $tplfile; } checktplrefresh($tplfile, $tplfile, @filemtime(DISCUZ_ROOT . $cachefile), $templateid, $cachefile, $tpldir, $file); return DISCUZ_ROOT . $cachefile; } function dsign($str, $length = 16) { return substr(md5(getglobal('uid') . $str . getglobal('authkey')), 0, ($length ? max(8, $length) : 16)); } function modauthkey($id) { global $_G; return md5($_G['username'] . $_G['uid'] . $_G['authkey'] . substr(TIMESTAMP, 0, -7) . $id); } function getcurrentnav() { global $_G; if (!empty($_G['mnid'])) { return $_G['mnid']; } $mnid = ''; $_G['basefilename'] = $_G['basefilename'] == $_G['basescript'] ? $_G['basefilename'] : $_G['basescript'] . '.php'; if (isset($_G['setting']['navmns'][$_G['basefilename']])) { foreach ($_G['setting']['navmns'][$_G['basefilename']] as $navmn) { if ($navmn[0] == array_intersect_assoc($navmn[0], $_GET)) { $mnid = $navmn[1]; } } } if (!$mnid && isset($_G['setting']['navdms'])) { foreach ($_G['setting']['navdms'] as $navdm => $navid) { if (strpos(strtolower($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']), $navdm) !== false) { $mnid = $navid; break; } } } if (!$mnid && isset($_G['setting']['navmn'][$_G['basefilename']])) { $mnid = $_G['setting']['navmn'][$_G['basefilename']]; } return $mnid; } function loaducenter() { require_once DISCUZ_ROOT . './config/config_ucenter.php'; require_once DISCUZ_ROOT . './uc_client/client.php'; } function loadcache($cachenames, $force = false) { global $_G; static $loadedcache = array(); $cachenames = is_array($cachenames) ? $cachenames : array($cachenames); $caches = array(); foreach ($cachenames as $k) { if (!isset($loadedcache[$k]) || $force) { $caches[] = $k; $loadedcache[$k] = true; } } if (!empty($caches)) { $cachedata = cachedata($caches); foreach ($cachedata as $cname => $data) { if ($cname == 'setting') { $_G['setting'] = $data; } elseif ($cname == 'usergroup_' . $_G['groupid']) { $_G['cache'][$cname] = $_G['group'] = $data; } elseif ($cname == 'style_default') { $_G['cache'][$cname] = $_G['style'] = $data; } elseif ($cname == 'grouplevels') { $_G['grouplevels'] = $data; } else { $_G['cache'][$cname] = $data; } } } return true; } function cachedata($cachenames) { global $_G; static $isfilecache, $allowmem; if (!isset($isfilecache)) { $isfilecache = getglobal('config/cache/type') == 'file'; $allowmem = memory('check'); } $data = array(); $cachenames = is_array($cachenames) ? $cachenames : array($cachenames); if ($allowmem) { $newarray = array(); foreach ($cachenames as $name) { $data[$name] = memory('get', $name); if ($data[$name] === null) { $data[$name] = null; $newarray[] = $name; } } if (empty($newarray)) { return $data; } else { $cachenames = $newarray; } } if ($isfilecache) { $lostcaches = array(); foreach ($cachenames as $cachename) { if (!@include_once(DISCUZ_ROOT . './data/cache/cache_' . $cachename . '.php')) { $lostcaches[] = $cachename; } } if (!$lostcaches) { return $data; } $cachenames = $lostcaches; unset($lostcaches); } $query = DB::query("SELECT * FROM " . DB::table('common_syscache') . " WHERE cname IN ('" . implode("','", $cachenames) . "')"); while ($syscache = DB::fetch($query)) { $data[$syscache['cname']] = $syscache['ctype'] ? unserialize($syscache['data']) : $syscache['data']; $allowmem && (memory('set', $syscache['cname'], $data[$syscache['cname']])); if ($isfilecache) { $cachedata = '$data[\'' . $syscache['cname'] . '\'] = ' . var_export($data[$syscache['cname']], true) . ";\n\n"; if ($fp = @fopen(DISCUZ_ROOT . './data/cache/cache_' . $syscache['cname'] . '.php', 'wb')) { fwrite($fp, "<?php\n//Discuz! cache file, DO NOT modify me!\n//Identify: " . md5($syscache['cname'] . $cachedata . $_G['config']['security']['authkey']) . "\n\n$cachedata?>"); fclose($fp); } } } foreach ($cachenames as $name) { if ($data[$name] === null) { $data[$name] = null; $allowmem && (memory('set', $name, array())); } } return $data; } function dgmdate($timestamp, $format = 'dt', $timeoffset = '9999', $uformat = '') { global $_G; $format == 'u' && !$_G['setting']['dateconvert'] && $format = 'dt'; static $dformat, $tformat, $dtformat, $offset, $lang; if ($dformat === null) { $dformat = getglobal('setting/dateformat'); $tformat = getglobal('setting/timeformat'); $dtformat = $dformat . ' ' . $tformat; $offset = getglobal('member/timeoffset'); $lang = lang('core', 'date'); } $timeoffset = $timeoffset == 9999 ? $offset : $timeoffset; $timestamp += $timeoffset * 3600; $format = empty($format) || $format == 'dt' ? $dtformat : ($format == 'd' ? $dformat : ($format == 't' ? $tformat : $format)); if ($format == 'u') { $todaytimestamp = TIMESTAMP - (TIMESTAMP + $timeoffset * 3600) % 86400 + $timeoffset * 3600; $s = gmdate(!$uformat ? str_replace(":i", ":i:s", $dtformat) : $uformat, $timestamp); $time = TIMESTAMP + $timeoffset * 3600 - $timestamp; if ($timestamp >= $todaytimestamp) { if ($time > 3600) { return '<span title="' . $s . '">' . intval($time / 3600) . '&nbsp;' . $lang['hour'] . $lang['before'] . '</span>'; } elseif ($time > 1800) { return '<span title="' . $s . '">' . $lang['half'] . $lang['hour'] . $lang['before'] . '</span>'; } elseif ($time > 60) { return '<span title="' . $s . '">' . intval($time / 60) . '&nbsp;' . $lang['min'] . $lang['before'] . '</span>'; } elseif ($time > 0) { return '<span title="' . $s . '">' . $time . '&nbsp;' . $lang['sec'] . $lang['before'] . '</span>'; } elseif ($time == 0) { return '<span title="' . $s . '">' . $lang['now'] . '</span>'; } else { return $s; } } elseif (($days = intval(($todaytimestamp - $timestamp) / 86400)) >= 0 && $days < 7) { if ($days == 0) { return '<span title="' . $s . '">' . $lang['yday'] . '&nbsp;' . gmdate($tformat, $timestamp) . '</span>'; } elseif ($days == 1) { return '<span title="' . $s . '">' . $lang['byday'] . '&nbsp;' . gmdate($tformat, $timestamp) . '</span>'; } else { return '<span title="' . $s . '">' . ($days + 1) . '&nbsp;' . $lang['day'] . $lang['before'] . '</span>'; } } else { return $s; } } else { return gmdate($format, $timestamp); } } function dmktime($date) { if (strpos($date, '-')) { $time = explode('-', $date); return mktime(0, 0, 0, $time[1], $time[2], $time[0]); } return 0; } function save_syscache($cachename, $data) { static $isfilecache, $allowmem; if (!isset($isfilecache)) { $isfilecache = getglobal('config/cache/type') == 'file'; $allowmem = memory('check'); } if (is_array($data)) { $ctype = 1; $data = addslashes(serialize($data)); } else { $ctype = 0; } DB::query("REPLACE INTO " . DB::table('common_syscache') . " (cname, ctype, dateline, data) VALUES ('$cachename', '$ctype', '" . TIMESTAMP . "', '$data')"); $allowmem && memory('rm', $cachename); $isfilecache && @unlink(DISCUZ_ROOT . './data/cache/cache_' . $cachename . '.php'); } function block_get($parameter) { global $_G; static $allowmem; if ($allowmem === null) { include_once libfile('function/block'); $allowmem = getglobal('setting/memory/diyblock/enable') && memory('check'); } if (!$allowmem) { block_get_batch($parameter); return true; } $blockids = explode(',', $parameter); $lostbids = array(); foreach ($blockids as $bid) { $bid = intval($bid); if ($bid) { $_G['block'][$bid] = memory('get', 'blockcache_' . $bid); if ($_G['block'][$bid] === null) { $lostbids[] = $bid; } else { $styleid = $_G['block'][$bid]['styleid']; if ($styleid && !isset($_G['blockstyle_' . $styleid])) { $_G['blockstyle_' . $styleid] = memory('get', 'blockstylecache_' . $styleid); } } } } if ($lostbids) { block_get_batch(implode(',', $lostbids)); foreach ($lostbids as $bid) { if (isset($_G['block'][$bid])) { memory('set', 'blockcache_' . $bid, $_G['block'][$bid], getglobal('setting/memory/diyblock/ttl')); $styleid = $_G['block'][$bid]['styleid']; if ($styleid && $_G['blockstyle_' . $styleid]) { memory('set', 'blockstylecache_' . $styleid, $_G['blockstyle_' . $styleid], getglobal('setting/memory/diyblock/ttl')); } } } } } function block_display($bid) { include_once libfile('function/block'); block_display_batch($bid); } function dimplode($array) { if (!empty($array)) { return "'" . implode("','", is_array($array) ? $array : array($array)) . "'"; } else { return 0; } } function libfile($libname, $folder = '') { $libpath = DISCUZ_ROOT . '/source/' . $folder; if (strstr($libname, '/')) { list($pre, $name) = explode('/', $libname); return realpath("{$libpath}/{$pre}/{$pre}_{$name}.php"); } else { return realpath("{$libpath}/{$libname}.php"); } } function dstrlen($str) { if (strtolower(CHARSET) != 'utf-8') { return strlen($str); } $count = 0; for ($i = 0; $i < strlen($str); $i++) { $value = ord($str[$i]); if ($value > 127) { $count++; if ($value >= 192 && $value <= 223) $i++; elseif ($value >= 224 && $value <= 239) $i = $i + 2; elseif ($value >= 240 && $value <= 247) $i = $i + 3; } $count++; } return $count; } function cutstr($string, $length, $dot = ' ...') { if (strlen($string) <= $length) { return $string; } $pre = chr(1); $end = chr(1); $string = str_replace(array('&', '"', '<', '>'), array($pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end), $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($pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end), array('&', '"', '<', '>'), $strcut); $pos = strrpos($strcut, chr(1)); if ($pos !== false) { $strcut = substr($strcut, 0, $pos); } return $strcut . $dot; } function dstripslashes($string) { if (empty($string)) return $string; if (is_array($string)) { foreach ($string as $key => $val) { $string[$key] = dstripslashes($val); } } else { $string = stripslashes($string); } return $string; } function aidencode($aid, $type = 0, $tid = 0) { global $_G; $s = !$type ? $aid . '|' . substr(md5($aid . md5($_G['config']['security']['authkey']) . TIMESTAMP . $_G['uid']), 0, 8) . '|' . TIMESTAMP . '|' . $_G['uid'] . '|' . $tid : $aid . '|' . md5($aid . md5($_G['config']['security']['authkey']) . TIMESTAMP) . '|' . TIMESTAMP; return rawurlencode(base64_encode($s)); } function getforumimg($aid, $nocache = 0, $w = 140, $h = 140, $type = '') { global $_G; $key = dsign($aid . '|' . $w . '|' . $h); return 'forum.php?mod=image&aid=' . $aid . '&size=' . $w . 'x' . $h . '&key=' . rawurlencode($key) . ($nocache ? '&nocache=yes' : '') . ($type ? '&type=' . $type : ''); } function rewriteoutput($type, $returntype, $host) { global $_G; $fextra = ''; if ($type == 'club_view') { $_G['setting']['rewriterule']['club_view'] = "club-{pid}-{cid}-{page}.html"; list(,,, $pid, $cid, $page, $extra) = func_get_args(); $r = array( '{pid}' => $pid, '{cid}' => $cid, '{page}' => $page ? $page : 1, ); } elseif ($type == 'forum_forumdisplay') { list(,,, $fid, $page, $extra) = func_get_args(); $r = array( '{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid], '{page}' => $page ? $page : 1, ); } elseif ($type == 'forum_viewthread') { list(,,, $tid, $page, $prevpage, $extra) = func_get_args(); $r = array( '{tid}' => $tid, '{page}' => $page ? $page : 1, '{prevpage}' => $prevpage && !IS_ROBOT ? $prevpage : 1, ); } elseif ($type == 'home_space') { list(,,, $uid, $username, $extra) = func_get_args(); $_G['setting']['rewritecompatible'] && $username = rawurlencode($username); $r = array( '{user}' => $uid ? 'uid' : 'username', '{value}' => $uid ? $uid : $username, ); } elseif ($type == 'home_blog') { list(,,, $uid, $blogid, $extra) = func_get_args(); $r = array( '{uid}' => $uid, '{blogid}' => $blogid, ); } elseif ($type == 'group_group') { list(,,, $fid, $page, $extra) = func_get_args(); $r = array( '{fid}' => $fid, '{page}' => $page ? $page : 1, ); } elseif ($type == 'portal_topic') { list(,,, $name, $extra) = func_get_args(); $r = array( '{name}' => $name, ); } elseif ($type == 'portal_article') { list(,,, $id, $page, $extra) = func_get_args(); $r = array( '{id}' => $id, '{page}' => $page ? $page : 1, ); } elseif ($type == 'forum_archiver') { list(,, $action, $value, $page, $extra) = func_get_args(); $host = ''; $r = array( '{action}' => $action, '{value}' => $value, ); if ($page) { $fextra = '?page=' . $page; } } $href = str_replace(array_keys($r), $r, $_G['setting']['rewriterule'][$type]) . $fextra; if (!$returntype) { return '<a href="' . $host . $href . '"' . (!empty($extra) ? stripslashes($extra) : '') . '>'; } else { return $host . $href; } } function mobilereplace($file, $replace) { global $_G; if (strpos($replace, 'mobile=') === false) { if (strpos($replace, '?') === false) { $replace = 'href="' . $file . $replace . '?mobile=yes"'; } else { $replace = 'href="' . $file . $replace . '&mobile=yes"'; } return $replace; } else { return 'href="' . $file . $replace . '"'; } } function mobileoutput() { global $_G; if (!defined('TPL_DEFAULT')) { $content = ob_get_contents(); ob_end_clean(); $content = preg_replace("/href=\"(\w+\.php)(.*?)\"/e", "mobilereplace('\\1', '\\2')", $content); ob_start(); $content = '<?xml version="1.0" encoding="utf-8"?>' . $content; if ('utf-8' != CHARSET) { @header('Content-Type: text/html; charset=utf-8'); $content = diconv($content, CHARSET, 'utf-8'); } echo $content; exit(); } elseif (defined('TPL_DEFAULT') && !$_G['cookie']['dismobilemessage'] && $_G['mobile']) { ob_end_clean(); ob_start(); $_G['forcemobilemessage'] = true; $query_sting_tmp = str_replace(array('&mobile=yes', 'mobile=yes'), array(''), $_SERVER['QUERY_STRING']); $_G['setting']['mobile']['pageurl'] = $_G['siteurl'] . substr($_G['PHP_SELF'], 1) . ($query_sting_tmp ? '?' . $query_sting_tmp . '&mobile=no' : '?mobile=no' ); unset($query_sting_tmp); dsetcookie('dismobilemessage', '1', 3600); showmessage('not_in_mobile'); exit; } } function output() { global $_G; if (defined('DISCUZ_OUTPUTED')) { return; } else { define('DISCUZ_OUTPUTED', 1); } if (!empty($_G['blockupdate'])) { block_updatecache($_G['blockupdate']['bid']); } if (defined('IN_MOBILE')) { mobileoutput(); } include_once libfile('function/cloud'); show(); $havedomain = implode('', $_G['setting']['domain']['app']); if ($_G['setting']['rewritestatus'] || !empty($havedomain)) { $content = ob_get_contents(); $content = output_replace($content); ob_end_clean(); $_G['gzipcompress'] ? ob_start('ob_gzhandler') : ob_start(); echo $content; } if ($_G['setting']['ftp']['connid']) { @ftp_close($_G['setting']['ftp']['connid']); } $_G['setting']['ftp'] = array(); if (defined('CACHE_FILE') && CACHE_FILE && !defined('CACHE_FORBIDDEN') && !defined('IN_MOBILE')) { if (diskfreespace(DISCUZ_ROOT . './' . $_G['setting']['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); } } if (defined('DISCUZ_DEBUG') && DISCUZ_DEBUG && @include(libfile('function/debug'))) { function_exists('debugmessage') && debugmessage(); } } function output_replace($content) { global $_G; if (defined('IN_MODCP') || defined('IN_ADMINCP')) return $content; if (!empty($_G['setting']['output']['str']['search'])) { if (empty($_G['setting']['domain']['app']['default'])) { $_G['setting']['output']['str']['replace'] = str_replace('{CURHOST}', $_G['siteurl'], $_G['setting']['output']['str']['replace']); } $content = str_replace($_G['setting']['output']['str']['search'], $_G['setting']['output']['str']['replace'], $content); } if (!empty($_G['setting']['output']['preg']['search'])) { if (empty($_G['setting']['domain']['app']['default'])) { $_G['setting']['output']['preg']['search'] = str_replace('\{CURHOST\}', preg_quote($_G['siteurl'], '/'), $_G['setting']['output']['preg']['search']); $_G['setting']['output']['preg']['replace'] = str_replace('{CURHOST}', $_G['siteurl'], $_G['setting']['output']['preg']['replace']); } $content = preg_replace($_G['setting']['output']['preg']['search'], $_G['setting']['output']['preg']['replace'], $content); } return $content; } function output_ajax() { global $_G; $s = ob_get_contents(); ob_end_clean(); $s = preg_replace("/([\\x01-\\x08\\x0b-\\x0c\\x0e-\\x1f])+/", ' ', $s); $s = str_replace(array(chr(0), ']]>'), array(' ', ']]>'), $s); if (defined('DISCUZ_DEBUG') && DISCUZ_DEBUG && @include(libfile('function/debug'))) { function_exists('debugmessage') && $s .= debugmessage(1); } $havedomain = implode('', $_G['setting']['domain']['app']); if ($_G['setting']['rewritestatus'] || !empty($havedomain)) { $s = output_replace($s); } return $s; } function runhooks() { if (!defined('HOOKTYPE')) { define('HOOKTYPE', !defined('IN_MOBILE') ? 'hookscript' : 'hookscriptmobile'); } if (defined('CURMODULE')) { global $_G; if ($_G['setting']['plugins'][HOOKTYPE . '_common']) { hookscript('common', 'global', 'funcs', array(), 'common'); } hookscript(CURMODULE, $_G['basescript']); } } function hookscript($script, $hscript, $type = 'funcs', $param = array(), $func = '') { global $_G; static $pluginclasses; if ($hscript == 'home') { if ($script != 'spacecp') { $script = 'space_' . (!empty($_G['gp_do']) ? $_G['gp_do'] : (!empty($_GET['do']) ? $_GET['do'] : '')); } else { $script .=!empty($_G['gp_ac']) ? '_' . $_G['gp_ac'] : (!empty($_GET['ac']) ? '_' . $_GET['ac'] : ''); } } if (!isset($_G['setting'][HOOKTYPE][$hscript][$script][$type])) { return; } if (!isset($_G['cache']['plugin'])) { loadcache('plugin'); } foreach ((array) $_G['setting'][HOOKTYPE][$hscript][$script]['module'] as $identifier => $include) { $hooksadminid[$identifier] = !$_G['setting'][HOOKTYPE][$hscript][$script]['adminid'][$identifier] || ($_G['setting'][HOOKTYPE][$hscript][$script]['adminid'][$identifier] && $_G['adminid'] > 0 && $_G['setting']['hookscript'][$hscript][$script]['adminid'][$identifier] >= $_G['adminid']); if ($hooksadminid[$identifier]) { @include_once DISCUZ_ROOT . './source/plugin/' . $include . '.class.php'; } } if (@is_array($_G['setting'][HOOKTYPE][$hscript][$script][$type])) { $_G['inhookscript'] = true; $funcs = !$func ? $_G['setting'][HOOKTYPE][$hscript][$script][$type] : array($func => $_G['setting'][HOOKTYPE][$hscript][$script][$type][$func]); foreach ($funcs as $hookkey => $hookfuncs) { foreach ($hookfuncs as $hookfunc) { if ($hooksadminid[$hookfunc[0]]) { $classkey = (HOOKTYPE != 'hookscriptmobile' ? '' : 'mobile') . 'plugin_' . ($hookfunc[0] . ($hscript != 'global' ? '_' . $hscript : '')); if (!class_exists($classkey)) { continue; } if (!isset($pluginclasses[$classkey])) { $pluginclasses[$classkey] = new $classkey; } if (!method_exists($pluginclasses[$classkey], $hookfunc[1])) { continue; } $return = $pluginclasses[$classkey]->$hookfunc[1]($param); if (is_array($return)) { if (!isset($_G['setting']['pluginhooks'][$hookkey]) || is_array($_G['setting']['pluginhooks'][$hookkey])) { foreach ($return as $k => $v) { $_G['setting']['pluginhooks'][$hookkey][$k] .= $v; } } } else { if (!is_array($_G['setting']['pluginhooks'][$hookkey])) { $_G['setting']['pluginhooks'][$hookkey] .= $return; } else { foreach ($_G['setting']['pluginhooks'][$hookkey] as $k => $v) { $_G['setting']['pluginhooks'][$hookkey][$k] .= $return; } } } } } } } $_G['inhookscript'] = false; } function hookscriptoutput($tplfile) { global $_G; if (!empty($_G['hookscriptoutput'])) { return; } if (!empty($_G['gp_mobiledata'])) { require_once libfile('class/mobiledata'); $mobiledata = new mobiledata(); if ($mobiledata->validator()) { $mobiledata->outputvariables(); } } hookscript('global', 'global'); if (defined('CURMODULE')) { $param = array('template' => $tplfile, 'message' => $_G['hookscriptmessage'], 'values' => $_G['hookscriptvalues']); hookscript(CURMODULE, $_G['basescript'], 'outputfuncs', $param); } $_G['hookscriptoutput'] = true; } function pluginmodule($pluginid, $type) { global $_G; if (!isset($_G['cache']['plugin'])) { loadcache('plugin'); } list($identifier, $module) = explode(':', $pluginid); if (!is_array($_G['setting']['plugins'][$type]) || !array_key_exists($pluginid, $_G['setting']['plugins'][$type])) { showmessage('plugin_nonexistence'); } if (!empty($_G['setting']['plugins'][$type][$pluginid]['url'])) { dheader('location: ' . $_G['setting']['plugins'][$type][$pluginid]['url']); } $directory = $_G['setting']['plugins'][$type][$pluginid]['directory']; if (empty($identifier) || !preg_match("/^[a-z]+[a-z0-9_]*\/$/i", $directory) || !preg_match("/^[a-z0-9_\-]+$/i", $module)) { showmessage('undefined_action'); } if (@!file_exists(DISCUZ_ROOT . ($modfile = './source/plugin/' . $directory . $module . '.inc.php'))) { showmessage('plugin_module_nonexistence', '', array('mod' => $modfile)); } return DISCUZ_ROOT . $modfile; } function updatecreditbyaction($action, $uid = 0, $extrasql = array(), $needle = '', $coef = 1, $update = 1, $fid = 0) { include_once libfile('class/credit'); $credit = & credit::instance(); if ($extrasql) { $credit->extrasql = $extrasql; } return $credit->execrule($action, $uid, $needle, $coef, $update, $fid); } function checklowerlimit($action, $uid = 0, $coef = 1, $fid = 0, $returnonly = 0) { require_once libfile('function/credit'); return _checklowerlimit($action, $uid, $coef, $fid, $returnonly); } function batchupdatecredit($action, $uids = 0, $extrasql = array(), $coef = 1, $fid = 0) { include_once libfile('class/credit'); $credit = & credit::instance(); if ($extrasql) { $credit->extrasql = $extrasql; } return $credit->updatecreditbyrule($action, $uids, $coef, $fid); } function updatemembercount($uids, $dataarr = array(), $checkgroup = true, $operation = '', $relatedid = 0, $ruletxt = '') { if (!empty($uids) && (is_array($dataarr) && $dataarr)) { require_once libfile('function/credit'); return _updatemembercount($uids, $dataarr, $checkgroup, $operation, $relatedid, $ruletxt); } return true; } function checkusergroup($uid = 0) { require_once libfile('class/credit'); $credit = & credit::instance(); $credit->checkusergroup($uid); } function checkformulasyntax($formula, $operators, $tokens) { $var = implode('|', $tokens); $operator = implode('', $operators); $operator = str_replace( array('+', '-', '*', '/', '(', ')', '{', '}', '\''), array('\+', '\-', '\*', '\/', '\(', '\)', '\{', '\}', '\\\''), $operator ); if (!empty($formula)) { if (!preg_match("/^([$operator\.\d\(\)]|(($var)([$operator\(\)]|$)+))+$/", $formula) || !is_null(eval(preg_replace("/($var)/", "\$\\1", $formula) . ';'))) { return false; } } return true; } function checkformulacredits($formula) { return checkformulasyntax( $formula, array('+', '-', '*', '/', ' '), array('extcredits[1-8]', 'digestposts', 'posts', 'threads', 'oltime', 'friends', 'doings', 'polls', 'blogs', 'albums', 'sharings') ); } function debug($var = null, $vardump = false) { echo '<pre>'; if ($var === null) { print_r($GLOBALS); } else { if ($vardump) { var_dump($var); } else { print_r($var); } } exit(); } function debuginfo() { global $_G; if (getglobal('setting/debug')) { $db = & DB::object(); $_G['debuginfo'] = array( 'time' => number_format((dmicrotime() - $_G['starttime']), 6), 'queries' => $db->querynum, 'memory' => ucwords($_G['memory']) ); if ($db->slaveid) { $_G['debuginfo']['queries'] = 'Total ' . $db->querynum . ', Slave ' . $db->slavequery; } return TRUE; } else { return FALSE; } } function getfocus_rand($module) { global $_G; if (empty($_G['setting']['focus']) || !array_key_exists($module, $_G['setting']['focus'])) { return null; } do { $focusid = $_G['setting']['focus'][$module][array_rand($_G['setting']['focus'][$module])]; if (!empty($_G['cookie']['nofocus_' . $focusid])) { unset($_G['setting']['focus'][$module][$focusid]); $continue = 1; } else { $continue = 0; } } while (!empty($_G['setting']['focus'][$module]) && $continue); if (!$_G['setting']['focus'][$module]) { return null; } loadcache('focus'); if (empty($_G['cache']['focus']['data']) || !is_array($_G['cache']['focus']['data'])) { return null; } return $focusid; } function check_seccode($value, $idhash) { global $_G; if (!$_G['setting']['seccodestatus']) { return true; } if (!isset($_G['cookie']['seccode' . $idhash])) { return false; } list($checkvalue, $checktime, $checkidhash, $checkformhash) = explode("\t", authcode($_G['cookie']['seccode' . $idhash], 'DECODE', $_G['config']['security']['authkey'])); return $checkvalue == strtoupper($value) && TIMESTAMP - 180 > $checktime && $checkidhash == $idhash && FORMHASH == $checkformhash; } function check_secqaa($value, $idhash) { global $_G; if (!$_G['setting']['secqaa']) { return true; } if (!isset($_G['cookie']['secqaa' . $idhash])) { return false; } loadcache('secqaa'); list($checkvalue, $checktime, $checkidhash, $checkformhash) = explode("\t", authcode($_G['cookie']['secqaa' . $idhash], 'DECODE', $_G['config']['security']['authkey'])); return $checkvalue == md5($value) && TIMESTAMP - 180 > $checktime && $checkidhash == $idhash && FORMHASH == $checkformhash; } function adshow($parameter) { global $_G; if ($_G['inajax']) { return; } $params = explode('/', $parameter); $customid = 0; $customc = explode('_', $params[0]); if ($customc[0] == 'custom') { $params[0] = $customc[0]; $customid = $customc[1]; } $adcontent = null; if (empty($_G['setting']['advtype']) || !in_array($params[0], $_G['setting']['advtype'])) { $adcontent = ''; } if ($adcontent === null) { loadcache('advs'); $adids = array(); $evalcode = &$_G['cache']['advs']['evalcode'][$params[0]]; $parameters = &$_G['cache']['advs']['parameters'][$params[0]]; $codes = &$_G['cache']['advs']['code'][$_G['basescript']][$params[0]]; if (!empty($codes)) { foreach ($codes as $adid => $code) { $parameter = &$parameters[$adid]; $checked = true; @eval($evalcode['check']); if ($checked) { $adids[] = $adid; } } if (!empty($adids)) { $adcode = $extra = ''; @eval($evalcode['create']); if (empty($notag)) { $adcontent = '<div' . ($params[1] != '' ? ' class="' . $params[1] . '"' : '') . $extra . '>' . $adcode . '</div>'; } else { $adcontent = $adcode; } } } } $adfunc = 'ad_' . $params[0]; $_G['setting']['pluginhooks'][$adfunc] = null; hookscript('ad', 'global', 'funcs', array('params' => $params, 'content' => $adcontent), $adfunc); hookscript('ad', $_G['basescript'], 'funcs', array('params' => $params, 'content' => $adcontent), $adfunc); return $_G['setting']['pluginhooks'][$adfunc] === null ? $adcontent : $_G['setting']['pluginhooks'][$adfunc]; } function showmessage($message, $url_forward = '', $values = array(), $extraparam = array(), $custom = 0) { require_once libfile('function/message'); return dshowmessage($message, $url_forward, $values, $extraparam, $custom); } function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) { if (!getgpc($var)) { return FALSE; } else { global $_G; if (!empty($_G['gp_mobiledata'])) { require_once libfile('class/mobiledata'); $mobiledata = new mobiledata(); if ($mobiledata->validator()) { return TRUE; } } if ($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_G['gp_formhash']) && $_G['gp_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 (checkperm('seccode')) { if ($secqaacheck && !check_secqaa($_G['gp_secanswer'], $_G['gp_sechash'])) { showmessage('submit_secqaa_invalid'); } if ($seccodecheck && !check_seccode($_G['gp_seccodeverify'], $_G['gp_sechash'])) { showmessage('submit_seccode_invalid'); } } return TRUE; } else { showmessage('submit_invalid'); } } } function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 5, $autogoto = FALSE, $simple = FALSE) { global $_G; $ajaxtarget = !empty($_G['gp_ajaxtarget']) ? " ajaxtarget=\"" . htmlspecialchars($_G['gp_ajaxtarget']) . "\" " : ''; $a_name = ''; if (strpos($mpurl, '#') !== FALSE) { $a_strs = explode('#', $mpurl); $mpurl = $a_strs[0]; $a_name = '#' . $a_strs[1]; } if (defined('IN_ADMINCP')) { $shownum = $showkbd = TRUE; $lang['prev'] = '&lsaquo;&lsaquo;'; $lang['next'] = '&rsaquo;&rsaquo;'; } else { $shownum = $showkbd = FALSE; if (defined('IN_MOBILE') && !defined('TPL_DEFAULT')) { $lang['prev'] = lang('core', 'prevpage'); $lang['next'] = lang('core', 'nextpage'); } else { $lang['prev'] = '&nbsp;&nbsp;'; $lang['next'] = lang('core', 'nextpage'); } } if (defined('IN_MOBILE') && !defined('TPL_DEFAULT')) { $dot = '..'; $page = intval($page) < 10 && intval($page) > 0 ? $page : 4; } else { $dot = '...'; } $multipage = ''; $mpurl .= strpos($mpurl, '?') !== FALSE ? '&' : '?'; $realpages = 1; $_G['page_next'] = 0; $page -= strlen($curpage) - 1; if ($page <= 0) { $page = 1; } if ($num > $perpage) { $offset = floor($page * 0.5); $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; } } $_G['page_next'] = $to; $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="' . $mpurl . 'page=1' . $a_name . '" class="first"' . $ajaxtarget . '>1 ' . $dot . '</a>' : '') . ($curpage > 1 && !$simple ? '<a href="' . $mpurl . 'page=' . ($curpage - 1) . $a_name . '" 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 ? '#' : $a_name) . '"' . $ajaxtarget . '>' . $i . '</a>'; } $multipage .= ($to < $pages ? '<a href="' . $mpurl . 'page=' . $pages . $a_name . '" class="last"' . $ajaxtarget . '>' . $dot . ' ' . $realpages . '</a>' : '') . ($curpage < $pages && !$simple ? '<a href="' . $mpurl . 'page=' . ($curpage + 1) . $a_name . '" class="nxt"' . $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; doane(event);}" /></kbd>' : ''); $multipage = $multipage ? '<div class="pg">' . ($shownum && !$simple ? '<em>&nbsp;' . $num . '&nbsp;</em>' : '') . $multipage . '</div>' : ''; } $maxpage = $realpages; return $multipage; } function multi_sellthread($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 5, $autogoto = FALSE, $simple = FALSE) { global $_G; $ajaxtarget = !empty($_G['gp_ajaxtarget']) ? " ajaxtarget=\"" . htmlspecialchars($_G['gp_ajaxtarget']) . "\" " : ''; $a_name = ''; if (strpos($mpurl, '#') !== FALSE) { $a_strs = explode('#', $mpurl); $mpurl = $a_strs[0]; $a_name = '#' . $a_strs[1]; } if (defined('IN_ADMINCP')) { $shownum = $showkbd = TRUE; $lang['prev'] = '&lsaquo;&lsaquo;'; $lang['next'] = '&rsaquo;&rsaquo;'; } else { $shownum = $showkbd = FALSE; if (defined('IN_MOBILE') && !defined('TPL_DEFAULT')) { $lang['prev'] = lang('core', 'prevpage'); $lang['next'] = lang('core', 'nextpage'); } else { $lang['prev'] = '&nbsp;&nbsp;'; $lang['next'] = lang('core', 'nextpage'); } } if (defined('IN_MOBILE') && !defined('TPL_DEFAULT')) { $dot = '..'; $page = intval($page) < 10 && intval($page) > 0 ? $page : 4; } else { $dot = '...'; } $multipage = ''; //$mpurl .= strpos($mpurl, '?') !== FALSE ? '&' : '?'; $realpages = 1; $_G['page_next'] = 0; $page -= strlen($curpage) - 1; if ($page <= 0) { $page = 1; } if ($num > $perpage) { $offset = floor($page * 0.5); $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; } } $_G['page_next'] = $to; $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="' . $mpurl . '1'. '/' . $a_name . '" class="first"' . $ajaxtarget . '>1 ' . $dot . '</a>' : '') . ($curpage > 1 && !$simple ? '<a href="' . $mpurl . '' . ($curpage - 1) . '/' . $a_name . '" class="prev"' . $ajaxtarget . '>' . $lang['prev'] . '</a>' : ''); for ($i = $from; $i <= $to; $i++) { $multipage .= $i == $curpage ? '<strong>' . $i . '</strong>' : '<a href="' . $mpurl . '' . $i . '/'. ($ajaxtarget && $i == $pages && $autogoto ? '#' : $a_name) . '"' . $ajaxtarget . '>' . $i . '</a>'; } $multipage .= ($to < $pages ? '<a href="' . $mpurl . '' . $pages .'/' . $a_name . '" class="last"' . $ajaxtarget . '>' . $dot . ' ' . $realpages . '</a>' : '') . ($curpage < $pages && !$simple ? '<a href="' . $mpurl . '' . ($curpage + 1) .'/' . $a_name . '" class="nxt"' . $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 . '\'+this.value; doane(event)+'/';}" /></kbd>' : ''); $multipage = $multipage ? '<div class="pg">' . ($shownum && !$simple ? '<em>&nbsp;' . $num . '&nbsp;</em>' : '') . $multipage . '</div>' : ''; } $maxpage = $realpages; return $multipage; } //add by guo_andy@2014-04-17 10:13 function multi_mobile($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 1, $autogoto = FALSE, $simple = FALSE) { global $_G; $ajaxtarget = !empty($_G['gp_ajaxtarget']) ? " ajaxtarget=\"" . htmlspecialchars($_G['gp_ajaxtarget']) . "\" " : ''; $a_name = ''; if (strpos($mpurl, '#') !== FALSE) { $a_strs = explode('#', $mpurl); $mpurl = $a_strs[0]; $a_name = '#' . $a_strs[1]; } $lang['prev'] = lang('core', 'prevpage'); $lang['next'] = lang('core', 'nextpage'); $lang['index'] = lang('core', 'indexpage'); $lang['end'] = lang('core', 'endpage'); $lang['jumpto'] = lang('core', 'jumpto'); $lang['cancle'] = lang('core', 'cancle'); $dot = ''; $page = intval($page) < 10 && intval($page) > 0 ? $page : 4; $multipage = ''; $mpurl .= strpos($mpurl, '?') !== FALSE ? '&' : '?'; $realpages = 1; $_G['page_next'] = 0; $page -= strlen($curpage) - 1; if ($page <= 0) { $page = 1; } if ($num > $perpage) { $offset = floor($page * 0.5); $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; } } $_G['page_next'] = $to; if(strpos($mpurl, '%')) { //处理俱乐部翻页 $multipage = ('<a href="' . str_replace('%', 1, $mpurl) . '" class="first"' . $ajaxtarget . '>'.$lang['index'].' ' . $dot . '</a>') .($curpage > 1 && !$simple ? '<a href="' . str_replace('%', $curpage - 1, $mpurl) . '" class="prev"' . $ajaxtarget . '>' . $lang['prev'] . '</a>' : ''); $multipage .= '<input type="text" id="custompage" name="custompage" placeholder="'.$curpage.'/'.$realpages.'" />'; $multipage .= ('<a href="' . str_replace('%', $curpage + 1, $mpurl) . '" class="nxt"' . $ajaxtarget . '>' . $lang['next'] . '</a>') .('<a href="' . str_replace('%', $pages, $mpurl) . '" class="last"' . $ajaxtarget . '>' . $dot . ' ' . $lang['end'] . '</a>'); $multipage .= ('<a href="javascript:;" class="jump" style="display:none;">' . $lang['jumpto'] . '</a>') .('<a href="javascript:;" class="cancle" style="display:none;"> ' . $lang['cancle'] . '</a>'); } else { $multipage = ('<a href="' . $mpurl . 'page=1' . $a_name . '" class="first"' . $ajaxtarget . '>'.$lang['index'].' ' . $dot . '</a>') .($curpage > 1 && !$simple ? '<a href="' . $mpurl . 'page=' . ($curpage - 1) . $a_name . '" class="prev"' . $ajaxtarget . '>' . $lang['prev'] . '</a>' : ''); $multipage .= '<input type="text" id="custompage" name="custompage" placeholder="'.$curpage.'/'.$realpages.'" onkeydown="if(event.keyCode==13) {window.location=\'' . $mpurl . 'page=\'+this.value; doane(event);}" />'; $multipage .= ('<a href="' . $mpurl . 'page=' . ($curpage + 1) . $a_name . '" class="nxt"' . $ajaxtarget . '>' . $lang['next'] . '</a>') .('<a href="' . $mpurl . 'page=' . $pages . $a_name . '" class="last"' . $ajaxtarget . '>' . $dot . ' ' . $lang['end'] . '</a>'); $multipage .= ('<a href="javascript:;" class="jump" style="display:none;">' . $lang['jumpto'] . '</a>') .('<a href="javascript:;" class="cancle" style="display:none;"> ' . $lang['cancle'] . '</a>'); } $multipage = $multipage ? '<div class="page page_list">' . ($shownum && !$simple ? '<em>&nbsp;' . $num . '&nbsp;</em>' : '') . $multipage . '</div>' : ''; } $maxpage = $realpages; return $multipage; } // club url write by im502 11.10.7 function multi_club($num, $perpage, $curpage, $mpurl, $maxpages = 1000, $page = 10) { global $_G; $a_name = ''; if (defined('IN_ADMINCP')) { $shownum = $showkbd = TRUE; $lang['prev'] = '&lsaquo;&lsaquo;'; $lang['next'] = '&rsaquo;&rsaquo;'; } else { $shownum = $showkbd = FALSE; if (defined('IN_MOBILE') && !defined('TPL_DEFAULT')) { $lang['prev'] = lang('core', 'prevpage'); $lang['next'] = lang('core', 'nextpage'); } else { $lang['prev'] = '&nbsp;&nbsp;'; $lang['next'] = lang('core', 'nextpage'); } } if (defined('IN_MOBILE') && !defined('TPL_DEFAULT')) { $dot = '..'; $page = intval($page) < 10 && intval($page) > 0 ? $page : 4; } else { $dot = '...'; } $multipage = ''; $realpages = 1; $_G['page_next'] = 0; $page -= strlen($curpage) - 1; if ($page <= 0) { $page = 1; } if ($num > $perpage) { $offset = floor($page * 0.5); $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; } } $_G['page_next'] = $to; $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="' . str_replace('%', 1, $mpurl) . '" class="first">1 ' . $dot . '</a>' : '') . ($curpage > 1 && !$simple ? '<a href="' . str_replace('%', ($curpage - 1), $mpurl) . '" class="prev">' . $lang['prev'] . '</a>' : ''); for ($i = $from; $i <= $to; $i++) { $multipage .= $i == $curpage ? '<strong>' . $i . '</strong>' : '<a href="' . str_replace('%', $i, $mpurl) . '">' . $i . '</a>'; } $multipage .= ($to < $pages ? '<a href="' . str_replace('%', $pages, $mpurl) . '" class="last">' . $dot . ' ' . $realpages . '</a>' : '') . ($curpage < $pages && !$simple ? '<a href="' . str_replace('%', ($curpage + 1), $mpurl) . '" class="nxt">' . $lang['next'] . '</a>' : ''); $multipage = $multipage ? '<div class="pg">' . ($shownum && !$simple ? '<em>&nbsp;' . $num . '&nbsp;</em>' : '') . $multipage . '</div>' : ''; } $maxpage = $realpages; return $multipage; } function simplepage($num, $perpage, $curpage, $mpurl) { $return = ''; $lang['next'] = lang('core', 'nextpage'); $lang['prev'] = lang('core', 'prevpage'); $next = $num == $perpage ? '<a href="' . $mpurl . '&page=' . ($curpage + 1) . '" class="nxt">' . $lang['next'] . '</a>' : ''; $prev = $curpage > 1 ? '<span class="pgb"><a href="' . $mpurl . '&page=' . ($curpage - 1) . '">' . $lang['prev'] . '</a></span>' : ''; if ($next || $prev) { $return = '<div class="pg">' . $prev . $next . '</div>'; } return $return; } function censor($message, $modword = NULL, $return = FALSE) { global $_G; require_once libfile('class/censor'); $censor = discuz_censor::instance(); $censor->check($message, $modword); if ($censor->modbanned() && !$_G['group']['ignorecensor']) { $wordbanned = implode(', ', $censor->words_found); if ($return) { return array('message' => lang('message', 'word_banned', array('wordbanned' => $wordbanned))); } if (!defined('IN_ADMINCP')) { showmessage('word_banned', '', array('wordbanned' => $wordbanned)); } else { cpmsg(lang('message', 'word_banned'), '', 'error', array('wordbanned' => $wordbanned)); } } if ($_G['group']['allowposturl'] == 0 || $_G['group']['allowposturl'] == 2) { $urllist = get_url_list($message); if (is_array($urllist[1])) foreach ($urllist[1] as $key => $val) { if (!$val = trim($val)) continue; if (!iswhitelist($val)) { if ($_G['group']['allowposturl'] == 0) { showmessage('post_url_nopermission'); } elseif ($_G['group']['allowposturl'] == 2) { $message = str_replace('[url]' . $urllist[0][$key] . '[/url]', $urllist[0][$key], $message); $message = preg_replace( array( "@\[url=.*?" . preg_quote($urllist[0][$key], '@') . ".*?\](.*?)\[/url\]@is", "@href=('|\")" . preg_quote($urllist[0][$key], '@') . "\\1@is", "@\[url\](.*?" . preg_quote($urllist[0][$key], '@') . ".*?)\[/url\]@is", ), array( '\\1', '', '\\1', ), $message); } } } } return $message; } function censorapi($message) { global $_G; if(empty($message)) { $return = array( 'ret' => 'failed', 'message' => null ); return json_encode($return); } require_once libfile('class/censor'); $censor = discuz_censor::instance(); $censor->check($message, '**'); if($censor->modbanned()) { $wordbanned = implode(', ', $censor->words_found); $return = array( 'ret' => 'banned', 'wordbanned' => iconv('gbk', 'utf-8', $wordbanned) ); return json_encode($return); } $return = array( 'ret' => 'succeed', 'message' => iconv('gbk', 'utf-8', $message) ); return json_encode($return); } function censormod($message) { global $_G; if ($_G['group']['ignorecensor']) { return false; } $modposturl = false; if ($_G['group']['allowposturl'] == 1) { $urllist = get_url_list($message); if (is_array($urllist[1])) foreach ($urllist[1] as $key => $val) { if (!$val = trim($val)) continue; if (!iswhitelist($val)) { $modposturl = true; } } } if ($modposturl) { return true; } require_once libfile('class/censor'); $censor = discuz_censor::instance(); $censor->check($message); return $censor->modmoderated(); } function space_merge(&$values, $tablename) { global $_G; $uid = empty($values['uid']) ? $_G['uid'] : $values['uid']; $var = "member_{$uid}_{$tablename}"; if ($uid) { if (!isset($_G[$var])) { $query = DB::query("SELECT * FROM " . DB::table('common_member_' . $tablename) . " WHERE uid='$uid'"); if ($_G[$var] = DB::fetch($query)) { if ($tablename == 'field_home') { $_G['setting']['privacy'] = empty($_G['setting']['privacy']) ? array() : (is_array($_G['setting']['privacy']) ? $_G['setting']['privacy'] : unserialize($_G['setting']['privacy'])); $_G[$var]['privacy'] = empty($_G[$var]['privacy']) ? array() : is_array($_G[$var]['privacy']) ? $_G[$var]['privacy'] : unserialize($_G[$var]['privacy']); foreach (array('feed', 'view', 'profile') as $pkey) { if (empty($_G[$var]['privacy'][$pkey]) && !isset($_G[$var]['privacy'][$pkey])) { $_G[$var]['privacy'][$pkey] = isset($_G['setting']['privacy'][$pkey]) ? $_G['setting']['privacy'][$pkey] : array(); } } $_G[$var]['acceptemail'] = empty($_G[$var]['acceptemail']) ? array() : unserialize($_G[$var]['acceptemail']); if (empty($_G[$var]['acceptemail'])) { $_G[$var]['acceptemail'] = empty($_G['setting']['acceptemail']) ? array() : unserialize($_G['setting']['acceptemail']); } } } else { DB::insert('common_member_' . $tablename, array('uid' => $uid)); $_G[$var] = array(); } } $values = array_merge($values, $_G[$var]); } } function runlog($file, $message, $halt = 0) { global $_G; $nowurl = $_SERVER['REQUEST_URI'] ? $_SERVER['REQUEST_URI'] : ($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']); $log = dgmdate($_G['timestamp'], 'Y-m-d H:i:s') . "\t" . $_G['clientip'] . "\t$_G[uid]\t{$nowurl}\t" . str_replace(array("\r", "\n"), array(' ', ' '), trim($message)) . "\n"; writelog($file, $log); if ($halt) { exit(); } } function stripsearchkey($string) { $string = trim($string); $string = str_replace('*', '%', addcslashes($string, '%_')); $string = str_replace('_', '\_', $string); return $string; } function dmkdir($dir, $mode = 0777, $makeindex = TRUE) { if (!is_dir($dir)) { dmkdir(dirname($dir), $mode, $makeindex); @mkdir($dir, $mode); if (!empty($makeindex)) { @touch($dir . '/index.html'); @chmod($dir . '/index.html', 0777); } } return true; } function dreferer($default = '') { global $_G; $default = empty($default) ? $GLOBALS['_t_curapp'] : ''; $_G['referer'] = !empty($_G['gp_referer']) ? $_G['gp_referer'] : $_SERVER['HTTP_REFERER']; $_G['referer'] = substr($_G['referer'], -1) == '?' ? substr($_G['referer'], 0, -1) : $_G['referer']; if (strpos($_G['referer'], 'member.php?mod=logging')) { $_G['referer'] = $default; } $_G['referer'] = htmlspecialchars($_G['referer'], ENT_QUOTES); $_G['referer'] = str_replace('&', '&', $_G['referer']); $reurl = parse_url($_G['referer']); if (!in_array($reurl['host'], array('mai.cehome.com','topics.cehome.com','productv2.cehome.com', 'product.cehome.com', 'sem1304.topic.cehome.com', 'brand.cehome.com', 'dealer.cehome.com', 'dealers.cehome.com', 'www.tiebaobei.com', 'www.cehome.com', 'news.cehome.com', 'photo.cehome.com', 'm.cehome.com', 'm.news.cehome.com', 'm.photo.cehome.com'))) { if (!empty($reurl['host']) && !in_array($reurl['host'], array($_SERVER['HTTP_HOST'], 'www.' . $_SERVER['HTTP_HOST'])) && !in_array($_SERVER['HTTP_HOST'], array($reurl['host'], 'www.' . $reurl['host']))) { if (!in_array($reurl['host'], $_G['setting']['domain']['app']) && !isset($_G['setting']['domain']['list'][$reurl['host']])) { $domainroot = substr($reurl['host'], strpos($reurl['host'], '.') + 1); if (empty($_G['setting']['domain']['root']) || (is_array($_G['setting']['domain']['root']) && !in_array($domainroot, $_G['setting']['domain']['root']))) { $_G['referer'] = $_G['setting']['domain']['defaultindex'] ? $_G['setting']['domain']['defaultindex'] : 'index.php'; } } } elseif (empty($reurl['host'])) { $_G['referer'] = $_G['siteurl'] . './' . $_G['referer']; } } return strip_tags($_G['referer']); } function ftpcmd($cmd, $arg1 = '') { static $ftp; $ftpon = getglobal('setting/ftp/on'); if (!$ftpon) { return $cmd == 'error' ? -101 : 0; } elseif ($ftp == null) { require_once libfile('class/ftp'); $ftp = & discuz_ftp::instance(); } if (!$ftp->enabled) { return $ftp->error(); } elseif ($ftp->enabled && !$ftp->connectid) { $ftp->connect(); } switch ($cmd) { case 'upload' : return $ftp->upload(getglobal('setting/attachdir') . '/' . $arg1, $arg1); break; case 'delete' : return $ftp->ftp_delete($arg1); break; case 'close' : return $ftp->ftp_close(); break; case 'error' : return $ftp->error(); break; case 'object' : return $ftp; break; default : return false; } } function ftpcmd2($cmd, $arg1 = '') { static $imgftp; $imgftpon = getglobal('setting/imgftp/on'); if (!$imgftpon) { return $cmd == 'error' ? -101 : 0; } elseif ($imgftp == null) { require_once libfile('class/imgftp'); $imgftp = & discuz_imgftp::instance(getglobal('setting/imgftp')); } if (!$imgftp->enabled) { return $imgftp->error(); } elseif ($imgftp->enabled && !$imgftp->connectid) { $imgftp->connect(); } switch ($cmd) { case 'upload' : return $imgftp->upload(getglobal('setting/attachdir') . '/' . $arg1, $arg1); break; case 'delete' : return $imgftp->ftp_delete($arg1); break; case 'close' : return $imgftp->ftp_close(); break; case 'error' : return $imgftp->error(); break; case 'object' : return $imgftp; break; default : return false; } } function diconv($str, $in_charset, $out_charset = CHARSET, $ForceTable = FALSE) { global $_G; $in_charset = strtoupper($in_charset); $out_charset = strtoupper($out_charset); if (empty($str) || $in_charset == $out_charset) { return $str; } $out = ''; if (!$ForceTable) { if (function_exists('iconv')) { $out = iconv($in_charset, $out_charset . '//IGNORE', $str); } elseif (function_exists('mb_convert_encoding')) { $out = mb_convert_encoding($str, $out_charset, $in_charset); } } if ($out == '') { require_once libfile('class/chinese'); $chinese = new Chinese($in_charset, $out_charset, true); $out = $chinese->Convert($str); } return $out; } function renum($array) { $newnums = $nums = array(); foreach ($array as $id => $num) { $newnums[$num][] = $id; $nums[$num] = $num; } return array($nums, $newnums); } function getonlinenum($fid = 0, $tid = 0) { if ($fid) { $sql = " AND fid='$fid'"; } if ($tid) { $sql = " AND tid='$tid'"; } return DB::result_first('SELECT count(*) FROM ' . DB::table("common_session") . " WHERE 1 $sql"); } function sizecount($size) { if ($size >= 1073741824) { $size = round($size / 1073741824 * 100) / 100 . ' GB'; } elseif ($size >= 1048576) { $size = round($size / 1048576 * 100) / 100 . ' MB'; } elseif ($size >= 1024) { $size = round($size / 1024 * 100) / 100 . ' KB'; } else { $size = $size . ' Bytes'; } return $size; } function swapclass($class1, $class2 = '') { static $swapc = null; $swapc = isset($swapc) && $swapc != $class1 ? $class1 : $class2; return $swapc; } function writelog($file, $log) { global $_G; $yearmonth = dgmdate(TIMESTAMP, 'Ym', $_G['setting']['timeoffset']); $logdir = DISCUZ_ROOT . './data/log/'; $logfile = $logdir . $yearmonth . '_' . $file . '.php'; if (@filesize($logfile) > 2048000) { $dir = opendir($logdir); $length = strlen($file); $maxid = $id = 0; while ($entry = readdir($dir)) { if (strpos($entry, $yearmonth . '_' . $file) !== false) { $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 getcolorpalette($colorid, $id, $background, $fun = '') { return "<input id=\"c$colorid\" onclick=\"c{$colorid}_frame.location='static/image/admincp/getcolor.htm?c{$colorid}|{$id}|{$fun}';showMenu({'ctrlid':'c$colorid'})\" type=\"button\" class=\"colorwd\" value=\"\" style=\"background: $background\"><span id=\"c{$colorid}_menu\" style=\"display: none\"><iframe name=\"c{$colorid}_frame\" src=\"\" frameborder=\"0\" width=\"210\" height=\"148\" scrolling=\"no\"></iframe></span>"; } function getstatus($status, $position) { $t = $status & pow(2, $position - 1) ? 1 : 0; return $t; } 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 notification_add($touid, $type, $note, $notevars = array(), $system = 0) { global $_G; $tospace = array('uid' => $touid); space_merge($tospace, 'field_home'); $filter = empty($tospace['privacy']['filter_note']) ? array() : array_keys($tospace['privacy']['filter_note']); if ($filter && (in_array($type . '|0', $filter) || in_array($type . '|' . $_G['uid'], $filter))) { return false; } $notevars['actor'] = "<a href=\"home.php?mod=space&uid=$_G[uid]\">" . $_G['member']['username'] . "</a>"; if (!is_numeric($type)) { $vars = explode(':', $note); if (count($vars) == 2) { $notestring = lang('plugin/' . $vars[0], $vars[1], $notevars); } else { $notestring = lang('notification', $note, $notevars); } $frommyapp = false; } else { $frommyapp = true; $notestring = $note; } $oldnote = array(); if ($notevars['from_id'] && $notevars['from_idtype']) { $oldnote = DB::fetch_first("SELECT * FROM " . DB::table('home_notification') . " WHERE from_id='$notevars[from_id]' AND from_idtype='$notevars[from_idtype]' AND uid='$touid'"); } if (empty($oldnote['from_num'])) $oldnote['from_num'] = 0; $notevars['from_num'] = $notevars['from_num'] ? $notevars['from_num'] : 1; $setarr = array( 'uid' => $touid, 'type' => $type, 'new' => 1, 'authorid' => $_G['uid'], 'author' => $_G['username'], 'note' => addslashes($notestring), 'dateline' => $_G['timestamp'], 'from_id' => $notevars['from_id'], 'from_idtype' => $notevars['from_idtype'], 'from_num' => ($oldnote['from_num'] + $notevars['from_num']) ); if ($system) { $setarr['authorid'] = 0; $setarr['author'] = ''; } if ($oldnote['id']) { DB::update('home_notification', $setarr, array('id' => $oldnote['id'])); } else { $oldnote['new'] = 0; DB::insert('home_notification', $setarr); } if (empty($oldnote['new'])) { DB::query("UPDATE " . DB::table('common_member') . " SET newprompt=newprompt+1 WHERE uid='$touid'"); require_once libfile('function/mail'); $mail_subject = lang('notification', 'mail_to_user'); sendmail_touser($touid, $mail_subject, $notestring, $frommyapp ? 'myapp' : $type); } require_once libfile('class/umeng'); $umeng = new discuz_umeng(); $title = iconv('gbk', 'utf-8', lang('notification', 'mail_to_user')); $message = $notestring; if($note == 'system_notice') { $ticker = lang('apps', 'you_have_a_new_system_notice'); preg_match('/(.*?)<p class="summary">(.*?)<\/p>/s', $notestring, $match); $title = $match[1]; $message = $match[2]; } elseif($note == 'reppost_noticeauthor') { $ticker = lang('apps', 'you_have_a_new_reppost'); $title = $ticker; } $ticker = $ticker ? $ticker : $title; $message = iconv('gbk', 'utf-8', strip_tags($message)); $flag = $type == 'post' ? 0 : 1; $umeng->sendAndroidCustomizedcast($touid, $ticker, $title, $message, 0, 'openMessagePage', $flag); if (!$system && $_G['uid'] && $touid != $_G['uid']) { DB::query("UPDATE " . DB::table('home_friend') . " SET num=num+1 WHERE uid='$_G[uid]' AND fuid='$touid'"); } } function manage_addnotify($type, $from_num = 0, $langvar = array()) { global $_G; $notifyusers = unserialize($_G['setting']['notifyusers']); $notifytypes = explode(',', $_G['setting']['adminnotifytypes']); $notifytypes = array_flip($notifytypes); $notearr = array('from_id' => 1, 'from_idtype' => $type, 'from_num' => $from_num); if ($langvar) { $langkey = $langvar['langkey']; $notearr = array_merge($notearr, $langvar); } else { $langkey = 'manage_' . $type; } foreach ($notifyusers as $uid => $user) { if ($user['types'][$notifytypes[$type]]) { notification_add($uid, $type, $langkey, $notearr, 1); } } } function sendpm($toid, $subject, $message, $fromid = '', $replypmid = 0, $isusername = 0, $type = 0) { global $_G; if ($fromid === '') { $fromid = $_G['uid']; } loaducenter(); require_once libfile('class/umeng'); $umeng = new discuz_umeng(); $sub = $subject ? iconv('gbk', 'utf-8', $subject) : lang('apps', 'sendpm_newpm'); $msg = iconv('gbk', 'utf-8', strip_tags($message)); if(intval($fromid)) { $name = DB::result_first("SELECT `username` FROM ".DB::table('common_member')." WHERE `uid` = '$fromid'"); $name = iconv('gbk', 'utf-8', $name); } if($toid) { $id_arr = explode(',', $toid); foreach($id_arr as $value) { if($isusername) { $touid = DB::result_first("SELECT `uid` FROM ".DB::table('common_member')." WHERE `username` = '$value'"); } else { $touid = $value; } $msg = $name ? $name : $sub; @$umeng->sendAndroidCustomizedcast($touid, $sub, $sub, $msg, 0, 'openMessagePage', 2); } } elseif($replypmid) { $pms = uc_pm_view($_G['uid'], $replypmid); if(!empty($pms)) { $touid = $pms[0]['msgtoid']; $msg = $name ? $name : $sub; $umeng->sendAndroidCustomizedcast($touid, $sub, $sub, $msg, 0, 'openMessagePage', 2); } } return uc_pm_send($fromid, $toid, $subject, $message, 1, $replypmid, $isusername, $type); } function g_icon($groupid, $return = 0) { global $_G; if (empty($_G['cache']['usergroups'][$groupid]['icon'])) { $s = ''; } else { if (substr($_G['cache']['usergroups'][$groupid]['icon'], 0, 5) == 'http:') { $s = '<img src="' . $_G['cache']['usergroups'][$groupid]['icon'] . '" alt="" class="vm" />'; } else { $s = '<img src="' . $_G['setting']['attachurl'] . 'common/' . $_G['cache']['usergroups'][$groupid]['icon'] . '" alt="" class="vm" />'; } } if ($return) { return $s; } else { echo $s; } } function updatediytemplate($targettplname = '') { global $_G; $r = false; $where = empty($targettplname) ? '' : " WHERE targettplname='$targettplname'"; $query = DB::query("SELECT * FROM " . DB::table('common_diy_data') . "$where"); require_once libfile('function/portalcp'); while ($value = DB::fetch($query)) { $r = save_diy_data($value['primaltplname'], $value['targettplname'], unserialize($value['diycontent'])); } return $r; } function space_key($uid, $appid = 0) { global $_G; $siteuniqueid = DB::result_first("SELECT svalue FROM " . DB::table('common_setting') . " WHERE skey='siteuniqueid'"); return substr(md5($siteuniqueid . '|' . $uid . (empty($appid) ? '' : '|' . $appid)), 8, 16); } function getposttablebytid($tids, $primary = 0) { global $_G; $isstring = false; if (!is_array($tids)) { $tids = array(intval($tids)); $isstring = true; } $tids = array_unique($tids); $tids = array_flip($tids); if (!$primary) { loadcache('threadtableids'); $threadtableids = !empty($_G['cache']['threadtableids']) ? $_G['cache']['threadtableids'] : array(); if (!in_array(0, $threadtableids)) { $threadtableids = array_merge(array(0), $threadtableids); } } else { $threadtableids = array(0); } $tables = array(); $posttable = ''; $singletable = count($tids) > 1 ? false : true; foreach ($threadtableids as $tableid) { $threadtable = $tableid ? "forum_thread_$tableid" : 'forum_thread'; $query = DB::query("SELECT tid, posttableid FROM " . DB::table($threadtable) . " WHERE tid IN(" . dimplode(array_keys($tids)) . ")"); while ($value = DB::fetch($query)) { $posttable = 'forum_post' . ($value['posttableid'] ? "_$value[posttableid]" : ''); $tables[$posttable][$value['tid']] = $value['tid']; unset($tids[$value['tid']]); } if (!count($tids)) { break; } } if (empty($posttable)) { $posttable = 'forum_post'; $tables[$posttable] = array_flip($tids); } return $isstring ? $posttable : $tables; } function getposttable($tableid = 0, $prefix = false) { global $_G; $tableid = intval($tableid); if ($tableid) { loadcache('posttableids'); $tableid = $_G['cache']['posttableids'] && in_array($tableid, $_G['cache']['posttableids']) ? $tableid : 0; $tablename = 'forum_post' . ($tableid ? "_$tableid" : ''); } else { $tablename = 'forum_post'; } if ($prefix) { $tablename = DB::table($tablename); } return $tablename; } function memory($cmd, $key = '', $value = '', $ttl = 0) { $discuz = & discuz_core::instance(); if ($cmd == 'check') { return $discuz->mem->enable ? $discuz->mem->type : ''; } elseif ($discuz->mem->enable && in_array($cmd, array('set', 'get', 'rm'))) { switch ($cmd) { case 'set': return $discuz->mem->set($key, $value, $ttl); break; case 'get': return $discuz->mem->get($key); break; case 'rm': return $discuz->mem->rm($key); break; } } return null; } function ipaccess($ip, $accesslist) { return preg_match("/^(" . str_replace(array("\r\n", ' '), array('|', ''), preg_quote($accesslist, '/')) . ")/", $ip); } function ipbanned($onlineip) { global $_G; if ($_G['setting']['ipaccess'] && !ipaccess($onlineip, $_G['setting']['ipaccess'])) { return TRUE; } loadcache('ipbanned'); if (empty($_G['cache']['ipbanned'])) { return FALSE; } else { if ($_G['cache']['ipbanned']['expiration'] < TIMESTAMP) { require_once libfile('function/cache'); updatecache('ipbanned'); } return preg_match("/^(" . $_G['cache']['ipbanned']['regexp'] . ")$/", $onlineip); } } function getcount($tablename, $condition) { if (empty($condition)) { $where = '1'; } elseif (is_array($condition)) { $where = DB::implode_field_value($condition, ' AND '); } else { $where = $condition; } $ret = intval(DB::result_first("SELECT COUNT(*) AS num FROM " . DB::table($tablename) . " WHERE $where")); return $ret; } function sysmessage($message) { require libfile('function/sysmessage'); show_system_message($message); } function forumperm($permstr, $groupid = 0) { global $_G; $groupidarray = array($_G['groupid']); if ($groupid) { return preg_match("/(^|\t)(" . $groupid . ")(\t|$)/", $permstr); } foreach (explode("\t", $_G['member']['extgroupids']) as $extgroupid) { if ($extgroupid = intval(trim($extgroupid))) { $groupidarray[] = $extgroupid; } } if ($_G['setting']['verify']['enabled']) { getuserprofile('verify1'); foreach ($_G['setting']['verify'] as $vid => $verify) { if ($verify['available'] && $_G['member']['verify' . $vid] == 1) { $groupidarray[] = 'v' . $vid; } } } return preg_match("/(^|\t)(" . implode('|', $groupidarray) . ")(\t|$)/", $permstr); } if (!function_exists('file_put_contents')) { if (!defined('FILE_APPEND')) define('FILE_APPEND', 8); function file_put_contents($filename, $data, $flag = 0) { $return = false; if ($fp = @fopen($filename, $flag != FILE_APPEND ? 'w' : 'a')) { if ($flag == LOCK_EX) @flock($fp, LOCK_EX); $return = fwrite($fp, is_array($data) ? implode('', $data) : $data); fclose($fp); } return $return; } } function checkperm($perm) { global $_G; return (empty($_G['group'][$perm]) ? '' : $_G['group'][$perm]); } function periodscheck($periods, $showmessage = 1) { global $_G; if (!$_G['group']['disableperiodctrl'] && $_G['setting'][$periods]) { $now = dgmdate(TIMESTAMP, 'G.i', $_G['setting']['timeoffset']); foreach (explode("\r\n", str_replace(':', '.', $_G['setting'][$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", ', ', $_G['setting'][$periods]); if ($showmessage) { showmessage('period_nopermission', NULL, array('banperiods' => $banperiods), array('login' => 1)); } else { return TRUE; } } } } return FALSE; } function cknewuser($return = 0) { global $_G; $result = true; if (!$_G['uid']) return true; if (checkperm('disablepostctrl')) { return $result; } $ckuser = $_G['member']; if ($_G['setting']['newbiespan'] && $_G['timestamp'] - $ckuser['regdate'] < $_G['setting']['newbiespan'] * 60) { if (empty($return)) showmessage('no_privilege_newbiespan', '', array('newbiespan' => $_G['setting']['newbiespan']), array('return' => true)); $result = false; } if ($_G['setting']['need_avatar'] && empty($ckuser['avatarstatus'])) { if (empty($return)) showmessage('no_privilege_avatar', '', array(), array('return' => true)); $result = false; } if ($_G['setting']['need_email'] && empty($ckuser['emailstatus'])) { if (empty($return)) showmessage('no_privilege_email', '', array(), array('return' => true)); $result = false; } if ($_G['setting']['need_friendnum']) { space_merge($ckuser, 'count'); if ($ckuser['friends'] < $_G['setting']['need_friendnum']) { if (empty($return)) showmessage('no_privilege_friendnum', '', array('friendnum' => $_G['setting']['need_friendnum']), array('return' => true)); $result = false; } } return $result; } function manyoulog($logtype, $uids, $action, $fid = '') { global $_G; if ($_G['setting']['my_app_status'] && $logtype == 'user') { $action = daddslashes($action); $values = array(); $uids = is_array($uids) ? $uids : array($uids); foreach ($uids as $uid) { $uid = intval($uid); $values[$uid] = "('$uid', '$action', '" . TIMESTAMP . "')"; } if ($values) { DB::query("REPLACE INTO " . DB::table('common_member_log') . " (`uid`, `action`, `dateline`) VALUES " . implode(',', $values)); } } } function useractionlog($uid, $action) { $uid = intval($uid); if (empty($uid) || empty($action)) { return false; } $action = getuseraction($action); $timestamp = TIMESTAMP; DB::query("INSERT INTO " . DB::table('common_member_action_log') . " (`uid`, `action`, `dateline`) VALUES ('$uid', '$action', '$timestamp')"); return true; } function getuseraction($var) { $value = false; $ops = array('tid', 'pid', 'blogid', 'picid', 'doid', 'sid', 'aid', 'uid_cid', 'blogid_cid', 'sid_cid', 'picid_cid', 'aid_cid', 'topicid_cid'); if (is_numeric($var)) { $value = isset($ops[$var]) ? $ops[$var] : false; } else { $value = array_search($var, $ops); } return $value; } function getuserapp($panel = 0) { require_once libfile('function/manyou'); manyou_getuserapp($panel); return true; } function getmyappiconpath($appid, $iconstatus = 0) { if ($iconstatus > 0) { return getglobal('setting/attachurl') . './' . 'myapp/icon/' . $appid . '.jpg'; } return 'http://appicon.manyou.com/icons/' . $appid; } function getexpiration() { global $_G; $date = getdate($_G['timestamp']); return mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']) + 86400; } function return_bytes($val) { $val = trim($val); $last = strtolower($val{strlen($val) - 1}); switch ($last) { case 'g': $val *= 1024; case 'm': $val *= 1024; case 'k': $val *= 1024; } return $val; } function get_url_list($message) { $return = array(); (strpos($message, '[/img]') || strpos($message, '[/flash]')) && $message = preg_replace("/\[img[^\]]*\]\s*([^\[\<\r\n]+?)\s*\[\/img\]|\[flash[^\]]*\]\s*([^\[\<\r\n]+?)\s*\[\/flash\]/is", '', $message); if (preg_match_all("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|thunder|qqdl|synacast){1}:\/\/|www\.)[^\[\]\"']+/i", $message, $urllist)) { foreach ($urllist[0] as $key => $val) { $val = trim($val); $return[0][$key] = $val; if (!preg_match('/^http:\/\//is', $val)) $val = 'http://' . $val; $tmp = parse_url($val); $return[1][$key] = $tmp['host']; if ($tmp['port']) { $return[1][$key] .= ":$tmp[port]"; } } } return $return; } function iswhitelist($host) { global $_G; static $iswhitelist = array(); if (isset($iswhitelist[$host])) { return $iswhitelist[$host]; } $hostlen = strlen($host); $iswhitelist[$host] = false; if (is_array($_G['cache']['domainwhitelist'])) foreach ($_G['cache']['domainwhitelist'] as $val) { $domainlen = strlen($val); if ($domainlen > $hostlen) { continue; } if (substr($host, -$domainlen) == $val) { $iswhitelist[$host] = true; break; } } if ($iswhitelist[$host] == false) { $iswhitelist[$host] = $host == $_SERVER['HTTP_HOST']; } return $iswhitelist[$host]; } function update_template_block($targettplname, $blocks) { if (!empty($targettplname)) { if (empty($blocks)) { DB::delete('common_template_block', array('targettplname' => $targettplname)); } else { $oldbids = array(); $query = DB::query('SELECT bid FROM ' . DB::table('common_template_block') . " WHERE targettplname='$targettplname'"); while ($value = DB::fetch($query)) { $oldbids[] = $value['bid']; } $newaddbids = array_diff($blocks, $oldbids); DB::delete('common_template_block', array('targettplname' => $targettplname)); $blocks = array_unique($blocks); $values = array(); foreach ($blocks as $bid) { $values[] = "('$targettplname','$bid')"; } if (!empty($values)) { DB::query("INSERT INTO " . DB::table('common_template_block') . " (targettplname,bid) VALUES " . implode(',', $values)); } if (!empty($newaddbids)) { require_once libfile('class/blockpermission'); $tplpermission = & template_permission::instance(); $tplpermission->add_blocks($targettplname, $newaddbids); } } } } if (!function_exists('http_build_query')) { function http_build_query($data, $numeric_prefix = '', $arg_separator = '', $prefix = '') { $render = array(); if (empty($arg_separator)) { $arg_separator = ini_get('arg_separator.output'); empty($arg_separator) && $arg_separator = '&'; } foreach ((array) $data as $key => $val) { if (is_array($val) || is_object($val)) { $_key = empty($prefix) ? "{$key}[%s]" : sprintf($prefix, $key) . "[%s]"; $_render = http_build_query($val, '', $arg_separator, $_key); if (!empty($_render)) { $render[] = $_render; } } else { if (is_numeric($key) && empty($prefix)) { $render[] = urlencode("{$numeric_prefix}{$key}") . "=" . urlencode($val); } else { if (!empty($prefix)) { $_key = sprintf($prefix, $key); $render[] = urlencode($_key) . "=" . urlencode($val); } else { $render[] = urlencode($key) . "=" . urlencode($val); } } } } $render = implode($arg_separator, $render); if (empty($render)) { $render = ''; } return $render; } } function getrelatedlink($extent) { global $_G; loadcache('relatedlink'); $allextent = array('article' => 0, 'forum' => 1, 'group' => 2, 'blog' => 3); $links = array(); if ($_G['cache']['relatedlink'] && isset($allextent[$extent])) { foreach ($_G['cache']['relatedlink'] as $link) { $link['extent'] = sprintf('%04b', $link['extent']); if ($link['extent'][$allextent[$extent]] && $link['name'] && $link['url']) { $links[] = daddslashes($link); } } } return $links; } function getattachtablebyaid($aid) { $tableid = DB::result_first("SELECT tableid FROM " . DB::table('forum_attachment') . " WHERE aid='$aid'"); return 'forum_attachment_' . ($tableid >= 0 && $tableid < 10 ? intval($tableid) : 'unused'); } function getattachtableid($tid) { $tid = (string) $tid; return intval($tid{strlen($tid) - 1}); } function getattachtablebytid($tid) { return 'forum_attachment_' . getattachtableid($tid); } function getattachtablebypid($pid) { $tableid = DB::result_first("SELECT tableid FROM " . DB::table('forum_attachment') . " WHERE pid='$pid' LIMIT 1"); return 'forum_attachment_' . ($tableid >= 0 && $tableid < 10 ? intval($tableid) : 'unused'); } function getattachnewaid($uid = 0) { global $_G; $uid = !$uid ? $_G['uid'] : $uid; return DB::insert('forum_attachment', array('tid' => 0, 'pid' => 0, 'uid' => $uid, 'tableid' => 127), true); } function get_seosetting($page, $data = array(), $defset = array()) { global $_G; $searchs = array('{bbname}'); $replaces = array($_G['setting']['bbname']); $seotitle = $seodescription = $seokeywords = ''; $titletext = $defset['seotitle'] ? $defset['seotitle'] : $_G['setting']['seotitle'][$page]; $descriptiontext = $defset['seodescription'] ? $defset['seodescription'] : $_G['setting']['seodescription'][$page]; $keywordstext = $defset['seokeywords'] ? $defset['seokeywords'] : $_G['setting']['seokeywords'][$page]; preg_match_all("/\{([a-z0-9_-]+?)\}/", $titletext . $descriptiontext . $keywordstext, $pageparams); if ($pageparams) { foreach ($pageparams[1] as $var) { $searchs[] = '{' . $var . '}'; if ($var == 'page') { $data['page'] = $data['page'] > 1 ? lang('core', 'page', array('page' => $data['page'])) : ''; } $replaces[] = $data[$var] ? strip_tags($data[$var]) : ''; } if ($titletext) { $seotitle = strreplace_strip_split($searchs, $replaces, $titletext); } if ($descriptiontext && (CURSCRIPT == 'forum' || IS_ROBOT || $_G['adminid'] == 1)) { $seodescription = strreplace_strip_split($searchs, $replaces, $descriptiontext); } if ($keywordstext && (CURSCRIPT == 'forum' || IS_ROBOT || $_G['adminid'] == 1)) { $seokeywords = strreplace_strip_split($searchs, $replaces, $keywordstext); } } return array($seotitle, $seodescription, $seokeywords); } function strreplace_strip_split($searchs, $replaces, $str) { $searchspace = array('((\s*\-\s*)+)', '((\s*\,\s*)+)', '((\s*\|\s*)+)', '((\s*\t\s*)+)', '((\s*_\s*)+)'); $replacespace = array('-', ',', '|', ' ', '_'); return trim(preg_replace($searchspace, $replacespace, str_replace($searchs, $replaces, $str)), ' ,-|_'); } function get_title_page($navtitle, $page) { if ($page > 1) { $navtitle .= ' - ' . lang('core', 'page', array('page' => $page)); } return $navtitle; } function getimgthumbname($fileStr, $extend = '.thumb.jpg', $holdOldExt = true) { if (empty($fileStr)) { return ''; } if (!$holdOldExt) { $fileStr = substr($fileStr, 0, strrpos($fileStr, '.')); } $extend = strstr($extend, '.') ? $extend : '.' . $extend; return $fileStr . $extend; } function updatemoderate($idtype, $ids, $status = 0) { global $_G; $ids = is_array($ids) ? $ids : array($ids); if (!$ids) { return; } if (!$status) { foreach ($ids as $id) { DB::insert('common_moderate', array('id' => $id, 'idtype' => $idtype, 'status' => 0, 'dateline' => $_G['timestamp']), false, true); } } elseif ($status == 1) { DB::update('common_moderate', array('status' => 1), "id IN (" . dimplode($ids) . ") AND idtype='$idtype'"); } elseif ($status == 2) { DB::delete('common_moderate', "id IN (" . dimplode($ids) . ") AND idtype='$idtype'"); } elseif ($status == 3) { DB::update('common_moderate', array('status' => 3), "id IN (" . dimplode($ids) . ") AND idtype='$idtype'"); } } function userappprompt() { global $_G; if ($_G['setting']['my_app_status'] && $_G['setting']['my_openappprompt'] && empty($_G['cookie']['userappprompt'])) { $sid = $_G['setting']['my_siteid']; $ts = $_G['timestamp']; $key = md5($sid . $ts . $_G['setting']['my_sitekey']); $uchId = $_G['uid'] ? $_G['uid'] : 0; echo '<script type="text/javascript" src="http://notice.uchome.manyou.com/notice/userNotice?sId=' . $sid . '&ts=' . $ts . '&key=' . $key . '&uchId=' . $uchId . '" charset="UTF-8"></script>'; } } function ismobile($mobile) { return (strlen($mobile) == 11) && (preg_match("/^1[3456789][0-9]{9}$/", $mobile)); } function sendsms($user, $pass, $mobile, $content) { if (!ismobile($mobile)) { showmessage(''); } elseif (empty($content)) { showmessage(''); } else { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://sms-api.luosimao.com/v1/send.json"); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, TRUE); curl_setopt($ch, CURLOPT_SSLVERSION , 3); curl_setopt($ch, CURLOPT_HTTPAUTH , CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD , 'api:key-fd1f2598ceaebca7245bae5115fbf5f0'); $con = iconv('gb2312', 'utf-8', $content); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, array('mobile' => $mobile, 'message' => preg_replace('/\[(.*?)\]/', '【\\1】', $con))); $res = curl_exec( $ch ); curl_close($ch); $status = json_decode($res); if($status->error == 0) { return true; } else { return ':Error:' . $status->error . '=>' . $status->msg; } define('SCRIPT_ROOT', DISCUZ_ROOT . 'source/sms/'); require_once SCRIPT_ROOT . 'include/Client.php'; $sms = new Client('http://sdk4report.eucp.b2m.cn:8080/sdk/SDKService', '6SDK-EMY-6688-JCQMK', '282047', '333666', false, false, false, false, 2, 10); $sms->setOutgoingEncoding("GBK"); $status_code = $sms->sendSMS(array($mobile), $content, '', '', 'GBK', 5); if ($status_code == 0) { return true; } else { return ':Error:' . $status_code . '=>' . $error_code[$status_code]; } } } function makeSearchSignUrl() { global $_G; $url = ''; $params = array(); $my_search_data = unserialize($_G['setting']['my_search_data']); $my_siteid = $_G['setting']['my_siteid']; $my_sitekey = $_G['setting']['my_sitekey']; require_once libfile('function/cloud'); if ($my_search_data['status'] && getcloudappstatus('search') && $my_siteid) { $my_extgroupids = array(); $_extgroupids = explode("\t", $_G['member']['extgroupids']); foreach ($_extgroupids as $v) { if ($v) { $my_extgroupids[] = $v; } } $my_extgroupids_str = implode(',', $my_extgroupids); $params = array('sId' => $my_siteid, 'ts' => time(), 'cuId' => $_G['uid'], 'cuName' => $_G['username'], 'gId' => intval($_G['groupid']), 'agId' => intval($_G['adminid']), 'egIds' => $my_extgroupids_str, 'fmSign' => '', ); $groupIds = array($params['gId']); if ($params['agId']) { $groupIds[] = $params['agId']; } if ($my_extgroupids) { $groupIds = array_merge($groupIds, $my_extgroupids); } $groupIds = array_unique($groupIds); foreach ($groupIds as $v) { $key = 'ugSign' . $v; $params[$key] = ''; } $params['sign'] = md5(implode('|', $params) . '|' . $my_sitekey); $params['charset'] = $_G['charset']; $mySearchData = unserialize($_G['setting']['my_search_data']); if ($mySearchData['domain']) { $domain = $mySearchData['domain']; } else { $domain = 'search.discuz.qq.com'; } $url = 'http://' . $domain . '/f/discuz'; } return !empty($url) ? array($url, $params) : array(); } function dunserialize($data) { if (($ret = unserialize($data)) === false) { $ret = unserialize(stripslashes($data)); } return $ret; } function getAllsub($fid = 0) { $query = DB::query("SELECT fid, name FROM ".DB::table('forum_forum')." WHERE fup='$fid' AND status=1"); while($forum = DB::fetch($query)) { $group['fid'][] = $forum['fid']; $group['fname'][] = $forum['name']; if(DB::result_first("SELECT fid FROM ".DB::table('forum_forum')." WHERE fup='$forum[fid]' AND status=1")) { $query2 = DB::query("SELECT fid, name FROM ".DB::table('forum_forum')." WHERE fup='$forum[fid]' AND status=1"); while($sub = DB::fetch($query2)) { $group['fid'][] = $sub['fid']; $group['fname'][] = $sub['name']; } } } return $group; } function getForums() { global $_G; $query = DB::query("SELECT f.fid, f.name, ff.viewperm FROM ".DB::table('forum_forum')." f LEFT JOIN ".DB::table('forum_forumfield')." ff ON ff.fid=f.fid LEFT JOIN ".DB::table('forum_access')." a ON a.uid='$_G[uid]' AND a.fid=f.fid WHERE f.status='1' AND type='group' AND fup=0 ORDER BY f.displayorder"); while($res = DB::fetch($query)) { if(!empty($res['viewperm'])) { if(in_array($_G['member']['groupid'], explode("\t", $res['viewperm']))) { $bbs_forums[$res['fid']]['name'] = $res['name']; } } else { $bbs_forums[$res['fid']]['name'] = $res['name']; } } foreach($bbs_forums as $key => $value) { $query = DB::query("SELECT f.fid, f.name, ff.viewperm FROM ".DB::table('forum_forum')." f LEFT JOIN ".DB::table('forum_forumfield')." ff ON ff.fid=f.fid LEFT JOIN ".DB::table('forum_access')." a ON a.uid='$_G[uid]' AND a.fid=f.fid WHERE f.status='1' AND type='forum' AND fup=$key ORDER BY f.displayorder"); while($res = DB::fetch($query)) { if(!empty($res['viewperm'])) { if(in_array($_G['member']['groupid'], explode("\t", $res['viewperm']))) { $bbs_forums[$key]['sub'][$res['fid']] = $res['name']; } } else { $bbs_forums[$key]['sub'][$res['fid']] = $res['name']; } } } return $bbs_forums; } function dsu_sign() { global $_G; $today = date('Y-m-d', time()); $today_start = strtotime($today); $today = date('Y-m-d', time()+86400); $today_end = strtotime($today); $uid = $_G['uid'] ? $_G['uid'] : 0; $dsu_sign = DB::result_first("SELECT count(*) FROM ".DB::table('dsu_paulsign')." WHERE uid=$uid AND time BETWEEN $today_start AND $today_end"); return $dsu_sign; } function getThreadclass($fid) { $query = DB::query("SELECT * FROM ".DB::table('forum_threadclass')." WHERE fid=$fid ORDER BY typeid"); while($res = DB::fetch($query)) { if($res['displayorder'] == 0) { $threadClass[$res['typeid']]['name'] = $res['name']; } else { $threadClass[$res['displayorder']]['sub'][$res['typeid']] = $res['name']; } } return $threadClass; } function posttotiebaobei($tidarr) { global $_G; $tids = implode(',', $tidarr); //处理车辆信息 $goods_info = DB::result_first("SELECT rules FROM ".DB::table("forum_typeoption")." WHERE optionid=77"); $tmp = unserialize($goods_info); $tmp2 = explode("\n", $tmp['choices']); foreach($tmp2 as $value) { list($k, $v) = explode("=", $value); $info_arr[$k] = $v; } //处理停车地点 $goods_place = DB::result_first("SELECT rules FROM ".DB::table("forum_typeoption")." WHERE optionid=64"); $tmp3 = unserialize($goods_place); $tmp4 = explode("\n", $tmp3['choices']); foreach($tmp4 as $value) { list($k2, $v2) = explode("=", $value); $place_arr[$k2] = $v2; } $query = DB::query("SELECT t.authorid, t.dateline created, op.* FROM ".DB::table("forum_thread")." t JOIN ".DB::table("forum_optionvalue74")." op ON t.tid = op.tid WHERE op.tid IN ($tids) AND op.fid=15"); $attachurl = $_G['setting']['imgftp']['attachurl'] ? $_G['setting']['imgftp']['attachurl'] : $_G['setting']['attachurl']; while($res = DB::fetch($query)) { //处理图片 require_once libfile('function/attachment'); $pics = getpicbytid($res['tid']); foreach($pics as $key => $value) { $pics[$key] = $attachurl.'forum/'.$value; } $pics = empty($pics) ? array() : $pics; $tid = $res['tid']; $message = DB::result_first("SELECT message FROM ".DB::table('forum_post')." WHERE tid=$tid AND first = 1"); if(strpos($message, '[img]') !== false) { preg_match_all('/\[img\](.*?)\[\/img\]/', $message, $match); if(!empty($match[1])) { foreach($match[1] as $value) { if(!in_array($value, $pics)) { $pics[] = $value; } } } } $images = implode('|', $pics); if($res["goods_info"]) { //新数据 list($year, $month) = explode('.', $res['sc_time']); $res['outDate'] = $month ? "$year-$month" : $year; list($category, $brand, $model) = explode('.', $res['goods_info']); list($province, $city) = explode('.', $res['born_place']); $modelname = $info_arr[$category].'|'.$info_arr[$category.'.'.$brand].($model !== NULL ? '|'.$info_arr[$res['goods_info']] : ''); $placename = $place_arr[$province].'|'.$place_arr[$res['born_place']]; $data = array( "uid" => $res['authorid'], "bbsId" => $res['tid'], "agentname" => iconv('gb2312', 'utf-8', $res['uname']), "agentmobile" => $res['phone'], "created" => $res['created'], "desc" => $res['goods_status'] ? iconv('gb2312', 'utf-8', $res['goods_status']) : '', "price" => intval($res['goods_price']), "hours" => intval($res['gz_time']), "outDate" => $res['outDate'], "userGroupId" => intval($res['identity']), "images" => $images, "sn" => $res['goods_sn'], "model" => iconv('gb2312', 'utf-8', $modelname), "location" => iconv('gb2312', 'utf-8', $placename), "isNew" => 1, "categoryId" => $category, "brandId" => $brand, "modelId" => $model, "provinceId" => $province, "cityId" => $city ); } else { //老数据 $data = array( "uid" => $res['authorid'], "bbsId" => $res['tid'], "agentname" => iconv('gb2312', 'utf-8', $res['uname']), "agentmobile" => $res['phone'], "created" => $res['created'], "desc" => $res['goods_status'] ? iconv('gb2312', 'utf-8', $res['goods_status']) : '', "price" => intval($res['goods_price']), "hours" => intval($res['gz_time']), "outDate" => $res['outDate'], "userGroupId" => intval($res['identity']), "images" => $images, "model" => iconv('gb2312', 'utf-8', $modelname), "location" => iconv('gb2312', 'utf-8', $placename), "sn" => '', "isNew" => 0, ); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://api.internal.tiebaobei.com/api/ue/save"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resu = curl_exec($ch); curl_close($ch); $result = json_decode($resu); if($result->res == 'success') { runlog("SendTbb_success", json_encode($data) . " success"); } else { runlog("SendTbb_failed", json_encode($data) . " failed"); } } } //手机版web站获得十大热贴 function getdaytop($days) { global $_G; $days ++; $thattime = strtotime("- $days days"); include_once libfile('function/cache'); $day = date("Ymd", $thattime); $cname = 'day_top_ten_' . $day; loadcache($cname); if (!$_G['cache'][$cname]) { include_once libfile('function/cache'); updatecache($cname); loadcache($cname); } $nofid = "AND `fid` NOT IN (12,15,17,20,28,50,51,69,142,147,157,239,241,243)"; $data = $_G['cache'][$cname]; if (empty($data['data']) || $data['validate'] < time()) { $start = strtotime($day); $end = $start + 86400; $query = DB::query("SELECT `tid`, `fid`, `author`, `authorid`, `subject`, `dateline`, `views`, `replies`, `attachment`, `digest`, `displayorder`, `stamp`, `lastpost` FROM ".DB::table('forum_thread')." WHERE `dateline` BETWEEN '$start' AND '$end' $nofid AND `displayorder`>=0 AND `closed`=0 ORDER BY `views` DESC, `dateline` DESC LIMIT 0, 10"); $data = array(); while($result = DB::fetch($query)) { $result['dateline'] = date('Y-m-d', $result['dateline']); $result['lastpost'] = date('Y-m-d', $result['lastpost']); $result['minisubject'] = cutstr($result['subject'], 45, "..."); $result['subject'] = cutstr($result['subject'], 30, ""); $data['data'][] = $result; } // $data['validate']= strtotime('tomorrow')+600; $data['validate']= time()+3600; save_syscache($cname, $data); } $return = array_slice($data['data'], 0, 10); return $return; } function showAppInfo($res, $arr, $extra) { header("Content-type: application/json; charset=utf-8"); if($res == 'success') { $return['ret'] = 0; if(is_array($arr)) { $return['items'] = $arr; } if($extra) { $keyarr = array_keys($extra); foreach($keyarr as $k => $v) { $return[$v] = $extra[$v]; } } } else { $return = $arr; } echo json_encode($return); exit; } //消息推送(二手机版块推送到二手机) function postToJishou($tid) { global $_G; loaducenter(); $user = DB::fetch_first("SELECT t.`authorid`, m.mobile FROM ".DB::table('forum_thread')." t JOIN ".UC_DBTABLEPRE."members m ON t.`authorid`=m.`uid` WHERE t.`tid`='$tid'"); $str = file_get_contents("http://internal.tiebaobei.com/customer/getCustomerIdByUidOrMobile?uid=$user[authorid]&mobile=$user[mobile]"); $customer = json_decode($str, true); if(!empty($customer) && $customer['ret'] == 0) { $customerId = intval($customer['result']); $option = DB::fetch_first("SELECT t.`tid`, t.`authorid`, op.* FROM ".DB::table('forum_thread')." t JOIN ".DB::table("forum_optionvalue74")." op ON t.tid = op.tid WHERE t.`tid`='$tid'"); list($categoryId, $brandId, $modelId) = explode('.', $option['goods_info']); list($provinceId, $cityId, $countyId) = explode('.', $option['born_place']); $price = floatval($option['goods_price'] * 10000); //处理图片 $pid = DB::result_first("SELECT `pid` FROM ".DB::table("forum_post")." WHERE tid = '$tid' AND first = 1"); $query = DB::query("SELECT `attachment`, `remote` FROM ".DB::table(getattachtablebypid($pid))." WHERE pid = '$pid' AND `isimage` != 0 ORDER BY `dateline` ASC"); while($attach = DB::fetch($query)) { $attachurl = $attach['remote'] ? $_G['setting']['imgftp']['attachurl'] : $_G['setting']['attachurl']; $picArr['attach'][] = $attachurl.$attach['attachment']; $picArr['first'][] = 0; } if(!empty($picArr['attach']) && count($picArr['attach']) > 4) { $strImgs = implode(',', $picArr['attach']); $picArr['first'][0] = 1; $strFirstImgs = implode(',', $picArr['first']); } else { runlog("SendJs_failed", date('Ymd H:i:s') . json_encode($push) . " failed $tid"); return false; } $data = array( 'channel' => 7, 'customerId' => intval($customerId), 'contacterName' => iconv('gbk', 'utf-8', $option['uname']), 'contacterGendar' => 999, 'contacterMobile' => $option['phone'], 'categoryId' => intval($categoryId), 'brandId' => intval($brandId), 'modelId' => intval($modelId), 'provinceId' => intval($provinceId), 'cityId' => intval($cityId), 'countyId' => intval($countyId), 'price' => floatval($price), 'hours' => intval($option['gz_time']), 'outDate' => intval($option['sc_time']), 'source' => 2, 'strImgs' => $strImgs, 'strFirstImgs' => $strFirstImgs, 'des' => iconv('gbk', 'utf-8', $option['goods_status']), 'bbsEqId' => $tid, ); $push = array( 'secureMessage' => array( 'type' => 'EQUIPMENT_SYNC_ADD', 'data' => $data, ) ); $queue = 'VirtualTopic.jishou'; try { $stomp = new Stomp('tcp://120.132.56.80:22534'); $ret = $stomp->send($queue, json_encode($push)); runlog("SendJs_success", date('Ymd H:i:s') . json_encode($push) . " success $tid"); unset($stomp); return $ret; } catch(StompException $e) { runlog("SendJs_failed", date('Ymd H:i:s') . json_encode($push) . " failed $tid"); return false; } } else { return false; } } function curl_get_content($url, $isPost = 1, $timeOut = 3) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_URL, $url); //设置超时时间为3s curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeOut); curl_setopt ($ch, CURLOPT_TIMEOUT, $timeOut); curl_setopt($ch, CURLOPT_POST, $isPost); $result = curl_exec($ch); curl_close($ch); return $result; } function getCurrencyByUid($uid) { if (class_exists('RCache')) { $cname = 'user_currency:'.$uid; $arrcredit = RCache::get($cname); if ($arrcredit === false) { $url = "http://galaxyapi.tiebaobei.com/galaxy-api/ug/getUserInfo?uid=$uid&callback=cb"; $str = curl_get_content($url, 0); $str = preg_replace('/cb\((.*?)\)/', '\\1', $str); $arr = json_decode($str, true); $credit = intval($arr['result']['tiejiaCurrency']); if ($credit) { RCache::update($cname, array($credit), 7200); } } else { $credit = $arrcredit[0]; } return $credit; } else { $url = "http://galaxyapi.tiebaobei.com/galaxy-api/ug/getUserInfo?uid=$uid&callback=cb"; $str = curl_get_content($url, 0); $str = preg_replace('/cb\((.*?)\)/', '\\1', $str); $arr = json_decode($str, true); $credit = intval($arr['result']['tiejiaCurrency']); return $credit; } } function getCurrencyByUids($uids) { if (!$uids) { return array(); } $uids = implode(',', $uids); if (class_exists('RCache')) { $cname = 'user_currency_list:'.$uids; $arr = RCache::get($cname); if ($arr === false) { $url = "http://galaxyapi.tiebaobei.com/galaxy-api/ug/getUserInfoList?uids=$uids&callback=cb"; $str = curl_get_content($url, 0); $str = preg_replace('/cb\((.*?)\)/', '\\1', $str); $arr = json_decode($str, true); $result = $arr['result']; if ($result) { RCache::update($cname, array($result), 3600); } } else { $result = $arr[0]; } return $result; } else { $url = "http://galaxyapi.tiebaobei.com/galaxy-api/ug/getUserInfoList?uids=$uids&callback=cb"; $str = curl_get_content($url, 0); $str = preg_replace('/cb\((.*?)\)/', '\\1', $str); $arr = json_decode($str, true); $result = $arr['result']; return $result; } } function enc($input, $key = 'j33$E@GctUXJtVfO') { $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); $input = pkcs5Pad($input, $size); $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $key, $iv); $data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); $data = base64_encode($data); return $data; } function pkcs5Pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text.str_repeat(chr($pad), $pad); } function dec($sStr, $sKey = '') { $sStr = str_replace(' ', '+', $sStr); $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $sKey, base64_decode($sStr), MCRYPT_MODE_ECB); $dec_s = strlen($decrypted); $padding = ord($decrypted[$dec_s - 1]); $decrypted = substr($decrypted, 0, -$padding); return $decrypted; } function req($api, $params = array(), $timeOut = 5, $isPost = true, $encodeType = 'urlencode') { if($encodeType == 'urlencode') { //[CONTENT_TYPE] => application/x-www-form-urlencoded $params = http_build_query($params); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $api); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeOut); curl_setopt($ch, CURLOPT_TIMEOUT, $timeOut); curl_setopt($ch, CURLOPT_POST, $isPost); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_HEADER, 0); $res = curl_exec($ch); curl_close($ch); return $res; } function writeCenterLog($data, $type='messageType') { if (!is_dir('/tmp/reqcenter')) { mkdir('/tmp/reqcenter'); chmod('/tmp/reqcenter', 0755); } $date = date("Y-m-d H:i:s", time()); file_put_contents('/tmp/reqcenter/res.log', "[{$date}]----------".$type."----------@".var_export($data, true)."\r\n", FILE_APPEND); } function getTokenByUid($uid) { global $_G; $centerApiBase = trim($_G['config']['centerApiBase']); $appId = $_G['config']['appId']; $appKey = $_G['config']['appKey']; $params = array( 'appId' => $appId, 'ucenterId' => enc($uid, $appKey), ); $api = $centerApiBase."/tac/other/getAccessTokenByUid"; $res = req($api, $params, 5); $data = array($api, $params, $res); writeCenterLog($data, 'getTokenByUid'); $res = json_decode($res, true); $token = ''; if ($res && $res['ret'] == '0') { $token = trim($res['accessToken']); } return $token; } function updateCenterUsername($uid, $username) { global $_G; $username = trim($username); $centerApiBase = trim($_G['config']['centerApiBase']); $appId = $_G['config']['appId']; $appKey = $_G['config']['appKey']; $token = getTokenByUid($uid); if (!$token) { return false; } $api = $centerApiBase.'/tac/check/updateUserName'; $params = array( 'accessToken' => $token, 'appId' => $appId, 'userName' => enc($username, $appKey), ); $res = req($api, $params, 5); $data = array($api, $params, $res); writeCenterLog($data, 'updateCenterUsername'); $res = json_decode($res, true); if ($res && $res['ret'] == '0') { return true; } return false; } function updateCenterMobile($uid, $mobile) { global $_G; $mobile = trim($mobile); $appId = $_G['config']['appId']; $appKey = $_G['config']['appKey']; $centerApiBase = trim($_G['config']['centerApiBase']); $token = getTokenByUid($uid); if (!$token) { return false; } $api = $centerApiBase.'/tac/check/bindingPhone'; $params = array( 'accessToken' => $token, 'appId' => $appId, 'phoneNumber' => enc($mobile, $appKey), ); $res = req($api, $params, 5); $data = array($api, $params, $res); writeCenterLog($data, 'updateCenterMobile'); $res = json_decode($res, true); if ($res) { if ($res['ret'] == '0') { return true; } else { return $res['message']; } } else { return false; } } function cehomebbsConn($_cehomebbs_config){ $cehomebbs_conn = mysql_connect($_cehomebbs_config['db']['host'], $_cehomebbs_config['db']['user'], $_cehomebbs_config['db']['pw']); if (!$cehomebbs_conn){ die('Could not connect: ' . mysql_error()); } mysql_query("set names 'utf8'", $cehomebbs_conn); $select_db = mysql_select_db($_cehomebbs_config['db']['name'], $cehomebbs_conn); return $cehomebbs_conn; } ?>