From ca366e5437a20ace0be7949ee35e3dc0a74e850e Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sat, 25 Nov 2023 12:22:25 +0000
Subject: [PATCH] Issue 12743: Allow editing of media in posts

---
 src/Module/Api/Mastodon/Statuses.php | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/Module/Api/Mastodon/Statuses.php b/src/Module/Api/Mastodon/Statuses.php
index f6cddb32d9..84eaadfe5e 100644
--- a/src/Module/Api/Mastodon/Statuses.php
+++ b/src/Module/Api/Mastodon/Statuses.php
@@ -52,12 +52,13 @@ class Statuses extends BaseApi
 		$uid = self::getCurrentUserID();
 
 		$request = $this->getRequest([
-			'status'         => '',    // Text content of the status. If media_ids is provided, this becomes optional. Attaching a poll is optional while status is provided.
-			'media_ids'      => [],    // Array of Attachment ids to be attached as media. If provided, status becomes optional, and poll cannot be used.
-			'in_reply_to_id' => 0,     // ID of the status being replied to, if status is a reply
-			'spoiler_text'   => '',    // Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.
-			'language'       => '',    // ISO 639 language code for this status.
-			'friendica'      => [],
+			'status'           => '',    // Text content of the status. If media_ids is provided, this becomes optional. Attaching a poll is optional while status is provided.
+			'media_ids'        => [],    // Array of Attachment ids to be attached as media. If provided, status becomes optional, and poll cannot be used.
+			'in_reply_to_id'   => 0,     // ID of the status being replied to, if status is a reply
+			'spoiler_text'     => '',    // Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.
+			'language'         => '',    // ISO 639 language code for this status.
+			'media_attributes' => [],
+			'friendica'        => [],
 		], $request);
 
 		$owner = User::getOwnerDataById($uid);
@@ -120,6 +121,12 @@ class Statuses extends BaseApi
 		$media_ids      = [];
 		$existing_media = array_column(Post\Media::getByURIId($post['uri-id'], [Post\Media::AUDIO, Post\Media::VIDEO, Post\Media::IMAGE]), 'id');
 
+		foreach ($request['media_attributes'] as $attributes) {
+			if (in_array($attributes['id'], $existing_media)) {
+				Post\Media::updateById(['description' => $attributes['description']], $attributes['id']);
+			}
+		}
+
 		foreach ($request['media_ids'] as $media) {
 			if (!in_array($media, $existing_media)) {
 				$media_ids[] = $media;