]> git.mxchange.org Git - friendica.git/commitdiff
Add title/spoiler text handling and capturing invalid update to Mastodon edit
authorHank Grabowski <hankgrabowski@gmail.com>
Tue, 28 Feb 2023 20:35:37 +0000 (15:35 -0500)
committerHank Grabowski <hankgrabowski@gmail.com>
Tue, 28 Feb 2023 20:35:37 +0000 (15:35 -0500)
src/Module/Api/Mastodon/Statuses.php

index 01856b2d8b3716791ad75bb51ff6a09fd998460f..bf5c9aa6a2523209aa333e414683e436b75e4e42 100644 (file)
@@ -21,6 +21,7 @@
 
 namespace Friendica\Module\Api\Mastodon;
 
+use Friendica\Content\Text\BBCode;
 use Friendica\Content\Text\Markdown;
 use Friendica\Core\Protocol;
 use Friendica\Core\System;
@@ -50,9 +51,9 @@ class Statuses extends BaseApi
 
                $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.
-                       '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'      => [],
                ], $request);
 
                $owner = User::getOwnerDataById($uid);
@@ -65,7 +66,7 @@ class Statuses extends BaseApi
                        'origin'     => true,
                ];
 
-               $post = Post::selectFirst(['uri-id', 'id'], $condition);
+               $post = Post::selectFirst(['uri-id', 'id', 'gravity'], $condition);
                if (empty($post['id'])) {
                        throw new HTTPException\NotFoundException('Item with URI ID ' . $this->parameters['id'] . ' not found for user ' . $uid . '.');
                }
@@ -77,14 +78,25 @@ class Statuses extends BaseApi
                        $item['language'] = json_encode([$request['language'] => 1]);
                }
 
-               if (!empty($request['spoiler_text'])) {
-                       if (($request['in_reply_to_id'] == $post['uri-id']) && DI::pConfig()->get($uid, 'system', 'api_spoiler_title', true)) {
-                               $item['title'] = $request['spoiler_text'];
+               if ($post['gravity'] == 0) {
+                       $item['title'] = $request['friendica']['title'] ?? '';
+               }
+
+               $spoiler_text = $request['spoiler_text'];
+
+               if (!empty($spoiler_text)) {
+                       if (!isset($request['friendica']['title']) && $post['gravity'] == 0 && DI::pConfig()->get($uid, 'system', 'api_spoiler_title', true)) {
+                               $item['title'] = $spoiler_text;
                        } else {
-                               $item['body'] = '[abstract=' . Protocol::ACTIVITYPUB . ']' . $request['spoiler_text'] . "[/abstract]\n" . $item['body'];
+                               $item['body'] = '[abstract=' . Protocol::ACTIVITYPUB . ']' . $spoiler_text . "[/abstract]\n" . $item['body'];
+                               $item['content-warning'] = BBCode::toPlaintext($spoiler_text);
                        }
                }
 
+               if (!Item::isValid($item)) {
+                       throw new \Exception('Missing parameters in definitien');
+               }
+
                Item::update($item, ['id' => $post['id']]);
                Item::updateDisplayCache($post['uri-id']);