]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Fix: visitor are allowed to chose nb of links per page
authorArthurHoaro <arthur@hoa.ro>
Fri, 24 Jul 2020 10:48:53 +0000 (12:48 +0200)
committerArthurHoaro <arthur@hoa.ro>
Fri, 24 Jul 2020 10:48:53 +0000 (12:48 +0200)
application/front/controller/admin/SessionFilterController.php
application/front/controller/visitor/PublicSessionFilterController.php [new file with mode: 0644]
tests/front/controller/admin/SessionFilterControllerTest.php
tests/front/controller/visitor/PublicSessionFilterControllerTest.php [new file with mode: 0644]

index 69a16ec3a5f45b39410f3d2d49acb74cf1e741f3..081c0ba0949f1226536b3406ba4019e48b139b29 100644 (file)
@@ -12,28 +12,10 @@ use Slim\Http\Response;
 /**
  * Class SessionFilterController
  *
- * Slim controller used to handle filters stored in the user session, such as visibility, links per page, etc.
+ * Slim controller used to handle filters stored in the user session, such as visibility, etc.
  */
 class SessionFilterController extends ShaarliAdminController
 {
-    /**
-     * GET /links-per-page: set the number of bookmarks to display per page in homepage
-     */
-    public function linksPerPage(Request $request, Response $response): Response
-    {
-        $linksPerPage = $request->getParam('nb') ?? null;
-        if (null === $linksPerPage || false === is_numeric($linksPerPage)) {
-            $linksPerPage = $this->container->conf->get('general.links_per_page', 20);
-        }
-
-        $this->container->sessionManager->setSessionParameter(
-            SessionManager::KEY_LINKS_PER_PAGE,
-            abs(intval($linksPerPage))
-        );
-
-        return $this->redirectFromReferer($request, $response, ['linksperpage'], ['nb']);
-    }
-
     /**
      * GET /visibility: allows to display only public or only private bookmarks in linklist
      */
diff --git a/application/front/controller/visitor/PublicSessionFilterController.php b/application/front/controller/visitor/PublicSessionFilterController.php
new file mode 100644 (file)
index 0000000..35da0c5
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Shaarli\Front\Controller\Visitor;
+
+use Shaarli\Security\SessionManager;
+use Slim\Http\Request;
+use Slim\Http\Response;
+
+/**
+ * Slim controller used to handle filters stored in the visitor session, links per page, etc.
+ */
+class PublicSessionFilterController extends ShaarliVisitorController
+{
+    /**
+     * GET /links-per-page: set the number of bookmarks to display per page in homepage
+     */
+    public function linksPerPage(Request $request, Response $response): Response
+    {
+        $linksPerPage = $request->getParam('nb') ?? null;
+        if (null === $linksPerPage || false === is_numeric($linksPerPage)) {
+            $linksPerPage = $this->container->conf->get('general.links_per_page', 20);
+        }
+
+        $this->container->sessionManager->setSessionParameter(
+            SessionManager::KEY_LINKS_PER_PAGE,
+            abs(intval($linksPerPage))
+        );
+
+        return $this->redirectFromReferer($request, $response, ['linksperpage'], ['nb']);
+    }
+}
index ea07edeea1ff5f6eb98bd3f246b0bf427cc756b1..124b0bf22d355e752bb6333f3fa018b9701b8efe 100644 (file)
@@ -23,53 +23,7 @@ class SessionFilterControllerTest extends TestCase
 
         $this->controller = new SessionFilterController($this->container);
     }
-
-    /**
-     * Link per page - Default call with valid parameter and a referer.
-     */
-    public function testLinksPerPage(): void
-    {
-        $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc'];
-
-        $request = $this->createMock(Request::class);
-        $request->method('getParam')->with('nb')->willReturn('8');
-        $response = new Response();
-
-        $this->container->sessionManager
-            ->expects(static::once())
-            ->method('setSessionParameter')
-            ->with(SessionManager::KEY_LINKS_PER_PAGE, 8)
-        ;
-
-        $result = $this->controller->linksPerPage($request, $response);
-
-        static::assertInstanceOf(Response::class, $result);
-        static::assertSame(302, $result->getStatusCode());
-        static::assertSame(['/subfolder/controller/?searchtag=abc'], $result->getHeader('location'));
-    }
-
-    /**
-     * Link per page - Invalid value, should use default value (20)
-     */
-    public function testLinksPerPageNotValid(): void
-    {
-        $request = $this->createMock(Request::class);
-        $request->method('getParam')->with('nb')->willReturn('test');
-        $response = new Response();
-
-        $this->container->sessionManager
-            ->expects(static::once())
-            ->method('setSessionParameter')
-            ->with(SessionManager::KEY_LINKS_PER_PAGE, 20)
-        ;
-
-        $result = $this->controller->linksPerPage($request, $response);
-
-        static::assertInstanceOf(Response::class, $result);
-        static::assertSame(302, $result->getStatusCode());
-        static::assertSame(['/subfolder/'], $result->getHeader('location'));
-    }
-
+    
     /**
      * Visibility - Default call for private filter while logged in without current value
      */
diff --git a/tests/front/controller/visitor/PublicSessionFilterControllerTest.php b/tests/front/controller/visitor/PublicSessionFilterControllerTest.php
new file mode 100644 (file)
index 0000000..3aa1cb9
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Shaarli\Front\Controller\Visitor;
+
+use PHPUnit\Framework\TestCase;
+use Shaarli\Security\SessionManager;
+use Slim\Http\Request;
+use Slim\Http\Response;
+
+class PublicSessionFilterControllerTest extends TestCase
+{
+    use FrontControllerMockHelper;
+
+    /** @var PublicSessionFilterController */
+    protected $controller;
+
+    public function setUp(): void
+    {
+        $this->createContainer();
+
+        $this->controller = new PublicSessionFilterController($this->container);
+    }
+
+    /**
+     * Link per page - Default call with valid parameter and a referer.
+     */
+    public function testLinksPerPage(): void
+    {
+        $this->container->environment = ['HTTP_REFERER' => 'http://shaarli/subfolder/controller/?searchtag=abc'];
+
+        $request = $this->createMock(Request::class);
+        $request->method('getParam')->with('nb')->willReturn('8');
+        $response = new Response();
+
+        $this->container->sessionManager
+            ->expects(static::once())
+            ->method('setSessionParameter')
+            ->with(SessionManager::KEY_LINKS_PER_PAGE, 8)
+        ;
+
+        $result = $this->controller->linksPerPage($request, $response);
+
+        static::assertInstanceOf(Response::class, $result);
+        static::assertSame(302, $result->getStatusCode());
+        static::assertSame(['/subfolder/controller/?searchtag=abc'], $result->getHeader('location'));
+    }
+
+    /**
+     * Link per page - Invalid value, should use default value (20)
+     */
+    public function testLinksPerPageNotValid(): void
+    {
+        $request = $this->createMock(Request::class);
+        $request->method('getParam')->with('nb')->willReturn('test');
+        $response = new Response();
+
+        $this->container->sessionManager
+            ->expects(static::once())
+            ->method('setSessionParameter')
+            ->with(SessionManager::KEY_LINKS_PER_PAGE, 20)
+        ;
+
+        $result = $this->controller->linksPerPage($request, $response);
+
+        static::assertInstanceOf(Response::class, $result);
+        static::assertSame(302, $result->getStatusCode());
+        static::assertSame(['/subfolder/'], $result->getHeader('location'));
+    }
+}