3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller\Admin
;
7 use Shaarli\Bookmark\BookmarkFilter
;
8 use Shaarli\Security\SessionManager
;
10 use Slim\Http\Response
;
13 * Class SessionFilterController
15 * Slim controller used to handle filters stored in the user session, such as visibility, links per page, etc.
17 class SessionFilterController
extends ShaarliAdminController
20 * GET /links-per-page: set the number of bookmarks to display per page in homepage
22 public function linksPerPage(Request
$request, Response
$response): Response
24 $linksPerPage = $request->getParam('nb') ?? null;
25 if (null === $linksPerPage || false === is_numeric($linksPerPage)) {
26 $linksPerPage = $this->container
->conf
->get('general.links_per_page', 20);
29 $this->container
->sessionManager
->setSessionParameter(
30 SessionManager
::KEY_LINKS_PER_PAGE
,
31 abs(intval($linksPerPage))
34 return $this->redirectFromReferer($request, $response, ['linksperpage'], ['nb']);
38 * GET /visibility: allows to display only public or only private bookmarks in linklist
40 public function visibility(Request
$request, Response
$response, array $args): Response
42 if (false === $this->container
->loginManager
->isLoggedIn()) {
43 return $this->redirectFromReferer($request, $response, ['visibility']);
46 $newVisibility = $args['visibility'] ?? null;
47 if (false === in_array($newVisibility, [BookmarkFilter
::$PRIVATE, BookmarkFilter
::$PUBLIC], true)) {
48 $newVisibility = null;
51 $currentVisibility = $this->container
->sessionManager
->getSessionParameter(SessionManager
::KEY_VISIBILITY
);
53 // Visibility not set or not already expected value, set expected value, otherwise reset it
54 if ($newVisibility !== null && (null === $currentVisibility || $currentVisibility !== $newVisibility)) {
55 // See only public bookmarks
56 $this->container
->sessionManager
->setSessionParameter(
57 SessionManager
::KEY_VISIBILITY
,
61 $this->container
->sessionManager
->deleteSessionParameter(SessionManager
::KEY_VISIBILITY
);
64 return $this->redirectFromReferer($request, $response, ['visibility']);
68 * GET /untagged-only: allows to display only bookmarks without any tag
70 public function untaggedOnly(Request
$request, Response
$response): Response
72 $this->container
->sessionManager
->setSessionParameter(
73 SessionManager
::KEY_UNTAGGED_ONLY
,
74 empty($this->container
->sessionManager
->getSessionParameter(SessionManager
::KEY_UNTAGGED_ONLY
))
77 return $this->redirectFromReferer($request, $response, ['untaggedonly', 'untagged-only']);