diff -r 490d5cc509ed -r cf61fcea0001 wp/wp-admin/includes/class-wp-ms-users-list-table.php --- a/wp/wp-admin/includes/class-wp-ms-users-list-table.php Tue Jun 09 11:14:17 2015 +0000 +++ b/wp/wp-admin/includes/class-wp-ms-users-list-table.php Mon Oct 14 17:39:30 2019 +0200 @@ -1,18 +1,36 @@ 'all_with_meta' ); - if ( wp_is_large_network( 'users' ) ) + if ( wp_is_large_network( 'users' ) ) { $args['search'] = ltrim( $args['search'], '*' ); + } else if ( '' !== $args['search'] ) { + $args['search'] = trim( $args['search'], '*' ); + $args['search'] = '*' . $args['search'] . '*'; + } - if ( $role == 'super' ) { + if ( $role === 'super' ) { $logins = implode( "', '", get_super_admins() ); $args['include'] = $wpdb->get_col( "SELECT ID FROM $wpdb->users WHERE user_login IN ('$logins')" ); } @@ -59,7 +81,15 @@ if ( isset( $_REQUEST['order'] ) ) $args['order'] = $_REQUEST['order']; - $mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode']; + if ( ! empty( $_REQUEST['mode'] ) ) { + $mode = $_REQUEST['mode'] === 'excerpt' ? 'excerpt' : 'list'; + set_user_setting( 'network_users_list_mode', $mode ); + } else { + $mode = get_user_setting( 'network_users_list_mode', 'list' ); + } + + /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */ + $args = apply_filters( 'users_list_table_query_args', $args ); // Query the user IDs for this page $wp_user_search = new WP_User_Query( $args ); @@ -72,6 +102,10 @@ ) ); } + /** + * + * @return array + */ protected function get_bulk_actions() { $actions = array(); if ( current_user_can( 'delete_users' ) ) @@ -82,10 +116,17 @@ return $actions; } + /** + */ public function no_items() { _e( 'No users found.' ); } + /** + * + * @global string $role + * @return array + */ protected function get_views() { global $role; @@ -93,17 +134,18 @@ $super_admins = get_super_admins(); $total_admins = count( $super_admins ); - $class = $role != 'super' ? ' class="current"' : ''; + $current_link_attributes = $role !== 'super' ? ' class="current" aria-current="page"' : ''; $role_links = array(); - $role_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_users, 'users' ), number_format_i18n( $total_users ) ) . ''; - $class = $role == 'super' ? ' class="current"' : ''; - $role_links['super'] = "" . sprintf( _n( 'Super Admin (%s)', 'Super Admins (%s)', $total_admins ), number_format_i18n( $total_admins ) ) . ''; + $role_links['all'] = "" . sprintf( _nx( 'All (%s)', 'All (%s)', $total_users, 'users' ), number_format_i18n( $total_users ) ) . ''; + $current_link_attributes = $role === 'super' ? ' class="current" aria-current="page"' : ''; + $role_links['super'] = "" . sprintf( _n( 'Super Admin (%s)', 'Super Admins (%s)', $total_admins ), number_format_i18n( $total_admins ) ) . ''; return $role_links; } /** - * @global string $mode + * @global string $mode List table view mode. + * * @param string $which */ protected function pagination( $which ) { @@ -111,32 +153,39 @@ parent::pagination ( $which ); - if ( 'top' == $which ) + if ( 'top' === $which ) { $this->view_switcher( $mode ); + } } + /** + * + * @return array + */ public function get_columns() { $users_columns = array( 'cb' => '', 'username' => __( 'Username' ), 'name' => __( 'Name' ), - 'email' => __( 'E-mail' ), + 'email' => __( 'Email' ), 'registered' => _x( 'Registered', 'user' ), 'blogs' => __( 'Sites' ) ); /** - * Filter the columns displayed in the Network Admin Users list table. + * Filters the columns displayed in the Network Admin Users list table. * - * @since MU + * @since MU (3.0.0) * * @param array $users_columns An array of user columns. Default 'cb', 'username', * 'name', 'email', 'registered', 'blogs'. */ - $users_columns = apply_filters( 'wpmu_users_columns', $users_columns ); - - return $users_columns; + return apply_filters( 'wpmu_users_columns', $users_columns ); } + /** + * + * @return array + */ protected function get_sortable_columns() { return array( 'username' => 'login', @@ -146,161 +195,263 @@ ); } - public function display_rows() { + /** + * Handles the checkbox column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + */ + public function column_cb( $user ) { + if ( is_super_admin( $user->ID ) ) { + return; + } + ?> + + + ID; + } + + /** + * Handles the username column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + */ + public function column_username( $user ) { + $super_admins = get_super_admins(); + $avatar = get_avatar( $user->user_email, 32 ); + $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) ); + + echo $avatar; + + ?>user_login; ?>user_login, $super_admins ) ) { + echo ' — ' . __( 'Super Admin' ); + } + ?> + first_name && $user->last_name ) { + echo "$user->first_name $user->last_name"; + } elseif ( $user->first_name ) { + echo $user->first_name; + } elseif ( $user->last_name ) { + echo $user->last_name; + } else { + echo '' . _x( 'Unknown', 'name' ) . ''; + } + } + + /** + * Handles the email column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + */ + public function column_email( $user ) { + echo "$user->user_email"; + } + + /** + * Handles the registered date column output. + * + * @since 4.3.0 + * + * @global string $mode List table view mode. + * + * @param WP_User $user The current WP_User object. + */ + public function column_registered( $user ) { global $mode; + if ( 'list' === $mode ) { + $date = __( 'Y/m/d' ); + } else { + $date = __( 'Y/m/d g:i:s a' ); + } + echo mysql2date( $date, $user->user_registered ); + } - $super_admins = get_super_admins(); + /** + * @since 4.3.0 + * + * @param WP_User $user + * @param string $classes + * @param string $data + * @param string $primary + */ + protected function _column_blogs( $user, $classes, $data, $primary ) { + echo ''; + echo $this->column_blogs( $user ); + echo $this->handle_row_actions( $user, 'blogs', $primary ); + echo ''; + } + + /** + * Handles the sites column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + */ + public function column_blogs( $user ) { + $blogs = get_blogs_of_user( $user->ID, true ); + if ( ! is_array( $blogs ) ) { + return; + } + + foreach ( $blogs as $val ) { + if ( ! can_edit_network( $val->site_id ) ) { + continue; + } + + $path = ( $val->path === '/' ) ? '' : $val->path; + echo ''; + echo '' . str_replace( '.' . get_network()->domain, '', $val->domain . $path ) . ''; + echo ' '; + $actions = array(); + $actions['edit'] = '' . __( 'Edit' ) . ''; + + $class = ''; + if ( $val->spam == 1 ) { + $class .= 'site-spammed '; + } + if ( $val->mature == 1 ) { + $class .= 'site-mature '; + } + if ( $val->deleted == 1 ) { + $class .= 'site-deleted '; + } + if ( $val->archived == 1 ) { + $class .= 'site-archived '; + } + + $actions['view'] = '' . __( 'View' ) . ''; + + /** + * Filters the action links displayed next the sites a user belongs to + * in the Network Admin Users list table. + * + * @since 3.1.0 + * + * @param array $actions An array of action links to be displayed. + * Default 'Edit', 'View'. + * @param int $userblog_id The site ID. + */ + $actions = apply_filters( 'ms_user_list_site_actions', $actions, $val->userblog_id ); + + $i=0; + $action_count = count( $actions ); + foreach ( $actions as $action => $link ) { + ++$i; + $sep = ( $i == $action_count ) ? '' : ' | '; + echo "$link$sep"; + } + echo '
'; + } + } + + /** + * Handles the default column output. + * + * @since 4.3.0 + * + * @param WP_User $user The current WP_User object. + * @param string $column_name The current column name. + */ + public function column_default( $user, $column_name ) { + /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */ + echo apply_filters( 'manage_users_custom_column', '', $column_name, $user->ID ); + } + + public function display_rows() { foreach ( $this->items as $user ) { $class = ''; $status_list = array( 'spam' => 'site-spammed', 'deleted' => 'site-deleted' ); foreach ( $status_list as $status => $col ) { - if ( $user->$status ) + if ( $user->$status ) { $class .= " $col"; + } } ?> - get_column_info(); - - foreach ( $columns as $column_name => $column_display_name ) : - $class = "class='$column_name column-$column_name'"; - - $style = ''; - if ( in_array( $column_name, $hidden ) ) - $style = ' style="display:none;"'; - - $attributes = "$class$style"; - - switch ( $column_name ) { - case 'cb': ?> - - - - - user_email, 32 ); - $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) ); - - echo ""; ?> - user_login; ?>user_login, $super_admins ) ) - echo ' - ' . __( 'Super Admin' ); - ?> -
- ' . __( 'Edit' ) . ''; - - if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) { - $actions['delete'] = '' . __( 'Delete' ) . ''; - } - - /** - * Filter the action links displayed under each user - * in the Network Admin Users list table. - * - * @since 3.2.0 - * - * @param array $actions An array of action links to be displayed. - * Default 'Edit', 'Delete'. - * @param WP_User $user WP_User object. - */ - $actions = apply_filters( 'ms_user_row_actions', $actions, $user ); - echo $this->row_actions( $actions ); - ?> - - $user->first_name $user->last_name"; - break; - - case 'email': - echo "$user->user_email"; - break; - - case 'registered': - if ( 'list' == $mode ) - $date = __( 'Y/m/d' ); - else - $date = __( 'Y/m/d g:i:s a' ); - - echo "" . mysql2date( $date, $user->user_registered ) . ""; - break; - - case 'blogs': - $blogs = get_blogs_of_user( $user->ID, true ); - echo ""; - if ( is_array( $blogs ) ) { - foreach ( (array) $blogs as $key => $val ) { - if ( !can_edit_network( $val->site_id ) ) - continue; - - $path = ( $val->path == '/' ) ? '' : $val->path; - echo ''; - echo '' . str_replace( '.' . get_current_site()->domain, '', $val->domain . $path ) . ''; - echo ' '; - $actions = array(); - $actions['edit'] = '' . __( 'Edit' ) . ''; - - $class = ''; - if ( get_blog_status( $val->userblog_id, 'spam' ) == 1 ) - $class .= 'site-spammed '; - if ( get_blog_status( $val->userblog_id, 'mature' ) == 1 ) - $class .= 'site-mature '; - if ( get_blog_status( $val->userblog_id, 'deleted' ) == 1 ) - $class .= 'site-deleted '; - if ( get_blog_status( $val->userblog_id, 'archived' ) == 1 ) - $class .= 'site-archived '; - - $actions['view'] = '' . __( 'View' ) . ''; - - /** - * Filter the action links displayed next the sites a user belongs to - * in the Network Admin Users list table. - * - * @since 3.1.0 - * - * @param array $actions An array of action links to be displayed. - * Default 'Edit', 'View'. - * @param int $userblog_id The site ID. - */ - $actions = apply_filters( 'ms_user_list_site_actions', $actions, $val->userblog_id ); - - $i=0; - $action_count = count( $actions ); - foreach ( $actions as $action => $link ) { - ++$i; - ( $i == $action_count ) ? $sep = '' : $sep = ' | '; - echo "$link$sep"; - } - echo '
'; - } - } - ?> - - "; - /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */ - echo apply_filters( 'manage_users_custom_column', '', $column_name, $user->ID ); - echo ""; - break; - } - endforeach - ?> + single_row_columns( $user ); ?> ID ) ) ); + + $actions = array(); + $actions['edit'] = '' . __( 'Edit' ) . ''; + + if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) { + $actions['delete'] = '' . __( 'Delete' ) . ''; + } + + /** + * Filters the action links displayed under each user in the Network Admin Users list table. + * + * @since 3.2.0 + * + * @param array $actions An array of action links to be displayed. + * Default 'Edit', 'Delete'. + * @param WP_User $user WP_User object. + */ + $actions = apply_filters( 'ms_user_row_actions', $actions, $user ); + return $this->row_actions( $actions ); + } }