src/Controller/Api/RedirectController.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api;
  3. use App\Entity\Stop;
  4. use App\Entity\StopExt;
  5. use App\Entity\TrackClick;
  6. use App\Service\Client\ClientRepository;
  7. use App\Service\Client\LocaleRedirect;
  8. use App\Service\Client\RedirectParams;
  9. use App\Service\TrackingService;
  10. use App\Utils\StringUtils;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. /**
  18.  * @Route(options={"i18n"=false})
  19.  * Handles the redirection
  20.  */
  21. class RedirectController extends AbstractController {
  22.     /**
  23.      * Redirects to a company (agency/carrier) search page
  24.      * @Route("/{_locale}/redirect", name="redirectA")
  25.      * FIXME use ParamConverter
  26.      */
  27.     public function redirectToCompanyParamAction(Request $requestClientRepository $clientRepoTrackingService $trackingServiceTranslatorInterface $translatorEntityManagerInterface $em): Response {
  28.         $companyId $request->query->get('companyId');
  29.         $depStopExt $request->query->get('depStopExt'); 
  30.         $arrStopExt $request->query->get('arrStopExt');
  31.         $depStopId $request->query->get('depStopId');
  32.         $arrStopId $request->query->get('arrStopId');
  33.         $dateFrom $request->query->get('dateFrom');
  34.         $datetimeFrom $request->query->get('datetimeFrom');
  35.         $dateTo $request->query->get('dateTo') == "null" null $request->query->get('dateTo');
  36.         $cents $request->query->get('cents');
  37.         $link $request->query->get('link'); //has been encode with js encodeURIComponent and decoded fine by symfony. Escape encoding again using raw() in twig
  38.         $isDebug $request->query->get('debug') == 'true';
  39.         $sponsorised $request->query->get('sponsorised');
  40.         $adinsert $request->query->get('adinsert');
  41.         $type $request->query->get('type');
  42.         $currency $translator->trans('settings.defaultcountry.currency');
  43.         $full_locale $translator->trans('settings.defaultcountry.locale');
  44.         //Lazy loading of params
  45.         /** @var Stop $depStop */
  46.         $depStop $em->getReference(Stop::class, $depStopId);
  47.         /** @var Stop $arrStop */
  48.         $arrStop $em->getReference(Stop::class, $arrStopId);
  49.         /** @var StopExt $depStopExtObj */
  50.         $depStopExtObj $em->getReference(StopExt::class, ['code' => $depStopExt'companyId' => $companyId]);
  51.         /** @var StopExt $arrStopExtObj */
  52.         $arrStopExtObj $em->getReference(StopExt::class, ['code' => $arrStopExt'companyId' => $companyId]);
  53.         $c = new TrackClick();
  54.         $c->setCompanyId($companyId)->setDepStopId($depStop)->setArrStopId($arrStop)
  55.             ->setDepDatetime(new \DateTime($datetimeFrom ?: $dateFrom))
  56.             ->setCents((int)$cents)->setCurrency(null)
  57.             ->setIp($request->getClientIp())
  58.             ->setUa(substr($request->headers->get('User-Agent'), 0255))
  59.             ->setUrl(substr($request->getUri(), 0511));
  60.         $trackingService->createTrackClick($request->cookies$c);
  61.         $params = new RedirectParams();
  62.         $params->setCompanyId($companyId)
  63.             ->setDepStopExt($depStopExtObj)
  64.             ->setArrStopExt($arrStopExtObj)
  65.             ->setDepStop($depStop)
  66.             ->setArrStop($arrStop)
  67.             ->setDateFrom($dateFrom)
  68.             ->setDatetimeFrom($datetimeFrom)
  69.             ->setDateTo($dateTo)
  70.             ->setLink($link)
  71.             ->setSponsorised($sponsorised)
  72.             ->setAdinsert($adinsert)
  73.             ->setIsDebug($isDebug)
  74.             ->setLocale(new LocaleRedirect($full_locale))
  75.             ->setOldLocale($request->getLocale())   //TODO : remove all locale
  76.             ->setCents($cents)
  77.             ->setCurrency($currency)
  78.             ->setType($type);
  79.         $param = ['p' => $params];
  80.         $scraper $clientRepo->find($companyId); //TODO duplicated code
  81.         $scraper->redirect($params); //call if needed some code specific to provider
  82.         $response $this->render($scraper->getTwigRedirectView(),$param);
  83.         //add tracking cookie for companies using our tracking tool
  84.         if($scraper->isCbTracking()) {
  85.             $response->headers->setCookie(TrackingService::createCookie($companyId));
  86.         }
  87.         return $response;
  88.     }
  89.     /**
  90.      * Track a link simpler
  91.      * @Route("/redirect/url/{link}", name="redirect_link2", requirements={"link"=".+"})
  92.      * https://test-www.comparabus.com/redirect/url/https://www.flixbus.es
  93.      * http://local-www.comparabus.com:8000/redirect/url/https://www.flixbus.es
  94.      */
  95.     public function redirect2Action($link ''): Response {
  96.         return $this->redirectToLink($link);
  97.     }
  98.     /**
  99.      * Track a link
  100.      * @Route("/redirect/link", name="redirect_link")
  101.      * Eg: https://www.voyages-sncf.com/train/trajet/paris/lyon
  102.      * Tool is location src/App/Resources/views/Admin/tool/index.html.twig
  103.      */
  104.     public function redirectAction(Request $r): Response {
  105.         $link $r->query->get('link');
  106.         return $this->redirectToLink($link);
  107.     }
  108.     public function redirectToLink(string $link) : Response {
  109. //if the link doesn't have http we add it
  110.         if (!StringUtils::startsWith($link'http') && !StringUtils::startsWith($link'https')) {
  111.             $link 'https://' $link;
  112.         }
  113.         if (StringUtils::contains($link'voyages-sncf.com') || StringUtils::contains($link'oui.sncf') || StringUtils::contains($link'sncf-connect.com')) {
  114.             return $this->redirect('https://clk.tradedoubler.com/click?p=277240&a=2969116&g=23705060&url=https://v.oui.sncf/dynclick/vsc-fr/?etf-publisher=Comparabus&etf-name=Comp_Comparabrus_Core_0917&tduid=[td_guid]&eurl='urlencode($link) . "&PREX=A_COM_5307733AC2571");
  115.         } else if (StringUtils::contains($link'ouibus.com') || StringUtils::contains($link'blablabus.com')) { //fr.ouibus.com or www.ouibus.com
  116.             return $this->redirect('http://action.metaffiliation.com/trk.php?mclic=P484A755C169171&redir='urlencode($link));
  117.         } else if (StringUtils::contains($link'flixbus.')
  118.             || StringUtils::contains($link'flixcar.')) {
  119.             $dotlang null;
  120.             $tld StringUtils::substringAfterLast($link'.'); // /!\ won't work for toto.co.uk
  121.             switch ($tld) {
  122.                 case 'es':
  123.                 case 'fr':
  124.                 case 'de':
  125.                     $dotlang $tld;
  126.                     break;
  127.                 case 'en':
  128.                 default:
  129.                     $dotlang 'com';
  130.             }
  131.             $link .= StringUtils::contains($link'?') ? '&' '?';
  132.             return $this->redirect($link "wt_mc=paid.$dotlang.flixbus.meta.comparabus.comparabus_com.NS.ad&utm_medium=meta&utm_source=comparabus&utm_campaign=comparabus_com&irpid=420879&ircid=5610#Q0C36");
  133.         } else if (StringUtils::contains($link'eurolines.fr') || StringUtils::contains($link'isilines.fr')) {
  134.             return $this->redirect('http://tracking.publicidees.com/clic.php?progid=1555&partid=36266&dpl='urlencode($link));
  135.         } else if (StringUtils::contains($link'.thalys.')) {
  136.             //TODO remove promoid when offert is done with thalys
  137.             return $this->redirect('http://tracking.publicidees.com/clic.php?progid=4066&partid=36266&promoid=184900&dpl='urlencode($link));
  138.         } else if (StringUtils::contains($link'booking.com')) {
  139. //            if(ScraperUtil::contains($link, "&amp;")) die('error link');
  140.             $link .= StringUtils::contains($link'?') ? '&' '?';
  141.             return $this->redirect($link .'aid=1223947');
  142.         } else if (StringUtils::contains($link'ouigo.com')) {
  143.             return $this->redirect('https://clk.tradedoubler.com/click?p=234734&a=2777912&g=24513336&url='urlencode($link));
  144.         } else if (StringUtils::contains($link'autocars-lozere.com')) {
  145.             $link .= StringUtils::contains($link'?') ? '&' '?';
  146.             return $this->redirect($link .'utm_campaign=acquisition_aff_17&utm_content=recherche-1-2&utm_medium=comparateur&utm_source=comparabus');
  147.         } else if (StringUtils::contains($link'www.terravision.eu')) {
  148.             $link .= StringUtils::contains($link'?') ? '&' '?';
  149.             return $this->redirect($link .'af=2349235');
  150.         } else if (StringUtils::contains($link'driiveme.com')) {
  151.             $link .= StringUtils::contains($link'?') ? '&' '?';
  152.             return $this->redirect($link .'partnerId=46');
  153.         } else if (StringUtils::contains($link'blablacar.')) {
  154.             $link .= StringUtils::contains($link'?') ? '&' '?';
  155.             return $this->redirect($link.'utm_source=COMPARABUS&utm_medium=Partnership&utm_campaign=FR_COMPARABUS_PSGR_TrajetsAtoB_Rech&comuto_cmkt=FR_COMPARABUS_PSGR_TrajetsAtoB_Rech');
  156.         } else if (StringUtils::contains($link'izy.com')) {
  157.             return $this->redirect('https://tracking.publicidees.com/clic.php?partid=36298&progid=4700&promoid=0&url='urlencode($link));
  158.         } else {
  159.             //404; because external website uses that redirection for their content (SEO? hacking?)
  160.             throw $this->createNotFoundException('Redirection not found!');
  161.         }
  162.     }
  163.     /**
  164.      * Lets the webpage be verified by other website
  165.      * @Route("/2987522.html", name="check_page")))
  166.      */
  167.     public function checkPageAction(Request $r): Response {
  168.         return new Response();
  169.     }
  170. }