diff --git a/wcfsetup/install/files/lib/event/page/ContactFormSpamChecking.class.php b/wcfsetup/install/files/lib/event/page/ContactFormSpamChecking.class.php index 718329b2496..b744442090b 100644 --- a/wcfsetup/install/files/lib/event/page/ContactFormSpamChecking.class.php +++ b/wcfsetup/install/files/lib/event/page/ContactFormSpamChecking.class.php @@ -21,6 +21,7 @@ final class ContactFormSpamChecking implements IInterruptableEvent public function __construct( public readonly string $email, public readonly string $ipAddress, + public readonly array $messages, ) { } } diff --git a/wcfsetup/install/files/lib/form/ContactForm.class.php b/wcfsetup/install/files/lib/form/ContactForm.class.php index 6a8fda89669..3e3547bc51c 100644 --- a/wcfsetup/install/files/lib/form/ContactForm.class.php +++ b/wcfsetup/install/files/lib/form/ContactForm.class.php @@ -2,6 +2,7 @@ namespace wcf\form; +use wcf\data\contact\option\ContactOption; use wcf\data\contact\option\ContactOptionAction; use wcf\data\contact\recipient\ContactRecipientList; use wcf\event\page\ContactFormSpamChecking; @@ -170,9 +171,29 @@ public function validate() } } + $this->handleSpamCheck(); + } + + private function handleSpamCheck(): void + { + $messages = []; + foreach ($this->optionHandler->getOptions() as $option) { + $object = $option['object']; + \assert($object instanceof ContactOption); + if (!$object->isMessage || !$object->getOptionValue()) { + continue; + } + + $messages[] = $object->getOptionValue(); + if ($object->optionType === 'date' && !$object->getOptionValue()) { + continue; + } + } + $spamCheckEvent = new ContactFormSpamChecking( $this->email, UserUtil::getIpAddress(), + $messages, ); EventHandler::getInstance()->fire($spamCheckEvent); if ($spamCheckEvent->defaultPrevented()) {