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)
Showing
2 changed files
with
118 additions
and
17 deletions
| ... | @@ -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 |
| ... | @@ -132,10 +147,6 @@ function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_ | ... | @@ -132,10 +147,6 @@ 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) { | ||
| 136 | return $wpdb->num_rows; | ||
| 137 | } else { | ||
| 138 | |||
| 139 | foreach ( $wp_user_search as $user ) { | 150 | foreach ( $wp_user_search as $user ) { |
| 140 | $uid = (int) $user->ID; | 151 | $uid = (int) $user->ID; |
| 141 | $user = new WP_User($uid); | 152 | $user = new WP_User($uid); |
| ... | @@ -144,7 +155,6 @@ function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_ | ... | @@ -144,7 +155,6 @@ function get_users($role = null, $pagenum=1, $records_per_page=0, $return_count_ |
| 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); | 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); |
| 145 | } | 156 | } |
| 146 | return $users; | 157 | return $users; |
| 147 | } | ||
| 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,10 +32,8 @@ if ($pagenum < 1) { | ... | @@ -33,10 +32,8 @@ if ($pagenum < 1) { |
| 33 | $pagenum = $last; | 32 | $pagenum = $last; |
| 34 | } | 33 | } |
| 35 | 34 | ||
| 36 | |||
| 37 | $site_users = get_users($filter_role, $pagenum, $records_per_page, false, $search); | 35 | $site_users = get_users($filter_role, $pagenum, $records_per_page, false, $search); |
| 38 | 36 | ||
| 39 | |||
| 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) { |
| ... | @@ -45,7 +42,99 @@ if ($filter_role) { | ... | @@ -45,7 +42,99 @@ if ($filter_role) { |
| 45 | $url = $_SERVER['PHP_SELF']."?page=cbv_users&pagenum="; | 42 | $url = $_SERVER['PHP_SELF']."?page=cbv_users&pagenum="; |
| 46 | } | 43 | } |
| 47 | 44 | ||
| 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 | } | ||
| 48 | 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,9 +201,10 @@ if ($filter_role) { | ... | @@ -111,9 +201,10 @@ 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 | ... | ... |
-
Please register or sign in to post a comment