X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/b3ddbea8a296025a672b3c3ddca158dc51ed8080..85ad385665744d9cc3bcd939906309be7268edb3:/wp-admin/includes/class-wp-ms-sites-list-table.php?ds=sidebyside 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 baefc827..f9b33e42 100644 --- a/wp-admin/includes/class-wp-ms-sites-list-table.php +++ b/wp-admin/includes/class-wp-ms-sites-list-table.php @@ -9,9 +9,10 @@ */ class WP_MS_Sites_List_Table extends WP_List_Table { - function __construct() { + function __construct( $args = array() ) { parent::__construct( array( 'plural' => 'sites', + 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, ) ); } @@ -20,7 +21,9 @@ class WP_MS_Sites_List_Table extends WP_List_Table { } function prepare_items() { - global $s, $mode, $wpdb, $current_site; + global $s, $mode, $wpdb; + + $current_site = get_current_site(); $mode = ( empty( $_REQUEST['mode'] ) ) ? 'list' : $_REQUEST['mode']; @@ -28,7 +31,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table { $pagenum = $this->get_pagenum(); - $s = isset( $_REQUEST['s'] ) ? stripslashes( trim( $_REQUEST[ 's' ] ) ) : ''; + $s = isset( $_REQUEST['s'] ) ? wp_unslash( trim( $_REQUEST[ 's' ] ) ) : ''; $wild = ''; if ( false !== strpos($s, '*') ) { $wild = '%'; @@ -37,23 +40,24 @@ class WP_MS_Sites_List_Table extends WP_List_Table { $like_s = esc_sql( like_escape( $s ) ); - $large_network = false; // If the network is large and a search is not being performed, show only the latest blogs with no paging in order // to avoid expensive count queries. - if ( !$s && ( get_blog_count() >= 10000 ) ) { + if ( !$s && wp_is_large_network() ) { if ( !isset($_REQUEST['orderby']) ) $_GET['orderby'] = $_REQUEST['orderby'] = ''; if ( !isset($_REQUEST['order']) ) $_GET['order'] = $_REQUEST['order'] = 'DESC'; - $large_network = true; } $query = "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' "; if ( empty($s) ) { // Nothing to do. - } elseif ( preg_match('/^[0-9]+\./', $s) ) { - // IP address + } elseif ( preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $s ) || + preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) || + preg_match( '/^[0-9]{1,3}\.[0-9]{1,3}\.?$/', $s ) || + preg_match( '/^[0-9]{1,3}\.$/', $s ) ) { + // IPv4 address $reg_blog_ids = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->registration_log} WHERE {$wpdb->registration_log}.IP LIKE ( '{$like_s}$wild' )" ); if ( !$reg_blog_ids ) @@ -64,7 +68,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table { WHERE site_id = '{$wpdb->siteid}' AND {$wpdb->blogs}.blog_id IN (" . implode( ', ', $reg_blog_ids ) . ")"; } else { - if ( is_numeric($s) ) { + if ( is_numeric($s) && empty( $wild ) ) { $query .= " AND ( {$wpdb->blogs}.blog_id = '{$like_s}' )"; } elseif ( is_subdomain_install() ) { $blog_s = str_replace( '.' . $current_site->domain, '', $like_s ); @@ -101,13 +105,13 @@ class WP_MS_Sites_List_Table extends WP_List_Table { } // Don't do an unbounded count on large networks - if ( ! $large_network ) + if ( ! wp_is_large_network() ) $total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT( blog_id )', $query ) ); $query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page ) . ", " . intval( $per_page ); $this->items = $wpdb->get_results( $query, ARRAY_A ); - if ( $large_network ) + if ( wp_is_large_network() ) $total = count($this->items); $this->set_pagination_args( array( @@ -152,6 +156,14 @@ class WP_MS_Sites_List_Table extends WP_List_Table { if ( has_filter( 'wpmublogsaction' ) ) $sites_columns['plugins'] = __( 'Actions' ); + /** + * Filter the displayed site columns in Sites list table. + * + * @since MU + * + * @param array $sites_columns An array of displayed site columns. Default 'cb', + * 'blogname', 'lastupdated', 'registered', 'users'. + */ $sites_columns = apply_filters( 'wpmu_blogs_columns', $sites_columns ); return $sites_columns; @@ -166,7 +178,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table { } function display_rows() { - global $current_site, $mode; + global $mode; $status_list = array( 'archived' => array( 'site-archived', __( 'Archived' ) ), @@ -200,7 +212,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table { } echo ""; - $blogname = ( is_subdomain_install() ) ? str_replace( '.'.$current_site->domain, '', $blog['domain'] ) : $blog['path']; + $blogname = ( is_subdomain_install() ) ? str_replace( '.' . get_current_site()->domain, '', $blog['domain'] ) : $blog['path']; list( $columns, $hidden ) = $this->get_column_info(); @@ -212,7 +224,10 @@ class WP_MS_Sites_List_Table extends WP_List_Table { switch ( $column_name ) { case 'cb': ?> + + + "; ?> ' . sprintf( _x( '%1$s – %2$s', '%1$s: site name. %2$s: site tagline.' ), get_blog_option( $blog['blog_id'], 'blogname' ), get_blog_option( $blog['blog_id'], 'blogdescription ' ) ) . '

'; + if ( 'list' != $mode ) { + switch_to_blog( $blog['blog_id'] ); + echo '

' . sprintf( _x( '%1$s – %2$s', '%1$s: site name. %2$s: site tagline.' ), get_option( 'blogname' ), get_option( 'blogdescription ' ) ) . '

'; + restore_current_blog(); + } // Preordered. $actions = array( @@ -243,28 +261,43 @@ class WP_MS_Sites_List_Table extends WP_List_Table { $actions['edit'] = '' . __( 'Edit' ) . ''; $actions['backend'] = "" . __( 'Dashboard' ) . ''; - if ( $current_site->blog_id != $blog['blog_id'] ) { + if ( get_current_site()->blog_id != $blog['blog_id'] ) { if ( get_blog_status( $blog['blog_id'], 'deleted' ) == '1' ) - $actions['activate'] = '' . __( 'Activate' ) . ''; + $actions['activate'] = '' . __( 'Activate' ) . ''; else - $actions['deactivate'] = '' . __( 'Deactivate' ) . ''; + $actions['deactivate'] = '' . __( 'Deactivate' ) . ''; if ( get_blog_status( $blog['blog_id'], 'archived' ) == '1' ) - $actions['unarchive'] = '' . __( 'Unarchive' ) . ''; + $actions['unarchive'] = '' . __( 'Unarchive' ) . ''; else - $actions['archive'] = '' . _x( 'Archive', 'verb; site' ) . ''; + $actions['archive'] = '' . _x( 'Archive', 'verb; site' ) . ''; if ( get_blog_status( $blog['blog_id'], 'spam' ) == '1' ) - $actions['unspam'] = '' . _x( 'Not Spam', 'site' ) . ''; + $actions['unspam'] = '' . _x( 'Not Spam', 'site' ) . ''; else - $actions['spam'] = '' . _x( 'Spam', 'site' ) . ''; + $actions['spam'] = '' . _x( 'Spam', 'site' ) . ''; if ( current_user_can( 'delete_site', $blog['blog_id'] ) ) - $actions['delete'] = '' . __( 'Delete' ) . ''; + $actions['delete'] = '' . __( 'Delete' ) . ''; } - $actions['visit'] = "" . __( 'Visit' ) . ''; - + $actions['visit'] = "" . __( 'Visit' ) . ''; + + /** + * Filter the action links displayed for each site in the Sites list table. + * + * The 'Edit', 'Dashboard', 'Delete', and 'Visit' links are displayed by + * default for each site. The site's status determines whether to show the + * 'Activate' or 'Deactivate' link, 'Unarchive' or 'Archive' links, and + * 'Not Spam' or 'Spam' link for each site. + * + * @since 3.1.0 + * + * @param array $actions An array of action links to be displayed. + * @param int $blog_id The site ID. + * @param string $blogname Site path, formatted depending on whether it is a sub-domain + * or subdirectory multisite install. + */ $actions = apply_filters( 'manage_sites_action_links', array_filter( $actions ), $blog['blog_id'], $blogname ); echo $this->row_actions( $actions ); ?> @@ -318,6 +351,15 @@ class WP_MS_Sites_List_Table extends WP_List_Table { case 'plugins': ?> "; + /** + * Fires inside the auxiliary 'Actions' column of the Sites list table. + * + * By default this column is hidden unless something is hooked to the action. + * + * @since MU + * + * @param int $blog_id The site ID. + */ do_action( 'wpmublogsaction', $blog['blog_id'] ); ?> "; + /** + * Fires for each registered custom column in the Sites list table. + * + * @since 3.1.0 + * + * @param string $column_name The name of the column to display. + * @param int $blog_id The site ID. + */ do_action( 'manage_sites_custom_column', $column_name, $blog['blog_id'] ); echo ""; break; @@ -336,5 +386,3 @@ class WP_MS_Sites_List_Table extends WP_List_Table { } } } - -?>