diff --git a/src/Module/Filer/RemoveTag.php b/src/Module/Filer/RemoveTag.php index 74abba932..56677e5fc 100644 --- a/src/Module/Filer/RemoveTag.php +++ b/src/Module/Filer/RemoveTag.php @@ -21,30 +21,68 @@ 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; } } diff --git a/static/routes.config.php b/static/routes.config.php index 65beac70b..f009cc6b3 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -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]],