<?php
namespace App\Controller;
use App\Entity\Article;
use App\Entity\Category;
use App\Entity\CategoryArticle;
use App\Entity\Extension;
use App\Entity\Cgv;
use App\Entity\InfoLine;
use App\Entity\Legal;
use App\Entity\Product;
use App\Entity\Promote;
use App\Entity\Question;
use App\Entity\Rgpd;
use App\Entity\Slider;
use App\Repository\CartRepository;
use App\Repository\InfoLineRepository;
use App\Repository\PromoteRepository;
use App\Repository\SliderRepository;
use App\Repository\ProductRepository;
use App\Entity\Cart;
use App\Repository\UserRepository;
use App\Service\Order;
use App\Service\Sitemap;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\Router;
use App\Entity\User;
use Symfony\Component\VarDumper\VarDumper;
class AppController extends AbstractController
{
/**
* @Route("/", name="homepage", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function indexAction(Request $request, EntityManagerInterface $em)
{
$request->getSession()->set('processOrder', false);
$articleRepo = $em->getRepository(Article::class);
$articles = $articleRepo->getArticlesList();
$articlesTome = $articleRepo->getArticleBy(CategoryArticle::CAT['tome'], null, 3);
$articlesLore = $articleRepo->getArticleBy(CategoryArticle::CAT['lore'], null, 3);
return $this->render('app/pages/index.html.twig', [
'articles' => $articles,
'articlesTome' => $articlesTome,
'articlesLore' => $articlesLore,
]);
}
/**
* @Route("/faq", name="faq", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function FAQAction(Request $request, EntityManagerInterface $em)
{
$questions = $em->getRepository(Question::class)->findBy([], ["sort" => "asc"]);
return $this->render('app/pages/faq.html.twig', ["questions" => $questions]);
}
/**
* @Route("/about", name="about", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function AboutAction(Request $request)
{
return $this->render('app/pages/about.html.twig');
}
/**
* @Route("/software/tome", name="software-tome", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function SoftwareTomeAction(Request $request, EntityManagerInterface $em)
{
$articleRepo = $em->getRepository(Article::class);
$articleTome = $articleRepo->getArticleBy(CategoryArticle::CAT['tome']);
return $this->render('app/pages/software-tome.html.twig', ['articlesTome' => $articleTome]);
}
/**
* @Route("/software/lore", name="software-lore", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function SoftwareLoreAction(Request $request, EntityManagerInterface $em)
{
$articleRepo = $em->getRepository(Article::class);
$articleLore = $articleRepo->getArticleBy(CategoryArticle::CAT['lore']);
return $this->render('app/pages/software-lore.html.twig', [
'articlesLore' => $articleLore,
]);
}
/**
* @Route("/", name="tunnel", host="get.amsel-suite.com", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function tunnelAction(Request $request)
{
return $this->redirect("https://www.amsel-suite.com/");
return $this->render('app/pages/tunnel.html.twig');
}
/**
* @Route("/legal", name="legal", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function legalAction(Request $request)
{
return $this->render('app/legal/legal.html.twig');
}
/**
* @Route("/rgpd", name="rgpd", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function rgpdAction(Request $request)
{
return $this->render('app/legal/rgpd.html.twig');
}
/**
* @Route("/cookies", name="cookies", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function cookiesAction(Request $request)
{
return $this->render('app/legal/cookies.html.twig');
}
/**
* @Route("/sitemap", name="sitemap", options={"sitemap": true, "priority": 1, "changefreq": "daily"})
*/
public function sitemapAction(Request $request, Sitemap $sitemapService)
{
/** @var Router $router */
$router = $this->container->get('router');
$collection = $router->getRouteCollection();
$allRoutes = $collection->all();
$urls = [];
/** @var \Symfony\Component\Routing\Route $route */
foreach ($allRoutes as $routeName => $route) {
if ($route->getOption('sitemap') == true) {
$formatedRoute = $sitemapService->generate($routeName, $route, $request->getLocale());
if (count($formatedRoute) > 0) {
if (array_key_exists('loc', $formatedRoute)) {
$urls[] = $formatedRoute;
} else {
foreach ($formatedRoute as $formRoute) {
$urls[] = $formRoute;
}
}
}
}
}
return $this->render('app/pages/sitemap.html.twig', ['urls' => $urls]);
}
/**
* @Route("/sitemap.{_format}", requirements={"_locale" = "en|fr", "_format" = "xml"}, name="sitemap_xml")
*/
public function sitemapXmlAction(Request $request, Sitemap $sitemapService)
{
/** @var Router $router */
$router = $this->container->get('router');
$collection = $router->getRouteCollection();
$allRoutes = $collection->all();
$urls = [];
/** @var \Symfony\Component\Routing\Route $route */
foreach ($allRoutes as $routeName => $route) {
if ($route->getOption('sitemap') == true) {
$formatedRoute = $sitemapService->generate($routeName, $route, $request->getLocale());
if (count($formatedRoute) > 0) {
if (array_key_exists('loc', $formatedRoute)) {
$urls[] = $formatedRoute;
} else {
foreach ($formatedRoute as $formRoute) {
$urls[] = $formRoute;
}
}
}
}
}
return $this->render('app/pages/sitemap.xml.twig', ['urls' => $urls]);
}
/**
* @Route("/extension/{key}.json", name="extension_json", options={"sitemap": false})
*/
public function extensionJsonAction(Request $request, $key, EntityManagerInterface $em)
{
$data = [];
if ($key == md5($request->getSchemeAndHttpHost())) {
$data["status"] = "OK";
$data["refresh"] = "1000";
$data["read"] = $this->generateUrl('notifications_readed', [], UrlGeneratorInterface::ABSOLUTE_URL);
$extension = $em->getRepository('App:Extension')->find(1);
if (!$extension) {
$extension = new Extension();
}
$total = 0;
if (in_array("order", $extension->getAlert())) {
$orders = $em->getRepository('App:EcommerceOrder')->findBy(array('notificationReadedAt' => null));
$data["data"]["orders"]["count"] = count($orders);
if (count($orders) <= 0) {
$data["data"]["orders"]["text"] = "Vous n'avez pas de nouvelles commandes";
} elseif (count($orders) == 1) {
$data["data"]["orders"]["text"] = "Vous avez 1 nouvelle commande";
} else {
$data["data"]["orders"]["text"] = "Vous avez " . count($orders) . " nouvelles commandes";
}
$data["data"]["orders"]["url"] = $this->generateUrl('admin_order_index', [], UrlGeneratorInterface::ABSOLUTE_URL);
$data["data"]["orders"]["icon"] = "money-bill-alt";
$total += count($orders);
}
if (in_array("contact", $extension->getAlert())) {
$contacts = $em->getRepository('App:Contact')->findBy(array('notificationReadedAt' => null));
$data["data"]["contacts"]["count"] = count($contacts);
if (count($contacts) <= 0) {
$data["data"]["contacts"]["text"] = "Vous n'avez pas de nouvelles demandes de contact";
} elseif (count($contacts) == 1) {
$data["data"]["contacts"]["text"] = "Vous avez 1 nouvelle demande de contact";
} else {
$data["data"]["contacts"]["text"] = "Vous avez " . count($contacts) . " nouvelles demandes de contact";
}
$data["data"]["contacts"]["url"] = $this->generateUrl('admin_contact_index', [], UrlGeneratorInterface::ABSOLUTE_URL);
$data["data"]["contacts"]["icon"] = "envelope";
$total += count($contacts);
}
$data["total"] = $total;
$data["host"] = $request->getHost();
$data["color"] = $this->getParameter("color");
} else {
$data["status"] = "KO";
}
$response = new JsonResponse($data);
$response->headers->set("Access-Control-Allow-Origin", "*");
return $response;
}
/**
* @Route("/notifications/readed", name="notifications_readed", options={"sitemap": false})
*/
public function notificationsReadedAction(Request $request, EntityManagerInterface $em)
{
$orders = $em->getRepository('App:EcommerceOrder')->findBy(array('notificationReadedAt' => null));
foreach ($orders as $order) {
$order->setNotificationReadedAt(new \DateTime());
$em->persist($order);
}
$contacts = $em->getRepository('App:Contact')->findBy(array('notificationReadedAt' => null));
foreach ($contacts as $contact) {
$contact->setNotificationReadedAt(new \DateTime());
$em->persist($contact);
}
$em->flush();
$response = new JsonResponse(["status" => "OK"]);
$response->headers->set("Access-Control-Allow-Origin", "*");
return $response;
}
/**
* @Route("/editor/page", name="admin_editor_page")
*/
public function editorPageAction(Request $request)
{
return $this->render('admin/editor/page.html.twig');
}
/**
* @Route("/editor/template", name="admin_editor_template")
*/
public function editorTemplateAction(Request $request)
{
return $this->render('admin/editor/newsletter.html.twig', [
'url' => $this->generateUrl('homepage', [], UrlGeneratorInterface::ABSOLUTE_URL),
'unsubscribe' => $this->generateUrl('homepage', [], UrlGeneratorInterface::ABSOLUTE_URL)
]);
}
/**
* @Route("/profile/validate-email/{token}", methods={"GET"}, name="validate_mail", options={"sitemap": false})
*/
public function validateEmailAction(Request $request, EntityManagerInterface $em, UserRepository $userRepository, $token)
{
$user = $userRepository->findOneBy(['mailToken' => $token]);
if ($user instanceof User) {
$user->setMailValid(true);
$em->persist($user);
$em->flush();
}
return $this->redirectToRoute('fos_user_profile_show');
}
/**
* @Route("/design-system", name="design-system", options={"sitemap": false, "priority": 1, "changefreq": "yearly"})
*/
public function designSystemAction(Request $request)
{
return $this->render('app/design-system.html.twig');
}
/**
* @Route("/preorder/{id}", name="preorder", options={"sitemap": true, "priority": 1, "changefreq": "yearly"})
*/
public function preorderAction(Request $request, $id)
{
$request->getSession()->set('processOrder', true);
return $this->redirectToRoute('add_to_cart', ['id' => $id]);
}
public function renderCart(Request $request, Order $orderService, CartRepository $cartRepository)
{
$orderService->updateCart($request);
/** @var Cart $cart */
$cart = $cartRepository->findOneBy(array(
"session" => User::getSessionId($request),
"ordered" => false
));
if ($cart instanceof Cart) {
$cartProducts = $cart->getCartProducts();
} else {
$cartProducts = null;
}
return $this->render('app/_inc/_cart.html.twig', ['cartProducts' => $cartProducts]);
}
/**
* @Route("/disable-popup", name="disable_popup", options={"sitemap": false, "priority": 1, "changefreq": "yearly"})
*/
public function disablePopupAction(Request $request)
{
$session = $request->getSession();
$session->set('disablePopup', 1);
return new JsonResponse(array('result' => 'OK'));
}
}