]> git.mxchange.org Git - friendica.git/blobdiff - src/Navigation/Notifications/Repository/Notification.php
Rename Repository\Notify->NotifyOnDesktop to shouldShowOnDesktop
[friendica.git] / src / Navigation / Notifications / Repository / Notification.php
index 7c3a65fc090c61d0f47f72f7dd60b1a3cb587262..a9630464aa576113a64d987a749f4386baf417e2 100644 (file)
@@ -112,14 +112,21 @@ class Notification extends BaseRepository
         * Returns only the most recent notifications for the same conversation or contact
         *
         * @param int $uid
+        *
         * @return Collection\Notifications
         * @throws Exception
         */
        public function selectDetailedForUser(int $uid): Collection\Notifications
        {
-               $condition = [];
+               $notify_type = $this->pconfig->get($uid, 'system', 'notify_type');
+               if (!is_null($notify_type)) {
+                       $condition = ["`type` & ? != 0", $notify_type | UserNotification::TYPE_SHARED | UserNotification::TYPE_FOLLOW];
+               } else {
+                       $condition = [];
+               }
+
                if (!$this->pconfig->get($uid, 'system', 'notify_like')) {
-                       $condition = DBA::mergeConditions($condition, ['`vid` != ?', Verb::getID(\Friendica\Protocol\Activity::LIKE)]);
+                       $condition = DBA::mergeConditions($condition, ['NOT `vid` IN (?, ?)', Verb::getID(\Friendica\Protocol\Activity::LIKE), Verb::getID(\Friendica\Protocol\Activity::DISLIKE)]);
                }
 
                if (!$this->pconfig->get($uid, 'system', 'notify_announce')) {
@@ -133,6 +140,7 @@ class Notification extends BaseRepository
         * Returns only the most recent notifications for the same conversation or contact
         *
         * @param int $uid
+        *
         * @return Collection\Notifications
         * @throws Exception
         */
@@ -140,10 +148,18 @@ class Notification extends BaseRepository
        {
                $values = [$uid];
 
+               $type_condition = '';
+               $notify_type = $this->pconfig->get($uid, 'system', 'notify_type');
+               if (!is_null($notify_type)) {
+                       $type_condition = 'AND `type` & ? != 0';
+                       $values[] = $notify_type | UserNotification::TYPE_SHARED | UserNotification::TYPE_FOLLOW;
+               }
+
                $like_condition = '';
                if (!$this->pconfig->get($uid, 'system', 'notify_like')) {
-                       $like_condition = 'AND vid != ?';
+                       $like_condition = 'AND NOT `vid` IN (?, ?)';
                        $values[] = Verb::getID(\Friendica\Protocol\Activity::LIKE);
+                       $values[] = Verb::getID(\Friendica\Protocol\Activity::DISLIKE);
                }
 
                $announce_condition = '';
@@ -159,6 +175,7 @@ class Notification extends BaseRepository
                    SELECT MAX(`id`)
                    FROM `notification`
                    WHERE `uid` = ?
+                       $type_condition
                    $like_condition
                    $announce_condition
                    GROUP BY IFNULL(`parent-uri-id`, `actor-id`)
@@ -186,6 +203,7 @@ class Notification extends BaseRepository
         * @param int|null $min_id Retrieve models with an id no fewer than this, as close to it as possible
         * @param int|null $max_id Retrieve models with an id no greater than this, as close to it as possible
         * @param int      $limit
+        *
         * @return BaseCollection
         * @throws Exception
         * @see _selectByBoundaries
@@ -233,7 +251,7 @@ class Notification extends BaseRepository
                        $this->db->update(self::$table_name, $fields, ['id' => $Notification->id]);
                } else {
                        $fields['created'] = DateTimeFormat::utcNow();
-                       $this->db->insert(self::$table_name, $fields);
+                       $this->db->insert(self::$table_name, $fields, Database::INSERT_IGNORE);
 
                        $Notification = $this->selectOneById($this->db->lastInsertId());
                }