Saving/restoring the user interface state, see #7654

git-svn-id: https://develop.svn.wordpress.org/trunk@8784 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Andrew Ozz
2008-08-31 06:34:43 +00:00
parent 8d72a6d8b7
commit 9ed6500c5b
10 changed files with 324 additions and 59 deletions

View File

@@ -192,5 +192,6 @@ add_action('comment_form', 'wp_comment_form_unfiltered_html_nonce');
add_action('template_redirect', 'wp_old_slug_redirect');
add_action('edit_post', 'wp_check_for_changed_slugs');
add_action('edit_form_advanced', 'wp_remember_old_slug');
add_action('init', 'wp_user_settings', 9);
?>

View File

@@ -643,6 +643,134 @@ function delete_option( $name ) {
return true;
}
/**
* Saves and restores user interface settings stored in a cookie.
*
* @package WordPress
* @subpackage Option
* @since 2.7.0
*
* Checks if the current user-settings cookie is updated and stores it.
* When no cookie exists (different browser used), adds the last saved cookie restoring the settings.
*/
function wp_user_settings() {
if ( ! is_admin() )
return;
if ( ! $user = wp_get_current_user() )
return;
$settings = get_user_option( 'user-settings', $user->ID );
if ( isset($_COOKIE['wp-settings-'.$user->ID]) ) {
$cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-'.$user->ID] );
if ( ! empty($cookie) && strpos($cookie, '=') ) {
if ( $cookie == $settings )
return;
$last_time = (int) get_user_option( 'user-settings-time', $user->ID );
$saved = isset($_COOKIE['wp-settings-time-'.$user->ID]) ? preg_replace( '/[^0-9]/', '', $_COOKIE['wp-settings-time-'.$user->ID] ) : 0;
if ( $saved > $last_time ) {
update_user_option( $user->ID, 'user-settings', $cookie );
update_user_option( $user->ID, 'user-settings-time', time() - 5 );
return;
}
}
}
setcookie('wp-settings-'.$user->ID, $settings, time() + 31536000, SITECOOKIEPATH);
setcookie('wp-settings-time-'.$user->ID, time(), time() + 31536000, SITECOOKIEPATH);
}
/**
* Retrieve user interface setting value based on setting name.
*
* @package WordPress
* @subpackage Option
* @since 2.7.0
*
* @param string $name The name of the setting.
* @param string $default Optional default value to return when $name is not set.
* @return mixed the last saved user setting or the default value/false if it doesn't exist.
*/
function get_user_setting( $name, $default = false ) {
$arr = get_all_user_settings();
return isset($arr[$name]) ? $arr[$name] : $default;
}
/**
* Delete user interface settings.
*
* @package WordPress
* @subpackage Option
* @since 2.7.0
*
* Deleting settings would reset them to the defaults.
*
* @param mixed $names The name or array of names of the setting to be deleted.
*/
function delete_user_setting( $names ) {
global $current_user;
$arr = get_all_user_settings();
$names = (array) $names;
foreach ( $names as $name ) {
if ( isset($arr[$name]) ) {
unset($arr[$name]);
$settings = '';
}
}
if ( isset($settings) ) {
foreach ( $arr as $k => $v )
$settings .= $k . '=' . $v . '&';
$settings = rtrim($settings, '&');
update_user_option( $current_user->ID, 'user-settings', $settings );
setcookie('wp-settings-'.$current_user->ID, $settings, time() + 31536000, SITECOOKIEPATH);
}
}
/**
* Retrieve all user interface settings.
*
* @package WordPress
* @subpackage Option
* @since 2.7.0
*
* @return array the last saved user settings or empty array.
*/
function get_all_user_settings() {
if ( ! $user = wp_get_current_user() )
return array();
if ( isset($_COOKIE['wp-settings-'.$user->ID]) ) {
$cookie = preg_replace( '/[^A-Za-z0-9=&_]/', '', $_COOKIE['wp-settings-'.$user->ID] );
if ( $cookie && strpos($cookie, '=') ) { // the '=' cannot be 1st char
parse_str($cookie, $arr);
return $arr;
}
}
return array();
}
function delete_all_user_settings() {
if ( ! $user = wp_get_current_user() )
return;
delete_usermeta( $user->ID, 'user-settings' );
setcookie('wp-settings-'.$user->ID, ' ', time() - 31536000, SITECOOKIEPATH);
}
/**
* Serialize data, if needed.
*

View File

@@ -942,8 +942,8 @@ function user_can_richedit() {
function wp_default_editor() {
$r = user_can_richedit() ? 'tinymce' : 'html'; // defaults
if ( $user = wp_get_current_user() ) { // look for cookie
if ( isset($_COOKIE['wordpress_editor_' . $user->ID]) && in_array($_COOKIE['wordpress_editor_' . $user->ID], array('tinymce', 'html', 'test') ) )
$r = $_COOKIE['wordpress_editor_' . $user->ID];
$ed = get_user_setting('editor', 'tinymce');
$r = ( in_array($ed, array('tinymce', 'html', 'test') ) ) ? $ed : $r;
}
return apply_filters( 'wp_default_editor', $r ); // filter
}

View File

@@ -14,7 +14,7 @@
var moreHTML = '<img src="' + url + '/img/trans.gif" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />';
var nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+ed.getLang('wordpress.wp_page_alt')+'" />';
if ( tinymce.util.Cookie.get('kitchenSink') == '1' )
if ( getUserSetting('hidetb', '0') == '1' )
ed.settings.wordpress_adv_hidden = 0;
// Hides the specified toolbar and resizes the iframe
@@ -44,23 +44,20 @@
});
ed.addCommand('WP_Adv', function() {
var id = ed.controlManager.get(tbId).id, cm = ed.controlManager, cook = tinymce.util.Cookie, date;
date = new Date();
date.setTime(date.getTime()+(10*365*24*60*60*1000));
var id = ed.controlManager.get(tbId).id, cm = ed.controlManager;
if (DOM.isHidden(id)) {
cm.setActive('wp_adv', 1);
DOM.show(id);
t._resizeIframe(ed, tbId, -28);
ed.settings.wordpress_adv_hidden = 0;
cook.set('kitchenSink', '1', date);
setUserSetting('hidetb', '1');
} else {
cm.setActive('wp_adv', 0);
DOM.hide(id);
t._resizeIframe(ed, tbId, 28);
ed.settings.wordpress_adv_hidden = 1;
cook.set('kitchenSink', '0', date);
setUserSetting('hidetb', '0');
}
});
@@ -94,11 +91,14 @@
title : 'wordpress.add_media',
image : url + '/img/media.gif',
onclick : function() {
tb_show('', tinymce.DOM.get('add_media').href);
tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' );
var a = tinymce.DOM.get('add-media-link');
if ( a ) {
tb_show('', a.href);
tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' );
}
}
});
/*
ed.addButton('add_image', {
title : 'wordpress.add_image',
image : url + '/img/image.gif',
@@ -125,12 +125,12 @@
tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' );
}
});
*/
// Add Media buttons to fullscreen
ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) {
if ( 'mceFullScreen' != cmd ) return;
if ( 'mce_fullscreen' != ed.id )
ed.settings.theme_advanced_buttons1 += ',|,add_image,add_video,add_audio,add_media';
ed.settings.theme_advanced_buttons1 += ',|,add_media';
});
// Add class "alignleft", "alignright" and "aligncenter" when selecting align for images.

View File

@@ -134,7 +134,7 @@ $no_captions = ( apply_filters( 'disable_captions', '' ) ) ? true : false;
// TinyMCE init settings
$initArray = array (
'mode' => 'none',
'onpageload' => 'wpEditorInit',
'onpageload' => 'switchEditors.edInit',
'width' => '100%',
'theme' => 'advanced',
'skin' => 'wp_theme',
@@ -214,7 +214,7 @@ if ( $compress && isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) {
// Setup cache info
if ( $disk_cache ) {
$cacheKey = apply_filters('tiny_mce_version', '20080731');
$cacheKey = apply_filters('tiny_mce_version', '20080830');
foreach ( $initArray as $v )
$cacheKey .= $v;

View File

@@ -35,12 +35,16 @@ require( ABSPATH . WPINC . '/functions.wp-styles.php' );
* @param object $scripts WP_Scripts object.
*/
function wp_default_scripts( &$scripts ) {
global $current_user;
if (!$guessurl = site_url())
$guessurl = wp_guess_url();
$userid = isset($current_user) ? $current_user->ID : 0;
$scripts->base_url = $guessurl;
$scripts->default_version = get_bloginfo( 'version' );
$scripts->add( 'common', '/wp-admin/js/common.js', array('jquery'), '20080318' );
$scripts->add( 'common', '/wp-admin/js/common.js', array('jquery', 'user-settings'), '20080318' );
$scripts->add( 'sack', '/wp-includes/js/tw-sack.js', false, '1.6.1' );
$scripts->add( 'quicktags', '/wp-includes/js/quicktags.js', false, '20080823' );
@@ -65,7 +69,7 @@ function wp_default_scripts( &$scripts ) {
$scripts->add( 'editor_functions', '/wp-admin/js/editor.js', false, '20080823' );
// Modify this version when tinyMCE plugins are changed.
$mce_version = apply_filters('tiny_mce_version', '20080730');
$mce_version = apply_filters('tiny_mce_version', '20080830');
$scripts->add( 'tiny_mce', '/wp-includes/js/tinymce/tiny_mce_config.php', array('editor_functions'), $mce_version );
$scripts->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.6');
@@ -242,6 +246,13 @@ function wp_default_scripts( &$scripts ) {
) );
$scripts->add( 'farbtastic', '/wp-admin/js/farbtastic.js', array('jquery'), '1.2' );
$scripts->add( 'user-settings', '/wp-admin/js/user-settings.js', array(), '20080829' );
$scripts->localize( 'user-settings', 'userSettings', array(
'url' => SITECOOKIEPATH,
'uid' => $userid,
'time' => time()
) );
}
}
@@ -334,7 +345,6 @@ function wp_prototype_before_jquery( $js_array ) {
* @since 2.5.0
*/
function wp_just_in_time_script_localization() {
wp_localize_script( 'tiny_mce', 'wpTinyMCEConfig', array( 'defaultEditor' => wp_default_editor() ) );
wp_localize_script( 'autosave', 'autosaveL10n', array(
'autosaveInterval' => AUTOSAVE_INTERVAL,
'previewPageText' => __('Preview this Page'),