[ Index ]

PHP Cross Reference of WordPress 3.0 beta 1

[ Index ]     [ Variables ]     [ Functions ]     [ Classes ]     [ Constants ]     [ Statistics ]

title

Body

[close]

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

   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  /** WordPress Registration API */
  13  require_once( ABSPATH . WPINC . '/registration.php');
  14  
  15  if ( !current_user_can('edit_users') )
  16      wp_die(__('Cheatin&#8217; uh?'));
  17  
  18  $del_cap_type = 'remove';
  19  if ( !is_multisite() && current_user_can('delete_users') )
  20      $del_cap_type = 'delete';
  21  
  22  $title = __('Users');
  23  $parent_file = 'users.php';
  24  
  25  $update = $doaction = '';
  26  if ( isset($_REQUEST['action']) )
  27      $doaction = $_REQUEST['action'] ? $_REQUEST['action'] : $_REQUEST['action2'];
  28  
  29  if ( empty($doaction) ) {
  30      if ( isset($_GET['changeit']) && !empty($_GET['new_role']) )
  31          $doaction = 'promote';
  32  }
  33  
  34  if ( empty($_REQUEST) ) {
  35      $referer = '<input type="hidden" name="wp_http_referer" value="'. esc_attr(stripslashes($_SERVER['REQUEST_URI'])) . '" />';
  36  } elseif ( isset($_REQUEST['wp_http_referer']) ) {
  37      $redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), stripslashes($_REQUEST['wp_http_referer']));
  38      $referer = '<input type="hidden" name="wp_http_referer" value="' . esc_attr($redirect) . '" />';
  39  } else {
  40      $redirect = 'users.php';
  41      $referer = '';
  42  }
  43  
  44  switch ($doaction) {
  45  
  46  /* Bulk Dropdown menu Role changes */
  47  case 'promote':
  48      check_admin_referer('bulk-users');
  49  
  50      if ( empty($_REQUEST['users']) ) {
  51          wp_redirect($redirect);
  52          exit();
  53      }
  54  
  55      $editable_roles = get_editable_roles();
  56      if ( !$editable_roles[$_REQUEST['new_role']] )
  57          wp_die(__('You can&#8217;t give users that role.'));
  58  
  59      $userids = $_REQUEST['users'];
  60      $update = 'promote';
  61      foreach ( $userids as $id ) {
  62          if ( ! current_user_can('edit_user', $id) )
  63              wp_die(__('You can&#8217;t edit that user.'));
  64          // The new role of the current user must also have edit_users caps
  65          if ( $id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST['new_role']]->has_cap('edit_users') ) {
  66              $update = 'err_admin_role';
  67              continue;
  68          }
  69  
  70          $user = new WP_User($id);
  71          $user->set_role($_REQUEST['new_role']);
  72      }
  73  
  74      wp_redirect(add_query_arg('update', $update, $redirect));
  75      exit();
  76  
  77  break;
  78  
  79  case 'dodelete':
  80  
  81      check_admin_referer('delete-users');
  82  
  83      if ( empty($_REQUEST['users']) ) {
  84          wp_redirect($redirect);
  85          exit();
  86      }
  87  
  88      if ( !current_user_can($del_cap_type . '_users') )
  89          wp_die(__('You can&#8217;t delete users.'));
  90  
  91      $userids = $_REQUEST['users'];
  92      $update = 'del';
  93      $delete_count = 0;
  94  
  95      foreach ( (array) $userids as $id) {
  96          if ( ! current_user_can($del_cap_type . '_user', $id) )
  97              wp_die(__('You can&#8217;t delete that user.'));
  98  
  99          if ( $id == $current_user->ID ) {
 100              $update = 'err_admin_del';
 101              continue;
 102          }
 103          switch ( $_REQUEST['delete_option'] ) {
 104          case 'delete':
 105              if ( !is_multisite() && current_user_can('delete_user', $id) )
 106                  wp_delete_user($id);
 107              else
 108                  remove_user_from_blog($id, $blog_id); // WPMU only remove user from blog
 109              break;
 110          case 'reassign':
 111              if ( !is_multisite() && current_user_can('delete_user', $id) )
 112                  wp_delete_user($id, $_REQUEST['reassign_user']);
 113              else
 114                  remove_user_from_blog($id, $blog_id, $_REQUEST['reassign_user']);
 115              break;
 116          }
 117          ++$delete_count;
 118      }
 119  
 120      $redirect = add_query_arg( array('delete_count' => $delete_count, 'update' => $update), $redirect);
 121      wp_redirect($redirect);
 122      exit();
 123  
 124  break;
 125  
 126  case 'delete':
 127  
 128      check_admin_referer('bulk-users');
 129  
 130      if ( empty($_REQUEST['users']) && empty($_REQUEST['user']) ) {
 131          wp_redirect($redirect);
 132          exit();
 133      }
 134  
 135      if ( !current_user_can($del_cap_type . '_users') )
 136          $errors = new WP_Error('edit_users', __('You can&#8217;t delete users.'));
 137  
 138      if ( empty($_REQUEST['users']) )
 139          $userids = array(intval($_REQUEST['user']));
 140      else
 141          $userids = $_REQUEST['users'];
 142  
 143      include  ('admin-header.php');
 144  ?>
 145  <form action="" method="post" name="updateusers" id="updateusers">
 146  <?php wp_nonce_field('delete-users') ?>
 147  <?php echo $referer; ?>
 148  
 149  <div class="wrap">
 150  <?php screen_icon(); ?>
 151  <h2><?php _e('Delete Users'); ?></h2>
 152  <p><?php _e('You have specified these users for deletion:'); ?></p>
 153  <ul>
 154  <?php
 155      $go_delete = false;
 156      foreach ( (array) $userids as $id ) {
 157          $id = (int) $id;
 158          $user = new WP_User($id);
 159          if ( $id == $current_user->ID ) {
 160              echo "<li>" . sprintf(__('ID #%1s: %2s <strong>The current user will not be deleted.</strong>'), $id, $user->user_login) . "</li>\n";
 161          } else {
 162              echo "<li><input type=\"hidden\" name=\"users[]\" value=\"" . esc_attr($id) . "\" />" . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "</li>\n";
 163              $go_delete = true;
 164          }
 165      }
 166      if ( !is_multisite() ) {
 167          $all_logins = $wpdb->get_results("SELECT ID, user_login FROM $wpdb->users ORDER BY user_login");
 168      } else {
 169          // WPMU only searches users of current blog
 170          $all_logins = $wpdb->get_results("SELECT ID, user_login FROM $wpdb->users, $wpdb->usermeta WHERE $wpdb->users.ID = $wpdb->usermeta.user_id AND meta_key = '".$wpdb->prefix."capabilities' ORDER BY user_login");
 171      }
 172      $user_dropdown = '<select name="reassign_user">';
 173      foreach ( (array) $all_logins as $login )
 174          if ( $login->ID == $current_user->ID || !in_array($login->ID, $userids) )
 175              $user_dropdown .= "<option value=\"" . esc_attr($login->ID) . "\">{$login->user_login}</option>";
 176      $user_dropdown .= '</select>';
 177      ?>
 178      </ul>
 179  <?php if ( $go_delete ) : ?>
 180      <fieldset><p><legend><?php _e('What should be done with posts and links owned by this user?'); ?></legend></p>
 181      <ul style="list-style:none;">
 182          <li><label><input type="radio" id="delete_option0" name="delete_option" value="delete" checked="checked" />
 183          <?php _e('Delete all posts and links.'); ?></label></li>
 184          <li><input type="radio" id="delete_option1" name="delete_option" value="reassign" />
 185          <?php echo '<label for="delete_option1">'.__('Attribute all posts and links to:')."</label> $user_dropdown"; ?></li>
 186      </ul></fieldset>
 187      <input type="hidden" name="action" value="dodelete" />
 188      <p class="submit"><input type="submit" name="submit" value="<?php esc_attr_e('Confirm Deletion'); ?>" class="button-secondary" /></p>
 189  <?php else : ?>
 190      <p><?php _e('There are no valid users selected for deletion.'); ?></p>
 191  <?php endif; ?>
 192  </div>
 193  </form>
 194  <?php
 195  
 196  break;
 197  
 198  default:
 199  
 200      if ( !empty($_GET['_wp_http_referer']) ) {
 201          wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI'])));
 202          exit;
 203      }
 204  
 205      include ('admin-header.php');
 206  
 207      $usersearch = isset($_GET['usersearch']) ? $_GET['usersearch'] : null;
 208      $userspage = isset($_GET['userspage']) ? $_GET['userspage'] : null;
 209      $role = isset($_GET['role']) ? $_GET['role'] : null;
 210  
 211      // Query the user IDs for this page
 212      $wp_user_search = new WP_User_Search($usersearch, $userspage, $role);
 213  
 214      // Query the post counts for this page
 215      $post_counts = count_many_users_posts($wp_user_search->get_results());
 216  
 217      // Query the users for this page
 218      cache_users($wp_user_search->get_results());
 219  
 220      $messages = array();
 221      if ( isset($_GET['update']) ) :
 222          switch($_GET['update']) {
 223          case 'del':
 224          case 'del_many':
 225              $delete_count = isset($_GET['delete_count']) ? (int) $_GET['delete_count'] : 0;
 226              $messages[] = '<div id="message" class="updated"><p>' . sprintf(_n('%s user deleted', '%s users deleted', $delete_count), $delete_count) . '</p></div>';
 227              break;
 228          case 'add':
 229              $messages[] = '<div id="message" class="updated"><p>' . __('New user created.') . '</p></div>';
 230              break;
 231          case 'promote':
 232              $messages[] = '<div id="message" class="updated"><p>' . __('Changed roles.') . '</p></div>';
 233              break;
 234          case 'err_admin_role':
 235              $messages[] = '<div id="message" class="error"><p>' . __('The current user&#8217;s role must have user editing capabilities.') . '</p></div>';
 236              $messages[] = '<div id="message" class="updated"><p>' . __('Other user roles have been changed.') . '</p></div>';
 237              break;
 238          case 'err_admin_del':
 239              $messages[] = '<div id="message" class="error"><p>' . __('You can&#8217;t delete the current user.') . '</p></div>';
 240              $messages[] = '<div id="message" class="updated"><p>' . __('Other users have been deleted.') . '</p></div>';
 241              break;
 242          }
 243      endif; ?>
 244  
 245  <?php if ( isset($errors) && is_wp_error( $errors ) ) : ?>
 246      <div class="error">
 247          <ul>
 248          <?php
 249              foreach ( $errors->get_error_messages() as $err )
 250                  echo "<li>$err</li>\n";
 251          ?>
 252          </ul>
 253      </div>
 254  <?php endif;
 255  
 256  if ( ! empty($messages) ) {
 257      foreach ( $messages as $msg )
 258          echo $msg;
 259  } ?>
 260  
 261  <div class="wrap">
 262  <?php screen_icon(); ?>
 263  <h2><?php echo esc_html( $title ); if ( current_user_can( 'create_users' ) ) { ?>  <a href="user-new.php" class="button add-new-h2"><?php echo esc_html_x('Add New', 'user'); ?></a><?php }
 264  if ( isset($_GET['usersearch']) && $_GET['usersearch'] )
 265      printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( $_GET['usersearch'] ) ); ?>
 266  </h2>
 267  
 268  <div class="filter">
 269  <form id="list-filter" action="" method="get">
 270  <ul class="subsubsub">
 271  <?php
 272  $users_of_blog = count_users();
 273  $total_users = $users_of_blog['total_users'];
 274  $avail_roles =& $users_of_blog['avail_roles'];
 275  unset($users_of_blog);
 276  
 277  $current_role = false;
 278  $class = empty($role) ? ' class="current"' : '';
 279  $role_links = array();
 280  $role_links[] = "<li><a href='users.php'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_users, 'users' ), number_format_i18n( $total_users ) ) . '</a>';
 281  foreach ( $wp_roles->get_names() as $this_role => $name ) {
 282      if ( !isset($avail_roles[$this_role]) )
 283          continue;
 284  
 285      $class = '';
 286  
 287      if ( $this_role == $role ) {
 288          $current_role = $role;
 289          $class = ' class="current"';
 290      }
 291  
 292      $name = translate_user_role( $name );
 293      /* translators: User role name with count */
 294      $name = sprintf( __('%1$s <span class="count">(%2$s)</span>'), $name, $avail_roles[$this_role] );
 295      $role_links[] = "<li><a href='users.php?role=$this_role'$class>$name</a>";
 296  }
 297  echo implode( " |</li>\n", $role_links) . '</li>';
 298  unset($role_links);
 299  ?>
 300  </ul>
 301  </form>
 302  </div>
 303  
 304  <form class="search-form" action="" method="get">
 305  <p class="search-box">
 306      <label class="screen-reader-text" for="user-search-input"><?php _e( 'Search Users' ); ?>:</label>
 307      <input type="text" id="user-search-input" name="usersearch" value="<?php echo esc_attr($wp_user_search->search_term); ?>" />
 308      <input type="submit" value="<?php esc_attr_e( 'Search Users' ); ?>" class="button" />
 309  </p>
 310  </form>
 311  
 312  <form id="posts-filter" action="" method="get">
 313  <div class="tablenav">
 314  
 315  <?php if ( $wp_user_search->results_are_paged() ) : ?>
 316      <div class="tablenav-pages"><?php $wp_user_search->page_links(); ?></div>
 317  <?php endif; ?>
 318  
 319  <div class="alignleft actions">
 320  <select name="action">
 321  <option value="" selected="selected"><?php _e('Bulk Actions'); ?></option>
 322  <option value="delete"><?php _e('Delete'); ?></option>
 323  </select>
 324  <input type="submit" value="<?php esc_attr_e('Apply'); ?>" name="doaction" id="doaction" class="button-secondary action" />
 325  <label class="screen-reader-text" for="new_role"><?php _e('Change role to&hellip;') ?></label><select name="new_role" id="new_role"><option value=''><?php _e('Change role to&hellip;') ?></option><?php wp_dropdown_roles(); ?></select>
 326  <input type="submit" value="<?php esc_attr_e('Change'); ?>" name="changeit" class="button-secondary" />
 327  <?php wp_nonce_field('bulk-users'); ?>
 328  </div>
 329  
 330  <br class="clear" />
 331  </div>
 332  
 333      <?php if ( is_wp_error( $wp_user_search->search_errors ) ) : ?>
 334          <div class="error">
 335              <ul>
 336              <?php
 337                  foreach ( $wp_user_search->search_errors->get_error_messages() as $message )
 338                      echo "<li>$message</li>";
 339              ?>
 340              </ul>
 341          </div>
 342      <?php endif; ?>
 343  
 344  
 345  <?php if ( $wp_user_search->get_results() ) : ?>
 346  
 347      <?php if ( $wp_user_search->is_search() ) : ?>
 348          <p><a href="users.php"><?php _e('&larr; Back to All Users'); ?></a></p>
 349      <?php endif; ?>
 350  
 351  <table class="widefat fixed" cellspacing="0">
 352  <thead>
 353  <tr class="thead">
 354  <?php print_column_headers('users') ?>
 355  </tr>
 356  </thead>
 357  
 358  <tfoot>
 359  <tr class="thead">
 360  <?php print_column_headers('users', false) ?>
 361  </tr>
 362  </tfoot>
 363  
 364  <tbody id="users" class="list:user user-list">
 365  <?php
 366  $style = '';
 367  foreach ( $wp_user_search->get_results() as $userid ) {
 368      $user_object = new WP_User($userid);
 369      $roles = $user_object->roles;
 370      $role = array_shift($roles);
 371  
 372      if ( is_multisite() && empty( $role ) )
 373          continue;
 374  
 375      $style = ( ' class="alternate"' == $style ) ? '' : ' class="alternate"';
 376      echo "\n\t", user_row( $user_object, $style, $role, $post_counts[ $userid ] );
 377  }
 378  ?>
 379  </tbody>
 380  </table>
 381  
 382  <div class="tablenav">
 383  
 384  <?php if ( $wp_user_search->results_are_paged() ) : ?>
 385      <div class="tablenav-pages"><?php $wp_user_search->page_links(); ?></div>
 386  <?php endif; ?>
 387  
 388  <div class="alignleft actions">
 389  <select name="action2">
 390  <option value="" selected="selected"><?php _e('Bulk Actions'); ?></option>
 391  <option value="delete"><?php _e('Delete'); ?></option>
 392  </select>
 393  <input type="submit" value="<?php esc_attr_e('Apply'); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
 394  </div>
 395  
 396  <br class="clear" />
 397  </div>
 398  
 399  <?php endif; ?>
 400  
 401  </form>
 402  </div>
 403  
 404  <?php
 405  if ( is_multisite() ) {
 406      foreach ( array('user_login' => 'user_login', 'first_name' => 'user_firstname', 'last_name' => 'user_lastname', 'email' => 'user_email', 'url' => 'user_uri', 'role' => 'user_role') as $formpost => $var ) {
 407          $var = 'new_' . $var;
 408          $$var = isset($_REQUEST[$formpost]) ? esc_attr(stripslashes($_REQUEST[$formpost])) : '';
 409      }
 410      unset($name);
 411  }
 412  ?>
 413  
 414  <br class="clear" />
 415  <?php
 416  break;
 417  
 418  } // end of the $doaction switch
 419  
 420  include ('admin-footer.php');
 421  ?>


Generated: Mon Apr 5 14:26:09 2010 Cross-referenced by PHPXref 0.7