/source/include/modcp/modcp_thread.php
PHP | 377 lines | 299 code | 72 blank | 6 comment | 107 complexity | 3af67faa960a575debb115aa1958d855 MD5 | raw file
- <?php
- /**
- * [Discuz!] (C)2001-2099 Comsenz Inc.
- * This is NOT a freeware, use is subject to license terms
- *
- * $Id: modcp_thread.php 28845 2012-03-15 00:59:32Z monkey $
- */
- if(!defined('IN_DISCUZ') || !defined('IN_MODCP')) {
- exit('Access Denied');
- }
- $op = !in_array($op , array('thread', 'post')) ? 'thread' : $op;
- $do = getgpc('do') ? dhtmlspecialchars(getgpc('do')) : '';
- $modtpl = $op == 'post' ? 'modcp_post' : 'modcp_thread';
- $modtpl = 'forum/'.$modtpl;
- $threadoptionselect = array('','','','','','', '', '', '', '', 999=>'', 888=>'');
- $threadoptionselect[getgpc('threadoption')] = 'selected';
- if($op == 'thread') {
- $result = array();
- foreach (array('threadoption', 'viewsless', 'viewsmore', 'repliesless', 'repliesmore', 'noreplydays', 'typeid') as $key) {
- $_GET[''.$key] = isset($_GET[''.$key]) && is_numeric($_GET[''.$key]) ? intval($_GET[''.$key]) : '';
- $result[$key] = $_GET[''.$key];
- }
- foreach (array('starttime', 'endtime', 'keywords', 'users') as $key) {
- $result[$key] = isset($_GET[''.$key]) ? dhtmlspecialchars($_GET[''.$key]) : '';
- }
- if($_G['fid'] && $_G['forum']['ismoderator']) {
- if($do == 'search' && submitcheck('submit', 1)) {
- $conditions = array();
- if($_GET['threadoption'] > 0 && $_GET['threadoption'] < 255) {
- $conditions['specialthread'] = 1;
- $conditions['special'] = $_GET['threadoption'];
- } elseif($_GET['threadoption'] == 999) {
- $conditions['digest'] = array(1,2,3);
- } elseif($_GET['threadoption'] == 888) {
- $conditions['sticky'] = 1;
- }
- $_GET['viewsless'] !== ''? $conditions['viewsless'] = $_GET['viewsless'] : '';
- $_GET['viewsmore'] !== ''? $conditions['viewsmore'] = $_GET['viewsmore'] : '';
- $_GET['repliesless'] !== ''? $conditions['repliesless'] = $_GET['repliesless'] : '';
- $_GET['repliesmore'] !== ''? $conditions['repliesmore'] = $_GET['repliesmore'] : '';
- $_GET['noreplydays'] !== ''? $conditions['noreplydays'] = $_GET['noreplydays'] : '';
- $_GET['starttime'] != '' ? $conditions['starttime'] = $_GET['starttime'] : '';
- $_GET['endtime'] != '' ? $conditions['endtime'] = $_GET['endtime'] : '';
- if(trim($_GET['keywords'])) {
- $conditions['keywords'] = $_GET['keywords'];
- }
- if(trim($_GET['users'])) {
- $conditions['users'] = trim($_GET['users']);
- }
- if($_GET['typeid']) {
- $conditions['intype'] = $_GET['typeid'];
- }
- if(!empty($conditions)) {
- $conditions['inforum'] = $_G['fid'];
- if(!isset($conditions['sticky'])) $conditions['sticky'] = 0;
- $tids = $comma = '';
- $count = 0;
- foreach(C::t('forum_thread')->fetch_all_search($conditions, 0, 0, 1000, 'displayorder DESC, lastpost') as $thread) {
- $tids .= $comma.$thread['tid'];
- $comma = ',';
- $count ++;
- }
- $result['tids'] = $tids;
- $result['count'] = $count;
- $result['fid'] = $_G['fid'];
- $modsession->set('srchresult', $result, true);
- unset($result, $tids);
- $do = 'list';
- $page = 1;
- } else {
- $do = '';
- }
- }
- $page = $_G['page'];
- $total = 0;
- $query = $multipage = '';
- if(empty($do)) {
- $total = C::t('forum_thread')->count_by_fid_typeid_displayorder($_G['fid'], $_GET['typeid'], 0, '>=');
- $tpage = ceil($total / $_G['tpp']);
- $page = min($tpage, $page);
- $multipage = multi($total, $_G['tpp'], $page, "$cpscript?mod=modcp&action=$_GET[action]&op=$op&fid=$_G[fid]&do=$do");
- if($total) {
- $start = ($page - 1) * $_G['tpp'];
- $threads = C::t('forum_thread')->fetch_all_by_fid_typeid_displayorder($_G['fid'], $_GET['typeid'], 0, '>=', $start, $_G['tpp']);
- }
- } else {
- $result = $modsession->get('srchresult');
- $threadoptionselect[$result['threadoption']] = 'selected';
- if($result['fid'] == $_G['fid']) {
- $total = $result['count'];
- $tpage = ceil($total / $_G['tpp']);
- $page = min($tpage, $page);
- $multipage = multi($total, $_G['tpp'], $page, "$cpscript?mod=modcp&action=$_GET[action]&op=$op&fid=$_G[fid]&do=$do");
- if($total) {
- $start = ($page - 1) * $_G['tpp'];
- $threads = C::t('forum_thread')->fetch_all_by_tid_fid_displayorder(explode(',', $result['tids']), null, null, 'lastpost', $start, $_G['tpp']);
- }
- }
- }
- $postlist = array();
- if(!empty($threads)) {
- require_once libfile('function/misc');
- foreach($threads as $thread) {
- $postlist[] = procthread($thread);
- }
- }
- }
- return;
- }
- if($op == 'post') {
- $error = 0;
- $result = array();
- $_GET['starttime'] = !preg_match("/^(0|\d{4}\-\d{1,2}\-\d{1,2})$/", getgpc('starttime')) ? dgmdate(TIMESTAMP - 86400 * ($_G['adminid'] == 2 ? 13 : ($_G['adminid'] == 3 ? 6 : 60)), 'Y-m-d') : getgpc('starttime');
- $_GET['endtime'] = $_G['adminid'] == 3 || !preg_match("/^(0|\d{4}\-\d{1,2}\-\d{1,2})$/", getgpc('endtime')) ? dgmdate(TIMESTAMP, 'Y-m-d') : getgpc('endtime');
- foreach (array('threadoption', 'starttime', 'endtime', 'keywords', 'users', 'useip') as $key) {
- $$key = isset($_GET[''.$key]) ? trim($_GET[''.$key]) : '';
- $result[$key] = dhtmlspecialchars($$key);
- }
- $threadoptionselect = range(1, 3);
- $posttableid = intval($_GET['posttableid']);
- $posttableselect = getposttableselect();
- $cachekey = 'srchresult_p_'.$posttableid.'_'.$_G['fid'];
- $fidadd = '';
- $fidaddarr = array();
- if($_G['fid'] && $modforums['list'][$_G['fid']]) {
- $fidaddarr = array($_G['fid']);
- $fidadd = "AND fid='$_G[fid]'";
- } else {
- if($_G['adminid'] == 1 && $_G['adminid'] == $_G['groupid']) {
- $fidadd = '';
- } elseif(!$modforums['fids']) {
- $fidaddarr = array(0);
- $fidadd = 'AND 0 ';
- } else {
- $fidaddarr = explode(',', $modforums['fids']);
- $fidadd = "AND fid in($modforums[fids])";
- }
- }
- if($do == 'delete' && submitcheck('deletesubmit')) {
- if(!$_G['group']['allowmassprune']) {
- $error = 4;
- return;
- }
- $pidsdelete = $tidsdelete = array();
- $prune = array('forums' => array(), 'thread' => array());
- if($pids = dimplode($_GET['delete'])) {
- $result = $modsession->get($cachekey);
- $result['pids'] = explode(',', $result['pids']);
- $keys = array_flip($result['pids']);
- foreach(C::t('forum_post')->fetch_all($posttableid, $_GET['delete'], false) as $post) {
- if($fidaddarr && !in_array($post['fid'], $fidaddarr)) {
- continue;
- }
- $prune['forums'][$post['fid']] = $post['fid'];
- $pidsdelete[$post['fid']][$post['pid']] = $post['pid'];
- $pids_tids[$post['pid']] = $post['tid'];
- if($post['first']) {
- $tidsdelete[$post['pid']] = $post['tid'];
- } else {
- @$prune['thread'][$post['tid']]++;
- }
- $key = $keys[$post['pid']];
- unset($result['pids'][$key]);
- }
- $result['pids'] = implode(',', $result['pids']);
- $result['count'] = count($result['pids']);
- $modsession->set($cachekey, $result, true);
- unset($result);
- }
- if($pidsdelete) {
- require_once libfile('function/post');
- require_once libfile('function/delete');
- $forums = C::t('forum_forum')->fetch_all($prune['forums']);
- foreach($pidsdelete as $fid => $pids) {
- foreach($pids as $pid) {
- if(!$tidsdelete[$pid]) {
- $deletedposts = deletepost($pid, 'pid', !getgpc('nocredit'), $posttableid, $forums[$fid]['recyclebin']);
- updatemodlog($pids_tids[$pid], 'DLP');
- } else {
- $deletedthreads = deletethread(array($tidsdelete[$pid]), false, !getgpc('nocredit'), $forums[$fid]['recyclebin']);
- updatemodlog($tidsdelete[$pid], 'DEL');
- }
- }
- }
- 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));
- }
- }
- foreach(array_unique($prune['forums']) as $id) {
- updateforumcount($id);
- }
- }
- $do = 'list';
- showmessage('modcp_thread_delete_succeed', '', array(), array('break' => 1));
- }
- if($do == 'search' && submitcheck('searchsubmit', 1)) {
- if(($starttime == '0' && $endtime == '0') || ($keywords == '' && $useip == '' && $users == '')) {
- $error = 1;
- return ;
- }
- $sql = '';
- if($threadoption == 1) {
- $first = 1;
- } elseif($threadoption == 2) {
- $first = 0;
- }
- if($starttime != '0') {
- $starttime = strtotime($starttime);
- }
- if($_G['adminid'] == 1 && $endtime != dgmdate(TIMESTAMP, 'Y-m-d')) {
- if($endtime != '0') {
- $endtime = strtotime($endtime);
- }
- } else {
- $endtime = TIMESTAMP;
- }
- if(($_G['adminid'] == 2 && $endtime - $starttime > 86400 * 14) || ($_G['adminid'] == 3 && $endtime - $starttime > 86400 * 7)) {
- $error = '2';
- return;
- }
- if($users != '') {
- $uids = C::t('common_member')->fetch_all_uid_by_username(array_map('trim', explode(',', $users)));
- if(!$uids) {
- $uids = array(0);
- }
- }
- if(trim($keywords)) {
- foreach(explode(',', str_replace(' ', '', $keywords)) as $value) {
- if(strlen($value) <= 3) {
- $error = 3;
- return;
- }
- }
- }
- $useip = trim($useip);
- if($useip != '') {
- $useip = str_replace('*', '%', $useip);
- }
- if($uids || $keywords || $useip) {
- $pids = array();
- foreach(C::t('forum_post')->fetch_all_by_search($posttableid, null, $keywords, 0, $fidaddarr, $uids, null, $starttime, $endtime, $useip, $first, 0, 1000) as $post) {
- $pids[] = $post['pid'];
- }
- $result['pids'] = implode(',', $pids);
- $result['count'] = count($pids);
- $result['fid'] = $_G['fid'];
- $result['posttableid'] = $posttableid;
- $modsession->set($cachekey, $result, true);
- unset($result, $pids);
- $do = 'list';
- $page = 1;
- } else {
- $do = '';
- }
- }
- $page = max(1, intval($_G['page']));
- $total = 0;
- $query = $multipage = '';
- if($do == 'list') {
- $postarray = array();
- $result = $modsession->get($cachekey);
- $threadoptionselect[$result['threadoption']] = 'selected';
- if($result['fid'] == $_G['fid']) {
- $total = $result['count'];
- $tpage = ceil($total / $_G['tpp']);
- $page = min($tpage, $page);
- $multipage = multi($total, $_G['tpp'], $page, "$cpscript?mod=modcp&action=$_GET[action]&op=$op&fid=$_G[fid]&do=$do");
- if($total && $result['pids']) {
- $start = ($page - 1) * $_G['tpp'];
- $tids = array();
- $postlist = C::t('forum_post')->fetch_all_by_pid($result['posttableid'], explode(',', $result['pids']), true, 'DESC', $start, $_G['tpp']);
- foreach($postlist as $post) {
- $tids[$post['tid']] = $post['tid'];
- }
- $threadlist = C::t('forum_thread')->fetch_all($tids);
- foreach($postlist as $post) {
- $post['tsubject'] = $threadlist[$post['tid']]['subject'];
- $postarray[] = $post;
- }
- unset($threadlist, $postlist, $tids);
- }
- }
- }
- $postlist = array();
- if($postarray) {
- require_once libfile('function/post');
- foreach($postarray as $post) {
- $post['dateline'] = dgmdate($post['dateline']);
- $post['message'] = messagecutstr($post['message'], 200);
- $post['forum'] = $modforums['list'][$post['fid']];
- $post['modthreadkey'] = modauthkey($post['tid']);
- $postlist[] = $post;
- }
- }
- }
- ?>