]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Api/Mastodon/Media.php
Issue 12191: We can now follow and unfollow tags via API
[friendica.git] / src / Module / Api / Mastodon / Media.php
index 297d7d7a3f89537a413bb05e4eca53590f4adafb..1253026fdd07f3be03a857b605ba5c1e36915854 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
@@ -21,6 +21,7 @@
 
 namespace Friendica\Module\Api\Mastodon;
 
+use Friendica\Core\Logger;
 use Friendica\Core\System;
 use Friendica\DI;
 use Friendica\Model\Photo;
@@ -31,25 +32,66 @@ use Friendica\Module\BaseApi;
  */
 class Media extends BaseApi
 {
-       public static function put(array $parameters = [])
+       protected function post(array $request = [])
        {
-               self::unsupported('put');
+               self::checkAllowedScope(self::SCOPE_WRITE);
+               $uid = self::getCurrentUserID();
+
+               Logger::info('Photo post', ['request' => $request, 'files' => $_FILES]);
+
+               if (empty($_FILES['file'])) {
+                       DI::mstdnError()->UnprocessableEntity();
+               }
+       
+               $media = Photo::upload($uid, $_FILES['file']);
+               if (empty($media)) {
+                       DI::mstdnError()->UnprocessableEntity();
+               }
+
+               Logger::info('Uploaded photo', ['media' => $media]);
+
+               System::jsonExit(DI::mstdnAttachment()->createFromPhoto($media['id']));
+       }
+
+       public function put(array $request = [])
+       {
+               self::checkAllowedScope(self::SCOPE_WRITE);
+               $uid = self::getCurrentUserID();
+
+               $request = $this->getRequest([
+                       'file'        => [], // The file to be attached, using multipart form data.
+                       'thumbnail'   => [], // The custom thumbnail of the media to be attached, using multipart form data.
+                       'description' => '', // A plain-text description of the media, for accessibility purposes.
+                       'focus'       => '', // Two floating points (x,y), comma-delimited ranging from -1.0 to 1.0
+               ], $request);
+
+               if (empty($this->parameters['id'])) {
+                       DI::mstdnError()->UnprocessableEntity();
+               }
+
+               $photo = Photo::selectFirst(['resource-id'], ['id' => $this->parameters['id'], 'uid' => $uid]);
+               if (empty($photo['resource-id'])) {
+                       DI::mstdnError()->RecordNotFound();
+               }
+
+               Photo::update(['desc' => $request['description']], ['resource-id' => $photo['resource-id']]);
+
+               System::jsonExit(DI::mstdnAttachment()->createFromPhoto($this->parameters['id']));
        }
 
        /**
-        * @param array $parameters
         * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
-       public static function rawContent(array $parameters = [])
+       protected function rawContent(array $request = [])
        {
-               self::login();
+               self::checkAllowedScope(self::SCOPE_READ);
                $uid = self::getCurrentUserID();
 
-               if (empty($parameters['id'])) {
+               if (empty($this->parameters['id'])) {
                        DI::mstdnError()->UnprocessableEntity();
                }
 
-               $id = $parameters['id'];
+               $id = $this->parameters['id'];
                if (!Photo::exists(['id' => $id, 'uid' => $uid])) {
                        DI::mstdnError()->RecordNotFound();
                }