notifications order, unseen css class

ping return notfications ordered by notification id
notifications list get seen/unseen class from ping xml
global.css define 'notify-unseen'
This commit is contained in:
Fabrixxm 2015-06-24 16:10:06 +02:00
parent bd3f29f266
commit e29d05ce4a
5 changed files with 34 additions and 31 deletions

View file

@ -182,42 +182,32 @@
nnm.html(notifications_all + notifications_mark); nnm.html(notifications_all + notifications_mark);
//nnm.attr('popup','true'); //nnm.attr('popup','true');
var notification_lastitem = localStorage.getItem("notification-lastitem"); var notification_lastitem = parseInt(localStorage.getItem("notification-lastitem"));
var notification_first_id = 0; var notification_id = 0;
var notification_id;
eNotif.children("note").each(function(){ eNotif.children("note").each(function(){
e = $(this); e = $(this);
text = e.text().format("<span class='contactname'>"+e.attr('name')+"</span>"); text = e.text().format("<span class='contactname'>"+e.attr('name')+"</span>");
html = notifications_tpl.format(e.attr('href'),e.attr('photo'), text, e.attr('date'), e.attr('seen')); html = notifications_tpl.format(e.attr('href'),e.attr('photo'), text, e.attr('date'), e.attr('seen'));
nnm.append(html); nnm.append(html);
});
notification_id = e.attr('href').match(/\d+$/)[0]; $(eNotif.children("note").get().reverse()).each(function(){
if (notification_lastitem!== null && notification_id!=notification_lastitem) { e = $(this);
if (notification_first_id===0) notification_first_id = notification_id; notification_id = parseInt(e.attr('href').match(/\d+$/)[0]);
if (notification_lastitem!== null && notification_id > notification_lastitem) {
if (getNotificationPermission()==="granted") { if (getNotificationPermission()==="granted") {
console.log("notification", e.text().replace('&rarr; ','').format(e.attr('name')));
var notification = new Notification(document.title, { var notification = new Notification(document.title, {
body: e.text().replace('&rarr; ','').format(e.attr('name')), body: e.text().replace('&rarr; ','').format(e.attr('name')),
icon: e.attr('photo'), icon: e.attr('photo'),
data: e.attr('href')
}); });
// close notification after 5 secs. notification['url'] = e.attr('href');
// see https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API#Closing_notifications
//setTimeout(notification.close.bind(notification), 5000);
notification.addEventListener("click", function(ev){ notification.addEventListener("click", function(ev){
window.location = ev.target.data; window.location = ev.target.url;
}); });
} }
} }
if (notification_id == notification_lastitem) {
if (notification_first_id===0) notification_first_id = notification_id;
notification_lastitem = null;
}
}); });
if (notification_first_id!==0) notification_lastitem = notification_first_id; notification_lastitem = notification_id;
localStorage.setItem("notification-lastitem", notification_lastitem) localStorage.setItem("notification-lastitem", notification_lastitem)
$("img[data-src]", nnm).each(function(i, el){ $("img[data-src]", nnm).each(function(i, el){

View file

@ -1,7 +1,7 @@
<?php <?php
require_once("include/datetime.php"); require_once("include/datetime.php");
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once("mod/proxy.php");
function ping_init(&$a) { function ping_init(&$a) {
@ -164,7 +164,6 @@ function ping_init(&$a) {
function xmlize($href, $name, $url, $photo, $date, $seen, $message){ function xmlize($href, $name, $url, $photo, $date, $seen, $message){
require_once("mod/proxy.php");
$photo = proxy_url($photo); $photo = proxy_url($photo);
$message = html_entity_decode($message, ENT_COMPAT | ENT_HTML401, "UTF-8"); $message = html_entity_decode($message, ENT_COMPAT | ENT_HTML401, "UTF-8");
@ -216,23 +215,23 @@ function ping_init(&$a) {
if ($intro>0){ if ($intro>0){
foreach ($intros as $i) { foreach ($intros as $i) {
echo xmlize($a->get_baseurl().'/notifications/intros/'.$i['id'], $i['name'], $i['url'], $i['photo'], relative_date($i['datetime']), 'notify-unseen', "&rarr; ".t("{0} wants to be your friend")); echo xmlize($a->get_baseurl().'/notifications/intros/'.$i['id'], $i['name'], $i['url'], $i['photo'], relative_date($i['datetime']), 'notify-unseen', t("{0} wants to be your friend"));
}; };
} }
if ($mail>0){ if ($mail>0){
foreach ($mails as $i) { foreach ($mails as $i) {
echo xmlize($a->get_baseurl().'/message/'.$i['id'], $i['from-name'], $i['from-url'], $i['from-photo'], relative_date($i['created']), 'notify-unseen',"&rarr; ".t("{0} sent you a message")); echo xmlize($a->get_baseurl().'/message/'.$i['id'], $i['from-name'], $i['from-url'], $i['from-photo'], relative_date($i['created']), 'notify-unseen', t("{0} sent you a message"));
}; };
} }
if ($register>0){ if ($register>0){
foreach ($regs as $i) { foreach ($regs as $i) {
echo xmlize($a->get_baseurl().'/admin/users/', $i['name'], $i['url'], $i['micro'], relative_date($i['created']), 'notify-unseen', "&rarr; ".t("{0} requested registration")); echo xmlize($a->get_baseurl().'/admin/users/', $i['name'], $i['url'], $i['micro'], relative_date($i['created']), 'notify-unseen', t("{0} requested registration"));
}; };
} }
if(count($z)) { if(count($z)) {
foreach($z as $zz) { foreach($z as $zz) {
echo xmlize($a->get_baseurl() . '/notify/view/' . $zz['id'], $zz['name'],$zz['url'],$zz['photo'],relative_date($zz['date']), ($zz['seen'] ? 'notify-seen' : 'notify-unseen'), ($zz['seen'] ? '' : '&rarr; ') .strip_tags(bbcode($zz['msg']))); echo xmlize($a->get_baseurl() . '/notify/view/' . $zz['id'], $zz['name'],$zz['url'],$zz['photo'],relative_date($zz['date']), ($zz['seen'] ? 'notify-seen' : 'notify-unseen'), strip_tags(bbcode($zz['msg'])));
} }
} }
} }
@ -322,7 +321,7 @@ function ping_get_notifications($uid) {
$offset = 0; $offset = 0;
$seen = false; $seen = false;
$seensql = "NOT"; $seensql = "NOT";
$order = ""; $order = "DESC";
$quit = false; $quit = false;
$a = get_app(); $a = get_app();
@ -348,6 +347,7 @@ function ping_get_notifications($uid) {
$quit = true; $quit = true;
else else
$offset += 50; $offset += 50;
foreach ($r AS $notification) { foreach ($r AS $notification) {
if (is_null($notification["visible"])) if (is_null($notification["visible"]))
@ -370,11 +370,21 @@ function ping_get_notifications($uid) {
$notification["msg"] = substr_replace($notification["msg"],"{0}",$pos,strlen($notification["name"])); $notification["msg"] = substr_replace($notification["msg"],"{0}",$pos,strlen($notification["name"]));
if ($notification["visible"] AND !$notification["spam"] AND if ($notification["visible"] AND !$notification["spam"] AND
!$notification["deleted"] AND !is_array($result[$notification["parent"]])) !$notification["deleted"] AND !is_array($result[$notification["parent"]])) {
$result[$notification["parent"]] = $notification; $result[$notification["parent"]] = $notification;
}
} }
} while ((count($result) < 50) AND !$quit); } while ((count($result) < 50) AND !$quit);
// sort result by $[]['id'], inversed
$sort_function = function($a, $b) {
if ($a['id'] == $b['id']) {
return 0;
}
return ($a['id'] < $b['id']) ? 1 : -1;
};
usort($result, $sort_function);
return($result); return($result);
} }

View file

@ -173,4 +173,7 @@ span.oembed, h4 {
/* fields help text */ /* fields help text */
.field .field_help { .field .field_help {
clear: left; clear: left;
} }
/* notifications unseen */
.notify-unseen { background-color: #cceeFF; }

View file

@ -109,7 +109,7 @@
</nav> </nav>
<ul id="nav-notifications-template" style="display:none;" rel="template"> <ul id="nav-notifications-template" style="display:none;" rel="template">
<li><a href="{0}"><img data-src="{1}">{2} <span class="notif-when">{3}</span></a></li> <li class="{4}"><a href="{0}"><img data-src="{1}">{2} <span class="notif-when">{3}</span></a></li>
</ul> </ul>
<div style="position: fixed; top: 3px; left: 5px; z-index:9999">{{$langselector}}</div> <div style="position: fixed; top: 3px; left: 5px; z-index:9999">{{$langselector}}</div>

View file

@ -97,7 +97,7 @@
</nav> </nav>
<ul id="nav-notifications-template" style="display:none;" rel="template"> <ul id="nav-notifications-template" style="display:none;" rel="template">
<li><a href="{0}"><img data-src="{1}">{2} <span class="notif-when">{3}</span></a></li> <li class="{4}"><a href="{0}"><img data-src="{1}">{2} <span class="notif-when">{3}</span></a></li>
</ul> </ul>
<!-- <!--
<div class="icon-flag" style="position: fixed; bottom: 10px; left: 20px; z-index:9;">{{$langselector}}</div> <div class="icon-flag" style="position: fixed; bottom: 10px; left: 20px; z-index:9;">{{$langselector}}</div>