* 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')) {
* Returns only the most recent notifications for the same conversation or contact
*
* @param int $uid
+ *
* @return Collection\Notifications
* @throws Exception
*/
{
$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 = '';
SELECT MAX(`id`)
FROM `notification`
WHERE `uid` = ?
+ $type_condition
$like_condition
$announce_condition
GROUP BY IFNULL(`parent-uri-id`, `actor-id`)
* @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
$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());
}