Ticket #38071: 38071.1.diff
File 38071.1.diff, 7.5 KB (added by , 6 years ago) |
---|
-
wp-admin/includes/class-wp-ms-sites-list-table.php
From dfeadc373f6900d8787e109b94ffc15dba83e79a Mon Sep 17 00:00:00 2001 From: Paul Biron <paul@sparrowhawkcomputing.com> Date: Thu, 4 May 2017 20:39:22 -0600 Subject: [PATCH] trac ticket 38071 --- wp-admin/includes/class-wp-ms-sites-list-table.php | 122 ++++++++++++++++++++- wp-admin/network/sites.php | 3 + wp-includes/ms-functions.php | 50 +++++++++ 3 files changed, 174 insertions(+), 1 deletion(-) diff --git a/wp-admin/includes/class-wp-ms-sites-list-table.php b/wp-admin/includes/class-wp-ms-sites-list-table.php index 4a43775..8993795 100644
a b 11 11 * Core class used to implement displaying sites in a list table for the network admin. 12 12 * 13 13 * @since 3.1.0 14 * @since 4.8.x Added Site Status views, like on wp-admin/edit.php 14 15 * @access private 15 16 * 16 17 * @see WP_List_Table … … class WP_MS_Sites_List_Table extends WP_List_Table { 21 22 * Site status list. 22 23 * 23 24 * @since 4.3.0 25 * @since 4.8.x Now used to display Site Status views, like on wp-admin/edit.php 24 26 * @access public 25 27 * @var array 26 28 */ … … class WP_MS_Sites_List_Table extends WP_List_Table { 38 40 */ 39 41 public function __construct( $args = array() ) { 40 42 $this->status_list = array( 43 'public' => array( 'site-public', __( 'Public' ) ), 41 44 'archived' => array( 'site-archived', __( 'Archived' ) ), 42 45 'spam' => array( 'site-spammed', _x( 'Spam', 'site' ) ), 43 46 'deleted' => array( 'site-deleted', __( 'Deleted' ) ), … … class WP_MS_Sites_List_Table extends WP_List_Table { 166 169 */ 167 170 $args = apply_filters( 'ms_sites_list_table_query_args', $args ); 168 171 172 if ( isset( $_REQUEST['site_status'] ) && ! empty( $_REQUEST['site_status'] ) ) { 173 $args[$_REQUEST['site_status']] = 1; 174 } 175 169 176 $_sites = get_sites( $args ); 170 177 if ( is_array( $_sites ) ) { 171 178 update_site_cache( $_sites ); … … class WP_MS_Sites_List_Table extends WP_List_Table { 193 200 } 194 201 195 202 /** 203 * Determine if the current view is the "All" view. 204 * 205 * @since 4.8.x 206 * 207 * @return bool Whether the current view is the "All" view. 208 */ 209 protected function is_base_request() { 210 $vars = $_GET; 211 unset( $vars['paged'] ); 212 213 if ( empty( $vars ) ) { 214 return true; 215 } elseif ( ! empty( $vars['site_status'] ) ) { 216 return false; 217 } 218 219 return true; 220 } 221 222 /** 223 * Helper to create links to sites.php with params. 224 * 225 * @since 4.8.x 226 * @access protected 227 * 228 * @param array $args URL parameters for the link. 229 * @param string $label Link text. 230 * @param string $class Optional. Class attribute. Default empty string. 231 * @return string The formatted link string. 232 */ 233 protected function get_edit_link( $args, $label, $class = '' ) { 234 $url = add_query_arg( $args, 'sites.php' ); 235 236 $class_html = ''; 237 if ( ! empty( $class ) ) { 238 $class_html = sprintf( 239 ' class="%s"', 240 esc_attr( $class ) 241 ); 242 } 243 244 return sprintf( 245 '<a href="%s"%s>%s</a>', 246 esc_url( $url ), 247 $class_html, 248 $label 249 ); 250 } 251 252 /** 253 * Get an associative array ( id => link ) with the list of views available on this table. 254 * 255 * @since 4.8.x 256 * @return array 257 */ 258 protected function get_views() { 259 $num_sites = wp_count_sites(); 260 $total_sites = get_sites( array( 'count' => true, 'number' => 0 ) ) ; 261 262 $class = ''; 263 if ( $this->is_base_request() ) { 264 $class = 'current'; 265 } 266 267 $all_inner_html = sprintf( 268 _nx( 269 'All <span class="count">(%s)</span>', 270 'All <span class="count">(%s)</span>', 271 $total_sites, 272 'sites' 273 ), 274 number_format_i18n( $total_sites ) 275 ); 276 277 $status_links = array() ; 278 279 $status_links['all'] = $this->get_edit_link( array (), $all_inner_html, $class ); 280 281 foreach ( $this->status_list as $status => $status_name ) { 282 if ( ! $num_sites->{$status} ) { 283 continue; 284 } 285 286 $class = ''; 287 if ( isset( $_REQUEST['site_status'] ) && $status === $_REQUEST['site_status'] ) { 288 $class = 'current'; 289 } 290 291 $status_args = array( 292 'site_status' => $status, 293 ); 294 295 $status_name = $status_name[1]; 296 $status_inner_html = sprintf( 297 _nx( 298 $status_name . ' <span class="count">(%s)</span>', 299 $status_name . ' <span class="count">(%s)</span>', 300 $num_sites->{$status}, 301 'sites' 302 ), 303 number_format_i18n( $num_sites->{$status} ) 304 ); 305 306 $status_links[$status] = $this->get_edit_link( $status_args, $status_inner_html, $class ); 307 } 308 309 return $status_links; 310 } 311 312 /** 196 313 * 197 314 * @return array 198 315 */ … … class WP_MS_Sites_List_Table extends WP_List_Table { 307 424 reset( $this->status_list ); 308 425 309 426 foreach ( $this->status_list as $status => $col ) { 427 if ( isset( $_REQUEST['site_status'] ) && $status === $_REQUEST['site_status'] ) { 428 continue; 429 } 310 430 if ( $blog[ $status ] == 1 ) { 311 431 $blog_states[] = $col[1]; 312 432 } … … class WP_MS_Sites_List_Table extends WP_List_Table { 319 439 foreach ( $blog_states as $state ) { 320 440 ++$i; 321 441 $sep = ( $i == $state_count ) ? '' : ', '; 322 $blog_state .= "<span class=' post-state'>$state$sep</span>";442 $blog_state .= "<span class='site-state'>$state$sep</span>"; 323 443 } 324 444 } 325 445 -
wp-admin/network/sites.php
diff --git a/wp-admin/network/sites.php b/wp-admin/network/sites.php index a0ec407..730c3ca 100644
a b 5 5 * @package WordPress 6 6 * @subpackage Multisite 7 7 * @since 3.0.0 8 * @since 4.8.x Added Site Status views, like on wp-admin/edit.php 8 9 */ 9 10 10 11 /** Load WordPress Administration Bootstrap */ … … if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) { 309 310 <input type="hidden" name="action" value="blogs" /> 310 311 </form> 311 312 313 <?php $wp_list_table->views(); ?> 314 312 315 <form id="form-site-list" action="sites.php?action=allblogs" method="post"> 313 316 <?php $wp_list_table->display(); ?> 314 317 </form> -
wp-includes/ms-functions.php
diff --git a/wp-includes/ms-functions.php b/wp-includes/ms-functions.php index d209435..3356030 100644
a b function get_subdirectory_reserved_names() { 2527 2527 */ 2528 2528 return apply_filters( 'subdirectory_reserved_names', $names ); 2529 2529 } 2530 2531 /** 2532 * Count number of sites of a site status. 2533 * 2534 * This function provides an efficient method of finding the amount of sites 2535 * 2536 * @since 4.8.x 2537 * 2538 * @global wpdb $wpdb WordPress database abstraction object. 2539 * 2540 * @return object Number of sites for each status. 2541 */ 2542 function wp_count_sites( $network_id = null ) { 2543 global $wpdb; 2544 2545 if ( is_null( $network_id ) ) { 2546 // Get current network ID 2547 $network_id = get_current_network_id(); 2548 } 2549 2550 // Bail if counts already cached 2551 $counts = wp_cache_get( "sites-{$network_id}", 'networks' ); 2552 if ( false !== $counts ) { 2553 return apply_filters( 'wp_count_sites', $counts, $network_id ); 2554 } 2555 2556 // Query for site statuses 2557 $query = $wpdb->prepare( 2558 "SELECT 2559 SUM(public) AS `public`, 2560 SUM(archived) AS `archived`, 2561 SUM(mature) AS `mature`, 2562 SUM(spam) AS `spam`, 2563 SUM(deleted) as `deleted` 2564 FROM shc_blogs WHERE site_id = %d", 2565 $network_id ); 2566 $counts = $wpdb->get_row( $query ); 2567 2568 wp_cache_set( "sites-{$network_id}", $counts, 'networks' ); 2569 2570 /** 2571 * Filter site counts by status for the current network. 2572 * 2573 * @since 4.8.x 2574 * 2575 * @param object $counts An object containing the current network's site 2576 * counts by status. 2577 */ 2578 return apply_filters( 'wp_count_sites', $counts, $network_id ); 2579 }