src/Controller/FrontEndController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Service\UserService;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  11. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  12. use App\Entity\UIPage;
  13. // use App\Entity\Category;
  14. use App\Entity\CartCoupon;
  15. use App\Entity\Company;
  16. use App\Entity\Image;
  17. use App\Entity\Testimony;
  18. use App\Entity\Product;
  19. use App\Entity\Pricing;
  20. use App\Entity\ProductSponsored;
  21. use App\Entity\ProductSponsoredCategory;
  22. use App\Entity\NewsLetterSubscriber;
  23. use App\Entity\CmsHomePage;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  26. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  27. use App\Form\NewsLetterSubscribeType;
  28. class FrontEndController extends AbstractController
  29. {
  30.     /**
  31.      * @var UserService
  32.      */
  33.     private $userServ;
  34.     public function __construct(SessionInterface $sessionUserService $userServ)
  35.     {
  36.         $this->userServ $userServ;
  37.         $this->session $session;
  38.     }
  39.     /**
  40.      * @Route("/connexion", name="ConnexionFrancais")
  41.      * Redirect the user to the right entry point depending of it's current locale
  42.      */
  43.     public function connexion(){
  44.     return $this->redirectToRoute('fos_user_security_login');
  45.     }
  46.     /**
  47.      * @Route("/inscription", name="InscriptionFrancais")
  48.      * Redirect the user to the right entry point depending of it's current locale
  49.      */
  50.     public function inscription(){
  51.     return $this->redirectToRoute('fos_user_registration_register');
  52.     }
  53.     /**
  54.      * @Route(
  55.      *      "/",
  56.      *      name="home",
  57.      * )
  58.      * @Template("frontend/homepage.html.twig")
  59.      */
  60.     public function home(UserService $userServEntityManagerInterface $emRequest $request){
  61.         if ($this->userServ->getAssociationUserIsBrowsing()){
  62.             return $this->redirectToRoute('companyAssociationList', [
  63.                 'urlName' => $this->userServ->getAssociationUserIsBrowsing()->getUrlName()
  64.             ]);
  65.         }
  66.          
  67.         $twigData = array();
  68.         $form null;
  69.         $CMSHomePage $em->getRepository(CmsHomePage::class)->findOneBy(["dataKey"=>"CMSHomePage"]);
  70.         if ($CMSHomePage) {
  71.           if (!empty($CMSHomePage->getDataValue())) {
  72.             $form json_decode($CMSHomePage->getDataValue(), true);
  73.           }
  74.         }
  75.         // if (!$form) {
  76.         //   $file = 'data/CMSHomePage.json';
  77.         //   if(file_exists($file)){
  78.         //     //File exists let's load
  79.         //     $rawData = file_get_contents($file);
  80.         //     $form= json_decode($rawData, true);
  81.         //
  82.         //   }else{
  83.         //     die('CMS: File missing');
  84.         //   }
  85.         // }
  86.         $form['producerOfTheWeek'] = $em->getRepository(Company::class)->findOneBy(
  87.           [
  88.             'id' => $form['producerOfTheWeek']
  89.           ]
  90.         );
  91.         $twigData['CMS'] = $form;
  92.         $twigData['testimony'] = $em->getRepository(Testimony::class)->getOneRandom();
  93.         $SponsoredItems = [];
  94.         $sponsored_products_per_category_limit 4;
  95.         $ProductSponsoredCategories $em->getRepository(ProductSponsoredCategory::class)->findAllFrontPage();
  96.        
  97.         foreach($ProductSponsoredCategories as $psc) {
  98.           $category $psc->getCategory();
  99.           $Products = [];
  100.           $_SponsoredProducts $em->getRepository(ProductSponsored::class)->findInSponsoredLimit($psc$sponsored_products_per_category_limit);
  101.           foreach($_SponsoredProducts as $SponsoredProduct) {
  102.             $_product $SponsoredProduct->getProduct();     
  103.             $Products[] = $_product;
  104.             
  105.           } 
  106.           
  107.          
  108.           if ($category && count($Products) < $sponsored_products_per_category_limit) {
  109.             $ExtraSponsoredProducts $em->getRepository(Product::class)->getProductsFromCategoryForFrontpage(
  110.               $category$sponsored_products_per_category_limit
  111.             );
  112.             foreach($ExtraSponsoredProducts as $ExtraSponsoredProduct) {
  113.               $Products[] = $ExtraSponsoredProduct;
  114.             }
  115.           }
  116.          
  117.           // Remove duplicate products
  118.           $_Products = [];
  119.           foreach($Products as $Product) {
  120.             $_Products[$Product->getId()] = $Product;
  121.           }
  122.           $Products $_Products;
  123.           shuffle($Products);
  124.           $SponsoredItems[] = array(
  125.             "SponsoredCategory" => $psc,
  126.             "Products" => $Products
  127.           );
  128.         }
  129.        
  130.         $twigData['SponsoredItems'] = $SponsoredItems;
  131.       
  132.         $productsOnSale $em->getRepository(Pricing::class)->findOnSaleFrontpage();
  133.         $allProductsOnSale = array();
  134.         foreach($productsOnSale as $p){
  135.             if($p->getDiscountProduct() && $p->getDiscountProduct()->isSalable()
  136.                 && !$p->getDiscountProduct()->getIsDisplayedInAssociationOnly()
  137.             ) {
  138.              if($p->getDiscountProduct()->getDeliveryType() == 0){
  139.               $allProductsOnSale[] = $p->getDiscountProduct();
  140.              }
  141.                 
  142.             }
  143.            
  144.         }
  145.         $twigData['allProductsOnSale'] = $allProductsOnSale;
  146.         /**********************************
  147.          * Let's add the subscribers form
  148.          **********************************/
  149.          if ($request->isMethod('post')) {
  150.            $posts $request->request->all();
  151.            if (isset($posts["action"])) {
  152.              if ($posts["action"] == "newsletter_subscribe") {
  153.                if (!empty($posts["newsletter_email"])) {
  154.                  $email $posts["newsletter_email"];
  155.                  if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
  156.                    $this->addFlash('error''Il y a un problème avec votre courriel!');
  157.                  } else {
  158.                    $subscriber = new NewsLetterSubscriber();
  159.                    $subscriber->setEmail($email);
  160.                    try {
  161.                      $em $this->getDoctrine()->getManager();
  162.                      $em->persist($subscriber);
  163.                      $em->flush();
  164.                      /*
  165.                      create 10% coupon
  166.                      */
  167.                      $coupon_code substr('C-'.md5(uniqid()), 012);
  168.                      $coupon = new CartCoupon();
  169.                      $coupon->setOneTimeOnly(true);
  170.                      $coupon->setType(0);
  171.                      $coupon->setAmount(10);
  172.                      $coupon->setCode($coupon_code);
  173.                      $coupon->setDateFrom(new \DateTime());
  174.                      $coupon->setDateTo(new \DateTime("+1 year"));
  175.                      $em->persist($coupon);
  176.                      $em->flush();
  177.                      $email_body =  $this->get('twig')->render('emails/welcomeNewsLetter.html.twig', array('coupon_code' => $coupon_code));
  178.                      $userServ->sendEmail('Votre coupon rabais de 10% chez Maturin!'$email_bodyfalse$email);
  179.                      $this->session->set('DO_NOT_DISPLAY_STARTERKITS'"TRUE");
  180.                      $this->addFlash('success''Vous êtes maintenant inscrit a notre infolettre!');
  181.                    }
  182.                    catch (\Exception $e ){
  183.                      if(stristr($e->getMessage(), 'duplicate')){
  184.                        $this->addFlash('error''Vous êtes déja inscrit!');
  185.                      } else {
  186.                        $this->addFlash('error''Une erreur c\'est produite: '.$e->getMessage());
  187.                      }
  188.                      return $this->redirectToRoute('home');
  189.                    }
  190.                  }
  191.                  return $this->redirectToRoute('home');
  192.                }
  193.              }
  194.            }
  195.          }
  196.         $subscriber = new NewsLetterSubscriber();
  197.         $form $this->createForm(NewsLetterSubscribeType::class, $subscriber);
  198.         $twigData['formSubscriber'] = $form->createView();
  199.         $form->handleRequest($request);
  200.         if($form->isSubmitted() && $form->isValid()){
  201.             $subscriber $form->getData();
  202.             if (!filter_var($subscriber->getEmail(), FILTER_VALIDATE_EMAIL)) {
  203.                $this->addFlash('error''Il y a un problème avec votre courriel!');
  204.                $this->addFlash('focus''form[name=news_letter_subscribe]');
  205.               return $twigData;
  206.             }
  207.             try {
  208.                 $em $this->getDoctrine()->getManager();
  209.                 $em->persist($subscriber);
  210.                 $em->flush();
  211.                 $this->addFlash('success''Vous êtes maintenant inscrit a notre infolettre!');
  212.                 $this->addFlash('focus''form[name=news_letter_subscribe]');
  213.             }
  214.             catch (\Exception $e ){
  215.                 if(stristr($e->getMessage(), 'duplicate')){
  216.                     $this->addFlash('error''Vous êtes déja inscrit!');
  217.                     $this->addFlash('focus''form[name=news_letter_subscribe]');
  218.                 }
  219.                 return $this->redirectToRoute('home');
  220.             }
  221.         }
  222.         $user$userServ->getuser();
  223.         $twigData['userPaidOrders']=false;
  224.         if($user){
  225.           $twigData['userPaidOrders'] = $user->getAllCartsProducts();
  226.         }
  227.         return $twigData;
  228.     }
  229. }