]> 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 08ca1f095b9c13ed688e492fe23cadce81dc5a13..a9630464aa576113a64d987a749f4386baf417e2 100644 (file)
@@ -27,6 +27,7 @@ use Friendica\BaseRepository;
 use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues;
 use Friendica\Database\Database;
 use Friendica\Database\DBA;
+use Friendica\Model\Post\UserNotification;
 use Friendica\Model\Verb;
 use Friendica\Navigation\Notifications\Collection;
 use Friendica\Navigation\Notifications\Entity;
@@ -111,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')) {
@@ -132,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
         */
@@ -139,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 = '';
@@ -154,10 +171,11 @@ class Notification extends BaseRepository
                $rows = $this->db->p("
                SELECT notification.*
                FROM notification
-               WHERE id IN (
+               WHERE `id` IN (
                    SELECT MAX(`id`)
-                   FROM notification
-                   WHERE uid = ?
+                   FROM `notification`
+                   WHERE `uid` = ?
+                       $type_condition
                    $like_condition
                    $announce_condition
                    GROUP BY IFNULL(`parent-uri-id`, `actor-id`)
@@ -185,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
@@ -232,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());
                }