mirror of
https://github.com/phpbb/phpbb.git
synced 2025-02-25 12:33:29 +01:00
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
138 lines
3.9 KiB
PHP
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;
|
|
}
|
|
}
|