diff --git a/Classes/Domain/Form.php b/Classes/Domain/Form.php index 79baeda..0d3d006 100644 --- a/Classes/Domain/Form.php +++ b/Classes/Domain/Form.php @@ -296,6 +296,9 @@ public function calculateHiddenFields(string $content = null): array } } elseif (substr($name, -18) == '[__collectionName]' || substr($name, -41) === '[originallySubmittedResource][__identity]') { // ignore special fields for file uploads + } elseif (substr($name, -2) == '[]') { + // handle multiple file upload field + $formFieldNames[] = substr($name, 0, strlen($name) - 2); } else { $formFieldNames[] = $name; } diff --git a/Classes/Exception/InvalidArgumentException.php b/Classes/Exception/InvalidArgumentException.php new file mode 100644 index 0000000..a78648b --- /dev/null +++ b/Classes/Exception/InvalidArgumentException.php @@ -0,0 +1,19 @@ +options['attachments'] ?? null; if (is_array($attachments)) { - foreach ($attachments as $attachment) { - if (is_string($attachment)) { - $mail->attach(\Swift_Attachment::fromPath($attachment)); - } elseif (is_object($attachment) && ($attachment instanceof UploadedFileInterface)) { - $mail->attach(new \Swift_Attachment($attachment->getStream()->getContents(), $attachment->getClientFilename(), $attachment->getClientMediaType())); - } elseif (is_object($attachment) && ($attachment instanceof PersistentResource)) { - $stream = $attachment->getStream(); - if (!is_bool($stream)) { - $content = stream_get_contents($stream); - if (!is_bool($content)) { - $mail->attach(new \Swift_Attachment($content, $attachment->getFilename(), $attachment->getMediaType())); + try { + foreach ($attachments as $attachment) { + try { + $this->addAttachment($attachment, $mail); + } catch (InvalidArgumentException $e) { + // handle files of multiple file upload element + if (is_array($attachment)) { + foreach ($attachment as $uploadItem) { + $this->addAttachment($uploadItem, $mail); + } } } - } elseif (is_array($attachment) && isset($attachment['content']) && isset($attachment['name'])) { - $content = $attachment['content']; - $name = $attachment['name']; - $type = $attachment['type'] ?? MediaTypes::getMediaTypeFromFilename($name); - $mail->attach(new \Swift_Attachment($content, $name, $type)); } + } catch (InvalidArgumentException $e) { + } } } -} + + /** + * @param mixed $attachment + * @param SwiftMailerMessage $mail + * @throws InvalidArgumentException + */ + protected function addAttachment($attachment, SwiftMailerMessage $mail): void + { + if (is_string($attachment)) { + $mail->attach(\Swift_Attachment::fromPath($attachment)); + } elseif (is_object($attachment) && ($attachment instanceof UploadedFileInterface)) { + $mail->attach(new \Swift_Attachment($attachment->getStream()->getContents(), $attachment->getClientFilename(), $attachment->getClientMediaType())); + } elseif (is_object($attachment) && ($attachment instanceof PersistentResource)) { + $stream = $attachment->getStream(); + if (!is_bool($stream)) { + $content = stream_get_contents($stream); + if (!is_bool($content)) { + $mail->attach(new \Swift_Attachment($content, $attachment->getFilename(), $attachment->getMediaType())); + } + } + } elseif (is_array($attachment) && isset($attachment['content']) && isset($attachment['name'])) { + $content = $attachment['content']; + $name = $attachment['name']; + $type = $attachment['type'] ?? MediaTypes::getMediaTypeFromFilename($name); + $mail->attach(new \Swift_Attachment($content, $name, $type)); + } else { + throw new InvalidArgumentException('Can not handle $attachment.', 1664442569); + } + } +} \ No newline at end of file