Make WordPress Core

Ticket #28020: 28020.2.diff

File 28020.2.diff, 4.4 KB (added by donmhico, 5 years ago)

Correct @since to adhere to WPCS.

  • src/wp-includes/pluggable.php

    diff --git src/wp-includes/pluggable.php src/wp-includes/pluggable.php
    index 4edb9929f6..7d2f7b9d39 100644
    if ( ! function_exists( 'wp_set_current_user' ) ) : 
    1717         * actions on users who aren't signed in.
    1818         *
    1919         * @since 2.0.3
     20         * @since 5.3.0 `$force` param was added.
    2021         * @global WP_User $current_user The current user object which holds the user data.
    2122         *
    22          * @param int    $id   User ID
    23          * @param string $name User's username
     23         * @param int    $id    User ID
     24         * @param string $name  User's username
     25         * @param bool   $force Set to true to force the re-setup of the current user object
    2426         * @return WP_User Current user User object
    2527         */
    26         function wp_set_current_user( $id, $name = '' ) {
     28        function wp_set_current_user( $id, $name = '', $force = false ) {
    2729                global $current_user;
    2830
    2931                // If `$id` matches the current user, there is nothing to do.
    if ( ! function_exists( 'wp_set_current_user' ) ) : 
    3133                && ( $current_user instanceof WP_User )
    3234                && ( $id == $current_user->ID )
    3335                && ( null !== $id )
     36                && ( !$force )
    3437                ) {
    3538                        return $current_user;
    3639                }
    if ( ! function_exists( 'get_user_by' ) ) : 
    9093         *
    9194         * @since 2.8.0
    9295         * @since 4.4.0 Added 'ID' as an alias of 'id' for the `$field` parameter.
     96         * @since 5.3.0 Return the global $current_user if it's the user being fetched.
    9397         *
    9498         * @param string     $field The field to retrieve the user with. id | ID | slug | email | login.
    9599         * @param int|string $value A value for $field. A user ID, slug, email address, or login name.
    96100         * @return WP_User|false WP_User object on success, false on failure.
    97101         */
    98102        function get_user_by( $field, $value ) {
     103                global $current_user;
     104
    99105                $userdata = WP_User::get_data_by( $field, $value );
    100106
    101107                if ( ! $userdata ) {
    102108                        return false;
    103109                }
     110               
     111                if ( ! empty( $current_user )
     112                        && $current_user instanceof WP_User
     113                        && $current_user->ID == $userdata->ID ) {
     114                       
     115                        return $current_user;
     116
     117                }
    104118
    105119                $user = new WP_User;
    106120                $user->init( $userdata );
    if ( ! function_exists( 'wp_validate_auth_cookie' ) ) : 
    637651                        return false;
    638652                }
    639653
    640                 $user = get_user_by( 'login', $username );
     654                $user = get_user_by( 'login', $username, false );
    641655                if ( ! $user ) {
    642656                        /**
    643657                         * Fires if a bad username is entered in the user authentication process.
  • src/wp-includes/user.php

    diff --git src/wp-includes/user.php src/wp-includes/user.php
    index a97f0fada8..df2dabbe56 100644
    function update_user_caches( $user ) { 
    13601360 *
    13611361 * @since 3.0.0
    13621362 * @since 4.4.0 'clean_user_cache' action was added.
     1363 * @since 5.3.0 Force re-setup if it is the current user's cache to be cleaned.
    13631364 *
    13641365 * @param WP_User|int $user User object or ID to be cleaned from the cache
    13651366 */
    function clean_user_cache( $user ) { 
    13861387         * @param WP_User $user    User object.
    13871388         */
    13881389        do_action( 'clean_user_cache', $user->ID, $user );
     1390       
     1391        /**
     1392         * Force re-setup of current user if it is user's cache to be cleaned.
     1393         *
     1394         * @since 5.3.0
     1395         */
     1396        if ( get_current_user_id() == $user->ID ) {
     1397                wp_set_current_user( $user->ID, '', true );
     1398        }
    13891399}
    13901400
    13911401/**
  • tests/phpunit/tests/pluggable.php

    diff --git tests/phpunit/tests/pluggable.php tests/phpunit/tests/pluggable.php
    index e711f3b8bc..ab55dd544d 100644
    class Tests_Pluggable extends WP_UnitTestCase { 
    128128                        'wp_set_current_user'             => array(
    129129                                'id',
    130130                                'name' => '',
     131                                'force' => false // ticket 28020
    131132                        ),
    132133                        'wp_get_current_user'             => array(),
    133134                        'get_userdata'                    => array( 'user_id' ),
    class Tests_Pluggable extends WP_UnitTestCase { 
    319320                return $signatures;
    320321        }
    321322
     323        /**
     324         * @ticket 28020
     325         */
     326        public function test_get_user_by_should_return_same_instance_as_wp_get_current_user() {
     327
     328                // Create a test user
     329                $new_user = self::factory()->user->create( array(
     330                        'role' => 'subscriber'
     331                ) );
     332
     333                // Set the test user as the current user
     334                wp_set_current_user( $new_user );
     335
     336                // Get the test user using get_user_by()
     337                $from_get_user_by = get_user_by( 'id', $new_user );
     338
     339                // Set the test user role as editor
     340                $from_get_user_by->set_role( 'administrator' );
     341
     342                // current_user_can() should reflect the same changes applied to the instance returned
     343                // by get_user_by().
     344                $this->assertTrue( current_user_can( 'administrator') );
     345
     346        }
     347
    322348}