<?php
declare(strict_types=1);
namespace App\EventListener;
use App\EmailManager\SendMessageHistoryEmailManager;
use App\Entity\Channel\Channel;
use App\Entity\MessageHistory\MessageHistory;
use App\Entity\Order\Order;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
use Sylius\Component\Channel\Context\ChannelContextInterface;
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.
* @param RequestStack $requestStack
* @param OrderRepositoryInterface $orderRepository
* @param SendMessageHistoryEmailManager $sendMessageHistoryEmailManager
*/
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(intval($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 );
}
}