Make WordPress Core


Ignore:
Timestamp:
06/01/2009 11:31:34 PM (17 years ago)
Author:
azaozz
Message:

Add "Accessibility Mode" for widgets screen (can be turned on from Screen Options). Add set_user_setting() to the UI state saving functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/functions.php

    r11493 r11503  
    784784    setcookie( 'wp-settings-' . $user->ID, $settings, time() + 31536000, SITECOOKIEPATH );
    785785    setcookie( 'wp-settings-time-' . $user->ID, time(), time() + 31536000, SITECOOKIEPATH );
     786    $_COOKIE['wp-settings-' . $user->ID] = $settings;
    786787}
    787788
     
    799800function get_user_setting( $name, $default = false ) {
    800801
    801     $arr = get_all_user_settings();
    802 
    803     return isset($arr[$name]) ? $arr[$name] : $default;
     802    $all = get_all_user_settings();
     803
     804    return isset($all[$name]) ? $all[$name] : $default;
     805}
     806
     807/**
     808 * Add or update user interface setting.
     809 *
     810 * Both $name and $value can contain only ASCII letters, numbers and underscores.
     811 * This function has to be used before any output has started as it calls setcookie().
     812 *
     813 * @package WordPress
     814 * @subpackage Option
     815 * @since 2.8.0
     816 *
     817 * @param string $name The name of the setting.
     818 * @param string $value The value for the setting.
     819 * @return bool true if set successfully/false if not.
     820 */
     821function set_user_setting( $name, $value ) {
     822
     823    if ( headers_sent() )
     824        return false;
     825
     826    $all = get_all_user_settings();
     827    $name = preg_replace( '/[^A-Za-z0-9_]+/', '', $name );
     828
     829    if ( empty($name) )
     830        return false;
     831
     832    $all[$name] = $value;
     833
     834    return wp_set_all_user_settings($all);
    804835}
    805836
     
    808839 *
    809840 * Deleting settings would reset them to the defaults.
     841 * This function has to be used before any output has started as it calls setcookie().
    810842 *
    811843 * @package WordPress
     
    814846 *
    815847 * @param mixed $names The name or array of names of the setting to be deleted.
     848 * @return bool true if deleted successfully/false if not.
    816849 */
    817850function delete_user_setting( $names ) {
    818     global $current_user;
    819 
    820     $arr = get_all_user_settings();
     851
     852    if ( headers_sent() )
     853        return false;
     854
     855    $all = get_all_user_settings();
    821856    $names = (array) $names;
    822857
    823858    foreach ( $names as $name ) {
    824         if ( isset($arr[$name]) ) {
    825             unset($arr[$name]);
    826             $settings = '';
     859        if ( isset($all[$name]) ) {
     860            unset($all[$name]);
     861            $deleted = true;
    827862        }
    828863    }
    829864
    830     if ( isset($settings) ) {
    831         foreach ( $arr as $k => $v )
    832             $settings .= $k . '=' . $v . '&';
    833 
    834         $settings = rtrim($settings, '&');
    835 
    836         update_user_option( $current_user->ID, 'user-settings', $settings );
    837         setcookie('wp-settings-' . $current_user->ID, $settings, time() + 31536000, SITECOOKIEPATH);
    838     }
     865    if ( isset($deleted) )
     866        return wp_set_all_user_settings($all);
     867
     868    return false;
    839869}
    840870
     
    849879 */
    850880function get_all_user_settings() {
     881    global $_updated_user_settings;
     882
    851883    if ( ! $user = wp_get_current_user() )
    852884        return array();
    853885
    854     $arr = array();
     886    if ( isset($_updated_user_settings) && is_array($_updated_user_settings) )
     887        return $_updated_user_settings;
     888
     889    $all = array();
    855890    if ( isset($_COOKIE['wp-settings-' . $user->ID]) ) {
    856891        $cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-' . $user->ID] );
    857892
    858893        if ( $cookie && strpos($cookie, '=') ) // the '=' cannot be 1st char
    859             parse_str($cookie, $arr);
    860 
    861     } elseif ( isset($user->wp_usersettings) && is_string($user->wp_usersettings) ) {
    862         parse_str( $user->wp_usersettings, $arr );
    863     }
    864 
    865     return $arr;
     894            parse_str($cookie, $all);
     895
     896    } else {
     897        $option = get_user_option('user-settings', $user->ID);
     898        if ( $option && is_string($option) )
     899            parse_str( $option, $all );
     900    }
     901
     902    return $all;
     903}
     904
     905/**
     906 * Private. Set all user interface settings.
     907 *
     908 * @package WordPress
     909 * @subpackage Option
     910 * @since 2.8.0
     911 *
     912 */
     913function wp_set_all_user_settings($all) {
     914    global $_updated_user_settings;
     915
     916    if ( ! $user = wp_get_current_user() )
     917        return false;
     918
     919    $_updated_user_settings = $all;
     920    $settings = '';
     921    foreach ( $all as $k => $v ) {
     922        $v = preg_replace( '/[^A-Za-z0-9_]+/', '', $v );
     923        $settings .= $k . '=' . $v . '&';
     924    }
     925
     926    $settings = rtrim($settings, '&');
     927
     928    update_user_option( $user->ID, 'user-settings', $settings, false );
     929    update_user_option( $user->ID, 'user-settings-time', time(), false );
     930
     931    return true;
    866932}
    867933
     
    877943        return;
    878944
    879     delete_usermeta( $user->ID, 'user-settings' );
    880     setcookie('wp-settings-'.$user->ID, ' ', time() - 31536000, SITECOOKIEPATH);
     945    update_user_option( $user->ID, 'user-settings', '', false );
     946    setcookie('wp-settings-' . $user->ID, ' ', time() - 31536000, SITECOOKIEPATH);
    881947}
    882948
Note: See TracChangeset for help on using the changeset viewer.