3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller
;
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 * @package Shaarli\Front\Controller
19 class SessionFilterController
extends ShaarliController
22 * GET /links-per-page: set the number of bookmarks to display per page in homepage
24 public function linksPerPage(Request
$request, Response
$response): Response
26 $linksPerPage = $request->getParam('nb') ?? null;
27 if (null === $linksPerPage || false === is_numeric($linksPerPage)) {
28 $linksPerPage = $this->container
->conf
->get('general.links_per_page', 20);
31 $this->container
->sessionManager
->setSessionParameter(
32 SessionManager
::KEY_LINKS_PER_PAGE
,
33 abs(intval($linksPerPage))
36 return $this->redirectFromReferer($response, ['linksperpage'], ['nb']);
40 * GET /visibility: allows to display only public or only private bookmarks in linklist
42 public function visibility(Request
$request, Response
$response, array $args): Response
44 if (false === $this->container
->loginManager
->isLoggedIn()) {
45 return $this->redirectFromReferer($response, ['visibility']);
48 $newVisibility = $args['visibility'] ?? null;
49 if (false === in_array($newVisibility, [BookmarkFilter
::$PRIVATE, BookmarkFilter
::$PUBLIC], true)) {
50 $newVisibility = null;
53 $currentVisibility = $this->container
->sessionManager
->getSessionParameter(SessionManager
::KEY_VISIBILITY
);
55 // Visibility not set or not already expected value, set expected value, otherwise reset it
56 if ($newVisibility !== null && (null === $currentVisibility || $currentVisibility !== $newVisibility)) {
57 // See only public bookmarks
58 $this->container
->sessionManager
->setSessionParameter(
59 SessionManager
::KEY_VISIBILITY
,
63 $this->container
->sessionManager
->deleteSessionParameter(SessionManager
::KEY_VISIBILITY
);
66 return $this->redirectFromReferer($response, ['visibility']);
70 * GET /untagged-only: allows to display only bookmarks without any tag
72 public function untaggedOnly(Request
$request, Response
$response): Response
74 $this->container
->sessionManager
->setSessionParameter(
75 SessionManager
::KEY_UNTAGGED_ONLY
,
76 empty($this->container
->sessionManager
->getSessionParameter(SessionManager
::KEY_UNTAGGED_ONLY
))
79 return $this->redirectFromReferer($response, ['untaggedonly', 'untagged-only']);