Make WordPress Core


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/user.php

    r15452 r17032  
    5656function edit_user( $user_id = 0 ) {
    5757    global $wp_roles, $wpdb;
    58     if ( $user_id != 0 ) {
     58    $user = new stdClass;
     59    if ( $user_id ) {
    5960        $update = true;
    6061        $user->ID = (int) $user_id;
     
    6364    } else {
    6465        $update = false;
    65         $user = '';
    6666    }
    6767
     
    111111        $user->description = trim( $_POST['description'] );
    112112
    113     foreach ( _wp_get_user_contactmethods() as $method => $name ) {
     113    foreach ( _wp_get_user_contactmethods( $user ) as $method => $name ) {
    114114        if ( isset( $_POST[$method] ))
    115115            $user->$method = sanitize_text_field( $_POST[$method] );
     
    119119        $user->rich_editing = isset( $_POST['rich_editing'] ) && 'false' == $_POST['rich_editing'] ? 'false' : 'true';
    120120        $user->admin_color = isset( $_POST['admin_color'] ) ? sanitize_text_field( $_POST['admin_color'] ) : 'fresh';
     121        $user->show_admin_bar_front = isset( $_POST['admin_bar_front'] ) ? 'true' : 'false';
     122        $user->show_admin_bar_admin = isset( $_POST['admin_bar_admin'] ) ? 'true' : 'false';
    121123    }
    122124
     
    170172    } elseif ( !is_email( $user->user_email ) ) {
    171173        $errors->add( 'invalid_email', __( '<strong>ERROR</strong>: The e-mail address isn&#8217;t correct.' ), array( 'form-field' => 'email' ) );
    172     } elseif ( ( $owner_id = email_exists($user->user_email) ) && $owner_id != $user->ID ) {
     174    } elseif ( ( $owner_id = email_exists($user->user_email) ) && ( !$update || ( $owner_id != $user->ID ) ) ) {
    173175        $errors->add( 'email_exists', __('<strong>ERROR</strong>: This email is already registered, please choose another one.'), array( 'form-field' => 'email' ) );
    174176    }
     
    187189    }
    188190    return $user_id;
    189 }
    190 
    191 /**
    192  * {@internal Missing Short Description}}
    193  *
    194  * {@internal Missing Long Description}}
    195  *
    196  * @since unknown
    197  *
    198  * @return array List of user IDs.
    199  */
    200 function get_author_user_ids() {
    201     global $wpdb;
    202     if ( !is_multisite() )
    203         $level_key = $wpdb->get_blog_prefix() . 'user_level';
    204     else
    205         $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels
    206 
    207     return $wpdb->get_col( $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value != '0'", $level_key) );
    208 }
    209 
    210 /**
    211  * {@internal Missing Short Description}}
    212  *
    213  * {@internal Missing Long Description}}
    214  *
    215  * @since unknown
    216  *
    217  * @param int $user_id User ID.
    218  * @return array|bool List of editable authors. False if no editable users.
    219  */
    220 function get_editable_authors( $user_id ) {
    221     global $wpdb;
    222 
    223     $editable = get_editable_user_ids( $user_id );
    224 
    225     if ( !$editable ) {
    226         return false;
    227     } else {
    228         $editable = join(',', $editable);
    229         $authors = $wpdb->get_results( "SELECT * FROM $wpdb->users WHERE ID IN ($editable) ORDER BY display_name" );
    230     }
    231 
    232     return apply_filters('get_editable_authors', $authors);
    233 }
    234 
    235 /**
    236  * {@internal Missing Short Description}}
    237  *
    238  * {@internal Missing Long Description}}
    239  *
    240  * @since unknown
    241  *
    242  * @param int $user_id User ID.
    243  * @param bool $exclude_zeros Optional, default is true. Whether to exclude zeros.
    244  * @return unknown
    245  */
    246 function get_editable_user_ids( $user_id, $exclude_zeros = true, $post_type = 'post' ) {
    247     global $wpdb;
    248 
    249     $user = new WP_User( $user_id );
    250     $post_type_obj = get_post_type_object($post_type);
    251 
    252     if ( ! $user->has_cap($post_type_obj->cap->edit_others_posts) ) {
    253         if ( $user->has_cap($post_type_obj->cap->edit_posts) || ! $exclude_zeros )
    254             return array($user->id);
    255         else
    256             return array();
    257     }
    258 
    259     if ( !is_multisite() )
    260         $level_key = $wpdb->get_blog_prefix() . 'user_level';
    261     else
    262         $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels
    263 
    264     $query = $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s", $level_key);
    265     if ( $exclude_zeros )
    266         $query .= " AND meta_value != '0'";
    267 
    268     return $wpdb->get_col( $query );
    269191}
    270192
     
    295217
    296218/**
    297  * {@internal Missing Short Description}}
    298  *
    299  * {@internal Missing Long Description}}
    300  *
    301  * @since unknown
    302  *
    303  * @return unknown
    304  */
    305 function get_nonauthor_user_ids() {
    306     global $wpdb;
    307 
    308     if ( !is_multisite() )
    309         $level_key = $wpdb->get_blog_prefix() . 'user_level';
    310     else
    311         $level_key = $wpdb->get_blog_prefix() . 'capabilities'; // wpmu site admins don't have user_levels
    312 
    313     return $wpdb->get_col( $wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key = %s AND meta_value = '0'", $level_key) );
    314 }
    315 
    316 /**
    317  * Retrieve editable posts from other users.
    318  *
    319  * @since unknown
    320  *
    321  * @param int $user_id User ID to not retrieve posts from.
    322  * @param string $type Optional, defaults to 'any'. Post type to retrieve, can be 'draft' or 'pending'.
    323  * @return array List of posts from others.
    324  */
    325 function get_others_unpublished_posts($user_id, $type='any') {
    326     global $wpdb;
    327 
    328     $editable = get_editable_user_ids( $user_id );
    329 
    330     if ( in_array($type, array('draft', 'pending')) )
    331         $type_sql = " post_status = '$type' ";
    332     else
    333         $type_sql = " ( post_status = 'draft' OR post_status = 'pending' ) ";
    334 
    335     $dir = ( 'pending' == $type ) ? 'ASC' : 'DESC';
    336 
    337     if ( !$editable ) {
    338         $other_unpubs = '';
    339     } else {
    340         $editable = join(',', $editable);
    341         $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) );
    342     }
    343 
    344     return apply_filters('get_others_drafts', $other_unpubs);
    345 }
    346 
    347 /**
    348  * Retrieve drafts from other users.
    349  *
    350  * @since unknown
    351  *
    352  * @param int $user_id User ID.
    353  * @return array List of drafts from other users.
    354  */
    355 function get_others_drafts($user_id) {
    356     return get_others_unpublished_posts($user_id, 'draft');
    357 }
    358 
    359 /**
    360  * Retrieve pending review posts from other users.
    361  *
    362  * @since unknown
    363  *
    364  * @param int $user_id User ID.
    365  * @return array List of posts with pending review post type from other users.
    366  */
    367 function get_others_pending($user_id) {
    368     return get_others_unpublished_posts($user_id, 'pending');
    369 }
    370 
    371 /**
    372219 * Retrieve user data and filter it.
    373220 *
    374  * @since unknown
     221 * @since 2.0.5
    375222 *
    376223 * @param int $user_id User ID.
     
    380227    $user = new WP_User( $user_id );
    381228
    382     $user_contactmethods = _wp_get_user_contactmethods();
     229    $user_contactmethods = _wp_get_user_contactmethods( $user );
    383230    foreach ($user_contactmethods as $method => $name) {
    384231        if ( empty( $user->{$method} ) )
     
    397244 * Retrieve the user's drafts.
    398245 *
    399  * @since unknown
     246 * @since 2.0.0
    400247 *
    401248 * @param int $user_id User ID.
     
    417264 * The user meta will also be deleted that are for that User ID.
    418265 *
    419  * @since unknown
     266 * @since 2.0.0
    420267 *
    421268 * @param int $id User ID.
     
    472319 * Remove all capabilities from user.
    473320 *
    474  * @since unknown
     321 * @since 2.1.0
    475322 *
    476323 * @param int $id User ID.
     
    483330}
    484331
    485 if ( !class_exists('WP_User_Search') ) :
    486 /**
    487  * WordPress User Search class.
    488  *
    489  * @since unknown
    490  */
    491 class WP_User_Search {
    492 
    493     /**
    494      * {@internal Missing Description}}
    495      *
    496      * @since unknown
    497      * @access private
    498      * @var unknown_type
    499      */
    500     var $results;
    501 
    502     /**
    503      * {@internal Missing Description}}
    504      *
    505      * @since unknown
    506      * @access private
    507      * @var unknown_type
    508      */
    509     var $search_term;
    510 
    511     /**
    512      * Page number.
    513      *
    514      * @since unknown
    515      * @access private
    516      * @var int
    517      */
    518     var $page;
    519 
    520     /**
    521      * Role name that users have.
    522      *
    523      * @since unknown
    524      * @access private
    525      * @var string
    526      */
    527     var $role;
    528 
    529     /**
    530      * Raw page number.
    531      *
    532      * @since unknown
    533      * @access private
    534      * @var int|bool
    535      */
    536     var $raw_page;
    537 
    538     /**
    539      * Amount of users to display per page.
    540      *
    541      * @since unknown
    542      * @access public
    543      * @var int
    544      */
    545     var $users_per_page = 50;
    546 
    547     /**
    548      * {@internal Missing Description}}
    549      *
    550      * @since unknown
    551      * @access private
    552      * @var unknown_type
    553      */
    554     var $first_user;
    555 
    556     /**
    557      * {@internal Missing Description}}
    558      *
    559      * @since unknown
    560      * @access private
    561      * @var int
    562      */
    563     var $last_user;
    564 
    565     /**
    566      * {@internal Missing Description}}
    567      *
    568      * @since unknown
    569      * @access private
    570      * @var string
    571      */
    572     var $query_limit;
    573 
    574     /**
    575      * {@internal Missing Description}}
    576      *
    577      * @since 3.0.0
    578      * @access private
    579      * @var string
    580      */
    581     var $query_orderby;
    582 
    583     /**
    584      * {@internal Missing Description}}
    585      *
    586      * @since 3.0.0
    587      * @access private
    588      * @var string
    589      */
    590     var $query_from;
    591 
    592     /**
    593      * {@internal Missing Description}}
    594      *
    595      * @since 3.0.0
    596      * @access private
    597      * @var string
    598      */
    599     var $query_where;
    600 
    601     /**
    602      * {@internal Missing Description}}
    603      *
    604      * @since unknown
    605      * @access private
    606      * @var int
    607      */
    608     var $total_users_for_query = 0;
    609 
    610     /**
    611      * {@internal Missing Description}}
    612      *
    613      * @since unknown
    614      * @access private
    615      * @var bool
    616      */
    617     var $too_many_total_users = false;
    618 
    619     /**
    620      * {@internal Missing Description}}
    621      *
    622      * @since unknown
    623      * @access private
    624      * @var unknown_type
    625      */
    626     var $search_errors;
    627 
    628     /**
    629      * {@internal Missing Description}}
    630      *
    631      * @since unknown
    632      * @access private
    633      * @var unknown_type
    634      */
    635     var $paging_text;
    636 
    637     /**
    638      * PHP4 Constructor - Sets up the object properties.
    639      *
    640      * @since unknown
    641      *
    642      * @param string $search_term Search terms string.
    643      * @param int $page Optional. Page ID.
    644      * @param string $role Role name.
    645      * @return WP_User_Search
    646      */
    647     function WP_User_Search ($search_term = '', $page = '', $role = '') {
    648         $this->search_term = $search_term;
    649         $this->raw_page = ( '' == $page ) ? false : (int) $page;
    650         $this->page = (int) ( '' == $page ) ? 1 : $page;
    651         $this->role = $role;
    652 
    653         $this->prepare_query();
    654         $this->query();
    655         $this->prepare_vars_for_template_usage();
    656         $this->do_paging();
    657     }
    658 
    659     /**
    660      * {@internal Missing Short Description}}
    661      *
    662      * {@internal Missing Long Description}}
    663      *
    664      * @since unknown
    665      * @access public
    666      */
    667     function prepare_query() {
    668         global $wpdb;
    669         $this->first_user = ($this->page - 1) * $this->users_per_page;
    670 
    671         $this->query_limit = $wpdb->prepare(" LIMIT %d, %d", $this->first_user, $this->users_per_page);
    672         $this->query_orderby = ' ORDER BY user_login';
    673 
    674         $search_sql = '';
    675         if ( $this->search_term ) {
    676             $searches = array();
    677             $search_sql = 'AND (';
    678             foreach ( array('user_login', 'user_nicename', 'user_email', 'user_url', 'display_name') as $col )
    679                 $searches[] = $col . " LIKE '%$this->search_term%'";
    680             $search_sql .= implode(' OR ', $searches);
    681             $search_sql .= ')';
    682         }
    683 
    684         $this->query_from = " FROM $wpdb->users";
    685         $this->query_where = " WHERE 1=1 $search_sql";
    686 
    687         if ( $this->role ) {
    688             $this->query_from .= " INNER JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id";
    689             $this->query_where .= $wpdb->prepare(" AND $wpdb->usermeta.meta_key = '{$wpdb->prefix}capabilities' AND $wpdb->usermeta.meta_value LIKE %s", '%' . $this->role . '%');
    690         } elseif ( is_multisite() ) {
    691             $level_key = $wpdb->prefix . 'capabilities'; // wpmu site admins don't have user_levels
    692             $this->query_from .= ", $wpdb->usermeta";
    693             $this->query_where .= " AND $wpdb->users.ID = $wpdb->usermeta.user_id AND meta_key = '{$level_key}'";
    694         }
    695 
    696         do_action_ref_array( 'pre_user_search', array( &$this ) );
    697     }
    698 
    699     /**
    700      * {@internal Missing Short Description}}
    701      *
    702      * {@internal Missing Long Description}}
    703      *
    704      * @since unknown
    705      * @access public
    706      */
    707     function query() {
    708         global $wpdb;
    709 
    710         $this->results = $wpdb->get_col("SELECT DISTINCT($wpdb->users.ID)" . $this->query_from . $this->query_where . $this->query_orderby . $this->query_limit);
    711 
    712         if ( $this->results )
    713             $this->total_users_for_query = $wpdb->get_var("SELECT COUNT(DISTINCT($wpdb->users.ID))" . $this->query_from . $this->query_where); // no limit
    714         else
    715             $this->search_errors = new WP_Error('no_matching_users_found', __('No matching users were found!'));
    716     }
    717 
    718     /**
    719      * {@internal Missing Short Description}}
    720      *
    721      * {@internal Missing Long Description}}
    722      *
    723      * @since unknown
    724      * @access public
    725      */
    726     function prepare_vars_for_template_usage() {
    727         $this->search_term = stripslashes($this->search_term); // done with DB, from now on we want slashes gone
    728     }
    729 
    730     /**
    731      * {@internal Missing Short Description}}
    732      *
    733      * {@internal Missing Long Description}}
    734      *
    735      * @since unknown
    736      * @access public
    737      */
    738     function do_paging() {
    739         if ( $this->total_users_for_query > $this->users_per_page ) { // have to page the results
    740             $args = array();
    741             if( ! empty($this->search_term) )
    742                 $args['usersearch'] = urlencode($this->search_term);
    743             if( ! empty($this->role) )
    744                 $args['role'] = urlencode($this->role);
    745 
    746             $this->paging_text = paginate_links( array(
    747                 'total' => ceil($this->total_users_for_query / $this->users_per_page),
    748                 'current' => $this->page,
    749                 'base' => 'users.php?%_%',
    750                 'format' => 'userspage=%#%',
    751                 'add_args' => $args
    752             ) );
    753             if ( $this->paging_text ) {
    754                 $this->paging_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%s',
    755                     number_format_i18n( ( $this->page - 1 ) * $this->users_per_page + 1 ),
    756                     number_format_i18n( min( $this->page * $this->users_per_page, $this->total_users_for_query ) ),
    757                     number_format_i18n( $this->total_users_for_query ),
    758                     $this->paging_text
    759                 );
    760             }
    761         }
    762     }
    763 
    764     /**
    765      * {@internal Missing Short Description}}
    766      *
    767      * {@internal Missing Long Description}}
    768      *
    769      * @since unknown
    770      * @access public
    771      *
    772      * @return unknown
    773      */
    774     function get_results() {
    775         return (array) $this->results;
    776     }
    777 
    778     /**
    779      * Displaying paging text.
    780      *
    781      * @see do_paging() Builds paging text.
    782      *
    783      * @since unknown
    784      * @access public
    785      */
    786     function page_links() {
    787         echo $this->paging_text;
    788     }
    789 
    790     /**
    791      * Whether paging is enabled.
    792      *
    793      * @see do_paging() Builds paging text.
    794      *
    795      * @since unknown
    796      * @access public
    797      *
    798      * @return bool
    799      */
    800     function results_are_paged() {
    801         if ( $this->paging_text )
    802             return true;
    803         return false;
    804     }
    805 
    806     /**
    807      * Whether there are search terms.
    808      *
    809      * @since unknown
    810      * @access public
    811      *
    812      * @return bool
    813      */
    814     function is_search() {
    815         if ( $this->search_term )
    816             return true;
    817         return false;
    818     }
    819 }
    820 endif;
    821 
    822332add_action('admin_init', 'default_password_nag_handler');
     333/**
     334 * @since 2.8.0
     335 */
    823336function default_password_nag_handler($errors = false) {
    824337    global $user_ID;
     
    834347
    835348add_action('profile_update', 'default_password_nag_edit_user', 10, 2);
     349/**
     350 * @since 2.8.0
     351 */
    836352function default_password_nag_edit_user($user_ID, $old_data) {
    837353    if ( ! get_user_option('default_password_nag', $user_ID) ) //Short circuit it.
     
    847363
    848364add_action('admin_notices', 'default_password_nag');
     365/**
     366 * @since 2.8.0
     367 */
    849368function default_password_nag() {
    850     if ( ! get_user_option('default_password_nag') ) //Short circuit it.
     369    global $pagenow;
     370    if ( 'profile.php' == $pagenow || ! get_user_option('default_password_nag') ) //Short circuit it.
    851371        return;
    852372
     
    854374    echo '<p>';
    855375    echo '<strong>' . __('Notice:') . '</strong> ';
    856     _e('You&rsquo;re using the auto-generated password for your account. Would you like to change it to something you&rsquo;ll remember easier?');
     376    _e('You&rsquo;re using the auto-generated password for your account. Would you like to change it to something easier to remember?');
    857377    echo '</p><p>';
    858378    printf( '<a href="%s">' . __('Yes, take me to my profile page') . '</a> | ', admin_url('profile.php') . '#password' );
Note: See TracChangeset for help on using the changeset viewer.