38aaa2dd by Marty Penner

Added pager to 'CBV Users' page (ugly and procedural, but works) and escaped $ro…

…le variable when displaying users (was not escaped and is coming from $_GET)
1 parent a0fe509f
...@@ -94,12 +94,27 @@ function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_ ...@@ -94,12 +94,27 @@ function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_
94 if ($role) { 94 if ($role) {
95 $extra_table = "";//", {$wpdb->usermeta} as umc"; 95 $extra_table = "";//", {$wpdb->usermeta} as umc";
96 //$filter = "AND (umc.user_id=u.ID AND umc.meta_key='wp_capabilites' AND umc.meta_value LIKE '%$role%')"; 96 //$filter = "AND (umc.user_id=u.ID AND umc.meta_key='wp_capabilites' AND umc.meta_value LIKE '%$role%')";
97 $filter = "AND u.ID IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='wp_capabilities' AND meta_value LIKE '%$role%')"; 97 $filter = "AND u.ID IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='wp_capabilities' AND meta_value LIKE '%" . $wpdb->escape($role) . "%')";
98 } else { 98 } else {
99 $extra_table = ""; 99 $extra_table = "";
100 $filter = ""; 100 $filter = "";
101 } 101 }
102 102
103 if ($return_count_only) {
104 $query = "
105 SELECT
106 COUNT(*)
107 FROM
108 {$wpdb->users} as u, {$wpdb->usermeta} as uml, {$wpdb->usermeta} as umf, {$wpdb->usermeta} as ums $extra_table
109 WHERE
110 (uml.user_id=u.ID AND uml.meta_key='last_name')
111 AND (umf.user_id=u.ID AND umf.meta_key='first_name')
112 AND (ums.user_id=u.ID AND ums.meta_key='status')
113 $filter
114 $search_text";
115
116 return $count = $wpdb->get_var($query);
117 }
103 118
104 $query = " 119 $query = "
105 SELECT 120 SELECT
...@@ -112,7 +127,7 @@ function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_ ...@@ -112,7 +127,7 @@ function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_
112 AND (ums.user_id=u.ID AND ums.meta_key='status') 127 AND (ums.user_id=u.ID AND ums.meta_key='status')
113 $filter 128 $filter
114 $search_text 129 $search_text
115 ORDER BY last_name ASC, first_name ASC 130 ORDER BY last_name ASC, first_name ASC
116 "; 131 ";
117 /* 132 /*
118 $query = " 133 $query = "
...@@ -132,19 +147,14 @@ function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_ ...@@ -132,19 +147,14 @@ function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_
132 147
133 $wp_user_search = $wpdb->get_results($query.$limit); 148 $wp_user_search = $wpdb->get_results($query.$limit);
134 149
135 if ($return_count_only) { 150 foreach ( $wp_user_search as $user ) {
136 return $wpdb->num_rows; 151 $uid = (int) $user->ID;
137 } else { 152 $user = new WP_User($uid);
138 153 reset($user->roles);
139 foreach ( $wp_user_search as $user ) { 154 $role = ucwords(current($user->roles));
140 $uid = (int) $user->ID; 155 $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);
141 $user = new WP_User($uid);
142 reset($user->roles);
143 $role = ucwords(current($user->roles));
144 $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);
145 }
146 return $users;
147 } 156 }
157 return $users;
148 } 158 }
149 159
150 function create_user() { 160 function create_user() {
......
...@@ -12,15 +12,14 @@ use Tz\WordPress\Tools\Notifications; ...@@ -12,15 +12,14 @@ use Tz\WordPress\Tools\Notifications;
12 12
13 use Exception, StdClass; 13 use Exception, StdClass;
14 use WP_User; 14 use WP_User;
15 15 ini_set('display_errors', 1);
16 $records_per_page = 20; 16 $records_per_page = 20;
17 17
18 $filter_role = isset($_GET['role']) ? $_GET['role'] : null; 18 $filter_role = isset($_GET['role']) ? $_GET['role'] : null;
19 $pagenum = isset($_GET['pagenum']) ? $_GET['pagenum'] : 1; 19 $pagenum = isset($_GET['pagenum']) ? $_GET['pagenum'] : 1;
20 $search = isset($_GET['search_criteria']) ? $_GET['search_criteria'] : null; 20 $search = isset($_GET['search_criteria']) ? $_GET['search_criteria'] : null;
21 21
22 22 $rows = get_users($filter_role, 0, 0, true, $search);
23 $rows = get_users($filter_role, 0,0, true, $search);
24 23
25 $last = ceil($rows/$records_per_page); 24 $last = ceil($rows/$records_per_page);
26 if ($last < 1) { 25 if ($last < 1) {
...@@ -33,19 +32,109 @@ if ($pagenum < 1) { ...@@ -33,19 +32,109 @@ if ($pagenum < 1) {
33 $pagenum = $last; 32 $pagenum = $last;
34 } 33 }
35 34
36 35 $site_users = get_users($filter_role, $pagenum, $records_per_page, false, $search);
37 $site_users = get_users($filter_role, $pagenum, $records_per_page, false, $search);
38
39 36
40 if ($filter_role) { 37 if ($filter_role) {
41 $url = $_SERVER['PHP_SELF']."?page=cbv_users&role=$filter_role&pagenum="; 38 $url = $_SERVER['PHP_SELF']."?page=cbv_users&role=$filter_role&pagenum=";
42 } elseif ($search) { 39 } elseif ($search) {
43 $url = $_SERVER['PHP_SELF']."?page=cbv_users&search_criteria=$search&pagenum="; 40 $url = $_SERVER['PHP_SELF']."?page=cbv_users&search_criteria=$search&pagenum=";
44 } else { 41 } else {
45 $url = $_SERVER['PHP_SELF']."?page=cbv_users&pagenum="; 42 $url = $_SERVER['PHP_SELF']."?page=cbv_users&pagenum=";
46 } 43 }
47 44
48 45 // Pager section
46 $loop_test = 0;
47 $loop_initial = 0;
48
49 $show_ellipsis_limit = 7;
50 $ellipsis_before = '';
51 $ellipsis_after = '';
52 $ellipsis_common = '...';
53
54 $tag = '[pagenum]';
55 $template = '<a href="' . $url . $tag . '">' . $tag . '</a>';
56 $template_with_class = '<a href="' . $url . $tag . '" class="active">' . $tag . '</a>';
57
58 $prev_link = ($pagenum == 1) ? '' : ' <a href="' . $url . ($pagenum - 1) . '"><</a> ';
59 $next_link = ($pagenum == $last) ? '' : ' <a href="' . $url . ($pagenum + 1) . '">></a> ';
60 $first_link = ' <a href="' . $url . '1"><<</a> ';
61 $last_link = ' <a href="' . $url . $last . '">>></a> ';
62
63 $pager = '';
64
65 // Style: 1...5 6 7...100
66 if ($last > 1) {
67 $pager = ' | Pages: ';
68
69 // Set options
70
71 // ...31 32 33...
72 if ($last > $show_ellipsis_limit) {
73 // 1 2 3 4...last
74 if ($pagenum > 0 && $pagenum < 4) {
75 $loop_initial = 2;
76 $loop_test = 5;
77 $ellipsis_after = $ellipsis_common;
78 // 4 5 6...last
79 } elseif ($pagenum > 3 && $pagenum < ($last - 1)) {
80 $loop_initial = $pagenum - 1;
81 $loop_test = $pagenum + 2;
82 $ellipsis_before = $ellipsis_common;
83
84 // This is to eliminate the $ellipsis when we're on the 3rd last page
85 if ($pagenum < ($last - 2)) {
86 $ellipsis_after = $ellipsis_common;
87 }
88 // 8 9 10(last)
89 } else {
90 $loop_initial = $pagenum - 2;
91 $loop_test = $last;
92 $ellipsis_before = $ellipsis_common;
93 }
94 // 1 2 3 4 5 6 7
95 } else {
96 $loop_initial = 2;
97 $loop_test = $last;
98 }
99
100 // Now start building html
101
102 // Start with 'First' link, then previous page link
103 if ($last > $show_ellipsis_limit && $pagenum != 1) {
104 $pager .= $first_link . $prev_link;
105 }
106
107 // Set active template to highlight page 1 if that's what we're on
108 if ($pagenum == 1) {
109 $pager .= str_ireplace($tag, 1, $template_with_class);
110 } else {
111 $pager .= str_ireplace($tag, 1, $template);
112 }
113
114 // Implement middle loops
115 $pager .= $ellipsis_before;
116 for ($i = $loop_initial; $i < $loop_test; $i++) {
117 if ($pagenum == $i) {
118 $pager .= str_ireplace($tag, $i, $template_with_class);
119 } else {
120 $pager .= str_ireplace($tag, $i, $template);
121 }
122 }
123 $pager .= $ellipsis_after;
124
125 // Set active template to highlight page 1 if that's what we're on
126 if ($pagenum == $last) {
127 $pager .= str_ireplace($tag, $last, $template_with_class);
128 } else {
129 $pager .= str_ireplace($tag, $last, $template);
130 }
131
132 // Finish with next page link, then 'Last' link
133 if ($last > $show_ellipsis_limit && $pagenum != $last) {
134 $pager .= $next_link;
135 $pager .= $last_link;
136 }
137 }
49 138
50 ?> 139 ?>
51 <div id="" class="wrap"> 140 <div id="" class="wrap">
...@@ -73,9 +162,10 @@ if ($filter_role) { ...@@ -73,9 +162,10 @@ if ($filter_role) {
73 </div> 162 </div>
74 163
75 <div class="TzPaginateResults"> 164 <div class="TzPaginateResults">
76 <?php echo "Users: $rows ";if($last > 1): echo " | Pages: "; for($i=1; $i <= $last; $i++):?> 165 <?php
77 <a href="<?php echo $url.$i; ?>" <?php echo ($pagenum==$i) ? "class='active'" : ""?>><?php echo $i; ?></a> 166 echo "Users: $rows ";
78 <?php endfor;endif; ?> 167 echo $pager;
168 ?>
79 </div> 169 </div>
80 <div style="clear:both"></div> 170 <div style="clear:both"></div>
81 <table cellspacing="0" class="widefat post fixed"> 171 <table cellspacing="0" class="widefat post fixed">
...@@ -111,11 +201,12 @@ if ($filter_role) { ...@@ -111,11 +201,12 @@ if ($filter_role) {
111 </table> 201 </table>
112 202
113 <div class="TzPaginateResults" style="margin-top:10px;"> 203 <div class="TzPaginateResults" style="margin-top:10px;">
114 <?php if($last > 1): echo "Pages: "; for($i=1; $i <= $last; $i++):?> 204 <?php
115 <a href="<?php echo $url.$i; ?>" <?php echo ($pagenum==$i) ? "class='active'" : ""?>><?php echo $i; ?></a> 205 echo "Users: $rows ";
116 <?php endfor;endif; ?> 206 echo $pager;
207 ?>
117 </div> 208 </div>
118 <div style="clear:both;"></div> 209 <div style="clear:both;"></div>
119 210
120 </div> 211 </div>
121 <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
212 <script src="<?php echo Tools\url('../UserManager.js', __FILE__);?>" type="text/javascript"></script>
......