WordPress PHP Cross Reference Web Logs

Source: /wp-admin/users.php - 455 lines - 15548 bytes - Summary - Text - Print

Description: Users administration panel.

   1  <?php
   2  /**
   3   * Users administration panel.
   4   *
   5   * @package WordPress
   6   * @subpackage Administration
   7   */
   8  
   9  /** WordPress Administration Bootstrap */
  10  require_once ( './admin.php' );
  11  
  12  if ( ! current_user_can( 'list_users' ) )
  13      wp_die( __( 'Cheatin&#8217; uh?' ) );
  14  
  15  $wp_list_table = _get_list_table('WP_Users_List_Table');
  16  $pagenum = $wp_list_table->get_pagenum();
  17  $title = __('Users');
  18  $parent_file = 'users.php';
  19  
  20  add_screen_option( 'per_page', array('label' => _x( 'Users', 'users per page (screen options)' )) );
  21  
  22  // contextual help - choose Help on the top right of admin panel to preview this.
  23  get_current_screen()->add_help_tab( array(
  24      'id'      => 'overview',
  25      'title'   => __('Overview'),
  26      '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>' .
  27                   '<p>' . __('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.') . '</p>'
  28  ) ) ;
  29  
  30  get_current_screen()->add_help_tab( array(
  31      'id'      => 'screen-display',
  32      'title'   => __('Screen Display'),
  33      'content' => '<p>' . __('You can customize the display of this screen in a number of ways:') . '</p>' .
  34                      '<ul>' .
  35                      '<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>' .
  36                      '<li>' . __('You can filter the list of users by User Role using the text links in the upper left to show All, Administrator, Editor, Author, Contributor, or Subscriber. The default view is to show all users. Unused User Roles are not listed.') . '</li>' .
  37                      '<li>' . __('You can view all posts made by a user by clicking on the number under the Posts column.') . '</li>' .
  38                      '</ul>'
  39  ) );
  40  
  41  $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>' .
  42      '<ul>' .
  43      '<li>' . __('Edit takes you to the editable profile screen for that user. You can also reach that screen by clicking on the username.') . '</li>';
  44  
  45  if ( is_multisite() )
  46      $help .= '<li>' . __( 'Remove allows you to remove a user from your site. It does not delete their posts. You can also remove multiple users at once by using Bulk Actions.' ) . '</li>';
  47  else
  48      $help .= '<li>' . __( 'Delete brings you to the Delete Users screen for confirmation, where you can permanently remove a user from your site and delete their posts. You can also delete multiple users at once by using Bulk Actions.' ) . '</li>';
  49  
  50  $help .= '</ul>';
  51  
  52  get_current_screen()->add_help_tab( array(
  53      'id'      => 'actions',
  54      'title'   => __('Actions'),
  55      'content' => $help,
  56  ) );
  57  unset( $help );
  58  
  59  get_current_screen()->set_help_sidebar(
  60      '<p><strong>' . __('For more information:') . '</strong></p>' .
  61      '<p>' . __('<a href="http://codex.wordpress.org/Users_Screen" target="_blank">Documentation on Managing Users</a>') . '</p>' .
  62      '<p>' . __('<a href="http://codex.wordpress.org/Roles_and_Capabilities" target="_blank">Descriptions of Roles and Capabilities</a>') . '</p>' .
  63      '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
  64  );
  65  
  66  if ( empty($_REQUEST) ) {
  67      $referer = '<input type="hidden" name="wp_http_referer" value="'. esc_attr(stripslashes($_SERVER['REQUEST_URI'])) . '" />';
  68  } elseif ( isset($_REQUEST['wp_http_referer']) ) {
  69      $redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), stripslashes($_REQUEST['wp_http_referer']));
  70      $referer = '<input type="hidden" name="wp_http_referer" value="' . esc_attr($redirect) . '" />';
  71  } else {
  72      $redirect = 'users.php';
  73      $referer = '';
  74  }
  75  
  76  $update = '';
  77  
  78  /**
  79   * @since 3.5.0
  80   * @access private
  81   */
  82  function delete_users_add_js() { ?>
  83  <script>
  84  jQuery(document).ready( function($) {
  85      var submit = $('#submit').prop('disabled', true);
  86      $('input[name=delete_option]').one('change', function() {
  87          submit.prop('disabled', false);
  88      });
  89  });
  90  </script>
  91  <?php
  92  }
  93  
  94  switch ( $wp_list_table->current_action() ) {
  95  
  96  /* Bulk Dropdown menu Role changes */
  97  case 'promote':
  98      check_admin_referer('bulk-users');
  99  
 100      if ( ! current_user_can( 'promote_users' ) )
 101          wp_die( __( 'You can&#8217;t edit that user.' ) );
 102  
 103      if ( empty($_REQUEST['users']) ) {
 104          wp_redirect($redirect);
 105          exit();
 106      }
 107  
 108      $editable_roles = get_editable_roles();
 109      if ( empty( $editable_roles[$_REQUEST['new_role']] ) )
 110          wp_die(__('You can&#8217;t give users that role.'));
 111  
 112      $userids = $_REQUEST['users'];
 113      $update = 'promote';
 114      foreach ( $userids as $id ) {
 115          $id = (int) $id;
 116  
 117          if ( ! current_user_can('promote_user', $id) )
 118              wp_die(__('You can&#8217;t edit that user.'));
 119          // The new role of the current user must also have the promote_users cap or be a multisite super admin
 120          if ( $id == $current_user->ID && ! $wp_roles->role_objects[ $_REQUEST['new_role'] ]->has_cap('promote_users')
 121              && ! ( is_multisite() && is_super_admin() ) ) {
 122                  $update = 'err_admin_role';
 123                  continue;
 124          }
 125  
 126          // If the user doesn't already belong to the blog, bail.
 127          if ( is_multisite() && !is_user_member_of_blog( $id ) )
 128              wp_die(__('Cheatin&#8217; uh?'));
 129  
 130          $user = get_userdata( $id );
 131          $user->set_role($_REQUEST['new_role']);
 132      }
 133  
 134      wp_redirect(add_query_arg('update', $update, $redirect));
 135      exit();
 136  
 137  break;
 138  
 139  case 'dodelete':
 140      if ( is_multisite() )
 141          wp_die( __('User deletion is not allowed from this screen.') );
 142  
 143      check_admin_referer('delete-users');
 144  
 145      if ( empty($_REQUEST['users']) ) {
 146          wp_redirect($redirect);
 147          exit();
 148      }
 149  
 150      $userids = array_map( 'intval', (array) $_REQUEST['users'] );
 151  
 152      if ( empty( $_REQUEST['delete_option'] ) ) {
 153          $url = self_admin_url( 'users.php?action=delete&users[]=' . implode( '&users[]=', $userids ) . '&error=true' );
 154          $url = str_replace( '&amp;', '&', wp_nonce_url( $url, 'bulk-users' ) );
 155          wp_redirect( $url );
 156          exit;
 157      }
 158  
 159      if ( ! current_user_can( 'delete_users' ) )
 160          wp_die(__('You can&#8217;t delete users.'));
 161  
 162      $update = 'del';
 163      $delete_count = 0;
 164  
 165      foreach ( $userids as $id ) {
 166          if ( ! current_user_can( 'delete_user', $id ) )
 167              wp_die(__( 'You can&#8217;t delete that user.' ) );
 168  
 169          if ( $id == $current_user->ID ) {
 170              $update = 'err_admin_del';
 171              continue;
 172          }
 173          switch ( $_REQUEST['delete_option'] ) {
 174          case 'delete':
 175              wp_delete_user( $id );
 176              break;
 177          case 'reassign':
 178              wp_delete_user( $id, $_REQUEST['reassign_user'] );
 179              break;
 180          }
 181          ++$delete_count;
 182      }
 183  
 184      $redirect = add_query_arg( array('delete_count' => $delete_count, 'update' => $update), $redirect);
 185      wp_redirect($redirect);
 186      exit();
 187  
 188  break;
 189  
 190  case 'delete':
 191      if ( is_multisite() )
 192          wp_die( __('User deletion is not allowed from this screen.') );
 193  
 194      check_admin_referer('bulk-users');
 195  
 196      if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) {
 197          wp_redirect($redirect);
 198          exit();
 199      }
 200  
 201      if ( ! current_user_can( 'delete_users' ) )
 202          $errors = new WP_Error( 'edit_users', __( 'You can&#8217;t delete users.' ) );
 203  
 204      if ( empty($_REQUEST['users']) )
 205          $userids = array( intval( $_REQUEST['user'] ) );
 206      else
 207          $userids = array_map( 'intval', (array) $_REQUEST['users'] );
 208  
 209      add_action( 'admin_head', 'delete_users_add_js' );
 210  
 211      include  ('admin-header.php');
 212  ?>
 213  <form action="" method="post" name="updateusers" id="updateusers">
 214  <?php wp_nonce_field('delete-users') ?>
 215  <?php echo $referer; ?>
 216  
 217  <div class="wrap">
 218  <?php screen_icon(); ?>
 219  <h2><?php _e('Delete Users'); ?></h2>
 220  <?php if ( isset( $_REQUEST['error'] ) ) : ?>
 221  <div class="error">
 222      <p><strong><?php _e( 'ERROR:' ); ?></strong> <?php _e( 'Please select an option.' ); ?></p>
 223  </div>
 224  <?php endif; ?>
 225  <p><?php echo _n( 'You have specified this user for deletion:', 'You have specified these users for deletion:', count( $userids ) ); ?></p>
 226  <ul>
 227  <?php
 228      $go_delete = 0;
 229      foreach ( $userids as $id ) {
 230          $user = get_userdata( $id );
 231          if ( $id == $current_user->ID ) {
 232              echo "<li>" . sprintf(__('ID #%1$s: %2$s <strong>The current user will not be deleted.</strong>'), $id, $user->user_login) . "</li>\n";
 233          } else {
 234              echo "<li><input type=\"hidden\" name=\"users[]\" value=\"" . esc_attr($id) . "\" />" . sprintf(__('ID #%1$s: %2$s'), $id, $user->user_login) . "</li>\n";
 235              $go_delete++;
 236          }
 237      }
 238      ?>
 239      </ul>
 240  <?php if ( $go_delete ) : ?>
 241      <fieldset><p><legend><?php echo _n( 'What should be done with posts owned by this user?', 'What should be done with posts owned by these users?', $go_delete ); ?></legend></p>
 242      <ul style="list-style:none;">
 243          <li><label><input type="radio" id="delete_option0" name="delete_option" value="delete" />
 244          <?php _e('Delete all posts.'); ?></label></li>
 245          <li><input type="radio" id="delete_option1" name="delete_option" value="reassign" />
 246          <?php echo '<label for="delete_option1">' . __( 'Attribute all posts to:' ) . '</label> ';
 247          wp_dropdown_users( array( 'name' => 'reassign_user', 'exclude' => array_diff( $userids, array($current_user->ID) ) ) ); ?></li>
 248      </ul></fieldset>
 249      <input type="hidden" name="action" value="dodelete" />
 250      <?php submit_button( __('Confirm Deletion'), 'secondary' ); ?>
 251  <?php else : ?>
 252      <p><?php _e('There are no valid users selected for deletion.'); ?></p>
 253  <?php endif; ?>
 254  </div>
 255  </form>
 256  <?php
 257  
 258  break;
 259  
 260  case 'doremove':
 261      check_admin_referer('remove-users');
 262  
 263      if ( ! is_multisite() )
 264          wp_die( __( 'You can&#8217;t remove users.' ) );
 265  
 266      if ( empty($_REQUEST['users']) ) {
 267          wp_redirect($redirect);
 268          exit;
 269      }
 270  
 271      if ( ! current_user_can( 'remove_users' ) )
 272          wp_die( __( 'You can&#8217;t remove users.' ) );
 273  
 274      $userids = $_REQUEST['users'];
 275  
 276      $update = 'remove';
 277       foreach ( $userids as $id ) {
 278          $id = (int) $id;
 279          if ( $id == $current_user->ID && !is_super_admin() ) {
 280              $update = 'err_admin_remove';
 281              continue;
 282          }
 283          if ( !current_user_can('remove_user', $id) ) {
 284              $update = 'err_admin_remove';
 285              continue;
 286          }
 287          remove_user_from_blog($id, $blog_id);
 288      }
 289  
 290      $redirect = add_query_arg( array('update' => $update), $redirect);
 291      wp_redirect($redirect);
 292      exit;
 293  
 294  break;
 295  
 296  case 'remove':
 297  
 298      check_admin_referer('bulk-users');
 299  
 300      if ( ! is_multisite() )
 301          wp_die( __( 'You can&#8217;t remove users.' ) );
 302  
 303      if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) {
 304          wp_redirect($redirect);
 305          exit();
 306      }
 307  
 308      if ( !current_user_can('remove_users') )
 309          $error = new WP_Error('edit_users', __('You can&#8217;t remove users.'));
 310  
 311      if ( empty($_REQUEST['users']) )
 312          $userids = array(intval($_REQUEST['user']));
 313      else
 314          $userids = $_REQUEST['users'];
 315  
 316      include  ('admin-header.php');
 317  ?>
 318  <form action="" method="post" name="updateusers" id="updateusers">
 319  <?php wp_nonce_field('remove-users') ?>
 320  <?php echo $referer; ?>
 321  
 322  <div class="wrap">
 323  <?php screen_icon(); ?>
 324  <h2><?php _e('Remove Users from Site'); ?></h2>
 325  <p><?php _e('You have specified these users for removal:'); ?></p>
 326  <ul>
 327  <?php
 328      $go_remove = false;
 329       foreach ( $userids as $id ) {
 330          $id = (int) $id;
 331           $user = get_userdata( $id );
 332          if ( $id == $current_user->ID && !is_super_admin() ) {
 333              echo "<li>" . sprintf(__('ID #%1$s: %2$s <strong>The current user will not be removed.</strong>'), $id, $user->user_login) . "</li>\n";
 334          } elseif ( !current_user_can('remove_user', $id) ) {
 335              echo "<li>" . sprintf(__('ID #%1$s: %2$s <strong>You don\'t have permission to remove this user.</strong>'), $id, $user->user_login) . "</li>\n";
 336          } else {
 337              echo "<li><input type=\"hidden\" name=\"users[]\" value=\"{$id}\" />" . sprintf(__('ID #%1$s: %2$s'), $id, $user->user_login) . "</li>\n";
 338              $go_remove = true;
 339          }
 340       }
 341       ?>
 342  <?php if ( $go_remove ) : ?>
 343          <input type="hidden" name="action" value="doremove" />
 344          <?php submit_button( __('Confirm Removal'), 'secondary' ); ?>
 345  <?php else : ?>
 346      <p><?php _e('There are no valid users selected for removal.'); ?></p>
 347  <?php endif; ?>
 348  </div>
 349  </form>
 350  <?php
 351  
 352  break;
 353  
 354  default:
 355  
 356      if ( !empty($_GET['_wp_http_referer']) ) {
 357          wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI'])));
 358          exit;
 359      }
 360  
 361      $wp_list_table->prepare_items();
 362      $total_pages = $wp_list_table->get_pagination_arg( 'total_pages' );
 363      if ( $pagenum > $total_pages && $total_pages > 0 ) {
 364          wp_redirect( add_query_arg( 'paged', $total_pages ) );
 365          exit;
 366      }
 367  
 368      include ('./admin-header.php');
 369  
 370      $messages = array();
 371      if ( isset($_GET['update']) ) :
 372          switch($_GET['update']) {
 373          case 'del':
 374          case 'del_many':
 375              $delete_count = isset($_GET['delete_count']) ? (int) $_GET['delete_count'] : 0;
 376              $messages[] = '<div id="message" class="updated"><p>' . sprintf( _n( 'User deleted.', '%s users deleted.', $delete_count ), number_format_i18n( $delete_count ) ) . '</p></div>';
 377              break;
 378          case 'add':
 379              if ( isset( $_GET['id'] ) && ( $user_id = $_GET['id'] ) && current_user_can( 'edit_user', $user_id ) ) {
 380                  $messages[] = '<div id="message" class="updated"><p>' . sprintf( __( 'New user created. <a href="%s">Edit user</a>' ),
 381                      esc_url( add_query_arg( 'wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ),
 382                          self_admin_url( 'user-edit.php?user_id=' . $user_id ) ) ) ) . '</p></div>';
 383              } else {
 384                  $messages[] = '<div id="message" class="updated"><p>' . __( 'New user created.' ) . '</p></div>';
 385              }
 386              break;
 387          case 'promote':
 388              $messages[] = '<div id="message" class="updated"><p>' . __('Changed roles.') . '</p></div>';
 389              break;
 390          case 'err_admin_role':
 391              $messages[] = '<div id="message" class="error"><p>' . __('The current user&#8217;s role must have user editing capabilities.') . '</p></div>';
 392              $messages[] = '<div id="message" class="updated"><p>' . __('Other user roles have been changed.') . '</p></div>';
 393              break;
 394          case 'err_admin_del':
 395              $messages[] = '<div id="message" class="error"><p>' . __('You can&#8217;t delete the current user.') . '</p></div>';
 396              $messages[] = '<div id="message" class="updated"><p>' . __('Other users have been deleted.') . '</p></div>';
 397              break;
 398          case 'remove':
 399              $messages[] = '<div id="message" class="updated fade"><p>' . __('User removed from this site.') . '</p></div>';
 400              break;
 401          case 'err_admin_remove':
 402              $messages[] = '<div id="message" class="error"><p>' . __("You can't remove the current user.") . '</p></div>';
 403              $messages[] = '<div id="message" class="updated fade"><p>' . __('Other users have been removed.') . '</p></div>';
 404              break;
 405          }
 406      endif; ?>
 407  
 408  <?php if ( isset($errors) && is_wp_error( $errors ) ) : ?>
 409      <div class="error">
 410          <ul>
 411          <?php
 412              foreach ( $errors->get_error_messages() as $err )
 413                  echo "<li>$err</li>\n";
 414          ?>
 415          </ul>
 416      </div>
 417  <?php endif;
 418  
 419  if ( ! empty($messages) ) {
 420      foreach ( $messages as $msg )
 421          echo $msg;
 422  } ?>
 423  
 424  <div class="wrap">
 425  <?php screen_icon(); ?>
 426  <h2>
 427  <?php
 428  echo esc_html( $title );
 429  if ( current_user_can( 'create_users' ) ) { ?>
 430      <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add New', 'user' ); ?></a>
 431  <?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?>
 432      <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a>
 433  <?php }
 434  
 435  if ( $usersearch )
 436      printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( $usersearch ) ); ?>
 437  </h2>
 438  
 439  <?php $wp_list_table->views(); ?>
 440  
 441  <form action="" method="get">
 442  
 443  <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?>
 444  
 445  <?php $wp_list_table->display(); ?>
 446  </form>
 447  
 448  <br class="clear" />
 449  </div>
 450  <?php
 451  break;
 452  
 453  } // end of the $doaction switch
 454  
 455  include ('./admin-footer.php');

title

Description

title

Description

title

Description

title

title

Body