From bfaf80837aee9af1b3a37413a9d6dae30a8f3f22 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+github@gmail.com> Date: Mon, 2 May 2022 23:16:46 +0200 Subject: [PATCH] add attachment relationship and is-answered attribute --- .../JsonApi/Routes/Messages/BoxController.php | 2 +- lib/classes/JsonApi/Schemas/Message.php | 15 +++++++++++++++ lib/models/Message.class.php | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/classes/JsonApi/Routes/Messages/BoxController.php b/lib/classes/JsonApi/Routes/Messages/BoxController.php index 39a5f41f2be..f17f832cd12 100644 --- a/lib/classes/JsonApi/Routes/Messages/BoxController.php +++ b/lib/classes/JsonApi/Routes/Messages/BoxController.php @@ -13,7 +13,7 @@ use JsonApi\JsonApiController; */ abstract class BoxController extends JsonApiController { - protected $allowedIncludePaths = ['sender', 'recipients']; + protected $allowedIncludePaths = ['sender', 'recipients', 'attachments']; protected $allowedPagingParameters = ['offset', 'limit']; diff --git a/lib/classes/JsonApi/Schemas/Message.php b/lib/classes/JsonApi/Schemas/Message.php index eeefe25094d..8eea1fc33ef 100644 --- a/lib/classes/JsonApi/Schemas/Message.php +++ b/lib/classes/JsonApi/Schemas/Message.php @@ -10,6 +10,7 @@ class Message extends SchemaProvider const TYPE = 'messages'; const REL_SENDER = 'sender'; const REL_RECIPIENTS = 'recipients'; + const REL_ATTACHMENTS = 'attachments'; public function getId($message): ?string { @@ -25,6 +26,7 @@ class Message extends SchemaProvider 'message' => $message->message, 'mkdate' => date('c', $message->mkdate), 'is-read' => (bool) $message->isRead($user->id), + 'is-answered' => (bool) $message->isAnswered($user->id), 'priority' => $message->priority, 'tags' => $message->getTags(), ]; @@ -38,6 +40,7 @@ class Message extends SchemaProvider if ($isPrimary) { $relationships = $this->getSenderRelationship($relationships, $message, $this->shouldInclude($context, self::REL_SENDER)); $relationships = $this->getRecipientsRelationship($relationships, $message, $this->shouldInclude($context, self::REL_RECIPIENTS)); + $relationships = $this->getAttachmentsRelationship($relationships, $message, $this->shouldInclude($context, self::REL_ATTACHMENTS)); } return $relationships; @@ -75,4 +78,16 @@ class Message extends SchemaProvider return $relationships; } + + private function getAttachmentsRelationship(array $relationships, \Message $message, bool $shouldInclude) + { + $attachments = $message->attachment_folder->file_refs; + + $relationships[self::REL_ATTACHMENTS] = [ + // self::RELATIONSHIP_LINKS_SELF => true, + self::RELATIONSHIP_DATA => $attachments ? $attachments->map(function ($a) { return \FileRef::build(['id' => $a->id], false); }) : [], + ]; + + return $relationships; + } } diff --git a/lib/models/Message.class.php b/lib/models/Message.class.php index 05cfc39feb2..8d408e88743 100644 --- a/lib/models/Message.class.php +++ b/lib/models/Message.class.php @@ -21,7 +21,7 @@ * @property string readed database column * @property string priority database column * @property SimpleORMapCollection receivers has_many MessageUser - * @property SimpleORMapCollection attachment_folder has_one Folder + * @property Folder $attachment_folder has_one Folder * @property User author has_one User * @property MessageUser originator has_one MessageUser */ -- GitLab