paginated user list
This commit is contained in:
		
							parent
							
								
									413a742ca8
								
							
						
					
					
						commit
						97a03d8f83
					
				| @ -95,11 +95,14 @@ class UserPage extends Extension { | |||||||
| 				$this->page_create(); | 				$this->page_create(); | ||||||
| 			} | 			} | ||||||
| 			else if($event->get_arg(0) == "list") { | 			else if($event->get_arg(0) == "list") { | ||||||
| 				$offset = 0; |  | ||||||
| 				$limit = 50; | 				$limit = 50; | ||||||
| 
 | 
 | ||||||
| 				$q = "SELECT * FROM users WHERE 1=1"; | 				$page_num = int_escape($event->get_arg(1)); | ||||||
| 				$a = array("offset"=>$offset, "limit"=>$limit); | 				if($page_num <= 0) $page_num = 1; | ||||||
|  | 				$offset = ($page_num-1) * $limit; | ||||||
|  | 
 | ||||||
|  | 				$q = "WHERE 1=1"; | ||||||
|  | 				$a = array(); | ||||||
| 
 | 
 | ||||||
| 				if(@$_GET['username']) { | 				if(@$_GET['username']) { | ||||||
| 					$q .= " AND SCORE_STRNORM(name) LIKE SCORE_STRNORM(:name)"; | 					$q .= " AND SCORE_STRNORM(name) LIKE SCORE_STRNORM(:name)"; | ||||||
| @ -107,7 +110,7 @@ class UserPage extends Extension { | |||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if($user->can('delete_user') && @$_GET['email']) { | 				if($user->can('delete_user') && @$_GET['email']) { | ||||||
| 					$q .= " AND SCORE_STRNORM(name) LIKE SCORE_STRNORM(:email)"; | 					$q .= " AND SCORE_STRNORM(email) LIKE SCORE_STRNORM(:email)"; | ||||||
| 					$a["email"] = '%' . $_GET['email'] . '%'; | 					$a["email"] = '%' . $_GET['email'] . '%'; | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| @ -115,12 +118,14 @@ class UserPage extends Extension { | |||||||
| 					$q .= " AND class LIKE :class"; | 					$q .= " AND class LIKE :class"; | ||||||
| 					$a["class"] = $_GET['class']; | 					$a["class"] = $_GET['class']; | ||||||
| 				} | 				} | ||||||
|  | 				$where = $database->scoreql_to_sql($q); | ||||||
| 
 | 
 | ||||||
| 				$q .=  " LIMIT :limit OFFSET :offset"; | 				$count = $database->get_one("SELECT count(*) FROM users $where", $a); | ||||||
| 
 | 				$a["offset"] = $offset; | ||||||
| 				$rows = $database->get_all($database->scoreql_to_sql($q), $a); | 				$a["limit"] = $limit; | ||||||
|  | 				$rows = $database->get_all("SELECT * FROM users $where LIMIT :limit OFFSET :offset", $a); | ||||||
| 				$users = array_map("_new_user", $rows); | 				$users = array_map("_new_user", $rows); | ||||||
| 				$this->theme->display_user_list($page, $users, $user); | 				$this->theme->display_user_list($page, $users, $user, $page_num, $count/$limit); | ||||||
| 			} | 			} | ||||||
| 			else if($event->get_arg(0) == "logout") { | 			else if($event->get_arg(0) == "logout") { | ||||||
| 				$this->page_logout(); | 				$this->page_logout(); | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ class UserPageTheme extends Themelet { | |||||||
| 	 * @param User[] $users | 	 * @param User[] $users | ||||||
| 	 * @param User $user | 	 * @param User $user | ||||||
| 	 */ | 	 */ | ||||||
| 	public function display_user_list(Page $page, array $users, User $user) { | 	public function display_user_list(Page $page, array $users, User $user, int $page_num, int $page_total) { | ||||||
| 		$page->set_title("User List"); | 		$page->set_title("User List"); | ||||||
| 		$page->set_heading("User List"); | 		$page->set_heading("User List"); | ||||||
| 		$page->add_block(new NavBlock()); | 		$page->add_block(new NavBlock()); | ||||||
| @ -36,7 +36,7 @@ class UserPageTheme extends Themelet { | |||||||
| 		$html .= "<tr>" . make_form("user_admin/list", "GET"); | 		$html .= "<tr>" . make_form("user_admin/list", "GET"); | ||||||
| 		$html .= "<td><input type='text' name='username' value='$h_username'/></td>"; | 		$html .= "<td><input type='text' name='username' value='$h_username'/></td>"; | ||||||
| 		if($user->can('delete_user')) | 		if($user->can('delete_user')) | ||||||
| 			$html .= "<td><input type='email' name='text' value='$h_email'/></td>"; | 			$html .= "<td><input type='text' name='email' value='$h_email'/></td>"; | ||||||
| 		$html .= "<td><input type='text' name='class' value='$h_class'/></td>"; | 		$html .= "<td><input type='text' name='class' value='$h_class'/></td>"; | ||||||
| 		$html .= "<td><input type='submit' value='Search'/></td>"; | 		$html .= "<td><input type='submit' value='Search'/></td>"; | ||||||
| 		$html .= "</form></tr>"; | 		$html .= "</form></tr>"; | ||||||
| @ -60,6 +60,26 @@ class UserPageTheme extends Themelet { | |||||||
| 		$html .= "</table>"; | 		$html .= "</table>"; | ||||||
| 
 | 
 | ||||||
| 		$page->add_block(new Block("Users", $html)); | 		$page->add_block(new Block("Users", $html)); | ||||||
|  | 		$this->display_paginator($page, "user_admin/list", $this->get_args(), $page_num, $page_total); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	protected function ueie($var) { | ||||||
|  | 		if(isset($_GET[$var])) return $var."=".url_escape($_GET[$var]); | ||||||
|  | 		else return ""; | ||||||
|  | 	} | ||||||
|  | 	protected function get_args() { | ||||||
|  | 		$args = ""; | ||||||
|  | 		// Check if each arg is actually empty and skip it if so
 | ||||||
|  | 		if(strlen($this->ueie("username"))) | ||||||
|  | 			$args .= $this->ueie("username")."&"; | ||||||
|  | 		if(strlen($this->ueie("email"))) | ||||||
|  | 			$args .= $this->ueie("email")."&"; | ||||||
|  | 		if(strlen($this->ueie("class"))) | ||||||
|  | 			$args .= $this->ueie("class")."&"; | ||||||
|  | 		// If there are no args at all, set $args to null to prevent an unnecessary ? at the end of the paginator url
 | ||||||
|  | 		if(strlen($args) == 0) | ||||||
|  | 			$args = null; | ||||||
|  | 		return $args; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public function display_user_links(Page $page, User $user, $parts) { | 	public function display_user_links(Page $page, User $user, $parts) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user