File "class-wp-widget-media.php"

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

Download   Open   Edit   Advanced Editor   Back

<?php

abstract class WP_Widget_Media extends WP_Widget
{
    public $l10n = array('add_to_widget' => '', 'replace_media' => '', 'edit_media' => '', 'media_library_state_multi' => '', 'media_library_state_single' => '', 'missing_attachment' => '', 'no_media_selected' => '', 'add_media' => '');
    protected $registered = false;
    public function __construct($id_base, $name, $widget_options = array(), $control_options = array())
    {
        $widget_opts = wp_parse_args($widget_options, array('description' => __('A media item.'), 'customize_selective_refresh' => true, 'mime_type' => ''));
        $control_opts = wp_parse_args($control_options, array());
        $l10n_defaults = array('no_media_selected' => __('No media selected'), 'add_media' => _x('Add Media', 'label for button in the media widget'), 'replace_media' => _x('Replace Media', 'label for button in the media widget; should preferably not be longer than ~13 characters long'), 'edit_media' => _x('Edit Media', 'label for button in the media widget; should preferably not be longer than ~13 characters long'), 'add_to_widget' => __('Add to Widget'), 'missing_attachment' => sprintf(__('We can&#8217;t find that file. Check your <a href="%s">media library</a> and make sure it wasn&#8217;t deleted.'), esc_url(admin_url('upload.php'))), 'media_library_state_multi' => _n_noop('Media Widget (%d)', 'Media Widget (%d)'), 'media_library_state_single' => __('Media Widget'), 'unsupported_file_type' => __('Looks like this isn&#8217;t the correct kind of file. Please link to an appropriate file instead.'));
        $this->l10n = array_merge($l10n_defaults, array_filter($this->l10n));
        parent::__construct($id_base, $name, $widget_opts, $control_opts);
    }
    public function _register_one($number = -1)
    {
        parent::_register_one($number);
        if ($this->registered) {
            return;
        }
        $this->registered = true;
        add_action('admin_print_scripts-widgets.php', array($this, 'enqueue_admin_scripts'));
        if ($this->is_preview()) {
            add_action('wp_enqueue_scripts', array($this, 'enqueue_preview_scripts'));
        }
        add_action('admin_footer-widgets.php', array($this, 'render_control_template_scripts'));
        add_filter('display_media_states', array($this, 'display_media_state'), 10, 2);
    }
    public function get_instance_schema()
    {
        $schema = array('attachment_id' => array('type' => 'integer', 'default' => 0, 'minimum' => 0, 'description' => __('Attachment post ID'), 'media_prop' => 'id'), 'url' => array('type' => 'string', 'default' => '', 'format' => 'uri', 'description' => __('URL to the media file')), 'title' => array('type' => 'string', 'default' => '', 'sanitize_callback' => 'sanitize_text_field', 'description' => __('Title for the widget'), 'should_preview_update' => false));
        $schema = apply_filters("widget_{$this->id_base}_instance_schema", $schema, $this);
        return $schema;
    }
    public function is_attachment_with_mime_type($attachment, $mime_type)
    {
        if (empty($attachment)) {
            return false;
        }
        $attachment = get_post($attachment);
        if (!$attachment) {
            return false;
        }
        if ('attachment' !== $attachment->post_type) {
            return false;
        }
        return wp_attachment_is($mime_type, $attachment);
    }
    public function sanitize_token_list($tokens)
    {
        if (is_string($tokens)) {
            $tokens = preg_split('/\\s+/', trim($tokens));
        }
        $tokens = array_map('sanitize_html_class', $tokens);
        $tokens = array_filter($tokens);
        return implode(' ', $tokens);
    }
    public function widget($args, $instance)
    {
        $instance = wp_parse_args($instance, wp_list_pluck($this->get_instance_schema(), 'default'));
        if (!$this->has_content($instance)) {
            return;
        }
        echo $args['before_widget'];
        $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base);
        if ($title) {
            echo $args['before_title'] . $title . $args['after_title'];
        }
        $instance = apply_filters("widget_{$this->id_base}_instance", $instance, $args, $this);
        $this->render_media($instance);
        echo $args['after_widget'];
    }
    public function update($new_instance, $instance)
    {
        $schema = $this->get_instance_schema();
        foreach ($schema as $field => $field_schema) {
            if (!array_key_exists($field, $new_instance)) {
                continue;
            }
            $value = $new_instance[$field];
            if ('boolean' === $field_schema['type'] && '' === $value) {
                $value = false;
            }
            if (true !== rest_validate_value_from_schema($value, $field_schema, $field)) {
                continue;
            }
            $value = rest_sanitize_value_from_schema($value, $field_schema);
            if (is_wp_error($value)) {
                continue;
            }
            if (isset($field_schema['sanitize_callback'])) {
                $value = call_user_func($field_schema['sanitize_callback'], $value);
            }
            if (is_wp_error($value)) {
                continue;
            }
            $instance[$field] = $value;
        }
        return $instance;
    }
    public abstract function render_media($instance);
    public final function form($instance)
    {
        $instance_schema = $this->get_instance_schema();
        $instance = wp_array_slice_assoc(wp_parse_args((array) $instance, wp_list_pluck($instance_schema, 'default')), array_keys($instance_schema));
        foreach ($instance as $name => $value) {
            ?>
			<input
				type="hidden"
				data-property="<?php 
            echo esc_attr($name);
            ?>"
				class="media-widget-instance-property"
				name="<?php 
            echo esc_attr($this->get_field_name($name));
            ?>"
				id="<?php 
            echo esc_attr($this->get_field_id($name));
            ?>"
				value="<?php 
            echo esc_attr(is_array($value) ? implode(',', $value) : (string) $value);
            ?>"
			/>
			<?php 
        }
    }
    public function display_media_state($states, $post = null)
    {
        if (!$post) {
            $post = get_post();
        }
        $use_count = 0;
        foreach ($this->get_settings() as $instance) {
            if (isset($instance['attachment_id']) && $instance['attachment_id'] === $post->ID) {
                $use_count++;
            }
        }
        if (1 === $use_count) {
            $states[] = $this->l10n['media_library_state_single'];
        } elseif ($use_count > 0) {
            $states[] = sprintf(translate_nooped_plural($this->l10n['media_library_state_multi'], $use_count), number_format_i18n($use_count));
        }
        return $states;
    }
    public function enqueue_preview_scripts()
    {
    }
    public function enqueue_admin_scripts()
    {
        wp_enqueue_media();
        wp_enqueue_script('media-widgets');
    }
    public function render_control_template_scripts()
    {
        ?>
		<script type="text/html" id="tmpl-widget-media-<?php 
        echo esc_attr($this->id_base);
        ?>-control">
			<# var elementIdPrefix = 'el' + String( Math.random() ) + '_' #>
			<p>
				<label for="{{ elementIdPrefix }}title"><?php 
        esc_html_e('Title:');
        ?></label>
				<input id="{{ elementIdPrefix }}title" type="text" class="widefat title">
			</p>
			<div class="media-widget-preview <?php 
        echo esc_attr($this->id_base);
        ?>">
				<div class="attachment-media-view">
					<button type="button" class="select-media button-add-media not-selected">
						<?php 
        echo esc_html($this->l10n['add_media']);
        ?>
					</button>
				</div>
			</div>
			<p class="media-widget-buttons">
				<button type="button" class="button edit-media selected">
					<?php 
        echo esc_html($this->l10n['edit_media']);
        ?>
				</button>
			<?php 
        if (!empty($this->l10n['replace_media'])) {
            ?>
				<button type="button" class="button change-media select-media selected">
					<?php 
            echo esc_html($this->l10n['replace_media']);
            ?>
				</button>
			<?php 
        }
        ?>
			</p>
			<div class="media-widget-fields">
			</div>
		</script>
		<?php 
    }
    protected function has_content($instance)
    {
        return $instance['attachment_id'] && 'attachment' === get_post_type($instance['attachment_id']) || $instance['url'];
    }
}