<?php
namespace App\EventSubscriber;
use App\Func;
use App\DTO\AppDTO;
use App\Service\Auth\Auth;
use App\Service\Cart\Cart;
use App\Event\OrderMakedEvent;
use App\Env;
use App\Event\OrderPayedEvent;
use App\Repository\DeliveryRepository;
use App\Repository\EsystemRepository;
use App\Repository\ProdRepository;
use App\Repository\UserRepository;
use App\Service\Mail\Mail;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Twig\Environment;
/** @package App\EventSubscriber */
class SendEmail implements EventSubscriberInterface
{
public function __construct(
private AppDTO $app,
private Cart $Cart,
private Auth $Auth,
private Security $security,
private EsystemRepository $esystemRepository,
private DeliveryRepository $deliveryRepository,
private UserRepository $userRepository,
private ProdRepository $prodRepository,
private Mail $mail,
private Environment $twig,
)
{
$this->Auth->setUser($security->getUser());
}
public function onOrderMaked(OrderMakedEvent $event): void
{
$order = $event->getOrder();
$user = $this->userRepository->find($order->getUser());
$cart = $this->Cart->loadFromOrder($order->getId());
$cartitems = $this->Cart->getCart();
foreach ($cartitems as $k => $v) {
$cartitems[$k]['prod'] = $this->prodRepository->find($v['id']);
}
$payment = $this->esystemRepository->find($order->getEsystem());
$delivery = $this->deliveryRepository->find($order->getDelivery());
$client_data = "<table><tr><td>" . $this->app->labels->get('name') . "</td><td>" . $order->getName() . "</td></tr><tr><td>Email</td><td>" . $order->getEmail() . "</td></tr><tr><td>" . $this->app->labels->get('phone') . "</td><td>" . Func::mkphone($order->getPhone()) . "</td></tr><tr><td>" . $this->app->labels->get('address') . "</td><td>" . $order->getAddr() . "</td></tr></table>";
$order_cont = $this->twig->render('cart/show.html.twig', [
'user' => $user,
'cart' => $cart,
'cart_items' => $cartitems,
'freedelivery' => $order->getDeliverycost() ? false : true,
'order' => $order,
]);
$params = array(
"order_id" => $order->getId(),
"order_time" => date("d.m.Y (G:i)", $order->getTstamp()),
"order" => $order_cont,
"client" => $client_data,
"payment" => $payment ? $payment->getCont() : '',
"delivery" => $delivery ? $delivery->getCont() : '',
"delivery_cost" => $order->getDeliverycost(),
"name" => $order->getName(),
"surname" => "",
"email" => $order->getEmail(),
"phone" => Func::mkphone($order->getPhone()),
"city" => $order->getCity(),
"address" => $order->getAddr(),
"needcall" => $order->isNeedcall(),
);
$this->mail->send($this->app->sett->get('sitename'), Env::mail_from(), $order->getEmail(), $this->app->labels->get("order_message_theme"), Func::mess_from_tmp($this->app->templates->get("order_message_template"), $params));
$this->mail->send($this->app->sett->get('sitename'), Env::mail_from(), $this->app->sett->get('admin_email'), $this->app->labels->get("order_message_theme"), Func::mess_from_tmp($this->app->templates->get("order_message_template"), $params));
}
public static function getSubscribedEvents(): array
{
return [
OrderMakedEvent::NAME => 'onOrderMaked',
];
}
}