PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 5.0
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v5.0
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
← All changes | classes/models/fields/FrmFieldNumber.php +28 -118 6.295.0 View file →
@@ -9,21 +9,13 @@
9 9 class FrmFieldNumber extends FrmFieldType {
10 10
11 11 /**
12 12 * @var string
13 - *
14 13 * @since 3.0
15 14 */
16 15 protected $type = 'number';
16 + protected $display_type = 'text';
17 17
18 - /**
19 - * @var bool
20 - */
21 - protected $array_allowed = false;
22 -
23 - /**
24 - * @return bool[]
25 - */
26 18 protected function field_settings_for_type() {
27 19 $settings = array(
28 20 'size' => true,
29 21 'clear_on_focus' => true,
@@ -30,16 +22,16 @@
30 22 'invalid' => true,
31 23 'range' => true,
32 24 );
33 25
34 - $settings['max'] = false;
26 + $frm_settings = FrmAppHelper::get_settings();
27 + if ( $frm_settings->use_html ) {
28 + $settings['max'] = false;
29 + }
35 30
36 31 return $settings;
37 32 }
38 33
39 - /**
40 - * @return array
41 - */
42 34 protected function extra_field_opts() {
43 35 return array(
44 36 'minnum' => 0,
45 37 'maxnum' => 9999999,
@@ -48,150 +40,68 @@
48 40 }
49 41
50 42 /**
51 43 * @since 3.01.03
52 - *
53 - * @param array $args
54 - * @param string $input_html
55 - *
56 - * @return void
57 44 */
58 45 protected function add_extra_html_atts( $args, &$input_html ) {
59 46 $this->add_min_max( $args, $input_html );
60 47 }
61 48
62 - /**
63 - * @param array $args
64 - */
65 49 public function validate( $args ) {
66 50 $errors = array();
67 51
68 52 $this->remove_commas_from_number( $args );
69 53
70 - // Validate the number format.
54 + //validate the number format
71 55 if ( ! is_numeric( $args['value'] ) && '' !== $args['value'] ) {
72 56 $errors[ 'field' . $args['id'] ] = FrmFieldsHelper::get_error_msg( $this->field, 'invalid' );
73 57 }
74 58
75 - if ( $args['value'] === '' ) {
76 - return $errors;
59 + // validate number settings
60 + if ( $args['value'] != '' ) {
61 + $frm_settings = FrmAppHelper::get_settings();
62 + // only check if options are available in settings
63 + $minnum = FrmField::get_option( $this->field, 'minnum' );
64 + $maxnum = FrmField::get_option( $this->field, 'maxnum' );
65 + if ( $frm_settings->use_html && $maxnum !== '' && $minnum !== '' ) {
66 + $value = (float) $args['value'];
67 + if ( $value < $minnum ) {
68 + $errors[ 'field' . $args['id'] ] = __( 'Please select a higher number', 'formidable' );
69 + } elseif ( $value > $maxnum ) {
70 + $errors[ 'field' . $args['id'] ] = __( 'Please select a lower number', 'formidable' );
71 + }
72 + }
77 73 }
78 74
79 - $value = (float) $args['value'];
80 - $minnum = FrmField::get_option( $this->field, 'minnum' );
81 - $maxnum = FrmField::get_option( $this->field, 'maxnum' );
82 -
83 - if ( $minnum !== '' && $value < $minnum ) {
84 - $errors[ 'field' . $args['id'] ] = __( 'Please select a higher number', 'formidable' );
85 - } elseif ( $maxnum !== '' && $value > $maxnum ) {
86 - $errors[ 'field' . $args['id'] ] = __( 'Please select a lower number', 'formidable' );
87 - }
88 -
89 - $this->validate_step( $errors, $args );
90 -
91 75 return $errors;
92 76 }
93 77
94 78 /**
95 - * Validates the step setting.
96 - *
97 - * @since 5.2.06
98 - *
99 - * @param array $errors Errors array.
100 - * @param array $args Validation args.
101 - *
102 - * @return void
103 - */
104 - protected function validate_step( &$errors, $args ) {
105 - if ( isset( $errors[ 'field' . $args['id'] ] ) ) {
106 - // Don't need to check if value is invalid before.
107 - return;
108 - }
109 -
110 - $step = FrmField::get_option( $this->field, 'step' );
111 -
112 - if ( ! $step || ! is_numeric( $step ) ) {
113 - return;
114 - }
115 -
116 - $result = $this->check_value_is_valid_with_step( $args['value'], $step );
117 -
118 - if ( ! $result ) {
119 - return;
120 - }
121 -
122 - $errors[ 'field' . $args['id'] ] = sprintf(
123 - // Translators: %1$s: the first nearest value; %2$s: the second nearest value.
124 - __( 'Please enter a valid value. Two nearest valid values are %1$s and %2$s', 'formidable' ),
125 - is_numeric( $result[0] ) ? floatval( $result[0] ) : $result[0],
126 - is_numeric( $result[1] ) ? floatval( $result[1] ) : $result[1]
127 - );
128 - }
129 -
130 - /**
131 - * Checks if value is valid with the given step.
132 - *
133 - * @since 5.2.07
134 - *
135 - * @param numeric $value The value.
136 - * @param numeric $step The step.
137 - *
138 - * @return array|int Return `0` if valid. Otherwise, return an array contains two nearest values.
139 - */
140 - protected function check_value_is_valid_with_step( $value, $step ) {
141 - // Count the number of decimals.
142 - $decimals = (int) max( FrmAppHelper::count_decimals( $value ), FrmAppHelper::count_decimals( $step ) );
143 -
144 - // Convert value and step to int to prevent precision problem.
145 - $pow = 10 ** $decimals;
146 - $value = intval( $pow * $value );
147 - $step = intval( $pow * $step );
148 - $div = $value / $step;
149 -
150 - if ( is_int( $div ) ) {
151 - return 0;
152 - }
153 -
154 - $div = floor( $div );
155 - return array( $div * $step / $pow, ( $div + 1 ) * $step / $pow );
156 - }
157 -
158 - /**
159 79 * IE fallback for number fields
160 80 * Remove the comma when HTML5 isn't supported
161 81 *
162 82 * @since 3.0
163 - *
164 - * @param array $args
165 - *
166 - * @return void
167 83 */
168 84 private function remove_commas_from_number( &$args ) {
169 - if ( ! str_contains( $args['value'], ',' ) ) {
170 - return;
85 + if ( strpos( $args['value'], ',' ) ) {
86 + $args['value'] = str_replace( ',', '', $args['value'] );
87 + FrmEntriesHelper::set_posted_value( $this->field, $args['value'], $args );
171 88 }
172 -
173 - $args['value'] = str_replace( ',', '', $args['value'] );
174 - FrmEntriesHelper::set_posted_value( $this->field, $args['value'], $args );
175 89 }
176 90
177 91 /**
178 92 * Force the value to be numeric before it's saved in the DB
179 - *
180 - * @param array|string $value
181 - *
182 - * @return float
183 93 */
184 94 public function set_value_before_save( $value ) {
185 - return is_numeric( $value ) ? $value : (float) $value;
95 + if ( ! is_numeric( $value ) ) {
96 + $value = (float) $value;
97 + }
98 +
99 + return $value;
186 100 }
187 101
188 102 /**
189 103 * @since 4.0.04
190 - *
191 - * @param array|string $value
192 - *
193 - * @return void
194 104 */
195 105 public function sanitize_value( &$value ) {
196 106 FrmAppHelper::sanitize_value( 'sanitize_text_field', $value );
197 107 }