diff --git a/Classes/Controller/FormController.php b/Classes/Controller/FormController.php index 0992d17f..7362ea28 100644 --- a/Classes/Controller/FormController.php +++ b/Classes/Controller/FormController.php @@ -21,6 +21,7 @@ use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder; use Typoheads\Formhandler\Definitions\FormhandlerExtensionConfig; use Typoheads\Formhandler\Definitions\Severity; +use Typoheads\Formhandler\Domain\Model\Config\Finisher\MailFinisherModel; use Typoheads\Formhandler\Domain\Model\Config\FormModel; use Typoheads\Formhandler\Domain\Model\Config\FormUpload; use Typoheads\Formhandler\Domain\Model\Config\FormUploadFile; @@ -501,6 +502,38 @@ public function formAction(): ResponseInterface { return $this->htmlResponse(); } + /** + * @param array $valuesToSet + */ + private function emailOverride(array $valuesToSet): void { + /** @var false|MailFinisherModel */ + $emailFinisher = array_filter($this->formConfig->finishers, function ($finisher) { + return $finisher instanceof MailFinisherModel; + })[0] ?? false; + + if (!$emailFinisher) { + return; + } + + // user mail conf + if (is_array($valuesToSet['user'] ?? false)) { + foreach ($valuesToSet['user'] as $key => $value) { + if (isset($emailFinisher->userMailConfig[strval($key)])) { + $emailFinisher->userMailConfig[strval($key)] = strval($value); + } + } + } + + // admin mail conf + if (is_array($valuesToSet['admin'] ?? false)) { + foreach ($valuesToSet['admin'] as $key => $value) { + if (isset($emailFinisher->adminMailConfig[strval($key)])) { + $emailFinisher->adminMailConfig[strval($key)] = strval($value); + } + } + } + } + // TODO: Change return type to new model of Response and Finisher name so headless knows which Finisher returned private function finishers(): ?Response { foreach ($this->formConfig->finishers as $finisher) { @@ -549,8 +582,8 @@ private function formSession(): void { $this->formConfig->step = intval( ( (array) ($this->parsedBody[FormhandlerExtensionConfig::EXTENSION_KEY] ?? []) - )['step'] ?? - $this->formConfig->session->get('step') ?: 1 + )['step'] + ?? $this->formConfig->session->get('step') ?: 1 ); $this->formConfig->formValues = (array) ($this->formConfig->session->get('formValues') ?: []); @@ -674,15 +707,29 @@ private function parseConditionBlocks(): void { foreach ($this->formConfig->conditionBlocks as $conditionBlock) { $evaluation = $utility->conditionEvaluate($conditionBlock, $this->formConfig); + if ($evaluation) { foreach ($conditionBlock->isTrue as $key => $value) { if (empty($value)) { continue; } - if ('disableErrorCheckFields' == $key) { - foreach (explode(',', $value) ?: [] as $disableErrorCheckField) { - $this->formConfig->disableErrorCheckFields[$disableErrorCheckField] = ''; - } + + switch ($key) { + case 'disableErrorCheckFields': + foreach (explode(',', strval($value)) ?: [] as $disableErrorCheckField) { + $this->formConfig->disableErrorCheckFields[$disableErrorCheckField] = ''; + } + + break; + + case 'emailOverride': + case 'emailOverwrite': + $this->emailOverride((array) $value); + + break; + + default: + break; } } } else { @@ -690,10 +737,23 @@ private function parseConditionBlocks(): void { if (empty($value)) { continue; } - if ('disableErrorCheckFields' == $key) { - foreach (explode(',', $value) ?: [] as $disableErrorCheckField) { - $this->formConfig->disableErrorCheckFields[$disableErrorCheckField] = ''; - } + + switch ($key) { + case 'disableErrorCheckFields': + foreach (explode(',', strval($value)) ?: [] as $disableErrorCheckField) { + $this->formConfig->disableErrorCheckFields[$disableErrorCheckField] = ''; + } + + break; + + case 'emailoverride': + case 'emailoverwrite': + $this->emailOverride((array) $value); + + break; + + default: + break; } } } diff --git a/Classes/Domain/Model/Config/Finisher/MailFinisherModel.php b/Classes/Domain/Model/Config/Finisher/MailFinisherModel.php index 5fd8851d..69ff3b0f 100644 --- a/Classes/Domain/Model/Config/Finisher/MailFinisherModel.php +++ b/Classes/Domain/Model/Config/Finisher/MailFinisherModel.php @@ -31,10 +31,10 @@ */ class MailFinisherModel extends AbstractFinisherModel { /** @var array{toEmail: string, subject: string, senderEmail: string, senderName: string, replyToEmail: string, replyToName: string, ccEmail: string, ccName: string, bccEmail: string, bccName: string, returnPath: string, templateMailHtml: string, templateMailText: string, attachments: array, embedFiles: array} */ - public readonly array $adminMailConfig; + public array $adminMailConfig; /** @var array{toEmail: string, subject: string, senderEmail: string, senderName: string, replyToEmail: string, replyToName: string, ccEmail: string, ccName: string, bccEmail: string, bccName: string, returnPath: string, templateMailHtml: string, templateMailText: string, attachments: array, embedFiles: array} */ - public readonly array $userMailConfig; + public array $userMailConfig; private Utility $utility; diff --git a/Classes/Domain/Model/Config/GeneralOptions/ConditionBlockModel.php b/Classes/Domain/Model/Config/GeneralOptions/ConditionBlockModel.php index 55104924..69cd37c8 100644 --- a/Classes/Domain/Model/Config/GeneralOptions/ConditionBlockModel.php +++ b/Classes/Domain/Model/Config/GeneralOptions/ConditionBlockModel.php @@ -115,10 +115,10 @@ class ConditionBlockModel { /** @var array> */ public readonly array $conditions; - /** @var array */ + /** @var array */ public readonly array $else; - /** @var array */ + /** @var array */ public readonly array $isTrue; /**