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