[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-admin/ -> users.php (source)

   1  <?php
   2  /**
   3   * User administration panel
   4   *
   5   * @package WordPress
   6   * @subpackage Administration
   7   * @since 1.0.0
   8   */
   9  
  10  /** WordPress Administration Bootstrap */
  11  require_once  __DIR__ . '/admin.php';
  12  
  13  if ( ! current_user_can( 'list_users' ) ) {
  14      wp_die(
  15          '<h1>' . __( 'You need a higher level of permission.' ) . '</h1>' .
  16          '<p>' . __( 'Sorry, you are not allowed to list users.' ) . '</p>',
  17          403
  18      );
  19  }
  20  
  21  $wp_list_table = _get_list_table( 'WP_Users_List_Table' );
  22  $pagenum       = $wp_list_table->get_pagenum();
  23  
  24  // Used in the HTML title tag.
  25  $title       = __( 'Users' );
  26  $parent_file = 'users.php';
  27  
  28  add_screen_option( 'per_page' );
  29  
  30  // Contextual help - choose Help on the top right of admin panel to preview this.
  31  get_current_screen()->add_help_tab(
  32      array(
  33          'id'      => 'overview',
  34          'title'   => __( 'Overview' ),
  35          'content' => '<p>' . __( '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.' ) . '</p>' .
  36          '<p>' . __( '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.' ) . '</p>',
  37      )
  38  );
  39  
  40  get_current_screen()->add_help_tab(
  41      array(
  42          'id'      => 'screen-content',
  43          'title'   => __( 'Screen Content' ),
  44          'content' => '<p>' . __( 'You can customize the display of this screen in a number of ways:' ) . '</p>' .
  45                          '<ul>' .
  46                          '<li>' . __( 'You can hide/display columns based on your needs and decide how many users to list per screen using the Screen Options tab.' ) . '</li>' .
  47                          '<li>' . __( 'You can filter the list of users by User Role using the text links above the users list to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.' ) . '</li>' .
  48                          '<li>' . __( 'You can view all posts made by a user by clicking on the number under the Posts column.' ) . '</li>' .
  49                          '</ul>',
  50      )
  51  );
  52  
  53  $help = '<p>' . __( 'Hovering over a row in the users list will display action links that allow you to manage users. You can perform the following actions:' ) . '</p>' .
  54      '<ul>' .
  55      '<li>' . __( '<strong>Edit</strong> takes you to the editable profile screen for that user. You can also reach that screen by clicking on the username.' ) . '</li>';
  56  
  57  if ( is_multisite() ) {
  58      $help .= '<li>' . __( '<strong>Remove</strong> allows you to remove a user from your site. It does not delete their content. You can also remove multiple users at once by using bulk actions.' ) . '</li>';
  59  } else {
  60      $help .= '<li>' . __( '<strong>Delete</strong> 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.' ) . '</li>';
  61  }
  62  
  63  $help .= '<li>' . __( '<strong>View</strong> takes you to a public author archive which lists all the posts published by the user.' ) . '</li>';
  64  
  65  if ( current_user_can( 'edit_users' ) ) {
  66      $help .= '<li>' . __( '<strong>Send password reset</strong> sends the user an email with a link to set a new password.' ) . '</li>';
  67  }
  68  
  69  $help .= '</ul>';
  70  
  71  get_current_screen()->add_help_tab(
  72      array(
  73          'id'      => 'action-links',
  74          'title'   => __( 'Available Actions' ),
  75          'content' => $help,
  76      )
  77  );
  78  unset( $help );
  79  
  80  get_current_screen()->set_help_sidebar(
  81      '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
  82      '<p>' . __( '<a href="https://wordpress.org/documentation/article/users-screen/">Documentation on Managing Users</a>' ) . '</p>' .
  83      '<p>' . __( '<a href="https://wordpress.org/documentation/article/roles-and-capabilities/">Descriptions of Roles and Capabilities</a>' ) . '</p>' .
  84      '<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>'
  85  );
  86  
  87  get_current_screen()->set_screen_reader_content(
  88      array(
  89          'heading_views'      => __( 'Filter users list' ),
  90          'heading_pagination' => __( 'Users list navigation' ),
  91          'heading_list'       => __( 'Users list' ),
  92      )
  93  );
  94  
  95  if ( empty( $_REQUEST ) ) {
  96      $referer = '<input type="hidden" name="wp_http_referer" value="' . esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) ) . '" />';
  97  } elseif ( isset( $_REQUEST['wp_http_referer'] ) ) {
  98      $redirect = remove_query_arg( array( 'wp_http_referer', 'updated', 'delete_count' ), wp_unslash( $_REQUEST['wp_http_referer'] ) );
  99      $referer  = '<input type="hidden" name="wp_http_referer" value="' . esc_attr( $redirect ) . '" />';
 100  } else {
 101      $redirect = 'users.php';
 102      $referer  = '';
 103  }
 104  
 105  $update = '';
 106  
 107  switch ( $wp_list_table->current_action() ) {
 108  
 109      /* Bulk Dropdown menu Role changes */
 110      case 'promote':
 111          check_admin_referer( 'bulk-users' );
 112  
 113          if ( ! current_user_can( 'promote_users' ) ) {
 114              wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 );
 115          }
 116  
 117          if ( empty( $_REQUEST['users'] ) ) {
 118              wp_redirect( $redirect );
 119              exit;
 120          }
 121  
 122          $editable_roles = get_editable_roles();
 123          $role           = $_REQUEST['new_role'];
 124  
 125          // Mocking the `none` role so we are able to save it to the database
 126          $editable_roles['none'] = array(
 127              'name' => __( '&mdash; No role for this site &mdash;' ),
 128          );
 129  
 130          if ( ! $role || empty( $editable_roles[ $role ] ) ) {
 131              wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 );
 132          }
 133  
 134          if ( 'none' === $role ) {
 135              $role = '';
 136          }
 137  
 138          $user_ids = array_map( 'intval', (array) $_REQUEST['users'] );
 139          $update   = 'promote';
 140  
 141          foreach ( $user_ids as $id ) {
 142              if ( ! current_user_can( 'promote_user', $id ) ) {
 143                  wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 );
 144              }
 145  
 146              // The new role of the current user must also have the promote_users cap or be a multisite super admin.
 147              if ( $id === $current_user->ID
 148                  && ! $wp_roles->role_objects[ $role ]->has_cap( 'promote_users' )
 149                  && ! ( is_multisite() && current_user_can( 'manage_network_users' ) )
 150              ) {
 151                      $update = 'err_admin_role';
 152                      continue;
 153              }
 154  
 155              // If the user doesn't already belong to the blog, bail.
 156              if ( is_multisite() && ! is_user_member_of_blog( $id ) ) {
 157                  wp_die(
 158                      '<h1>' . __( 'Something went wrong.' ) . '</h1>' .
 159                      '<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>',
 160                      403
 161                  );
 162              }
 163  
 164              $user = get_userdata( $id );
 165              $user->set_role( $role );
 166          }
 167  
 168          wp_redirect( add_query_arg( 'update', $update, $redirect ) );
 169          exit;
 170  
 171      case 'dodelete':
 172          if ( is_multisite() ) {
 173              wp_die( __( 'User deletion is not allowed from this screen.' ), 400 );
 174          }
 175  
 176          check_admin_referer( 'delete-users' );
 177  
 178          if ( empty( $_REQUEST['users'] ) ) {
 179              wp_redirect( $redirect );
 180              exit;
 181          }
 182  
 183          $user_ids = array_map( 'intval', (array) $_REQUEST['users'] );
 184  
 185          if ( empty( $_REQUEST['delete_option'] ) ) {
 186              $url = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $user_ids ) . '&error=true' );
 187              $url = str_replace( '&amp;', '&', wp_nonce_url( $url, 'bulk-users' ) );
 188              wp_redirect( $url );
 189              exit;
 190          }
 191  
 192          if ( ! current_user_can( 'delete_users' ) ) {
 193              wp_die( __( 'Sorry, you are not allowed to delete users.' ), 403 );
 194          }
 195  
 196          $update       = 'del';
 197          $delete_count = 0;
 198  
 199          foreach ( $user_ids as $id ) {
 200              if ( ! current_user_can( 'delete_user', $id ) ) {
 201                  wp_die( __( 'Sorry, you are not allowed to delete that user.' ), 403 );
 202              }
 203  
 204              if ( $id === $current_user->ID ) {
 205                  $update = 'err_admin_del';
 206                  continue;
 207              }
 208  
 209              switch ( $_REQUEST['delete_option'] ) {
 210                  case 'delete':
 211                      wp_delete_user( $id );
 212                      break;
 213                  case 'reassign':
 214                      wp_delete_user( $id, $_REQUEST['reassign_user'] );
 215                      break;
 216              }
 217  
 218              ++$delete_count;
 219          }
 220  
 221          $redirect = add_query_arg(
 222              array(
 223                  'delete_count' => $delete_count,
 224                  'update'       => $update,
 225              ),
 226              $redirect
 227          );
 228          wp_redirect( $redirect );
 229          exit;
 230  
 231      case 'resetpassword':
 232          check_admin_referer( 'bulk-users' );
 233  
 234          if ( ! current_user_can( 'edit_users' ) ) {
 235              $errors = new WP_Error( 'edit_users', __( 'Sorry, you are not allowed to edit users.' ) );
 236          }
 237  
 238          if ( empty( $_REQUEST['users'] ) ) {
 239              wp_redirect( $redirect );
 240              exit();
 241          }
 242  
 243          $user_ids = array_map( 'intval', (array) $_REQUEST['users'] );
 244  
 245          $reset_count = 0;
 246  
 247          foreach ( $user_ids as $id ) {
 248              if ( ! current_user_can( 'edit_user', $id ) ) {
 249                  wp_die( __( 'Sorry, you are not allowed to edit this user.' ) );
 250              }
 251  
 252              if ( $id === $current_user->ID ) {
 253                  $update = 'err_admin_reset';
 254                  continue;
 255              }
 256  
 257              // Send the password reset link.
 258              $user = get_userdata( $id );
 259              if ( true === retrieve_password( $user->user_login ) ) {
 260                  ++$reset_count;
 261              }
 262          }
 263  
 264          $redirect = add_query_arg(
 265              array(
 266                  'reset_count' => $reset_count,
 267                  'update'      => 'resetpassword',
 268              ),
 269              $redirect
 270          );
 271          wp_redirect( $redirect );
 272          exit;
 273  
 274      case 'delete':
 275          if ( is_multisite() ) {
 276              wp_die( __( 'User deletion is not allowed from this screen.' ), 400 );
 277          }
 278  
 279          check_admin_referer( 'bulk-users' );
 280  
 281          if ( empty( $_REQUEST['users'] ) && empty( $_REQUEST['user'] ) ) {
 282              wp_redirect( $redirect );
 283              exit;
 284          }
 285  
 286          if ( ! current_user_can( 'delete_users' ) ) {
 287              $errors = new WP_Error( 'edit_users', __( 'Sorry, you are not allowed to delete users.' ) );
 288          }
 289  
 290          if ( empty( $_REQUEST['users'] ) ) {
 291              $user_ids = array( (int) $_REQUEST['user'] );
 292          } else {
 293              $user_ids = array_map( 'intval', (array) $_REQUEST['users'] );
 294          }
 295  
 296          $all_user_ids = $user_ids;
 297  
 298          if ( in_array( $current_user->ID, $user_ids, true ) ) {
 299              $user_ids = array_diff( $user_ids, array( $current_user->ID ) );
 300          }
 301  
 302          /**
 303           * Filters whether the users being deleted have additional content
 304           * associated with them outside of the `post_author` and `link_owner` relationships.
 305           *
 306           * @since 5.2.0
 307           *
 308           * @param bool  $users_have_additional_content Whether the users have additional content. Default false.
 309           * @param int[] $user_ids                      Array of IDs for users being deleted.
 310           */
 311          $users_have_content = (bool) apply_filters( 'users_have_additional_content', false, $user_ids );
 312  
 313          if ( $user_ids && ! $users_have_content ) {
 314              if ( $wpdb->get_var(
 315                  "SELECT ID FROM {$wpdb->posts}
 316                  WHERE post_author IN( " . implode( ',', $user_ids ) . ' )
 317                  LIMIT 1'
 318              ) ) {
 319                  $users_have_content = true;
 320              } elseif ( $wpdb->get_var(
 321                  "SELECT link_id FROM {$wpdb->links}
 322                  WHERE link_owner IN( " . implode( ',', $user_ids ) . ' )
 323                  LIMIT 1'
 324              ) ) {
 325                  $users_have_content = true;
 326              }
 327          }
 328  
 329          if ( $users_have_content ) {
 330              add_action( 'admin_head', 'delete_users_add_js' );
 331          }
 332  
 333          require_once  ABSPATH . 'wp-admin/admin-header.php';
 334          ?>
 335          <form method="post" name="updateusers" id="updateusers">
 336          <?php wp_nonce_field( 'delete-users' ); ?>
 337          <?php echo $referer; ?>
 338  
 339          <div class="wrap">
 340          <h1><?php _e( 'Delete Users' ); ?></h1>
 341  
 342          <?php
 343          if ( isset( $_REQUEST['error'] ) ) :
 344              wp_admin_notice(
 345                  '<strong>' . __( 'Error:' ) . '</strong> ' . __( 'Please select an option.' ),
 346                  array(
 347                      'additional_classes' => array( 'error' ),
 348                  )
 349              );
 350          endif;
 351          ?>
 352  
 353          <?php if ( 1 === count( $all_user_ids ) ) : ?>
 354              <p><?php _e( 'You have specified this user for deletion:' ); ?></p>
 355          <?php else : ?>
 356              <p><?php _e( 'You have specified these users for deletion:' ); ?></p>
 357          <?php endif; ?>
 358  
 359          <ul>
 360          <?php
 361          $go_delete = 0;
 362  
 363          foreach ( $all_user_ids as $id ) {
 364              $user = get_userdata( $id );
 365  
 366              if ( $id === $current_user->ID ) {
 367                  echo '<li>';
 368                  printf(
 369                      /* translators: 1: User ID, 2: User login. */
 370                      __( 'ID #%1$s: %2$s <strong>The current user will not be deleted.</strong>' ),
 371                      $id,
 372                      $user->user_login
 373                  );
 374                  echo "</li>\n";
 375              } else {
 376                  echo '<li>';
 377                  printf(
 378                      '<input type="hidden" name="users[]" value="%s" />',
 379                      esc_attr( $id )
 380                  );
 381                  printf(
 382                      /* translators: 1: User ID, 2: User login. */
 383                      __( 'ID #%1$s: %2$s' ),
 384                      $id,
 385                      $user->user_login
 386                  );
 387                  echo "</li>\n";
 388  
 389                  ++$go_delete;
 390              }
 391          }
 392          ?>
 393          </ul>
 394  
 395          <?php
 396          if ( $go_delete ) :
 397  
 398              if ( ! $users_have_content ) :
 399                  ?>
 400                  <input type="hidden" name="delete_option" value="delete" />
 401              <?php else : ?>
 402                  <fieldset>
 403                  <?php if ( 1 === $go_delete ) : ?>
 404                      <p><legend><?php _e( 'What should be done with content owned by this user?' ); ?></legend></p>
 405                  <?php else : ?>
 406                      <p><legend><?php _e( 'What should be done with content owned by these users?' ); ?></legend></p>
 407                  <?php endif; ?>
 408  
 409                  <ul style="list-style:none;">
 410                      <li>
 411                          <input type="radio" id="delete_option0" name="delete_option" value="delete" />
 412                          <label for="delete_option0"><?php _e( 'Delete all content.' ); ?></label>
 413                      </li>
 414                      <li>
 415                          <input type="radio" id="delete_option1" name="delete_option" value="reassign" />
 416                          <label for="delete_option1"><?php _e( 'Attribute all content to:' ); ?></label>
 417                          <?php
 418                          wp_dropdown_users(
 419                              array(
 420                                  'name'    => 'reassign_user',
 421                                  'exclude' => $user_ids,
 422                                  'show'    => 'display_name_with_login',
 423                              )
 424                          );
 425                          ?>
 426                      </li>
 427                  </ul>
 428                  </fieldset>
 429                  <?php
 430              endif;
 431  
 432              /**
 433               * Fires at the end of the delete users form prior to the confirm button.
 434               *
 435               * @since 4.0.0
 436               * @since 4.5.0 The `$user_ids` parameter was added.
 437               *
 438               * @param WP_User $current_user WP_User object for the current user.
 439               * @param int[]   $user_ids     Array of IDs for users being deleted.
 440               */
 441              do_action( 'delete_user_form', $current_user, $user_ids );
 442              ?>
 443              <input type="hidden" name="action" value="dodelete" />
 444              <?php submit_button( __( 'Confirm Deletion' ), 'primary' ); ?>
 445  
 446          <?php else : ?>
 447  
 448              <p><?php _e( 'There are no valid users selected for deletion.' ); ?></p>
 449  
 450          <?php endif; ?>
 451          </div><!-- .wrap -->
 452          </form><!-- #updateusers -->
 453          <?php
 454  
 455          break;
 456  
 457      case 'doremove':
 458          check_admin_referer( 'remove-users' );
 459  
 460          if ( ! is_multisite() ) {
 461              wp_die( __( 'You cannot remove users.' ), 400 );
 462          }
 463  
 464          if ( empty( $_REQUEST['users'] ) ) {
 465              wp_redirect( $redirect );
 466              exit;
 467          }
 468  
 469          if ( ! current_user_can( 'remove_users' ) ) {
 470              wp_die( __( 'Sorry, you are not allowed to remove users.' ), 403 );
 471          }
 472  
 473          $user_ids = array_map( 'intval', (array) $_REQUEST['users'] );
 474          $update   = 'remove';
 475  
 476          foreach ( $user_ids as $id ) {
 477              if ( ! current_user_can( 'remove_user', $id ) ) {
 478                  $update = 'err_admin_remove';
 479                  continue;
 480              }
 481  
 482              remove_user_from_blog( $id, $blog_id );
 483          }
 484  
 485          $redirect = add_query_arg( array( 'update' => $update ), $redirect );
 486          wp_redirect( $redirect );
 487          exit;
 488  
 489      case 'remove':
 490          check_admin_referer( 'bulk-users' );
 491  
 492          if ( ! is_multisite() ) {
 493              wp_die( __( 'You cannot remove users.' ), 400 );
 494          }
 495  
 496          if ( empty( $_REQUEST['users'] ) && empty( $_REQUEST['user'] ) ) {
 497              wp_redirect( $redirect );
 498              exit;
 499          }
 500  
 501          if ( ! current_user_can( 'remove_users' ) ) {
 502              $error = new WP_Error( 'edit_users', __( 'Sorry, you are not allowed to remove users.' ) );
 503          }
 504  
 505          if ( empty( $_REQUEST['users'] ) ) {
 506              $user_ids = array( (int) $_REQUEST['user'] );
 507          } else {
 508              $user_ids = array_map( 'intval', (array) $_REQUEST['users'] );
 509          }
 510  
 511          require_once  ABSPATH . 'wp-admin/admin-header.php';
 512          ?>
 513          <form method="post" name="updateusers" id="updateusers">
 514          <?php wp_nonce_field( 'remove-users' ); ?>
 515          <?php echo $referer; ?>
 516  
 517          <div class="wrap">
 518          <h1><?php _e( 'Remove Users from Site' ); ?></h1>
 519  
 520          <?php if ( 1 === count( $user_ids ) ) : ?>
 521              <p><?php _e( 'You have specified this user for removal:' ); ?></p>
 522          <?php else : ?>
 523              <p><?php _e( 'You have specified these users for removal:' ); ?></p>
 524          <?php endif; ?>
 525  
 526          <ul>
 527          <?php
 528          $go_remove = false;
 529  
 530          foreach ( $user_ids as $id ) {
 531              $user = get_userdata( $id );
 532  
 533              if ( ! current_user_can( 'remove_user', $id ) ) {
 534                  echo '<li>';
 535                  printf(
 536                      /* translators: 1: User ID, 2: User login. */
 537                      __( 'ID #%1$s: %2$s <strong>Sorry, you are not allowed to remove this user.</strong>' ),
 538                      $id,
 539                      $user->user_login
 540                  );
 541                  echo "</li>\n";
 542              } else {
 543                  echo '<li>';
 544                  printf(
 545                      '<input type="hidden" name="users[]" value="%s" />',
 546                      esc_attr( $id )
 547                  );
 548                  printf(
 549                      /* translators: 1: User ID, 2: User login. */
 550                      __( 'ID #%1$s: %2$s' ),
 551                      $id,
 552                      $user->user_login
 553                  );
 554                  echo "</li>\n";
 555  
 556                  $go_remove = true;
 557              }
 558          }
 559          ?>
 560          </ul>
 561  
 562          <?php if ( $go_remove ) : ?>
 563  
 564              <input type="hidden" name="action" value="doremove" />
 565              <?php submit_button( __( 'Confirm Removal' ), 'primary' ); ?>
 566  
 567          <?php else : ?>
 568  
 569              <p><?php _e( 'There are no valid users selected for removal.' ); ?></p>
 570  
 571          <?php endif; ?>
 572          </div><!-- .wrap -->
 573          </form><!-- #updateusers -->
 574          <?php
 575  
 576          break;
 577  
 578      default:
 579          if ( ! empty( $_GET['_wp_http_referer'] ) ) {
 580              wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
 581              exit;
 582          }
 583  
 584          if ( $wp_list_table->current_action() && ! empty( $_REQUEST['users'] ) ) {
 585              $screen   = get_current_screen()->id;
 586              $sendback = wp_get_referer();
 587              $user_ids = array_map( 'intval', (array) $_REQUEST['users'] );
 588  
 589              /** This action is documented in wp-admin/edit.php */
 590              $sendback = apply_filters( "handle_bulk_actions-{$screen}", $sendback, $wp_list_table->current_action(), $user_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
 591  
 592              wp_safe_redirect( $sendback );
 593              exit;
 594          }
 595  
 596          $wp_list_table->prepare_items();
 597          $total_pages = $wp_list_table->get_pagination_arg( 'total_pages' );
 598  
 599          if ( $pagenum > $total_pages && $total_pages > 0 ) {
 600              wp_redirect( add_query_arg( 'paged', $total_pages ) );
 601              exit;
 602          }
 603  
 604          require_once  ABSPATH . 'wp-admin/admin-header.php';
 605  
 606          $messages = array();
 607          if ( isset( $_GET['update'] ) ) :
 608              switch ( $_GET['update'] ) {
 609                  case 'del':
 610                  case 'del_many':
 611                      $delete_count = isset( $_GET['delete_count'] ) ? (int) $_GET['delete_count'] : 0;
 612                      if ( 1 === $delete_count ) {
 613                          $message = __( 'User deleted.' );
 614                      } else {
 615                          /* translators: %s: Number of users. */
 616                          $message = _n( '%s user deleted.', '%s users deleted.', $delete_count );
 617                      }
 618                      $message    = sprintf( $message, number_format_i18n( $delete_count ) );
 619                      $messages[] = wp_get_admin_notice(
 620                          $message,
 621                          array(
 622                              'id'                 => 'message',
 623                              'additional_classes' => array( 'updated' ),
 624                              'dismissible'        => true,
 625                          )
 626                      );
 627                      break;
 628                  case 'add':
 629                      $message = __( 'New user created.' );
 630                      $user_id = isset( $_GET['id'] ) ? $_GET['id'] : false;
 631                      if ( $user_id && current_user_can( 'edit_user', $user_id ) ) {
 632                          $message .= sprintf(
 633                              ' <a href="%1$s">%2$s</a>',
 634                              esc_url(
 635                                  add_query_arg(
 636                                      'wp_http_referer',
 637                                      urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ),
 638                                      self_admin_url( 'user-edit.php?user_id=' . $user_id )
 639                                  )
 640                              ),
 641                              __( 'Edit user' )
 642                          );
 643                      }
 644  
 645                      $messages[] = wp_get_admin_notice(
 646                          $message,
 647                          array(
 648                              'id'                 => 'message',
 649                              'additional_classes' => array( 'updated' ),
 650                              'dismissible'        => true,
 651                          )
 652                      );
 653                      break;
 654                  case 'resetpassword':
 655                      $reset_count = isset( $_GET['reset_count'] ) ? (int) $_GET['reset_count'] : 0;
 656                      if ( 1 === $reset_count ) {
 657                          $message = __( 'Password reset link sent.' );
 658                      } else {
 659                          /* translators: %s: Number of users. */
 660                          $message = _n( 'Password reset links sent to %s user.', 'Password reset links sent to %s users.', $reset_count );
 661                      }
 662                      $message    = sprintf( $message, number_format_i18n( $reset_count ) );
 663                      $messages[] = wp_get_admin_notice(
 664                          $message,
 665                          array(
 666                              'id'                 => 'message',
 667                              'additional_classes' => array( 'updated' ),
 668                              'dismissible'        => true,
 669                          )
 670                      );
 671                      break;
 672                  case 'promote':
 673                      $messages[] = wp_get_admin_notice(
 674                          __( 'Changed roles.' ),
 675                          array(
 676                              'id'                 => 'message',
 677                              'additional_classes' => array( 'updated' ),
 678                              'dismissible'        => true,
 679                          )
 680                      );
 681                      break;
 682                  case 'err_admin_role':
 683                      $messages[] = wp_get_admin_notice(
 684                          __( 'The current user&#8217;s role must have user editing capabilities.' ),
 685                          array(
 686                              'id'                 => 'message',
 687                              'additional_classes' => array( 'error' ),
 688                              'dismissible'        => true,
 689                          )
 690                      );
 691                      $messages[] = wp_get_admin_notice(
 692                          __( 'Other user roles have been changed.' ),
 693                          array(
 694                              'id'                 => 'message',
 695                              'additional_classes' => array( 'updated' ),
 696                              'dismissible'        => true,
 697                          )
 698                      );
 699                      break;
 700                  case 'err_admin_del':
 701                      $messages[] = wp_get_admin_notice(
 702                          __( 'You cannot delete the current user.' ),
 703                          array(
 704                              'id'                 => 'message',
 705                              'additional_classes' => array( 'error' ),
 706                              'dismissible'        => true,
 707                          )
 708                      );
 709                      $messages[] = wp_get_admin_notice(
 710                          __( 'Other users have been deleted.' ),
 711                          array(
 712                              'id'                 => 'message',
 713                              'additional_classes' => array( 'updated' ),
 714                              'dismissible'        => true,
 715                          )
 716                      );
 717                      break;
 718                  case 'remove':
 719                      $messages[] = wp_get_admin_notice(
 720                          __( 'User removed from this site.' ),
 721                          array(
 722                              'id'                 => 'message',
 723                              'additional_classes' => array( 'updated', 'fade' ),
 724                              'dismissible'        => true,
 725                          )
 726                      );
 727                      break;
 728                  case 'err_admin_remove':
 729                      $messages[] = wp_get_admin_notice(
 730                          __( 'You cannot remove the current user.' ),
 731                          array(
 732                              'id'                 => 'message',
 733                              'additional_classes' => array( 'error' ),
 734                              'dismissible'        => true,
 735                          )
 736                      );
 737                      $messages[] = wp_get_admin_notice(
 738                          __( 'Other users have been removed.' ),
 739                          array(
 740                              'id'                 => 'message',
 741                              'additional_classes' => array( 'updated', 'fade' ),
 742                              'dismissible'        => true,
 743                          )
 744                      );
 745                      break;
 746              }
 747          endif;
 748          ?>
 749  
 750          <?php
 751          if ( isset( $errors ) && is_wp_error( $errors ) ) :
 752              $error_message = '';
 753              foreach ( $errors->get_error_messages() as $err ) {
 754                  $error_message .= "<li>$err</li>\n";
 755              }
 756              wp_admin_notice(
 757                  '<ul>' . $error_message . '</ul>',
 758                  array(
 759                      'additional_classes' => array( 'error' ),
 760                  )
 761              );
 762          endif;
 763  
 764          if ( ! empty( $messages ) ) {
 765              foreach ( $messages as $msg ) {
 766                  echo $msg;
 767              }
 768          }
 769          ?>
 770  
 771          <div class="wrap">
 772          <h1 class="wp-heading-inline">
 773              <?php echo esc_html( $title ); ?>
 774          </h1>
 775  
 776          <?php
 777          if ( current_user_can( 'create_users' ) ) {
 778              printf(
 779                  '<a href="%1$s" class="page-title-action">%2$s</a>',
 780                  esc_url( admin_url( 'user-new.php' ) ),
 781                  esc_html__( 'Add New User' )
 782              );
 783          } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) {
 784              printf(
 785                  '<a href="%1$s" class="page-title-action">%2$s</a>',
 786                  esc_url( admin_url( 'user-new.php' ) ),
 787                  esc_html__( 'Add Existing User' )
 788              );
 789          }
 790  
 791          if ( strlen( $usersearch ) ) {
 792              echo '<span class="subtitle">';
 793              printf(
 794                  /* translators: %s: Search query. */
 795                  __( 'Search results for: %s' ),
 796                  '<strong>' . esc_html( $usersearch ) . '</strong>'
 797              );
 798              echo '</span>';
 799          }
 800          ?>
 801  
 802          <hr class="wp-header-end">
 803  
 804          <?php $wp_list_table->views(); ?>
 805  
 806          <form method="get">
 807  
 808          <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?>
 809  
 810          <?php if ( ! empty( $_REQUEST['role'] ) ) { ?>
 811              <input type="hidden" name="role" value="<?php echo esc_attr( $_REQUEST['role'] ); ?>" />
 812          <?php } ?>
 813  
 814          <?php $wp_list_table->display(); ?>
 815  
 816          </form>
 817  
 818          <div class="clear"></div>
 819          </div><!-- .wrap -->
 820          <?php
 821          break;
 822  
 823  } // End of the $doaction switch.
 824  
 825  require_once  ABSPATH . 'wp-admin/admin-footer.php';


Generated : Tue Dec 24 08:20:01 2024 Cross-referenced by PHPXref