← All changes
|
includes/Frontend/Form/View/Theme/Fields/SliderField.php
+23
-6
3.2.2
→
V3.3.2
View file →
| @@ -1,8 +1,9 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | namespace BitCode\BitForm\Frontend\Form\View\Theme\Fields; |
| 4 | 4 | |
| 5 | +use BitCode\BitForm\Core\Util\FieldValueHandler; | |
| 5 | 6 | use BitCode\BitForm\Core\Util\FrontendHelpers; |
| 6 | 7 | |
| 7 | 8 | class SliderField |
| 8 | 9 | { |
| @@ -62,19 +63,25 @@ | ||
| 62 | 63 | if (property_exists($field, 'inputMode') && '' !== $field->inputMode) { |
| 63 | 64 | $inputMode = "inputMode='{$fieldHelpers->esc_attr($field->inputMode)}'"; |
| 64 | 65 | } |
| 65 | 66 | |
| 66 | - $minValue = property_exists($field, 'mn') ? $field->mn : 0; | |
| 67 | - $maxValue = property_exists($field, 'mx') ? $field->mx : 100; | |
| 67 | + $minValue = self::numericOr(property_exists($field, 'mn') ? $field->mn : null, 0); | |
| 68 | + $maxValue = self::numericOr(property_exists($field, 'mx') ? $field->mx : null, 100); | |
| 68 | 69 | |
| 69 | 70 | $defaultVal = (($maxValue - $minValue) / 2) + $minValue; |
| 71 | + // The builder used to seed Default value with the field label ("Slider"), so a stored value | |
| 72 | + // or default can be non-numeric; arithmetic on it fatals on PHP 8. Fall back to the minimum. | |
| 70 | 73 | if ($fieldHelpers->property_exists_nested($field, 'val', '', 1)) { |
| 71 | - $defaultVal = $field->val; | |
| 74 | + $defaultVal = self::numericOr($field->val, $minValue); | |
| 75 | + $value = "value='{$fieldHelpers->esc_attr($defaultVal)}'"; | |
| 72 | 76 | } elseif ($fieldHelpers->property_exists_nested($field, 'defaultValue', '', 1)) { |
| 73 | - $defaultVal = $field->defaultValue; | |
| 77 | + $defaultVal = self::numericOr(FieldValueHandler::replaceSmartTagWithValue($field->defaultValue), $minValue); | |
| 78 | + $value = "value='{$fieldHelpers->esc_attr($defaultVal)}'"; | |
| 74 | 79 | } |
| 75 | 80 | |
| 76 | - $lowerTrackPercentage = ($defaultVal - $minValue) / ($maxValue - $minValue) * 100; | |
| 81 | + // Min equal to max leaves no track to fill; avoid a division by zero. | |
| 82 | + $range = $maxValue - $minValue; | |
| 83 | + $lowerTrackPercentage = 0.0 !== (float) $range ? ($defaultVal - $minValue) / $range * 100 : 0; | |
| 77 | 84 | |
| 78 | 85 | $wrpperStyle = "style='--bfv-fld-val: \"" . $fieldHelpers->esc_attr($defaultVal) . "\";'"; |
| 79 | 86 | $inputStyle = "style='--bfv-fill-lower-track: " . $fieldHelpers->esc_attr($lowerTrackPercentage) . "% !important;'"; |
| 80 | 87 | |
| @@ -105,9 +112,19 @@ | ||
| 105 | 112 | ' . $inputStyle . ' |
| 106 | 113 | /> |
| 107 | 114 | ' . $prefixIcn . ' |
| 108 | 115 | ' . $suffixIcn . ' |
| 109 | - <span class="' . $fieldHelpers->getAtomicCls('slider-val') . '">Value : </span> | |
| 116 | + <span class="' . $fieldHelpers->getAtomicCls('slider-val') . '">' . esc_html__('Value:', 'bit-form') . ' </span> | |
| 110 | 117 | </div> |
| 111 | 118 | ' . $sugg . "\n"; |
| 119 | + } | |
| 120 | + | |
| 121 | + /** | |
| 122 | + * @param mixed $value | |
| 123 | + * @param int|float $fallback | |
| 124 | + * @return int|float | |
| 125 | + */ | |
| 126 | + private static function numericOr($value, $fallback) | |
| 127 | + { | |
| 128 | + return is_numeric($value) ? $value + 0 : $fallback; | |
| 112 | 129 | } |
| 113 | 130 | } |