aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--phpBB/includes/functions_posting.php9
-rw-r--r--phpBB/includes/notifications/service.php2
-rw-r--r--phpBB/includes/notifications/type/quote.php149
-rw-r--r--phpBB/language/en/common.php1
4 files changed, 160 insertions, 1 deletions
diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php
index 64840bfa51..ff0a59a4e3 100644
--- a/phpBB/includes/functions_posting.php
+++ b/phpBB/includes/functions_posting.php
@@ -2230,6 +2230,9 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
$notifications->add_notifications('topic', array_merge($data, array(
'post_username' => $username,
)));
+ $notifications->add_notifications('quote', array_merge($data, array(
+ 'post_username' => $username,
+ )));
break;
case 'reply' :
@@ -2237,6 +2240,9 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
$notifications->add_notifications('post', array_merge($data, array(
'post_username' => $username,
)));
+ $notifications->add_notifications('quote', array_merge($data, array(
+ 'post_username' => $username,
+ )));
break;
case 'edit_topic' :
@@ -2250,6 +2256,9 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
$notifications->update_notifications('post', array_merge($data, array(
'post_username' => $username,
)));
+ $notifications->add_notifications('quote', array_merge($data, array(
+ 'post_username' => $username,
+ )));
break;
}
}
diff --git a/phpBB/includes/notifications/service.php b/phpBB/includes/notifications/service.php
index b6255309c7..0f7752446a 100644
--- a/phpBB/includes/notifications/service.php
+++ b/phpBB/includes/notifications/service.php
@@ -130,7 +130,7 @@ class phpbb_notifications_service
$notify_users = $item_type_class_name::find_users_for_notification($this->phpbb_container, $data);
// Never send notifications to the anonymous user or the current user!
- $notify_users = array_diff($notify_users, array(ANONYMOUS, $this->phpbb_container->get('user')->data['user_id']));
+ unset($notify_users[ANONYMOUS], $notify_users[$this->phpbb_container->get('user')->data['user_id']]);
// Make sure not to send new notifications to users who've already been notified about this item
// This may happen when an item was added, but now new users are able to see the item
diff --git a/phpBB/includes/notifications/type/quote.php b/phpBB/includes/notifications/type/quote.php
new file mode 100644
index 0000000000..8f93c67de1
--- /dev/null
+++ b/phpBB/includes/notifications/type/quote.php
@@ -0,0 +1,149 @@
+<?php
+/**
+*
+* @package notifications
+* @copyright (c) 2012 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+
+/**
+* @ignore
+*/
+if (!defined('IN_PHPBB'))
+{
+ exit;
+}
+
+/**
+* Post tagging notifications class
+* This class handles notifications for tagging users in a post (ex: @EXreaction)
+*
+* @package notifications
+*/
+class phpbb_notifications_type_quote extends phpbb_notifications_type_post
+{
+ protected static $regular_expression_match = '#\[quote=&quot;(.+?)&quot;:#';
+
+ /**
+ * Get the type of notification this is
+ * phpbb_notifications_type_
+ */
+ public static function get_item_type()
+ {
+ return 'quote';
+ }
+
+ /**
+ * Find the users who want to receive notifications
+ *
+ * @param ContainerBuilder $phpbb_container
+ * @param array $post Data from
+ *
+ * @return array
+ */
+ public static function find_users_for_notification(ContainerBuilder $phpbb_container, $post)
+ {
+ $db = $phpbb_container->get('dbal.conn');
+
+ $usernames = false;
+ preg_match_all(self::$regular_expression_match, $post['message'], $usernames);
+
+ if (empty($usernames[1]))
+ {
+ return array();
+ }
+
+ $usernames[1] = array_unique($usernames[1]);
+
+ $usernames = array_map('utf8_clean_string', $usernames[1]);
+
+ $users = array();
+
+ /* todo
+ * find what type of notification they'd like to receive
+ */
+ $sql = 'SELECT user_id
+ FROM ' . USERS_TABLE . '
+ WHERE ' . $db->sql_in_set('username_clean', $usernames);
+ $result = $db->sql_query($sql);
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $users[$row['user_id']] = array('');
+ }
+ $db->sql_freeresult($result);
+
+ if (empty($users))
+ {
+ return array();
+ }
+
+ $auth_read = $phpbb_container->get('auth')->acl_get_list(array_keys($users), 'f_read', $post['forum_id']);
+
+ if (empty($auth_read))
+ {
+ return array();
+ }
+
+ $notify_users = array();
+
+ foreach ($auth_read[$post['forum_id']]['f_read'] as $user_id)
+ {
+ $notify_users[$user_id] = $users[$user_id];
+ }
+
+ return $notify_users;
+ }
+
+ /**
+ * Get the HTML formatted title of this notification
+ *
+ * @return string
+ */
+ public function get_formatted_title()
+ {
+ if ($this->get_data('post_username'))
+ {
+ $username = $this->get_data('post_username');
+ }
+ else
+ {
+ $user_data = $this->service->get_user($this->get_data('poster_id'));
+
+ $username = get_username_string('no_profile', $user_data['user_id'], $user_data['username'], $user_data['user_colour']);
+ }
+
+ return $this->phpbb_container->get('user')->lang(
+ 'NOTIFICATION_QUOTE',
+ $username,
+ censor_text($this->get_data('topic_title'))
+ );
+ }
+
+ /**
+ * Get the title of this notification
+ *
+ * @return string
+ */
+ public function get_title()
+ {
+ if ($this->get_data('post_username'))
+ {
+ $username = $this->get_data('post_username');
+ }
+ else
+ {
+ $user_data = $this->service->get_user($this->get_data('poster_id'));
+
+ $username = $user_data['username'];
+ }
+
+ return $this->phpbb_container->get('user')->lang(
+ 'NOTIFICATION_QUOTE',
+ $username,
+ censor_text($this->get_data('topic_title'))
+ );
+ }
+}
diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php
index a437c924cf..75ca5c0000 100644
--- a/phpBB/language/en/common.php
+++ b/phpBB/language/en/common.php
@@ -388,6 +388,7 @@ $lang = array_merge($lang, array(
'NOTIFICATIONS' => '[ Notifications ]',
'NOTIFICATION_PM' => '%1$s sent you a Private Message "%2$s".',
'NOTIFICATION_POST' => '%1$s replied to the topic "%2$s".',
+ 'NOTIFICATION_QUOTE' => '%1$s quoted you in the post "%2$s".',
'NOTIFICATION_TOPIC' => '%1$s posted a new topic "%2$s" in the forum "%3$s".',
'NOTIFY_ADMIN' => 'Please notify the board administrator or webmaster.',
'NOTIFY_ADMIN_EMAIL' => 'Please notify the board administrator or webmaster: <a href="mailto:%1$s">%1$s</a>',