Skip to content

Commit f499fe7

Browse files
committed
Validator::validateEqual returns false if control value is empty array (BC break) [Closes #257]
1 parent a0c5798 commit f499fe7

6 files changed

Lines changed: 53 additions & 4 deletions

src/Forms/Validator.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,18 @@ public static function formatMessage(Rule $rule, bool $withValue = true)
107107
public static function validateEqual(Control $control, $arg): bool
108108
{
109109
$value = $control->getValue();
110-
foreach ((is_array($value) ? $value : [$value]) as $val) {
111-
foreach ((is_array($arg) ? $arg : [$arg]) as $item) {
110+
$values = is_array($value) ? $value : [$value];
111+
$args = is_array($arg) ? $arg : [$arg];
112+
113+
foreach ($values as $val) {
114+
foreach ($args as $item) {
112115
if ((string) $val === (string) $item) {
113116
continue 2;
114117
}
115118
}
116119
return false;
117120
}
118-
return true;
121+
return (bool) $values;
119122
}
120123

121124

src/assets/netteForms.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@
371371
}
372372
return false;
373373
}
374-
return true;
374+
return val.length > 0;
375375
},
376376

377377
notEqual: function(elem, arg, val) {

tests/Forms/Controls.BaseControl.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ test('validators', function () {
4343
Assert::true(Validator::validateEqual($input, '123'));
4444
Assert::true(Validator::validateEqual($input, [123, 3])); // "is in"
4545
Assert::false(Validator::validateEqual($input, ['x']));
46+
Assert::false(Validator::validateEqual($input, []));
4647

4748
Assert::true(Validator::validateFilled($input));
4849
Assert::true(Validator::validateValid($input));

tests/Forms/Controls.CheckboxList.loadData.phpt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,21 @@ test('validateEqual', function () use ($series) {
142142
Assert::false(Validator::validateEqual($input, 'unknown'));
143143
Assert::false(Validator::validateEqual($input, ['unknown']));
144144
Assert::false(Validator::validateEqual($input, [0]));
145+
Assert::false(Validator::validateEqual($input, []));
146+
});
147+
148+
149+
test('empty input & validateEqual', function () use ($series) {
150+
$_POST = [];
151+
152+
$form = new Form;
153+
$input = $form->addCheckboxList('multi', null, $series);
154+
155+
Assert::false(Validator::validateEqual($input, ['red-dwarf', 0]));
156+
Assert::false(Validator::validateEqual($input, 'unknown'));
157+
Assert::false(Validator::validateEqual($input, ['unknown']));
158+
Assert::false(Validator::validateEqual($input, [0]));
159+
Assert::false(Validator::validateEqual($input, []));
145160
});
146161

147162

tests/Forms/Controls.MultiChoiceControl.loadData.phpt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,21 @@ test('validateEqual', function () use ($series) {
154154
Assert::false(Validator::validateEqual($input, 'unknown'));
155155
Assert::false(Validator::validateEqual($input, ['unknown']));
156156
Assert::false(Validator::validateEqual($input, [0]));
157+
Assert::false(Validator::validateEqual($input, []));
158+
});
159+
160+
161+
test('empty input & validateEqual', function () use ($series) {
162+
$_POST = [];
163+
164+
$form = new Form;
165+
$input = $form['multi'] = new MultiChoiceControl(null, $series);
166+
167+
Assert::false(Validator::validateEqual($input, ['red-dwarf', 0]));
168+
Assert::false(Validator::validateEqual($input, 'unknown'));
169+
Assert::false(Validator::validateEqual($input, ['unknown']));
170+
Assert::false(Validator::validateEqual($input, [0]));
171+
Assert::false(Validator::validateEqual($input, []));
157172
});
158173

159174

tests/Forms/Controls.MultiSelectBox.loadData.phpt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,21 @@ test('validateEqual', function () use ($series) {
150150
Assert::false(Validator::validateEqual($input, 'unknown'));
151151
Assert::false(Validator::validateEqual($input, ['unknown']));
152152
Assert::false(Validator::validateEqual($input, [0]));
153+
Assert::false(Validator::validateEqual($input, []));
154+
});
155+
156+
157+
test('empty input & validateEqual', function () use ($series) {
158+
$_POST = [];
159+
160+
$form = new Form;
161+
$input = $form->addMultiSelect('multi', null, $series);
162+
163+
Assert::false(Validator::validateEqual($input, ['red-dwarf', 0]));
164+
Assert::false(Validator::validateEqual($input, 'unknown'));
165+
Assert::false(Validator::validateEqual($input, ['unknown']));
166+
Assert::false(Validator::validateEqual($input, [0]));
167+
Assert::false(Validator::validateEqual($input, []));
153168
});
154169

155170

0 commit comments

Comments
 (0)