geno/wp-content/plugins/ti-woocommerce-wishlist/includes/form.helper.php
2024-02-01 11:54:18 +00:00

1321 lines
35 KiB
PHP

<?php
/**
* Form plugin class
*
* @since 1.0.0
* @package TInvWishlist\Helper
*/
// If this file is called directly, abort.
if (!defined('ABSPATH')) {
die;
}
/**
* Form plugin class
*/
class TInvWL_Form
{
/**
* Prefix for id elements
*
* @var string
*/
static $_name;
/**
* Form value for elements
*
* @var array
*/
static $value = array();
/**
* Form option for elements
*
* @var array
*/
static $option = array();
/**
* Set Plugin name
*
* @param string $plugin_name Plugin name.
*/
public static function _init($plugin_name = TINVWL_PREFIX)
{
self::$_name = $plugin_name;
}
/**
* Call method for returm or output
*
* @param string $name Name function.
* @param array $arg Parameter function.
*
* @return mixed
*/
public function __call($name, $arg)
{
$_arg = array(
0 => null,
1 => null,
2 => null,
3 => null,
);
foreach (array_keys($_arg) as $key) {
$_arg[$key] = array_shift($arg);
}
$arg = $_arg;
$glue = '_';
$method = sprintf('%s%s', $glue, $name);
if (false === strpos($name, $glue)) {
if (method_exists(__CLASS__, $method)) {
$data = call_user_func(array(__CLASS__, $method), $arg[0], $arg[1], $arg[2], $arg[3]);
echo $data; // WPCS: xss ok.
}
} else {
if (method_exists(__CLASS__, $name)) {
return call_user_func(array(__CLASS__, $name), $arg[0], $arg[1], $arg[2], $arg[3]);
}
}
return '';
}
/**
* Call method for returm or output
*
* @param string $name Name function.
* @param array $arg Parameter function.
*
* @return mixed
*/
public static function __callStatic($name, $arg)
{
if (empty(self::$_name)) {
self::$_name = TINVWL_PREFIX;
}
$_arg = array(
0 => null,
1 => null,
2 => null,
3 => null,
);
foreach (array_keys($_arg) as $key) {
$_arg[$key] = array_shift($arg);
}
$arg = $_arg;
$glue = '_';
$method = sprintf('%s%s', $glue, $name);
if (false === strpos($name, $glue)) {
if (method_exists(__CLASS__, $method)) {
$data = call_user_func(array(__CLASS__, $method), $arg[0], $arg[1], $arg[2], $arg[3]);
echo $data; // WPCS: xss ok.
}
} else {
if (method_exists(__CLASS__, $name)) {
return call_user_func(array(__CLASS__, $name), $arg[0], $arg[1], $arg[2], $arg[3]);
}
}
return '';
}
/**
* Create input html element
*
* @param mixed $data Name field or array attributes.
* @param string $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _text($data, $value = '', $extra = '')
{
$load = true;
if (is_array($extra)) {
if (isset($extra['load'])) {
$load = (bool)$extra['load'];
unset($extra['load']);
}
}
if ($load) {
$value = esc_attr(self::getvalue((is_array($data) ? @$data['name'] : $data), $value)); // @codingStandardsIgnoreLine Generic.PHP.NoSilencedErrors.Discouraged
}
$defaults = array(
'type' => is_array($data) ? @$data['type'] : 'text',
'name' => is_array($data) ? @$data['name'] : $data,
'value' => $value,
);
return sprintf('<input %s%s />', self::__parseatr($data, $defaults), self::__atrtostr($extra));
}
/**
* Create input html element with type number
*
* @param mixed $data Name field or array attributes.
* @param integer|float $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _number($data, $value = 0, $extra = '')
{
$class = sprintf(' %s-form-number', self::$_name);
if (is_array($extra)) {
if (isset($extra['class'])) {
$extra['class'] .= $class;
} else {
$extra['class'] = $class;
}
} else {
$extra .= sprintf(' class="%s" ', $class);
}
if (!is_array($data)) {
$data = array('name' => $data);
}
$data['type'] = 'number';
return self::_text($data, $value, $extra);
}
/**
* Create color picker
*
* @param mixed $data Name field or array attributes.
* @param string $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
* @see colorpicker
*
*/
public static function _color($data = '', $value = '', $extra = '')
{
$class = sprintf(' %s-form-color', self::$_name);
$load = true;
if (is_array($extra)) {
if (isset($extra['class'])) {
$extra['class'] .= $class;
} else {
$extra['class'] = $class;
}
if (isset($extra['load'])) {
$load = (bool)$extra['load'];
unset($extra['load']);
}
} else {
$extra .= sprintf(' class="%s" ', $class);
}
if ($load) {
$value = self::getvalue((is_array($data) ? @$data['name'] : $data), $value); // @codingStandardsIgnoreLine Generic.PHP.NoSilencedErrors.Discouraged
}
$defaults = array(
'type' => 'text',
'name' => is_array($data) ? '' : $data,
'value' => $value,
);
return sprintf('<div class="tinvwl-color-picker"><div class="tinvwl-input-group tinvwl-no-full"><input %s%s /><div class="tinvwl-input-group-btn"><div class="tinvwl-eyedropper"><a href="javascript:void(0);"><i class="ftinvwl ftinvwl-eyedropper"></i></a></div></div></div></div>', self::__parseatr($data, $defaults), self::__atrtostr($extra));
}
/**
* Create date input
*
* @param mixed $data Name field or array attributes.
* @param string $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
* @see jquery-ui-datepicker
*
*/
public static function _date($data = '', $value = '', $extra = '')
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$extra_js = '';
$value = self::getvalue($data['name'], $value);
$class = sprintf(' %s-date', self::$_name);
if (is_array($extra)) {
if (isset($extra['class'])) {
$extra['class'] .= $class;
} else {
$extra['class'] = $class;
}
} else {
$extra .= sprintf(' class="%s" ', $class);
}
if (is_array($extra)) {
if (isset($extra['date'])) {
$extra_js = $extra['date'];
unset($extra['date']);
}
}
$data['id'] = self::__createid($data['name']);
return sprintf("%s<script type=\"text/javascript\">jQuery(document).ready(function($){ $('#%s').datepicker({%s})});</script>", self::_text($data, $value, $extra), $data['id'], self::__atrtostrjs($extra_js));
}
/**
* Create select html element with time period
*
* @param mixed $data Name field or array attributes.
* @param int $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _time($data = '', $value = '', $extra = '')
{
$class = sprintf(' %s-time', self::$_name);
if (is_array($extra)) {
if (isset($extra['class'])) {
$extra['class'] .= $class;
} else {
$extra['class'] = $class;
}
} else {
$extra .= sprintf(' class="%s"', $class);
}
$options = array();
for ($i = 0; $i < 24; $i++) {
$options[$i] = sprintf('%02d:00', $i);
}
return self::_select($data, intval($value), $extra, $options);
}
/**
* Create textarea html element
*
* @param mixed $data Name field or array attributes.
* @param string $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _textarea($data = '', $value = '', $extra = '')
{
$value = self::getvalue((is_array($data) ? @$data['name'] : $data), $value); // @codingStandardsIgnoreLine Generic.PHP.NoSilencedErrors.Discouraged
$defaults = array(
'name' => is_array($data) ? '' : $data,
'cols' => '40',
'rows' => '20',
);
return sprintf('<textarea %s%s>%s</textarea>', self::__parseatr($data, $defaults), self::__atrtostr($extra), esc_textarea($value));
}
/**
* Output wysiwyg editor
*
* @param mixed $data Name field or array attributes.
* @param string $value Value.
* @param array $extra Styling or Custom variable.
*/
public static function editor($data = '', $value = '', $extra = array())
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$value = self::getvalue($data['name'], $value);
$data['id'] = self::__createid($data['name']);
$extra['textarea_name'] = $data['name'];
wp_editor($value, $data['id'], $extra);
}
/**
* Create input html element with type checkbox
*
* @param mixed $data Name field or array attributes.
* @param boolean $checked Value.
* @param mixed $extra Styling or Custom variable.
* @param string $value Value for form.
*
* @return string
*/
public static function _checkbox($data = '', $checked = false, $extra = '', $value = '')
{
$load = true;
if (is_array($extra)) {
if (isset($extra['load'])) {
$load = (bool)$extra['load'];
unset($extra['load']);
}
}
if ($load) {
$checked = self::getvalue((is_array($data) ? @$data['name'] : $data), $checked); // @codingStandardsIgnoreLine Generic.PHP.NoSilencedErrors.Discouraged
$value = self::getoption((is_array($data) ? @$data['name'] : $data), $value); // @codingStandardsIgnoreLine Generic.PHP.NoSilencedErrors.Discouraged
}
if (is_array($value)) {
$value = array_shift($value);
}
if (!is_bool($checked)) {
$checked = ($checked == $value) ? true : false; // WPCS: loose comparison ok.
}
$defaults = array(
'type' => 'checkbox',
'name' => (!is_array($data) ? $data : ''),
'value' => esc_html($value),
);
if (is_array($data) && array_key_exists('checked', $data)) {
$checked = $data['checked'];
if (false == $checked) { // WPCS: loose comparison ok.
unset($data['checked']);
} else {
$data['checked'] = 'checked';
}
}
if (true == $checked) { // WPCS: loose comparison ok.
$defaults['checked'] = 'checked';
} else {
unset($defaults['checked']);
}
return sprintf('<input %s%s />', self::__parseatr($data, $defaults), self::__atrtostr($extra));
}
/**
* Create input html element with type radio
*
* @param mixed $data Name field or array attributes.
* @param boolean $checked Value.
* @param mixed $extra Styling or Custom variable.
* @param string $value Value for form.
*
* @return string
*/
public static function _radio($data = '', $checked = false, $extra = '', $value = '')
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$data['type'] = 'radio';
return self::_checkbox($data, $checked, $extra, $value);
}
/**
* Create select html element
*
* @param mixed $data Name field or array attributes.
* @param mixed $value Value.
* @param mixed $extra Styling or Custom variable.
* @param array $options Options for form.
*
* @return string
*/
public static function _select($data = '', $value = array(), $extra = '', $options = array())
{
$defaults = array();
if (!is_array($data)) {
$data = array('name' => $data);
$defaults = array('name' => $data);
}
$load = true;
if (is_array($extra)) {
if (isset($extra['load'])) {
$load = (bool)$extra['load'];
unset($extra['load']);
}
}
if ($load) {
$value = self::getvalue($data['name'], $value);
}
$options = self::getoption($data['name'], $options);
if (!is_array($value)) {
$value = array($value);
}
if (!is_array($options)) {
$options = array($options);
}
$extra = self::__atrtostr($extra);
$multiple = (count($value) > 1 && false === stripos($extra, 'multiple')) ? ' multiple="multiple"' : '';
if ($multiple || strpos($extra, 'multiple') > -1) {
$data['name'] = $data['name'] . '[]';
}
$form = '';
foreach ($options as $key => $val) {
$key = (string)$key;
if (is_array($val)) {
if (empty($val)) {
continue;
}
$opt = '';
foreach ($val as $opt_key => $opt_val) {
$sel = in_array($opt_key, $value) ? ' selected="selected"' : ''; // @codingStandardsIgnoreLine WordPress.PHP.StrictInArray.MissingTrueStrict
$opt .= sprintf('<option value="%s"%s>%s</option>', esc_attr($opt_key), $sel, esc_html($opt_val));
}
$form .= sprintf('<optgroup label="%s" >%s</optgroup>', esc_attr($key), esc_html($opt));
} else {
$sel = in_array($key, $value) ? ' selected="selected"' : ''; // @codingStandardsIgnoreLine WordPress.PHP.StrictInArray.MissingTrueStrict
$form .= sprintf('<option value="%s"%s>%s</option>', esc_attr($key), $sel, esc_html($val));
}
}
return sprintf('<select %s %s%s>%s</select>', rtrim(self::__parseatr($data, $defaults)), $extra, $multiple, $form);
}
/**
* Create select html element
*
* @param mixed $data Name field or array attributes.
* @param string $value Value.
* @param mixed $extra Styling or Custom variable.
* @param array $options Options for form.
*
* @return string
*/
public static function _previewselect($data = '', $value = '', $extra = '', $options = array())
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$class = sprintf(' %s-form-preview-select', self::$_name);
$extra_select = array('class' => 'form-control');
$extra_button = array();
$extra_url = '';
$load = true;
if (is_array($extra)) {
if (isset($extra['load'])) {
$load = (bool)$extra['load'];
unset($extra['load']);
}
}
if ($load) {
$value = self::getvalue($data['name'], $value);
}
if (is_array($extra)) {
if (isset($extra['select'])) {
$extra_select = $extra['select'];
unset($extra['select']);
}
if (isset($extra['button'])) {
$extra_button = $extra['button'];
unset($extra['button']);
}
if (isset($extra['url'])) {
$extra_url = (string)$extra['url'];
unset($extra['url']);
}
} else {
$extra_select = $extra_button = $extra;
}
$extra_url = str_replace('%25', '%', $extra_url);
if (is_array($extra_select)) {
$extra_select['onchange'] = 'jQuery(this).next().find(\'.tinvwl-btn\').attr(\'href\', \'' . esc_attr($extra_url) . '\'.replace(/\%s/i, jQuery(this).val().trim()));';
} else {
$extra_select .= ' onchange="jQuery(this).next().find(\'.tinvwl-btn\').attr(\'href\', \'' . esc_attr($extra_url) . '\'.replace(/\%s/i, jQuery(this).val().trim()));"';
}
if (is_array($extra_button)) {
$extra_button['class'] = 'tinvwl-btn smaller';
$extra_button['href'] = sprintf($extra_url, $value);
} else {
$extra_button .= ' class="tinvwl-btn smaller" href="' . sprintf($extra_url, $value);
}
return sprintf('<div class="tinvwl-input-group %s">%s<div class="tinvwl-input-group-btn">%s</div></div>', $class, self::_select($data, $value, $extra_select, $options), self::_button($data, __('Preview', 'ti-woocommerce-wishlist'), $extra_button));
}
/**
* Create upload file elements
*
* @param string $data Name field or array attributes.
* @param string $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _uploadfile($data = '', $value = '', $extra = '')
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$value = self::getvalue($data['name'], $value);
$extra_field = '';
$extra_button = '';
$value_button = '';
$mimefiles = '';
if (is_array($extra)) {
if (isset($extra['type'])) {
$mimefiles = $extra['type'];
unset($extra['type']);
}
if (isset($extra['field'])) {
if (is_array($extra['field'])) {
$extra_field = $extra['field'];
}
unset($extra['field']);
}
if (isset($extra['button'])) {
$extra_button = $extra['button'];
unset($extra['button']);
}
if (is_array($extra_field)) {
foreach ($extra as $key => $val) {
$extra_field[$key] = $val;
}
} else {
$extra_field .= self::__atrtostr($extra);
}
if (is_array($extra_button)) {
if (isset($extra_button['value'])) {
$value_button = $extra_button['value'];
unset($extra_button['value']);
} elseif (isset($extra_button['name'])) {
$value_button = $extra_button['name'];
unset($extra_button['name']);
}
foreach ($extra as $key => $val) {
$extra_button[$key] = $val;
}
} else {
$extra_button .= self::__atrtostr($extra);
}
} else {
$extra_button = $extra_field = $extra;
} // End if().
if (!is_array($mimefiles)) {
$mimefiles = array($mimefiles);
}
$mimefiles = array_filter($mimefiles);
$mimefiles = wp_json_encode($mimefiles);
$data['type'] = 'text';
wp_enqueue_media();
return sprintf("<div class='tinvwl-input-group'>%s%s<div class='tinvwl-input-group-btn'>%s</div></div><script type=\"text/javascript\">jQuery(document).ready(function($){var nn='%s';" . (empty($value) ? "$('.' + nn + '-preview').hide();" : "") . "$('input[name=\"'+nn+'-btn\"]').click(function(e){e.preventDefault();var i=wp.media({multiple:false, library:{type:{$mimefiles}}}).open().on('select',function(e){var u=i.state().get('selection').first();var iu=u.toJSON().url;$('input[name=\"'+nn+'\"]').val(iu);$('.' + nn + '-preview').show();$('.' + nn + '-preview span img').attr('src', iu);});});});</script>", // @codingStandardsIgnoreLine Squiz.Strings.DoubleQuoteUsage.NotRequired
'<div class="' . $data['name'] . '-preview tinvwl-input-group-btn"><div class="tinvwl-icon-preview"><span><img src="' . $value . '" /></span></div></div>', self::_text($data, $value, $extra_field), self::_text(array(
'name' => $data['name'] . '-btn',
'type' => 'button',
'class' => 'tinvwl-btn white smaller',
), $value_button, $extra_button),
$data['name']
);
}
/**
* Create select html element with attribute multiple
*
* @param mixed $data Name field or array attributes.
* @param mixed $value Value.
* @param mixed $extra Styling or Custom variable.
* @param array $options Options for form.
*
* @return string
*/
public static function _multiselect($data = '', $value = array(), $extra = '', $options = array())
{
$extra = self::__atrtostr($extra);
if (stripos($extra, 'multiple') === false) {
$extra .= ' multiple="multiple"';
}
return self::_select($data, $value, $extra, $options);
}
/**
* Create group input html element with type checkbox
*
* @param mixed $data Name field or array attributes.
* @param mixed $value Value.
* @param mixed $extra Styling or Custom variable.
* @param array $options Options for form.
*
* @return string
*/
public static function _multicheckbox($data = '', $value = array(), $extra = '', $options = array())
{
$class = sprintf(' %s-multicheckbox', self::$_name);
if (is_array($extra)) {
if (isset($extra['class'])) {
$extra['class'] .= $class;
} else {
$extra['class'] = $class;
}
} else {
$extra .= sprintf(' class="%s" ', $class);
}
if (!is_array($data)) {
$data = array('name' => $data);
}
$value = self::getvalue($data['name'], $value);
$options = self::getoption($data['name'], $options);
if (!is_array($value)) {
$value = array($value);
}
$value = array_filter($value);
if (!is_array($options)) {
$options = array($options);
}
$before = '';
$after = '';
if (is_array($extra)) {
if (isset($extra['before'])) {
$before = sprintf('<div class="%s-before">%s</div>', self::$_name, $extra['before']);
unset($extra['before']);
}
if (isset($extra['after'])) {
$after = sprintf('<div class="%s-after">%s</div>', self::$_name, $extra['after']);
unset($extra['after']);
}
}
$i = 0;
$name = $data['name'];
foreach ($options as $key => $_data) {
$data['name'] = $name . '[' . $i . ']';
$i++;
$data['id'] = self::__createid($data['name'] . $key);
$_form = self::_checkbox($data, in_array($key, $value), array('load' => false), esc_html($key)); // @codingStandardsIgnoreLine WordPress.PHP.StrictInArray.MissingTrueStrict
$options [$key] = self::_label($data['id'], $_data, array(
'before' => $_form,
));
}
$glue = '</li><li>';
return sprintf('<div %s >%s<ul class="list"><li>%s</li></ul>%s</div>', self::__atrtostr($extra), $before, implode($glue, $options), $after);
}
/**
* Create group input html element with type radio
*
* @param mixed $data Name field or array attributes.
* @param mixed $value Value.
* @param mixed $extra Styling or Custom variable.
* @param array $options Options for form.
*
* @return string
*/
public static function _multiradio($data = '', $value = '', $extra = '', $options = array())
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$value = self::getvalue($data['name'], $value);
$options = self::getoption($data['name'], $options);
if (!is_array($value)) {
$value = array($value);
}
if (!is_array($options)) {
$options = array($options);
}
$separator = ' ';
if (is_array($extra)) {
if (isset($extra['separator'])) {
$separator = $extra['separator'];
unset($extra['separator']);
}
$extra['load'] = false;
} else {
$extra = array('load' => false);
}
$form = '';
foreach ($options as $key => $_data) {
$data['id'] = self::__createid($data['name'] . $key);
$_form = self::_radio($data, in_array($key, $value), $extra, esc_html($key)); // @codingStandardsIgnoreLine WordPress.PHP.StrictInArray.MissingTrueStrict
$form .= self::_label($data['id'], $_data, array(
'before' => $_form,
));
$form .= $separator;
}
return $form;
}
/**
* Create group select html element with time period
*
* @param mixed $data Name field or array attributes.
* @param array $value Value.
* @param array $extra Styling or Custom variable.
*
* @return string
*/
public static function _timeperiod($data = '', $value = array(), $extra = array())
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$label = array('', '');
$label_extra = array('', '');
$value = (array)self::getvalue($data['name'], $value);
$separator = ' ';
if (is_array($extra)) {
if (isset($extra['separator'])) {
$separator = $extra['separator'];
unset($extra['separator']);
}
if (isset($extra['label'])) {
$label_extra = $extra['label'];
unset($extra['label']);
for ($i = 0; $i < count($label); $i++) { // @codingStandardsIgnoreLine Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
if (isset($label_extra[$i]['text'])) {
$label[$i] = $label_extra[$i]['text'];
unset($label_extra[$i]['text']);
}
}
}
$extra['load'] = false;
} else {
$extra = array('load' => false);
}
$form = array();
for ($i = 0; $i < count($label); $i++) { // @codingStandardsIgnoreLine Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
$_data = $data;
$_data['name'] .= "[$i]";
$label_extra[$i]['after'] = self::_time($_data, (isset($value[$i]) ? $value[$i] : ''), $extra);
$form[] = self::_label($_data['name'], $label[$i], $label_extra[$i]);
}
$form = sprintf('<div class="%s-timeperiod">%s</div>', self::$_name, implode($separator, $form));
return $form;
}
/**
* Create group input html element with date period
*
* @param mixed $data Name field or array attributes.
* @param array $value Value.
* @param array $extra Styling or Custom variable.
*
* @return string
*/
public static function _dateperiod($data = '', $value = array(), $extra = array())
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$label = array('', '');
$label_extra = array('', '');
$value = (array)self::getvalue($data['name'], $value);
$separator = ' ';
if (is_array($extra)) {
if (isset($extra['separator'])) {
$separator = $extra['separator'];
unset($extra['separator']);
}
if (isset($extra['label'])) {
$label_extra = $extra['label'];
unset($extra['label']);
for ($i = 0; $i < count($label); $i++) { // @codingStandardsIgnoreLine Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
if (isset($label_extra[$i]['text'])) {
$label[$i] = $label_extra[$i]['text'];
unset($label_extra[$i]['text']);
}
}
}
$extra['load'] = false;
} else {
$extra = array('load' => false);
}
$form = array();
for ($i = 0; $i < count($label); $i++) { // @codingStandardsIgnoreLine Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
$_data = $data;
$_data['name'] .= "[$i]";
$_data['id'] = self::__createid($data['name'] . '[' . ($i ? 0 : 1) . ']');
$extra['date']['onClose'] = sprintf("function(selectedDate){ $('#%s').datepicker('option','%sDate',selectedDate);}", $_data['id'], ($i ? 'max' : 'min'));
$label_extra[$i]['after'] = self::_date($_data, (isset($value[$i]) ? $value[$i] : ''), $extra);
$form[] = self::_label($_data['name'], $label[$i], $label_extra[$i]);
}
$form = sprintf('<div class="%s-dateperiod">%s</div>', self::$_name, implode($separator, $form));
return $form;
}
/**
* Create HTML field
*
* @param string $data Name field or array attributes.
* @param string $html HTML text.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _html($data = '', $html = '', $extra = '')
{
if (is_array($extra)) {
foreach ($extra as $key => $value) {
$html = str_replace('{' . $key . '}', (string)$value, $html);
}
}
return $html;
}
/**
* Create button html element
*
* @param mixed $data Name field or array attributes.
* @param string $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _button($data = '', $value = '', $extra = '')
{
$defaults = array(
'type' => 'button',
'name' => is_array($data) ? '' : $data,
'value' => esc_attr($value),
);
return sprintf('<button %s%s>%s</button>', self::__parseatr($data, $defaults), self::__atrtostr($extra), $value);
}
/**
* Create quick submit button html element
*
* @param mixed $data Name field or array attributes.
* @param string $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _button_submit_quick($data = '', $value = '', $extra = '')
{
return sprintf('<div class="%s-quick-btns">%s</div>', self::$_name, self::_button_submit($data, $value, $extra));
}
/**
* Create submit button html element
*
* @param mixed $data Name field or array attributes.
* @param string $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _button_submit($data = '', $value = '', $extra = '')
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$data['type'] = 'submit';
return self::_button($data, $value, $extra);
}
/**
* Create label html element
*
* @param string $data Name field or array attributes.
* @param string $value Value.
* @param array $extra Styling or Custom variable.
*
* @return string
*/
public static function _label($data = '', $value = '', $extra = array())
{
$attr = '';
if (!empty($data)) {
$attr .= ' for="' . self::__createid($data) . '"';
}
$before = '';
if (isset($extra['before'])) {
$before = $extra['before'];
unset($extra['before']);
}
$after = '';
if (isset($extra['after'])) {
$after = $extra['after'];
unset($extra['after']);
}
if (is_array($extra) && count($extra) > 0) {
foreach ($extra as $key => $val) {
if ('for' == $key) { // WPCS: loose comparison ok.
continue;
}
$attr .= sprintf(' %s="%s"', $key, $val);
}
}
return sprintf('<label %s>%s%s%s</label>', $attr, $before, $value, $after);
}
/**
* Create tag id for html elements by using name
*
* @param string $name Name field.
* @param string $separator Separator name.
*
* @return string
*/
private static function __createid($name = '', $separator = '_')
{ // @codingStandardsIgnoreLine WordPress.NamingConventions.ValidFunctionName.MethodDoubleUnderscore
$name = preg_replace('/[^A-Za-z0-9_-]{1}/i', $separator, $name);
if (false === strpos($name, self::$_name)) {
$name = self::$_name . $separator . $name;
}
return $name;
}
/**
* Helper function for this Class.
* Merge attribute array and create attribute string for html element
*
* @param mixed $attributes New attributes for element.
* @param array $default Default attributes for element.
*
* @return string
*/
private static function __parseatr($attributes, $default)
{ // @codingStandardsIgnoreLine WordPress.NamingConventions.ValidFunctionName.MethodDoubleUnderscore
if (is_array($attributes)) {
foreach ($default as $key => $val) {
if (isset($attributes[$key])) {
$default[$key] = $attributes[$key];
unset($attributes[$key]);
}
}
if (count($attributes) > 0) {
$default = array_merge($default, $attributes);
}
}
if (!isset($default['name'])) {
$default['name'] = self::__rndmane();
}
$default['id'] = self::__createid((!isset($default['id']) ? $default['name'] : $default['id']));
$att = '';
foreach ($default as $key => $val) {
if (is_array($val)) {
$val = implode(', ', $val);
}
$att .= sprintf('%s="%s" ', $key, $val);
}
return $att;
}
/**
* Helper function for this Class.
* Create attribute string for html element
*
* @param mixed $attributes New attributes for element.
*
* @return string
*/
static function __atrtostr($attributes)
{ // @codingStandardsIgnoreLine WordPress.NamingConventions.ValidFunctionName.MethodDoubleUnderscore
if (empty($attributes)) {
return '';
}
if (is_string($attributes)) {
return sprintf('%s ', $attributes);
}
if (is_object($attributes)) {
$attributes = (array)$attributes;
}
if (is_array($attributes)) {
$atts = '';
foreach ($attributes as $key => $val) {
if (is_array($val)) {
$val = implode(', ', $val);
}
$atts .= sprintf('%s="%s" ', $key, $val);
}
return $atts;
}
return '';
}
/**
* Helper function for this Class.
* Create attribute string for javascript object.
*
* @param mixed $attributes New attributes for element.
*
* @return string
*/
static function __atrtostrjs($attributes)
{ // @codingStandardsIgnoreLine WordPress.NamingConventions.ValidFunctionName.MethodDoubleUnderscore
if (empty($attributes)) {
return '';
}
if (is_string($attributes)) {
return sprintf('%s ', $attributes);
}
if (is_object($attributes)) {
$attributes = (array)$attributes;
}
if (is_array($attributes)) {
$atts = '';
foreach ($attributes as $key => $val) {
if (is_array($val)) {
$val = implode(', ', $val);
}
$atts .= sprintf('%s: %s,', $key, $val);
}
return $atts;
}
return '';
}
/**
* Generate random name if thies empty
*
* @return string
*/
private static function __rndmane()
{ // @codingStandardsIgnoreLine WordPress.NamingConventions.ValidFunctionName.MethodDoubleUnderscore
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$data = '';
$length = rand(4, 10);
for ($i = 0; $i < $length; $i++) {
$data .= $characters[rand(0, strlen($characters) - 1)];
}
return $data;
}
/**
* Using for get value for element
*
* @param string $data Name value or array values.
* @param mixed $value Value.
*
* @return mixed
*/
static function getvalue($data, $value = '')
{
if (isset(self::$value[$data])) {
return self::$value[$data];
} else {
$_value = filter_input(INPUT_POST, $data);
if (is_null($_value)) {
return $value;
} else {
return $_value;
}
}
}
/**
* Set value for form element
*
* @param string $data Name value or array values.
* @param mixed $value Value.
*
* @return mixed
*/
public static function setvalue($data, $value = '')
{
$_value = $value;
if (is_array($data)) {
foreach (array_keys(self::$value) as $key) {
if (isset($data[$key])) {
self::$value[$key] = $data[$key];
unset($data[$key]);
}
}
if (count($data) > 0) {
self::$value = array_merge(self::$value, $data);
}
} else {
self::$value[$data] = $value;
}
return $_value;
}
/**
* Remove value for element
*
* @param string $data Name value or array values.
* @param void $value Value.
*
* @return mixed
*/
public static function removevalue($data, $value = '')
{
if (is_array($data)) {
foreach ($data as $val) {
if (isset(self::$value[$val])) {
unset(self::$value[$val]);
}
}
} else {
unset(self::$value[$data]);
}
return $value;
}
/**
* Using for get options for element
*
* @param string $data Name value or array values.
* @param array $option Value.
*
* @return array
*/
static function getoption($data, $option = array())
{
if (isset(self::$option[$data])) {
return self::$option[$data];
}
return $option;
}
/**
* Set options for form element
*
* @param string $data Name value or array values.
* @param array $option Value.
*
* @return array
*/
public static function setoptions($data, $option = array())
{
$_option = $option;
if (is_array($data)) {
foreach (array_keys(self::$option) as $key) {
if (isset($data[$key])) {
self::$option[$key] = $data[$key];
unset($data[$key]);
}
}
if (count($data) > 0) {
self::$option = array_merge(self::$option, $data);
}
} else {
self::$option[$data] = $option;
}
return $_option;
}
/**
* Remove options for element
*
* @param string $data Name value or array values.
* @param void $option Value.
*
* @return mixed
*/
public static function removeoptions($data, $option = array())
{
if (is_array($data)) {
foreach ($data as $val) {
if (isset(self::$option[$val])) {
unset(self::$option[$val]);
}
}
} else {
unset(self::$option[$data]);
}
return $option;
}
/**
* Create input html element with type checkbox and class on/off
*
* @param mixed $data Name field or array attributes.
* @param boolean $checked Value.
* @param mixed $extra Styling or Custom variable.
* @param string $value Value for form.
*
* @return string
*/
public static function _checkboxonoff($data = '', $checked = false, $extra = '', $value = 'on')
{
$class = sprintf(' %s-form-onoff', self::$_name);
if (is_array($extra)) {
if (isset($extra['class'])) {
$extra['class'] .= $class;
} else {
$extra['class'] = $class;
}
} else {
$extra .= sprintf(' class="%s" ', $class);
}
return self::_checkbox($data, $checked, $extra, $value);
}
/**
* Create group input html element with type radio and class box
*
* @param mixed $data Name field or array attributes.
* @param mixed $value Value.
* @param mixed $extra Styling or Custom variable.
* @param array $options Options for form.
*
* @return string
*/
public static function _multiradiobox($data = '', $value = '', $extra = '', $options = array())
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$extra_input = '';
$class = sprintf(' %s-form-multirbox', self::$_name);
if (is_array($extra)) {
if (isset($extra['class'])) {
$extra['class'] .= $class;
} else {
$extra['class'] = $class;
}
if (isset($extra['input'])) {
$extra_input = $extra['input'];
unset($extra['input']);
}
} else {
$extra .= sprintf(' class="%s" ', $class);
}
return sprintf('<div id="%s" %s >%s</div>', self::__createid($data['name']), self::__atrtostr($extra), self::_multiradio($data, $value, $extra_input, $options));
}
/**
* Create input html element with type range
*
* @param mixed $data Name field or array attributes.
* @param integer|float $value Value.
* @param mixed $extra Styling or Custom variable.
*
* @return string
*/
public static function _numberrange($data = '', $value = 0, $extra = array())
{
if (!is_array($data)) {
$data = array('name' => $data);
}
$data['type'] = 'range';
$class = sprintf(' %s-form-range', self::$_name);
if (is_array($extra)) {
if (isset($extra['class'])) {
$extra['class'] = $class;
} else {
$extra['class'] = $class;
}
} else {
$extra .= sprintf(' class="%s" ', $class);
}
return self::_text($data, $value, $extra);
}
}