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.