File "class-wp-widget-custom-html.php"

Full path: /home/kosmetik/public_html/wp-includes/widgets/class-wp-widget-custom-html.php
File size: 7.84 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

class WP_Widget_Custom_HTML extends WP_Widget
{
    protected $registered = false;
    protected $default_instance = array('title' => '', 'content' => '');
    public function __construct()
    {
        $widget_ops = array('classname' => 'widget_custom_html', 'description' => __('Arbitrary HTML code.'), 'customize_selective_refresh' => true);
        $control_ops = array('width' => 400, 'height' => 350);
        parent::__construct('custom_html', __('Custom HTML'), $widget_ops, $control_ops);
    }
    public function _register_one($number = -1)
    {
        parent::_register_one($number);
        if ($this->registered) {
            return;
        }
        $this->registered = true;
        wp_add_inline_script('custom-html-widgets', sprintf('wp.customHtmlWidgets.idBases.push( %s );', wp_json_encode($this->id_base)));
        add_action('admin_print_scripts-widgets.php', array($this, 'enqueue_admin_scripts'));
        add_action('admin_footer-widgets.php', array('WP_Widget_Custom_HTML', 'render_control_template_scripts'));
        add_action('admin_head-widgets.php', array('WP_Widget_Custom_HTML', 'add_help_text'));
    }
    public function _filter_gallery_shortcode_attrs($attrs)
    {
        if (!is_singular() && empty($attrs['id']) && empty($attrs['include'])) {
            $attrs['id'] = -1;
        }
        return $attrs;
    }
    public function widget($args, $instance)
    {
        global $post;
        $original_post = $post;
        if (is_singular()) {
            $post = get_queried_object();
        } else {
            $post = null;
        }
        add_filter('shortcode_atts_gallery', array($this, '_filter_gallery_shortcode_attrs'));
        $instance = array_merge($this->default_instance, $instance);
        $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base);
        $simulated_text_widget_instance = array_merge($instance, array('text' => isset($instance['content']) ? $instance['content'] : '', 'filter' => false, 'visual' => false));
        unset($simulated_text_widget_instance['content']);
        $content = apply_filters('widget_text', $instance['content'], $simulated_text_widget_instance, $this);
        $content = wp_targeted_link_rel($content);
        $content = apply_filters('widget_custom_html_content', $content, $instance, $this);
        $post = $original_post;
        remove_filter('shortcode_atts_gallery', array($this, '_filter_gallery_shortcode_attrs'));
        $args['before_widget'] = preg_replace('/(?<=\\sclass=["\'])/', 'widget_text ', $args['before_widget']);
        echo $args['before_widget'];
        if (!empty($title)) {
            echo $args['before_title'] . $title . $args['after_title'];
        }
        echo '<div class="textwidget custom-html-widget">';
        echo $content;
        echo '</div>';
        echo $args['after_widget'];
    }
    public function update($new_instance, $old_instance)
    {
        $instance = array_merge($this->default_instance, $old_instance);
        $instance['title'] = sanitize_text_field($new_instance['title']);
        if (current_user_can('unfiltered_html')) {
            $instance['content'] = $new_instance['content'];
        } else {
            $instance['content'] = wp_kses_post($new_instance['content']);
        }
        return $instance;
    }
    public function enqueue_admin_scripts()
    {
        $settings = wp_enqueue_code_editor(array('type' => 'text/html', 'codemirror' => array('indentUnit' => 2, 'tabSize' => 2)));
        wp_enqueue_script('custom-html-widgets');
        if (empty($settings)) {
            $settings = array('disabled' => true);
        }
        wp_add_inline_script('custom-html-widgets', sprintf('wp.customHtmlWidgets.init( %s );', wp_json_encode($settings)), 'after');
        $l10n = array('errorNotice' => array('singular' => _n('There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.', 1), 'plural' => _n('There is %d error which must be fixed before you can save.', 'There are %d errors which must be fixed before you can save.', 2)));
        wp_add_inline_script('custom-html-widgets', sprintf('jQuery.extend( wp.customHtmlWidgets.l10n, %s );', wp_json_encode($l10n)), 'after');
    }
    public function form($instance)
    {
        $instance = wp_parse_args((array) $instance, $this->default_instance);
        ?>
		<input id="<?php 
        echo $this->get_field_id('title');
        ?>" name="<?php 
        echo $this->get_field_name('title');
        ?>" class="title sync-input" type="hidden" value="<?php 
        echo esc_attr($instance['title']);
        ?>"/>
		<textarea id="<?php 
        echo $this->get_field_id('content');
        ?>" name="<?php 
        echo $this->get_field_name('content');
        ?>" class="content sync-input" hidden><?php 
        echo esc_textarea($instance['content']);
        ?></textarea>
		<?php 
    }
    public static function render_control_template_scripts()
    {
        ?>
		<script type="text/html" id="tmpl-widget-custom-html-control-fields">
			<# var elementIdPrefix = 'el' + String( Math.random() ).replace( /\D/g, '' ) + '_' #>
			<p>
				<label for="{{ elementIdPrefix }}title"><?php 
        esc_html_e('Title:');
        ?></label>
				<input id="{{ elementIdPrefix }}title" type="text" class="widefat title">
			</p>

			<p>
				<label for="{{ elementIdPrefix }}content" id="{{ elementIdPrefix }}content-label"><?php 
        esc_html_e('Content:');
        ?></label>
				<textarea id="{{ elementIdPrefix }}content" class="widefat code content" rows="16" cols="20"></textarea>
			</p>

			<?php 
        if (!current_user_can('unfiltered_html')) {
            ?>
				<?php 
            $probably_unsafe_html = array('script', 'iframe', 'form', 'input', 'style');
            $allowed_html = wp_kses_allowed_html('post');
            $disallowed_html = array_diff($probably_unsafe_html, array_keys($allowed_html));
            ?>
				<?php 
            if (!empty($disallowed_html)) {
                ?>
					<# if ( data.codeEditorDisabled ) { #>
						<p>
							<?php 
                _e('Some HTML tags are not permitted, including:');
                ?>
							<code><?php 
                echo implode('</code>, <code>', $disallowed_html);
                ?></code>
						</p>
					<# } #>
				<?php 
            }
            ?>
			<?php 
        }
        ?>

			<div class="code-editor-error-container"></div>
		</script>
		<?php 
    }
    public static function add_help_text()
    {
        $screen = get_current_screen();
        $content = '<p>';
        $content .= __('Use the Custom HTML widget to add arbitrary HTML code to your widget areas.');
        $content .= '</p>';
        if ('false' !== wp_get_current_user()->syntax_highlighting) {
            $content .= '<p>';
            $content .= sprintf(__('The edit field automatically highlights code syntax. You can disable this in your <a href="%1$s" %2$s>user profile%3$s</a> to work in plain text mode.'), esc_url(get_edit_profile_url()), 'class="external-link" target="_blank"', sprintf('<span class="screen-reader-text"> %s</span>', __('(opens in a new tab)')));
            $content .= '</p>';
            $content .= '<p id="editor-keyboard-trap-help-1">' . __('When using a keyboard to navigate:') . '</p>';
            $content .= '<ul>';
            $content .= '<li id="editor-keyboard-trap-help-2">' . __('In the editing area, the Tab key enters a tab character.') . '</li>';
            $content .= '<li id="editor-keyboard-trap-help-3">' . __('To move away from this area, press the Esc key followed by the Tab key.') . '</li>';
            $content .= '<li id="editor-keyboard-trap-help-4">' . __('Screen reader users: when in forms mode, you may need to press the Esc key twice.') . '</li>';
            $content .= '</ul>';
        }
        $screen->add_help_tab(array('id' => 'custom_html_widget', 'title' => __('Custom HTML Widget'), 'content' => $content));
    }
}