1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-02-25 12:33:29 +01:00
php-phpbb/phpBB/phpbb/report/report_handler_pm.php
MateBartus a089ff5eb0 [ticket/13654] Moving reporting into controller
Moving report.php's content into different services and controllers to
better comply with the MVC model.

Also implementing:
 * Replacement for reasons_display()
 * Adding assign_meta_refresh_var() to \controller\helper
 * Adding separate routes for easy configuration
 * Updating unit tests to expect to correct results
 * Add BC tests

PHPBB3-13654
2015-04-16 11:29:11 +02:00

138 lines
3.9 KiB
PHP

<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\report;
use phpbb\report\exception\empty_report_exception;
use phpbb\report\exception\already_reported_exception;
use phpbb\report\exception\pm_reporting_disabled_exception;
use phpbb\report\exception\entity_not_found_exception;
class report_handler_pm extends report_handler
{
/**
* {@inheritdoc}
* @throws \phpbb\report\exception\pm_reporting_disabled_exception when PM reporting is disabled on the board
*/
public function add_report($id, $reason_id, $report_text, $user_notify)
{
// Cast the input variables
$id = (int) $id;
$reason_id = (int) $reason_id;
$report_text = (string) $report_text;
$user_notify = (int) $user_notify;
$this->validate_report_request($id);
$sql = 'SELECT *
FROM ' . REPORTS_REASONS_TABLE . "
WHERE reason_id = $reason_id";
$result = $this->db->sql_query($sql);
$row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
if (!$row || (empty($report_text) && strtolower($row['reason_title']) === 'other'))
{
throw new empty_report_exception();
}
$report_data = array(
'reason_id' => $reason_id,
'post_id' => 0,
'pm_id' => $id,
'user_notify' => $user_notify,
'report_text' => $report_text,
'reported_post_text' => $this->report_data['message_text'],
'reported_post_uid' => $this->report_data['bbcode_bitfield'],
'reported_post_bitfield' => $this->report_data['bbcode_uid'],
'reported_post_enable_bbcode' => $this->report_data['enable_bbcode'],
'reported_post_enable_smilies' => $this->report_data['enable_smilies'],
'reported_post_enable_magic_url' => $this->report_data['enable_magic_url'],
);
$report_id = $this->create_report($report_data);
$sql = 'UPDATE ' . PRIVMSGS_TABLE . '
SET message_reported = 1
WHERE msg_id = ' . $id;
$this->db->sql_query($sql);
$sql_ary = array(
'msg_id' => $id,
'user_id' => ANONYMOUS,
'author_id' => (int) $this->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 . ' ' . $this->db->sql_build_array('INSERT', $sql_ary);
$this->db->sql_query($sql);
$this->notifications->add_notifications('notification.type.report_pm', array_merge($this->report_data, $row, array(
'report_text' => $report_text,
'from_user_id' => $this->report_data['author_id'],
'report_id' => $report_id,
)));
}
/**
* {@inheritdoc}
* @throws \phpbb\report\exception\pm_reporting_disabled_exception when PM reporting is disabled on the board
*/
public function validate_report_request($id)
{
$id = (int) $id;
// Check if reporting PMs is enabled
if (!$this->config['allow_pm_report'])
{
throw new pm_reporting_disabled_exception();
}
else if ($id <= 0)
{
throw new entity_not_found_exception('NO_POST_SELECTED');
}
// Grab all relevant data
$sql = 'SELECT p.*, pt.*
FROM ' . PRIVMSGS_TABLE . ' p, ' . PRIVMSGS_TO_TABLE . " pt
WHERE p.msg_id = $id
AND p.msg_id = pt.msg_id
AND (p.author_id = " . $this->user->data['user_id'] . "
OR pt.user_id = " . $this->user->data['user_id'] . ")";
$result = $this->db->sql_query($sql);
$report_data = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
// Check if message exists
if (!$report_data)
{
$this->user->add_lang('ucp');
throw new entity_not_found_exception('NO_MESSAGE');
}
// Check if message is already reported
if ($report_data['message_reported'])
{
throw new already_reported_exception();
}
$this->report_data = $report_data;
}
}