6f77dcf9 by Kevin Burton

added pagination and search

1 parent 7280be63
...@@ -435,8 +435,12 @@ input.dp-applied { ...@@ -435,8 +435,12 @@ input.dp-applied {
435 435
436 .admin-member-id { font-size:14px; color:#777; } 436 .admin-member-id { font-size:14px; color:#777; }
437 437
438 .users-role-bar { margin-top:15px; font-size:11px; } 438 .users-role-bar { margin-top:15px; font-size:11px; margin-left:8px; float: left; margin-bottom: 5px;}
439 .users-role-bar a { text-decoration: none; } 439 .users-role-bar a { text-decoration: none; }
440 .users-role-bar a.active { color:#000; font-weight: bold; } 440 .users-role-bar a.active { color:#000; font-weight: bold; }
441 .sm_count { font-size:11px; color:#999; font-weight: normal; } 441 .sm_count { font-size:11px; color:#999; font-weight: normal; }
442 442
443 .TzPaginateResults { margin-top:35px; font-size:11px; text-align: right; margin-right:10px; margin-bottom:5px; float:right; }
444 .TzPaginateResults a { text-decoration: none; padding:1px 0px; border:1px solid transparent; }
445 .TzPaginateResults a.active { color:#000; font-weight: bold; border:1px solid #ccc;padding:1px 3px; }
446
......
...@@ -57,35 +57,66 @@ function search_special_status($key) { ...@@ -57,35 +57,66 @@ function search_special_status($key) {
57 } 57 }
58 } 58 }
59 59
60 function get_users($role = null, $start=0, $limit=20) { 60 function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_only = false, $search = null) {
61 global $wpdb; 61 global $wpdb;
62 62
63 $users = array(); 63 $users = array();
64 64
65 $blog_prefix = $wpdb->get_blog_prefix( $blog_id ); 65 if ($search) {
66 $search = strip_tags($search);
67 $search_text = "AND (uml.meta_value LIKE '%$search%' OR umf.meta_value LIKE '%$search%')";
68 } else {
69 $search_text = "";
70 }
71
66 72
73
74 $blog_prefix = $wpdb->get_blog_prefix();
67 if ($role) { 75 if ($role) {
68 $filter = "AND {$wpdb->usermeta}.user_id IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='wp_capabilities' AND meta_value LIKE '%$role%' )"; 76 $extra_table = "";//", {$wpdb->usermeta} as umc";
77 //$filter = "AND (umc.user_id=u.ID AND umc.meta_key='wp_capabilites' AND umc.meta_value LIKE '%$role%')";
78 $filter = "AND u.ID IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='wp_capabilities' AND meta_value LIKE '%$role%')";
69 } else { 79 } else {
80 $extra_table = "";
70 $filter = ""; 81 $filter = "";
71 } 82 }
72 $query = "SELECT {$wpdb->users}.*, meta_value as last_name FROM $wpdb->users, $wpdb->usermeta WHERE {$wpdb->users}.ID = {$wpdb->usermeta}.user_id AND meta_key = 'last_name' $filter ORDER BY last_name ASC LIMIT $start,$limit";
73 83
74 $wp_user_search = $wpdb->get_results($query);
75 foreach ( $wp_user_search as $user ) {
76 $uid = (int) $user->ID;
77 84
78 $user = new WP_User($uid); 85 $query = "
86 SELECT
87 u.ID, u.user_login, user_email, uml.meta_value as last_name, umf.meta_value as first_name
88 FROM
89 {$wpdb->users} as u, {$wpdb->usermeta} as uml, {$wpdb->usermeta} as umf, {$wpdb->usermeta} as ums $extra_table
90 WHERE
91 (uml.user_id=u.ID AND uml.meta_key='last_name')
92 AND (umf.user_id=u.ID AND umf.meta_key='first_name')
93 AND (ums.user_id=u.ID AND ums.meta_key='status')
94 $filter
95 $search_text
96 ORDER BY last_name ASC, first_name ASC
97 ";
79 98
80 $user_login = $user->user_login; 99 if ($records_per_page > 0) {
81 $name = get_user_meta($uid,'first_name',true) . " " . get_user_meta($uid, 'last_name',true); 100 $limit = " LIMIT ".( ($pagenum - 1) * $records_per_page ).", $records_per_page";
101 } else {
102 $limit = "";
103 }
82 104
105 $wp_user_search = $wpdb->get_results($query.$limit);
106
107 if ($return_count_only) {
108 return $wpdb->num_rows;
109 } else {
110
111 foreach ( $wp_user_search as $user ) {
112 $uid = (int) $user->ID;
113 $user = new WP_User($uid);
83 reset($user->roles); 114 reset($user->roles);
84 $role = ucwords(current($user->roles)); 115 $role = ucwords(current($user->roles));
85 116 $users[] = array('uid'=>$uid,'first_name'=>$user->first_name,'last_name'=>$user->last_name,'role'=>$role, 'user_login'=>$user->user_login, 'email'=>$user->user_email, 'status'=>$user->status);
86 $users[] = array('uid'=>$uid,'name'=>$name,'first_name'=>get_user_meta($uid,'first_name',true),'last_name'=>get_user_meta($uid, 'last_name',true),'role'=>$role, 'user_login'=>$user_login, 'email'=>$user->user_email);
87 } 117 }
88 return $users; 118 return $users;
119 }
89 } 120 }
90 121
91 function create_user() { 122 function create_user() {
......
...@@ -12,6 +12,41 @@ use Tz\WordPress\Tools\Notifications; ...@@ -12,6 +12,41 @@ use Tz\WordPress\Tools\Notifications;
12 12
13 use Exception, StdClass; 13 use Exception, StdClass;
14 use WP_User; 14 use WP_User;
15
16 $records_per_page = 3;
17
18 $filter_role = isset($_GET['role']) ? $_GET['role'] : null;
19 $pagenum = isset($_GET['pagenum']) ? $_GET['pagenum'] : 1;
20 $search = isset($_GET['search_criteria']) ? $_GET['search_criteria'] : null;
21
22
23 $rows = get_users($filter_role, 0,0, true, $search);
24
25 $last = ceil($rows/$records_per_page);
26 if ($last < 1) {
27 $last = 1;
28 }
29
30 if ($pagenum < 1) {
31 $pagenum = 1;
32 } elseif ($pagenum > $last) {
33 $pagenum = $last;
34 }
35
36
37 $site_users = get_users($filter_role, $pagenum, $records_per_page, false, $search);
38
39
40 if ($filter_role) {
41 $url = $_SERVER['PHP_SELF']."?page=cbv_users&role=$filter_role&pagenum=";
42 } elseif ($search) {
43 $url = $_SERVER['PHP_SELF']."?page=cbv_users&search_criteria=$search&pagenum=";
44 } else {
45 $url = $_SERVER['PHP_SELF']."?page=cbv_users&pagenum=";
46 }
47
48
49
15 ?> 50 ?>
16 <div id="" class="wrap"> 51 <div id="" class="wrap">
17 <div id="icon-users" class="icon32"><br /></div> 52 <div id="icon-users" class="icon32"><br /></div>
...@@ -19,46 +54,62 @@ use WP_User; ...@@ -19,46 +54,62 @@ use WP_User;
19 <p style="display:none;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam iaculis convallis nisi eu dignissim. Quisque malesuada augue in mi blandit at blandit tortor sollicitudin. Cras at justo mi, vel mollis est. Donec orci erat, blandit varius vehicula vitae, volutpat at lorem. Etiam tincidunt bibendum ante, non tincidunt purus faucibus sed. Suspendisse eget facilisis tellus. Nulla imperdiet leo placerat diam sollicitudin nec mattis neque mattis. Cras id lacus tellus. Phasellus volutpat vehicula porttitor. Praesent erat felis, pharetra mollis egestas sit amet, rhoncus eget nisl. Morbi interdum sapien vitae nibh pharetra scelerisque. Mauris porta accumsan velit ac aliquam. Sed sit amet dictum felis. Fusce tempus vulputate nulla, quis tincidunt velit mattis eu.</p> 54 <p style="display:none;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam iaculis convallis nisi eu dignissim. Quisque malesuada augue in mi blandit at blandit tortor sollicitudin. Cras at justo mi, vel mollis est. Donec orci erat, blandit varius vehicula vitae, volutpat at lorem. Etiam tincidunt bibendum ante, non tincidunt purus faucibus sed. Suspendisse eget facilisis tellus. Nulla imperdiet leo placerat diam sollicitudin nec mattis neque mattis. Cras id lacus tellus. Phasellus volutpat vehicula porttitor. Praesent erat felis, pharetra mollis egestas sit amet, rhoncus eget nisl. Morbi interdum sapien vitae nibh pharetra scelerisque. Mauris porta accumsan velit ac aliquam. Sed sit amet dictum felis. Fusce tempus vulputate nulla, quis tincidunt velit mattis eu.</p>
20 55
21 <div class="users-role-bar"> 56 <div class="users-role-bar">
57 <?php if (isset($_GET['search_criteria'])):?>
58 <div style="margin-bottom:10px;display:block;"><strong>Searched for: </strong> <?php echo strip_tags($_GET['search_criteria']); ?> <a href="/wp-admin/admin.php?page=cbv_users" class="button">Clear Search</a></div>
59 <?php else: ?>
60 <strong>Filter</strong>:
22 <?php $users = count_users(); ?> 61 <?php $users = count_users(); ?>
23 <a href="/wp-admin/admin.php?page=cbv_users" <?php echo (!isset($_GET['role']) ? "class='active'" : ""); ?>>All <span class="sm_count">(<?php echo $users['total_users']?>)</span></a> 62 <a href="/wp-admin/admin.php?page=cbv_users" <?php echo (!isset($_GET['role']) ? "class='active'" : ""); ?>>All</a>
24 <?php 63 <?php
25 if (isset($users['avail_roles'])) { 64 if (isset($users['avail_roles'])) {
26 foreach($users['avail_roles'] as $role=>$counted) { 65 foreach($users['avail_roles'] as $role=>$counted) {
27 print ' | <a href="/wp-admin/admin.php?page=cbv_users&role='.$role.'" '.( (isset($_GET['role']) && $_GET['role']==$role) ? "class='active'" : "").'>'.ucwords($role).' <span class="sm_count">('.$counted.')</span></a>'; 66 print ' | <a href="/wp-admin/admin.php?page=cbv_users&role='.$role.'" '.( (isset($_GET['role']) && $_GET['role']==$role) ? "class='active'" : "").'>'.ucwords($role).'</a>';
28 } 67 }
29 } 68 }
30 69
31 ?> 70 ?>
71 <form method="GET" action="<?php echo $_SERVER['PHP_SELF']."?page=cbv_users"; ?>"><input type="hidden" name="page" value="cbv_users" /><div style="margin-top:3px;display:block;"><em>or</em> <strong>Search</strong>: <input type="text" name="search_criteria" value="" /><input type="submit" value="Go" /></div></form>
72 <?php endif;?>
32 </div> 73 </div>
33 74
34 <table cellspacing="0" class="widefat post fixed" style="margin-top:15px;"> 75 <div class="TzPaginateResults">
76 <?php echo "Users: $rows ";if($last > 1): echo " | Pages: "; for($i=1; $i <= $last; $i++):?>
77 <a href="<?php echo $url.$i; ?>" <?php echo ($pagenum==$i) ? "class='active'" : ""?>><?php echo $i; ?></a>
78 <?php endfor;endif; ?>
79 </div>
80 <div style="clear:both"></div>
81 <table cellspacing="0" class="widefat post fixed">
35 <thead> 82 <thead>
36 <tr> 83 <tr>
37 <th scope="col" class="manage-column">Name</th> 84 <th scope="col" class="manage-column">Name</th>
38 <th scope="col" width="180" class="manage-column">Username</th> 85 <th scope="col" width="180" class="manage-column">Username</th>
39 <th scope="col" width="250" class="manage-column">Email</th> 86 <th scope="col" width="250" class="manage-column">Email</th>
40 <th scope="col" width="200" class="manage-column">Role</th> 87 <th scope="col" width="200" class="manage-column">Role</th>
88 <th scope="col" width="100" class="manage-column">Status</th>
41 </tr> 89 </tr>
42 </thead> 90 </thead>
43 <tbody> 91 <tbody>
44 <?php 92 <?php
45 $filter_role = (isset($_GET['role']) ? $_GET['role'] : null);
46 $users = get_users($filter_role, 0);
47 93
48 foreach($users as $user): 94 foreach($site_users as $user):
49 ?> 95 ?>
50 <tr> 96 <tr>
51 <td><a href="/wp-admin/admin.php?page=cbv_users&action=edit&uid=<?php echo $user['uid']?>"><?php echo $user['last_name'].', '.$user['first_name']?></a></td> 97 <td><a href="/wp-admin/admin.php?page=cbv_users&action=edit&uid=<?php echo $user['uid']?>"><?php echo $user['last_name'].', '.$user['first_name']?></a></td>
52 <td><a href="/wp-admin/admin.php?page=cbv_users&action=edit&uid=<?php echo $user['uid']?>"><?php echo $user['user_login']?></a></td> 98 <td><a href="/wp-admin/admin.php?page=cbv_users&action=edit&uid=<?php echo $user['uid']?>"><?php echo $user['user_login']?></a></td>
53 <td><?php echo $user['email']?></td> 99 <td><?php echo $user['email']?></td>
54 <td><?php echo $user['role']?></td> 100 <td><?php echo $user['role']?></td>
101 <td><?php echo ucwords($user['status']);?></td>
55 </tr> 102 </tr>
56 <?php endforeach; ?> 103 <?php endforeach; ?>
57 </body> 104 </body>
58 </table> 105 </table>
59 106
60 107 <div class="TzPaginateResults" style="margin-top:10px;">
61 108 <?php if($last > 1): echo "Pages: "; for($i=1; $i <= $last; $i++):?>
109 <a href="<?php echo $url.$i; ?>" <?php echo ($pagenum==$i) ? "class='active'" : ""?>><?php echo $i; ?></a>
110 <?php endfor;endif; ?>
111 </div>
112 <div style="clear:both;"></div>
62 113
63 </div> 114 </div>
64 <script src="<?php echo Tools\url('../UserManager.js', __FILE__);?>" type="text/javascript"></script> 115 <script src="<?php echo Tools\url('../UserManager.js', __FILE__);?>" type="text/javascript"></script>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -168,7 +168,7 @@ unset($rc, $roles['administrator']); ...@@ -168,7 +168,7 @@ unset($rc, $roles['administrator']);
168 <h3 style="margin-bottom:5px; padding-bottom:0px;">Account Status:</h3> 168 <h3 style="margin-bottom:5px; padding-bottom:0px;">Account Status:</h3>
169 <select name="status"> 169 <select name="status">
170 <option value="active" <?php echo ($status=="active") ? "selected" : ""; ?>>Active</option> 170 <option value="active" <?php echo ($status=="active") ? "selected" : ""; ?>>Active</option>
171 <option value="suspeneded" <?php echo ($status=="suspended") ? "selected" : ""; ?>>Suspended</option> 171 <option value="suspended" <?php echo ($status=="suspended") ? "selected" : ""; ?>>Suspended</option>
172 <option value="terminated" <?php echo ($status=="terminated") ? "selected" : ""; ?>>Terminated</option> 172 <option value="terminated" <?php echo ($status=="terminated") ? "selected" : ""; ?>>Terminated</option>
173 </select> 173 </select>
174 174
......