364 lines
11 KiB
PHP
364 lines
11 KiB
PHP
<?php
|
|
if ( ! defined( 'ABSPATH' ) ) exit;
|
|
|
|
class ACUI_HTML{
|
|
private static $instance;
|
|
var $settings;
|
|
|
|
function __construct(){
|
|
}
|
|
|
|
private static function is_instantiated() {
|
|
if ( ! empty( self::$instance ) && ( self::$instance instanceof ACUI_HTML ) ) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private static function setup_instance() {
|
|
self::$instance = new ACUI_HTML;
|
|
}
|
|
|
|
static function instance() {
|
|
if ( self::is_instantiated() ) {
|
|
return self::$instance;
|
|
}
|
|
|
|
self::setup_instance();
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
|
|
function sanitize_key( $key ) {
|
|
$raw_key = $key;
|
|
return preg_replace( '/[^a-zA-Z0-9_\-\.\:\/]/', '', $key );
|
|
}
|
|
|
|
function year_dropdown( $name = 'year', $selected = 0, $years_before = 5, $years_after = 0 ) {
|
|
$current = date( 'Y' );
|
|
$start_year = $current - absint( $years_before );
|
|
$end_year = $current + absint( $years_after );
|
|
$selected = empty( $selected ) ? date( 'Y' ) : $selected;
|
|
$options = array();
|
|
|
|
while ( $start_year <= $end_year ) {
|
|
$options[ absint( $start_year ) ] = $start_year;
|
|
$start_year++;
|
|
}
|
|
|
|
$output = $this->select( array(
|
|
'name' => $name,
|
|
'selected' => $selected,
|
|
'options' => $options,
|
|
'show_option_all' => false,
|
|
'show_option_none' => false
|
|
) );
|
|
|
|
return $output;
|
|
}
|
|
|
|
function month_dropdown( $name = 'month', $selected = 0 ) {
|
|
$month = 1;
|
|
$options = array();
|
|
$selected = empty( $selected ) ? date( 'n' ) : $selected;
|
|
|
|
while ( $month <= 12 ) {
|
|
$options[ absint( $month ) ] = edd_month_num_to_name( $month );
|
|
$month++;
|
|
}
|
|
|
|
$output = $this->select( array(
|
|
'name' => $name,
|
|
'selected' => $selected,
|
|
'options' => $options,
|
|
'show_option_all' => false,
|
|
'show_option_none' => false
|
|
) );
|
|
|
|
return $output;
|
|
}
|
|
|
|
function select( $args = array() ) {
|
|
$defaults = array(
|
|
'echo' => true,
|
|
'options' => array(),
|
|
'name' => null,
|
|
'class' => '',
|
|
'id' => '',
|
|
'selected' => array(),
|
|
'chosen' => false,
|
|
'placeholder' => null,
|
|
'multiple' => false,
|
|
'show_option_all' => _x( 'All', 'all dropdown items', 'import-users-from-csv-with-meta' ),
|
|
'show_option_none' => _x( 'None', 'no dropdown items', 'import-users-from-csv-with-meta' ),
|
|
'data' => array(),
|
|
'readonly' => false,
|
|
'disabled' => false,
|
|
'style' => ''
|
|
);
|
|
|
|
$args = wp_parse_args( $args, $defaults );
|
|
|
|
if( empty( $args['id'] ) )
|
|
$args['id'] = $args['name'];
|
|
|
|
$data_elements = '';
|
|
foreach ( $args['data'] as $key => $value ) {
|
|
$data_elements .= ' data-' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
|
|
}
|
|
|
|
if( $args['multiple'] ) {
|
|
$multiple = ' MULTIPLE';
|
|
} else {
|
|
$multiple = '';
|
|
}
|
|
|
|
if( $args['placeholder'] ) {
|
|
$placeholder = $args['placeholder'];
|
|
} else {
|
|
$placeholder = '';
|
|
}
|
|
|
|
if ( isset( $args['readonly'] ) && $args['readonly'] ) {
|
|
$readonly = ' readonly="readonly"';
|
|
} else {
|
|
$readonly = '';
|
|
}
|
|
|
|
if ( isset( $args['disabled'] ) && $args['disabled'] ) {
|
|
$disabled = ' disabled="disabled"';
|
|
} else {
|
|
$disabled = '';
|
|
}
|
|
|
|
$class = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $args['class'] ) ) );
|
|
|
|
if ( isset( $args['style'] ) && $args['style'] ) {
|
|
$style = ' style="' . safecss_filter_attr( $args['style'] ) . '"';
|
|
} else {
|
|
$style = '';
|
|
}
|
|
|
|
$output = '<select' . $disabled . $readonly . ' name="' . esc_attr( $args['name'] ) . '" id="' . esc_attr( $this->sanitize_key( $args['id'] ) ) . '" class="acui-select ' . $class . '"' . $multiple . ' data-placeholder="' . $placeholder . '"'. $data_elements . ' ' . $style . '>';
|
|
|
|
if ( ! isset( $args['selected'] ) || ( is_array( $args['selected'] ) && empty( $args['selected'] ) ) || ! $args['selected'] ) {
|
|
$selected = "";
|
|
}
|
|
|
|
if ( $args['show_option_all'] ) {
|
|
if ( $args['multiple'] && ! empty( $args['selected'] ) ) {
|
|
$selected = selected( true, in_array( 0, (array) $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( "", $args['selected'] ), false );
|
|
} elseif ( isset( $args['selected'] ) && ! is_array( $args['selected'] ) && ! empty( $args['selected'] ) ) {
|
|
$selected = selected( $args['selected'], "", false );
|
|
}
|
|
$output .= '<option value=""' . $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( (string) $key, $args['selected'] ), false );
|
|
} elseif ( isset( $args['selected'] ) && ! is_array( $args['selected'] ) ) {
|
|
$selected = selected( $args['selected'], $key, false );
|
|
}
|
|
|
|
$output .= '<option value="' . esc_attr( $key ) . '"' . $selected . '>' . esc_html( $option ) . '</option>';
|
|
}
|
|
}
|
|
|
|
$output .= '</select>';
|
|
|
|
if( $args['echo'] )
|
|
echo $output;
|
|
|
|
return $output;
|
|
}
|
|
|
|
function checkbox( $args = array() ) {
|
|
$defaults = array(
|
|
'label' => '',
|
|
'echo' => true,
|
|
'array' => false,
|
|
'compare_value' => 1,
|
|
'name' => null,
|
|
'current' => 1,
|
|
'class' => '',
|
|
'options' => array(
|
|
'disabled' => false,
|
|
'readonly' => false
|
|
),
|
|
'description' => '',
|
|
);
|
|
|
|
$args = wp_parse_args( $args, $defaults );
|
|
$output = '';
|
|
|
|
$class = 'acui-checkbox ' . implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $args['class'] ) ) );
|
|
$options = '';
|
|
if ( ! empty( $args['options']['disabled'] ) ) {
|
|
$options .= ' disabled="disabled"';
|
|
} elseif ( ! empty( $args['options']['readonly'] ) ) {
|
|
$options .= ' readonly';
|
|
}
|
|
|
|
if( !empty( $args['label'] ) ){
|
|
$output .= '<label class="' . $class . '"';
|
|
|
|
if( !$args['array'] )
|
|
$output .= ' for="' . esc_attr( $args['name'] ) . '"';
|
|
|
|
$output .= '>' . $args['label'];
|
|
}
|
|
|
|
if( $args['array'] )
|
|
$output .= '<input type="checkbox"' . $options . ' name="' . esc_attr( $args['name'] ) . '" class="' . $class . '" value="' . $args['current'] .'" ' . checked( in_array( $args['current'], $args['compare_value'] ), 1, false ) . ' />';
|
|
else
|
|
$output .= '<input type="checkbox"' . $options . ' name="' . esc_attr( $args['name'] ) . '" id="' . esc_attr( $args['name'] ) . '" class="' . $class . '" value="' . $args['current'] . '" ' . checked( $args['compare_value'], $args['current'], false ) . ' />';
|
|
|
|
if( !empty( $args['label'] ) )
|
|
$output .= '</label>';
|
|
|
|
if( !empty( $args['description'] ) )
|
|
$output .= '<div class="description">' . $args['description'] . '</div>';
|
|
|
|
if( $args['echo'] )
|
|
echo $output;
|
|
|
|
return $output;
|
|
}
|
|
|
|
function text( $args = array() ) {
|
|
$defaults = array(
|
|
'echo' => true,
|
|
'id' => '',
|
|
'name' => isset( $name ) ? $name : 'text',
|
|
'value' => isset( $value ) ? $value : null,
|
|
'label' => isset( $label ) ? $label : null,
|
|
'desc' => isset( $desc ) ? $desc : null,
|
|
'placeholder' => '',
|
|
'class' => 'regular-text',
|
|
'disabled' => false,
|
|
'autocomplete' => '',
|
|
'data' => false,
|
|
'type' => 'text',
|
|
'readonly' => false,
|
|
'required' => false,
|
|
'attributes' => array()
|
|
);
|
|
|
|
$args = wp_parse_args( $args, $defaults );
|
|
|
|
if( empty( $args['id'] ) )
|
|
$args['id'] = $args['name'];
|
|
|
|
if ( isset( $args['readonly'] ) && $args['readonly'] ) {
|
|
$readonly = ' readonly="readonly"';
|
|
} else {
|
|
$readonly = '';
|
|
}
|
|
|
|
if ( isset( $args['required'] ) && $args['required'] ) {
|
|
$required = ' required="required"';
|
|
} else {
|
|
$required = '';
|
|
}
|
|
|
|
$class = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $args['class'] ) ) );
|
|
$disabled = '';
|
|
if( $args['disabled'] ) {
|
|
$disabled = ' disabled="disabled"';
|
|
}
|
|
|
|
$data = '';
|
|
if ( ! empty( $args['data'] ) ) {
|
|
foreach ( $args['data'] as $key => $value ) {
|
|
$data .= 'data-' . $this->sanitize_key( $key ) . '="' . esc_attr( $value ) . '" ';
|
|
}
|
|
}
|
|
|
|
$output = '<span id="acui-' . $this->sanitize_key( $args['name'] ) . '-wrap">';
|
|
if ( ! empty( $args['label'] ) ) {
|
|
$output .= '<label class="acui-label" for="' . $this->sanitize_key( $args['id'] ) . '">' . esc_html( $args['label'] ) . '</label>';
|
|
}
|
|
|
|
if ( ! empty( $args['desc'] ) ) {
|
|
$output .= '<span class="acui-description">' . esc_html( $args['desc'] ) . '</span>';
|
|
}
|
|
|
|
$output .= '<input type="' . esc_attr( $args['type'] ) . '" name="' . esc_attr( $args['name'] ) . '" id="' . esc_attr( $args['id'] ) . '" autocomplete="' . esc_attr( $args['autocomplete'] ) . '" value="' . esc_attr( $args['value'] ) . '" placeholder="' . esc_attr( $args['placeholder'] ) . '" class="' . $class . '" ' . $data . '' . $disabled . '' . $readonly . '' . $required;
|
|
|
|
foreach( $args['attributes'] as $key => $value ){
|
|
$output .= ' ' . $key . '="' . $value . '"';
|
|
}
|
|
|
|
$output .= '/>';
|
|
|
|
$output .= '</span>';
|
|
|
|
if( $args['echo'] )
|
|
echo $output;
|
|
|
|
return $output;
|
|
}
|
|
|
|
function textarea( $args = array() ) {
|
|
$defaults = array(
|
|
'echo' => true,
|
|
'name' => 'textarea',
|
|
'value' => null,
|
|
'label' => null,
|
|
'desc' => null,
|
|
'class' => 'large-text',
|
|
'disabled' => false,
|
|
'style' => '',
|
|
);
|
|
|
|
$args = wp_parse_args( $args, $defaults );
|
|
|
|
$class = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $args['class'] ) ) );
|
|
$disabled = '';
|
|
if( $args['disabled'] ) {
|
|
$disabled = ' disabled="disabled"';
|
|
}
|
|
|
|
if ( isset( $args['style'] ) && $args['style'] ) {
|
|
$style = ' style="' . safecss_filter_attr( $args['style'] ) . '"';
|
|
} else {
|
|
$style = '';
|
|
}
|
|
|
|
$output = '<span id="acui-' . $this->sanitize_key( $args['name'] ) . '-wrap">';
|
|
|
|
if ( ! empty( $args['label'] ) ) {
|
|
$output .= '<label class="acui-label" for="' . $this->sanitize_key( $args['name'] ) . '">' . esc_html( $args['label'] ) . '</label>';
|
|
}
|
|
|
|
$output .= '<textarea name="' . esc_attr( $args['name'] ) . '" id="' . $this->sanitize_key( $args['name'] ) . '" class="' . $class . '"' . $disabled . ' ' . $style . '>' . esc_attr( $args['value'] ) . '</textarea>';
|
|
|
|
if ( ! empty( $args['desc'] ) ) {
|
|
$output .= '<span class="acui-description">' . esc_html( $args['desc'] ) . '</span>';
|
|
}
|
|
|
|
$output .= '</span>';
|
|
|
|
if( $args['echo'] )
|
|
echo $output;
|
|
|
|
return $output;
|
|
}
|
|
}
|
|
|
|
function ACUIHTML(){
|
|
return ACUI_HTML::instance();
|
|
} |