From 3caa31bf581c3ac72ca6e0dff73c9003a4198cfc Mon Sep 17 00:00:00 2001 From: rxu Date: Sat, 4 Jul 2020 18:49:35 +0700 Subject: [PATCH 1/3] [ticket/16208] Fix posts/PM report notifications PHPBB3-16208 --- phpBB/language/en/common.php | 1 + phpBB/language/en/email/report_pm_closed.txt | 13 +++++ phpBB/language/en/ucp.php | 2 + phpBB/phpbb/notification/type/report_pm.php | 38 ++++++------- .../notification/type/report_pm_closed.php | 53 ++++++++++++------- 5 files changed, 69 insertions(+), 38 deletions(-) create mode 100644 phpBB/language/en/email/report_pm_closed.txt diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index f834ba694c..3f8117b7af 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -489,6 +489,7 @@ $lang = array_merge($lang, array( 'NOTIFICATION_REFERENCE' => '"%1$s"', 'NOTIFICATION_REASON' => 'Reason: %1$s.', 'NOTIFICATION_REPORT_PM' => 'Private Message reported by %1$s:', + 'NOTIFICATION_REPORT_PM_CLOSED' => 'Private Message report closed by %1$s:', 'NOTIFICATION_REPORT_POST' => 'Post reported by %1$s:', 'NOTIFICATION_REPORT_CLOSED' => 'Report closed by %1$s for:', 'NOTIFICATION_TOPIC' => 'New topic by %1$s:', diff --git a/phpBB/language/en/email/report_pm_closed.txt b/phpBB/language/en/email/report_pm_closed.txt new file mode 100644 index 0000000000..4492fe881f --- /dev/null +++ b/phpBB/language/en/email/report_pm_closed.txt @@ -0,0 +1,13 @@ +Subject: Private message report closed - "{SUBJECT}" + +Hello {USERNAME}, + +You are receiving this notification because the report you filed on the private message "{SUBJECT}" by "{AUTHOR_NAME}" 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. + +You can view your reported private message by clicking on the following link: + +{U_VIEW_MESSAGE} + +You have requested that you be notified on this event, remember that you can always choose not to be notified of closed private message reports by changing the appropriate setting in your profile. + +{EMAIL_SIG} diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 7cfbc2d50c..97986783fe 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -343,6 +343,8 @@ $lang = array_merge($lang, array( 'NOTIFICATION_TYPE_POST' => 'Someone replies to a topic to which you are subscribed', 'NOTIFICATION_TYPE_QUOTE' => 'Someone quotes you in a post', 'NOTIFICATION_TYPE_REPORT' => 'Someone reports a post', + 'NOTIFICATION_TYPE_REPORT_PM' => 'Someone reports a private message', + 'NOTIFICATION_TYPE_REPORT_PM_CLOSED' => 'Your report on a private message is closed by a moderator', 'NOTIFICATION_TYPE_TOPIC' => 'Someone creates a topic in a forum to which you are subscribed', 'NOTIFICATION_TYPE_ADMIN_ACTIVATE_USER' => 'User requiring activation', diff --git a/phpBB/phpbb/notification/type/report_pm.php b/phpBB/phpbb/notification/type/report_pm.php index 900d427748..9e7f524954 100644 --- a/phpBB/phpbb/notification/type/report_pm.php +++ b/phpBB/phpbb/notification/type/report_pm.php @@ -60,11 +60,11 @@ class report_pm extends \phpbb\notification\type\pm * @var bool|array False if the service should use it's default data * Array of data (including keys 'id', 'lang', and 'group') */ - static public $notification_option = array( - 'id' => 'notification.type.report', - 'lang' => 'NOTIFICATION_TYPE_REPORT', + static public $notification_option = [ + 'id' => 'notification.type.report_pm', + 'lang' => 'NOTIFICATION_TYPE_REPORT_PM', 'group' => 'NOTIFICATION_GROUP_MODERATION', - ); + ]; /** * Get the id of the parent @@ -84,9 +84,8 @@ class report_pm extends \phpbb\notification\type\pm */ public function is_available() { - $m_approve = $this->auth->acl_getf($this->permission, true); - - return (!empty($m_approve)); + return !empty($this->auth->acl_get($this->permission)) && + $this->config['allow_pm_report']; } @@ -99,11 +98,11 @@ class report_pm extends \phpbb\notification\type\pm * * @return array */ - public function find_users_for_notification($post, $options = array()) + public function find_users_for_notification($post, $options = []) { - $options = array_merge(array( - 'ignore_users' => array(), - ), $options); + $options = array_merge([ + 'ignore_users' => [], + ], $options); // Global $post['forum_id'] = 0; @@ -112,7 +111,7 @@ class report_pm extends \phpbb\notification\type\pm if (empty($auth_approve)) { - return array(); + return []; } if (($key = array_search($this->user->data['user_id'], $auth_approve[$post['forum_id']][$this->permission]))) @@ -120,9 +119,9 @@ class report_pm extends \phpbb\notification\type\pm unset($auth_approve[$post['forum_id']][$this->permission][$key]); } - return $this->check_user_notification_options($auth_approve[$post['forum_id']][$this->permission], array_merge($options, array( + return $this->check_user_notification_options($auth_approve[$post['forum_id']][$this->permission], array_merge($options, [ 'item_type' => static::$notification_option['id'], - ))); + ])); } /** @@ -144,7 +143,7 @@ class report_pm extends \phpbb\notification\type\pm { $user_data = $this->user_loader->get_user($this->get_data('from_user_id')); - return array( + return [ 'AUTHOR_NAME' => htmlspecialchars_decode($user_data['username']), 'SUBJECT' => htmlspecialchars_decode(censor_text($this->get_data('message_subject'))), @@ -152,7 +151,7 @@ class report_pm extends \phpbb\notification\type\pm 'TOPIC_TITLE' => htmlspecialchars_decode(censor_text($this->get_data('message_subject'))), 'U_VIEW_REPORT' => generate_board_url() . "/mcp.{$this->php_ext}?r={$this->item_parent_id}&i=pm_reports&mode=pm_report_details", - ); + ]; } /** @@ -239,15 +238,16 @@ class report_pm extends \phpbb\notification\type\pm */ public function users_to_query() { - return array( + return [ $this->get_data('from_user_id'), $this->get_data('reporter_id'), - ); } + ]; + } /** * {@inheritdoc} */ - public function create_insert_array($post, $pre_create_data = array()) + public function create_insert_array($post, $pre_create_data = []) { $this->set_data('reporter_id', $this->user->data['user_id']); $this->set_data('reason_title', strtoupper($post['reason_title'])); diff --git a/phpBB/phpbb/notification/type/report_pm_closed.php b/phpBB/phpbb/notification/type/report_pm_closed.php index 5e98eb5feb..1d281c3821 100644 --- a/phpBB/phpbb/notification/type/report_pm_closed.php +++ b/phpBB/phpbb/notification/type/report_pm_closed.php @@ -35,18 +35,30 @@ class report_pm_closed extends \phpbb\notification\type\pm * * @var string */ - public $email_template = ''; + public $email_template = 'report_pm_closed'; /** * Language key used to output the text * * @var string */ - protected $language_key = 'NOTIFICATION_REPORT_CLOSED'; + protected $language_key = 'NOTIFICATION_REPORT_PM_CLOSED'; + + /** + * Notification option data (for outputting to the user) + * + * @var bool|array False if the service should use it's default data + * Array of data (including keys 'id', 'lang', and 'group') + */ + static public $notification_option = [ + 'id' => 'notification.type.report_pm_closed', + 'lang' => 'NOTIFICATION_TYPE_REPORT_PM_CLOSED', + 'group' => 'NOTIFICATION_GROUP_MISCELLANEOUS', + ]; public function is_available() { - return false; + return (bool) $this->config['allow_pm_report']; } /** @@ -57,14 +69,18 @@ class report_pm_closed extends \phpbb\notification\type\pm * * @return array */ - public function find_users_for_notification($pm, $options = array()) + public function find_users_for_notification($pm, $options = []) { + $options = array_merge([ + 'ignore_users' => [], + ], $options); + if ($pm['reporter'] == $this->user->data['user_id']) { - return array(); + return []; } - return array($pm['reporter'] => $this->notification_manager->get_default_methods()); + return $this->check_user_notification_options([$pm['reporter']], $options); } /** @@ -74,7 +90,7 @@ class report_pm_closed extends \phpbb\notification\type\pm */ public function get_email_template() { - return false; + return $this->email_template; } /** @@ -84,17 +100,16 @@ class report_pm_closed extends \phpbb\notification\type\pm */ public function get_email_template_variables() { - return array(); - } + $sender_data = $this->user_loader->get_user($this->get_data('from_user_id')); + $closer_data = $this->user_loader->get_user($this->get_data('closer_id')); - /** - * Get the url to this item - * - * @return string URL - */ - public function get_url() - { - return ''; + return [ + 'AUTHOR_NAME' => htmlspecialchars_decode($sender_data['username']), + 'CLOSER_NAME' => htmlspecialchars_decode($closer_data['username']), + 'SUBJECT' => htmlspecialchars_decode(censor_text($this->get_data('message_subject'))), + + 'U_VIEW_MESSAGE'=> generate_board_url() . "/ucp.{$this->php_ext}?i=pm&mode=view&p={$this->item_id}", + ]; } /** @@ -140,13 +155,13 @@ class report_pm_closed extends \phpbb\notification\type\pm */ public function users_to_query() { - return array($this->get_data('closer_id')); + return [$this->get_data('closer_id')]; } /** * {@inheritdoc} */ - public function create_insert_array($pm, $pre_create_data = array()) + public function create_insert_array($pm, $pre_create_data = []) { $this->set_data('closer_id', $pm['closer_id']); From 242476c29014367e8923e8f7e431ae543f08d69a Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 5 Jul 2020 16:52:42 +0700 Subject: [PATCH 2/3] [ticket/16208] Fix closed post report notifications PHPBB3-16208 --- phpBB/language/en/email/report_closed.txt | 8 ++- phpBB/language/en/ucp.php | 1 + .../notification/type/report_pm_closed.php | 4 +- .../notification/type/report_post_closed.php | 54 +++++++++++++++---- 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/phpBB/language/en/email/report_closed.txt b/phpBB/language/en/email/report_closed.txt index f248018f9a..35b3e67f9e 100644 --- a/phpBB/language/en/email/report_closed.txt +++ b/phpBB/language/en/email/report_closed.txt @@ -2,6 +2,12 @@ Subject: Report closed - "{POST_SUBJECT}" Hello {USERNAME}, -You are receiving this notification because the report you filed on the post "{POST_SUBJECT}" in "{TOPIC_TITLE}" 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. +You are receiving this notification because the report you filed on the post "{POST_SUBJECT}" by "{AUTHOR_NAME}" in "{TOPIC_TITLE}" topic 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. + +You can view your reported post by clicking on the following link: + +{U_VIEW_POST} + +You have requested that you be notified on this event, remember that you can always choose not to be notified of closed post reports by changing the appropriate setting in your profile. {EMAIL_SIG} diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 97986783fe..8d91f00c5a 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -343,6 +343,7 @@ $lang = array_merge($lang, array( 'NOTIFICATION_TYPE_POST' => 'Someone replies to a topic to which you are subscribed', 'NOTIFICATION_TYPE_QUOTE' => 'Someone quotes you in a post', 'NOTIFICATION_TYPE_REPORT' => 'Someone reports a post', + 'NOTIFICATION_TYPE_REPORT_CLOSED' => 'Your report on a post is closed by a moderator', 'NOTIFICATION_TYPE_REPORT_PM' => 'Someone reports a private message', 'NOTIFICATION_TYPE_REPORT_PM_CLOSED' => 'Your report on a private message is closed by a moderator', 'NOTIFICATION_TYPE_TOPIC' => 'Someone creates a topic in a forum to which you are subscribed', diff --git a/phpBB/phpbb/notification/type/report_pm_closed.php b/phpBB/phpbb/notification/type/report_pm_closed.php index 1d281c3821..1901a3b2d5 100644 --- a/phpBB/phpbb/notification/type/report_pm_closed.php +++ b/phpBB/phpbb/notification/type/report_pm_closed.php @@ -100,8 +100,8 @@ class report_pm_closed extends \phpbb\notification\type\pm */ public function get_email_template_variables() { - $sender_data = $this->user_loader->get_user($this->get_data('from_user_id')); - $closer_data = $this->user_loader->get_user($this->get_data('closer_id')); + $sender_data = $this->user_loader->get_username($this->get_data('from_user_id'), 'username'); + $closer_data = $this->user_loader->get_username($this->get_data('closer_id'), 'username'); return [ 'AUTHOR_NAME' => htmlspecialchars_decode($sender_data['username']), diff --git a/phpBB/phpbb/notification/type/report_post_closed.php b/phpBB/phpbb/notification/type/report_post_closed.php index 165034d57e..9344aa1fb7 100644 --- a/phpBB/phpbb/notification/type/report_post_closed.php +++ b/phpBB/phpbb/notification/type/report_post_closed.php @@ -35,7 +35,7 @@ class report_post_closed extends \phpbb\notification\type\post * * @var string */ - public $email_template = ''; + public $email_template = 'report_closed'; /** * Language key used to output the text @@ -44,6 +44,18 @@ class report_post_closed extends \phpbb\notification\type\post */ protected $language_key = 'NOTIFICATION_REPORT_CLOSED'; + /** + * Notification option data (for outputting to the user) + * + * @var bool|array False if the service should use it's default data + * Array of data (including keys 'id', 'lang', and 'group') + */ + static public $notification_option = [ + 'id' => 'notification.type.report_post_closed', + 'lang' => 'NOTIFICATION_TYPE_REPORT_CLOSED', + 'group' => 'NOTIFICATION_GROUP_MISCELLANEOUS', + ]; + /** * Inherit notification read status from post. * @@ -53,7 +65,7 @@ class report_post_closed extends \phpbb\notification\type\post public function is_available() { - return false; + return $this->auth->acl_getf_global('f_report'); } /** @@ -64,14 +76,18 @@ class report_post_closed extends \phpbb\notification\type\post * * @return array */ - public function find_users_for_notification($post, $options = array()) + public function find_users_for_notification($post, $options = []) { + $options = array_merge([ + 'ignore_users' => [], + ], $options); + if ($post['reporter'] == $this->user->data['user_id']) { - return array(); + return []; } - return array($post['reporter'] => $this->notification_manager->get_default_methods()); + return $this->check_user_notification_options([$post['reporter']], $options); } /** @@ -81,7 +97,7 @@ class report_post_closed extends \phpbb\notification\type\post */ public function get_email_template() { - return false; + return $this->email_template; } /** @@ -91,7 +107,17 @@ class report_post_closed extends \phpbb\notification\type\post */ public function get_email_template_variables() { - return array(); + $post_username = $this->get_data('post_username') ?: $this->user_loader->get_username($this->get_data('poster_id'), 'username'); + $closer_username = $this->user_loader->get_username($this->get_data('closer_id'), 'username'); + + return [ + 'AUTHOR_NAME' => htmlspecialchars_decode($post_username), + 'CLOSER_NAME' => htmlspecialchars_decode($closer_username), + 'POST_SUBJECT' => htmlspecialchars_decode(censor_text($this->get_data('post_subject'))), + 'TOPIC_TITLE' => htmlspecialchars_decode(censor_text($this->get_data('topic_title'))), + + 'U_VIEW_POST' => generate_board_url() . "/viewtopic.{$this->php_ext}?p={$this->item_id}#p{$this->item_id}", + ]; } /** @@ -101,7 +127,15 @@ class report_post_closed extends \phpbb\notification\type\post */ public function get_url() { - return ''; + return append_sid($this->phpbb_root_path . 'viewtopic.' . $this->php_ext, "p={$this->item_id}#p{$this->item_id}"); + } + + /** + * {inheritDoc} + */ + public function get_redirect_url() + { + return $this->get_url(); } /** @@ -147,13 +181,13 @@ class report_post_closed extends \phpbb\notification\type\post */ public function users_to_query() { - return array($this->get_data('closer_id')); + return [$this->get_data('closer_id')]; } /** * {@inheritdoc} */ - public function create_insert_array($post, $pre_create_data = array()) + public function create_insert_array($post, $pre_create_data = []) { $this->set_data('closer_id', $post['closer_id']); From 856fcf75547e6bc9995736ea422674644278c0c6 Mon Sep 17 00:00:00 2001 From: rxu Date: Sat, 19 Sep 2020 18:15:13 +0700 Subject: [PATCH 3/3] [ticket/16208] Code adjustments PHPBB3-16208 --- phpBB/language/en/email/report_closed.txt | 2 +- phpBB/phpbb/notification/type/report_pm.php | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/phpBB/language/en/email/report_closed.txt b/phpBB/language/en/email/report_closed.txt index 35b3e67f9e..5ac9a8f878 100644 --- a/phpBB/language/en/email/report_closed.txt +++ b/phpBB/language/en/email/report_closed.txt @@ -2,7 +2,7 @@ Subject: Report closed - "{POST_SUBJECT}" Hello {USERNAME}, -You are receiving this notification because the report you filed on the post "{POST_SUBJECT}" by "{AUTHOR_NAME}" in "{TOPIC_TITLE}" topic 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. +You are receiving this notification because the report you filed on the post "{POST_SUBJECT}" by "{AUTHOR_NAME}" in "{TOPIC_TITLE}" 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. You can view your reported post by clicking on the following link: diff --git a/phpBB/phpbb/notification/type/report_pm.php b/phpBB/phpbb/notification/type/report_pm.php index 9e7f524954..0b2054b259 100644 --- a/phpBB/phpbb/notification/type/report_pm.php +++ b/phpBB/phpbb/notification/type/report_pm.php @@ -84,11 +84,10 @@ class report_pm extends \phpbb\notification\type\pm */ public function is_available() { - return !empty($this->auth->acl_get($this->permission)) && - $this->config['allow_pm_report']; + return $this->config['allow_pm_report'] && + !empty($this->auth->acl_get($this->permission)); } - /** * Find the users who want to receive notifications * (copied from post_in_queue)