297 lines
11 KiB
PHP
297 lines
11 KiB
PHP
<?php
|
|
|
|
/**
|
|
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
|
* This is NOT a freeware, use is subject to license terms
|
|
*
|
|
* $Id: admincp_prune.php 29900 2012-05-02 08:17:44Z liulanbo $
|
|
*/
|
|
|
|
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
|
|
exit('Access Denied');
|
|
}
|
|
|
|
cpheader();
|
|
|
|
$searchsubmit = $_GET['searchsubmit'];
|
|
$fromumanage = $_GET['fromumanage'] ? 1 : 0;
|
|
|
|
require_once libfile('function/misc');
|
|
loadcache('forums');
|
|
|
|
if(!submitcheck('prunesubmit')) {
|
|
|
|
require_once libfile('function/forumlist');
|
|
|
|
if($_G['adminid'] == 1 || $_G['adminid'] == 2) {
|
|
$forumselect = '<select name="forums"><option value=""> > '.$lang['select'].'</option>'.
|
|
'<option value=""> </option>'.forumselect(FALSE, 0, 0, TRUE).'</select>';
|
|
|
|
if($_GET['forums']) {
|
|
$forumselect = preg_replace("/(\<option value=\"$_GET[forums]\")(\>)/", "\\1 selected=\"selected\" \\2", $forumselect);
|
|
}
|
|
} else {
|
|
$forumselect = $comma = '';
|
|
$mfids = array();
|
|
foreach(C::t('forum_moderator')->fetch_all_by_uid($_G['uid']) as $row) {
|
|
$mfids[] = $row['fid'];
|
|
}
|
|
$query = C::t('forum_forum')->fetch_all_by_fid($mfids);
|
|
foreach($query as $forum) {
|
|
$forumselect .= $comma.$forum['name'];
|
|
$comma = ', ';
|
|
}
|
|
$forumselect = $forumselect ? $forumselect : $lang['none'];
|
|
}
|
|
|
|
if($fromumanage) {
|
|
$starttime = !preg_match("/^(0|\d{4}\-\d{1,2}\-\d{1,2})$/", $_GET['starttime']) ? '' : $_GET['starttime'];
|
|
$endtime = $_G['adminid'] == 3 || !preg_match("/^(0|\d{4}\-\d{1,2}\-\d{1,2})$/", $_GET['endtime']) ? '' : $_GET['endtime'];
|
|
} else {
|
|
$starttime = !preg_match("/^(0|\d{4}\-\d{1,2}\-\d{1,2})$/", $_GET['starttime']) ? dgmdate(TIMESTAMP - 86400 * 7, 'Y-n-j') : $_GET['starttime'];
|
|
$endtime = $_G['adminid'] == 3 || !preg_match("/^(0|\d{4}\-\d{1,2}\-\d{1,2})$/", $_GET['endtime']) ? dgmdate(TIMESTAMP, 'Y-n-j') : $_GET['endtime'];
|
|
}
|
|
|
|
shownav('topic', 'nav_prune'.($operation ? '_'.$operation : ''));
|
|
showsubmenusteps('nav_prune'.($operation ? '_'.$operation : ''), array(
|
|
array('prune_search', !$searchsubmit),
|
|
array('nav_prune', $searchsubmit)
|
|
));
|
|
showtips('prune_tips');
|
|
echo <<<EOT
|
|
<script type="text/javascript" src="static/js/calendar.js"></script>
|
|
<script type="text/JavaScript">
|
|
function page(number) {
|
|
$('pruneforum').page.value=number;
|
|
$('pruneforum').searchsubmit.click();
|
|
}
|
|
</script>
|
|
EOT;
|
|
|
|
$posttableselect = getposttableselect();
|
|
showtagheader('div', 'searchposts', !$searchsubmit);
|
|
showformheader("prune".($operation ? '&operation='.$operation : ''), '', 'pruneforum');
|
|
showhiddenfields(array('page' => $page, 'pp' => $_GET['pp'] ? $_GET['pp'] : $_GET['perpage']));
|
|
showtableheader();
|
|
showsetting('prune_search_detail', 'detail', $_GET['detail'], 'radio');
|
|
if($posttableselect) {
|
|
showsetting('prune_search_select_postsplit', '', '', $posttableselect);
|
|
}
|
|
if($operation != 'group') {
|
|
showsetting('prune_search_forum', '', '', $forumselect);
|
|
}
|
|
showsetting('prune_search_perpage', '', $_GET['perpage'], "<select name='perpage'><option value='20'>$lang[perpage_20]</option><option value='50'>$lang[perpage_50]</option><option value='100'>$lang[perpage_100]</option></select>");
|
|
if(!$fromumanage) {
|
|
empty($_GET['starttime']) && $_GET['starttime'] = dgmdate(TIMESTAMP - 86400 * 7, 'Y-n-j');
|
|
}
|
|
echo '<input type="hidden" name="fromumanage" value="'.$fromumanage.'">';
|
|
showsetting('prune_search_time', array('starttime', 'endtime'), array($_GET['starttime'], $_GET['endtime']), 'daterange');
|
|
showsetting('prune_search_user', 'users', $_GET['users'], 'text');
|
|
showsetting('prune_search_ip', 'useip', $_GET['useip'], 'text');
|
|
showsetting('prune_search_keyword', 'keywords', $_GET['keywords'], 'text');
|
|
showsetting('prune_search_lengthlimit', 'lengthlimit', $_GET['lengthlimit'], 'text');
|
|
showsubmit('searchsubmit');
|
|
showtablefooter();
|
|
showformfooter();
|
|
showtagfooter('div');
|
|
|
|
} else {
|
|
|
|
$pidsdelete = $tidsdelete = array();
|
|
$pids = authcode($_GET['pids'], 'DECODE');
|
|
|
|
loadcache('posttableids');
|
|
$posttable = in_array($_GET['posttableid'], $_G['cache']['posttableids']) ? $_GET['posttableid'] : 0;
|
|
$log_handler = Cloud::loadClass('Cloud_Service_SearchHelper');
|
|
foreach(C::t('forum_post')->fetch_all($posttable, ($pids ? explode(',', $pids) : $_GET['pidarray']), false) as $post) {
|
|
$prune['forums'][] = $post['fid'];
|
|
$prune['thread'][$post['tid']]++;
|
|
|
|
$pidsdelete[] = $post['pid'];
|
|
if($post['first']) {
|
|
$tidsdelete[] = $post['tid'];
|
|
}
|
|
|
|
if($post['first']) {
|
|
$log_handler->myThreadLog('delete', array('tid' => $post['tid']));
|
|
} else {
|
|
$log_handler->myPostLog('delete', array('pid' => $post['pid']));
|
|
}
|
|
}
|
|
|
|
if($pidsdelete) {
|
|
require_once libfile('function/post');
|
|
require_once libfile('function/delete');
|
|
$deletedposts = deletepost($pidsdelete, 'pid', !$_GET['donotupdatemember'], $posttable);
|
|
$deletedthreads = deletethread($tidsdelete, !$_GET['donotupdatemember'], !$_GET['donotupdatemember']);
|
|
|
|
if(count($prune['thread']) < 50) {
|
|
foreach($prune['thread'] as $tid => $decrease) {
|
|
updatethreadcount($tid);
|
|
}
|
|
} else {
|
|
$repliesarray = array();
|
|
foreach($prune['thread'] as $tid => $decrease) {
|
|
$repliesarray[$decrease][] = $tid;
|
|
}
|
|
foreach($repliesarray as $decrease => $tidarray) {
|
|
C::t('forum_thread')->increase($tidarray, array('replies'=>-$decrease));
|
|
}
|
|
}
|
|
|
|
if($_G['setting']['globalstick']) {
|
|
updatecache('globalstick');
|
|
}
|
|
|
|
foreach(array_unique($prune['forums']) as $fid) {
|
|
updateforumcount($fid);
|
|
}
|
|
|
|
}
|
|
|
|
$deletedthreads = intval($deletedthreads);
|
|
$deletedposts = intval($deletedposts);
|
|
updatemodworks('DLP', $deletedposts);
|
|
$cpmsg = cplang('prune_succeed', array('deletedthreads' => $deletedthreads, 'deletedposts' => $deletedposts));
|
|
|
|
?>
|
|
<script type="text/JavaScript">alert('<?php echo $cpmsg;?>');parent.$('pruneforum').searchsubmit.click();</script>
|
|
<?php
|
|
|
|
}
|
|
|
|
if(submitcheck('searchsubmit', 1)) {
|
|
|
|
loadcache('posttableids');
|
|
$posttable = in_array($_GET['posttableid'], $_G['cache']['posttableids']) ? $_GET['posttableid'] : 0;
|
|
|
|
$pids = array();
|
|
$postcount = '0';
|
|
$sql = $error = '';
|
|
$operation == 'group' && $_GET['forums'] = 'isgroup';
|
|
$_GET['keywords'] = trim($_GET['keywords']);
|
|
$_GET['users'] = trim($_GET['users']);
|
|
if(($_GET['starttime'] == '' && $_GET['endtime'] == '' && !$fromumanage) || ($_GET['keywords'] == '' && $_GET['useip'] == '' && $_GET['users'] == '')) {
|
|
$error = 'prune_condition_invalid';
|
|
}
|
|
|
|
if($_G['adminid'] == 1 || $_G['adminid'] == 2) {
|
|
if($_GET['forums'] && $_GET['forums'] != 'isgroup') {
|
|
$fid = $_GET['forums'];
|
|
}
|
|
if($_GET['forums'] == 'isgroup') {
|
|
$isgroup = 1;
|
|
} else {
|
|
$isgroup = 0;
|
|
}
|
|
} else {
|
|
$forums = array();
|
|
foreach(C::t('forum_moderator')->fetch_all_by_uid($_G['uid']) as $forum) {
|
|
$forums[] = $forum['fid'];
|
|
}
|
|
$fid = $forums;
|
|
}
|
|
|
|
if($_GET['users'] != '') {
|
|
$uids = C::t('common_member')->fetch_all_uid_by_username(array_map('trim', explode(',', $_GET['users'])));
|
|
$authorid = $uids;
|
|
}
|
|
if($_GET['useip'] != '') {
|
|
$useip = str_replace('*', '%', $_GET['useip']);
|
|
}
|
|
if($_GET['keywords'] != '') {
|
|
$keywords = $_GET['keywords'];
|
|
}
|
|
|
|
if($_GET['lengthlimit'] != '') {
|
|
$lengthlimit = intval($_GET['lengthlimit']);
|
|
$len_message = $lengthlimit;
|
|
}
|
|
|
|
if(!empty($_GET['starttime'])) {
|
|
$starttime = strtotime($_GET['starttime']);
|
|
}
|
|
|
|
if($_G['adminid'] == 1 && !empty($_GET['endtime']) && $_GET['endtime'] != dgmdate(TIMESTAMP, 'Y-n-j')) {
|
|
$endtime = strtotime($_GET['endtime']);
|
|
} else {
|
|
$endtime = TIMESTAMP;
|
|
}
|
|
if(($_G['adminid'] == 2 && $endtime - $starttime > 86400 * 16) || ($_G['adminid'] == 3 && $endtime - $starttime > 86400 * 8)) {
|
|
$error = 'prune_mod_range_illegal';
|
|
}
|
|
|
|
if(!$error) {
|
|
if($_GET['detail']) {
|
|
$_GET['perpage'] = intval($_GET['perpage']) < 1 ? 20 : intval($_GET['perpage']);
|
|
$perpage = $_GET['pp'] ? $_GET['pp'] : $_GET['perpage'];
|
|
$posts = '';
|
|
$groupsname = $groupsfid = $postlist = array();
|
|
$postlist = C::t('forum_post')->fetch_all_prune_by_search($posttable, $isgroup, $keywords, $len_message, $fid, $authorid, $starttime, $endtime, $useip, true, ($page - 1) * $perpage, $perpage);
|
|
foreach($postlist as $key => $post) {
|
|
$postfids[$post[fid]] = $post['fid'];
|
|
$post['dateline'] = dgmdate($post['dateline']);
|
|
$post['subject'] = cutstr($post['subject'], 30);
|
|
$post['message'] = dhtmlspecialchars(cutstr($post['message'], 50));
|
|
$postlist[$key] = $post;
|
|
}
|
|
if($postfids) {
|
|
$query = C::t('forum_forum')->fetch_all_by_fid($postfids);
|
|
foreach($query as $row) {
|
|
$forumnames[$row[fid]] = $row['name'];
|
|
}
|
|
}
|
|
if($postlist) {
|
|
foreach($postlist as $post) {
|
|
$posts .= showtablerow('', '', array(
|
|
"<input class=\"checkbox\" type=\"checkbox\" name=\"pidarray[]\" value=\"$post[pid]\" checked />",
|
|
"<a href=\"forum.php?mod=redirect&goto=findpost&pid=$post[pid]&ptid=$post[tid]\" target=\"_blank\">$post[subject]</a>",
|
|
$post['message'],
|
|
"<a href=\"forum.php?mod=forumdisplay&fid=$post[fid]\" target=\"_blank\">".$forumnames[$post[fid]]."</a>",
|
|
"<a href=\"home.php?mod=space&uid=$post[authorid]\" target=\"_blank\">$post[author]</a>",
|
|
$post['dateline']
|
|
), TRUE);
|
|
}
|
|
}
|
|
$postcount = C::t('forum_post')->count_prune_by_search($posttable, $isgroup, $keywords, $len_message, $fid, $authorid, $starttime, $endtime, $useip);
|
|
$multi = multi($postcount, $perpage, $page, ADMINSCRIPT."?action=prune");
|
|
$multi = preg_replace("/href=\"".ADMINSCRIPT."\?action=prune&page=(\d+)\"/", "href=\"javascript:page(\\1)\"", $multi);
|
|
$multi = str_replace("window.location='".ADMINSCRIPT."?action=prune&page='+this.value", "page(this.value)", $multi);
|
|
} else {
|
|
$postcount = 0;
|
|
foreach(C::t('forum_post')->fetch_all_prune_by_search($posttable, $isgroup, $keywords, $len_message, $fid, $authorid, $starttime, $endtime, $useip, false) as $post) {
|
|
$pids[] = $post['pid'];
|
|
$postcount++;
|
|
}
|
|
$multi = '';
|
|
}
|
|
|
|
if(!$postcount) {
|
|
$error = 'prune_post_nonexistence';
|
|
}
|
|
}
|
|
|
|
showtagheader('div', 'postlist', $searchsubmit);
|
|
showformheader('prune&frame=no'.($operation ? '&operation='.$operation : ''), 'target="pruneframe"');
|
|
showhiddenfields(array('pids' => authcode(implode(',', $pids), 'ENCODE'), 'posttableid' => $posttable));
|
|
showtableheader(cplang('prune_result').' '.$postcount.' <a href="###" onclick="$(\'searchposts\').style.display=\'\';$(\'postlist\').style.display=\'none\';$(\'pruneforum\').pp.value=\'\';$(\'pruneforum\').page.value=\'\';" class="act lightlink normal">'.cplang('research').'</a>', 'fixpadding');
|
|
|
|
if($error) {
|
|
cpmsg($error);
|
|
} else {
|
|
if($_GET['detail']) {
|
|
showsubtitle(array('', 'subject', 'message', 'forum', 'author', 'time'));
|
|
echo $posts;
|
|
}
|
|
}
|
|
|
|
showsubmit('prunesubmit', 'submit', $_GET['detail'] ? '<input type="checkbox" name="chkall" id="chkall" class="checkbox" checked onclick="checkAll(\'prefix\', this.form, \'pidarray\')" /><label for="chkall">'.cplang('del').'</label>' : '',
|
|
'<input class="checkbox" type="checkbox" name="donotupdatemember" id="donotupdatemember" value="1" checked="checked" /><label for="donotupdatemember"> '.cplang('prune_no_update_member').'</label>', $multi);
|
|
showtablefooter();
|
|
showformfooter();
|
|
echo '<iframe name="pruneframe" style="display:none"></iframe>';
|
|
showtagfooter('div');
|
|
|
|
}
|
|
|
|
?>
|