📄 moderation.inc.php
字号:
<?php
/*
[Discuz!] (C)2001-2009 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$Id: moderation.inc.php 16688 2008-11-14 06:41:07Z cnteacher $
*/
if(!empty($tid)) {
$moderate = array($tid);
}
if(!defined('IN_DISCUZ') || CURSCRIPT != 'topicadmin') {
exit('Access Denied');
}
if($operations && $operations != array_intersect($operations, array('delete', 'highlight', 'open', 'close', 'stick', 'digest', 'bump', 'down', 'recommend', 'type', 'move')) || (!$allowdelpost && in_array('delete', $operations)) || (!$allowstickthread && in_array('stick', $operations))) {
showmessage('admin_moderate_invalid');
}
$threadlist = $loglist = array();
if($tids = implodeids($moderate)) {
$query = $db->query("SELECT * FROM {$tablepre}threads WHERE tid IN ($tids) AND fid='$fid' AND displayorder>='0' AND digest>='0' LIMIT $tpp");
while($thread = $db->fetch_array($query)) {
$thread['lastposterenc'] = rawurlencode($thread['lastposter']);
$thread['dblastpost'] = $thread['lastpost'];
$thread['lastpost'] = dgmdate("$dateformat $timeformat", $thread['lastpost'] + $timeoffset * 3600);
$threadlist[$thread['tid']] = $thread;
$tid = empty($tid) ? $thread['tid'] : $tid;
}
}
if(empty($threadlist)) {
showmessage('admin_moderate_invalid');
}
$modpostsnum = count($threadlist);
$single = $modpostsnum == 1 ? TRUE : FALSE;
if($frommodcp) {
$referer = "modcp.php?action=threads&fid=$fid&op=threads&do=".($frommodcp == 1 ? '' : 'list');
} else {
$referer = "forumdisplay.php?fid=$fid";
}
if(!submitcheck('modsubmit')) {
if($optgroup == 1 && $single) {
$stickcheck = $digestcheck = array();
empty($threadlist[$tid]['displayorder']) ? $stickcheck[0] ='selected="selected"' : $stickcheck[$threadlist[$tid]['displayorder']] = 'selected="selected"';
empty($threadlist[$tid]['digest']) ? $digestcheck[0] = 'selected="selected"' : $digestcheck[$threadlist[$tid]['digest']] = 'selected="selected"';
$string = sprintf('%02d', $threadlist[$tid]['highlight']);
$stylestr = sprintf('%03b', $string[0]);
for($i = 1; $i <= 3; $i++) {
$stylecheck[$i] = $stylestr[$i - 1] ? 1 : 0;
}
$colorcheck = $string[1];
$forum['modrecommend'] = $forum['modrecommend'] ? unserialize($forum['modrecommend']) : array();
} elseif($optgroup == 2) {
require_once DISCUZ_ROOT.'./include/forum.func.php';
$forumselect = forumselect(FALSE, 0, $single ? $threadlist[$tid]['fid'] : 0);
$typeselect = typeselect($single ? $threadlist[$tid]['typeid'] : 0);
} elseif($optgroup == 4 && $single) {
$closecheck = array();
empty($threadlist[$tid]['closed']) ? $closecheck[0] = 'checked="checked"' : $closecheck[1] = 'checked="checked"';
}
$defaultcheck[$operation] = 'checked="checked"';
include template('topicadmin');
} else {
$moderatetids = implodeids(array_keys($threadlist));
checkreasonpm();
if(empty($operations)) {
showmessage('admin_nonexistence');
} else {
foreach($operations as $operation) {
$updatemodlog = TRUE;
if($operation == 'stick') {
$expiration = checkexpiration($expirationstick);
$sticklevel = intval($sticklevel);
if($sticklevel < 0 || $sticklevel > 3 || $sticklevel > $allowstickthread) {
showmessage('undefined_action');
}
$expirationstick = $sticklevel ? $expirationstick : 0;
$db->query("UPDATE {$tablepre}threads SET displayorder='$sticklevel', moderated='1' WHERE tid IN ($moderatetids)");
$stickmodify = 0;
foreach($threadlist as $thread) {
$stickmodify = (in_array($thread['displayorder'], array(2, 3)) || in_array($sticklevel, array(2, 3))) && $sticklevel != $thread['displayorder'] ? 1 : $stickmodify;
}
if($globalstick && $stickmodify) {
require_once DISCUZ_ROOT.'./include/cache.func.php';
updatecache('globalstick');
}
$modaction = $sticklevel ? ($expiration ? 'EST' : 'STK') : 'UST';
$db->query("UPDATE {$tablepre}threadsmod SET status='0' WHERE tid IN ($moderatetids) AND action IN ('STK', 'UST', 'EST', 'UES')", 'UNBUFFERED');
} elseif($operation == 'highlight') {
$expiration = checkexpiration($expirationhighlight);
$stylebin = '';
for($i = 1; $i <= 3; $i++) {
$stylebin .= empty($highlight_style[$i]) ? '0' : '1';
}
$highlight_style = bindec($stylebin);
if($highlight_style < 0 || $highlight_style > 7 || $highlight_color < 0 || $highlight_color > 8) {
showmessage('undefined_action', NULL, 'HALTED');
}
$db->query("UPDATE {$tablepre}threads SET highlight='$highlight_style$highlight_color', moderated='1' WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$modaction = ($highlight_style + $highlight_color) ? ($expiration ? 'EHL' : 'HLT') : 'UHL';
$expiration = $modaction == 'UHL' ? 0 : $expiration;
$db->query("UPDATE {$tablepre}threadsmod SET status='0' WHERE tid IN ($moderatetids) AND action IN ('HLT', 'UHL', 'EHL', 'UEH')", 'UNBUFFERED');
} elseif($operation == 'digest') {
$expiration = checkexpiration($expirationdigest);
$db->query("UPDATE {$tablepre}threads SET digest='$digestlevel', moderated='1' WHERE tid IN ($moderatetids)");
foreach($threadlist as $thread) {
if($thread['digest'] != $digestlevel) {
$digestpostsadd = ($thread['digest'] > 0 && $digestlevel == 0) || ($thread['digest'] == 0 && $digestlevel > 0) ? 'digestposts=digestposts'.($digestlevel == 0 ? '-' : '+').'1' : '';
updatecredits($thread['authorid'], $digestcredits, $digestlevel - $thread['digest'], $digestpostsadd);
}
}
$modaction = $digestlevel ? ($expiration ? 'EDI' : 'DIG') : 'UDG';
$db->query("UPDATE {$tablepre}threadsmod SET status='0' WHERE tid IN ($moderatetids) AND action IN ('DIG', 'UDI', 'EDI', 'UED')", 'UNBUFFERED');
} elseif($operation == 'recommend') {
$expiration = checkexpiration($expirationrecommend);
$db->query("UPDATE {$tablepre}threads SET moderated='1' WHERE tid IN ($moderatetids)");
$modaction = $isrecommend ? 'REC' : 'URE';
$thread = daddslashes($thread, 1);
$db->query("UPDATE {$tablepre}threadsmod SET status='0' WHERE tid IN ($moderatetids) AND action IN ('REC')", 'UNBUFFERED');
if($isrecommend) {
$addthread = $comma = '';
foreach($threadlist as $thread) {
$addthread .= $comma."('$thread[fid]', '$thread[tid]', '0', '".addslashes($thread['subject'])."', '".addslashes($thread['author'])."', '$thread[authorid]', '$discuz_uid', '$expiration')";
$comma = ', ';
}
if($addthread) {
$db->query("REPLACE INTO {$tablepre}forumrecommend (fid, tid, displayorder, subject, author, authorid, moderatorid, expiration) VALUES $addthread");
}
} else {
$db->query("DELETE FROM {$tablepre}forumrecommend WHERE fid='$fid' AND tid IN ($moderatetids)");
}
} elseif($operation == 'bump') {
$modaction = 'BMP';
$thread = $threadlist;
$thread = array_pop($thread);
$thread['subject'] = addslashes($thread['subject']);
$thread['lastposter'] = addslashes($thread['lastposter']);
$db->query("UPDATE {$tablepre}threads SET lastpost='$timestamp', moderated='1' WHERE tid IN ($moderatetids)");
$db->query("UPDATE {$tablepre}forums SET lastpost='$thread[tid]\t$thread[subject]\t$timestamp\t$thread[lastposter]' WHERE fid='$fid'");
$forum['threadcaches'] && deletethreadcaches($thread['tid']);
} elseif($operation == 'down') {
$modaction = 'DWN';
$downtime = $timestamp - 86400 * 730;
$db->query("UPDATE {$tablepre}threads SET lastpost='$downtime', moderated='1' WHERE tid IN ($moderatetids)");
$forum['threadcaches'] && deletethreadcaches($thread['tid']);
} elseif($operation == 'delete') {
$stickmodify = 0;
foreach($threadlist as $thread) {
if($thread['digest']) {
updatecredits($thread['authorid'], $digestcredits, -$thread['digest'], 'digestposts=digestposts-1');
}
if(in_array($thread['displayorder'], array(2, 3))) {
$stickmodify = 1;
}
}
$losslessdel = $losslessdel > 0 ? $timestamp - $losslessdel * 86400 : 0;
//Update members' credits and post counter
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -