kratos/inc/codestar-framework/fields/media/media.php

98 lines
4.5 KiB
PHP

<?php if (!defined('ABSPATH')) {
die;
}
/**
*
* Field: media
*
* @since 1.0.0
* @version 1.0.0
*
*/
if (!class_exists('CSF_Field_media')) {
class CSF_Field_media extends CSF_Fields
{
public function __construct($field, $value = '', $unique = '', $where = '', $parent = '')
{
parent::__construct($field, $value, $unique, $where, $parent);
}
public function render()
{
$args = wp_parse_args($this->field, array(
'url' => true,
'preview' => true,
'preview_width' => '',
'preview_height' => '',
'library' => array(),
'button_title' => esc_html__('Upload', 'csf'),
'remove_title' => esc_html__('Remove', 'csf'),
'preview_size' => 'thumbnail',
));
$default_values = array(
'url' => '',
'id' => '',
'width' => '',
'height' => '',
'thumbnail' => '',
'alt' => '',
'title' => '',
'description' => ''
);
// fallback
if (is_numeric($this->value)) {
$this->value = array(
'id' => $this->value,
'url' => wp_get_attachment_url($this->value),
'thumbnail' => wp_get_attachment_image_src($this->value, 'thumbnail', true)[0],
);
}
$this->value = wp_parse_args($this->value, $default_values);
$library = (is_array($args['library'])) ? $args['library'] : array_filter((array) $args['library']);
$library = (!empty($library)) ? implode(',', $library) : '';
$preview_src = ($args['preview_size'] !== 'thumbnail') ? $this->value['url'] : $this->value['thumbnail'];
$hidden_url = (empty($args['url'])) ? ' hidden' : '';
$hidden_auto = (empty($this->value['url'])) ? ' hidden' : '';
$placeholder = (empty($this->field['placeholder'])) ? ' placeholder="' . esc_html__('Not selected', 'csf') . '"' : '';
echo $this->field_before();
if (!empty($args['preview'])) {
$preview_width = (!empty($args['preview_width'])) ? 'max-width:' . esc_attr($args['preview_width']) . 'px;' : '';
$preview_height = (!empty($args['preview_height'])) ? 'max-height:' . esc_attr($args['preview_height']) . 'px;' : '';
$preview_style = (!empty($preview_width) || !empty($preview_height)) ? ' style="' . esc_attr($preview_width . $preview_height) . '"' : '';
echo '<div class="csf--preview' . esc_attr($hidden_auto) . '">';
echo '<div class="csf-image-preview"' . $preview_style . '>';
echo '<i class="csf--remove fas fa-times"></i><span><img src="' . esc_url($preview_src) . '" class="csf--src" /></span>';
echo '</div>';
echo '</div>';
}
echo '<div class="csf--placeholder">';
echo '<input type="text" name="' . esc_attr($this->field_name('[url]')) . '" value="' . esc_attr($this->value['url']) . '" class="csf--url' . esc_attr($hidden_url) . '" readonly="readonly"' . $this->field_attributes() . $placeholder . ' />';
echo '<a href="#" class="button button-primary csf--button" data-library="' . esc_attr($library) . '" data-preview-size="' . esc_attr($args['preview_size']) . '">' . $args['button_title'] . '</a>';
echo (empty($args['preview'])) ? '<a href="#" class="button button-secondary csf-warning-primary csf--remove' . esc_attr($hidden_auto) . '">' . $args['remove_title'] . '</a>' : '';
echo '</div>';
echo '<input type="hidden" name="' . esc_attr($this->field_name('[id]')) . '" value="' . esc_attr($this->value['id']) . '" class="csf--id"/>';
echo '<input type="hidden" name="' . esc_attr($this->field_name('[width]')) . '" value="' . esc_attr($this->value['width']) . '" class="csf--width"/>';
echo '<input type="hidden" name="' . esc_attr($this->field_name('[height]')) . '" value="' . esc_attr($this->value['height']) . '" class="csf--height"/>';
echo '<input type="hidden" name="' . esc_attr($this->field_name('[thumbnail]')) . '" value="' . esc_attr($this->value['thumbnail']) . '" class="csf--thumbnail"/>';
echo '<input type="hidden" name="' . esc_attr($this->field_name('[alt]')) . '" value="' . esc_attr($this->value['alt']) . '" class="csf--alt"/>';
echo '<input type="hidden" name="' . esc_attr($this->field_name('[title]')) . '" value="' . esc_attr($this->value['title']) . '" class="csf--title"/>';
echo '<input type="hidden" name="' . esc_attr($this->field_name('[description]')) . '" value="' . esc_attr($this->value['description']) . '" class="csf--description"/>';
echo $this->field_after();
}
}
}