From: Hank Grabowski Date: Thu, 16 Mar 2023 18:01:36 +0000 (-0400) Subject: Fix being able to remove all images from post through Mastodon edit endpoint X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=e7058ffe8c273d12ff52dc98a8acb8da2b2880bb;p=friendica.git Fix being able to remove all images from post through Mastodon edit endpoint --- diff --git a/src/Module/Api/Mastodon/Statuses.php b/src/Module/Api/Mastodon/Statuses.php index 87840eef97..3080c28043 100644 --- a/src/Module/Api/Mastodon/Statuses.php +++ b/src/Module/Api/Mastodon/Statuses.php @@ -110,43 +110,42 @@ class Statuses extends BaseApi $item = DI::contentItem()->expandTags($item, $request['visibility'] == 'direct'); - if (!empty($request['media_ids'])) { - /* - The provided ids in the request value consists of these two sources: - - The id in the "photo" table for newly uploaded media - - The id in the "post-media" table for already attached media - - Because of this we have to add all media that isn't already attached. - Also we have to delete all media that isn't provided anymore. - - There is a possible situation where the newly uploaded media - could have the same id as an existing, but deleted media. - - We can't do anything about this, but the probability for this is extremely low. - */ - $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_ids'] as $media) { - if (!in_array($media, $existing_media)) { - $media_ids[] = $media; - } + /* + The provided ids in the request value consists of these two sources: + - The id in the "photo" table for newly uploaded media + - The id in the "post-media" table for already attached media + + Because of this we have to add all media that isn't already attached. + Also we have to delete all media that isn't provided anymore. + + There is a possible situation where the newly uploaded media + could have the same id as an existing, but deleted media. + + We can't do anything about this, but the probability for this is extremely low. + */ + $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_ids'] as $media) { + if (!in_array($media, $existing_media)) { + $media_ids[] = $media; } + } - foreach ($existing_media as $media) { - if (!in_array($media, $request['media_ids'])) { - Post\Media::deleteById($media); - } + foreach ($existing_media as $media) { + if (!in_array($media, $request['media_ids'])) { + Post\Media::deleteById($media); } + } - $item = $this->storeMediaIds($media_ids, array_merge($post, $item)); + $item = $this->storeMediaIds($media_ids, array_merge($post, $item)); - foreach ($item['attachments'] as $attachment) { - $attachment['uri-id'] = $post['uri-id']; - Post\Media::insert($attachment); - } - unset($item['attachments']); + foreach ($item['attachments'] as $attachment) { + $attachment['uri-id'] = $post['uri-id']; + Post\Media::insert($attachment); } + unset($item['attachments']); + if (!Item::isValid($item)) { throw new \Exception('Missing parameters in definition'); }