]> git.mxchange.org Git - friendica.git/commitdiff
Fixes for the notifications
authorMichael <heluecht@pirati.ca>
Sat, 19 Mar 2022 09:27:49 +0000 (09:27 +0000)
committerMichael <heluecht@pirati.ca>
Sat, 19 Mar 2022 09:27:49 +0000 (09:27 +0000)
src/DI.php
src/Module/Notifications/Ping.php
src/Navigation/Notifications/Factory/FormattedNavNotification.php
src/Navigation/Notifications/Factory/Notification.php
src/Navigation/Notifications/Repository/Notification.php

index 1283100313bd42819e9af035a5dd080791a7c813..835f1ffed72619e8412a5a32be08c94527c56475 100644 (file)
@@ -537,6 +537,11 @@ abstract class DI
                return self::$dice->create(Navigation\Notifications\Factory\FormattedNotify::class);
        }
 
+       public static function formattedNavNotificationFactory(): Navigation\Notifications\Factory\FormattedNavNotification
+       {
+               return self::$dice->create(Navigation\Notifications\Factory\FormattedNavNotification::class);
+       }
+
        //
        // "Protocol" namespace instances
        //
index 7deb42fcaa75931030f73d975a2a911167582b4a..2f79b91f0d4717fd8d77746bcddb704b6652093a 100644 (file)
@@ -183,8 +183,6 @@ class Ping extends BaseModule
                                }
                        }
 
-                       // Temporary workaround for notifications without messages like with the following verb:
-                       // - \Friendica\Protocol\Activity::ANNOUNCE
                        $navNotifications = array_map(function (Entity\Notification $notification) {
                                try {
                                        return $this->formattedNavNotification->createFromNotification($notification);
index 84b622fcb25dd80abb6245b84f93288c7034f5a6..d8d6dc029d255b75aa492a6a708bcc233fe37bcf 100644 (file)
@@ -133,7 +133,7 @@ class FormattedNavNotification extends BaseFactory
                return $this->createFromParams(
                        self::$contacts[$intro->cid],
                        $this->l10n->t('{0} wants to follow you'),
-                       new \DateTime($intro->datetime, new \DateTimeZone('UTC')),
+                       $intro->datetime,
                        new Uri($this->baseUrl->get() . '/notifications/intros/' . $intro->id)
                );
        }
index d64ae3f8d7edcbd74af570cf90ab8f157e87677b..d75b13fe4f9c179715db8121d568a5c8e9cadcd4 100644 (file)
@@ -107,6 +107,11 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
        {
                $message = [];
 
+               if (Post\ThreadUser::getIgnored($Notification->parentUriId, $Notification->uid)) {
+                       $this->logger->info('Thread is ignored', ['parent-uri-id' => $Notification->parentUriId, 'type' => $Notification->type]);
+                       return $message;
+               }
+
                $causer = $author = Contact::getById($Notification->actorId, ['id', 'name', 'url', 'contact-type', 'pending']);
                if (empty($causer)) {
                        $this->logger->info('Causer not found', ['contact' => $Notification->actorId]);
@@ -128,28 +133,29 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
                                return $message;
                        }
 
-                       $item = Post::selectFirst([], ['uri-id' => $Notification->targetUriId, 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]);
-                       if (empty($item)) {
-                               $this->logger->info('Post not found', ['uri-id' => $Notification->targetUriId]);
-                               return $message;
-                       }
-
-                       if ($Notification->type == Post\UserNotification::TYPE_ACTIVITY_PARTICIPATION) {
-                               $thrParentId = $item['thr-parent-id'];
-                               $item = Post::selectFirst([], ['uri-id' => $thrParentId, 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]);
+                       if (in_array($Notification->type, [Post\UserNotification::TYPE_THREAD_COMMENT, Post\UserNotification::TYPE_COMMENT_PARTICIPATION, Post\UserNotification::TYPE_ACTIVITY_PARTICIPATION, Post\UserNotification::TYPE_EXPLICIT_TAGGED])) {
+                               $item = Post::selectFirst([], ['uri-id' => $Notification->parentUriId, 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]);
                                if (empty($item)) {
-                                       $this->logger->info('Thread parent post not found', ['uri-id' => $thrParentId]);
+                                       $this->logger->info('Parent post not found', ['uri-id' => $Notification->parentUriId]);
                                        return $message;
                                }
-                       }
-
-                       $parent = $item;
-                       if ($Notification->targetUriId != $Notification->parentUriId) {
-                               $parent = Post::selectFirst([], ['uri-id' => $Notification->parentUriId, 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]);
-                               if (empty($parent)) {
-                                       $this->logger->info('Top level post not found', ['uri-id' => $Notification->parentUriId]);
+                               if ($Notification->type == Post\UserNotification::TYPE_COMMENT_PARTICIPATION) {
+                                       $link_item = Post::selectFirst(['guid'], ['uri-id' => $Notification->targetUriId, 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]);
+                               }
+                       } else {
+                               $item = Post::selectFirst([], ['uri-id' => $Notification->targetUriId, 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]);
+                               if (empty($item)) {
+                                       $this->logger->info('Post not found', ['uri-id' => $Notification->targetUriId]);
                                        return $message;
                                }
+
+                               if (($Notification->verb == Activity::POST) || ($Notification->type === Post\UserNotification::TYPE_SHARED)) {
+                                       $item = Post::selectFirst([], ['uri-id' => $item['thr-parent-id'], 'uid' => [0, $Notification->uid]], ['order' => ['uid' => true]]);
+                                       if (empty($item)) {
+                                               $this->logger->info('Thread parent post not found', ['uri-id' => $item['thr-parent-id']]);
+                                               return $message;
+                                       }
+                               }
                        }
 
                        if (in_array($Notification->type, [Post\UserNotification::TYPE_COMMENT_PARTICIPATION, Post\UserNotification::TYPE_ACTIVITY_PARTICIPATION, Post\UserNotification::TYPE_SHARED])) {
@@ -160,9 +166,9 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
                                }
                        }
 
-                       $link = $this->baseUrl . '/display/' . urlencode($item['guid']);
+                       $link = $this->baseUrl . '/display/' . urlencode($link_item['guid'] ?? $item['guid']);
 
-                       $content = Plaintext::getPost($parent, 70);
+                       $content = Plaintext::getPost($item, 70);
                        if (!empty($content['text'])) {
                                $title = '"' . trim(str_replace("\n", " ", $content['text'])) . '"';
                        } else {
@@ -298,6 +304,8 @@ class Notification extends BaseFactory implements ICanCreateFromTableRow
                                '[url=' . $link . ']' . $title . '[/url]',
                                '[url=' . $author['url'] . ']' . $author['name'] . '[/url]');
                        $message['link'] = $link;
+               } else {
+                       $this->logger->debug('Unhandled notification', ['notification' => $Notification]);
                }
 
                return $message;
index b9ac9e4dd41f3413babaedfe7481fd2c02a29a35..08ca1f095b9c13ed688e492fe23cadce81dc5a13 100644 (file)
@@ -125,7 +125,7 @@ class Notification extends BaseRepository
                        $condition = DBA::mergeConditions($condition, ['`vid` != ?', Verb::getID(\Friendica\Protocol\Activity::ANNOUNCE)]);
                }
 
-               return $this->selectForUser(local_user(), $condition, ['limit' => 50, 'order' => ['id' => true]]);
+               return $this->selectForUser($uid, $condition, ['limit' => 50, 'order' => ['id' => true]]);
        }
 
        /**