mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
[ticket/11103] Prettify the output for prosilver.
Create a way to mark items read from the output list. PHPBB3-11103
This commit is contained in:
parent
661dd09d6f
commit
98731b1277
8 changed files with 104 additions and 32 deletions
|
@ -4997,7 +4997,10 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0
|
||||||
|
|
||||||
// Output the notifications
|
// Output the notifications
|
||||||
$phpbb_notifications = $phpbb_container->get('notifications');
|
$phpbb_notifications = $phpbb_container->get('notifications');
|
||||||
$notifications = $phpbb_notifications->load_notifications();
|
$notifications = $phpbb_notifications->load_notifications(array(
|
||||||
|
'all_unread' => true,
|
||||||
|
'limit' => 5,
|
||||||
|
));
|
||||||
foreach ($notifications['notifications'] as $notification)
|
foreach ($notifications['notifications'] as $notification)
|
||||||
{
|
{
|
||||||
$template->assign_block_vars('notifications', $notification->prepare_for_display());
|
$template->assign_block_vars('notifications', $notification->prepare_for_display());
|
||||||
|
|
|
@ -45,12 +45,14 @@ class phpbb_notifications_service
|
||||||
* Load the user's notifications
|
* Load the user's notifications
|
||||||
*
|
*
|
||||||
* @param array $options Optional options to control what notifications are loaded
|
* @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'])
|
* user_id User id to load notifications for (Default: $user->data['user_id'])
|
||||||
* order_by Order by (Default: time)
|
* order_by Order by (Default: time)
|
||||||
* order_dir Order direction (Default: DESC)
|
* order_dir Order direction (Default: DESC)
|
||||||
* limit Number of notifications to load (Default: 5)
|
* limit Number of notifications to load (Default: 5)
|
||||||
* start Notifications offset (Default: 0)
|
* start Notifications offset (Default: 0)
|
||||||
* all_unread Load all unread messages? (Default: true)
|
* all_unread Load all unread messages? If set to true, count_unread is set to true (Default: false)
|
||||||
|
* count_unread Count all unread messages? (Default: false)
|
||||||
*/
|
*/
|
||||||
public function load_notifications($options = array())
|
public function load_notifications($options = array())
|
||||||
{
|
{
|
||||||
|
@ -58,14 +60,19 @@ class phpbb_notifications_service
|
||||||
|
|
||||||
// Merge default options
|
// Merge default options
|
||||||
$options = array_merge(array(
|
$options = array_merge(array(
|
||||||
|
'notification_id' => false,
|
||||||
'user_id' => $user->data['user_id'],
|
'user_id' => $user->data['user_id'],
|
||||||
'order_by' => 'time',
|
'order_by' => 'time',
|
||||||
'order_dir' => 'DESC',
|
'order_dir' => 'DESC',
|
||||||
'limit' => 5,
|
'limit' => 0,
|
||||||
'start' => 0,
|
'start' => 0,
|
||||||
'all_unread' => true,
|
'all_unread' => false,
|
||||||
|
'count_unread' => false,
|
||||||
), $options);
|
), $options);
|
||||||
|
|
||||||
|
// If all_unread, count_unread mus be true
|
||||||
|
$options['count_unread'] = ($options['all_unread']) ? true : $options['count_unread'];
|
||||||
|
|
||||||
// Anonymous users and bots never receive notifications
|
// Anonymous users and bots never receive notifications
|
||||||
if ($options['user_id'] == $user->data['user_id'] && ($user->data['user_id'] == ANONYMOUS || $user->data['user_type'] == USER_IGNORE))
|
if ($options['user_id'] == $user->data['user_id'] && ($user->data['user_id'] == ANONYMOUS || $user->data['user_type'] == USER_IGNORE))
|
||||||
{
|
{
|
||||||
|
@ -77,22 +84,27 @@ class phpbb_notifications_service
|
||||||
|
|
||||||
$notifications = $user_ids = array();
|
$notifications = $user_ids = array();
|
||||||
$load_special = array();
|
$load_special = array();
|
||||||
|
$count = 0;
|
||||||
|
|
||||||
|
if ($options['count_unread'])
|
||||||
|
{
|
||||||
// Get the total number of unread notifications
|
// Get the total number of unread notifications
|
||||||
$sql = 'SELECT COUNT(*) AS count
|
$sql = 'SELECT COUNT(*) AS count
|
||||||
FROM ' . NOTIFICATIONS_TABLE . '
|
FROM ' . NOTIFICATIONS_TABLE . '
|
||||||
WHERE user_id = ' . (int) $options['user_id'] . '
|
WHERE user_id = ' . (int) $options['user_id'] . '
|
||||||
AND unread = 1';
|
AND unread = 1';
|
||||||
$result = $this->db->sql_query($sql);
|
$result = $this->db->sql_query($sql);
|
||||||
$count = $this->db->sql_fetchfield('count', $result);
|
$count = (int) $this->db->sql_fetchfield('count', $result);
|
||||||
$this->db->sql_freeresult($result);
|
$this->db->sql_freeresult($result);
|
||||||
|
}
|
||||||
|
|
||||||
$rowset = array();
|
$rowset = array();
|
||||||
|
|
||||||
// Get the main notifications
|
// Get the main notifications
|
||||||
$sql = 'SELECT *
|
$sql = 'SELECT *
|
||||||
FROM ' . NOTIFICATIONS_TABLE . '
|
FROM ' . NOTIFICATIONS_TABLE . '
|
||||||
WHERE user_id = ' . (int) $options['user_id'] . '
|
WHERE user_id = ' . (int) $options['user_id'] .
|
||||||
|
(($options['notification_id']) ? ((is_array($options['notification_id'])) ? ' AND ' . $this->db->sql_in_set('notification_id', $options['notification_id']) : ' AND notification_id = ' . (int) $options['notification_id']) : '') . '
|
||||||
ORDER BY ' . $this->db->sql_escape($options['order_by']) . ' ' . $this->db->sql_escape($options['order_dir']);
|
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']);
|
$result = $this->db->sql_query_limit($sql, $options['limit'], $options['start']);
|
||||||
|
|
||||||
|
@ -103,7 +115,7 @@ class phpbb_notifications_service
|
||||||
$this->db->sql_freeresult($result);
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
// Get all unread notifications
|
// Get all unread notifications
|
||||||
if ($options['all_unread'] && !empty($rowset))
|
if ($count && $options['all_unread'] && !empty($rowset))
|
||||||
{
|
{
|
||||||
$sql = 'SELECT *
|
$sql = 'SELECT *
|
||||||
FROM ' . NOTIFICATIONS_TABLE . '
|
FROM ' . NOTIFICATIONS_TABLE . '
|
||||||
|
@ -221,6 +233,23 @@ class phpbb_notifications_service
|
||||||
$this->db->sql_query($sql);
|
$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) ?: time();
|
||||||
|
|
||||||
|
$sql = 'UPDATE ' . NOTIFICATIONS_TABLE . "
|
||||||
|
SET unread = 0
|
||||||
|
WHERE time <= " . $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
|
* Add a notification
|
||||||
*
|
*
|
||||||
|
|
|
@ -120,6 +120,8 @@ abstract class phpbb_notifications_type_base implements phpbb_notifications_type
|
||||||
'TIME' => $user->format_date($this->time),
|
'TIME' => $user->format_date($this->time),
|
||||||
|
|
||||||
'UNREAD' => $this->unread,
|
'UNREAD' => $this->unread,
|
||||||
|
|
||||||
|
'U_MARK_READ' => append_sid($this->phpbb_root_path . 'index.' . $this->php_ext, 'mark_notification[]=' . $this->notification_id),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,14 @@ if ($ext = $request->variable('ext', ''))
|
||||||
exit_handler();
|
exit_handler();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mark notifications read
|
||||||
|
$mark_notifications = request_var('mark_notification', array(0));
|
||||||
|
if (!empty($mark_notifications))
|
||||||
|
{
|
||||||
|
$phpbb_notifications = $phpbb_container->get('notifications');
|
||||||
|
$phpbb_notifications->mark_notifications_read_by_id($mark_notifications);
|
||||||
|
}
|
||||||
|
|
||||||
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
|
||||||
|
|
||||||
$user->add_lang('viewforum');
|
$user->add_lang('viewforum');
|
||||||
|
|
|
@ -347,6 +347,7 @@ $lang = array_merge($lang, array(
|
||||||
'MARK' => 'Mark',
|
'MARK' => 'Mark',
|
||||||
'MARK_ALL' => 'Mark all',
|
'MARK_ALL' => 'Mark all',
|
||||||
'MARK_FORUMS_READ' => 'Mark forums read',
|
'MARK_FORUMS_READ' => 'Mark forums read',
|
||||||
|
'MARK_READ' => 'Mark read',
|
||||||
'MARK_SUBFORUMS_READ' => 'Mark subforums read',
|
'MARK_SUBFORUMS_READ' => 'Mark subforums read',
|
||||||
'MB' => 'MB',
|
'MB' => 'MB',
|
||||||
'MIB' => 'MiB',
|
'MIB' => 'MiB',
|
||||||
|
@ -385,7 +386,7 @@ $lang = array_merge($lang, array(
|
||||||
'NOT_AUTHORISED' => 'You are not authorised to access this area.',
|
'NOT_AUTHORISED' => 'You are not authorised to access this area.',
|
||||||
'NOT_WATCHING_FORUM' => 'You are no longer subscribed to updates on this forum.',
|
'NOT_WATCHING_FORUM' => 'You are no longer subscribed to updates on this forum.',
|
||||||
'NOT_WATCHING_TOPIC' => 'You are no longer subscribed to this topic.',
|
'NOT_WATCHING_TOPIC' => 'You are no longer subscribed to this topic.',
|
||||||
'NOTIFICATIONS' => '[ Notifications ]',
|
'NOTIFICATIONS' => 'Notifications',
|
||||||
'NOTIFICATION_BOOKMARK' => '%1$s replied to the topic "%2$s" you have bookmarked.',
|
'NOTIFICATION_BOOKMARK' => '%1$s replied to the topic "%2$s" you have bookmarked.',
|
||||||
'NOTIFICATION_PM' => '%1$s sent you a Private Message "%2$s".',
|
'NOTIFICATION_PM' => '%1$s sent you a Private Message "%2$s".',
|
||||||
'NOTIFICATION_POST' => '%1$s replied to the topic "%2$s".',
|
'NOTIFICATION_POST' => '%1$s replied to the topic "%2$s".',
|
||||||
|
|
|
@ -77,6 +77,13 @@ $('#qr_full_editor').click(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle notification list
|
||||||
|
*/
|
||||||
|
$('#notification_list_button').click(function() {
|
||||||
|
$('#notification_list').toggle();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This AJAXifies the quick-mod tools. The reason it cannot be a standard
|
* This AJAXifies the quick-mod tools. The reason it cannot be a standard
|
||||||
|
|
|
@ -130,25 +130,27 @@
|
||||||
|
|
||||||
<!-- IF not S_IS_BOT and S_USER_LOGGED_IN -->
|
<!-- IF not S_IS_BOT and S_USER_LOGGED_IN -->
|
||||||
<ul class="linklist leftside">
|
<ul class="linklist leftside">
|
||||||
<li class="icon-ucp">
|
<li>
|
||||||
<a href="{U_PROFILE}" title="{L_PROFILE}" accesskey="e">{L_PROFILE}</a>
|
[ <a href="#" id="notification_list_button" title="{L_NOTIFICATIONS}">{L_NOTIFICATIONS}</a> ] •
|
||||||
<a href="#" title="{L_NOTIFICATIONS}" onClick="$('#notification_list').toggle();">{L_NOTIFICATIONS}</a>
|
<div id="notification_list">
|
||||||
<div id="notification_list" style="display: none; position: absolute; width: 330px; max-height: 450px; background-color: #FFFFFF; z-index: 1; overflow-y: scroll;">
|
<ul class="topiclist forums">
|
||||||
<ul style="list-style-type: none;">
|
|
||||||
<!-- BEGIN notifications -->
|
<!-- BEGIN notifications -->
|
||||||
<li style="padding: 10px; width: 290px;<!-- IF notifications.UNREAD --> background-color: grey;<!-- ENDIF -->">
|
<li class="row<!-- IF notifications.UNREAD --> bg2<!-- ENDIF -->">
|
||||||
<!-- IF notifications.URL --><a href="{notifications.URL}" style="text-decoration: none;"><!-- ENDIF -->
|
<!-- IF notifications.URL --><a href="{notifications.URL}"><!-- ENDIF -->
|
||||||
{notifications.AVATAR}
|
{notifications.AVATAR}
|
||||||
<div>
|
<div>
|
||||||
{notifications.FORMATTED_TITLE}<br />
|
{notifications.FORMATTED_TITLE}<br />
|
||||||
{notifications.TIME}
|
{notifications.TIME}
|
||||||
</div>
|
</div>
|
||||||
<!-- IF notifications.URL --></a><!-- ENDIF -->
|
<!-- IF notifications.URL --></a><!-- ENDIF -->
|
||||||
|
<!-- IF notifications.UNREAD --><a href="{notifications.U_MARK_READ}" title="{L_MARK_READ}">{L_MARK_READ}</a><!-- ENDIF -->
|
||||||
</li>
|
</li>
|
||||||
<!-- END notifications -->
|
<!-- END notifications -->
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<!-- IF S_DISPLAY_PM --> (<a href="{U_PRIVATEMSGS}">{PRIVATE_MESSAGE_INFO}<!-- IF PRIVATE_MESSAGE_INFO_UNREAD -->, {PRIVATE_MESSAGE_INFO_UNREAD}<!-- ENDIF --></a>)<!-- ENDIF -->
|
</li>
|
||||||
|
<li class="icon-ucp">
|
||||||
|
<a href="{U_PROFILE}" title="{L_PROFILE}" accesskey="e">{L_PROFILE}</a>
|
||||||
<!-- IF S_DISPLAY_SEARCH --> •
|
<!-- IF S_DISPLAY_SEARCH --> •
|
||||||
<a href="{U_SEARCH_SELF}">{L_SEARCH_SELF}</a>
|
<a href="{U_SEARCH_SELF}">{L_SEARCH_SELF}</a>
|
||||||
<!-- ENDIF -->
|
<!-- ENDIF -->
|
||||||
|
|
|
@ -666,6 +666,26 @@ p.rules a {
|
||||||
vertical-align: text-bottom;
|
vertical-align: text-bottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#notification_list {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
width: 330px;
|
||||||
|
max-height: 350px;
|
||||||
|
z-index: 1;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notification_list ul li {
|
||||||
|
padding: 10px;
|
||||||
|
width: 310px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notification_list ul li a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
#notification_list ul li img {
|
#notification_list ul li img {
|
||||||
float: left;
|
float: left;
|
||||||
padding: 0 10px 10px 0;
|
padding: 0 10px 10px 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue