Users can report PMs to moderators which are then visible in a new MCP module

git-svn-id: file:///svn/phpbb/branches/phpBB-3_0_0@9814 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Nils Adermann 2009-07-21 20:59:11 +00:00
parent 0ee8d7ab15
commit 6e4a7c03d1
35 changed files with 1173 additions and 213 deletions

View file

@ -1332,6 +1332,7 @@ function get_schema_struct()
'message_edit_count' => array('USINT', 0),
'to_address' => array('TEXT_UNI', ''),
'bcc_address' => array('TEXT_UNI', ''),
'message_reported' => array('BOOL', 0),
),
'PRIMARY_KEY' => 'msg_id',
'KEYS' => array(
@ -1465,6 +1466,7 @@ function get_schema_struct()
'report_id' => array('UINT', NULL, 'auto_increment'),
'reason_id' => array('USINT', 0),
'post_id' => array('UINT', 0),
'pm_id' => array('UINT', 0),
'user_id' => array('UINT', 0),
'user_notify' => array('BOOL', 0),
'report_closed' => array('BOOL', 0),
@ -1472,6 +1474,10 @@ function get_schema_struct()
'report_text' => array('MTEXT_UNI', ''),
),
'PRIMARY_KEY' => 'report_id',
'KEYS' => array(
'post_id' => array('INDEX', 'post_id'),
'pm_id' => array('INDEX', 'pm_id'),
),
);
$schema_data['phpbb_reports_reasons'] = array(

View file

@ -217,6 +217,7 @@
<li>[Feature] Ability to delete warnings and keep warnings permanently (Bug #43375 - Patch by nickvergessen)</li>
<li>[Feature] Ability to empty a user's outbox from the user ACP quick tools.</li>
<li>[Feature] Ability to filter ACP / MCP logs</li>
<li>[Feature] Users can report PMs to moderators which are then visible in a new MCP module</li>
</ul>
<a name="v304"></a><h3>1.ii. Changes since 3.0.4</h3>

View file

@ -81,6 +81,7 @@ class acp_board
'allow_namechange' => array('lang' => 'ALLOW_NAME_CHANGE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'allow_attachments' => array('lang' => 'ALLOW_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'allow_pm_attach' => array('lang' => 'ALLOW_PM_ATTACHMENTS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'allow_pm_report' => array('lang' => 'ALLOW_PM_REPORT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true),
'allow_bbcode' => array('lang' => 'ALLOW_BBCODE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'allow_smilies' => array('lang' => 'ALLOW_SMILIES', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),
'allow_sig' => array('lang' => 'ALLOW_SIG', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false),

View file

@ -1405,7 +1405,8 @@ function submit_pm($mode, $subject, &$data, $put_in_outbox = true)
'bbcode_bitfield' => $data['bbcode_bitfield'],
'bbcode_uid' => $data['bbcode_uid'],
'to_address' => implode(':', $to),
'bcc_address' => implode(':', $bcc)
'bcc_address' => implode(':', $bcc),
'message_reported' => 0,
);
break;
@ -1880,4 +1881,93 @@ function set_user_message_limit()
$user->data['message_limit'] = (!$message_limit) ? $config['pm_max_msgs'] : $message_limit;
}
/**
* Generates an array of coloured recipient names from a list of PMs - (groups & users)
*
* @param array $pm_by_id An array of rows from PRIVMSGS_TABLE, keys are the msg_ids.
*
* @return array 2D Array: array(msg_id => array('username or group string', ...), ...)
* Usernames are generated with {@link get_username_string get_username_string}
* Groups are coloured and have a link to the membership page
*/
function get_recipient_strings($pm_by_id)
{
global $user, $db;
$address_list = $recipient_list = $address = array();
$_types = array('u', 'g');
foreach ($pm_by_id as $message_id => $row)
{
$address[$message_id] = rebuild_header(array('to' => $row['to_address'], 'bcc' => $row['bcc_address']));
foreach ($_types as $ug_type)
{
if (isset($address[$message_id][$ug_type]) && sizeof($address[$message_id][$ug_type]))
{
foreach ($address[$message_id][$ug_type] as $ug_id => $in_to)
{
$recipient_list[$ug_type][$ug_id] = array('name' => $user->lang['NA'], 'colour' => '');
}
}
}
}
foreach ($_types as $ug_type)
{
if (!empty($recipient_list[$ug_type]))
{
if ($ug_type == 'u')
{
$sql = 'SELECT user_id as id, username as name, user_colour as colour
FROM ' . USERS_TABLE . '
WHERE ';
}
else
{
$sql = 'SELECT group_id as id, group_name as name, group_colour as colour, group_type
FROM ' . GROUPS_TABLE . '
WHERE ';
}
$sql .= $db->sql_in_set(($ug_type == 'u') ? 'user_id' : 'group_id', array_map('intval', array_keys($recipient_list[$ug_type])));
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($ug_type == 'g')
{
$row['name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['name']] : $row['name'];
}
$recipient_list[$ug_type][$row['id']] = array('name' => $row['name'], 'colour' => $row['colour']);
}
$db->sql_freeresult($result);
}
}
foreach ($address as $message_id => $adr_ary)
{
foreach ($adr_ary as $type => $id_ary)
{
foreach ($id_ary as $ug_id => $_id)
{
if ($type == 'u')
{
$address_list[$message_id][] = get_username_string('full', $ug_id, $recipient_list[$type][$ug_id]['name'], $recipient_list[$type][$ug_id]['colour']);
}
else
{
$user_colour = ($recipient_list[$type][$ug_id]['colour']) ? ' style="font-weight: bold; color:#' . $recipient_list[$type][$ug_id]['colour'] . '"' : '';
$link = '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $ug_id) . '"' . $user_colour . '>';
$address_list[$message_id][] = $link . $recipient_list[$type][$ug_id]['name'] . (($link) ? '</a>' : '');
}
}
}
}
return $address_list;
}
?>

View file

@ -0,0 +1,39 @@
<?php
/**
*
* @package mcp
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @package module_install
*/
class mcp_pm_reports_info
{
function module()
{
return array(
'filename' => 'mcp_pm_reports',
'title' => 'MCP_PM_REPORTS',
'version' => '1.0.0',
'modes' => array(
'pm_reports' => array('title' => 'MCP_PM_REPORTS_OPEN', 'auth' => 'aclf_m_report', 'cat' => array('MCP_REPORTS')),
'pm_reports_closed' => array('title' => 'MCP_PM_REPORTS_CLOSED', 'auth' => 'aclf_m_report', 'cat' => array('MCP_REPORTS')),
'pm_report_details' => array('title' => 'MCP_PM_REPORT_DETAILS', 'auth' => 'aclf_m_report', 'cat' => array('MCP_REPORTS')),
),
);
}
function install()
{
}
function uninstall()
{
}
}
?>

View file

@ -152,6 +152,7 @@ function mcp_front_view($id, $mode, $action)
$sql = 'SELECT COUNT(r.report_id) AS total
FROM ' . REPORTS_TABLE . ' r, ' . POSTS_TABLE . ' p
WHERE r.post_id = p.post_id
AND r.pm_id = 0
AND r.report_closed = 0
AND p.forum_id IN (0, ' . implode(', ', $forum_list) . ')';
$result = $db->sql_query($sql);
@ -181,6 +182,7 @@ function mcp_front_view($id, $mode, $action)
),
'WHERE' => 'r.post_id = p.post_id
AND r.pm_id = 0
AND r.report_closed = 0
AND r.reason_id = rr.reason_id
AND p.topic_id = t.topic_id
@ -243,6 +245,96 @@ function mcp_front_view($id, $mode, $action)
}
}
// Latest 5 reported PMs
if ($module->loaded('pm_reports') && $auth->acl_getf_global('m_report'))
{
$template->assign_var('S_SHOW_PM_REPORTS', true);
$sql = 'SELECT COUNT(r.report_id) AS total
FROM ' . REPORTS_TABLE . ' r, ' . PRIVMSGS_TABLE . ' p
WHERE r.post_id = 0
AND r.pm_id = p.msg_id
AND r.report_closed = 0';
$result = $db->sql_query($sql);
$total = (int) $db->sql_fetchfield('total');
$db->sql_freeresult($result);
if ($total)
{
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
$user->add_lang(array('ucp'));
$sql = $db->sql_build_query('SELECT', array(
'SELECT' => 'r.report_id, r.report_time, p.msg_id, p.message_subject, p.message_time, p.to_address, p.bcc_address, u.username, u.username_clean, u.user_colour, u.user_id, u2.username as author_name, u2.username_clean as author_name_clean, u2.user_colour as author_colour, u2.user_id as author_id',
'FROM' => array(
REPORTS_TABLE => 'r',
REPORTS_REASONS_TABLE => 'rr',
USERS_TABLE => array('u', 'u2'),
PRIVMSGS_TABLE => 'p'
),
'WHERE' => 'r.pm_id = p.msg_id
AND r.post_id = 0
AND r.report_closed = 0
AND r.reason_id = rr.reason_id
AND r.user_id = u.user_id
AND p.author_id = u2.user_id',
'ORDER_BY' => 'p.message_time DESC'
));
$result = $db->sql_query_limit($sql, 5);
$pm_by_id = $pm_list = array();
while ($row = $db->sql_fetchrow($result))
{
$pm_by_id[(int) $row['msg_id']] = $row;
$pm_list[] = (int) $row['msg_id'];
}
$address_list = get_recipient_strings($pm_by_id);
foreach ($pm_list as $message_id)
{
$row = $pm_by_id[$message_id];
$template->assign_block_vars('pm_report', array(
'U_PM_DETAILS' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'r=' . $row['report_id'] . "&amp;i=pm_reports&amp;mode=pm_report_details"),
'REPORTER_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
'REPORTER' => get_username_string('username', $row['user_id'], $row['username'], $row['user_colour']),
'REPORTER_COLOUR' => get_username_string('colour', $row['user_id'], $row['username'], $row['user_colour']),
'U_REPORTER' => get_username_string('profile', $row['user_id'], $row['username'], $row['user_colour']),
'PM_AUTHOR_FULL' => get_username_string('full', $row['author_id'], $row['author_name'], $row['author_colour']),
'PM_AUTHOR' => get_username_string('username', $row['author_id'], $row['author_name'], $row['author_colour']),
'PM_AUTHOR_COLOUR' => get_username_string('colour', $row['author_id'], $row['author_name'], $row['author_colour']),
'U_PM_AUTHOR' => get_username_string('profile', $row['author_id'], $row['author_name'], $row['author_colour']),
'PM_SUBJECT' => $row['message_subject'],
'REPORT_TIME' => $user->format_date($row['report_time']),
'PM_TIME' => $user->format_date($row['message_time']),
'RECIPIENTS' => implode(', ', $address_list[$row['msg_id']]),
));
}
}
if ($total == 0)
{
$template->assign_vars(array(
'L_REPORTS_TOTAL' => $user->lang['REPORTS_ZERO_TOTAL'],
'S_HAS_PM_REPORTS' => false)
);
}
else
{
$template->assign_vars(array(
'L_REPORTS_TOTAL' => ($total == 1) ? $user->lang['REPORT_TOTAL'] : sprintf($user->lang['REPORTS_TOTAL'], $total),
'S_HAS_REPORTS' => true)
);
}
}
// Latest 5 logs
if ($module->loaded('logs'))
{

View file

@ -0,0 +1,323 @@
<?php
/**
*
* @package mcp
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* mcp_reports
* Handling the reports queue
* @package mcp
*/
class mcp_pm_reports
{
var $p_master;
var $u_action;
function mcp_pm_reports(&$p_master)
{
$this->p_master = &$p_master;
}
function main($id, $mode)
{
global $auth, $db, $user, $template, $cache;
global $config, $phpbb_root_path, $phpEx, $action;
include_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
include_once($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
$start = request_var('start', 0);
$this->page_title = 'MCP_PM_REPORTS';
switch ($action)
{
case 'close':
case 'delete':
include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
$report_id_list = request_var('report_id_list', array(0));
if (!sizeof($report_id_list))
{
trigger_error('NO_REPORT_SELECTED');
}
if (!function_exists('close_report'))
{
include($phpbb_root_path . 'includes/mcp/mcp_reports.' . $phpEx);
}
close_report($report_id_list, $mode, $action, true);
break;
}
switch ($mode)
{
case 'pm_report_details':
$user->add_lang(array('posting', 'viewforum', 'viewtopic', 'ucp'));
$report_id = request_var('r', 0);
$sql = 'SELECT r.pm_id, r.user_id, r.report_id, r.report_closed, report_time, r.report_text, rr.reason_title, rr.reason_description, u.username, u.username_clean, u.user_colour
FROM ' . REPORTS_TABLE . ' r, ' . REPORTS_REASONS_TABLE . ' rr, ' . USERS_TABLE . ' u
WHERE r.report_id = ' . $report_id . '
AND rr.reason_id = r.reason_id
AND r.user_id = u.user_id
AND r.post_id = 0
ORDER BY report_closed ASC';
$result = $db->sql_query_limit($sql, 1);
$report = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$report_id || !$report)
{
trigger_error('NO_REPORT');
}
$pm_id = $report['pm_id'];
$report_id = $report['report_id'];
$pm_info = get_pm_data(array($pm_id));
if (!sizeof($pm_info))
{
trigger_error('NO_REPORT_SELECTED');
}
$pm_info = $pm_info[$pm_id];
write_pm_addresses(array('to' => $pm_info['to_address'], 'bcc' => $pm_info['bcc_address']), (int) $pm_info['author_id']);
$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'])];
}
// Process message, leave it uncensored
$message = $pm_info['message_text'];
if ($pm_info['bbcode_bitfield'])
{
include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);
$bbcode = new bbcode($pm_info['bbcode_bitfield']);
$bbcode->bbcode_second_pass($message, $pm_info['bbcode_uid'], $pm_info['bbcode_bitfield']);
}
$message = bbcode_nl2br($message);
$message = smiley_text($message);
if ($pm_info['message_attachment'] && $auth->acl_get('u_pm_download'))
{
$sql = 'SELECT *
FROM ' . ATTACHMENTS_TABLE . '
WHERE post_msg_id = ' . $pm_id . '
AND in_message = 1
ORDER BY filetime DESC';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$attachments[] = $row;
}
$db->sql_freeresult($result);
if (sizeof($attachments))
{
$update_count = array();
parse_attachments(0, $message, $attachments, $update_count);
}
// Display not already displayed Attachments for this post, we already parsed them. ;)
if (!empty($attachments))
{
$template->assign_var('S_HAS_ATTACHMENTS', true);
foreach ($attachments as $attachment)
{
$template->assign_block_vars('attachment', array(
'DISPLAY_ATTACHMENT' => $attachment)
);
}
}
}
$template->assign_vars(array(
'S_MCP_REPORT' => true,
'S_PM' => true,
'S_CLOSE_ACTION' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=pm_reports&amp;mode=pm_report_details&amp;r=' . $report_id),
'S_CAN_VIEWIP' => $auth->acl_getf_global('m_info'),
'S_POST_REPORTED' => $pm_info['message_reported'],
'S_USER_NOTES' => true,
'U_MCP_REPORT' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=pm_reports&amp;mode=pm_report_details&amp;r=' . $report_id),
'U_MCP_REPORTER_NOTES' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $report['user_id']),
'U_MCP_USER_NOTES' => append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=notes&amp;mode=user_notes&amp;u=' . $pm_info['author_id']),
'U_MCP_WARN_REPORTER' => ($auth->acl_get('m_warn')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=warn&amp;mode=warn_user&amp;u=' . $report['user_id']) : '',
'U_MCP_WARN_USER' => ($auth->acl_get('m_warn')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=warn&amp;mode=warn_user&amp;u=' . $pm_info['author_id']) : '',
'EDIT_IMG' => $user->img('icon_post_edit', $user->lang['EDIT_POST']),
'MINI_POST_IMG' => $user->img('icon_post_target', 'POST'),
'RETURN_REPORTS' => sprintf($user->lang['RETURN_REPORTS'], '<a href="' . append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=pm_reports' . (($pm_info['message_reported']) ? '&amp;mode=pm_reports' : '&amp;mode=pm_reports_closed') . '&amp;start=' . $start) . '">', '</a>'),
'REPORTED_IMG' => $user->img('icon_topic_reported', $user->lang['POST_REPORTED']),
'REPORT_DATE' => $user->format_date($report['report_time']),
'REPORT_ID' => $report_id,
'REPORT_REASON_TITLE' => $reason['title'],
'REPORT_REASON_DESCRIPTION' => $reason['description'],
'REPORT_TEXT' => $report['report_text'],
'POST_AUTHOR_FULL' => get_username_string('full', $pm_info['author_id'], $pm_info['username'], $pm_info['user_colour']),
'POST_AUTHOR_COLOUR' => get_username_string('colour', $pm_info['author_id'], $pm_info['username'], $pm_info['user_colour']),
'POST_AUTHOR' => get_username_string('username', $pm_info['author_id'], $pm_info['username'], $pm_info['user_colour']),
'U_POST_AUTHOR' => get_username_string('profile', $pm_info['author_id'], $pm_info['username'], $pm_info['user_colour']),
'REPORTER_FULL' => get_username_string('full', $report['user_id'], $report['username'], $report['user_colour']),
'REPORTER_COLOUR' => get_username_string('colour', $report['user_id'], $report['username'], $report['user_colour']),
'REPORTER_NAME' => get_username_string('username', $report['user_id'], $report['username'], $report['user_colour']),
'U_VIEW_REPORTER_PROFILE' => get_username_string('profile', $report['user_id'], $report['username'], $report['user_colour']),
'POST_PREVIEW' => $message,
'POST_SUBJECT' => ($pm_info['message_subject']) ? $pm_info['message_subject'] : $user->lang['NO_SUBJECT'],
'POST_DATE' => $user->format_date($pm_info['message_time']),
'POST_IP' => $pm_info['author_ip'],
'POST_IPADDR' => ($auth->acl_getf_global('m_info') && request_var('lookup', '')) ? @gethostbyaddr($pm_info['author_ip']) : '',
'POST_ID' => $pm_info['msg_id'],
'U_LOOKUP_IP' => ($auth->acl_getf_global('m_info')) ? $this->u_action . '&amp;r=' . $report_id . '&amp;pm=' . $pm_id . '&amp;lookup=' . $pm_info['author_ip'] . '#ip' : '',
));
$this->tpl_name = 'mcp_post';
break;
case 'pm_reports':
case 'pm_reports_closed':
$user->add_lang(array('ucp'));
$sort_days = $total = 0;
$sort_key = $sort_dir = '';
$sort_by_sql = $sort_order_sql = array();
mcp_sorting($mode, $sort_days, $sort_key, $sort_dir, $sort_by_sql, $sort_order_sql, $total);
$limit_time_sql = ($sort_days) ? 'AND r.report_time >= ' . (time() - ($sort_days * 86400)) : '';
if ($mode == 'pm_reports')
{
$report_state = 'pm.message_reported = 1 AND r.report_closed = 0';
}
else
{
$report_state = 'r.report_closed = 1';
}
$sql = 'SELECT r.report_id
FROM ' . PRIVMSGS_TABLE . ' pm, ' . REPORTS_TABLE . ' r ' . (($sort_order_sql[0] == 'u') ? ', ' . USERS_TABLE . ' u' : '') . (($sort_order_sql[0] == 'r') ? ', ' . USERS_TABLE . ' ru' : '') . "
WHERE $report_state
AND r.pm_id = pm.msg_id
" . (($sort_order_sql[0] == 'u') ? 'AND u.user_id = pm.author_id' : '') . '
' . (($sort_order_sql[0] == 'r') ? 'AND ru.user_id = r.user_id' : '') . "
AND r.post_id = 0
$limit_time_sql
ORDER BY $sort_order_sql";
$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
$i = 0;
$report_ids = array();
while ($row = $db->sql_fetchrow($result))
{
$report_ids[] = $row['report_id'];
$row_num[$row['report_id']] = $i++;
}
$db->sql_freeresult($result);
if (sizeof($report_ids))
{
$sql = 'SELECT p.*, u.username, u.username_clean, u.user_colour, r.user_id as reporter_id, ru.username as reporter_name, ru.user_colour as reporter_colour, r.report_time, r.report_id
FROM ' . REPORTS_TABLE . ' r, ' . PRIVMSGS_TABLE . ' p, ' . USERS_TABLE . ' u, ' . USERS_TABLE . ' ru
WHERE ' . $db->sql_in_set('r.report_id', $report_ids) . "
AND r.pm_id = p.msg_id
AND p.author_id = u.user_id
AND ru.user_id = r.user_id
ORDER BY $sort_order_sql";
$result = $db->sql_query($sql);
$pm_list = $pm_by_id = array();
while ($row = $db->sql_fetchrow($result))
{
$pm_by_id[(int) $row['msg_id']] = $row;
$pm_list[] = (int) $row['msg_id'];
}
$db->sql_freeresult($result);
if (sizeof($pm_list))
{
$address_list = get_recipient_strings($pm_by_id);
foreach ($pm_list as $message_id)
{
$row = $pm_by_id[$message_id];
$template->assign_block_vars('postrow', array(
'U_VIEW_DETAILS' => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=pm_reports&amp;mode=pm_report_details&amp;r={$row['report_id']}"),
'PM_AUTHOR_FULL' => get_username_string('full', $row['author_id'], $row['username'], $row['user_colour']),
'PM_AUTHOR_COLOUR' => get_username_string('colour', $row['author_id'], $row['username'], $row['user_colour']),
'PM_AUTHOR' => get_username_string('username', $row['author_id'], $row['username'], $row['user_colour']),
'U_PM_AUTHOR' => get_username_string('profile', $row['author_id'], $row['username'], $row['user_colour']),
'REPORTER_FULL' => get_username_string('full', $row['reporter_id'], $row['reporter_name'], $row['reporter_colour']),
'REPORTER_COLOUR' => get_username_string('colour', $row['reporter_id'], $row['reporter_name'], $row['reporter_colour']),
'REPORTER' => get_username_string('username', $row['reporter_id'], $row['reporter_name'], $row['reporter_colour']),
'U_REPORTER' => get_username_string('profile', $row['reporter_id'], $row['reporter_name'], $row['reporter_colour']),
'PM_SUBJECT' => ($row['message_subject']) ? $row['message_subject'] : $user->lang['NO_SUBJECT'],
'PM_TIME' => $user->format_date($row['message_time']),
'REPORT_ID' => $row['report_id'],
'REPORT_TIME' => $user->format_date($row['report_time']),
'RECIPIENTS' => implode(', ', $address_list[$row['msg_id']]),
));
}
}
}
// Now display the page
$template->assign_vars(array(
'L_EXPLAIN' => ($mode == 'pm_reports') ? $user->lang['MCP_PM_REPORTS_OPEN_EXPLAIN'] : $user->lang['MCP_PM_REPORTS_CLOSED_EXPLAIN'],
'L_TITLE' => ($mode == 'pm_reports') ? $user->lang['MCP_PM_REPORTS_OPEN'] : $user->lang['MCP_PM_REPORTS_CLOSED'],
'S_PM' => true,
'S_MCP_ACTION' => $this->u_action,
'S_CLOSED' => ($mode == 'pm_reports_closed') ? true : false,
'PAGINATION' => generate_pagination($this->u_action . "&amp;st=$sort_days&amp;sk=$sort_key&amp;sd=$sort_dir", $total, $config['topics_per_page'], $start),
'PAGE_NUMBER' => on_page($total, $config['topics_per_page'], $start),
'TOTAL' => $total,
'TOTAL_REPORTS' => ($total == 1) ? $user->lang['LIST_REPORT'] : sprintf($user->lang['LIST_REPORTS'], $total),
)
);
$this->tpl_name = 'mcp_reports';
break;
}
}
}
?>

View file

@ -77,6 +77,7 @@ class mcp_reports
WHERE ' . (($report_id) ? 'r.report_id = ' . $report_id : "r.post_id = $post_id") . '
AND rr.reason_id = r.reason_id
AND r.user_id = u.user_id
AND r.pm_id = 0
ORDER BY report_closed ASC';
$result = $db->sql_query_limit($sql, 1);
$report = $db->sql_fetchrow($result);
@ -149,13 +150,11 @@ class mcp_reports
if ($post_info['post_attachment'] && $auth->acl_get('u_download') && $auth->acl_get('f_download', $post_info['forum_id']))
{
$extensions = $cache->obtain_attach_extensions($post_info['forum_id']);
$sql = 'SELECT *
FROM ' . ATTACHMENTS_TABLE . '
WHERE post_msg_id = ' . $post_id . '
AND in_message = 0
ORDER BY filetime DESC, post_msg_id ASC';
ORDER BY filetime DESC';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
@ -332,7 +331,7 @@ class mcp_reports
mcp_sorting($mode, $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)) : '';
$limit_time_sql = ($sort_days) ? 'AND r.report_time >= ' . (time() - ($sort_days * 86400)) : '';
if ($mode == 'reports')
{
@ -349,9 +348,10 @@ class mcp_reports
$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' : '') . '
' . (($sort_order_sql[0] == 'r') ? 'AND ru.user_id = r.user_id' : '') . '
' . (($topic_id) ? 'AND p.topic_id = ' . $topic_id : '') . "
AND t.topic_id = p.topic_id
AND r.pm_id = 0
$limit_time_sql
ORDER BY $sort_order_sql";
$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
@ -374,6 +374,7 @@ class mcp_reports
AND r.post_id = p.post_id
AND u.user_id = p.poster_id
AND ru.user_id = r.user_id
AND r.pm_id = 0
ORDER BY ' . $sort_order_sql;
$result = $db->sql_query($sql);
@ -441,35 +442,54 @@ class mcp_reports
/**
* Closes a report
*/
function close_report($report_id_list, $mode, $action)
function close_report($report_id_list, $mode, $action, $pm = false)
{
global $db, $template, $user, $config;
global $db, $template, $user, $config, $auth;
global $phpEx, $phpbb_root_path;
$sql = 'SELECT r.post_id
FROM ' . REPORTS_TABLE . ' r
WHERE ' . $db->sql_in_set('r.report_id', $report_id_list);
$pm_where = ($pm) ? ' AND r.post_id = 0 ' : ' AND r.pm_id = 0 ';
$id_column = ($pm) ? 'pm_id' : 'post_id';
$module = ($pm) ? 'pm_reports' : 'reports';
$pm_prefix = ($pm) ? 'PM_' : '';
$sql = "SELECT r.$id_column
FROM " . REPORTS_TABLE . ' r
WHERE ' . $db->sql_in_set('r.report_id', $report_id_list) . $pm_where;
$result = $db->sql_query($sql);
$post_id_list = array();
while ($row = $db->sql_fetchrow($result))
{
$post_id_list[] = $row['post_id'];
$post_id_list[] = $row[$id_column];
}
$post_id_list = array_unique($post_id_list);
if ($pm)
{
if (!$auth->acl_getf_global('m_report'))
{
trigger_error('NOT_AUTHORISED');
}
}
else
{
if (!check_ids($post_id_list, POSTS_TABLE, 'post_id', array('m_report')))
{
trigger_error('NOT_AUTHORISED');
}
}
if ($action == 'delete' && strpos($user->data['session_page'], 'mode=report_details') !== false)
{
$redirect = request_var('redirect', build_url(array('mode', 'r', 'quickmod')) . '&amp;mode=reports');
}
elseif ($action == 'delete' && strpos($user->data['session_page'], 'mode=pm_report_details') !== false)
{
$redirect = request_var('redirect', build_url(array('mode', 'r', 'quickmod')) . '&amp;mode=pm_reports');
}
else if ($action == 'close' && !request_var('r', 0))
{
$redirect = request_var('redirect', build_url(array('mode', 'p', 'quickmod')) . '&amp;mode=reports');
$redirect = request_var('redirect', build_url(array('mode', 'p', 'quickmod')) . '&amp;mode=' . $module);
}
else
{
@ -480,7 +500,7 @@ function close_report($report_id_list, $mode, $action)
$topic_ids = array();
$s_hidden_fields = build_hidden_fields(array(
'i' => 'reports',
'i' => $module,
'mode' => $mode,
'report_id_list' => $report_id_list,
'action' => $action,
@ -489,13 +509,13 @@ function close_report($report_id_list, $mode, $action)
if (confirm_box(true))
{
$post_info = get_post_data($post_id_list, 'm_report');
$post_info = ($pm) ? get_pm_data($post_id_list) : get_post_data($post_id_list, 'm_report');
$sql = 'SELECT r.report_id, r.post_id, r.report_closed, r.user_id, r.user_notify, u.username, u.username_clean, u.user_email, u.user_jabber, u.user_lang, u.user_notify_type
FROM ' . REPORTS_TABLE . ' r, ' . USERS_TABLE . ' u
$sql = "SELECT r.report_id, r.$id_column, r.report_closed, r.user_id, r.user_notify, u.username, u.username_clean, u.user_email, u.user_jabber, u.user_lang, u.user_notify_type
FROM " . REPORTS_TABLE . ' r, ' . USERS_TABLE . ' u
WHERE ' . $db->sql_in_set('r.report_id', $report_id_list) . '
' . (($action == 'close') ? 'AND r.report_closed = 0' : '') . '
AND r.user_id = u.user_id';
AND r.user_id = u.user_id' . $pm_where;
$result = $db->sql_query($sql);
$reports = $close_report_posts = $close_report_topics = $notify_reporters = $report_id_list = array();
@ -506,9 +526,13 @@ function close_report($report_id_list, $mode, $action)
if (!$report['report_closed'])
{
$close_report_posts[] = $report['post_id'];
$close_report_posts[] = $report[$id_column];
if (!$pm)
{
$close_report_topics[] = $post_info[$report['post_id']]['topic_id'];
}
}
if ($report['user_notify'] && !$report['report_closed'])
{
@ -522,7 +546,7 @@ function close_report($report_id_list, $mode, $action)
$close_report_posts = array_unique($close_report_posts);
$close_report_topics = array_unique($close_report_topics);
if (sizeof($close_report_posts))
if (!$pm && sizeof($close_report_posts))
{
// Get a list of topics that still contain reported posts
$sql = 'SELECT DISTINCT topic_id
@ -560,6 +584,20 @@ function close_report($report_id_list, $mode, $action)
if (sizeof($close_report_posts))
{
if ($pm)
{
$sql = 'UPDATE ' . PRIVMSGS_TABLE . '
SET message_reported = 0
WHERE ' . $db->sql_in_set('msg_id', $close_report_posts);
$db->sql_query($sql);
if ($action == 'delete')
{echo "aha";
delete_pm(ANONYMOUS, $close_report_posts, PRIVMSGS_INBOX);
}
}
else
{
$sql = 'UPDATE ' . POSTS_TABLE . '
SET post_reported = 0
@ -575,15 +613,23 @@ function close_report($report_id_list, $mode, $action)
$db->sql_query($sql);
}
}
}
$db->sql_transaction('commit');
}
unset($close_report_posts, $close_report_topics);
foreach ($reports as $report)
{
if ($pm)
{
add_log('mod', 0, 0, 'LOG_PM_REPORT_' . strtoupper($action) . 'D', $post_info[$report['pm_id']]['message_subject']);
}
else
{
add_log('mod', $post_info[$report['post_id']]['forum_id'], $post_info[$report['post_id']]['topic_id'], 'LOG_REPORT_' . strtoupper($action) . 'D', $post_info[$report['post_id']]['post_subject']);
}
}
$messenger = new messenger();
@ -597,39 +643,53 @@ function close_report($report_id_list, $mode, $action)
continue;
}
$post_id = $reporter['post_id'];
$post_id = $reporter[$id_column];
$messenger->template('report_' . $action . 'd', $reporter['user_lang']);
$messenger->template((($pm) ? 'pm_report_' : 'report_') . $action . 'd', $reporter['user_lang']);
$messenger->to($reporter['user_email'], $reporter['username']);
$messenger->im($reporter['user_jabber'], $reporter['username']);
if ($pm)
{
$messenger->assign_vars(array(
'USERNAME' => htmlspecialchars_decode($reporter['username']),
'CLOSER_NAME' => htmlspecialchars_decode($user->data['username']),
'PM_SUBJECT' => htmlspecialchars_decode(censor_text($post_info[$post_id]['message_subject'])),
));
}
else
{
$messenger->assign_vars(array(
'USERNAME' => htmlspecialchars_decode($reporter['username']),
'CLOSER_NAME' => htmlspecialchars_decode($user->data['username']),
'POST_SUBJECT' => htmlspecialchars_decode(censor_text($post_info[$post_id]['post_subject'])),
'TOPIC_TITLE' => htmlspecialchars_decode(censor_text($post_info[$post_id]['topic_title'])))
);
}
$messenger->send($reporter['user_notify_type']);
}
}
if (!$pm)
{
foreach ($post_info as $post)
{
$forum_ids[$post['forum_id']] = $post['forum_id'];
$topic_ids[$post['topic_id']] = $post['topic_id'];
}
}
unset($notify_reporters, $post_info, $reports);
$messenger->save_queue();
$success_msg = (sizeof($report_id_list) == 1) ? 'REPORT_' . strtoupper($action) . 'D_SUCCESS' : 'REPORTS_' . strtoupper($action) . 'D_SUCCESS';
$success_msg = (sizeof($report_id_list) == 1) ? "{$pm_prefix}REPORT_" . strtoupper($action) . 'D_SUCCESS' : "{$pm_prefix}REPORTS_" . strtoupper($action) . 'D_SUCCESS';
}
else
{
confirm_box(false, $user->lang[strtoupper($action) . '_REPORT' . ((sizeof($report_id_list) == 1) ? '' : 'S') . '_CONFIRM'], $s_hidden_fields);
confirm_box(false, $user->lang[strtoupper($action) . "_{$pm_prefix}REPORT" . ((sizeof($report_id_list) == 1) ? '' : 'S') . '_CONFIRM'], $s_hidden_fields);
}
$redirect = request_var('redirect', "index.$phpEx");
@ -642,16 +702,22 @@ function close_report($report_id_list, $mode, $action)
else
{
meta_refresh(3, $redirect);
$return_forum = '';
if (sizeof($forum_ids == 1))
$return_topic = '';
if (!$pm)
{
if (sizeof($forum_ids) === 1)
{
$return_forum = sprintf($user->lang['RETURN_FORUM'], '<a href="' . append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . current($forum_ids)) . '">', '</a>') . '<br /><br />';
}
$return_topic = '';
if (sizeof($topic_ids == 1))
if (sizeof($topic_ids) === 1)
{
$return_topic = sprintf($user->lang['RETURN_TOPIC'], '<a href="' . append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=' . current($topic_ids) . '&amp;f=' . current($forum_ids)) . '">', '</a>') . '<br /><br />';
}
}
trigger_error($user->lang[$success_msg] . '<br /><br />' . $return_forum . $return_topic . sprintf($user->lang['RETURN_PAGE'], "<a href=\"$redirect\">", '</a>'));
}

View file

@ -115,78 +115,7 @@ function view_folder($id, $mode, $folder_id, $folder)
// Build Recipient List if in outbox/sentbox - max two additional queries
if ($folder_id == PRIVMSGS_OUTBOX || $folder_id == PRIVMSGS_SENTBOX)
{
$recipient_list = $address = array();
foreach ($folder_info['rowset'] as $message_id => $row)
{
$address[$message_id] = rebuild_header(array('to' => $row['to_address'], 'bcc' => $row['bcc_address']));
$_save = array('u', 'g');
foreach ($_save as $save)
{
if (isset($address[$message_id][$save]) && sizeof($address[$message_id][$save]))
{
foreach (array_keys($address[$message_id][$save]) as $ug_id)
{
$recipient_list[$save][$ug_id] = array('name' => $user->lang['NA'], 'colour' => '');
}
}
}
}
$_types = array('u', 'g');
foreach ($_types as $ug_type)
{
if (!empty($recipient_list[$ug_type]))
{
if ($ug_type == 'u')
{
$sql = 'SELECT user_id as id, username as name, user_colour as colour
FROM ' . USERS_TABLE . '
WHERE ';
}
else
{
$sql = 'SELECT group_id as id, group_name as name, group_colour as colour, group_type
FROM ' . GROUPS_TABLE . '
WHERE ';
}
$sql .= $db->sql_in_set(($ug_type == 'u') ? 'user_id' : 'group_id', array_map('intval', array_keys($recipient_list[$ug_type])));
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if ($ug_type == 'g')
{
$row['name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['name']] : $row['name'];
}
$recipient_list[$ug_type][$row['id']] = array('name' => $row['name'], 'colour' => $row['colour']);
}
$db->sql_freeresult($result);
}
}
foreach ($address as $message_id => $adr_ary)
{
foreach ($adr_ary as $type => $id_ary)
{
foreach ($id_ary as $ug_id => $_id)
{
if ($type == 'u')
{
$address_list[$message_id][] = get_username_string('full', $ug_id, $recipient_list[$type][$ug_id]['name'], $recipient_list[$type][$ug_id]['colour']);
}
else
{
$user_colour = ($recipient_list[$type][$ug_id]['colour']) ? ' style="font-weight: bold; color:#' . $recipient_list[$type][$ug_id]['colour'] . '"' : '';
$link = '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $ug_id) . '"' . $user_colour . '>';
$address_list[$message_id][] = $link . $recipient_list[$type][$ug_id]['name'] . (($link) ? '</a>' : '');
}
}
}
}
unset($recipient_list, $address);
$address_list = get_recipient_strings($folder_info['rowset']);
}
$data = array();

View file

@ -190,6 +190,7 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
'EMAIL_IMG' => $user->img('icon_contact_email', $user->lang['SEND_EMAIL']),
'QUOTE_IMG' => $user->img('icon_post_quote', $user->lang['POST_QUOTE_PM']),
'REPLY_IMG' => $user->img('button_pm_reply', $user->lang['POST_REPLY_PM']),
'REPORT_IMG' => $user->img('icon_post_report', 'REPORT_POST'),
'EDIT_IMG' => $user->img('icon_post_edit', $user->lang['POST_EDIT_PM']),
'MINI_POST_IMG' => $user->img('icon_post_target', $user->lang['PM']),
@ -210,6 +211,7 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row)
'U_DELETE' => ($auth->acl_get('u_pm_delete')) ? "$url&amp;mode=compose&amp;action=delete&amp;f=$folder_id&amp;p=" . $message_row['msg_id'] : '',
'U_EMAIL' => $user_info['email'],
'U_REPORT' => ($config['allow_pm_report']) ? append_sid("{$phpbb_root_path}report.$phpEx", "pm=" . $message_row['msg_id']) : '',
'U_QUOTE' => ($auth->acl_get('u_sendpm') && $author_id != ANONYMOUS) ? "$url&amp;mode=compose&amp;action=quote&amp;f=$folder_id&amp;p=" . $message_row['msg_id'] : '',
'U_EDIT' => (($message_row['message_time'] > time() - ($config['pm_edit_time'] * 60) || !$config['pm_edit_time']) && $folder_id == PRIVMSGS_OUTBOX && $auth->acl_get('u_pm_edit')) ? "$url&amp;mode=compose&amp;action=edit&amp;f=$folder_id&amp;p=" . $message_row['msg_id'] : '',
'U_POST_REPLY_PM' => ($auth->acl_get('u_sendpm') && $author_id != ANONYMOUS) ? "$url&amp;mode=compose&amp;action=reply&amp;f=$folder_id&amp;p=" . $message_row['msg_id'] : '',

View file

@ -701,11 +701,21 @@ function database_update_info()
GROUPS_TABLE => array(
'group_skip_auth' => array('BOOL', 0, 'after' => 'group_founder_manage'),
),
PRIVMSGS_TABLE => array(
'message_reported' => array('BOOL', 0),
),
REPORTS_TABLE => array(
'pm_id' => array('UINT', 0),
),
),
'add_index' => array(
LOG_TABLE => array(
'log_time' => array('log_time'),
),
REPORTS_TABLE => array(
'post_id' => array('post_id'),
'pm_id' => array('pm_id'),
),
),
),
);
@ -1076,6 +1086,9 @@ function change_database_data(&$no_updates, $version)
// Entries for smiley pagination
set_config('smilies_per_page', '50');
// Entry for reporting PMs
set_config('allow_pm_report', '1');
include_once($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx);
$_module = new acp_modules();
@ -1168,6 +1181,58 @@ function change_database_data(&$no_updates, $version)
}
$db->sql_freeresult($result);
// Also install the "PM Reports" module
$sql = 'SELECT module_id
FROM ' . MODULES_TABLE . "
WHERE module_class = 'mcp'
AND module_langname = 'MCP_REPORTS'
AND module_mode = ''
AND module_basename = ''";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$category_id = (int) $row['module_id'];
$modes = array(
'pm_reports' => array('title' => 'MCP_PM_REPORTS_OPEN', 'auth' => 'aclf_m_report'),
'pm_reports_closed' => array('title' => 'MCP_PM_REPORTS_CLOSED', 'auth' => 'aclf_m_report'),
'pm_report_details' => array('title' => 'MCP_PM_REPORT_DETAILS', 'auth' => 'aclf_m_report'),
);
foreach ($modes as $mode => $data)
{
// Check if we actually need to add the module or if it is already added. ;)
$sql = 'SELECT *
FROM ' . MODULES_TABLE . "
WHERE module_class = 'mcp'
AND module_langname = '{$data['title']}'
AND module_mode = '$mode'
AND parent_id = {$category_id}";
$result2 = $db->sql_query($sql);
$row2 = $db->sql_fetchrow($result2);
$db->sql_freeresult($result2);
if (!$row2)
{
$module_data = array(
'module_basename' => 'users',
'module_enabled' => 1,
'module_display' => 1,
'parent_id' => $category_id,
'module_class' => 'mcp',
'module_langname' => $data['title'],
'module_mode' => $mode,
'module_auth' => $data['auth'],
);
$_module->update_module_data($module_data, true);
}
}
}
$db->sql_freeresult($result);
$_module->remove_cache_file();
// Add newly_registered group... but check if it already exists (we always supported running the updater on any schema)

View file

@ -685,7 +685,8 @@ CREATE TABLE phpbb_privmsgs (
message_edit_time INTEGER DEFAULT 0 NOT NULL,
message_edit_count INTEGER DEFAULT 0 NOT NULL,
to_address BLOB SUB_TYPE TEXT CHARACTER SET UTF8 DEFAULT '' NOT NULL,
bcc_address BLOB SUB_TYPE TEXT CHARACTER SET UTF8 DEFAULT '' NOT NULL
bcc_address BLOB SUB_TYPE TEXT CHARACTER SET UTF8 DEFAULT '' NOT NULL,
message_reported INTEGER DEFAULT 0 NOT NULL
);;
ALTER TABLE phpbb_privmsgs ADD PRIMARY KEY (msg_id);;
@ -872,6 +873,7 @@ CREATE TABLE phpbb_reports (
report_id INTEGER NOT NULL,
reason_id INTEGER DEFAULT 0 NOT NULL,
post_id INTEGER DEFAULT 0 NOT NULL,
pm_id INTEGER DEFAULT 0 NOT NULL,
user_id INTEGER DEFAULT 0 NOT NULL,
user_notify INTEGER DEFAULT 0 NOT NULL,
report_closed INTEGER DEFAULT 0 NOT NULL,
@ -881,6 +883,8 @@ CREATE TABLE phpbb_reports (
ALTER TABLE phpbb_reports ADD PRIMARY KEY (report_id);;
CREATE INDEX phpbb_reports_post_id ON phpbb_reports(post_id);;
CREATE INDEX phpbb_reports_pm_id ON phpbb_reports(pm_id);;
CREATE GENERATOR phpbb_reports_gen;;
SET GENERATOR phpbb_reports_gen TO 0;;

View file

@ -831,7 +831,8 @@ CREATE TABLE [phpbb_privmsgs] (
[message_edit_time] [int] DEFAULT (0) NOT NULL ,
[message_edit_count] [int] DEFAULT (0) NOT NULL ,
[to_address] [varchar] (4000) DEFAULT ('') NOT NULL ,
[bcc_address] [varchar] (4000) DEFAULT ('') NOT NULL
[bcc_address] [varchar] (4000) DEFAULT ('') NOT NULL ,
[message_reported] [int] DEFAULT (0) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
@ -1055,6 +1056,7 @@ CREATE TABLE [phpbb_reports] (
[report_id] [int] IDENTITY (1, 1) NOT NULL ,
[reason_id] [int] DEFAULT (0) NOT NULL ,
[post_id] [int] DEFAULT (0) NOT NULL ,
[pm_id] [int] DEFAULT (0) NOT NULL ,
[user_id] [int] DEFAULT (0) NOT NULL ,
[user_notify] [int] DEFAULT (0) NOT NULL ,
[report_closed] [int] DEFAULT (0) NOT NULL ,
@ -1070,6 +1072,12 @@ ALTER TABLE [phpbb_reports] WITH NOCHECK ADD
) ON [PRIMARY]
GO
CREATE INDEX [post_id] ON [phpbb_reports]([post_id]) ON [PRIMARY]
GO
CREATE INDEX [pm_id] ON [phpbb_reports]([pm_id]) ON [PRIMARY]
GO
/*
Table: 'phpbb_reports_reasons'

View file

@ -486,6 +486,7 @@ CREATE TABLE phpbb_privmsgs (
message_edit_count smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
to_address blob NOT NULL,
bcc_address blob NOT NULL,
message_reported tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
PRIMARY KEY (msg_id),
KEY author_ip (author_ip),
KEY message_time (message_time),
@ -609,12 +610,15 @@ CREATE TABLE phpbb_reports (
report_id mediumint(8) UNSIGNED NOT NULL auto_increment,
reason_id smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
post_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
pm_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_notify tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
report_closed tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
report_time int(11) UNSIGNED DEFAULT '0' NOT NULL,
report_text mediumblob NOT NULL,
PRIMARY KEY (report_id)
PRIMARY KEY (report_id),
KEY post_id (post_id),
KEY pm_id (pm_id)
);

View file

@ -486,6 +486,7 @@ CREATE TABLE phpbb_privmsgs (
message_edit_count smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
to_address text NOT NULL,
bcc_address text NOT NULL,
message_reported tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
PRIMARY KEY (msg_id),
KEY author_ip (author_ip),
KEY message_time (message_time),
@ -609,12 +610,15 @@ CREATE TABLE phpbb_reports (
report_id mediumint(8) UNSIGNED NOT NULL auto_increment,
reason_id smallint(4) UNSIGNED DEFAULT '0' NOT NULL,
post_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
pm_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
user_notify tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
report_closed tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
report_time int(11) UNSIGNED DEFAULT '0' NOT NULL,
report_text mediumtext NOT NULL,
PRIMARY KEY (report_id)
PRIMARY KEY (report_id),
KEY post_id (post_id),
KEY pm_id (pm_id)
) CHARACTER SET `utf8` COLLATE `utf8_bin`;

View file

@ -923,6 +923,7 @@ CREATE TABLE phpbb_privmsgs (
message_edit_count number(4) DEFAULT '0' NOT NULL,
to_address clob DEFAULT '' ,
bcc_address clob DEFAULT '' ,
message_reported number(1) DEFAULT '0' NOT NULL,
CONSTRAINT pk_phpbb_privmsgs PRIMARY KEY (msg_id)
)
/
@ -1164,6 +1165,7 @@ CREATE TABLE phpbb_reports (
report_id number(8) NOT NULL,
reason_id number(4) DEFAULT '0' NOT NULL,
post_id number(8) DEFAULT '0' NOT NULL,
pm_id number(8) DEFAULT '0' NOT NULL,
user_id number(8) DEFAULT '0' NOT NULL,
user_notify number(1) DEFAULT '0' NOT NULL,
report_closed number(1) DEFAULT '0' NOT NULL,
@ -1173,6 +1175,10 @@ CREATE TABLE phpbb_reports (
)
/
CREATE INDEX phpbb_reports_post_id ON phpbb_reports (post_id)
/
CREATE INDEX phpbb_reports_pm_id ON phpbb_reports (pm_id)
/
CREATE SEQUENCE phpbb_reports_seq
/

View file

@ -659,6 +659,7 @@ CREATE TABLE phpbb_privmsgs (
message_edit_count INT2 DEFAULT '0' NOT NULL CHECK (message_edit_count >= 0),
to_address varchar(4000) DEFAULT '' NOT NULL,
bcc_address varchar(4000) DEFAULT '' NOT NULL,
message_reported INT2 DEFAULT '0' NOT NULL CHECK (message_reported >= 0),
PRIMARY KEY (msg_id)
);
@ -810,6 +811,7 @@ CREATE TABLE phpbb_reports (
report_id INT4 DEFAULT nextval('phpbb_reports_seq'),
reason_id INT2 DEFAULT '0' NOT NULL CHECK (reason_id >= 0),
post_id INT4 DEFAULT '0' NOT NULL CHECK (post_id >= 0),
pm_id INT4 DEFAULT '0' NOT NULL CHECK (pm_id >= 0),
user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0),
user_notify INT2 DEFAULT '0' NOT NULL CHECK (user_notify >= 0),
report_closed INT2 DEFAULT '0' NOT NULL CHECK (report_closed >= 0),
@ -818,6 +820,8 @@ CREATE TABLE phpbb_reports (
PRIMARY KEY (report_id)
);
CREATE INDEX phpbb_reports_post_id ON phpbb_reports (post_id);
CREATE INDEX phpbb_reports_pm_id ON phpbb_reports (pm_id);
/*
Table: 'phpbb_reports_reasons'

View file

@ -23,6 +23,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_name_chars',
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_namechange', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_nocensors', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_pm_attach', '0');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_pm_report', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_post_flash', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_post_links', '1');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_privmsg', '1');

View file

@ -471,7 +471,8 @@ CREATE TABLE phpbb_privmsgs (
message_edit_time INTEGER UNSIGNED NOT NULL DEFAULT '0',
message_edit_count INTEGER UNSIGNED NOT NULL DEFAULT '0',
to_address text(65535) NOT NULL DEFAULT '',
bcc_address text(65535) NOT NULL DEFAULT ''
bcc_address text(65535) NOT NULL DEFAULT '',
message_reported INTEGER UNSIGNED NOT NULL DEFAULT '0'
);
CREATE INDEX phpbb_privmsgs_author_ip ON phpbb_privmsgs (author_ip);
@ -590,6 +591,7 @@ CREATE TABLE phpbb_reports (
report_id INTEGER PRIMARY KEY NOT NULL ,
reason_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
post_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
pm_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
user_notify INTEGER UNSIGNED NOT NULL DEFAULT '0',
report_closed INTEGER UNSIGNED NOT NULL DEFAULT '0',
@ -597,6 +599,8 @@ CREATE TABLE phpbb_reports (
report_text mediumtext(16777215) NOT NULL DEFAULT ''
);
CREATE INDEX phpbb_reports_post_id ON phpbb_reports (post_id);
CREATE INDEX phpbb_reports_pm_id ON phpbb_reports (pm_id);
# Table: 'phpbb_reports_reasons'
CREATE TABLE phpbb_reports_reasons (

View file

@ -70,6 +70,8 @@ $lang = array_merge($lang, array(
'ALLOW_NO_CENSORS' => 'Allow disabling of word censoring',
'ALLOW_NO_CENSORS_EXPLAIN' => 'Users can choose to disable the automatic word censoring of posts and private messages.',
'ALLOW_PM_ATTACHMENTS' => 'Allow attachments in private messages',
'ALLOW_PM_REPORT' => 'Allow users to report private messages',
'ALLOW_PM_REPORT_EXPLAIN' => 'If this setting is enabled, users have the option of reporting a private message they have received or sent to the boards moderators. These private messages will then be visible in the Moderator Control Panel.',
'ALLOW_QUICK_REPLY' => 'Allow quick reply',
'ALLOW_QUICK_REPLY_EXPLAIN' => 'This setting defines if quick reply is enabled or not. If this setting is enabled, forums need to have their quick reply option enabled too.',
'ALLOW_SIG' => 'Allow signatures',

View file

@ -409,6 +409,7 @@ $lang = array_merge($lang, array(
'HIDE_STATISTICS' => 'Hide details',
'SEND_STATISTICS' => 'Send statistical information',
'SHOW_STATISTICS' => 'Show details',
'THANKS_SEND_STATISTICS' => 'Thank you for submitting your information.',
));
// Log Entries
@ -505,6 +506,8 @@ $lang = array_merge($lang, array(
'LOG_LOCK_POST' => '<strong>Locked post</strong><br />» %s',
'LOG_MERGE' => '<strong>Merged posts</strong> into topic<br />» %s',
'LOG_MOVE' => '<strong>Moved topic</strong><br />» from %1$s to %2$s',
'LOG_PM_REPORT_CLOSED' => '<strong>Closed PM report</strong><br />» %s',
'LOG_PM_REPORT_DELETED' => '<strong>Deleted PM report</strong><br />» %s',
'LOG_POST_APPROVED' => '<strong>Approved post</strong><br />» %s',
'LOG_POST_DISAPPROVED' => '<strong>Disapproved post “%1$s” with the following reason</strong><br />» %2$s',
'LOG_POST_EDITED' => '<strong>Edited post “%1$s” written by</strong><br />» %2$s',

View file

@ -0,0 +1,8 @@
Subject: Report closed - "{PM_SUBJECT}"
Hello {USERNAME},
You are receiving this notification because the report you filed on the private message "{PM_SUBJECT}" at "{SITENAME}" was handled by a moderator or by an administrator. The report was afterwards closed. If you have further questions contact {CLOSER_NAME} with a personal message.
{EMAIL_SIG}

View file

@ -0,0 +1,8 @@
Subject: Report deleted - "{PM_SUBJECT}"
Hello {USERNAME},
You are receiving this notification because the report you filed on the post "{PM_SUBJECT}" at "{SITENAME}" was deleted by a moderator or by an administrator.
{EMAIL_SIG}

View file

@ -46,6 +46,7 @@ $lang = array_merge($lang, array(
'ALL_NOTES_DELETED' => 'Successfully removed all user notes.',
'ALL_REPORTS' => 'All reports',
'ALREADY_REPORTED' => 'This post has already been reported.',
'ALREADY_REPORTED_PM' => 'This private message has already been reported.',
'ALREADY_WARNED' => 'A warning has already been issued for this post.',
'APPROVE' => 'Approve',
'APPROVE_POST' => 'Approve post',
@ -58,11 +59,19 @@ $lang = array_merge($lang, array(
'CANNOT_WARN_SELF' => 'You cannot warn yourself.',
'CAN_LEAVE_BLANK' => 'This can be left blank.',
'CHANGE_POSTER' => 'Change poster',
'CLOSE_PM_REPORT' => 'Close PM report',
'CLOSE_PM_REPORT_CONFIRM' => 'Are you sure you want to close the selected PM report?',
'CLOSE_PM_REPORTS' => 'Close PM reports',
'CLOSE_PM_REPORTS_CONFIRM' => 'Are you sure you want to close the selected PM reports?',
'CLOSE_REPORT' => 'Close report',
'CLOSE_REPORT_CONFIRM' => 'Are you sure you want to close the selected report?',
'CLOSE_REPORTS' => 'Close reports',
'CLOSE_REPORTS_CONFIRM' => 'Are you sure you want to close the selected reports?',
'DELETE_PM_REPORT' => 'Delete PM report',
'DELETE_PM_REPORT_CONFIRM' => 'Are you sure you want to delete the selected PM report?',
'DELETE_PM_REPORTS' => 'Delete PM reports',
'DELETE_PM_REPORTS_CONFIRM' => 'Are you sure you want to delete the selected PM reports?',
'DELETE_POSTS' => 'Delete posts',
'DELETE_POSTS_CONFIRM' => 'Are you sure you want to delete these posts?',
'DELETE_POST_CONFIRM' => 'Are you sure you want to delete this post?',
@ -106,6 +115,7 @@ $lang = array_merge($lang, array(
'LATEST_LOGS' => 'Latest 5 logged actions',
'LATEST_REPORTED' => 'Latest 5 reports',
'LATEST_REPORTED_PMS' => 'Latest 5 PM reports',
'LATEST_UNAPPROVED' => 'Latest 5 posts awaiting approval',
'LATEST_WARNING_TIME' => 'Latest warning issued',
'LATEST_WARNINGS' => 'Latest 5 warnings',
@ -170,7 +180,14 @@ $lang = array_merge($lang, array(
'MCP_POST_REPORTS' => 'Reports issued on this post',
'MCP_REPORTS' => 'Reported posts',
'MCP_PM_REPORTS' => 'Reported PMs',
'MCP_PM_REPORT_DETAILS' => 'PM Report details',
'MCP_PM_REPORTS_CLOSED' => 'Closed PM reports',
'MCP_PM_REPORTS_CLOSED_EXPLAIN' => 'This is a list of all reports about private messages which have previously been resolved.',
'MCP_PM_REPORTS_OPEN' => 'Open PM reports',
'MCP_PM_REPORTS_OPEN_EXPLAIN' => 'This is a list of all reported private messages which are still to be handled.',
'MCP_REPORTS' => 'Reported messages',
'MCP_REPORT_DETAILS' => 'Report details',
'MCP_REPORTS_CLOSED' => 'Closed reports',
'MCP_REPORTS_CLOSED_EXPLAIN' => 'This is a list of all reports about posts which have previously been resolved.',
@ -232,6 +249,11 @@ $lang = array_merge($lang, array(
'ONLY_TOPIC' => 'Only topic “%s”',
'OTHER_USERS' => 'Other users posting from this IP',
'PM_REPORT_CLOSED_SUCCESS' => 'The selected PM report has been closed successfully.',
'PM_REPORT_DELETED_SUCCESS' => 'The selected PM report has been deleted successfully.',
'PM_REPORTED_SUCCESS' => 'This private message has been successfully reported.',
'PM_REPORTS_TOTAL' => 'In total there are <strong>%d</strong> PM reports to review.',
'PM_REPORTS_ZERO_TOTAL' => 'There are no PM reports to review.',
'POSTER' => 'Poster',
'POSTS_APPROVED_SUCCESS' => 'The selected posts have been approved.',
'POSTS_DELETED_SUCCESS' => 'The selected posts have been successfully removed from the database.',
@ -264,7 +286,7 @@ $lang = array_merge($lang, array(
'REPORT_DELETED_SUCCESS' => 'The selected report has been deleted successfully.',
'REPORT_DETAILS' => 'Report details',
'REPORT_MESSAGE' => 'Report this message',
'REPORT_MESSAGE_EXPLAIN' => 'Use this form to report the selected message. Reporting should generally be used only if the message breaks forum rules.',
'REPORT_MESSAGE_EXPLAIN' => 'Use this form to report the selected private message. Reporting should generally be used only if the message breaks forum rules. <strong>Reporting a private message will make its contents visible to all moderators</strong>',
'REPORT_NOTIFY' => 'Notify me',
'REPORT_NOTIFY_EXPLAIN' => 'Informs you when your report is dealt with.',
'REPORT_POST_EXPLAIN' => 'Use this form to report the selected post to the forum moderators and board administrators. Reporting should generally be used only if the post breaks forum rules.',
@ -275,6 +297,7 @@ $lang = array_merge($lang, array(
'RETURN_MESSAGE' => '%sReturn to the message%s',
'RETURN_NEW_FORUM' => '%sGo to the new forum%s',
'RETURN_NEW_TOPIC' => '%sGo to the new topic%s',
'RETURN_PM' => '%sReturn to the private message%s',
'RETURN_POST' => '%sReturn to the post%s',
'RETURN_QUEUE' => '%sReturn to the queue%s',
'RETURN_REPORTS' => '%sReturn to the reports%s',
@ -346,6 +369,7 @@ $lang = array_merge($lang, array(
'USER_WARNING_ADDED' => 'User warned successfully.',
'VIEW_DETAILS' => 'View details',
'VIEW_PM' => 'View private message',
'VIEW_POST' => 'View post',
'WARNED_USERS' => 'Warned users',
@ -365,10 +389,10 @@ $lang = array_merge($lang, array(
'OTHER' => 'Other',
),
'DESCRIPTION' => array(
'WAREZ' => 'The post contains links to illegal or pirated software.',
'SPAM' => 'The reported post has the only purpose to advertise for a website or another product.',
'OFF_TOPIC' => 'The reported post is off topic.',
'OTHER' => 'The reported post does not fit into any other category, please use the further information field.',
'WAREZ' => 'The message contains links to illegal or pirated software.',
'SPAM' => 'The reported message has the only purpose to advertise for a website or another product.',
'OFF_TOPIC' => 'The reported message is off topic.',
'OTHER' => 'The reported message does not fit into any other category, please use the further information field.',
)
),
));

View file

@ -212,11 +212,16 @@ if ($mode == '' || $mode == 'unapproved_topics' || $mode == 'unapproved_posts')
$module->set_display('queue', 'approve_details', false);
}
if ($mode == '' || $mode == 'reports' || $mode == 'reports_closed')
if ($mode == '' || $mode == 'reports' || $mode == 'reports_closed' || $mode == 'pm_reports' || $mode == 'pm_reports_closed' || $mode == 'pm_report_details')
{
$module->set_display('reports', 'report_details', false);
}
if ($mode == '' || $mode == 'reports' || $mode == 'reports_closed' || $mode == 'pm_reports' || $mode == 'pm_reports_closed' || $mode == 'report_details')
{
$module->set_display('pm_reports', 'pm_report_details', false);
}
if (!$topic_id)
{
$module->set_display('main', 'topic_view', false);
@ -565,6 +570,45 @@ function get_forum_data($forum_id, $acl_list = 'f_list', $read_tracking = false)
return $rowset;
}
/**
* Get simple pm data
*/
function get_pm_data($pm_ids)
{
global $db, $auth, $config, $user;
$rowset = array();
if (!sizeof($pm_ids))
{
return array();
}
$sql_array = array(
'SELECT' => 'p.*, u.*',
'FROM' => array(
USERS_TABLE => 'u',
PRIVMSGS_TABLE => 'p',
),
'WHERE' => $db->sql_in_set('p.msg_id', $pm_ids) . '
AND u.user_id = p.author_id',
);
$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql);
unset($sql_array);
while ($row = $db->sql_fetchrow($result))
{
$rowset[$row['msg_id']] = $row;
}
$db->sql_freeresult($result);
return $rowset;
}
/**
* sorting in mcp
*
@ -650,6 +694,8 @@ function mcp_sorting($mode, &$sort_days, &$sort_key, &$sort_dir, &$sort_by_sql,
}
break;
case 'pm_reports':
case 'pm_reports_closed':
case 'reports':
case 'reports_closed':
$type = 'reports';
@ -657,33 +703,46 @@ function mcp_sorting($mode, &$sort_days, &$sort_key, &$sort_dir, &$sort_by_sql,
$default_dir = 'd';
$limit_time_sql = ($min_time) ? "AND r.report_time >= $min_time" : '';
$pm = (strpos($mode, 'pm_') === 0) ? true : false;
if ($topic_id)
{
$where_sql .= ' p.topic_id = ' . $topic_id;
$where_sql .= ' p.topic_id = ' . $topic_id . ' AND ';
}
else if ($forum_id)
{
$where_sql .= ' p.forum_id = ' . $forum_id;
$where_sql .= ' p.forum_id = ' . $forum_id . ' AND ';
}
else
else if ($pm)
{
$where_sql .= ' ' . $db->sql_in_set('p.forum_id', get_forum_list(array('!f_read', '!m_report')), true, true);
$where_sql .= ' ' . $db->sql_in_set('p.forum_id', get_forum_list(array('!f_read', '!m_report')), true, true) . ' AND ';
}
if ($mode == 'reports')
{
$where_sql .= ' AND r.report_closed = 0';
$where_sql .= ' r.report_closed = 0 AND ';
}
else
{
$where_sql .= ' AND r.report_closed = 1';
$where_sql .= ' r.report_closed = 1 AND ';
}
if ($pm)
{
$sql = 'SELECT COUNT(r.report_id) AS total
FROM ' . REPORTS_TABLE . ' r, ' . PRIVMSGS_TABLE . " p
$where_sql r.post_id = 0
AND p.msg_id = r.pm_id
$limit_time_sql";
}
else
{
$sql = 'SELECT COUNT(r.report_id) AS total
FROM ' . REPORTS_TABLE . ' r, ' . POSTS_TABLE . " p
$where_sql
$where_sql r.pm_id = 0
AND p.post_id = r.post_id
$limit_time_sql";
}
break;
case 'viewlogs':

View file

@ -24,18 +24,29 @@ $user->setup('mcp');
$forum_id = request_var('f', 0);
$post_id = request_var('p', 0);
$pm_id = request_var('pm', 0);
$reason_id = request_var('reason_id', 0);
$report_text = utf8_normalize_nfc(request_var('report_text', '', true));
$user_notify = ($user->data['is_registered']) ? request_var('notify', 0) : false;
$submit = (isset($_POST['submit'])) ? true : false;
if (!$post_id)
if (!$post_id && (!$pm_id || !$config['allow_pm_report']))
{
trigger_error('NO_POST_SELECTED');
}
$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;p=$post_id") . "#p$post_id";
if ($post_id)
{
$redirect_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;p=$post_id") . "#p$post_id";
$pm_id = 0;
}
else
{
$redirect_url = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=view&p=$pm_id");
$post_id = 0;
$forum_id = 0;
}
// Has the report been cancelled?
if (isset($_POST['cancel']))
@ -43,52 +54,79 @@ if (isset($_POST['cancel']))
redirect($redirect_url);
}
// Grab all relevant data
$sql = 'SELECT t.*, p.*
if ($post_id)
{
// Grab all relevant data
$sql = 'SELECT t.*, p.*
FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . " t
WHERE p.post_id = $post_id
AND p.topic_id = t.topic_id";
$result = $db->sql_query($sql);
$report_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$result = $db->sql_query($sql);
$report_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$report_data)
{
if (!$report_data)
{
trigger_error('POST_NOT_EXIST');
}
}
$forum_id = (int) ($report_data['forum_id']) ? $report_data['forum_id'] : $forum_id;
$topic_id = (int) $report_data['topic_id'];
$forum_id = (int) ($report_data['forum_id']) ? $report_data['forum_id'] : $forum_id;
$topic_id = (int) $report_data['topic_id'];
$sql = 'SELECT *
$sql = 'SELECT *
FROM ' . FORUMS_TABLE . '
WHERE forum_id = ' . $forum_id;
$result = $db->sql_query($sql);
$forum_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$result = $db->sql_query($sql);
$forum_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$forum_data)
{
if (!$forum_data)
{
trigger_error('FORUM_NOT_EXIST');
}
}
// Check required permissions
$acl_check_ary = array('f_list' => 'POST_NOT_EXIST', 'f_read' => 'USER_CANNOT_READ', 'f_report' => 'USER_CANNOT_REPORT');
// Check required permissions
$acl_check_ary = array('f_list' => 'POST_NOT_EXIST', 'f_read' => 'USER_CANNOT_READ', 'f_report' => 'USER_CANNOT_REPORT');
foreach ($acl_check_ary as $acl => $error)
{
foreach ($acl_check_ary as $acl => $error)
{
if (!$auth->acl_get($acl, $forum_id))
{
trigger_error($error);
}
}
unset($acl_check_ary);
}
unset($acl_check_ary);
if ($report_data['post_reported'])
{
if ($report_data['post_reported'])
{
$message = $user->lang['ALREADY_REPORTED'];
$message .= '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $redirect_url . '">', '</a>');
trigger_error($message);
}
}
else
{
// Grab all relevant data
$sql = 'SELECT p.*, pt.*
FROM ' . PRIVMSGS_TABLE . ' p, ' . PRIVMSGS_TO_TABLE . " pt
WHERE p.msg_id = $pm_id
AND p.msg_id = pt.msg_id
AND (p.author_id = " . $user->data['user_id'] . " OR pt.user_id = " . $user->data['user_id'] . ")";
$result = $db->sql_query($sql);
$report_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$report_data)
{
trigger_error('PM_NOT_EXIST');
}
if ($report_data['message_reported'])
{
$message = $user->lang['ALREADY_REPORTED_PM'];
$message .= '<br /><br />' . sprintf($user->lang['RETURN_PM'], '<a href="' . $redirect_url . '">', '</a>');
trigger_error($message);
}
}
// Submit report?
@ -109,6 +147,7 @@ if ($submit && $reason_id)
$sql_ary = array(
'reason_id' => (int) $reason_id,
'post_id' => $post_id,
'pm_id' => $pm_id,
'user_id' => (int) $user->data['user_id'],
'user_notify' => (int) $user_notify,
'report_closed' => 0,
@ -120,13 +159,12 @@ if ($submit && $reason_id)
$db->sql_query($sql);
$report_id = $db->sql_nextid();
if (!$report_data['post_reported'])
if ($post_id)
{
$sql = 'UPDATE ' . POSTS_TABLE . '
SET post_reported = 1
WHERE post_id = ' . $post_id;
$db->sql_query($sql);
}
if (!$report_data['topic_reported'])
{
@ -137,9 +175,39 @@ if ($submit && $reason_id)
$db->sql_query($sql);
}
$lang_return = $user->lang['RETURN_TOPIC'];
$lang_success = $user->lang['POST_REPORTED_SUCCESS'];
}
else
{
$sql = 'UPDATE ' . PRIVMSGS_TABLE . '
SET message_reported = 1
WHERE msg_id = ' . $pm_id;
$db->sql_query($sql);
$sql_ary = array(
'msg_id' => $pm_id,
'user_id' => ANONYMOUS,
'author_id' => (int) $report_data['author_id'],
'pm_deleted' => 0,
'pm_new' => 0,
'pm_unread' => 0,
'pm_replied' => 0,
'pm_marked' => 0,
'pm_forwarded' => 0,
'folder_id' => PRIVMSGS_INBOX,
);
$sql = 'INSERT INTO ' . PRIVMSGS_TO_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql);
$lang_return = $user->lang['RETURN_PM'];
$lang_success = $user->lang['PM_REPORTED_SUCCESS'];
}
meta_refresh(3, $redirect_url);
$message = $user->lang['POST_REPORTED_SUCCESS'] . '<br /><br />' . sprintf($user->lang['RETURN_TOPIC'], '<a href="' . $redirect_url . '">', '</a>');
$message = $lang_success . '<br /><br />' . sprintf($lang_return, '<a href="' . $redirect_url . '">', '</a>');
trigger_error($message);
}
@ -147,8 +215,9 @@ if ($submit && $reason_id)
display_reasons($reason_id);
$template->assign_vars(array(
'S_REPORT_POST' => ($pm_id) ? false : true,
'REPORT_TEXT' => $report_text,
'S_REPORT_ACTION' => append_sid("{$phpbb_root_path}report.$phpEx", 'f=' . $forum_id . '&amp;p=' . $post_id),
'S_REPORT_ACTION' => append_sid("{$phpbb_root_path}report.$phpEx", 'f=' . $forum_id . '&amp;p=' . $post_id . '&amp;pm=' . $pm_id),
'S_NOTIFY' => $user_notify,
'S_CAN_NOTIFY' => ($user->data['is_registered']) ? true : false)

View file

@ -100,6 +100,47 @@
</div>
<!-- ENDIF -->
<!-- IF S_SHOW_PM_REPORTS -->
<div class="panel">
<div class="inner"><span class="corners-top"><span></span></span>
<h3>{L_LATEST_REPORTED_PMS}</h3>
<!-- IF S_HAS_PM_REPORTS --><p>{L_PM_REPORTS_TOTAL}</p><!-- ENDIF -->
<!-- IF .report -->
<ul class="topiclist">
<li class="header">
<dl>
<dt>{L_VIEW_DETAILS}</dt>
<dd class="moderation"><span>{L_REPORTER}</span></dd>
</dl>
</li>
</ul>
<ul class="topiclist cplist">
<!-- BEGIN pm_report -->
<li class="row<!-- IF report.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
<dl>
<dt>
<a href="{pm_report.U_PM_DETAILS}" class="topictitle">{pm_report.PM_SUBJECT}</a> {pm_report.ATTACH_ICON_IMG}<br />
<span>{L_MESSAGE_BY_AUTHOR} {pm_report.PM_AUTHOR_FULL} &raquo; {pm_report.PM_TIME}</span><br />
<span>{L_MESSAGE_TO} {pm_report.RECIPIENTS}</span>
</dt>
<dd class="moderation">
<span>{L_REPORTED} {L_POST_BY_AUTHOR} {pm_report.REPORTER_FULL} {L_REPORTED_ON_DATE} {pm_report.REPORT_TIME}</span>
</dd>
</dl>
</li>
<!-- END pm_report -->
</ul>
<!-- ELSE -->
<p>{L_PM_REPORTS_ZERO_TOTAL}</p>
<!-- ENDIF -->
<span class="corners-bottom"><span></span></span></div>
</div>
<!-- ENDIF -->
<!-- IF S_SHOW_LOGS -->
<div class="panel">
<div class="inner"><span class="corners-top"><span></span></span>

View file

@ -1,7 +1,11 @@
<!-- INCLUDE mcp_header.html -->
<!-- IF S_MCP_REPORT -->
<!-- IF S_PM -->
<h2>{L_PM_REPORT_DETAILS}</h2>
<!-- ELSE -->
<h2>{L_REPORT_DETAILS}</h2>
<!-- ENDIF -->
<div id="report" class="panel">
<div class="inner"><span class="corners-top"><span></span></span>
@ -51,7 +55,16 @@
<!-- ENDIF -->
<h3><a href="{U_VIEW_POST}">{POST_SUBJECT}</a></h3>
<!-- IF S_PM -->
<p class="author">
<strong>{L_SENT_AT}:</strong> {POST_DATE}
<br /><strong>{L_PM_FROM}:</strong> {POST_AUTHOR_FULL}
<!-- IF S_TO_RECIPIENT --><br /><strong>{L_TO}:</strong> <!-- BEGIN to_recipient --><!-- IF to_recipient.NAME_FULL -->{to_recipient.NAME_FULL}<!-- ELSE --><a href="{to_recipient.U_VIEW}" style="color:<!-- IF to_recipient.COLOUR -->{to_recipient.COLOUR}<!-- ELSEIF to_recipient.IS_GROUP -->#0000FF<!-- ENDIF -->;">{to_recipient.NAME}</a><!-- ENDIF -->&nbsp;<!-- END to_recipient --><!-- ENDIF -->
<!-- IF S_BCC_RECIPIENT --><br /><strong>{L_BCC}:</strong> <!-- BEGIN bcc_recipient --><!-- IF bcc_recipient.NAME_FULL -->{bcc_recipient.NAME_FULL}<!-- ELSE --><a href="{bcc_recipient.U_VIEW}" style="color:<!-- IF bcc_recipient.COLOUR -->{bcc_recipient.COLOUR}<!-- ELSEIF bcc_recipient.IS_GROUP -->#0000FF<!-- ENDIF -->;">{bcc_recipient.NAME}</a><!-- ENDIF -->&nbsp;<!-- END bcc_recipient --><!-- ENDIF -->
</p>
<!-- ELSE -->
<p class="author">{MINI_POST_IMG} {L_POSTED} {L_POST_BY_AUTHOR} {POST_AUTHOR_FULL} &raquo; {POST_DATE}</p>
<!-- ENDIF -->
<!-- IF S_POST_UNAPPROVED -->
<form method="post" id="mcp_approve" action="{U_APPROVE_ACTION}">
@ -152,7 +165,7 @@
<div class="panel">
<div class="inner"><span class="corners-top"><span></span></span>
<p><!-- IF S_MCP_QUEUE -->{RETURN_QUEUE} | {RETURN_TOPIC_SIMPLE} | {RETURN_POST}<!-- ELSEIF S_MCP_REPORT -->{RETURN_REPORTS} | <a href="{U_VIEW_POST}">{L_VIEW_POST}</a> | <a href="{U_VIEW_TOPIC}">{L_VIEW_TOPIC}</a> | <a href="{U_VIEW_FORUM}">{L_VIEW_FORUM}</a><!-- ELSE -->{RETURN_TOPIC}<!-- ENDIF --></p>
<p><!-- IF S_MCP_QUEUE -->{RETURN_QUEUE} | {RETURN_TOPIC_SIMPLE} | {RETURN_POST}<!-- ELSEIF S_MCP_REPORT -->{RETURN_REPORTS}<!-- IF not S_PM --> | <a href="{U_VIEW_POST}">{L_VIEW_POST}</a> | <a href="{U_VIEW_TOPIC}">{L_VIEW_TOPIC}</a> | <a href="{U_VIEW_FORUM}">{L_VIEW_FORUM}</a><!-- ENDIF --><!-- ELSE -->{RETURN_TOPIC}<!-- ENDIF --></p>
<span class="corners-bottom"><span></span></span></div>
</div>

View file

@ -2,11 +2,13 @@
<form id="mcp" method="post" action="{S_MCP_ACTION}">
<!-- IF not S_PM -->
<fieldset class="forum-selection">
<label for="fo">{L_FORUM}: <select name="f" id="fo">{S_FORUM_OPTIONS}</select></label>
<input type="submit" name="sort" value="{L_GO}" class="button2" />
{S_FORM_TOKEN}
</fieldset>
<!-- ENDIF -->
<h2>{L_TITLE}</h2>
@ -26,7 +28,7 @@
<li class="header">
<dl>
<dt>{L_VIEW_DETAILS}</dt>
<dd class="moderation"><span>{L_REPORTER} &amp; {L_FORUM}</span></dd>
<dd class="moderation"><span>{L_REPORTER}<!-- IF not S_PM --> &amp; {L_FORUM}<!-- ENDIF --></span></dd>
<dd class="mark">{L_MARK}</dd>
</dl>
</li>
@ -36,6 +38,16 @@
<!-- BEGIN postrow -->
<li class="row<!-- IF postrow.S_ROW_COUNT is odd --> bg1<!-- ELSE --> bg2<!-- ENDIF -->">
<dl>
<!-- IF S_PM -->
<dt>
<a href="{postrow.U_VIEW_DETAILS}" class="topictitle">{postrow.PM_SUBJECT}</a> {postrow.ATTACH_ICON_IMG}<br />
<span>{L_MESSAGE_BY_AUTHOR} {postrow.PM_AUTHOR_FULL} &raquo; {postrow.PM_TIME}</span><br />
<span>{L_MESSAGE_TO} {postrow.RECIPIENTS}</span>
</dt>
<dd class="moderation">
<span>{postrow.REPORTER_FULL} {L_REPORTED_ON_DATE} {postrow.REPORT_TIME}</span>
</dd>
<!-- ELSE -->
<dt>
<a href="{postrow.U_VIEW_DETAILS}" class="topictitle">{postrow.POST_SUBJECT}</a> {postrow.ATTACH_ICON_IMG}<br />
<span>{L_POSTED} {L_POST_BY_AUTHOR} {postrow.POST_AUTHOR_FULL} &raquo; {postrow.POST_TIME}</span>
@ -44,6 +56,7 @@
<span>{postrow.REPORTER_FULL} {L_REPORTED_ON_DATE} {postrow.REPORT_TIME}<br />
{L_FORUM}: <a href="{postrow.U_VIEWFORUM}">{postrow.FORUM_NAME}</a></span>
</dd>
<!-- ENDIF -->
<dd class="mark"><input type="checkbox" name="report_id_list[]" value="{postrow.REPORT_ID}" /></dd>
</dl>
</li>

View file

@ -18,10 +18,11 @@
<div class="postbody">
<!-- IF U_DELETE or U_EDIT or U_QUOTE -->
<!-- IF U_DELETE or U_EDIT or U_QUOTE or U_REPORT -->
<ul class="profile-icons">
<!-- IF U_EDIT --><li class="edit-icon"><a href="{U_EDIT}" title="{L_POST_EDIT_PM}"><span>{L_POST_EDIT_PM}</span></a></li><!-- ENDIF -->
<!-- IF U_DELETE --><li class="delete-icon"><a href="{U_DELETE}" title="{L_DELETE_MESSAGE}"><span>{L_DELETE_MESSAGE}</span></a></li><!-- ENDIF -->
<!-- IF U_REPORT --><li class="report-icon"><a href="{U_REPORT}" title="{L_REPORT_PM}"><span>{L_REPORT_PM}</span></a></li><!-- ENDIF -->
<!-- IF U_QUOTE --><li class="quote-icon"><a href="{U_QUOTE}" title="{L_POST_QUOTE_PM}"><span>{L_POST_QUOTE_PM}</span></a></li><!-- ENDIF -->
</ul>
<!-- ENDIF -->

View file

@ -85,6 +85,43 @@
<br clear="all" /><br />
<!-- ENDIF -->
<!-- IF S_SHOW_PM_REPORTS -->
<table class="tablebg" width="100%" cellspacing="1">
<tr>
<td class="row3" colspan="6" align="center"><b class="gen">{L_LATEST_REPORTED_PMS}</b></td>
</tr>
<tr>
<th>&nbsp;{L_PM_SUBJECT}&nbsp;</th>
<th>&nbsp;{L_PM_FROM}&nbsp;</th>
<th>&nbsp;{L_TO} &amp; {L_BCC}&nbsp;</th>
<th>&nbsp;{L_SENT_AT}&nbsp;</th>
<th>&nbsp;{L_REPORTER}&nbsp;</th>
<th>&nbsp;{L_REPORT_TIME}&nbsp;</th>
</tr>
<!-- BEGIN pm_report -->
<tr>
<td class="row1" valign="top"><span class="gen">{pm_report.PM_SUBJECT}</span><br /><span class="gensmall">[ <a href="{pm_report.U_PM_DETAILS}">{L_VIEW_DETAILS}</a> ]</span></td>
<td class="row2" align="center" width="15%" nowrap="nowrap" valign="top"><span class="gen">{pm_report.PM_AUTHOR_FULL}</span></td>
<td class="row1" align="center" width="15%" nowrap="nowrap" valign="top"><span class="gen">{pm_report.RECIPIENTS}</span></td>
<td class="row2" align="center" width="10%" nowrap="nowrap" valign="top"><span class="gensmall">{pm_report.PM_TIME}</span></td>
<td class="row1" align="center" width="15%" nowrap="nowrap" valign="top"><span class="gen">{pm_report.REPORTER_FULL}</span></td>
<td class="row2" align="center" width="10%" nowrap="nowrap" valign="top"><span class="gensmall">{pm_report.REPORT_TIME}</span></td>
</tr>
<!-- BEGINELSE -->
<tr>
<td class="row1" colspan="6" align="center"><span class="gen">{L_PM_REPORTS_ZERO_TOTAL}</span></td>
</tr>
<!-- END pm_report -->
<!-- IF S_HAS_PM_REPORTS -->
<tr>
<td class="row3" colspan="6"><span class="gensmall">{L_PM_REPORTS_TOTAL}</span></td>
</tr>
<!-- ENDIF -->
</table>
<br clear="all" /><br />
<!-- ENDIF -->
<!-- IF S_SHOW_LOGS -->
<table class="tablebg" width="100%" cellspacing="1" cellpadding="4" border="0" align="{S_CONTENT_FLOW_END}">
<tr>

View file

@ -5,7 +5,7 @@
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="tablebg">
<tr>
<th colspan="2" align="center">{L_REPORT_DETAILS}</th>
<th colspan="2" align="center"><!-- IF S_PM -->{L_PM_REPORT_DETAILS}<!-- ELSE -->{L_REPORT_DETAILS}<!-- ENDIF --></th>
</tr>
<tr>
<td class="row1"><b class="gen">{L_REPORT_REASON}: </b></td>
@ -43,17 +43,17 @@
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="tablebg">
<tr>
<th colspan="2" align="center">{L_POST_DETAILS}</th>
<th colspan="2" align="center"><!-- IF S_PM -->{L_PM}<!-- ELSE -->{L_POST_DETAILS}<!-- ENDIF --></th>
</tr>
<tr>
<td class="row3" colspan="2" align="center"><span class="gensmall"><!-- IF S_MCP_QUEUE -->{RETURN_QUEUE} | {RETURN_TOPIC_SIMPLE} | {RETURN_POST}<!-- ELSEIF S_MCP_REPORT -->{RETURN_REPORTS} | <a href="{U_VIEW_POST}">{L_VIEW_POST}</a> | <a href="{U_VIEW_TOPIC}">{L_VIEW_TOPIC}</a> | <a href="{U_VIEW_FORUM}">{L_VIEW_FORUM}</a><!-- ELSE -->{RETURN_TOPIC}<!-- ENDIF --></span></td>
<td class="row3" colspan="2" align="center"><span class="gensmall"><!-- IF S_MCP_QUEUE -->{RETURN_QUEUE} | {RETURN_TOPIC_SIMPLE} | {RETURN_POST}<!-- ELSEIF S_MCP_REPORT -->{RETURN_REPORTS} | <!-- IF S_PM --><a href="{U_VIEW_POST}">{L_VIEW_PM}</a><!-- ELSE --><a href="{U_VIEW_POST}">{L_VIEW_POST}</a> | <a href="{U_VIEW_TOPIC}">{L_VIEW_TOPIC}</a> | <a href="{U_VIEW_FORUM}">{L_VIEW_FORUM}</a><!-- ENDIF --><!-- ELSE -->{RETURN_TOPIC}<!-- ENDIF --></span></td>
</tr>
<tr>
<td class="row1"><b class="gen">{L_POST_SUBJECT}: </b></td>
<td class="row1"><b class="gen"><!-- IF S_PM -->{L_PM_SUBJECT}<!-- ELSE -->{L_POST_SUBJECT}<!-- ENDIF -->: </b></td>
<td class="row2"><span class="gen">{POST_SUBJECT}</span> <!-- IF S_POST_UNAPPROVED --><span class="postapprove">{UNAPPROVED_IMG} <a href="{U_MCP_APPROVE}">{L_POST_UNAPPROVED}</a></span> <!-- ENDIF --> <!-- IF S_POST_REPORTED and not S_MCP_REPORT --><span class="postreported">{REPORTED_IMG} <a href="{U_MCP_REPORT}">{L_POST_REPORTED}</a></span><!-- ENDIF --></td>
</tr>
<tr>
<td class="row1" width="20%"><b class="gen">{L_POSTER}: </b></td>
<td class="row1" width="20%"><b class="gen"><!-- IF S_PM -->{L_PM_FROM}<!-- ELSE -->{L_POSTER}<!-- ENDIF -->: </b></td>
<td class="row2" width="80%"><span class="gen"<!-- IF POST_AUTHOR_COLOUR --> style="font-weight: bold; color: {POST_AUTHOR_COLOUR}"<!-- ENDIF -->>{POST_AUTHOR}</span><span class="gen"> &nbsp; [ <!-- IF U_POST_AUTHOR --><a href="{U_POST_AUTHOR}">{L_READ_PROFILE}</a><!-- ENDIF --><!-- IF S_USER_NOTES --><!-- IF U_POST_AUTHOR --> | <!-- ENDIF --><a href="{U_MCP_USER_NOTES}">{L_VIEW_NOTES}</a> <!-- IF U_MCP_WARN_USER -->| <a href="{U_MCP_WARN_USER}">{L_WARN_USER}</a><!-- ENDIF --><!-- ENDIF --> ]</span></td>
</tr>
<!-- IF S_CAN_VIEWIP -->
@ -69,9 +69,30 @@
</tr>
<!-- ENDIF -->
<tr>
<td class="row1"><b class="gen">{L_POSTED}: </b></td>
<td class="row1"><b class="gen"><!-- IF S_PM -->{L_SENT_AT}<!-- ELSE -->{L_POSTED}<!-- ENDIF -->: </b></td>
<td class="row2"><span class="postdetails">{POST_DATE}</span></td>
</tr>
<!-- IF S_TO_RECIPIENT -->
<tr>
<td class="row1" nowrap="nowrap" width="150"><b class="gen">{L_TO}:</b></td>
<td class="row2 gen">
<!-- BEGIN to_recipient -->
<!-- IF to_recipient.IS_GROUP --><span class="sep"><a href="{to_recipient.U_VIEW}">{to_recipient.NAME}</a></span><!-- ELSE -->{to_recipient.NAME_FULL}&nbsp;<!-- ENDIF -->
<!-- END to_recipient -->
</td>
</tr>
<!-- ENDIF -->
<!-- IF S_BCC_RECIPIENT -->
<tr>
<td class="row1" nowrap="nowrap" width="150"><b class="gen">{L_BCC}:</b></td>
<td class="row2 gen">
<!-- BEGIN bcc_recipient -->
<!-- IF bcc_recipient.IS_GROUP --><span class="sep"><a href="{bcc_recipient.U_VIEW}">{bcc_recipient.NAME}</a></span><!-- ELSE -->{bcc_recipient.NAME_FULL}&nbsp;<!-- ENDIF -->
<!-- END bcc_recipient -->
</td>
</tr>
<!-- ENDIF -->
<tr>
<th colspan="2" align="center">{L_PREVIEW}</th>
</tr>

View file

@ -7,11 +7,16 @@
<th colspan="5" nowrap="nowrap">{L_DISPLAY_OPTIONS}</th>
</tr>
<tr>
<td colspan="5" class="cat" align="center"><span class="gensmall">{L_DISPLAY_POSTS}:</span> {S_SELECT_SORT_DAYS}&nbsp;<span class="gensmall">{L_SORT_BY}</span> {S_SELECT_SORT_KEY} {S_SELECT_SORT_DIR}&nbsp;<span class="gensmall">{L_FORUM}</span> <select name="f">{S_FORUM_OPTIONS}</select> &nbsp; <!-- IF TOPIC_ID --><input type="checkbox" class="radio" name="t" value="{TOPIC_ID}" checked="checked" />&nbsp; <b>{L_ONLY_TOPIC}</b> &nbsp; <!-- ENDIF --><input class="btnlite" type="submit" name="sort" value="{L_GO}" /></td>
<td colspan="5" class="cat" align="center"><span class="gensmall">{L_DISPLAY_POSTS}:</span> {S_SELECT_SORT_DAYS}&nbsp;<span class="gensmall">{L_SORT_BY}</span> {S_SELECT_SORT_KEY} {S_SELECT_SORT_DIR}<!-- IF not S_PM -->&nbsp;<span class="gensmall">{L_FORUM}</span> <select name="f">{S_FORUM_OPTIONS}</select> &nbsp; <!-- IF TOPIC_ID --><input type="checkbox" class="radio" name="t" value="{TOPIC_ID}" checked="checked" />&nbsp; <b>{L_ONLY_TOPIC}</b> &nbsp; <!-- ENDIF --><!-- ENDIF --><input class="btnlite" type="submit" name="sort" value="{L_GO}" /></td>
</tr>
<tr>
<!-- IF S_PM -->
<th>&nbsp;{L_PM}&nbsp;</th>
<th>&nbsp;{L_TO} &amp; {L_BCC}&nbsp;</th>
<!-- ELSE -->
<th>&nbsp;{L_POST}&nbsp;</th>
<th>&nbsp;{L_AUTHOR}&nbsp;</th>
<!-- ENDIF -->
<th>&nbsp;{L_REPORTER}&nbsp;</th>
<th>&nbsp;{L_REPORT_TIME}&nbsp;</th>
<th width="5%">&nbsp;{L_SELECT}&nbsp;</th>
@ -19,10 +24,17 @@
<!-- BEGIN postrow -->
<!-- IF postrow.S_ROW_ is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->
<!-- IF S_PM -->
<td style="padding: 4px;"><p class="topictitle"><a href="{postrow.U_VIEW_DETAILS}">{postrow.PM_SUBJECT}</a></p>
<span class="gensmall">{L_PM_FROM}: {postrow.PM_AUTHOR_FULL}</span></td>
<td style="padding: 4px;" align="{S_CONTENT_FLOW_BEGIN}" valign="top"><span class="gen">{postrow.RECIPIENTS}</span><br />
<span class="gensmall">{L_SENT_AT}: {postrow.PM_TIME}</span></td>
<!-- ELSE -->
<td style="padding: 4px;"><p class="topictitle"><a href="{postrow.U_VIEWPOST}">{postrow.POST_SUBJECT}</a></p>
<span class="gensmall"><!-- IF postrow.U_VIEWFORUM -->{L_FORUM}: <a href="{postrow.U_VIEWFORUM}">{postrow.FORUM_NAME}</a><!-- ELSE -->{postrow.FORUM_NAME}<!-- ENDIF --></span></td>
<td style="padding: 4px;" align="{S_CONTENT_FLOW_BEGIN}" valign="top" nowrap="nowrap"><span class="gen">{postrow.POST_AUTHOR_FULL}</span><br />
<span class="gensmall">{postrow.POST_TIME}</span></td>
<!-- ENDIF -->
<td style="padding: 4px;" align="{S_CONTENT_FLOW_BEGIN}" valign="top" nowrap="nowrap"><span class="gen">{postrow.REPORTER_FULL}</span></td>
<td style="padding: 4px;" align="{S_CONTENT_FLOW_BEGIN}" valign="top" nowrap="nowrap"><span class="gen">{postrow.REPORT_TIME}</span><br />
<span class="gensmall">[ <a href="{postrow.U_VIEW_DETAILS}">{L_VIEW_DETAILS}</a> ]</span></td>

View file

@ -4,10 +4,10 @@
<table class="tablebg" width="100%" cellspacing="1">
<tr>
<th colspan="2">{L_REPORT_POST}</th>
<th colspan="2"><!-- IF S_REPORT_POST -->{L_REPORT_POST}<!-- ELSE -->{L_REPORT_MESSAGE}<!-- ENDIF --></th>
</tr>
<tr>
<td class="row3" colspan="2"><span class="gensmall">{L_REPORT_POST_EXPLAIN}</span></td>
<td class="row3" colspan="2"><span class="gensmall"><!-- IF S_REPORT_POST -->{L_REPORT_POST_EXPLAIN}<!-- ELSE -->{L_REPORT_MESSAGE_EXPLAIN}<!-- ENDIF --></span></td>
</tr>
<tr>
<td class="row1" width="22%"><b class="gen">{L_REASON}:</b></td>

View file

@ -93,7 +93,7 @@
<table width="100%" cellspacing="0">
<tr valign="middle">
<td class="gensmall" align="{S_CONTENT_FLOW_END}"> <!-- IF U_DELETE --><a href="{U_DELETE}">{DELETE_IMG}</a> <!-- ENDIF --></td>
<td class="gensmall" align="{S_CONTENT_FLOW_END}"> <!-- IF U_REPORT --><a href="{U_REPORT}">{REPORT_IMG}</a> <!-- ENDIF --><!-- IF U_DELETE --><a href="{U_DELETE}">{DELETE_IMG}</a> <!-- ENDIF --></td>
</tr>
</table>