diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-admin/users.php --- a/wp/wp-admin/users.php Thu Sep 29 08:06:27 2022 +0200 +++ b/wp/wp-admin/users.php Fri Sep 05 18:40:08 2025 +0200 @@ -33,7 +33,7 @@ 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '

' . __( 'This screen lists all the existing users for your site. Each user has one of five defined roles as set by the site admin: Site Administrator, Editor, Author, Contributor, or Subscriber. Users with roles other than Administrator will see fewer options in the dashboard navigation when they are logged in, based on their role.' ) . '

' . - '

' . __( 'To add a new user for your site, click the Add New button at the top of the screen or Add New in the Users menu section.' ) . '

', + '

' . __( 'To add a new user for your site, click the Add New User button at the top of the screen or Add New User in the Users menu section.' ) . '

', ) ); @@ -60,6 +60,12 @@ $help .= '
  • ' . __( 'Delete brings you to the Delete Users screen for confirmation, where you can permanently remove a user from your site and delete their content. You can also delete multiple users at once by using bulk actions.' ) . '
  • '; } +$help .= '
  • ' . __( 'View takes you to a public author archive which lists all the posts published by the user.' ) . '
  • '; + +if ( current_user_can( 'edit_users' ) ) { + $help .= '
  • ' . __( 'Send password reset sends the user an email with a link to set a new password.' ) . '
  • '; +} + $help .= ''; get_current_screen()->add_help_tab( @@ -73,9 +79,9 @@ get_current_screen()->set_help_sidebar( '

    ' . __( 'For more information:' ) . '

    ' . - '

    ' . __( 'Documentation on Managing Users' ) . '

    ' . - '

    ' . __( 'Descriptions of Roles and Capabilities' ) . '

    ' . - '

    ' . __( 'Support' ) . '

    ' + '

    ' . __( 'Documentation on Managing Users' ) . '

    ' . + '

    ' . __( 'Descriptions of Roles and Capabilities' ) . '

    ' . + '

    ' . __( 'Support forums' ) . '

    ' ); get_current_screen()->set_screen_reader_content( @@ -129,18 +135,19 @@ $role = ''; } - $userids = $_REQUEST['users']; - $update = 'promote'; - foreach ( $userids as $id ) { - $id = (int) $id; + $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); + $update = 'promote'; + foreach ( $user_ids as $id ) { if ( ! current_user_can( 'promote_user', $id ) ) { wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 ); } // The new role of the current user must also have the promote_users cap or be a multisite super admin. - if ( $id == $current_user->ID && ! $wp_roles->role_objects[ $role ]->has_cap( 'promote_users' ) - && ! ( is_multisite() && current_user_can( 'manage_network_users' ) ) ) { + if ( $id === $current_user->ID + && ! $wp_roles->role_objects[ $role ]->has_cap( 'promote_users' ) + && ! ( is_multisite() && current_user_can( 'manage_network_users' ) ) + ) { $update = 'err_admin_role'; continue; } @@ -173,10 +180,10 @@ exit; } - $userids = array_map( 'intval', (array) $_REQUEST['users'] ); + $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); if ( empty( $_REQUEST['delete_option'] ) ) { - $url = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $userids ) . '&error=true' ); + $url = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $user_ids ) . '&error=true' ); $url = str_replace( '&', '&', wp_nonce_url( $url, 'bulk-users' ) ); wp_redirect( $url ); exit; @@ -189,15 +196,16 @@ $update = 'del'; $delete_count = 0; - foreach ( $userids as $id ) { + foreach ( $user_ids as $id ) { if ( ! current_user_can( 'delete_user', $id ) ) { wp_die( __( 'Sorry, you are not allowed to delete that user.' ), 403 ); } - if ( $id == $current_user->ID ) { + if ( $id === $current_user->ID ) { $update = 'err_admin_del'; continue; } + switch ( $_REQUEST['delete_option'] ) { case 'delete': wp_delete_user( $id ); @@ -206,6 +214,7 @@ wp_delete_user( $id, $_REQUEST['reassign_user'] ); break; } + ++$delete_count; } @@ -221,18 +230,21 @@ case 'resetpassword': check_admin_referer( 'bulk-users' ); + if ( ! current_user_can( 'edit_users' ) ) { $errors = new WP_Error( 'edit_users', __( 'Sorry, you are not allowed to edit users.' ) ); } + if ( empty( $_REQUEST['users'] ) ) { wp_redirect( $redirect ); exit(); } - $userids = array_map( 'intval', (array) $_REQUEST['users'] ); + + $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); $reset_count = 0; - foreach ( $userids as $id ) { + foreach ( $user_ids as $id ) { if ( ! current_user_can( 'edit_user', $id ) ) { wp_die( __( 'Sorry, you are not allowed to edit this user.' ) ); } @@ -244,7 +256,7 @@ // Send the password reset link. $user = get_userdata( $id ); - if ( retrieve_password( $user->user_login ) ) { + if ( true === retrieve_password( $user->user_login ) ) { ++$reset_count; } } @@ -276,15 +288,15 @@ } if ( empty( $_REQUEST['users'] ) ) { - $userids = array( (int) $_REQUEST['user'] ); + $user_ids = array( (int) $_REQUEST['user'] ); } else { - $userids = array_map( 'intval', (array) $_REQUEST['users'] ); + $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); } - $all_userids = $userids; + $all_user_ids = $user_ids; - if ( in_array( $current_user->ID, $userids, true ) ) { - $userids = array_diff( $userids, array( $current_user->ID ) ); + if ( in_array( $current_user->ID, $user_ids, true ) ) { + $user_ids = array_diff( $user_ids, array( $current_user->ID ) ); } /** @@ -294,14 +306,22 @@ * @since 5.2.0 * * @param bool $users_have_additional_content Whether the users have additional content. Default false. - * @param int[] $userids Array of IDs for users being deleted. + * @param int[] $user_ids Array of IDs for users being deleted. */ - $users_have_content = (bool) apply_filters( 'users_have_additional_content', false, $userids ); + $users_have_content = (bool) apply_filters( 'users_have_additional_content', false, $user_ids ); - if ( $userids && ! $users_have_content ) { - if ( $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE post_author IN( " . implode( ',', $userids ) . ' ) LIMIT 1' ) ) { + if ( $user_ids && ! $users_have_content ) { + if ( $wpdb->get_var( + "SELECT ID FROM {$wpdb->posts} + WHERE post_author IN( " . implode( ',', $user_ids ) . ' ) + LIMIT 1' + ) ) { $users_have_content = true; - } elseif ( $wpdb->get_var( "SELECT link_id FROM {$wpdb->links} WHERE link_owner IN( " . implode( ',', $userids ) . ' ) LIMIT 1' ) ) { + } elseif ( $wpdb->get_var( + "SELECT link_id FROM {$wpdb->links} + WHERE link_owner IN( " . implode( ',', $user_ids ) . ' ) + LIMIT 1' + ) ) { $users_have_content = true; } } @@ -312,88 +332,124 @@ require_once ABSPATH . 'wp-admin/admin-header.php'; ?> -
    + -
    -

    - -
    -

    -
    +
    +

    + + ' . __( 'Error:' ) . ' ' . __( 'Please select an option.' ), + array( + 'additional_classes' => array( 'error' ), + ) + ); + endif; + ?> + + +

    + +

    - -

    - -

    - - -
      +
        ID ) { - /* translators: 1: User ID, 2: User login. */ - echo '
      • ' . sprintf( __( 'ID #%1$s: %2$s The current user will not be deleted.' ), $id, $user->user_login ) . "
      • \n"; + + if ( $id === $current_user->ID ) { + echo '
      • '; + printf( + /* translators: 1: User ID, 2: User login. */ + __( 'ID #%1$s: %2$s The current user will not be deleted.' ), + $id, + $user->user_login + ); + echo "
      • \n"; } else { - /* translators: 1: User ID, 2: User login. */ - echo '
      • ' . sprintf( __( 'ID #%1$s: %2$s' ), $id, $user->user_login ) . "
      • \n"; - $go_delete++; + echo '
      • '; + printf( + '', + esc_attr( $id ) + ); + printf( + /* translators: 1: User ID, 2: User login. */ + __( 'ID #%1$s: %2$s' ), + $id, + $user->user_login + ); + echo "
      • \n"; + + ++$go_delete; } } ?> -
      +
    + - + - -

    - -

    - -
      -
    • -
    • +
      + +

      + +

      + + +
        +
      • + + +
      • +
      • + + + 'reassign_user', + 'exclude' => $user_ids, + 'show' => 'display_name_with_login', + ) + ); + ?> +
      • +
      +
      ' . __( 'Attribute all content to:' ) . ' '; - wp_dropdown_users( - array( - 'name' => 'reassign_user', - 'exclude' => $userids, - 'show' => 'display_name_with_login', - ) - ); - ?> -
    • -
    - - + - -

    - -
    - + + + +

    + + +
    + -
    + -
    -

    +
    +

    - -

    + +

    -

    +

    -
      +
        ' . sprintf( __( 'ID #%1$s: %2$s Sorry, you are not allowed to remove this user.' ), $id, $user->user_login ) . "\n"; + echo '
      • '; + printf( + /* translators: 1: User ID, 2: User login. */ + __( 'ID #%1$s: %2$s Sorry, you are not allowed to remove this user.' ), + $id, + $user->user_login + ); + echo "
      • \n"; } else { - /* translators: 1: User ID, 2: User login. */ - echo "
      • " . sprintf( __( 'ID #%1$s: %2$s' ), $id, $user->user_login ) . "
      • \n"; + echo '
      • '; + printf( + '', + esc_attr( $id ) + ); + printf( + /* translators: 1: User ID, 2: User login. */ + __( 'ID #%1$s: %2$s' ), + $id, + $user->user_login + ); + echo "
      • \n"; + $go_remove = true; } } ?> -
      +
    + - + + - -

    - -
    - + + + +

    + + +
    + current_action() && ! empty( $_REQUEST['users'] ) ) { $screen = get_current_screen()->id; $sendback = wp_get_referer(); - $userids = $_REQUEST['users']; + $user_ids = array_map( 'intval', (array) $_REQUEST['users'] ); /** This action is documented in wp-admin/edit.php */ - $sendback = apply_filters( "handle_bulk_actions-{$screen}", $sendback, $wp_list_table->current_action(), $userids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores + $sendback = apply_filters( "handle_bulk_actions-{$screen}", $sendback, $wp_list_table->current_action(), $user_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores wp_safe_redirect( $sendback ); exit; @@ -516,6 +595,7 @@ $wp_list_table->prepare_items(); $total_pages = $wp_list_table->get_pagination_arg( 'total_pages' ); + if ( $pagenum > $total_pages && $total_pages > 0 ) { wp_redirect( add_query_arg( 'paged', $total_pages ) ); exit; @@ -529,21 +609,28 @@ case 'del': case 'del_many': $delete_count = isset( $_GET['delete_count'] ) ? (int) $_GET['delete_count'] : 0; - if ( 1 == $delete_count ) { + if ( 1 === $delete_count ) { $message = __( 'User deleted.' ); } else { /* translators: %s: Number of users. */ $message = _n( '%s user deleted.', '%s users deleted.', $delete_count ); } - $messages[] = '

    ' . sprintf( $message, number_format_i18n( $delete_count ) ) . '

    '; + $message = sprintf( $message, number_format_i18n( $delete_count ) ); + $messages[] = wp_get_admin_notice( + $message, + array( + 'id' => 'message', + 'additional_classes' => array( 'updated' ), + 'dismissible' => true, + ) + ); break; case 'add': $message = __( 'New user created.' ); - $user_id = isset( $_GET['id'] ) ? $_GET['id'] : false; if ( $user_id && current_user_can( 'edit_user', $user_id ) ) { $message .= sprintf( - ' %s', + ' %2$s', esc_url( add_query_arg( 'wp_http_referer', @@ -555,7 +642,14 @@ ); } - $messages[] = '

    ' . $message . '

    '; + $messages[] = wp_get_admin_notice( + $message, + array( + 'id' => 'message', + 'additional_classes' => array( 'updated' ), + 'dismissible' => true, + ) + ); break; case 'resetpassword': $reset_count = isset( $_GET['reset_count'] ) ? (int) $_GET['reset_count'] : 0; @@ -565,42 +659,107 @@ /* translators: %s: Number of users. */ $message = _n( 'Password reset links sent to %s user.', 'Password reset links sent to %s users.', $reset_count ); } - $messages[] = '

    ' . sprintf( $message, number_format_i18n( $reset_count ) ) . '

    '; + $message = sprintf( $message, number_format_i18n( $reset_count ) ); + $messages[] = wp_get_admin_notice( + $message, + array( + 'id' => 'message', + 'additional_classes' => array( 'updated' ), + 'dismissible' => true, + ) + ); break; case 'promote': - $messages[] = '

    ' . __( 'Changed roles.' ) . '

    '; + $messages[] = wp_get_admin_notice( + __( 'Changed roles.' ), + array( + 'id' => 'message', + 'additional_classes' => array( 'updated' ), + 'dismissible' => true, + ) + ); break; case 'err_admin_role': - $messages[] = '

    ' . __( 'The current user’s role must have user editing capabilities.' ) . '

    '; - $messages[] = '

    ' . __( 'Other user roles have been changed.' ) . '

    '; + $messages[] = wp_get_admin_notice( + __( 'The current user’s role must have user editing capabilities.' ), + array( + 'id' => 'message', + 'additional_classes' => array( 'error' ), + 'dismissible' => true, + ) + ); + $messages[] = wp_get_admin_notice( + __( 'Other user roles have been changed.' ), + array( + 'id' => 'message', + 'additional_classes' => array( 'updated' ), + 'dismissible' => true, + ) + ); break; case 'err_admin_del': - $messages[] = '

    ' . __( 'You cannot delete the current user.' ) . '

    '; - $messages[] = '

    ' . __( 'Other users have been deleted.' ) . '

    '; + $messages[] = wp_get_admin_notice( + __( 'You cannot delete the current user.' ), + array( + 'id' => 'message', + 'additional_classes' => array( 'error' ), + 'dismissible' => true, + ) + ); + $messages[] = wp_get_admin_notice( + __( 'Other users have been deleted.' ), + array( + 'id' => 'message', + 'additional_classes' => array( 'updated' ), + 'dismissible' => true, + ) + ); break; case 'remove': - $messages[] = '

    ' . __( 'User removed from this site.' ) . '

    '; + $messages[] = wp_get_admin_notice( + __( 'User removed from this site.' ), + array( + 'id' => 'message', + 'additional_classes' => array( 'updated', 'fade' ), + 'dismissible' => true, + ) + ); break; case 'err_admin_remove': - $messages[] = '

    ' . __( 'You cannot remove the current user.' ) . '

    '; - $messages[] = '

    ' . __( 'Other users have been removed.' ) . '

    '; + $messages[] = wp_get_admin_notice( + __( 'You cannot remove the current user.' ), + array( + 'id' => 'message', + 'additional_classes' => array( 'error' ), + 'dismissible' => true, + ) + ); + $messages[] = wp_get_admin_notice( + __( 'Other users have been removed.' ), + array( + 'id' => 'message', + 'additional_classes' => array( 'updated', 'fade' ), + 'dismissible' => true, + ) + ); break; } endif; ?> - -
    - -
    - ' . $error_message . '', + array( + 'additional_classes' => array( 'error' ), + ) + ); + endif; if ( ! empty( $messages ) ) { foreach ( $messages as $msg ) { @@ -609,50 +768,55 @@ } ?> -
    -

    - -

    +
    +

    + +

    - - - - %2$s', + esc_url( admin_url( 'user-new.php' ) ), + esc_html__( 'Add New User' ) + ); + } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { + printf( + '%2$s', + esc_url( admin_url( 'user-new.php' ) ), + esc_html__( 'Add Existing User' ) + ); + } -if ( strlen( $usersearch ) ) { - echo ''; - printf( - /* translators: %s: Search query. */ - __( 'Search results for: %s' ), - '' . esc_html( $usersearch ) . '' - ); - echo ''; -} -?> + if ( strlen( $usersearch ) ) { + echo ''; + printf( + /* translators: %s: Search query. */ + __( 'Search results for: %s' ), + '' . esc_html( $usersearch ) . '' + ); + echo ''; + } + ?> -
    +
    views(); ?> -
    + search_box( __( 'Search Users' ), 'user' ); ?> - - + + display(); ?> -
    + + -
    -
    +
    +