From 7f81d7eccd2285b3262c033954cb30ab73954fe5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim=20D=C3=BCsterhus?= Date: Wed, 25 Aug 2021 13:52:15 +0200 Subject: [PATCH] Clean up control and data flow in UserFormField::validate() --- .../field/user/UserFormField.class.php | 77 +++++++++++-------- 1 file changed, 43 insertions(+), 34 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 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; } } } -- 2.20.1