forms icon indicating copy to clipboard operation
forms copied to clipboard

netteForms.js: passing multiple controls as validator argument

Open MartinSzollos2016 opened this issue 6 years ago • 3 comments

  • 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;
};

MartinSzollos2016 avatar Mar 08 '18 18:03 MartinSzollos2016

Do you know how to fix it?

dg avatar Mar 08 '18 19:03 dg

Unfortunately, no. Bug occurs only when debug mode is enabled.

MartinSzollos2016 avatar Mar 09 '18 09:03 MartinSzollos2016

It's related to this commit. 2aed83fa86e950038a4103ffef8b5d90c7d7428d. Prevent filtering is true so args can't be filter by expandRuleArgument function.

MartinSzollos2016 avatar Mar 09 '18 10:03 MartinSzollos2016