WordPress.org

Make WordPress Core

Ticket #19320: 19320-3.patch

File 19320-3.patch, 8.2 KB (added by azaozz, 7 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 . ':{