|
|
@@ -7,61 +7,117 @@ use Doctrine\ORM\EntityManagerInterface; |
|
|
|
use FOS\UserBundle\Model\UserManagerInterface; |
|
|
|
use Lc\ShopBundle\Context\NewsInterface; |
|
|
|
use Lc\ShopBundle\Context\UserInterface; |
|
|
|
use Lc\ShopBundle\Services\MailUtils; |
|
|
|
use Lc\ShopBundle\Services\UtilsManager; |
|
|
|
use Mailjet\MailjetSwiftMailer\SwiftMailer\MailjetTransport; |
|
|
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; |
|
|
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; |
|
|
|
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; |
|
|
|
use Symfony\Component\Security\Core\Security; |
|
|
|
use Symfony\Contracts\Translation\TranslatorInterface; |
|
|
|
|
|
|
|
class NewsController extends AdminController |
|
|
|
{ |
|
|
|
protected $parameterBag ; |
|
|
|
|
|
|
|
public function __construct(Security $security, UserManagerInterface $userManager, EntityManagerInterface $em, |
|
|
|
MailjetTransport $mailjetTransport, UtilsManager $utilsManager, TranslatorInterface $translator, |
|
|
|
ParameterBagInterface $parameterBag) |
|
|
|
{ |
|
|
|
$this->parameterBag = $parameterBag ; |
|
|
|
parent::__construct($security, $userManager, $em, $mailjetTransport, $utilsManager, $translator); |
|
|
|
} |
|
|
|
|
|
|
|
public function sendTestAction() |
|
|
|
{ |
|
|
|
$newsletter = $this->getNewsletter() ; |
|
|
|
$news = $this->getNews() ; |
|
|
|
|
|
|
|
$merchantCurrent = $this->merchantUtils->getMerchantCurrent() ; |
|
|
|
$merchantConfigEmailContact = $merchantCurrent->getMerchantConfig('email-contact'); |
|
|
|
|
|
|
|
if($merchantConfigEmailContact && strlen($merchantConfigEmailContact)) { |
|
|
|
$this->mailUtils->send([ |
|
|
|
MailUtils::SUBJECT => $news->getTitle(), |
|
|
|
MailUtils::TO_EMAIL => $merchantConfigEmailContact, |
|
|
|
MailUtils::TO_NAME => $this->parameterBag->get('app.site_name'), |
|
|
|
MailUtils::CONTENT_TEMPLATE => 'mail/news', |
|
|
|
MailUtils::CONTENT_DATA => [ |
|
|
|
'news' => $news, |
|
|
|
'newsletter' => $newsletter, |
|
|
|
'user' => $this->security->getUser() |
|
|
|
], |
|
|
|
]); |
|
|
|
|
|
|
|
$this->addFlash('success', 'Actualité de test envoyée à '.$merchantConfigEmailContact); |
|
|
|
} |
|
|
|
else { |
|
|
|
throw new \ErrorException("L'email de contact n'est pas défini pour ce Merchant.") ; |
|
|
|
} |
|
|
|
|
|
|
|
return $this->redirectToRoute('easyadmin', ['entity' => 'News', 'action' => 'list']) ; |
|
|
|
} |
|
|
|
|
|
|
|
public function sendAction() |
|
|
|
{ |
|
|
|
$idNews = $this->request->get('id') ; |
|
|
|
$newsletter = $this->getNewsletter() ; |
|
|
|
|
|
|
|
$newsletter = $this->merchantUtils->getMerchantCurrent()->getNewsletter() ; |
|
|
|
$news = $this->getNews() ; |
|
|
|
$users = $this->em->getRepository($this->em->getClassMetadata(UserInterface::class)->getName())->findAllByNewsletter($newsletter) ; |
|
|
|
|
|
|
|
$countUsers = count($users) ; |
|
|
|
$messages = []; |
|
|
|
|
|
|
|
if($newsletter) { |
|
|
|
$users = $this->em->getRepository($this->em->getClassMetadata(UserInterface::class)->getName())->findAllByNewsletter($newsletter) ; |
|
|
|
$countUsers = count($users) ; |
|
|
|
$messages = []; |
|
|
|
$news = $this->em->getRepository($this->em->getClassMetadata(NewsInterface::class)->getName())->find($idNews) ; |
|
|
|
if($news) { |
|
|
|
foreach ($users as $user) { |
|
|
|
$message = new \Swift_Message('[Place du Local] '.$news->getTitle()); |
|
|
|
$message->addTo($user->getEmail()) |
|
|
|
->addFrom($this->getParameter('app.noreply_email'), $this->getParameter('app.site_name')) |
|
|
|
->setBody($this->renderView('mail/news.html.twig', [ |
|
|
|
'message' => $news->getDescription(), |
|
|
|
'image' => $news->getImage(), |
|
|
|
'newsletter' => $newsletter, |
|
|
|
'user' => $user |
|
|
|
]), 'text/html'); |
|
|
|
array_push($messages, $message); |
|
|
|
} |
|
|
|
|
|
|
|
if($countUsers > 0) { |
|
|
|
$result = $this->mailjetTransport->bulkSend($messages); |
|
|
|
|
|
|
|
$this->addFlash('success', 'Actualité envoyée à '.count($users).' utilisateurs.'); |
|
|
|
|
|
|
|
$news->setIsSent(true) ; |
|
|
|
$this->em->persist($news); |
|
|
|
$this->em->flush() ; |
|
|
|
} |
|
|
|
else { |
|
|
|
$this->addFlash('error', 'Aucun utilisateur inscrit à la newsletter.'); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
throw new NotFoundHttpException('Actualité introuvable') ; |
|
|
|
} |
|
|
|
foreach ($users as $user) { |
|
|
|
$message = new \Swift_Message('[Place du Local] '.$news->getTitle()); |
|
|
|
$message->addTo($user->getEmail()) |
|
|
|
->addFrom($this->getParameter('app.noreply_email'), $this->getParameter('app.site_name')) |
|
|
|
->setBody($this->renderView('mail/news-html.html.twig', [ |
|
|
|
'news' => $news, |
|
|
|
'newsletter' => $newsletter, |
|
|
|
'user' => $user |
|
|
|
]), 'text/html'); |
|
|
|
array_push($messages, $message); |
|
|
|
} |
|
|
|
|
|
|
|
if($countUsers > 0) { |
|
|
|
$result = $this->mailjetTransport->bulkSend($messages); |
|
|
|
|
|
|
|
$this->addFlash('success', 'Actualité envoyée à '.count($users).' utilisateurs.'); |
|
|
|
|
|
|
|
$news->setIsSent(true) ; |
|
|
|
$this->em->persist($news); |
|
|
|
$this->em->flush() ; |
|
|
|
} |
|
|
|
else { |
|
|
|
throw new \ErrorException('Aucune newsletter n\'est lié à ce Merchant.') ; |
|
|
|
$this->addFlash('error', 'Aucun utilisateur inscrit à la newsletter.'); |
|
|
|
} |
|
|
|
|
|
|
|
return $this->redirectToRoute('easyadmin', ['entity' => 'News', 'action' => 'list']) ; |
|
|
|
} |
|
|
|
|
|
|
|
public function getNewsletter() |
|
|
|
{ |
|
|
|
$newsletter = $this->merchantUtils->getMerchantCurrent()->getNewsletter() ; |
|
|
|
if($newsletter) { |
|
|
|
return $newsletter ; |
|
|
|
} |
|
|
|
else { |
|
|
|
throw new \ErrorException('Aucune newsletter n\'est liée à ce Merchant.') ; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getNews() |
|
|
|
{ |
|
|
|
$idNews = $this->request->get('id') ; |
|
|
|
$news = $this->em->getRepository($this->em->getClassMetadata(NewsInterface::class)->getName())->find($idNews) ; |
|
|
|
|
|
|
|
if($news) { |
|
|
|
return $news ; |
|
|
|
} |
|
|
|
else { |
|
|
|
throw new NotFoundHttpException('Actualité introuvable') ; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |