WordPress.org

Make WordPress Core

Ticket #24633: 24633.9.patch

File 24633.9.patch, 7.2 KB (added by mordauk, 4 years ago)
  • src/wp-admin/admin-ajax.php

     
    6060        'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment',
    6161        'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor',
    6262        'send-attachment-to-editor', 'save-attachment-order', 'heartbeat', 'get-revision-diffs',
    63         'save-user-color-scheme', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail'
     63        'save-user-color-scheme', 'generate_password', 'update-widget', 'query-themes', 'parse-embed', 'set-attachment-thumbnail'
    6464);
    6565
    6666// Register core Ajax calls.
  • src/wp-admin/includes/ajax-actions.php

     
    26662666
    26672667        wp_send_json_success( $parsed );
    26682668}
     2669
     2670/**
     2671 * Generates a password via ajax
     2672 *
     2673 * @since 4.0.0
     2674 */
     2675function wp_ajax_generate_password() {
     2676        die( wp_generate_password() );
     2677}
     2678 No newline at end of file
  • src/wp-admin/includes/user.php

     
    174174
    175175        if ( $update ) {
    176176                $user_id = wp_update_user( $user );
     177
     178                // Encourage the user to reset their password
     179                if( ! empty( $_POST['reset_password'] ) ) {
     180                        update_user_option( $user_id, 'default_password_nag', true, true );
     181                }
     182
     183                // Send the new, plaintext password to the user
     184                if( ! empty( $_POST['send_password'] ) ) {
     185                        $blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
     186                        $message  = sprintf( __( 'Username: %s' ), $user->user_login ) . "\r\n";
     187                        $message .= sprintf( __( 'Password: %s' ), $pass1 ) . "\r\n";
     188                        $message .= wp_login_url() . "\r\n";
     189
     190                        wp_mail( $user->user_email, sprintf( __( '[%s] Your username and password' ), $blogname ), $message );
     191                }
     192
    177193        } else {
    178194                $user_id = wp_insert_user( $user );
    179195                wp_new_user_notification( $user_id, isset( $_POST['send_password'] ) ? wp_unslash( $pass1 ) : '' );
  • src/wp-admin/js/user-profile.js

     
    3333        $(document).ready( function() {
    3434                var $colorpicker, $stylesheet, user_id, current_user_id,
    3535                        select = $( '#display_name' );
     36                       
     37                /* Passwords */
    3638
    37                 $('#pass1').val('').keyup( check_pass_strength );
    38                 $('#pass2').val('').keyup( check_pass_strength );
     39            var show_password = $('#show-password');
     40            var hide_password = $('#hide-password');
     41            var pass1 = $('#pass1');
     42            var pass2 = $('#pass2');
     43            var password_repeat = $('#password-repeat');
     44
     45                pass1.val('').keyup(function(e) {
     46                        check_pass_strength();
     47                        changed = true;
     48
     49                        if( 'text' == pass1.attr('type') ) {
     50                                pass2.attr('type', 'text');
     51                        }
     52                        password_repeat.show();
     53                });
     54                pass2.val('').keyup( check_pass_strength );
     55
     56                $('#generate-password').on('click', function() {
     57                        if( 'profile' == pagenow ) {
     58                                // User's own password
     59                                pass1.attr('type', 'text');
     60                                pass2.attr('type', 'text');
     61                        } else {
     62                                pass1.attr('type', 'password');
     63                                pass2.attr('type', 'password');
     64                        }
     65                        $.post( ajaxurl, { action: 'generate_password' }, function( response ) {
     66                                pass1.val( response ).trigger('keyup');
     67                                pass2.val( response ).trigger('keyup');
     68                                if( 'profile' == pagenow ) {
     69                                        // User's own password
     70                                        hide_password.show();
     71                                } else {
     72                                        hide_password.hide();
     73                                        show_password.show();
     74                                }
     75                                pass1.focus();
     76                                password_repeat.hide();
     77                        });
     78                });
     79                show_password.on('click', function(e) {
     80                        show_password.hide();
     81                        hide_password.show();
     82                        e.preventDefault();
     83                        pass1.attr('type', 'text');
     84                        pass2.attr('type', 'text');
     85                });
     86                hide_password.on('click', function(e) {
     87                        hide_password.hide();
     88                        show_password.show();
     89                        e.preventDefault();
     90                        pass1.attr('type', 'password');
     91                        pass2.attr('type', 'password');
     92                });
     93
    3994                $('#pass-strength-result').show();
     95
     96                /* End Passwords */
     97
    4098                $('.color-palette').click( function() {
    4199                        $(this).siblings('input[name="admin_color"]').prop('checked', true);
    42100                });
  • src/wp-admin/user-edit.php

     
    459459        <th><label for="pass1"><?php _e( 'New Password' ); ?></label></th>
    460460        <td>
    461461                <input class="hidden" value=" " /><!-- #24364 workaround -->
    462                 <input type="password" name="pass1" id="pass1" class="regular-text" size="16" value="" autocomplete="off" /><br />
    463                 <span class="description"><?php _e( 'If you would like to change the password type a new one. Otherwise leave this blank.' ); ?></span>
    464         </td>
     462                <input type="password" name="pass1" id="pass1" size="16" value="" autocomplete="off" />
     463                <input type="button" name="generate-password" id="generate-password" value="<?php _e( 'Generate Password' ); ?>" class="button hide-if-no-js" />
     464                <a href="#" id="show-password" class="hidden"><?php _e( 'Show Password' ); ?></a>
     465                <a href="#" id="hide-password" class="hidden"><?php _e( 'Hide Password' ); ?></a>
     466                <div id="password-repeat" class="hidden">
     467                        <input name="pass2" type="password" id="pass2" size="16" value="" autocomplete="off" />
     468                        <label for="pass2"><?php _e( 'Repeat New Password' ); ?></label>
     469                        <br />
     470                        <div id="pass-strength-result"><?php _e( 'Strength indicator' ); ?></div>
     471                        <p class="description indicator-hint"><?php _e( 'Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ &amp; ).' ); ?></p>
     472                </div>
     473                <p class="description"><?php _e( 'If you would like to change the password type or generate a new one. Otherwise leave this blank.' ); ?></p>
     474                <?php if( ! IS_PROFILE_PAGE ) { ?>
     475                <p class="hide-if-no-js">
     476                        <label for="send_password">
     477                                <input type="checkbox" name="send_password" id="send_password" /> <?php _e( 'Send this password to the user by email.' ); ?>
     478                        </label>
     479                        <br/>
     480                        <label for="reset_password">
     481                                <input type="checkbox" name="reset_password" id="reset_password" /> <?php _e( 'Encourage the user to change their password, once logged in.' ); ?>
     482                        </label>
     483                </p>
     484                <?php } ?>
     485        </td>
    465486</tr>
    466 <tr>
    467         <th scope="row"><label for="pass2"><?php _e( 'Repeat New Password' ); ?></label></th>
    468         <td>
    469         <input name="pass2" type="password" id="pass2" class="regular-text" size="16" value="" autocomplete="off" /><br />
    470         <span class="description" for="pass2"><?php _e( 'Type your new password again.' ); ?></span>
    471         <br />
    472         <div id="pass-strength-result"><?php _e( 'Strength indicator' ); ?></div>
    473         <p class="description indicator-hint"><?php _e( 'Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers, and symbols like ! " ? $ % ^ &amp; ).' ); ?></p>
    474         </td>
    475 </tr>
    476487<?php endif; ?>
    477488</table>
    478489