[ Index ]

PHP Cross Reference of Wordpress 2.9.1

title

Body

[close]

/wp-admin/includes/ -> user.php (source)

   1  <?php
   2  /**
   3   * WordPress user administration API.
   4   *
   5   * @package WordPress
   6   * @subpackage Administration
   7   */
   8  
   9  /**
  10   * Creates a new user from the "Users" form using $_POST information.
  11   *
  12   * It seems that the first half is for backwards compatibility, but only
  13   * has the ability to alter the user's role. WordPress core seems to
  14   * use this function only in the second way, running edit_user() with
  15   * no id so as to create a new user.
  16   *
  17   * @since 2.0
  18   *
  19   * @param int $user_id Optional. User ID.
  20   * @return null|WP_Error|int Null when adding user, WP_Error or User ID integer when no parameters.
  21   */
  22  function add_user() {
  23      if ( func_num_args() ) { // The hackiest hack that ever did hack
  24          global $current_user, $wp_roles;
  25          $user_id = (int) func_get_arg( 0 );
  26  
  27          if ( isset( $_POST['role'] ) ) {
  28              $new_role = sanitize_text_field( $_POST['role'] );
  29              // Don't let anyone with 'edit_users' (admins) edit their own role to something without it.
  30              if ( $user_id != $current_user->id || $wp_roles->role_objects[$new_role]->has_cap( 'edit_users' ) ) {
  31                  // If the new role isn't editable by the logged-in user die with error
  32                  $editable_roles = get_editable_roles();
  33                  if ( !$editable_roles[$new_role] )
  34                      wp_die(__('You can&#8217;t give users that role.'));
  35  
  36                  $user = new WP_User( $user_id );
  37                  $user->set_role( $new_role );
  38              }
  39          }
  40      } else {
  41          add_action( 'user_register', 'add_user' ); // See above
  42          return edit_user();
  43      }
  44  }
  45  
  46  /**
  47   * Edit user settings based on contents of $_POST
  48   *
  49   * Used on user-edit.php and profile.php to manage and process user options, passwords etc.
  50   *
  51   * @since 2.0
  52   *
  53   * @param int $user_id Optional. User ID.
  54   * @return int user id of the updated user
  55   */
  56  function edit_user( $user_id = 0 ) {
  57      global $current_user, $wp_roles, $wpdb;
  58      if ( $user_id != 0 ) {
  59          $update = true;
  60          $user->ID = (int) $user_id;
  61          $userdata = get_userdata( $user_id );
  62          $user->user_login = $wpdb->escape( $userdata->user_login );
  63      } else {
  64          $update = false;
  65          $user = '';
  66      }
  67  
  68      if ( !$update && isset( $_POST['user_login'] ) )
  69          $user->user_login = sanitize_user($_POST['user_login'], true);
  70  
  71      $pass1 = $pass2 = '';
  72      if ( isset( $_POST['pass1'] ))
  73          $pass1 = $_POST['pass1'];
  74      if ( isset( $_POST['pass2'] ))
  75          $pass2 = $_POST['pass2'];
  76  
  77      if ( isset( $_POST['role'] ) && current_user_can( 'edit_users' ) ) {
  78          $new_role = sanitize_text_field( $_POST['role'] );
  79          // Don't let anyone with 'edit_users' (admins) edit their own role to something without it.
  80          if( $user_id != $current_user->id || $wp_roles->role_objects[$new_role]->has_cap( 'edit_users' ))
  81              $user->role = $new_role;
  82  
  83          // If the new role isn't editable by the logged-in user die with error
  84          $editable_roles = get_editable_roles();
  85          if ( !$editable_roles[$new_role] )
  86              wp_die(__('You can&#8217;t give users that role.'));
  87      }
  88  
  89      if ( isset( $_POST['email'] ))
  90          $user->user_email = sanitize_text_field( $_POST['email'] );
  91      if ( isset( $_POST['url'] ) ) {
  92          if ( empty ( $_POST['url'] ) || $_POST['url'] == 'http://' ) {
  93              $user->user_url = '';
  94          } else {
  95              $user->user_url = sanitize_url( $_POST['url'] );
  96              $user->user_url = preg_match('/^(https?|ftps?|mailto|news|irc|gopher|nntp|feed|telnet):/is', $user->user_url) ? $user->user_url : 'http://'.$user->user_url;
  97          }
  98      }
  99      if ( isset( $_POST['first_name'] ) )
 100          $user->first_name = sanitize_text_field( $_POST['first_name'] );
 101      if ( isset( $_POST['last_name'] ) )
 102          $user->last_name = sanitize_text_field( $_POST['last_name'] );
 103      if ( isset( $_POST['nickname'] ) )
 104          $user->nickname = sanitize_text_field( $_POST['nickname'] );
 105      if ( isset( $_POST['display_name'] ) )
 106          $user->display_name = sanitize_text_field( $_POST['display_name'] );
 107  
 108      if ( isset( $_POST['description'] ) )
 109          $user->description = trim( $_POST['description'] );
 110  
 111      foreach ( _wp_get_user_contactmethods() as $method => $name ) {
 112          if ( isset( $_POST[$method] ))
 113              $user->$method = sanitize_text_field( $_POST[$method] );
 114      }
 115  
 116      if ( $update ) {
 117          $user->rich_editing = isset( $_POST['rich_editing'] ) && 'false' == $_POST['rich_editing'] ? 'false' : 'true';
 118          $user->admin_color = isset( $_POST['admin_color'] ) ? sanitize_text_field( $_POST['admin_color'] ) : 'fresh';
 119      }
 120  
 121      $user->comment_shortcuts = isset( $_POST['comment_shortcuts'] ) && 'true' == $_POST['comment_shortcuts'] ? 'true' : '';
 122  
 123      $user->use_ssl = 0;
 124      if ( !empty($_POST['use_ssl']) )
 125          $user->use_ssl = 1;
 126  
 127      $errors = new WP_Error();
 128  
 129      /* checking that username has been typed */
 130      if ( $user->user_login == '' )
 131          $errors->add( 'user_login', __( '<strong>ERROR</strong>: Please enter a username.' ));
 132  
 133      /* checking the password has been typed twice */
 134      do_action_ref_array( 'check_passwords', array ( $user->user_login, & $pass1, & $pass2 ));
 135  
 136      if ( $update ) {
 137          if ( empty($pass1) && !empty($pass2) )
 138              $errors->add( 'pass', __( '<strong>ERROR</strong>: You entered your new password only once.' ), array( 'form-field' => 'pass1' ) );
 139          elseif ( !empty($pass1) && empty($pass2) )
 140              $errors->add( 'pass', __( '<strong>ERROR</strong>: You entered your new password only once.' ), array( 'form-field' => 'pass2' ) );
 141      } else {
 142          if ( empty($pass1) )
 143              $errors->add( 'pass', __( '<strong>ERROR</strong>: Please enter your password.' ), array( 'form-field' => 'pass1' ) );
 144          elseif ( empty($pass2) )
 145              $errors->add( 'pass', __( '<strong>ERROR</strong>: Please enter your password twice.' ), array( 'form-field' => 'pass2' ) );
 146      }
 147  
 148      /* Check for "\" in password */
 149      if ( false !== strpos( stripslashes($pass1), "\\" ) )
 150          $errors->add( 'pass', __( '<strong>ERROR</strong>: Passwords may not contain the character "\\".' ), array( 'form-field' => 'pass1' ) );
 151  
 152      /* checking the password has been typed twice the same */
 153      if ( $pass1 != $pass2 )
 154          $errors->add( 'pass', __( '<strong>ERROR</strong>: Please enter the same password in the two password fields.' ), array( 'form-field' => 'pass1' ) );
 155  
 156      if ( !empty( $pass1 ) )
 157          $user->user_pass = $pass1;
 158  
 159      if ( !$update && !validate_username( $user->user_login ) )
 160          $errors->add( 'user_login', __( '<strong>ERROR</strong>: This username is invalid. Please enter a valid username.' ));
 161  
 162      if ( !$update && username_exists( $user->user_login ) )
 163          $errors->add( 'user_login', __( '<strong>ERROR</strong>: This username is already registered. Please choose another one.' ));
 164  
 165      /* checking e-mail address */
 166      if ( empty( $user->user_email ) ) {
 167          $errors->add( 'empty_email', __( '<strong>ERROR</strong>: Please enter an e-mail address.' ), array( 'form-field' => 'email' ) );
 168      } elseif ( !is_email( $user->user_email ) ) {
 169          $errors->add( 'invalid_email', __( '<strong>ERROR</strong>: The e-mail address isn&#8217;t correct.' ), array( 'form-field' => 'email' ) );
 170      } elseif ( ( $owner_id = email_exists($user->user_email) ) && $owner_id != $user->ID ) {
 171          $errors->add( 'email_exists', __('<strong>ERROR</strong>: This email is already registered, please choose another one.'), array( 'form-field' => 'email' ) );
 172      }
 173  
 174      // Allow plugins to return their own errors.
 175      do_action_ref_array('user_profile_update_errors', array ( &$errors, $update, &$user ) );
 176  
 177      if ( $errors->get_error_codes() )
 178          return $errors;
 179  
 180      if ( $update ) {
 181          $user_id = wp_update_user( get_object_vars( $user ) );
 182      } else {
 183          $user_id = wp_insert_user( get_object_vars( $user ) );
 184          wp_new_user_notification( $user_id, isset($_POST['send_password']) ? $pass1 : '' );
 185      }
 186      return $user_id;
 187  }
 188  
 189  /**
 190   * {@internal Missing Short Description}}
 191   *
 192   * {@internal Missing Long Description}}
 193   *
 194   * @since unknown
 195   *
 196   * @return array List of user IDs.
 197   */
 198  function get_author_user_ids() {
 199      global $wpdb;
 200      $level_key = $wpdb->prefix . 'user_level';
 201      return $wpdb->get_col( $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value != '0'", $level_key) );
 202  }
 203  
 204  /**
 205   * {@internal Missing Short Description}}
 206   *
 207   * {@internal Missing Long Description}}
 208   *
 209   * @since unknown
 210   *
 211   * @param int $user_id User ID.
 212   * @return array|bool List of editable authors. False if no editable users.
 213   */
 214  function get_editable_authors( $user_id ) {
 215      global $wpdb;
 216  
 217      $editable = get_editable_user_ids( $user_id );
 218  
 219      if( !$editable ) {
 220          return false;
 221      } else {
 222          $editable = join(',', $editable);
 223          $authors = $wpdb->get_results( "SELECT * FROM $wpdb->users WHERE ID IN ($editable) ORDER BY display_name" );
 224      }
 225  
 226      return apply_filters('get_editable_authors', $authors);
 227  }
 228  
 229  /**
 230   * {@internal Missing Short Description}}
 231   *
 232   * {@internal Missing Long Description}}
 233   *
 234   * @since unknown
 235   *
 236   * @param int $user_id User ID.
 237   * @param bool $exclude_zeros Optional, default is true. Whether to exclude zeros.
 238   * @return unknown
 239   */
 240  function get_editable_user_ids( $user_id, $exclude_zeros = true, $post_type = 'post' ) {
 241      global $wpdb;
 242  
 243      $user = new WP_User( $user_id );
 244  
 245      if ( ! $user->has_cap("edit_others_{$post_type}s") ) {
 246          if ( $user->has_cap("edit_{$post_type}s") || $exclude_zeros == false )
 247              return array($user->id);
 248          else
 249              return array();
 250      }
 251  
 252      $level_key = $wpdb->prefix . 'user_level';
 253  
 254      $query = $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s", $level_key);
 255      if ( $exclude_zeros )
 256          $query .= " AND meta_value != '0'";
 257  
 258      return $wpdb->get_col( $query );
 259  }
 260  
 261  /**
 262   * Fetch a filtered list of user roles that the current user is
 263   * allowed to edit.
 264   *
 265   * Simple function who's main purpose is to allow filtering of the
 266   * list of roles in the $wp_roles object so that plugins can remove
 267   * innappropriate ones depending on the situation or user making edits.
 268   * Specifically because without filtering anyone with the edit_users
 269   * capability can edit others to be administrators, even if they are
 270   * only editors or authors. This filter allows admins to delegate
 271   * user management.
 272   *
 273   * @since 2.8
 274   *
 275   * @return unknown
 276   */
 277  function get_editable_roles() {
 278      global $wp_roles;
 279  
 280      $all_roles = $wp_roles->roles;
 281      $editable_roles = apply_filters('editable_roles', $all_roles);
 282  
 283      return $editable_roles;
 284  }
 285  
 286  /**
 287   * {@internal Missing Short Description}}
 288   *
 289   * {@internal Missing Long Description}}
 290   *
 291   * @since unknown
 292   *
 293   * @return unknown
 294   */
 295  function get_nonauthor_user_ids() {
 296      global $wpdb;
 297      $level_key = $wpdb->prefix . 'user_level';
 298  
 299      return $wpdb->get_col( $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value = '0'", $level_key) );
 300  }
 301  
 302  /**
 303   * Retrieve editable posts from other users.
 304   *
 305   * @since unknown
 306   *
 307   * @param int $user_id User ID to not retrieve posts from.
 308   * @param string $type Optional, defaults to 'any'. Post type to retrieve, can be 'draft' or 'pending'.
 309   * @return array List of posts from others.
 310   */
 311  function get_others_unpublished_posts($user_id, $type='any') {
 312      global $wpdb;
 313  
 314      $editable = get_editable_user_ids( $user_id );
 315  
 316      if ( in_array($type, array('draft', 'pending')) )
 317          $type_sql = " post_status = '$type' ";
 318      else
 319          $type_sql = " ( post_status = 'draft' OR post_status = 'pending' ) ";
 320  
 321      $dir = ( 'pending' == $type ) ? 'ASC' : 'DESC';
 322  
 323      if( !$editable ) {
 324          $other_unpubs = '';
 325      } else {
 326          $editable = join(',', $editable);
 327          $other_unpubs = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_title, post_author FROM $wpdb->posts WHERE post_type = 'post' AND $type_sql AND post_author IN ($editable) AND post_author != %d ORDER BY post_modified $dir", $user_id) );
 328      }
 329  
 330      return apply_filters('get_others_drafts', $other_unpubs);
 331  }
 332  
 333  /**
 334   * Retrieve drafts from other users.
 335   *
 336   * @since unknown
 337   *
 338   * @param int $user_id User ID.
 339   * @return array List of drafts from other users.
 340   */
 341  function get_others_drafts($user_id) {
 342      return get_others_unpublished_posts($user_id, 'draft');
 343  }
 344  
 345  /**
 346   * Retrieve pending review posts from other users.
 347   *
 348   * @since unknown
 349   *
 350   * @param int $user_id User ID.
 351   * @return array List of posts with pending review post type from other users.
 352   */
 353  function get_others_pending($user_id) {
 354      return get_others_unpublished_posts($user_id, 'pending');
 355  }
 356  
 357  /**
 358   * Retrieve user data and filter it.
 359   *
 360   * @since unknown
 361   *
 362   * @param int $user_id User ID.
 363   * @return object WP_User object with user data.
 364   */
 365  function get_user_to_edit( $user_id ) {
 366      $user = new WP_User( $user_id );
 367  
 368      $user_contactmethods = _wp_get_user_contactmethods();
 369      foreach ($user_contactmethods as $method => $name) {
 370          if ( empty( $user->{$method} ) )
 371              $user->{$method} = '';
 372      }
 373  
 374      if ( empty($user->description) )
 375          $user->description = '';
 376  
 377      $user = sanitize_user_object($user, 'edit');
 378  
 379      return $user;
 380  }
 381  
 382  /**
 383   * Retrieve the user's drafts.
 384   *
 385   * @since unknown
 386   *
 387   * @param int $user_id User ID.
 388   * @return array
 389   */
 390  function get_users_drafts( $user_id ) {
 391      global $wpdb;
 392      $query = $wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'draft' AND post_author = %d ORDER BY post_modified DESC", $user_id);
 393      $query = apply_filters('get_users_drafts', $query);
 394      return $wpdb->get_results( $query );
 395  }
 396  
 397  /**
 398   * Remove user and optionally reassign posts and links to another user.
 399   *
 400   * If the $reassign parameter is not assigned to an User ID, then all posts will
 401   * be deleted of that user. The action 'delete_user' that is passed the User ID
 402   * being deleted will be run after the posts are either reassigned or deleted.
 403   * The user meta will also be deleted that are for that User ID.
 404   *
 405   * @since unknown
 406   *
 407   * @param int $id User ID.
 408   * @param int $reassign Optional. Reassign posts and links to new User ID.
 409   * @return bool True when finished.
 410   */
 411  function wp_delete_user($id, $reassign = 'novalue') {
 412      global $wpdb;
 413  
 414      $id = (int) $id;
 415      $user = new WP_User($id);
 416  
 417      // allow for transaction statement
 418      do_action('delete_user', $id);
 419  
 420      if ($reassign == 'novalue') {
 421          $post_ids = $wpdb->get_col( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_author = %d", $id) );
 422  
 423          if ($post_ids) {
 424              foreach ($post_ids as $post_id)
 425                  wp_delete_post($post_id);
 426          }
 427  
 428          // Clean links
 429          $link_ids = $wpdb->get_col( $wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_owner = %d", $id) );
 430  
 431          if ( $link_ids ) {
 432              foreach ( $link_ids as $link_id )
 433                  wp_delete_link($link_id);
 434          }
 435  
 436      } else {
 437          $reassign = (int) $reassign;
 438          $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_author = %d WHERE post_author = %d", $reassign, $id) );
 439          $wpdb->query( $wpdb->prepare("UPDATE $wpdb->links SET link_owner = %d WHERE link_owner = %d", $reassign, $id) );
 440      }
 441  
 442      // FINALLY, delete user
 443  
 444      $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d", $id) );
 445      $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->users WHERE ID = %d", $id) );
 446  
 447      wp_cache_delete($id, 'users');
 448      wp_cache_delete($user->user_login, 'userlogins');
 449      wp_cache_delete($user->user_email, 'useremail');
 450      wp_cache_delete($user->user_nicename, 'userslugs');
 451  
 452      // allow for commit transaction
 453      do_action('deleted_user', $id);
 454  
 455      return true;
 456  }
 457  
 458  /**
 459   * Remove all capabilities from user.
 460   *
 461   * @since unknown
 462   *
 463   * @param int $id User ID.
 464   */
 465  function wp_revoke_user($id) {
 466      $id = (int) $id;
 467  
 468      $user = new WP_User($id);
 469      $user->remove_all_caps();
 470  }
 471  
 472  if ( !class_exists('WP_User_Search') ) :
 473  /**
 474   * WordPress User Search class.
 475   *
 476   * @since unknown
 477   * @author Mark Jaquith
 478   */
 479  class WP_User_Search {
 480  
 481      /**
 482       * {@internal Missing Description}}
 483       *
 484       * @since unknown
 485       * @access private
 486       * @var unknown_type
 487       */
 488      var $results;
 489  
 490      /**
 491       * {@internal Missing Description}}
 492       *
 493       * @since unknown
 494       * @access private
 495       * @var unknown_type
 496       */
 497      var $search_term;
 498  
 499      /**
 500       * Page number.
 501       *
 502       * @since unknown
 503       * @access private
 504       * @var int
 505       */
 506      var $page;
 507  
 508      /**
 509       * Role name that users have.
 510       *
 511       * @since unknown
 512       * @access private
 513       * @var string
 514       */
 515      var $role;
 516  
 517      /**
 518       * Raw page number.
 519       *
 520       * @since unknown
 521       * @access private
 522       * @var int|bool
 523       */
 524      var $raw_page;
 525  
 526      /**
 527       * Amount of users to display per page.
 528       *
 529       * @since unknown
 530       * @access public
 531       * @var int
 532       */
 533      var $users_per_page = 50;
 534  
 535      /**
 536       * {@internal Missing Description}}
 537       *
 538       * @since unknown
 539       * @access private
 540       * @var unknown_type
 541       */
 542      var $first_user;
 543  
 544      /**
 545       * {@internal Missing Description}}
 546       *
 547       * @since unknown
 548       * @access private
 549       * @var int
 550       */
 551      var $last_user;
 552  
 553      /**
 554       * {@internal Missing Description}}
 555       *
 556       * @since unknown
 557       * @access private
 558       * @var unknown_type
 559       */
 560      var $query_limit;
 561  
 562      /**
 563       * {@internal Missing Description}}
 564       *
 565       * @since unknown
 566       * @access private
 567       * @var unknown_type
 568       */
 569      var $query_sort;
 570  
 571      /**
 572       * {@internal Missing Description}}
 573       *
 574       * @since unknown
 575       * @access private
 576       * @var unknown_type
 577       */
 578      var $query_from_where;
 579  
 580      /**
 581       * {@internal Missing Description}}
 582       *
 583       * @since unknown
 584       * @access private
 585       * @var int
 586       */
 587      var $total_users_for_query = 0;
 588  
 589      /**
 590       * {@internal Missing Description}}
 591       *
 592       * @since unknown
 593       * @access private
 594       * @var bool
 595       */
 596      var $too_many_total_users = false;
 597  
 598      /**
 599       * {@internal Missing Description}}
 600       *
 601       * @since unknown
 602       * @access private
 603       * @var unknown_type
 604       */
 605      var $search_errors;
 606  
 607      /**
 608       * {@internal Missing Description}}
 609       *
 610       * @since unknown
 611       * @access private
 612       * @var unknown_type
 613       */
 614      var $paging_text;
 615  
 616      /**
 617       * PHP4 Constructor - Sets up the object properties.
 618       *
 619       * @since unknown
 620       *
 621       * @param string $search_term Search terms string.
 622       * @param int $page Optional. Page ID.
 623       * @param string $role Role name.
 624       * @return WP_User_Search
 625       */
 626  	function WP_User_Search ($search_term = '', $page = '', $role = '') {
 627          $this->search_term = $search_term;
 628          $this->raw_page = ( '' == $page ) ? false : (int) $page;
 629          $this->page = (int) ( '' == $page ) ? 1 : $page;
 630          $this->role = $role;
 631  
 632          $this->prepare_query();
 633          $this->query();
 634          $this->prepare_vars_for_template_usage();
 635          $this->do_paging();
 636      }
 637  
 638      /**
 639       * {@internal Missing Short Description}}
 640       *
 641       * {@internal Missing Long Description}}
 642       *
 643       * @since unknown
 644       * @access public
 645       */
 646  	function prepare_query() {
 647          global $wpdb;
 648          $this->first_user = ($this->page - 1) * $this->users_per_page;
 649          $this->query_limit = $wpdb->prepare(" LIMIT %d, %d", $this->first_user, $this->users_per_page);
 650          $this->query_sort = ' ORDER BY user_login';
 651          $search_sql = '';
 652          if ( $this->search_term ) {
 653              $searches = array();
 654              $search_sql = 'AND (';
 655              foreach ( array('user_login', 'user_nicename', 'user_email', 'user_url', 'display_name') as $col )
 656                  $searches[] = $col . " LIKE '%$this->search_term%'";
 657              $search_sql .= implode(' OR ', $searches);
 658              $search_sql .= ')';
 659          }
 660  
 661          $this->query_from_where = "FROM $wpdb->users";
 662          if ( $this->role )
 663              $this->query_from_where .= $wpdb->prepare(" INNER JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id WHERE $wpdb->usermeta.meta_key = '{$wpdb->prefix}capabilities' AND $wpdb->usermeta.meta_value LIKE %s", '%' . $this->role . '%');
 664          else
 665              $this->query_from_where .= " WHERE 1=1";
 666          $this->query_from_where .= " $search_sql";
 667  
 668      }
 669  
 670      /**
 671       * {@internal Missing Short Description}}
 672       *
 673       * {@internal Missing Long Description}}
 674       *
 675       * @since unknown
 676       * @access public
 677       */
 678  	function query() {
 679          global $wpdb;
 680          $this->results = $wpdb->get_col('SELECT ID ' . $this->query_from_where . $this->query_sort . $this->query_limit);
 681  
 682          if ( $this->results )
 683              $this->total_users_for_query = $wpdb->get_var('SELECT COUNT(ID) ' . $this->query_from_where); // no limit
 684          else
 685              $this->search_errors = new WP_Error('no_matching_users_found', __('No matching users were found!'));
 686      }
 687  
 688      /**
 689       * {@internal Missing Short Description}}
 690       *
 691       * {@internal Missing Long Description}}
 692       *
 693       * @since unknown
 694       * @access public
 695       */
 696  	function prepare_vars_for_template_usage() {
 697          $this->search_term = stripslashes($this->search_term); // done with DB, from now on we want slashes gone
 698      }
 699  
 700      /**
 701       * {@internal Missing Short Description}}
 702       *
 703       * {@internal Missing Long Description}}
 704       *
 705       * @since unknown
 706       * @access public
 707       */
 708  	function do_paging() {
 709          if ( $this->total_users_for_query > $this->users_per_page ) { // have to page the results
 710              $args = array();
 711              if( ! empty($this->search_term) )
 712                  $args['usersearch'] = urlencode($this->search_term);
 713              if( ! empty($this->role) )
 714                  $args['role'] = urlencode($this->role);
 715  
 716              $this->paging_text = paginate_links( array(
 717                  'total' => ceil($this->total_users_for_query / $this->users_per_page),
 718                  'current' => $this->page,
 719                  'base' => 'users.php?%_%',
 720                  'format' => 'userspage=%#%',
 721                  'add_args' => $args
 722              ) );
 723              if ( $this->paging_text ) {
 724                  $this->paging_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%s',
 725                      number_format_i18n( ( $this->page - 1 ) * $this->users_per_page + 1 ),
 726                      number_format_i18n( min( $this->page * $this->users_per_page, $this->total_users_for_query ) ),
 727                      number_format_i18n( $this->total_users_for_query ),
 728                      $this->paging_text
 729                  );
 730              }
 731          }
 732      }
 733  
 734      /**
 735       * {@internal Missing Short Description}}
 736       *
 737       * {@internal Missing Long Description}}
 738       *
 739       * @since unknown
 740       * @access public
 741       *
 742       * @return unknown
 743       */
 744  	function get_results() {
 745          return (array) $this->results;
 746      }
 747  
 748      /**
 749       * Displaying paging text.
 750       *
 751       * @see do_paging() Builds paging text.
 752       *
 753       * @since unknown
 754       * @access public
 755       */
 756  	function page_links() {
 757          echo $this->paging_text;
 758      }
 759  
 760      /**
 761       * Whether paging is enabled.
 762       *
 763       * @see do_paging() Builds paging text.
 764       *
 765       * @since unknown
 766       * @access public
 767       *
 768       * @return bool
 769       */
 770  	function results_are_paged() {
 771          if ( $this->paging_text )
 772              return true;
 773          return false;
 774      }
 775  
 776      /**
 777       * Whether there are search terms.
 778       *
 779       * @since unknown
 780       * @access public
 781       *
 782       * @return bool
 783       */
 784  	function is_search() {
 785          if ( $this->search_term )
 786              return true;
 787          return false;
 788      }
 789  }
 790  endif;
 791  
 792  add_action('admin_init', 'default_password_nag_handler');
 793  function default_password_nag_handler($errors = false) {
 794      global $user_ID;
 795      if ( ! get_usermeta($user_ID, 'default_password_nag') ) //Short circuit it.
 796          return;
 797  
 798      //get_user_setting = JS saved UI setting. else no-js-falback code.
 799      if ( 'hide' == get_user_setting('default_password_nag') || isset($_GET['default_password_nag']) && '0' == $_GET['default_password_nag'] ) {
 800          delete_user_setting('default_password_nag');
 801          update_usermeta($user_ID, 'default_password_nag', false);
 802      }
 803  }
 804  
 805  add_action('profile_update', 'default_password_nag_edit_user', 10, 2);
 806  function default_password_nag_edit_user($user_ID, $old_data) {
 807      global $user_ID;
 808      if ( ! get_usermeta($user_ID, 'default_password_nag') ) //Short circuit it.
 809          return;
 810  
 811      $new_data = get_userdata($user_ID);
 812  
 813      if ( $new_data->user_pass != $old_data->user_pass ) { //Remove the nag if the password has been changed.
 814          delete_user_setting('default_password_nag');
 815          update_usermeta($user_ID, 'default_password_nag', false);
 816      }
 817  }
 818  
 819  add_action('admin_notices', 'default_password_nag');
 820  function default_password_nag() {
 821      global $user_ID;
 822      if ( ! get_usermeta($user_ID, 'default_password_nag') )
 823          return;
 824  
 825      echo '<div class="error default-password-nag"><p>';
 826      printf(__("Notice: you're using the auto-generated password for your account. Would you like to change it to something you'll remember easier?<br />
 827                <a href='%s'>Yes, Take me to my profile page</a> | <a href='%s' id='default-password-nag-no'>No Thanks, Do not remind me again.</a>"), admin_url('profile.php') . '#password', '?default_password_nag=0');
 828      echo '</p></div>';
 829  }
 830  
 831  ?>


Generated: Fri Jan 8 00:19:48 2010 Cross-referenced by PHPXref 0.7