<?php
declare(strict_types=1);
namespace App\EventListener;
use App\EmailManager\SendMessageHistoryEmailManager;
use App\Entity\MessageHistory\MessageHistory;
use App\Entity\Order\Order;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
use Sylius\Component\Core\Repository\OrderRepositoryInterface;
use Symfony\Component\HttpFoundation\RequestStack;
final class MessageHistoryListener
{
private RequestStack $requestStack;
private OrderRepositoryInterface $orderRepository;
private SendMessageHistoryEmailManager $sendMessageHistoryEmailManager;
/**
* MessageHistoryListener constructor.
*/
public function __construct(RequestStack $requestStack, OrderRepositoryInterface $orderRepository, SendMessageHistoryEmailManager $sendMessageHistoryEmailManager)
{
$this->requestStack = $requestStack;
$this->orderRepository = $orderRepository;
$this->sendMessageHistoryEmailManager = $sendMessageHistoryEmailManager;
}
public function preCreate(ResourceControllerEvent $resourceControllerEvent)
{
$orderId = $this->requestStack->getCurrentRequest()->get('orderId');
if (null === $orderId) {
return;
}
/** @var Order $order */
$order = $this->orderRepository->find($orderId);
if (null === $order) {
return;
}
$customerId = $order->getCustomer()->getId();
/** @var MessageHistory $messageHistory */
$messageHistory = $resourceControllerEvent->getSubject();
$messageHistory->setOrderId((int) $orderId);
$messageHistory->setCustomerId($customerId);
}
public function postCreate(ResourceControllerEvent $resourceControllerEvent)
{
$orderId = $this->requestStack->getCurrentRequest()->get('orderId');
if (null === $orderId) {
return;
}
/** @var Order $order */
$order = $this->orderRepository->find($orderId);
if (null === $order) {
return;
}
/** @var MessageHistory $messageHistory */
$messageHistory = $resourceControllerEvent->getSubject();
$subject = $messageHistory->getSubject();
$content = $messageHistory->getMessage();
$customerEmail = $order->getCustomer()->getEmail();
$channel = $order->getChannel();
$contactEmail = $channel->getContactEmail();
$this->sendMessageHistoryEmailManager->sendMessageHistory($customerEmail, $contactEmail, $channel, $subject, $content);
}
}