Wordpress 3.3
[autoinstalls/wordpress.git] / wp-admin / user-edit.php
1 <?php
2 /**
3  * Edit user administration panel.
4  *
5  * @package WordPress
6  * @subpackage Administration
7  */
8
9 /** WordPress Administration Bootstrap */
10 require_once('./admin.php');
11
12 wp_reset_vars(array('action', 'redirect', 'profile', 'user_id', 'wp_http_referer'));
13
14 $user_id = (int) $user_id;
15 $current_user = wp_get_current_user();
16 if ( ! defined( 'IS_PROFILE_PAGE' ) )
17         define( 'IS_PROFILE_PAGE', ( $user_id == $current_user->ID ) );
18
19 if ( ! $user_id && IS_PROFILE_PAGE )
20         $user_id = $current_user->ID;
21 elseif ( ! $user_id && ! IS_PROFILE_PAGE )
22         wp_die(__( 'Invalid user ID.' ) );
23 elseif ( ! get_userdata( $user_id ) )
24         wp_die( __('Invalid user ID.') );
25
26 wp_enqueue_script('user-profile');
27
28 $title = IS_PROFILE_PAGE ? __('Profile') : __('Edit User');
29 if ( current_user_can('edit_users') && !IS_PROFILE_PAGE )
30         $submenu_file = 'users.php';
31 else
32         $submenu_file = 'profile.php';
33
34 if ( current_user_can('edit_users') && !is_user_admin() )
35         $parent_file = 'users.php';
36 else
37         $parent_file = 'profile.php';
38
39
40 $profile_help = '<p>' . __('Your profile contains information about you (your &#8220;account&#8221;) as well as some personal options related to using WordPress.') . '</p>' .
41         '<p>' . __('You can change your password, turn on keyboard shortcuts, change the color scheme of your WordPress administration screens, and turn off the WYSIWYG (Visual) editor, among other things. You can hide the Toolbar (formerly called the Admin Bar) from the front end of your site, however it cannot be disabled on the admin screens.') . '</p>' .
42         '<p>' . __('Your username cannot be changed, but you can use other fields to enter your real name or a nickname, and change which name to display on your posts.') . '</p>' .
43         '<p>' . __('Required fields are indicated; the rest are optional. Profile information will only be displayed if your theme is set up to do so.') . '</p>' .
44         '<p>' . __('Remember to click the Update Profile button when you are finished.') . '</p>';
45
46 get_current_screen()->add_help_tab( array(
47         'id'      => 'overview',
48         'title'   => __('Overview'),
49         'content' => $profile_help,
50 ) );
51
52 get_current_screen()->set_help_sidebar(
53     '<p><strong>' . __('For more information:') . '</strong></p>' .
54     '<p>' . __('<a href="http://codex.wordpress.org/Users_Your_Profile_Screen" target="_blank">Documentation on User Profiles</a>') . '</p>' .
55     '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
56 );
57
58 $wp_http_referer = remove_query_arg(array('update', 'delete_count'), stripslashes($wp_http_referer));
59
60 $user_can_edit = current_user_can( 'edit_posts' ) || current_user_can( 'edit_pages' );
61
62 /**
63  * Optional SSL preference that can be turned on by hooking to the 'personal_options' action.
64  *
65  * @since 2.7.0
66  *
67  * @param object $user User data object
68  */
69 function use_ssl_preference($user) {
70 ?>
71         <tr>
72                 <th scope="row"><?php _e('Use https')?></th>
73                 <td><label for="use_ssl"><input name="use_ssl" type="checkbox" id="use_ssl" value="1" <?php checked('1', $user->use_ssl); ?> /> <?php _e('Always use https when visiting the admin'); ?></label></td>
74         </tr>
75 <?php
76 }
77
78
79 // Only allow super admins on multisite to edit every user.
80 if ( is_multisite() && ! current_user_can( 'manage_network_users' ) && $user_id != $current_user->ID && ! apply_filters( 'enable_edit_any_user_configuration', true ) )
81         wp_die( __( 'You do not have permission to edit this user.' ) );
82
83 // Execute confirmed email change. See send_confirmation_on_profile_email().
84 if ( is_multisite() && IS_PROFILE_PAGE && isset( $_GET[ 'newuseremail' ] ) && $current_user->ID ) {
85         $new_email = get_option( $current_user->ID . '_new_email' );
86         if ( $new_email[ 'hash' ] == $_GET[ 'newuseremail' ] ) {
87                 $user->ID = $current_user->ID;
88                 $user->user_email = esc_html( trim( $new_email[ 'newemail' ] ) );
89                 if ( $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $current_user->user_login ) ) )
90                         $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $user->user_email, $current_user->user_login ) );
91                 wp_update_user( get_object_vars( $user ) );
92                 delete_option( $current_user->ID . '_new_email' );
93                 wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) );
94                 die();
95         }
96 } elseif ( is_multisite() && IS_PROFILE_PAGE && !empty( $_GET['dismiss'] ) && $current_user->ID . '_new_email' == $_GET['dismiss'] ) {
97         delete_option( $current_user->ID . '_new_email' );
98         wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) );
99         die();
100 }
101
102 switch ($action) {
103 case 'update':
104
105 check_admin_referer('update-user_' . $user_id);
106
107 if ( !current_user_can('edit_user', $user_id) )
108         wp_die(__('You do not have permission to edit this user.'));
109
110 if ( IS_PROFILE_PAGE )
111         do_action('personal_options_update', $user_id);
112 else
113         do_action('edit_user_profile_update', $user_id);
114
115 if ( !is_multisite() ) {
116         $errors = edit_user($user_id);
117 } else {
118         $user = get_userdata( $user_id );
119
120         // Update the email address in signups, if present.
121         if ( $user->user_login && isset( $_POST[ 'email' ] ) && is_email( $_POST[ 'email' ] ) && $wpdb->get_var( $wpdb->prepare( "SELECT user_login FROM {$wpdb->signups} WHERE user_login = %s", $user->user_login ) ) )
122                 $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $_POST[ 'email' ], $user_login ) );
123
124         // WPMU must delete the user from the current blog if WP added him after editing.
125         $delete_role = false;
126         $blog_prefix = $wpdb->get_blog_prefix();
127         if ( $user_id != $current_user->ID ) {
128                 $cap = $wpdb->get_var( "SELECT meta_value FROM {$wpdb->usermeta} WHERE user_id = '{$user_id}' AND meta_key = '{$blog_prefix}capabilities' AND meta_value = 'a:0:{}'" );
129                 if ( !is_network_admin() && null == $cap && $_POST[ 'role' ] == '' ) {
130                         $_POST[ 'role' ] = 'contributor';
131                         $delete_role = true;
132                 }
133         }
134         if ( !isset( $errors ) || ( isset( $errors ) && is_object( $errors ) && false == $errors->get_error_codes() ) )
135                 $errors = edit_user($user_id);
136         if ( $delete_role ) // stops users being added to current blog when they are edited
137                 delete_user_meta( $user_id, $blog_prefix . 'capabilities' );
138
139         if ( is_multisite() && is_network_admin() && !IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && !isset($super_admins) && empty( $_POST['super_admin'] ) == is_super_admin( $user_id ) )
140                 empty( $_POST['super_admin'] ) ? revoke_super_admin( $user_id ) : grant_super_admin( $user_id );
141 }
142
143 if ( !is_wp_error( $errors ) ) {
144         $redirect = (IS_PROFILE_PAGE ? "profile.php?" : "user-edit.php?user_id=$user_id&"). "updated=true";
145         if ( $wp_http_referer )
146                 $redirect = add_query_arg('wp_http_referer', urlencode($wp_http_referer), $redirect);
147         wp_redirect($redirect);
148         exit;
149 }
150
151 default:
152 $profileuser = get_user_to_edit($user_id);
153
154 if ( !current_user_can('edit_user', $user_id) )
155         wp_die(__('You do not have permission to edit this user.'));
156
157 include (ABSPATH . 'wp-admin/admin-header.php');
158 ?>
159
160 <?php if ( !IS_PROFILE_PAGE && is_super_admin( $profileuser->ID ) && current_user_can( 'manage_network_options' ) ) { ?>
161         <div class="updated"><p><strong><?php _e('Important:'); ?></strong> <?php _e('This user has super admin privileges.'); ?></p></div>
162 <?php } ?>
163 <?php if ( isset($_GET['updated']) ) : ?>
164 <div id="message" class="updated">
165         <?php if ( IS_PROFILE_PAGE ) : ?>
166         <p><strong><?php _e('Profile updated.') ?></strong></p>
167         <?php else: ?>
168         <p><strong><?php _e('User updated.') ?></strong></p>
169         <?php endif; ?>
170         <?php if ( $wp_http_referer && !IS_PROFILE_PAGE ) : ?>
171         <p><a href="<?php echo esc_url( $wp_http_referer ); ?>"><?php _e('&larr; Back to Users'); ?></a></p>
172         <?php endif; ?>
173 </div>
174 <?php endif; ?>
175 <?php if ( isset( $errors ) && is_wp_error( $errors ) ) : ?>
176 <div class="error"><p><?php echo implode( "</p>\n<p>", $errors->get_error_messages() ); ?></p></div>
177 <?php endif; ?>
178
179 <div class="wrap" id="profile-page">
180 <?php screen_icon(); ?>
181 <h2>
182 <?php
183 echo esc_html( $title );
184 if ( ! IS_PROFILE_PAGE ) {
185         if ( current_user_can( 'create_users' ) ) { ?>
186                 <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add New', 'user' ); ?></a>
187         <?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?>
188                 <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a>
189         <?php }
190 } ?>
191 </h2>
192
193 <form id="your-profile" action="<?php echo esc_url( self_admin_url( IS_PROFILE_PAGE ? 'profile.php' : 'user-edit.php' ) ); ?>" method="post"<?php do_action('user_edit_form_tag'); ?>>
194 <?php wp_nonce_field('update-user_' . $user_id) ?>
195 <?php if ( $wp_http_referer ) : ?>
196         <input type="hidden" name="wp_http_referer" value="<?php echo esc_url($wp_http_referer); ?>" />
197 <?php endif; ?>
198 <p>
199 <input type="hidden" name="from" value="profile" />
200 <input type="hidden" name="checkuser_id" value="<?php echo $user_ID ?>" />
201 </p>
202
203 <h3><?php _e('Personal Options'); ?></h3>
204
205 <table class="form-table">
206 <?php if ( rich_edit_exists() && !( IS_PROFILE_PAGE && !$user_can_edit ) ) : // don't bother showing the option if the editor has been removed ?>
207         <tr>
208                 <th scope="row"><?php _e('Visual Editor')?></th>
209                 <td><label for="rich_editing"><input name="rich_editing" type="checkbox" id="rich_editing" value="false" <?php checked('false', $profileuser->rich_editing); ?> /> <?php _e('Disable the visual editor when writing'); ?></label></td>
210         </tr>
211 <?php endif; ?>
212 <?php if ( count($_wp_admin_css_colors) > 1 && has_action('admin_color_scheme_picker') ) : ?>
213 <tr>
214 <th scope="row"><?php _e('Admin Color Scheme')?></th>
215 <td><?php do_action( 'admin_color_scheme_picker' ); ?></td>
216 </tr>
217 <?php
218 endif; // $_wp_admin_css_colors
219 if ( !( IS_PROFILE_PAGE && !$user_can_edit ) ) : ?>
220 <tr>
221 <th scope="row"><?php _e( 'Keyboard Shortcuts' ); ?></th>
222 <td><label for="comment_shortcuts"><input type="checkbox" name="comment_shortcuts" id="comment_shortcuts" value="true" <?php if ( !empty($profileuser->comment_shortcuts) ) checked('true', $profileuser->comment_shortcuts); ?> /> <?php _e('Enable keyboard shortcuts for comment moderation.'); ?></label> <?php _e('<a href="http://codex.wordpress.org/Keyboard_Shortcuts" target="_blank">More information</a>'); ?></td>
223 </tr>
224 <?php endif; ?>
225 <tr class="show-admin-bar">
226 <th scope="row"><?php _e('Toolbar')?></th>
227 <td><fieldset><legend class="screen-reader-text"><span><?php _e('Toolbar') ?></span></legend>
228 <label for="admin_bar_front">
229 <input name="admin_bar_front" type="checkbox" id="admin_bar_front" value="1"<?php checked( _get_admin_bar_pref( 'front', $profileuser->ID ) ); ?> />
230 <?php _e( 'Show Toolbar when viewing site' ); ?></label><br />
231 </fieldset>
232 </td>
233 </tr>
234 <?php do_action('personal_options', $profileuser); ?>
235 </table>
236 <?php
237         if ( IS_PROFILE_PAGE )
238                 do_action('profile_personal_options', $profileuser);
239 ?>
240
241 <h3><?php _e('Name') ?></h3>
242
243 <table class="form-table">
244         <tr>
245                 <th><label for="user_login"><?php _e('Username'); ?></label></th>
246                 <td><input type="text" name="user_login" id="user_login" value="<?php echo esc_attr($profileuser->user_login); ?>" disabled="disabled" class="regular-text" /> <span class="description"><?php _e('Usernames cannot be changed.'); ?></span></td>
247         </tr>
248
249 <?php if ( !IS_PROFILE_PAGE && !is_network_admin() ) : ?>
250 <tr><th><label for="role"><?php _e('Role:') ?></label></th>
251 <td><select name="role" id="role">
252 <?php
253 // Get the highest/primary role for this user
254 // TODO: create a function that does this: wp_get_user_role()
255 $user_roles = $profileuser->roles;
256 $user_role = array_shift($user_roles);
257
258 // print the full list of roles with the primary one selected.
259 wp_dropdown_roles($user_role);
260
261 // print the 'no role' option. Make it selected if the user has no role yet.
262 if ( $user_role )
263         echo '<option value="">' . __('&mdash; No role for this site &mdash;') . '</option>';
264 else
265         echo '<option value="" selected="selected">' . __('&mdash; No role for this site &mdash;') . '</option>';
266 ?>
267 </select></td></tr>
268 <?php endif; //!IS_PROFILE_PAGE
269
270 if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && !isset($super_admins) ) { ?>
271 <tr><th><label for="role"><?php _e('Super Admin'); ?></label></th>
272 <td>
273 <?php if ( $profileuser->user_email != get_site_option( 'admin_email' ) ) : ?>
274 <p><label><input type="checkbox" id="super_admin" name="super_admin"<?php checked( is_super_admin( $profileuser->ID ) ); ?> /> <?php _e( 'Grant this user super admin privileges for the Network.' ); ?></label></p>
275 <?php else : ?>
276 <p><?php _e( 'Super admin privileges cannot be removed because this user has the network admin email.' ); ?></p>
277 <?php endif; ?>
278 </td></tr>
279 <?php } ?>
280
281 <tr>
282         <th><label for="first_name"><?php _e('First Name') ?></label></th>
283         <td><input type="text" name="first_name" id="first_name" value="<?php echo esc_attr($profileuser->first_name) ?>" class="regular-text" /></td>
284 </tr>
285
286 <tr>
287         <th><label for="last_name"><?php _e('Last Name') ?></label></th>
288         <td><input type="text" name="last_name" id="last_name" value="<?php echo esc_attr($profileuser->last_name) ?>" class="regular-text" /></td>
289 </tr>
290
291 <tr>
292         <th><label for="nickname"><?php _e('Nickname'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
293         <td><input type="text" name="nickname" id="nickname" value="<?php echo esc_attr($profileuser->nickname) ?>" class="regular-text" /></td>
294 </tr>
295
296 <tr>
297         <th><label for="display_name"><?php _e('Display name publicly as') ?></label></th>
298         <td>
299                 <select name="display_name" id="display_name">
300                 <?php
301                         $public_display = array();
302                         $public_display['display_nickname']  = $profileuser->nickname;
303                         $public_display['display_username']  = $profileuser->user_login;
304
305                         if ( !empty($profileuser->first_name) )
306                                 $public_display['display_firstname'] = $profileuser->first_name;
307
308                         if ( !empty($profileuser->last_name) )
309                                 $public_display['display_lastname'] = $profileuser->last_name;
310
311                         if ( !empty($profileuser->first_name) && !empty($profileuser->last_name) ) {
312                                 $public_display['display_firstlast'] = $profileuser->first_name . ' ' . $profileuser->last_name;
313                                 $public_display['display_lastfirst'] = $profileuser->last_name . ' ' . $profileuser->first_name;
314                         }
315
316                         if ( !in_array( $profileuser->display_name, $public_display ) ) // Only add this if it isn't duplicated elsewhere
317                                 $public_display = array( 'display_displayname' => $profileuser->display_name ) + $public_display;
318
319                         $public_display = array_map( 'trim', $public_display );
320                         $public_display = array_unique( $public_display );
321
322                         foreach ( $public_display as $id => $item ) {
323                 ?>
324                         <option id="<?php echo $id; ?>"<?php selected( $profileuser->display_name, $item ); ?>><?php echo $item; ?></option>
325                 <?php
326                         }
327                 ?>
328                 </select>
329         </td>
330 </tr>
331 </table>
332
333 <h3><?php _e('Contact Info') ?></h3>
334
335 <table class="form-table">
336 <tr>
337         <th><label for="email"><?php _e('E-mail'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
338         <td><input type="text" name="email" id="email" value="<?php echo esc_attr($profileuser->user_email) ?>" class="regular-text" />
339         <?php
340         $new_email = get_option( $current_user->ID . '_new_email' );
341         if ( $new_email && $new_email != $current_user->user_email ) : ?>
342         <div class="updated inline">
343         <p><?php printf( __('There is a pending change of your e-mail to <code>%1$s</code>. <a href="%2$s">Cancel</a>'), $new_email['newemail'], esc_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?></p>
344         </div>
345         <?php endif; ?>
346         </td>
347 </tr>
348
349 <tr>
350         <th><label for="url"><?php _e('Website') ?></label></th>
351         <td><input type="text" name="url" id="url" value="<?php echo esc_attr($profileuser->user_url) ?>" class="regular-text code" /></td>
352 </tr>
353
354 <?php
355         foreach (_wp_get_user_contactmethods( $profileuser ) as $name => $desc) {
356 ?>
357 <tr>
358         <th><label for="<?php echo $name; ?>"><?php echo apply_filters('user_'.$name.'_label', $desc); ?></label></th>
359         <td><input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo esc_attr($profileuser->$name) ?>" class="regular-text" /></td>
360 </tr>
361 <?php
362         }
363 ?>
364 </table>
365
366 <h3><?php IS_PROFILE_PAGE ? _e('About Yourself') : _e('About the user'); ?></h3>
367
368 <table class="form-table">
369 <tr>
370         <th><label for="description"><?php _e('Biographical Info'); ?></label></th>
371         <td><textarea name="description" id="description" rows="5" cols="30"><?php echo $profileuser->description; // textarea_escaped ?></textarea><br />
372         <span class="description"><?php _e('Share a little biographical information to fill out your profile. This may be shown publicly.'); ?></span></td>
373 </tr>
374
375 <?php
376 $show_password_fields = apply_filters('show_password_fields', true, $profileuser);
377 if ( $show_password_fields ) :
378 ?>
379 <tr id="password">
380         <th><label for="pass1"><?php _e('New Password'); ?></label></th>
381         <td><input type="password" name="pass1" id="pass1" size="16" value="" autocomplete="off" /> <span class="description"><?php _e("If you would like to change the password type a new one. Otherwise leave this blank."); ?></span><br />
382                 <input type="password" name="pass2" id="pass2" size="16" value="" autocomplete="off" /> <span class="description"><?php _e("Type your new password again."); ?></span><br />
383                 <div id="pass-strength-result"><?php _e('Strength indicator'); ?></div>
384                 <p class="description indicator-hint"><?php _e('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).'); ?></p>
385         </td>
386 </tr>
387 <?php endif; ?>
388 </table>
389
390 <?php
391         if ( IS_PROFILE_PAGE )
392                 do_action( 'show_user_profile', $profileuser );
393         else
394                 do_action( 'edit_user_profile', $profileuser );
395 ?>
396
397 <?php if ( count($profileuser->caps) > count($profileuser->roles) && apply_filters('additional_capabilities_display', true, $profileuser) ) { ?>
398 <br class="clear" />
399         <table width="99%" style="border: none;" cellspacing="2" cellpadding="3" class="editform">
400                 <tr>
401                         <th scope="row"><?php _e('Additional Capabilities') ?></th>
402                         <td><?php
403                         $output = '';
404                         foreach ( $profileuser->caps as $cap => $value ) {
405                                 if ( !$wp_roles->is_role($cap) ) {
406                                         if ( $output != '' )
407                                                 $output .= ', ';
408                                         $output .= $value ? $cap : "Denied: {$cap}";
409                                 }
410                         }
411                         echo $output;
412                         ?></td>
413                 </tr>
414         </table>
415 <?php } ?>
416
417 <input type="hidden" name="action" value="update" />
418 <input type="hidden" name="user_id" id="user_id" value="<?php echo esc_attr($user_id); ?>" />
419
420 <?php submit_button( IS_PROFILE_PAGE ? __('Update Profile') : __('Update User') ); ?>
421
422 </form>
423 </div>
424 <?php
425 break;
426 }
427 ?>
428 <script type="text/javascript" charset="utf-8">
429         if (window.location.hash == '#password') {
430                 document.getElementById('pass1').focus();
431         }
432 </script>
433 <?php
434 include( ABSPATH . 'wp-admin/admin-footer.php');
435 ?>