{
$attachments = [];
foreach (Post\Media::getByURIId($uriId, [Post\Media::AUDIO, Post\Media::VIDEO, Post\Media::IMAGE]) as $attachment) {
- $filetype = !empty($attachment['mimetype']) ? strtolower(substr($attachment['mimetype'], 0, strpos($attachment['mimetype'], '/'))) : '';
-
- if (($filetype == 'audio') || ($attachment['type'] == Post\Media::AUDIO)) {
- $type = 'audio';
- } elseif (($filetype == 'video') || ($attachment['type'] == Post\Media::VIDEO)) {
- $type = 'video';
- } elseif ($attachment['mimetype'] == 'image/gif') {
- $type = 'gifv';
- } elseif (($filetype == 'image') || ($attachment['type'] == Post\Media::IMAGE)) {
- $type = 'image';
- } else {
- $type = 'unknown';
- }
+ $attachments[] = $this->createFromMediaArray($attachment);
+ }
+
+ return $attachments;
+ }
+
+ /**
+ * @param int $id id of the media
+ * @return array
+ * @throws HTTPException\InternalServerErrorException
+ */
+ public function createFromId(int $id): array
+ {
+ $attachment = Post\Media::getById($id);
+ if (empty($attachment)) {
+ return [];
+ }
+ return $this->createFromMediaArray($attachment);
+ }
- $remote = $attachment['url'];
- if ($type == 'image') {
- $url = Post\Media::getPreviewUrlForId($attachment['id']);
+ /**
+ * @param array $attachment
+ * @return array
+ * @throws HTTPException\InternalServerErrorException
+ */
+ private function createFromMediaArray(array $attachment): array
+ {
+ $filetype = !empty($attachment['mimetype']) ? strtolower(substr($attachment['mimetype'], 0, strpos($attachment['mimetype'], '/'))) : '';
+
+ if (($filetype == 'audio') || ($attachment['type'] == Post\Media::AUDIO)) {
+ $type = 'audio';
+ } elseif (($filetype == 'video') || ($attachment['type'] == Post\Media::VIDEO)) {
+ $type = 'video';
+ } elseif ($attachment['mimetype'] == 'image/gif') {
+ $type = 'gifv';
+ } elseif (($filetype == 'image') || ($attachment['type'] == Post\Media::IMAGE)) {
+ $type = 'image';
+ } else {
+ $type = 'unknown';
+ }
+
+ $remote = $attachment['url'];
+ if ($type == 'image') {
+ $url = Post\Media::getPreviewUrlForId($attachment['id']);
+ $preview = Post\Media::getPreviewUrlForId($attachment['id'], Proxy::SIZE_SMALL);
+ } else {
+ $url = $attachment['url'];
+
+ if (!empty($attachment['preview'])) {
$preview = Post\Media::getPreviewUrlForId($attachment['id'], Proxy::SIZE_SMALL);
} else {
- $url = $attachment['url'];
-
- if (!empty($attachment['preview'])) {
- $preview = Post\Media::getPreviewUrlForId($attachment['id'], Proxy::SIZE_SMALL);
- } else {
- $preview = '';
- }
+ $preview = '';
}
-
- $object = new \Friendica\Object\Api\Mastodon\Attachment($attachment, $type, $url, $preview, $remote);
- $attachments[] = $object->toArray();
}
- return $attachments;
+ $object = new \Friendica\Object\Api\Mastodon\Attachment($attachment, $type, $url, $preview, $remote);
+ return $object->toArray();
}
/**
return DBA::selectToArray('post-media', [], $condition, ['order' => ['id']]);
}
+ /**
+ * Retrieves the media attachment with the provided media id.
+ *
+ * @param int $id id
+ * @return array|bool Array on success, false on error
+ * @throws \Exception
+ */
+ public static function getById(int $id)
+ {
+ return DBA::selectFirst('post-media', [], ['id' => $id]);
+ }
+
+ /**
+ * Update post-media entries
+ *
+ * @param array $fields
+ * @param int $id
+ * @return bool
+ */
+ public static function updateById(array $fields, int $id): bool
+ {
+ return DBA::update('post-media', $fields, ['id' => $id]);
+ }
+
/**
* Checks if media attachments are associated with the provided item ID.
*
use Friendica\Core\System;
use Friendica\DI;
use Friendica\Model\Photo;
+use Friendica\Model\Post;
use Friendica\Module\BaseApi;
/**
$photo = Photo::selectFirst(['resource-id'], ['id' => $this->parameters['id'], 'uid' => $uid]);
if (empty($photo['resource-id'])) {
- DI::mstdnError()->RecordNotFound();
+ $media = Post\Media::getById($this->parameters['id']);
+ if (empty($media['uri-id'])) {
+ DI::mstdnError()->RecordNotFound();
+ }
+ if (!Post::exists(['uri-id' => $media['uri-id'], 'uid' => $uid, 'origin' => true])) {
+ DI::mstdnError()->RecordNotFound();
+ }
+ Post\Media::updateById(['description' => $request['description']], $this->parameters['id']);
+ System::jsonExit(DI::mstdnAttachment()->createFromId($this->parameters['id']));
}
Photo::update(['desc' => $request['description']], ['resource-id' => $photo['resource-id']]);