Spaces:
No application file
No application file
File size: 2,647 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<?php
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);
}
}
}
|