WordPress.org

Make WordPress Core

Ticket #24921: 24921.2.patch

File 24921.2.patch, 2.1 KB (added by azaozz, 5 years ago)
  • wp-includes/option.php

     
    543543        if ( ! $user = wp_get_current_user() )
    544544                return;
    545545
    546         if ( is_super_admin( $user->ID ) &&
    547                 ! in_array( get_current_blog_id(), array_keys( get_blogs_of_user( $user->ID ) ) )
    548                 )
     546        if ( is_super_admin() && ! is_user_member_of_blog() )
    549547                return;
    550548
    551         $settings = get_user_option( 'user-settings', $user->ID );
     549        $settings = (string) get_user_option( 'user-settings', $user->ID );
    552550
    553551        if ( isset( $_COOKIE['wp-settings-' . $user->ID] ) ) {
    554552                $cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] );
    555553
    556                 if ( ! empty( $cookie ) && strpos( $cookie, '=' ) ) {
    557                         if ( $cookie == $settings )
    558                                 return;
     554                // No change or both empty
     555                if ( $cookie == $settings )
     556                        return;
    559557
    560                         $last_time = (int) get_user_option( 'user-settings-time', $user->ID );
    561                         $saved = isset( $_COOKIE['wp-settings-time-' . $user->ID]) ? preg_replace( '/[^0-9]/', '', $_COOKIE['wp-settings-time-' . $user->ID] ) : 0;
     558                $last_time = (int) get_user_option( 'user-settings-time', $user->ID );
     559                $saved = isset( $_COOKIE['wp-settings-time-' . $user->ID]) ? preg_replace( '/[^0-9]/', '', $_COOKIE['wp-settings-time-' . $user->ID] ) : 0;
    562560
    563                         if ( $saved > $last_time ) {
    564                                 update_user_option( $user->ID, 'user-settings', $cookie, false );
    565                                 update_user_option( $user->ID, 'user-settings-time', time() - 5, false );
    566                                 return;
    567                         }
     561                // The cookie is newer than the saved value. Update the user_option and leave the cookie as-is
     562                if ( $saved > $last_time ) {
     563                        update_user_option( $user->ID, 'user-settings', $cookie, false );
     564                        update_user_option( $user->ID, 'user-settings-time', time() - 5, false );
     565                        return;
    568566                }
    569567        }
    570568
     569        // The cookie is not set in the current browser or the saved value is newer.
    571570        setcookie( 'wp-settings-' . $user->ID, $settings, time() + YEAR_IN_SECONDS, SITECOOKIEPATH );
    572571        setcookie( 'wp-settings-time-' . $user->ID, time(), time() + YEAR_IN_SECONDS, SITECOOKIEPATH );
    573572        $_COOKIE['wp-settings-' . $user->ID] = $settings;