Files
kupshop/bundles/KupShop/MessengerBundle/Handler/FinalEmailHandler.php
2025-08-02 16:30:27 +02:00

83 lines
2.6 KiB
PHP

<?php
namespace KupShop\MessengerBundle\Handler;
use KupShop\KupShopBundle\Util\Logging\SentryLogger;
use KupShop\KupShopBundle\Util\Mail\EmailSender;
use KupShop\MessengerBundle\Message\EmailMessage;
class FinalEmailHandler
{
use \DatabaseCommunication;
public function __construct(
protected SentryLogger $sentryLogger,
protected EmailSender $emailSender,
) {
}
protected bool $isLast = false;
public function __invoke(EmailMessage $message)
{
$result = true;
$resultMessage = 'OK';
try {
$service = $message->getEmailService();
$email = $message->getMessage();
// generate attachments
$email['attachments'] = array_merge($email['attachments'] ?? [], $service->getAttachments($email['template'] ?? []));
// finally send email
$msg = $this->emailSender->createMessage($email['from'], $email['to'], $email['subject'], $email['body'], 'text/html', $email['attachments'], $email['cc'] ?? null, $email['bcc'] ?? null, [], strtolower($email['type']), $email['id'] ?? 'not yet');
if ($this->emailSender->sendMessage($msg, !$this->isLast)) {
// update orders_history notified status only if it is not admin email (admin email should not be visible to users on FE)
if (!empty($email['id_history']) && empty($email['isAdminEmail'])) {
$this->updateSQL('orders_history', ['notified' => 1], ['id' => $email['id_history']]);
}
} else {
$result = false;
}
} catch (\Throwable $e) {
$this->sentryLogger->captureException($e);
$result = false;
$resultMessage = $e->getMessage();
}
// pokud je to posledni pokus odeslani a selze to, tak nastavime status notified na 5 (Selhalo)
if ($this->isLast) {
try {
if (!$result) {
if (!empty($email['id_history'])) {
$this->updateSQL('orders_history', ['notified' => 5], ['id' => $email['id_history']]);
}
}
} catch (\Exception $e) {
$this->sentryLogger->captureException($e);
}
}
return [
'status' => $result,
'message' => $resultMessage,
];
}
public function setIsLast($isLast)
{
$this->isLast = $isLast;
}
/**
* @required
*/
public function setSentryLogger(SentryLogger $sentryLogger)
{
$this->sentryLogger = $sentryLogger;
}
}