src/Controller/HomeController.php line 52

Open in your IDE?
  1. <?php
  2. // src/Controller/LuckyController.php
  3. namespace App\Controller;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Contracts\Translation\TranslatorInterface;
  9. use Symfony\Component\Validator\Validator\ValidatorInterface;
  10. use Symfony\Component\HttpFoundation\Cookie;
  11. use Symfony\Component\HttpFoundation\RedirectResponse;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  14. use FOS\RestBundle\Request\ParamFetcherInterface;
  15. use FOS\RestBundle\Controller\Annotations\QueryParam;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use App\Entity\RechargePack;
  18. use App\Entity\Country;
  19. use App\Entity\Region;
  20. use App\Entity\Rate;
  21. use App\Entity\CmsBanner;
  22. use App\Entity\Article;
  23. use App\Helper\SettingsHelper;
  24. use App\Helper\CountryHelper;
  25. class HomeController extends AbstractController
  26. {
  27.     protected $em;
  28.     
  29.     public function __construct(EntityManagerInterface $em){
  30.         $this->em $em;
  31.     }
  32.     /**
  33.     * @Route({
  34.      *     "en": "/home",
  35.      *     "es": "/inicio",
  36.      *     "de": "/start",
  37.      *     "fr": "/maison",
  38.      *     "it": "/inizio",
  39.      *     "pt": "/inicial",
  40.      *     "cn": "/home_cn",
  41.      *     "cn2": "/home_cn2",
  42.      *     "unset": "/"
  43.      * }, name="home", methods={"GET","HEAD"})
  44.      */    
  45.     public function index(Request $requestSettingsHelper $settingsHelperCountryHelper $countryHelper)
  46.     {
  47.         $repo $this->em->getRepository(RechargePack::class);
  48.         $repoRegion $this->em->getRepository(Region::class);
  49.         $repoBanners $this->em->getRepository(CmsBanner::class);
  50.         $countriesRepo $this->em->getRepository(Country::class);
  51.         $repoArticle $this->em->getRepository(Article::class);
  52.         $regionsLocal $repoRegion->findAllByAvailable(Region::DEPTH_LEVEL_COUNTRYnulltrue$request->getLocale());
  53.         $regions $repoRegion->findAllByAvailable(Region::DEPTH_LEVEL_CONTINENTALnulltrue$request->getLocale());
  54.         $rechargePacks $repo->findAllByAvailable(truenullfalsetruefalseRegion::DEPTH_LEVEL_GLOBAL$request->getLocale(), 'data');
  55.         $rechargePacksCallSms $repo->findAllByAvailable(truenullfalsetruefalseRegion::DEPTH_LEVEL_GLOBAL$request->getLocale(), 'call_sms');
  56.         $rechargePacksHighligthed $repo->findAllByAvailable(truenullfalsetruetruenull$request->getLocale(), 'data');
  57.         $rechargePacksHighligthedCallSms $repo->findAllByAvailable(truenullfalsetruetruenull$request->getLocale(), 'call_sms');
  58.         foreach($rechargePacks as &$rechargePack){
  59.             $region $rechargePack->getRegion();
  60.             $countries $countriesRepo->findByRegion($region$request->getLocale());    
  61.             $region->setTranslatedCountries($countries);                
  62.         }
  63.         foreach($rechargePacksCallSms as &$rechargePack){
  64.             $region $rechargePack->getRegion();
  65.             $countries $countriesRepo->findByRegion($region$request->getLocale());    
  66.             $region->setTranslatedCountries($countries);                
  67.         }
  68.         foreach($rechargePacksHighligthed as &$rechargePack){
  69.             $region $rechargePack->getRegion();
  70.             $countries $countriesRepo->findByRegion($region$request->getLocale());    
  71.             $region->setTranslatedCountries($countries);                
  72.         }
  73.         foreach($rechargePacksHighligthedCallSms as &$rechargePack){
  74.             $region $rechargePack->getRegion();
  75.             $countries $countriesRepo->findByRegion($region$request->getLocale());    
  76.             $region->setTranslatedCountries($countries);                
  77.         }
  78.         $priceValueInPesos $request->cookies->has('country') && $request->cookies->get('country') == 'ar';
  79.         $priceValueInDollars $request->cookies->has('country') && $request->cookies->get('country') == 'us';
  80.         $priceValueInMexicanPesos $request->cookies->has('country') && $request->cookies->get('country') == 'mx';
  81.         $simActivationPriceValue $settingsHelper->getSetting('simActivationPriceValue' . ($priceValueInPesos 'InPesos' : ($priceValueInDollars 'InDollars' '')));
  82.         $rateForEuroInPesos $settingsHelper->getSetting('rateForEuroInPesos');
  83.         $rateForEuroInDollars $settingsHelper->getSetting('rateForEuroInDollars');
  84.         $rateForEuroInMexicanPesos $settingsHelper->getSetting('rateForEuroInMexicanPesos');
  85.         $dedicatedDeviceUnitPriceInEuros $settingsHelper->getSetting('dedicatedDeviceUnitPriceInEuros') + $settingsHelper->getSetting('dedicatedDeviceShippingPriceInEuros');
  86.         $minPrice $repo->findMinPrice($rateForEuroInPesos$rateForEuroInDollars$rateForEuroInMexicanPesos$priceValueInPesos$priceValueInDollars$priceValueInMexicanPesos) + $simActivationPriceValue
  87.         $banners $repoBanners->getList($request->getLocale());
  88.         $countryCode $countryHelper->getCountry();
  89.         $country null;
  90.         if($countryCode){
  91.             $country $countriesRepo->findByCountry2Code($countryCode);
  92.             if($country){
  93.                 $countriesForArticles $repoArticle->getDistinctCountriesForArticles($request->getLocale());
  94.                 if(!in_array($country->getId(), array_map(function($c){ return $c['id']; }, $countriesForArticles)   )){
  95.                     $country null;
  96.                 }
  97.             }
  98.         }
  99.         $latestArticles $repoArticle->findLatestArticles($request->getLocale(), $country);
  100.         $response $this->render('jelly/home/index.html.twig', [
  101.             'rechargePacks' => $rechargePacks,        
  102.             'rechargePacksCallSms' => $rechargePacksCallSms,        
  103.             'rechargePacksHighligthed' => $rechargePacksHighligthed,        
  104.             'rechargePacksHighligthedCallSms' => $rechargePacksHighligthedCallSms,                    
  105.             'regionsLocal' => $regionsLocal,
  106.             'regions' => $regions,        
  107.             'simActivationPriceValue' => $simActivationPriceValue,
  108.             'minPrice' => $minPrice,
  109.             'dedicatedDeviceUnitPriceInEuros' => $dedicatedDeviceUnitPriceInEuros,
  110.             'banners' => $banners,
  111.             'latestArticles' => $latestArticles,
  112.             'countryId' => $country $country->getId() : null,
  113.         ]);
  114.         return $response;
  115.     }
  116.     /**
  117.      * @Route("/{country}", 
  118.      *  name="home_country", 
  119.      *  requirements={
  120.      *      "country": "ar|es|us|mx"
  121.      *  },
  122.      * )
  123.      */    
  124.     public function country(string $country)
  125.     {
  126.          $cookie = new Cookie(
  127.                   "country",                      // Cookie name
  128.                   $country,                                       // Cookie content
  129.                   (new \DateTime('now'))->modify("+365 day"), // Expiration date
  130.               );
  131.         $res = new RedirectResponse$this->generateUrl'home' )  ) ;
  132.         $res->headers->setCookie($cookie);
  133.         return $res;
  134.     }    
  135.     /**
  136.      * @Route("/set_language/{language}", 
  137.      *  name="home_language", 
  138.      *  requirements={
  139.      *      "country": "en|es|de|it||fr|pt|cn|cn2"
  140.      *  },
  141.      * )
  142.      */    
  143.     public function language(string $languageRequest $request)
  144.     {
  145.         $redirect $request->get('redirect') ? $request->get('redirect') : 'home';
  146.          $cookie = new Cookie(
  147.                   "language",                      // Cookie name
  148.                   $language,                                       // Cookie content
  149.                   (new \DateTime('now'))->modify("+365 day"), // Expiration date
  150.               );
  151.         $res = new RedirectResponse$this->generateUrl$redirect, ['_locale' => $language] )  ) ;
  152.         $res->headers->setCookie($cookie);
  153.         return $res;
  154.     }    
  155.     /**
  156.      * @Route("/qr",  name="qr")
  157.      */    
  158.     public function qr(Request $request)
  159.     {
  160.         $ua strtolower($request->headers->get('user-agent'));
  161.         if(stripos($ua,'android') !== false) {
  162.             return $this->redirect('https://play.google.com/store/apps/details?id=com.blkpos.beconnected');
  163.         }else if(stripos($ua,'iPhone') !== false || stripos($ua,'iPad') !== false) {
  164.             return $this->redirect('https://apps.apple.com/ar/app/beconnected/id1542143744?itsct=apps_box_link&itscg=30200');
  165.         }
  166.         return $this->redirectToRoute('home');
  167.     }    
  168.     /**
  169.     * @Route({
  170.      *     "en": "/select-country",
  171.      *     "es": "/seleccionar-pais",
  172.      *     "de": "/select-country-de",
  173.      *     "fr": "/select-country-fr",
  174.      *     "it": "/select-country-it",
  175.      *     "pt": "/select-country-pt",
  176.      *     "cn": "/select-country-cn",
  177.      *     "cn2": "/select-country-cn2",
  178.      *     "unset": "/select-country-nolang"
  179.      * }, name="country_select", methods={"GET","HEAD"})
  180.      */        
  181.     public function countrySelect(Request $requestCountryHelper $countryHelper){    
  182.         return $this->redirect('home');
  183.         $countryHelper->registerVisit(true);
  184.         return $this->render('jelly/country/index.html.twig', []);
  185.     }
  186. }