forms
forms copied to clipboard
netteForms.js: passing multiple controls as validator argument
- bug report? yes
- feature request? no
- version: 2.4
Description
Při použití vlastních valičních pravidel se nepředají hodnoty, ale objekty:
[{"control":"username"},{"control":"first_name"},{"control":"last_name"}]
Toto nastane až při validaci prvku "password_again".
Problém ve funkci, kde se opětovně validuje prvek oproti starší verzi
Nette.expandRuleArgument = function(form, arg) {
if (arg && arg.control) {
var control = form.elements.namedItem(arg.control),
value = {value: Nette.getEffectiveValue(control)};
Nette.validateControl(control, null, true, value);
arg = value.value;
}
return arg;
};
Steps To Reproduce
$form->addPassword('password')
->setRequired(_('Vyplňte prosím heslo.'))
->addRule($form::MIN_LENGTH, _('Heslo musí mít minimálně %s znaků.'), 8)
->addRule(UserFormRules::PASSWORD, _('Heslo nesmí obsahovat login, jméno, ani příjmení.'), [$form['username'], $form['first_name'], $form['last_name']]);
$form->addPassword('password_again')
->setRequired(_('Vyplňte prosím heslo znovu pro kontrolu.'))
->addRule($form::EQUAL, _('Zadaná hesla se neshodují.'), $form['password']);
Nette.validators.AppLibsUserFormRules_validatePassword = function (elem, arg, value) {
var value = webalize(value);
var res = true;
$.each(arg, function (id, val) {
if (value.indexOf(webalize(val)) >= 0 && val.trim().length > 0) {
res = false;
}
});
return res;
};
Do you know how to fix it?
Unfortunately, no. Bug occurs only when debug mode is enabled.
It's related to this commit. 2aed83fa86e950038a4103ffef8b5d90c7d7428d. Prevent filtering is true so args can't be filter by expandRuleArgument function.