diff options
author | Nils Adermann <naderman@naderman.de> | 2006-03-18 10:54:14 +0000 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2006-03-18 10:54:14 +0000 |
commit | 9cd89343a297ff594d1a74459d1c9059e24c501f (patch) | |
tree | 7d2e05f26cb6643e8facb566dc0c21e884237a2d /phpBB/includes | |
parent | ca1e11dc2a165542098819b6d722afd8eb05ab90 (diff) | |
download | forums-9cd89343a297ff594d1a74459d1c9059e24c501f.tar forums-9cd89343a297ff594d1a74459d1c9059e24c501f.tar.gz forums-9cd89343a297ff594d1a74459d1c9059e24c501f.tar.bz2 forums-9cd89343a297ff594d1a74459d1c9059e24c501f.tar.xz forums-9cd89343a297ff594d1a74459d1c9059e24c501f.zip |
- replaced mcp reports system with a simplified version
- fixed links to mcp_reports
git-svn-id: file:///svn/phpbb/trunk@5649 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes')
-rw-r--r-- | phpBB/includes/mcp/mcp_front.php | 6 | ||||
-rw-r--r-- | phpBB/includes/mcp/mcp_queue.php | 7 | ||||
-rwxr-xr-x | phpBB/includes/mcp/mcp_reports.php | 970 |
3 files changed, 455 insertions, 528 deletions
diff --git a/phpBB/includes/mcp/mcp_front.php b/phpBB/includes/mcp/mcp_front.php index 372ccc023f..dd3efd4a71 100644 --- a/phpBB/includes/mcp/mcp_front.php +++ b/phpBB/includes/mcp/mcp_front.php @@ -136,9 +136,9 @@ function mcp_front_view($id, $mode, $action) while ($row = $db->sql_fetchrow($result)) { $template->assign_block_vars('report', array( - 'U_POST_DETAILS'=> $url . '&p=' . $row['post_id'] . '&mode=post_details', - 'U_MCP_FORUM' => ($row['forum_id']) ? $url . '&f=' . $row['forum_id'] . '&mode=forum_view' : '', - 'U_MCP_TOPIC' => $url . '&t=' . $row['topic_id'] . '&mode=topic_view', + 'U_POST_DETAILS'=> $url . '&p=' . $row['post_id'] . "&i=reports&mode=report_details", + 'U_MCP_FORUM' => ($row['forum_id']) ? $url . '&f=' . $row['forum_id'] . "&i=$id&mode=forum_view" : '', + 'U_MCP_TOPIC' => $url . '&t=' . $row['topic_id'] . "&i=$id&mode=topic_view", 'U_FORUM' => ($row['forum_id']) ? "{$phpbb_root_path}viewforum.$phpEx$SID&f=" . $row['forum_id'] : '', 'U_TOPIC' => "{$phpbb_root_path}viewtopic.$phpEx$SID&f=" . $row['forum_id'] . '&t=' . $row['topic_id'], 'U_REPORTER' => ($row['user_id'] == ANONYMOUS) ? '' : "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&u=" . $row['user_id'], diff --git a/phpBB/includes/mcp/mcp_queue.php b/phpBB/includes/mcp/mcp_queue.php index 8929520851..ac35ecfe3b 100644 --- a/phpBB/includes/mcp/mcp_queue.php +++ b/phpBB/includes/mcp/mcp_queue.php @@ -106,7 +106,7 @@ class mcp_queue $template->assign_vars(array( 'S_MCP_QUEUE' => true, 'S_APPROVE_ACTION' => "{$phpbb_root_path}mcp.$phpEx$SID&i=queue&p=$post_id&f=$forum_id", - 'S_CAN_VIEWIP' => $auth->acl_get('m_info', $post_info['forum_id']), + 'S_CAN_VIEWIP' => $auth->acl_get('m_ip', $post_info['forum_id']), 'S_POST_REPORTED' => $post_info['post_reported'], 'S_POST_UNAPPROVED' => !$post_info['post_approved'], 'S_POST_LOCKED' => $post_info['post_edit_locked'], @@ -117,7 +117,7 @@ class mcp_queue 'U_MCP_WARN_USER' => "{$phpbb_root_path}mcp.$phpEx$SID&i=warn&mode=warn_user&u=" . $post_info['user_id'], 'U_EDIT' => ($auth->acl_get('m_edit', $post_info['forum_id'])) ? "{$phpbb_root_path}posting.$phpEx$SID&mode=edit&f={$post_info['forum_id']}&p={$post_info['post_id']}" : '', - 'RETURN_QUEUE' => sprintf($user->lang['RETURN_QUEUE'], "<a href=\"{$phpbb_root_path}mcp.$phpEx$SID&i=queue" . (($topic_id) ? '&mode=unapproved_topics' : '&mode=unapproved_posts') . "\">", '</a>'), + 'RETURN_QUEUE' => sprintf($user->lang['RETURN_QUEUE'], "<a href=\"{$phpbb_root_path}mcp.$phpEx$SID&i=queue" . (($topic_id) ? '&mode=unapproved_topics' : '&mode=unapproved_posts') . "&start=$start\">", '</a>'), 'REPORTED_IMG' => $user->img('icon_reported', $user->lang['POST_REPORTED']), 'UNAPPROVED_IMG' => $user->img('icon_unapproved', $user->lang['POST_UNAPPROVED']), 'EDIT_IMG' => $user->img('btn_edit', $user->lang['EDIT_POST']), @@ -269,7 +269,7 @@ class mcp_queue // Q: Why accessing the topic by a post_id instead of its topic_id? // A: To prevent the post from being hidden because of wrong encoding or different charset 'U_VIEWTOPIC' => "{$phpbb_root_path}viewtopic.$phpEx$SID&f=" . $row['forum_id'] . '&p=' . $row['post_id'] . (($mode == 'unapproved_posts') ? '#p' . $row['post_id'] : ''), - 'U_VIEW_DETAILS'=> "{$phpbb_root_path}mcp.$phpEx$SID&i=queue&start=$start&mode=approve_details&f={$forum_id}&p={$row['post_id']}", + 'U_VIEW_DETAILS'=> "{$phpbb_root_path}mcp.$phpEx$SID&i=queue&start=$start&mode=approve_details&f={$forum_id}&p={$row['post_id']}" . (($mode == 'unapproved_topics') ? "&t={$row['topic_id']}" : '' ), 'U_VIEWPROFILE' => ($row['poster_id'] != ANONYMOUS) ? "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&u={$row['poster_id']}" : '', 'FORUM_NAME' => $row['forum_name'], @@ -732,7 +732,6 @@ class mcp_queue_info 'approve_details' => array('title' => 'MCP_QUEUE_APPROVE_DETAILS', 'auth' => 'acl_m_approve || aclf_m_approve'), 'unapproved_topics' => array('title' => 'MCP_QUEUE_UNAPPROVED_TOPICS', 'auth' => 'acl_m_approve || aclf_m_approve'), 'unapproved_posts' => array('title' => 'MCP_QUEUE_UNAPPROVED_POSTS', 'auth' => 'acl_m_approve || aclf_m_approve'), - 'reports' => array('title' => 'MCP_QUEUE_REPORTS', 'auth' => 'acl_m_approve'), ), ); } diff --git a/phpBB/includes/mcp/mcp_reports.php b/phpBB/includes/mcp/mcp_reports.php index 7a864a4618..a35c3980d5 100755 --- a/phpBB/includes/mcp/mcp_reports.php +++ b/phpBB/includes/mcp/mcp_reports.php @@ -1,62 +1,23 @@ <?php -// ------------------------------------------------------------- -// -// $Id$ -// -// FILENAME : mcp_reports.php -// STARTED : Fri Nov 26, 2004 -// COPYRIGHT : © 2004 phpBB Group -// WWW : http://www.phpbb.com/ -// LICENCE : GPL vs2.0 [ see /docs/COPYING ] -// -// ------------------------------------------------------------- - - -// TODO: Would be nice if a moderator could 'checkout' a topic with reports so -// other moderators know that this topic is already being handled. - -/** -* @package module_install +/** +* +* @package mcp +* @version $Id$ +* @copyright (c) 2005 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* */ -class mcp_reports_info -{ - function module() - { - return array( - 'filename' => 'mcp_reports', - 'title' => 'MCP_REPORTS', - 'version' => '1.0.0', - 'modes' => array( - 'front' => array('title' => 'MCP_REPORTS_FRONT', 'auth' => 'acl_m_'), - 'reports_yours' => array('title' => 'MCP_REPORTS_YOURS', 'auth' => 'acl_m_'), - 'reports_new' => array('title' => 'MCP_REPORTS_NEW', 'auth' => 'acl_m_'), - 'reports_topics' => array('title' => 'MCP_REPORTS_TOPICS', 'auth' => 'acl_m_'), - 'reports_view_topic' => array('title' => 'MCP_REPORTS_VIEW_TOPIC', 'auth' => 'acl_m_'), - 'reports_view' => array('title' => 'MCP_REPORTS_VIEW', 'auth' => 'acl_m_') - ), - ); - } - - function install() - { - } - - function uninstall() - { - } -} - /** * @package mcp -* mcp_report -* Handle reports about users or posts sent in by users +* mcp_reports +* Handling the reports queue */ class mcp_reports { var $p_master; - + function mcp_main(&$p_master) { $this->p_master = &$p_master; @@ -65,527 +26,494 @@ class mcp_reports function main($id, $mode) { global $auth, $db, $user, $template; - global $config, $phpbb_root_path, $phpEx, $SID; + global $config, $phpbb_root_path, $phpEx, $SID, $action; - $action = request_var('action', array('' => '')); - - switch ($mode) - { - case 'reports_yours': - $this->mcp_reports_list($id, $mode); - break; - case 'reports_new': - $this->mcp_reports_list($id, $mode); - break; - case 'reports_topics': - $this->mcp_reports_list($id, $mode); - break; - case 'reports_view_topic': - // View reports for one topic - $this->mcp_reports_list($id, $mode); - //$this->tpl_name = 'mcp_report_topic'; - break; - case 'reports_view': - // View one report (not attached to a topic) - $this->mcp_report_view($id, $mode); - break; - default: - // Main page with an overview - $this->mcp_reports_list($id, $mode); - break; - } - } + include_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx); - // Overview of available reports - function mcp_reports_list($id, $mode) - { - global $auth, $db, $user, $template; - global $config, $phpbb_root_path, $phpEx, $SID; - $forum_id = request_var('f', 0); - $topic_id = request_var('t', 0); $start = request_var('start', 0); - - // Show report details for a specific topic if a topic has been selected. - if($topic_id != 0) - { - return $this->mcp_report_view('topic', $topic_id); - } - - $forum_info = array(); - - $forum_list_report = get_forum_list('m_', false, true); - - // Show all reports that this user is allowed to view or only the - // reports in one specific forum? - if ($mode == 'overview' || !$forum_id) - { - $forum_list = array(); - foreach ($forum_list_report as $row) - { - $forum_list[] = $row['forum_id']; - } - - if (!$forum_list = implode(', ', $forum_list)) - { - trigger_error('NOT_MODERATOR'); - } - - $sql = 'SELECT SUM(forum_topics) as sum_forum_topics - FROM ' . FORUMS_TABLE . " - WHERE forum_id IN ($forum_list)"; - $result = $db->sql_query($sql); - $forum_info['forum_topics'] = (int) $db->sql_fetchfield('sum_forum_topics', 0, $result); - $db->sql_freeresult($result); - } - else - { - $forum_info = get_forum_data(array($forum_id), 'm_approve'); - - if (!sizeof($forum_info)) - { - trigger_error('NOT_MODERATOR'); - } - - $forum_info = $forum_info[$forum_id]; - $forum_list = $forum_id; - } - - $forum_options = '<option value="0"' . (($forum_id == 0) ? ' selected="selected"' : '') . '>' . $user->lang['ALL_FORUMS'] . '</option>'; - foreach ($forum_list_report as $row) - { - $forum_options .= '<option value="' . $row['forum_id'] . '"' . (($forum_id == $row['forum_id']) ? ' selected="selected"' : '') . '>' . $row['forum_name'] . '</option>'; - } - - // Note: this query needs to be made compatible with non-MySQL DBMs - mcp_sorting('reports', $sort_days, $sort_key, $sort_dir, $sort_by_sql, $sort_order_sql, $total, $forum_id); - $forum_topics = ($total == -1) ? $forum_info['forum_topics'] : $total; - $limit_time_sql = ($sort_days) ? 'AND t.topic_last_post_time >= ' . (time() - ($sort_days * 86400)) : ''; - $sql = 'SELECT count(*) as report_count, r.*, p.post_id, p.post_subject, u.username, t.topic_id, t.topic_title, f.forum_id, f.forum_name - FROM ' . REPORTS_TABLE . ' r, ' . REASONS_TABLE . ' rr,' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . USERS_TABLE . ' u - LEFT JOIN ' . FORUMS_TABLE . ' f ON f.forum_id = p.forum_id - WHERE - r.report_status = 0 - AND r.post_id = p.post_id - AND r.reason_id = rr.reason_id - AND p.topic_id = t.topic_id - AND r.user_id = u.user_id - AND t.topic_reported = 1 - AND p.forum_id IN (' . (is_array($forum_list) ? implode(', ', $forum_list) : $forum_list) . ") - GROUP BY topic_id - ORDER BY $sort_order_sql"; - $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start); - - while ($row = $db->sql_fetchrow($result)) + + switch ($action) { - if ($row['poster_id'] == ANONYMOUS) - { - $poster = (!empty($row['post_username'])) ? $row['post_username'] : $user->lang['GUEST']; - } - else - { - $poster = $row['username']; - } - - $s_checkbox = '<input type="checkbox" name="post_id_list[]" value="' . $row['post_id'] . '" />'; - $template->assign_block_vars('report', array( - 'U_FORUM' => "mcp.$phpEx$SID&i=report&mode=&f={$row['forum_id']}", - // Q: Why accessing the topic by a post_id instead of its topic_id? - // A: To prevent the post from being hidden because of wrong encoding or different charset - 'U_REPORT_TOPIC' => "mcp.$phpEx$SID&i=report&mode=report_view_topic&t={$row['topic_id']}", - 'U_VIEW_DETAILS'=> "mcp.$phpEx$SID&i=queue&start=$start&mode=approve_details&f={$forum_id}&p={$row['post_id']}", - 'U_VIEWPROFILE' => ($row['poster_id'] != ANONYMOUS) ? "memberlist.$phpEx$SID&mode=viewprofile&u={$row['poster_id']}" : '', - - 'REPORT_COUNT' => $row['report_count'], - 'FORUM_NAME' => $row['forum_name'], - 'TOPIC_TITLE' => $row['topic_title'], - 'POSTER' => $poster, - 'REPORT_TIME' => $user->format_date($row['report_time']), - 'S_CHECKBOX' => $s_checkbox) - ); + case 'close': + case 'delete': + include_once($phpbb_root_path . 'includes/functions_messenger.'.$phpEx); + + $post_id_list = request_var('post_id_list', array(0)); + + if (!sizeof($post_id_list)) + { + trigger_error('NO_POST_SELECTED'); + } + + close_report($post_id_list, $mode, $action); + + break; } - $db->sql_freeresult($result); - - // Now display the page - $template->assign_vars(array( - 'L_DISPLAY_ITEMS' => ($mode == 'unapproved_posts') ? $user->lang['DISPLAY_POSTS'] : $user->lang['DISPLAY_TOPICS'], - 'S_FORUM_OPTIONS' => $forum_options) - ); - $this->tpl_name = 'mcp_reports_front'; - } - - // View the reports for one topic or view one topic. - function mcp_report_view($id, $mode) - { - global $phpbb_root_path, $config, $db, $phpEx; - global $user, $template, $auth; - //$this->tpl_name = 'mcp_reports'; - if(!isset($_POST['feedback_submit'])) + switch ($mode) { - // Show the reports. - $topic_id = request_var('t', 0); - if ($topic_id == 0) - { - trigger_error('NO_TOPIC_SELECTED'); - } - - $topic_info = get_topic_data($topic_id, 'm_'); - $topic_info = $topic_info[$topic_id]; - - $sql = "SELECT - r.report_id, r.report_time, r.report_text, r.report_status, - r.bbcode_uid as r_bbcode_uid, r.bbcode_bitfield as r_bbcode_bitfield, - rre.reply_id, rre.reply_text, ure_from.username as reply_from_username, - ure_to.username as reply_to_username, - p.post_id, p.topic_id, p.forum_id, p.post_time, p.post_subject, p.post_text, - p.bbcode_uid as p_bbcode_uid, p.bbcode_bitfield as p_bbcode_bitfield, - u1.user_id as reporter_user_id, u1.username as reporter_username, - u2.user_id as poster_user_id, u2.username as poster_username - FROM " . - REPORTS_TABLE . " r - LEFT JOIN " . REPORTS_REPLIES_TABLE . " rre USING (report_id) - LEFT JOIN " . USERS_TABLE . " ure_from ON (rre.from_user_id = ure_from.user_id) - LEFT JOIN " . USERS_TABLE . " ure_to ON (rre.to_user_id = ure_to.user_id), " . - POSTS_TABLE . " p, " . - USERS_TABLE . " u1, " . - USERS_TABLE . " u2 - WHERE - r.user_id = u1.user_id - AND r.post_id = p.post_id - AND p.poster_id = u2.user_id - AND p.topic_id = $topic_id - ORDER BY post_id DESC, report_id DESC, reply_id ASC"; - $result = $db->sql_query($sql); - - include_once($phpbb_root_path . 'includes/bbcode.'.$phpEx); - $old_post_id = 0; - $old_report_id = 0; - while ($row = $db->sql_fetchrow($result)) - { - if($old_report_id != $row['report_id']) + case 'report_details': + + $user->add_lang('posting'); + + $post_id = request_var('p', 0); + + $post_info = get_post_data(array($post_id), 'm_approve'); + + if (!sizeof($post_info)) + { + trigger_error('NO_POST_SELECTED'); + } + + $post_info = $post_info[$post_id]; + + $sql = 'SELECT r.user_id, r.report_closed, report_time, r.report_text, rr.reason_title, rr.reason_description, u.username + FROM ' . REPORTS_TABLE . ' r, ' . REASONS_TABLE . ' rr, ' . USERS_TABLE . " u + WHERE r.post_id = $post_id + AND rr.reason_id = r.reason_id + AND r.user_id = u.user_id"; + $result = $db->sql_query($sql); + + if (!($report = $db->sql_fetchrow($result))) + { + trigger_error('NO_POST_REPORT'); + } + + $db->sql_freeresult($result); + + $reason = array('title' => $report['reason_title'], 'description' => $report['reason_description']); + if (isset($user->lang['report_reasons']['TITLE'][strtoupper($reason['title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason['title'])])) + { + $reason['description'] = $user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason['title'])]; + $reason['title'] = $user->lang['report_reasons']['TITLE'][strtoupper($reason['title'])]; + } + + if (topic_review($post_info['topic_id'], $post_info['forum_id'], 'topic_review', 0, false)) + { + $template->assign_vars(array( + 'S_TOPIC_REVIEW' => true, + 'TOPIC_TITLE' => $post_info['topic_title']) + ); + } + + // Set some vars + $poster = ($post_info['user_colour']) ? '<span style="color:#' . $post_info['user_colour'] . '">' . $post_info['username'] . '</span>' : $post_info['username']; + + // Process message, leave it uncensored + $message = $post_info['post_text']; + if ($post_info['bbcode_bitfield']) + { + include_once($phpbb_root_path . 'includes/bbcode.'.$phpEx); + $bbcode = new bbcode($post_info['bbcode_bitfield']); + $bbcode->bbcode_second_pass($message, $post_info['bbcode_uid'], $post_info['bbcode_bitfield']); + } + $message = smiley_text($message); + + $template->assign_vars(array( + 'S_MCP_REPORT' => true, + 'S_CLOSE_ACTION' => "{$phpbb_root_path}mcp.$phpEx$SID&i=reports&p=$post_id&f=$forum_id", + 'S_CAN_VIEWIP' => $auth->acl_get('m_ip', $post_info['forum_id']), + 'S_POST_REPORTED' => $post_info['post_reported'], + 'S_POST_UNAPPROVED' => !$post_info['post_approved'], + 'S_POST_LOCKED' => $post_info['post_edit_locked'], + 'S_USER_NOTES' => $auth->acl_gets('m_', 'a_') ? true : false, + + 'U_VIEW_PROFILE' => "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&u=" . $post_info['user_id'], + 'U_MCP_USER_NOTES' => "{$phpbb_root_path}mcp.$phpEx$SID&i=notes&mode=user_notes&u=" . $post_info['user_id'], + 'U_MCP_WARN_USER' => "{$phpbb_root_path}mcp.$phpEx$SID&i=warn&mode=warn_user&u=" . $post_info['user_id'], + 'U_VIEW_REPORTER_PROFILE' => "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&u=" . $report['user_id'], + 'U_MCP_REPORTER_NOTES' => "{$phpbb_root_path}mcp.$phpEx$SID&i=notes&mode=user_notes&u=" . $report['user_id'], + 'U_MCP_WARN_REPORTER' => "{$phpbb_root_path}mcp.$phpEx$SID&i=warn&mode=warn_user&u=" . $report['user_id'], + 'U_EDIT' => ($auth->acl_get('m_edit', $post_info['forum_id'])) ? "{$phpbb_root_path}posting.$phpEx$SID&mode=edit&f={$post_info['forum_id']}&p={$post_info['post_id']}" : '', + + 'EDIT_IMG' => $user->img('btn_edit', $user->lang['EDIT_POST']), + + 'RETURN_REPORTS' => sprintf($user->lang['RETURN_REPORTS'], "<a href=\"{$phpbb_root_path}mcp.$phpEx$SID&i=reports" . (($post_info['post_reported']) ? '&mode=reports' : '&mode=reports_closed') . "&start=$start\">", '</a>'), + 'REPORTED_IMG' => $user->img('icon_reported', $user->lang['POST_REPORTED']), + 'REPORT_REASON_TITLE' => $reason['title'], + 'REPORT_REASON_DESCRIPTION' => $reason['description'], + 'REPORTER_NAME' => ($report['user_id'] == ANONYMOUS) ? $user->lang['GUEST'] : $report['username'], + 'REPORT_DATE' => $user->format_date($report['report_time']), + 'REPORT_TEXT' => $report['report_text'], + + 'UNAPPROVED_IMG' => $user->img('icon_unapproved', $user->lang['POST_UNAPPROVED']), + + 'POSTER_NAME' => $poster, + 'POST_PREVIEW' => $message, + 'POST_SUBJECT' => $post_info['post_subject'], + 'POST_DATE' => $user->format_date($post_info['post_time']), + 'POST_IP' => $post_info['poster_ip'], + 'POST_IPADDR' => @gethostbyaddr($post_info['poster_ip']), + 'POST_ID' => $post_info['post_id']) + ); + + $this->tpl_name = 'mcp_post'; + + break; + + case 'reports': + case 'reports_closed': + $topic_id = request_var('t', 0); + + $forum_info = array(); + $forum_list_reports = get_forum_list('m_report', false, true); /** @todo m_reports? **/ + + if ($topic_id) { - if($old_post_id != $row['post_id']) + $topic_info = get_topic_data(array($topic_id)); + + if (!sizeof($topic_info)) { - // Process message, leave it uncensored - $message = $row['post_text']; - if ($row['p_bbcode_bitfield']) - { - $bbcode = new bbcode($row['p_bbcode_bitfield']); - $bbcode->bbcode_second_pass($message, $row['p_bbcode_uid'], $row['p_bbcode_bitfield']); - } - $message = smiley_text($message); - - $template->assign_block_vars('postrow', array( - 'POST_ID' => $row['post_id'], - 'POST_SUBJECT' => $row['post_subject'], - 'POSTER_USER_ID' => $row['poster_user_id'], - 'POSTER_NAME' => $row['poster_username'], - 'U_POSTER_PROFILE' => ($row['poster_id'] != ANONYMOUS) ? "memberlist.$phpEx$SID&mode=viewprofile&u={$row['poster_id']}" : '', - 'POST_DATE' => $user->format_date($row['post_time']), - 'POST_PREVIEW' => $message, - 'U_APPROVE_ACTION' => "{$phpbb_root_path}mcp.$phpEx$SID&i=report&mode=topic", - 'U_EDIT' => ($auth->acl_get('m_edit', $row['forum_id'])) ? "{$phpbb_root_path}posting.$phpEx$SID&mode=edit&f={$row['forum_id']}&p={$row['post_id']}" : '', - 'U_VIEW' => "{$phpbb_root_path}viewtopic.$phpEx$SID&f={$row['forum_id']}&p={$row['post_id']}#{$row['post_id']}" - ) - ); - } // Start post row. - $old_post_id = $row['post_id']; - - // Process message, leave it uncensored - $message = $row['report_text']; - if ($row['r_bbcode_bitfield']) + trigger_error($user->lang['TOPIC_NOT_EXIST']); + } + + $topic_info = $topic_info[$topic_id]; + $forum_id = $topic_info['forum_id']; + } + + if (!$forum_id) + { + $forum_list = array(); + foreach ($forum_list_reports as $row) { - $bbcode = new bbcode($row['r_bbcode_bitfield']); - $bbcode->bbcode_second_pass($message, $row['r_bbcode_uid'], $row['r_bbcode_bitfield']); + $forum_list[] = $row['forum_id']; } - $message = smiley_text($message); - - $template->assign_block_vars('postrow.reportrow', array( - 'REPORT_ID' => $row['report_id'], - 'REPORT_TIME' => $user->format_date($row['report_time']), - 'REPORT_TEXT' => $message, - 'REPORT_STATUS' => $row['report_status'], - 'U_REPORTERPROFILE' => ($row['poster_id'] != ANONYMOUS) ? "memberlist.$phpEx$SID&mode=viewprofile&u={$row['reporter_user_id']}" : '', - 'REPORTER_USER_ID' => $row['reporter_user_id'], - 'REPORTER_USERNAME' => $row['reporter_username'], - 'POSTER_USER_ID' => $row['poster_user_id'], - 'POSTER_USERNAME' => $row['poster_username'], - ) - ); + + if (!$forum_list = implode(', ', $forum_list)) + { + trigger_error('NOT_MODERATOR'); + } + + $sql = 'SELECT SUM(forum_topics) as sum_forum_topics + FROM ' . FORUMS_TABLE . " + WHERE forum_id IN ($forum_list)"; + $result = $db->sql_query($sql); + $forum_info['forum_topics'] = (int) $db->sql_fetchfield('sum_forum_topics', 0, $result); + $db->sql_freeresult($result); + + } + else + { + $forum_info = get_forum_data(array($forum_id), 'm_report'); + + if (!sizeof($forum_info)) + { + trigger_error('NOT_MODERATOR'); + } + + $forum_info = $forum_info[$forum_id]; + $forum_list = $forum_id; } - $old_report_id = $row['report_id']; - if($row['reply_text'] != '') + $forum_options = '<option value="0"' . (($forum_id == 0) ? ' selected="selected"' : '') . '>' . $user->lang['ALL_FORUMS'] . '</option>'; + foreach ($forum_list_reports as $row) { - $template->assign_block_vars('postrow.reportrow.replyrow', array( - 'REPLY_ID' => $row['reply_id'], - 'REPLY_FROMUSERNAME' => $row['reply_from_username'], - 'REPLY_TOUSERNAME' => $row['reply_to_username'], - 'REPLY_TEXT' => $row['reply_text'] - )); + $forum_options .= '<option value="' . $row['forum_id'] . '"' . (($forum_id == $row['forum_id']) ? ' selected="selected"' : '') . '>' . $row['forum_name'] . '</option>'; } - } - $db->sql_freeresult($result); - - // Set some vars - $poster = ($post_info['user_colour']) ? '<span style="color:#' . $post_info['user_colour'] . '">' . $post_info['username'] . '</span>' : $post_info['username']; - - $template->assign_vars(array( - 'TOPIC_TITLE' => $topic_info['topic_title'], - 'U_TOPIC' => "viewtopic.$phpEx$SID&t={$topic_info['topic_id']}", - 'U_FEEDBACK_ACTION' => $_SERVER['REQUEST_URI'] - ) - ); - - $this->tpl_name = 'mcp_reports_topic'; - //$this->display($user->lang['MCP_QUEUE'], 'mcp_topicreports.html'); - } // No submit - else + mcp_sorting('reports', $sort_days, $sort_key, $sort_dir, $sort_by_sql, $sort_order_sql, $total, $forum_id, $topic_id); + $forum_topics = ($total == -1) ? $forum_info['forum_topics'] : $total; + $limit_time_sql = ($sort_days) ? 'AND t.topic_last_post_time >= ' . (time() - ($sort_days * 86400)) : ''; + + if ($mode == 'reports') + { + $report_state = 'AND p.post_reported = 1'; + } + else + { + $report_state = 'AND p.post_reported = 0 AND r.report_closed = 1'; + } + + $sql = 'SELECT p.post_id + FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . REPORTS_TABLE . ' r ' . (($sort_order_sql[0] == 'u') ? ', ' . USERS_TABLE . ' u' : '') . (($sort_order_sql[0] == 'r') ? ', ' . USERS_TABLE . ' ru' : '') . " + WHERE p.forum_id IN ($forum_list) + $report_state + AND r.post_id = p.post_id + " . (($sort_order_sql[0] == 'u') ? 'AND u.user_id = p.poster_id' : '') . " + " . (($sort_order_sql[0] == 'r') ? 'AND ru.user_id = p.poster_id' : '') . " + " . (($topic_id) ? "AND p.topic_id = $topic_id" : '') . " + AND t.topic_id = p.topic_id + ORDER BY $sort_order_sql"; + $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start); + + $i = 0; + $post_ids = array(); + while ($row = $db->sql_fetchrow($result)) + { + $post_ids[] = $row['post_id']; + $row_num[$row['post_id']] = $i++; + } + + if (sizeof($post_ids)) + { + $sql = 'SELECT f.forum_id, f.forum_name, t.topic_id, t.topic_title, p.post_id, p.post_subject, p.post_username, p.poster_id, p.post_time, u.username, r.user_id as reporter_id, ru.username as reporter_name, r.report_time + FROM ' . POSTS_TABLE . ' p, ' . FORUMS_TABLE . ' f, ' . TOPICS_TABLE . ' t, ' . REPORTS_TABLE . ' r, ' . USERS_TABLE . ' u, ' . USERS_TABLE . " ru + WHERE p.post_id IN (" . implode(', ', $post_ids) . ") + AND t.topic_id = p.topic_id + AND r.post_id = p.post_id + AND f.forum_id = p.forum_id + AND u.user_id = p.poster_id + AND ru.user_id = r.user_id"; + + $result = $db->sql_query($sql); + $post_data = $rowset = array(); + while ($row = $db->sql_fetchrow($result)) + { + $post_data[$row['post_id']] = $row; + } + $db->sql_freeresult($result); + + foreach ($post_ids as $post_id) + { + $row = $post_data[$post_id]; + + if ($row['poster_id'] == ANONYMOUS) + { + $poster = (!empty($row['post_username'])) ? $row['post_username'] : $user->lang['GUEST']; + } + else + { + $poster = $row['username']; + } + + $s_checkbox = '<input type="checkbox" name="post_id_list[]" value="' . $row['post_id'] . '" />'; + + $template->assign_block_vars('postrow', array( + 'U_VIEWFORUM' => "{$phpbb_root_path}viewforum.$phpEx$SID&f=" . $row['forum_id'], + 'U_VIEWTOPIC' => "{$phpbb_root_path}viewtopic.$phpEx$SID&f=" . $row['forum_id'] . '&p=' . $row['post_id'] . '#p' . $row['post_id'], + 'U_VIEW_DETAILS' => "{$phpbb_root_path}mcp.$phpEx$SID&i=reports&start=$start&mode=report_details&f={$forum_id}&p={$row['post_id']}", + 'U_VIEW_POSTER_PROFILE' => ($row['poster_id'] != ANONYMOUS) ? "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&u={$row['poster_id']}" : '', + 'U_VIEW_REPORTER_PROFILE' => ($row['reporter_id'] != ANONYMOUS) ? "{$phpbb_root_path}memberlist.$phpEx$SID&mode=viewprofile&u={$row['reporter_id']}" : '', + + 'S_CHECKBOX' => $s_checkbox, + 'S_CLOSED' => ($mode == 'reports_closed') ? true : false, + + 'FORUM_NAME' => $row['forum_name'], + 'POSTER' => $poster, + 'POST_SUBJECT' => $row['post_subject'], + 'POST_TIME' => $user->format_date($row['post_time']), + 'REPORTER' => ($row['reporter_id'] == ANONYMOUS) ? $user->lang['GUEST'] : $row['reporter_name'], + 'REPORT_TIME' => $user->format_date($row['report_time']), + 'TOPIC_TITLE' => $row['topic_title']) + ); + } + unset($post_data, $post_ids, $row); + } + + // Now display the page + $template->assign_vars(array( + 'L_DISPLAY_ITEMS' => $user->lang['DISPLAY_POSTS'], + 'S_MCP_ACTION' => "{$phpbb_root_path}mcp.$phpEx$SID&i=$id&mode=$mode&t=0", + 'S_FORUM_OPTIONS' => $forum_options) + ); + + $this->tpl_name = 'mcp_reports'; + break; + } + } +} + +/** +* Closes a report +*/ +function close_report($post_id_list, $mode, $action) +{ + global $db, $template, $user, $config; + global $phpEx, $phpbb_root_path, $SID; + + if (!($forum_id = check_ids($post_id_list, POSTS_TABLE, 'post_id', 'm_report'))) + { + trigger_error('NOT_AUTHORIZED'); + } + + $redirect = request_var('redirect', $user->data['session_page']); + $success_msg = ''; + + $s_hidden_fields = build_hidden_fields(array( + 'i' => 'reports', + 'mode' => $mode, + 'post_id_list' => $post_id_list, + 'f' => $forum_id, + 'action' => $action, + 'redirect' => $redirect) + ); + + if (confirm_box(true)) + { + $post_info = get_post_data($post_id_list, 'm_report'); + + $sql = 'SELECT r.post_id, r.report_closed, r.user_id, r.user_notify, u.username, u.user_email, u.user_jabber, u.user_lang, u.user_notify_type + FROM ' . REPORTS_TABLE . ' r, ' . USERS_TABLE . ' u + WHERE r.post_id IN (' . implode(',', array_keys($post_info)) . ') + ' . (($action == 'close') ? 'AND r.report_closed = 0' : '') . ' + AND r.user_id = u.user_id'; + $result = $db->sql_query($sql); + + $reports = array(); + while ($report = $db->sql_fetchrow($result)) { - // Send feedback and close selected reports - $selected_reports = request_var('sendfeedback', array('0'=>'0')); - $report_close = request_var('feedback_close', ''); - $report_feedback = request_var('feedback_text', ''); - - $post_ids = array(); - foreach($selected_reports as $key => $value) - { - $report_ids[] = $value; - } - - if(count($report_ids) == 0) + $reports[$report['post_id']] = $report; + } + + $db->sql_freeresult($result); + + $close_report_posts = array(); + $close_report_topics = array(); + $notify_reporters = array(); + foreach ($post_info as $post_id => $post_data) + { + if (isset($reports[$post_id])) { - // TODO: i18n - trigger_error('No reports selected.'); + $close_report_posts[] = $post_id; + $close_report_topics[] = $post_data['topic_id']; + + if ($reports[$post_id]['user_notify'] && !$reports[$post_id]['report_closed']) + { + $notify_reporters[$post_id] = $reports[$post_id]; + } } - - $sql = "SELECT - r.report_id, r.user_id, r.reason_id, r.post_id, r.report_text, - u.username, u.user_email, u.user_jabber, u.user_lang, u.user_notify_type, u.user_options, - rr.reason_name, rr.reason_description, - p.post_id, p.post_subject, - t.topic_title, t.forum_id - FROM " . REPORTS_TABLE . " r, " . - REASONS_TABLE . " rr, " . - USERS_TABLE . " u, " . - POSTS_TABLE . " p, " . - TOPICS_TABLE . " t - WHERE - r.reason_id = rr.reason_id - AND r.user_id = u.user_id - AND r.post_id = p.post_id - AND p.topic_id = t.topic_id - AND report_id IN (" . implode(', ', $report_ids) . ")"; + } + + if (sizeof($close_report_posts)) + { + $close_report_topics = array_unique($close_report_topics); + + // Get a list of topics that still contain reported posts + $sql = 'SELECT DISTINCT t.topic_id + FROM ' . TOPICS_TABLE . ' t, ' . POSTS_TABLE . ' p + WHERE t.topic_id IN (' . implode(', ', $close_report_topics) . ') + AND p.post_reported = 1 + AND p.post_id NOT IN (' . implode(', ', $close_report_posts) . ') + AND t.topic_id = p.topic_id'; $result = $db->sql_query($sql); - - while($row = $db->sql_fetchrow($result)) - { - $feedback_data[$row['user_id']] = array( - 'name' => $row['username'], - 'email' => $row['user_email'], - 'jabber'=> $row['user_jabber'], - 'lang' => $row['user_lang'], - 'notify_type' => $row['user_notify_type'], - 'pm' => $user->optionget('report_pm_notify', $row['user_options']), - 'report_id' => $row['report_id'], - 'reporter' => $row['username'], - 'moderator' => $user->data['username'], - 'moderator_id' => $user->data['user_id'], - 'reason' => $row['reason_desc'], - 'report_feedback' => $report_feedback, - 'text' => $row['report_text'], - 'subject' => $row['topic_title'], - 'view_post' => "viewtopic.$phpEx?f={$row['forum_id']}&t={$row['topic_id']}&p={$row['post_id']}&#{$row['post_id']}" - - ); - - $reported_posts[$row['post_id']]++; - - } - - // Only send feedback if there is feedback to send - if($report_feedback != '') + + $keep_report_topics = array(); + while ($row = $db->sql_fetchrow($result)) { - $this->report_feedback($feedback_data); + $keep_report_topics[] = $row['topic_id']; } - - // See if we need to close the report, update notifications in viewforum/topic - - // Start transaction + + $close_report_topics = array_diff($close_report_topics, $keep_report_topics); + unset($keep_report_topics); + $db->sql_transaction('begin'); - - if ($report_close) - { - // Close the reports - $sql = 'UPDATE ' . REPORTS_TABLE . ' - SET report_status = ' . REPORT_CLOSED . ' - WHERE report_id IN (' . implode(', ', $report_ids) . ')'; - $db->sql_query($sql); - } - - // TODO: Should we remove the notification in viewforum/topic after feedback has been added to a report? Or should we introduce a 'report in progress' icon for viewforum/topic? - // Figure out what posts are without open reports after this update. - $sql = 'SELECT r.post_id, p.topic_id, sum(IF(report_status=1, 0, 1)) as open_reports - FROM ' . REPORTS_TABLE . ' r - LEFT JOIN ' . POSTS_TABLE . ' p USING (post_id) - WHERE r.post_id IN (' . implode(', ', array_keys($reported_posts)) . ') - GROUP BY r.post_id - HAVING open_reports = 0'; - $result = $db->sql_query($sql); - while($row = $db->sql_fetchrow($result)) + + if ($action == 'close') { - $resolved_posts[] = $row['post_id']; - $resolved_topics[] = $row['topic_id']; + $sql = 'UPDATE ' . REPORTS_TABLE . ' + SET report_closed = 1 + WHERE post_id IN (' . implode(', ', $close_report_posts) . ')'; } - - // Mark those posts as resolved - if(!empty($resolved_posts)) + else { - $sql = 'UPDATE ' . POSTS_TABLE . ' SET - post_reported = 0 - WHERE post_id IN (' . implode(', ', $resolved_posts) . ')'; - $db->sql_query($sql); - - // Mark topic as resolved because a moderator has taken a look at it. - $sql = 'UPDATE ' . TOPICS_TABLE . ' SET - topic_reported = 0 - WHERE topic_id IN (' . implode(', ', $resolved_topics) . ')'; - $db->sql_query($sql); + $sql = 'DELETE FROM ' . REPORTS_TABLE . ' + WHERE post_id IN (' . implode(', ', $close_report_posts) . ')'; } - - // End transaction - $db->sql_transaction('commit'); - - // Say something nice to the moderator - trigger_error('These reports have been closed. Thank you :)<br /> <a href="'.$_SERVER['REQUEST_URI'].'">return</a>'); - - - } // The form was submitted - } - - // ---------------------------------------------------------------------------- - - // Reply to reports and notify reporters of this event. - function report_feedback($data) - { - global $config, $phpbb_root_path, $phpEx; - global $user, $db; + $db->sql_query($sql); - - foreach ($data as $user_id => $reply_row) - { - // TODO: Include a subject? - $sql_data = array( - 'report_id' => $reply_row['report_id'], - 'reply_time' => time(), - 'reply_text' => $reply_row['report_feedback'], - 'from_user_id' => $reply_row['moderator_id'], - 'to_user_id' => $user_id - ); - $db->sql_query('INSERT INTO ' . REPORTS_REPLIES_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_data)); + $sql = 'UPDATE ' . POSTS_TABLE . ' + SET post_reported = 0 + WHERE post_id IN (' . implode(', ', $close_report_posts) . ')'; + $db->sql_query($sql); + + $sql = 'UPDATE ' . TOPICS_TABLE . ' + SET topic_reported = 0 + WHERE topic_id IN (' . implode(', ', $close_report_topics) . ')'; + $db->sql_query($sql); + + $db->sql_transaction('commit'); } - - // Notify the recipient of this reply - include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx); - include_once($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx); - $messenger = new messenger(); + unset($close_report_posts, $close_report_topics); - $email_sig = str_replace('<br />', "\n", "-- \n" . $config['board_email_sig']); - $email_template = 'report_feedback'; + $messenger = new messenger(); - foreach ($data as $user_id => $notify_row) + // Notify reporters + if (sizeof($notify_reporters)) { - // Send notification by email - if (!$notify_row['pm']) + $email_sig = str_replace('<br />', "\n", "-- \n" . $config['board_email_sig']); + + foreach ($notify_reporters as $post_id => $reporter) { - $messenger->to($notify_row['email'], $notify_row['name']); - $messenger->im($notify_row['jabber'], $notify_row['name']); - $messenger->replyto($config['board_email']); + if ($reporter['user_id'] == ANONYMOUS) + { + continue; + } - $messenger->template($email_template, $notify_row['lang']); + $messenger->template('report_' . $action . 'd', $reporter['user_lang']); + + $messenger->replyto($config['board_email']); + $messenger->to($reporter['user_email'], $reporter['username']); + $messenger->im($reporter['user_jabber'], $reporter['username']); $messenger->assign_vars(array( 'EMAIL_SIG' => $email_sig, 'SITENAME' => $config['sitename'], - 'USERNAME' => $notify_row['name'], - 'SUBJECT' => $notify_row['subject'], - 'REPORTER' => $notify_row['reporter'], - 'MODERATOR' => $notify_row['moderator'], - - 'REPORT_REASON' => $notify_row['reason'], - 'REPORT_TEXT' => $notify_row['text'], - 'REPORT_FEEDBACK' => $notify_row['report_feedback'], - - 'U_VIEW_POST' => generate_board_url() . '/' . $notify_row['view_post']) + 'USERNAME' => $reporter['username'], + 'CLOSER_NAME' => $user->data['username'], + 'POST_SUBJECT' => censor_text($post_info[$post_id]['post_subject']), + 'TOPIC_TITLE' => censor_text($post_info[$post_id]['topic_title'])) ); - $messenger->send($notify_row['notify_type']); + $messenger->send($reporter['user_notify_type']); $messenger->reset(); - //print "mail to " . $notify_row['email'] . "({$notify_row['notify_type']})"; - - if ($messenger->queue) - { - $messenger->queue->save(); - } } - else - { - // Use messenger for getting the correct message, we use the email template - $messenger->template($email_template, $notify_row['lang']); - $messenger->assign_vars(array( - 'EMAIL_SIG' => $email_sig, - 'SITENAME' => $config['sitename'], - 'USERNAME' => $notify_row['name'], - 'SUBJECT' => $notify_row['subject'], - 'REPORTER' => $notify_row['reporter'], - 'MODERATOR' => $notify_row['moderator'], - - 'REPORT_REASON' => $notify_row['reason'], - 'REPORT_TEXT' => $notify_row['text'], - 'REPORT_FEEDBACK' => $notify_row['report_feedback'], - - 'U_VIEW_POST' => generate_board_url() . '/' . $notify_row['view_post']) - ); + $messenger->save_queue(); + } + unset($notify_reporters, $post_info); - // Parse message, don't send it. - $messenger->send(false, true); - - // do not put in moderators outbox - $pm_data = array( - 'address_list' => array('u' => array($user_id => 'to')), - 'from_user_id' => $user->data['user_id'], - 'from_user_ip' => $user->data['user_ip'], - 'from_username' => $user->data['username'], - 'icon_id' => 0, - 'enable_bbcode' => 0, - 'enable_html' => 0, - 'enable_smilies' => 0, - 'enable_urls' => 1, - 'enable_sig' => 0, - 'message_md5' => md5($messenger->msg), - 'bbcode_bitfield' => 0, - 'bbcode_uid' => 0, - 'attachment_data' => array(), - 'filename_data' => array(), - 'message' => $messenger->msg - ); + $success_msg = (sizeof($post_id_list) == 1) ? 'REPORT_' . strtoupper($action) . 'D_SUCCESS' : 'REPORTS_' . strtoupper($action) . 'D_SUCCESS'; + } + else + { + confirm_box(false, $user->lang[strtoupper($action) . '_REPORT' . ((sizeof($post_id_list) == 1) ? '' : 'S') . '_CONFIRM'], $s_hidden_fields); + } - //function submit_pm($mode, $subject, &$data, $update_message, $put_in_outbox) - submit_pm('post', $notify_row['subject'], $pm_data, true, false); + $redirect = request_var('redirect', "index.$phpEx$SID"); - // Break the sending process... - $messenger->reset(); + if (strpos($redirect, '?') === false) + { + $redirect = substr_replace($redirect, ".$phpEx$SID&", strpos($redirect, '&'), 1); + } - //print "PM to " . $notify_row['name']; - } + if (!$success_msg) + { + redirect($redirect); + } + else + { + meta_refresh(3, "viewforum.$phpEx$SID&f=$forum_id"); + trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_FORUM'], "<a href=\"{$phpbb_root_path}viewforum.$phpEx$SID&f=" . $forum_id . '">', '</a>')); + } +} - // Add the feedback to the report - $message = $notify_row['report_feedback']; - } - unset($messenger); +/** +* @package module_install +*/ +class mcp_reports_info +{ + function module() + { + return array( + 'filename' => 'mcp_reports', + 'title' => 'MCP_REPORTS', + 'version' => '1.0.0', + 'modes' => array( + 'report_details' => array('title' => 'MCP_REPORT_DETAILS', 'auth' => 'acl_m_report || aclf_m_report'), + 'reports' => array('title' => 'MCP_REPORTS', 'auth' => 'acl_m_report ||aclf_m_report'), + 'reports_closed' => array('title' => 'MCP_REPORTS_CLOSED', 'auth' => 'acl_m_report || aclf_m_report'), + ), + ); + } + + function install() + { + } + + function uninstall() + { } } + ?>
\ No newline at end of file |