mirror of https://github.com/vtrois/kratos
130 lines
4.8 KiB
PHP
130 lines
4.8 KiB
PHP
<?php if (!defined('ABSPATH')) {
|
|
die;
|
|
}
|
|
/**
|
|
*
|
|
* Field: select
|
|
*
|
|
* @since 1.0.0
|
|
* @version 1.0.0
|
|
*
|
|
*/
|
|
if (!class_exists('CSF_Field_select')) {
|
|
class CSF_Field_select 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(
|
|
'placeholder' => '',
|
|
'chosen' => false,
|
|
'multiple' => false,
|
|
'sortable' => false,
|
|
'ajax' => false,
|
|
'settings' => array(),
|
|
'query_args' => array(),
|
|
));
|
|
|
|
$this->value = (is_array($this->value)) ? $this->value : array_filter((array) $this->value);
|
|
|
|
echo $this->field_before();
|
|
|
|
if (isset($this->field['options'])) {
|
|
|
|
if (!empty($args['ajax'])) {
|
|
$args['settings']['data']['type'] = $args['options'];
|
|
$args['settings']['data']['nonce'] = wp_create_nonce('csf_chosen_ajax_nonce');
|
|
if (!empty($args['query_args'])) {
|
|
$args['settings']['data']['query_args'] = $args['query_args'];
|
|
}
|
|
}
|
|
|
|
$chosen_rtl = (is_rtl()) ? ' chosen-rtl' : '';
|
|
$multiple_name = ($args['multiple']) ? '[]' : '';
|
|
$multiple_attr = ($args['multiple']) ? ' multiple="multiple"' : '';
|
|
$chosen_sortable = ($args['chosen'] && $args['sortable']) ? ' csf-chosen-sortable' : '';
|
|
$chosen_ajax = ($args['chosen'] && $args['ajax']) ? ' csf-chosen-ajax' : '';
|
|
$placeholder_attr = ($args['chosen'] && $args['placeholder']) ? ' data-placeholder="' . esc_attr($args['placeholder']) . '"' : '';
|
|
$field_class = ($args['chosen']) ? ' class="csf-chosen' . esc_attr($chosen_rtl . $chosen_sortable . $chosen_ajax) . '"' : '';
|
|
$field_name = $this->field_name($multiple_name);
|
|
$field_attr = $this->field_attributes();
|
|
$maybe_options = $this->field['options'];
|
|
$chosen_data_attr = ($args['chosen'] && !empty($args['settings'])) ? ' data-chosen-settings="' . esc_attr(json_encode($args['settings'])) . '"' : '';
|
|
|
|
if (is_string($maybe_options) && !empty($args['chosen']) && !empty($args['ajax'])) {
|
|
$options = $this->field_wp_query_data_title($maybe_options, $this->value);
|
|
} else if (is_string($maybe_options)) {
|
|
$options = $this->field_data($maybe_options, false, $args['query_args']);
|
|
} else {
|
|
$options = $maybe_options;
|
|
}
|
|
|
|
if ((is_array($options) && !empty($options)) || (!empty($args['chosen']) && !empty($args['ajax']))) {
|
|
|
|
if (!empty($args['chosen']) && !empty($args['multiple'])) {
|
|
|
|
echo '<select name="' . $field_name . '" class="csf-hide-select hidden"' . $multiple_attr . $field_attr . '>';
|
|
foreach ($this->value as $option_key) {
|
|
echo '<option value="' . esc_attr($option_key) . '" selected>' . esc_attr($option_key) . '</option>';
|
|
}
|
|
echo '</select>';
|
|
|
|
$field_name = '_pseudo';
|
|
$field_attr = '';
|
|
}
|
|
|
|
// These attributes has been serialized above.
|
|
echo '<select name="' . esc_attr($field_name) . '"' . $field_class . $multiple_attr . $placeholder_attr . $field_attr . $chosen_data_attr . '>';
|
|
|
|
if ($args['placeholder'] && empty($args['multiple'])) {
|
|
if (!empty($args['chosen'])) {
|
|
echo '<option value=""></option>';
|
|
} else {
|
|
echo '<option value="">' . esc_attr($args['placeholder']) . '</option>';
|
|
}
|
|
}
|
|
|
|
foreach ($options as $option_key => $option) {
|
|
|
|
if (is_array($option) && !empty($option)) {
|
|
|
|
echo '<optgroup label="' . esc_attr($option_key) . '">';
|
|
|
|
foreach ($option as $sub_key => $sub_value) {
|
|
$selected = (in_array($sub_key, $this->value)) ? ' selected' : '';
|
|
echo '<option value="' . esc_attr($sub_key) . '" ' . esc_attr($selected) . '>' . esc_attr($sub_value) . '</option>';
|
|
}
|
|
|
|
echo '</optgroup>';
|
|
} else {
|
|
$selected = (in_array($option_key, $this->value)) ? ' selected' : '';
|
|
echo '<option value="' . esc_attr($option_key) . '" ' . esc_attr($selected) . '>' . esc_attr($option) . '</option>';
|
|
}
|
|
}
|
|
|
|
echo '</select>';
|
|
} else {
|
|
|
|
echo (!empty($this->field['empty_message'])) ? esc_attr($this->field['empty_message']) : esc_html__('No data available.', 'csf');
|
|
}
|
|
}
|
|
|
|
echo $this->field_after();
|
|
}
|
|
|
|
public function enqueue()
|
|
{
|
|
|
|
if (!wp_script_is('jquery-ui-sortable')) {
|
|
wp_enqueue_script('jquery-ui-sortable');
|
|
}
|
|
}
|
|
}
|
|
}
|