wp/wp-admin/user-edit.php
changeset 19 3d72ae0968f4
parent 18 be944660c56a
child 21 48c4eec2b7e6
equal deleted inserted replaced
18:be944660c56a 19:3d72ae0968f4
    11 
    11 
    12 wp_reset_vars( array( 'action', 'user_id', 'wp_http_referer' ) );
    12 wp_reset_vars( array( 'action', 'user_id', 'wp_http_referer' ) );
    13 
    13 
    14 $user_id      = (int) $user_id;
    14 $user_id      = (int) $user_id;
    15 $current_user = wp_get_current_user();
    15 $current_user = wp_get_current_user();
       
    16 
    16 if ( ! defined( 'IS_PROFILE_PAGE' ) ) {
    17 if ( ! defined( 'IS_PROFILE_PAGE' ) ) {
    17 	define( 'IS_PROFILE_PAGE', ( $user_id == $current_user->ID ) );
    18 	define( 'IS_PROFILE_PAGE', ( $user_id === $current_user->ID ) );
    18 }
    19 }
    19 
    20 
    20 if ( ! $user_id && IS_PROFILE_PAGE ) {
    21 if ( ! $user_id && IS_PROFILE_PAGE ) {
    21 	$user_id = $current_user->ID;
    22 	$user_id = $current_user->ID;
    22 } elseif ( ! $user_id && ! IS_PROFILE_PAGE ) {
    23 } elseif ( ! $user_id && ! IS_PROFILE_PAGE ) {
    30 if ( wp_is_application_passwords_available_for_user( $user_id ) ) {
    31 if ( wp_is_application_passwords_available_for_user( $user_id ) ) {
    31 	wp_enqueue_script( 'application-passwords' );
    32 	wp_enqueue_script( 'application-passwords' );
    32 }
    33 }
    33 
    34 
    34 if ( IS_PROFILE_PAGE ) {
    35 if ( IS_PROFILE_PAGE ) {
       
    36 	// Used in the HTML title tag.
    35 	$title = __( 'Profile' );
    37 	$title = __( 'Profile' );
    36 } else {
    38 } else {
       
    39 	// Used in the HTML title tag.
    37 	/* translators: %s: User's display name. */
    40 	/* translators: %s: User's display name. */
    38 	$title = __( 'Edit User %s' );
    41 	$title = __( 'Edit User %s' );
    39 }
    42 }
    40 
    43 
    41 if ( current_user_can( 'edit_users' ) && ! IS_PROFILE_PAGE ) {
    44 if ( current_user_can( 'edit_users' ) && ! IS_PROFILE_PAGE ) {
    89  *
    92  *
    90  * @param bool $allow Whether to allow editing of any user. Default true.
    93  * @param bool $allow Whether to allow editing of any user. Default true.
    91  */
    94  */
    92 if ( is_multisite()
    95 if ( is_multisite()
    93 	&& ! current_user_can( 'manage_network_users' )
    96 	&& ! current_user_can( 'manage_network_users' )
    94 	&& $user_id != $current_user->ID
    97 	&& $user_id !== $current_user->ID
    95 	&& ! apply_filters( 'enable_edit_any_user_configuration', true )
    98 	&& ! apply_filters( 'enable_edit_any_user_configuration', true )
    96 ) {
    99 ) {
    97 	wp_die( __( 'Sorry, you are not allowed to edit this user.' ) );
   100 	wp_die( __( 'Sorry, you are not allowed to edit this user.' ) );
    98 }
   101 }
    99 
   102 
   162 
   165 
   163 		// Update the user.
   166 		// Update the user.
   164 		$errors = edit_user( $user_id );
   167 		$errors = edit_user( $user_id );
   165 
   168 
   166 		// Grant or revoke super admin status if requested.
   169 		// Grant or revoke super admin status if requested.
   167 		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 ) ) {
   170 		if ( is_multisite() && is_network_admin()
       
   171 			&& ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' )
       
   172 			&& ! isset( $super_admins ) && empty( $_POST['super_admin'] ) === is_super_admin( $user_id )
       
   173 		) {
   168 			empty( $_POST['super_admin'] ) ? revoke_super_admin( $user_id ) : grant_super_admin( $user_id );
   174 			empty( $_POST['super_admin'] ) ? revoke_super_admin( $user_id ) : grant_super_admin( $user_id );
   169 		}
   175 		}
   170 
   176 
   171 		if ( ! is_wp_error( $errors ) ) {
   177 		if ( ! is_wp_error( $errors ) ) {
   172 			$redirect = add_query_arg( 'updated', true, get_edit_user_link( $user_id ) );
   178 			$redirect = add_query_arg( 'updated', true, get_edit_user_link( $user_id ) );
   177 			exit;
   183 			exit;
   178 		}
   184 		}
   179 
   185 
   180 		// Intentional fall-through to display $errors.
   186 		// Intentional fall-through to display $errors.
   181 	default:
   187 	default:
   182 		$profileuser = get_user_to_edit( $user_id );
   188 		$profile_user = get_user_to_edit( $user_id );
   183 
   189 
   184 		if ( ! current_user_can( 'edit_user', $user_id ) ) {
   190 		if ( ! current_user_can( 'edit_user', $user_id ) ) {
   185 			wp_die( __( 'Sorry, you are not allowed to edit this user.' ) );
   191 			wp_die( __( 'Sorry, you are not allowed to edit this user.' ) );
   186 		}
   192 		}
   187 
   193 
   188 		$title    = sprintf( $title, $profileuser->display_name );
   194 		$title    = sprintf( $title, $profile_user->display_name );
   189 		$sessions = WP_Session_Tokens::get_instance( $profileuser->ID );
   195 		$sessions = WP_Session_Tokens::get_instance( $profile_user->ID );
   190 
   196 
   191 		require_once ABSPATH . 'wp-admin/admin-header.php';
   197 		require_once ABSPATH . 'wp-admin/admin-header.php';
   192 		?>
   198 		?>
   193 
   199 
   194 		<?php if ( ! IS_PROFILE_PAGE && is_super_admin( $profileuser->ID ) && current_user_can( 'manage_network_options' ) ) { ?>
   200 		<?php if ( ! IS_PROFILE_PAGE && is_super_admin( $profile_user->ID ) && current_user_can( 'manage_network_options' ) ) : ?>
   195 	<div class="notice notice-info"><p><strong><?php _e( 'Important:' ); ?></strong> <?php _e( 'This user has super admin privileges.' ); ?></p></div>
   201 			<div class="notice notice-info"><p><strong><?php _e( 'Important:' ); ?></strong> <?php _e( 'This user has super admin privileges.' ); ?></p></div>
   196 <?php } ?>
   202 		<?php endif; ?>
       
   203 
   197 		<?php if ( isset( $_GET['updated'] ) ) : ?>
   204 		<?php if ( isset( $_GET['updated'] ) ) : ?>
   198 <div id="message" class="updated notice is-dismissible">
   205 			<div id="message" class="updated notice is-dismissible">
   199 			<?php if ( IS_PROFILE_PAGE ) : ?>
   206 				<?php if ( IS_PROFILE_PAGE ) : ?>
   200 	<p><strong><?php _e( 'Profile updated.' ); ?></strong></p>
   207 					<p><strong><?php _e( 'Profile updated.' ); ?></strong></p>
   201 	<?php else : ?>
   208 				<?php else : ?>
   202 	<p><strong><?php _e( 'User updated.' ); ?></strong></p>
   209 					<p><strong><?php _e( 'User updated.' ); ?></strong></p>
   203 	<?php endif; ?>
   210 				<?php endif; ?>
   204 			<?php if ( $wp_http_referer && false === strpos( $wp_http_referer, 'user-new.php' ) && ! IS_PROFILE_PAGE ) : ?>
   211 				<?php if ( $wp_http_referer && false === strpos( $wp_http_referer, 'user-new.php' ) && ! IS_PROFILE_PAGE ) : ?>
   205 	<p><a href="<?php echo esc_url( wp_validate_redirect( esc_url_raw( $wp_http_referer ), self_admin_url( 'users.php' ) ) ); ?>"><?php _e( '&larr; Go to Users' ); ?></a></p>
   212 					<p><a href="<?php echo esc_url( wp_validate_redirect( esc_url_raw( $wp_http_referer ), self_admin_url( 'users.php' ) ) ); ?>"><?php _e( '&larr; Go to Users' ); ?></a></p>
   206 	<?php endif; ?>
   213 				<?php endif; ?>
   207 </div>
   214 			</div>
   208 		<?php endif; ?>
   215 		<?php endif; ?>
       
   216 
   209 		<?php if ( isset( $_GET['error'] ) ) : ?>
   217 		<?php if ( isset( $_GET['error'] ) ) : ?>
   210 <div class="notice notice-error">
   218 			<div class="notice notice-error">
   211 			<?php if ( 'new-email' === $_GET['error'] ) : ?>
   219 			<?php if ( 'new-email' === $_GET['error'] ) : ?>
   212 	<p><?php _e( 'Error while saving the new email address. Please try again.' ); ?></p>
   220 				<p><?php _e( 'Error while saving the new email address. Please try again.' ); ?></p>
   213 	<?php endif; ?>
   221 			<?php endif; ?>
   214 </div>
   222 			</div>
   215 		<?php endif; ?>
   223 		<?php endif; ?>
       
   224 
   216 		<?php if ( isset( $errors ) && is_wp_error( $errors ) ) : ?>
   225 		<?php if ( isset( $errors ) && is_wp_error( $errors ) ) : ?>
   217 <div class="error"><p><?php echo implode( "</p>\n<p>", $errors->get_error_messages() ); ?></p></div>
   226 			<div class="error">
       
   227 				<p><?php echo implode( "</p>\n<p>", $errors->get_error_messages() ); ?></p>
       
   228 			</div>
   218 		<?php endif; ?>
   229 		<?php endif; ?>
   219 
   230 
   220 <div class="wrap" id="profile-page">
   231 		<div class="wrap" id="profile-page">
   221 <h1 class="wp-heading-inline">
   232 			<h1 class="wp-heading-inline">
   222 		<?php
   233 					<?php echo esc_html( $title ); ?>
   223 		echo esc_html( $title );
   234 			</h1>
   224 		?>
   235 
   225 </h1>
   236 			<?php if ( ! IS_PROFILE_PAGE ) : ?>
   226 
   237 				<?php if ( current_user_can( 'create_users' ) ) : ?>
   227 		<?php
   238 					<a href="user-new.php" class="page-title-action"><?php echo esc_html_x( 'Add New', 'user' ); ?></a>
   228 		if ( ! IS_PROFILE_PAGE ) {
   239 				<?php elseif ( is_multisite() && current_user_can( 'promote_users' ) ) : ?>
   229 			if ( current_user_can( 'create_users' ) ) {
   240 					<a href="user-new.php" class="page-title-action"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a>
   230 				?>
   241 				<?php endif; ?>
   231 		<a href="user-new.php" class="page-title-action"><?php echo esc_html_x( 'Add New', 'user' ); ?></a>
       
   232 	<?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?>
       
   233 		<a href="user-new.php" class="page-title-action"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a>
       
   234 				<?php
       
   235 	}
       
   236 		}
       
   237 		?>
       
   238 
       
   239 <hr class="wp-header-end">
       
   240 
       
   241 <form id="your-profile" action="<?php echo esc_url( self_admin_url( IS_PROFILE_PAGE ? 'profile.php' : 'user-edit.php' ) ); ?>" method="post" novalidate="novalidate"
       
   242 		<?php
       
   243 		/**
       
   244 		 * Fires inside the your-profile form tag on the user editing screen.
       
   245 		 *
       
   246 		 * @since 3.0.0
       
   247 		 */
       
   248 		do_action( 'user_edit_form_tag' );
       
   249 		?>
       
   250 	>
       
   251 		<?php wp_nonce_field( 'update-user_' . $user_id ); ?>
       
   252 		<?php if ( $wp_http_referer ) : ?>
       
   253 	<input type="hidden" name="wp_http_referer" value="<?php echo esc_url( $wp_http_referer ); ?>" />
       
   254 		<?php endif; ?>
       
   255 <p>
       
   256 <input type="hidden" name="from" value="profile" />
       
   257 <input type="hidden" name="checkuser_id" value="<?php echo get_current_user_id(); ?>" />
       
   258 </p>
       
   259 
       
   260 <h2><?php _e( 'Personal Options' ); ?></h2>
       
   261 
       
   262 <table class="form-table" role="presentation">
       
   263 		<?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?>
       
   264 	<tr class="user-rich-editing-wrap">
       
   265 		<th scope="row"><?php _e( 'Visual Editor' ); ?></th>
       
   266 		<td>
       
   267 			<label for="rich_editing"><input name="rich_editing" type="checkbox" id="rich_editing" value="false" <?php checked( 'false', $profileuser->rich_editing ); ?> />
       
   268 				<?php _e( 'Disable the visual editor when writing' ); ?>
       
   269 			</label>
       
   270 		</td>
       
   271 	</tr>
       
   272 		<?php endif; ?>
       
   273 		<?php
       
   274 		$show_syntax_highlighting_preference = (
       
   275 		// For Custom HTML widget and Additional CSS in Customizer.
       
   276 		user_can( $profileuser, 'edit_theme_options' )
       
   277 		||
       
   278 		// Edit plugins.
       
   279 		user_can( $profileuser, 'edit_plugins' )
       
   280 		||
       
   281 		// Edit themes.
       
   282 		user_can( $profileuser, 'edit_themes' )
       
   283 		);
       
   284 		?>
       
   285 
       
   286 		<?php if ( $show_syntax_highlighting_preference ) : ?>
       
   287 	<tr class="user-syntax-highlighting-wrap">
       
   288 		<th scope="row"><?php _e( 'Syntax Highlighting' ); ?></th>
       
   289 		<td>
       
   290 			<label for="syntax_highlighting"><input name="syntax_highlighting" type="checkbox" id="syntax_highlighting" value="false" <?php checked( 'false', $profileuser->syntax_highlighting ); ?> />
       
   291 				<?php _e( 'Disable syntax highlighting when editing code' ); ?>
       
   292 			</label>
       
   293 		</td>
       
   294 	</tr>
       
   295 		<?php endif; ?>
       
   296 
       
   297 		<?php if ( count( $_wp_admin_css_colors ) > 1 && has_action( 'admin_color_scheme_picker' ) ) : ?>
       
   298 	<tr class="user-admin-color-wrap">
       
   299 		<th scope="row"><?php _e( 'Admin Color Scheme' ); ?></th>
       
   300 		<td>
       
   301 			<?php
       
   302 			/**
       
   303 			 * Fires in the 'Admin Color Scheme' section of the user editing screen.
       
   304 			 *
       
   305 			 * The section is only enabled if a callback is hooked to the action,
       
   306 			 * and if there is more than one defined color scheme for the admin.
       
   307 			 *
       
   308 			 * @since 3.0.0
       
   309 			 * @since 3.8.1 Added `$user_id` parameter.
       
   310 			 *
       
   311 			 * @param int $user_id The user ID.
       
   312 			 */
       
   313 			do_action( 'admin_color_scheme_picker', $user_id );
       
   314 			?>
       
   315 		</td>
       
   316 	</tr>
       
   317 		<?php endif; // End if count ( $_wp_admin_css_colors ) > 1 ?>
       
   318 
       
   319 		<?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?>
       
   320 	<tr class="user-comment-shortcuts-wrap">
       
   321 		<th scope="row"><?php _e( 'Keyboard Shortcuts' ); ?></th>
       
   322 		<td>
       
   323 			<label for="comment_shortcuts">
       
   324 				<input type="checkbox" name="comment_shortcuts" id="comment_shortcuts" value="true" <?php checked( 'true', $profileuser->comment_shortcuts ); ?> />
       
   325 				<?php _e( 'Enable keyboard shortcuts for comment moderation.' ); ?>
       
   326 			</label>
       
   327 			<?php _e( '<a href="https://wordpress.org/support/article/keyboard-shortcuts/" target="_blank">More information</a>' ); ?>
       
   328 		</td>
       
   329 	</tr>
       
   330 		<?php endif; ?>
       
   331 
       
   332 	<tr class="show-admin-bar user-admin-bar-front-wrap">
       
   333 		<th scope="row"><?php _e( 'Toolbar' ); ?></th>
       
   334 		<td>
       
   335 			<label for="admin_bar_front">
       
   336 				<input name="admin_bar_front" type="checkbox" id="admin_bar_front" value="1"<?php checked( _get_admin_bar_pref( 'front', $profileuser->ID ) ); ?> />
       
   337 				<?php _e( 'Show Toolbar when viewing site' ); ?>
       
   338 			</label><br />
       
   339 		</td>
       
   340 	</tr>
       
   341 
       
   342 		<?php
       
   343 		$languages = get_available_languages();
       
   344 		if ( $languages ) :
       
   345 			?>
       
   346 	<tr class="user-language-wrap">
       
   347 		<th scope="row">
       
   348 			<?php /* translators: The user language selection field label. */ ?>
       
   349 			<label for="locale"><?php _e( 'Language' ); ?><span class="dashicons dashicons-translation" aria-hidden="true"></span></label>
       
   350 		</th>
       
   351 		<td>
       
   352 			<?php
       
   353 				$user_locale = $profileuser->locale;
       
   354 
       
   355 			if ( 'en_US' === $user_locale ) {
       
   356 				$user_locale = '';
       
   357 			} elseif ( '' === $user_locale || ! in_array( $user_locale, $languages, true ) ) {
       
   358 				$user_locale = 'site-default';
       
   359 			}
       
   360 
       
   361 			wp_dropdown_languages(
       
   362 				array(
       
   363 					'name'                        => 'locale',
       
   364 					'id'                          => 'locale',
       
   365 					'selected'                    => $user_locale,
       
   366 					'languages'                   => $languages,
       
   367 					'show_available_translations' => false,
       
   368 					'show_option_site_default'    => true,
       
   369 				)
       
   370 			);
       
   371 			?>
       
   372 		</td>
       
   373 	</tr>
       
   374 			<?php
       
   375 endif;
       
   376 		?>
       
   377 
       
   378 		<?php
       
   379 		/**
       
   380 		 * Fires at the end of the 'Personal Options' settings table on the user editing screen.
       
   381 		 *
       
   382 		 * @since 2.7.0
       
   383 		 *
       
   384 		 * @param WP_User $profileuser The current WP_User object.
       
   385 		 */
       
   386 		do_action( 'personal_options', $profileuser );
       
   387 		?>
       
   388 
       
   389 </table>
       
   390 		<?php
       
   391 		if ( IS_PROFILE_PAGE ) {
       
   392 			/**
       
   393 			 * Fires after the 'Personal Options' settings table on the 'Profile' editing screen.
       
   394 			 *
       
   395 			 * The action only fires if the current user is editing their own profile.
       
   396 			 *
       
   397 			 * @since 2.0.0
       
   398 			 *
       
   399 			 * @param WP_User $profileuser The current WP_User object.
       
   400 			 */
       
   401 			do_action( 'profile_personal_options', $profileuser );
       
   402 		}
       
   403 		?>
       
   404 
       
   405 <h2><?php _e( 'Name' ); ?></h2>
       
   406 
       
   407 <table class="form-table" role="presentation">
       
   408 	<tr class="user-user-login-wrap">
       
   409 		<th><label for="user_login"><?php _e( 'Username' ); ?></label></th>
       
   410 		<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>
       
   411 	</tr>
       
   412 
       
   413 		<?php if ( ! IS_PROFILE_PAGE && ! is_network_admin() && current_user_can( 'promote_user', $profileuser->ID ) ) : ?>
       
   414 <tr class="user-role-wrap"><th><label for="role"><?php _e( 'Role' ); ?></label></th>
       
   415 <td><select name="role" id="role">
       
   416 			<?php
       
   417 			// Compare user role against currently editable roles.
       
   418 			$user_roles = array_intersect( array_values( $profileuser->roles ), array_keys( get_editable_roles() ) );
       
   419 			$user_role  = reset( $user_roles );
       
   420 
       
   421 			// Print the full list of roles with the primary one selected.
       
   422 			wp_dropdown_roles( $user_role );
       
   423 
       
   424 			// Print the 'no role' option. Make it selected if the user has no role yet.
       
   425 			if ( $user_role ) {
       
   426 				echo '<option value="">' . __( '&mdash; No role for this site &mdash;' ) . '</option>';
       
   427 			} else {
       
   428 				echo '<option value="" selected="selected">' . __( '&mdash; No role for this site &mdash;' ) . '</option>';
       
   429 			}
       
   430 			?>
       
   431 </select></td></tr>
       
   432 			<?php
       
   433 		endif; // End if ! IS_PROFILE_PAGE.
       
   434 
       
   435 		if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && ! isset( $super_admins ) ) {
       
   436 			?>
       
   437 <tr class="user-super-admin-wrap"><th><?php _e( 'Super Admin' ); ?></th>
       
   438 <td>
       
   439 			<?php if ( 0 !== strcasecmp( $profileuser->user_email, get_site_option( 'admin_email' ) ) || ! is_super_admin( $profileuser->ID ) ) : ?>
       
   440 <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>
       
   441 <?php else : ?>
       
   442 <p><?php _e( 'Super admin privileges cannot be removed because this user has the network admin email.' ); ?></p>
       
   443 <?php endif; ?>
       
   444 </td></tr>
       
   445 		<?php } ?>
       
   446 
       
   447 <tr class="user-first-name-wrap">
       
   448 	<th><label for="first_name"><?php _e( 'First Name' ); ?></label></th>
       
   449 	<td><input type="text" name="first_name" id="first_name" value="<?php echo esc_attr( $profileuser->first_name ); ?>" class="regular-text" /></td>
       
   450 </tr>
       
   451 
       
   452 <tr class="user-last-name-wrap">
       
   453 	<th><label for="last_name"><?php _e( 'Last Name' ); ?></label></th>
       
   454 	<td><input type="text" name="last_name" id="last_name" value="<?php echo esc_attr( $profileuser->last_name ); ?>" class="regular-text" /></td>
       
   455 </tr>
       
   456 
       
   457 <tr class="user-nickname-wrap">
       
   458 	<th><label for="nickname"><?php _e( 'Nickname' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th>
       
   459 	<td><input type="text" name="nickname" id="nickname" value="<?php echo esc_attr( $profileuser->nickname ); ?>" class="regular-text" /></td>
       
   460 </tr>
       
   461 
       
   462 <tr class="user-display-name-wrap">
       
   463 	<th><label for="display_name"><?php _e( 'Display name publicly as' ); ?></label></th>
       
   464 	<td>
       
   465 		<select name="display_name" id="display_name">
       
   466 		<?php
       
   467 			$public_display                     = array();
       
   468 			$public_display['display_nickname'] = $profileuser->nickname;
       
   469 			$public_display['display_username'] = $profileuser->user_login;
       
   470 
       
   471 		if ( ! empty( $profileuser->first_name ) ) {
       
   472 			$public_display['display_firstname'] = $profileuser->first_name;
       
   473 		}
       
   474 
       
   475 		if ( ! empty( $profileuser->last_name ) ) {
       
   476 			$public_display['display_lastname'] = $profileuser->last_name;
       
   477 		}
       
   478 
       
   479 		if ( ! empty( $profileuser->first_name ) && ! empty( $profileuser->last_name ) ) {
       
   480 			$public_display['display_firstlast'] = $profileuser->first_name . ' ' . $profileuser->last_name;
       
   481 			$public_display['display_lastfirst'] = $profileuser->last_name . ' ' . $profileuser->first_name;
       
   482 		}
       
   483 
       
   484 		if ( ! in_array( $profileuser->display_name, $public_display, true ) ) { // Only add this if it isn't duplicated elsewhere.
       
   485 			$public_display = array( 'display_displayname' => $profileuser->display_name ) + $public_display;
       
   486 		}
       
   487 
       
   488 			$public_display = array_map( 'trim', $public_display );
       
   489 			$public_display = array_unique( $public_display );
       
   490 
       
   491 		foreach ( $public_display as $id => $item ) {
       
   492 			?>
       
   493 		<option <?php selected( $profileuser->display_name, $item ); ?>><?php echo $item; ?></option>
       
   494 			<?php
       
   495 		}
       
   496 		?>
       
   497 		</select>
       
   498 		</td>
       
   499 	</tr>
       
   500 	</table>
       
   501 
       
   502 	<h2><?php _e( 'Contact Info' ); ?></h2>
       
   503 
       
   504 	<table class="form-table" role="presentation">
       
   505 	<tr class="user-email-wrap">
       
   506 		<th><label for="email"><?php _e( 'Email' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th>
       
   507 		<td><input type="email" name="email" id="email" aria-describedby="email-description" value="<?php echo esc_attr( $profileuser->user_email ); ?>" class="regular-text ltr" />
       
   508 		<?php
       
   509 		if ( $profileuser->ID == $current_user->ID ) :
       
   510 			?>
       
   511 		<p class="description" id="email-description">
       
   512 			<?php _e( 'If you change this, we will send you an email at your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>' ); ?>
       
   513 		</p>
       
   514 			<?php
       
   515 		endif;
       
   516 
       
   517 		$new_email = get_user_meta( $current_user->ID, '_new_email', true );
       
   518 		if ( $new_email && $new_email['newemail'] != $current_user->user_email && $profileuser->ID == $current_user->ID ) :
       
   519 			?>
       
   520 		<div class="updated inline">
       
   521 		<p>
       
   522 			<?php
       
   523 			printf(
       
   524 				/* translators: %s: New email. */
       
   525 				__( 'There is a pending change of your email to %s.' ),
       
   526 				'<code>' . esc_html( $new_email['newemail'] ) . '</code>'
       
   527 			);
       
   528 			printf(
       
   529 				' <a href="%1$s">%2$s</a>',
       
   530 				esc_url( wp_nonce_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ), 'dismiss-' . $current_user->ID . '_new_email' ) ),
       
   531 				__( 'Cancel' )
       
   532 			);
       
   533 			?>
       
   534 		</p>
       
   535 		</div>
       
   536 		<?php endif; ?>
       
   537 	</td>
       
   538 	</tr>
       
   539 
       
   540 	<tr class="user-url-wrap">
       
   541 	<th><label for="url"><?php _e( 'Website' ); ?></label></th>
       
   542 	<td><input type="url" name="url" id="url" value="<?php echo esc_attr( $profileuser->user_url ); ?>" class="regular-text code" /></td>
       
   543 	</tr>
       
   544 
       
   545 		<?php
       
   546 		foreach ( wp_get_user_contact_methods( $profileuser ) as $name => $desc ) {
       
   547 			?>
       
   548 	<tr class="user-<?php echo $name; ?>-wrap">
       
   549 <th><label for="<?php echo $name; ?>">
       
   550 			<?php
       
   551 			/**
       
   552 			 * Filters a user contactmethod label.
       
   553 			 *
       
   554 			 * The dynamic portion of the filter hook, `$name`, refers to
       
   555 			 * each of the keys in the contactmethods array.
       
   556 			 *
       
   557 			 * @since 2.9.0
       
   558 			 *
       
   559 			 * @param string $desc The translatable label for the contactmethod.
       
   560 			 */
       
   561 			echo apply_filters( "user_{$name}_label", $desc );
       
   562 			?>
       
   563 	</label></th>
       
   564 	<td><input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo esc_attr( $profileuser->$name ); ?>" class="regular-text" /></td>
       
   565 	</tr>
       
   566 			<?php
       
   567 		}
       
   568 		?>
       
   569 	</table>
       
   570 
       
   571 	<h2><?php IS_PROFILE_PAGE ? _e( 'About Yourself' ) : _e( 'About the user' ); ?></h2>
       
   572 
       
   573 <table class="form-table" role="presentation">
       
   574 <tr class="user-description-wrap">
       
   575 	<th><label for="description"><?php _e( 'Biographical Info' ); ?></label></th>
       
   576 	<td><textarea name="description" id="description" rows="5" cols="30"><?php echo $profileuser->description; // textarea_escaped ?></textarea>
       
   577 	<p class="description"><?php _e( 'Share a little biographical information to fill out your profile. This may be shown publicly.' ); ?></p></td>
       
   578 </tr>
       
   579 
       
   580 		<?php if ( get_option( 'show_avatars' ) ) : ?>
       
   581 <tr class="user-profile-picture">
       
   582 	<th><?php _e( 'Profile Picture' ); ?></th>
       
   583 	<td>
       
   584 			<?php echo get_avatar( $user_id ); ?>
       
   585 		<p class="description">
       
   586 			<?php
       
   587 			if ( IS_PROFILE_PAGE ) {
       
   588 				$description = sprintf(
       
   589 					/* translators: %s: Gravatar URL. */
       
   590 					__( '<a href="%s">You can change your profile picture on Gravatar</a>.' ),
       
   591 					__( 'https://en.gravatar.com/' )
       
   592 				);
       
   593 			} else {
       
   594 				$description = '';
       
   595 			}
       
   596 
       
   597 			/**
       
   598 			 * Filters the user profile picture description displayed under the Gravatar.
       
   599 			 *
       
   600 			 * @since 4.4.0
       
   601 			 * @since 4.7.0 Added the `$profileuser` parameter.
       
   602 			 *
       
   603 			 * @param string  $description The description that will be printed.
       
   604 			 * @param WP_User $profileuser The current WP_User object.
       
   605 			 */
       
   606 			echo apply_filters( 'user_profile_picture_description', $description, $profileuser );
       
   607 			?>
       
   608 		</p>
       
   609 	</td>
       
   610 </tr>
       
   611 <?php endif; ?>
       
   612 		<?php
       
   613 		/**
       
   614 		 * Filters the display of the password fields.
       
   615 		 *
       
   616 		 * @since 1.5.1
       
   617 		 * @since 2.8.0 Added the `$profileuser` parameter.
       
   618 		 * @since 4.4.0 Now evaluated only in user-edit.php.
       
   619 		 *
       
   620 		 * @param bool    $show        Whether to show the password fields. Default true.
       
   621 		 * @param WP_User $profileuser User object for the current user to edit.
       
   622 		 */
       
   623 		$show_password_fields = apply_filters( 'show_password_fields', true, $profileuser );
       
   624 		if ( $show_password_fields ) :
       
   625 			?>
       
   626 	</table>
       
   627 
       
   628 	<h2><?php _e( 'Account Management' ); ?></h2>
       
   629 <table class="form-table" role="presentation">
       
   630 <tr id="password" class="user-pass1-wrap">
       
   631 	<th><label for="pass1"><?php _e( 'New Password' ); ?></label></th>
       
   632 	<td>
       
   633 		<input class="hidden" value=" " /><!-- #24364 workaround -->
       
   634 		<button type="button" class="button wp-generate-pw hide-if-no-js" aria-expanded="false"><?php _e( 'Set New Password' ); ?></button>
       
   635 		<div class="wp-pwd hide-if-js">
       
   636 			<span class="password-input-wrapper">
       
   637 				<input type="password" name="pass1" id="pass1" class="regular-text" value="" autocomplete="off" data-pw="<?php echo esc_attr( wp_generate_password( 24 ) ); ?>" aria-describedby="pass-strength-result" />
       
   638 			</span>
       
   639 			<button type="button" class="button wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Hide password' ); ?>">
       
   640 				<span class="dashicons dashicons-hidden" aria-hidden="true"></span>
       
   641 				<span class="text"><?php _e( 'Hide' ); ?></span>
       
   642 			</button>
       
   643 			<button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Cancel password change' ); ?>">
       
   644 				<span class="dashicons dashicons-no" aria-hidden="true"></span>
       
   645 				<span class="text"><?php _e( 'Cancel' ); ?></span>
       
   646 			</button>
       
   647 			<div style="display:none" id="pass-strength-result" aria-live="polite"></div>
       
   648 		</div>
       
   649 	</td>
       
   650 </tr>
       
   651 <tr class="user-pass2-wrap hide-if-js">
       
   652 	<th scope="row"><label for="pass2"><?php _e( 'Repeat New Password' ); ?></label></th>
       
   653 	<td>
       
   654 	<input name="pass2" type="password" id="pass2" class="regular-text" value="" autocomplete="off" aria-describedby="pass2-desc" />
       
   655 			<?php if ( IS_PROFILE_PAGE ) : ?>
       
   656 				<p class="description" id="pass2-desc"><?php _e( 'Type your new password again.' ); ?></p>
       
   657 			<?php else : ?>
       
   658 				<p class="description" id="pass2-desc"><?php _e( 'Type the new password again.' ); ?></p>
       
   659 			<?php endif; ?>
   242 			<?php endif; ?>
   660 	</td>
   243 
   661 </tr>
   244 			<hr class="wp-header-end">
   662 <tr class="pw-weak">
   245 
   663 	<th><?php _e( 'Confirm Password' ); ?></th>
   246 			<form id="your-profile" action="<?php echo esc_url( self_admin_url( IS_PROFILE_PAGE ? 'profile.php' : 'user-edit.php' ) ); ?>" method="post" novalidate="novalidate"
   664 	<td>
       
   665 		<label>
       
   666 			<input type="checkbox" name="pw_weak" class="pw-checkbox" />
       
   667 			<span id="pw-weak-text-label"><?php _e( 'Confirm use of weak password' ); ?></span>
       
   668 		</label>
       
   669 	</td>
       
   670 </tr>
       
   671 	<?php endif; ?>
       
   672 
       
   673 		<?php
       
   674 		// Allow admins to send reset password link.
       
   675 		if ( ! IS_PROFILE_PAGE ) :
       
   676 			?>
       
   677 	<tr class="user-generate-reset-link-wrap hide-if-no-js">
       
   678 		<th><?php _e( 'Password Reset' ); ?></th>
       
   679 		<td>
       
   680 			<div class="generate-reset-link">
       
   681 				<button type="button" class="button button-secondary" id="generate-reset-link">
       
   682 					<?php _e( 'Send Reset Link' ); ?>
       
   683 				</button>
       
   684 			</div>
       
   685 			<p class="description">
       
   686 				<?php
       
   687 				/* translators: %s: User's display name. */
       
   688 				printf( __( 'Send %s a link to reset their password. This will not change their password, nor will it force a change.' ), esc_html( $profileuser->display_name ) );
       
   689 				?>
       
   690 			</p>
       
   691 		</td>
       
   692 	</tr>
       
   693 		<?php endif; ?>
       
   694 
       
   695 		<?php
       
   696 		if ( IS_PROFILE_PAGE && count( $sessions->get_all() ) === 1 ) :
       
   697 			?>
       
   698 	<tr class="user-sessions-wrap hide-if-no-js">
       
   699 		<th><?php _e( 'Sessions' ); ?></th>
       
   700 		<td aria-live="assertive">
       
   701 			<div class="destroy-sessions"><button type="button" disabled class="button"><?php _e( 'Log Out Everywhere Else' ); ?></button></div>
       
   702 			<p class="description">
       
   703 				<?php _e( 'You are only logged in at this location.' ); ?>
       
   704 			</p>
       
   705 		</td>
       
   706 	</tr>
       
   707 <?php elseif ( IS_PROFILE_PAGE && count( $sessions->get_all() ) > 1 ) : ?>
       
   708 	<tr class="user-sessions-wrap hide-if-no-js">
       
   709 		<th><?php _e( 'Sessions' ); ?></th>
       
   710 		<td aria-live="assertive">
       
   711 			<div class="destroy-sessions"><button type="button" class="button" id="destroy-sessions"><?php _e( 'Log Out Everywhere Else' ); ?></button></div>
       
   712 			<p class="description">
       
   713 				<?php _e( 'Did you lose your phone or leave your account logged in at a public computer? You can log out everywhere else, and stay logged in here.' ); ?>
       
   714 			</p>
       
   715 		</td>
       
   716 	</tr>
       
   717 <?php elseif ( ! IS_PROFILE_PAGE && $sessions->get_all() ) : ?>
       
   718 	<tr class="user-sessions-wrap hide-if-no-js">
       
   719 		<th><?php _e( 'Sessions' ); ?></th>
       
   720 		<td>
       
   721 			<p><button type="button" class="button" id="destroy-sessions"><?php _e( 'Log Out Everywhere' ); ?></button></p>
       
   722 			<p class="description">
       
   723 				<?php
       
   724 				/* translators: %s: User's display name. */
       
   725 				printf( __( 'Log %s out of all locations.' ), $profileuser->display_name );
       
   726 				?>
       
   727 			</p>
       
   728 		</td>
       
   729 	</tr>
       
   730 <?php endif; ?>
       
   731 
       
   732 	</table>
       
   733 
       
   734 
       
   735 		<?php if ( wp_is_application_passwords_available_for_user( $user_id ) ) : ?>
       
   736 	<div class="application-passwords hide-if-no-js" id="application-passwords-section">
       
   737 		<h2><?php _e( 'Application Passwords' ); ?></h2>
       
   738 		<p><?php _e( 'Application passwords allow authentication via non-interactive systems, such as XML-RPC or the REST API, without providing your actual password. Application passwords can be easily revoked. They cannot be used for traditional logins to your website.' ); ?></p>
       
   739 			<?php
       
   740 			if ( is_multisite() ) {
       
   741 				$blogs       = get_blogs_of_user( $user_id, true );
       
   742 				$blogs_count = count( $blogs );
       
   743 				if ( $blogs_count > 1 ) {
       
   744 					?>
       
   745 					<p>
       
   746 						<?php
       
   747 						printf(
       
   748 							/* translators: 1: URL to my-sites.php, 2: Number of sites the user has. */
       
   749 							_n(
       
   750 								'Application passwords grant access to <a href="%1$s">the %2$s site in this installation that you have permissions on</a>.',
       
   751 								'Application passwords grant access to <a href="%1$s">all %2$s sites in this installation that you have permissions on</a>.',
       
   752 								$blogs_count
       
   753 							),
       
   754 							admin_url( 'my-sites.php' ),
       
   755 							number_format_i18n( $blogs_count )
       
   756 						);
       
   757 						?>
       
   758 					</p>
       
   759 					<?php
       
   760 				}
       
   761 			}
       
   762 
       
   763 			if ( ! wp_is_site_protected_by_basic_auth( 'front' ) ) {
       
   764 				?>
       
   765 			<div class="create-application-password form-wrap">
       
   766 				<div class="form-field">
       
   767 					<label for="new_application_password_name"><?php _e( 'New Application Password Name' ); ?></label>
       
   768 					<input type="text" size="30" id="new_application_password_name" name="new_application_password_name" placeholder="<?php esc_attr_e( 'WordPress App on My Phone' ); ?>" class="input" aria-required="true" aria-describedby="new_application_password_name_desc" />
       
   769 					<p class="description" id="new_application_password_name_desc"><?php _e( 'Required to create an Application Password, but not to update the user.' ); ?></p>
       
   770 				</div>
       
   771 
       
   772 				<?php
   247 				<?php
   773 				/**
   248 				/**
   774 				 * Fires in the create Application Passwords form.
   249 				 * Fires inside the your-profile form tag on the user editing screen.
   775 				 *
   250 				 *
   776 				 * @since 5.6.0
   251 				 * @since 3.0.0
   777 				 *
       
   778 				 * @param WP_User $profileuser The current WP_User object.
       
   779 				 */
   252 				 */
   780 				do_action( 'wp_create_application_password_form', $profileuser );
   253 				do_action( 'user_edit_form_tag' );
   781 				?>
   254 				?>
   782 
   255 				>
   783 				<button type="button" name="do_new_application_password" id="do_new_application_password" class="button button-secondary"><?php _e( 'Add New Application Password' ); ?></button>
   256 				<?php wp_nonce_field( 'update-user_' . $user_id ); ?>
   784 			</div>
   257 				<?php if ( $wp_http_referer ) : ?>
   785 		<?php } else { ?>
   258 					<input type="hidden" name="wp_http_referer" value="<?php echo esc_url( $wp_http_referer ); ?>" />
   786 			<div class="notice notice-error inline">
   259 				<?php endif; ?>
   787 				<p><?php _e( 'Your website appears to use Basic Authentication, which is not currently compatible with Application Passwords.' ); ?></p>
   260 				<p>
   788 			</div>
   261 					<input type="hidden" name="from" value="profile" />
   789 		<?php } ?>
   262 					<input type="hidden" name="checkuser_id" value="<?php echo get_current_user_id(); ?>" />
   790 
   263 				</p>
   791 		<div class="application-passwords-list-table-wrapper">
   264 
   792 			<?php
   265 				<h2><?php _e( 'Personal Options' ); ?></h2>
   793 			$application_passwords_list_table = _get_list_table( 'WP_Application_Passwords_List_Table', array( 'screen' => 'application-passwords-user' ) );
   266 
   794 			$application_passwords_list_table->prepare_items();
   267 				<table class="form-table" role="presentation">
   795 			$application_passwords_list_table->display();
   268 					<?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?>
   796 			?>
   269 						<tr class="user-rich-editing-wrap">
       
   270 							<th scope="row"><?php _e( 'Visual Editor' ); ?></th>
       
   271 							<td>
       
   272 								<label for="rich_editing"><input name="rich_editing" type="checkbox" id="rich_editing" value="false" <?php checked( 'false', $profile_user->rich_editing ); ?> />
       
   273 									<?php _e( 'Disable the visual editor when writing' ); ?>
       
   274 								</label>
       
   275 							</td>
       
   276 						</tr>
       
   277 					<?php endif; ?>
       
   278 
       
   279 					<?php
       
   280 					$show_syntax_highlighting_preference = (
       
   281 					// For Custom HTML widget and Additional CSS in Customizer.
       
   282 					user_can( $profile_user, 'edit_theme_options' )
       
   283 					||
       
   284 					// Edit plugins.
       
   285 					user_can( $profile_user, 'edit_plugins' )
       
   286 					||
       
   287 					// Edit themes.
       
   288 					user_can( $profile_user, 'edit_themes' )
       
   289 					);
       
   290 					?>
       
   291 
       
   292 					<?php if ( $show_syntax_highlighting_preference ) : ?>
       
   293 					<tr class="user-syntax-highlighting-wrap">
       
   294 						<th scope="row"><?php _e( 'Syntax Highlighting' ); ?></th>
       
   295 						<td>
       
   296 							<label for="syntax_highlighting"><input name="syntax_highlighting" type="checkbox" id="syntax_highlighting" value="false" <?php checked( 'false', $profile_user->syntax_highlighting ); ?> />
       
   297 								<?php _e( 'Disable syntax highlighting when editing code' ); ?>
       
   298 							</label>
       
   299 						</td>
       
   300 					</tr>
       
   301 					<?php endif; ?>
       
   302 
       
   303 					<?php if ( count( $_wp_admin_css_colors ) > 1 && has_action( 'admin_color_scheme_picker' ) ) : ?>
       
   304 					<tr class="user-admin-color-wrap">
       
   305 						<th scope="row"><?php _e( 'Admin Color Scheme' ); ?></th>
       
   306 						<td>
       
   307 							<?php
       
   308 							/**
       
   309 							 * Fires in the 'Admin Color Scheme' section of the user editing screen.
       
   310 							 *
       
   311 							 * The section is only enabled if a callback is hooked to the action,
       
   312 							 * and if there is more than one defined color scheme for the admin.
       
   313 							 *
       
   314 							 * @since 3.0.0
       
   315 							 * @since 3.8.1 Added `$user_id` parameter.
       
   316 							 *
       
   317 							 * @param int $user_id The user ID.
       
   318 							 */
       
   319 							do_action( 'admin_color_scheme_picker', $user_id );
       
   320 							?>
       
   321 						</td>
       
   322 					</tr>
       
   323 					<?php endif; // End if count ( $_wp_admin_css_colors ) > 1 ?>
       
   324 
       
   325 					<?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?>
       
   326 					<tr class="user-comment-shortcuts-wrap">
       
   327 						<th scope="row"><?php _e( 'Keyboard Shortcuts' ); ?></th>
       
   328 						<td>
       
   329 							<label for="comment_shortcuts">
       
   330 								<input type="checkbox" name="comment_shortcuts" id="comment_shortcuts" value="true" <?php checked( 'true', $profile_user->comment_shortcuts ); ?> />
       
   331 								<?php _e( 'Enable keyboard shortcuts for comment moderation.' ); ?>
       
   332 							</label>
       
   333 							<?php _e( '<a href="https://wordpress.org/support/article/keyboard-shortcuts/" target="_blank">More information</a>' ); ?>
       
   334 						</td>
       
   335 					</tr>
       
   336 					<?php endif; ?>
       
   337 
       
   338 					<tr class="show-admin-bar user-admin-bar-front-wrap">
       
   339 						<th scope="row"><?php _e( 'Toolbar' ); ?></th>
       
   340 						<td>
       
   341 							<label for="admin_bar_front">
       
   342 								<input name="admin_bar_front" type="checkbox" id="admin_bar_front" value="1"<?php checked( _get_admin_bar_pref( 'front', $profile_user->ID ) ); ?> />
       
   343 								<?php _e( 'Show Toolbar when viewing site' ); ?>
       
   344 							</label><br />
       
   345 						</td>
       
   346 					</tr>
       
   347 
       
   348 					<?php $languages = get_available_languages(); ?>
       
   349 					<?php if ( $languages ) : ?>
       
   350 					<tr class="user-language-wrap">
       
   351 						<th scope="row">
       
   352 							<?php /* translators: The user language selection field label. */ ?>
       
   353 							<label for="locale"><?php _e( 'Language' ); ?><span class="dashicons dashicons-translation" aria-hidden="true"></span></label>
       
   354 						</th>
       
   355 						<td>
       
   356 							<?php
       
   357 								$user_locale = $profile_user->locale;
       
   358 
       
   359 							if ( 'en_US' === $user_locale ) {
       
   360 								$user_locale = '';
       
   361 							} elseif ( '' === $user_locale || ! in_array( $user_locale, $languages, true ) ) {
       
   362 								$user_locale = 'site-default';
       
   363 							}
       
   364 
       
   365 							wp_dropdown_languages(
       
   366 								array(
       
   367 									'name'      => 'locale',
       
   368 									'id'        => 'locale',
       
   369 									'selected'  => $user_locale,
       
   370 									'languages' => $languages,
       
   371 									'show_available_translations' => false,
       
   372 									'show_option_site_default' => true,
       
   373 								)
       
   374 							);
       
   375 							?>
       
   376 						</td>
       
   377 					</tr>
       
   378 					<?php endif; ?>
       
   379 
       
   380 					<?php
       
   381 					/**
       
   382 					 * Fires at the end of the 'Personal Options' settings table on the user editing screen.
       
   383 					 *
       
   384 					 * @since 2.7.0
       
   385 					 *
       
   386 					 * @param WP_User $profile_user The current WP_User object.
       
   387 					 */
       
   388 					do_action( 'personal_options', $profile_user );
       
   389 					?>
       
   390 
       
   391 				</table>
       
   392 				<?php
       
   393 				if ( IS_PROFILE_PAGE ) {
       
   394 					/**
       
   395 					 * Fires after the 'Personal Options' settings table on the 'Profile' editing screen.
       
   396 					 *
       
   397 					 * The action only fires if the current user is editing their own profile.
       
   398 					 *
       
   399 					 * @since 2.0.0
       
   400 					 *
       
   401 					 * @param WP_User $profile_user The current WP_User object.
       
   402 					 */
       
   403 					do_action( 'profile_personal_options', $profile_user );
       
   404 				}
       
   405 				?>
       
   406 
       
   407 				<h2><?php _e( 'Name' ); ?></h2>
       
   408 
       
   409 				<table class="form-table" role="presentation">
       
   410 					<tr class="user-user-login-wrap">
       
   411 						<th><label for="user_login"><?php _e( 'Username' ); ?></label></th>
       
   412 						<td><input type="text" name="user_login" id="user_login" value="<?php echo esc_attr( $profile_user->user_login ); ?>" disabled="disabled" class="regular-text" /> <span class="description"><?php _e( 'Usernames cannot be changed.' ); ?></span></td>
       
   413 					</tr>
       
   414 
       
   415 					<?php if ( ! IS_PROFILE_PAGE && ! is_network_admin() && current_user_can( 'promote_user', $profile_user->ID ) ) : ?>
       
   416 						<tr class="user-role-wrap">
       
   417 							<th><label for="role"><?php _e( 'Role' ); ?></label></th>
       
   418 							<td>
       
   419 								<select name="role" id="role">
       
   420 									<?php
       
   421 									// Compare user role against currently editable roles.
       
   422 									$user_roles = array_intersect( array_values( $profile_user->roles ), array_keys( get_editable_roles() ) );
       
   423 									$user_role  = reset( $user_roles );
       
   424 
       
   425 									// Print the full list of roles with the primary one selected.
       
   426 									wp_dropdown_roles( $user_role );
       
   427 
       
   428 									// Print the 'no role' option. Make it selected if the user has no role yet.
       
   429 									if ( $user_role ) {
       
   430 										echo '<option value="">' . __( '&mdash; No role for this site &mdash;' ) . '</option>';
       
   431 									} else {
       
   432 										echo '<option value="" selected="selected">' . __( '&mdash; No role for this site &mdash;' ) . '</option>';
       
   433 									}
       
   434 									?>
       
   435 							</select>
       
   436 							</td>
       
   437 						</tr>
       
   438 					<?php endif; // End if ! IS_PROFILE_PAGE. ?>
       
   439 
       
   440 					<?php if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && ! isset( $super_admins ) ) : ?>
       
   441 						<tr class="user-super-admin-wrap">
       
   442 							<th><?php _e( 'Super Admin' ); ?></th>
       
   443 							<td>
       
   444 								<?php if ( 0 !== strcasecmp( $profile_user->user_email, get_site_option( 'admin_email' ) ) || ! is_super_admin( $profile_user->ID ) ) : ?>
       
   445 									<p><label><input type="checkbox" id="super_admin" name="super_admin"<?php checked( is_super_admin( $profile_user->ID ) ); ?> /> <?php _e( 'Grant this user super admin privileges for the Network.' ); ?></label></p>
       
   446 								<?php else : ?>
       
   447 									<p><?php _e( 'Super admin privileges cannot be removed because this user has the network admin email.' ); ?></p>
       
   448 								<?php endif; ?>
       
   449 							</td>
       
   450 						</tr>
       
   451 					<?php endif; ?>
       
   452 
       
   453 					<tr class="user-first-name-wrap">
       
   454 						<th><label for="first_name"><?php _e( 'First Name' ); ?></label></th>
       
   455 						<td><input type="text" name="first_name" id="first_name" value="<?php echo esc_attr( $profile_user->first_name ); ?>" class="regular-text" /></td>
       
   456 					</tr>
       
   457 
       
   458 					<tr class="user-last-name-wrap">
       
   459 						<th><label for="last_name"><?php _e( 'Last Name' ); ?></label></th>
       
   460 						<td><input type="text" name="last_name" id="last_name" value="<?php echo esc_attr( $profile_user->last_name ); ?>" class="regular-text" /></td>
       
   461 					</tr>
       
   462 
       
   463 					<tr class="user-nickname-wrap">
       
   464 						<th><label for="nickname"><?php _e( 'Nickname' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th>
       
   465 						<td><input type="text" name="nickname" id="nickname" value="<?php echo esc_attr( $profile_user->nickname ); ?>" class="regular-text" /></td>
       
   466 					</tr>
       
   467 
       
   468 					<tr class="user-display-name-wrap">
       
   469 						<th>
       
   470 							<label for="display_name"><?php _e( 'Display name publicly as' ); ?></label>
       
   471 						</th>
       
   472 						<td>
       
   473 							<select name="display_name" id="display_name">
       
   474 								<?php
       
   475 									$public_display                     = array();
       
   476 									$public_display['display_nickname'] = $profile_user->nickname;
       
   477 									$public_display['display_username'] = $profile_user->user_login;
       
   478 
       
   479 								if ( ! empty( $profile_user->first_name ) ) {
       
   480 									$public_display['display_firstname'] = $profile_user->first_name;
       
   481 								}
       
   482 
       
   483 								if ( ! empty( $profile_user->last_name ) ) {
       
   484 									$public_display['display_lastname'] = $profile_user->last_name;
       
   485 								}
       
   486 
       
   487 								if ( ! empty( $profile_user->first_name ) && ! empty( $profile_user->last_name ) ) {
       
   488 									$public_display['display_firstlast'] = $profile_user->first_name . ' ' . $profile_user->last_name;
       
   489 									$public_display['display_lastfirst'] = $profile_user->last_name . ' ' . $profile_user->first_name;
       
   490 								}
       
   491 
       
   492 								if ( ! in_array( $profile_user->display_name, $public_display, true ) ) { // Only add this if it isn't duplicated elsewhere.
       
   493 									$public_display = array( 'display_displayname' => $profile_user->display_name ) + $public_display;
       
   494 								}
       
   495 
       
   496 								$public_display = array_map( 'trim', $public_display );
       
   497 								$public_display = array_unique( $public_display );
       
   498 
       
   499 								?>
       
   500 								<?php foreach ( $public_display as $id => $item ) : ?>
       
   501 									<option <?php selected( $profile_user->display_name, $item ); ?>><?php echo $item; ?></option>
       
   502 								<?php endforeach; ?>
       
   503 							</select>
       
   504 						</td>
       
   505 					</tr>
       
   506 				</table>
       
   507 
       
   508 				<h2><?php _e( 'Contact Info' ); ?></h2>
       
   509 
       
   510 				<table class="form-table" role="presentation">
       
   511 					<tr class="user-email-wrap">
       
   512 						<th><label for="email"><?php _e( 'Email' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th>
       
   513 						<td>
       
   514 							<input type="email" name="email" id="email" aria-describedby="email-description" value="<?php echo esc_attr( $profile_user->user_email ); ?>" class="regular-text ltr" />
       
   515 							<?php if ( $profile_user->ID === $current_user->ID ) : ?>
       
   516 								<p class="description" id="email-description">
       
   517 									<?php _e( 'If you change this, an email will be sent at your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>' ); ?>
       
   518 								</p>
       
   519 							<?php endif; ?>
       
   520 
       
   521 							<?php $new_email = get_user_meta( $current_user->ID, '_new_email', true ); ?>
       
   522 							<?php if ( $new_email && $new_email['newemail'] !== $current_user->user_email && $profile_user->ID === $current_user->ID ) : ?>
       
   523 							<div class="updated inline">
       
   524 								<p>
       
   525 									<?php
       
   526 									printf(
       
   527 										/* translators: %s: New email. */
       
   528 										__( 'There is a pending change of your email to %s.' ),
       
   529 										'<code>' . esc_html( $new_email['newemail'] ) . '</code>'
       
   530 									);
       
   531 									printf(
       
   532 										' <a href="%1$s">%2$s</a>',
       
   533 										esc_url( wp_nonce_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ), 'dismiss-' . $current_user->ID . '_new_email' ) ),
       
   534 										__( 'Cancel' )
       
   535 									);
       
   536 									?>
       
   537 								</p>
       
   538 							</div>
       
   539 							<?php endif; ?>
       
   540 						</td>
       
   541 					</tr>
       
   542 
       
   543 					<tr class="user-url-wrap">
       
   544 						<th><label for="url"><?php _e( 'Website' ); ?></label></th>
       
   545 						<td><input type="url" name="url" id="url" value="<?php echo esc_attr( $profile_user->user_url ); ?>" class="regular-text code" /></td>
       
   546 					</tr>
       
   547 
       
   548 					<?php foreach ( wp_get_user_contact_methods( $profile_user ) as $name => $desc ) : ?>
       
   549 					<tr class="user-<?php echo $name; ?>-wrap">
       
   550 						<th>
       
   551 							<label for="<?php echo $name; ?>">
       
   552 							<?php
       
   553 							/**
       
   554 							 * Filters a user contactmethod label.
       
   555 							 *
       
   556 							 * The dynamic portion of the hook name, `$name`, refers to
       
   557 							 * each of the keys in the contact methods array.
       
   558 							 *
       
   559 							 * @since 2.9.0
       
   560 							 *
       
   561 							 * @param string $desc The translatable label for the contact method.
       
   562 							 */
       
   563 							echo apply_filters( "user_{$name}_label", $desc );
       
   564 							?>
       
   565 							</label>
       
   566 						</th>
       
   567 						<td>
       
   568 							<input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo esc_attr( $profile_user->$name ); ?>" class="regular-text" />
       
   569 						</td>
       
   570 					</tr>
       
   571 					<?php endforeach; ?>
       
   572 				</table>
       
   573 
       
   574 				<h2><?php IS_PROFILE_PAGE ? _e( 'About Yourself' ) : _e( 'About the user' ); ?></h2>
       
   575 
       
   576 				<table class="form-table" role="presentation">
       
   577 					<tr class="user-description-wrap">
       
   578 						<th><label for="description"><?php _e( 'Biographical Info' ); ?></label></th>
       
   579 						<td><textarea name="description" id="description" rows="5" cols="30"><?php echo $profile_user->description; // textarea_escaped ?></textarea>
       
   580 						<p class="description"><?php _e( 'Share a little biographical information to fill out your profile. This may be shown publicly.' ); ?></p></td>
       
   581 					</tr>
       
   582 
       
   583 					<?php if ( get_option( 'show_avatars' ) ) : ?>
       
   584 						<tr class="user-profile-picture">
       
   585 							<th><?php _e( 'Profile Picture' ); ?></th>
       
   586 							<td>
       
   587 								<?php echo get_avatar( $user_id ); ?>
       
   588 								<p class="description">
       
   589 									<?php
       
   590 									if ( IS_PROFILE_PAGE ) {
       
   591 										$description = sprintf(
       
   592 											/* translators: %s: Gravatar URL. */
       
   593 											__( '<a href="%s">You can change your profile picture on Gravatar</a>.' ),
       
   594 											__( 'https://en.gravatar.com/' )
       
   595 										);
       
   596 									} else {
       
   597 										$description = '';
       
   598 									}
       
   599 
       
   600 									/**
       
   601 									 * Filters the user profile picture description displayed under the Gravatar.
       
   602 									 *
       
   603 									 * @since 4.4.0
       
   604 									 * @since 4.7.0 Added the `$profile_user` parameter.
       
   605 									 *
       
   606 									 * @param string  $description  The description that will be printed.
       
   607 									 * @param WP_User $profile_user The current WP_User object.
       
   608 									 */
       
   609 									echo apply_filters( 'user_profile_picture_description', $description, $profile_user );
       
   610 									?>
       
   611 								</p>
       
   612 							</td>
       
   613 						</tr>
       
   614 					<?php endif; ?>
       
   615 					<?php
       
   616 					/**
       
   617 					 * Filters the display of the password fields.
       
   618 					 *
       
   619 					 * @since 1.5.1
       
   620 					 * @since 2.8.0 Added the `$profile_user` parameter.
       
   621 					 * @since 4.4.0 Now evaluated only in user-edit.php.
       
   622 					 *
       
   623 					 * @param bool    $show         Whether to show the password fields. Default true.
       
   624 					 * @param WP_User $profile_user User object for the current user to edit.
       
   625 					 */
       
   626 					$show_password_fields = apply_filters( 'show_password_fields', true, $profile_user );
       
   627 					?>
       
   628 					<?php if ( $show_password_fields ) : ?>
       
   629 						</table>
       
   630 
       
   631 						<h2><?php _e( 'Account Management' ); ?></h2>
       
   632 
       
   633 						<table class="form-table" role="presentation">
       
   634 							<tr id="password" class="user-pass1-wrap">
       
   635 								<th><label for="pass1"><?php _e( 'New Password' ); ?></label></th>
       
   636 								<td>
       
   637 									<input class="hidden" value=" " /><!-- #24364 workaround -->
       
   638 									<button type="button" class="button wp-generate-pw hide-if-no-js" aria-expanded="false"><?php _e( 'Set New Password' ); ?></button>
       
   639 									<div class="wp-pwd hide-if-js">
       
   640 										<span class="password-input-wrapper">
       
   641 											<input type="password" name="pass1" id="pass1" class="regular-text" value="" autocomplete="new-password" data-pw="<?php echo esc_attr( wp_generate_password( 24 ) ); ?>" aria-describedby="pass-strength-result" />
       
   642 										</span>
       
   643 										<button type="button" class="button wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Hide password' ); ?>">
       
   644 											<span class="dashicons dashicons-hidden" aria-hidden="true"></span>
       
   645 											<span class="text"><?php _e( 'Hide' ); ?></span>
       
   646 										</button>
       
   647 										<button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Cancel password change' ); ?>">
       
   648 											<span class="dashicons dashicons-no" aria-hidden="true"></span>
       
   649 											<span class="text"><?php _e( 'Cancel' ); ?></span>
       
   650 										</button>
       
   651 										<div style="display:none" id="pass-strength-result" aria-live="polite"></div>
       
   652 									</div>
       
   653 								</td>
       
   654 							</tr>
       
   655 							<tr class="user-pass2-wrap hide-if-js">
       
   656 								<th scope="row"><label for="pass2"><?php _e( 'Repeat New Password' ); ?></label></th>
       
   657 								<td>
       
   658 								<input name="pass2" type="password" id="pass2" class="regular-text" value="" autocomplete="new-password" aria-describedby="pass2-desc" />
       
   659 									<?php if ( IS_PROFILE_PAGE ) : ?>
       
   660 										<p class="description" id="pass2-desc"><?php _e( 'Type your new password again.' ); ?></p>
       
   661 									<?php else : ?>
       
   662 										<p class="description" id="pass2-desc"><?php _e( 'Type the new password again.' ); ?></p>
       
   663 									<?php endif; ?>
       
   664 								</td>
       
   665 							</tr>
       
   666 							<tr class="pw-weak">
       
   667 								<th><?php _e( 'Confirm Password' ); ?></th>
       
   668 								<td>
       
   669 									<label>
       
   670 										<input type="checkbox" name="pw_weak" class="pw-checkbox" />
       
   671 										<span id="pw-weak-text-label"><?php _e( 'Confirm use of weak password' ); ?></span>
       
   672 									</label>
       
   673 								</td>
       
   674 							</tr>
       
   675 							<?php endif; // End Show Password Fields. ?>
       
   676 
       
   677 							<?php // Allow admins to send reset password link. ?>
       
   678 							<?php if ( ! IS_PROFILE_PAGE ) : ?>
       
   679 								<tr class="user-generate-reset-link-wrap hide-if-no-js">
       
   680 									<th><?php _e( 'Password Reset' ); ?></th>
       
   681 									<td>
       
   682 										<div class="generate-reset-link">
       
   683 											<button type="button" class="button button-secondary" id="generate-reset-link">
       
   684 												<?php _e( 'Send Reset Link' ); ?>
       
   685 											</button>
       
   686 										</div>
       
   687 										<p class="description">
       
   688 											<?php
       
   689 											printf(
       
   690 												/* translators: %s: User's display name. */
       
   691 												__( 'Send %s a link to reset their password. This will not change their password, nor will it force a change.' ),
       
   692 												esc_html( $profile_user->display_name )
       
   693 											);
       
   694 											?>
       
   695 										</p>
       
   696 									</td>
       
   697 								</tr>
       
   698 							<?php endif; ?>
       
   699 
       
   700 							<?php if ( IS_PROFILE_PAGE && count( $sessions->get_all() ) === 1 ) : ?>
       
   701 								<tr class="user-sessions-wrap hide-if-no-js">
       
   702 									<th><?php _e( 'Sessions' ); ?></th>
       
   703 									<td aria-live="assertive">
       
   704 										<div class="destroy-sessions"><button type="button" disabled class="button"><?php _e( 'Log Out Everywhere Else' ); ?></button></div>
       
   705 										<p class="description">
       
   706 											<?php _e( 'You are only logged in at this location.' ); ?>
       
   707 										</p>
       
   708 									</td>
       
   709 								</tr>
       
   710 							<?php elseif ( IS_PROFILE_PAGE && count( $sessions->get_all() ) > 1 ) : ?>
       
   711 								<tr class="user-sessions-wrap hide-if-no-js">
       
   712 									<th><?php _e( 'Sessions' ); ?></th>
       
   713 									<td aria-live="assertive">
       
   714 										<div class="destroy-sessions"><button type="button" class="button" id="destroy-sessions"><?php _e( 'Log Out Everywhere Else' ); ?></button></div>
       
   715 										<p class="description">
       
   716 											<?php _e( 'Did you lose your phone or leave your account logged in at a public computer? You can log out everywhere else, and stay logged in here.' ); ?>
       
   717 										</p>
       
   718 									</td>
       
   719 								</tr>
       
   720 							<?php elseif ( ! IS_PROFILE_PAGE && $sessions->get_all() ) : ?>
       
   721 								<tr class="user-sessions-wrap hide-if-no-js">
       
   722 									<th><?php _e( 'Sessions' ); ?></th>
       
   723 									<td>
       
   724 										<p><button type="button" class="button" id="destroy-sessions"><?php _e( 'Log Out Everywhere' ); ?></button></p>
       
   725 										<p class="description">
       
   726 											<?php
       
   727 											/* translators: %s: User's display name. */
       
   728 											printf( __( 'Log %s out of all locations.' ), $profile_user->display_name );
       
   729 											?>
       
   730 										</p>
       
   731 									</td>
       
   732 								</tr>
       
   733 							<?php endif; ?>
       
   734 						</table>
       
   735 
       
   736 					<?php if ( wp_is_application_passwords_available_for_user( $user_id ) || ! wp_is_application_passwords_supported() ) : ?>
       
   737 						<div class="application-passwords hide-if-no-js" id="application-passwords-section">
       
   738 							<h2><?php _e( 'Application Passwords' ); ?></h2>
       
   739 							<p><?php _e( 'Application passwords allow authentication via non-interactive systems, such as XML-RPC or the REST API, without providing your actual password. Application passwords can be easily revoked. They cannot be used for traditional logins to your website.' ); ?></p>
       
   740 							<?php if ( wp_is_application_passwords_available_for_user( $user_id ) ) : ?>
       
   741 								<?php
       
   742 								if ( is_multisite() ) :
       
   743 									$blogs       = get_blogs_of_user( $user_id, true );
       
   744 									$blogs_count = count( $blogs );
       
   745 
       
   746 									if ( $blogs_count > 1 ) :
       
   747 										?>
       
   748 										<p>
       
   749 											<?php
       
   750 											/* translators: 1: URL to my-sites.php, 2: Number of sites the user has. */
       
   751 											$message = _n(
       
   752 												'Application passwords grant access to <a href="%1$s">the %2$s site in this installation that you have permissions on</a>.',
       
   753 												'Application passwords grant access to <a href="%1$s">all %2$s sites in this installation that you have permissions on</a>.',
       
   754 												$blogs_count
       
   755 											);
       
   756 
       
   757 											if ( is_super_admin( $user_id ) ) {
       
   758 												/* translators: 1: URL to my-sites.php, 2: Number of sites the user has. */
       
   759 												$message = _n(
       
   760 													'Application passwords grant access to <a href="%1$s">the %2$s site on the network as you have Super Admin rights</a>.',
       
   761 													'Application passwords grant access to <a href="%1$s">all %2$s sites on the network as you have Super Admin rights</a>.',
       
   762 													$blogs_count
       
   763 												);
       
   764 											}
       
   765 
       
   766 											printf(
       
   767 												$message,
       
   768 												admin_url( 'my-sites.php' ),
       
   769 												number_format_i18n( $blogs_count )
       
   770 											);
       
   771 											?>
       
   772 										</p>
       
   773 										<?php
       
   774 									endif;
       
   775 								endif;
       
   776 								?>
       
   777 
       
   778 								<?php if ( ! wp_is_site_protected_by_basic_auth( 'front' ) ) : ?>
       
   779 									<div class="create-application-password form-wrap">
       
   780 										<div class="form-field">
       
   781 											<label for="new_application_password_name"><?php _e( 'New Application Password Name' ); ?></label>
       
   782 											<input type="text" size="30" id="new_application_password_name" name="new_application_password_name" class="input" aria-required="true" aria-describedby="new_application_password_name_desc" />
       
   783 											<p class="description" id="new_application_password_name_desc"><?php _e( 'Required to create an Application Password, but not to update the user.' ); ?></p>
       
   784 										</div>
       
   785 
       
   786 										<?php
       
   787 										/**
       
   788 										 * Fires in the create Application Passwords form.
       
   789 										 *
       
   790 										 * @since 5.6.0
       
   791 										 *
       
   792 										 * @param WP_User $profile_user The current WP_User object.
       
   793 										 */
       
   794 										do_action( 'wp_create_application_password_form', $profile_user );
       
   795 										?>
       
   796 
       
   797 										<button type="button" name="do_new_application_password" id="do_new_application_password" class="button button-secondary"><?php _e( 'Add New Application Password' ); ?></button>
       
   798 									</div>
       
   799 								<?php else : ?>
       
   800 									<div class="notice notice-error inline">
       
   801 										<p><?php _e( 'Your website appears to use Basic Authentication, which is not currently compatible with Application Passwords.' ); ?></p>
       
   802 									</div>
       
   803 								<?php endif; ?>
       
   804 
       
   805 								<div class="application-passwords-list-table-wrapper">
       
   806 									<?php
       
   807 									$application_passwords_list_table = _get_list_table( 'WP_Application_Passwords_List_Table', array( 'screen' => 'application-passwords-user' ) );
       
   808 									$application_passwords_list_table->prepare_items();
       
   809 									$application_passwords_list_table->display();
       
   810 									?>
       
   811 								</div>
       
   812 							<?php elseif ( ! wp_is_application_passwords_supported() ) : ?>
       
   813 								<p><?php _e( 'The application password feature requires HTTPS, which is not enabled on this site.' ); ?></p>
       
   814 								<p>
       
   815 									<?php
       
   816 									printf(
       
   817 										/* translators: %s: Documentation URL. */
       
   818 										__( 'If this is a development website you can <a href="%s" target="_blank">set the environment type accordingly</a> to enable application passwords.' ),
       
   819 										__( 'https://wordpress.org/support/article/editing-wp-config-php/#wp_environment_type' )
       
   820 									);
       
   821 									?>
       
   822 								</p>
       
   823 							<?php endif; ?>
       
   824 						</div>
       
   825 					<?php endif; // End Application Passwords. ?>
       
   826 
       
   827 					<?php
       
   828 					if ( IS_PROFILE_PAGE ) {
       
   829 						/**
       
   830 						 * Fires after the 'About Yourself' settings table on the 'Profile' editing screen.
       
   831 						 *
       
   832 						 * The action only fires if the current user is editing their own profile.
       
   833 						 *
       
   834 						 * @since 2.0.0
       
   835 						 *
       
   836 						 * @param WP_User $profile_user The current WP_User object.
       
   837 						 */
       
   838 						do_action( 'show_user_profile', $profile_user );
       
   839 					} else {
       
   840 						/**
       
   841 						 * Fires after the 'About the User' settings table on the 'Edit User' screen.
       
   842 						 *
       
   843 						 * @since 2.0.0
       
   844 						 *
       
   845 						 * @param WP_User $profile_user The current WP_User object.
       
   846 						 */
       
   847 						do_action( 'edit_user_profile', $profile_user );
       
   848 					}
       
   849 					?>
       
   850 
       
   851 					<?php
       
   852 					/**
       
   853 					 * Filters whether to display additional capabilities for the user.
       
   854 					 *
       
   855 					 * The 'Additional Capabilities' section will only be enabled if
       
   856 					 * the number of the user's capabilities exceeds their number of
       
   857 					 * roles.
       
   858 					 *
       
   859 					 * @since 2.8.0
       
   860 					 *
       
   861 					 * @param bool    $enable      Whether to display the capabilities. Default true.
       
   862 					 * @param WP_User $profile_user The current WP_User object.
       
   863 					 */
       
   864 					$display_additional_caps = apply_filters( 'additional_capabilities_display', true, $profile_user );
       
   865 					?>
       
   866 
       
   867 				<?php if ( count( $profile_user->caps ) > count( $profile_user->roles ) && ( true === $display_additional_caps ) ) : ?>
       
   868 					<h2><?php _e( 'Additional Capabilities' ); ?></h2>
       
   869 
       
   870 					<table class="form-table" role="presentation">
       
   871 						<tr class="user-capabilities-wrap">
       
   872 							<th scope="row"><?php _e( 'Capabilities' ); ?></th>
       
   873 							<td>
       
   874 								<?php
       
   875 								$output = '';
       
   876 								foreach ( $profile_user->caps as $cap => $value ) {
       
   877 									if ( ! $wp_roles->is_role( $cap ) ) {
       
   878 										if ( '' !== $output ) {
       
   879 											$output .= ', ';
       
   880 										}
       
   881 
       
   882 										if ( $value ) {
       
   883 											$output .= $cap;
       
   884 										} else {
       
   885 											/* translators: %s: Capability name. */
       
   886 											$output .= sprintf( __( 'Denied: %s' ), $cap );
       
   887 										}
       
   888 									}
       
   889 								}
       
   890 								echo $output;
       
   891 								?>
       
   892 							</td>
       
   893 						</tr>
       
   894 					</table>
       
   895 				<?php endif; // End Display Additional Capabilities. ?>
       
   896 
       
   897 				<input type="hidden" name="action" value="update" />
       
   898 				<input type="hidden" name="user_id" id="user_id" value="<?php echo esc_attr( $user_id ); ?>" />
       
   899 
       
   900 				<?php submit_button( IS_PROFILE_PAGE ? __( 'Update Profile' ) : __( 'Update User' ) ); ?>
       
   901 
       
   902 			</form>
   797 		</div>
   903 		</div>
   798 	</div>
       
   799 <?php endif; ?>
       
   800 
       
   801 		<?php
       
   802 		if ( IS_PROFILE_PAGE ) {
       
   803 			/**
       
   804 			 * Fires after the 'About Yourself' settings table on the 'Profile' editing screen.
       
   805 			 *
       
   806 			 * The action only fires if the current user is editing their own profile.
       
   807 			 *
       
   808 			 * @since 2.0.0
       
   809 			 *
       
   810 			 * @param WP_User $profileuser The current WP_User object.
       
   811 			 */
       
   812 			do_action( 'show_user_profile', $profileuser );
       
   813 		} else {
       
   814 			/**
       
   815 			 * Fires after the 'About the User' settings table on the 'Edit User' screen.
       
   816 			 *
       
   817 			 * @since 2.0.0
       
   818 			 *
       
   819 			 * @param WP_User $profileuser The current WP_User object.
       
   820 			 */
       
   821 			do_action( 'edit_user_profile', $profileuser );
       
   822 		}
       
   823 		?>
       
   824 
       
   825 		<?php
       
   826 		/**
       
   827 		 * Filters whether to display additional capabilities for the user.
       
   828 		 *
       
   829 		 * The 'Additional Capabilities' section will only be enabled if
       
   830 		 * the number of the user's capabilities exceeds their number of
       
   831 		 * roles.
       
   832 		 *
       
   833 		 * @since 2.8.0
       
   834 		 *
       
   835 		 * @param bool    $enable      Whether to display the capabilities. Default true.
       
   836 		 * @param WP_User $profileuser The current WP_User object.
       
   837 		 */
       
   838 		if ( count( $profileuser->caps ) > count( $profileuser->roles )
       
   839 		&& apply_filters( 'additional_capabilities_display', true, $profileuser )
       
   840 		) :
       
   841 			?>
       
   842 	<h2><?php _e( 'Additional Capabilities' ); ?></h2>
       
   843 <table class="form-table" role="presentation">
       
   844 <tr class="user-capabilities-wrap">
       
   845 	<th scope="row"><?php _e( 'Capabilities' ); ?></th>
       
   846 	<td>
       
   847 			<?php
       
   848 			$output = '';
       
   849 			foreach ( $profileuser->caps as $cap => $value ) {
       
   850 				if ( ! $wp_roles->is_role( $cap ) ) {
       
   851 					if ( '' != $output ) {
       
   852 						$output .= ', ';
       
   853 					}
       
   854 
       
   855 					if ( $value ) {
       
   856 						$output .= $cap;
       
   857 					} else {
       
   858 						/* translators: %s: Capability name. */
       
   859 						$output .= sprintf( __( 'Denied: %s' ), $cap );
       
   860 					}
       
   861 				}
       
   862 			}
       
   863 			echo $output;
       
   864 			?>
       
   865 	</td>
       
   866 </tr>
       
   867 </table>
       
   868 	<?php endif; ?>
       
   869 
       
   870 <input type="hidden" name="action" value="update" />
       
   871 <input type="hidden" name="user_id" id="user_id" value="<?php echo esc_attr( $user_id ); ?>" />
       
   872 
       
   873 		<?php submit_button( IS_PROFILE_PAGE ? __( 'Update Profile' ) : __( 'Update User' ) ); ?>
       
   874 
       
   875 </form>
       
   876 </div>
       
   877 		<?php
   904 		<?php
   878 		break;
   905 		break;
   879 }
   906 }
   880 ?>
   907 ?>
   881 <script type="text/javascript">
   908 <script type="text/javascript">