<?php
namespace App\Controller\Widget;
use App\Event\ModeEvent;
use App\Service\Internal\CmsService;
use App\Service\Internal\HomePageService;
use App\Service\Internal\JourneyService;
use App\Service\Internal\UserService;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelInterface;
class WidgetController extends AbstractWidgetController
{
public function testWidget(
Request $request,
KernelInterface $kernel
): Response {
if($kernel->getEnvironment() !== 'dev'){
die;
}
$this->initServices($request);
//TODO: Temporaire, à supprimer quand la conf par réseau et environnement sera externalisée
$baseUrl = $_SERVER['REQUEST_SCHEME']. '://' . $_SERVER['SERVER_NAME'];
$journeys = null;
$directions = null;
$stopPoints = null;
$itineraryOptions = $this->networkService->getItineraryOptions();
$userPreferences = [];
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$userPreferences = $this->preferenceService->getUserPreferences();
}
$preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
$modeEvent = new ModeEvent();
$this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
$modes = $modeEvent->getDefaultModes();
$modesLayout = $modeEvent->getLayoutModes();
$activeWidgets = [
'journey' => 1,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
$activeTab = 'journey';
return $this->render('pages/widget/widget-test.html.twig', array(
'networkId' => $this->networkId,
'directions' => $directions,
'stopPoints' => $stopPoints,
'journeys' => $journeys,
'modes' => $modes,
'preferences' => $preferences,
'baseUrl' => $baseUrl,
'activeWidgets' => $activeWidgets,
'activeTab' => $activeTab,
'modesLayout' => $modesLayout
));
}
public function testWidgetMulti(
Request $request,
KernelInterface $kernel
): Response {
if($kernel->getEnvironment() !== 'dev'){
die;
}
$this->initServices($request);
//TODO: Temporaire, à supprimer quand la conf par réseau et environnement sera externalisée
$baseUrl = $_SERVER['REQUEST_SCHEME']. '://' . $_SERVER['SERVER_NAME'];
$journeys = null;
$directions = null;
$stopPoints = null;
$itineraryOptions = $this->networkService->getItineraryOptions();
$userPreferences = [];
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$userPreferences = $this->preferenceService->getUserPreferences();
}
$preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
$modeEvent = new ModeEvent();
$this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
$modes = $modeEvent->getDefaultModes();
$modesLayout = $modeEvent->getLayoutModes();
$activeWidgets = [
'journey' => 1,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
$activeTab = 'journey';
return $this->render('pages/widget/widget-test-multi.html.twig', array(
'networkId' => $this->networkId,
'directions' => $directions,
'stopPoints' => $stopPoints,
'journeys' => $journeys,
'modes' => $modes,
'preferences' => $preferences,
'baseUrl' => $baseUrl,
'activeWidgets' => $activeWidgets,
'activeTab' => $activeTab,
'modesLayout' => $modesLayout
));
}
public function widgetMultiRedirection(): Response
{
return $this->render('pages/widget/widget-multi-with-redirection.html.twig');
}
public function testWidgetRedirection(
Request $request,
KernelInterface $kernel
): Response {
if($kernel->getEnvironment() !== 'dev'){
die;
}
$this->initServices($request);
//TODO: Temporaire, à supprimer quand la conf par réseau et environnement sera externalisée
$baseUrl = $_SERVER['REQUEST_SCHEME']. '://' . $_SERVER['SERVER_NAME'];
$journeys = null;
$directions = null;
$stopPoints = null;
$itineraryOptions = $this->networkService->getItineraryOptions();
$userPreferences = [];
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$userPreferences = $this->preferenceService->getUserPreferences();
}
$preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
$modeEvent = new ModeEvent();
$this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
$modes = $modeEvent->getDefaultModes();
$modesLayout = $modeEvent->getLayoutModes();
$activeWidgets = [
'journey' => 1,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
$activeTab = 'journey';
return $this->render('pages/widget/widget-test-redirection.html.twig', array(
'networkId' => $this->networkId,
'directions' => $directions,
'stopPoints' => $stopPoints,
'journeys' => $journeys,
'modes' => $modes,
'preferences' => $preferences,
'baseUrl' => $baseUrl,
'activeWidgets' => $activeWidgets,
'activeTab' => $activeTab,
'modesLayout' => $modesLayout
));
}
public function index(Request $request): Response
{
$this->initServices($request);
$product = $request->get('product');
$this->baseUrl = strtok($request->getUri(), '?');
if (!isset($product)) {
return $this->redirectToRoute('widget.page.index', ['product' => 'place-journey']);
}
$istoken = 'INSTANTSYSTEMTEST';
$isInternal = $request->get('internal');
$target = $request->get('target');
$isRedirection = $request->get('redirection');
if ($isRedirection && $isInternal && empty($target)) {
$isRedirection = 'false';
}
$src = $this->baseUrl . '/' . $product . '?redirection=' . $isRedirection . '&internal=' . $isInternal . '&token=' . $istoken ;
if ('traffic' === $product) {
$fullList = $request->get('fullList', false);
$src .= '&fullList=' . $fullList;
}
if ('full' === $product) {
$except = $request->get('except');
if (!empty($except)) {
$src .= '&except=' . $except;
}
}
if (!empty($target)) {
$src .= '&target=' . $target;
}
$isPartner = $request->get('partner');
if (!empty($isPartner)) {
$src .= '&partner=' . $isPartner;
}
switch ($product) {
case 'place':
case 'place-journey':
case 'place-journey-map':
$wrapperSuffix = "Journey";
break;
case 'schedule':
case 'schedule-map':
$wrapperSuffix = "Schedule";
break;
case 'traffic':
$wrapperSuffix = "Traffic";
break;
case 'full':
$wrapperSuffix = "Full";
break;
case 'journey-booking':
$wrapperSuffix = "JourneyBooking";
break;
default:
$wrapperSuffix = "Journey";
}
return $this->render('pages/widget/script.html.twig', [
'src' => $src,
'product' => $product,
'wrapperSuffix' => $wrapperSuffix,
'isRedirection' => !empty($isRedirection) ? $isRedirection : '',
'isInternal' => !empty($isInternal) ? $isInternal : '',
'istoken' => !empty($istoken) ? $istoken : '',
]);
}
public function place(Request $request): Response
{
$this->initServices($request);
$isRedirection = $request->get('redirection');
$isInternal = $request->get('internal');
$target = $request->get('target', false);
$isPartner = $request->get('partner', false);
$isfid = $request->get('isfid');
$isfv = $request->get('isfv');
$istid = $request->get('istid');
$istv = $request->get('istv');
$widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
$this->saveXHeaders($request, $widgetCode);
if (empty($request->get('token'))) {
throw new InvalidArgumentException("The token is missing");
}
$modeEvent = new ModeEvent();
$this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
$modes = $modeEvent->getDefaultModes();
$modesLayout = $modeEvent->getLayoutModes();
$nbDayFuture = $this->networkService->getNbDayFuture();
$maxDate = new \DateTime('now');
$maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
$itineraryOptions = $this->networkService->getItineraryOptions();
$userPreferences = [];
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$userPreferences = $this->preferenceService->getUserPreferences();
}
$preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
$configTemplate = $this->render("includes/common/js-config.html.twig", [
'isWidget' => true,
'requestReferer' => $request->headers->get('referer'),
'default_latlon' => $this->networkService->getLatLon(),
'network_lat' => $this->networkService->getLat(),
'network_lon' => $this->networkService->getLon(),
'external' => $this->networkService->isExternalNetwork(),
'maxDate' => $maxDate->format('Y-d-m'),
'modes' => $modes,
'preferences' => $preferences,
'baseUrl' => $this->baseUrl,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
'widgetTarget' => !empty($target) ? $target : '',
'isfid' => !empty($isfid) ? $isfid : '',
'isfv' => !empty($isfv) ? $isfv : '',
'istid' => !empty($istid) ? $istid : '',
'istv' => !empty($istv) ? $istv : ''
])->getContent();
$activeWidgets = [
'journey' => 1,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
$activeTab = 'journey';
$widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
'isWidget' => true,
'widgetCode' => $widgetCode,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'modesLayout' => $modesLayout,
'modes' => $modes,
'preferences' => $preferences,
'departurePlace' => [
'id' => $isfid,
'value' => $isfv,
'latlon' => '',
'latitude' => '',
'longitude' => ''
],
'arrivalPlace' => [
'id' => $istid,
'value' => $istv,
'latlon' => '',
'latitude' => '',
'longitude' => ''
],
'activeWidgets' => $activeWidgets,
'activeTab' => $activeTab
])->getContent();
$widgetScript = $this->getWidgetScript($request);
$widgetCss = $this->getWidgetCss($request);
$rtlCss = $this->getRtlCss();
$hasMap = $this->hasMap($request);
return $this->render('modules/widget.js.twig', [
'baseUrl' => $this->baseUrl,
'newtorkId' => $this->networkId,
'config' => $configTemplate,
'wrapperSuffix' => 'Journey',
'widgetTemplate' => $widgetTemplate,
'widgetScript' => $widgetScript,
'widgetCss' => $widgetCss,
'rtlCss' => $rtlCss,
'hasMap' => $hasMap
]);
}
public function placeJourney(Request $request): Response
{
$this->initServices($request);
$isRedirection = $request->get('redirection');
$isInternal = $request->get('internal');
$target = $request->get('target');
$isPartner = $request->get('partner');
$isfid = $request->get('isfid');
$isfv = $request->get('isfv');
$istid = $request->get('istid');
$istv = $request->get('istv');
$widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
$this->saveXHeaders($request, $widgetCode);
if (empty($request->get('token'))) {
throw new InvalidArgumentException("The token is missing");
}
$modeEvent = new ModeEvent();
$this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
$modes = $modeEvent->getDefaultModes();
$modesLayout = $modeEvent->getLayoutModes();
$nbDayFuture = $this->networkService->getNbDayFuture();
$maxDate = new \DateTime('now');
$maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
$itineraryOptions = $this->networkService->getItineraryOptions();
$userPreferences = [];
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$userPreferences = $this->preferenceService->getUserPreferences();
}
$preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
$configTemplate = $this->render("includes/common/js-config.html.twig", [
'isWidget' => true,
'requestReferer' => $request->headers->get('referer'),
'default_latlon' => $this->networkService->getLatLon(),
'external' => $this->networkService->isExternalNetwork(),
'network_lat' => $this->networkService->getLat(),
'network_lon' => $this->networkService->getLon(),
'maxDate' => $maxDate->format('Y-d-m'),
'modes' => $modes,
'preferences' => $preferences,
'baseUrl' => $this->baseUrl,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'widgetTarget' => !empty($target) ? $target : '',
'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
'isfid' => !empty($isfid) ? $isfid : '',
'isfv' => !empty($isfv) ? $isfv : '',
'istid' => !empty($istid) ? $istid : '',
'istv' => !empty($istv) ? $istv : ''
])->getContent();
$activeWidgets = [
'journey' => 1,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
$activeTab = 'journey';
$widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
'isWidget' => true,
'widgetCode' => $widgetCode,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'modes' => $modes,
'modesLayout' => $modesLayout,
'preferences' => $preferences,
'departurePlace' => [
'id' => $isfid,
'value' => $isfv,
'latlon' => '',
'latitude' => '',
'longitude' => ''
],
'arrivalPlace' => [
'id' => $istid,
'value' => $istv,
'latlon' => '',
'latitude' => '',
'longitude' => ''
],
'activeWidgets' => $activeWidgets,
'activeTab' => $activeTab
])->getContent();
$widgetScript = $this->getWidgetScript($request);
$widgetCss = $this->getWidgetCss($request);
$rtlCss = $this->getRtlCss();
$hasMap = $this->hasMap($request);
return $this->render('modules/widget.js.twig', [
'baseUrl' => $this->baseUrl,
'newtorkId' => $this->networkId,
'wrapperSuffix' => 'Journey',
'config' => $configTemplate,
'widgetTemplate' => $widgetTemplate,
'widgetScript' => $widgetScript,
'widgetCss' => $widgetCss,
'rtlCss' => $rtlCss,
'hasMap' => $hasMap
]);
}
public function placeJourneyMap(Request $request): Response
{
$this->initServices($request);
$isRedirection = $request->get('redirection');
$isInternal = $request->get('internal');
$target = $request->get('target');
$isPartner = $request->get('partner');
$isfid = $request->get('isfid');
$isfv = $request->get('isfv');
$istid = $request->get('istid');
$istv = $request->get('istv');
$isflat = $request->get('isflat');
$isflon = $request->get('isflon');
$istlat = $request->get('istlat');
$istlon = $request->get('istlon');
$dt = $request->get('dt');
$at = $request->get('at');
$m = (null !== $request->get('m')) ? explode('-', strtoupper($request->get('m'))) : null;
$df = $request->get('df');
$ws = $request->get('ws');
$bs = $request->get('bs');
$a = $request->get('a');
$ad = $request->get('ad');
$datetimeOption = JourneyService::DATETIME_SELECT_NOW;
$dateValue = '';
$hourValue = '';
if (!empty($dt)) {
$dt = new \DateTime(str_replace(' ', '+' , $dt));
$datetimeOption = JourneyService::DATETIME_SELECT_LEAVE_AT;
$dateValue = $dt->format('Y-m-d');
$hourValue = $dt->format('H:i');
}
if (!empty($at)) {
$dt = new \DateTime(str_replace(' ', '+' , $at));
$datetimeOption = JourneyService::DATETIME_SELECT_ARRIVE_AT;
$dateValue = $dt->format('Y-m-d');
$hourValue = $dt->format('H:i');
}
$widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
$this->saveXHeaders($request, $widgetCode);
if (empty($request->get('token'))) {
throw new InvalidArgumentException("The token is missing");
}
$speedProfiles = [0 => 'SLOW', 1 => 'NORMAL', 2 => 'FAST'];
$itineraryOptions = $this->networkService->getItineraryOptions();
$userPreferences = [];
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$userPreferences = $this->preferenceService->getUserPreferences();
}
$preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
$excludedModesPreferences = !empty($preferences['tripPlanner']['excludedModes']) ? $preferences['tripPlanner']['excludedModes'] : [];
$modeEvent = new ModeEvent($m, $excludedModesPreferences);
$this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
$modes = $modeEvent->getDefaultModes();
$modesLayout = $modeEvent->getLayoutModes();
$nbDayFuture = $this->networkService->getNbDayFuture();
$maxDate = new \DateTime('now');
$maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
$preferences['tripPlanner']['excludedModes'] = $modeEvent->getExcludedModes();
$preferences['tripPlanner']['showAccessibility'] = !empty($df) ? filter_var($df, FILTER_VALIDATE_BOOLEAN) : $preferences['tripPlanner']['showAccessibility'];
$preferences['tripPlanner']['wheelchairAccessible'] = !empty($a) ? filter_var($a, FILTER_VALIDATE_BOOLEAN) : $preferences['tripPlanner']['wheelchairAccessible'];
$preferences['tripPlanner']['walkProfile'] = !empty($ws) ? $speedProfiles[$ws] : $preferences['tripPlanner']['walkProfile'];
$preferences['tripPlanner']['bikeProfile'] = !empty($bs) ? $speedProfiles[$bs] : $preferences['tripPlanner']['bikeProfile'];
$configParameters = [
'isWidget' => true,
'requestReferer' => $request->headers->get('referer'),
'widgetType' => 'journey',
'default_latlon' => $this->networkService->getLatLon(),
'network_lat' => $this->networkService->getLat(),
'network_lon' => $this->networkService->getLon(),
'external' => $this->networkService->isExternalNetwork(),
'maxDate' => $maxDate->format('Y-d-m'),
'modes' => $modes,
'preferences' => $preferences,
'baseUrl' => $this->baseUrl,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'widgetTarget' => !empty($target) ? $target : '',
'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
'isfid' => !empty($isfid) ? $isfid : '',
'isfv' => !empty($isfv) ? $isfv : '',
'istid' => !empty($istid) ? $istid : '',
'istv' => !empty($istv) ? $istv : '',
'isflat' => !empty($isflat) ? $isflat : '',
'isflon' => !empty($isflon) ? $isflon : '',
'istlat' => !empty($istlat) ? $istlat : '',
'istlon' => !empty($istlon) ? $istlon : '',
];
$configParameters = array_merge($configParameters, $this->getCustomMapParameters($request));
$configTemplate = $this->render("includes/common/js-config.html.twig", $configParameters)->getContent();
$activeWidgets = [
'journey' => 1,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
$activeTab = 'journey';
$widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
'isWidget' => true,
'widgetCode' => $widgetCode,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'modes' => $modes,
'modesLayout' => $modesLayout,
'preferences' => $preferences,
'departurePlace' => [
'id' => $isfid,
'value' => $isfv,
'latlon' => '',
'latitude' => '',
'longitude' => ''
],
'arrivalPlace' => [
'id' => $istid,
'value' => $istv,
'latlon' => '',
'latitude' => '',
'longitude' => ''
],
'activeWidgets' => $activeWidgets,
'activeTab' => $activeTab,
'datetimeOption'=> $datetimeOption,
'dateValue' => $dateValue,
'hourValue' => $hourValue
])->getContent();
$widgetScript = $this->getWidgetScript($request);
$widgetCss = $this->getWidgetCss($request);
$rtlCss = $this->getRtlCss();
$hasMap = $this->hasMap($request);
return $this->render('modules/widget.js.twig', [
'baseUrl' => $this->baseUrl,
'newtorkId' => $this->networkId,
'wrapperSuffix' => 'Journey',
'config' => $configTemplate,
'widgetTemplate' => $widgetTemplate,
'widgetScript' => $widgetScript,
'widgetCss' => $widgetCss,
'rtlCss' => $rtlCss,
'isRedirection' => isset($isRedirection) ? $isRedirection : false,
'hasMap' => $hasMap
]);
}
public function login(Request $request, UserService $userService): Response
{
$parameters = [];
$this->initServices($request);
$isRedirection = $request->get('redirection');;
$isInternal = $request->get('internal');
$target = $request->get('target');
$isPartner = $request->get('partner');
$widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
$this->saveXHeaders($request, $widgetCode);
$configTemplate = $this->render("includes/common/js-config.html.twig", [
'isWidget' => true,
'baseUrl' => $this->baseUrl,
'isRedirection' => !empty($isRedirection) ? $isRedirection : 'false',
'isInternal' => !empty($isInternal) ? $isInternal : 'false',
'widgetTarget' => !empty($target) ? $target : '',
'isPartner' => !empty($isPartner) ? $isPartner : 'false'
])->getContent();
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$user = $userService->myAccount();
if (isset($user->body) && isset($user->status) && $user->status === 200) {
$parameters['userData'] = $user->body;
}
} else {
$user = [];
}
$activeWidgets = [
'login' => 1,
'journey' => 0,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
$parameters['isWidget'] = true;
$parameters['isRedirection'] = !empty($isRedirection) ? $isRedirection : 'false';
$parameters['isInternal'] = !empty($isInternal) ? $isInternal : 'false';
$parameters['user'] = $user;
$parameters['activeWidgets'] = $activeWidgets;
// Account menu
$parameters['account_section_homepage'] = $this->getParameter('account.section_activation.homepage');
$parameters['account_module_common'] = $this->getParameter('account.module_activation.common');
$parameters['account_module_sim'] = $this->getParameter('account.module_activation.sim');
$parameters['account_module_ticketing'] = $this->getParameter('account.module_activation.ticketing');
$parameters['account_section_informations'] = $this->getParameter('account.section_activation.informations');
$parameters['account_section_addresses'] = $this->getParameter('account.section_activation.addresses');
$parameters['account_right_UpdateMail'] = $this->getParameter('account.right_update_mail');
$parameters['account_right_addAddress'] = $this->getParameter('account.right_add_address');
$parameters['account_section_favorites'] = $this->getParameter('account.section_activation.favorites');
$parameters['account_section_trip'] = $this->getParameter('account.section_activation.trip');
$parameters['account_section_beneficiaries'] = $this->getParameter('account.section_activation.beneficiaries');
$parameters['account_section_orders'] = $this->getParameter('account.section_activation.orders');
$parameters['account_section_cards'] = $this->getParameter('account.section_activation.cards');
$parameters['account_section_bank_account'] = $this->getParameter('account.section_activation.bank_account');
$parameters['account_section_mtickets'] = $this->getParameter('account.section_activation.mtickets');
$parameters['account_section_etickets'] = $this->getParameter('account.section_activation.etickets');
$parameters['account_section_fines'] = $this->getParameter('account.section_activation.fines');
$parameters['account_journey_booking'] = $this->getParameter('account.journey_booking');
$parameters['account_section_profiles'] = $this->getParameter('account.section_activation.profiles');
$widgetTemplate = $this->render("layouts/widget/widget.html.twig", $parameters)->getContent();
$widgetScript = $this->getWidgetScript($request);
$widgetCss = $this->getWidgetCss($request);
$rtlCss = $this->getRtlCss();
$hasMap = $this->hasMap($request);
return $this->render('modules/widget.js.twig', [
'baseUrl' => $this->baseUrl,
'parameters' => $parameters,
'wrapperSuffix' => 'Login',
'newtorkId' => $this->networkId,
'config' => $configTemplate,
'widgetTemplate' => $widgetTemplate,
'widgetScript' => $widgetScript,
'widgetCss' => $widgetCss,
'rtlCss' => $rtlCss,
'hasMap' => $hasMap
]);
}
public function journeyBooking(Request $request, UserService $userService, HomePageService $homePageService): Response
{
$parameters = [];
$this->initServices($request);
$isRedirection = $request->get('redirection');;
$isInternal = $request->get('internal');
$target = $request->get('target');
$isPartner = $request->get('partner');
$widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
$this->saveXHeaders($request, $widgetCode);
$configTemplate = $this->render("includes/common/js-config.html.twig", [
'isWidget' => true,
'baseUrl' => $this->baseUrl,
'isRedirection' => !empty($isRedirection) ? $isRedirection : 'false',
'isInternal' => !empty($isInternal) ? $isInternal : 'false',
'widgetTarget' => !empty($target) ? $target : '',
'isPartner' => !empty($isPartner) ? $isPartner : 'false'
])->getContent();
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$user = $userService->myAccount();
if (isset($user->body) && isset($user->status) && $user->status === 200) {
$parameters['userData'] = $user->body;
}
} else {
$user = [];
}
$parameters['isWidget'] = true;
$parameters['displayDisruptionWithAjax'] = true;
$parameters['isRedirection'] = !empty($isRedirection) ? $isRedirection : 'false';
$parameters['isInternal'] = !empty($isInternal) ? $isInternal : 'false';
$parameters['user'] = $user;
$wsResponse = $userService->myAccount();
$user = null;
if (!$wsResponse->isError()) {
$user = $wsResponse->body;
$parameters['user'] = $user;
}
$session = $request->getSession();
$session->set('context', 'SIM');
$session->set('php_session_id', $request->cookies->get('PHPSESSID'));
$parameters = $homePageService->getRenderParameters([], $parameters);
$activeWidgets = [
'journeyBooking' => 1,
'journey' => 0,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
if (!$this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$currentUrl = $this->generateUrl('account.sim.booking', array());
$activeWidgets = [
'loginForm' => 1,
'journey' => 0,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
$parameters['redirectionUrl'] = $currentUrl;
$parameters['fromReferer'] = true;
//return $this->redirectToRoute('user_login', ['isWidget' => true,'isModal' => false, 'redirectionUrl' => $currentUrl]);
}
$parameters['activeWidgets'] = $activeWidgets;
$parameters['isXmlHttpMode'] = true;
$parameters['displayFavorites'] = true;
$parameters['php_session_id'] = $session->get('php_session_id');
$currentDate = date('Y-m-d');
$parameters['currentDate'] = $currentDate;
$widgetTemplate = $this->render("layouts/widget/widget.html.twig", $parameters)->getContent();
$widgetScript = $this->getWidgetScript($request);
$widgetCss = $this->getWidgetCss($request);
$rtlCss = $this->getRtlCss();
$hasMap = $this->hasMap($request);
return $this->render('modules/widget.js.twig', [
'baseUrl' => $this->baseUrl,
'parameters' => $parameters,
'wrapperSuffix' => 'JourneyBooking',
'newtorkId' => $this->networkId,
'config' => $configTemplate,
'widgetTemplate' => $widgetTemplate,
'widgetScript' => $widgetScript,
'widgetCss' => $widgetCss,
'rtlCss' => $rtlCss,
'hasMap' => $hasMap
]);
}
public function schedule(Request $request)
{
$this->initServices($request);
$isRedirection = $request->get('redirection');
$isInternal = $request->get('internal');
$target = $request->get('target');
$isPartner = $request->get('partner');
$islid = $request->get('islid');
$isdir = $request->get('isdir');
$issaid = $request->get('issaid');
$issav = $request->get('issav');
$islocid = $request->get('islocid');
$isSubNetworks = $request->get('issubnetworks');
$widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
$this->saveXHeaders($request, $widgetCode);
if (empty($request->get('token'))) {
throw new InvalidArgumentException("The token is missing");
}
$modeEvent = new ModeEvent();
$this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
$modes = $modeEvent->getDefaultModes();
$modesLayout = $modeEvent->getLayoutModes();
$nbDayFuture = $this->networkService->getNbDayFuture();
$maxDate = new \DateTime('now');
$maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
$configTemplate = $this->render("includes/common/js-config.html.twig", [
'isWidget' => true,
'requestReferer' => $request->headers->get('referer'),
'default_latlon' => $this->networkService->getLatLon(),
'network_lat' => $this->networkService->getLat(),
'network_lon' => $this->networkService->getLon(),
'external' => $this->networkService->isExternalNetwork(),
'maxDate' => $maxDate->format('Y-d-m'),
'modes' => $modes,
'baseUrl' => $this->baseUrl,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'widgetTarget' => !empty($target) ? $target : '',
'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
'islid' => !empty($islid) ? $islid : '',
'isdir' => !empty($isdir) ? $isdir : '',
'issaid' => !empty($issaid) ? $issaid : '',
'issav' => !empty($issav) ? $issav : '',
'islocid' => !empty($islocid) ? $islocid : '',
'issubnetworks' => !empty($isSubNetworks) ? $isSubNetworks : ''
])->getContent();
$activeWidgets = [
'journey' => 0,
'schedule' => 1,
'traffic' => 0,
'linesAndPoi' => 0,
];
$activeTab = 'schedule';
$widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
'isWidget' => true,
'widgetCode' => $widgetCode,
'default_latlon' => $this->networkService->getLatLon(),
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'modes' => $modes,
'modesLayout' => $modesLayout,
'activeWidgets' => $activeWidgets,
'activeTab' => $activeTab
])->getContent();
$widgetScript = $this->getWidgetScript($request);
$widgetCss = $this->getWidgetCss($request);
$rtlCss = $this->getRtlCss();
$hasMap = $this->hasMap($request);
return $this->render('modules/widget.js.twig', [
'baseUrl' => $this->baseUrl,
'newtorkId' => $this->networkId,
'wrapperSuffix' => 'Schedule',
'config' => $configTemplate,
'widgetTemplate' => $widgetTemplate,
'widgetScript' => $widgetScript,
'widgetCss' => $widgetCss,
'rtlCss' => $rtlCss,
'hasMap' => $hasMap
]);
}
public function traffic(Request $request, HomePageService $homePageService): Response
{
$this->initServices($request);
$isRedirection = $request->get('redirection');;
$isInternal = $request->get('internal');
$target = $request->get('target');
$isPartner = $request->get('partner');
$isSubNetworks = $request->get('issubnetworks');
$widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
$this->saveXHeaders($request, $widgetCode);
if (empty($request->get('token'))) {
throw new InvalidArgumentException("The token is missing");
}
$configTemplate = $this->render("includes/common/js-config.html.twig", [
'isWidget' => true,
'default_latlon' => $this->networkService->getLatLon(),
'network_lat' => $this->networkService->getLat(),
'network_lon' => $this->networkService->getLon(),
'external' => $this->networkService->isExternalNetwork(),
'baseUrl' => $this->baseUrl,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'widgetTarget' => !empty($target) ? $target : '',
'isPartner' => !empty($isPartner) ? $isPartner : 'false',
'issubnetworks' => !empty($isSubNetworks) ? $isSubNetworks : ''
])->getContent();
$activeWidgets = [
'journey' => 0,
'schedule' => 0,
'traffic' => 1,
'linesAndPoi' => 0,
];
$parameters = [];
$parameters['issubnetworks'] = $isSubNetworks;
$homePageService->getDisruption($parameters);
$scheduleFavorites = [];
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$scheduleFavorites = $this->favoritesManager->getSchedules([], true);
}
$parameters['scheduleFavorites'] = $scheduleFavorites ?? [];
$parameters['lineFavorites'] = [];
if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
$parameters['lineFavorites'] = $this->favoritesManager->getLines([], true);
}
$activeTab = 'traffic';
$parameters['fullList'] = $request->get('fullList', false);
$parameters['isWidget'] = true;
$parameters['default_latlon'] = $this->networkService->getLatLon();
$parameters['isRedirection'] = !empty($isRedirection) ? $isRedirection : 'false';
$parameters['isInternal'] = !empty($isInternal) ? $isInternal : 'false';
$parameters['activeWidgets'] = $activeWidgets;
$parameters['activeTab'] = $activeTab;
$widgetTemplate = $this->render("layouts/widget/widget.html.twig", $parameters)->getContent();
$widgetScript = $this->getWidgetScript($request);
$widgetCss = $this->getWidgetCss($request);
$rtlCss = $this->getRtlCss();
$hasMap = $this->hasMap($request);
return $this->render('modules/widget.js.twig', [
'baseUrl' => $this->baseUrl,
'parameters' => $parameters,
'wrapperSuffix' => 'Traffic',
'newtorkId' => $this->networkId,
'config' => $configTemplate,
'widgetTemplate' => $widgetTemplate,
'widgetScript' => $widgetScript,
'widgetCss' => $widgetCss,
'rtlCss' => $rtlCss,
'hasMap' => $hasMap
]);
}
public function full(Request $request): Response
{
$widgetParameters = $this->getFullWidgetsParameters($request, false);
$widgetParameters['parameters']['activeWidgets'] = [
'journey' => 1,
'schedule' => 1,
'traffic' => ('traffic' === $request->get('except')) ? 0 : 1,
'linesAndPoi' => 0,
];
$widgetParameters['parameters']['activeTab'] = 'journey';
$widgetParameters['wrapperSuffix'] = 'Full';
$widgetParameters['widgetTemplate'] = $this->render("layouts/widget/widget.html.twig", $widgetParameters['parameters'])->getContent();
//Add split mode params
$widgetParameters['isSplit'] = false;
return $this->render('modules/widget.js.twig', $widgetParameters);
}
public function fullSplit(Request $request): Response
{
$widgetParameters = $this->getFullWidgetsParameters($request, true);
$widgetParameters['widgetTemplates'] = [];
//TODO : Make this array dynamic
$activeWidgets = [
'journey' => 1,
'schedule' => 1,
'traffic' => 1,
'linesAndPoi' => 0,
];
$widgetParameters['parameters']['activeWidgets'] = $activeWidgets;
$widgetParameters['parameters']['trafficMini'] = $request->get('trafficMini');
//Get templates for each enabled widget
foreach ($widgetParameters['parameters']['activeWidgets'] as $k => $v) {
if($v === 1) {
$widgetParameters['parameters']['activeWidgets'] = [
'journey' => 0,
'schedule' => 0,
'traffic' => 0
];
$widgetParameters['parameters']['activeWidgets'][$k] = 1;
$widgetParameters['parameters']['activeTab'] = $k;
$widgetParameters['widgetTemplates'][$k] = $this->render("layouts/widget/widget.html.twig", $widgetParameters['parameters'])->getContent();
}
}
//Restore activeWidget parameter
$widgetParameters['parameters']['activeWidgets'] = $activeWidgets;
//Add split mode params
$widgetParameters['isSplit'] = true;
return $this->render('modules/widget.js.twig', $widgetParameters);
}
public function scheduleMap(Request $request): Response
{
$this->initServices($request);
$isRedirection = $request->get('redirection');
$isInternal = $request->get('internal');
$target = $request->get('target');
$isPartner = $request->get('partner');
$islid = $request->get('islid');
$isdir = $request->get('isdir');
$issaid = $request->get('issaid');
$issav = $request->get('issav');
$islocid = $request->get('islocid');
$isSubNetworks = $request->get('issubnetworks');
$widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
$this->saveXHeaders($request, $widgetCode);
if (empty($request->get('token'))) {
throw new InvalidArgumentException("The token is missing");
}
$modeEvent = new ModeEvent();
$this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
$modes = $modeEvent->getDefaultModes();
$modesLayout = $modeEvent->getLayoutModes();
$nbDayFuture = $this->networkService->getNbDayFuture();
$maxDate = new \DateTime('now');
$maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
$configParameters = [
'isWidget' => true,
'requestReferer' => $request->headers->get('referer'),
'widgetType' => 'schedule',
'default_latlon' => $this->networkService->getLatLon(),
'network_lat' => $this->networkService->getLat(),
'network_lon' => $this->networkService->getLon(),
'external' => $this->networkService->isExternalNetwork(),
'maxDate' => $maxDate->format('Y-d-m'),
'modes' => $modes,
'baseUrl' => $this->baseUrl,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
'widgetTarget' => !empty($target) ? $target : '',
'islid' => !empty($islid) ? $islid : '',
'isdir' => !empty($isdir) ? $isdir : '',
'issaid' => !empty($issaid) ? $issaid : '',
'issav' => !empty($issav) ? $issav : '',
'islocid' => !empty($islocid) ? $islocid : '',
'issubnetworks' => !empty($isSubNetworks) ? $isSubNetworks : ''
];
$configParameters = array_merge($configParameters, $this->getCustomMapParameters($request));
$configTemplate = $this->render("includes/common/js-config.html.twig", $configParameters)->getContent();
$activeWidgets = [
'journey' => 0,
'schedule' => 1,
'traffic' => 0,
'linesAndPoi' => 0,
];
$activeTab = 'schedule';
$widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
'isWidget' => true,
'widgetCode' => $widgetCode,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'modes' => $modes,
'modesLayout' => $modesLayout,
'activeWidgets' => $activeWidgets,
'activeTab' => $activeTab
])->getContent();
$widgetScript = $this->getWidgetScript($request);
$widgetCss = $this->getWidgetCss($request);
$rtlCss = $this->getRtlCss();
$hasMap = $this->hasMap($request);
return $this->render('modules/widget.js.twig', [
'baseUrl' => $this->baseUrl,
'newtorkId' => $this->networkId,
'wrapperSuffix' => 'Schedule',
'config' => $configTemplate,
'widgetTemplate' => $widgetTemplate,
'widgetScript' => $widgetScript,
'widgetCss' => $widgetCss,
'rtlCss' => $rtlCss,
'hasMap' => $hasMap,
]);
}
public function banners(Request $request, CmsService $cmsService): Response
{
$parameters = [];
$this->initServices($request);
$isRedirection = $request->get('redirection');;
$isInternal = $request->get('internal');
$target = $request->get('target');
$isPartner = $request->get('partner');
$widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
$this->saveXHeaders($request, $widgetCode);
if (empty($request->get('token'))) {
throw new InvalidArgumentException("The token is missing");
}
$configTemplate = $this->render("includes/common/js-config.html.twig", [
'isWidget' => true,
'baseUrl' => $this->baseUrl,
'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
'widgetTarget' => !empty($target) ? $target : '',
'isPartner' => !empty($isPartner) ? $isPartner : 'false'
])->getContent();
$banners = $cmsService->getBanners();
$activeWidgets = [
'banners' => 1,
'journey' => 0,
'schedule' => 0,
'traffic' => 0,
'linesAndPoi' => 0,
];
$parameters['isWidget'] = true;
$parameters['isRedirection'] = !empty($isRedirection) ? $isRedirection : 'false';
$parameters['isInternal'] = !empty($isInternal) ? $isInternal : 'false';
$parameters['banners'] = $banners;
$parameters['activeWidgets'] = $activeWidgets;
$widgetTemplate = $this->render("layouts/widget/widget.html.twig", $parameters)->getContent();
$widgetScript = $this->getWidgetScript($request);
$widgetCss = $this->getWidgetCss($request);
$rtlCss = $this->getRtlCss();
$hasMap = $this->hasMap($request);
return $this->render('modules/widget.js.twig', [
'baseUrl' => $this->baseUrl,
'parameters' => $parameters,
'wrapperSuffix' => 'Banners',
'newtorkId' => $this->networkId,
'config' => $configTemplate,
'widgetTemplate' => $widgetTemplate,
'widgetScript' => $widgetScript,
'widgetCss' => $widgetCss,
'rtlCss' => $rtlCss,
'hasMap' => $hasMap
]);
}
private function getCustomMapParameters(Request $request): array
{
$customMapParameters = [];
$iszoom = $request->get('iszoom');
if(!empty($iszoom) && is_numeric($iszoom)) {
$customMapParameters['customZoom'] = $iszoom;
}
$islat = $request->get('islat');
$islon = $request->get('islon');
if(!empty($islat) && is_numeric($islat) && !empty($islon) && is_numeric($islon)) {
$customMapParameters['islat'] = $islat;
$customMapParameters['islon'] = $islon;
$customMapParameters['customLatLon'] = '[' . $islat . ', ' . $islon . ']';
}
return $customMapParameters;
}
}