<?php
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use FOS\RestBundle\Request\ParamFetcherInterface;
use FOS\RestBundle\Controller\Annotations\QueryParam;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\RechargePack;
use App\Entity\Country;
use App\Entity\Region;
use App\Entity\Rate;
use App\Entity\CmsBanner;
use App\Entity\Article;
use App\Helper\SettingsHelper;
use App\Helper\CountryHelper;
class HomeController extends AbstractController
{
protected $em;
public function __construct(EntityManagerInterface $em){
$this->em = $em;
}
/**
* @Route({
* "en": "/home",
* "es": "/inicio",
* "de": "/start",
* "fr": "/maison",
* "it": "/inizio",
* "pt": "/inicial",
* "cn": "/home_cn",
* "cn2": "/home_cn2",
* "unset": "/"
* }, name="home", methods={"GET","HEAD"})
*/
public function index(Request $request, SettingsHelper $settingsHelper, CountryHelper $countryHelper)
{
$repo = $this->em->getRepository(RechargePack::class);
$repoRegion = $this->em->getRepository(Region::class);
$repoBanners = $this->em->getRepository(CmsBanner::class);
$countriesRepo = $this->em->getRepository(Country::class);
$repoArticle = $this->em->getRepository(Article::class);
$regionsLocal = $repoRegion->findAllByAvailable(Region::DEPTH_LEVEL_COUNTRY, null, true, $request->getLocale());
$regions = $repoRegion->findAllByAvailable(Region::DEPTH_LEVEL_CONTINENTAL, null, true, $request->getLocale());
$rechargePacks = $repo->findAllByAvailable(true, null, false, true, false, Region::DEPTH_LEVEL_GLOBAL, $request->getLocale(), 'data');
$rechargePacksCallSms = $repo->findAllByAvailable(true, null, false, true, false, Region::DEPTH_LEVEL_GLOBAL, $request->getLocale(), 'call_sms');
$rechargePacksHighligthed = $repo->findAllByAvailable(true, null, false, true, true, null, $request->getLocale(), 'data');
$rechargePacksHighligthedCallSms = $repo->findAllByAvailable(true, null, false, true, true, null, $request->getLocale(), 'call_sms');
foreach($rechargePacks as &$rechargePack){
$region = $rechargePack->getRegion();
$countries = $countriesRepo->findByRegion($region, $request->getLocale());
$region->setTranslatedCountries($countries);
}
foreach($rechargePacksCallSms as &$rechargePack){
$region = $rechargePack->getRegion();
$countries = $countriesRepo->findByRegion($region, $request->getLocale());
$region->setTranslatedCountries($countries);
}
foreach($rechargePacksHighligthed as &$rechargePack){
$region = $rechargePack->getRegion();
$countries = $countriesRepo->findByRegion($region, $request->getLocale());
$region->setTranslatedCountries($countries);
}
foreach($rechargePacksHighligthedCallSms as &$rechargePack){
$region = $rechargePack->getRegion();
$countries = $countriesRepo->findByRegion($region, $request->getLocale());
$region->setTranslatedCountries($countries);
}
$priceValueInPesos = $request->cookies->has('country') && $request->cookies->get('country') == 'ar';
$priceValueInDollars = $request->cookies->has('country') && $request->cookies->get('country') == 'us';
$priceValueInMexicanPesos = $request->cookies->has('country') && $request->cookies->get('country') == 'mx';
$simActivationPriceValue = $settingsHelper->getSetting('simActivationPriceValue' . ($priceValueInPesos ? 'InPesos' : ($priceValueInDollars ? 'InDollars' : '')));
$rateForEuroInPesos = $settingsHelper->getSetting('rateForEuroInPesos');
$rateForEuroInDollars = $settingsHelper->getSetting('rateForEuroInDollars');
$rateForEuroInMexicanPesos = $settingsHelper->getSetting('rateForEuroInMexicanPesos');
$dedicatedDeviceUnitPriceInEuros = $settingsHelper->getSetting('dedicatedDeviceUnitPriceInEuros') + $settingsHelper->getSetting('dedicatedDeviceShippingPriceInEuros');
$minPrice = $repo->findMinPrice($rateForEuroInPesos, $rateForEuroInDollars, $rateForEuroInMexicanPesos, $priceValueInPesos, $priceValueInDollars, $priceValueInMexicanPesos) + $simActivationPriceValue;
$banners = $repoBanners->getList($request->getLocale());
$countryCode = $countryHelper->getCountry();
$country = null;
if($countryCode){
$country = $countriesRepo->findByCountry2Code($countryCode);
if($country){
$countriesForArticles = $repoArticle->getDistinctCountriesForArticles($request->getLocale());
if(!in_array($country->getId(), array_map(function($c){ return $c['id']; }, $countriesForArticles) )){
$country = null;
}
}
}
$latestArticles = $repoArticle->findLatestArticles($request->getLocale(), $country);
$response = $this->render('jelly/home/index.html.twig', [
'rechargePacks' => $rechargePacks,
'rechargePacksCallSms' => $rechargePacksCallSms,
'rechargePacksHighligthed' => $rechargePacksHighligthed,
'rechargePacksHighligthedCallSms' => $rechargePacksHighligthedCallSms,
'regionsLocal' => $regionsLocal,
'regions' => $regions,
'simActivationPriceValue' => $simActivationPriceValue,
'minPrice' => $minPrice,
'dedicatedDeviceUnitPriceInEuros' => $dedicatedDeviceUnitPriceInEuros,
'banners' => $banners,
'latestArticles' => $latestArticles,
'countryId' => $country ? $country->getId() : null,
]);
return $response;
}
/**
* @Route("/{country}",
* name="home_country",
* requirements={
* "country": "ar|es|us|mx"
* },
* )
*/
public function country(string $country)
{
$cookie = new Cookie(
"country", // Cookie name
$country, // Cookie content
(new \DateTime('now'))->modify("+365 day"), // Expiration date
);
$res = new RedirectResponse( $this->generateUrl( 'home' ) ) ;
$res->headers->setCookie($cookie);
return $res;
}
/**
* @Route("/set_language/{language}",
* name="home_language",
* requirements={
* "country": "en|es|de|it||fr|pt|cn|cn2"
* },
* )
*/
public function language(string $language, Request $request)
{
$redirect = $request->get('redirect') ? $request->get('redirect') : 'home';
$cookie = new Cookie(
"language", // Cookie name
$language, // Cookie content
(new \DateTime('now'))->modify("+365 day"), // Expiration date
);
$res = new RedirectResponse( $this->generateUrl( $redirect, ['_locale' => $language] ) ) ;
$res->headers->setCookie($cookie);
return $res;
}
/**
* @Route("/qr", name="qr")
*/
public function qr(Request $request)
{
$ua = strtolower($request->headers->get('user-agent'));
if(stripos($ua,'android') !== false) {
return $this->redirect('https://play.google.com/store/apps/details?id=com.blkpos.beconnected');
}else if(stripos($ua,'iPhone') !== false || stripos($ua,'iPad') !== false) {
return $this->redirect('https://apps.apple.com/ar/app/beconnected/id1542143744?itsct=apps_box_link&itscg=30200');
}
return $this->redirectToRoute('home');
}
/**
* @Route({
* "en": "/select-country",
* "es": "/seleccionar-pais",
* "de": "/select-country-de",
* "fr": "/select-country-fr",
* "it": "/select-country-it",
* "pt": "/select-country-pt",
* "cn": "/select-country-cn",
* "cn2": "/select-country-cn2",
* "unset": "/select-country-nolang"
* }, name="country_select", methods={"GET","HEAD"})
*/
public function countrySelect(Request $request, CountryHelper $countryHelper){
return $this->redirect('home');
$countryHelper->registerVisit(true);
return $this->render('jelly/country/index.html.twig', []);
}
}