aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/notification
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/notification')
-rw-r--r--phpBB/includes/notification/exception.php29
-rw-r--r--phpBB/includes/notification/manager.php910
-rw-r--r--phpBB/includes/notification/method/base.php116
-rw-r--r--phpBB/includes/notification/method/email.php52
-rw-r--r--phpBB/includes/notification/method/interface.php48
-rw-r--r--phpBB/includes/notification/method/jabber.php69
-rw-r--r--phpBB/includes/notification/method/messenger_base.php100
-rw-r--r--phpBB/includes/notification/type/approve_post.php140
-rw-r--r--phpBB/includes/notification/type/approve_topic.php138
-rw-r--r--phpBB/includes/notification/type/base.php489
-rw-r--r--phpBB/includes/notification/type/bookmark.php138
-rw-r--r--phpBB/includes/notification/type/disapprove_post.php120
-rw-r--r--phpBB/includes/notification/type/disapprove_topic.php120
-rw-r--r--phpBB/includes/notification/type/interface.php189
-rw-r--r--phpBB/includes/notification/type/pm.php184
-rw-r--r--phpBB/includes/notification/type/post.php385
-rw-r--r--phpBB/includes/notification/type/post_in_queue.php154
-rw-r--r--phpBB/includes/notification/type/quote.php222
-rw-r--r--phpBB/includes/notification/type/report_pm.php229
-rw-r--r--phpBB/includes/notification/type/report_pm_closed.php155
-rw-r--r--phpBB/includes/notification/type/report_post.php196
-rw-r--r--phpBB/includes/notification/type/report_post_closed.php155
-rw-r--r--phpBB/includes/notification/type/topic.php277
-rw-r--r--phpBB/includes/notification/type/topic_in_queue.php154
24 files changed, 0 insertions, 4769 deletions
diff --git a/phpBB/includes/notification/exception.php b/phpBB/includes/notification/exception.php
deleted file mode 100644
index a52d6fdc57..0000000000
--- a/phpBB/includes/notification/exception.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2013 phpBB Group
-* @license http://opensource.org/licenses/gpl-license.php GNU Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Notifications exception
-*
-* @package notifications
-*/
-class phpbb_notification_exception extends \Exception
-{
- public function __toString()
- {
- return $this->getMessage();
- }
-}
diff --git a/phpBB/includes/notification/manager.php b/phpBB/includes/notification/manager.php
deleted file mode 100644
index 97833710c0..0000000000
--- a/phpBB/includes/notification/manager.php
+++ /dev/null
@@ -1,910 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Notifications service class
-* @package notifications
-*/
-class phpbb_notification_manager
-{
- /** @var array */
- protected $notification_types;
-
- /** @var array */
- protected $notification_methods;
-
- /** @var ContainerBuilder */
- protected $phpbb_container;
-
- /** @var phpbb_user_loader */
- protected $user_loader;
-
- /** @var phpbb_db_driver */
- protected $db;
-
- /** @var phpbb_cache_service */
- protected $cache;
-
- /** @var phpbb_user */
- protected $user;
-
- /** @var string */
- protected $phpbb_root_path;
-
- /** @var string */
- protected $php_ext;
-
- /** @var string */
- protected $notification_types_table;
-
- /** @var string */
- protected $notifications_table;
-
- /** @var string */
- protected $user_notifications_table;
-
- /**
- * Notification Constructor
- *
- * @param array $notification_types
- * @param array $notification_methods
- * @param ContainerBuilder $phpbb_container
- * @param phpbb_user_loader $user_loader
- * @param phpbb_db_driver $db
- * @param phpbb_user $user
- * @param string $phpbb_root_path
- * @param string $php_ext
- * @param string $notification_types_table
- * @param string $notifications_table
- * @param string $user_notifications_table
- * @return phpbb_notification_manager
- */
- public function __construct($notification_types, $notification_methods, $phpbb_container, phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_service $cache, $user, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
- {
- $this->notification_types = $notification_types;
- $this->notification_methods = $notification_methods;
- $this->phpbb_container = $phpbb_container;
-
- $this->user_loader = $user_loader;
- $this->db = $db;
- $this->cache = $cache;
- $this->user = $user;
-
- $this->phpbb_root_path = $phpbb_root_path;
- $this->php_ext = $php_ext;
-
- $this->notification_types_table = $notification_types_table;
- $this->notifications_table = $notifications_table;
- $this->user_notifications_table = $user_notifications_table;
- }
-
- /**
- * Load the user's notifications
- *
- * @param array $options Optional options to control what notifications are loaded
- * notification_id Notification id to load (or array of notification ids)
- * user_id User id to load notifications for (Default: $user->data['user_id'])
- * order_by Order by (Default: notification_time)
- * order_dir Order direction (Default: DESC)
- * limit Number of notifications to load (Default: 5)
- * start Notifications offset (Default: 0)
- * all_unread Load all unread notifications? If set to true, count_unread is set to true (Default: false)
- * count_unread Count all unread notifications? (Default: false)
- * count_total Count all notifications? (Default: false)
- * @return array Array of information based on the request with keys:
- * 'notifications' array of notification type objects
- * 'unread_count' number of unread notifications the user has if count_unread is true in the options
- * 'total_count' number of notifications the user has if count_total is true in the options
- */
- public function load_notifications(array $options = array())
- {
- // Merge default options
- $options = array_merge(array(
- 'notification_id' => false,
- 'user_id' => $this->user->data['user_id'],
- 'order_by' => 'notification_time',
- 'order_dir' => 'DESC',
- 'limit' => 0,
- 'start' => 0,
- 'all_unread' => false,
- 'count_unread' => false,
- 'count_total' => false,
- ), $options);
-
- // If all_unread, count_unread must be true
- $options['count_unread'] = ($options['all_unread']) ? true : $options['count_unread'];
-
- // Anonymous users and bots never receive notifications
- if ($options['user_id'] == $this->user->data['user_id'] && ($this->user->data['user_id'] == ANONYMOUS || $this->user->data['user_type'] == USER_IGNORE))
- {
- return array(
- 'notifications' => array(),
- 'unread_count' => 0,
- 'total_count' => 0,
- );
- }
-
- $notifications = $user_ids = array();
- $load_special = array();
- $total_count = $unread_count = 0;
-
- if ($options['count_unread'])
- {
- // Get the total number of unread notifications
- $sql = 'SELECT COUNT(n.notification_id) AS unread_count
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
- WHERE n.user_id = ' . (int) $options['user_id'] . '
- AND n.notification_read = 0
- AND nt.notification_type_id = n.notification_type_id
- AND nt.notification_type_enabled = 1';
- $result = $this->db->sql_query($sql);
- $unread_count = (int) $this->db->sql_fetchfield('unread_count', $result);
- $this->db->sql_freeresult($result);
- }
-
- if ($options['count_total'])
- {
- // Get the total number of notifications
- $sql = 'SELECT COUNT(n.notification_id) AS total_count
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
- WHERE n.user_id = ' . (int) $options['user_id'] . '
- AND nt.notification_type_id = n.notification_type_id
- AND nt.notification_type_enabled = 1';
- $result = $this->db->sql_query($sql);
- $total_count = (int) $this->db->sql_fetchfield('total_count', $result);
- $this->db->sql_freeresult($result);
- }
-
- if (!$options['count_total'] || $total_count)
- {
- $rowset = array();
-
- // Get the main notifications
- $sql = 'SELECT n.*, nt.notification_type_name
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
- WHERE n.user_id = ' . (int) $options['user_id'] .
- (($options['notification_id']) ? ((is_array($options['notification_id'])) ? ' AND ' . $this->db->sql_in_set('n.notification_id', $options['notification_id']) : ' AND n.notification_id = ' . (int) $options['notification_id']) : '') . '
- AND nt.notification_type_id = n.notification_type_id
- AND nt.notification_type_enabled = 1
- ORDER BY n.' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']);
- $result = $this->db->sql_query_limit($sql, $options['limit'], $options['start']);
-
- while ($row = $this->db->sql_fetchrow($result))
- {
- $rowset[$row['notification_id']] = $row;
- }
- $this->db->sql_freeresult($result);
-
- // Get all unread notifications
- if ($unread_count && $options['all_unread'] && !empty($rowset))
- {
- $sql = 'SELECT n.*, nt.notification_type_name
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
- WHERE n.user_id = ' . (int) $options['user_id'] . '
- AND n.notification_read = 0
- AND ' . $this->db->sql_in_set('n.notification_id', array_keys($rowset), true) . '
- AND nt.notification_type_id = n.notification_type_id
- AND nt.notification_type_enabled = 1
- ORDER BY n.' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']);
- $result = $this->db->sql_query_limit($sql, $options['limit'], $options['start']);
-
- while ($row = $this->db->sql_fetchrow($result))
- {
- $rowset[$row['notification_id']] = $row;
- }
- $this->db->sql_freeresult($result);
- }
-
- foreach ($rowset as $row)
- {
- $notification = $this->get_item_type_class($row['notification_type_name'], $row);
-
- // Array of user_ids to query all at once
- $user_ids = array_merge($user_ids, $notification->users_to_query());
-
- // Some notification types also require querying additional tables themselves
- if (!isset($load_special[$row['notification_type_name']]))
- {
- $load_special[$row['notification_type_name']] = array();
- }
- $load_special[$row['notification_type_name']] = array_merge($load_special[$row['notification_type_name']], $notification->get_load_special());
-
- $notifications[$row['notification_id']] = $notification;
- }
-
- $this->user_loader->load_users($user_ids);
-
- // Allow each type to load its own special items
- foreach ($load_special as $item_type => $data)
- {
- $item_class = $this->get_item_type_class($item_type);
-
- $item_class->load_special($data, $notifications);
- }
- }
-
- return array(
- 'notifications' => $notifications,
- 'unread_count' => $unread_count,
- 'total_count' => $total_count,
- );
- }
-
- /**
- * Mark notifications read
- *
- * @param bool|string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types). False to mark read for all item types
- * @param bool|int|array $item_id Item id or array of item ids. False to mark read for all item ids
- * @param bool|int|array $user_id User id or array of user ids. False to mark read for all user ids
- * @param bool|int $time Time at which to mark all notifications prior to as read. False to mark all as read. (Default: False)
- */
- public function mark_notifications_read($notification_type_name, $item_id, $user_id, $time = false)
- {
- $time = ($time !== false) ? $time : time();
-
- $sql = 'UPDATE ' . $this->notifications_table . "
- SET notification_read = 1
- WHERE notification_time <= " . (int) $time .
- (($notification_type_name !== false) ? ' AND ' .
- (is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name))
- : '') .
- (($user_id !== false) ? ' AND ' . (is_array($user_id) ? $this->db->sql_in_set('user_id', $user_id) : 'user_id = ' . (int) $user_id) : '') .
- (($item_id !== false) ? ' AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id) : '');
- $this->db->sql_query($sql);
- }
-
- /**
- * Mark notifications read from a parent identifier
- *
- * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
- * @param bool|int|array $item_parent_id Item parent id or array of item parent ids. False to mark read for all item parent ids
- * @param bool|int|array $user_id User id or array of user ids. False to mark read for all user ids
- * @param bool|int $time Time at which to mark all notifications prior to as read. False to mark all as read. (Default: False)
- */
- public function mark_notifications_read_by_parent($notification_type_name, $item_parent_id, $user_id, $time = false)
- {
- $time = ($time !== false) ? $time : time();
-
- $sql = 'UPDATE ' . $this->notifications_table . "
- SET notification_read = 1
- WHERE notification_time <= " . (int) $time .
- (($notification_type_name !== false) ? ' AND ' .
- (is_array($notification_type_name) ? $this->db->sql_in_set('notification_type_id', $this->get_notification_type_ids($notification_type_name)) : 'notification_type_id = ' . $this->get_notification_type_id($notification_type_name))
- : '') .
- (($item_parent_id !== false) ? ' AND ' . (is_array($item_parent_id) ? $this->db->sql_in_set('item_parent_id', $item_parent_id) : 'item_parent_id = ' . (int) $item_parent_id) : '') .
- (($user_id !== false) ? ' AND ' . (is_array($user_id) ? $this->db->sql_in_set('user_id', $user_id) : 'user_id = ' . (int) $user_id) : '');
- $this->db->sql_query($sql);
- }
-
- /**
- * Mark notifications read
- *
- * @param int|array $notification_id Notification id or array of notification ids.
- * @param bool|int $time Time at which to mark all notifications prior to as read. False to mark all as read. (Default: False)
- */
- public function mark_notifications_read_by_id($notification_id, $time = false)
- {
- $time = ($time !== false) ? $time : time();
-
- $sql = 'UPDATE ' . $this->notifications_table . "
- SET notification_read = 1
- WHERE notification_time <= " . (int) $time . '
- AND ' . ((is_array($notification_id)) ? $this->db->sql_in_set('notification_id', $notification_id) : 'notification_id = ' . (int) $notification_id);
- $this->db->sql_query($sql);
- }
-
- /**
- * Add a notification
- *
- * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
- * Note: If you send an array of types, any user who could receive multiple notifications from this single item will only receive
- * a single notification. If they MUST receive multiple notifications, call this function multiple times instead of sending an array
- * @param array $data Data specific for this type that will be inserted
- * @param array $options Optional options to control what notifications are loaded
- * ignore_users array of data to specify which users should not receive certain types of notifications
- * @return array Information about what users were notified and how they were notified
- */
- public function add_notifications($notification_type_name, $data, array $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- if (is_array($notification_type_name))
- {
- $notified_users = array();
- $temp_options = $options;
-
- foreach ($notification_type_name as $type)
- {
- $temp_options['ignore_users'] = $options['ignore_users'] + $notified_users;
- $notified_users += $this->add_notifications($type, $data, $temp_options);
- }
-
- return $notified_users;
- }
-
- $item_id = $this->get_item_type_class($notification_type_name)->get_item_id($data);
-
- // find out which users want to receive this type of notification
- $notify_users = $this->get_item_type_class($notification_type_name)->find_users_for_notification($data, $options);
-
- $this->add_notifications_for_users($notification_type_name, $data, $notify_users);
-
- return $notify_users;
- }
-
- /**
- * Add a notification for specific users
- *
- * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
- * @param array $data Data specific for this type that will be inserted
- * @param array $notify_users User list to notify
- */
- public function add_notifications_for_users($notification_type_name, $data, $notify_users)
- {
- if (is_array($notification_type_name))
- {
- foreach ($notification_type_name as $type)
- {
- $this->add_notifications_for_users($type, $data, $notify_users);
- }
-
- return;
- }
-
- $notification_type_id = $this->get_notification_type_id($notification_type_name);
-
- $item_id = $this->get_item_type_class($notification_type_name)->get_item_id($data);
-
- $user_ids = array();
- $notification_objects = $notification_methods = array();
-
- // Never send notifications to the anonymous user!
- unset($notify_users[ANONYMOUS]);
-
- // 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
- $sql = 'SELECT n.user_id
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
- WHERE n.notification_type_id = ' . (int) $notification_type_id . '
- AND n.item_id = ' . (int) $item_id . '
- AND nt.notification_type_id = n.notification_type_id
- AND nt.notification_type_enabled = 1';
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- unset($notify_users[$row['user_id']]);
- }
- $this->db->sql_freeresult($result);
-
- if (!sizeof($notify_users))
- {
- return;
- }
-
- // Allow notifications to perform actions before creating the insert array (such as run a query to cache some data needed for all notifications)
- $notification = $this->get_item_type_class($notification_type_name);
- $pre_create_data = $notification->pre_create_insert_array($data, $notify_users);
- unset($notification);
-
- $insert_buffer = new phpbb_db_sql_insert_buffer($this->db, $this->notifications_table);
-
- // Go through each user so we can insert a row in the DB and then notify them by their desired means
- foreach ($notify_users as $user => $methods)
- {
- $notification = $this->get_item_type_class($notification_type_name);
-
- $notification->user_id = (int) $user;
-
- // Insert notification row using buffer.
- $insert_buffer->insert($notification->create_insert_array($data, $pre_create_data));
-
- // Users are needed to send notifications
- $user_ids = array_merge($user_ids, $notification->users_to_query());
-
- foreach ($methods as $method)
- {
- // setup the notification methods and add the notification to the queue
- if ($method) // blank means we just insert it as a notification, but do not notify them by any other means
- {
- if (!isset($notification_methods[$method]))
- {
- $notification_methods[$method] = $this->get_method_class($method);
- }
-
- $notification_methods[$method]->add_to_queue($notification);
- }
- }
- }
-
- $insert_buffer->flush();
-
- // We need to load all of the users to send notifications
- $this->user_loader->load_users($user_ids);
-
- // run the queue for each method to send notifications
- foreach ($notification_methods as $method)
- {
- $method->notify();
- }
- }
-
- /**
- * Update a notification
- *
- * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $data is identical for the specified types)
- * @param array $data Data specific for this type that will be updated
- */
- public function update_notifications($notification_type_name, $data)
- {
- if (is_array($notification_type_name))
- {
- foreach ($notification_type_name as $type)
- {
- $this->update_notifications($type, $data);
- }
-
- return;
- }
-
- $notification = $this->get_item_type_class($notification_type_name);
-
- // Allow the notifications class to over-ride the update_notifications functionality
- if (method_exists($notification, 'update_notifications'))
- {
- // Return False to over-ride the rest of the update
- if ($notification->update_notifications($data) === false)
- {
- return;
- }
- }
-
- $notification_type_id = $this->get_notification_type_id($notification_type_name);
- $item_id = $notification->get_item_id($data);
- $update_array = $notification->create_update_array($data);
-
- $sql = 'UPDATE ' . $this->notifications_table . '
- SET ' . $this->db->sql_build_array('UPDATE', $update_array) . '
- WHERE notification_type_id = ' . (int) $notification_type_id . '
- AND item_id = ' . (int) $item_id;
- $this->db->sql_query($sql);
- }
-
- /**
- * Delete a notification
- *
- * @param string|array $notification_type_name Type identifier or array of item types (only acceptable if the $item_id is identical for the specified types)
- * @param int|array $item_id Identifier within the type (or array of ids)
- * @param array $data Data specific for this type that will be updated
- */
- public function delete_notifications($notification_type_name, $item_id)
- {
- if (is_array($notification_type_name))
- {
- foreach ($notification_type_name as $type)
- {
- $this->delete_notifications($type, $item_id);
- }
-
- return;
- }
-
- $notification_type_id = $this->get_notification_type_id($notification_type_name);
-
- $sql = 'DELETE FROM ' . $this->notifications_table . '
- WHERE notification_type_id = ' . (int) $notification_type_id . '
- AND ' . (is_array($item_id) ? $this->db->sql_in_set('item_id', $item_id) : 'item_id = ' . (int) $item_id);
- $this->db->sql_query($sql);
- }
-
- /**
- * Get all of the subscription types
- *
- * @return array Array of item types
- */
- public function get_subscription_types()
- {
- $subscription_types = array();
-
- foreach ($this->notification_types as $type_name => $data)
- {
- $type = $this->get_item_type_class($type_name);
-
- if ($type instanceof phpbb_notification_type_interface && $type->is_available())
- {
- $options = array_merge(array(
- 'id' => $type->get_type(),
- 'lang' => 'NOTIFICATION_TYPE_' . strtoupper($type->get_type()),
- 'group' => 'NOTIFICATION_GROUP_MISCELLANEOUS',
- ), (($type::$notification_option !== false) ? $type::$notification_option : array()));
-
- $subscription_types[$options['group']][$options['id']] = $options;
- }
- }
-
- // Move Miscellaneous to the very last section
- if (isset($subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS']))
- {
- $miscellaneous = $subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS'];
- unset($subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS']);
- $subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS'] = $miscellaneous;
- }
-
- return $subscription_types;
- }
-
- /**
- * Get all of the subscription methods
- *
- * @return array Array of methods
- */
- public function get_subscription_methods()
- {
- $subscription_methods = array();
-
- foreach ($this->notification_methods as $method_name => $data)
- {
- $method = $this->get_method_class($method_name);
-
- if ($method instanceof phpbb_notification_method_interface && $method->is_available())
- {
- $subscription_methods[$method_name] = array(
- 'id' => $method->get_type(),
- 'lang' => 'NOTIFICATION_METHOD_' . strtoupper($method->get_type()),
- );
- }
- }
-
- return $subscription_methods;
- }
-
- /**
- * Get global subscriptions (item_id = 0)
- *
- * @param bool|int $user_id The user_id to add the subscription for (bool false for current user)
- *
- * @return array Subscriptions
- */
- public function get_global_subscriptions($user_id = false)
- {
- $user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
-
- $subscriptions = array();
-
- foreach ($this->get_subscription_types() as $group_name => $types)
- {
- foreach ($types as $id => $type)
- {
- $sql = 'SELECT method, notify
- FROM ' . $this->user_notifications_table . '
- WHERE user_id = ' . (int) $user_id . "
- AND item_type = '" . $this->db->sql_escape($id) . "'
- AND item_id = 0";
- $result = $this->db->sql_query($sql);
-
- $row = $this->db->sql_fetchrow($result);
- if (!$row)
- {
- // No rows at all, default to ''
- $subscriptions[$id] = array('');
- }
- else
- {
- do
- {
- if (!$row['notify'])
- {
- continue;
- }
-
- if (!isset($subscriptions[$id]))
- {
- $subscriptions[$id] = array();
- }
-
- $subscriptions[$id][] = $row['method'];
- }
- while ($row = $this->db->sql_fetchrow($result));
- }
-
- $this->db->sql_freeresult($result);
- }
- }
-
- return $subscriptions;
- }
-
- /**
- * Add a subscription
- *
- * @param string $item_type Type identifier of the subscription
- * @param int $item_id The id of the item
- * @param string $method The method of the notification e.g. '', 'email', or 'jabber'
- * @param bool|int $user_id The user_id to add the subscription for (bool false for current user)
- */
- public function add_subscription($item_type, $item_id = 0, $method = '', $user_id = false)
- {
- if ($method !== '')
- {
- // Make sure to subscribe them to the base subscription
- $this->add_subscription($item_type, $item_id, '', $user_id);
- }
-
- $user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
-
- $sql = 'SELECT notify
- FROM ' . $this->user_notifications_table . "
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND item_id = " . (int) $item_id . '
- AND user_id = ' .(int) $user_id . "
- AND method = '" . $this->db->sql_escape($method) . "'";
- $this->db->sql_query($sql);
- $current = $this->db->sql_fetchfield('notify');
- $this->db->sql_freeresult();
-
- if ($current === false)
- {
- $sql = 'INSERT INTO ' . $this->user_notifications_table . ' ' .
- $this->db->sql_build_array('INSERT', array(
- 'item_type' => $item_type,
- 'item_id' => (int) $item_id,
- 'user_id' => (int) $user_id,
- 'method' => $method,
- 'notify' => 1,
- ));
- $this->db->sql_query($sql);
- }
- else if (!$current)
- {
- $sql = 'UPDATE ' . $this->user_notifications_table . "
- SET notify = 1
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND item_id = " . (int) $item_id . '
- AND user_id = ' .(int) $user_id . "
- AND method = '" . $this->db->sql_escape($method) . "'";
- $this->db->sql_query($sql);
- }
- }
-
- /**
- * Delete a subscription
- *
- * @param string $item_type Type identifier of the subscription
- * @param int $item_id The id of the item
- * @param string $method The method of the notification e.g. '', 'email', or 'jabber'
- * @param bool|int $user_id The user_id to add the subscription for (bool false for current user)
- */
- public function delete_subscription($item_type, $item_id = 0, $method = '', $user_id = false)
- {
- $user_id = ($user_id === false) ? $this->user->data['user_id'] : $user_id;
-
- // If no method, make sure that no other notification methods for this item are selected before deleting
- if ($method === '')
- {
- $sql = 'SELECT COUNT(*) as num_notifications
- FROM ' . $this->user_notifications_table . "
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND item_id = " . (int) $item_id . '
- AND user_id = ' .(int) $user_id . "
- AND method <> ''
- AND notify = 1";
- $this->db->sql_query($sql);
- $num_notifications = $this->db->sql_fetchfield('num_notifications');
- $this->db->sql_freeresult();
-
- if ($num_notifications)
- {
- return;
- }
- }
-
- $sql = 'UPDATE ' . $this->user_notifications_table . "
- SET notify = 0
- WHERE item_type = '" . $this->db->sql_escape($item_type) . "'
- AND item_id = " . (int) $item_id . '
- AND user_id = ' .(int) $user_id . "
- AND method = '" . $this->db->sql_escape($method) . "'";
- $this->db->sql_query($sql);
-
- if (!$this->db->sql_affectedrows())
- {
- $sql = 'INSERT INTO ' . $this->user_notifications_table . ' ' .
- $this->db->sql_build_array('INSERT', array(
- 'item_type' => $item_type,
- 'item_id' => (int) $item_id,
- 'user_id' => (int) $user_id,
- 'method' => $method,
- 'notify' => 0,
- ));
- $this->db->sql_query($sql);
- }
- }
-
- /**
- * Disable all notifications of a certain type
- *
- * This should be called when an extension which has notification types
- * is disabled so that all those notifications are hidden and do not
- * cause errors
- *
- * @param string $notification_type_name Type identifier of the subscription
- */
- public function disable_notifications($notification_type_name)
- {
- $sql = 'UPDATE ' . $this->notification_types_table . "
- SET notification_type_enabled = 0
- WHERE notification_type_name = '" . $this->db->sql_escape($notification_type_name) . "'";
- $this->db->sql_query($sql);
- }
-
- /**
- * Purge all notifications of a certain type
- *
- * This should be called when an extension which has notification types
- * is purged so that all those notifications are removed
- *
- * @param string $notification_type_name Type identifier of the subscription
- */
- public function purge_notifications($notification_type_name)
- {
- $notification_type_id = $this->get_notification_type_id($notification_type_name);
-
- $sql = 'DELETE FROM ' . $this->notifications_table . '
- WHERE notification_type_id = ' . (int) $notification_type_id;
- $this->db->sql_query($sql);
-
- $sql = 'DELETE FROM ' . $this->notification_types_table . '
- WHERE notification_type_id = ' . (int) $notification_type_id;
- $this->db->sql_query($sql);
-
- $this->cache->destroy('notification_type_ids');
- }
-
- /**
- * Enable all notifications of a certain type
- *
- * This should be called when an extension which has notification types
- * that was disabled is re-enabled so that all those notifications that
- * were hidden are shown again
- *
- * @param string $notification_type_name Type identifier of the subscription
- */
- public function enable_notifications($notification_type_name)
- {
- $sql = 'UPDATE ' . $this->notification_types_table . "
- SET notification_type_enabled = 1
- WHERE notification_type_name = '" . $this->db->sql_escape($notification_type_name) . "'";
- $this->db->sql_query($sql);
- }
-
- /**
- * Delete all notifications older than a certain time
- *
- * @param int $timestamp Unix timestamp to delete all notifications that were created before
- */
- public function prune_notifications($timestamp)
- {
- $sql = 'DELETE FROM ' . $this->notifications_table . '
- WHERE notification_time < ' . (int) $timestamp;
- $this->db->sql_query($sql);
- }
-
- /**
- * Helper to get the notifications item type class and set it up
- */
- public function get_item_type_class($notification_type_name, $data = array())
- {
- $notification_type_name = (strpos($notification_type_name, 'notification.type.') === 0) ? $notification_type_name : 'notification.type.' . $notification_type_name;
-
- $item = $this->load_object($notification_type_name);
-
- $item->set_initial_data($data);
-
- return $item;
- }
-
- /**
- * Helper to get the notifications method class and set it up
- */
- public function get_method_class($method_name)
- {
- $method_name = (strpos($method_name, 'notification.method.') === 0) ? $method_name : 'notification.method.' . $method_name;
-
- return $this->load_object($method_name);
- }
-
- /**
- * Helper to load objects (notification types/methods)
- */
- protected function load_object($object_name)
- {
- $object = $this->phpbb_container->get($object_name);
-
- if (method_exists($object, 'set_notification_manager'))
- {
- $object->set_notification_manager($this);
- }
-
- return $object;
- }
-
- /**
- * Get the notification type id from the name
- *
- * @param string $notification_type_name The name
- * @return int the notification_type_id
- */
- public function get_notification_type_id($notification_type_name)
- {
- $notification_type_ids = $this->cache->get('notification_type_ids');
-
- if ($notification_type_ids === false)
- {
- $notification_type_ids = array();
-
- $sql = 'SELECT notification_type_id, notification_type_name
- FROM ' . $this->notification_types_table;
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $notification_type_ids[$row['notification_type_name']] = (int) $row['notification_type_id'];
- }
- $this->db->sql_freeresult($result);
-
- $this->cache->put('notification_type_ids', $notification_type_ids);
- }
-
- if (!isset($notification_type_ids[$notification_type_name]))
- {
- if (!isset($this->notification_types[$notification_type_name]) && !isset($this->notification_types['notification.type.' . $notification_type_name]))
- {
- throw new phpbb_notification_exception($this->user->lang('NOTIFICATION_TYPE_NOT_EXIST', $notification_type_name));
- }
-
- $sql = 'INSERT INTO ' . $this->notification_types_table . ' ' . $this->db->sql_build_array('INSERT', array(
- 'notification_type_name' => $notification_type_name,
- 'notification_type_enabled' => 1,
- ));
- $this->db->sql_query($sql);
-
- $notification_type_ids[$notification_type_name] = (int) $this->db->sql_nextid();
-
- $this->cache->put('notification_type_ids', $notification_type_ids);
- }
-
- return $notification_type_ids[$notification_type_name];
- }
-
- /**
- * Get notification type ids (as an array)
- *
- * @param array $notification_type_names Array of strings
- * @return array Array of integers
- */
- public function get_notification_type_ids(array $notification_type_names)
- {
- $notification_type_ids = array();
-
- foreach ($notification_type_names as $name)
- {
- $notification_type_ids[$name] = $this->get_notification_type_id($name);
- }
-
- return $notification_type_ids;
- }
-}
diff --git a/phpBB/includes/notification/method/base.php b/phpBB/includes/notification/method/base.php
deleted file mode 100644
index b633956d01..0000000000
--- a/phpBB/includes/notification/method/base.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Base notifications method class
-* @package notifications
-*/
-abstract class phpbb_notification_method_base implements phpbb_notification_method_interface
-{
- /** @var phpbb_notification_manager */
- protected $notification_manager;
-
- /** @var phpbb_user_loader */
- protected $user_loader;
-
- /** @var phpbb_db_driver */
- protected $db;
-
- /** @var phpbb_cache_driver_interface */
- protected $cache;
-
- /** @var phpbb_template */
- protected $template;
-
- /** @var phpbb_extension_manager */
- protected $extension_manager;
-
- /** @var phpbb_user */
- protected $user;
-
- /** @var phpbb_auth */
- protected $auth;
-
- /** @var phpbb_config */
- protected $config;
-
- /** @var string */
- protected $phpbb_root_path;
-
- /** @var string */
- protected $php_ext;
-
- /**
- * Queue of messages to be sent
- *
- * @var array
- */
- protected $queue = array();
-
- /**
- * Notification Method Base Constructor
- *
- * @param phpbb_user_loader $user_loader
- * @param phpbb_db_driver $db
- * @param phpbb_cache_driver_interface $cache
- * @param phpbb_user $user
- * @param phpbb_auth $auth
- * @param phpbb_config $config
- * @param string $phpbb_root_path
- * @param string $php_ext
- * @return phpbb_notification_method_base
- */
- public function __construct(phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_driver_interface $cache, $user, phpbb_auth $auth, phpbb_config $config, $phpbb_root_path, $php_ext)
- {
- $this->user_loader = $user_loader;
- $this->db = $db;
- $this->cache = $cache;
- $this->user = $user;
- $this->auth = $auth;
- $this->config = $config;
- $this->phpbb_root_path = $phpbb_root_path;
- $this->php_ext = $php_ext;
- }
-
- /**
- * Set notification manager (required)
- *
- * @param phpbb_notification_manager $notification_manager
- */
- public function set_notification_manager(phpbb_notification_manager $notification_manager)
- {
- $this->notification_manager = $notification_manager;
- }
-
- /**
- * Add a notification to the queue
- *
- * @param phpbb_notification_type_interface $notification
- */
- public function add_to_queue(phpbb_notification_type_interface $notification)
- {
- $this->queue[] = $notification;
- }
-
- /**
- * Empty the queue
- */
- protected function empty_queue()
- {
- $this->queue = array();
- }
-}
diff --git a/phpBB/includes/notification/method/email.php b/phpBB/includes/notification/method/email.php
deleted file mode 100644
index 571b0ec656..0000000000
--- a/phpBB/includes/notification/method/email.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Email notification method class
-* This class handles sending emails for notifications
-*
-* @package notifications
-*/
-class phpbb_notification_method_email extends phpbb_notification_method_messenger_base
-{
- /**
- * Get notification method name
- *
- * @return string
- */
- public function get_type()
- {
- return 'email';
- }
-
- /**
- * Is this method available for the user?
- * This is checked on the notifications options
- */
- public function is_available()
- {
- return $this->config['email_enable'] && $this->user->data['user_email'];
- }
-
- /**
- * Parse the queue and notify the users
- */
- public function notify()
- {
- return $this->notify_using_messenger(NOTIFY_EMAIL);
- }
-}
diff --git a/phpBB/includes/notification/method/interface.php b/phpBB/includes/notification/method/interface.php
deleted file mode 100644
index ef875942cc..0000000000
--- a/phpBB/includes/notification/method/interface.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Base notifications method interface
-* @package notifications
-*/
-interface phpbb_notification_method_interface
-{
- /**
- * Get notification method name
- *
- * @return string
- */
- public function get_type();
-
- /**
- * Is this method available for the user?
- * This is checked on the notifications options
- */
- public function is_available();
-
- /**
- * Add a notification to the queue
- *
- * @param phpbb_notification_type_interface $notification
- */
- public function add_to_queue(phpbb_notification_type_interface $notification);
-
- /**
- * Parse the queue and notify the users
- */
- public function notify();
-}
diff --git a/phpBB/includes/notification/method/jabber.php b/phpBB/includes/notification/method/jabber.php
deleted file mode 100644
index d3b756d020..0000000000
--- a/phpBB/includes/notification/method/jabber.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Jabber notification method class
-* This class handles sending Jabber messages for notifications
-*
-* @package notifications
-*/
-class phpbb_notification_method_jabber extends phpbb_notification_method_messenger_base
-{
- /**
- * Get notification method name
- *
- * @return string
- */
- public function get_type()
- {
- return 'jabber';
- }
-
- /**
- * Is this method available for the user?
- * This is checked on the notifications options
- */
- public function is_available()
- {
- return ($this->global_available() && $this->user->data['user_jabber']);
- }
-
- /**
- * Is this method available at all?
- * This is checked before notifications are sent
- */
- public function global_available()
- {
- return !(
- empty($this->config['jab_enable']) ||
- empty($this->config['jab_host']) ||
- empty($this->config['jab_username']) ||
- empty($this->config['jab_password']) ||
- !@extension_loaded('xml')
- );
- }
-
- public function notify()
- {
- if (!$this->global_available())
- {
- return;
- }
-
- return $this->notify_using_messenger(NOTIFY_IM, 'short/');
- }
-}
diff --git a/phpBB/includes/notification/method/messenger_base.php b/phpBB/includes/notification/method/messenger_base.php
deleted file mode 100644
index 4966aa94bc..0000000000
--- a/phpBB/includes/notification/method/messenger_base.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Abstract notification method handling email and jabber notifications
-* using the phpBB messenger.
-*
-* @package notifications
-*/
-abstract class phpbb_notification_method_messenger_base extends phpbb_notification_method_base
-{
- /**
- * Notify using phpBB messenger
- *
- * @param int $notify_method Notify method for messenger (e.g. NOTIFY_IM)
- * @param string $template_dir_prefix Base directory to prepend to the email template name
- *
- * @return null
- */
- protected function notify_using_messenger($notify_method, $template_dir_prefix = '')
- {
- if (empty($this->queue))
- {
- return;
- }
-
- // Load all users we want to notify (we need their email address)
- $user_ids = $users = array();
- foreach ($this->queue as $notification)
- {
- $user_ids[] = $notification->user_id;
- }
-
- // We do not send emails to banned users
- if (!function_exists('phpbb_get_banned_user_ids'))
- {
- include($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext);
- }
- $banned_users = phpbb_get_banned_user_ids($user_ids);
-
- // Load all the users we need
- $this->user_loader->load_users($user_ids);
-
- // Load the messenger
- if (!class_exists('messenger'))
- {
- include($this->phpbb_root_path . 'includes/functions_messenger.' . $this->php_ext);
- }
- $messenger = new messenger();
- $board_url = generate_board_url();
-
- // Time to go through the queue and send emails
- foreach ($this->queue as $notification)
- {
- if ($notification->get_email_template() === false)
- {
- continue;
- }
-
- $user = $this->user_loader->get_user($notification->user_id);
-
- if ($user['user_type'] == USER_IGNORE || in_array($notification->user_id, $banned_users))
- {
- continue;
- }
-
- $messenger->template($template_dir_prefix . $notification->get_email_template(), $user['user_lang']);
-
- $messenger->set_addresses($user);
-
- $messenger->assign_vars(array_merge(array(
- 'USERNAME' => $user['username'],
-
- 'U_NOTIFICATION_SETTINGS' => generate_board_url() . '/ucp.' . $this->php_ext . '?i=ucp_notifications',
- ), $notification->get_email_template_variables()));
-
- $messenger->send($notify_method);
- }
-
- // Save the queue in the messenger class (has to be called or these emails could be lost?)
- $messenger->save_queue();
-
- // We're done, empty the queue
- $this->empty_queue();
- }
-}
diff --git a/phpBB/includes/notification/type/approve_post.php b/phpBB/includes/notification/type/approve_post.php
deleted file mode 100644
index 1a30781c35..0000000000
--- a/phpBB/includes/notification/type/approve_post.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Post approved notifications class
-* This class handles notifications for posts when they are approved (to their authors)
-*
-* @package notifications
-*/
-class phpbb_notification_type_approve_post extends phpbb_notification_type_post
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'approve_post';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_POST_APPROVED';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'id' => 'moderation_queue',
- 'lang' => 'NOTIFICATION_TYPE_MODERATION_QUEUE',
- 'group' => 'NOTIFICATION_GROUP_POSTING',
- );
-
- /**
- * Is available
- */
- public function is_available()
- {
- return !$this->auth->acl_get('m_approve');
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $post Data from
- *
- * @return array
- */
- public function find_users_for_notification($post, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- $users = array();
- $users[$post['poster_id']] = array('');
-
- $auth_read = $this->auth->acl_get_list(array_keys($users), 'f_read', $post['forum_id']);
-
- if (empty($auth_read))
- {
- return array();
- }
-
- return $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], array_merge($options, array(
- 'item_type' => self::$notification_option['id'],
- )));
- }
-
- /**
- * Pre create insert array function
- * This allows you to perform certain actions, like run a query
- * and load data, before create_insert_array() is run. The data
- * returned from this function will be sent to create_insert_array().
- *
- * @param array $post Post data from submit_post
- * @param array $notify_users Notify users list
- * Formated from find_users_for_notification()
- * @return array Whatever you want to send to create_insert_array().
- */
- public function pre_create_insert_array($post, $notify_users)
- {
- // In the parent class, this is used to check if the post is already
- // read by a user and marks the notification read if it was marked read.
- // Returning an empty array in effect, forces it to be marked as unread
- // (and also saves a query)
- return array();
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $this->set_data('post_subject', $post['post_subject']);
-
- $data = parent::create_insert_array($post, $pre_create_data);
-
- $this->notification_time = $data['notification_time'] = time();
-
- return $data;
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'post_approved';
- }
-}
diff --git a/phpBB/includes/notification/type/approve_topic.php b/phpBB/includes/notification/type/approve_topic.php
deleted file mode 100644
index e728e9ac30..0000000000
--- a/phpBB/includes/notification/type/approve_topic.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Topic approved notifications class
-* This class handles notifications for topics when they are approved (for authors)
-*
-* @package notifications
-*/
-class phpbb_notification_type_approve_topic extends phpbb_notification_type_topic
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'approve_topic';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_TOPIC_APPROVED';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'id' => 'moderation_queue',
- 'lang' => 'NOTIFICATION_TYPE_MODERATION_QUEUE',
- 'group' => 'NOTIFICATION_GROUP_POSTING',
- );
-
- /**
- * Is available
- */
- public function is_available()
- {
- return !$this->auth->acl_get('m_approve');
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $post Data from
- *
- * @return array
- */
- public function find_users_for_notification($post, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- $users = array();
- $users[$post['poster_id']] = array('');
-
- $auth_read = $this->auth->acl_get_list(array_keys($users), 'f_read', $post['forum_id']);
-
- if (empty($auth_read))
- {
- return array();
- }
-
- return $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], array_merge($options, array(
- 'item_type' => self::$notification_option['id'],
- )));
- }
-
- /**
- * Pre create insert array function
- * This allows you to perform certain actions, like run a query
- * and load data, before create_insert_array() is run. The data
- * returned from this function will be sent to create_insert_array().
- *
- * @param array $post Post data from submit_post
- * @param array $notify_users Notify users list
- * Formated from find_users_for_notification()
- * @return array Whatever you want to send to create_insert_array().
- */
- public function pre_create_insert_array($post, $notify_users)
- {
- // In the parent class, this is used to check if the post is already
- // read by a user and marks the notification read if it was marked read.
- // Returning an empty array in effect, forces it to be marked as unread
- // (and also saves a query)
- return array();
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $data = parent::create_insert_array($post, $pre_create_data);
-
- $this->notification_time = $data['notification_time'] = time();
-
- return $data;
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'topic_approved';
- }
-}
diff --git a/phpBB/includes/notification/type/base.php b/phpBB/includes/notification/type/base.php
deleted file mode 100644
index 46517f1c9b..0000000000
--- a/phpBB/includes/notification/type/base.php
+++ /dev/null
@@ -1,489 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Base notifications class
-* @package notifications
-*/
-abstract class phpbb_notification_type_base implements phpbb_notification_type_interface
-{
- /** @var phpbb_notification_manager */
- protected $notification_manager;
-
- /** @var phpbb_user_loader */
- protected $user_loader;
-
- /** @var phpbb_db_driver */
- protected $db;
-
- /** @var phpbb_cache_driver_interface */
- protected $cache;
-
- /** @var phpbb_template */
- protected $template;
-
- /** @var phpbb_user */
- protected $user;
-
- /** @var phpbb_auth */
- protected $auth;
-
- /** @var phpbb_config */
- protected $config;
-
- /** @var string */
- protected $phpbb_root_path;
-
- /** @var string */
- protected $php_ext;
-
- /** @var string */
- protected $notification_types_table;
-
- /** @var string */
- protected $notifications_table;
-
- /** @var string */
- protected $user_notifications_table;
-
- /**
- * Notification option data (for outputting to the user)
- *
- * @var bool|array False if the service should use its default data
- * Array of data (including keys 'id', 'lang', and 'group')
- */
- public static $notification_option = false;
-
- /**
- * The notification_type_id, set upon creation of the class
- * This is the notification_type_id from the notification_types table
- *
- * @var int
- */
- protected $notification_type_id;
-
- /**
- * Indentification data
- * notification_type_id - ID of the item type (auto generated, from notification types table)
- * item_id - ID of the item (e.g. post_id, msg_id)
- * item_parent_id - Parent item id (ex: for topic => forum_id, for post => topic_id, etc)
- * user_id
- * notification_read
- * notification_time
- * notification_data (special serialized field that each notification type can use to store stuff)
- *
- * @var array $data Notification row from the database
- * This must be private, all interaction should use __get(), __set(), get_data(), set_data()
- */
- private $data = array();
-
- /**
- * Notification Type Base Constructor
- *
- * @param phpbb_user_loader $user_loader
- * @param phpbb_db_driver $db
- * @param phpbb_cache_driver_interface $cache
- * @param phpbb_user $user
- * @param phpbb_auth $auth
- * @param phpbb_config $config
- * @param string $phpbb_root_path
- * @param string $php_ext
- * @param string $notification_types_table
- * @param string $notifications_table
- * @param string $user_notifications_table
- * @return phpbb_notification_type_base
- */
- public function __construct(phpbb_user_loader $user_loader, phpbb_db_driver $db, phpbb_cache_driver_interface $cache, $user, phpbb_auth $auth, phpbb_config $config, $phpbb_root_path, $php_ext, $notification_types_table, $notifications_table, $user_notifications_table)
- {
- $this->user_loader = $user_loader;
- $this->db = $db;
- $this->cache = $cache;
- $this->user = $user;
- $this->auth = $auth;
- $this->config = $config;
-
- $this->phpbb_root_path = $phpbb_root_path;
- $this->php_ext = $php_ext;
-
- $this->notification_types_table = $notification_types_table;
- $this->notifications_table = $notifications_table;
- $this->user_notifications_table = $user_notifications_table;
- }
-
- /**
- * Set notification manager (required)
- *
- * @param phpbb_notification_manager $notification_manager
- */
- public function set_notification_manager(phpbb_notification_manager $notification_manager)
- {
- $this->notification_manager = $notification_manager;
-
- $this->notification_type_id = $this->notification_manager->get_notification_type_id($this->get_type());
- }
-
- /**
- * Set initial data from the database
- *
- * @param array $data Row directly from the database
- */
- public function set_initial_data($data = array())
- {
- // The row from the database (unless this is a new notification we're going to add)
- $this->data = $data;
- $this->data['notification_data'] = (isset($this->data['notification_data'])) ? unserialize($this->data['notification_data']) : array();
- }
-
- /**
- * Magic method to get data from this notification
- *
- * @param mixed $name
- * @return mixed
- */
- public function __get($name)
- {
- return (!isset($this->data[$name])) ? null : $this->data[$name];
- }
-
-
- /**
- * Magic method to set data on this notification
- *
- * @param mixed $name
- * @return null
- */
- public function __set($name, $value)
- {
- $this->data[$name] = $value;
- }
-
-
- /**
- * Magic method to get a string of this notification
- *
- * Primarily for testing
- *
- * @param string $name
- * @return mixed
- */
- public function __toString()
- {
- return (!empty($this->data)) ? var_export($this->data, true) : $this->get_type();
- }
-
- /**
- * Get special data (only important for the classes that extend this)
- *
- * @param string $name Name of the variable to get
- * @return mixed
- */
- protected function get_data($name)
- {
- return ($name === false) ? $this->data['notification_data'] : ((isset($this->data['notification_data'][$name])) ? $this->data['notification_data'][$name] : null);
- }
-
- /**
- * Set special data (only important for the classes that extend this)
- *
- * @param string $name Name of the variable to set
- * @param mixed $value Value to set to the variable
- * @return mixed
- */
- protected function set_data($name, $value)
- {
- $this->data['notification_data'][$name] = $value;
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $type_data Data unique to this notification type
- * @param array $pre_create_data Data from pre_create_insert_array()
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($type_data, $pre_create_data = array())
- {
- // Defaults
- $this->data = array_merge(array(
- 'item_id' => static::get_item_id($type_data),
- 'notification_type_id' => $this->notification_type_id,
- 'item_parent_id' => static::get_item_parent_id($type_data),
-
- 'notification_time' => time(),
- 'notification_read' => false,
-
- 'notification_data' => array(),
- ), $this->data);
-
- $data = $this->data;
-
- $data['notification_data'] = serialize($data['notification_data']);
-
- return $data;
- }
-
- /**
- * Function for preparing the data for update in an SQL query
- * (The service handles insertion)
- *
- * @param array $type_data Data unique to this notification type
- * @return array Array of data ready to be updated in the database
- */
- public function create_update_array($type_data)
- {
- $data = $this->create_insert_array($type_data);
-
- // Unset data unique to each row
- unset(
- $data['notification_time'], // Also unsetting time, since it always tries to change the time to current (if you actually need to change the time, over-ride this function)
- $data['notification_id'],
- $data['notification_read'],
- $data['user_id']
- );
-
- return $data;
- }
-
- /**
- * Mark this item read
- *
- * @param bool $return True to return a string containing the SQL code to update this item, False to execute it (Default: False)
- * @return string|null If $return is False, nothing will be returned, else the sql code to update this item
- */
- public function mark_read($return = false)
- {
- return $this->mark(false, $return);
- }
-
- /**
- * Mark this item unread
- *
- * @param bool $return True to return a string containing the SQL code to update this item, False to execute it (Default: False)
- * @return string|null If $return is False, nothing will be returned, else the sql code to update this item
- */
- public function mark_unread($return = false)
- {
- return $this->mark(true, $return);
- }
-
- /**
- * Prepare to output the notification to the template
- *
- * @return array Template variables
- */
- public function prepare_for_display()
- {
- if ($this->get_url())
- {
- $u_mark_read = append_sid($this->phpbb_root_path . 'index.' . $this->php_ext, 'mark_notification=' . $this->notification_id);
- }
- else
- {
- $redirect = (($this->user->page['page_dir']) ? $this->user->page['page_dir'] . '/' : '') . $this->user->page['page_name'] . (($this->user->page['query_string']) ? '?' . $this->user->page['query_string'] : '');
-
- $u_mark_read = append_sid($this->phpbb_root_path . 'index.' . $this->php_ext, 'mark_notification=' . $this->notification_id . '&amp;redirect=' . urlencode($redirect));
- }
-
- return array(
- 'NOTIFICATION_ID' => $this->notification_id,
-
- 'AVATAR' => $this->get_avatar(),
-
- 'FORMATTED_TITLE' => $this->get_title(),
-
- 'URL' => $this->get_url(),
- 'TIME' => $this->user->format_date($this->notification_time),
-
- 'UNREAD' => !$this->notification_read,
-
- 'U_MARK_READ' => (!$this->notification_read) ? $u_mark_read : '',
- );
- }
-
- /**
- * -------------- Fall back functions -------------------
- */
-
- /**
- * URL to unsubscribe to this notification (fall back)
- *
- * @param string|bool $method Method name to unsubscribe from (email|jabber|etc), False to unsubscribe from all notifications for this item
- */
- public function get_unsubscribe_url($method = false)
- {
- return false;
- }
-
- /**
- * Get the user's avatar (fall back)
- *
- * @return string
- */
- public function get_avatar()
- {
- return '';
- }
-
- /**
- * Get the special items to load (fall back)
- *
- * @return array
- */
- public function get_load_special()
- {
- return array();
- }
-
- /**
- * Load the special items (fall back)
- */
- public function load_special($data, $notifications)
- {
- return;
- }
-
- /**
- * Is available (fall back)
- *
- * @return bool
- */
- public function is_available()
- {
- return true;
- }
-
- /**
- * Pre create insert array function (fall back)
- *
- * @return array
- */
- public function pre_create_insert_array($type_data, $notify_users)
- {
- return array();
- }
-
- /**
- * -------------- Helper functions -------------------
- */
-
- /**
- * Find the users who want to receive notifications (helper)
- *
- * @param array $user_ids User IDs to check if they want to receive notifications
- * (Bool False to check all users besides anonymous and bots (USER_IGNORE))
- *
- * @return array
- */
- protected function check_user_notification_options($user_ids = false, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- 'item_type' => $this->get_type(),
- 'item_id' => 0, // Global by default
- ), $options);
-
- if ($user_ids === false)
- {
- $user_ids = array();
-
- $sql = 'SELECT user_id
- FROM ' . USERS_TABLE . '
- WHERE user_id <> ' . ANONYMOUS . '
- AND user_type <> ' . USER_IGNORE;
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $user_ids[] = $row['user_id'];
- }
- $this->db->sql_freeresult($result);
- }
-
- if (empty($user_ids))
- {
- return array();
- }
-
- $rowset = $resulting_user_ids = array();
-
- $sql = 'SELECT user_id, method, notify
- FROM ' . $this->user_notifications_table . '
- WHERE ' . $this->db->sql_in_set('user_id', $user_ids) . "
- AND item_type = '" . $this->db->sql_escape($options['item_type']) . "'
- AND item_id = " . (int) $options['item_id'];
- $result = $this->db->sql_query($sql);
-
- while ($row = $this->db->sql_fetchrow($result))
- {
- $resulting_user_ids[] = $row['user_id'];
-
- if (!$row['notify'] || (isset($options['ignore_users'][$row['user_id']]) && in_array($row['method'], $options['ignore_users'][$row['user_id']])))
- {
- continue;
- }
-
- if (!isset($rowset[$row['user_id']]))
- {
- $rowset[$row['user_id']] = array();
- }
-
- $rowset[$row['user_id']][] = $row['method'];
- }
-
- $this->db->sql_freeresult($result);
-
- foreach ($user_ids as $user_id)
- {
- if (!in_array($user_id, $resulting_user_ids) && !isset($options['ignore_users'][$user_id]))
- {
- // No rows at all for this user, default to ''
- $rowset[$user_id] = array('');
- }
- }
-
- return $rowset;
- }
-
- /**
- * Mark this item read/unread helper
- *
- * @param bool $unread Unread (True/False) (Default: False)
- * @param bool $return True to return a string containing the SQL code to update this item, False to execute it (Default: False)
- * @return string|null If $return is False, nothing will be returned, else the sql code to update this item
- */
- protected function mark($unread = true, $return = false)
- {
- $this->notification_read = (bool) !$unread;
-
- $where = array(
- 'notification_type_id = ' . (int) $this->notification_type_id,
- 'item_id = ' . (int) $this->item_id,
- 'user_id = ' . (int) $this->user_id,
- );
- $where = implode(' AND ', $where);
-
- if ($return)
- {
- return $where;
- }
-
- $sql = 'UPDATE ' . $this->notifications_table . '
- SET notification_read = ' . (int) $this->notification_read . '
- WHERE ' . $where;
- $this->db->sql_query($sql);
- }
-}
diff --git a/phpBB/includes/notification/type/bookmark.php b/phpBB/includes/notification/type/bookmark.php
deleted file mode 100644
index ae2e75d3eb..0000000000
--- a/phpBB/includes/notification/type/bookmark.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Bookmark updating notifications class
-* This class handles notifications for replies to a bookmarked topic
-*
-* @package notifications
-*/
-class phpbb_notification_type_bookmark extends phpbb_notification_type_post
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'bookmark';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_BOOKMARK';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'lang' => 'NOTIFICATION_TYPE_BOOKMARK',
- 'group' => 'NOTIFICATION_GROUP_POSTING',
- );
-
- /**
- * Is available
- */
- public function is_available()
- {
- return $this->config['allow_bookmarks'];
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $post Data from
- *
- * @return array
- */
- public function find_users_for_notification($post, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- $users = array();
-
- $sql = 'SELECT user_id
- FROM ' . BOOKMARKS_TABLE . '
- WHERE ' . $this->db->sql_in_set('topic_id', $post['topic_id']) . '
- AND user_id <> ' . (int) $post['poster_id'];
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $users[] = $row['user_id'];
- }
- $this->db->sql_freeresult($result);
-
- if (empty($users))
- {
- return array();
- }
- sort($users);
-
- $auth_read = $this->auth->acl_get_list($users, 'f_read', $post['forum_id']);
-
- if (empty($auth_read))
- {
- return array();
- }
-
- $notify_users = $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], $options);
-
- // Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
- $update_notifications = array();
- $sql = 'SELECT n.*
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
- WHERE n.notification_type_id = ' . (int) $this->notification_type_id . '
- AND n.item_parent_id = ' . (int) self::get_item_parent_id($post) . '
- AND n.notification_read = 0
- AND nt.notification_type_id = n.notification_type_id
- AND nt.notification_type_enabled = 1';
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- // Do not create a new notification
- unset($notify_users[$row['user_id']]);
-
- $notification = $this->notification_manager->get_item_type_class($this->get_type(), $row);
- $sql = 'UPDATE ' . $this->notifications_table . '
- SET ' . $this->db->sql_build_array('UPDATE', $notification->add_responders($post)) . '
- WHERE notification_id = ' . $row['notification_id'];
- $this->db->sql_query($sql);
- }
- $this->db->sql_freeresult($result);
-
- return $notify_users;
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'bookmark';
- }
-}
diff --git a/phpBB/includes/notification/type/disapprove_post.php b/phpBB/includes/notification/type/disapprove_post.php
deleted file mode 100644
index 951c7e0254..0000000000
--- a/phpBB/includes/notification/type/disapprove_post.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Post disapproved notifications class
-* This class handles notifications for posts when they are disapproved (for authors)
-*
-* @package notifications
-*/
-class phpbb_notification_type_disapprove_post extends phpbb_notification_type_approve_post
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'disapprove_post';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_POST_DISAPPROVED';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'id' => 'moderation_queue',
- 'lang' => 'NOTIFICATION_TYPE_MODERATION_QUEUE',
- 'group' => 'NOTIFICATION_GROUP_POSTING',
- );
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title()
- {
- return $this->user->lang(
- $this->language_key,
- censor_text($this->get_data('topic_title')),
- $this->get_data('disapprove_reason')
- );
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return '';
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- return array_merge(parent::get_email_template_variables(), array(
- 'REASON' => htmlspecialchars_decode($this->get_data('disapprove_reason')),
- ));
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $this->set_data('disapprove_reason', $post['disapprove_reason']);
-
- $data = parent::create_insert_array($post);
-
- $this->notification_time = $data['notification_time'] = time();
-
- return $data;
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'post_disapproved';
- }
-}
diff --git a/phpBB/includes/notification/type/disapprove_topic.php b/phpBB/includes/notification/type/disapprove_topic.php
deleted file mode 100644
index 038e528797..0000000000
--- a/phpBB/includes/notification/type/disapprove_topic.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Topic disapproved notifications class
-* This class handles notifications for topics when they are disapproved (for authors)
-*
-* @package notifications
-*/
-class phpbb_notification_type_disapprove_topic extends phpbb_notification_type_approve_topic
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'disapprove_topic';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_TOPIC_DISAPPROVED';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'id' => 'moderation_queue',
- 'lang' => 'NOTIFICATION_TYPE_MODERATION_QUEUE',
- 'group' => 'NOTIFICATION_GROUP_POSTING',
- );
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title()
- {
- return $this->user->lang(
- $this->language_key,
- censor_text($this->get_data('topic_title')),
- $this->get_data('disapprove_reason')
- );
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return '';
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- return array_merge(parent::get_email_template_variables(), array(
- 'REASON' => htmlspecialchars_decode($this->get_data('disapprove_reason')),
- ));
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $this->set_data('disapprove_reason', $post['disapprove_reason']);
-
- $data = parent::create_insert_array($post, $pre_create_data);
-
- $this->notification_time = $data['notification_time'] = time();
-
- return $data;
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'topic_disapproved';
- }
-}
diff --git a/phpBB/includes/notification/type/interface.php b/phpBB/includes/notification/type/interface.php
deleted file mode 100644
index a40fdafd09..0000000000
--- a/phpBB/includes/notification/type/interface.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Base notifications interface
-* @package notifications
-*/
-interface phpbb_notification_type_interface
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type();
-
- /**
- * Set initial data from the database
- *
- * @param array $data Row directly from the database
- */
- public function set_initial_data($data);
-
- /**
- * Get the id of the item
- *
- * @param array $type_data The type specific data
- */
- public static function get_item_id($type_data);
-
- /**
- * Get the id of the parent
- *
- * @param array $type_data The type specific data
- */
- public static function get_item_parent_id($type_data);
-
- /**
- * Is this type available to the current user (defines whether or not it will be shown in the UCP Edit notification options)
- *
- * @return bool True/False whether or not this is available to the user
- */
- public function is_available();
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $type_data The type specific data
- * @param array $options Options for finding users for notification
- * ignore_users => array of users and user types that should not receive notifications from this type because they've already been notified
- * e.g.: array(2 => array(''), 3 => array('', 'email'), ...)
- *
- * @return array
- */
- public function find_users_for_notification($type_data, $options);
-
- /**
- * Users needed to query before this notification can be displayed
- *
- * @return array Array of user_ids
- */
- public function users_to_query();
-
- /**
- * Get the special items to load
- *
- * @return array Data will be combined sent to load_special() so you can run a single query and get data required for this notification type
- */
- public function get_load_special();
-
- /**
- * Load the special items
- *
- * @param array $data Data from get_load_special()
- * @param array $notifications Array of notifications (key is notification_id, value is the notification objects)
- */
- public function load_special($data, $notifications);
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title();
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url();
-
- /**
- * URL to unsubscribe to this notification
- *
- * @param string|bool $method Method name to unsubscribe from (email|jabber|etc), False to unsubscribe from all notifications for this item
- */
- public function get_unsubscribe_url($method);
-
- /**
- * Get the user's avatar (the user who caused the notification typically)
- *
- * @return string
- */
- public function get_avatar();
-
- /**
- * Prepare to output the notification to the template
- */
- public function prepare_for_display();
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template();
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables();
-
- /**
- * Pre create insert array function
- * This allows you to perform certain actions, like run a query
- * and load data, before create_insert_array() is run. The data
- * returned from this function will be sent to create_insert_array().
- *
- * @param array $type_data The type specific data
- * @param array $notify_users Notify users list
- * Formated from find_users_for_notification()
- * @return array Whatever you want to send to create_insert_array().
- */
- public function pre_create_insert_array($type_data, $notify_users);
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $type_data The type specific data
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($type_data, $pre_create_data);
-
- /**
- * Function for preparing the data for update in an SQL query
- * (The service handles insertion)
- *
- * @param array $type_data Data unique to this notification type
- *
- * @return array Array of data ready to be updated in the database
- */
- public function create_update_array($type_data);
-
- /**
- * Mark this item read
- *
- * @param bool $return True to return a string containing the SQL code to update this item, False to execute it (Default: False)
- * @return string
- */
- public function mark_read($return);
-
- /**
- * Mark this item unread
- *
- * @param bool $return True to return a string containing the SQL code to update this item, False to execute it (Default: False)
- * @return string
- */
- public function mark_unread($return);
-}
diff --git a/phpBB/includes/notification/type/pm.php b/phpBB/includes/notification/type/pm.php
deleted file mode 100644
index b3db7ad5ad..0000000000
--- a/phpBB/includes/notification/type/pm.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Private message notifications class
-* This class handles notifications for private messages
-*
-* @package notifications
-*/
-class phpbb_notification_type_pm extends phpbb_notification_type_base
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'pm';
- }
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'lang' => 'NOTIFICATION_TYPE_PM',
- );
-
- /**
- * Is available
- */
- public function is_available()
- {
- return ($this->config['allow_privmsg'] && $this->auth->acl_get('u_readpm'));
- }
-
- /**
- * Get the id of the
- *
- * @param array $pm The data from the private message
- */
- public static function get_item_id($pm)
- {
- return (int) $pm['msg_id'];
- }
-
- /**
- * Get the id of the parent
- *
- * @param array $pm The data from the pm
- */
- public static function get_item_parent_id($pm)
- {
- // No parent
- return 0;
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $pm Data from
- *
- * @return array
- */
- public function find_users_for_notification($pm, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- if (!sizeof($pm['recipients']))
- {
- return array();
- }
-
- unset($pm['recipients'][$pm['from_user_id']]);
-
- $this->user_loader->load_users(array_keys($pm['recipients']));
-
- return $this->check_user_notification_options(array_keys($pm['recipients']), $options);
- }
-
- /**
- * Get the user's avatar
- */
- public function get_avatar()
- {
- return $this->user_loader->get_avatar($this->get_data('from_user_id'));
- }
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title()
- {
- $username = $this->user_loader->get_username($this->get_data('from_user_id'), 'no_profile');
-
- return $this->user->lang('NOTIFICATION_PM', $username, $this->get_data('message_subject'));
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'privmsg_notify';
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- $user_data = $this->user_loader->get_user($this->get_data('from_user_id'));
-
- return array(
- 'AUTHOR_NAME' => htmlspecialchars_decode($user_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}",
- );
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return append_sid($this->phpbb_root_path . 'ucp.' . $this->php_ext, "i=pm&amp;mode=view&amp;p={$this->item_id}");
- }
-
- /**
- * Users needed to query before this notification can be displayed
- *
- * @return array Array of user_ids
- */
- public function users_to_query()
- {
- return array($this->get_data('from_user_id'));
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($pm, $pre_create_data = array())
- {
- $this->set_data('from_user_id', $pm['from_user_id']);
-
- $this->set_data('message_subject', $pm['message_subject']);
-
- return parent::create_insert_array($pm, $pre_create_data);
- }
-}
diff --git a/phpBB/includes/notification/type/post.php b/phpBB/includes/notification/type/post.php
deleted file mode 100644
index 9207fd866e..0000000000
--- a/phpBB/includes/notification/type/post.php
+++ /dev/null
@@ -1,385 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Post notifications class
-* This class handles notifications for replies to a topic
-*
-* @package notifications
-*/
-class phpbb_notification_type_post extends phpbb_notification_type_base
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'post';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_POST';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'lang' => 'NOTIFICATION_TYPE_POST',
- 'group' => 'NOTIFICATION_GROUP_POSTING',
- );
-
- /**
- * Is available
- */
- public function is_available()
- {
- return $this->config['allow_topic_notify'];
- }
-
- /**
- * Get the id of the item
- *
- * @param array $post The data from the post
- */
- public static function get_item_id($post)
- {
- return (int) $post['post_id'];
- }
-
- /**
- * Get the id of the parent
- *
- * @param array $post The data from the post
- */
- public static function get_item_parent_id($post)
- {
- return (int) $post['topic_id'];
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $post Data from
- *
- * @return array
- */
- public function find_users_for_notification($post, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- $users = array();
-
- $sql = 'SELECT user_id
- FROM ' . TOPICS_WATCH_TABLE . '
- WHERE topic_id = ' . (int) $post['topic_id'] . '
- AND notify_status = ' . NOTIFY_YES . '
- AND user_id <> ' . (int) $post['poster_id'];
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $users[] = $row['user_id'];
- }
- $this->db->sql_freeresult($result);
-
- $sql = 'SELECT user_id
- FROM ' . FORUMS_WATCH_TABLE . '
- WHERE forum_id = ' . (int) $post['forum_id'] . '
- AND notify_status = ' . NOTIFY_YES . '
- AND user_id <> ' . (int) $post['poster_id'];
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $users[] = $row['user_id'];
- }
- $this->db->sql_freeresult($result);
-
- if (empty($users))
- {
- return array();
- }
-
- $users = array_unique($users);
- sort($users);
-
- $auth_read = $this->auth->acl_get_list($users, 'f_read', $post['forum_id']);
-
- if (empty($auth_read))
- {
- return array();
- }
-
- $notify_users = $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], $options);
-
- // Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
- $update_notifications = array();
- $sql = 'SELECT n.*
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
- WHERE n.notification_type_id = ' . (int) $this->notification_type_id . '
- AND n.item_parent_id = ' . (int) self::get_item_parent_id($post) . '
- AND n.notification_read = 0
- AND nt.notification_type_id = n.notification_type_id
- AND nt.notification_type_enabled = 1';
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- // Do not create a new notification
- unset($notify_users[$row['user_id']]);
-
- $notification = $this->notification_manager->get_item_type_class($this->get_type(), $row);
- $sql = 'UPDATE ' . $this->notifications_table . '
- SET ' . $this->db->sql_build_array('UPDATE', $notification->add_responders($post)) . '
- WHERE notification_id = ' . $row['notification_id'];
- $this->db->sql_query($sql);
- }
- $this->db->sql_freeresult($result);
-
- return $notify_users;
- }
-
- /**
- * Get the user's avatar
- */
- public function get_avatar()
- {
- return $this->user_loader->get_avatar($this->get_data('poster_id'));
- }
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title()
- {
- $responders = $this->get_data('responders');
- $usernames = array();
-
- if (!is_array($responders))
- {
- $responders = array();
- }
-
- $responders = array_merge(array(array(
- 'poster_id' => $this->get_data('poster_id'),
- 'username' => $this->get_data('post_username'),
- )), $responders);
-
- foreach ($responders as $responder)
- {
- if ($responder['username'])
- {
- $usernames[] = $responder['username'];
- }
- else
- {
- $usernames[] = $this->user_loader->get_username($responder['poster_id'], 'no_profile');
- }
- }
-
- return $this->user->lang(
- $this->language_key,
- implode(', ', $usernames),
- censor_text($this->get_data('topic_title'))
- );
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'topic_notify';
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- if ($this->get_data('post_username'))
- {
- $username = $this->get_data('post_username');
- }
- else
- {
- $username = $this->user_loader->get_username($this->get_data('poster_id'), 'username');
- }
-
- return array(
- 'AUTHOR_NAME' => htmlspecialchars_decode($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}",
- 'U_NEWEST_POST' => generate_board_url() . "/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}&view=unread#unread",
- 'U_TOPIC' => generate_board_url() . "/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}",
- 'U_VIEW_TOPIC' => generate_board_url() . "/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}",
- 'U_FORUM' => generate_board_url() . "/viewforum.{$this->php_ext}?f={$this->get_data('forum_id')}",
- 'U_STOP_WATCHING_TOPIC' => generate_board_url() . "/viewtopic.{$this->php_ext}?uid={$this->user_id}&f={$this->get_data('forum_id')}&t={$this->item_parent_id}&unwatch=topic",
- );
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return append_sid($this->phpbb_root_path . 'viewtopic.' . $this->php_ext, "p={$this->item_id}#p{$this->item_id}");
- }
-
- /**
- * Users needed to query before this notification can be displayed
- *
- * @return array Array of user_ids
- */
- public function users_to_query()
- {
- $responders = $this->get_data('responders');
- $users = array(
- $this->get_data('poster_id'),
- );
-
- if (is_array($responders))
- {
- foreach ($responders as $responder)
- {
- $users[] = $responder['poster_id'];
- }
- }
-
- return $users;
- }
-
- /**
- * Pre create insert array function
- * This allows you to perform certain actions, like run a query
- * and load data, before create_insert_array() is run. The data
- * returned from this function will be sent to create_insert_array().
- *
- * @param array $post Post data from submit_post
- * @param array $notify_users Notify users list
- * Formated from find_users_for_notification()
- * @return array Whatever you want to send to create_insert_array().
- */
- public function pre_create_insert_array($post, $notify_users)
- {
- if (!sizeof($notify_users))
- {
- return array();
- }
-
- $tracking_data = array();
- $sql = 'SELECT user_id, mark_time FROM ' . TOPICS_TRACK_TABLE . '
- WHERE topic_id = ' . (int) $post['topic_id'] . '
- AND ' . $this->db->sql_in_set('user_id', array_keys($notify_users));
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $tracking_data[$row['user_id']] = $row['mark_time'];
- }
-
- return $tracking_data;
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $this->set_data('poster_id', $post['poster_id']);
-
- $this->set_data('topic_title', $post['topic_title']);
-
- $this->set_data('post_subject', $post['post_subject']);
-
- $this->set_data('post_username', (($post['poster_id'] == ANONYMOUS) ? $post['post_username'] : ''));
-
- $this->set_data('forum_id', $post['forum_id']);
-
- $this->set_data('forum_name', $post['forum_name']);
-
- $this->notification_time = $post['post_time'];
-
- // Topics can be "read" before they are public (while awaiting approval).
- // Make sure that if the user has read the topic, it's marked as read in the notification
- if (isset($pre_create_data[$this->user_id]) && $pre_create_data[$this->user_id] >= $this->notification_time)
- {
- $this->notification_read = true;
- }
-
- return parent::create_insert_array($post, $pre_create_data);
- }
-
- /**
- * Add responders to the notification
- *
- * @param mixed $post
- */
- public function add_responders($post)
- {
- // Do not add them as a responder if they were the original poster that created the notification
- if ($this->get_data('poster_id') == $post['poster_id'])
- {
- return array('notification_data' => serialize($this->get_data(false)));
- }
-
- $responders = $this->get_data('responders');
-
- $responders = ($responders === null) ? array() : $responders;
-
- foreach ($responders as $responder)
- {
- // Do not add them as a responder multiple times
- if ($responder['poster_id'] == $post['poster_id'])
- {
- return array('notification_data' => serialize($this->get_data(false)));
- }
- }
-
- $responders[] = array(
- 'poster_id' => $post['poster_id'],
- 'username' => (($post['poster_id'] == ANONYMOUS) ? $post['post_username'] : ''),
- );
-
- $this->set_data('responders', $responders);
-
- return array('notification_data' => serialize($this->get_data(false)));
- }
-}
diff --git a/phpBB/includes/notification/type/post_in_queue.php b/phpBB/includes/notification/type/post_in_queue.php
deleted file mode 100644
index bc4b15cdc3..0000000000
--- a/phpBB/includes/notification/type/post_in_queue.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Post in queue notifications class
-* This class handles notifications for posts that are put in the moderation queue (for moderators)
-*
-* @package notifications
-*/
-class phpbb_notification_type_post_in_queue extends phpbb_notification_type_post
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'post_in_queue';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_POST_IN_QUEUE';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'id' => 'needs_approval',
- 'lang' => 'NOTIFICATION_TYPE_IN_MODERATION_QUEUE',
- 'group' => 'NOTIFICATION_GROUP_MODERATION',
- );
-
- /**
- * Permission to check for (in find_users_for_notification)
- *
- * @var string Permission name
- */
- protected $permission = 'm_approve';
-
- /**
- * Is available
- */
- public function is_available()
- {
- $has_permission = $this->auth->acl_getf($this->permission, true);
-
- return (!empty($has_permission));
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $post Data from the post
- *
- * @return array
- */
- public function find_users_for_notification($post, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- // 0 is for global moderator permissions
- $auth_approve = $this->auth->acl_get_list(false, $this->permission, array($post['forum_id'], 0));
-
- if (empty($auth_approve))
- {
- return array();
- }
-
- $has_permission = array();
-
- if (isset($auth_approve[$post['forum_id']][$this->permission]))
- {
- $has_permission = $auth_approve[$post['forum_id']][$this->permission];
- }
-
- if (isset($auth_approve[0][$this->permission]))
- {
- $has_permission = array_unique(array_merge($has_permission, $auth_approve[0][$this->permission]));
- }
- sort($has_permission);
-
- $auth_read = $this->auth->acl_get_list($has_permission, 'f_read', $post['forum_id']);
- if (empty($auth_read))
- {
- return array();
- }
-
- return $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], array_merge($options, array(
- 'item_type' => self::$notification_option['id'],
- )));
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return append_sid($this->phpbb_root_path . 'mcp.' . $this->php_ext, "i=queue&amp;mode=approve_details&amp;f={$this->get_data('forum_id')}&amp;p={$this->item_id}");
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $data = parent::create_insert_array($post, $pre_create_data);
-
- $this->notification_time = $data['notification_time'] = time();
-
- return $data;
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'post_in_queue';
- }
-}
diff --git a/phpBB/includes/notification/type/quote.php b/phpBB/includes/notification/type/quote.php
deleted file mode 100644
index 0ed13f36fb..0000000000
--- a/phpBB/includes/notification/type/quote.php
+++ /dev/null
@@ -1,222 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Post quoting notifications class
-* This class handles notifications for quoting users in a post
-*
-* @package notifications
-*/
-class phpbb_notification_type_quote extends phpbb_notification_type_post
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'quote';
- }
-
- /**
- * regular expression to match to find usernames
- *
- * @var string
- */
- protected static $regular_expression_match = '#\[quote=&quot;(.+?)&quot;#';
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_QUOTE';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'lang' => 'NOTIFICATION_TYPE_QUOTE',
- 'group' => 'NOTIFICATION_GROUP_POSTING',
- );
-
- /**
- * Is available
- */
- public function is_available()
- {
- return true;
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $post Data from
- *
- * @return array
- */
- public function find_users_for_notification($post, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- $usernames = false;
- preg_match_all(self::$regular_expression_match, $post['post_text'], $usernames);
-
- if (empty($usernames[1]))
- {
- return array();
- }
-
- $usernames[1] = array_unique($usernames[1]);
-
- $usernames = array_map('utf8_clean_string', $usernames[1]);
-
- $users = array();
-
- $sql = 'SELECT user_id
- FROM ' . USERS_TABLE . '
- WHERE ' . $this->db->sql_in_set('username_clean', $usernames) . '
- AND user_id <> ' . (int) $post['poster_id'];
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $users[] = $row['user_id'];
- }
- $this->db->sql_freeresult($result);
-
- if (empty($users))
- {
- return array();
- }
- sort($users);
-
- $auth_read = $this->auth->acl_get_list($users, 'f_read', $post['forum_id']);
-
- if (empty($auth_read))
- {
- return array();
- }
-
- $notify_users = $this->check_user_notification_options($auth_read[$post['forum_id']]['f_read'], $options);
-
- // Try to find the users who already have been notified about replies and have not read the topic since and just update their notifications
- $update_notifications = array();
- $sql = 'SELECT n.*
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
- WHERE n.notification_type_id = ' . (int) $this->notification_type_id . '
- AND n.item_parent_id = ' . (int) self::get_item_parent_id($post) . '
- AND n.notification_read = 0
- AND nt.notification_type_id = n.notification_type_id
- AND nt.notification_type_enabled = 1';
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- // Do not create a new notification
- unset($notify_users[$row['user_id']]);
-
- $notification = $this->notification_manager->get_item_type_class($this->get_type(), $row);
- $sql = 'UPDATE ' . $this->notifications_table . '
- SET ' . $this->db->sql_build_array('UPDATE', $notification->add_responders($post)) . '
- WHERE notification_id = ' . $row['notification_id'];
- $this->db->sql_query($sql);
- }
- $this->db->sql_freeresult($result);
-
- return $notify_users;
- }
-
- /**
- * Update a notification
- *
- * @param array $data Data specific for this type that will be updated
- */
- public function update_notifications($post)
- {
- $old_notifications = array();
- $sql = 'SELECT n.user_id
- FROM ' . $this->notifications_table . ' n, ' . $this->notification_types_table . ' nt
- WHERE n.notification_type_id = ' . (int) $this->notification_type_id . '
- AND n.item_id = ' . self::get_item_id($post) . '
- AND nt.notification_type_id = n.notification_type_id
- AND nt.notification_type_enabled = 1';
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $old_notifications[] = $row['user_id'];
- }
- $this->db->sql_freeresult($result);
-
- // Find the new users to notify
- $notifications = $this->find_users_for_notification($post);
-
- // Find the notifications we must delete
- $remove_notifications = array_diff($old_notifications, array_keys($notifications));
-
- // Find the notifications we must add
- $add_notifications = array();
- foreach (array_diff(array_keys($notifications), $old_notifications) as $user_id)
- {
- $add_notifications[$user_id] = $notifications[$user_id];
- }
-
- // Add the necessary notifications
- $this->notification_manager->add_notifications_for_users($this->get_type(), $post, $add_notifications);
-
- // Remove the necessary notifications
- if (!empty($remove_notifications))
- {
- $sql = 'DELETE FROM ' . $this->notifications_table . '
- WHERE notification_type_id = ' . (int) $this->notification_type_id . '
- AND item_id = ' . self::get_item_id($post) . '
- AND ' . $this->db->sql_in_set('user_id', $remove_notifications);
- $this->db->sql_query($sql);
- }
-
- // return true to continue with the update code in the notifications service (this will update the rest of the notifications)
- return true;
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'quote';
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- $user_data = $this->user_loader->get_user($this->get_data('poster_id'));
-
- return array_merge(parent::get_email_template_variables(), array(
- 'AUTHOR_NAME' => htmlspecialchars_decode($user_data['username']),
- ));
- }
-}
diff --git a/phpBB/includes/notification/type/report_pm.php b/phpBB/includes/notification/type/report_pm.php
deleted file mode 100644
index 3fa73bab41..0000000000
--- a/phpBB/includes/notification/type/report_pm.php
+++ /dev/null
@@ -1,229 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Private message reproted notifications class
-* This class handles notifications for private messages when they are reported
-*
-* @package notifications
-*/
-class phpbb_notification_type_report_pm extends phpbb_notification_type_pm
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'report_pm';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_REPORT_PM';
-
- /**
- * Permission to check for (in find_users_for_notification)
- *
- * @var string Permission name
- */
- protected $permission = 'm_report';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'id' => 'report',
- 'lang' => 'NOTIFICATION_TYPE_REPORT',
- 'group' => 'NOTIFICATION_GROUP_MODERATION',
- );
-
- /**
- * Get the id of the parent
- *
- * @param array $pm The data from the pm
- */
- public static function get_item_parent_id($pm)
- {
- return (int) $pm['report_id'];
- }
-
- /**
- * Is this type available to the current user (defines whether or not it will be shown in the UCP Edit notification options)
- *
- * @return bool True/False whether or not this is available to the user
- */
- public function is_available()
- {
- $m_approve = $this->auth->acl_getf($this->permission, true);
-
- return (!empty($m_approve));
- }
-
-
- /**
- * Find the users who want to receive notifications
- * (copied from post_in_queue)
- *
- * @param array $post Data from the post
- *
- * @return array
- */
- public function find_users_for_notification($post, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- // Global
- $post['forum_id'] = 0;
-
- $auth_approve = $this->auth->acl_get_list(false, $this->permission, $post['forum_id']);
-
- if (empty($auth_approve))
- {
- return array();
- }
-
- if (($key = array_search($this->user->data['user_id'], $auth_approve[$post['forum_id']][$this->permission])))
- {
- 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(
- 'item_type' => self::$notification_option['id'],
- )));
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'report_pm';
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- return array(
- 'AUTHOR_NAME' => htmlspecialchars_decode($user_data['username']),
- 'SUBJECT' => htmlspecialchars_decode(censor_text($this->get_data('message_subject'))),
-
- 'U_VIEW_REPORT' => generate_board_url() . "mcp.{$this->php_ext}?r={$this->item_parent_id}&amp;i=pm_reports&amp;mode=pm_report_details",
- );
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return append_sid($this->phpbb_root_path . 'mcp.' . $this->php_ext, "r={$this->item_parent_id}&amp;i=pm_reports&amp;mode=pm_report_details");
- }
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title()
- {
- $this->user->add_lang('mcp');
-
- $username = $this->user_loader->get_username($this->get_data('reporter_id'), 'no_profile');
-
- if ($this->get_data('report_text'))
- {
- return $this->user->lang(
- $this->language_key,
- $username,
- censor_text($this->get_data('message_subject')),
- $this->get_data('report_text')
- );
- }
-
- if (isset($this->user->lang[$this->get_data('reason_title')]))
- {
- return $this->user->lang(
- $this->language_key,
- $username,
- censor_text($this->get_data('message_subject')),
- $this->user->lang[$this->get_data('reason_title')]
- );
- }
-
- return $this->user->lang(
- $this->language_key,
- $username,
- censor_text($this->get_data('message_subject')),
- $this->get_data('reason_description')
- );
- }
-
- /**
- * Get the user's avatar
- */
- public function get_avatar()
- {
- return $this->user_loader->get_avatar($this->get_data('reporter_id'));
- }
-
- /**
- * Users needed to query before this notification can be displayed
- *
- * @return array Array of user_ids
- */
- public function users_to_query()
- {
- return array($this->get_data('reporter_id'));
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $this->set_data('reporter_id', $this->user->data['user_id']);
- $this->set_data('reason_title', strtoupper($post['reason_title']));
- $this->set_data('reason_description', $post['reason_description']);
- $this->set_data('report_text', $post['report_text']);
-
- return parent::create_insert_array($post, $pre_create_data);
- }
-}
diff --git a/phpBB/includes/notification/type/report_pm_closed.php b/phpBB/includes/notification/type/report_pm_closed.php
deleted file mode 100644
index 63dfa92064..0000000000
--- a/phpBB/includes/notification/type/report_pm_closed.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* PM report closed notifications class
-* This class handles notifications for when reports are closed on PMs (for the one who reported the PM)
-*
-* @package notifications
-*/
-class phpbb_notification_type_report_pm_closed extends phpbb_notification_type_pm
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'report_pm_closed';
- }
-
- /**
- * Email template to use to send notifications
- *
- * @var string
- */
- public $email_template = '';
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_REPORT_CLOSED';
-
- public function is_available()
- {
- return false;
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $pm Data from
- *
- * @return array
- */
- public function find_users_for_notification($pm, $options = array())
- {
- if ($pm['reporter'] == $this->user->data['user_id'])
- {
- return array();
- }
-
- return array($pm['reporter'] => array(''));
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return false;
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- return array();
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return '';
- }
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title()
- {
- $username = $this->user_loader->get_username($this->get_data('closer_id'), 'no_profile');
-
- return $this->user->lang(
- $this->language_key,
- $username,
- censor_text($this->get_data('message_subject'))
- );
- }
-
- /**
- * Get the user's avatar
- */
- public function get_avatar()
- {
- return $this->get_user_avatar($this->get_data('closer_id'));
- }
-
- /**
- * Users needed to query before this notification can be displayed
- *
- * @return array Array of user_ids
- */
- public function users_to_query()
- {
- return array($this->get_data('closer_id'));
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $pm PM Data
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($pm, $pre_create_data = array())
- {
- $this->set_data('closer_id', $pm['closer_id']);
-
- $data = parent::create_insert_array($pm, $pre_create_data);
-
- $this->notification_time = $data['notification_time'] = time();
-
- return $data;
- }
-}
diff --git a/phpBB/includes/notification/type/report_post.php b/phpBB/includes/notification/type/report_post.php
deleted file mode 100644
index de5c54a291..0000000000
--- a/phpBB/includes/notification/type/report_post.php
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Reported post notifications class
-* This class handles notifications for reported posts
-*
-* @package notifications
-*/
-class phpbb_notification_type_report_post extends phpbb_notification_type_post_in_queue
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'report_post';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_REPORT_POST';
-
- /**
- * Permission to check for (in find_users_for_notification)
- *
- * @var string Permission name
- */
- protected $permission = 'm_report';
-
- /**
- * 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' and 'lang')
- */
- public static $notification_option = array(
- 'id' => 'report',
- 'lang' => 'NOTIFICATION_TYPE_REPORT',
- 'group' => 'NOTIFICATION_GROUP_MODERATION',
- );
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $post Data from the post
- *
- * @return array
- */
- public function find_users_for_notification($post, $options = array())
- {
- $notify_users = parent::find_users_for_notification($post, $options);
-
- // never notify reporter
- unset($notify_users[$this->user->data['user_id']]);
-
- return $notify_users;
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'report_post';
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- $board_url = generate_board_url();
-
- return array(
- 'POST_SUBJECT' => htmlspecialchars_decode(censor_text($this->get_data('post_subject'))),
- 'TOPIC_TITLE' => htmlspecialchars_decode(censor_text($this->get_data('topic_title'))),
-
- 'U_VIEW_REPORT' => "{$board_url}/mcp.{$this->php_ext}?f={$this->get_data('forum_id')}&amp;p={$this->item_id}&amp;i=reports&amp;mode=report_details#reports",
- 'U_VIEW_POST' => "{$board_url}/viewtopic.{$this->php_ext}?p={$this->item_id}#p{$this->item_id}",
- 'U_NEWEST_POST' => "{$board_url}/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}&view=unread#unread",
- 'U_TOPIC' => "{$board_url}/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}",
- 'U_VIEW_TOPIC' => "{$board_url}/viewtopic.{$this->php_ext}?f={$this->get_data('forum_id')}&t={$this->item_parent_id}",
- 'U_FORUM' => "{$board_url}/viewforum.{$this->php_ext}?f={$this->get_data('forum_id')}",
- );
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return append_sid($this->phpbb_root_path . 'mcp.' . $this->php_ext, "f={$this->get_data('forum_id')}&amp;p={$this->item_id}&amp;i=reports&amp;mode=report_details#reports");
- }
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title()
- {
- $this->user->add_lang('mcp');
-
- $username = $this->user_loader->get_username($this->get_data('reporter_id'), 'no_profile');
-
- if ($this->get_data('report_text'))
- {
- return $this->user->lang(
- $this->language_key,
- $username,
- censor_text($this->get_data('post_subject')),
- $this->get_data('report_text')
- );
- }
-
- if (isset($this->user->lang[$this->get_data('reason_title')]))
- {
- return $this->user->lang(
- $this->language_key,
- $username,
- censor_text($this->get_data('post_subject')),
- $this->user->lang[$this->get_data('reason_title')]
- );
- }
-
- return $this->user->lang(
- $this->language_key,
- $username,
- censor_text($this->get_data('post_subject')),
- $this->get_data('reason_description')
- );
- }
-
- /**
- * Get the user's avatar
- */
- public function get_avatar()
- {
- return $this->user_loader->get_avatar($this->get_data('reporter_id'));
- }
-
- /**
- * Users needed to query before this notification can be displayed
- *
- * @return array Array of user_ids
- */
- public function users_to_query()
- {
- return array($this->get_data('reporter_id'));
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $this->set_data('reporter_id', $this->user->data['user_id']);
- $this->set_data('reason_title', strtoupper($post['reason_title']));
- $this->set_data('reason_description', $post['reason_description']);
- $this->set_data('report_text', $post['report_text']);
-
- return parent::create_insert_array($post, $pre_create_data);
- }
-}
diff --git a/phpBB/includes/notification/type/report_post_closed.php b/phpBB/includes/notification/type/report_post_closed.php
deleted file mode 100644
index 3916cd8db7..0000000000
--- a/phpBB/includes/notification/type/report_post_closed.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Post report closed notifications class
-* This class handles notifications for when reports are closed on posts (for the one who reported the post)
-*
-* @package notifications
-*/
-class phpbb_notification_type_report_post_closed extends phpbb_notification_type_post
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'report_post_closed';
- }
-
- /**
- * Email template to use to send notifications
- *
- * @var string
- */
- public $email_template = '';
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_REPORT_CLOSED';
-
- public function is_available()
- {
- return false;
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $post Data from
- *
- * @return array
- */
- public function find_users_for_notification($post, $options = array())
- {
- if ($post['reporter'] == $this->user->data['user_id'])
- {
- return array();
- }
-
- return array($post['reporter'] => array(''));
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return false;
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- return array();
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return '';
- }
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title()
- {
- $username = $this->user_loader->get_username($this->get_data('closer_id'), 'no_profile');
-
- return $this->user->lang(
- $this->language_key,
- $username,
- censor_text($this->get_data('post_subject'))
- );
- }
-
- /**
- * Get the user's avatar
- */
- public function get_avatar()
- {
- return $this->user_loader->get_avatar($this->get_data('closer_id'));
- }
-
- /**
- * Users needed to query before this notification can be displayed
- *
- * @return array Array of user_ids
- */
- public function users_to_query()
- {
- return array($this->get_data('closer_id'));
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $this->set_data('closer_id', $post['closer_id']);
-
- $data = parent::create_insert_array($post, $pre_create_data);
-
- $this->notification_time = $data['notification_time'] = time();
-
- return $data;
- }
-}
diff --git a/phpBB/includes/notification/type/topic.php b/phpBB/includes/notification/type/topic.php
deleted file mode 100644
index 22436d3fb1..0000000000
--- a/phpBB/includes/notification/type/topic.php
+++ /dev/null
@@ -1,277 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Topic notifications class
-* This class handles notifications for new topics
-*
-* @package notifications
-*/
-class phpbb_notification_type_topic extends phpbb_notification_type_base
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'topic';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_TOPIC';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'lang' => 'NOTIFICATION_TYPE_TOPIC',
- 'group' => 'NOTIFICATION_GROUP_POSTING',
- );
-
- /**
- * Is available
- */
- public function is_available()
- {
- return $this->config['allow_forum_notify'];
- }
-
- /**
- * Get the id of the item
- *
- * @param array $post The data from the post
- */
- public static function get_item_id($post)
- {
- return (int) $post['topic_id'];
- }
-
- /**
- * Get the id of the parent
- *
- * @param array $post The data from the post
- */
- public static function get_item_parent_id($post)
- {
- return (int) $post['forum_id'];
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $topic Data from the topic
- *
- * @return array
- */
- public function find_users_for_notification($topic, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- $users = array();
-
- $sql = 'SELECT user_id
- FROM ' . FORUMS_WATCH_TABLE . '
- WHERE forum_id = ' . (int) $topic['forum_id'] . '
- AND notify_status = ' . NOTIFY_YES . '
- AND user_id <> ' . (int) $topic['poster_id'];
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $users[] = $row['user_id'];
- }
- $this->db->sql_freeresult($result);
-
- if (empty($users))
- {
- return array();
- }
-
- $auth_read = $this->auth->acl_get_list($users, 'f_read', $topic['forum_id']);
-
- if (empty($auth_read))
- {
- return array();
- }
-
- return $this->check_user_notification_options($auth_read[$topic['forum_id']]['f_read'], $options);
- }
-
- /**
- * Get the user's avatar
- */
- public function get_avatar()
- {
- return $this->user_loader->get_avatar($this->get_data('poster_id'));
- }
-
- /**
- * Get the HTML formatted title of this notification
- *
- * @return string
- */
- public function get_title()
- {
- if ($this->get_data('post_username'))
- {
- $username = $this->get_data('post_username');
- }
- else
- {
- $username = $this->user_loader->get_username($this->get_data('poster_id'), 'no_profile');
- }
-
- return $this->user->lang(
- $this->language_key,
- $username,
- censor_text($this->get_data('topic_title')),
- $this->get_data('forum_name')
- );
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'newtopic_notify';
- }
-
- /**
- * Get email template variables
- *
- * @return array
- */
- public function get_email_template_variables()
- {
- $board_url = generate_board_url();
-
- if ($this->get_data('post_username'))
- {
- $username = $this->get_data('post_username');
- }
- else
- {
- $username = $this->user_loader->get_username($this->get_data('poster_id'), 'username');
- }
-
- return array(
- 'AUTHOR_NAME' => htmlspecialchars_decode($username),
- 'FORUM_NAME' => htmlspecialchars_decode($this->get_data('forum_name')),
- 'TOPIC_TITLE' => htmlspecialchars_decode(censor_text($this->get_data('topic_title'))),
-
- 'U_TOPIC' => "{$board_url}/viewtopic.{$this->php_ext}?f={$this->item_parent_id}&t={$this->item_id}",
- 'U_VIEW_TOPIC' => "{$board_url}/viewtopic.{$this->php_ext}?f={$this->item_parent_id}&t={$this->item_id}",
- 'U_FORUM' => "{$board_url}/viewforum.{$this->php_ext}?f={$this->item_parent_id}",
- 'U_STOP_WATCHING_FORUM' => "{$board_url}/viewforum.{$this->php_ext}?uid={$this->user_id}&f={$this->item_parent_id}&unwatch=forum",
- );
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return append_sid($this->phpbb_root_path . 'viewtopic.' . $this->php_ext, "f={$this->item_parent_id}&amp;t={$this->item_id}");
- }
-
- /**
- * Users needed to query before this notification can be displayed
- *
- * @return array Array of user_ids
- */
- public function users_to_query()
- {
- return array($this->get_data('poster_id'));
- }
-
- /**
- * Pre create insert array function
- * This allows you to perform certain actions, like run a query
- * and load data, before create_insert_array() is run. The data
- * returned from this function will be sent to create_insert_array().
- *
- * @param array $post Post data from submit_post
- * @param array $notify_users Notify users list
- * Formated from find_users_for_notification()
- * @return array Whatever you want to send to create_insert_array().
- */
- public function pre_create_insert_array($post, $notify_users)
- {
- if (!sizeof($notify_users))
- {
- return array();
- }
-
- $tracking_data = array();
- $sql = 'SELECT user_id, mark_time FROM ' . TOPICS_TRACK_TABLE . '
- WHERE topic_id = ' . (int) $post['topic_id'] . '
- AND ' . $this->db->sql_in_set('user_id', array_keys($notify_users));
- $result = $this->db->sql_query($sql);
- while ($row = $this->db->sql_fetchrow($result))
- {
- $tracking_data[$row['user_id']] = $row['mark_time'];
- }
-
- return $tracking_data;
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $post Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($post, $pre_create_data = array())
- {
- $this->set_data('poster_id', $post['poster_id']);
-
- $this->set_data('topic_title', $post['topic_title']);
-
- $this->set_data('post_username', (($post['poster_id'] == ANONYMOUS) ? $post['post_username'] : ''));
-
- $this->set_data('forum_name', $post['forum_name']);
-
- $this->notification_time = $post['post_time'];
-
- // Topics can be "read" before they are public (while awaiting approval).
- // Make sure that if the user has read the topic, it's marked as read in the notification
- if (isset($pre_create_data[$this->user_id]) && $pre_create_data[$this->user_id] >= $this->notification_time)
- {
- $this->notification_read = true;
- }
-
- return parent::create_insert_array($post, $pre_create_data);
- }
-}
diff --git a/phpBB/includes/notification/type/topic_in_queue.php b/phpBB/includes/notification/type/topic_in_queue.php
deleted file mode 100644
index f735e10c00..0000000000
--- a/phpBB/includes/notification/type/topic_in_queue.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-/**
-*
-* @package notifications
-* @copyright (c) 2012 phpBB Group
-* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
-*
-*/
-
-/**
-* @ignore
-*/
-if (!defined('IN_PHPBB'))
-{
- exit;
-}
-
-/**
-* Topic in queue notifications class
-* This class handles notifications for topics when they are put in the moderation queue (for moderators)
-*
-* @package notifications
-*/
-class phpbb_notification_type_topic_in_queue extends phpbb_notification_type_topic
-{
- /**
- * Get notification type name
- *
- * @return string
- */
- public function get_type()
- {
- return 'topic_in_queue';
- }
-
- /**
- * Language key used to output the text
- *
- * @var string
- */
- protected $language_key = 'NOTIFICATION_TOPIC_IN_QUEUE';
-
- /**
- * 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')
- */
- public static $notification_option = array(
- 'id' => 'needs_approval',
- 'lang' => 'NOTIFICATION_TYPE_IN_MODERATION_QUEUE',
- 'group' => 'NOTIFICATION_GROUP_MODERATION',
- );
-
- /**
- * Permission to check for (in find_users_for_notification)
- *
- * @var string Permission name
- */
- protected $permission = 'm_approve';
-
- /**
- * Is available
- */
- public function is_available()
- {
- $has_permission = $this->auth->acl_getf($this->permission, true);
-
- return (!empty($has_permission));
- }
-
- /**
- * Find the users who want to receive notifications
- *
- * @param array $topic Data from the topic
- *
- * @return array
- */
- public function find_users_for_notification($topic, $options = array())
- {
- $options = array_merge(array(
- 'ignore_users' => array(),
- ), $options);
-
- // 0 is for global moderator permissions
- $auth_approve = $this->auth->acl_get_list(false, 'm_approve', array($topic['forum_id'], 0));
-
- if (empty($auth_approve))
- {
- return array();
- }
-
- $has_permission = array();
-
- if (isset($auth_approve[$topic['forum_id']][$this->permission]))
- {
- $has_permission = $auth_approve[$topic['forum_id']][$this->permission];
- }
-
- if (isset($auth_approve[0][$this->permission]))
- {
- $has_permission = array_unique(array_merge($has_permission, $auth_approve[0][$this->permission]));
- }
- sort($has_permission);
-
- $auth_read = $this->auth->acl_get_list($has_permission, 'f_read', $topic['forum_id']);
- if (empty($auth_read))
- {
- return array();
- }
-
- return $this->check_user_notification_options($auth_read[$topic['forum_id']]['f_read'], array_merge($options, array(
- 'item_type' => self::$notification_option['id'],
- )));
- }
-
- /**
- * Get the url to this item
- *
- * @return string URL
- */
- public function get_url()
- {
- return append_sid($this->phpbb_root_path . 'mcp.' . $this->php_ext, "i=queue&amp;mode=approve_details&amp;f={$this->item_parent_id}&amp;t={$this->item_id}");
- }
-
- /**
- * Function for preparing the data for insertion in an SQL query
- * (The service handles insertion)
- *
- * @param array $topic Data from submit_post
- * @param array $pre_create_data Data from pre_create_insert_array()
- *
- * @return array Array of data ready to be inserted into the database
- */
- public function create_insert_array($topic, $pre_create_data = array())
- {
- $data = parent::create_insert_array($topic, $pre_create_data);
-
- $this->notification_time = $data['notification_time'] = time();
-
- return $data;
- }
-
- /**
- * Get email template
- *
- * @return string|bool
- */
- public function get_email_template()
- {
- return 'topic_in_queue';
- }
-}