From aa3f6f4002094d29952d0383107af687bf7dcb15 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Tue, 25 Sep 2012 10:10:10 -0500 Subject: [PATCH] [ticket/11103] Fixing some bugs with the post/topic notifications PHPBB3-11103 --- phpBB/includes/functions_posting.php | 43 +++++++-------------- phpBB/includes/notifications/type/quote.php | 8 +++- phpBB/includes/notifications/type/topic.php | 2 +- 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 4ae5989fed..41bdd9f598 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -2221,41 +2221,32 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u // Send Notifications $phpbb_notifications = $phpbb_container->get('notifications'); + $notification_data = array_merge($data, array( + 'topic_title' => (isset($data['topic_title'])) ? $data['topic_title'] : $subject, + 'post_username' => $username, + 'poster_id' => $poster_id, + 'post_text' => $data['message'], + 'post_time' => $current_time, + 'post_subject' => $subject, + )); if ($post_approval) { switch ($mode) { case 'post' : - $phpbb_notifications->add_notifications(array('topic', 'quote'), array_merge($data, array( - 'post_username' => $username, - 'poster_id' => (int) $user->data['user_id'], - 'post_time' => $current_time, - ))); + $phpbb_notifications->add_notifications(array('topic', 'quote'), $notification_data); break; case 'reply' : case 'quote' : - $phpbb_notifications->add_notifications(array('quote', 'bookmark', 'post'), array_merge($data, array( - 'post_username' => $username, - 'poster_id' => (int) $user->data['user_id'], - 'post_text' => $data['message'], - 'post_time' => $current_time, - ))); + $phpbb_notifications->add_notifications(array('quote', 'bookmark', 'post'), $notification_data); break; case 'edit_topic' : case 'edit_first_post' : case 'edit' : case 'edit_last_post' : - $phpbb_notifications->update_notifications('topic', array_merge($data, array( - 'post_username' => $username, - 'topic_title' => $subject, - ))); - - $phpbb_notifications->update_notifications(array('quote', 'bookmark', 'post'), array_merge($data, array( - 'post_username' => $username, - 'post_text' => $data['message'], - ))); + $phpbb_notifications->update_notifications(array('quote', 'bookmark', 'topic', 'post'), $notification_data); break; } } @@ -2264,20 +2255,12 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u switch ($mode) { case 'post' : - $phpbb_notifications->add_notifications(array('topic_in_queue'), array_merge($data, array( - 'post_username' => $username, - 'poster_id' => (int) $user->data['user_id'], - 'post_time' => $current_time, - ))); + $phpbb_notifications->add_notifications(array('topic_in_queue'), $notification_data); break; case 'reply' : case 'quote' : - $phpbb_notifications->add_notifications(array('post_in_queue'), array_merge($data, array( - 'post_username' => $username, - 'poster_id' => (int) $user->data['user_id'], - 'post_time' => $current_time, - ))); + $phpbb_notifications->add_notifications(array('post_in_queue'), $notification_data); break; case 'edit_topic' : diff --git a/phpBB/includes/notifications/type/quote.php b/phpBB/includes/notifications/type/quote.php index d116a40e4d..2079617510 100644 --- a/phpBB/includes/notifications/type/quote.php +++ b/phpBB/includes/notifications/type/quote.php @@ -37,7 +37,7 @@ class phpbb_notifications_type_quote extends phpbb_notifications_type_post * * @var string */ - protected static $regular_expression_match = '#\[quote="(.+?)":#'; + protected static $regular_expression_match = '#\[quote="(.+?)"#'; /** * Language key used to output the text @@ -155,6 +155,12 @@ class phpbb_notifications_type_quote extends phpbb_notifications_type_post $add_notifications[$user_id] = $notifications[$user_id]; } + // todo Adding notifications while editing a post can be funky. + // If the user has read the topic/post already, and the user is newly quoted it an edit, + // The notification will be stuck as unread until another post is made and the user visits + // the topic again because the posts will not be marked as read since the topic is already + // marked as read + // Add the necessary notifications $service->add_notifications_for_users(self::get_item_type(), $post, $add_notifications); diff --git a/phpBB/includes/notifications/type/topic.php b/phpBB/includes/notifications/type/topic.php index cf56451214..733b2108cc 100644 --- a/phpBB/includes/notifications/type/topic.php +++ b/phpBB/includes/notifications/type/topic.php @@ -212,7 +212,7 @@ class phpbb_notifications_type_topic extends phpbb_notifications_type_base $this->set_data('topic_title', $post['topic_title']); - $this->set_data('post_username', (($post['post_username'] != $this->phpbb_container->get('user')->data['username']) ? $post['post_username'] : '')); + $this->set_data('post_username', (($post['poster_id'] == ANONYMOUS) ? $post['post_username'] : '')); $this->set_data('forum_name', $post['forum_name']);