WordPress.org

Make WordPress Core

Ticket #24921: 24921.3.patch

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

     
    540540        if ( defined('DOING_AJAX') )
    541541                return;
    542542
    543         if ( ! $user = wp_get_current_user() )
     543        if ( ! $user_id = get_current_user_id() )
    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
    553         if ( isset( $_COOKIE['wp-settings-' . $user->ID] ) ) {
    554                 $cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] );
     551        if ( isset( $_COOKIE['wp-settings-' . $user_id] ) ) {
     552                $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_saved = (int) get_user_option( 'user-settings-time', $user_id );
     559                $current = 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 ( $current > $last_saved ) {
     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
    571         setcookie( 'wp-settings-' . $user->ID, $settings, time() + YEAR_IN_SECONDS, SITECOOKIEPATH );
    572         setcookie( 'wp-settings-time-' . $user->ID, time(), time() + YEAR_IN_SECONDS, SITECOOKIEPATH );
    573         $_COOKIE['wp-settings-' . $user->ID] = $settings;
     569        // The cookie is not set in the current browser or the saved value is newer.
     570        setcookie( 'wp-settings-' . $user_id, $settings, time() + YEAR_IN_SECONDS, SITECOOKIEPATH );
     571        setcookie( 'wp-settings-time-' . $user_id, time(), time() + YEAR_IN_SECONDS, SITECOOKIEPATH );
     572        $_COOKIE['wp-settings-' . $user_id] = $settings;
    574573}
    575574
    576575/**
     
    585584 * @return mixed the last saved user setting or the default value/false if it doesn't exist.
    586585 */
    587586function get_user_setting( $name, $default = false ) {
    588 
    589         $all = get_all_user_settings();
    590 
    591         return isset($all[$name]) ? $all[$name] : $default;
     587        $all_user_settings = get_all_user_settings();
     588        return isset( $all_user_settings[$name] ) ? $all_user_settings[$name] : $default;
    592589}
    593590
    594591/**
     
    610607        if ( headers_sent() )
    611608                return false;
    612609
    613         $all = get_all_user_settings();
     610        $all_user_settings = get_all_user_settings();
    614611        $name = preg_replace( '/[^A-Za-z0-9_]+/', '', $name );
    615612
    616         if ( empty($name) )
     613        if ( empty( $name ) )
    617614                return false;
    618615
    619         $all[$name] = $value;
     616        $all_user_settings[$name] = $value;
    620617
    621         return wp_set_all_user_settings($all);
     618        return wp_set_all_user_settings( $all_user_settings );
    622619}
    623620
    624621/**
     
    639636        if ( headers_sent() )
    640637                return false;
    641638
    642         $all = get_all_user_settings();
     639        $all_user_settings = get_all_user_settings();
    643640        $names = (array) $names;
    644641
    645642        foreach ( $names as $name ) {
    646                 if ( isset($all[$name]) ) {
    647                         unset($all[$name]);
     643                if ( isset( $all_user_settings[$name] ) ) {
     644                        unset( $all_user_settings[$name] );
    648645                        $deleted = true;
    649646                }
    650647        }
    651648
    652         if ( isset($deleted) )
    653                 return wp_set_all_user_settings($all);
     649        if ( isset( $deleted ) )
     650                return wp_set_all_user_settings( $all_user_settings );
    654651
    655652        return false;
    656653}
     
    667664function get_all_user_settings() {
    668665        global $_updated_user_settings;
    669666
    670         if ( ! $user = wp_get_current_user() )
     667        if ( ! $user_id = get_current_user_id() )
    671668                return array();
    672669
    673         if ( isset($_updated_user_settings) && is_array($_updated_user_settings) )
     670        if ( isset( $_updated_user_settings ) && is_array( $_updated_user_settings ) )
    674671                return $_updated_user_settings;
    675672
    676         $all = array();
    677         if ( isset($_COOKIE['wp-settings-' . $user->ID]) ) {
    678                 $cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] );
     673        $_updated_user_settings = array();
     674        if ( isset( $_COOKIE['wp-settings-' . $user_id] ) ) {
     675                $cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user_id] );
    679676
    680                 if ( $cookie && strpos($cookie, '=') ) // the '=' cannot be 1st char
    681                         parse_str($cookie, $all);
     677                if ( $cookie && strpos( $cookie, '=' ) ) // '=' cannot be 1st char
     678                        parse_str( $cookie, $_updated_user_settings );
    682679
    683680        } else {
    684                 $option = get_user_option('user-settings', $user->ID);
     681                $option = get_user_option( 'user-settings', $user_id );
    685682                if ( $option && is_string($option) )
    686                         parse_str( $option, $all );
     683                        parse_str( $option, $_updated_user_settings );
    687684        }
    688685
    689         return $all;
     686        return $_updated_user_settings;
    690687}
    691688
    692689/**
     
    696693 * @subpackage Option
    697694 * @since 2.8.0
    698695 *
    699  * @param unknown $all
     696 * @param array $user_settings
    700697 * @return bool
    701698 */
    702 function wp_set_all_user_settings($all) {
     699function wp_set_all_user_settings( $user_settings ) {
    703700        global $_updated_user_settings;
    704701
    705         if ( ! $user = wp_get_current_user() )
     702        if ( ! $user_id = get_current_user_id() )
    706703                return false;
    707704
    708         if ( is_super_admin( $user->ID ) &&
    709                 ! in_array( get_current_blog_id(), array_keys( get_blogs_of_user( $user->ID ) ) )
    710                 )
     705        if ( is_super_admin() && ! is_user_member_of_blog() )
    711706                return;
    712707
    713         $_updated_user_settings = $all;
     708        $_updated_user_settings = $user_settings;
    714709        $settings = '';
    715         foreach ( $all as $k => $v ) {
    716                 $v = preg_replace( '/[^A-Za-z0-9_]+/', '', $v );
    717                 $settings .= $k . '=' . $v . '&';
     710        foreach ( $user_settings as $name => $value ) {
     711                $value = preg_replace( '/[^A-Za-z0-9_]+/', '', $value );
     712                $settings .= $name . '=' . $value . '&';
    718713        }
    719714
    720715        $settings = rtrim($settings, '&');
    721716
    722         update_user_option( $user->ID, 'user-settings', $settings, false );
    723         update_user_option( $user->ID, 'user-settings-time', time(), false );
     717        update_user_option( $user_id, 'user-settings', $settings, false );
     718        update_user_option( $user_id, 'user-settings-time', time(), false );
    724719
    725720        return true;
    726721}
     
    733728 * @since 2.7.0
    734729 */
    735730function delete_all_user_settings() {
    736         if ( ! $user = wp_get_current_user() )
     731        if ( ! $user_id = get_current_user_id() )
    737732                return;
    738733
    739         update_user_option( $user->ID, 'user-settings', '', false );
    740         setcookie('wp-settings-' . $user->ID, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH);
     734        update_user_option( $user_id, 'user-settings', '', false );
     735        setcookie('wp-settings-' . $user_id, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH);
    741736}
    742737
    743738/**