Changeset 52820
- Timestamp:
- 03/04/2022 11:27:54 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-admin/user-edit.php
r52689 r52820 198 198 ?> 199 199 200 <?php if ( ! IS_PROFILE_PAGE && is_super_admin( $profile_user->ID ) && current_user_can( 'manage_network_options' ) ) { ?> 201 <div class="notice notice-info"><p><strong><?php _e( 'Important:' ); ?></strong> <?php _e( 'This user has super admin privileges.' ); ?></p></div> 202 <?php } ?> 200 <?php if ( ! IS_PROFILE_PAGE && is_super_admin( $profile_user->ID ) && current_user_can( 'manage_network_options' ) ) : ?> 201 <div class="notice notice-info"><p><strong><?php _e( 'Important:' ); ?></strong> <?php _e( 'This user has super admin privileges.' ); ?></p></div> 202 <?php endif; ?> 203 203 204 <?php if ( isset( $_GET['updated'] ) ) : ?> 204 <div id="message" class="updated notice is-dismissible">205 <?php if ( IS_PROFILE_PAGE ) : ?>206 <p><strong><?php _e( 'Profile updated.' ); ?></strong></p>207 <?php else : ?>208 <p><strong><?php _e( 'User updated.' ); ?></strong></p>209 <?php endif; ?>210 <?php if ( $wp_http_referer && false === strpos( $wp_http_referer, 'user-new.php' ) && ! IS_PROFILE_PAGE ) : ?>211 <p><a href="<?php echo esc_url( wp_validate_redirect( esc_url_raw( $wp_http_referer ), self_admin_url( 'users.php' ) ) ); ?>"><?php _e( '← Go to Users' ); ?></a></p>212 <?php endif; ?>213 </div>205 <div id="message" class="updated notice is-dismissible"> 206 <?php if ( IS_PROFILE_PAGE ) : ?> 207 <p><strong><?php _e( 'Profile updated.' ); ?></strong></p> 208 <?php else : ?> 209 <p><strong><?php _e( 'User updated.' ); ?></strong></p> 210 <?php endif; ?> 211 <?php if ( $wp_http_referer && false === strpos( $wp_http_referer, 'user-new.php' ) && ! IS_PROFILE_PAGE ) : ?> 212 <p><a href="<?php echo esc_url( wp_validate_redirect( esc_url_raw( $wp_http_referer ), self_admin_url( 'users.php' ) ) ); ?>"><?php _e( '← Go to Users' ); ?></a></p> 213 <?php endif; ?> 214 </div> 214 215 <?php endif; ?> 216 215 217 <?php if ( isset( $_GET['error'] ) ) : ?> 216 <div class="notice notice-error">218 <div class="notice notice-error"> 217 219 <?php if ( 'new-email' === $_GET['error'] ) : ?> 218 <p><?php _e( 'Error while saving the new email address. Please try again.' ); ?></p>219 <?php endif; ?>220 </div>220 <p><?php _e( 'Error while saving the new email address. Please try again.' ); ?></p> 221 <?php endif; ?> 222 </div> 221 223 <?php endif; ?> 224 222 225 <?php if ( isset( $errors ) && is_wp_error( $errors ) ) : ?> 223 <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> 224 229 <?php endif; ?> 225 230 226 <div class="wrap" id="profile-page"> 227 <h1 class="wp-heading-inline"> 228 <?php 229 echo esc_html( $title ); 230 ?> 231 </h1> 232 233 <?php 234 if ( ! IS_PROFILE_PAGE ) { 235 if ( current_user_can( 'create_users' ) ) { 236 ?> 237 <a href="user-new.php" class="page-title-action"><?php echo esc_html_x( 'Add New', 'user' ); ?></a> 238 <?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?> 239 <a href="user-new.php" class="page-title-action"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a> 240 <?php 241 } 242 } 243 ?> 244 245 <hr class="wp-header-end"> 246 247 <form id="your-profile" action="<?php echo esc_url( self_admin_url( IS_PROFILE_PAGE ? 'profile.php' : 'user-edit.php' ) ); ?>" method="post" novalidate="novalidate" 248 <?php 249 /** 250 * Fires inside the your-profile form tag on the user editing screen. 251 * 252 * @since 3.0.0 253 */ 254 do_action( 'user_edit_form_tag' ); 255 ?> 256 > 257 <?php wp_nonce_field( 'update-user_' . $user_id ); ?> 258 <?php if ( $wp_http_referer ) : ?> 259 <input type="hidden" name="wp_http_referer" value="<?php echo esc_url( $wp_http_referer ); ?>" /> 260 <?php endif; ?> 261 <p> 262 <input type="hidden" name="from" value="profile" /> 263 <input type="hidden" name="checkuser_id" value="<?php echo get_current_user_id(); ?>" /> 264 </p> 265 266 <h2><?php _e( 'Personal Options' ); ?></h2> 267 268 <table class="form-table" role="presentation"> 269 <?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?> 270 <tr class="user-rich-editing-wrap"> 271 <th scope="row"><?php _e( 'Visual Editor' ); ?></th> 272 <td> 273 <label for="rich_editing"><input name="rich_editing" type="checkbox" id="rich_editing" value="false" <?php checked( 'false', $profile_user->rich_editing ); ?> /> 274 <?php _e( 'Disable the visual editor when writing' ); ?> 275 </label> 276 </td> 277 </tr> 278 <?php endif; ?> 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 349 $languages = get_available_languages(); 350 if ( $languages ) : 351 ?> 352 <tr class="user-language-wrap"> 353 <th scope="row"> 354 <?php /* translators: The user language selection field label. */ ?> 355 <label for="locale"><?php _e( 'Language' ); ?><span class="dashicons dashicons-translation" aria-hidden="true"></span></label> 356 </th> 357 <td> 358 <?php 359 $user_locale = $profile_user->locale; 360 361 if ( 'en_US' === $user_locale ) { 362 $user_locale = ''; 363 } elseif ( '' === $user_locale || ! in_array( $user_locale, $languages, true ) ) { 364 $user_locale = 'site-default'; 365 } 366 367 wp_dropdown_languages( 368 array( 369 'name' => 'locale', 370 'id' => 'locale', 371 'selected' => $user_locale, 372 'languages' => $languages, 373 'show_available_translations' => false, 374 'show_option_site_default' => true, 375 ) 376 ); 377 ?> 378 </td> 379 </tr> 380 <?php 381 endif; 382 ?> 383 384 <?php 385 /** 386 * Fires at the end of the 'Personal Options' settings table on the user editing screen. 387 * 388 * @since 2.7.0 389 * 390 * @param WP_User $profile_user The current WP_User object. 391 */ 392 do_action( 'personal_options', $profile_user ); 393 ?> 394 395 </table> 396 <?php 397 if ( IS_PROFILE_PAGE ) { 398 /** 399 * Fires after the 'Personal Options' settings table on the 'Profile' editing screen. 400 * 401 * The action only fires if the current user is editing their own profile. 402 * 403 * @since 2.0.0 404 * 405 * @param WP_User $profile_user The current WP_User object. 406 */ 407 do_action( 'profile_personal_options', $profile_user ); 408 } 409 ?> 410 411 <h2><?php _e( 'Name' ); ?></h2> 412 413 <table class="form-table" role="presentation"> 414 <tr class="user-user-login-wrap"> 415 <th><label for="user_login"><?php _e( 'Username' ); ?></label></th> 416 <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> 417 </tr> 418 419 <?php if ( ! IS_PROFILE_PAGE && ! is_network_admin() && current_user_can( 'promote_user', $profile_user->ID ) ) : ?> 420 <tr class="user-role-wrap"><th><label for="role"><?php _e( 'Role' ); ?></label></th> 421 <td><select name="role" id="role"> 422 <?php 423 // Compare user role against currently editable roles. 424 $user_roles = array_intersect( array_values( $profile_user->roles ), array_keys( get_editable_roles() ) ); 425 $user_role = reset( $user_roles ); 426 427 // Print the full list of roles with the primary one selected. 428 wp_dropdown_roles( $user_role ); 429 430 // Print the 'no role' option. Make it selected if the user has no role yet. 431 if ( $user_role ) { 432 echo '<option value="">' . __( '— No role for this site —' ) . '</option>'; 433 } else { 434 echo '<option value="" selected="selected">' . __( '— No role for this site —' ) . '</option>'; 435 } 436 ?> 437 </select></td></tr> 438 <?php 439 endif; // End if ! IS_PROFILE_PAGE. 440 441 if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && ! isset( $super_admins ) ) { 442 ?> 443 <tr class="user-super-admin-wrap"><th><?php _e( 'Super Admin' ); ?></th> 444 <td> 445 <?php if ( 0 !== strcasecmp( $profile_user->user_email, get_site_option( 'admin_email' ) ) || ! is_super_admin( $profile_user->ID ) ) : ?> 446 <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> 447 <?php else : ?> 448 <p><?php _e( 'Super admin privileges cannot be removed because this user has the network admin email.' ); ?></p> 449 <?php endif; ?> 450 </td></tr> 451 <?php } ?> 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><label for="display_name"><?php _e( 'Display name publicly as' ); ?></label></th> 470 <td> 471 <select name="display_name" id="display_name"> 472 <?php 473 $public_display = array(); 474 $public_display['display_nickname'] = $profile_user->nickname; 475 $public_display['display_username'] = $profile_user->user_login; 476 477 if ( ! empty( $profile_user->first_name ) ) { 478 $public_display['display_firstname'] = $profile_user->first_name; 479 } 480 481 if ( ! empty( $profile_user->last_name ) ) { 482 $public_display['display_lastname'] = $profile_user->last_name; 483 } 484 485 if ( ! empty( $profile_user->first_name ) && ! empty( $profile_user->last_name ) ) { 486 $public_display['display_firstlast'] = $profile_user->first_name . ' ' . $profile_user->last_name; 487 $public_display['display_lastfirst'] = $profile_user->last_name . ' ' . $profile_user->first_name; 488 } 489 490 if ( ! in_array( $profile_user->display_name, $public_display, true ) ) { // Only add this if it isn't duplicated elsewhere. 491 $public_display = array( 'display_displayname' => $profile_user->display_name ) + $public_display; 492 } 493 494 $public_display = array_map( 'trim', $public_display ); 495 $public_display = array_unique( $public_display ); 496 497 foreach ( $public_display as $id => $item ) { 498 ?> 499 <option <?php selected( $profile_user->display_name, $item ); ?>><?php echo $item; ?></option> 500 <?php 501 } 502 ?> 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><input type="email" name="email" id="email" aria-describedby="email-description" value="<?php echo esc_attr( $profile_user->user_email ); ?>" class="regular-text ltr" /> 514 <?php 515 if ( $profile_user->ID === $current_user->ID ) : 516 ?> 517 <p class="description" id="email-description"> 518 <?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>' ); ?> 519 </p> 520 <?php 521 endif; 522 523 $new_email = get_user_meta( $current_user->ID, '_new_email', true ); 524 if ( $new_email && $new_email['newemail'] !== $current_user->user_email && $profile_user->ID === $current_user->ID ) : 525 ?> 526 <div class="updated inline"> 527 <p> 528 <?php 529 printf( 530 /* translators: %s: New email. */ 531 __( 'There is a pending change of your email to %s.' ), 532 '<code>' . esc_html( $new_email['newemail'] ) . '</code>' 533 ); 534 printf( 535 ' <a href="%1$s">%2$s</a>', 536 esc_url( wp_nonce_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ), 'dismiss-' . $current_user->ID . '_new_email' ) ), 537 __( 'Cancel' ) 538 ); 539 ?> 540 </p> 541 </div> 542 <?php endif; ?> 543 </td> 544 </tr> 545 546 <tr class="user-url-wrap"> 547 <th><label for="url"><?php _e( 'Website' ); ?></label></th> 548 <td><input type="url" name="url" id="url" value="<?php echo esc_attr( $profile_user->user_url ); ?>" class="regular-text code" /></td> 549 </tr> 550 551 <?php 552 foreach ( wp_get_user_contact_methods( $profile_user ) as $name => $desc ) { 553 ?> 554 <tr class="user-<?php echo $name; ?>-wrap"> 555 <th><label for="<?php echo $name; ?>"> 556 <?php 557 /** 558 * Filters a user contactmethod label. 559 * 560 * The dynamic portion of the hook name, `$name`, refers to 561 * each of the keys in the contact methods array. 562 * 563 * @since 2.9.0 564 * 565 * @param string $desc The translatable label for the contact method. 566 */ 567 echo apply_filters( "user_{$name}_label", $desc ); 568 ?> 569 </label></th> 570 <td><input type="text" name="<?php echo $name; ?>" id="<?php echo $name; ?>" value="<?php echo esc_attr( $profile_user->$name ); ?>" class="regular-text" /></td> 571 </tr> 572 <?php 573 } 574 ?> 575 </table> 576 577 <h2><?php IS_PROFILE_PAGE ? _e( 'About Yourself' ) : _e( 'About the user' ); ?></h2> 578 579 <table class="form-table" role="presentation"> 580 <tr class="user-description-wrap"> 581 <th><label for="description"><?php _e( 'Biographical Info' ); ?></label></th> 582 <td><textarea name="description" id="description" rows="5" cols="30"><?php echo $profile_user->description; // textarea_escaped ?></textarea> 583 <p class="description"><?php _e( 'Share a little biographical information to fill out your profile. This may be shown publicly.' ); ?></p></td> 584 </tr> 585 586 <?php if ( get_option( 'show_avatars' ) ) : ?> 587 <tr class="user-profile-picture"> 588 <th><?php _e( 'Profile Picture' ); ?></th> 589 <td> 590 <?php echo get_avatar( $user_id ); ?> 591 <p class="description"> 592 <?php 593 if ( IS_PROFILE_PAGE ) { 594 $description = sprintf( 595 /* translators: %s: Gravatar URL. */ 596 __( '<a href="%s">You can change your profile picture on Gravatar</a>.' ), 597 __( 'https://en.gravatar.com/' ) 598 ); 599 } else { 600 $description = ''; 601 } 602 603 /** 604 * Filters the user profile picture description displayed under the Gravatar. 605 * 606 * @since 4.4.0 607 * @since 4.7.0 Added the `$profile_user` parameter. 608 * 609 * @param string $description The description that will be printed. 610 * @param WP_User $profile_user The current WP_User object. 611 */ 612 echo apply_filters( 'user_profile_picture_description', $description, $profile_user ); 613 ?> 614 </p> 615 </td> 616 </tr> 617 <?php endif; ?> 618 <?php 619 /** 620 * Filters the display of the password fields. 621 * 622 * @since 1.5.1 623 * @since 2.8.0 Added the `$profile_user` parameter. 624 * @since 4.4.0 Now evaluated only in user-edit.php. 625 * 626 * @param bool $show Whether to show the password fields. Default true. 627 * @param WP_User $profile_user User object for the current user to edit. 628 */ 629 $show_password_fields = apply_filters( 'show_password_fields', true, $profile_user ); 630 if ( $show_password_fields ) : 631 ?> 632 </table> 633 634 <h2><?php _e( 'Account Management' ); ?></h2> 635 <table class="form-table" role="presentation"> 636 <tr id="password" class="user-pass1-wrap"> 637 <th><label for="pass1"><?php _e( 'New Password' ); ?></label></th> 638 <td> 639 <input class="hidden" value=" " /><!-- #24364 workaround --> 640 <button type="button" class="button wp-generate-pw hide-if-no-js" aria-expanded="false"><?php _e( 'Set New Password' ); ?></button> 641 <div class="wp-pwd hide-if-js"> 642 <span class="password-input-wrapper"> 643 <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" /> 644 </span> 645 <button type="button" class="button wp-hide-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Hide password' ); ?>"> 646 <span class="dashicons dashicons-hidden" aria-hidden="true"></span> 647 <span class="text"><?php _e( 'Hide' ); ?></span> 648 </button> 649 <button type="button" class="button wp-cancel-pw hide-if-no-js" data-toggle="0" aria-label="<?php esc_attr_e( 'Cancel password change' ); ?>"> 650 <span class="dashicons dashicons-no" aria-hidden="true"></span> 651 <span class="text"><?php _e( 'Cancel' ); ?></span> 652 </button> 653 <div style="display:none" id="pass-strength-result" aria-live="polite"></div> 654 </div> 655 </td> 656 </tr> 657 <tr class="user-pass2-wrap hide-if-js"> 658 <th scope="row"><label for="pass2"><?php _e( 'Repeat New Password' ); ?></label></th> 659 <td> 660 <input name="pass2" type="password" id="pass2" class="regular-text" value="" autocomplete="off" aria-describedby="pass2-desc" /> 661 <?php if ( IS_PROFILE_PAGE ) : ?> 662 <p class="description" id="pass2-desc"><?php _e( 'Type your new password again.' ); ?></p> 663 <?php else : ?> 664 <p class="description" id="pass2-desc"><?php _e( 'Type the new password again.' ); ?></p> 231 <div class="wrap" id="profile-page"> 232 <h1 class="wp-heading-inline"> 233 <?php echo esc_html( $title ); ?> 234 </h1> 235 236 <?php if ( ! IS_PROFILE_PAGE ) : ?> 237 <?php if ( current_user_can( 'create_users' ) ) : ?> 238 <a href="user-new.php" class="page-title-action"><?php echo esc_html_x( 'Add New', 'user' ); ?></a> 239 <?php elseif ( is_multisite() && current_user_can( 'promote_users' ) ) : ?> 240 <a href="user-new.php" class="page-title-action"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a> 241 <?php endif; ?> 665 242 <?php endif; ?> 666 </td> 667 </tr> 668 <tr class="pw-weak"> 669 <th><?php _e( 'Confirm Password' ); ?></th> 670 <td> 671 <label> 672 <input type="checkbox" name="pw_weak" class="pw-checkbox" /> 673 <span id="pw-weak-text-label"><?php _e( 'Confirm use of weak password' ); ?></span> 674 </label> 675 </td> 676 </tr> 677 <?php endif; ?> 678 679 <?php 680 // Allow admins to send reset password link. 681 if ( ! IS_PROFILE_PAGE ) : 682 ?> 683 <tr class="user-generate-reset-link-wrap hide-if-no-js"> 684 <th><?php _e( 'Password Reset' ); ?></th> 685 <td> 686 <div class="generate-reset-link"> 687 <button type="button" class="button button-secondary" id="generate-reset-link"> 688 <?php _e( 'Send Reset Link' ); ?> 689 </button> 690 </div> 691 <p class="description"> 692 <?php 693 printf( 694 /* translators: %s: User's display name. */ 695 __( 'Send %s a link to reset their password. This will not change their password, nor will it force a change.' ), 696 esc_html( $profile_user->display_name ) 697 ); 698 ?> 699 </p> 700 </td> 701 </tr> 702 <?php endif; ?> 703 704 <?php 705 if ( IS_PROFILE_PAGE && count( $sessions->get_all() ) === 1 ) : 706 ?> 707 <tr class="user-sessions-wrap hide-if-no-js"> 708 <th><?php _e( 'Sessions' ); ?></th> 709 <td aria-live="assertive"> 710 <div class="destroy-sessions"><button type="button" disabled class="button"><?php _e( 'Log Out Everywhere Else' ); ?></button></div> 711 <p class="description"> 712 <?php _e( 'You are only logged in at this location.' ); ?> 713 </p> 714 </td> 715 </tr> 716 <?php elseif ( IS_PROFILE_PAGE && count( $sessions->get_all() ) > 1 ) : ?> 717 <tr class="user-sessions-wrap hide-if-no-js"> 718 <th><?php _e( 'Sessions' ); ?></th> 719 <td aria-live="assertive"> 720 <div class="destroy-sessions"><button type="button" class="button" id="destroy-sessions"><?php _e( 'Log Out Everywhere Else' ); ?></button></div> 721 <p class="description"> 722 <?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.' ); ?> 723 </p> 724 </td> 725 </tr> 726 <?php elseif ( ! IS_PROFILE_PAGE && $sessions->get_all() ) : ?> 727 <tr class="user-sessions-wrap hide-if-no-js"> 728 <th><?php _e( 'Sessions' ); ?></th> 729 <td> 730 <p><button type="button" class="button" id="destroy-sessions"><?php _e( 'Log Out Everywhere' ); ?></button></p> 731 <p class="description"> 732 <?php 733 /* translators: %s: User's display name. */ 734 printf( __( 'Log %s out of all locations.' ), $profile_user->display_name ); 735 ?> 736 </p> 737 </td> 738 </tr> 739 <?php endif; ?> 740 741 </table> 742 743 <?php if ( wp_is_application_passwords_available_for_user( $user_id ) || ! wp_is_application_passwords_supported() ) : // phpcs:disable Generic.WhiteSpace.ScopeIndent ?> 744 <div class="application-passwords hide-if-no-js" id="application-passwords-section"> 745 <h2><?php _e( 'Application Passwords' ); ?></h2> 746 <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> 747 <?php if ( wp_is_application_passwords_available_for_user( $user_id ) ) : ?> 748 <?php 749 if ( is_multisite() ) { 750 $blogs = get_blogs_of_user( $user_id, true ); 751 $blogs_count = count( $blogs ); 752 if ( $blogs_count > 1 ) { 753 ?> 754 <p> 755 <?php 756 printf( 757 /* translators: 1: URL to my-sites.php, 2: Number of sites the user has. */ 758 _n( 759 'Application passwords grant access to <a href="%1$s">the %2$s site in this installation that you have permissions on</a>.', 760 'Application passwords grant access to <a href="%1$s">all %2$s sites in this installation that you have permissions on</a>.', 761 $blogs_count 762 ), 763 admin_url( 'my-sites.php' ), 764 number_format_i18n( $blogs_count ) 765 ); 766 ?> 767 </p> 768 <?php 769 } 770 } 771 772 if ( ! wp_is_site_protected_by_basic_auth( 'front' ) ) { 773 ?> 774 <div class="create-application-password form-wrap"> 775 <div class="form-field"> 776 <label for="new_application_password_name"><?php _e( 'New Application Password Name' ); ?></label> 777 <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" /> 778 <p class="description" id="new_application_password_name_desc"><?php _e( 'Required to create an Application Password, but not to update the user.' ); ?></p> 779 </div> 780 243 244 <hr class="wp-header-end"> 245 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" 781 247 <?php 782 248 /** 783 * Fires in the create Application Passwords form.249 * Fires inside the your-profile form tag on the user editing screen. 784 250 * 785 * @since 5.6.0 786 * 787 * @param WP_User $profile_user The current WP_User object. 251 * @since 3.0.0 788 252 */ 789 do_action( ' wp_create_application_password_form', $profile_user);253 do_action( 'user_edit_form_tag' ); 790 254 ?> 791 792 <button type="button" name="do_new_application_password" id="do_new_application_password" class="button button-secondary"><?php _e( 'Add New Application Password' ); ?></button> 793 </div> 794 <?php } else { ?> 795 <div class="notice notice-error inline"> 796 <p><?php _e( 'Your website appears to use Basic Authentication, which is not currently compatible with Application Passwords.' ); ?></p> 797 </div> 798 <?php } ?> 799 800 <div class="application-passwords-list-table-wrapper"> 801 <?php 802 $application_passwords_list_table = _get_list_table( 'WP_Application_Passwords_List_Table', array( 'screen' => 'application-passwords-user' ) ); 803 $application_passwords_list_table->prepare_items(); 804 $application_passwords_list_table->display(); 805 ?> 255 > 256 <?php wp_nonce_field( 'update-user_' . $user_id ); ?> 257 <?php if ( $wp_http_referer ) : ?> 258 <input type="hidden" name="wp_http_referer" value="<?php echo esc_url( $wp_http_referer ); ?>" /> 259 <?php endif; ?> 260 <p> 261 <input type="hidden" name="from" value="profile" /> 262 <input type="hidden" name="checkuser_id" value="<?php echo get_current_user_id(); ?>" /> 263 </p> 264 265 <h2><?php _e( 'Personal Options' ); ?></h2> 266 267 <table class="form-table" role="presentation"> 268 <?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?> 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="">' . __( '— No role for this site —' ) . '</option>'; 431 } else { 432 echo '<option value="" selected="selected">' . __( '— No role for this site —' ) . '</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, we will send you an email 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="off" 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="off" 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 if ( $blogs_count > 1 ) : 746 ?> 747 <p> 748 <?php 749 printf( 750 /* translators: 1: URL to my-sites.php, 2: Number of sites the user has. */ 751 _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 admin_url( 'my-sites.php' ), 757 number_format_i18n( $blogs_count ) 758 ); 759 ?> 760 </p> 761 <?php 762 endif; 763 endif; 764 ?> 765 766 <?php if ( ! wp_is_site_protected_by_basic_auth( 'front' ) ) : ?> 767 <div class="create-application-password form-wrap"> 768 <div class="form-field"> 769 <label for="new_application_password_name"><?php _e( 'New Application Password Name' ); ?></label> 770 <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" /> 771 <p class="description" id="new_application_password_name_desc"><?php _e( 'Required to create an Application Password, but not to update the user.' ); ?></p> 772 </div> 773 774 <?php 775 /** 776 * Fires in the create Application Passwords form. 777 * 778 * @since 5.6.0 779 * 780 * @param WP_User $profile_user The current WP_User object. 781 */ 782 do_action( 'wp_create_application_password_form', $profile_user ); 783 ?> 784 785 <button type="button" name="do_new_application_password" id="do_new_application_password" class="button button-secondary"><?php _e( 'Add New Application Password' ); ?></button> 786 </div> 787 <?php else : ?> 788 <div class="notice notice-error inline"> 789 <p><?php _e( 'Your website appears to use Basic Authentication, which is not currently compatible with Application Passwords.' ); ?></p> 790 </div> 791 <?php endif; ?> 792 793 <div class="application-passwords-list-table-wrapper"> 794 <?php 795 $application_passwords_list_table = _get_list_table( 'WP_Application_Passwords_List_Table', array( 'screen' => 'application-passwords-user' ) ); 796 $application_passwords_list_table->prepare_items(); 797 $application_passwords_list_table->display(); 798 ?> 799 </div> 800 <?php elseif ( ! wp_is_application_passwords_supported() ) : ?> 801 <p><?php _e( 'The application password feature requires HTTPS, which is not enabled on this site.' ); ?></p> 802 <p> 803 <?php 804 printf( 805 /* translators: %s: Documentation URL. */ 806 __( 'If this is a development website you can <a href="%s" target="_blank">set the environment type accordingly</a> to enable application passwords.' ), 807 __( 'https://wordpress.org/support/article/editing-wp-config-php/#wp_environment_type' ) 808 ); 809 ?> 810 </p> 811 <?php endif; ?> 812 </div> 813 <?php endif; // End Application Passwords. ?> 814 815 <?php 816 if ( IS_PROFILE_PAGE ) { 817 /** 818 * Fires after the 'About Yourself' settings table on the 'Profile' editing screen. 819 * 820 * The action only fires if the current user is editing their own profile. 821 * 822 * @since 2.0.0 823 * 824 * @param WP_User $profile_user The current WP_User object. 825 */ 826 do_action( 'show_user_profile', $profile_user ); 827 } else { 828 /** 829 * Fires after the 'About the User' settings table on the 'Edit User' screen. 830 * 831 * @since 2.0.0 832 * 833 * @param WP_User $profile_user The current WP_User object. 834 */ 835 do_action( 'edit_user_profile', $profile_user ); 836 } 837 ?> 838 839 <?php 840 /** 841 * Filters whether to display additional capabilities for the user. 842 * 843 * The 'Additional Capabilities' section will only be enabled if 844 * the number of the user's capabilities exceeds their number of 845 * roles. 846 * 847 * @since 2.8.0 848 * 849 * @param bool $enable Whether to display the capabilities. Default true. 850 * @param WP_User $profile_user The current WP_User object. 851 */ 852 $display_additional_caps = apply_filters( 'additional_capabilities_display', true, $profile_user ); 853 ?> 854 855 <?php if ( count( $profile_user->caps ) > count( $profile_user->roles ) && ( true === $display_additional_caps ) ) : ?> 856 <h2><?php _e( 'Additional Capabilities' ); ?></h2> 857 858 <table class="form-table" role="presentation"> 859 <tr class="user-capabilities-wrap"> 860 <th scope="row"><?php _e( 'Capabilities' ); ?></th> 861 <td> 862 <?php 863 $output = ''; 864 foreach ( $profile_user->caps as $cap => $value ) { 865 if ( ! $wp_roles->is_role( $cap ) ) { 866 if ( '' !== $output ) { 867 $output .= ', '; 868 } 869 870 if ( $value ) { 871 $output .= $cap; 872 } else { 873 /* translators: %s: Capability name. */ 874 $output .= sprintf( __( 'Denied: %s' ), $cap ); 875 } 876 } 877 } 878 echo $output; 879 ?> 880 </td> 881 </tr> 882 </table> 883 <?php endif; // End Display Additional Capabilities. ?> 884 885 <input type="hidden" name="action" value="update" /> 886 <input type="hidden" name="user_id" id="user_id" value="<?php echo esc_attr( $user_id ); ?>" /> 887 888 <?php submit_button( IS_PROFILE_PAGE ? __( 'Update Profile' ) : __( 'Update User' ) ); ?> 889 890 </form> 806 891 </div> 807 <?php elseif ( ! wp_is_application_passwords_supported() ) : ?>808 <p><?php _e( 'The application password feature requires HTTPS, which is not enabled on this site.' ); ?></p>809 <p>810 <?php811 printf(812 /* translators: %s: Documentation URL. */813 __( 'If this is a development website you can <a href="%s" target="_blank">set the environment type accordingly</a> to enable application passwords.' ),814 __( 'https://wordpress.org/support/article/editing-wp-config-php/#wp_environment_type' )815 );816 ?>817 </p>818 <?php endif; ?>819 </div>820 <?php endif; // phpcs:enable Generic.WhiteSpace.ScopeIndent ?>821 822 <?php823 if ( IS_PROFILE_PAGE ) {824 /**825 * Fires after the 'About Yourself' settings table on the 'Profile' editing screen.826 *827 * The action only fires if the current user is editing their own profile.828 *829 * @since 2.0.0830 *831 * @param WP_User $profile_user The current WP_User object.832 */833 do_action( 'show_user_profile', $profile_user );834 } else {835 /**836 * Fires after the 'About the User' settings table on the 'Edit User' screen.837 *838 * @since 2.0.0839 *840 * @param WP_User $profile_user The current WP_User object.841 */842 do_action( 'edit_user_profile', $profile_user );843 }844 ?>845 846 <?php847 /**848 * Filters whether to display additional capabilities for the user.849 *850 * The 'Additional Capabilities' section will only be enabled if851 * the number of the user's capabilities exceeds their number of852 * roles.853 *854 * @since 2.8.0855 *856 * @param bool $enable Whether to display the capabilities. Default true.857 * @param WP_User $profile_user The current WP_User object.858 */859 if ( count( $profile_user->caps ) > count( $profile_user->roles )860 && apply_filters( 'additional_capabilities_display', true, $profile_user )861 ) :862 ?>863 <h2><?php _e( 'Additional Capabilities' ); ?></h2>864 <table class="form-table" role="presentation">865 <tr class="user-capabilities-wrap">866 <th scope="row"><?php _e( 'Capabilities' ); ?></th>867 <td>868 <?php869 $output = '';870 foreach ( $profile_user->caps as $cap => $value ) {871 if ( ! $wp_roles->is_role( $cap ) ) {872 if ( '' !== $output ) {873 $output .= ', ';874 }875 876 if ( $value ) {877 $output .= $cap;878 } else {879 /* translators: %s: Capability name. */880 $output .= sprintf( __( 'Denied: %s' ), $cap );881 }882 }883 }884 echo $output;885 ?>886 </td>887 </tr>888 </table>889 <?php endif; ?>890 891 <input type="hidden" name="action" value="update" />892 <input type="hidden" name="user_id" id="user_id" value="<?php echo esc_attr( $user_id ); ?>" />893 894 <?php submit_button( IS_PROFILE_PAGE ? __( 'Update Profile' ) : __( 'Update User' ) ); ?>895 896 </form>897 </div>898 892 <?php 899 893 break;
Note: See TracChangeset
for help on using the changeset viewer.