Skip to content

Commit d77b722

Browse files
committed
Rules::validate() $emptyOptional is always false in BLANK condition
1 parent 5297f35 commit d77b722

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

src/Forms/Rules.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,9 @@ public function getToggleStates(array $toggles = [], bool $success = true): arra
224224
/**
225225
* Validates against ruleset.
226226
*/
227-
public function validate(bool $emptyOptional = false): bool
227+
public function validate(bool $emptyOptional = null): bool
228228
{
229-
$emptyOptional = $emptyOptional || !$this->isRequired() && !$this->control->isFilled();
229+
$emptyOptional = $emptyOptional ?? (!$this->isRequired() && !$this->control->isFilled());
230230
foreach ($this as $rule) {
231231
if (!$rule->branch && $emptyOptional && $rule->validator !== Form::FILLED) {
232232
continue;

src/assets/netteForms.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@
139139
elem = elem.tagName ? elem : elem[0]; // RadioNodeList
140140
rules = rules || JSON.parse(elem.getAttribute('data-nette-rules') || '[]');
141141
value = value === undefined ? {value: Nette.getEffectiveValue(elem)} : value;
142-
emptyOptional = emptyOptional || !Nette.validateRule(elem, ':filled', null, value);
142+
emptyOptional = emptyOptional === undefined ? !Nette.validateRule(elem, ':filled', null, value) : emptyOptional;
143143

144144
for (var id = 0, len = rules.length; id < len; id++) {
145145
var rule = rules[id],

tests/Forms/Controls.TextBase.loadData.phpt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,19 @@ test(function () { // filter in condition
189189
$input->validate();
190190
Assert::same('olleh', $input->getValue());
191191
});
192+
193+
194+
test(function () { // filter in BLANK condition
195+
$_POST = ['text' => ''];
196+
197+
$form = new Form;
198+
$input = $form->addText('text');
199+
$input->addCondition($form::BLANK)
200+
->addFilter(function () use ($input) {
201+
return 'default';
202+
});
203+
204+
Assert::same('', $input->getValue());
205+
$input->validate();
206+
Assert::same('default', $input->getValue());
207+
});

0 commit comments

Comments
 (0)