From f6a7a1c7bbe62fa1f4432b708ae58b0ea302971e Mon Sep 17 00:00:00 2001 From: Olivier PEREZ Date: Sun, 18 Jan 2015 16:14:45 +0100 Subject: [PATCH] Issue #18 Install pagination on polls admin page --- admin/polls.php | 14 ++++++++++- app/classes/Framadate/FramaDB.php | 25 ++++++++++++++++--- .../Framadate/Services/SuperAdminService.php | 9 ++++--- app/inc/smarty.php | 1 + locale/de_DE/LC_MESSAGES/Studs.po | 24 ++++++++++++++++++ locale/en_GB/LC_MESSAGES/Studs.po | 3 +++ locale/fr_FR/LC_MESSAGES/Studs.po | 3 +++ tpl/admin/polls.tpl | 11 ++++++++ 8 files changed, 82 insertions(+), 8 deletions(-) diff --git a/admin/polls.php b/admin/polls.php index bf91aac..71502e5 100644 --- a/admin/polls.php +++ b/admin/polls.php @@ -27,6 +27,8 @@ use Framadate\Utils; include_once __DIR__ . '/../app/inc/init.php'; include_once __DIR__ . '/../bandeaux.php'; +const POLLS_PER_PAGE = 10; + /* Variables */ /* --------- */ @@ -42,6 +44,11 @@ $adminPollService = new AdminPollService($connect, $pollService, $logService); $superAdminService = new SuperAdminService($connect); $securityService = new SecurityService(); +/* GET */ +/*-----*/ +$page = (int)filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT); +$page = ($page >= 1) ? $page : 1; + /* PAGE */ /* ---- */ @@ -56,10 +63,15 @@ if (!empty($_POST['delete_confirm']) && $securityService->checkCsrf('admin', $_P $adminPollService->deleteEntirePoll($poll_id); } -$polls = $superAdminService->findAllPolls(); +$found = $superAdminService->findAllPolls($page-1, POLLS_PER_PAGE); +$polls = $found['polls']; +$count = $found['count']; // Assign data to template $smarty->assign('polls', $polls); +$smarty->assign('count', $count); +$smarty->assign('page', $page); +$smarty->assign('pages', ceil($count / POLLS_PER_PAGE)); $smarty->assign('poll_to_delete', $poll_to_delete); $smarty->assign('log_file', is_readable('../' . LOG_FILE) ? LOG_FILE : null); $smarty->assign('crsf', $securityService->getToken('admin')); diff --git a/app/classes/Framadate/FramaDB.php b/app/classes/Framadate/FramaDB.php index 38d9b08..6f50065 100644 --- a/app/classes/Framadate/FramaDB.php +++ b/app/classes/Framadate/FramaDB.php @@ -18,6 +18,8 @@ */ namespace Framadate; +use PDO; + class FramaDB { /** * PDO Object, connection to database. @@ -274,11 +276,26 @@ class FramaDB { return $prepared->fetchAll(); } - public function findAllPolls() { - $prepared = $this->prepare('SELECT * FROM ' . Utils::table('poll') . ' ORDER BY end_date ASC'); - $prepared->execute([]); + /** + * @param $start int The index of the first poll to return + * @param $limit int The limit size + * @return array + */ + public function findAllPolls($start, $limit) { + // Polls + $prepared = $this->prepare('SELECT * FROM ' . Utils::table('poll') . ' ORDER BY title ASC LIMIT :start, :limit'); + $prepared->bindParam(':start', $start, PDO::PARAM_INT); + $prepared->bindParam(':limit', $limit, PDO::PARAM_INT); + $prepared->execute(); + $polls = $prepared->fetchAll(); - return $prepared->fetchAll(); + // Total count + $prepared = $this->prepare('SELECT count(1) nb FROM ' . Utils::table('poll')); + $prepared->execute(); + $count = $prepared->fetch(); + $prepared->closeCursor(); + + return ['polls' => $polls, 'count' => $count->nb]; } public function countVotesByPollId($poll_id) { diff --git a/app/classes/Framadate/Services/SuperAdminService.php b/app/classes/Framadate/Services/SuperAdminService.php index bea7b14..af8a305 100644 --- a/app/classes/Framadate/Services/SuperAdminService.php +++ b/app/classes/Framadate/Services/SuperAdminService.php @@ -19,10 +19,13 @@ class SuperAdminService { /** * Return the list of all polls. * - * @return array All the polls + * @param $page int The page index (O = first page) + * @param $limit int The limit size + * @return array ['polls' => The {$limit} polls, 'count' => Total count] + * polls, 'count' => Total count] */ - public function findAllPolls() { - return $this->connect->findAllPolls(); + public function findAllPolls($page, $limit) { + return $this->connect->findAllPolls($page * $limit, $limit); } } diff --git a/app/inc/smarty.php b/app/inc/smarty.php index 9cafbc8..6078fa6 100644 --- a/app/inc/smarty.php +++ b/app/inc/smarty.php @@ -27,6 +27,7 @@ $smarty->caching = false; $smarty->assign('APPLICATION_NAME', NOMAPPLICATION); $smarty->assign('SERVER_URL', Utils::get_server_name()); +$smarty->assign('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']); $smarty->assign('TITLE_IMAGE', IMAGE_TITRE); $smarty->assign('use_nav_js', file_exists($_SERVER['DOCUMENT_ROOT'] . '/nav/nav.js')); $smarty->assign('lang', $lang); diff --git a/locale/de_DE/LC_MESSAGES/Studs.po b/locale/de_DE/LC_MESSAGES/Studs.po index 3f8adcf..9a89c9a 100644 --- a/locale/de_DE/LC_MESSAGES/Studs.po +++ b/locale/de_DE/LC_MESSAGES/Studs.po @@ -610,6 +610,30 @@ msgstr "Umfrage ändern" msgid "Logs" msgstr "Verlauf" +msgid "Summary" +msgstr "Zusammenfassung" + +msgid "Success" +msgstr "Erfolg" + +msgid "Fail" +msgstr "scheitern" + +msgid "Nothing" +msgstr "Nichts" + +msgid "Succeeded:" +msgstr "Erfolgreich:" + +msgid "Failed:" +msgstr "fehlgeschlagen:" + +msgid "Skipped:" +msgstr "übersprungene:" + +msgid "Pages:" +msgstr "Seiten:" + ########### Mails ########### # Mails studs.php msgid "Poll's participation" diff --git a/locale/en_GB/LC_MESSAGES/Studs.po b/locale/en_GB/LC_MESSAGES/Studs.po index 928ab8f..d084ea4 100644 --- a/locale/en_GB/LC_MESSAGES/Studs.po +++ b/locale/en_GB/LC_MESSAGES/Studs.po @@ -664,6 +664,9 @@ msgstr "Failed:" msgid "Skipped:" msgstr "Skipped:" +msgid "Pages:" +msgstr "Pages:" + ########### Mails ########### # Mails studs.php msgid "Poll's participation" diff --git a/locale/fr_FR/LC_MESSAGES/Studs.po b/locale/fr_FR/LC_MESSAGES/Studs.po index fe1efdb..7cd490e 100644 --- a/locale/fr_FR/LC_MESSAGES/Studs.po +++ b/locale/fr_FR/LC_MESSAGES/Studs.po @@ -664,6 +664,9 @@ msgstr "Échoué:" msgid "Skipped:" msgstr "Passé:" +msgid "Pages:" +msgstr "Pages :" + ########### Mails ########### # Mails studs.php msgid "Poll's participation" diff --git a/tpl/admin/polls.tpl b/tpl/admin/polls.tpl index 30c773d..63e6bee 100644 --- a/tpl/admin/polls.tpl +++ b/tpl/admin/polls.tpl @@ -60,5 +60,16 @@ {/foreach} + +
+ {_('Pages:')} + {for $p=1 to $pages} + {if $p===$page} + {$p} + {else} + {$p} + {/if} + {/for} +
{/block} \ No newline at end of file