From 2f4ef5691ead601810a61cee6128c31b4f4ea88b Mon Sep 17 00:00:00 2001 From: Marcel Werk Date: Sat, 15 Feb 2020 15:52:07 +0100 Subject: [PATCH] UserFormField returned no values if required flag was set --- .../field/user/UserFormField.class.php | 95 +++++++++---------- 1 file changed, 47 insertions(+), 48 deletions(-) diff --git a/wcfsetup/install/files/lib/system/form/builder/field/user/UserFormField.class.php b/wcfsetup/install/files/lib/system/form/builder/field/user/UserFormField.class.php index e1b34c1919..530d5146b7 100644 --- a/wcfsetup/install/files/lib/system/form/builder/field/user/UserFormField.class.php +++ b/wcfsetup/install/files/lib/system/form/builder/field/user/UserFormField.class.php @@ -129,63 +129,62 @@ class UserFormField extends AbstractFormField implements IAutoFocusFormField, II ) { $this->addValidationError(new FormFieldValidationError('empty')); } - else if (!$this->isRequired()) { - if ($this->allowsMultiple()) { - if ($this->getMinimumMultiples() > 0 && count($this->getValue()) < $this->getMinimumMultiples()) { - $this->addValidationError(new FormFieldValidationError( - 'minimumMultiples', - 'wcf.form.field.user.error.minimumMultiples', - [ - 'minimumCount' => $this->getMinimumMultiples(), - 'count' => count($this->getValue()) - ] - )); - } - else if ($this->getMaximumMultiples() !== IMultipleFormField::NO_MAXIMUM_MULTIPLES && count($this->getValue()) > $this->getMaximumMultiples()) { - $this->addValidationError(new FormFieldValidationError( - 'maximumMultiples', - 'wcf.form.field.user.error.maximumMultiples', - [ - 'maximumCount' => $this->getMaximumMultiples(), - 'count' => count($this->getValue()) - ] - )); - } - else { - // validate users - $this->users = UserProfile::getUserProfilesByUsername($this->getValue()); - - $nonExistentUsernames = []; - foreach ($this->getValue() as $username) { - if (!isset($this->users[$username])) { - $nonExistentUsernames[] = $username; - } - } - - if (!empty($nonExistentUsernames)) { - $this->addValidationError(new FormFieldValidationError( - 'nonExistent', - 'wcf.form.field.user.error.nonExistent', - ['nonExistentUsernames' => $nonExistentUsernames] - )); + + if ($this->allowsMultiple()) { + if ($this->getMinimumMultiples() > 0 && count($this->getValue()) < $this->getMinimumMultiples()) { + $this->addValidationError(new FormFieldValidationError( + 'minimumMultiples', + 'wcf.form.field.user.error.minimumMultiples', + [ + 'minimumCount' => $this->getMinimumMultiples(), + 'count' => count($this->getValue()) + ] + )); + } + else if ($this->getMaximumMultiples() !== IMultipleFormField::NO_MAXIMUM_MULTIPLES && count($this->getValue()) > $this->getMaximumMultiples()) { + $this->addValidationError(new FormFieldValidationError( + 'maximumMultiples', + 'wcf.form.field.user.error.maximumMultiples', + [ + 'maximumCount' => $this->getMaximumMultiples(), + 'count' => count($this->getValue()) + ] + )); + } + else { + // validate users + $this->users = UserProfile::getUserProfilesByUsername($this->getValue()); + + $nonExistentUsernames = []; + foreach ($this->getValue() as $username) { + if (!isset($this->users[$username])) { + $nonExistentUsernames[] = $username; } } - } - else if ($this->getValue() !== '') { - $user = UserProfile::getUserProfileByUsername($this->getValue()); - if ($user === null) { + if (!empty($nonExistentUsernames)) { $this->addValidationError(new FormFieldValidationError( 'nonExistent', - 'wcf.form.field.user.error.invalid' + 'wcf.form.field.user.error.nonExistent', + ['nonExistentUsernames' => $nonExistentUsernames] )); } - else { - $this->users[] = $user; - } } } - + else if ($this->getValue() !== '') { + $user = UserProfile::getUserProfileByUsername($this->getValue()); + + if ($user === null) { + $this->addValidationError(new FormFieldValidationError( + 'nonExistent', + 'wcf.form.field.user.error.invalid' + )); + } + else { + $this->users[] = $user; + } + } + parent::validate(); } -- 2.20.1