Spaces:
No application file
No application file
| namespace Mautic\ReportBundle\Scheduler\Model; | |
| use Mautic\CoreBundle\Form\DataTransformer\ArrayStringTransformer; | |
| use Mautic\EmailBundle\Helper\MailHelper; | |
| use Mautic\ReportBundle\Entity\Scheduler; | |
| use Mautic\ReportBundle\Event\PermanentReportFileCreatedEvent; | |
| use Mautic\ReportBundle\Exception\FileTooBigException; | |
| use Mautic\ReportBundle\ReportEvents; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| class SendSchedule | |
| { | |
| private MailHelper $mailer; | |
| public function __construct( | |
| MailHelper $mailer, | |
| private MessageSchedule $messageSchedule, | |
| private FileHandler $fileHandler, | |
| private EventDispatcherInterface $eventDispatcher | |
| ) { | |
| $this->mailer = $mailer->getMailer(); | |
| } | |
| public function send(Scheduler $scheduler, $csvFilePath): void | |
| { | |
| $this->mailer->reset(true); | |
| $transformer = new ArrayStringTransformer(); | |
| $report = $scheduler->getReport(); | |
| $emails = $transformer->reverseTransform($report->getToAddress()); | |
| $subject = $this->messageSchedule->getSubject($report); | |
| $message = $this->messageSchedule->getMessageForAttachedFile($report); | |
| try { | |
| // Try to send the CSV file as an email attachement. | |
| $this->fileHandler->fileCanBeAttached($csvFilePath); | |
| $this->mailer->attachFile($csvFilePath, basename($csvFilePath), 'text/csv'); | |
| } catch (FileTooBigException) { | |
| $zipFilePath = $this->fileHandler->zipIt($csvFilePath); | |
| try { | |
| // Try to send the ZIP file as an email attachement. | |
| $this->fileHandler->fileCanBeAttached($zipFilePath); | |
| $this->mailer->attachFile($zipFilePath, basename($zipFilePath), 'application/zip'); | |
| } catch (FileTooBigException) { | |
| // Send the ZIP file as link in the email message. | |
| $this->fileHandler->moveZipToPermanentLocation($report, $zipFilePath); | |
| $message = $this->messageSchedule->getMessageForLinkedFile($report); | |
| $event = new PermanentReportFileCreatedEvent($report); | |
| $this->eventDispatcher->dispatch($event, ReportEvents::REPORT_PERMANENT_FILE_CREATED); | |
| } | |
| } | |
| $this->mailer->setTo($emails); | |
| $this->mailer->setSubject($subject); | |
| $this->mailer->setBody($message); | |
| $this->mailer->parsePlainText($message); | |
| $this->mailer->send(true); | |
| $this->fileHandler->delete($csvFilePath); | |
| if (!empty($zipFilePath)) { | |
| $this->fileHandler->delete($zipFilePath); | |
| } | |
| } | |
| } | |