WordPress.org

Make WordPress Core

Ticket #19320: 19320-3.patch

File 19320-3.patch, 8.2 KB (added by azaozz, 2 years ago)
  • wp-admin/admin-ajax.php

     
    11291129                $args['s'] = stripslashes( $_POST['search'] ); 
    11301130        $args['pagenum'] = ! empty( $_POST['page'] ) ? absint( $_POST['page'] ) : 1; 
    11311131 
    1132         require(ABSPATH . WPINC . '/class-wp-editor.php'); 
    1133         $results = WP_Editor::wp_link_query( $args ); 
     1132        $wp_editor = _get_wp_editor(); 
     1133        $results = $wp_editor->wp_link_query( $args ); 
    11341134 
    11351135        if ( ! isset( $results ) ) 
    11361136                die( '0' ); 
  • wp-admin/includes/deprecated.php

     
    711711function wp_tiny_mce( $teeny = false, $settings = false ) { 
    712712        _deprecated_function( __FUNCTION__, '3.3', 'wp_editor()' ); 
    713713 
    714         global $wp_editor; 
    715714        static $num = 1; 
     715        $wp_editor = _get_wp_editor(); 
     716        $editor_id = 'content' . $num++; 
    716717 
    717         if ( !is_a($wp_editor, 'WP_Editor') ) { 
    718                 if ( !class_exists('WP_Editor') ) 
    719                         require_once( ABSPATH . WPINC . '/class-wp-editor.php' ); 
    720  
    721                 $wp_editor = new WP_Editor; 
    722         } 
    723  
    724         $editor_id = 'content' . $num; 
    725         ++$num; 
    726  
    727718        $set = array( 
    728719                'teeny' => $teeny, 
    729720                'tinymce' => $settings ? $settings : true, 
    730721                'quicktags' => false 
    731722        ); 
    732723 
    733         $set = $wp_editor->parse_settings($editor_id, $set); 
    734724        $wp_editor->editor_settings($editor_id, $set); 
    735725} 
    736726 
  • wp-includes/class-wp-editor.php

     
    88 * Private, not included by default. See wp_editor() in wp-includes/general-template.php. 
    99 */ 
    1010 
    11 class WP_Editor { 
     11final class WP_Editor { 
    1212 
    13         var $mce_settings = array(); 
    14         var $qt_settings = array(); 
    15         var $plugins = array(); 
    16         var $qt_buttons = array(); 
    17         var $mce_locale; 
    18         var $ext_plugins; 
    19         var $baseurl; 
    20         var $can_richedit; 
    21         var $default_editor; 
    22         var $first_init; 
    23         var $this_tinymce = false; 
    24         var $this_quicktags = false; 
    25         var $has_tinymce = false; 
    26         var $has_quicktags = false; 
    27         var $has_medialib = false; 
    28         var $editor_buttons_css = true; 
     13        private static $_instance = array(); 
     14        private $mce_settings = array(); 
     15        private $qt_settings = array(); 
     16        private $plugins = array(); 
     17        private $qt_buttons = array(); 
     18        private $mce_locale; 
     19        private $ext_plugins; 
     20        private $baseurl; 
     21        private $can_richedit; 
     22        private $default_editor; 
     23        private $first_init; 
     24        private $this_tinymce = false; 
     25        private $this_quicktags = false; 
     26        private $has_tinymce = false; 
     27        private $has_quicktags = false; 
     28        private $has_medialib = false; 
     29        private $editor_buttons_css = true; 
    2930 
    30         function __construct() { 
    31                 $this->can_richedit = user_can_richedit(); 
    32                 $this->default_editor = $this->wp_default_editor(); 
     31        // Single instance only 
     32        public function __construct() { 
     33                $classname = __CLASS__; 
     34                if ( ! isset(self::$_instance[$classname]) ) { 
     35                        self::$_instance[$classname] = $this; 
     36                        $this->can_richedit = user_can_richedit(); 
     37                        $this->default_editor = $this->wp_default_editor(); 
     38                } else { 
     39                        throw new Exception('Multiple instances of WP_Editor are not allowed.'); 
     40                } 
    3341        } 
     42         
     43        public function __clone() {} 
    3444 
    35         function parse_settings($editor_id, $settings) { 
     45        private function parse_settings($editor_id, $settings) { 
    3646                $set = wp_parse_args( $settings,  array( 
    3747                        'wpautop' => true, // use wpautop? 
    3848                        'media_buttons' => true, // show insert/upload button(s) 
     
    5666                if ( $this->this_quicktags ) 
    5767                        $this->has_quicktags = true; 
    5868 
     69                $set['_parset'] = 1; 
    5970                return $set; 
    6071        } 
    6172 
     
    6677         * @param string $editor_id ID for the textarea and TinyMCE and Quicktags instances (can contain only ASCII letters and numbers). 
    6778         * @param array $settings See WP_Editor::_parse_settings for description. 
    6879         */ 
    69         function editor( $content, $editor_id, $settings = array() ) { 
     80        public function editor( $content, $editor_id, $settings = array() ) { 
    7081 
    7182                $set = $this->parse_settings($editor_id, $settings); 
    7283                $editor_class = ' class="' . trim( $set['editor_class'] . ' wp-editor-area' ) . '"'; 
     
    128139                $this->editor_settings($editor_id, $set); 
    129140        } 
    130141 
    131         function editor_settings($editor_id, $set) { 
     142        public function editor_settings($editor_id, $set) { 
    132143                global $editor_styles; 
    133144                $first_run = false; 
    134145 
     146                if ( !array_key_exists($set['_parset']) ) 
     147                        $set = $this->parse_settings($editor_id, $set); 
     148 
    135149                if ( empty($this->first_init) ) { 
    136150                        if ( is_admin() ) { 
    137151                                add_action( 'admin_print_footer_scripts', array($this, 'editor_js'), 50 ); 
     
    413427                } // end if $this->this_tinymce 
    414428        } 
    415429 
    416         function _parse_init($init) { 
     430        private function _parse_init($init) { 
    417431                $options = ''; 
    418432 
    419433                foreach ( $init as $k => $v ) { 
     
    441455         * 
    442456         * @return string Either 'tinymce', or 'html', or 'test' 
    443457         */ 
    444         function wp_default_editor() { 
     458        public function wp_default_editor() { 
    445459                $r = user_can_richedit() ? 'tinymce' : 'html'; // defaults 
    446460                if ( $user = wp_get_current_user() ) { // look for cookie 
    447461                        $ed = get_user_setting('editor', 'tinymce'); 
     
    450464                return apply_filters( 'wp_default_editor', $r ); // filter 
    451465        } 
    452466 
    453         function enqueue_scripts() { 
     467        public function enqueue_scripts() { 
    454468                wp_enqueue_script('word-count'); 
    455469 
    456470                if ( $this->has_tinymce ) 
     
    474488                } 
    475489        } 
    476490 
    477         function editor_js() { 
     491        public function editor_js() { 
    478492                global $tinymce_version, $concatenate_scripts, $compress_scripts; 
    479493 
    480494                /** 
     
    608622                do_action('after_wp_tiny_mce', $this->mce_settings); 
    609623        } 
    610624 
    611         function wp_fullscreen_html() { 
     625        public static function wp_fullscreen_html() { 
    612626                global $content_width, $post; 
    613627 
    614628                $width = isset($content_width) && 800 > $content_width ? $content_width : 800; 
     
    705719         * @param array $args Optional. Accepts 'pagenum' and 's' (search) arguments. 
    706720         * @return array Results. 
    707721         */ 
    708         function wp_link_query( $args = array() ) { 
     722        public static function wp_link_query( $args = array() ) { 
    709723                $pts = get_post_types( array( 'public' => true ), 'objects' ); 
    710724                $pt_names = array_keys( $pts ); 
    711725 
     
    758772         * 
    759773         * @since 3.1.0 
    760774         */ 
    761         function wp_link_dialog() { 
     775        public static function wp_link_dialog() { 
    762776        ?> 
    763777        <div style="display:none;"> 
    764778        <form id="wp-link" tabindex="-1"> 
  • wp-includes/deprecated.php

     
    26282628function wp_default_editor() { 
    26292629        _deprecated_function( __FUNCTION__, '3.3' ); 
    26302630 
    2631         global $wp_editor; 
    2632         if ( !is_a($wp_editor, 'WP_Editor') ) { 
    2633                 require_once( ABSPATH . WPINC . '/class-wp-editor.php' ); 
    2634                 $wp_editor = new WP_Editor; 
    2635         } 
    2636  
     2631        $wp_editor = _get_wp_editor(); 
    26372632        return $wp_editor->wp_default_editor(); 
    26382633} 
    26392634 
  • wp-includes/general-template.php

     
    17861786 * @param array $settings See WP_Editor::editor(). 
    17871787 */ 
    17881788function wp_editor( $content, $editor_id, $settings = array() ) { 
    1789         global $wp_editor; 
     1789        $wp_editor = _get_wp_editor(); 
     1790        $wp_editor->editor($content, $editor_id, $settings); 
     1791} 
    17901792 
    1791         if ( !is_a($wp_editor, 'WP_Editor') ) { 
     1793// private 
     1794function _get_wp_editor() { 
     1795        static $instance; 
     1796 
     1797        if ( !is_a($instance, 'WP_Editor') ) { 
    17921798                require( ABSPATH . WPINC . '/class-wp-editor.php' ); 
    1793                 $wp_editor = new WP_Editor; 
     1799                $instance = new WP_Editor; 
    17941800        } 
    17951801 
    1796         $wp_editor->editor($content, $editor_id, $settings); 
     1802        return $instance; 
    17971803} 
    17981804 
    17991805/** 
  • wp-includes/js/tinymce/langs/wp-langs.php

     
    11<?php 
    22 
    3 // escape text only if it needs translating 
    43function mce_escape($text) { 
    5         global $wp_editor; 
    6  
    7         if ( 'en' == $wp_editor->mce_locale ) 
    8                 return $text; 
    9         else 
    10                 return esc_js($text); 
     4        return esc_js($text); 
    115} 
    126 
    137$lang = 'tinyMCE.addI18n({' . $this->mce_locale . ':{