📄 topicadmin.php
字号:
<?php
/*
[Discuz!] (C)2001-2006 Comsenz Inc.
This is NOT a freeware, use is subject to license terms
$RCSfile: topicadmin.php,v $
$Revision: 1.63.2.3 $
$Date: 2006/09/01 09:04:46 $
*/
require_once './include/common.inc.php';
require_once DISCUZ_ROOT.'./include/post.func.php';
require_once DISCUZ_ROOT.'./include/misc.func.php';
$discuz_action = 201;
$modpostsnum = 0;
$resultarray = array();
if(!$discuz_uid || !$forum['ismoderator']) {
showmessage('admin_nopermission', NULL, 'HALTED');
}
if($forum['type'] == 'forum') {
$navigation = "» <a href=\"forumdisplay.php?fid=$fid\">$forum[name]</a>";
$navtitle = strip_tags($forum['name']);
} else {
$query = $db->query("SELECT fid, name FROM {$tablepre}forums WHERE fid='$forum[fup]'");
$fup = $db->fetch_array($query);
$navigation = "» <a href=\"forumdisplay.php?fid=$fup[fid]\">$fup[name]</a> » <a href=\"forumdisplay.php?fid=$fid\">$forum[name]</a> ";
$navtitle = strip_tags($fup['name']).' - '.strip_tags($forum['name']);
}
if(!empty($tid)) {
$query = $db->query("SELECT * FROM {$tablepre}threads WHERE tid='$tid' AND fid='$fid' AND displayorder>='0'");
if($thread = $db->fetch_array($query)) {
$navigation .= " » <a href=\"viewthread.php?tid=$tid\">$thread[subject]</a> ";
$navtitle .= ' - '.$thread['subject'].' - ';
} else {
showmessage('thread_nonexistence');
}
} elseif(!in_array($action, array('moderate', 'delpost', 'getip'))) {
showmessage('undefined_action', NULL, 'HALTED');
}
// Reason P.M. Preprocess Start
$reasonpmcheck = $reasonpm == 2 || $reasonpm == 3 ? 'checked disabled' : '';
if(($reasonpm == 2 || $reasonpm == 3) || !empty($sendreasonpm)) {
$forumname = strip_tags($forum['name']);
$sendreasonpm = 1;
} else {
$sendreasonpm = 0;
}
// End
$postcredits = $forum['postcredits'] ? $forum['postcredits'] : $creditspolicy['post'];
$replycredits = $forum['replycredits'] ? $forum['replycredits'] : $creditspolicy['reply'];
$digestcredits = $forum['digestcredits'] ? $forum['digestcredits'] : $creditspolicy['digest'];
$postattachcredits = $forum['postattachcredits'] ? $forum['postattachcredits'] : $creditspolicy['postattach'];
if(($action == 'moderate' && in_array($operation, array('copy', 'split', 'merge'))) || in_array($action, array('copy', 'split', 'merge'))) {
$tid = empty($tid) ? $moderate[0] : $tid;
$query = $db->query("SELECT special FROM {$tablepre}threads WHERE tid='$tid'");
if($db->result($query, 0)) {
showmessage('special_noaction');
}
}
if(($action == 'moderate' && $fid) || in_array($action, array('delete', 'move', 'copy', 'highlight', 'close', 'stick', 'digest', 'supe_push', 'removereward'))) {
if($action != 'moderate' ) {
$operation = $action;
$action = 'moderate';
$moderate = array($tid);
}
if(empty($moderate) || !is_array($moderate) || !in_array($operation, array('delete', 'move', 'copy', 'highlight', 'type', 'close', 'stick', 'digest', 'supe_push', 'removereward')) || (!$allowdelpost && $operation == 'delete') || (!$allowstickthread && $operation == 'stick')) {
showmessage('admin_moderate_invalid');
}
$single = count($moderate) == 1 ? true : false;
$referer = "forumdisplay.php?fid=$fid";
$tids = is_array($moderate) ? '\''.implode('\',\'', $moderate).'\'' : '';
if(!submitcheck('modsubmit')) {
if($operation == 'move' || $operation == 'copy') {
require_once DISCUZ_ROOT.'./include/forum.func.php';
$forumselect = forumselect();
} elseif($operation == 'highlight') {
$stylecheck = array();
$colorcheck = array(0 => 'checked');
if($single) {
$string = sprintf('%02d', $thread['highlight']);
$stylestr = sprintf('%03b', $string[0]);
for($i = 1; $i <= 3; $i++) {
$stylecheck[$i] = $stylestr[$i - 1] ? 'checked' : '';
}
$colorcheck = array($string[1] => 'checked');
}
} elseif($operation == 'type') {
$typeselect = typeselect();
}
$threadlist = $loglist = array();
$query = $db->query("SELECT * FROM {$tablepre}threads WHERE tid IN ($tids) AND fid='$fid' AND displayorder>='0' LIMIT $tpp");
while($thread = $db->fetch_array($query)) {
$thread['lastposterenc'] = rawurlencode($thread['lastposter']);
$thread['lastpost'] = gmdate("$dateformat $timeformat", $thread['lastpost'] + $timeoffset * 3600);
$threadlist[] = $thread;
}
if(empty($threadlist)) {
showmessage('admin_moderate_invalid');
}
if(in_array($operation, array('stick', 'digest', 'highlight', 'close', 'supe_push'))) {
$expirationmin = gmdate($dateformat, $timestamp + 86400 + $timeoffset * 3600);
$expirationmax = gmdate($dateformat, $timestamp + 86400 * 180 + $timeoffset * 3600);
$threadsticky = explode(',', $threadsticky);
$expirationdefault = '';
$stickcheck = $digestcheck = $closecheck = $supe_pushstatus = array();
if($single) {
empty($threadlist['0']['displayorder']) ? $stickcheck[1] ='checked' : $stickcheck[$threadlist['0']['displayorder']] = 'checked';
empty($threadlist['0']['digest']) ? $digestcheck[1] = 'checked' : $digestcheck[$threadlist['0']['digest']] = 'checked';
empty($threadlist['0']['supe_pushstatus']) ? $supe_pushstatus[2] = 'checked' : $supe_pushstatus[$threadlist['0']['supe_pushstatus']] = 'checked';
empty($threadlist['0']['closed']) ? $closecheck[0] = 'checked' : $closecheck[1] = 'checked';
if($threadlist['0']['moderated']) {
switch($operation) {
case 'stick': $actionarray = array('EST'); break;
case 'digest': $actionarray = array('EDI'); break;
case 'highlight': $actionarray = array('EHL'); break;
case 'close': $actionarray = array('ECL', 'EOP'); break;
}
$query = $db->query("SELECT * FROM {$tablepre}threadsmod WHERE tid='{$threadlist[0][tid]}' ORDER BY dateline DESC");
while($log = $db->fetch_array($query)) {
$log['dateline'] = gmdate("$dateformat $timeformat", $log['dateline'] + $timeoffset * 3600);
$log['expiration'] = !empty($log['expiration']) ? gmdate("$dateformat", $log['expiration'] + $timeoffset * 3600) : '';
if($log['status'] && in_array($log['action'], $actionarray)) {
$expirationdefault = $log['expiration'];
}
$log['status'] = empty($log['status']) ? 'style="text-decoration: line-through" disabled' : '';
$loglist[] = $log;
}
if(!empty($loglist)) {
include_once language('modactions');
}
}
}
}
include template('topicadmin_moderate');
} else {
$moderatetids = '0';
$threads = array();
$query = $db->query("SELECT * FROM {$tablepre}threads WHERE tid IN ($tids) AND fid='$fid' AND displayorder>='0' LIMIT $tpp");
while($thread = $db->fetch_array($query)) {
$threads[] = $thread;
$moderatetids .= ','.$thread['tid'];
$modpostsnum ++;
}
checkreasonpm();
if($operation == 'delete') {
$stickmodify = 0;
foreach($threads 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
$uidarray = $tuidarray = $ruidarray = array();
$query = $db->query("SELECT first, authorid, dateline FROM {$tablepre}posts WHERE tid IN ($moderatetids)");
while($post = $db->fetch_array($query)) {
if($post['dateline'] < $losslessdel) {
$uidarray[] = $post['authorid'];
} else {
if($post['first']) {
$tuidarray[] = $post['authorid'];
} else {
$ruidarray[] = $post['authorid'];
}
}
}
if($uidarray) {
updatepostcredits('-', $uidarray, array());
}
if($tuidarray) {
updatepostcredits('-', $tuidarray, $postcredits);
}
if($ruidarray) {
updatepostcredits('-', $ruidarray, $replycredits);
}
$modaction = 'DEL';
if($forum['recyclebin']) {
$db->query("UPDATE {$tablepre}threads SET displayorder='-1', digest='0', moderated='1' WHERE tid IN ($moderatetids)");
$db->query("UPDATE {$tablepre}posts SET invisible='-1' WHERE tid IN ($moderatetids)");
} else {
$auidarray = array();
$query = $db->query("SELECT uid, attachment, dateline FROM {$tablepre}attachments WHERE tid IN ($moderatetids)");
while($attach = $db->fetch_array($query)) {
@unlink($attachdir.'/'.$attach['attachment']);
if($attach['dateline'] > $losslessdel) {
$auidarray[] = $attach['uid'];
}
}
if($auidarray) {
updatepostcredits('-', $auidarray, $postattachcredits);
}
$db->query("DELETE FROM {$tablepre}threads WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}threadsmod WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}relatedthreads WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}posts WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}polloptions WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}rewardlog WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}polls WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}trades WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}attachments WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}activities WHERE tid IN ($moderatetids)", 'UNBUFFERED');
$db->query("DELETE FROM {$tablepre}activityapplies WHERE tid IN ($moderatetids)", 'UNBUFFERED');
}
if($globalstick && $stickmodify) {
require_once DISCUZ_ROOT.'./include/cache.func.php';
updatecache('globalstick');
}
updateforumcount($fid);
} else {
if(isset($expiration) && !empty($expiration) && in_array($operation, array('stick', 'digest', 'highlight', 'close'))) {
$expiration = strtotime($expiration) - $timeoffset * 3600 + date('Z');
if(gmdate('Ymd', $expiration + $timeoffset * 3600) <= gmdate('Ymd', $timestamp + $timeoffset * 3600) || ($expiration > $timestamp + 86400 * 180)) {
showmessage('admin_expiration_invalid');
}
} else {
$expiration = 0;
}
if($operation == 'stick' || $operation == 'digest') {
$level = intval($level);
if($level < 0 || $level > 3 || ( $operation == 'stick' && $level > $allowstickthread)) {
showmessage('undefined_action');
}
$expiration = $level ? $expiration : 0;
if($operation == 'stick') {
$db->query("UPDATE {$tablepre}threads SET displayorder='$level', moderated='1' WHERE tid IN ($moderatetids)");
$stickmodify = 0;
foreach($threads as $thread) {
$stickmodify = (in_array($thread['displayorder'], array(2, 3)) || in_array($level, array(2, 3))) && $level != $thread['displayorder'] ? 1 : $stickmodify;
}
if($globalstick && $stickmodify) {
require_once DISCUZ_ROOT.'./include/cache.func.php';
updatecache('globalstick');
}
$modaction = $level ? ($expiration ? 'EST' : 'STK') : 'UST';
$db->query("UPDATE {$tablepre}threadsmod SET status='0' WHERE tid IN ($moderatetids) AND action IN ('STK', 'UST', 'EST', 'UES')", 'UNBUTTERED');
} elseif($operation == 'digest') {
$db->query("UPDATE {$tablepre}threads SET digest='$level', moderated='1' WHERE tid IN ($moderatetids)");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -