📄 request.func.php
字号:
<?php
/*
[Discuz!] (C)2001-2009 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: request.func.php 16936 2008-11-28 03:17:54Z monkey $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
function parse_request($requestdata, $cachefile, $mode, $specialfid = 0, $key = '') {
global $_DCACHE;
$requesttemplate = '';
$nocachedata = array();
$requestcachelife = (isset($requestdata['cachelife']) && $requestdata['cachelife'] !== '') ? $requestdata['cachelife'] : (isset($_DCACHE['settings']['jscachelife']) ? $_DCACHE['settings']['jscachelife'] : 1800);
!empty($requestdata['jstemplate']) && $requesttemplate = stripslashes($requestdata['jstemplate']);
get_magic_quotes_gpc() && $requesttemplate = stripslashes($requesttemplate);
$nocache = !empty($requestdata['nocache']) ? 1 : 0;
$mode && $requestcharset = $requestdata['jscharset'];
if(!in_array($requestdata['function'], array('custom', 'side'))) {
$requesttemplatebody = '';
if(preg_match("/\[node\](.+?)\[\/node\]/is", $requesttemplate, $node)) {
$requesttemplatebody = $requesttemplate;
$requesttemplate = $node[1];
}
$parsedata = updaterequest($requestdata, $requesttemplatebody, $requesttemplate, $specialfid, $mode, $key, $nocache);
if($mode) {
$datalist = $writedata = jsprocdata($parsedata, $requestcharset);
} else {
$datalist = $writedata = $parsedata;
}
} else {
$requestcachelife = (isset($requestdata['cachelife']) && $requestdata['cachelife'] != '') ? $requestdata['cachelife'] : (isset($_DCACHE['settings']['jscachelife']) ? $_DCACHE['settings']['jscachelife'] : 1800);
$writedata = preg_match_all("/\[module\](.+?)\[\/module\]/s", $requesttemplate, $modulelist);
$modulelist = array_unique($modulelist[1]);
$datalist = $writedata = $requesttemplate = str_replace('\"', '"', $requesttemplate);
foreach($modulelist as $key) {
$find = '[module]'.$key.'[/module]';
if(!empty($_DCACHE['request'][$key]['url'])) {
parse_str($_DCACHE['request'][$key]['url'], $requestdata);
$function = isset($requestdata['function']) ? $requestdata['function'] : NULL;
$requesttemplate = $requestdata['jstemplate'];
!empty($requesttemplate) && $requesttemplate = stripslashes($requesttemplate);
get_magic_quotes_gpc() && $requesttemplate = stripslashes($requesttemplate);
$requesttemplatebody = '';
if(preg_match("/\[node\](.+?)\[\/node\]/is", $requesttemplate, $node)) {
$requesttemplatebody = $requesttemplate;
$requesttemplate = $node[1];
}
$modulenocache = 0;
$parsedata = updaterequest($requestdata, $requesttemplatebody, $requesttemplate, $specialfid, $mode, $key, $modulenocache);
$datalist = str_replace($find, $parsedata, $datalist);
if($modulenocache || $requestdata['cachelife'] === '0') {
$nocachedata[$key] = '[module]'.$key.'[/module]';
$writedata = str_replace($find, $nocachedata[$key], $writedata);
} else {
$writedata = str_replace($find, $parsedata, $writedata);
}
}
}
if($mode) {
$datalist = jsprocdata($datalist, $requestcharset);
$writedata = jsprocdata($writedata, $requestcharset);
}
}
$writedata = addcslashes($writedata, "'\\");
if(!$nocache) {
$writedata = "\$datalist = '".$writedata."';";
if($nocachedata) {
$writedata .= "\n\$nocachedata = ".var_export($nocachedata, 1).';';
}
writetorequestcache($cachefile, $requestcachelife, $writedata);
}
if($mode) {
return $datalist;
} else {
return eval("return '".addcslashes($datalist, "'\\")."';");
}
}
function updaterequest($requestdata, $requesttemplatebody, $requesttemplate, $specialfid, $mode, $key, &$nocache) {
global $db, $tablepre, $timestamp, $boardurl, $dateformat, $timeformat, $rewritestatus, $uc, $_DCACHE;
$function = $requestdata['function'];
$fids = isset($requestdata['fids']) ? $requestdata['fids'] : NULL;
$startrow = isset($requestdata['startrow']) ? intval($requestdata['startrow']) : 0;
$items = isset($requestdata['items']) ? intval($requestdata['items']) : 10;
$digest = isset($requestdata['digest']) ? intval($requestdata['digest']) : 0;
$stick = isset($requestdata['stick']) ? intval($requestdata['stick']) : 0;
$newwindow = isset($requestdata['newwindow']) ? $requestdata['newwindow'] : 1;
$LinkTarget = $newwindow == 1 ? " target='_blank'" : ($newwindow == 2 ? " target='main'" : NULL);
$sidestatus = !empty($requestdata['sidestatus']) ? 1 : 0;
$boardurl = $mode ? $boardurl : '';
if($function == 'threads') {
$orderby = isset($requestdata['orderby']) ? (in_array($requestdata['orderby'],array('lastpost','dateline','replies','views','hourviews','todayviews','weekviews','monthviews')) ? $requestdata['orderby'] : 'lastpost') : 'lastpost';
$hours = isset($requestdata['hours']) ? intval($requestdata['hours']) : 0;
$highlight = isset($requestdata['highlight']) ? $requestdata['highlight'] : 0;
$picpre = isset($requestdata['picpre']) ? urldecode($requestdata['picpre']) : NULL;
$maxlength = !empty($requestdata['maxlength']) ? intval($requestdata['maxlength']) : 50;
$fnamelength = isset($requestdata['fnamelength']) ? intval($requestdata['fnamelength']) : 0;
$recommend = !empty($requestdata['recommend']) ? 1 : 0;
$tids = isset($requestdata['tids']) ? $requestdata['tids'] : NULL;
$keyword = !empty($requestdata['keyword']) ? $requestdata['keyword'] : NULL;
$typeids = isset($requestdata['typeids']) ? $requestdata['typeids'] : NULL;
$sortids = isset($requestdata['sortids']) ? $requestdata['sortids'] : NULL;
$special = isset($requestdata['special']) ? intval($requestdata['special']) : 0;
$rewardstatus = isset($requestdata['rewardstatus']) ? intval($requestdata['rewardstatus']) : 0;
$threadtype = isset($requestdata['threadtype']) ? intval($requestdata['threadtype']) : 0;
$threadsort = isset($requestdata['threadsort']) ? intval($requestdata['threadsort']) : 0;
$tag = !empty($requestdata['tag']) ? trim($requestdata['tag']) : NULL;
$messagelength = !empty($requestdata['messagelength']) ? intval($requestdata['messagelength']) : 255;
require DISCUZ_ROOT.'./forumdata/cache/cache_forums.php';
$datalist = array();
$threadtypeids = array();
if($keyword) {
if(preg_match("(AND|\+|&|\s)", $keyword) && !preg_match("(OR|\|)", $keyword)) {
$andor = ' AND ';
$keywordsrch = '1';
$keyword = preg_replace("/( AND |&| )/is", "+", $keyword);
} else {
$andor = ' OR ';
$keywordsrch = '0';
$keyword = preg_replace("/( OR |\|)/is", "+", $keyword);
}
$keyword = str_replace('*', '%', addcslashes($keyword, '%_'));
foreach(explode('+', $keyword) as $text) {
$text = trim($text);
if($text) {
$keywordsrch .= $andor;
$keywordsrch .= "t.subject LIKE '%$text%'";
}
}
$keyword = " AND ($keywordsrch)";
} else {
$keyword = '';
}
$sql = ($specialfid && $sidestatus ? ' AND t.fid = '.$specialfid : ($fids ? ' AND t.fid IN (\''.str_replace('_', '\',\'', $fids).'\')' : ''))
.$keyword
.($tids ? ' AND t.tid IN (\''.str_replace('_', '\',\'', $tids).'\')' : '')
.($typeids ? ' AND t.typeid IN (\''.str_replace('_', '\',\'', $typeids).'\')' : '')
.($sortids ? ' AND t.sortid IN (\''.str_replace('_', '\',\'', $sortids).'\')' : '')
.(($special >= 0 && $special < 127) ? threadrange($special, 'special', 7) : '')
.((($special & 16) && $rewardstatus) ? ($rewardstatus == 1 ? ' AND t.price < 0' : ' AND t.price > 0') : '')
.(($digest > 0 && $digest < 15) ? threadrange($digest, 'digest') : '')
.(($stick > 0 && $stick < 15) ? threadrange($stick, 'displayorder') : '');
if(in_array($orderby, array('hourviews','todayviews','weekviews','monthviews'))) {
$historytime = 0;
switch($orderby) {
case 'hourviews':
$historytime = $timestamp - 3600 * $hours;
break;
case 'todayviews':
$historytime = mktime(0, 0, 0, date('m', $timestamp), date('d', $timestamp), date('Y', $timestamp));
break;
case 'weekviews':
$week = gmdate('w', $timestamp) - 1;
$week = $week != -1 ? $week : 6;
$historytime = mktime(0, 0, 0, date('m', $timestamp), date('d', $timestamp) - $week, date('Y', $timestamp));
break;
case 'monthviews':
$historytime = mktime(0, 0, 0, date('m', $timestamp), 1, date('Y', $timestamp));
break;
}
$sql .= ' AND t.dateline>='.$historytime;
$orderby = 'views';
}
$sqlfrom = strexists($requesttemplate, '{message}') ? ",p.message FROM `{$tablepre}threads` t LEFT JOIN `{$tablepre}posts` p ON p.tid=t.tid AND p.first='1'" : "FROM `{$tablepre}threads` t";
if(strexists($requesttemplate, '{imgattach}')) {
$sqlfrom = ",a.remote,a.attachment,a.thumb $sqlfrom INNER JOIN `{$tablepre}attachments` a ON a.tid=t.tid";
$sql .= " AND a.isimage='1' AND a.readperm='0' AND a.price='0'";
$attachurl = $_DCACHE['settings']['attachurl'];
$attachurl = preg_match("/^((https?|ftps?):\/\/|www\.)/i", $attachurl) ? $attachurl : $boardurl.$attachurl;
}
if($recommend) {
$sqlfrom .= " INNER JOIN `{$tablepre}forumrecommend` fc ON fc.tid=t.tid";
}
if($tag) {
$tags = explode(' ', $tag);
foreach($tags as $tagk => $tagv) {
if(!preg_match('/^([\x7f-\xff_-]|\w){3,20}$/', $tagv)) {
unset($tags[$tagk]);
}
}
if($tags = implode("','", $tags)) {
$sqlfrom .= " INNER JOIN `{$tablepre}threadtags` tag ON tag.tid=t.tid AND tag.tagname IN ('$tags')";
}
}
$query = $db->query("SELECT t.tid,t.fid,t.readperm,t.author,t.authorid,t.subject,t.dateline,t.lastpost,t.lastposter,t.views,t.replies,t.highlight,t.digest,t.typeid,t.sortid
$sqlfrom WHERE t.readperm='0'
$sql
AND t.displayorder>='0'
AND t.fid>'0'
$attachadd
ORDER BY t.$orderby DESC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -