]> git.mxchange.org Git - friendica.git/commitdiff
Enable POST route for /filerm module
authorHypolite Petovan <hypolite@mrpetovan.com>
Mon, 5 Sep 2022 05:02:38 +0000 (01:02 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sun, 11 Sep 2022 06:36:06 +0000 (02:36 -0400)
- This prevents a costly page empty page render when calling the module asynchronously

src/Module/Filer/RemoveTag.php
static/routes.config.php

index 74abba9326cbf8d0eb811331ecb978521275de20..56677e5fc9fc5d13bb3ab03a564c3cec9800340d 100644 (file)
 
 namespace Friendica\Module\Filer;
 
+use Friendica\App;
 use Friendica\BaseModule;
+use Friendica\Core\L10n;
+use Friendica\Core\System;
 use Friendica\Database\DBA;
-use Friendica\DI;
 use Friendica\Model\Post;
+use Friendica\Module\Response;
+use Friendica\Navigation\SystemMessages;
 use Friendica\Network\HTTPException;
-use Friendica\Util\XML;
+use Friendica\Util\Profiler;
+use Psr\Log\LoggerInterface;
 
 /**
  * Remove a tag from a file
  */
 class RemoveTag extends BaseModule
 {
+       /** @var SystemMessages */
+       private $systemMessages;
+
+       public function __construct(SystemMessages $systemMessages, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = [])
+       {
+               parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters);
+
+               $this->systemMessages = $systemMessages;
+       }
+
+       protected function post(array $request = [])
+       {
+               System::httpError($this->removeTag($request));
+       }
+
        protected function content(array $request = []): string
        {
                if (!local_user()) {
                        throw new HTTPException\ForbiddenException();
                }
 
-               $logger = DI::logger();
+               $this->removeTag($request, $type, $term);
+
+               if ($type == Post\Category::FILE) {
+                       $this->baseUrl->redirect('filed?file=' . rawurlencode($term));
+               }
+
+               return '';
+       }
 
+       /**
+        * @param array       $request The $_REQUEST array
+        * @param string|null $type    Output parameter with the computed type
+        * @param string|null $term    Output parameter with the computed term
+        *
+        * @return int The relevant HTTP code
+        *
+        * @throws \Exception
+        */
+       private function removeTag(array $request, string &$type = null, string &$term = null): int
+       {
                $item_id = $this->parameters['id'] ?? 0;
 
-               $term = XML::unescape(trim($_GET['term'] ?? ''));
-               $cat = XML::unescape(trim($_GET['cat'] ?? ''));
+               $term = trim($request['term'] ?? '');
+               $cat = trim($request['cat'] ?? '');
 
                if (!empty($cat)) {
                        $type = Post\Category::CATEGORY;
@@ -53,28 +91,27 @@ class RemoveTag extends BaseModule
                        $type = Post\Category::FILE;
                }
 
-               $logger->info('Filer - Remove Tag', [
+               $this->logger->info('Filer - Remove Tag', [
                        'term' => $term,
                        'item' => $item_id,
                        'type' => $type
                ]);
 
-               if ($item_id && strlen($term)) {
-                       $item = Post::selectFirst(['uri-id'], ['id' => $item_id]);
-                       if (!DBA::isResult($item)) {
-                               return '';
-                       }
-                       if (!Post\Category::deleteFileByURIId($item['uri-id'], local_user(), $type, $term)) {
-                               notice(DI::l10n()->t('Item was not removed'));
-                       }
-               } else {
-                       notice(DI::l10n()->t('Item was not deleted'));
+               if (!$item_id || !strlen($term)) {
+                       $this->systemMessages->addNotice($this->l10n->t('Item was not deleted'));
+                       return 401;
                }
 
-               if ($type == Post\Category::FILE) {
-                       DI::baseUrl()->redirect('filed?file=' . rawurlencode($term));
+               $item = Post::selectFirst(['uri-id'], ['id' => $item_id]);
+               if (!DBA::isResult($item)) {
+                       return 404;
                }
 
-               return '';
+               if (!Post\Category::deleteFileByURIId($item['uri-id'], local_user(), $type, $term)) {
+                       $this->systemMessages->addNotice($this->l10n->t('Item was not removed'));
+                       return 500;
+               }
+
+               return 200;
        }
 }
index 65beac70b2208287cfd5ddb6ffb9c8a0a3909d13..f009cc6b320fa7ee255d66fb0750c567b5ad679b 100644 (file)
@@ -410,7 +410,7 @@ return [
        ],
        '/filed'                => [Module\Search\Filed::class,          [R::GET]],
        '/filer[/{id:\d+}]'     => [Module\Filer\SaveTag::class,         [R::GET]],
-       '/filerm/{id:\d+}'      => [Module\Filer\RemoveTag::class,       [R::GET]],
+       '/filerm/{id:\d+}'      => [Module\Filer\RemoveTag::class,       [R::GET, R::POST]],
        '/follow_confirm'       => [Module\FollowConfirm::class,         [R::GET, R::POST]],
        '/followers/{nickname}' => [Module\ActivityPub\Followers::class, [R::GET]],
        '/following/{nickname}' => [Module\ActivityPub\Following::class, [R::GET]],