From f43f3a5cb6aca0bf41865c7bd1ade5b953dfad25 Mon Sep 17 00:00:00 2001 From: Jonathan Lamim <dev@jlamim.com.br> Date: Tue, 28 Apr 2020 08:49:34 -0300 Subject: [PATCH 1/3] New features for paging in order to give the user the possibility to use pagination in the traditional way --- system/Pager/PagerRenderer.php | 74 ++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/system/Pager/PagerRenderer.php b/system/Pager/PagerRenderer.php index 1712ddfd13dd..ed95c1b1f41b 100644 --- a/system/Pager/PagerRenderer.php +++ b/system/Pager/PagerRenderer.php @@ -343,4 +343,78 @@ protected function updatePages(int $count = null) } //-------------------------------------------------------------------- + + /** + * Checks to see if there is a "previous" page before our "first" page. + * + * @return boolean + */ + public function hasPreviousPage(): bool + { + return $this->current > 1; + } + + //-------------------------------------------------------------------- + + /** + * Returns a URL to the "previous" page. + * + * You MUST call hasPreviousPage() first, or this value may be invalid. + * + * @return string|null + */ + public function getPreviousPage() + { + if (!$this->hasPreviousPage()) { + return null; + } + + $uri = clone $this->uri; + + if ($this->segment === 0) { + $uri->addQuery($this->pageSelector, $this->current - 1); + } else { + $uri->setSegment($this->segment, $this->current - 1); + } + + return (string) $uri; + } + + //-------------------------------------------------------------------- + + /** + * Checks to see if there is a "next" page after our "last" page. + * + * @return boolean + */ + public function hasNextPage(): bool + { + return $this->current < $this->last; + } + + //-------------------------------------------------------------------- + + /** + * Returns a URL to the "next" page. + * + * You MUST call hasNextPage() first, or this value may be invalid. + * + * @return string|null + */ + public function getNextPage() + { + if (!$this->hasNextPage()) { + return null; + } + + $uri = clone $this->uri; + + if ($this->segment === 0) { + $uri->addQuery($this->pageSelector, $this->current + 1); + } else { + $uri->setSegment($this->segment, $this->current + 1); + } + + return (string) $uri; + } } From 423a95022f7d0b78ecea216fe29299b9ec43707d Mon Sep 17 00:00:00 2001 From: Jonathan Lamim <dev@jlamim.com.br> Date: Tue, 28 Apr 2020 15:58:20 -0300 Subject: [PATCH 2/3] Unit Tests for the new features added to the pagination --- tests/system/Pager/PagerRendererTest.php | 75 +++++++++++++++++++++++- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/tests/system/Pager/PagerRendererTest.php b/tests/system/Pager/PagerRendererTest.php index ea22274b7dd3..676bfaa4bed8 100644 --- a/tests/system/Pager/PagerRendererTest.php +++ b/tests/system/Pager/PagerRendererTest.php @@ -1,4 +1,6 @@ -<?php namespace CodeIgniter\Pager; +<?php + +namespace CodeIgniter\Pager; use CodeIgniter\HTTP\URI; @@ -243,7 +245,7 @@ public function testSurroundCount() 'uri' => $uri, 'pageCount' => 10, // 10 pages 'currentPage' => 4, - 'total' => 100,// 100 records, so 10 per page + 'total' => 100, // 100 records, so 10 per page ]; $pager = new PagerRenderer($details); @@ -451,4 +453,73 @@ public function testGetFirstAndGetLastSegment() $this->assertEquals('http://example.com/foo/50?foo=bar', $pager->getLast()); } + //-------------------------------------------------------------------- + + public function testHasPreviousPageReturnsFalseWhenCurrentPageIsFirst() + { + $details = [ + 'uri' => $this->uri, + 'pageCount' => 5, + 'currentPage' => 1, + 'total' => 100 + ]; + + $pager = new PagerRenderer($details); + + $this->assertFalse($pager->hasPreviousPage()); + } + + //-------------------------------------------------------------------- + + public function testHasNextPageReturnsFalseWhenCurrentPageIsLast() + { + $details = [ + 'uri' => $this->uri, + 'pageCount' => 5, + 'currentPage' => 5, + 'total' => 100 + ]; + + $pager = new PagerRenderer($details); + + $this->assertFalse($pager->hasNextPage()); + } + + //-------------------------------------------------------------------- + + public function testHasPreviousPageReturnsTrueWhenFirstIsMoreThanCurrent() + { + $uri = $this->uri; + + $details = [ + 'uri' => $uri, + 'pageCount' => 10, + 'currentPage' => 3, + 'total' => 100 + ]; + + $pager = new PagerRenderer($details); + + $this->assertTrue($pager->hasPreviousPage()); + $this->assertEquals('http://example.com/foo?page=2', $pager->getPreviousPage()); + } + + //-------------------------------------------------------------------- + + public function testHasNextPageReturnsTrueWhenLastIsMoreThanCurrent() + { + $uri = $this->uri; + + $details = [ + 'uri' => $uri, + 'pageCount' => 10, + 'currentPage' => 3, + 'total' => 100 + ]; + + $pager = new PagerRenderer($details); + + $this->assertTrue($pager->hasNextPage()); + $this->assertEquals('http://example.com/foo?page=4', $pager->getNextPage()); + } } From 1e3e02ecf847a70e534564cd0b2a56da3d3b7172 Mon Sep 17 00:00:00 2001 From: Jonathan Lamim <dev@jlamim.com.br> Date: Wed, 29 Apr 2020 07:01:31 -0300 Subject: [PATCH 3/3] Update - Unit Tests for new methods in Pagination Class --- tests/system/Pager/PagerRendererTest.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/system/Pager/PagerRendererTest.php b/tests/system/Pager/PagerRendererTest.php index 676bfaa4bed8..636700461523 100644 --- a/tests/system/Pager/PagerRendererTest.php +++ b/tests/system/Pager/PagerRendererTest.php @@ -466,6 +466,7 @@ public function testHasPreviousPageReturnsFalseWhenCurrentPageIsFirst() $pager = new PagerRenderer($details); + $this->assertNull($pager->getPreviousPage()); $this->assertFalse($pager->hasPreviousPage()); } @@ -482,6 +483,7 @@ public function testHasNextPageReturnsFalseWhenCurrentPageIsLast() $pager = new PagerRenderer($details); + $this->assertNull($pager->getNextPage()); $this->assertFalse($pager->hasNextPage()); } @@ -500,6 +502,7 @@ public function testHasPreviousPageReturnsTrueWhenFirstIsMoreThanCurrent() $pager = new PagerRenderer($details); + $this->assertNotNull($pager->getPreviousPage()); $this->assertTrue($pager->hasPreviousPage()); $this->assertEquals('http://example.com/foo?page=2', $pager->getPreviousPage()); } @@ -519,6 +522,7 @@ public function testHasNextPageReturnsTrueWhenLastIsMoreThanCurrent() $pager = new PagerRenderer($details); + $this->assertNotNull($pager->getNextPage()); $this->assertTrue($pager->hasNextPage()); $this->assertEquals('http://example.com/foo?page=4', $pager->getNextPage()); }