From 3ab04a65036eb5ec31c06ebf6843b04e6581c7a9 Mon Sep 17 00:00:00 2001 From: Dmitry Khomutov Date: Tue, 24 Oct 2017 21:42:18 +0700 Subject: [PATCH] Added Paginator helper. Issue #123. --- composer.json | 1 + composer.lock | 47 +++++++++- .../Controller/ProjectController.php | 18 +++- src/PHPCensor/View/Project/view.phtml | 89 ++++++------------- 4 files changed, 91 insertions(+), 64 deletions(-) diff --git a/composer.json b/composer.json index 02c68de2..0017f062 100644 --- a/composer.json +++ b/composer.json @@ -54,6 +54,7 @@ "sensiolabs/ansi-to-html": "1.1.*", "pda/pheanstalk": "3.1.*", "guzzlehttp/guzzle": "6.2.*", + "jasongrimes/paginator": "~1.0", "phpunit/phpunit": "5.7.*", "codeception/codeception": "2.3.*", diff --git a/composer.lock b/composer.lock index bfdc8a1c..ed89403c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "211a9ef8c70d709f19b3ac593d3370fe", + "content-hash": "a1c5840a2a1901f312df1fe761e236d0", "packages": [ { "name": "behat/gherkin", @@ -685,6 +685,51 @@ "homepage": "https://github.com/JakubOnderka/PHP-Parallel-Lint", "time": "2015-12-15T10:42:16+00:00" }, + { + "name": "jasongrimes/paginator", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/jasongrimes/php-paginator.git", + "reference": "8b18245b8a9dbdf69918ebd1e1f4a229a06030cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jasongrimes/php-paginator/zipball/8b18245b8a9dbdf69918ebd1e1f4a229a06030cd", + "reference": "8b18245b8a9dbdf69918ebd1e1f4a229a06030cd", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "JasonGrimes": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jason Grimes", + "email": "jason@grimesit.com" + } + ], + "description": "A lightweight PHP paginator, for generating pagination controls in the style of Stack Overflow and Flickr. The 'first' and 'last' page links are shown inline as page numbers, and excess page numbers are replaced by ellipses.", + "homepage": "http://github.com/jasongrimes/php-paginator", + "keywords": [ + "pager", + "pagination", + "paginator" + ], + "time": "2015-10-15T09:42:44+00:00" + }, { "name": "mnsami/composer-custom-directory-installer", "version": "1.1.1", diff --git a/src/PHPCensor/Controller/ProjectController.php b/src/PHPCensor/Controller/ProjectController.php index 8276a12b..836f0461 100644 --- a/src/PHPCensor/Controller/ProjectController.php +++ b/src/PHPCensor/Controller/ProjectController.php @@ -6,6 +6,7 @@ use b8; use b8\Exception\HttpException\NotFoundException; use b8\Form; use b8\Store; +use JasonGrimes\Paginator; use PHPCensor; use PHPCensor\BuildFactory; use PHPCensor\Helper\Github; @@ -95,7 +96,7 @@ class ProjectController extends PHPCensor\Controller $perPage = $_SESSION['php-censor-user']->getFinalPerPage(); $builds = $this->getLatestBuildsHtml($projectId, $environment, $branch, (($page - 1) * $perPage), $perPage); - $pages = $builds[1] == 0 ? 1 : ceil($builds[1] / $perPage); + $pages = $builds[1] == 0 ? 1 : (integer)ceil($builds[1] / $perPage); if ($page > $pages) { $response = new RedirectResponse(); @@ -104,6 +105,19 @@ class ProjectController extends PHPCensor\Controller return $response; } + $urlPattern = APP_URL . 'project/view/' . $project->getId(); + $params = []; + if (!empty($branch)) { + $params['branch'] = $branch; + } + + if (!empty($environment)) { + $params['environment'] = $environment; + } + + $urlPattern = $urlPattern . '?' . str_replace('%28%3Anum%29', '(:num)', http_build_query(array_merge($params, ['page' => '(:num)']))); + $paginator = new Paginator($builds[1], $perPage, $page, $urlPattern); + $this->view->builds = $builds[0]; $this->view->total = $builds[1]; $this->view->project = $project; @@ -112,8 +126,8 @@ class ProjectController extends PHPCensor\Controller $this->view->environment = urldecode($environment); $this->view->environments = $project->getEnvironmentsNames(); $this->view->page = $page; - $this->view->pages = $pages; $this->view->perPage = $perPage; + $this->view->paginator = $paginator; $this->layout->title = $project->getTitle(); $this->layout->subtitle = ''; diff --git a/src/PHPCensor/View/Project/view.phtml b/src/PHPCensor/View/Project/view.phtml index 805b6631..77cba529 100644 --- a/src/PHPCensor/View/Project/view.phtml +++ b/src/PHPCensor/View/Project/view.phtml @@ -1,4 +1,12 @@ - +