From c78b7f45c565e1f2cde4ebdf517e684e01ec795c Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 23 Aug 2021 15:07:14 +0000 Subject: [PATCH] Reliably diasplay "like" and "share" notifications --- include/enotify.php | 12 ++++++++++-- mod/ping.php | 6 +++--- src/Model/Notification.php | 13 ++++++++++--- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/include/enotify.php b/include/enotify.php index d77ab448a..7eae51a0b 100644 --- a/include/enotify.php +++ b/include/enotify.php @@ -605,7 +605,10 @@ function notification_store_and_send($params, $sitelink, $tsitelink, $hsitelink, function notification_from_array(array $notification) { + Logger::info('Start', ['uid' => $notification['uid'], 'id' => $notification['id'], 'type' => $notification['type']]); + if ($notification['type'] == Post\UserNotification::NOTIF_NONE) { + Logger::info('Not an item based notification, quitting', ['uid' => $notification['uid'], 'id' => $notification['id'], 'type' => $notification['type']]); return false; } @@ -636,6 +639,7 @@ function notification_from_array(array $notification) ['uid' => [0, $notification['uid']], 'uri-id' => $notification['target-uri-id'], 'deleted' => false], ['order' => ['uid' => true]]); if (empty($item)) { + Logger::info('Item not found', ['uri-id' => $notification['target-uri-id'], 'type' => $notification['type']]); return false; } @@ -646,15 +650,16 @@ function notification_from_array(array $notification) $subjectPrefix = $l10n->t('[Friendica:Notify]'); if (Post\ThreadUser::getIgnored($notification['parent-uri-id'], $notification['uid'])) { - Logger::info('Thread is ignored', ['parent-uri-id' => $notification['parent-uri-id']]); + Logger::info('Thread is ignored', ['parent-uri-id' => $notification['parent-uri-id'], 'type' => $notification['type']]); return false; } // Check to see if there was already a tag notify or comment notify for this post. // If so don't create a second notification $condition = ['type' => [Notification\Type::TAG_SELF, Notification\Type::COMMENT, Notification\Type::SHARE], - 'link' => $params['link'], 'uid' => $notification['uid']]; + 'link' => $params['link'], 'verb' => Activity::POST, 'uid' => $notification['uid']]; if (DBA::exists('notify', $condition)) { + Logger::info('Duplicate found, quitting', $condition); return false; } @@ -682,6 +687,7 @@ function notification_from_array(array $notification) $msg = Notification::getMessage($notification); if (empty($msg)) { + Logger::info('No notification message, quitting', ['uid' => $notification['uid'], 'id' => $notification['id'], 'type' => $notification['type']]); return false; } @@ -696,6 +702,8 @@ function notification_from_array(array $notification) $hsitelink = sprintf($sitelink, '' . $sitename . ''); $itemlink = $params['link']; + Logger::info('Perform notification', ['uid' => $notification['uid'], 'id' => $notification['id'], 'type' => $notification['type']]); + return notification_store_and_send($params, $sitelink, $tsitelink, $hsitelink, $title, $subject, $preamble, $epreamble, $item['body'], $itemlink, true); } diff --git a/mod/ping.php b/mod/ping.php index bdd30be3f..8a74f852c 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -462,10 +462,10 @@ function ping_get_notifications($uid) && empty($result[$notification['parent']]) ) { // Should we condense the notifications or show them all? - if (DI::pConfig()->get(local_user(), 'system', 'detailed_notif')) { - $result[$notification["id"]] = $notification; + if (($notification['verb'] != Activity::POST) || DI::pConfig()->get(local_user(), 'system', 'detailed_notif')) { + $result[] = $notification; } else { - $result[$notification['parent']] = $notification; + $result['p:' . $notification['parent']] = $notification; } } } diff --git a/src/Model/Notification.php b/src/Model/Notification.php index 2a730c5db..1df420845 100644 --- a/src/Model/Notification.php +++ b/src/Model/Notification.php @@ -222,10 +222,17 @@ class Notification extends BaseModel } } - if (($notification['type'] == Post\UserNotification::NOTIF_SHARED) && !empty($item['causer-id'])) { - $causer = Contact::getById($item['causer-id'], ['id', 'name', 'url']); + if ($item['owner-id'] != $item['author-id']) { + $cid = $item['owner-id']; + } + if (!empty($item['causer-id']) && ($item['causer-id'] != $item['author-id'])) { + $cid = $item['causer-id']; + } + + if (($notification['type'] == Post\UserNotification::NOTIF_SHARED) && !empty($cid)) { + $causer = Contact::getById($cid, ['id', 'name', 'url']); if (empty($contact)) { - Logger::info('Causer not found', ['causer' => $item['causer-id']]); + Logger::info('Causer not found', ['causer' => $cid]); return $message; } } elseif (in_array($notification['type'], [Post\UserNotification::NOTIF_COMMENT_PARTICIPATION, Post\UserNotification::NOTIF_ACTIVITY_PARTICIPATION])) {