OwlCyberSecurity - MANAGER
Edit File: Select.php
<?php /** * @copyright Copyright (c) 2009-2022 ThemeCatcher (https://www.themecatcher.net) */ class Quform_Element_Select extends Quform_Element_Multi implements Quform_Element_Editable { /** * Get the the HTML for an option tag * * @param array $option The option data * @return string The resulting HTML */ protected function getOptionHtml(array $option) { $output = sprintf( '<option value="%s"%s>%s</option>', Quform::escape($this->getOptionValue($option, 'value')), $this->hasValue($this->getOptionValue($option, 'value')) ? ' selected="selected"' : '', Quform::escape($this->getOptionValue($option, 'label')) ); return $output; } /** * Get the HTML for an optgroup tag * * @param array $optgroup The option data * @return string The resulting HTML */ protected function getOptgroupHtml(array $optgroup) { $output = sprintf('<optgroup label="%s">', Quform::escape($this->getOptgroupValue($optgroup, 'label'))); foreach ($this->getOptgroupValue($optgroup, 'options') as $option) { $output .= $this->getOptionHtml($option); } $output .= '</optgroup>'; return $output; } /** * Get the HTML attributes for the field * * @param array $context * @return array */ protected function getFieldAttributes(array $context = array()) { $attributes = array( 'id' => $this->getUniqueId(), 'name' => $this->getFullyQualifiedName(), 'class' => Quform::sanitizeClass($this->getFieldClasses($context)) ); if ($this->config('enhancedSelectEnabled')) { $attributes['data-options'] = wp_json_encode(array( 'rtl' => $this->form->isRtl(), 'search' => $this->config('enhancedSelectSearch'), 'noResultsFound' => $this->getTranslation('enhancedSelectNoResultsFound', __('No results found.', 'quform')) )); $attributes['style'] = 'width: 100%;'; } if (Quform::isNonEmptyString($this->config('autocomplete'))) { $attributes['autocomplete'] = $this->config('autocomplete'); } if (Quform::isNonEmptyString($this->config('aria-labelledby'))) { $attributes['aria-labelledby'] = $this->config('aria-labelledby'); } $attributes = apply_filters('quform_field_attributes', $attributes, $this, $this->form, $context); $attributes = apply_filters('quform_field_attributes_' . $this->getIdentifier(), $attributes, $this, $this->form, $context); return $attributes; } /** * Get the classes for the field * * @param array $context * @return array */ protected function getFieldClasses(array $context = array()) { $classes = array( 'quform-field', 'quform-field-select', sprintf('quform-field-%s', $this->getIdentifier()) ); if ($this->config('enhancedSelectEnabled')) { $classes[] = 'quform-field-select-enhanced'; } if (Quform::isNonEmptyString($this->config('customClass'))) { $classes[] = $this->config('customClass'); } if ($this->config('submitOnChoice')) { $classes[] = 'quform-submit-on-choice'; } $classes = apply_filters('quform_field_classes', $classes, $this, $this->form, $context); $classes = apply_filters('quform_field_classes_' . $this->getIdentifier(), $classes, $this, $this->form, $context); return $classes; } /** * Get the HTML for the field * * @param array $context * @return string */ protected function getFieldHtml(array $context = array()) { return Quform::getHtmlTag('select', $this->getFieldAttributes($context), $this->getOptionsHtml()); } /** * Get the HTML for the select options * * @return string */ protected function getOptionsHtml() { $output = ''; if ($this->config('noneOption')) { $output .= $this->getOptionHtml(array( 'label' => $this->getTranslation('noneOptionText', __('Please select', 'quform')), 'value' => '' )); } foreach ($this->getOptions() as $option) { if (isset($option['options'])) { $output .= $this->getOptgroupHtml($option); } else { $output .= $this->getOptionHtml($option); } } return $output; } /** * Get the field HTML when editing * * @return string */ public function getEditFieldHtml() { return $this->getFieldHtml(); } /** * Render the CSS for this element * * @param array $context * @return string */ protected function renderCss(array $context = array()) { $css = parent::renderCss($context); if ($context['fieldWidth'] == 'custom' && Quform::isNonEmptyString($context['fieldWidthCustom'])) { $css .= sprintf('.quform-input-select.quform-input-%1$s, .quform-input-multiselect.quform-input-%1$s { width: %2$s; }', $this->getIdentifier(), Quform::addCssUnit($context['fieldWidthCustom'])); $css .= sprintf('.quform-inner-%s > .quform-error > .quform-error-inner { float: left; min-width: %s; }', $this->getIdentifier(), Quform::addCssUnit($context['fieldWidthCustom'])); } return $css; } /** * Inherit settings from this element into the context * * @param array $context * @return array */ protected function prepareContext(array $context = array()) { $context = parent::prepareContext($context); // Icon is the only possible tooltip type for this element $context['tooltipType'] = 'icon'; return $context; } /** * Get the default optgroup config * * @param string|null $key Get the config by key, if omitted the full config is returned * @return array */ public static function getDefaultOptgroupConfig($key = null) { $config = array( 'label' => __('Untitled', 'quform'), 'options' => array() ); if (Quform::isNonEmptyString($key)) { return Quform::get($config, $key); } return $config; } /** * Get the value of the given $key from the given $optgroup or return the default if it does not exist * * @param array $optgroup * @param string $key * @return string|array */ protected function getOptgroupValue(array $optgroup, $key) { $value = Quform::get($optgroup, $key); if ($value === null) { $value = Quform::get(call_user_func(array(get_class($this), 'getDefaultOptgroupConfig')), $key); } return $value; } /** * Get the default options for this element * * @return array */ protected static function getDefaultOptions() { $options = array(); $defaults = array(__('Option 1', 'quform'), __('Option 2', 'quform'), __('Option 3', 'quform')); foreach ($defaults as $key => $value) { $option = self::getDefaultOptionConfig(); $option['id'] = $key + 1; $option['label'] = $option['value'] = $value; $options[] = $option; } return $options; } /** * Get the default element configuration * * @param string|null $key Get the config by key, if omitted the full config is returned * @return array */ public static function getDefaultConfig($key = null) { $config = apply_filters('quform_default_config_select', array( // Basic 'label' => __('Untitled', 'quform'), 'options' => self::getDefaultOptions(), 'nextOptionId' => 4, 'defaultValue' => '', 'customiseValues' => false, 'noneOption' => true, 'description' => '', 'descriptionAbove' => '', 'required' => false, // Styles 'labelIcon' => '', 'fieldSize' => 'inherit', 'fieldWidth' => 'inherit', 'fieldWidthCustom' => '', 'enhancedSelectEnabled' => false, 'enhancedSelectSearch' => true, 'customClass' => '', 'customElementClass' => '', 'styles' => array(), // Labels 'subLabel' => '', 'subLabelAbove' => '', 'adminLabel' => '', 'tooltip' => '', 'tooltipType' => 'icon', 'tooltipEvent' => 'inherit', 'labelPosition' => 'inherit', 'labelWidth' => '', // Logic 'logicEnabled' => false, 'logicAction' => true, 'logicMatch' => 'all', 'logicRules' => array(), // Data 'inArrayValidator' => true, 'dynamicDefaultValue' => false, 'dynamicKey' => '', 'autocomplete' => '', 'submitOnChoice' => false, 'showInEmail' => true, 'saveToDatabase' => true, // Advanced 'visibility' => '', 'validators' => array(), // Translations 'messageRequired' => '', 'noneOptionText' => '', 'enhancedSelectNoResultsFound' => '' )); $config['type'] = 'select'; if (Quform::isNonEmptyString($key)) { return Quform::get($config, $key); } return $config; } }