From 1ae62144ec2fbef20f41079b1a9f133f011dda09 Mon Sep 17 00:00:00 2001 From: VladimirCherkasov <vcherckasov@yandex.ru> Date: Tue, 14 Jul 2015 12:51:16 +0300 Subject: [PATCH] Pagination and filter --- db/StoredProcedures.sql | 7 +++-- media/js/reports.js | 3 +++ .../classes/Controller/Admin/Requests.php | 20 +++++++++++--- .../application/classes/Model/Support.php | 5 ++-- .../views/admin/requests/errors.twig | 26 ++++++++++++------- 5 files changed, 43 insertions(+), 18 deletions(-) diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index 305e8dc54..6d7fa5bc6 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -1442,12 +1442,15 @@ BEGIN END// DROP PROCEDURE IF EXISTS RequestsNum// -CREATE PROCEDURE `RequestsNum` () NO SQL +CREATE PROCEDURE `RequestsNum` ( + IN `pFilter` enum('opened','processed','closed','all') +) NO SQL BEGIN SELECT COUNT(*) AS Num FROM requests - WHERE requests.Title != '' AND + WHERE IF(pFilter = 'all', TRUE, requests.Status = pFilter) AND + requests.Title != '' AND requests.Description != ''; END// diff --git a/media/js/reports.js b/media/js/reports.js index 0fc7a484d..e0e384733 100644 --- a/media/js/reports.js +++ b/media/js/reports.js @@ -10,6 +10,9 @@ $(function () { $("#statusFilter").change(function () { console.log($(this).val()); + //window.location = $(this).val(); + location.href = "?filter=" + $(this).val(); + } ); }); diff --git a/~dev_rating/application/classes/Controller/Admin/Requests.php b/~dev_rating/application/classes/Controller/Admin/Requests.php index e4627beb9..cab904a80 100644 --- a/~dev_rating/application/classes/Controller/Admin/Requests.php +++ b/~dev_rating/application/classes/Controller/Admin/Requests.php @@ -9,23 +9,35 @@ class Controller_Admin_Requests extends Controller_Environment_Admin public function action_errors() { $itemsOnPage = 20; //$_GET['count']; + $currentPage = $_GET['page']; + $statusFilter = $_GET['filter']; + + if ($statusFilter != 'all' && + $statusFilter != 'closed' && + $statusFilter != 'opened' && + $statusFilter != 'processed' ) { + $statusFilter = 'all'; + } + if ($currentPage == null) { $currentPage = 1; } $offset = ($currentPage - 1) * $itemsOnPage; - $reports = Model_Support::getReports($this->user->ID, $offset, $itemsOnPage); + $reports = Model_Support::getReports($this->user->ID, $offset, $itemsOnPage, $statusFilter); if ($reports == null) { - throw new HTTP_Exception_404('Picture not found'); + throw new HTTP_Exception_404('Page not found'); } - $requestNum = Model_Support::getNumberOfReports(); + $requestNum = Model_Support::getNumberOfReports($statusFilter); $pagesNum = ceil($requestNum / $itemsOnPage); $this->twig->set([ 'Requests' => $reports, 'PagesNum' => $pagesNum, - 'CurrentPage' => $currentPage + 'CurrentPage' => $currentPage, + 'PaginationBase' => "admin/requests/errors?filter=" . $statusFilter, + 'Filter' => $statusFilter ])->set_filename('admin/requests/errors'); } diff --git a/~dev_rating/application/classes/Model/Support.php b/~dev_rating/application/classes/Model/Support.php index 9b20dba18..4f055f756 100644 --- a/~dev_rating/application/classes/Model/Support.php +++ b/~dev_rating/application/classes/Model/Support.php @@ -35,9 +35,10 @@ class Model_Support extends Model ->execute()->as_array(); } - public static function getNumberOfReports() { - $query = "CALL `RequestsNum`"; + public static function getNumberOfReports($statusFilter) { + $query = "CALL `RequestsNum` (:filter)"; return DB::query(Database::SELECT, $query) + ->param(':filter', $statusFilter) ->execute()->get('Num'); } } diff --git a/~dev_rating/application/views/admin/requests/errors.twig b/~dev_rating/application/views/admin/requests/errors.twig index 43560107b..632130ced 100644 --- a/~dev_rating/application/views/admin/requests/errors.twig +++ b/~dev_rating/application/views/admin/requests/errors.twig @@ -13,10 +13,10 @@ {% block main_content %} <div style="padding-bottom: 10px"> <select id="statusFilter"> - <option value="all">all</option> - <option value="opened">opened</option> - <option value="processed">processed</option> - <option value="closed">closed</option> + <option value="all" {% if Filter == 'all'%}selected{% endif %}>all</option> + <option value="opened" {% if Filter == 'opened'%}selected{% endif %}>opened</option> + <option value="processed" {% if Filter == 'processed'%}selected{% endif %}>processed</option> + <option value="closed" {% if Filter == 'closed'%}selected{% endif %}>closed</option> </select> </div> @@ -41,20 +41,26 @@ </div> {% endfor %} </div> + <div class="paginator"> <div class="paginator_title">Страницы:</div> - {{ HTML.anchor("admin/requests/errors?page=1", "<div class=\"paginator_item selectedPageNum\"> \<\< </div>") | raw }} - {{ HTML.anchor("admin/requests/errors?page="~(CurrentPage-1), "<div class=\"paginator_item selectedPageNum\"> \< </div>") | raw }} + {{ HTML.anchor(PaginationBase~"&page=1", "<div class=\"paginator_item selectedPageNum\"> \<\< </div>") | raw }} + {{ HTML.anchor(PaginationBase~"&page="~max(1, CurrentPage-1), "<div class=\"paginator_item selectedPageNum\"> \< </div>") | raw }} <div class="paginator_item">…</div> {% for i in max(1,CurrentPage-2)..min(CurrentPage+2,PagesNum) %} {% if i == CurrentPage %} - {{ HTML.anchor("admin/requests/errors?page="~i, "<div class=\"paginator_item selectedPageNum\">" ~ i ~ "</div>") | raw }} + {{ HTML.anchor(PaginationBase~"&page="~i, "<div class=\"paginator_item selectedPageNum\">" ~ i ~ "</div>") | raw }} {% else %} - {{ HTML.anchor("admin/requests/errors?page="~i, "<div class=\"paginator_item\">" ~ i ~ "</div>") | raw }} + {{ HTML.anchor(PaginationBase~"&page="~i, "<div class=\"paginator_item\">" ~ i ~ "</div>") | raw }} {% endif %} {% endfor %} <div class="paginator_item">…</div> - {{ HTML.anchor("admin/requests/errors?page="~(CurrentPage+1), "<div class=\"paginator_item selectedPageNum\"> \> </div>") | raw }} - {{ HTML.anchor("admin/requests/errors?page="~PagesNum, "<div class=\"paginator_item selectedPageNum\"> \>\></div>") | raw }} + {{ HTML.anchor(PaginationBase~"&page="~min(PagesNum, CurrentPage+1), "<div class=\"paginator_item selectedPageNum\"> \> </div>") | raw }} + {{ HTML.anchor(PaginationBase~"&page="~PagesNum, "<div class=\"paginator_item selectedPageNum\"> \>\></div>") | raw }} </div> + {% endblock %} + + + + -- GitLab