3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller\Admin
;
7 use Shaarli\Bookmark\BookmarkFilter
;
9 use Slim\Http\Response
;
12 * Class ManageTagController
14 * Slim controller used to handle Shaarli manage tags page (rename and delete tags).
16 class ManageTagController
extends ShaarliAdminController
19 * GET /manage-tags - Displays the manage tags page
21 public function index(Request
$request, Response
$response): Response
23 $fromTag = $request->getParam('fromtag') ?? '';
25 $this->assignView('fromtag', escape($fromTag));
28 t('Manage tags') .' - '. $this->container
->conf
->get('general.title', 'Shaarli')
31 return $response->write($this->render('changetag'));
35 * POST /manage-tags - Update or delete provided tag
37 public function save(Request
$request, Response
$response): Response
39 $this->checkToken($request);
41 $isDelete = null !== $request->getParam('deletetag') && null === $request->getParam('renametag');
43 $fromTag = escape(trim($request->getParam('fromtag') ?? ''));
44 $toTag = escape(trim($request->getParam('totag') ?? ''));
46 if (0 === strlen($fromTag) || false === $isDelete && 0 === strlen($toTag)) {
47 $this->saveWarningMessage(t('Invalid tags provided.'));
49 return $response->withRedirect('./manage-tags');
52 // TODO: move this to bookmark service
54 $bookmarks = $this->container
->bookmarkService
->search(['searchtags' => $fromTag], BookmarkFilter
::$ALL, true);
55 foreach ($bookmarks as $bookmark) {
56 if (false === $isDelete) {
57 $bookmark->renameTag($fromTag, $toTag);
59 $bookmark->deleteTag($fromTag);
62 $this->container
->bookmarkService
->set($bookmark, false);
63 $this->container
->history
->updateLink($bookmark);
67 $this->container
->bookmarkService
->save();
69 if (true === $isDelete) {
71 t('The tag was removed from %d bookmark.', 'The tag was removed from %d bookmarks.', $count),
76 t('The tag was renamed in %d bookmark.', 'The tag was renamed in %d bookmarks.', $count),
81 $this->saveSuccessMessage($alert);
83 $redirect = true === $isDelete ? './manage-tags' : './?searchtags='. urlencode($toTag);
85 return $response->withRedirect($redirect);