<?php
/**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
use Friendica\Model\Post;
use Friendica\Model\Verb;
use Friendica\Module\BaseApi;
-use Friendica\Navigation\Notifications\Entity;
use Friendica\Object\Api\Mastodon\Notification;
use Friendica\Protocol\Activity;
$id = $this->parameters['id'];
try {
$notification = DI::notification()->selectOneForUser($uid, ['id' => $id]);
- System::jsonExit(DI::mstdnNotification()->createFromNotification($notification));
+ System::jsonExit(DI::mstdnNotification()->createFromNotification($notification, self::appSupportsQuotes()));
} catch (\Exception $e) {
DI::mstdnError()->RecordNotFound();
}
'max_id' => 0, // Return results older than this ID
'since_id' => 0, // Return results newer than this ID
'min_id' => 0, // Return results immediately newer than this ID
- 'limit' => 20, // Maximum number of results to return (default 20)
+ 'limit' => 15, // Maximum number of results to return. Defaults to 15 notifications. Max 30 notifications.
'exclude_types' => [], // Array of types to exclude (follow, favourite, reblog, mention, poll, follow_request)
'account_id' => 0, // Return only notifications received from this account
'with_muted' => false, // Pleroma extension: return activities by muted (not by blocked!) users.
- 'count' => 0, // Unknown parameter
+ 'include_all' => false, // Include dismissed and undismissed
+ 'summary' => false,
], $request);
$params = ['order' => ['id' => true]];
- $condition = ['uid' => $uid, 'dismissed' => false];
+ $condition = ["`uid` = ? AND (NOT `type` IN (?, ?))", $uid,
+ Post\UserNotification::TYPE_ACTIVITY_PARTICIPATION,
+ Post\UserNotification::TYPE_COMMENT_PARTICIPATION];
+
+ if (!$request['include_all']) {
+ $condition = DBA::mergeConditions($condition, ['dismissed' => false]);
+ }
if (!empty($request['account_id'])) {
$contact = Contact::getById($request['account_id'], ['url']);
}
if (in_array(Notification::TYPE_INTRODUCTION, $request['exclude_types'])) {
- $condition = DBA::mergeConditions($condition,
- ["(`vid` != ? OR `type` != ? OR NOT EXISTS (SELECT `id` FROM `contact` WHERE `id` = `actor-id` AND `pending`))",
- Verb::getID(Activity::FOLLOW), Post\UserNotification::TYPE_NONE]);
+ $condition = DBA::mergeConditions(
+ $condition,
+ ["(`vid` != ? OR `type` != ? OR NOT `actor-id` IN (SELECT `id` FROM `contact` WHERE `pending`))",
+ Verb::getID(Activity::FOLLOW),
+ Post\UserNotification::TYPE_NONE]
+ );
}
if (in_array(Notification::TYPE_FOLLOW, $request['exclude_types'])) {
- $condition = DBA::mergeConditions($condition,
- ["(`vid` != ? OR `type` != ? OR NOT EXISTS (SELECT `id` FROM `contact` WHERE `id` = `actor-id` AND NOT `pending`))",
- Verb::getID(Activity::FOLLOW), Post\UserNotification::TYPE_NONE]);
+ $condition = DBA::mergeConditions(
+ $condition,
+ ["(`vid` != ? OR `type` != ? OR NOT `actor-id` IN (SELECT `id` FROM `contact` WHERE NOT `pending`))",
+ Verb::getID(Activity::FOLLOW),
+ Post\UserNotification::TYPE_NONE]
+ );
}
if (in_array(Notification::TYPE_LIKE, $request['exclude_types'])) {
Verb::getID(Activity::POST), Post\UserNotification::TYPE_SHARED]);
}
- $mstdnNotifications = [];
-
- $Notifications = DI::notification()->selectByBoundaries(
- $condition,
- $params,
- $request['min_id'] ?: $request['since_id'],
- $request['max_id'],
- $request['limit']
- );
-
- foreach($Notifications as $Notification) {
- try {
- $mstdnNotifications[] = DI::mstdnNotification()->createFromNotification($Notification);
- self::setBoundaries($Notification->id);
- } catch (\Exception $e) {
- // Skip this notification
+ if ($request['summary']) {
+ $count = DI::notification()->countForUser($uid, $condition);
+ System::jsonExit(['count' => $count]);
+ } else {
+ $mstdnNotifications = [];
+
+ $Notifications = DI::notification()->selectByBoundaries(
+ $condition,
+ $params,
+ $request['min_id'] ?: $request['since_id'],
+ $request['max_id'],
+ min($request['limit'], 30)
+ );
+
+ foreach ($Notifications as $Notification) {
+ try {
+ $mstdnNotifications[] = DI::mstdnNotification()->createFromNotification($Notification, self::appSupportsQuotes());
+ self::setBoundaries($Notification->id);
+ } catch (\Exception $e) {
+ // Skip this notification
+ }
}
- }
- self::setLinkHeader();
- System::jsonExit($mstdnNotifications);
+ self::setLinkHeader();
+ System::jsonExit($mstdnNotifications);
+ }
}
}