entityManager = $entityManager; $this->attachmentAccessChecker = $attachmentAccessChecker; $this->serviceContainer = $serviceContainer; } /** * Copy email attachments for re-using (e.g. in a forward email). * * @return Attachment[] * @throws NotFound * @throws Forbidden */ public function copyAttachments(string $id, FieldData $fieldData): array { /** @var ?Email $entity */ $entity = $this->serviceContainer ->get(Email::ENTITY_TYPE) ->getEntity($id); if (!$entity) { throw new NotFound(); } $this->attachmentAccessChecker->check($fieldData); $list = []; foreach ($entity->getAttachmentIdList() as $attachmentId) { $attachment = $this->copyAttachment($attachmentId, $fieldData); if ($attachment) { $list[] = $attachment; } } return $list; } private function copyAttachment(string $attachmentId, FieldData $fieldData): ?Attachment { /** @var ?Attachment $attachment */ $attachment = $this->entityManager ->getRDBRepositoryByClass(Attachment::class) ->getById($attachmentId); if (!$attachment) { return null; } $copied = $this->getAttachmentRepository()->getCopiedAttachment($attachment); $copied->set('parentType', $fieldData->getParentType()); $copied->set('relatedType', $fieldData->getRelatedType()); $copied->setTargetField($fieldData->getField()); $copied->setRole(Attachment::ROLE_ATTACHMENT); $this->getAttachmentRepository()->save($copied); return $copied; } private function getAttachmentRepository(): AttachmentRepository { /** @var AttachmentRepository */ return $this->entityManager->getRepositoryByClass(Attachment::class); } }