OwlCyberSecurity - MANAGER
Edit File: Multiselect.php
<?php /** * @copyright Copyright (c) 2009-2022 ThemeCatcher (https://www.themecatcher.net) */ class Quform_Element_Multiselect extends Quform_Element_Select { /** * @var array */ protected $value = array(); /** * @var bool */ protected $isMultiple = true; /** * Prepare the dynamic default value * * @param string $value * @return array */ public function prepareDynamicValue($value) { return Quform::isNonEmptyString($value) ? explode(',', $value) : $this->getEmptyValue(); } /** * Set the value * * @param array $value * @return bool */ protected function isValidValue($value) { if ( ! is_array($value)) { return false; } foreach ($value as $val) { if ( ! parent::isValidValue($val)) { return false; } } return true; } /** * Does this element have the given value? * * @param mixed $value * @return boolean */ public function hasValue($value) { return in_array($value, $this->getValue(), true); } /** * Get the empty value for this element * * @return array */ public function getEmptyValue() { return array(); } /** * Get the filtered value * * @return array */ public function getValue() { $value = $this->value; $this->filterValueRecursive($value); $value = apply_filters('quform_get_value_' . $this->getIdentifier(), $value, $this, $this->getForm()); return $value; } /** * Get the value formatted for HTML * * @return string */ public function getValueHtml() { $value = ''; if ( ! $this->isEmpty()) { $ulStyle = apply_filters('quform_value_list_multiselect_ul_style', 'margin:0;padding:0;list-style:disc inside;', $this, $this->getForm()); $ulStyle = apply_filters('quform_value_list_multiselect_ul_style_' . $this->getIdentifier(), $ulStyle, $this, $this->getForm()); $liStyle = apply_filters('quform_value_list_multiselect_li_style', '', $this, $this->getForm()); $liStyle = apply_filters('quform_value_list_multiselect_li_style_' . $this->getIdentifier(), $liStyle, $this, $this->getForm()); $value = sprintf( '<ul class="quform-value-list quform-value-list-multiselect"%s>', Quform::isNonEmptyString($ulStyle) ? ' style="' . esc_attr($ulStyle) . '"' : '' ); foreach ($this->getValue() as $option) { $value .= sprintf( '<li class="quform-value-list-item quform-value-list-item-multiselect"%s>', Quform::isNonEmptyString($liStyle) ? ' style="' . esc_attr($liStyle) . '"' : '' ); $value .= Quform::escape($option); $value .= '</li>'; } $value .= '</ul>'; } $value = apply_filters('quform_get_value_html_' . $this->getIdentifier(), $value, $this, $this->getForm()); return $value; } /** * Get the value formatted in plain text * * @param string $separator The separator * @return string */ public function getValueText($separator = ', ') { $value = join($separator, $this->getValue()); $value = apply_filters('quform_get_value_text_' . $this->getIdentifier(), $value, $this, $this->getForm()); return $value; } /** * Get the value in storage format * * @return string */ protected function getConvertedValueForStorage() { return serialize($this->getValue()); } /** * Convert given the value from storage format * * @param string $value * @return array */ protected function convertValueFromStorage($value) { return is_serialized($value) ? unserialize($value) : $this->getEmptyValue(); } /** * If the value is not an array or is an empty array it's empty * * @return bool */ public function isEmpty() { return ! count($this->getValue()); } /** * 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)), 'multiple' => true ); if ($this->config('enhancedSelectEnabled')) { $attributes['data-options'] = wp_json_encode(array( 'rtl' => $this->form->isRtl(), 'placeholder' => $this->getTranslation('enhancedSelectPlaceholder', __('Please select', 'quform')), 'noResultsFound' => $this->getTranslation('enhancedSelectNoResultsFound', __('No results found.', 'quform')), )); $attributes['style'] = 'width: 100%;'; } if (Quform::isNonEmptyString($this->config('aria-labelledby'))) { $attributes['aria-labelledby'] = $this->config('aria-labelledby'); } if (Quform::isNonEmptyString($this->config('sizeAttribute'))) { if ($this->config('sizeAttribute') == 'auto') { $attributes['size'] = $this->getOptionsCount(); } else { $attributes['size'] = $this->config('sizeAttribute'); } } $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 total number of options, including optgroup options * * @return int */ protected function getOptionsCount() { $count = count($this->getOptions()); foreach ($this->getOptions() as $option) { if (isset($option['options'])) { $count += count($option['options']); } } return $count; } /** * Get the classes for the field * * @param array $context * @return array */ protected function getFieldClasses(array $context = array()) { $classes = array( 'quform-field', 'quform-field-multiselect', sprintf('quform-field-%s', $this->getIdentifier()) ); if ($this->config('enhancedSelectEnabled')) { $classes[] = 'quform-field-multiselect-enhanced'; } if (Quform::isNonEmptyString($this->config('customClass'))) { $classes[] = $this->config('customClass'); } 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 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_multi_select', array( // Basic 'label' => __('Untitled', 'quform'), 'options' => self::getDefaultOptions(), 'nextOptionId' => 4, 'defaultValue' => array(), 'customiseValues' => false, 'description' => '', 'descriptionAbove' => '', 'required' => false, // Styles 'labelIcon' => '', 'fieldSize' => 'inherit', 'fieldWidth' => 'inherit', 'fieldWidthCustom' => '', 'enhancedSelectEnabled' => false, 'enhancedSelectPlaceholder' => '', 'customClass' => '', 'customElementClass' => '', 'sizeAttribute' => '', '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' => '', 'showInEmail' => true, 'saveToDatabase' => true, // Advanced 'visibility' => '', 'validators' => array(), // Translations 'messageRequired' => '', 'enhancedSelectNoResultsFound' => '' )); $config['type'] = 'multiselect'; if (Quform::isNonEmptyString($key)) { return Quform::get($config, $key); } return $config; } }