diff --git a/wp-admin/includes/post.php b/wp-admin/includes/post.php
index bef0325821..dba864915b 100644
--- a/wp-admin/includes/post.php
+++ b/wp-admin/includes/post.php
@@ -81,7 +81,7 @@ function _wp_translate_postdata( $update = false, $post_data = null ) {
if ( ! isset($post_data['post_status']) )
$post_data['post_status'] = $previous_status;
-
+
if (!isset( $post_data['comment_status'] ))
$post_data['comment_status'] = 'closed';
@@ -256,7 +256,7 @@ function bulk_edit_posts( $post_data = null ) {
$skipped[] = $post_ID;
continue;
}
-
+
if ( wp_check_post_lock( $post_ID ) ) {
$locked[] = $post_ID;
continue;
@@ -1046,7 +1046,7 @@ function post_preview() {
function wp_tiny_mce( $teeny = false ) {
if ( ! user_can_richedit() )
return;
-
+
$baseurl = includes_url('js/tinymce');
$mce_css = $baseurl . '/wordpress.css';
@@ -1061,13 +1061,13 @@ function wp_tiny_mce( $teeny = false ) {
http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker
*/
$mce_spellchecker_languages = apply_filters('mce_spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv');
-
+
if ( $teeny ) {
$plugins = apply_filters( 'teeny_mce_plugins', array('safari', 'inlinepopups', 'media', 'autosave', 'fullscreen') );
$ext_plugins = '';
} else {
$plugins = array( 'safari', 'inlinepopups', 'autosave', 'spellchecker', 'paste', 'wordpress', 'media', 'fullscreen', 'wpeditimage' );
-
+
/*
The following filter takes an associative array of external plugins for TinyMCE in the form 'plugin_name' => 'url'.
It adds the plugin's name to TinyMCE's plugins init and the call to PluginManager to load the plugin.
@@ -1076,10 +1076,10 @@ function wp_tiny_mce( $teeny = false ) {
If the plugin uses a button, it should be added with one of the "$mce_buttons" filters.
*/
$mce_external_plugins = apply_filters('mce_external_plugins', array());
-
+
$ext_plugins = "\n";
if ( ! empty($mce_external_plugins) ) {
-
+
/*
The following filter loads external language files for TinyMCE plugins.
It takes an associative array 'plugin_name' => 'path', where path is the
@@ -1090,10 +1090,10 @@ function wp_tiny_mce( $teeny = false ) {
If that is not found, en.js will be tried next.
*/
$mce_external_languages = apply_filters('mce_external_languages', array());
-
+
$loaded_langs = array();
$strings = '';
-
+
if ( ! empty($mce_external_languages) ) {
foreach ( $mce_external_languages as $name => $path ) {
if ( is_file($path) && is_readable($path) ) {
@@ -1103,33 +1103,41 @@ function wp_tiny_mce( $teeny = false ) {
}
}
}
-
+
foreach ( $mce_external_plugins as $name => $url ) {
-
+
if ( is_ssl() ) $url = str_replace('http://', 'https://', $url);
-
+
$plugins[] = '-' . $name;
-
+
$plugurl = dirname($url);
- $strings = '';
+ $strings = $str1 = $str2 = '';
if ( ! in_array($name, $loaded_langs) ) {
- $plugpath = str_replace( WP_PLUGIN_URL, '', $plugurl );
- $plugpath = WP_PLUGIN_DIR . $plugpath;
+ $path = preg_replace( '|.+?' . basename(WP_PLUGIN_URL) . '|', '', $plugurl );
+ $path = WP_PLUGIN_DIR . $path . '/langs/';
if ( function_exists('realpath') )
$plugpath = realpath($plugpath);
- $path = $plugpath . '/langs/' . $mce_locale . '.js';
- $path2 = $plugpath . '/langs/en.js';
+ if ( is_file($path . $mce_locale . '.js') )
+ $strings .= @file_get_contents($path . $mce_locale . '.js');
- if ( is_file($path) && is_readable($path) ) {
- $strings = @file_get_contents($path);
- } elseif ( 'en' != $mce_locale && is_file($path2) && is_readable($path2) ) {
- $strings = @file_get_contents($path2);
- $strings = preg_replace( '/([\'"])en\./', '$1' . $mce_locale . '.', $strings, 1 );
+ if ( is_file($path . $mce_locale . '_dlg.js') )
+ $strings .= @file_get_contents($path . $mce_locale . '_dlg.js');
+
+ if ( 'en' != $mce_locale && empty($strings) ) {
+ if ( is_file($path . 'en.js') ) {
+ $str1 = @file_get_contents($path . 'en.js');
+ $strings .= preg_replace( '/([\'"])en\./', '$1' . $mce_locale . '.', $str1, 1 );
+ }
+
+ if ( is_file($path . 'en_dlg.js') ) {
+ $str2 = @file_get_contents($path . 'en_dlg.js');
+ $strings .= preg_replace( '/([\'"])en\./', '$1' . $mce_locale . '.', $str2, 1 );
+ }
}
- if ( $strings )
+ if ( ! empty($strings) )
$ext_plugins .= "\n" . $strings . "\n";
}
@@ -1140,7 +1148,7 @@ function wp_tiny_mce( $teeny = false ) {
}
$plugins = implode($plugins, ',');
-
+
if ( $teeny ) {
$mce_buttons = apply_filters( 'teeny_mce_buttons', array('bold, italic, underline, blockquote, separator, strikethrough, bullist, numlist,justifyleft, justifycenter, justifyright, undo, redo, link, unlink, fullscreen') );
$mce_buttons = implode($mce_buttons, ',');
@@ -1148,18 +1156,18 @@ function wp_tiny_mce( $teeny = false ) {
} else {
$mce_buttons = apply_filters('mce_buttons', array('bold', 'italic', 'strikethrough', '|', 'bullist', 'numlist', 'blockquote', '|', 'justifyleft', 'justifycenter', 'justifyright', '|', 'link', 'unlink', 'wp_more', '|', 'spellchecker', 'fullscreen', 'wp_adv' ));
$mce_buttons = implode($mce_buttons, ',');
-
+
$mce_buttons_2 = apply_filters('mce_buttons_2', array('formatselect', 'underline', 'justifyfull', 'forecolor', '|', 'pastetext', 'pasteword', 'removeformat', '|', 'media', 'charmap', '|', 'outdent', 'indent', '|', 'undo', 'redo', 'wp_help' ));
$mce_buttons_2 = implode($mce_buttons_2, ',');
-
+
$mce_buttons_3 = apply_filters('mce_buttons_3', array());
$mce_buttons_3 = implode($mce_buttons_3, ',');
-
+
$mce_buttons_4 = apply_filters('mce_buttons_4', array());
$mce_buttons_4 = implode($mce_buttons_4, ',');
}
$no_captions = ( apply_filters( 'disable_captions', '' ) ) ? true : false;
-
+
// TinyMCE init settings
$initArray = array (
'mode' => 'none',
@@ -1196,7 +1204,7 @@ function wp_tiny_mce( $teeny = false ) {
'wpeditimage_disable_captions' => $no_captions,
'plugins' => "$plugins"
);
-
+
// For people who really REALLY know what they're doing with TinyMCE
// You can modify initArray to add, remove, change elements of the config before tinyMCE.init
// Setting "valid_elements", "invalid_elements" and "extended_valid_elements" can be done through "tiny_mce_before_init".
@@ -1217,12 +1225,11 @@ function wp_tiny_mce( $teeny = false ) {
$mce_options = '';
foreach ( $initArray as $k => $v )
$mce_options .= $k . ':"' . $v . '", ';
-
+
$mce_options = rtrim( trim($mce_options), '\n\r,' ); ?>
-
-
+
+
+
+
'url'.
-It adds the plugin's name to TinyMCE's plugins init and the call to PluginManager to load the plugin.
-The url should be absolute and should include the js file name to be loaded. Example:
-array( 'myplugin' => 'http://my-site.com/wp-content/plugins/myfolder/mce_plugin.js' )
-If the plugin uses a button, it should be added with one of the "$mce_buttons" filters.
-*/
-$mce_external_plugins = apply_filters('mce_external_plugins', array());
-
-$ext_plugins = "\n";
-if ( ! empty($mce_external_plugins) ) {
-
- /*
- The following filter loads external language files for TinyMCE plugins.
- It takes an associative array 'plugin_name' => 'path', where path is the
- include path to the file. The language file should follow the same format as
- /tinymce/langs/wp-langs.php and should define a variable $strings that
- holds all translated strings. Example:
- $strings = 'tinyMCE.addI18n("' . $mce_locale . '.mypluginname_dlg",{tab_general:"General", ... })';
- */
- $mce_external_languages = apply_filters('mce_external_languages', array());
-
- $loaded_langs = array();
- $strings = '';
-
- if ( ! empty($mce_external_languages) ) {
- foreach ( $mce_external_languages as $name => $path ) {
- if ( is_file($path) && is_readable($path) ) {
- include_once($path);
- $ext_plugins .= $strings;
- $loaded_langs[] = $name;
- }
- }
- }
-
- foreach ( $mce_external_plugins as $name => $url ) {
-
- if ( is_ssl() ) $url = str_replace('http://', 'https://', $url);
-
- $plugins[] = '-' . $name;
-
- if ( in_array($name, $loaded_langs) ) {
- $plugurl = dirname($url);
- $ext_plugins .= 'tinyMCEPreInit.load_ext("' . $plugurl . '", "' . $mce_locale . '");' . "\n";
- }
- $ext_plugins .= 'tinymce.PluginManager.load("' . $name . '", "' . $url . '");' . "\n";
- }
-}
-$plugins = implode($plugins, ',');
-
-$mce_buttons = apply_filters('mce_buttons', array('bold', 'italic', 'strikethrough', '|', 'bullist', 'numlist', 'blockquote', '|', 'justifyleft', 'justifycenter', 'justifyright', '|', 'link', 'unlink', 'wp_more', '|', 'spellchecker', 'fullscreen', 'wp_adv' ));
-$mce_buttons = implode($mce_buttons, ',');
-
-$mce_buttons_2 = apply_filters('mce_buttons_2', array('formatselect', 'underline', 'justifyfull', 'forecolor', '|', 'pastetext', 'pasteword', 'removeformat', '|', 'media', 'charmap', '|', 'outdent', 'indent', '|', 'undo', 'redo', 'wp_help' ));
-$mce_buttons_2 = implode($mce_buttons_2, ',');
-
-$mce_buttons_3 = apply_filters('mce_buttons_3', array());
-$mce_buttons_3 = implode($mce_buttons_3, ',');
-
-$mce_buttons_4 = apply_filters('mce_buttons_4', array());
-$mce_buttons_4 = implode($mce_buttons_4, ',');
-
-$no_captions = ( apply_filters( 'disable_captions', '' ) ) ? true : false;
-
-// TinyMCE init settings
-$initArray = array (
- 'mode' => 'none',
- 'onpageload' => 'switchEditors.edInit',
- 'width' => '100%',
- 'theme' => 'advanced',
- 'skin' => 'wp_theme',
- 'theme_advanced_buttons1' => "$mce_buttons",
- 'theme_advanced_buttons2' => "$mce_buttons_2",
- 'theme_advanced_buttons3' => "$mce_buttons_3",
- 'theme_advanced_buttons4' => "$mce_buttons_4",
- 'language' => "$mce_locale",
- 'spellchecker_languages' => "$mce_spellchecker_languages",
- 'theme_advanced_toolbar_location' => 'top',
- 'theme_advanced_toolbar_align' => 'left',
- 'theme_advanced_statusbar_location' => 'bottom',
- 'theme_advanced_resizing' => true,
- 'theme_advanced_resize_horizontal' => false,
- 'dialog_type' => 'modal',
- 'relative_urls' => false,
- 'remove_script_host' => false,
- 'convert_urls' => false,
- 'apply_source_formatting' => false,
- 'remove_linebreaks' => true,
- 'paste_convert_middot_lists' => true,
- 'paste_remove_spans' => true,
- 'paste_remove_styles' => true,
- 'gecko_spellcheck' => true,
- 'entities' => '38,amp,60,lt,62,gt',
- 'accessibility_focus' => false,
- 'tab_focus' => ':next',
- 'content_css' => "$mce_css",
- 'save_callback' => 'switchEditors.saveCallback',
- 'wpeditimage_disable_captions' => $no_captions,
- 'plugins' => "$plugins",
- // pass-through the settings for compression and caching, so they can be changed with "tiny_mce_before_init"
- 'disk_cache' => true,
- 'compress' => true,
- 'old_cache_max' => '1' // number of cache files to keep
-);
-
-// For people who really REALLY know what they're doing with TinyMCE
-// You can modify initArray to add, remove, change elements of the config before tinyMCE.init (changed from action to filter)
-$initArray = apply_filters('tiny_mce_before_init', $initArray);
-
-// Setting "valid_elements", "invalid_elements" and "extended_valid_elements" can be done through "tiny_mce_before_init".
-// Best is to use the default cleanup by not specifying valid_elements, as TinyMCE contains full set of XHTML 1.0.
-
-// Settings for the gzip compression and cache
-$disk_cache = ( ! isset($initArray['disk_cache']) || false == $initArray['disk_cache'] ) ? false : true;
-$compress = ( ! isset($initArray['compress']) || false == $initArray['compress'] ) ? false : true;
-$old_cache_max = ( isset($initArray['old_cache_max']) ) ? (int) $initArray['old_cache_max'] : 0;
-
-$initArray['disk_cache'] = $initArray['compress'] = $initArray['old_cache_max'] = null;
-unset( $initArray['disk_cache'], $initArray['compress'], $initArray['old_cache_max'] );
-
-// Anybody still using IE5/5.5? It can't handle gzip compressed js well.
-if ( $msie = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ) {
- $ie_ver = (int) substr( $_SERVER['HTTP_USER_AGENT'] , $msie + 5, 3 );
- if ( $ie_ver && $ie_ver < 6 ) $compress = false;
-}
-
-// Cache path, this is where the .gz files will be stored
-$cache_path = WP_CONTENT_DIR . '/uploads/js_cache';
-if ( $disk_cache && ! is_dir($cache_path) )
- $disk_cache = wp_mkdir_p($cache_path);
-
-$cache_ext = '.js';
-$plugins = explode( ',', $initArray['plugins'] );
-$theme = ( 'simple' == $initArray['theme'] ) ? 'simple' : 'advanced';
-$language = ( isset($initArray['language']) && ! empty($initArray['language']) ) ? substr( $initArray['language'], 0, 2 ) : 'en';
-$cacheKey = $mce_options = '';
-
-// Check if browser supports gzip
-if ( $compress && isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) {
- if ( ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') || isset($_SERVER['---------------']) ) && function_exists('gzencode') && ! ini_get('zlib.output_compression') ) {
- $cache_ext = '.gz';
- }
-}
-
-// Setup cache info
-if ( $disk_cache ) {
-
- $cacheKey = apply_filters('tiny_mce_version', '20080930');
-
- foreach ( $initArray as $v )
- $cacheKey .= $v;
-
- if ( ! empty($mce_external_plugins) ) {
- foreach ( $mce_external_plugins as $n => $v )
- $cacheKey .= $n;
- }
-
- $cacheKey = md5( $cacheKey );
- $cache_file = $cache_path . '/tinymce_' . $cacheKey . $cache_ext;
-}
-
-$expiresOffset = 864000; // 10 days
-header( 'Content-Type: application/x-javascript; charset=UTF-8' );
-header( 'Vary: Accept-Encoding' ); // Handle proxies
-header( 'Expires: ' . gmdate( "D, d M Y H:i:s", time() + $expiresOffset ) . ' GMT' );
-
-// Use cached file if exists
-if ( $disk_cache && is_file($cache_file) && is_readable($cache_file) ) {
-
- $mtime = gmdate("D, d M Y H:i:s", filemtime($cache_file)) . " GMT";
-
- if ( isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $_SERVER['HTTP_IF_MODIFIED_SINCE'] == $mtime ) {
- header('HTTP/1.1 304 Not Modified');
- exit;
- }
- header("Last-Modified: " . $mtime);
- header("Cache-Control: must-revalidate", false);
-
- $content = getFileContents( $cache_file );
-
- if ( '.gz' == $cache_ext )
- header( 'Content-Encoding: gzip' );
-
- echo $content;
- exit;
-}
-
-foreach ( $initArray as $k => $v )
- $mce_options .= $k . ':"' . $v . '",';
-
-$mce_options = rtrim( trim($mce_options), '\n\r,' );
-
-// Pre-init settings
-$content = 'var tinyMCEPreInit = { base : "'. $baseurl .'", suffix : "", query : "ver=3201", mceInit : {' . $mce_options . '}};' . "\n";
-
-// Load patch
-$content .= getFileContents( 'tiny_mce_ext.js' );
-
-// Add core
-$content .= getFileContents( 'tiny_mce.js' );
-
-// Add all languages (WP)
-include_once( dirname(__FILE__).'/langs/wp-langs.php' );
-$content .= $strings;
-
-// Add themes
-$content .= getFileContents( 'themes/' . $theme . '/editor_template.js' );
-
-// Add plugins
-foreach ( $plugins as $plugin )
- $content .= getFileContents( 'plugins/' . $plugin . '/editor_plugin.js' );
-
-// Add external plugins
-$content .= $ext_plugins;
-
-// Mark translations as done
-$content .= 'tinyMCEPreInit.start();' . "\n";
-
-// Init
-$content .= 'tinyMCE.init(tinyMCEPreInit.mceInit);';
-
-// Generate GZIP'd content
-if ( '.gz' == $cache_ext ) {
- header('Content-Encoding: gzip');
- $content = gzencode( $content, 9, FORCE_GZIP );
-}
-
-// Stream to client
-echo $content;
-
-// Write file
-if ( '' != $cacheKey && is_dir($cache_path) && is_readable($cache_path) ) {
- $old_cache = array();
- $handle = opendir($cache_path);
- while ( false !== ( $file = readdir($handle) ) ) {
- if ( $file == '.' || $file == '..' ) continue;
- $old_cache[] = filemtime("$cache_path/$file") . strval($file);
- }
- closedir($handle);
-
- rsort($old_cache);
- if ( 1 >= $old_cache_max ) $del_cache = $old_cache;
- else $del_cache = array_slice( $old_cache, ($old_cache_max - 1) );
-
- foreach ( $del_cache as $key ) {
- $key = substr($key, 10);
- @unlink("$cache_path/$key");
- }
- putFileContents( $cache_file, $content );
-}
-
-?>
\ No newline at end of file
diff --git a/wp-includes/js/tinymce/tiny_mce_ext.js b/wp-includes/js/tinymce/tiny_mce_ext.js
deleted file mode 100644
index 0e1fb23933..0000000000
--- a/wp-includes/js/tinymce/tiny_mce_ext.js
+++ /dev/null
@@ -1,23 +0,0 @@
-
-tinyMCEPreInit.start = function() {
- var t = this, sl = tinymce.ScriptLoader, ln = t.mceInit.language, th = t.mceInit.theme, pl = t.mceInit.plugins;
-
- sl.markDone(t.base + '/langs/' + ln + '.js');
-
- sl.markDone(t.base + '/themes/' + th + '/langs/' + ln + '.js');
- sl.markDone(t.base + '/themes/' + th + '/langs/' + ln + '_dlg.js');
-
- tinymce.each(pl.split(','), function(n) {
- if (n && n.charAt(0) != '-') {
- sl.markDone(t.base + '/plugins/' + n + '/langs/' + ln + '.js');
- sl.markDone(t.base + '/plugins/' + n + '/langs/' + ln + '_dlg.js');
- }
- });
-};
-
-tinyMCEPreInit.load_ext = function(url,lang) {
- var sl = tinymce.ScriptLoader;
-
- sl.markDone(url + '/langs/' + lang + '.js');
- sl.markDone(url + '/langs/' + lang + '_dlg.js');
-};