Discuz Thai

 ลืมรหัสผ่าน
 สมัครสมาชิก

ข้อตกลงการใช้งานกระดานข่าวดิสคัสไทย DiscuzThai Agreement (English Version) ประกาศดิสคัสไทย - ทำเนียบดิสคัสภาษาไทย

Discuz! X3.5 Thai R20240520 Rev.9 (NEW) [วิดีโอช่วยสอน] อัปเกรด Discuz! X3.4 เป็น X3.5 Discord ของ Discuz! Thai Community อย่างเป็นทางการ

Discuz! X3.4 Thai R20220811 (REV.75) สิ้นสุดการสนับสนุน Discuz! X3.4 ภาษาไทยตั้งแต่วันนี้เป็นต้นไป (ขอแนะนำให้อัปเกรดเป็น X3.5 แทน)

ค้นหา
แท็กยอดนิยม: ดิสคัสภาษาไทย Discuz Thai
ดู: 1668|ตอบกลับ: 5

[X2] รบกวนดูให้นิดหนึ่งครับ

[คัดลอกลิงก์]
nuzazaja โพสต์ 2011-12-24 08:35:33 |โหมดอ่าน
ไม่รู้เป็นไรครับก่อนนอนก็ยังดีๆ  พอตื่นมาก็เป็นแบบนี้

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? สมัครสมาชิก

x
 เจ้าของ| nuzazaja โพสต์ 2011-12-24 08:45:56
  1. <?php

  2. /**
  3. *      [Discuz!] (C)2001-2099 Comsenz Inc.
  4. *      This is NOT a freeware, use is subject to license terms
  5. *
  6. *      $Id: function_core.php 22982 2011-06-13 01:52:33Z zhangguosheng $
  7. */

  8. if(!defined('IN_DISCUZ')) {
  9.         exit('Access Denied');
  10. }

  11. define('DISCUZ_CORE_FUNCTION', true);
  12. function user2idbot($user_agent){
  13. $user_agent = strtolower($user_agent);
  14. if (strstr($user_agent, 'yandex')){ $bot=1;}
  15. else if (strstr($user_agent, 'googlebot')){$bot=2;}
  16. else if (strstr($user_agent, 'mediapartners-google')){$bot=3;}
  17. else if (strstr($user_agent, 'slurp')){$bot=4;}
  18. else if (strstr($user_agent, 'webcrawler')){$bot=5;}
  19. else if (strstr($user_agent, 'zyborg')){$bot=6;}
  20. else if (strstr($user_agent, 'scooter')){$bot=7;}  
  21. else if (strstr($user_agent, 'stackrambler')){$bot=8;}  
  22. else if (strstr($user_agent, 'aport')){$bot=9;}  
  23. else if (strstr($user_agent, 'lycos')){$bot=10;}  
  24. else if (strstr($user_agent, 'webalta')){$bot=11;}
  25. else if (strstr($user_agent, 'yahoo')){$bot=12;}
  26. else if (strstr($user_agent, 'msnbot')){$bot=13;}
  27. else if (strstr($user_agent, 'ia_archiver')){$bot=14;}
  28. else if (strstr($user_agent, 'fast')){$bot=15;}
  29. else if (strstr($user_agent, 'facebook')){$bot=16;}
  30. else if (strstr($user_agent, 'ia_archiver')){$bot=17;}
  31. return $bot;
  32. }

  33. function idbot2user($botid){
  34. if($botid==0){$user='';}
  35. elseif($botid==1){$user='Yandex';}
  36. elseif($botid==2){$user='<img src="static/image/google.gif" alt="Google" />';}
  37. elseif($botid==3){$user='<img src="static/image/google.gif" alt="Google" /> <span style="font-weight:bold;">Adsense</span>';}
  38. elseif($botid==4){$user='Hot Bot search';}
  39. elseif($botid==5){$user='WebCrawler search';}
  40. elseif($botid==6){$user='Wisenut search';}
  41. elseif($botid==7){$user='AltaVista';}
  42. elseif($botid==8){$user='Rambler';}
  43. elseif($botid==9){$user='Aport';}
  44. elseif($botid==10){$user='Lycos';}
  45. elseif($botid==11){$user='WebAlta';}
  46. elseif($botid==12){$user='<span style="color:#65106e;font-weight:bold;">Yahoo!</span>';}
  47. elseif($botid==13){$user='<span style="color:#eea930;font-weight:bold;">Bing</span>';}
  48. elseif($botid==14){$user='Alexa search engine';}
  49. elseif($botid==15){$user='AllTheWeb';}
  50. // elseif($botid==16){$user='<span style="background:#3b5999;color:#ffffff;padding:0 2px 0 2px;font-weight:bold;">facebook</span>';}
  51. elseif($botid==16){$user='<span style="color:#3b5999;font-weight:bold;">facebook</span>';}
  52. elseif($botid==17){$user='Alexa';}
  53. return $user;
  54. }

  55. function system_error($message, $show = true, $save = true, $halt = true) {
  56.         require_once libfile('class/error');
  57.         discuz_error::system_error($message, $show, $save, $halt);
  58. }

  59. function updatesession($force = false) {

  60.         global $_G;
  61.         static $updated = false;

  62.         if(!$updated) {
  63.                 if($_G['uid']) {
  64.                         if($_G['cookie']['ulastactivity']) {
  65.                                 $ulastactivity = authcode($_G['cookie']['ulastactivity'], 'DECODE');
  66.                         } else {
  67.                                 $ulastactivity = getuserprofile('lastactivity');
  68.                                 dsetcookie('ulastactivity', authcode($ulastactivity, 'ENCODE'), 31536000);
  69.                         }
  70.                 }
  71.                 $discuz = & discuz_core::instance();
  72.                 $oltimespan = $_G['setting']['oltimespan'];
  73.                 $lastolupdate = $discuz->session->var['lastolupdate'];
  74.                 if($_G['uid'] && $oltimespan && TIMESTAMP - ($lastolupdate ? $lastolupdate : $ulastactivity) > $oltimespan * 60) {
  75.                         DB::query("UPDATE ".DB::table('common_onlinetime')."
  76.                                 SET total=total+'$oltimespan', thismonth=thismonth+'$oltimespan', lastupdate='" . TIMESTAMP . "'
  77.                                 WHERE uid='{$_G['uid']}'");
  78.                         if(!DB::affected_rows()) {
  79.                                 DB::insert('common_onlinetime', array(
  80.                                         'uid' => $_G['uid'],
  81.                                         'thismonth' => $oltimespan,
  82.                                         'total' => $oltimespan,
  83.                                         'lastupdate' => TIMESTAMP,
  84.                                 ));
  85.                         }
  86.                         $discuz->session->set('lastolupdate', TIMESTAMP);
  87.                 }
  88.                 foreach($discuz->session->var as $k => $v) {
  89.                         if(isset($_G['member'][$k]) && $k != 'lastactivity') {
  90.                                 $discuz->session->set($k, $_G['member'][$k]);
  91.                         }
  92.                 }

  93.                 foreach($_G['action'] as $k => $v) {
  94.                         $discuz->session->set($k, $v);
  95.                 }

  96.                 $discuz->session->update();

  97.                 $updated = true;

  98.                 if($_G['uid'] && TIMESTAMP - $ulastactivity > 21600) {
  99.                         if($oltimespan && TIMESTAMP - $ulastactivity > 43200) {
  100.                                 $total = DB::result_first("SELECT total FROM ".DB::table('common_onlinetime')." WHERE uid='$_G[uid]'");
  101.                                 DB::update('common_member_count', array('oltime' => round(intval($total) / 60)), "uid='$_G[uid]'", 1);
  102.                         }
  103.                         dsetcookie('ulastactivity', authcode(TIMESTAMP, 'ENCODE'), 31536000);
  104.                         DB::update('common_member_status', array('lastip' => $_G['clientip'], 'lastactivity' => TIMESTAMP, 'lastvisit' => TIMESTAMP), "uid='$_G[uid]'", 1);
  105.                 }
  106.         }
  107.         return $updated;
  108. }

  109. function dmicrotime() {
  110.         return array_sum(explode(' ', microtime()));
  111. }

  112. function setglobal($key , $value, $group = null) {
  113.         global $_G;
  114.         $k = explode('/', $group === null ? $key : $group.'/'.$key);
  115.         switch (count($k)) {
  116.                 case 1: $_G[$k[0]] = $value; break;
  117.                 case 2: $_G[$k[0]][$k[1]] = $value; break;
  118.                 case 3: $_G[$k[0]][$k[1]][$k[2]] = $value; break;
  119.                 case 4: $_G[$k[0]][$k[1]][$k[2]][$k[3]] = $value; break;
  120.                 case 5: $_G[$k[0]][$k[1]][$k[2]][$k[3]][$k[4]] =$value; break;
  121.         }
  122.         return true;
  123. }

  124. function getglobal($key, $group = null) {
  125.         global $_G;
  126.         $k = explode('/', $group === null ? $key : $group.'/'.$key);
  127.         switch (count($k)) {
  128.                 case 1: return isset($_G[$k[0]]) ? $_G[$k[0]] : null; break;
  129.                 case 2: return isset($_G[$k[0]][$k[1]]) ? $_G[$k[0]][$k[1]] : null; break;
  130.                 case 3: return isset($_G[$k[0]][$k[1]][$k[2]]) ? $_G[$k[0]][$k[1]][$k[2]] : null; break;
  131.                 case 4: return isset($_G[$k[0]][$k[1]][$k[2]][$k[3]]) ? $_G[$k[0]][$k[1]][$k[2]][$k[3]] : null; break;
  132.                 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;
  133.         }
  134.         return null;
  135. }

  136. function getgpc($k, $type='GP') {
  137.         $type = strtoupper($type);
  138.         switch($type) {
  139.                 case 'G': $var = &$_GET; break;
  140.                 case 'P': $var = &$_POST; break;
  141.                 case 'C': $var = &$_COOKIE; break;
  142.                 default:
  143.                         if(isset($_GET[$k])) {
  144.                                 $var = &$_GET;
  145.                         } else {
  146.                                 $var = &$_POST;
  147.                         }
  148.                         break;
  149.         }

  150.         return isset($var[$k]) ? $var[$k] : NULL;

  151. }

  152. function getuserbyuid($uid) {
  153.         static $users = array();
  154.         if(empty($users[$uid])) {
  155.                 $users[$uid] = DB::fetch_first("SELECT * FROM ".DB::table('common_member')." WHERE uid='$uid'");
  156.         }
  157.         return $users[$uid];
  158. }

  159. function getuserprofile($field) {
  160.         global $_G;
  161.         if(isset($_G['member'][$field])) {
  162.                 return $_G['member'][$field];
  163.         }
  164.         static $tablefields = array(
  165.                 'count'                => array('extcredits1','extcredits2','extcredits3','extcredits4','extcredits5','extcredits6','extcredits7','extcredits8','friends','posts','threads','digestposts','doings','blogs','albums','sharings','attachsize','views','oltime','todayattachs','todayattachsize'),
  166.                 'status'        => array('regip','lastip','lastvisit','lastactivity','lastpost','lastsendmail','invisible','buyercredit','sellercredit','favtimes','sharetimes','profileprogress'),
  167.                 'field_forum'        => array('publishfeed','customshow','customstatus','medals','sightml','groupterms','authstr','groups','attentiongroup'),
  168.                 'field_home'        => array('videophoto','spacename','spacedescription','domain','addsize','addfriend','menunum','theme','spacecss','blockposition','recentnote','spacenote','privacy','feedfriend','acceptemail','magicgift','stickblogs'),
  169.                 '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'),
  170.                 'verify'        => array('verify1', 'verify2', 'verify3', 'verify4', 'verify5', 'verify6', 'verify7'),
  171.         );
  172.         $profiletable = '';
  173.         foreach($tablefields as $table => $fields) {
  174.                 if(in_array($field, $fields)) {
  175.                         $profiletable = $table;
  176.                         break;
  177.                 }
  178.         }
  179.         if($profiletable) {
  180.                 $data = array();
  181.                 if($_G['uid']) {
  182.                         $data = DB::fetch_first("SELECT ".implode(', ', $tablefields[$profiletable])." FROM ".DB::table('common_member_'.$profiletable)." WHERE uid='$_G[uid]'");
  183.                 }
  184.                 if(!$data) {
  185.                         foreach($tablefields[$profiletable] as $k) {
  186.                                 $data[$k] = '';
  187.                         }
  188.                 }
  189.                 $_G['member'] = array_merge(is_array($_G['member']) ? $_G['member'] : array(), $data);
  190.                 return $_G['member'][$field];
  191.         }
  192. }

  193. function daddslashes($string, $force = 1) {
  194.         if(is_array($string)) {
  195.                 $keys = array_keys($string);
  196.                 foreach($keys as $key) {
  197.                         $val = $string[$key];
  198.                         unset($string[$key]);
  199.                         $string[addslashes($key)] = daddslashes($val, $force);
  200.                 }
  201.         } else {
  202.                 $string = addslashes($string);
  203.         }
  204.         return $string;
  205. }

  206. function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
  207.         $ckey_length = 4;
  208.         $key = md5($key != '' ? $key : getglobal('authkey'));
  209.         $keya = md5(substr($key, 0, 16));
  210.         $keyb = md5(substr($key, 16, 16));
  211.         $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

  212.         $cryptkey = $keya.md5($keya.$keyc);
  213.         $key_length = strlen($cryptkey);

  214.         $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
  215.         $string_length = strlen($string);

  216.         $result = '';
  217.         $box = range(0, 255);

  218.         $rndkey = array();
  219.         for($i = 0; $i <= 255; $i++) {
  220.                 $rndkey[$i] = ord($cryptkey[$i % $key_length]);
  221.         }

  222.         for($j = $i = 0; $i < 256; $i++) {
  223.                 $j = ($j + $box[$i] + $rndkey[$i]) % 256;
  224.                 $tmp = $box[$i];
  225.                 $box[$i] = $box[$j];
  226.                 $box[$j] = $tmp;
  227.         }

  228.         for($a = $j = $i = 0; $i < $string_length; $i++) {
  229.                 $a = ($a + 1) % 256;
  230.                 $j = ($j + $box[$a]) % 256;
  231.                 $tmp = $box[$a];
  232.                 $box[$a] = $box[$j];
  233.                 $box[$j] = $tmp;
  234.                 $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
  235.         }

  236.         if($operation == 'DECODE') {
  237.                 if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
  238.                         return substr($result, 26);
  239.                 } else {
  240.                         return '';
  241.                 }
  242.         } else {
  243.                 return $keyc.str_replace('=', '', base64_encode($result));
  244.         }

  245. }

  246. function dfsockopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE) {
  247.         require_once libfile('function/filesock');
  248.         return _dfsockopen($url, $limit, $post, $cookie, $bysocket, $ip, $timeout, $block);
  249. }

  250. function dhtmlspecialchars($string) {
  251.         if(is_array($string)) {
  252.                 foreach($string as $key => $val) {
  253.                         $string[$key] = dhtmlspecialchars($val);
  254.                 }
  255.         } else {
  256.                 $string = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $string);
  257.                 if(strpos($string, '&amp;#') !== false) {
  258.                         $string = preg_replace('/&amp;((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string);
  259.                 }
  260.         }
  261.         return $string;
  262. }

  263. function dexit($message = '') {
  264.         echo $message;
  265.         output();
  266.         exit();
  267. }

  268. function dheader($string, $replace = true, $http_response_code = 0) {
  269.         $islocation = substr(strtolower(trim($string)), 0, 8) == 'location';
  270.         if(defined('IN_MOBILE') && strpos($string, 'mobile') === false && $islocation) {
  271.                 if (strpos($string, '?') === false) {
  272.                         $string = $string.'?mobile=yes';
  273.                 } else {
  274.                         if(strpos($string, '#') === false) {
  275.                                 $string = $string.'&mobile=yes';
  276.                         } else {
  277.                                 $str_arr = explode('#', $string);
  278.                                 $str_arr[0] = $str_arr[0].'&mobile=yes';
  279.                                 $string = implode('#', $str_arr);
  280.                         }
  281.                 }
  282.         }
  283.         $string = str_replace(array("\r", "\n"), array('', ''), $string);
  284.         if(empty($http_response_code) || PHP_VERSION < '4.3' ) {
  285.                 @header($string, $replace);
  286.         } else {
  287.                 @header($string, $replace, $http_response_code);
  288.         }
  289.         if($islocation) {
  290.                 exit();
  291.         }
  292. }

  293. function dsetcookie($var, $value = '', $life = 0, $prefix = 1, $httponly = false) {

  294.         global $_G;

  295.         $config = $_G['config']['cookie'];

  296.         $_G['cookie'][$var] = $value;
  297.         $var = ($prefix ? $config['cookiepre'] : '').$var;
  298.         $_COOKIE[$var] = $var;

  299.         if($value == '' || $life < 0) {
  300.                 $value = '';
  301.                 $life = -1;
  302.         }

  303.         if(defined('IN_MOBILE')) {
  304.                 $httponly = false;
  305.         }

  306.         $life = $life > 0 ? getglobal('timestamp') + $life : ($life < 0 ? getglobal('timestamp') - 31536000 : 0);
  307.         $path = $httponly && PHP_VERSION < '5.2.0' ? $config['cookiepath'].'; HttpOnly' : $config['cookiepath'];

  308.         $secure = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
  309.         if(PHP_VERSION < '5.2.0') {
  310.                 setcookie($var, $value, $life, $path, $config['cookiedomain'], $secure);
  311.         } else {
  312.                 setcookie($var, $value, $life, $path, $config['cookiedomain'], $secure, $httponly);
  313.         }
  314. }

  315. function getcookie($key) {
  316.         global $_G;
  317.         return isset($_G['cookie'][$key]) ? $_G['cookie'][$key] : '';
  318. }

  319. function fileext($filename) {
  320.         return addslashes(trim(substr(strrchr($filename, '.'), 1, 10)));
  321. }

  322. function formhash($specialadd = '') {
  323.         global $_G;
  324.         $hashadd = defined('IN_ADMINCP') ? 'Only For Discuz! Admin Control Panel' : '';
  325.         return substr(md5(substr($_G['timestamp'], 0, -7).$_G['username'].$_G['uid'].$_G['authkey'].$hashadd.$specialadd), 8, 8);
  326. }

  327. function checkrobot($useragent = '') {
  328.         static $kw_spiders = array('bot', 'crawl', 'spider' ,'slurp', 'sohu-search', 'lycos', 'robozilla');
  329.         static $kw_browsers = array('msie', 'netscape', 'opera', 'konqueror', 'mozilla');

  330.         $useragent = strtolower(empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent);
  331.         if(strpos($useragent, 'http://') === false && dstrpos($useragent, $kw_browsers)) return false;
  332.         if(dstrpos($useragent, $kw_spiders)) return true;
  333.         return false;
  334. }
  335. function checkmobile() {
  336.         global $_G;
  337.         $mobile = array();
  338.         static $mobilebrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini',
  339.                                 'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung',
  340.                                 'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser',
  341.                                 'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource',
  342.                                 'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone',
  343.                                 'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop',
  344.                                 'benq', 'haier', '^lct', '320x320', '240x320', '176x220');
  345.         $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
  346.         if(($v = dstrpos($useragent, $mobilebrowser_list, true))) {
  347.                 $_G['mobile'] = $v;
  348.                 return true;
  349.         }
  350.         $brower = array('mozilla', 'chrome', 'safari', 'opera', 'm3gate', 'winwap', 'openwave', 'myop');
  351.         if(dstrpos($useragent, $brower)) return false;

  352.         $_G['mobile'] = 'unknown';
  353.         if($_GET['mobile'] === 'yes') {
  354.                 return true;
  355.         } else {
  356.                 return false;
  357.         }
  358. }

  359. function dstrpos($string, &$arr, $returnvalue = false) {
  360.         if(empty($string)) return false;
  361.         foreach((array)$arr as $v) {
  362.                 if(strpos($string, $v) !== false) {
  363.                         $return = $returnvalue ? $v : true;
  364.                         return $return;
  365.                 }
  366.         }
  367.         return false;
  368. }

  369. function isemail($email) {
  370.         return strlen($email) > 6 && preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $email);
  371. }

  372. function quescrypt($questionid, $answer) {
  373.         return $questionid > 0 && $answer != '' ? substr(md5($answer.md5($questionid)), 16, 8) : '';
  374. }

  375. function random($length, $numeric = 0) {
  376.         $seed = base_convert(md5(microtime().$_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
  377.         $seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed));
  378.         $hash = '';
  379.         $max = strlen($seed) - 1;
  380.         for($i = 0; $i < $length; $i++) {
  381.                 $hash .= $seed{mt_rand(0, $max)};
  382.         }
  383.         return $hash;
  384. }

  385. function strexists($string, $find) {
  386.         return !(strpos($string, $find) === FALSE);
  387. }

  388. function avatar($uid, $size = 'middle', $returnsrc = FALSE, $real = FALSE, $static = FALSE, $ucenterurl = '') {
  389.         global $_G;
  390.         static $staticavatar;
  391.         if($staticavatar === null) {
  392.                 $staticavatar = $_G['setting']['avatarmethod'];
  393.         }

  394.         $ucenterurl = empty($ucenterurl) ? $_G['setting']['ucenterurl'] : $ucenterurl;
  395.         $size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
  396.         $uid = abs(intval($uid));
  397.         if(!$staticavatar && !$static) {
  398.                 return $returnsrc ? $ucenterurl.'/avatar.php?uid='.$uid.'&size='.$size : '<img src="'.$ucenterurl.'/avatar.php?uid='.$uid.'&size='.$size.($real ? '&type=real' : '').'" />';
  399.         } else {
  400.                 $uid = sprintf("%09d", $uid);
  401.                 $dir1 = substr($uid, 0, 3);
  402.                 $dir2 = substr($uid, 3, 2);
  403.                 $dir3 = substr($uid, 5, 2);
  404.                 $file = $ucenterurl.'/data/avatar/'.$dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).($real ? '_real' : '').'_avatar_'.$size.'.jpg';
  405.                 return $returnsrc ? $file : '<img src="'.$file.'" onerror="this.onerror=null;this.src=\''.$ucenterurl.'/images/noavatar_'.$size.'.gif\'" />';
  406.         }
  407. }

  408. function lang($file, $langvar = null, $vars = array(), $default = null) {
  409.         global $_G;
  410.         list($path, $file) = explode('/', $file);
  411.         if(!$file) {
  412.                 $file = $path;
  413.                 $path = '';
  414.         }

  415.         if($path != 'plugin') {
  416.                 $key = $path == '' ? $file : $path.'_'.$file;
  417.                 if(!isset($_G['lang'][$key])) {
  418.                         include DISCUZ_ROOT.'./source/language/'.($path == '' ? '' : $path.'/').'lang_'.$file.'.php';
  419.                         $_G['lang'][$key] = $lang;
  420.                 }
  421.                 if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {
  422.                         include DISCUZ_ROOT.'./source/language/mobile/lang_template.php';
  423.                         $_G['lang'][$key] = array_merge($_G['lang'][$key], $lang);
  424.                 }
  425.                 $returnvalue = &$_G['lang'];
  426.         } else {
  427.                 if(empty($_G['config']['plugindeveloper'])) {
  428.                         loadcache('pluginlanguage_script');
  429.                 } elseif(!isset($_G['cache']['pluginlanguage_script'][$file]) && preg_match("/^[a-z]+[a-z0-9_]*$/i", $file)) {
  430.                         if(@include(DISCUZ_ROOT.'./data/plugindata/'.$file.'.lang.php')) {
  431.                                 $_G['cache']['pluginlanguage_script'][$file] = $scriptlang[$file];
  432.                         } else {
  433.                                 loadcache('pluginlanguage_script');
  434.                         }
  435.                 }
  436.                 $returnvalue = & $_G['cache']['pluginlanguage_script'];
  437.                 $key = &$file;
  438.         }
  439.         $return = $langvar !== null ? (isset($returnvalue[$key][$langvar]) ? $returnvalue[$key][$langvar] : null) : $returnvalue[$key];
  440.         $return = $return === null ? ($default !== null ? $default : $langvar) : $return;
  441.         $searchs = $replaces = array();
  442.         if($vars && is_array($vars)) {
  443.                 foreach($vars as $k => $v) {
  444.                         $searchs[] = '{'.$k.'}';
  445.                         $replaces[] = $v;
  446.                 }
  447.         }
  448.         if(is_string($return) && strpos($return, '{_G/') !== false) {
  449.                 preg_match_all('/\{_G\/(.+?)\}/', $return, $gvar);
  450.                 foreach($gvar[0] as $k => $v) {
  451.                         $searchs[] = $v;
  452.                         $replaces[] = getglobal($gvar[1][$k]);
  453.                 }
  454.         }
  455.         $return = str_replace($searchs, $replaces, $return);
  456.         return $return;
  457. }

  458. function checktplrefresh($maintpl, $subtpl, $timecompare, $templateid, $cachefile, $tpldir, $file) {
  459.         static $tplrefresh, $timestamp, $targettplname;
  460.         if($tplrefresh === null) {
  461.                 $tplrefresh = getglobal('config/output/tplrefresh');
  462.                 $timestamp = getglobal('timestamp');
  463.         }

  464.         if(empty($timecompare) || $tplrefresh == 1 || ($tplrefresh > 1 && !($timestamp % $tplrefresh))) {
  465.                 if(empty($timecompare) || @filemtime(DISCUZ_ROOT.$subtpl) > $timecompare) {
  466.                         require_once DISCUZ_ROOT.'/source/class/class_template.php';
  467.                         $template = new template();
  468.                         $template->parse_template($maintpl, $templateid, $tpldir, $file, $cachefile);
  469.                         if($targettplname === null) {
  470.                                 $targettplname = getglobal('style/tplfile');
  471.                                 if(!empty($targettplname)) {
  472.                                         $targettplname = strtr($targettplname, ':', '_');
  473.                                         update_template_block($targettplname, $template->blocks);
  474.                                 }
  475.                                 $targettplname = true;
  476.                         }
  477.                         return TRUE;
  478.                 }
  479.         }
  480.         return FALSE;
  481. }

  482. function template($file, $templateid = 0, $tpldir = '', $gettplfile = 0, $primaltpl='') {
  483.         global $_G;

  484.         static $_init_style = false;
  485.         if($_init_style === false) {
  486.                 $discuz = & discuz_core::instance();
  487.                 $discuz->_init_style();
  488.                 $_init_style = true;
  489.         }
  490.         $oldfile = $file;
  491.         if(strpos($file, ':') !== false) {
  492.                 $clonefile = '';
  493.                 list($templateid, $file, $clonefile) = explode(':', $file);
  494.                 $oldfile = $file;
  495.                 $file = empty($clonefile) || STYLEID != $_G['cache']['style_default']['styleid'] ? $file : $file.'_'.$clonefile;
  496.                 if($templateid == 'diy' && STYLEID == $_G['cache']['style_default']['styleid']) {
  497.                         $_G['style']['prefile'] = '';
  498.                         $diypath = DISCUZ_ROOT.'./data/diy/'; //DIY模板文件目錄
  499.                         $preend = '_diy_preview';
  500.                         $_G['gp_preview'] = !empty($_G['gp_preview']) ? $_G['gp_preview'] : '';
  501.                         $curtplname = $oldfile;
  502.                         if(isset($_G['cache']['diytemplatename'.$_G['basescript']])) {
  503.                                 $diytemplatename = &$_G['cache']['diytemplatename'.$_G['basescript']];
  504.                         } else {
  505.                                 $diytemplatename = &$_G['cache']['diytemplatename'];
  506.                         }
  507.                         $tplsavemod = 0;
  508.                         if(isset($diytemplatename[$file]) && file_exists($diypath.$file.'.htm') && ($tplsavemod = 1) || ($file = $primaltpl ? $primaltpl : $oldfile) && isset($diytemplatename[$file]) && file_exists($diypath.$file.'.htm')) {
  509.                                 $tpldir = 'data/diy';
  510.                                 !$gettplfile && $_G['style']['tplsavemod'] = $tplsavemod;
  511.                                 $curtplname = $file;
  512.                                 if($_G['gp_diy'] == 'yes' || $_G['gp_preview'] == 'yes') { //DIY模式或預覽模式下做以下判斷
  513.                                         $flag = file_exists($diypath.$file.$preend.'.htm');
  514.                                         if($_G['gp_preview'] == 'yes') {
  515.                                                 $file .= $flag ? $preend : '';
  516.                                         } else {
  517.                                                 $_G['style']['prefile'] = $flag ? 1 : '';
  518.                                         }
  519.                                 }
  520.                         } else {
  521.                                 $file = $primaltpl ? $primaltpl : $oldfile;
  522.                         }
  523.                         $tplrefresh = $_G['config']['output']['tplrefresh'];
  524.                         if($tpldir == 'data/diy' && ($tplrefresh ==1 || ($tplrefresh > 1 && !($_G['timestamp'] % $tplrefresh))) && filemtime($diypath.$file.'.htm') < filemtime(DISCUZ_ROOT.TPLDIR.'/'.($primaltpl ? $primaltpl : $oldfile).'.htm')) {
  525.                                 if (!updatediytemplate($file)) {
  526.                                         unlink($diypath.$file.'.htm');
  527.                                         $tpldir = '';
  528.                                 }
  529.                         }

  530.                         if (!$gettplfile && empty($_G['style']['tplfile'])) {
  531.                                 $_G['style']['tplfile'] = empty($clonefile) ? $curtplname : $oldfile.':'.$clonefile;
  532.                         }

  533.                         $_G['style']['prefile'] = !empty($_G['gp_preview']) && $_G['gp_preview'] == 'yes' ? '' : $_G['style']['prefile'];

  534.                 } else {
  535.                         $tpldir = './source/plugin/'.$templateid.'/template';
  536.                 }
  537.         }

  538.         $file .= !empty($_G['inajax']) && ($file == 'common/header' || $file == 'common/footer') ? '_ajax' : '';
  539.         $tpldir = $tpldir ? $tpldir : (defined('TPLDIR') ? TPLDIR : '');
  540.         $templateid = $templateid ? $templateid : (defined('TEMPLATEID') ? TEMPLATEID : '');
  541.         $filebak = $file;

  542.         if(defined('IN_MOBILE') && !defined('TPL_DEFAULT') && strpos($file, 'mobile/') === false || $_G['forcemobilemessage']) {
  543.                 $file = 'mobile/'.$oldfile;
  544.         }

  545.         $tplfile = ($tpldir ? $tpldir.'/' : './template/').$file.'.htm';

  546.         $file == 'common/header' && defined('CURMODULE') && CURMODULE && $file = 'common/header_'.$_G['basescript'].'_'.CURMODULE;

  547.         if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {
  548.                 if(strpos($tpldir, 'plugin')) {
  549.                         if(!file_exists(DISCUZ_ROOT.$tpldir.'/'.$file.'.htm')) {
  550.                                 require_once libfile('class/error');
  551.                                 discuz_error::template_error('template_notfound', $tpldir.'/'.$file.'.htm');
  552.                         } else {
  553.                                 $mobiletplfile = $tpldir.'/'.$file.'.htm';
  554.                         }
  555.                 }
  556.                 !$mobiletplfile && $mobiletplfile = $file.'.htm';
  557.                 if(strpos($tpldir, 'plugin') && file_exists(DISCUZ_ROOT.$mobiletplfile)) {
  558.                         $tplfile = $mobiletplfile;
  559.                 } elseif(!file_exists(DISCUZ_ROOT.TPLDIR.'/'.$mobiletplfile)) {
  560.                         $mobiletplfile = './template/default/'.$mobiletplfile;
  561.                         if(!file_exists(DISCUZ_ROOT.$mobiletplfile) && !$_G['forcemobilemessage']) {
  562.                                 $tplfile = str_replace('mobile/', '', $tplfile);
  563.                                 $file = str_replace('mobile/', '', $file);
  564.                                 define('TPL_DEFAULT', true);
  565.                         } else {
  566.                                 $tplfile = $mobiletplfile;
  567.                         }
  568.                 } else {
  569.                         $tplfile = TPLDIR.'/'.$mobiletplfile;
  570.                 }
  571.         }

  572.         $cachefile = './data/template/'.(defined('STYLEID') ? STYLEID.'_' : '_').$templateid.'_'.str_replace('/', '_', $file).'.tpl.php';

  573.         if($templateid != 1 && !file_exists(DISCUZ_ROOT.$tplfile)) {
  574.                 $tplfile = './template/default/'.$filebak.'.htm';
  575.         }

  576.         if($gettplfile) {
  577.                 return $tplfile;
  578.         }
  579.         checktplrefresh($tplfile, $tplfile, @filemtime(DISCUZ_ROOT.$cachefile), $templateid, $cachefile, $tpldir, $file);
  580.         return DISCUZ_ROOT.$cachefile;
  581. }

  582. function modauthkey($id) {
  583.         global $_G;
  584.         return md5($_G['username'].$_G['uid'].$_G['authkey'].substr(TIMESTAMP, 0, -7).$id);
  585. }

  586. function getcurrentnav() {
  587.         global $_G;
  588.         if(!empty($_G['mnid'])) {
  589.                 return $_G['mnid'];
  590.         }
  591.         $mnid = '';
  592.         $_G['basefilename'] = $_G['basefilename'] == $_G['basescript'] ? $_G['basefilename'] : $_G['basescript'].'.php';
  593.         if(isset($_G['setting']['navmns'][$_G['basefilename']])) {
  594.                 foreach($_G['setting']['navmns'][$_G['basefilename']] as $navmn) {
  595.                         if($navmn[0] == array_intersect_assoc($navmn[0], $_GET)) {
  596.                                 $mnid = $navmn[1];
  597.                         }
  598.                 }
  599.         }
  600.         if(!$mnid && isset($_G['setting']['navdms'])) {
  601.                 foreach($_G['setting']['navdms'] as $navdm => $navid) {
  602.                         if(strpos(strtolower($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']), $navdm) !== false) {
  603.                                 $mnid = $navid;
  604.                                 break;
  605.                         }
  606.                 }
  607.         }
  608.         if(!$mnid && isset($_G['setting']['navmn'][$_G['basefilename']])) {
  609.                 $mnid = $_G['setting']['navmn'][$_G['basefilename']];
  610.         }
  611.         return $mnid;
  612. }

  613. function loaducenter() {
  614.         require_once DISCUZ_ROOT.'./config/config_ucenter.php';
  615.         require_once DISCUZ_ROOT.'./uc_client/client.php';
  616. }

  617. function loadcache($cachenames, $force = false) {
  618.         global $_G;
  619.         static $loadedcache = array();
  620.         $cachenames = is_array($cachenames) ? $cachenames : array($cachenames);
  621.         $caches = array();
  622.         foreach ($cachenames as $k) {
  623.                 if(!isset($loadedcache[$k]) || $force) {
  624.                         $caches[] = $k;
  625.                         $loadedcache[$k] = true;
  626.                 }
  627.         }

  628.         if(!empty($caches)) {
  629.                 $cachedata = cachedata($caches);
  630.                 foreach($cachedata as $cname => $data) {
  631.                         if($cname == 'setting') {
  632.                                 $_G['setting'] = $data;
  633.                         } elseif(strpos($cname, 'usergroup_'.$_G['groupid']) !== false) {
  634.                                 $_G['cache'][$cname] = $_G['group'] = $data;
  635.                         } elseif($cname == 'style_default') {
  636.                                 $_G['cache'][$cname] = $_G['style'] = $data;
  637.                         } elseif($cname == 'grouplevels') {
  638.                                 $_G['grouplevels'] = $data;
  639.                         } else {
  640.                                 $_G['cache'][$cname] = $data;
  641.                         }
  642.                 }
  643.         }
  644.         return true;
  645. }

  646. function cachedata($cachenames) {
  647.         global $_G;
  648.         static $isfilecache, $allowmem;

  649.         if(!isset($isfilecache)) {
  650.                 $isfilecache = getglobal('config/cache/type') == 'file';
  651.                 $allowmem = memory('check');
  652.         }

  653.         $data = array();
  654.         $cachenames = is_array($cachenames) ? $cachenames : array($cachenames);
  655.         if($allowmem) {
  656.                 $newarray = array();
  657.                 foreach ($cachenames as $name) {
  658.                         $data[$name] = memory('get', $name);
  659.                         if($data[$name] === null) {
  660.                                 $data[$name] = null;
  661.                                 $newarray[] = $name;
  662.                         }
  663.                 }
  664.                 if(empty($newarray)) {
  665.                         return $data;
  666.                 } else {
  667.                         $cachenames = $newarray;
  668.                 }
  669.         }

  670.         if($isfilecache) {
  671.                 $lostcaches = array();
  672.                 foreach($cachenames as $cachename) {
  673.                         if(!@include_once(DISCUZ_ROOT.'./data/cache/cache_'.$cachename.'.php')) {
  674.                                 $lostcaches[] = $cachename;
  675.                         }
  676.                 }
  677.                 if(!$lostcaches) {
  678.                         return $data;
  679.                 }
  680.                 $cachenames = $lostcaches;
  681.                 unset($lostcaches);
  682.         }
  683.         $query = DB::query("SELECT /*!40001 SQL_CACHE */ * FROM ".DB::table('common_syscache')." WHERE cname IN ('".implode("','", $cachenames)."')");
  684.         while($syscache = DB::fetch($query)) {
  685.                 $data[$syscache['cname']] = $syscache['ctype'] ? unserialize($syscache['data']) : $syscache['data'];
  686.                 $allowmem && (memory('set', $syscache['cname'], $data[$syscache['cname']]));
  687.                 if($isfilecache) {
  688.                         $cachedata = '$data[\''.$syscache['cname'].'\'] = '.var_export($data[$syscache['cname']], true).";\n\n";
  689.                         if($fp = @fopen(DISCUZ_ROOT.'./data/cache/cache_'.$syscache['cname'].'.php', 'wb')) {
  690.                                 fwrite($fp, "<?php\n//Discuz! cache file, DO NOT modify me!\n//Identify: ".md5($syscache['cname'].$cachedata.$_G['config']['security']['authkey'])."\n\n$cachedata?>");
  691.                                 fclose($fp);
  692.                         }
  693.                 }
  694.         }

  695.         foreach($cachenames as $name) {
  696.                 if($data[$name] === null) {
  697.                         $data[$name] = null;
  698.                         $allowmem && (memory('set', $name, array()));
  699.                 }
  700.         }

  701.         return $data;
  702. }

  703. function dgmdate($timestamp, $format = 'dt', $timeoffset = '9999', $uformat = '') {
  704.         global $_G;
  705.         $format == 'u' && !$_G['setting']['dateconvert'] && $format = 'dt';
  706.         static $dformat, $tformat, $dtformat, $offset, $lang;
  707.         if($dformat === null) {
  708.                 $dformat = getglobal('setting/dateformat');
  709.                 $tformat = getglobal('setting/timeformat');
  710.                 $dtformat = $dformat.' '.$tformat;
  711.                 $offset = getglobal('member/timeoffset');
  712.                 $lang = lang('core', 'date');
  713.         }
  714.         $timeoffset = $timeoffset == 9999 ? $offset : $timeoffset;
  715.         $timestamp += $timeoffset * 3600;
  716.         $format = empty($format) || $format == 'dt' ? $dtformat : ($format == 'd' ? $dformat : ($format == 't' ? $tformat : $format));
  717.         if($format == 'u') {
  718.                 $todaytimestamp = TIMESTAMP - (TIMESTAMP + $timeoffset * 3600) % 86400 + $timeoffset * 3600;
  719.                 $s = gmdate(!$uformat ? str_replace(":i", ":i:s", $dtformat) : $uformat, $timestamp);
  720.                 $time = TIMESTAMP + $timeoffset * 3600 - $timestamp;
  721.                 if($timestamp >= $todaytimestamp) {
  722.                         if($time > 3600) {
  723.                                 return '<span title="'.$s.'">'.intval($time / 3600).'&nbsp;'.$lang['hour'].$lang['before'].'</span>';
  724.                         } elseif($time > 1800) {
  725.                                 return '<span title="'.$s.'">'.$lang['half'].$lang['hour'].$lang['before'].'</span>';
  726.                         } elseif($time > 60) {
  727.                                 return '<span title="'.$s.'">'.intval($time / 60).'&nbsp;'.$lang['min'].$lang['before'].'</span>';
  728.                         } elseif($time > 0) {
  729.                                 return '<span title="'.$s.'">'.$time.'&nbsp;'.$lang['sec'].$lang['before'].'</span>';
  730.                         } elseif($time == 0) {
  731.                                 return '<span title="'.$s.'">'.$lang['now'].'</span>';
  732.                         } else {
  733.                                 return $s;
  734.                         }
  735.                 } elseif(($days = intval(($todaytimestamp - $timestamp) / 86400)) >= 0 && $days < 7) {
  736.                         if($days == 0) {
  737.                                 return '<span title="'.$s.'">'.$lang['yday'].'&nbsp;'.gmdate($tformat, $timestamp).'</span>';
  738.                         } elseif($days == 1) {
  739.                                 return '<span title="'.$s.'">'.$lang['byday'].'&nbsp;'.gmdate($tformat, $timestamp).'</span>';
  740.                         } else {
  741.                                 return '<span title="'.$s.'">'.($days + 1).'&nbsp;'.$lang['day'].$lang['before'].'</span>';
  742.                         }
  743.                 } else {
  744.                         return $s;
  745.                 }
  746.         } else {
  747.                 return gmdate($format, $timestamp);
  748.         }
  749. }

  750. function dmktime($date) {
  751.         if(strpos($date, '-')) {
  752.                 $time = explode('-', $date);
  753.                 return mktime(0, 0, 0, $time[1], $time[2], $time[0]);
  754.         }
  755.         return 0;
  756. }

  757. function save_syscache($cachename, $data) {
  758.         static $isfilecache, $allowmem;
  759.         if(!isset($isfilecache)) {
  760.                 $isfilecache = getglobal('config/cache/type') == 'file';
  761.                 $allowmem = memory('check');
  762.         }

  763.         if(is_array($data)) {
  764.                 $ctype = 1;
  765.                 $data = addslashes(serialize($data));
  766.         } else {
  767.                 $ctype = 0;
  768.         }

  769.         DB::query("REPLACE INTO ".DB::table('common_syscache')." (cname, ctype, dateline, data) VALUES ('$cachename', '$ctype', '".TIMESTAMP."', '$data')");

  770.         $allowmem && memory('rm', $cachename);
  771.         $isfilecache && @unlink(DISCUZ_ROOT.'./data/cache/cache_'.$cachename.'.php');
  772. }

  773. function block_get($parameter) {
  774.         global $_G;
  775.         static $allowmem;
  776.         if($allowmem === null) {
  777.                 include_once libfile('function/block');
  778.                 $allowmem = getglobal('setting/memory/diyblock/enable') && memory('check');
  779.         }
  780.         if(!$allowmem) {
  781.                 block_get_batch($parameter);
  782.                 return true;
  783.         }
  784.         $blockids = explode(',', $parameter);
  785.         $lostbids = array();
  786.         foreach ($blockids as $bid) {
  787.                 $bid = intval($bid);
  788.                 if($bid) {
  789.                         $_G['block'][$bid] = memory('get', 'blockcache_'.$bid);
  790.                         if($_G['block'][$bid] === null) {
  791.                                 $lostbids[] = $bid;
  792.                         } else {
  793.                                 $styleid = $_G['block'][$bid]['styleid'];
  794.                                 if($styleid && !isset($_G['blockstyle_'.$styleid])) {
  795.                                         $_G['blockstyle_'.$styleid] = memory('get', 'blockstylecache_'.$styleid);
  796.                                 }
  797.                         }
  798.                 }
  799.         }

  800.         if($lostbids) {
  801.                 block_get_batch(implode(',', $lostbids));
  802.                 foreach ($lostbids as $bid) {
  803.                         if(isset($_G['block'][$bid])) {
  804.                                 memory('set', 'blockcache_'.$bid, $_G['block'][$bid], getglobal('setting/memory/diyblock/ttl'));
  805.                                 $styleid = $_G['block'][$bid]['styleid'];
  806.                                 if($styleid && $_G['blockstyle_'.$styleid]) {
  807.                                         memory('set', 'blockstylecache_'.$styleid, $_G['blockstyle_'.$styleid], getglobal('setting/memory/diyblock/ttl'));
  808.                                 }
  809.                         }
  810.                 }
  811.         }
  812. }

  813. function block_display($bid) {
  814.         include_once libfile('function/block');
  815.         block_display_batch($bid);
  816. }

  817. function dimplode($array) {
  818.         if(!empty($array)) {
  819.                 return "'".implode("','", is_array($array) ? $array : array($array))."'";
  820.         } else {
  821.                 return 0;
  822.         }
  823. }

  824. function libfile($libname, $folder = '') {
  825.         $libpath = DISCUZ_ROOT.'/source/'.$folder;
  826.         if(strstr($libname, '/')) {
  827.                 list($pre, $name) = explode('/', $libname);
  828.                 return realpath("{$libpath}/{$pre}/{$pre}_{$name}.php");
  829.         } else {
  830.                 return realpath("{$libpath}/{$libname}.php");
  831.         }
  832. }

  833. function dstrlen($str) {
  834.         if(strtolower(CHARSET) != 'utf-8') {
  835.                 return strlen($str);
  836.         }
  837.         $count = 0;
  838.         for($i = 0; $i < strlen($str); $i++){
  839.                 $value = ord($str[$i]);
  840.                 if($value > 127) {
  841.                         $count++;
  842.                         if($value >= 192 && $value <= 223) $i++;
  843.                         elseif($value >= 224 && $value <= 239) $i = $i + 2;
  844.                         elseif($value >= 240 && $value <= 247) $i = $i + 3;
  845.                     }
  846.                     $count++;
  847.         }
  848.         return $count;
  849. }

  850. function cutstr($string, $length, $dot = ' ...') {
  851.         if(strlen($string) <= $length) {
  852.                 return $string;
  853.         }

  854.         $pre = chr(1);
  855.         $end = chr(1);
  856.         $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array($pre.'&'.$end, $pre.'"'.$end, $pre.'<'.$end, $pre.'>'.$end), $string);

  857.         $strcut = '';
  858.         if(strtolower(CHARSET) == 'utf-8') {

  859.                 $n = $tn = $noc = 0;
  860.                 while($n < strlen($string)) {

  861.                         $t = ord($string[$n]);
  862.                         if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
  863.                                 $tn = 1; $n++; $noc++;
  864.                         } elseif(194 <= $t && $t <= 223) {
  865.                                 $tn = 2; $n += 2; $noc += 2;
  866.                         } elseif(224 <= $t && $t <= 239) {
  867.                                 $tn = 3; $n += 3; $noc += 2;
  868.                         } elseif(240 <= $t && $t <= 247) {
  869.                                 $tn = 4; $n += 4; $noc += 2;
  870.                         } elseif(248 <= $t && $t <= 251) {
  871.                                 $tn = 5; $n += 5; $noc += 2;
  872.                         } elseif($t == 252 || $t == 253) {
  873.                                 $tn = 6; $n += 6; $noc += 2;
  874.                         } else {
  875.                                 $n++;
  876.                         }

  877.                         if($noc >= $length) {
  878.                                 break;
  879.                         }

  880.                 }
  881.                 if($noc > $length) {
  882.                         $n -= $tn;
  883.                 }

  884.                 $strcut = substr($string, 0, $n);

  885.         } else {
  886.                 for($i = 0; $i < $length; $i++) {
  887.                         $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
  888.                 }
  889.         }

  890.         $strcut = str_replace(array($pre.'&'.$end, $pre.'"'.$end, $pre.'<'.$end, $pre.'>'.$end), array('&amp;', '&quot;', '&lt;', '&gt;'), $strcut);

  891.         $pos = strrpos($strcut, chr(1));
  892.         if($pos !== false) {
  893.                 $strcut = substr($strcut,0,$pos);
  894.         }
  895.         return $strcut.$dot;
  896. }

  897. function dstripslashes($string) {
  898.         if(empty($string)) return $string;
  899.         if(is_array($string)) {
  900.                 foreach($string as $key => $val) {
  901.                         $string[$key] = dstripslashes($val);
  902.                 }
  903.         } else {
  904.                 $string = stripslashes($string);
  905.         }
  906.         return $string;
  907. }

  908. function aidencode($aid, $type = 0, $tid = 0) {
  909.         global $_G;
  910.         $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;
  911.         return rawurlencode(base64_encode($s));
  912. }

  913. function getforumimg($aid, $nocache = 0, $w = 140, $h = 140, $type = '') {
  914.         global $_G;
  915.         $key = md5($aid.'|'.$w.'|'.$h);
  916.         return 'forum.php?mod=image&aid='.$aid.'&size='.$w.'x'.$h.'&key='.rawurlencode($key).($nocache ? '&nocache=yes' : '').($type ? '&type='.$type : '');
  917. }

  918. function rewriteoutput($type, $returntype, $host) {
  919.         global $_G;
  920.         $fextra = '';
  921.         if($type == 'forum_forumdisplay') {
  922.                 list(,,, $fid, $page, $extra) = func_get_args();
  923.                 $r = array(
  924.                         '{fid}' => empty($_G['setting']['forumkeys'][$fid]) ? $fid : $_G['setting']['forumkeys'][$fid],
  925.                         '{page}' => $page ? $page : 1,
  926.                 );
  927.         } elseif($type == 'forum_viewthread') {
  928.                 list(,,, $tid, $page, $prevpage, $extra) = func_get_args();
  929.                 $r = array(
  930.                         '{tid}' => $tid,
  931.                         '{page}' => $page ? $page : 1,
  932.                         '{prevpage}' => $prevpage && !IS_ROBOT ? $prevpage : 1,
  933.                 );
  934.         } elseif($type == 'home_space') {
  935.                 list(,,, $uid, $username, $extra) = func_get_args();
  936.                 $_G['setting']['rewritecompatible'] && $username = rawurlencode($username);
  937.                 $r = array(
  938.                         '{user}' => $uid ? 'uid' : 'username',
  939.                         '{value}' => $uid ? $uid : $username,
  940.                 );
  941.         } elseif($type == 'home_blog') {
  942.                 list(,,, $uid, $blogid, $extra) = func_get_args();
  943.                 $r = array(
  944.                         '{uid}' => $uid,
  945.                         '{blogid}' => $blogid,
  946.                 );
  947.         } elseif($type == 'group_group') {
  948.                 list(,,, $fid, $page, $extra) = func_get_args();
  949.                 $r = array(
  950.                         '{fid}' => $fid,
  951.                         '{page}' => $page ? $page : 1,
  952.                 );
  953.         } elseif($type == 'portal_topic') {
  954.                 list(,,, $name, $extra) = func_get_args();
  955.                 $r = array(
  956.                         '{name}' => $name,
  957.                 );
  958.         } elseif($type == 'portal_article') {
  959.                 list(,,, $id, $page, $extra) = func_get_args();
  960.                 $r = array(
  961.                         '{id}' => $id,
  962.                         '{page}' => $page ? $page : 1,
  963.                 );
  964.         } elseif($type == 'forum_archiver') {
  965.                 list(,, $action, $value, $page, $extra) = func_get_args();
  966.                 $host = '';
  967.                 $r = array(
  968.                         '{action}' => $action,
  969.                         '{value}' => $value,
  970.                 );
  971.                 if($page) {
  972.                         $fextra = '?page='.$page;
  973.                 }
  974.         }
  975.         $href = str_replace(array_keys($r), $r, $_G['setting']['rewriterule'][$type]).$fextra;
  976.         if(!$returntype) {
  977.                 return '<a href="'.$host.$href.'"'.(!empty($extra) ? stripslashes($extra) : '').'>';
  978.         } else {
  979.                 return $host.$href;
  980.         }
  981. }

  982. function mobilereplace($file, $replace) {
  983.         global $_G;
  984.         if(strpos($replace, 'mobile=') === false) {
  985.                 if(strpos($replace, '?') === false) {
  986.                         $replace = 'href="'.$file.$replace.'?mobile=yes"';
  987.                 } else {
  988.                         $replace = 'href="'.$file.$replace.'&mobile=yes"';
  989.                 }
  990.                 return $replace;
  991.         } else {
  992.                 return 'href="'.$file.$replace.'"';
  993.         }
  994. }

  995. function mobileoutput() {
  996.         global $_G;
  997.         if(!defined('TPL_DEFAULT')) {
  998.                 $content = ob_get_contents();
  999.                 ob_end_clean();
  1000.                 $content = preg_replace("/href="(\w+\.php)(.*?)"/e", "mobilereplace('\\1', '\\2')", $content);

  1001.                 ob_start();
  1002.                 $content = '<?xml version="1.0" encoding="utf-8"?>'.$content;
  1003.                 if('utf-8' != CHARSET) {
  1004.                         @header('Content-Type: text/html; charset=utf-8');
  1005.                         $content = diconv($content, CHARSET, 'utf-8');
  1006.                 }
  1007.                 echo $content;
  1008.                 exit();

  1009.         } elseif (defined('TPL_DEFAULT') && !$_G['cookie']['dismobilemessage'] && $_G['mobile']) {
  1010.                 ob_end_clean();
  1011.                 ob_start();
  1012.                 $_G['forcemobilemessage'] = true;
  1013.                 $query_sting_tmp = str_replace(array('&mobile=yes', 'mobile=yes'), array(''), $_SERVER['QUERY_STRING']);
  1014.                 $_G['setting']['mobile']['pageurl'] = $_G['siteurl'].substr($_G['PHP_SELF'], 1).($query_sting_tmp ? '?'.$query_sting_tmp.'&mobile=no' : '?mobile=no' );
  1015.                 unset($query_sting_tmp);
  1016.                 dsetcookie('dismobilemessage', '1', 3600);
  1017.                 showmessage('not_in_mobile');
  1018.                 exit;
  1019.         }
  1020. }

  1021. function output() {

  1022.         global $_G;


  1023.         if(defined('DISCUZ_OUTPUTED')) {
  1024.                 return;
  1025.         } else {
  1026.                 define('DISCUZ_OUTPUTED', 1);
  1027.         }

  1028.         if(!empty($_G['blockupdate'])) {
  1029.                 block_updatecache($_G['blockupdate']['bid']);
  1030.         }

  1031.         if(defined('IN_MOBILE')) {
  1032.                 mobileoutput();
  1033.         }
  1034.         $havedomain = implode('', $_G['setting']['domain']['app']);
  1035.         if($_G['setting']['rewritestatus'] || !empty($havedomain)) {
  1036.                 $content = ob_get_contents();
  1037.                 $content = output_replace($content);


  1038.                 ob_end_clean();
  1039.                 $_G['gzipcompress'] ? ob_start('ob_gzhandler') : ob_start();

  1040.                 echo $content;
  1041.         }
  1042.         if($_G['setting']['ftp']['connid']) {
  1043.                 @ftp_close($_G['setting']['ftp']['connid']);
  1044.         }
  1045.         $_G['setting']['ftp'] = array();

  1046.         if(defined('CACHE_FILE') && CACHE_FILE && !defined('CACHE_FORBIDDEN') && !defined('IN_MOBILE')) {
  1047.                 if(diskfreespace(DISCUZ_ROOT.'./'.$_G['setting']['cachethreaddir']) > 1000000) {
  1048.                         if($fp = @fopen(CACHE_FILE, 'w')) {
  1049.                                 flock($fp, LOCK_EX);
  1050.                                 fwrite($fp, empty($content) ? ob_get_contents() : $content);
  1051.                         }
  1052.                         @fclose($fp);
  1053.                         chmod(CACHE_FILE, 0777);
  1054.                 }
  1055.         }

  1056.         if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG && @include(libfile('function/debug'))) {
  1057.                 function_exists('debugmessage') && debugmessage();
  1058.         }
  1059. }

  1060. function output_replace($content) {
  1061.         global $_G;
  1062.         if(defined('IN_MODCP') || defined('IN_ADMINCP')) return $content;
  1063.         if(!empty($_G['setting']['output']['str']['search'])) {
  1064.                 if(empty($_G['setting']['domain']['app']['default'])) {
  1065.                         $_G['setting']['output']['str']['replace'] = str_replace('{CURHOST}', $_G['siteurl'], $_G['setting']['output']['str']['replace']);
  1066.                 }
  1067.                 $content = str_replace($_G['setting']['output']['str']['search'], $_G['setting']['output']['str']['replace'], $content);
  1068.         }
  1069.         if(!empty($_G['setting']['output']['preg']['search'])) {
  1070.                 if(empty($_G['setting']['domain']['app']['default'])) {
  1071.                         $_G['setting']['output']['preg']['search'] = str_replace('\{CURHOST\}', preg_quote($_G['siteurl'], '/'), $_G['setting']['output']['preg']['search']);
  1072.                         $_G['setting']['output']['preg']['replace'] = str_replace('{CURHOST}', $_G['siteurl'], $_G['setting']['output']['preg']['replace']);
  1073.                 }

  1074.                 $content = preg_replace($_G['setting']['output']['preg']['search'], $_G['setting']['output']['preg']['replace'], $content);
  1075.         }

  1076.         return $content;
  1077. }

  1078. function output_ajax() {
  1079.         global $_G;
  1080.         $s = ob_get_contents();
  1081.         ob_end_clean();
  1082.         $s = preg_replace("/([\\x01-\\x08\\x0b-\\x0c\\x0e-\\x1f])+/", ' ', $s);
  1083.         $s = str_replace(array(chr(0), ']]>'), array(' ', ']]&gt;'), $s);
  1084.         if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG && @include(libfile('function/debug'))) {
  1085.                 function_exists('debugmessage') && $s .= debugmessage(1);
  1086.         }
  1087.         $havedomain = implode('', $_G['setting']['domain']['app']);
  1088.         if($_G['setting']['rewritestatus'] || !empty($havedomain)) {
  1089.         $s = output_replace($s);
  1090.         }
  1091.         return $s;
  1092. }

  1093. function runhooks() {
  1094.         if(!defined('HOOKTYPE')) {
  1095.                 define('HOOKTYPE', !defined('IN_MOBILE') ? 'hookscript' : 'hookscriptmobile');
  1096.         }
  1097.         if(defined('CURMODULE')) {
  1098.                 global $_G;
  1099.                 if($_G['setting']['plugins'][HOOKTYPE.'_common']) {
  1100.                         hookscript('common', 'global', 'funcs', array(), 'common');
  1101.                 }
  1102.                 hookscript(CURMODULE, $_G['basescript']);
  1103.         }
  1104. }

  1105. function hookscript($script, $hscript, $type = 'funcs', $param = array(), $func = '') {
  1106.         global $_G;
  1107.         static $pluginclasses;
  1108.         if($hscript == 'home') {
  1109.                 if($script != 'spacecp') {
  1110.                         $script = 'space_'.(!empty($_G['gp_do']) ? $_G['gp_do'] : (!empty($_GET['do']) ? $_GET['do'] : ''));
  1111.                 } else {
  1112.                         $script .= !empty($_G['gp_ac']) ? '_'.$_G['gp_ac'] : (!empty($_GET['ac']) ? '_'.$_GET['ac'] : '');
  1113.                 }
  1114.         }
  1115.         if(!isset($_G['setting'][HOOKTYPE][$hscript][$script][$type])) {
  1116.                 return;
  1117.         }
  1118.         if(!isset($_G['cache']['plugin'])) {
  1119.                 loadcache('plugin');
  1120.         }
  1121.         foreach((array)$_G['setting'][HOOKTYPE][$hscript][$script]['module'] as $identifier => $include) {
  1122.                 $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']);
  1123.                 if($hooksadminid[$identifier]) {
  1124.                         @include_once DISCUZ_ROOT.'./source/plugin/'.$include.'.class.php';
  1125.                 }
  1126.         }
  1127.         if(@is_array($_G['setting'][HOOKTYPE][$hscript][$script][$type])) {
  1128.                 $_G['inhookscript'] = true;
  1129.                 $funcs = !$func ? $_G['setting'][HOOKTYPE][$hscript][$script][$type] : array($func => $_G['setting'][HOOKTYPE][$hscript][$script][$type][$func]);
  1130.                 foreach($funcs as $hookkey => $hookfuncs) {
  1131.                         foreach($hookfuncs as $hookfunc) {
  1132.                                 if($hooksadminid[$hookfunc[0]]) {
  1133.                                         $classkey = (HOOKTYPE != 'hookscriptmobile' ? '' : 'mobile').'plugin_'.($hookfunc[0].($hscript != 'global' ? '_'.$hscript : ''));
  1134.                                         if(!class_exists($classkey)) {
  1135.                                                 continue;
  1136.                                         }
  1137.                                         if(!isset($pluginclasses[$classkey])) {
  1138.                                                 $pluginclasses[$classkey] = new $classkey;
  1139.                                         }
  1140.                                         if(!method_exists($pluginclasses[$classkey], $hookfunc[1])) {
  1141.                                                 continue;
  1142.                                         }
  1143.                                         $return = $pluginclasses[$classkey]->$hookfunc[1]($param);

  1144.                                         if(is_array($return)) {
  1145.                                                 if(!isset($_G['setting']['pluginhooks'][$hookkey]) || is_array($_G['setting']['pluginhooks'][$hookkey])) {
  1146.                                                         foreach($return as $k => $v) {
  1147.                                                                 $_G['setting']['pluginhooks'][$hookkey][$k] .= $v;
  1148.                                                         }
  1149.                                                 }
  1150.                                         } else {
  1151.                                                 if(!is_array($_G['setting']['pluginhooks'][$hookkey])) {
  1152.                                                         $_G['setting']['pluginhooks'][$hookkey] .= $return;
  1153.                                                 } else {
  1154.                                                         foreach($_G['setting']['pluginhooks'][$hookkey] as $k => $v) {
  1155.                                                                 $_G['setting']['pluginhooks'][$hookkey][$k] .= $return;
  1156.                                                         }
  1157.                                                 }
  1158.                                         }
  1159.                                 }
  1160.                         }
  1161.                 }
  1162.         }
  1163.         $_G['inhookscript'] = false;
  1164. }

  1165. function hookscriptoutput($tplfile) {
  1166.         global $_G;
  1167.         if(!empty($_G['hookscriptoutput'])) {
  1168.                 return;
  1169.         }
  1170.         if(!empty($_G['gp_mobiledata'])) {
  1171.                 require_once libfile('class/mobiledata');
  1172.                 $mobiledata = new mobiledata();
  1173.                 if($mobiledata->validator()) {
  1174.                         $mobiledata->outputvariables();
  1175.                 }
  1176.         }
  1177.         hookscript('global', 'global');
  1178.         if(defined('CURMODULE')) {
  1179.                 $param = array('template' => $tplfile, 'message' => $_G['hookscriptmessage'], 'values' => $_G['hookscriptvalues']);
  1180.                 hookscript(CURMODULE, $_G['basescript'], 'outputfuncs', $param);
  1181.         }
  1182.         $_G['hookscriptoutput'] = true;
  1183. }

  1184. function pluginmodule($pluginid, $type) {
  1185.         global $_G;
  1186.         if(!isset($_G['cache']['plugin'])) {
  1187.                 loadcache('plugin');
  1188.         }
  1189.         list($identifier, $module) = explode(':', $pluginid);
  1190.         if(!is_array($_G['setting']['plugins'][$type]) || !array_key_exists($pluginid, $_G['setting']['plugins'][$type])) {
  1191.                 showmessage('plugin_nonexistence');
  1192.         }
  1193.         if(!empty($_G['setting']['plugins'][$type][$pluginid]['url'])) {
  1194.                 dheader('location: '.$_G['setting']['plugins'][$type][$pluginid]['url']);
  1195.         }
  1196.         $directory = $_G['setting']['plugins'][$type][$pluginid]['directory'];
  1197.         if(empty($identifier) || !preg_match("/^[a-z]+[a-z0-9_]*\/$/i", $directory) || !preg_match("/^[a-z0-9_\-]+$/i", $module)) {
  1198.                 showmessage('undefined_action');
  1199.         }
  1200.         if(@!file_exists(DISCUZ_ROOT.($modfile = './source/plugin/'.$directory.$module.'.inc.php'))) {
  1201.                 showmessage('plugin_module_nonexistence', '', array('mod' => $modfile));
  1202.         }
  1203.         return DISCUZ_ROOT.$modfile;
  1204. }
  1205. function updatecreditbyaction($action, $uid = 0, $extrasql = array(), $needle = '', $coef = 1, $update = 1, $fid = 0) {

  1206.         include_once libfile('class/credit');
  1207.         $credit = & credit::instance();
  1208.         if($extrasql) {
  1209.                 $credit->extrasql = $extrasql;
  1210.         }
  1211.         return $credit->execrule($action, $uid, $needle, $coef, $update, $fid);
  1212. }

  1213. function checklowerlimit($action, $uid = 0, $coef = 1, $fid = 0, $returnonly = 0) {
  1214.         require_once libfile('function/credit');
  1215.         return _checklowerlimit($action, $uid, $coef, $fid, $returnonly);
  1216. }

  1217. function batchupdatecredit($action, $uids = 0, $extrasql = array(), $coef = 1, $fid = 0) {

  1218.         include_once libfile('class/credit');
  1219.         $credit = & credit::instance();
  1220.         if($extrasql) {
  1221.                 $credit->extrasql = $extrasql;
  1222.         }
  1223.         return $credit->updatecreditbyrule($action, $uids, $coef, $fid);
  1224. }


  1225. function updatemembercount($uids, $dataarr = array(), $checkgroup = true, $operation = '', $relatedid = 0, $ruletxt = '') {
  1226.         if(!empty($uids) && (is_array($dataarr) && $dataarr)) {
  1227.                 require_once libfile('function/credit');
  1228.                 return _updatemembercount($uids, $dataarr, $checkgroup, $operation, $relatedid, $ruletxt);
  1229.         }
  1230.         return true;
  1231. }

  1232. function checkusergroup($uid = 0) {
  1233.         require_once libfile('class/credit');
  1234.         $credit = & credit::instance();
  1235.         $credit->checkusergroup($uid);
  1236. }

  1237. function checkformulasyntax($formula, $operators, $tokens) {
  1238.         $var = implode('|', $tokens);
  1239.         $operator = implode('', $operators);

  1240.         $operator = str_replace(
  1241.                 array('+', '-', '*', '/', '(', ')', '{', '}', '\''),
  1242.                 array('\+', '\-', '\*', '\/', '\(', '\)', '\{', '\}', '\\\''),
  1243.                 $operator
  1244.         );

  1245.         if(!empty($formula)) {
  1246.                 if(!preg_match("/^([$operator\.\d\(\)]|(($var)([$operator\(\)]|$)+))+$/", $formula) || !is_null(eval(preg_replace("/($var)/", "\$\\1", $formula).';'))){
  1247.                         return false;
  1248.                 }
  1249.         }
  1250.         return true;
  1251. }

  1252. function checkformulacredits($formula) {
  1253.         return checkformulasyntax(
  1254.                 $formula,
  1255.                 array('+', '-', '*', '/', ' '),
  1256.                 array('extcredits[1-8]', 'digestposts', 'posts', 'threads', 'oltime', 'friends', 'doings', 'polls', 'blogs', 'albums', 'sharings')
  1257.         );
  1258. }

  1259. function debug($var = null, $vardump = false) {
  1260.         echo '<pre>';
  1261.         if($var === null) {
  1262.                 print_r($GLOBALS);
  1263.         } else {
  1264.                 if($vardump) {
  1265.                         var_dump($var);
  1266.                 } else {
  1267.                         print_r($var);
  1268.                 }
  1269.         }
  1270.         exit();
  1271. }

  1272. function debuginfo() {
  1273.         global $_G;
  1274.         if(getglobal('setting/debug')) {
  1275.                 $db = & DB::object();
  1276.                 $_G['debuginfo'] = array(
  1277.                     'time' => number_format((dmicrotime() - $_G['starttime']), 6),
  1278.                     'queries' => $db->querynum,
  1279.                     'memory' => ucwords($_G['memory'])
  1280.                     );
  1281.                 if($db->slaveid) {
  1282.                         $_G['debuginfo']['queries'] = 'Total '.$db->querynum.', Slave '.$db->slavequery;
  1283.                 }
  1284.                 return TRUE;
  1285.         } else {
  1286.                 return FALSE;
  1287.         }
  1288. }

  1289. function getfocus_rand($module) {
  1290.         global $_G;

  1291.         if(empty($_G['setting']['focus']) || !array_key_exists($module, $_G['setting']['focus'])) {
  1292.                 return null;
  1293.         }
  1294.         do {
  1295.                 $focusid = $_G['setting']['focus'][$module][array_rand($_G['setting']['focus'][$module])];
  1296.                 if(!empty($_G['cookie']['nofocus_'.$focusid])) {
  1297.                         unset($_G['setting']['focus'][$module][$focusid]);
  1298.                         $continue = 1;
  1299.                 } else {
  1300.                         $continue = 0;
  1301.                 }
  1302.         } while(!empty($_G['setting']['focus'][$module]) && $continue);
  1303.         if(!$_G['setting']['focus'][$module]) {
  1304.                 return null;
  1305.         }
  1306.         loadcache('focus');
  1307.         if(empty($_G['cache']['focus']['data']) || !is_array($_G['cache']['focus']['data'])) {
  1308.                 return null;
  1309.         }
  1310.         return $focusid;
  1311. }

  1312. function check_seccode($value, $idhash) {
  1313.         global $_G;
  1314.         if(!$_G['setting']['seccodestatus']) {
  1315.                 return true;
  1316.         }
  1317.         if(!isset($_G['cookie']['seccode'.$idhash])) {
  1318.                 return false;
  1319.         }
  1320.         list($checkvalue, $checktime, $checkidhash, $checkformhash) = explode("\t", authcode($_G['cookie']['seccode'.$idhash], 'DECODE', $_G['config']['security']['authkey']));
  1321.         return $checkvalue == strtoupper($value) && TIMESTAMP - 180 > $checktime && $checkidhash == $idhash && FORMHASH == $checkformhash;
  1322. }

  1323. function check_secqaa($value, $idhash) {
  1324.         global $_G;
  1325.         if(!$_G['setting']['secqaa']) {
  1326.                 return true;
  1327.         }
  1328.         if(!isset($_G['cookie']['secqaa'.$idhash])) {
  1329.                 return false;
  1330.         }
  1331.         loadcache('secqaa');
  1332.         list($checkvalue, $checktime, $checkidhash, $checkformhash) = explode("\t", authcode($_G['cookie']['secqaa'.$idhash], 'DECODE', $_G['config']['security']['authkey']));
  1333.         return $checkvalue == md5($value) && TIMESTAMP - 180 > $checktime && $checkidhash == $idhash && FORMHASH == $checkformhash;
  1334. }

  1335. function adshow($parameter) {
  1336.         global $_G;
  1337.         if($_G['inajax']) {
  1338.                 return;
  1339.         }
  1340.         $params = explode('/', $parameter);
  1341.         $customid = 0;
  1342.         $customc = explode('_', $params[0]);
  1343.         if($customc[0] == 'custom') {
  1344.                 $params[0] = $customc[0];
  1345.                 $customid = $customc[1];
  1346.         }
  1347.         $adcontent = null;
  1348.         if(empty($_G['setting']['advtype']) || !in_array($params[0], $_G['setting']['advtype'])) {
  1349.                 $adcontent = '';
  1350.         }
  1351.         if($adcontent === null) {
  1352.                 loadcache('advs');
  1353.                 $adids = array();
  1354.                 $evalcode = &$_G['cache']['advs']['evalcode'][$params[0]];
  1355.                 $parameters = &$_G['cache']['advs']['parameters'][$params[0]];
  1356.                 $codes = &$_G['cache']['advs']['code'][$_G['basescript']][$params[0]];
  1357.                 if(!empty($codes)) {
  1358.                         foreach($codes as $adid => $code) {
  1359.                                 $parameter = &$parameters[$adid];
  1360.                                 $checked = true;
  1361.                                 @eval($evalcode['check']);
  1362.                                 if($checked) {
  1363.                                         $adids[] = $adid;
  1364.                                 }
  1365.                         }
  1366.                         if(!empty($adids)) {
  1367.                                 $adcode = $extra = '';
  1368.                                 @eval($evalcode['create']);
  1369.                                 if(empty($notag)) {
  1370.                                         $adcontent = '<div'.($params[1] != '' ? ' class="'.$params[1].'"' : '').$extra.'>'.$adcode.'</div>';
  1371.                                 } else {
  1372.                                         $adcontent = $adcode;
  1373.                                 }
  1374.                         }
  1375.                 }
  1376.         }
  1377.         $adfunc = 'ad_'.$params[0];
  1378.         $_G['setting']['pluginhooks'][$adfunc] = null;
  1379.         hookscript('ad', 'global', 'funcs', array('params' => $params, 'content' => $adcontent), $adfunc);
  1380.         hookscript('ad', $_G['basescript'], 'funcs', array('params' => $params, 'content' => $adcontent), $adfunc);
  1381.         return $_G['setting']['pluginhooks'][$adfunc] === null ? $adcontent : $_G['setting']['pluginhooks'][$adfunc];
  1382. }

  1383. function showmessage($message, $url_forward = '', $values = array(), $extraparam = array(), $custom = 0) {
  1384.         require_once libfile('function/message');
  1385.         return dshowmessage($message, $url_forward, $values, $extraparam, $custom);
  1386. }

  1387. function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {
  1388.         if(!getgpc($var)) {
  1389.                 return FALSE;
  1390.         } else {
  1391.                 global $_G;
  1392.                 if(!empty($_G['gp_mobiledata'])) {
  1393.                         require_once libfile('class/mobiledata');
  1394.                         $mobiledata = new mobiledata();
  1395.                         if($mobiledata->validator()) {
  1396.                                 return TRUE;
  1397.                         }
  1398.                 }
  1399.                 if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_G['gp_formhash']) && $_G['gp_formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||
  1400.                 preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {
  1401.                         if(checkperm('seccode')) {
  1402.                                 if($secqaacheck && !check_secqaa($_G['gp_secanswer'], $_G['gp_sechash'])) {
  1403.                                         showmessage('submit_secqaa_invalid');
  1404.                                 }
  1405.                                 if($seccodecheck && !check_seccode($_G['gp_seccodeverify'], $_G['gp_sechash'])) {
  1406.                                         showmessage('submit_seccode_invalid');
  1407.                                 }
  1408.                         }
  1409.                         return TRUE;
  1410.                 } else {
  1411.                         showmessage('submit_invalid');
  1412.                 }
  1413.         }
  1414. }

  1415. function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $autogoto = FALSE, $simple = FALSE) {
  1416.         global $_G;
  1417.         $ajaxtarget = !empty($_G['gp_ajaxtarget']) ? " ajaxtarget="".htmlspecialchars($_G['gp_ajaxtarget'])."" " : '';

  1418.         $a_name = '';
  1419.         if(strpos($mpurl, '#') !== FALSE) {
  1420.                 $a_strs = explode('#', $mpurl);
  1421.                 $mpurl = $a_strs[0];
  1422.                 $a_name = '#'.$a_strs[1];
  1423.         }

  1424.         if(defined('IN_ADMINCP')) {
  1425.                 $shownum = $showkbd = TRUE;
  1426.                 $lang['prev'] = '&lsaquo;&lsaquo;';
  1427.                 $lang['next'] = '&rsaquo;&rsaquo;';
  1428.         } else {
  1429.                 $shownum = $showkbd = FALSE;
  1430.                 if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {
  1431.                         $lang['prev'] = lang('core', 'prevpage');
  1432.                         $lang['next'] = lang('core', 'nextpage');
  1433.                 } else {
  1434.                         $lang['prev'] = '&nbsp;&nbsp;';
  1435.                         $lang['next'] = lang('core', 'nextpage');
  1436.                 }
  1437.         }
  1438.         if(defined('IN_MOBILE') && !defined('TPL_DEFAULT')) {
  1439.                 $dot = '..';
  1440.                 $page = intval($page) < 10 && intval($page) > 0 ? $page : 4 ;
  1441.         } else {
  1442.                 $dot = '...';
  1443.         }
  1444.         $multipage = '';
  1445.         $mpurl .= strpos($mpurl, '?') !== FALSE ? '&amp;' : '?';

  1446.         $realpages = 1;
  1447.         $_G['page_next'] = 0;
  1448.         $page -= strlen($curpage) - 1;
  1449.         if($page <= 0) {
  1450.                 $page = 1;
  1451.         }
  1452.         if($num > $perpage) {

  1453.                 $offset = floor($page * 0.5);

  1454.                 $realpages = @ceil($num / $perpage);
  1455.                 $pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;

  1456.                 if($page > $pages) {
  1457.                         $from = 1;
  1458.                         $to = $pages;
  1459.                 } else {
  1460.                         $from = $curpage - $offset;
  1461.                         $to = $from + $page - 1;
  1462.                         if($from < 1) {
  1463.                                 $to = $curpage + 1 - $from;
  1464.                                 $from = 1;
  1465.                                 if($to - $from < $page) {
  1466.                                         $to = $page;
  1467.                                 }
  1468.                         } elseif($to > $pages) {
  1469.                                 $from = $pages - $page + 1;
  1470.                                 $to = $pages;
  1471.                         }
  1472.                 }
  1473.                 $_G['page_next'] = $to;
  1474.                 $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="'.$mpurl.'page=1'.$a_name.'" class="first"'.$ajaxtarget.'>1 '.$dot.'</a>' : '').
  1475.                 ($curpage > 1 && !$simple ? '<a href="'.$mpurl.'page='.($curpage - 1).$a_name.'" class="prev"'.$ajaxtarget.'>'.$lang['prev'].'</a>' : '');
  1476.                 for($i = $from; $i <= $to; $i++) {
  1477.                         $multipage .= $i == $curpage ? '<strong>'.$i.'</strong>' :
  1478.                         '<a href="'.$mpurl.'page='.$i.($ajaxtarget && $i == $pages && $autogoto ? '#' : $a_name).'"'.$ajaxtarget.'>'.$i.'</a>';
  1479.                 }
  1480.                 $multipage .= ($to < $pages ? '<a href="'.$mpurl.'page='.$pages.$a_name.'" class="last"'.$ajaxtarget.'>'.$dot.' '.$realpages.'</a>' : '').
  1481.                 ($curpage < $pages && !$simple ? '<a href="'.$mpurl.'page='.($curpage + 1).$a_name.'" class="nxt"'.$ajaxtarget.'>'.$lang['next'].'</a>' : '').
  1482.                 ($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>' : '');

  1483.                 $multipage = $multipage ? '<div class="pg">'.($shownum && !$simple ? '<em>&nbsp;'.$num.'&nbsp;</em>' : '').$multipage.'</div>' : '';
  1484.         }
  1485.         $maxpage = $realpages;
  1486.         return $multipage;
  1487. }

  1488. function simplepage($num, $perpage, $curpage, $mpurl) {
  1489.         $return = '';
  1490.         $lang['next'] = lang('core', 'nextpage');
  1491.         $lang['prev'] = lang('core', 'prevpage');
  1492.         $next = $num == $perpage ? '<a href="'.$mpurl.'&amp;page='.($curpage + 1).'" class="nxt">'.$lang['next'].'</a>' : '';
  1493.         $prev = $curpage > 1 ? '<span class="pgb"><a href="'.$mpurl.'&amp;page='.($curpage - 1).'">'.$lang['prev'].'</a></span>' : '';
  1494.         if($next || $prev) {
  1495.                 $return = '<div class="pg">'.$prev.$next.'</div>';
  1496.         }
  1497.         return $return;
  1498. }

  1499. function censor($message, $modword = NULL, $return = FALSE) {
  1500.         global $_G;
  1501.         require_once libfile('class/censor');
  1502.         $censor = discuz_censor::instance();
  1503.         $censor->check($message, $modword);
  1504.         if($censor->modbanned()) {
  1505.                 $wordbanned = implode(', ', $censor->words_found);
  1506.                 if($return) {
  1507.                         return array('message' => lang('message', 'word_banned', array('wordbanned' => $wordbanned)));
  1508.                 }
  1509.                 if(!defined('IN_ADMINCP')) {
  1510.                         showmessage('word_banned', '', array('wordbanned' => $wordbanned));
  1511.                 } else {
  1512.                         cpmsg(lang('message', 'word_banned'), '', 'error', array('wordbanned' => $wordbanned));
  1513.                 }
  1514.         }
  1515.         if($_G['group']['allowposturl'] == 0 || $_G['group']['allowposturl'] == 2) {
  1516.                 $urllist = get_url_list($message);
  1517.                 if(is_array($urllist[1])) foreach($urllist[1] as $key => $val) {
  1518.                         if(!$val = trim($val)) continue;
  1519.                         if(!iswhitelist($val)) {
  1520.                                 if($_G['group']['allowposturl'] == 0) {
  1521.                                         showmessage('post_url_nopermission');
  1522.                                 } elseif($_G['group']['allowposturl'] == 2) {
  1523.                                         $message = str_replace('[url]'.$urllist[0][$key].'[/url]', $urllist[0][$key], $message);
  1524.                                         $message = preg_replace(
  1525.                                                 array(
  1526.                                                         "@\[url=".preg_quote($urllist[0][$key],'@')."\](.*?)\[/url\]@i",
  1527.                                                         "@href=('|")".preg_quote($urllist[0][$key],'@')."\\1@i",
  1528.                                                         "@\[url\](.*?".preg_quote($urllist[0][$key],'@').".*?)\[/url\]@i",
  1529.                                                 ),
  1530.                                                 array(
  1531.                                                         '\\1',
  1532.                                                         '',
  1533.                                                         '\\1',
  1534.                                                 ),
  1535.                                                 $message);
  1536.                                 }
  1537.                         }
  1538.                 }
  1539.         }
  1540.         return $message;
  1541. }

  1542. function censormod($message) {
  1543.         global $_G;
  1544.         if($_G['group']['ignorecensor']) {
  1545.                 return false;
  1546.         }
  1547.         $modposturl = false;
  1548.         if($_G['group']['allowposturl'] == 1) {
  1549.                 $urllist = get_url_list($message);
  1550.                 if(is_array($urllist[1])) foreach($urllist[1] as $key => $val) {
  1551.                         if(!$val = trim($val)) continue;
  1552.                         if(!iswhitelist($val)) {
  1553.                                 $modposturl = true;
  1554.                         }
  1555.                 }
  1556.         }
  1557.         if($modposturl) {
  1558.                 return true;
  1559.         }

  1560.         require_once libfile('class/censor');
  1561.         $censor = discuz_censor::instance();
  1562.         $censor->check($message);
  1563.         return $censor->modmoderated();
  1564. }

  1565. function space_merge(&$values, $tablename) {
  1566.         global $_G;

  1567.         $uid = empty($values['uid'])?$_G['uid']:$values['uid'];
  1568.         $var = "member_{$uid}_{$tablename}";
  1569.         if($uid) {
  1570.                 if(!isset($_G[$var])) {
  1571.                         $query = DB::query("SELECT * FROM ".DB::table('common_member_'.$tablename)." WHERE uid='$uid'");
  1572.                         if($_G[$var] = DB::fetch($query)) {
  1573.                                 if($tablename == 'field_home') {
  1574.                                         $_G['setting']['privacy'] = empty($_G['setting']['privacy']) ? array() : (is_array($_G['setting']['privacy']) ? $_G['setting']['privacy'] : unserialize($_G['setting']['privacy']));
  1575.                                         $_G[$var]['privacy'] = empty($_G[$var]['privacy'])? array() : is_array($_G[$var]['privacy']) ? $_G[$var]['privacy'] : unserialize($_G[$var]['privacy']);
  1576.                                         foreach (array('feed','view','profile') as $pkey) {
  1577.                                                 if(empty($_G[$var]['privacy'][$pkey]) && !isset($_G[$var]['privacy'][$pkey])) {
  1578.                                                         $_G[$var]['privacy'][$pkey] = isset($_G['setting']['privacy'][$pkey]) ? $_G['setting']['privacy'][$pkey] : array();
  1579.                                                 }
  1580.                                         }
  1581.                                         $_G[$var]['acceptemail'] = empty($_G[$var]['acceptemail'])? array() : unserialize($_G[$var]['acceptemail']);
  1582.                                         if(empty($_G[$var]['acceptemail'])) {
  1583.                                                 $_G[$var]['acceptemail'] = empty($_G['setting']['acceptemail'])?array():unserialize($_G['setting']['acceptemail']);
  1584.                                         }
  1585.                                 }
  1586.                         } else {
  1587.                                 DB::insert('common_member_'.$tablename, array('uid'=>$uid));
  1588.                                 $_G[$var] = array();
  1589.                         }
  1590.                 }
  1591.                 $values = array_merge($values, $_G[$var]);
  1592.         }
  1593. }

  1594. function runlog($file, $message, $halt=0) {
  1595.         global $_G;

  1596.         $nowurl = $_SERVER['REQUEST_URI']?$_SERVER['REQUEST_URI']:($_SERVER['PHP_SELF']?$_SERVER['PHP_SELF']:$_SERVER['SCRIPT_NAME']);
  1597.         $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";
  1598.         writelog($file, $log);
  1599.         if($halt) {
  1600.                 exit();
  1601.         }
  1602. }

  1603. function stripsearchkey($string) {
  1604.         $string = trim($string);
  1605.         $string = str_replace('*', '%', addcslashes($string, '%_'));
  1606.         $string = str_replace('_', '\_', $string);
  1607.         return $string;
  1608. }

  1609. function dmkdir($dir, $mode = 0777, $makeindex = TRUE){
  1610.         if(!is_dir($dir)) {
  1611.                 dmkdir(dirname($dir));
  1612.                 @mkdir($dir, $mode);
  1613.                 if(!empty($makeindex)) {
  1614.                         @touch($dir.'/index.html'); @chmod($dir.'/index.html', 0777);
  1615.                 }
  1616.         }
  1617.         return true;
  1618. }

  1619. function dreferer($default = '') {
  1620.         global $_G;

  1621.         $default = empty($default) ? $GLOBALS['_t_curapp'] : '';
  1622.         $_G['referer'] = !empty($_G['gp_referer']) ? $_G['gp_referer'] : $_SERVER['HTTP_REFERER'];
  1623.         $_G['referer'] = substr($_G['referer'], -1) == '?' ? substr($_G['referer'], 0, -1) : $_G['referer'];

  1624.         if(strpos($_G['referer'], 'member.php?mod=logging')) {
  1625.                 $_G['referer'] = $default;
  1626.         }
  1627.         $_G['referer'] = htmlspecialchars($_G['referer']);
  1628.         $_G['referer'] = str_replace('&amp;', '&', $_G['referer']);
  1629.         return strip_tags($_G['referer']);
  1630. }

  1631. function ftpcmd($cmd, $arg1 = '') {
  1632.         static $ftp;
  1633.         $ftpon = getglobal('setting/ftp/on');
  1634.         if(!$ftpon) {
  1635.                 return $cmd == 'error' ? -101 : 0;
  1636.         } elseif($ftp == null) {
  1637.                 require_once libfile('class/ftp');
  1638.                 $ftp = & discuz_ftp::instance();
  1639.         }
  1640.         if(!$ftp->enabled) {
  1641.                 return $ftp->error();
  1642.         } elseif($ftp->enabled && !$ftp->connectid) {
  1643.                 $ftp->connect();
  1644.         }
  1645.         switch ($cmd) {
  1646.                 case 'upload' : return $ftp->upload(getglobal('setting/attachdir').'/'.$arg1, $arg1); break;
  1647.                 case 'delete' : return $ftp->ftp_delete($arg1); break;
  1648.                 case 'close'  : return $ftp->ftp_close(); break;
  1649.                 case 'error'  : return $ftp->error(); break;
  1650.                 case 'object' : return $ftp; break;
  1651.                 default       : return false;
  1652.         }

  1653. }

  1654. function diconv($str, $in_charset, $out_charset = CHARSET, $ForceTable = FALSE) {
  1655.         global $_G;

  1656.         $in_charset = strtoupper($in_charset);
  1657.         $out_charset = strtoupper($out_charset);

  1658.         if(empty($str) || $in_charset == $out_charset) {
  1659.                 return $str;
  1660.         }

  1661.         $out = '';

  1662.         if(!$ForceTable) {
  1663.                 if(function_exists('iconv')) {
  1664.                         $out = iconv($in_charset, $out_charset.'//IGNORE', $str);
  1665.                 } elseif(function_exists('mb_convert_encoding')) {
  1666.                         $out = mb_convert_encoding($str, $out_charset, $in_charset);
  1667.                 }
  1668.         }

  1669.         if($out == '') {
  1670.                 require_once libfile('class/chinese');
  1671.                 $chinese = new Chinese($in_charset, $out_charset, true);
  1672.                 $out = $chinese->Convert($str);
  1673.         }

  1674.         return $out;
  1675. }

  1676. function renum($array) {
  1677.         $newnums = $nums = array();
  1678.         foreach ($array as $id => $num) {
  1679.                 $newnums[$num][] = $id;
  1680.                 $nums[$num] = $num;
  1681.         }
  1682.         return array($nums, $newnums);
  1683. }

  1684. function getonlinenum($fid = 0, $tid = 0) {
  1685.         if($fid) {
  1686.                 $sql = " AND fid='$fid'";
  1687.         }
  1688.         if($tid) {
  1689.                 $sql = " AND tid='$tid'";
  1690.         }
  1691.         return DB::result_first('SELECT count(*) FROM '.DB::table("common_session")." WHERE 1 $sql");
  1692. }

  1693. function sizecount($size) {
  1694.         if($size >= 1073741824) {
  1695.                 $size = round($size / 1073741824 * 100) / 100 . ' GB';
  1696.         } elseif($size >= 1048576) {
  1697.                 $size = round($size / 1048576 * 100) / 100 . ' MB';
  1698.         } elseif($size >= 1024) {
  1699.                 $size = round($size / 1024 * 100) / 100 . ' KB';
  1700.         } else {
  1701.                 $size = $size . ' Bytes';
  1702.         }
  1703.         return $size;
  1704. }

  1705. function swapclass($class1, $class2 = '') {
  1706.         static $swapc = null;
  1707.         $swapc = isset($swapc) && $swapc != $class1 ? $class1 : $class2;
  1708.         return $swapc;
  1709. }

  1710. function writelog($file, $log) {
  1711.         global $_G;
  1712.         $yearmonth = dgmdate(TIMESTAMP, 'Ym', $_G['setting']['timeoffset']);
  1713.         $logdir = DISCUZ_ROOT.'./data/log/';
  1714.         $logfile = $logdir.$yearmonth.'_'.$file.'.php';
  1715.         if(@filesize($logfile) > 2048000) {
  1716.                 $dir = opendir($logdir);
  1717.                 $length = strlen($file);
  1718.                 $maxid = $id = 0;
  1719.                 while($entry = readdir($dir)) {
  1720.                         if(strpos($entry, $yearmonth.'_'.$file) !== false) {
  1721.                                 $id = intval(substr($entry, $length + 8, -4));
  1722.                                 $id > $maxid && $maxid = $id;
  1723.                         }
  1724.                 }
  1725.                 closedir($dir);

  1726.                 $logfilebak = $logdir.$yearmonth.'_'.$file.'_'.($maxid + 1).'.php';
  1727.                 @rename($logfile, $logfilebak);
  1728.         }
  1729.         if($fp = @fopen($logfile, 'a')) {
  1730.                 @flock($fp, 2);
  1731.                 $log = is_array($log) ? $log : array($log);
  1732.                 foreach($log as $tmp) {
  1733.                         fwrite($fp, "<?PHP exit;?>\t".str_replace(array('<?', '?>'), '', $tmp)."\n");
  1734.                 }
  1735.                 fclose($fp);
  1736.         }
  1737. }
  1738. function getcolorpalette($colorid, $id, $background, $fun = '') {
  1739.         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>";
  1740. }

  1741. function getstatus($status, $position) {
  1742.         $t = $status & pow(2, $position - 1) ? 1 : 0;
  1743.         return $t;
  1744. }

  1745. function setstatus($position, $value, $baseon = null) {
  1746.         $t = pow(2, $position - 1);
  1747.         if($value) {
  1748.                 $t = $baseon | $t;
  1749.         } elseif ($baseon !== null) {
  1750.                 $t = $baseon & ~$t;
  1751.         } else {
  1752.                 $t = ~$t;
  1753.         }
  1754.         return $t & 0xFFFF;
  1755. }

  1756. function notification_add($touid, $type, $note, $notevars = array(), $system = 0) {
  1757.         global $_G;

  1758.         $tospace = array('uid'=>$touid);
  1759.         space_merge($tospace, 'field_home');
  1760.         $filter = empty($tospace['privacy']['filter_note'])?array():array_keys($tospace['privacy']['filter_note']);

  1761.         if($filter && (in_array($type.'|0', $filter) || in_array($type.'|'.$_G['uid'], $filter))) {
  1762.                 return false;
  1763.         }

  1764.         $notevars['actor'] = "<a href="home.php?mod=space&uid=$_G[uid]">".$_G['member']['username']."</a>";
  1765.         if(!is_numeric($type)) {
  1766.                 $vars = explode(':', $note);
  1767.                 if(count($vars) == 2) {
  1768.                         $notestring = lang('plugin/'.$vars[0], $vars[1], $notevars);
  1769.                 } else {
  1770.                         $notestring = lang('notification', $note, $notevars);
  1771.                 }
  1772.                 $frommyapp = false;
  1773.         } else {
  1774.                 $frommyapp = true;
  1775.                 $notestring = $note;
  1776.         }

  1777.         $oldnote = array();
  1778.         if($notevars['from_id'] && $notevars['from_idtype']) {
  1779.                 $oldnote = DB::fetch_first("SELECT * FROM ".DB::table('home_notification')."
  1780.                         WHERE from_id='$notevars[from_id]' AND from_idtype='$notevars[from_idtype]' AND uid='$touid'");
  1781.         }
  1782.         if(empty($oldnote['from_num'])) $oldnote['from_num'] = 0;
  1783.         $notevars['from_num'] = $notevars['from_num'] ? $notevars['from_num'] : 1;
  1784.         $setarr = array(
  1785.                 'uid' => $touid,
  1786.                 'type' => $type,
  1787.                 'new' => 1,
  1788.                 'authorid' => $_G['uid'],
  1789.                 'author' => $_G['username'],
  1790.                 'note' => addslashes($notestring),
  1791.                 'dateline' => $_G['timestamp'],
  1792.                 'from_id' => $notevars['from_id'],
  1793.                 'from_idtype' => $notevars['from_idtype'],
  1794.                 'from_num' => ($oldnote['from_num']+$notevars['from_num'])
  1795.         );
  1796.         if($system) {
  1797.                 $setarr['authorid'] = 0;
  1798.                 $setarr['author'] = '';
  1799.         }

  1800.         if($oldnote['id']) {
  1801.                 DB::update('home_notification', $setarr, array('id'=>$oldnote['id']));
  1802.         } else {
  1803.                 $oldnote['new'] = 0;
  1804.                 DB::insert('home_notification', $setarr);
  1805.         }

  1806.         if(empty($oldnote['new'])) {
  1807.                 DB::query("UPDATE ".DB::table('common_member')." SET newprompt=newprompt+1 WHERE uid='$touid'");

  1808.                 require_once libfile('function/mail');
  1809.                 $mail_subject = lang('notification', 'mail_to_user');
  1810.                 sendmail_touser($touid, $mail_subject, $notestring, $frommyapp ? 'myapp' : $type);
  1811.         }

  1812.         if(!$system && $_G['uid'] && $touid != $_G['uid']) {
  1813.                 DB::query("UPDATE ".DB::table('home_friend')." SET num=num+1 WHERE uid='$_G[uid]' AND fuid='$touid'");
  1814.         }
  1815. }

  1816. function manage_addnotify($type, $from_num = 0, $langvar = array()) {
  1817.         global $_G;
  1818.         $notifyusers = unserialize($_G['setting']['notifyusers']);
  1819.         $notifytypes = explode(',', $_G['setting']['adminnotifytypes']);
  1820.         $notifytypes = array_flip($notifytypes);
  1821.         $notearr = array('from_id' => 1,'from_idtype' => $type, 'from_num' => $from_num);
  1822.         if($langvar) {
  1823.                 $langkey = $langvar['langkey'];
  1824.                 $notearr = array_merge($notearr, $langvar);
  1825.         } else {
  1826.                 $langkey = 'manage_'.$type;
  1827.         }
  1828.         foreach($notifyusers as $uid => $user) {
  1829.                 if($user['types'][$notifytypes[$type]]) {
  1830.                         notification_add($uid, $type, $langkey, $notearr, 1);
  1831.                 }
  1832.         }
  1833. }

  1834. function sendpm($toid, $subject, $message, $fromid = '', $replypmid = 0, $isusername = 0, $type = 0) {
  1835.         global $_G;
  1836.         if($fromid === '') {
  1837.                 $fromid = $_G['uid'];
  1838.         }
  1839.         loaducenter();
  1840.         return uc_pm_send($fromid, $toid, $subject, $message, 1, $replypmid, $isusername, $type);
  1841. }

  1842. function g_icon($groupid, $return = 0) {
  1843.         global $_G;
  1844.         if(empty($_G['cache']['usergroups'][$groupid]['icon'])) {
  1845.                 $s =  '';
  1846.         } else {
  1847.                 if(substr($_G['cache']['usergroups'][$groupid]['icon'], 0, 5) == 'http:') {
  1848.                         $s = '<img src="'.$_G['cache']['usergroups'][$groupid]['icon'].'" alt="" class="vm" />';
  1849.                 } else {
  1850.                         $s = '<img src="'.$_G['setting']['attachurl'].'common/'.$_G['cache']['usergroups'][$groupid]['icon'].'" alt="" class="vm" />';
  1851.                 }
  1852.         }
  1853.         if($return) {
  1854.                 return $s;
  1855.         } else {
  1856.                 echo $s;
  1857.         }
  1858. }
  1859. function updatediytemplate($targettplname = '') {
  1860.         global $_G;
  1861.         $r = false;
  1862.         $where = empty($targettplname) ? '' : " WHERE targettplname='$targettplname'";
  1863.         $query = DB::query("SELECT * FROM ".DB::table('common_diy_data')."$where");
  1864.         require_once libfile('function/portalcp');
  1865.         while($value = DB::fetch($query)) {
  1866.                 $r = save_diy_data($value['primaltplname'], $value['targettplname'], unserialize($value['diycontent']));
  1867.         }
  1868.         return $r;
  1869. }

  1870. function space_key($uid, $appid=0) {
  1871.         global $_G;

  1872.         $siteuniqueid = DB::result_first("SELECT svalue FROM ".DB::table('common_setting')." WHERE skey='siteuniqueid'");
  1873.         return substr(md5($siteuniqueid.'|'.$uid.(empty($appid)?'':'|'.$appid)), 8, 16);
  1874. }


  1875. function getposttablebytid($tids, $primary = 0) {
  1876.         global $_G;

  1877.         $isstring = false;
  1878.         if(!is_array($tids)) {
  1879.                 $tids = array(intval($tids));
  1880.                 $isstring = true;
  1881.         }
  1882.         $tids = array_unique($tids);
  1883.         $tids = array_flip($tids);
  1884.         if(!$primary) {
  1885.                 loadcache('threadtableids');
  1886.                 $threadtableids = !empty($_G['cache']['threadtableids']) ? $_G['cache']['threadtableids'] : array();
  1887.                 if(!in_array(0, $threadtableids)) {
  1888.                         $threadtableids = array_merge(array(0), $threadtableids);
  1889.                 }
  1890.         } else {
  1891.                 $threadtableids = array(0);
  1892.         }
  1893.         $tables = array();
  1894.         $posttable = '';
  1895.         $singletable = count($tids) > 1 ? false : true;
  1896.         foreach($threadtableids as $tableid) {
  1897.                 $threadtable = $tableid ? "forum_thread_$tableid" : 'forum_thread';
  1898.                 $query = DB::query("SELECT tid, posttableid FROM ".DB::table($threadtable)." WHERE tid IN(".dimplode(array_keys($tids)).")");
  1899.                 while ($value = DB::fetch($query)) {
  1900.                         $posttable = 'forum_post'.($value['posttableid'] ? "_$value[posttableid]" : '');
  1901.                         $tables[$posttable][$value['tid']] = $value['tid'];
  1902.                         unset($tids[$value['tid']]);
  1903.                 }
  1904.                 if(!count($tids)) {
  1905.                         break;
  1906.                 }
  1907.         }
  1908.         if(empty($posttable)) {
  1909.                 $posttable = 'forum_post';
  1910.                 $tables[$posttable] = array_flip($tids);
  1911.         }
  1912.         return $isstring ? $posttable : $tables;
  1913. }

  1914. function getposttable($tableid = 0, $prefix = false) {
  1915.         global $_G;
  1916.         $tableid = intval($tableid);
  1917.         if($tableid) {
  1918.                 loadcache('posttableids');
  1919.                 $tableid = $_G['cache']['posttableids'] && in_array($tableid, $_G['cache']['posttableids']) ? $tableid : 0;
  1920.                 $tablename = 'forum_post'.($tableid ? "_$tableid" : '');
  1921.         } else {
  1922.                 $tablename = 'forum_post';
  1923.         }
  1924.         if($prefix) {
  1925.                 $tablename = DB::table($tablename);
  1926.         }
  1927.         return $tablename;
  1928. }

  1929. function memory($cmd, $key='', $value='', $ttl = 0) {
  1930.         $discuz = & discuz_core::instance();
  1931.         if($cmd == 'check') {
  1932.                 return  $discuz->mem->enable ? $discuz->mem->type : '';
  1933.         } elseif($discuz->mem->enable && in_array($cmd, array('set', 'get', 'rm'))) {
  1934.                 switch ($cmd) {
  1935.                         case 'set': return $discuz->mem->set($key, $value, $ttl); break;
  1936.                         case 'get': return $discuz->mem->get($key); break;
  1937.                         case 'rm': return $discuz->mem->rm($key); break;
  1938.                 }
  1939.         }
  1940.         return null;
  1941. }

  1942. function ipaccess($ip, $accesslist) {
  1943.         return preg_match("/^(".str_replace(array("\r\n", ' '), array('|', ''), preg_quote($accesslist, '/')).")/", $ip);
  1944. }

  1945. function ipbanned($onlineip) {
  1946.         global $_G;

  1947.         if($_G['setting']['ipaccess'] && !ipaccess($onlineip, $_G['setting']['ipaccess'])) {
  1948.                 return TRUE;
  1949.         }

  1950.         loadcache('ipbanned');
  1951.         if(empty($_G['cache']['ipbanned'])) {
  1952.                 return FALSE;
  1953.         } else {
  1954.                 if($_G['cache']['ipbanned']['expiration'] < TIMESTAMP) {
  1955.                         require_once libfile('function/cache');
  1956.                         updatecache('ipbanned');
  1957.                 }
  1958.                 return preg_match("/^(".$_G['cache']['ipbanned']['regexp'].")$/", $onlineip);
  1959.         }
  1960. }

  1961. function getcount($tablename, $condition) {
  1962.         if(empty($condition)) {
  1963.                 $where = '1';
  1964.         } elseif(is_array($condition)) {
  1965.                 $where = DB::implode_field_value($condition, ' AND ');
  1966.         } else {
  1967.                 $where = $condition;
  1968.         }
  1969.         $ret = intval(DB::result_first("SELECT COUNT(*) AS num FROM ".DB::table($tablename)." WHERE $where"));
  1970.         return $ret;
  1971. }

  1972. function sysmessage($message) {
  1973.         require libfile('function/sysmessage');
  1974.         show_system_message($message);
  1975. }

  1976. function forumperm($permstr, $groupid = 0) {
  1977.         global $_G;

  1978.         $groupidarray = array($_G['groupid']);
  1979.         if($groupid) {
  1980.                 return preg_match("/(^|\t)(".$groupid.")(\t|$)/", $permstr);
  1981.         }
  1982.         foreach(explode("\t", $_G['member']['extgroupids']) as $extgroupid) {
  1983.                 if($extgroupid = intval(trim($extgroupid))) {
  1984.                         $groupidarray[] = $extgroupid;
  1985.                 }
  1986.         }
  1987.         if($_G['setting']['verify']['enabled']) {
  1988.                 getuserprofile('verify1');
  1989.                 foreach($_G['setting']['verify'] as $vid => $verify) {
  1990.                         if($verify['available'] && $_G['member']['verify'.$vid] == 1) {
  1991.                                 $groupidarray[] = 'v'.$vid;
  1992.                         }
  1993.                 }
  1994.         }
  1995.         return preg_match("/(^|\t)(".implode('|', $groupidarray).")(\t|$)/", $permstr);
  1996. }

  1997. if(!function_exists('file_put_contents')) {
  1998.         if(!defined('FILE_APPEND')) define('FILE_APPEND', 8);
  1999.         function file_put_contents($filename, $data, $flag = 0) {
  2000.                 $return = false;
  2001.                 if($fp = @fopen($filename, $flag != FILE_APPEND ? 'w' : 'a')) {
  2002.                         if($flag == LOCK_EX) @flock($fp, LOCK_EX);
  2003.                         $return = fwrite($fp, is_array($data) ? implode('', $data) : $data);
  2004.                         fclose($fp);
  2005.                 }
  2006.                 return $return;
  2007.         }
  2008. }

  2009. function checkperm($perm) {
  2010.         global $_G;
  2011.         return (empty($_G['group'][$perm])?'':$_G['group'][$perm]);
  2012. }

  2013. function periodscheck($periods, $showmessage = 1) {
  2014.         global $_G;

  2015.         if(!$_G['group']['disableperiodctrl'] && $_G['setting'][$periods]) {
  2016.                 $now = dgmdate(TIMESTAMP, 'G.i');
  2017.                 foreach(explode("\r\n", str_replace(':', '.', $_G['setting'][$periods])) as $period) {
  2018.                         list($periodbegin, $periodend) = explode('-', $period);
  2019.                         if(($periodbegin > $periodend && ($now >= $periodbegin || $now < $periodend)) || ($periodbegin < $periodend && $now >= $periodbegin && $now < $periodend)) {
  2020.                                 $banperiods = str_replace("\r\n", ', ', $_G['setting'][$periods]);
  2021.                                 if($showmessage) {
  2022.                                         showmessage('period_nopermission', NULL, array('banperiods' => $banperiods), array('login' => 1));
  2023.                                 } else {
  2024.                                         return TRUE;
  2025.                                 }
  2026.                         }
  2027.                 }
  2028.         }
  2029.         return FALSE;
  2030. }

  2031. function cknewuser($return=0) {
  2032.         global $_G;

  2033.         $result = true;

  2034.         if(!$_G['uid']) return true;

  2035.         if(checkperm('disablepostctrl')) {
  2036.                 return $result;
  2037.         }
  2038.         $ckuser = $_G['member'];

  2039.         if($_G['setting']['newbiespan'] && $_G['timestamp']-$ckuser['regdate']<$_G['setting']['newbiespan']*60) {
  2040.                 if(empty($return)) showmessage('no_privilege_newbiespan', '', array('newbiespan' => $_G['setting']['newbiespan']), array('return' => true));
  2041.                 $result = false;
  2042.         }
  2043.         if($_G['setting']['need_avatar'] && empty($ckuser['avatarstatus'])) {
  2044.                 if(empty($return)) showmessage('no_privilege_avatar', '', array(), array('return' => true));
  2045.                 $result = false;
  2046.         }
  2047.         if($_G['setting']['need_email'] && empty($ckuser['emailstatus'])) {
  2048.                 if(empty($return)) showmessage('no_privilege_email', '', array(), array('return' => true));
  2049.                 $result = false;
  2050.         }
  2051.         if($_G['setting']['need_friendnum']) {
  2052.                 space_merge($ckuser, 'count');
  2053.                 if($ckuser['friends'] < $_G['setting']['need_friendnum']) {
  2054.                         if(empty($return)) showmessage('no_privilege_friendnum', '', array('friendnum' => $_G['setting']['need_friendnum']), array('return' => true));
  2055.                         $result = false;
  2056.                 }
  2057.         }
  2058.         return $result;
  2059. }

  2060. function manyoulog($logtype, $uids, $action, $fid = '') {
  2061.         global $_G;

  2062.         if($_G['setting']['my_app_status'] && $logtype == 'user') {
  2063.                 $action = daddslashes($action);
  2064.                 $values = array();
  2065.                 $uids = is_array($uids) ? $uids : array($uids);
  2066.                 foreach($uids as $uid) {
  2067.                         $uid = intval($uid);
  2068.                         $values[$uid] = "('$uid', '$action', '".TIMESTAMP."')";
  2069.                 }
  2070.                 if($values) {
  2071.                         DB::query("REPLACE INTO ".DB::table('common_member_log')." (`uid`, `action`, `dateline`) VALUES ".implode(',', $values));
  2072.                 }
  2073.         }
  2074. }

  2075. function useractionlog($uid, $action) {
  2076.         $uid = intval($uid);
  2077.         if(empty($uid) || empty($action)) {
  2078.                 return false;
  2079.         }
  2080.         $action = getuseraction($action);
  2081.         $timestamp = TIMESTAMP;
  2082.         DB::query("INSERT INTO ".DB::table('common_member_action_log')." (`uid`, `action`, `dateline`) VALUES ('$uid', '$action', '$timestamp')");
  2083.         return true;
  2084. }

  2085. function getuseraction($var) {
  2086.         $value = false;
  2087.         $ops = array('tid', 'pid', 'blogid', 'picid', 'doid', 'sid', 'aid', 'uid_cid', 'blogid_cid', 'sid_cid', 'picid_cid', 'aid_cid', 'topicid_cid');
  2088.         if(is_numeric($var)) {
  2089.                 $value = isset($ops[$var]) ? $ops[$var] : false;
  2090.         } else {
  2091.                 $value = array_search($var, $ops);
  2092.         }
  2093.         return $value;
  2094. }

  2095. function getuserapp($panel = 0) {
  2096.         require_once libfile('function/manyou');
  2097.         manyou_getuserapp($panel);
  2098.         return true;
  2099. }

  2100. function getmyappiconpath($appid, $iconstatus=0) {
  2101.         if($iconstatus > 0) {
  2102.                 return getglobal('setting/attachurl').'./'.'myapp/icon/'.$appid.'.jpg';
  2103.         }
  2104.         return 'http://appicon.manyou.com/icons/'.$appid;
  2105. }

  2106. function getexpiration() {
  2107.         global $_G;
  2108.         $date = getdate($_G['timestamp']);
  2109.         return mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']) + 86400;
  2110. }

  2111. function return_bytes($val) {
  2112.     $val = trim($val);
  2113.     $last = strtolower($val{strlen($val)-1});
  2114.     switch($last) {
  2115.         case 'g': $val *= 1024;
  2116.         case 'm': $val *= 1024;
  2117.         case 'k': $val *= 1024;
  2118.     }
  2119.     return $val;
  2120. }

  2121. function get_url_list($message) {
  2122.         $return = array();

  2123.         (strpos($message, '[/img]') || strpos($message, '[/flash]')) && $message = preg_replace("/\[img[^\]]*\].+?\[\/img\]|\[flash[^\]]*\].+?\[\/flash\]/is", '', $message);
  2124.         if(preg_match_all("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto):\/\/|www\.)([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+\s*)/i", $message, $urllist)) {
  2125.                 foreach($urllist[0] as $key => $val) {
  2126.                         $val = trim($val);
  2127.                         $return[0][$key] = $val;
  2128.                         if(!preg_match('/^http:\/\//is', $val)) $val = 'http://'.$val;
  2129.                         $tmp = parse_url($val);
  2130.                         $return[1][$key] = $tmp['host'];
  2131.                         if($tmp['port']){
  2132.                                 $return[1][$key] .= ":$tmp[port]";
  2133.                         }
  2134.                 }
  2135.         }

  2136.         return $return;
  2137. }

  2138. function iswhitelist($host) {
  2139.         global $_G;
  2140.         static $iswhitelist = array();

  2141.         if(isset($iswhitelist[$host])) {
  2142.                 return $iswhitelist[$host];
  2143.         }
  2144.         $hostlen = strlen($host);
  2145.         $iswhitelist[$host] = false;
  2146.         if(is_array($_G['cache']['domainwhitelist'])) foreach($_G['cache']['domainwhitelist'] as $val) {
  2147.                 $domainlen = strlen($val);
  2148.                 if($domainlen > $hostlen) {
  2149.                         continue;
  2150.                 }
  2151.                 if(substr($host, -$domainlen) == $val) {
  2152.                         $iswhitelist[$host] = true;
  2153.                         break;
  2154.                 }
  2155.         }
  2156.         if($iswhitelist[$host] == false) {
  2157.                 $iswhitelist[$host] = $host == $_SERVER['HTTP_HOST'];
  2158.         }
  2159.         return $iswhitelist[$host];
  2160. }

  2161. function update_template_block($targettplname, $blocks) {
  2162.         if(!empty($blocks) && !empty($targettplname)) {
  2163.                 $oldbids = array();
  2164.                 $query = DB::query('SELECT bid FROM '.DB::table('common_template_block')." WHERE targettplname='$targettplname'");
  2165.                 while($value = DB::fetch($query)) {
  2166.                         $oldbids[] = $value['bid'];
  2167.                 }
  2168.                 $newaddbids = array_diff($blocks, $oldbids);
  2169.                 DB::delete('common_template_block', array('targettplname'=>$targettplname));
  2170.                 $values = array();
  2171.                 foreach ($blocks as $bid) {
  2172.                         $values[] = "('$targettplname','$bid')";
  2173.                 }
  2174.                 if (!empty($values)) {
  2175.                         DB::query("INSERT INTO ".DB::table('common_template_block')." (targettplname,bid) VALUES ".implode(',', $values));
  2176.                 }
  2177.                 if(!empty($newaddbids)) {
  2178.                         require_once libfile('class/blockpermission');
  2179.                         $tplpermission = & template_permission::instance();
  2180.                         $tplpermission->add_blocks($targettplname, $newaddbids);
  2181.                 }
  2182.         }
  2183. }

  2184. if(!function_exists('http_build_query')) {
  2185.         function http_build_query($data, $numeric_prefix='', $arg_separator='', $prefix='') {
  2186.                 $render = array();
  2187.                 if (empty($arg_separator)) {
  2188.                         $arg_separator = ini_get('arg_separator.output');
  2189.                         empty($arg_separator) && $arg_separator = '&';
  2190.                 }
  2191.                 foreach ((array) $data as $key => $val) {
  2192.                         if (is_array($val) || is_object($val)) {
  2193.                                 $_key = empty($prefix) ? "{$key}[%s]" : sprintf($prefix, $key) . "[%s]";
  2194.                                 $_render = http_build_query($val, '', $arg_separator, $_key);
  2195.                                 if (!empty($_render)) {
  2196.                                         $render[] = $_render;
  2197.                                 }
  2198.                         } else {
  2199.                                 if (is_numeric($key) && empty($prefix)) {
  2200.                                         $render[] = urlencode("{$numeric_prefix}{$key}") . "=" . urlencode($val);
  2201.                                 } else {
  2202.                                         if (!empty($prefix)) {
  2203.                                                 $_key = sprintf($prefix, $key);
  2204.                                                 $render[] = urlencode($_key) . "=" . urlencode($val);
  2205.                                         } else {
  2206.                                                 $render[] = urlencode($key) . "=" . urlencode($val);
  2207.                                         }
  2208.                                 }
  2209.                         }
  2210.                 }
  2211.                 $render = implode($arg_separator, $render);
  2212.                 if (empty($render)) {
  2213.                         $render = '';
  2214.                 }
  2215.                 return $render;
  2216.         }
  2217. }

  2218. function getrelatedlink($extent) {
  2219.         global $_G;
  2220.         loadcache('relatedlink');
  2221.         $allextent = array('article' => 0, 'forum' => 1, 'group' => 2, 'blog' => 3);
  2222.         $links = array();
  2223.         if($_G['cache']['relatedlink'] && isset($allextent[$extent])) {
  2224.                 foreach($_G['cache']['relatedlink'] as $link) {
  2225.                         $link['extent'] = sprintf('%04b', $link['extent']);
  2226.                         if($link['extent'][$allextent[$extent]] && $link['name'] && $link['url']) {
  2227.                                 $links[] = daddslashes($link);
  2228.                         }
  2229.                 }
  2230.         }
  2231.         return $links;
  2232. }

  2233. function getattachtablebyaid($aid) {
  2234.         $tableid = DB::result_first("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE aid='$aid'");
  2235.         return 'forum_attachment_'.($tableid >= 0 && $tableid < 10 ? intval($tableid) : 'unused');
  2236. }

  2237. function getattachtableid($tid) {
  2238.         $tid = (string)$tid;
  2239.         return intval($tid{strlen($tid)-1});
  2240. }

  2241. function getattachtablebytid($tid) {
  2242.         return 'forum_attachment_'.getattachtableid($tid);
  2243. }

  2244. function getattachtablebypid($pid) {
  2245.         $tableid = DB::result_first("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE pid='$pid' LIMIT 1");
  2246.         return 'forum_attachment_'.($tableid >= 0 && $tableid < 10 ? intval($tableid) : 'unused');
  2247. }

  2248. function getattachnewaid($uid = 0) {
  2249.         global $_G;
  2250.         $uid = !$uid ? $_G['uid'] : $uid;
  2251.         return DB::insert('forum_attachment', array('tid' => 0, 'pid' => 0, 'uid' => $uid, 'tableid' => 127), true);
  2252. }

  2253. function get_seosetting($page, $data = array(), $defset = array()) {
  2254.         global $_G;
  2255.         $searchs = array('{bbname}');
  2256.         $replaces = array($_G['setting']['bbname']);

  2257.         $seotitle = $seodescription = $seokeywords = '';
  2258.         $titletext = $defset['seotitle'] ? $defset['seotitle'] : $_G['setting']['seotitle'][$page];
  2259.         $descriptiontext = $defset['seodescription'] ? $defset['seodescription'] : $_G['setting']['seodescription'][$page];
  2260.         $keywordstext = $defset['seokeywords'] ? $defset['seokeywords'] : $_G['setting']['seokeywords'][$page];
  2261.         preg_match_all("/\{([a-z0-9_-]+?)\}/", $titletext.$descriptiontext.$keywordstext, $pageparams);
  2262.         if($pageparams) {
  2263.                 foreach($pageparams[1] as $var) {
  2264.                         $searchs[] = '{'.$var.'}';
  2265.                         if($var == 'page') {
  2266.                                 $data['page'] = $data['page'] > 1 ? lang('core', 'page', array('page' => $data['page'])) : '';
  2267.                         }
  2268.                         $replaces[] = $data[$var] ? strip_tags($data[$var]) : '';
  2269.                 }
  2270.                 if($titletext) {
  2271.                         $seotitle = strreplace_strip_split($searchs, $replaces, $titletext);
  2272.                 }
  2273.                 if($descriptiontext && (CURSCRIPT == 'forum' || IS_ROBOT || $_G['adminid'] == 1)) {
  2274.                         $seodescription = strreplace_strip_split($searchs, $replaces, $descriptiontext);
  2275.                 }
  2276.                 if($keywordstext && (CURSCRIPT == 'forum' || IS_ROBOT || $_G['adminid'] == 1)) {
  2277.                         $seokeywords = strreplace_strip_split($searchs, $replaces, $keywordstext);
  2278.                 }
  2279.         }
  2280.         return array($seotitle, $seodescription, $seokeywords);
  2281. }


  2282. function strreplace_strip_split($searchs, $replaces, $str) {
  2283.         $searchspace = array('((\s*\-\s*)+)', '((\s*\,\s*)+)', '((\s*\|\s*)+)', '((\s*\t\s*)+)', '((\s*_\s*)+)');
  2284.         $replacespace = array('-', ',', '|', ' ', '_');
  2285.         return trim(preg_replace($searchspace, $replacespace, str_replace($searchs, $replaces, $str)), ' ,-|_');
  2286. }

  2287. function get_title_page($navtitle, $page){
  2288.         if($page > 1) {
  2289.                 $navtitle .= ' - '.lang('core', 'page', array('page' => $page));
  2290.         }
  2291.         return $navtitle;
  2292. }
  2293. function getimgthumbname($fileStr, $extend='.thumb.jpg', $holdOldExt=true) {
  2294.         if(empty($fileStr)) {
  2295.                 return '';
  2296.         }
  2297.         if(!$holdOldExt) {
  2298.                 $fileStr = substr($fileStr, 0, strrpos($fileStr, '.'));
  2299.         }
  2300.         $extend = strstr($extend, '.') ? $extend : '.'.$extend;
  2301.         return $fileStr.$extend;
  2302. }

  2303. function updatemoderate($idtype, $ids, $status = 0) {
  2304.         global $_G;
  2305.         $ids = is_array($ids) ? $ids : array($ids);
  2306.         if(!$ids) {
  2307.                 return;
  2308.         }
  2309.         if(!$status) {
  2310.                 foreach($ids as $id) {
  2311.                         DB::insert('common_moderate', array('id' => $id, 'idtype' => $idtype, 'status' => 0, 'dateline' => $_G['timestamp']), false, true);
  2312.                 }
  2313.         } elseif($status == 1) {
  2314.                 DB::update('common_moderate', array('status' => 1), "id IN (".dimplode($ids).") AND idtype='$idtype'");
  2315.         } elseif($status == 2) {
  2316.                 DB::delete('common_moderate', "id IN (".dimplode($ids).") AND idtype='$idtype'");
  2317.         }
  2318. }

  2319. function userappprompt() {
  2320.         global $_G;

  2321.         if($_G['setting']['my_app_status'] && $_G['setting']['my_openappprompt'] && empty($_G['cookie']['userappprompt'])) {
  2322.                 $sid = $_G['setting']['my_siteid'];
  2323.                 $ts = $_G['timestamp'];
  2324.                 $key = md5($sid.$ts.$_G['setting']['my_sitekey']);
  2325.                 $uchId = $_G['uid'] ? $_G['uid'] : 0;
  2326.                 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>';
  2327.         }
  2328. }

  2329. ?>
คัดลอกไปที่คลิปบอร์ด
pratep โพสต์ 2011-12-24 09:54:00
เหมือนจะเคยเป็น ไปแก้โค๊ด ไรสักอย่าง  ลองเอาไฟล์เก่าอัพทับ อัพเดตแคชดู เพื่อหาย *-*
beerqazasa โพสต์ 2011-12-24 09:56:12
ตั้ง 777 มั้งนะ
 เจ้าของ| nuzazaja โพสต์ 2011-12-24 22:32:53
ไม่หายครับ อัพเดตแคชหลายรอบแล้ว
 เจ้าของ| nuzazaja โพสต์ 2011-12-24 22:40:48
error ช่วงนี้แหละครับช่วยดูหน่อย

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? สมัครสมาชิก

x
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | สมัครสมาชิก

รายละเอียดเครดิต

รายชื่อผู้กระทำผิด|Archiver|ดิสคัส ไทย Follow us: Become a fan on facebook. Follow us on Twitter.

GMT+7, 2024-12-23 17:49

Powered by Discuz! X3.4, Rev.66

Copyright © 2001-2021 Tencent Cloud. Licensed

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้