use wcf\system\captcha\ICaptchaHandler;
use wcf\system\exception\UserInputException;
use wcf\system\form\builder\field\validation\FormFieldValidationError;
+use wcf\system\form\builder\field\validation\IFormFieldValidationError;
use wcf\system\form\builder\IObjectTypeFormNode;
use wcf\system\form\builder\TObjectTypeFormNode;
*/
protected $validationException;
+ /**
+ * @var IFormFieldValidationError
+ */
+ protected $validationError;
+
/**
* @inheritDoc
*/
$variables['errorType'] = $this->validationException->getType();
}
+ // The error message is shown by the captcha handler itself but up until now, the form
+ // builder API needs at least one validation error present to detect validation errors.
+ // Now, however, we can remove the validation error again.
+ if ($this->validationError) {
+ $this->validationErrors = array_filter($this->validationErrors, function(IFormFieldValidationError $validationError) {
+ return $validationError !== $this->validationError;
+ });
+ }
+
return $variables;
}
}
catch (UserInputException $e) {
$this->validationException = $e;
- $this->addValidationError(new FormFieldValidationError($e->getType()));
+ $this->validationError = new FormFieldValidationError($e->getType());
+ $this->addValidationError($this->validationError);
}
}