From: Tim Düsterhus Date: Wed, 25 Aug 2021 11:52:15 +0000 (+0200) Subject: Clean up control and data flow in UserFormField::validate() X-Git-Tag: 5.4.5_RC_1~11 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=7f81d7eccd2285b3262c033954cb30ab73954fe5;p=GitHub%2FWoltLab%2FWCF.git Clean up control and data flow in UserFormField::validate() --- 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 8709041bbe..c5607fb536 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 @@ -144,57 +144,66 @@ class UserFormField extends AbstractFormField implements } if ($this->getValue() !== null) { + $usernames = []; if ($this->allowsMultiple()) { - if ($this->getMinimumMultiples() > 0 && \count($this->getValue()) < $this->getMinimumMultiples()) { + $usernames = $this->getValue(); + } elseif ($this->getValue() !== '') { + $usernames = [$this->getValue()]; + } + + // Validate usernames. + $this->users = UserProfile::getUserProfilesByUsername($usernames); + + $nonExistentUsernames = []; + foreach ($usernames as $username) { + if (!isset($this->users[$username])) { + $nonExistentUsernames[] = $username; + } + } + + if (!empty($nonExistentUsernames)) { + if ($this->allowsMultiple()) { + $this->addValidationError(new FormFieldValidationError( + 'nonExistent', + 'wcf.form.field.user.error.nonExistent', + ['nonExistentUsernames' => $nonExistentUsernames] + )); + } else { + $this->addValidationError(new FormFieldValidationError( + 'nonExistent', + 'wcf.form.field.user.error.nonExistent' + )); + } + } + + // Validate the number of multiples. + if ($this->allowsMultiple()) { + if ( + $this->getMinimumMultiples() > 0 + && \count($usernames) < $this->getMinimumMultiples() + ) { $this->addValidationError(new FormFieldValidationError( 'minimumMultiples', 'wcf.form.field.user.error.minimumMultiples', [ 'minimumCount' => $this->getMinimumMultiples(), - 'count' => \count($this->getValue()), + 'count' => \count($usernames), ] )); - } elseif ( + } + + if ( $this->getMaximumMultiples() !== IMultipleFormField::NO_MAXIMUM_MULTIPLES - && \count($this->getValue()) > $this->getMaximumMultiples() + && \count($usernames) > $this->getMaximumMultiples() ) { $this->addValidationError(new FormFieldValidationError( 'maximumMultiples', 'wcf.form.field.user.error.maximumMultiples', [ 'maximumCount' => $this->getMaximumMultiples(), - 'count' => \count($this->getValue()), + 'count' => \count($usernames), ] )); - } 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] - )); - } - } - } elseif ($this->getValue() !== '') { - $user = UserProfile::getUserProfileByUsername($this->getValue()); - - if ($user === null) { - $this->addValidationError(new FormFieldValidationError( - 'nonExistent', - 'wcf.form.field.user.error.nonExistent' - )); - } else { - $this->users[] = $user; } } }