aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes')
-rw-r--r--phpBB/includes/functions.php16
-rw-r--r--phpBB/includes/notifications/service.php44
2 files changed, 51 insertions, 9 deletions
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index b7243227bd..e26db56442 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -4994,6 +4994,14 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0
$timezone_name = $user->lang['timezones'][$timezone_name];
}
+ // Output the notifications
+ $phpbb_notifications = $phpbb_container->get('notifications');
+ $notifications = $phpbb_notifications->load_notifications();
+ foreach ($notifications['notifications'] as $notification)
+ {
+ $template->assign_block_vars('notifications', $notification->prepare_for_display());
+ }
+
// The following assigns all _common_ variables that may be used at any point in a template.
$template->assign_vars(array(
'SITENAME' => $config['sitename'],
@@ -5008,6 +5016,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0
'RECORD_USERS' => $l_online_record,
'PRIVATE_MESSAGE_INFO' => $l_privmsgs_text,
'PRIVATE_MESSAGE_INFO_UNREAD' => $l_privmsgs_text_unread,
+ 'NUM_UNREAD_NOTIFICATIONS' => $notifications['unread_count'],
'S_USER_NEW_PRIVMSG' => $user->data['user_new_privmsg'],
'S_USER_UNREAD_PRIVMSG' => $user->data['user_unread_privmsg'],
@@ -5119,13 +5128,6 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0
'A_COOKIE_SETTINGS' => addslashes('; path=' . $config['cookie_path'] . ((!$config['cookie_domain'] || $config['cookie_domain'] == 'localhost' || $config['cookie_domain'] == '127.0.0.1') ? '' : '; domain=' . $config['cookie_domain']) . ((!$config['cookie_secure']) ? '' : '; secure')),
));
- // Output the notifications
- $phpbb_notifications = $phpbb_container->get('notifications');
- foreach ($phpbb_notifications->load_notifications() as $notification)
- {
- $template->assign_block_vars('notifications', $notification->prepare_for_display());
- }
-
// application/xhtml+xml not used because of IE
header('Content-type: text/html; charset=UTF-8');
diff --git a/phpBB/includes/notifications/service.php b/phpBB/includes/notifications/service.php
index d2ff20333e..9f3fe8326f 100644
--- a/phpBB/includes/notifications/service.php
+++ b/phpBB/includes/notifications/service.php
@@ -50,6 +50,7 @@ class phpbb_notifications_service
* order_dir Order direction (Default: DESC)
* limit Number of notifications to load (Default: 5)
* start Notifications offset (Default: 0)
+ * all_unread Load all unread messages? (Default: true)
*/
public function load_notifications($options = array())
{
@@ -62,11 +63,24 @@ class phpbb_notifications_service
'order_dir' => 'DESC',
'limit' => 5,
'start' => 0,
+ 'all_unread' => true,
), $options);
$notifications = $user_ids = array();
$load_special = array();
+ // Get the total number of unread notifications
+ $sql = 'SELECT COUNT(*) AS count
+ FROM ' . NOTIFICATIONS_TABLE . '
+ WHERE user_id = ' . (int) $options['user_id'] . '
+ AND unread = 1';
+ $result = $this->db->sql_query($sql);
+ $count = $this->db->sql_fetchfield('count', $result);
+ $this->db->sql_freeresult($result);
+
+ $rowset = array();
+
+ // Get the main notifications
$sql = 'SELECT *
FROM ' . NOTIFICATIONS_TABLE . '
WHERE user_id = ' . (int) $options['user_id'] . '
@@ -75,6 +89,30 @@ class phpbb_notifications_service
while ($row = $this->db->sql_fetchrow($result))
{
+ $rowset[$row['notification_id']] = $row;
+ }
+ $this->db->sql_freeresult($result);
+
+ // Get all unread notifications
+ if ($options['all_unread'])
+ {
+ $sql = 'SELECT *
+ FROM ' . NOTIFICATIONS_TABLE . '
+ WHERE user_id = ' . (int) $options['user_id'] . '
+ AND unread = 1
+ AND ' . $this->db->sql_in_set('notification_id', array_keys($rowset), true) . '
+ ORDER BY ' . $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)
+ {
$item_type_class_name = $this->get_item_type_class_name($row['item_type'], true);
$notification = new $item_type_class_name($this->phpbb_container, $row);
@@ -91,7 +129,6 @@ class phpbb_notifications_service
$notifications[] = $notification;
}
- $this->db->sql_freeresult($result);
$this->load_users($user_ids);
@@ -103,7 +140,10 @@ class phpbb_notifications_service
$item_type_class_name::load_special($this->phpbb_container, $data, $notifications);
}
- return $notifications;
+ return array(
+ 'notifications' => $notifications,
+ 'unread_count' => $count,
+ );
}
/**