From 84d5f495e6e6edd7114b7e72711035e96479e39a Mon Sep 17 00:00:00 2001
From: friendica <info@friendica.com>
Date: Wed, 29 Feb 2012 16:26:07 -0800
Subject: [PATCH] better handling of multiple notifications for same item, and
 old notifications

---
 boot.php       |  2 +-
 mod/notify.php |  4 ++--
 mod/ping.php   | 23 +++++++++++++++++++++--
 3 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/boot.php b/boot.php
index e1dc7e537..31e8cb05f 100755
--- a/boot.php
+++ b/boot.php
@@ -9,7 +9,7 @@ require_once('include/nav.php');
 require_once('include/cache.php');
 
 define ( 'FRIENDICA_PLATFORM',     'Friendica');
-define ( 'FRIENDICA_VERSION',      '2.3.1266' );
+define ( 'FRIENDICA_VERSION',      '2.3.1267' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.22'    );
 define ( 'DB_UPDATE_VERSION',      1129      );
 
diff --git a/mod/notify.php b/mod/notify.php
index e6a7a8859..16b87b76f 100644
--- a/mod/notify.php
+++ b/mod/notify.php
@@ -11,8 +11,8 @@ function notify_init(&$a) {
 			intval(local_user())
 		);
 		if(count($r)) {
-			q("update notify set seen = 1 where id = %d and uid = %d limit 1",
-				intval($a->argv[2]),
+			q("update notify set seen = 1 where link = '%s' and uid = %d",
+				dbesc($r[0]['link']),
 				intval(local_user())
 			);
 			goaway($r[0]['link']);
diff --git a/mod/ping.php b/mod/ping.php
index 7380ff7d0..1562254b1 100644
--- a/mod/ping.php
+++ b/mod/ping.php
@@ -14,10 +14,29 @@ function ping_init(&$a) {
 
 		$firehose = intval(get_pconfig(local_user(),'system','notify_full'));
 
-		$z = q("select * from notify where uid = %d
-			order by seen asc, date desc limit 0, 50",
+		$t = q("select count(*) as total from notify where uid = %d and seen = 0",
 			intval(local_user())
 		);
+		if($t && intval($t[0]['total']) > 49) {
+			$z = q("select * from notify where uid = %d
+				and seen = 0 order by date desc limit 0, 50",
+				intval(local_user())
+			);
+		}
+		else {
+			$z1 = q("select * from notify where uid = %d
+				and seen = 0 order by date desc limit 0, 50",
+				intval(local_user())
+			);
+
+			$z2 = q("select * from notify where uid = %d
+				and seen = 1 order by date desc limit 0, %d",
+				intval(local_user()),
+				intval(50 - intval($t[0]['total']))
+			);
+			$z = array_merge($z1,$z2);
+		}
+
 
 
 		$tags = array();