Ejemplo n.º 1
0
     $_G['forum']['lastpost'] = explode("\t", $_G['forum']['lastpost']);
     if ($orig['dateline'] == $_G['forum']['lastpost'][2] && ($orig['author'] == $_G['forum']['lastpost'][3] || $_G['forum']['lastpost'][3] == '' && $orig['anonymous'])) {
         $lastthread = daddslashes(DB::fetch_first("SELECT tid, subject, lastpost, lastposter FROM " . DB::table('forum_thread') . "\r\n\t\t\t\tWHERE fid='{$_G['fid']}' AND displayorder>='0' ORDER BY lastpost DESC LIMIT 1"), 1);
         $forumadd .= ", lastpost='{$lastthread['tid']}\t{$lastthread['subject']}\t{$lastthread['lastpost']}\t{$lastthread['lastposter']}'";
     }
     DB::query("UPDATE " . DB::table('forum_forum') . " SET {$forumadd} WHERE fid='{$_G['fid']}'", 'UNBUFFERED');
 }
 if ($specialextra) {
     @(include_once DISCUZ_ROOT . './source/plugin/' . $_G['setting']['threadplugins'][$specialextra]['module'] . '.class.php');
     $classname = 'threadplugin_' . $specialextra;
     if (class_exists($classname) && method_exists($threadpluginclass = new $classname(), 'editpost_submit_end')) {
         $threadpluginclass->editpost_submit_end($_G['fid'], $_G['tid']);
     }
 }
 if ($_G['forum']['threadcaches']) {
     deletethreadcaches($_G['tid']);
 }
 $param = array('fid' => $_G['fid'], 'tid' => $_G['tid'], 'pid' => $pid);
 dsetcookie('clearUserdata', 'forum');
 if ($_G['forum_auditstatuson']) {
     if ($audit == 1) {
         updatemoderate($isfirstpost ? 'tid' : 'pid', $isfirstpost ? $_G['tid'] : $pid, '2');
         showmessage('auditstatuson_succeed', $redirecturl, $param);
     } else {
         updatemoderate($isfirstpost ? 'tid' : 'pid', $isfirstpost ? $_G['tid'] : $pid);
         showmessage('audit_edit_succeed', '', $param);
     }
 } else {
     if (!empty($_G['gp_delete']) && $isfirstpost) {
         my_thread_log('delete', array('tid' => $_G['tid']));
         showmessage('post_edit_delete_succeed', "forum.php?mod=forumdisplay&fid={$_G['fid']}", $param);
Ejemplo n.º 2
0
 }
 C::t('forum_post')->increase_rate_by_pid('tid:' . $_G['tid'], $_GET['pid'], $rate, $ratetimes);
 if ($post['first']) {
     $threadrate = intval(@($post['rate'] + $rate) / abs($post['rate'] + $rate));
     C::t('forum_thread')->update($_G['tid'], array('rate' => $threadrate));
 }
 require_once libfile('function/discuzcode');
 $sqlvalues = $comma = '';
 $sqlreason = censor(trim($_GET['reason']));
 $sqlreason = cutstr(dhtmlspecialchars($sqlreason), 40, '.');
 foreach ($creditsarray as $id => $addcredits) {
     $insertarr = array('pid' => $_GET['pid'], 'uid' => $_G['uid'], 'username' => $_G['username'], 'extcredits' => $id, 'dateline' => $_G['timestamp'], 'score' => $addcredits, 'reason' => $sqlreason);
     C::t('forum_ratelog')->insert($insertarr);
 }
 include_once libfile('function/post');
 $_G['forum']['threadcaches'] && @deletethreadcaches($_G['tid']);
 $reason = dhtmlspecialchars(censor(trim($reason)));
 if ($sendreasonpm) {
     $ratescore = $slash = '';
     foreach ($creditsarray as $id => $addcredits) {
         $ratescore .= $slash . $_G['setting']['extcredits'][$id]['title'] . ' ' . ($addcredits > 0 ? '+' . $addcredits : $addcredits) . ' ' . $_G['setting']['extcredits'][$id]['unit'];
         $slash = ' / ';
     }
     sendreasonpm($post, 'rate_reason', array('tid' => $thread['tid'], 'pid' => $_GET['pid'], 'subject' => $thread['subject'], 'ratescore' => $ratescore, 'reason' => $reason, 'from_id' => 0, 'from_idtype' => 'rate'));
 }
 $logs = array();
 foreach ($creditsarray as $id => $addcredits) {
     $logs[] = dhtmlspecialchars("{$_G['timestamp']}\t{$_G[member][username]}\t{$_G['adminid']}\t{$post['author']}\t{$id}\t{$addcredits}\t{$_G['tid']}\t{$thread['subject']}\t{$reason}");
 }
 update_threadpartake($post['tid']);
 C::t('forum_postcache')->delete($_GET['pid']);
Ejemplo n.º 3
0
 }
 if ($specialextra) {
     @(include_once DISCUZ_ROOT . './plugins/' . $threadplugins[$specialextra]['module'] . '.class.php');
     $classname = 'threadplugin_' . $specialextra;
     if (method_exists($classname, 'editpost_submit_end')) {
         $threadpluginclass = new $classname();
         $threadpluginclass->editpost_submit_end($fid, $tid);
     }
 }
 // debug: update thread caches ?
 if ($forum['threadcaches']) {
     if ($isfirstpost || $page == 1 || $thread['replies'] < $_DCACHE['pospperpage'] || !empty($delete)) {
         $forum['threadcaches'] && deletethreadcaches($tid);
     } else {
         if ($db->result_first("SELECT COUNT(*) FROM {$tablepre}posts WHERE tid='{$tid}' AND pid<'{$pid}'") < $_DCACHE['settings']['postperpage']) {
             $forum['threadcaches'] && deletethreadcaches($tid);
         }
     }
 }
 if ($auditstatuson) {
     if ($audit == 1) {
         showmessage('auditstatuson_succeed', $redirecturl);
     } else {
         showmessage('audit_edit_succeed');
     }
 } else {
     if (!empty($delete) && $isfirstpost) {
         showmessage('post_edit_delete_succeed', "forumdisplay.php?fid={$fid}");
     } elseif (!empty($delete)) {
         showmessage('post_edit_delete_succeed', "viewthread.php?tid={$tid}&page={$page}&extra={$extra}" . ($vid && $isfirstpost ? "&vid={$vid}" : ''));
     } else {
Ejemplo n.º 4
0
        $postsmerged = $db->affected_rows();
        $db->query("UPDATE {$tablepre}attachments SET tid='{$tid}' WHERE tid='{$othertid}'");
        $db->query("DELETE FROM {$tablepre}threads WHERE tid='{$othertid}'");
        $db->query("DELETE FROM {$tablepre}threadsmod WHERE tid='{$othertid}'");
        $db->query("DELETE FROM {$tablepre}mythreads WHERE tid='{$othertid}'");
        $db->query("DELETE FROM {$tablepre}myposts WHERE tid='{$othertid}'");
        $firstpost = $db->fetch_first("SELECT pid, fid, authorid, author, subject, dateline FROM {$tablepre}posts WHERE tid='{$tid}' AND invisible='0' ORDER BY dateline LIMIT 1");
        $db->query("UPDATE {$tablepre}posts SET first=(pid='{$firstpost['pid']}'), fid='{$firstpost['fid']}' WHERE tid='{$tid}'");
        $db->query("UPDATE {$tablepre}threads SET authorid='{$firstpost['authorid']}', author='" . addslashes($firstpost['author']) . "', subject='" . addslashes($firstpost['subject']) . "', dateline='{$firstpost['dateline']}', views=views+{$other['views']}, replies=replies+{$other['replies']}, moderated='1' WHERE tid='{$tid}'");
        if ($fid == $other['fid']) {
            $db->query("UPDATE {$tablepre}forums SET threads=threads-1 WHERE fid='{$fid}'");
        } else {
            $db->query("UPDATE {$tablepre}forums SET threads=threads-1, posts=posts-{$postsmerged} WHERE fid='{$other['fid']}'");
            $db->query("UPDATE {$tablepre}forums SET posts={$posts}+{$postsmerged} WHERE fid='{$fid}'");
        }
        $forum['threadcaches'] && deletethreadcaches($thread['tid']);
        $modpostsnum++;
        $resultarray = array('redirect' => "forumdisplay.php?fid={$fid}", 'reasonpm' => $sendreasonpm ? array('data' => array($thread), 'var' => 'thread', 'item' => 'reason_merge') : array(), 'modtids' => $thread['tid'], 'modlog' => array($thread, $other));
    }
} elseif ($action == 'copy' && $thread) {
    if (!submitcheck('copysubmit')) {
        require_once DISCUZ_ROOT . './include/forum.func.php';
        $forumselect = forumselect();
        include template('topicadmin_copy');
    } else {
        $modaction = 'CPY';
        checkreasonpm();
        $query = $db->query("SELECT fid, name, modnewposts FROM {$tablepre}forums WHERE fid='{$copyto}' AND status>0 AND type<>'group'");
        if (!($toforum = $db->fetch_array($query))) {
            showmessage('admin_copy_invalid');
        } else {
Ejemplo n.º 5
0
                                }
                                if ($have == 0) {
                                    dheader("Location: " . ADMINSCRIPT . "?action=threads&operation=postposition&do=add&srchthreadsubmit=yes&replies={$r_replies}&page=" . ($page + 1));
                                }
                            }
                        }
                    }
                }
                $multipage = isset($multipage) ? $multipage : '';
                showsubmit('addpositionsubmit', 'addposition', 'select_all', '', $multipage);
                showtablefooter();
                showformfooter();
            }
        }
    }
    $_G['gp_tids'] && deletethreadcaches($_G['gp_tids']);
    $cpmsg = $cpmsg ? "alert('{$cpmsg}');" : '';
    echo '<script type="text/JavaScript">' . $cpmsg . 'if(parent.$(\'threadforum\')) parent.$(\'threadforum\').searchsubmit.click();</script>';
}
function delete_position($select)
{
    if (empty($select) || !is_array($select)) {
        cpmsg('select_thread_empty', '', 'error');
    }
    $tids = dimplode($select);
    DB::query("DELETE FROM " . DB::table('forum_postposition') . " WHERE tid IN({$tids})");
    DB::query("UPDATE " . DB::table('forum_thread') . " SET status=status & '1111111111111110' WHERE tid IN ({$tids})");
}
function create_position(&$select, $lastpid = 0)
{
    if (empty($select) || !is_array($select)) {
 private function _adminTopic($fid, $tid, $pid, $act, $type)
 {
     global $_G;
     $errorMsg = '';
     $_GET['topiclist'] = array($_GET['pid']);
     // 在DISCUZ_ROOT/source/module/forum/forum_topicadmin.php基础上进行二次开发
     $_GET['topiclist'] = !empty($_GET['topiclist']) ? is_array($_GET['topiclist']) ? array_unique($_GET['topiclist']) : $_GET['topiclist'] : array();
     loadcache(array('modreasons', 'stamptypeid', 'threadtableids'));
     require_once libfile('function/post');
     require_once libfile('function/misc');
     $modpostsnum = 0;
     $resultarray = $thread = array();
     if ($_G['group']['reasonpm'] == 2 || $_G['group']['reasonpm'] == 3 || !empty($_GET['sendreasonpm'])) {
         $forumname = strip_tags($_G['forum']['name']);
         $sendreasonpm = 1;
     } else {
         $sendreasonpm = 0;
     }
     if ($type == 'topic') {
         if ($act == 'band') {
             $resultarray = $this->_topicAdmin_band($fid, $tid, $pid, $act, $type, array('sendreasonpm' => $sendreasonpm, 'thread' => $_G['forum_thread']));
         } else {
             // 在DISCUZ_ROOT/source/include/topicadmin/topicadmin_moderate.php基础上进行二次开发
             $thread = $_G['forum_thread'];
             $thread['dblastpost'] = $thread['lastpost'];
             $threadlist[$thread['tid']] = $thread;
             $modpostsnum = count($threadlist);
             $stickcheck = $closecheck = $digestcheck = array('', '', '', '', '');
             empty($threadlist[$_G['tid']]['displayorder']) ? $stickcheck[0] = 'selected="selected"' : ($stickcheck[$threadlist[$_G['tid']]['displayorder']] = 'selected="selected"');
             empty($threadlist[$_G['tid']]['digest']) ? $digestcheck[0] = 'selected="selected"' : ($digestcheck[$threadlist[$_G['tid']]['digest']] = 'selected="selected"');
             empty($threadlist[$_G['tid']]['closed']) ? $closecheck[0] = 'checked="checked"' : ($closecheck[1] = 'checked="checked"');
             if (!empty($_POST)) {
                 $tidsarr = array_keys($threadlist);
                 $moderatetids = dimplode($tidsarr);
                 $reason = checkreasonpm();
                 $stampstatus = 0;
                 $stampaction = 'SPA';
                 $operationMap = array('top' => 'stick', 'marrow' => 'digest', 'delete' => 'delete');
                 $operation = $operationMap[$act];
                 $updatemodlog = TRUE;
                 switch ($act) {
                     case 'top':
                         $sticklevel = intval($_GET['sticklevel']);
                         if ($sticklevel < 0 || $sticklevel > 3 || $sticklevel > $_G['group']['allowstickthread']) {
                             // showmessage('no_privilege_stickthread');
                             $this->_exitWithHtmlAlert('no_privilege_stickthread');
                         }
                         $expiration = checkexpiration($_GET['expirationstick'], $operation);
                         $expirationstick = $sticklevel ? $_GET['expirationstick'] : 0;
                         $forumstickthreads = $_G['setting']['forumstickthreads'];
                         $forumstickthreads = isset($forumstickthreads) ? dunserialize($forumstickthreads) : array();
                         C::t('forum_thread')->update($tidsarr, array('displayorder' => $sticklevel, 'moderated' => 1), true);
                         $delkeys = array_keys($threadlist);
                         foreach ($delkeys as $k) {
                             unset($forumstickthreads[$k]);
                         }
                         C::t('common_setting')->update('forumstickthreads', $forumstickthreads);
                         $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 ($_G['setting']['globalstick'] && $stickmodify) {
                             require_once libfile('function/cache');
                             updatecache('globalstick');
                         }
                         $modaction = $sticklevel ? $expiration ? 'EST' : 'STK' : 'UST';
                         C::t('forum_threadmod')->update_by_tid_action($tidsarr, array('STK', 'UST', 'EST', 'UES'), array('status' => 0));
                         if (!$sticklevel) {
                             $stampaction = 'SPD';
                         }
                         $stampstatus = 1;
                         break;
                     case 'marrow':
                         $digestlevel = intval($_GET['digestlevel']);
                         if ($digestlevel < 0 || $digestlevel > 3 || $digestlevel > $_G['group']['allowdigestthread']) {
                             // showmessage('no_privilege_digestthread');
                             $this->_exitWithHtmlAlert('no_privilege_digestthread');
                         }
                         $expiration = checkexpiration($_GET['expirationdigest'], $operation);
                         $expirationdigest = $digestlevel ? $expirationdigest : 0;
                         C::t('forum_thread')->update($tidsarr, array('digest' => $digestlevel, 'moderated' => 1), true);
                         foreach ($threadlist as $thread) {
                             if ($thread['digest'] != $digestlevel) {
                                 if ($digestlevel == $thread['digest']) {
                                     continue;
                                 }
                                 $extsql = array();
                                 if ($digestlevel > 0 && $thread['digest'] == 0) {
                                     $extsql = array('digestposts' => 1);
                                 }
                                 if ($digestlevel == 0 && $thread['digest'] > 0) {
                                     $extsql = array('digestposts' => -1);
                                 }
                                 if ($digestlevel == 0) {
                                     $stampaction = 'SPD';
                                 }
                                 updatecreditbyaction('digest', $thread['authorid'], $extsql, '', $digestlevel - $thread['digest']);
                             }
                         }
                         $modaction = $digestlevel ? $expiration ? 'EDI' : 'DIG' : 'UDG';
                         C::t('forum_threadmod')->update_by_tid_action($tidsarr, array('DIG', 'UDI', 'EDI', 'UED'), array('status' => 0));
                         $stampstatus = 2;
                         break;
                     case 'delete':
                         if (!$_G['group']['allowdelpost']) {
                             // showmessage('no_privilege_delpost');
                             $this->_exitWithHtmlAlert('no_privilege_delpost');
                         }
                         loadcache('threadtableids');
                         $stickmodify = 0;
                         $deleteredirect = $remarkclosed = array();
                         foreach ($threadlist as $thread) {
                             if ($thread['digest']) {
                                 updatecreditbyaction('digest', $thread['authorid'], array('digestposts' => -1), '', -$thread['digest']);
                             }
                             if (in_array($thread['displayorder'], array(2, 3))) {
                                 $stickmodify = 1;
                             }
                             if ($_G['forum']['status'] == 3 && $thread['closed'] > 1) {
                                 $deleteredirect[] = $thread['closed'];
                             }
                             if ($thread['isgroup'] == 1 && $thread['closed'] > 1) {
                                 $remarkclosed[] = $thread['closed'];
                             }
                         }
                         $modaction = 'DEL';
                         require_once libfile('function/delete');
                         $tids = array_keys($threadlist);
                         if ($_G['forum']['recyclebin']) {
                             deletethread($tids, true, true, true);
                             manage_addnotify('verifyrecycle', $modpostsnum);
                         } else {
                             deletethread($tids, true, true);
                             $updatemodlog = FALSE;
                         }
                         $forumstickthreads = $_G['setting']['forumstickthreads'];
                         $forumstickthreads = !empty($forumstickthreads) ? dunserialize($forumstickthreads) : array();
                         $delkeys = array_keys($threadlist);
                         foreach ($delkeys as $k) {
                             unset($forumstickthreads[$k]);
                         }
                         C::t('common_setting')->update('forumstickthreads', $forumstickthreads);
                         C::t('forum_forum_threadtable')->delete_none_threads();
                         if (!empty($deleteredirect)) {
                             deletethread($deleteredirect);
                         }
                         if (!empty($remarkclosed)) {
                             C::t('forum_thread')->update($remarkclosed, array('closed' => 0));
                         }
                         if ($_G['setting']['globalstick'] && $stickmodify) {
                             require_once libfile('function/cache');
                             updatecache('globalstick');
                         }
                         updateforumcount($_G['fid']);
                         if ($_GET['crimerecord']) {
                             include_once libfile('function/member');
                             foreach ($threadlist as $thread) {
                                 crime('recordaction', $thread['authorid'], 'crime_delpost', lang('forum/misc', 'crime_postreason', array('reason' => $reason, 'tid' => $thread['tid'], 'pid' => 0)));
                             }
                         }
                         break;
                     case 'close':
                         if (!$_G['group']['allowclosethread']) {
                             $this->_exitWithHtmlAlert('no_privilege_closethread');
                         }
                         $expiration = checkexpiration($_GET['expirationclose'], $operation);
                         $modaction = $expiration ? 'ECL' : 'CLS';
                         C::t('forum_thread')->update($tidsarr, array('closed' => 1, 'moderated' => 1), true);
                         C::t('forum_threadmod')->update_by_tid_action($tidsarr, array('CLS', 'OPN', 'ECL', 'UCL', 'EOP', 'UEO'), array('status' => 0));
                         break;
                     case 'open':
                         if (!$_G['group']['allowclosethread']) {
                             $this->_exitWithHtmlAlert('no_privilege_openthread');
                         }
                         $expiration = checkexpiration($_GET['expirationclose'], $operation);
                         $modaction = $expiration ? 'EOP' : 'OPN';
                         C::t('forum_thread')->update($tidsarr, array('closed' => 0, 'moderated' => 1), true);
                         C::t('forum_threadmod')->update_by_tid_action($tidsarr, array('CLS', 'OPN', 'ECL', 'UCL', 'EOP', 'UEO'), array('status' => 0));
                         break;
                     case 'move':
                         if (!$_G['group']['allowmovethread']) {
                             $this->_exitWithHtmlAlert('no_privilege_movethread');
                         }
                         $moveto = $_GET['moveto'];
                         $toforum = C::t('forum_forum')->fetch_info_by_fid($moveto);
                         if (!$toforum || $_G['adminid'] != 1 && $toforum['status'] != 1 || $toforum['type'] == 'group') {
                             // showmessage('admin_move_invalid');
                             $this->_exitWithHtmlAlert('admin_move_invalid');
                         } elseif ($_G['fid'] == $toforum['fid']) {
                             continue;
                         } else {
                             $moveto = $toforum['fid'];
                             $modnewthreads = (!$_G['group']['allowdirectpost'] || $_G['group']['allowdirectpost'] == 1) && $toforum['modnewposts'] ? 1 : 0;
                             $modnewreplies = (!$_G['group']['allowdirectpost'] || $_G['group']['allowdirectpost'] == 2) && $toforum['modnewposts'] ? 1 : 0;
                             if ($modnewthreads || $modnewreplies) {
                                 // showmessage('admin_move_have_mod');
                                 $this->_exitWithHtmlAlert('admin_move_have_mod');
                             }
                         }
                         if ($_G['adminid'] == 3) {
                             $priv = C::t('forum_forumfield')->check_moderator_for_uid($moveto, $_G['uid'], $_G['member']['accessmasks']);
                             if (($priv['postperm'] && !in_array($_G['groupid'], explode("\t", $priv['postperm'])) || $_G['member']['accessmasks'] && ($priv['allowview'] || $priv['allowreply'] || $priv['allowgetattach'] || $priv['allowpostattach']) && !$priv['allowpost']) && !$priv['istargetmod']) {
                                 // showmessage('admin_move_nopermission');
                                 $this->_exitWithHtmlAlert('admin_move_nopermission');
                             }
                         }
                         $moderate = array();
                         $stickmodify = 0;
                         $toforumallowspecial = array(1 => $toforum['allowpostspecial'] & 1, 2 => $toforum['allowpostspecial'] & 2, 3 => isset($_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]]) && $toforum['allowpostspecial'] & 4, 4 => $toforum['allowpostspecial'] & 8, 5 => $toforum['allowpostspecial'] & 16, 127 => $_G['setting']['threadplugins'] ? dunserialize($toforum['threadplugin']) : array());
                         foreach ($threadlist as $tid => $thread) {
                             $allowmove = 0;
                             if (!$thread['special']) {
                                 $allowmove = 1;
                             } else {
                                 if ($thread['special'] != 127) {
                                     $allowmove = $toforum['allowpostspecial'] ? $toforumallowspecial[$thread['special']] : 0;
                                 } else {
                                     if ($toforumallowspecial[127]) {
                                         $posttable = getposttablebytid($thread['tid']);
                                         $message = C::t('forum_post')->fetch_threadpost_by_tid_invisible($thread['tid']);
                                         $message = $message['message'];
                                         $sppos = strrpos($message, chr(0) . chr(0) . chr(0));
                                         $specialextra = substr($message, $sppos + 3);
                                         $allowmove = in_array($specialextra, $toforumallowspecial[127]);
                                     } else {
                                         $allowmove = 0;
                                     }
                                 }
                             }
                             if ($allowmove) {
                                 $moderate[] = $tid;
                                 if (in_array($thread['displayorder'], array(2, 3))) {
                                     $stickmodify = 1;
                                 }
                                 if ($_GET['appbyme_movetype'] == 'redirect') {
                                     // if($_GET['type'] == 'redirect') {
                                     $insertdata = array('fid' => $thread['fid'], 'readperm' => $thread['readperm'], 'author' => $thread['author'], 'authorid' => $thread['authorid'], 'subject' => $thread['subject'], 'dateline' => $thread['dateline'], 'lastpost' => $thread['dblastpost'], 'lastposter' => $thread['lastposter'], 'views' => 0, 'replies' => 0, 'displayorder' => 0, 'digest' => 0, 'closed' => $thread['tid'], 'special' => 0, 'attachment' => 0, 'typeid' => $_GET['threadtypeid']);
                                     $newtid = C::t('forum_thread')->insert($insertdata, true);
                                     if ($newtid) {
                                         C::t('forum_threadclosed')->insert(array('tid' => $thread['tid'], 'redirect' => $newtid), true, true);
                                     }
                                 }
                             }
                         }
                         if (!($moderatetids = implode(',', $moderate))) {
                             showmessage('admin_moderate_invalid');
                         }
                         $fieldarr = array('fid' => $moveto, 'isgroup' => 0, 'typeid' => $_GET['threadtypeid'], 'moderated' => 1);
                         if ($_G['adminid'] == 3) {
                             $fieldarr['displayorder'] = 0;
                         }
                         C::t('forum_thread')->update($tidsarr, $fieldarr, true);
                         C::t('forum_forumrecommend')->update($tidsarr, array('fid' => $moveto));
                         loadcache('posttableids');
                         $posttableids = $_G['cache']['posttableids'] ? $_G['cache']['posttableids'] : array('0');
                         foreach ($posttableids as $id) {
                             C::t('forum_post')->update_by_tid($id, $tidsarr, array('fid' => $moveto));
                         }
                         $typeoptionvars = C::t('forum_typeoptionvar')->fetch_all_by_tid_optionid($tidsarr);
                         foreach ($typeoptionvars as $typeoptionvar) {
                             C::t('forum_typeoptionvar')->update_by_tid($typeoptionvar['tid'], array('fid' => $moveto));
                             C::t('forum_optionvalue')->update($typeoptionvar['sortid'], $typeoptionvar['tid'], $_G['fid'], "fid='{$moveto}'");
                         }
                         if ($_G['setting']['globalstick'] && $stickmodify) {
                             require_once libfile('function/cache');
                             updatecache('globalstick');
                         }
                         $modaction = 'MOV';
                         $_G['toforum'] = $toforum;
                         updateforumcount($moveto);
                         updateforumcount($_G['fid']);
                         break;
                     default:
                         $errorMsg = '错误的动作参数';
                         break;
                 }
                 if ($errorMsg == '') {
                     if ($updatemodlog) {
                         if ($operation != 'delete') {
                             updatemodlog($moderatetids, $modaction, $expiration);
                         } else {
                             updatemodlog($moderatetids, $modaction, $expiration, 0, $reason);
                         }
                     }
                     updatemodworks($modaction, $modpostsnum);
                     foreach ($threadlist as $thread) {
                         modlog($thread, $modaction);
                     }
                     if ($sendreasonpm) {
                         $modactioncode = lang('forum/modaction');
                         $modtype = $modaction;
                         $modaction = $modactioncode[$modaction];
                         foreach ($threadlist as $thread) {
                             if ($operation == 'move') {
                                 sendreasonpm($thread, 'reason_move', array('tid' => $thread['tid'], 'subject' => $thread['subject'], 'modaction' => $modaction, 'reason' => $reason, 'tofid' => $toforum['fid'], 'toname' => $toforum['name'], 'from_id' => 0, 'from_idtype' => 'movethread'));
                             } else {
                                 sendreasonpm($thread, 'reason_moderate', array('tid' => $thread['tid'], 'subject' => $thread['subject'], 'modaction' => $modaction, 'reason' => $reason, 'from_id' => 0, 'from_idtype' => 'moderate_' . $modtype));
                             }
                         }
                     }
                     if ($stampstatus) {
                         set_stamp($stampstatus, $stampaction, $threadlist, $expiration);
                     }
                     $this->getController()->redirect(WebUtils::createUrl_oldVersion('index/returnmobileview'));
                 }
             } else {
                 if ($act == 'move') {
                     require_once libfile('function/forumlist');
                     $forumselect = forumselect(FALSE, 0, $threadlist[$_G['tid']]['fid'], $_G['adminid'] == 1 ? TRUE : FALSE);
                 }
             }
         }
     } else {
         if ($type == 'post') {
             if ($act == 'band') {
                 $resultarray = $this->_topicAdmin_band($fid, $tid, $pid, $act, $type, array('sendreasonpm' => $sendreasonpm, 'thread' => $_G['forum_thread']));
             } else {
                 // 在DISCUZ_ROOT/source/include/topicadmin/topicadmin_delpost.php基础上进行二次开发
                 $resultarray = array();
                 $thread = $_G['forum_thread'];
                 $topiclist = array($pid);
                 $modpostsnum = 1;
                 $pids = $posts = $authors = array();
                 $posttable = getposttablebytid($_G['tid']);
                 foreach (C::t('forum_post')->fetch_all('tid:' . $_G['tid'], $topiclist, false) as $post) {
                     if ($post['tid'] != $_G['tid']) {
                         continue;
                     }
                     if ($post['first'] == 1) {
                         dheader("location: {$_G['siteurl']}forum.php?mod=topicadmin&action=moderate&operation=delete&optgroup=3&fid={$_G['fid']}&moderate[]={$thread['tid']}&inajax=yes" . ($_GET['infloat'] ? "&infloat=yes&handlekey={$_GET['handlekey']}" : ''));
                     } else {
                         $authors[$post['authorid']] = 1;
                         $pids[] = $post['pid'];
                         $posts[] = $post;
                     }
                 }
                 if (!empty($_POST)) {
                     $reason = checkreasonpm();
                     $uidarray = $puidarray = $auidarray = array();
                     $losslessdel = $_G['setting']['losslessdel'] > 0 ? TIMESTAMP - $_G['setting']['losslessdel'] * 86400 : 0;
                     if ($pids) {
                         require_once libfile('function/delete');
                         if ($_G['forum']['recyclebin']) {
                             deletepost($pids, 'pid', true, false, true);
                             manage_addnotify('verifyrecyclepost', $modpostsnum);
                         } else {
                             $logs = array();
                             $ratelog = C::t('forum_ratelog')->fetch_all_by_pid($pids);
                             $rposts = C::t('forum_post')->fetch_all('tid:' . $_G['tid'], $pids, false);
                             foreach (C::t('forum_ratelog')->fetch_all_by_pid($pids) as $rpid => $author) {
                                 if ($author['score'] > 0) {
                                     $rpost = $rposts[$rpid];
                                     updatemembercount($rpost['authorid'], array($author['extcredits'] => -$author['score']));
                                     $author['score'] = $_G['setting']['extcredits'][$id]['title'] . ' ' . -$author['score'] . ' ' . $_G['setting']['extcredits'][$id]['unit'];
                                     $logs[] = dhtmlspecialchars("{$_G['timestamp']}\t{$_G[member][username]}\t{$_G['adminid']}\t{$rpost['author']}\t{$author['extcredits']}\t{$author['score']}\t{$thread['tid']}\t{$thread['subject']}\t{$delpostsubmit}");
                                 }
                             }
                             if (!empty($logs)) {
                                 writelog('ratelog', $logs);
                                 unset($logs);
                             }
                             deletepost($pids, 'pid', true);
                         }
                         if ($_GET['crimerecord']) {
                             include_once libfile('function/member');
                             foreach ($posts as $post) {
                                 crime('recordaction', $post['authorid'], 'crime_delpost', lang('forum/misc', 'crime_postreason', array('reason' => $reason, 'tid' => $post['tid'], 'pid' => $post['pid'])));
                             }
                         }
                     }
                     updatethreadcount($_G['tid'], 1);
                     updateforumcount($_G['fid']);
                     $_G['forum']['threadcaches'] && deletethreadcaches($thread['tid']);
                     $modaction = 'DLP';
                     $resultarray = array('redirect' => "forum.php?mod=viewthread&tid={$_G['tid']}&page={$_GET['page']}", 'reasonpm' => $sendreasonpm ? array('data' => $posts, 'var' => 'post', 'item' => 'reason_delete_post', 'notictype' => 'post') : array(), 'reasonvar' => array('tid' => $thread['tid'], 'subject' => $thread['subject'], 'modaction' => $modaction, 'reason' => $reason), 'modtids' => 0, 'modlog' => $thread);
                 }
             }
         }
     }
     // 在DISCUZ_ROOT/source/module/forum/forum_topicadmin.php基础上进行二次开发
     if ($resultarray) {
         if ($resultarray['modtids']) {
             updatemodlog($resultarray['modtids'], $modaction, $resultarray['expiration']);
         }
         updatemodworks($modaction, $modpostsnum);
         if (is_array($resultarray['modlog'])) {
             if (isset($resultarray['modlog']['tid'])) {
                 modlog($resultarray['modlog'], $modaction);
             } else {
                 foreach ($resultarray['modlog'] as $thread) {
                     modlog($thread, $modaction);
                 }
             }
         }
         if ($resultarray['reasonpm']) {
             $modactioncode = lang('forum/modaction');
             $modaction = $modactioncode[$modaction];
             foreach ($resultarray['reasonpm']['data'] as $var) {
                 sendreasonpm($var, $resultarray['reasonpm']['item'], $resultarray['reasonvar'], $resultarray['reasonpm']['notictype']);
             }
         }
         // showmessage((isset($resultarray['message']) ? $resultarray['message'] : 'admin_succeed'), $resultarray['redirect']);
         $this->getController()->redirect(WebUtils::createUrl_oldVersion('index/returnmobileview'));
     }
     $this->getController()->renderPartial('topicAdmin', array('formUrl' => WebUtils::createUrl_oldVersion('forum/topicadminview', array('fid' => $fid, 'tid' => $tid, 'pid' => $pid, 'act' => $act, 'type' => $type)), 'errorMsg' => $errorMsg, 'action' => $act, '_G' => $_G, 'stickcheck' => $stickcheck, 'digestcheck' => $digestcheck, 'closecheck' => $closecheck, 'forumselect' => WebUtils::u($forumselect)));
 }
Ejemplo n.º 7
0
 private function replyPost($extract)
 {
     global $_G;
     extract($extract);
     // 获取主题和帖子要插入的状态信息
     $topicStatus = ForumUtils::getPostSendStatus('topic', $_GET['platType']);
     $postStatus = ForumUtils::getPostSendStatus('post', $_GET['platType']);
     //$navtitle .= ' - '.$thread['subject'].' - '.$_G['forum']['name'];
     //copy from dz source/include/post/post_newreply.php
     require_once libfile('function/forumlist');
     $isfirstpost = 0;
     $showthreadsorts = 0;
     $quotemessage = '';
     if (!$_G['uid'] && !(!$_G['forum']['replyperm'] && $_G['group']['allowreply'] || $_G['forum']['replyperm'] && forumperm($_G['forum']['replyperm']))) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'replyperm_login_nopermission', array('{login}' => 1));
     } elseif (empty($_G['forum']['allowreply'])) {
         if (!$_G['forum']['replyperm'] && !$_G['group']['allowreply']) {
             return WebUtils::makeErrorInfo_oldVersion($res, 'replyperm_none_nopermission', array('{login}' => 1));
         } elseif ($_G['forum']['replyperm'] && !forumperm($_G['forum']['replyperm'])) {
             $msg = mobcent_showmessagenoperm('replyperm', $_G['forum']['fid']);
             return WebUtils::makeErrorInfo_oldVersion($res, $msg['message'], $msg['params']);
         }
     } elseif ($_G['forum']['allowreply'] == -1) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'post_forum_newreply_nopermission');
     }
     if (!$_G['uid'] && ($_G['setting']['need_avatar'] || $_G['setting']['need_email'] || $_G['setting']['need_friendnum'])) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'replyperm_login_nopermission', array('{login}' => 1));
     }
     if (empty($thread)) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'thread_nonexistence');
     } elseif ($thread['price'] > 0 && $thread['special'] == 0 && !$_G['uid']) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'group_nopermission', array('{grouptitle}' => $_G['group']['grouptitle']));
     }
     checklowerlimit('reply', 0, 1, $_G['forum']['fid']);
     if ($_G['setting']['commentnumber'] && !empty($_GET['comment'])) {
         if (!submitcheck('commentsubmit', 0, $seccodecheck, $secqaacheck)) {
             return WebUtils::makeErrorInfo_oldVersion($res, 'forum_passwd');
             showmessage('submitcheck_error', NULL);
         }
         $post = C::t('forum_post')->fetch('tid:' . $_G['tid'], $_GET['pid']);
         if (!$post) {
             return WebUtils::makeErrorInfo_oldVersion($res, 'post_nonexistence');
         }
         if ($thread['closed'] && !$_G['forum']['ismoderator'] && !$thread['isgroup']) {
             return WebUtils::makeErrorInfo_oldVersion($res, 'post_thread_closed');
         } elseif (!$thread['isgroup'] && ($post_autoclose = checkautoclose($thread))) {
             return WebUtils::makeErrorInfo_oldVersion($res, $post_autoclose, array('{autoclose}' => $_G['forum']['autoclose']));
         } elseif (checkflood()) {
             return WebUtils::makeErrorInfo_oldVersion($res, 'post_flood_ctrl', array('{floodctrl}' => $_G['setting']['floodctrl']));
         } elseif (checkmaxperhour('pid')) {
             return WebUtils::makeErrorInfo_oldVersion($res, 'post_flood_ctrl_posts_per_hour', array('posts_per_hour' => $_G['group']['maxpostsperhour']));
         }
         $commentscore = '';
         if (!empty($_GET['commentitem']) && !empty($_G['uid']) && $post['authorid'] != $_G['uid']) {
             foreach ($_GET['commentitem'] as $itemk => $itemv) {
                 if ($itemv !== '') {
                     $commentscore .= strip_tags(trim($itemk)) . ': <i>' . intval($itemv) . '</i> ';
                 }
             }
         }
         $comment = cutstr(($commentscore ? $commentscore . '<br />' : '') . censor(trim(dhtmlspecialchars($_GET['message'])), '***'), 200, ' ');
         if (!$comment) {
             return WebUtils::makeErrorInfo_oldVersion($res, 'post_sm_isnull');
         }
         C::t('forum_postcomment')->insert(array('tid' => $post['tid'], 'pid' => $post['pid'], 'author' => $_G['username'], 'authorid' => $_G['uid'], 'dateline' => TIMESTAMP, 'comment' => $comment, 'score' => $commentscore ? 1 : 0, 'useip' => $_G['clientip']));
         C::t('forum_post')->update('tid:' . $_G['tid'], $_GET['pid'], array('comment' => 1));
         if (!empty($_G['uid'])) {
             Mobcent::import(MOBCENT_APP_ROOT . '/components/discuz/source/function/function_post.php');
             mobcent_updatepostcredits('+', $_G['uid'], 'reply', $_G['fid']);
         }
         if (!empty($_G['uid']) && $_G['uid'] != $post['authorid']) {
             notification_add($post['authorid'], 'pcomment', 'comment_add', array('tid' => $_G['tid'], 'pid' => $_GET['pid'], 'subject' => $thread['subject'], 'from_id' => $_G['tid'], 'from_idtype' => 'pcomment', 'commentmsg' => cutstr(str_replace(array('[b]', '[/b]', '[/color]'), '', preg_replace("/\\[color=([#\\w]+?)\\]/i", "", $comment)), 200)));
         }
         update_threadpartake($post['tid']);
         $pcid = C::t('forum_postcomment')->fetch_standpoint_by_pid($_GET['pid']);
         $pcid = $pcid['id'];
         if (!empty($_G['uid']) && $_GET['commentitem']) {
             $totalcomment = array();
             foreach (C::t('forum_postcomment')->fetch_all_by_pid_score($_GET['pid'], 1) as $comment) {
                 $comment['comment'] = addslashes($comment['comment']);
                 if (strexists($comment['comment'], '<br />')) {
                     if (preg_match_all("/([^:]+?):\\s<i>(\\d+)<\\/i>/", $comment['comment'], $a)) {
                         foreach ($a[1] as $k => $itemk) {
                             $totalcomment[trim($itemk)][] = $a[2][$k];
                         }
                     }
                 }
             }
             $totalv = '';
             foreach ($totalcomment as $itemk => $itemv) {
                 $totalv .= strip_tags(trim($itemk)) . ': <i>' . floatval(sprintf('%1.1f', array_sum($itemv) / count($itemv))) . '</i> ';
             }
             if ($pcid) {
                 C::t('forum_postcomment')->update($pcid, array('comment' => $totalv, 'dateline' => TIMESTAMP + 1));
             } else {
                 C::t('forum_postcomment')->insert(array('tid' => $post['tid'], 'pid' => $post['pid'], 'author' => '', 'authorid' => '-1', 'dateline' => TIMESTAMP + 1, 'comment' => $totalv));
             }
         }
         C::t('forum_postcache')->delete($post['pid']);
         return WebUtils::makeErrorInfo_oldVersion($res, 'comment_add_succeed');
         //showmessage('comment_add_succeed', "forum.php?mod=viewthread&tid=$post[tid]&pid=$post[pid]&page=$_GET[page]&extra=$extra#pid$post[pid]", array('tid' => $post['tid'], 'pid' => $post['pid']));
     }
     if ($special == 127) {
         $postinfo = C::t('forum_post')->fetch_threadpost_by_tid_invisible($_G['tid']);
         $sppos = strrpos($postinfo['message'], chr(0) . chr(0) . chr(0));
         $specialextra = substr($postinfo['message'], $sppos + 3);
     }
     if (getstatus($thread['status'], 3)) {
         $rushinfo = C::t('forum_threadrush')->fetch($_G['tid']);
         if ($rushinfo['creditlimit'] != -996) {
             $checkcreditsvalue = $_G['setting']['creditstransextra'][11] ? getuserprofile('extcredits' . $_G['setting']['creditstransextra'][11]) : $_G['member']['credits'];
             if ($checkcreditsvalue < $rushinfo['creditlimit']) {
                 $creditlimit_title = $_G['setting']['creditstransextra'][11] ? $_G['setting']['extcredits'][$_G['setting']['creditstransextra'][11]]['title'] : lang('forum/misc', 'credit_total');
                 return WebUtils::makeErrorInfo_oldVersion($res, 'forum_passwd');
                 showmessage('post_rushreply_creditlimit', '', array('creditlimit_title' => $creditlimit_title, 'creditlimit' => $rushinfo['creditlimit']));
             }
         }
         // author:HanPengyu Date:2014/11/20 针对x3版本的抢楼帖回帖限制控制
         if (isset($rushinfo['replylimit']) && $rushinfo['replylimit'] > 0) {
             $replycount = C::t('forum_post')->count_by_tid_invisible_authorid($thread['tid'], $_G['uid']);
             if ($replycount >= $rushinfo['replylimit']) {
                 return WebUtils::makeErrorInfo_oldVersion($res, lang('message', 'noreply_replynum_error'));
             }
         }
     }
     if ($thread['closed'] && !$_G['forum']['ismoderator'] && !$thread['isgroup']) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'post_thread_closed');
     } elseif (!$thread['isgroup'] && ($post_autoclose = checkautoclose($thread))) {
         return WebUtils::makeErrorInfo_oldVersion($res, $post_autoclose, array('{autoclose}' => $_G['forum']['autoclose']));
     }
     if (trim($subject) == '' && trim($message) == '' && $thread['special'] != 2) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'post_sm_isnull');
     } elseif ($post_invalid = checkpost($subject, $message, $special == 2 && $_G['group']['allowposttrade'])) {
         return WebUtils::makeErrorInfo_oldVersion($res, $post_invalid, array('{minpostsize}' => $_G['setting']['minpostsize']), array('{maxpostsize}' => $_G['setting']['maxpostsize']));
         //showmessage($post_invalid, '', array('minpostsize' => $_G['setting']['minpostsize'], 'maxpostsize' => $_G['setting']['maxpostsize']));
     } elseif (checkflood()) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'post_flood_ctrl', array('{floodctrl}' => $_G['setting']['floodctrl']));
         //showmessage('post_flood_ctrl', '', array('floodctrl' => $_G['setting']['floodctrl']));
     } elseif (checkmaxperhour('pid')) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'post_flood_ctrl_posts_per_hour', array('{posts_per_hour}' => $_G['group']['maxpostsperhour']));
         //showmessage('post_flood_ctrl_posts_per_hour', '', array('posts_per_hour' => $_G['group']['maxpostsperhour']));
     }
     $attentionon = empty($_GET['attention_add']) ? 0 : 1;
     $attentionoff = empty($attention_remove) ? 0 : 1;
     $heatthreadset = update_threadpartake($_G['tid'], true);
     if ($_G['group']['allowat']) {
         $atlist = $atlist_tmp = $ateduids = array();
         preg_match_all("/@([^\r\n]*?)\\s/i", $message . ' ', $atlist_tmp);
         $atlist_tmp = array_slice(array_unique($atlist_tmp[1]), 0, $_G['group']['allowat']);
         $atnum = $maxselect = 0;
         foreach (C::t('home_notification')->fetch_all_by_authorid_fromid($_G['uid'], $_G['tid'], 'at') as $row) {
             $atnum++;
             $ateduids[$row[uid]] = $row['uid'];
         }
         $maxselect = $_G['group']['allowat'] - $atnum;
         if ($maxselect > 0 && !empty($atlist_tmp)) {
             if (empty($_G['setting']['at_anyone'])) {
                 foreach (C::t('home_follow')->fetch_all_by_uid_fusername($_G['uid'], $atlist_tmp) as $row) {
                     if (!in_array($row['followuid'], $ateduids)) {
                         $atlist[$row[followuid]] = $row['fusername'];
                     }
                     if (count($atlist) == $maxselect) {
                         break;
                     }
                 }
                 if (count($atlist) < $maxselect) {
                     $query = C::t('home_friend')->fetch_all_by_uid_username($_G['uid'], $atlist_tmp);
                     foreach ($query as $row) {
                         if (!in_array($row['followuid'], $ateduids)) {
                             $atlist[$row[fuid]] = $row['fusername'];
                         }
                     }
                 }
             } else {
                 foreach (C::t('common_member')->fetch_all_by_username($atlist_tmp) as $row) {
                     if (!in_array($row['uid'], $ateduids)) {
                         $atlist[$row[uid]] = $row['username'];
                     }
                     if (count($atlist) == $maxselect) {
                         break;
                     }
                 }
             }
         }
         if ($atlist) {
             foreach ($atlist as $atuid => $atusername) {
                 $atsearch[] = "/@" . str_replace('/', '\\/', preg_quote($atusername)) . " /i";
                 $atreplace[] = "[url=home.php?mod=space&uid={$atuid}]@{$atusername}[/url] ";
             }
             $message = preg_replace($atsearch, $atreplace, $message . ' ', 1);
         }
     }
     $bbcodeoff = checkbbcodes($message, !empty($_GET['bbcodeoff']));
     $smileyoff = checksmilies($message, !empty($_GET['smileyoff']));
     $parseurloff = !empty($_GET['parseurloff']);
     $htmlon = $_G['group']['allowhtml'] && !empty($_GET['htmlon']) ? 1 : 0;
     $usesig = !empty($_GET['usesig']) && $_G['group']['maxsigsize'] ? 1 : 0;
     $isanonymous = $_G['group']['allowanonymous'] && !empty($_GET['isanonymous']) ? 1 : 0;
     $author = empty($isanonymous) ? $_G['username'] : '';
     if ($thread['displayorder'] == -4) {
         $modnewreplies = 0;
     }
     $pinvisible = $modnewreplies ? -2 : ($thread['displayorder'] == -4 ? -3 : 0);
     $message = preg_replace('/\\[attachimg\\](\\d+)\\[\\/attachimg\\]/is', '[attach]\\1[/attach]', $message);
     $postcomment = in_array(2, $_G['setting']['allowpostcomment']) && $_G['group']['allowcommentreply'] && !$pinvisible && !empty($_GET['reppid']) && ($nauthorid != $_G['uid'] || $_G['setting']['commentpostself']) ? messagecutstr($message, 200, ' ') : '';
     if (!empty($_GET['noticetrimstr'])) {
         $message = $_GET['noticetrimstr'] . "\n\n" . $message;
         $bbcodeoff = false;
     }
     $pid = insertpost(array('fid' => $_G['fid'], 'tid' => $_G['tid'], 'first' => '0', 'author' => $_G['username'], 'authorid' => $_G['uid'], 'subject' => $subject, 'dateline' => $_G['timestamp'], 'message' => $message, 'useip' => $_G['clientip'], 'invisible' => $pinvisible, 'anonymous' => $isanonymous, 'usesig' => $usesig, 'htmlon' => $htmlon, 'bbcodeoff' => $bbcodeoff, 'smileyoff' => $smileyoff, 'parseurloff' => $parseurloff, 'attachment' => '0', 'status' => (defined('IN_MOBILE') ? 8 : 0) | $postStatus));
     if ($_G['group']['allowat'] && $atlist) {
         foreach ($atlist as $atuid => $atusername) {
             notification_add($atuid, 'at', 'at_message', array('from_id' => $_G['tid'], 'from_idtype' => 'at', 'buyerid' => $_G['uid'], 'buyer' => $_G['username'], 'tid' => $_G['tid'], 'subject' => $thread['subject'], 'pid' => $pid, 'message' => messagecutstr($message, 150)));
         }
         set_atlist_cookie(array_keys($atlist));
     }
     $updatethreaddata = $heatthreadset ? $heatthreadset : array();
     $postionid = C::t('forum_post')->fetch_maxposition_by_tid($thread['posttableid'], $_G['tid']);
     $updatethreaddata[] = DB::field('maxposition', $postionid);
     if (getstatus($thread['status'], 3) && $postionid) {
         $rushstopfloor = $rushinfo['stopfloor'];
         if ($rushstopfloor > 0 && $thread['closed'] == 0 && $postionid >= $rushstopfloor) {
             $updatethreaddata[] = 'closed=1';
         }
     }
     useractionlog($_G['uid'], 'pid');
     $nauthorid = 0;
     if (!empty($_GET['noticeauthor']) && !$isanonymous && !$modnewreplies) {
         list($ac, $nauthorid) = explode('|', authcode($_GET['noticeauthor'], 'DECODE'));
         if ($nauthorid != $_G['uid']) {
             if ($ac == 'q') {
                 notification_add($nauthorid, 'post', 'reppost_noticeauthor', array('tid' => $thread['tid'], 'subject' => $thread['subject'], 'fid' => $_G['fid'], 'pid' => $pid, 'from_id' => $pid, 'from_idtype' => 'quote'));
             } elseif ($ac == 'r') {
                 notification_add($nauthorid, 'post', 'reppost_noticeauthor', array('tid' => $thread['tid'], 'subject' => $thread['subject'], 'fid' => $_G['fid'], 'pid' => $pid, 'from_id' => $thread['tid'], 'from_idtype' => 'post'));
             }
         }
         if ($postcomment) {
             $rpid = intval($_GET['reppid']);
             if ($rpost = C::t('forum_post')->fetch('tid:' . $thread['tid'], $rpid)) {
                 if (!$rpost['first']) {
                     C::t('forum_postcomment')->insert(array('tid' => $thread['tid'], 'pid' => $rpid, 'rpid' => $pid, 'author' => $_G['username'], 'authorid' => $_G['uid'], 'dateline' => TIMESTAMP, 'comment' => $postcomment, 'score' => 0, 'useip' => $_G['clientip']));
                     C::t('forum_post')->update('tid:' . $thread['tid'], $rpid, array('comment' => 1));
                     C::t('forum_postcache')->delete($rpid);
                 }
             }
             unset($postcomment);
         }
     }
     if ($thread['authorid'] != $_G['uid'] && getstatus($thread['status'], 6) && empty($_GET['noticeauthor']) && !$isanonymous && !$modnewreplies) {
         $thapost = C::t('forum_post')->fetch_threadpost_by_tid_invisible($_G['tid'], 0);
         notification_add($thapost['authorid'], 'post', 'reppost_noticeauthor', array('tid' => $thread['tid'], 'subject' => $thread['subject'], 'fid' => $_G['fid'], 'pid' => $pid, 'from_id' => $thread['tid'], 'from_idtype' => 'post'));
         // ios push
         UserUtils::pushIOSMessage($thread['authorid'], 'reply', $_G['username'] . WebUtils::t(' 回复了您的帖子 ') . $thread['subject']);
     }
     $feedid = 0;
     if (helper_access::check_module('follow') && !empty($_GET['adddynamic']) && !$isanonymous) {
         require_once libfile('function/discuzcode');
         require_once libfile('function/followcode');
         $feedcontent = C::t('forum_threadpreview')->count_by_tid($thread['tid']);
         $firstpost = C::t('forum_post')->fetch_threadpost_by_tid_invisible($thread['tid']);
         if (empty($feedcontent)) {
             $feedcontent = array('tid' => $thread['tid'], 'content' => followcode($firstpost['message'], $thread['tid'], $pid, 1000));
             C::t('forum_threadpreview')->insert($feedcontent);
             C::t('forum_thread')->update_status_by_tid($thread['tid'], '512');
         } else {
             C::t('forum_threadpreview')->update_relay_by_tid($thread['tid'], 1);
         }
         $notemsg = cutstr(followcode($message, $thread['tid'], $pid, 0, false), 140);
         $followfeed = array('uid' => $_G['uid'], 'username' => $_G['username'], 'tid' => $thread['tid'], 'note' => $notemsg, 'dateline' => TIMESTAMP);
         $feedid = C::t('home_follow_feed')->insert($followfeed, true);
         C::t('common_member_count')->increase($_G['uid'], array('feeds' => 1));
     }
     if ($thread['replycredit'] > 0 && !$modnewreplies && $thread['authorid'] != $_G['uid'] && $_G['uid']) {
         $replycredit_rule = C::t('forum_replycredit')->fetch($_G['tid']);
         if (!empty($replycredit_rule['times'])) {
             $have_replycredit = C::t('common_credit_log')->count_by_uid_operation_relatedid($_G['uid'], 'RCA', $_G['tid']);
             if ($replycredit_rule['membertimes'] - $have_replycredit > 0 && $thread['replycredit'] - $replycredit_rule['extcredits'] >= 0) {
                 $replycredit_rule['extcreditstype'] = $replycredit_rule['extcreditstype'] ? $replycredit_rule['extcreditstype'] : $_G['setting']['creditstransextra'][10];
                 if ($replycredit_rule['random'] > 0) {
                     $rand = rand(1, 100);
                     $rand_replycredit = $rand <= $replycredit_rule['random'] ? true : false;
                 } else {
                     $rand_replycredit = true;
                 }
                 if ($rand_replycredit) {
                     updatemembercount($_G['uid'], array($replycredit_rule['extcreditstype'] => $replycredit_rule['extcredits']), 1, 'RCA', $_G[tid]);
                     C::t('forum_post')->update('tid:' . $_G['tid'], $pid, array('replycredit' => $replycredit_rule['extcredits']));
                     $updatethreaddata[] = DB::field('replycredit', $thread['replycredit'] - $replycredit_rule['extcredits']);
                 }
             }
         }
     }
     ($_G['group']['allowpostattach'] || $_G['group']['allowpostimage']) && ($_GET['attachnew'] || $special == 2 && $_GET['tradeaid']) && updateattach($thread['displayorder'] == -4 || $modnewreplies, $_G['tid'], $pid, $_GET['attachnew']);
     $replymessage = 'post_reply_succeed';
     if ($special == 2 && $_G['group']['allowposttrade'] && $thread['authorid'] == $_G['uid'] && !empty($_GET['trade']) && !empty($_GET['item_name'])) {
         require_once libfile('function/trade');
         trade_create(array('tid' => $_G['tid'], 'pid' => $pid, 'aid' => $_GET['tradeaid'], 'item_expiration' => $_GET['item_expiration'], 'thread' => $thread, 'discuz_uid' => $_G['uid'], 'author' => $author, 'seller' => empty($_GET['paymethod']) && $_GET['seller'] ? dhtmlspecialchars(trim($_GET['seller'])) : '', 'item_name' => $_GET['item_name'], 'item_price' => $_GET['item_price'], 'item_number' => $_GET['item_number'], 'item_quality' => $_GET['item_quality'], 'item_locus' => $_GET['item_locus'], 'transport' => $_GET['transport'], 'postage_mail' => $_GET['postage_mail'], 'postage_express' => $_GET['postage_express'], 'postage_ems' => $_GET['postage_ems'], 'item_type' => $_GET['item_type'], 'item_costprice' => $_GET['item_costprice'], 'item_credit' => $_GET['item_credit'], 'item_costcredit' => $_GET['item_costcredit']));
         $replymessage = 'trade_add_succeed';
         if (!empty($_GET['tradeaid'])) {
             convertunusedattach($_GET['tradeaid'], $_G['tid'], $pid);
         }
     }
     $_G['forum']['threadcaches'] && deletethreadcaches($_G['tid']);
     include_once libfile('function/stat');
     updatestat($thread['isgroup'] ? 'grouppost' : 'post');
     $param = array('fid' => $_G['fid'], 'tid' => $_G['tid'], 'pid' => $pid, 'from' => $_GET['from'], 'sechash' => !empty($_GET['sechash']) ? $_GET['sechash'] : '');
     if ($feedid) {
         $param['feedid'] = $feedid;
     }
     dsetcookie('clearUserdata', 'forum');
     if ($modnewreplies) {
         updatemoderate('pid', $pid);
         unset($param['pid']);
         if ($updatethreaddata) {
             C::t('forum_thread')->update($_G['tid'], $updatethreaddata, false, false, 0, true);
         }
         C::t('forum_forum')->update_forum_counter($_G['fid'], 0, 0, 1, 1);
         $url = empty($_POST['portal_referer']) ? "forum.php?mod=viewthread&tid={$thread[tid]}" : $_POST['portal_referer'];
         manage_addnotify('verifypost');
         // if(!isset($inspacecpshare)) {
         return WebUtils::makeErrorInfo_oldVersion($res, 'post_reply_mod_succeed', array('noError' => 1));
         //showmessage('post_reply_mod_succeed', $url, $param);
         // }
     } else {
         $fieldarr = array('lastposter' => array($author), 'replies' => 1);
         if ($thread['lastpost'] < $_G['timestamp']) {
             $fieldarr['lastpost'] = array($_G['timestamp']);
         }
         $row = C::t('forum_threadaddviews')->fetch($_G['tid']);
         if (!empty($row)) {
             C::t('forum_threadaddviews')->update($_G['tid'], array('addviews' => 0));
             $fieldarr['views'] = $row['addviews'];
         }
         $updatethreaddata = array_merge($updatethreaddata, C::t('forum_thread')->increase($_G['tid'], $fieldarr, false, 0, true));
         if ($thread['displayorder'] != -4) {
             Mobcent::import(MOBCENT_APP_ROOT . '/components/discuz/source/function/function_post.php');
             mobcent_updatepostcredits('+', $_G['uid'], 'reply', $_G['fid']);
             if ($_G['forum']['status'] == 3) {
                 if ($_G['forum']['closed'] > 1) {
                     C::t('forum_thread')->increase($_G['forum']['closed'], $fieldarr, true);
                 }
                 C::t('forum_groupuser')->update_counter_for_user($_G['uid'], $_G['fid'], 0, 1);
                 C::t('forum_forumfield')->update($_G['fid'], array('lastupdate' => TIMESTAMP));
                 require_once libfile('function/grouplog');
                 updategroupcreditlog($_G['fid'], $_G['uid']);
             }
             $lastpost = "{$thread['tid']}\t{$thread['subject']}\t{$_G['timestamp']}\t{$author}";
             C::t('forum_forum')->update($_G['fid'], array('lastpost' => $lastpost));
             C::t('forum_forum')->update_forum_counter($_G['fid'], 0, 1, 1);
             if ($_G['forum']['type'] == 'sub') {
                 C::t('forum_forum')->update($_G['forum']['fup'], array('lastpost' => $lastpost));
             }
         }
         $page = getstatus($thread['status'], 4) ? 1 : @ceil(($thread['special'] ? $thread['replies'] + 1 : $thread['replies'] + 2) / $_G['ppp']);
         if ($updatethreaddata) {
             C::t('forum_thread')->update($_G['tid'], $updatethreaddata, false, false, 0, true);
         }
         /*  if(!isset($inspacecpshare)) {
                 // showmessage($replymessage, $url, $param);
             } */
     }
     if ($jsonInfo['isShowPostion']) {
         $data = DB::query('INSERT INTO  %t VALUES(poi_id,%f,%f,%d,%d,%s)', array('home_surrounding_user', $jsonInfo['longitude'], $jsonInfo['latitude'], $pid, 2, (string) $jsonInfo['location']));
     }
     /* //客户端回复帖子积分入库
           $temp = DB::fetch_first('SELECT extcredits3 FROM '.DB::table('common_credit_rule').' WHERE rid =%d',array(2));
           $extcredits3 = DB::fetch_first('SELECT extcredits3 FROM '.DB::table('common_member_count').' WHERE uid = %d',array($_G['uid']));
           $temp = $extcredits3['extcredits3'] + $temp['extcredits3'];
           DB::query('UPDATE '.DB::table('common_member_count').' set extcredits3 = %d WHERE uid = %d',array($temp,$_G['uid']));
        */
     // return array('rs'=>1,'errcode'=>WebUtils::t('发贴成功'));
     return $this->makeErrorInfo($res, 'mobcent_post_reply_succeed', array('noError' => 1));
 }
Ejemplo n.º 8
0
 public function newreply($parameters)
 {
     $this->_init_parameters($parameters);
     if ($this->thread['closed'] && !$this->forum['ismoderator'] && !$this->thread['isgroup']) {
         return $this->showmessage('post_thread_closed');
     } elseif (!$this->thread['isgroup'] && ($post_autoclose = checkautoclose($this->thread))) {
         return $this->showmessage($post_autoclose, '', array('autoclose' => $this->forum['autoclose']));
     }
     if (trim($this->param['subject']) == '' && trim($this->param['message']) == '' && $this->thread['special'] != 2) {
         return $this->showmessage('post_sm_isnull');
     } elseif ($post_invalid = checkpost($this->param['subject'], $this->param['message'], $this->param['special'] == 2 && $this->group['allowposttrade'])) {
         return $this->showmessage($post_invalid, '', array('minpostsize' => $this->setting['minpostsize'], 'maxpostsize' => $this->setting['maxpostsize']));
     } elseif (checkflood()) {
         return $this->showmessage('post_flood_ctrl', '', array('floodctrl' => $this->setting['floodctrl']));
     } elseif (checkmaxperhour('pid')) {
         return $this->showmessage('post_flood_ctrl_posts_per_hour', '', array('posts_per_hour' => $this->group['maxpostsperhour']));
     }
     $heatthreadset = update_threadpartake($this->thread['tid'], true);
     $bbcodeoff = checkbbcodes($this->param['message'], !empty($this->param['bbcodeoff']));
     $smileyoff = checksmilies($this->param['message'], !empty($this->param['smileyoff']));
     $parseurloff = !empty($this->param['parseurloff']);
     $htmlon = $this->group['allowhtml'] && !empty($this->param['htmlon']) ? 1 : 0;
     $usesig = !empty($this->param['usesig']) && $this->group['maxsigsize'] ? 1 : 0;
     $this->param['isanonymous'] = $this->group['allowanonymous'] && !empty($this->param['isanonymous']) ? 1 : 0;
     $author = empty($this->param['isanonymous']) ? $this->member['username'] : '';
     list(, $this->param['modnewreplies']) = threadmodstatus($this->param['subject'] . "\t" . $this->param['message'] . $this->param['extramessage']);
     if ($this->thread['displayorder'] == -4) {
         $this->param['modnewreplies'] = 0;
     }
     $pinvisible = $this->param['modnewreplies'] ? -2 : ($this->thread['displayorder'] == -4 ? -3 : 0);
     $this->param['message'] = preg_replace('/\\[attachimg\\](\\d+)\\[\\/attachimg\\]/is', '[attach]\\1[/attach]', $this->param['message']);
     if (!empty($this->param['noticetrimstr'])) {
         $this->param['message'] = $this->param['noticetrimstr'] . "\n\n" . $this->param['message'];
         $bbcodeoff = false;
     }
     $status = defined('IN_MOBILE') ? 8 : 0;
     if ($this->param['modstatus']) {
         foreach ($this->param['modstatus'] as $modbit => $modvalue) {
             $status = setstatus($modbit, $modvalue, $status);
         }
     }
     $this->pid = insertpost(array('fid' => $this->forum['fid'], 'tid' => $this->thread['tid'], 'first' => '0', 'author' => $this->member['username'], 'authorid' => $this->member['uid'], 'subject' => $this->param['subject'], 'dateline' => $this->param['timestamp'] ? $this->param['timestamp'] : getglobal('timestamp'), 'message' => $this->param['message'], 'useip' => $this->param['clientip'] ? $this->param['clientip'] : getglobal('clientip'), 'port' => $this->param['remoteport'] ? $this->param['remoteport'] : getglobal('remoteport'), 'invisible' => $pinvisible, 'anonymous' => $this->param['isanonymous'], 'usesig' => $usesig, 'htmlon' => $htmlon, 'bbcodeoff' => $bbcodeoff, 'smileyoff' => $smileyoff, 'parseurloff' => $parseurloff, 'attachment' => '0', 'status' => $status));
     $this->param['updatethreaddata'] = $heatthreadset ? $heatthreadset : array();
     $this->param['maxposition'] = C::t('forum_post')->fetch_maxposition_by_tid($this->thread['posttableid'], $this->thread['tid']);
     $this->param['updatethreaddata'][] = DB::field('maxposition', $this->param['maxposition']);
     useractionlog($this->member['uid'], 'pid');
     if ($this->param['geoloc'] && IN_MOBILE == 2) {
         list($mapx, $mapy, $location) = explode('|', $this->param['geoloc']);
         if ($mapx && $mapy && $location) {
             C::t('forum_post_location')->insert(array('pid' => $this->pid, 'tid' => $this->thread['tid'], 'uid' => $this->member['uid'], 'mapx' => $mapx, 'mapy' => $mapy, 'location' => $location));
         }
     }
     $nauthorid = 0;
     if (!empty($this->param['noticeauthor']) && !$this->param['isanonymous'] && !$this->param['modnewreplies']) {
         list($ac, $nauthorid) = explode('|', authcode($this->param['noticeauthor'], 'DECODE'));
         if ($nauthorid != $this->member['uid']) {
             if ($ac == 'q') {
                 notification_add($nauthorid, 'post', 'reppost_noticeauthor', array('tid' => $this->thread['tid'], 'subject' => $this->thread['subject'], 'fid' => $this->forum['fid'], 'pid' => $this->pid, 'from_id' => $this->pid, 'from_idtype' => 'quote'));
             } elseif ($ac == 'r') {
                 notification_add($nauthorid, 'post', 'reppost_noticeauthor', array('tid' => $this->thread['tid'], 'subject' => $this->thread['subject'], 'fid' => $this->forum['fid'], 'pid' => $this->pid, 'from_id' => $this->thread['tid'], 'from_idtype' => 'post'));
             }
         }
     }
     if ($this->thread['authorid'] != $this->member['uid'] && getstatus($this->thread['status'], 6) && empty($this->param['noticeauthor']) && !$this->param['isanonymous'] && !$this->param['modnewreplies']) {
         $thapost = C::t('forum_post')->fetch_threadpost_by_tid_invisible($this->thread['tid'], 0);
         notification_add($thapost['authorid'], 'post', 'reppost_noticeauthor', array('tid' => $this->thread['tid'], 'subject' => $this->thread['subject'], 'fid' => $this->forum['fid'], 'pid' => $this->pid, 'from_id' => $this->thread['tid'], 'from_idtype' => 'post'));
     }
     $this->forum['threadcaches'] && deletethreadcaches($this->thread['tid']);
     include_once libfile('function/stat');
     updatestat($this->thread['isgroup'] ? 'grouppost' : 'post');
     $this->param['showmsgparam']['fid'] = $this->forum['fid'];
     $this->param['showmsgparam']['tid'] = $this->thread['tid'];
     $this->param['showmsgparam']['pid'] = $this->pid;
     $this->param['showmsgparam']['from'] = $this->param['from'];
     $this->param['showmsgparam']['sechash'] = !empty($this->param['sechash']) ? $this->param['sechash'] : '';
     dsetcookie('clearUserdata', 'forum');
     if ($this->thread['replies'] <= 0) {
         C::t('forum_sofa')->delete($this->thread['tid']);
     }
     if ($this->param['modnewreplies']) {
         updatemoderate('pid', $this->pid);
         unset($this->param['showmsgparam']['pid']);
         if ($this->param['updatethreaddata']) {
             C::t('forum_thread')->update($this->thread['tid'], $this->param['updatethreaddata'], false, false, 0, true);
         }
         C::t('forum_forum')->update_forum_counter($this->forum['fid'], 0, 0, 1, 1);
         manage_addnotify('verifypost');
         return 'post_reply_mod_succeed';
     } else {
         $fieldarr = array('lastposter' => array($author), 'replies' => 1);
         if ($this->thread['lastpost'] < getglobal('timestamp')) {
             $fieldarr['lastpost'] = array(getglobal('timestamp'));
         }
         $row = C::t('forum_threadaddviews')->fetch($this->thread['tid']);
         if (!empty($row)) {
             C::t('forum_threadaddviews')->update($this->thread['tid'], array('addviews' => 0));
             $fieldarr['views'] = $row['addviews'];
         }
         $this->param['updatethreaddata'] = array_merge($this->param['updatethreaddata'], C::t('forum_thread')->increase($this->thread['tid'], $fieldarr, false, 0, true));
         if ($this->thread['displayorder'] != -4) {
             updatepostcredits('+', $this->member['uid'], 'reply', $this->forum['fid']);
             if ($this->forum['status'] == 3) {
                 if ($this->forum['closed'] > 1) {
                     C::t('forum_thread')->increase($this->forum['closed'], $fieldarr, true);
                 }
                 C::t('forum_groupuser')->update_counter_for_user($this->member['uid'], $this->forum['fid'], 0, 1);
                 C::t('forum_forumfield')->update($this->forum['fid'], array('lastupdate' => TIMESTAMP));
                 require_once libfile('function/grouplog');
                 updategroupcreditlog($this->forum['fid'], $this->member['uid']);
             }
             $lastpost = $this->thread['tid'] . "\t" . $this->thread['subject'] . "\t" . getglobal('timestamp') . "\t" . $author;
             C::t('forum_forum')->update($this->forum['fid'], array('lastpost' => $lastpost));
             C::t('forum_forum')->update_forum_counter($this->forum['fid'], 0, 1, 1);
             if ($this->forum['type'] == 'sub') {
                 C::t('forum_forum')->update($this->forum['fup'], array('lastpost' => $lastpost));
             }
         }
         $this->param['page'] = getstatus($this->thread['status'], 4) ? 1 : @ceil(($this->thread['special'] ? $this->thread['replies'] + 1 : $this->thread['replies'] + 2) / getglobal('ppp'));
         if ($this->param['updatethreaddata']) {
             C::t('forum_thread')->update($this->thread['tid'], $this->param['updatethreaddata'], false, false, 0, true);
         }
         return 'post_reply_succeed';
     }
 }
Ejemplo n.º 9
0
	} elseif($operation == 'addstatus') {

		$db->query("UPDATE {$tablepre}threads SET closed='$status' WHERE $tidsadd");

		eval("\$cpmsg = \"".$msglang['threads_succeed']."\";");

	} elseif($operation == 'supe_pushsetting' && $supe['status']) {

		$db->query("UPDATE {$tablepre}threads SET supe_pushstatus='$supe_pushstatus' WHERE $tidsadd");

		eval("\$cpmsg = \"".$msglang['threads_succeed']."\";");

	}

	$tids && deletethreadcaches($tids);
	$cpmsg = $cpmsg ? "alert('$cpmsg');" : '';

?>
<script><?=$cpmsg?>parent.$('threadforum').searchsubmit.click();</script>
<?

}

if(submitcheck('searchsubmit')) {

	$sql = '';

	if($inforum != '' && $inforum != 'all') {
		$sql .= " AND fid='$inforum'";
	}
Ejemplo n.º 10
0
    private function _viewRate($res, $tid, $pid)
    {
        $res = $this->_checkRate($res, $tid, $pid);
        $status = WebUtils::checkError($res);
        $location = WebUtils::createUrl_oldVersion('index/returnmobileview');
        if ($status) {
            $str = <<<HTML
            <script>
                alert("{$res['head']['errInfo']}");
                location.href = "{$location}";
            </script>
HTML;
            echo $str;
            exit;
        }
        // [add]修复gbk编码导致的评分理由不显示。Author:HanPengyu Data:04.09.27
        if (!empty($_POST)) {
            // 把$_POST转成utf-8, 这是由于discuz源码会在mobile情况下把$_POST预先转码成对应的charset,
            $_POST = array_intersect_key($_REQUEST, $_POST);
            // 手动把转成utf-8的$_POST数据再次转成对应的charset
            foreach ($_POST as $key => $value) {
                if (is_string($value)) {
                    $_POST[$key] = WebUtils::t($value);
                }
            }
            $_GET = array_merge($_GET, $_POST);
        }
        global $_G;
        require_once libfile('function/misc');
        require_once libfile('function/forum');
        //今日剩余积分
        $maxratetoday = $this->_getratingleft($_G['group']['raterange']);
        $post = C::t('forum_post')->fetch('tid:' . $tid, $pid);
        $thread = C::t('forum_thread')->fetch($tid);
        if (!empty($_POST)) {
            $reason = checkreasonpm();
            $rate = $ratetimes = 0;
            $creditsarray = $sub_self_credit = array();
            getuserprofile('extcredits1');
            foreach ($_G['group']['raterange'] as $id => $rating) {
                $score = intval($_GET['score' . $id]);
                if (isset($_G['setting']['extcredits'][$id]) && !empty($score)) {
                    if ($rating['isself'] && intval($_G['member']['extcredits' . $id]) - $score < 0) {
                        //抱歉,您的{extcreditstitle}(评分栏目)不足,无法评分
                        $errorMsg = lang('message', 'thread_rate_range_self_invalid', array('extcreditstitle' => $_G['setting']['extcredits'][$id]['title']));
                        $this->_renderTemplates($tid, $pid, $errorMsg);
                        exit;
                    }
                    if (abs($score) <= $maxratetoday[$id]) {
                        if ($score > $rating['max'] || $score < $rating['min']) {
                            //请输入正确的分值
                            $errorMsg = lang('message', 'thread_rate_range_invalid');
                            $this->_renderTemplates($tid, $pid, $errorMsg);
                            exit;
                        } else {
                            $creditsarray[$id] = $score;
                            if ($rating['isself']) {
                                $sub_self_credit[$id] = -abs($score);
                            }
                            $rate += $score;
                            $ratetimes += ceil(max(abs($rating['min']), abs($rating['max'])) / 5);
                        }
                    } else {
                        //抱歉,24 小时评分数超过限制
                        $errorMsg = lang('message', 'thread_rate_ctrl');
                        $this->_renderTemplates($tid, $pid, $errorMsg);
                        exit;
                    }
                }
            }
            if (!$creditsarray) {
                //请输入正确的分值
                $errorMsg = lang('message', 'thread_rate_range_invalid');
                $this->_renderTemplates($tid, $pid, $errorMsg);
                exit;
            }
            updatemembercount($post['authorid'], $creditsarray, 1, 'PRC', $_GET['pid']);
            if (!empty($sub_self_credit)) {
                updatemembercount($_G['uid'], $sub_self_credit, 1, 'RSC', $_GET['pid']);
            }
            C::t('forum_post')->increase_rate_by_pid('tid:' . $_G['tid'], $_GET['pid'], $rate, $ratetimes);
            if ($post['first']) {
                $threadrate = intval(@($post['rate'] + $rate) / abs($post['rate'] + $rate));
                C::t('forum_thread')->update($_G['tid'], array('rate' => $threadrate));
            }
            require_once libfile('function/discuzcode');
            $sqlvalues = $comma = '';
            $sqlreason = censor(trim($_GET['reason']));
            $sqlreason = cutstr(dhtmlspecialchars($sqlreason), 40, '.');
            foreach ($creditsarray as $id => $addcredits) {
                $insertarr = array('pid' => $_GET['pid'], 'uid' => $_G['uid'], 'username' => $_G['username'], 'extcredits' => $id, 'dateline' => $_G['timestamp'], 'score' => $addcredits, 'reason' => $sqlreason);
                C::t('forum_ratelog')->insert($insertarr);
            }
            include_once libfile('function/post');
            $_G['forum']['threadcaches'] && @deletethreadcaches($_G['tid']);
            $reason = dhtmlspecialchars(censor(trim($reason)));
            //对是否通知作者做的一些初始工作
            if ($_G['group']['resasonpm'] == 2 || $_G['group']['reasonpm'] == 3 || !empty($_GET['sendreasonpm'])) {
                $forumname = strip_tags($_G['forum']['name']);
                $sendreasonpm = 1;
            } else {
                $sendreasonpm = 0;
            }
            if ($sendreasonpm) {
                $ratescore = $slash = '';
                foreach ($creditsarray as $id => $addcredits) {
                    $ratescore .= $slash . $_G['setting']['extcredits'][$id]['title'] . ' ' . ($addcredits > 0 ? '+' . $addcredits : $addcredits) . ' ' . $_G['setting']['extcredits'][$id]['unit'];
                    $slash = ' / ';
                }
                sendreasonpm($post, 'rate_reason', array('tid' => $thread['tid'], 'pid' => $_GET['pid'], 'subject' => $thread['subject'], 'ratescore' => $ratescore, 'reason' => $reason, 'from_id' => 0, 'from_idtype' => 'rate'));
            }
            $logs = array();
            foreach ($creditsarray as $id => $addcredits) {
                $logs[] = dhtmlspecialchars("{$_G['timestamp']}\t{$_G[member][username]}\t{$_G['adminid']}\t{$post['author']}\t{$id}\t{$addcredits}\t{$_G['tid']}\t{$thread['subject']}\t{$reason}");
            }
            update_threadpartake($post['tid']);
            C::t('forum_postcache')->delete($_GET['pid']);
            writelog('ratelog', $logs);
            //评分成功
            $this->getController()->redirect(WebUtils::createUrl_oldVersion('index/returnmobileview'));
        }
        $this->_renderTemplates($tid, $pid);
    }
Ejemplo n.º 11
0
                    cpmsg('threads_forumstick_targets_empty', "action=threads&operation=forumstick&do=add", 'error');
                }
                $stickthread = C::t('forum_thread')->fetch($forumstick_tid);
                $stickthread_tmp = array('subject' => $stickthread['subject'], 'tid' => $forumstick_tid, 'forums' => $_GET['forumsticktargets']);
                $forumstickthreads[$forumstick_tid] = $stickthread_tmp;
                C::t('forum_thread')->update($forumstick_tid, array('displayorder' => 4));
            } elseif ($do == 'edit') {
                if (empty($_GET['forumsticktargets'])) {
                    cpmsg('threads_forumstick_targets_empty', "action=threads&operation=forumstick&do=edit&id={$_GET['id']}", 'error');
                }
                $forumstickthreads[$_GET['id']]['forums'] = $_GET['forumsticktargets'];
                C::t('forum_thread')->update($forumstick_tid, array('displayorder' => 4));
            }
            C::t('common_setting')->update('forumstickthreads', $forumstickthreads);
            updatecache(array('forumstick', 'setting'));
            cpmsg('threads_forumstick_' . $do . '_succeed', "action=threads&operation=forumstick", 'succeed');
        }
    }
    $_GET['tids'] && deletethreadcaches($_GET['tids']);
    $cpmsg = $cpmsg ? "alert('{$cpmsg}');" : '';
    echo '<script type="text/JavaScript">' . $cpmsg . 'if(parent.$(\'threadforum\')) parent.$(\'threadforum\').searchsubmit.click();</script>';
}
function delete_position($select)
{
    if (empty($select) || !is_array($select)) {
        cpmsg('select_thread_empty', '', 'error');
    }
    $tids = dimplode($select);
    C::t('forum_postposition')->delete_by_tid($select);
    C::t('forum_thread')->update_status_by_tid($tids, '1111111111111110', '&');
}