395 lines
10 KiB
PHP
Executable File
395 lines
10 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* HTML elements
|
|
*
|
|
* A helper class for outputting common HTML elements, such as product drop downs
|
|
*
|
|
* @package Opalestate
|
|
* @subpackage Classes/HTML
|
|
* @copyright Copyright (c) 2015, Pippin Williamson
|
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
|
|
* @since 1.5
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Opalestate_HTML_Elements Class
|
|
*
|
|
* @since 1.5
|
|
*/
|
|
class Opalestate_HTML_Elements {
|
|
|
|
public $form_id = '';
|
|
|
|
/**
|
|
* Renders an ajax user search field
|
|
*
|
|
* @param array $args
|
|
* @return string text field with ajax search
|
|
* @since 2.0
|
|
*
|
|
*/
|
|
public function ajax_user_search( $args = [] ) {
|
|
|
|
$defaults = [
|
|
'id' => 'user_id',
|
|
'name' => 'user_id',
|
|
'value' => isset( $args['default'] ) ? $args['default'] : null,
|
|
'placeholder' => esc_html__( 'Enter username', 'opalestate-pro' ),
|
|
'label' => null,
|
|
'desc' => null,
|
|
'class' => '',
|
|
'disabled' => false,
|
|
'autocomplete' => 'off',
|
|
'data' => false,
|
|
];
|
|
|
|
$args = wp_parse_args( $args, $defaults );
|
|
|
|
$args['class'] = 'opalestate-ajax-user-search ' . $args['class'];
|
|
|
|
$output = '<span class="opalestate_user_search_wrap">';
|
|
$output .= $this->text_field( $args );
|
|
$output .= '<span class="opalestate_user_search_results hidden"><a class="opalestate-ajax-user-cancel" aria-label="' . esc_html__( 'Cancel',
|
|
'opalestate-pro' ) . '" href="#">x</a><span></span></span>';
|
|
$output .= '</span>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Text Field
|
|
*
|
|
* Renders an HTML Text field.
|
|
*
|
|
* @param array $args Arguments for the text field.
|
|
*
|
|
* @return string The text field.
|
|
* @since 1.0
|
|
* @access public
|
|
*
|
|
*/
|
|
public function text_field( $field_args, $args = [] ) {
|
|
$defaults = [
|
|
'id' => '',
|
|
'value' => isset( $field_args['default'] ) ? $field_args['default'] : null,
|
|
'name' => '',
|
|
'description' => null,
|
|
'placeholder' => '',
|
|
'class' => 'regular-text form-control',
|
|
'disabled' => false,
|
|
'autocomplete' => 'off',
|
|
'data' => false,
|
|
'default' => '',
|
|
'required' => false,
|
|
];
|
|
|
|
$args = wp_parse_args( $field_args, $defaults );
|
|
|
|
$disabled = '';
|
|
if ( $args['disabled'] ) {
|
|
$disabled = ' disabled="disabled"';
|
|
}
|
|
|
|
$data = '';
|
|
if ( ! empty( $args['data'] ) ) {
|
|
foreach ( $args['data'] as $key => $value ) {
|
|
$data .= 'data-' . $key . '="' . $value . '" ';
|
|
}
|
|
}
|
|
|
|
if ( $args['required'] ) {
|
|
$data .= ' required="required" ';
|
|
}
|
|
|
|
$output = '<span id="opalestate-' . sanitize_key( $this->form_id . $args['id'] ) . '-wrap">';
|
|
|
|
$output .= '<label class="opalestate-label" for="opalestate-' . sanitize_key( $this->form_id . $args['id'] ) . '">' . esc_html( $args['name'] ) . '</label>';
|
|
|
|
|
|
$output .= '<input type="text" name="' . esc_attr( $args['id'] ) . '" id="opalestate-' . esc_attr( $this->form_id . $args['id'] ) . '" autocomplete="' . esc_attr( $args['autocomplete'] ) . '" value="' . esc_attr( $args['value'] ) . '" placeholder="' . esc_attr( $args['placeholder'] ) . '" class="' . $args['class'] . '" ' . $data . '' . $disabled . '/>';
|
|
|
|
if ( ! empty( $args['description'] ) ) {
|
|
$output .= '<span class="opalestate-description">' . esc_html( $args['description'] ) . '</span>';
|
|
}
|
|
|
|
$output .= '</span>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Date Picker
|
|
*
|
|
* Renders a date picker field.
|
|
*
|
|
* @param array $args Arguments for the date picker.
|
|
*
|
|
* @return string The date picker.
|
|
* @since 1.5
|
|
* @access public
|
|
*
|
|
*/
|
|
public function date_field( $args = [] ) {
|
|
|
|
if ( empty( $args['class'] ) ) {
|
|
$args['class'] = 'opalestate-datepicker form-control';
|
|
} elseif ( ! strpos( $args['class'], 'opalestate-datepicker' ) ) {
|
|
$args['class'] .= ' opalestate-datepicker form-control';
|
|
}
|
|
|
|
return $this->text_field( $args );
|
|
}
|
|
|
|
/**
|
|
* Textarea
|
|
*
|
|
* Renders an HTML textarea.
|
|
*
|
|
* @param array $args Arguments for the textarea.
|
|
*
|
|
* @return string The textarea.
|
|
* @since 1.0
|
|
* @access public
|
|
*
|
|
*/
|
|
public function textarea_field( $args = [] ) {
|
|
$defaults = [
|
|
'name' => '',
|
|
'value' => isset( $args['default'] ) ? $args['default'] : null,
|
|
'label' => null,
|
|
'description' => null,
|
|
'class' => 'large-text',
|
|
'disabled' => false,
|
|
];
|
|
|
|
$args = wp_parse_args( $args, $defaults );
|
|
|
|
$disabled = '';
|
|
if ( $args['disabled'] ) {
|
|
$disabled = ' disabled="disabled"';
|
|
}
|
|
|
|
$output = '<span id="opalestate-' . sanitize_key( $this->form_id . $args['id'] ) . '-wrap">';
|
|
|
|
$output .= '<label class="opalestate-label" for="opalestate-' . sanitize_key( $this->form_id . $args['id'] ) . '">' . esc_html( $args['name'] ) . '</label>';
|
|
|
|
$data = '';
|
|
if ( $args['required'] ) {
|
|
$data .= ' required="required" ';
|
|
}
|
|
|
|
$output .= '<textarea name="' . esc_attr( $args['id'] ) . '" id="opalestate-' . esc_attr( $this->form_id . $args['id'] ) . '" class="' . $args['class'] . '"' . $disabled . ' ' . $data . ' >' . esc_attr( $args['value'] ) . '</textarea>';
|
|
|
|
if ( ! empty( $args['description'] ) ) {
|
|
$output .= '<span class="opalestate-description">' . esc_html( $args['description'] ) . '</span>';
|
|
}
|
|
|
|
$output .= '</span>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Dropdown
|
|
*
|
|
* Renders an HTML Dropdown.
|
|
*
|
|
* @param array $args Arguments for the dropdown.
|
|
*
|
|
* @return string The dropdown.
|
|
* @since 1.0
|
|
* @access public
|
|
*
|
|
*/
|
|
public function select_field( $field_args = [] ) {
|
|
$defaults = [
|
|
'options' => [],
|
|
'name' => null,
|
|
'class' => 'form-control',
|
|
'id' => '',
|
|
'autocomplete' => 'off',
|
|
'selected' => 0,
|
|
'chosen' => false,
|
|
'placeholder' => null,
|
|
'multiple' => false,
|
|
'select_atts' => false,
|
|
'show_option_all' => esc_html__( 'All', 'opalestate-pro' ),
|
|
'show_option_none' => esc_html__( 'None', 'opalestate-pro' ),
|
|
'data' => [],
|
|
'readonly' => false,
|
|
'disabled' => false,
|
|
'required' => '',
|
|
];
|
|
|
|
$args = wp_parse_args( $field_args, $defaults );
|
|
|
|
$data_elements = '';
|
|
foreach ( $args['data'] as $key => $value ) {
|
|
$data_elements .= ' data-' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
|
|
}
|
|
|
|
$multiple = '';
|
|
if ( $args['multiple'] ) {
|
|
$multiple = 'MULTIPLE';
|
|
}
|
|
|
|
if ( $args['chosen'] ) {
|
|
$args['class'] .= ' opalestate-select-chosen';
|
|
}
|
|
|
|
$placeholder = '';
|
|
if ( $args['placeholder'] ) {
|
|
$placeholder = $args['placeholder'];
|
|
}
|
|
|
|
$output = '<label class="opalestate-label" for="' . esc_attr( sanitize_key( str_replace( '-', '_', $this->form_id . $args['id'] ) ) ) . '">' . esc_html( $args['name'] ) . '</label>';
|
|
|
|
$data = '';
|
|
if ( $args['required'] ) {
|
|
$data .= ' required="required" ';
|
|
}
|
|
|
|
$output .= sprintf(
|
|
'<select ' . $data . ' name="%1$s" id="%2$s" autocomplete="%8$s" class="opalestate-select %3$s" %4$s %5$s data-placeholder="%6$s" %7$s>',
|
|
esc_attr( $args['id'] ),
|
|
esc_attr( sanitize_key( str_replace( '-', '_', $this->form_id . $args['id'] ) ) ),
|
|
esc_attr( $args['class'] ),
|
|
$multiple,
|
|
$args['select_atts'],
|
|
$placeholder,
|
|
$data_elements,
|
|
$args['autocomplete']
|
|
);
|
|
|
|
if ( $args['show_option_all'] ) {
|
|
if ( $args['multiple'] ) {
|
|
$selected = selected( true, in_array( 0, $args['selected'] ), false );
|
|
} else {
|
|
$selected = selected( $args['selected'], 0, false );
|
|
}
|
|
// $output .= '<option value="all"' . $selected . '>' . esc_html( $args['show_option_all'] ) . '</option>';
|
|
}
|
|
|
|
if ( ! empty( $args['options'] ) ) {
|
|
|
|
if ( $args['show_option_none'] ) {
|
|
if ( $args['multiple'] ) {
|
|
$selected = selected( true, in_array( -1, $args['selected'] ), false );
|
|
} else {
|
|
$selected = selected( $args['selected'], -1, false );
|
|
}
|
|
// $output .= '<option value="-1"' . $selected . '>' . esc_html( $args['show_option_none'] ) . '</option>';
|
|
}
|
|
|
|
foreach ( $args['options'] as $key => $option ) {
|
|
|
|
if ( $args['multiple'] && is_array( $args['selected'] ) ) {
|
|
$selected = selected( true, in_array( $key, $args['selected'] ), false );
|
|
} else {
|
|
$selected = selected( $args['selected'], $key, false );
|
|
}
|
|
|
|
$output .= '<option value="' . esc_attr( $key ) . '"' . $selected . '>' . esc_html( $option ) . '</option>';
|
|
}
|
|
}
|
|
|
|
$output .= '</select>';
|
|
|
|
return $output;
|
|
}
|
|
|
|
public function hidden_field( $args ) {
|
|
$defaults = [
|
|
'id' => '',
|
|
'value' => isset( $args['default'] ) ? $args['default'] : null,
|
|
'name' => '',
|
|
'description' => null,
|
|
'placeholder' => '',
|
|
'class' => 'regular-text form-control',
|
|
'disabled' => false,
|
|
'autocomplete' => 'off',
|
|
'data' => false,
|
|
'default' => '',
|
|
'required' => false,
|
|
];
|
|
$args = wp_parse_args( $args, $defaults );
|
|
|
|
$output = '<input type="hidden" name="' . esc_attr( $args['id'] ) . '" autocomplete="' . esc_attr( $args['autocomplete'] ) . '" value="' . esc_attr( $args['value'] ) . '" class="' . $args['class'] . '" />';
|
|
|
|
return $output;
|
|
}
|
|
|
|
public function render_field( $field ) {
|
|
switch ( $field['type'] ) {
|
|
case 'date':
|
|
|
|
return $this->date_field( $field );
|
|
|
|
break;
|
|
|
|
case 'text':
|
|
|
|
return $this->text_field( $field );
|
|
|
|
break;
|
|
case 'hidden':
|
|
|
|
return $this->hidden_field( $field );
|
|
|
|
break;
|
|
|
|
case 'textarea':
|
|
|
|
return $this->textarea_field( $field );
|
|
|
|
break;
|
|
case 'user':
|
|
|
|
return $this->ajax_user_search( $field );
|
|
|
|
break;
|
|
|
|
case 'select':
|
|
return $this->select_field( $field );
|
|
break;
|
|
default:
|
|
# code...
|
|
break;
|
|
}
|
|
}
|
|
|
|
public function render_form( $fields ) {
|
|
static $id_counter = 0;
|
|
if ( function_exists( 'wp_unique_id' ) ) {
|
|
$form_id = wp_unique_id( 'opalestate-form-' );
|
|
} else {
|
|
$form_id = 'opalestate-form-' . (string) ++$id_counter;
|
|
}
|
|
|
|
$output = '';
|
|
$this->form_id = $form_id;
|
|
foreach ( $fields as $field ) {
|
|
$wrap = '';
|
|
if ( isset( $field['before_row'] ) ) {
|
|
$wrap .= $field['before_row'];
|
|
}
|
|
$wrap .= '<div class="form-group">';
|
|
$wrap .= $this->render_field( $field );
|
|
$wrap .= '</div>';
|
|
|
|
if ( isset( $field['after_row'] ) ) {
|
|
$wrap .= $field['after_row'];
|
|
}
|
|
|
|
$output .= $wrap;
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
}
|