From 89737c09d572efe35014e668cdd06407c2c19d62 Mon Sep 17 00:00:00 2001 From: Joe7 Date: Sun, 9 Jan 2011 20:52:31 +0100 Subject: Paginator for user manager admin view Closes ticket #1557 Note: also optimizes the way item count is retrieved for users, saving -1 queries when displaying this page --- modules/user/controllers/admin_users.php | 34 +++++++++++++++++++++++++++++++- modules/user/views/admin_users.html.php | 31 ++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-) (limited to 'modules/user') diff --git a/modules/user/controllers/admin_users.php b/modules/user/controllers/admin_users.php index 23032ab3..6850f8af 100644 --- a/modules/user/controllers/admin_users.php +++ b/modules/user/controllers/admin_users.php @@ -22,8 +22,40 @@ class Admin_Users_Controller extends Admin_Controller { $view = new Admin_View("admin.html"); $view->page_title = t("Users and groups"); $view->content = new View("admin_users.html"); - $view->content->users = ORM::factory("user")->order_by("name", "ASC")->find_all(); + + // @todo: add this as a config option + $page_size = module::get_var("user", "page_size", 10); + $page = Input::instance()->get("page", "1"); + $builder = db::build(); + $user_count = $builder->from("users")->count_records(); + list($offset, $max_pages) = Controller::get_pager_params($page, $user_count, $page_size); + + // Make sure that the page references a valid offset + if ($page < 1) { + url::redirect(url::merge(array("page" => 1))); + } else if ($page > $max_pages) { + url::redirect(url::merge(array("page" => $max_pages))); + } + $view->content->users = ORM::factory("user") + ->select(array("users.id", "users.admin", "users.name", "users.email", "users.full_name", + "users.last_login", "users.guest", db::expr("COUNT(items.id) as item_count"))) + ->join("items", "items.owner_id", "users.id", "LEFT") + ->group_by("users.id") + ->order_by("users.name", "ASC") + ->find_all($page_size, $offset); + $view->content->groups = ORM::factory("group")->order_by("name", "ASC")->find_all(); + $view->content->page = $page; + $view->content->max_pages = $max_pages; + + if ($page < $max_pages) { + $view->content->next_page_url = url::site(url::merge(array("page" => $page + 1))); + } + if ( $page > 1 ) + { + $view->content->previous_page_url = url::site(url::merge(array("page" => $page - 1))); + } + print $view; } diff --git a/modules/user/views/admin_users.html.php b/modules/user/views/admin_users.html.php index f067cae8..028d44eb 100644 --- a/modules/user/views/admin_users.html.php +++ b/modules/user/views/admin_users.html.php @@ -88,7 +88,7 @@ last_login == 0) ? "" : gallery::date($user->last_login) ?> - from("items")->where("owner_id", "=", $user->id)->count_records() ?> + item_count ?> id") ?>" @@ -108,6 +108,35 @@ + + + -- cgit v1.2.3 From 97fc535411478f939b303c75a067b7dad9123112 Mon Sep 17 00:00:00 2001 From: Joe7 Date: Sun, 9 Jan 2011 21:19:55 +0100 Subject: Minor css mod to make it obvious paging belongs to user block --- modules/user/css/user.css | 1 + 1 file changed, 1 insertion(+) (limited to 'modules/user') diff --git a/modules/user/css/user.css b/modules/user/css/user.css index 084eac31..93e3d02e 100644 --- a/modules/user/css/user.css +++ b/modules/user/css/user.css @@ -12,6 +12,7 @@ #g-user-admin { width: auto; + margin-bottom: 4em; } #g-group-admin { -- cgit v1.2.3 From 00b520fffd867389b5a030ddefee9f468cad044c Mon Sep 17 00:00:00 2001 From: Joe7 Date: Tue, 11 Jan 2011 20:53:48 +0100 Subject: coding style --- modules/user/controllers/admin_users.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'modules/user') diff --git a/modules/user/controllers/admin_users.php b/modules/user/controllers/admin_users.php index 6850f8af..2ae9788e 100644 --- a/modules/user/controllers/admin_users.php +++ b/modules/user/controllers/admin_users.php @@ -51,8 +51,7 @@ class Admin_Users_Controller extends Admin_Controller { if ($page < $max_pages) { $view->content->next_page_url = url::site(url::merge(array("page" => $page + 1))); } - if ( $page > 1 ) - { + if ($page > 1) { $view->content->previous_page_url = url::site(url::merge(array("page" => $page - 1))); } -- cgit v1.2.3 From df802de6ae3cc0c294a1a3dc76db29ff21949b9f Mon Sep 17 00:00:00 2001 From: Joe7 Date: Tue, 11 Jan 2011 21:28:25 +0100 Subject: Making good use of Pagination class to reduce code (removed MY_Controller which duplicated some functionality available in Pagination as well) --- modules/gallery/libraries/MY_Controller.php | 26 -------------------------- modules/user/controllers/admin_users.php | 24 +++++++++++------------- modules/user/views/admin_users.html.php | 28 ++-------------------------- 3 files changed, 13 insertions(+), 65 deletions(-) delete mode 100644 modules/gallery/libraries/MY_Controller.php (limited to 'modules/user') diff --git a/modules/gallery/libraries/MY_Controller.php b/modules/gallery/libraries/MY_Controller.php deleted file mode 100644 index ea2a7502..00000000 --- a/modules/gallery/libraries/MY_Controller.php +++ /dev/null @@ -1,26 +0,0 @@ -get("page", "1"); $builder = db::build(); $user_count = $builder->from("users")->count_records(); - list($offset, $max_pages) = Controller::get_pager_params($page, $user_count, $page_size); + + $view->content->pager = new Pagination(); + $view->content->pager->initialize( + array("query_string" => "page", + "total_items" => $user_count, + "items_per_page" => $page_size, + "style" => "classic")); // Make sure that the page references a valid offset if ($page < 1) { url::redirect(url::merge(array("page" => 1))); - } else if ($page > $max_pages) { - url::redirect(url::merge(array("page" => $max_pages))); + } else if ($page > $view->content->pager->total_pages) { + url::redirect(url::merge(array("page" => $view->content->pager->total_pages))); } + $view->content->users = ORM::factory("user") ->select(array("users.id", "users.admin", "users.name", "users.email", "users.full_name", "users.last_login", "users.guest", db::expr("COUNT(items.id) as item_count"))) ->join("items", "items.owner_id", "users.id", "LEFT") ->group_by("users.id") ->order_by("users.name", "ASC") - ->find_all($page_size, $offset); + ->find_all($page_size, $view->content->pager->sql_offset); $view->content->groups = ORM::factory("group")->order_by("name", "ASC")->find_all(); - $view->content->page = $page; - $view->content->max_pages = $max_pages; - - if ($page < $max_pages) { - $view->content->next_page_url = url::site(url::merge(array("page" => $page + 1))); - } - if ($page > 1) { - $view->content->previous_page_url = url::site(url::merge(array("page" => $page - 1))); - } print $view; } diff --git a/modules/user/views/admin_users.html.php b/modules/user/views/admin_users.html.php index 028d44eb..74b13ec5 100644 --- a/modules/user/views/admin_users.html.php +++ b/modules/user/views/admin_users.html.php @@ -109,32 +109,8 @@ - -- cgit v1.2.3