From 1360b0da9fc0bbb823671993ee31c8f16778b7f8 Mon Sep 17 00:00:00 2001 From: Andrew Ozz Date: Sun, 2 Nov 2008 02:12:26 +0000 Subject: [PATCH] Remove outdated TinyMCE files, fix loading of translations for default plugins, fixes #7994 git-svn-id: https://develop.svn.wordpress.org/trunk@9469 602fd350-edb4-49c9-b593-d223f7449a82 --- wp-admin/includes/post.php | 95 +++--- wp-includes/js/tinymce/tiny_mce_config.php | 321 --------------------- wp-includes/js/tinymce/tiny_mce_ext.js | 23 -- 3 files changed, 51 insertions(+), 388 deletions(-) delete mode 100644 wp-includes/js/tinymce/tiny_mce_config.php delete mode 100644 wp-includes/js/tinymce/tiny_mce_ext.js 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'); -};