src/Controller/Widget/WidgetController.php line 173

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Widget;
  3. use App\Event\ModeEvent;
  4. use App\Model\PreferenceProfiles;
  5. use App\Service\Internal\CmsService;
  6. use App\Service\Internal\HomePageService;
  7. use App\Service\Internal\JourneyService;
  8. use App\Service\Internal\UserService;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\HttpKernel\KernelInterface;
  13. class WidgetController extends AbstractWidgetController
  14. {
  15. public function testWidget(
  16. Request $request,
  17. KernelInterface $kernel
  18. ): Response {
  19. if($kernel->getEnvironment() !== 'dev'){
  20. die;
  21. }
  22. $this->initServices($request);
  23. //TODO: Temporaire, à supprimer quand la conf par réseau et environnement sera externalisée
  24. $baseUrl = $_SERVER['REQUEST_SCHEME']. '://' . $_SERVER['SERVER_NAME'];
  25. $journeys = null;
  26. $directions = null;
  27. $stopPoints = null;
  28. $itineraryOptions = $this->networkService->getItineraryOptions();
  29. $userPreferences = [];
  30. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  31. $userPreferences = $this->preferenceService->getUserPreferences();
  32. }
  33. $preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
  34. $modeEvent = new ModeEvent();
  35. $this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
  36. $modes = $modeEvent->getDefaultModes();
  37. $modesLayout = $modeEvent->getLayoutModes();
  38. $activeWidgets = [
  39. 'journey' => 1,
  40. 'schedule' => 0,
  41. 'traffic' => 0,
  42. 'linesAndPoi' => 0,
  43. ];
  44. $activeTab = 'journey';
  45. return $this->render('pages/widget/widget-test.html.twig', array(
  46. 'networkId' => $this->networkId,
  47. 'directions' => $directions,
  48. 'stopPoints' => $stopPoints,
  49. 'journeys' => $journeys,
  50. 'modes' => $modes,
  51. 'preferences' => $preferences,
  52. 'baseUrl' => $baseUrl,
  53. 'activeWidgets' => $activeWidgets,
  54. 'activeTab' => $activeTab,
  55. 'modesLayout' => $modesLayout
  56. ));
  57. }
  58. public function testWidgetMulti(
  59. Request $request,
  60. KernelInterface $kernel
  61. ): Response {
  62. if($kernel->getEnvironment() !== 'dev'){
  63. die;
  64. }
  65. $this->initServices($request);
  66. //TODO: Temporaire, à supprimer quand la conf par réseau et environnement sera externalisée
  67. $baseUrl = $_SERVER['REQUEST_SCHEME']. '://' . $_SERVER['SERVER_NAME'];
  68. $journeys = null;
  69. $directions = null;
  70. $stopPoints = null;
  71. $itineraryOptions = $this->networkService->getItineraryOptions();
  72. $userPreferences = [];
  73. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  74. $userPreferences = $this->preferenceService->getUserPreferences();
  75. }
  76. $preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
  77. $modeEvent = new ModeEvent();
  78. $this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
  79. $modes = $modeEvent->getDefaultModes();
  80. $modesLayout = $modeEvent->getLayoutModes();
  81. $activeWidgets = [
  82. 'journey' => 1,
  83. 'schedule' => 0,
  84. 'traffic' => 0,
  85. 'linesAndPoi' => 0,
  86. ];
  87. $activeTab = 'journey';
  88. return $this->render('pages/widget/widget-test-multi.html.twig', array(
  89. 'networkId' => $this->networkId,
  90. 'directions' => $directions,
  91. 'stopPoints' => $stopPoints,
  92. 'journeys' => $journeys,
  93. 'modes' => $modes,
  94. 'preferences' => $preferences,
  95. 'baseUrl' => $baseUrl,
  96. 'activeWidgets' => $activeWidgets,
  97. 'activeTab' => $activeTab,
  98. 'modesLayout' => $modesLayout
  99. ));
  100. }
  101. public function widgetMultiRedirection(): Response
  102. {
  103. return $this->render('pages/widget/widget-multi-with-redirection.html.twig');
  104. }
  105. public function testWidgetRedirection(
  106. Request $request,
  107. KernelInterface $kernel
  108. ): Response {
  109. if($kernel->getEnvironment() !== 'dev'){
  110. die;
  111. }
  112. $this->initServices($request);
  113. //TODO: Temporaire, à supprimer quand la conf par réseau et environnement sera externalisée
  114. $baseUrl = $_SERVER['REQUEST_SCHEME']. '://' . $_SERVER['SERVER_NAME'];
  115. $journeys = null;
  116. $directions = null;
  117. $stopPoints = null;
  118. $itineraryOptions = $this->networkService->getItineraryOptions();
  119. $userPreferences = [];
  120. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  121. $userPreferences = $this->preferenceService->getUserPreferences();
  122. }
  123. $preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
  124. $modeEvent = new ModeEvent();
  125. $this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
  126. $modes = $modeEvent->getDefaultModes();
  127. $modesLayout = $modeEvent->getLayoutModes();
  128. $activeWidgets = [
  129. 'journey' => 1,
  130. 'schedule' => 0,
  131. 'traffic' => 0,
  132. 'linesAndPoi' => 0,
  133. ];
  134. $activeTab = 'journey';
  135. return $this->render('pages/widget/widget-test-redirection.html.twig', array(
  136. 'networkId' => $this->networkId,
  137. 'directions' => $directions,
  138. 'stopPoints' => $stopPoints,
  139. 'journeys' => $journeys,
  140. 'modes' => $modes,
  141. 'preferences' => $preferences,
  142. 'baseUrl' => $baseUrl,
  143. 'activeWidgets' => $activeWidgets,
  144. 'activeTab' => $activeTab,
  145. 'modesLayout' => $modesLayout
  146. ));
  147. }
  148. public function index(Request $request): Response
  149. {
  150. $this->initServices($request);
  151. $product = $request->get('product');
  152. $this->baseUrl = strtok($request->getUri(), '?');
  153. if (!isset($product)) {
  154. return $this->redirectToRoute('widget.page.index', ['product' => 'place-journey']);
  155. }
  156. $istoken = 'INSTANTSYSTEMTEST';
  157. $isInternal = $request->get('internal');
  158. $target = $request->get('target');
  159. $isRedirection = $request->get('redirection');
  160. if ($isRedirection && $isInternal && empty($target)) {
  161. $isRedirection = 'false';
  162. }
  163. $src = $this->baseUrl . '/' . $product . '?redirection=' . $isRedirection . '&internal=' . $isInternal . '&token=' . $istoken ;
  164. if ('traffic' === $product) {
  165. $fullList = $request->get('fullList', false);
  166. $src .= '&fullList=' . $fullList;
  167. }
  168. if ('full' === $product) {
  169. $except = $request->get('except');
  170. if (!empty($except)) {
  171. $src .= '&except=' . $except;
  172. }
  173. }
  174. if (!empty($target)) {
  175. $src .= '&target=' . $target;
  176. }
  177. $isPartner = $request->get('partner');
  178. if (!empty($isPartner)) {
  179. $src .= '&partner=' . $isPartner;
  180. }
  181. switch ($product) {
  182. case 'place':
  183. case 'place-journey':
  184. case 'place-journey-map':
  185. $wrapperSuffix = "Journey";
  186. break;
  187. case 'schedule':
  188. case 'schedule-map':
  189. $wrapperSuffix = "Schedule";
  190. break;
  191. case 'traffic':
  192. $wrapperSuffix = "Traffic";
  193. break;
  194. case 'full':
  195. $wrapperSuffix = "Full";
  196. break;
  197. case 'journey-booking':
  198. $wrapperSuffix = "JourneyBooking";
  199. break;
  200. }
  201. return $this->render('pages/widget/script.html.twig', [
  202. 'src' => $src,
  203. 'product' => $product,
  204. 'wrapperSuffix' => $wrapperSuffix,
  205. 'isRedirection' => !empty($isRedirection) ? $isRedirection : '',
  206. 'isInternal' => !empty($isInternal) ? $isInternal : '',
  207. 'istoken' => !empty($istoken) ? $istoken : '',
  208. ]);
  209. }
  210. public function place(Request $request): Response
  211. {
  212. $this->initServices($request);
  213. $isRedirection = $request->get('redirection');
  214. $isInternal = $request->get('internal');
  215. $target = $request->get('target', false);
  216. $isPartner = $request->get('partner', false);
  217. $isfid = $request->get('isfid');
  218. $isfv = $request->get('isfv');
  219. $istid = $request->get('istid');
  220. $istv = $request->get('istv');
  221. $widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
  222. $this->saveXHeaders($request, $widgetCode);
  223. if (empty($request->get('token'))) {
  224. throw new InvalidArgumentException("The token is missing");
  225. }
  226. $modeEvent = new ModeEvent();
  227. $this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
  228. $modes = $modeEvent->getDefaultModes();
  229. $modesLayout = $modeEvent->getLayoutModes();
  230. $nbDayFuture = $this->networkService->getNbDayFuture();
  231. $maxDate = new \DateTime('now');
  232. $maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
  233. $itineraryOptions = $this->networkService->getItineraryOptions();
  234. $userPreferences = [];
  235. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  236. $userPreferences = $this->preferenceService->getUserPreferences();
  237. }
  238. $preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
  239. $configTemplate = $this->render("includes/common/js-config.html.twig", [
  240. 'isWidget' => true,
  241. 'requestReferer' => $request->headers->get('referer'),
  242. 'default_latlon' => $this->networkService->getLatLon(),
  243. 'network_lat' => $this->networkService->getLat(),
  244. 'network_lon' => $this->networkService->getLon(),
  245. 'external' => $this->networkService->isExternalNetwork(),
  246. 'maxDate' => $maxDate->format('Y-d-m'),
  247. 'modes' => $modes,
  248. 'preferences' => $preferences,
  249. 'baseUrl' => $this->baseUrl,
  250. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  251. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  252. 'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
  253. 'widgetTarget' => !empty($target) ? $target : '',
  254. 'isfid' => !empty($isfid) ? $isfid : '',
  255. 'isfv' => !empty($isfv) ? $isfv : '',
  256. 'istid' => !empty($istid) ? $istid : '',
  257. 'istv' => !empty($istv) ? $istv : ''
  258. ])->getContent();
  259. $activeWidgets = [
  260. 'journey' => 1,
  261. 'schedule' => 0,
  262. 'traffic' => 0,
  263. 'linesAndPoi' => 0,
  264. ];
  265. $activeTab = 'journey';
  266. $widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
  267. 'isWidget' => true,
  268. 'widgetCode' => $widgetCode,
  269. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  270. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  271. 'modesLayout' => $modesLayout,
  272. 'modes' => $modes,
  273. 'preferences' => $preferences,
  274. 'departurePlace' => [
  275. 'id' => $isfid,
  276. 'value' => $isfv,
  277. 'latlon' => '',
  278. 'latitude' => '',
  279. 'longitude' => ''
  280. ],
  281. 'arrivalPlace' => [
  282. 'id' => $istid,
  283. 'value' => $istv,
  284. 'latlon' => '',
  285. 'latitude' => '',
  286. 'longitude' => ''
  287. ],
  288. 'activeWidgets' => $activeWidgets,
  289. 'activeTab' => $activeTab
  290. ])->getContent();
  291. $widgetScript = $this->getWidgetScript($request);
  292. $widgetCss = $this->getWidgetCss($request);
  293. $rtlCss = $this->getRtlCss();
  294. $hasMap = $this->hasMap($request);
  295. return $this->render('modules/widget.js.twig', [
  296. 'baseUrl' => $this->baseUrl,
  297. 'newtorkId' => $this->networkId,
  298. 'config' => $configTemplate,
  299. 'wrapperSuffix' => 'Journey',
  300. 'widgetTemplate' => $widgetTemplate,
  301. 'widgetScript' => $widgetScript,
  302. 'widgetCss' => $widgetCss,
  303. 'rtlCss' => $rtlCss,
  304. 'hasMap' => $hasMap
  305. ]);
  306. }
  307. public function placeJourney(Request $request): Response
  308. {
  309. $this->initServices($request);
  310. $isRedirection = $request->get('redirection');
  311. $isInternal = $request->get('internal');
  312. $target = $request->get('target');
  313. $isPartner = $request->get('partner');
  314. $isfid = $request->get('isfid');
  315. $isfv = $request->get('isfv');
  316. $istid = $request->get('istid');
  317. $istv = $request->get('istv');
  318. $widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
  319. $this->saveXHeaders($request, $widgetCode);
  320. if (empty($request->get('token'))) {
  321. throw new InvalidArgumentException("The token is missing");
  322. }
  323. $modeEvent = new ModeEvent();
  324. $this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
  325. $modes = $modeEvent->getDefaultModes();
  326. $modesLayout = $modeEvent->getLayoutModes();
  327. $nbDayFuture = $this->networkService->getNbDayFuture();
  328. $maxDate = new \DateTime('now');
  329. $maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
  330. $itineraryOptions = $this->networkService->getItineraryOptions();
  331. $userPreferences = [];
  332. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  333. $userPreferences = $this->preferenceService->getUserPreferences();
  334. }
  335. $preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
  336. $configTemplate = $this->render("includes/common/js-config.html.twig", [
  337. 'isWidget' => true,
  338. 'requestReferer' => $request->headers->get('referer'),
  339. 'default_latlon' => $this->networkService->getLatLon(),
  340. 'external' => $this->networkService->isExternalNetwork(),
  341. 'network_lat' => $this->networkService->getLat(),
  342. 'network_lon' => $this->networkService->getLon(),
  343. 'maxDate' => $maxDate->format('Y-d-m'),
  344. 'modes' => $modes,
  345. 'preferences' => $preferences,
  346. 'baseUrl' => $this->baseUrl,
  347. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  348. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  349. 'widgetTarget' => !empty($target) ? $target : '',
  350. 'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
  351. 'isfid' => !empty($isfid) ? $isfid : '',
  352. 'isfv' => !empty($isfv) ? $isfv : '',
  353. 'istid' => !empty($istid) ? $istid : '',
  354. 'istv' => !empty($istv) ? $istv : ''
  355. ])->getContent();
  356. $activeWidgets = [
  357. 'journey' => 1,
  358. 'schedule' => 0,
  359. 'traffic' => 0,
  360. 'linesAndPoi' => 0,
  361. ];
  362. $activeTab = 'journey';
  363. $widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
  364. 'isWidget' => true,
  365. 'widgetCode' => $widgetCode,
  366. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  367. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  368. 'modes' => $modes,
  369. 'modesLayout' => $modesLayout,
  370. 'preferences' => $preferences,
  371. 'departurePlace' => [
  372. 'id' => $isfid,
  373. 'value' => $isfv,
  374. 'latlon' => '',
  375. 'latitude' => '',
  376. 'longitude' => ''
  377. ],
  378. 'arrivalPlace' => [
  379. 'id' => $istid,
  380. 'value' => $istv,
  381. 'latlon' => '',
  382. 'latitude' => '',
  383. 'longitude' => ''
  384. ],
  385. 'activeWidgets' => $activeWidgets,
  386. 'activeTab' => $activeTab
  387. ])->getContent();
  388. $widgetScript = $this->getWidgetScript($request);
  389. $widgetCss = $this->getWidgetCss($request);
  390. $rtlCss = $this->getRtlCss();
  391. $hasMap = $this->hasMap($request);
  392. return $this->render('modules/widget.js.twig', [
  393. 'baseUrl' => $this->baseUrl,
  394. 'newtorkId' => $this->networkId,
  395. 'wrapperSuffix' => 'Journey',
  396. 'config' => $configTemplate,
  397. 'widgetTemplate' => $widgetTemplate,
  398. 'widgetScript' => $widgetScript,
  399. 'widgetCss' => $widgetCss,
  400. 'rtlCss' => $rtlCss,
  401. 'hasMap' => $hasMap
  402. ]);
  403. }
  404. public function placeJourneyMap(Request $request): Response
  405. {
  406. $this->initServices($request);
  407. $isRedirection = $request->get('redirection');
  408. $isInternal = $request->get('internal');
  409. $target = $request->get('target');
  410. $isPartner = $request->get('partner');
  411. $isfid = $request->get('isfid');
  412. $isfv = $request->get('isfv');
  413. $istid = $request->get('istid');
  414. $istv = $request->get('istv');
  415. $isflat = $request->get('isflat');
  416. $isflon = $request->get('isflon');
  417. $istlat = $request->get('istlat');
  418. $istlon = $request->get('istlon');
  419. $dt = $request->get('dt');
  420. $at = $request->get('at');
  421. $m = (null !== $request->get('m')) ? explode('-', strtoupper($request->get('m'))) : null;
  422. $df = $request->get('df');
  423. $ws = $request->get('ws');
  424. $bs = $request->get('bs');
  425. $a = $request->get('a');
  426. $hp = $request->get('hp');
  427. $ad = $request->get('ad');
  428. $datetimeOption = JourneyService::DATETIME_SELECT_NOW;
  429. $dateValue = '';
  430. $hourValue = '';
  431. if (!empty($dt)) {
  432. $dt = new \DateTime(str_replace(' ', '+' , $dt));
  433. $datetimeOption = JourneyService::DATETIME_SELECT_LEAVE_AT;
  434. $dateValue = $dt->format('Y-m-d');
  435. $hourValue = $dt->format('H:i');
  436. }
  437. if (!empty($at)) {
  438. $dt = new \DateTime(str_replace(' ', '+' , $at));
  439. $datetimeOption = JourneyService::DATETIME_SELECT_ARRIVE_AT;
  440. $dateValue = $dt->format('Y-m-d');
  441. $hourValue = $dt->format('H:i');
  442. }
  443. $widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
  444. $this->saveXHeaders($request, $widgetCode);
  445. if (empty($request->get('token'))) {
  446. throw new InvalidArgumentException("The token is missing");
  447. }
  448. $speedProfiles = [0 => 'SLOW', 1 => 'NORMAL', 2 => 'FAST'];
  449. $itineraryOptions = $this->networkService->getItineraryOptions();
  450. $userPreferences = [];
  451. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  452. $userPreferences = $this->preferenceService->getUserPreferences();
  453. }
  454. $preferences = $this->userPreferencesNormalizer->normalize($userPreferences, ['itineraryOptions' => $itineraryOptions]);
  455. $excludedModesPreferences = !empty($preferences['tripPlanner']['excludedModes']) ? $preferences['tripPlanner']['excludedModes'] : [];
  456. $modeEvent = new ModeEvent($m, $excludedModesPreferences);
  457. $this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
  458. $modes = $modeEvent->getDefaultModes();
  459. $modesLayout = $modeEvent->getLayoutModes();
  460. $nbDayFuture = $this->networkService->getNbDayFuture();
  461. $maxDate = new \DateTime('now');
  462. $maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
  463. $preferences['tripPlanner']['excludedModes'] = $modeEvent->getExcludedModes();
  464. $preferences['tripPlanner']['showAccessibility'] = !empty($df) ? filter_var($df, FILTER_VALIDATE_BOOLEAN) : $preferences['tripPlanner']['showAccessibility'];
  465. $preferences['tripPlanner']['wheelchairAccessible'] = !empty($a) ? filter_var($a, FILTER_VALIDATE_BOOLEAN) : $preferences['tripPlanner']['wheelchairAccessible'];
  466. $preferences['tripPlanner']['accessibilityProfile'] = in_array($hp, PreferenceProfiles::ACCESSIBILITY_PROFILES, true) ? $hp : $preferences['tripPlanner']['accessibilityProfile'];
  467. $preferences['tripPlanner']['walkProfile'] = !empty($ws) ? $speedProfiles[$ws] : $preferences['tripPlanner']['walkProfile'];
  468. $preferences['tripPlanner']['bikeProfile'] = !empty($bs) ? $speedProfiles[$bs] : $preferences['tripPlanner']['bikeProfile'];
  469. $configParameters = [
  470. 'isWidget' => true,
  471. 'requestReferer' => $request->headers->get('referer'),
  472. 'widgetType' => 'journey',
  473. 'default_latlon' => $this->networkService->getLatLon(),
  474. 'network_lat' => $this->networkService->getLat(),
  475. 'network_lon' => $this->networkService->getLon(),
  476. 'external' => $this->networkService->isExternalNetwork(),
  477. 'maxDate' => $maxDate->format('Y-d-m'),
  478. 'modes' => $modes,
  479. 'preferences' => $preferences,
  480. 'baseUrl' => $this->baseUrl,
  481. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  482. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  483. 'widgetTarget' => !empty($target) ? $target : '',
  484. 'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
  485. 'isfid' => !empty($isfid) ? $isfid : '',
  486. 'isfv' => !empty($isfv) ? $isfv : '',
  487. 'istid' => !empty($istid) ? $istid : '',
  488. 'istv' => !empty($istv) ? $istv : '',
  489. 'isflat' => !empty($isflat) ? $isflat : '',
  490. 'isflon' => !empty($isflon) ? $isflon : '',
  491. 'istlat' => !empty($istlat) ? $istlat : '',
  492. 'istlon' => !empty($istlon) ? $istlon : '',
  493. ];
  494. $configParameters = array_merge($configParameters, $this->getCustomMapParameters($request));
  495. $configTemplate = $this->render("includes/common/js-config.html.twig", $configParameters)->getContent();
  496. $activeWidgets = [
  497. 'journey' => 1,
  498. 'schedule' => 0,
  499. 'traffic' => 0,
  500. 'linesAndPoi' => 0,
  501. ];
  502. $activeTab = 'journey';
  503. $widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
  504. 'isWidget' => true,
  505. 'widgetCode' => $widgetCode,
  506. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  507. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  508. 'modes' => $modes,
  509. 'modesLayout' => $modesLayout,
  510. 'preferences' => $preferences,
  511. 'departurePlace' => [
  512. 'id' => $isfid,
  513. 'value' => $isfv,
  514. 'latlon' => '',
  515. 'latitude' => '',
  516. 'longitude' => ''
  517. ],
  518. 'arrivalPlace' => [
  519. 'id' => $istid,
  520. 'value' => $istv,
  521. 'latlon' => '',
  522. 'latitude' => '',
  523. 'longitude' => ''
  524. ],
  525. 'activeWidgets' => $activeWidgets,
  526. 'activeTab' => $activeTab,
  527. 'datetimeOption'=> $datetimeOption,
  528. 'dateValue' => $dateValue,
  529. 'hourValue' => $hourValue
  530. ])->getContent();
  531. $widgetScript = $this->getWidgetScript($request);
  532. $widgetCss = $this->getWidgetCss($request);
  533. $rtlCss = $this->getRtlCss();
  534. $hasMap = $this->hasMap($request);
  535. return $this->render('modules/widget.js.twig', [
  536. 'baseUrl' => $this->baseUrl,
  537. 'newtorkId' => $this->networkId,
  538. 'wrapperSuffix' => 'Journey',
  539. 'config' => $configTemplate,
  540. 'widgetTemplate' => $widgetTemplate,
  541. 'widgetScript' => $widgetScript,
  542. 'widgetCss' => $widgetCss,
  543. 'rtlCss' => $rtlCss,
  544. 'isRedirection' => isset($isRedirection) ? $isRedirection : false,
  545. 'hasMap' => $hasMap
  546. ]);
  547. }
  548. public function login(Request $request, UserService $userService): Response
  549. {
  550. $parameters = [];
  551. $this->initServices($request);
  552. $isRedirection = $request->get('redirection');;
  553. $isInternal = $request->get('internal');
  554. $target = $request->get('target');
  555. $isPartner = $request->get('partner');
  556. $widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
  557. $this->saveXHeaders($request, $widgetCode);
  558. $configTemplate = $this->render("includes/common/js-config.html.twig", [
  559. 'isWidget' => true,
  560. 'baseUrl' => $this->baseUrl,
  561. 'isRedirection' => !empty($isRedirection) ? $isRedirection : 'false',
  562. 'isInternal' => !empty($isInternal) ? $isInternal : 'false',
  563. 'widgetTarget' => !empty($target) ? $target : '',
  564. 'isPartner' => !empty($isPartner) ? $isPartner : 'false'
  565. ])->getContent();
  566. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  567. $user = $userService->myAccount();
  568. if (isset($user->body) && isset($user->status) && $user->status === 200) {
  569. $parameters['userData'] = $user->body;
  570. }
  571. } else {
  572. $user = [];
  573. }
  574. $activeWidgets = [
  575. 'login' => 1,
  576. 'journey' => 0,
  577. 'schedule' => 0,
  578. 'traffic' => 0,
  579. 'linesAndPoi' => 0,
  580. ];
  581. $parameters['isWidget'] = true;
  582. $parameters['isRedirection'] = !empty($isRedirection) ? $isRedirection : 'false';
  583. $parameters['isInternal'] = !empty($isInternal) ? $isInternal : 'false';
  584. $parameters['user'] = $user;
  585. $parameters['activeWidgets'] = $activeWidgets;
  586. // Account menu
  587. $parameters['account_section_homepage'] = $this->getParameter('account.section_activation.homepage');
  588. $parameters['account_module_common'] = $this->getParameter('account.module_activation.common');
  589. $parameters['account_module_sim'] = $this->getParameter('account.module_activation.sim');
  590. $parameters['account_module_ticketing'] = $this->getParameter('account.module_activation.ticketing');
  591. $parameters['account_section_informations'] = $this->getParameter('account.section_activation.informations');
  592. $parameters['account_section_addresses'] = $this->getParameter('account.section_activation.addresses');
  593. $parameters['account_right_UpdateMail'] = $this->getParameter('account.right_update_mail');
  594. $parameters['account_right_addAddress'] = $this->getParameter('account.right_add_address');
  595. $parameters['account_section_favorites'] = $this->getParameter('account.section_activation.favorites');
  596. $parameters['account_section_trip'] = $this->getParameter('account.section_activation.trip');
  597. $parameters['account_section_beneficiaries'] = $this->getParameter('account.section_activation.beneficiaries');
  598. $parameters['account_section_orders'] = $this->getParameter('account.section_activation.orders');
  599. $parameters['account_section_cards'] = $this->getParameter('account.section_activation.cards');
  600. $parameters['account_section_bank_account'] = $this->getParameter('account.section_activation.bank_account');
  601. $parameters['account_section_mtickets'] = $this->getParameter('account.section_activation.mtickets');
  602. $parameters['account_section_etickets'] = $this->getParameter('account.section_activation.etickets');
  603. $parameters['account_section_fines'] = $this->getParameter('account.section_activation.fines');
  604. $parameters['account_journey_booking'] = $this->getParameter('account.journey_booking');
  605. $parameters['account_section_profiles'] = $this->getParameter('account.section_activation.profiles');
  606. $widgetTemplate = $this->render("layouts/widget/widget.html.twig", $parameters)->getContent();
  607. $widgetScript = $this->getWidgetScript($request);
  608. $widgetCss = $this->getWidgetCss($request);
  609. $rtlCss = $this->getRtlCss();
  610. $hasMap = $this->hasMap($request);
  611. return $this->render('modules/widget.js.twig', [
  612. 'baseUrl' => $this->baseUrl,
  613. 'parameters' => $parameters,
  614. 'wrapperSuffix' => 'Login',
  615. 'newtorkId' => $this->networkId,
  616. 'config' => $configTemplate,
  617. 'widgetTemplate' => $widgetTemplate,
  618. 'widgetScript' => $widgetScript,
  619. 'widgetCss' => $widgetCss,
  620. 'rtlCss' => $rtlCss,
  621. 'hasMap' => $hasMap
  622. ]);
  623. }
  624. public function journeyBooking(Request $request, UserService $userService, HomePageService $homePageService): Response
  625. {
  626. $parameters = [];
  627. $this->initServices($request);
  628. $isRedirection = $request->get('redirection');;
  629. $isInternal = $request->get('internal');
  630. $target = $request->get('target');
  631. $isPartner = $request->get('partner');
  632. $widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
  633. $this->saveXHeaders($request, $widgetCode);
  634. $configTemplate = $this->render("includes/common/js-config.html.twig", [
  635. 'isWidget' => true,
  636. 'baseUrl' => $this->baseUrl,
  637. 'isRedirection' => !empty($isRedirection) ? $isRedirection : 'false',
  638. 'isInternal' => !empty($isInternal) ? $isInternal : 'false',
  639. 'widgetTarget' => !empty($target) ? $target : '',
  640. 'isPartner' => !empty($isPartner) ? $isPartner : 'false'
  641. ])->getContent();
  642. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  643. $user = $userService->myAccount();
  644. if (isset($user->body) && isset($user->status) && $user->status === 200) {
  645. $parameters['userData'] = $user->body;
  646. }
  647. } else {
  648. $user = [];
  649. }
  650. $parameters['isWidget'] = true;
  651. $parameters['displayDisruptionWithAjax'] = true;
  652. $parameters['isRedirection'] = !empty($isRedirection) ? $isRedirection : 'false';
  653. $parameters['isInternal'] = !empty($isInternal) ? $isInternal : 'false';
  654. $parameters['user'] = $user;
  655. $wsResponse = $userService->myAccount();
  656. $user = null;
  657. if (!$wsResponse->isError()) {
  658. $user = $wsResponse->body;
  659. $parameters['user'] = $user;
  660. }
  661. $session = $request->getSession();
  662. $session->set('context', 'SIM');
  663. $session->set('php_session_id', $request->cookies->get('PHPSESSID'));
  664. $parameters = $homePageService->getRenderParameters([], $parameters);
  665. $activeWidgets = [
  666. 'journeyBooking' => 1,
  667. 'journey' => 0,
  668. 'schedule' => 0,
  669. 'traffic' => 0,
  670. 'linesAndPoi' => 0,
  671. ];
  672. if (!$this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  673. $currentUrl = $this->generateUrl('account.sim.booking', array());
  674. $activeWidgets = [
  675. 'loginForm' => 1,
  676. 'journey' => 0,
  677. 'schedule' => 0,
  678. 'traffic' => 0,
  679. 'linesAndPoi' => 0,
  680. ];
  681. $parameters['redirectionUrl'] = $currentUrl;
  682. $parameters['fromReferer'] = true;
  683. //return $this->redirectToRoute('user_login', ['isWidget' => true,'isModal' => false, 'redirectionUrl' => $currentUrl]);
  684. }
  685. $parameters['activeWidgets'] = $activeWidgets;
  686. $parameters['isXmlHttpMode'] = true;
  687. $parameters['displayFavorites'] = true;
  688. $parameters['php_session_id'] = $session->get('php_session_id');
  689. $currentDate = date('Y-m-d');
  690. $parameters['currentDate'] = $currentDate;
  691. $widgetTemplate = $this->render("layouts/widget/widget.html.twig", $parameters)->getContent();
  692. $widgetScript = $this->getWidgetScript($request);
  693. $widgetCss = $this->getWidgetCss($request);
  694. $rtlCss = $this->getRtlCss();
  695. $hasMap = $this->hasMap($request);
  696. return $this->render('modules/widget.js.twig', [
  697. 'baseUrl' => $this->baseUrl,
  698. 'parameters' => $parameters,
  699. 'wrapperSuffix' => 'JourneyBooking',
  700. 'newtorkId' => $this->networkId,
  701. 'config' => $configTemplate,
  702. 'widgetTemplate' => $widgetTemplate,
  703. 'widgetScript' => $widgetScript,
  704. 'widgetCss' => $widgetCss,
  705. 'rtlCss' => $rtlCss,
  706. 'hasMap' => $hasMap
  707. ]);
  708. }
  709. public function schedule(Request $request)
  710. {
  711. $this->initServices($request);
  712. $isRedirection = $request->get('redirection');
  713. $isInternal = $request->get('internal');
  714. $target = $request->get('target');
  715. $isPartner = $request->get('partner');
  716. $islid = $request->get('islid');
  717. $isdir = $request->get('isdir');
  718. $issaid = $request->get('issaid');
  719. $issav = $request->get('issav');
  720. $islocid = $request->get('islocid');
  721. $isSubNetworks = $request->get('issubnetworks');
  722. $widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
  723. $this->saveXHeaders($request, $widgetCode);
  724. if (empty($request->get('token'))) {
  725. throw new InvalidArgumentException("The token is missing");
  726. }
  727. $modeEvent = new ModeEvent();
  728. $this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
  729. $modes = $modeEvent->getDefaultModes();
  730. $modesLayout = $modeEvent->getLayoutModes();
  731. $nbDayFuture = $this->networkService->getNbDayFuture();
  732. $maxDate = new \DateTime('now');
  733. $maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
  734. $configTemplate = $this->render("includes/common/js-config.html.twig", [
  735. 'isWidget' => true,
  736. 'requestReferer' => $request->headers->get('referer'),
  737. 'default_latlon' => $this->networkService->getLatLon(),
  738. 'network_lat' => $this->networkService->getLat(),
  739. 'network_lon' => $this->networkService->getLon(),
  740. 'external' => $this->networkService->isExternalNetwork(),
  741. 'maxDate' => $maxDate->format('Y-d-m'),
  742. 'modes' => $modes,
  743. 'baseUrl' => $this->baseUrl,
  744. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  745. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  746. 'widgetTarget' => !empty($target) ? $target : '',
  747. 'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
  748. 'islid' => !empty($islid) ? $islid : '',
  749. 'isdir' => !empty($isdir) ? $isdir : '',
  750. 'issaid' => !empty($issaid) ? $issaid : '',
  751. 'issav' => !empty($issav) ? $issav : '',
  752. 'islocid' => !empty($islocid) ? $islocid : '',
  753. 'issubnetworks' => !empty($isSubNetworks) ? $isSubNetworks : ''
  754. ])->getContent();
  755. $activeWidgets = [
  756. 'journey' => 0,
  757. 'schedule' => 1,
  758. 'traffic' => 0,
  759. 'linesAndPoi' => 0,
  760. ];
  761. $activeTab = 'schedule';
  762. $widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
  763. 'isWidget' => true,
  764. 'widgetCode' => $widgetCode,
  765. 'default_latlon' => $this->networkService->getLatLon(),
  766. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  767. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  768. 'modes' => $modes,
  769. 'modesLayout' => $modesLayout,
  770. 'activeWidgets' => $activeWidgets,
  771. 'activeTab' => $activeTab
  772. ])->getContent();
  773. $widgetScript = $this->getWidgetScript($request);
  774. $widgetCss = $this->getWidgetCss($request);
  775. $rtlCss = $this->getRtlCss();
  776. $hasMap = $this->hasMap($request);
  777. return $this->render('modules/widget.js.twig', [
  778. 'baseUrl' => $this->baseUrl,
  779. 'newtorkId' => $this->networkId,
  780. 'wrapperSuffix' => 'Schedule',
  781. 'config' => $configTemplate,
  782. 'widgetTemplate' => $widgetTemplate,
  783. 'widgetScript' => $widgetScript,
  784. 'widgetCss' => $widgetCss,
  785. 'rtlCss' => $rtlCss,
  786. 'hasMap' => $hasMap
  787. ]);
  788. }
  789. public function traffic(Request $request, HomePageService $homePageService): Response
  790. {
  791. $this->initServices($request);
  792. $isRedirection = $request->get('redirection');;
  793. $isInternal = $request->get('internal');
  794. $target = $request->get('target');
  795. $isPartner = $request->get('partner');
  796. $isSubNetworks = $request->get('issubnetworks');
  797. $widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
  798. $this->saveXHeaders($request, $widgetCode);
  799. if (empty($request->get('token'))) {
  800. throw new InvalidArgumentException("The token is missing");
  801. }
  802. $configTemplate = $this->render("includes/common/js-config.html.twig", [
  803. 'isWidget' => true,
  804. 'default_latlon' => $this->networkService->getLatLon(),
  805. 'network_lat' => $this->networkService->getLat(),
  806. 'network_lon' => $this->networkService->getLon(),
  807. 'external' => $this->networkService->isExternalNetwork(),
  808. 'baseUrl' => $this->baseUrl,
  809. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  810. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  811. 'widgetTarget' => !empty($target) ? $target : '',
  812. 'isPartner' => !empty($isPartner) ? $isPartner : 'false',
  813. 'issubnetworks' => !empty($isSubNetworks) ? $isSubNetworks : ''
  814. ])->getContent();
  815. $activeWidgets = [
  816. 'journey' => 0,
  817. 'schedule' => 0,
  818. 'traffic' => 1,
  819. 'linesAndPoi' => 0,
  820. ];
  821. $parameters = [];
  822. $parameters['issubnetworks'] = $isSubNetworks;
  823. $homePageService->getDisruption($parameters);
  824. $scheduleFavorites = [];
  825. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  826. $scheduleFavorites = $this->favoritesManager->getSchedules([], true);
  827. }
  828. $parameters['scheduleFavorites'] = $scheduleFavorites ?? [];
  829. $parameters['lineFavorites'] = [];
  830. if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  831. $parameters['lineFavorites'] = $this->favoritesManager->getLines([], true);
  832. }
  833. $activeTab = 'traffic';
  834. $parameters['fullList'] = $request->get('fullList', false);
  835. $parameters['isWidget'] = true;
  836. $parameters['default_latlon'] = $this->networkService->getLatLon();
  837. $parameters['isRedirection'] = !empty($isRedirection) ? $isRedirection : 'false';
  838. $parameters['isInternal'] = !empty($isInternal) ? $isInternal : 'false';
  839. $parameters['activeWidgets'] = $activeWidgets;
  840. $parameters['activeTab'] = $activeTab;
  841. $widgetTemplate = $this->render("layouts/widget/widget.html.twig", $parameters)->getContent();
  842. $widgetScript = $this->getWidgetScript($request);
  843. $widgetCss = $this->getWidgetCss($request);
  844. $rtlCss = $this->getRtlCss();
  845. $hasMap = $this->hasMap($request);
  846. return $this->render('modules/widget.js.twig', [
  847. 'baseUrl' => $this->baseUrl,
  848. 'parameters' => $parameters,
  849. 'wrapperSuffix' => 'Traffic',
  850. 'newtorkId' => $this->networkId,
  851. 'config' => $configTemplate,
  852. 'widgetTemplate' => $widgetTemplate,
  853. 'widgetScript' => $widgetScript,
  854. 'widgetCss' => $widgetCss,
  855. 'rtlCss' => $rtlCss,
  856. 'hasMap' => $hasMap
  857. ]);
  858. }
  859. public function full(Request $request): Response
  860. {
  861. $widgetParameters = $this->getFullWidgetsParameters($request, false);
  862. $widgetParameters['parameters']['activeWidgets'] = [
  863. 'journey' => 1,
  864. 'schedule' => 1,
  865. 'traffic' => ('traffic' === $request->get('except')) ? 0 : 1,
  866. 'linesAndPoi' => 0,
  867. ];
  868. $widgetParameters['parameters']['activeTab'] = 'journey';
  869. $widgetParameters['wrapperSuffix'] = 'Full';
  870. $widgetParameters['widgetTemplate'] = $this->render("layouts/widget/widget.html.twig", $widgetParameters['parameters'])->getContent();
  871. //Add split mode params
  872. $widgetParameters['isSplit'] = false;
  873. return $this->render('modules/widget.js.twig', $widgetParameters);
  874. }
  875. public function fullSplit(Request $request): Response
  876. {
  877. $widgetParameters = $this->getFullWidgetsParameters($request, true);
  878. $widgetParameters['widgetTemplates'] = [];
  879. //TODO : Make this array dynamic
  880. $activeWidgets = [
  881. 'journey' => 1,
  882. 'schedule' => 1,
  883. 'traffic' => 1,
  884. 'linesAndPoi' => 0,
  885. ];
  886. $widgetParameters['parameters']['activeWidgets'] = $activeWidgets;
  887. $widgetParameters['parameters']['trafficMini'] = $request->get('trafficMini');
  888. //Get templates for each enabled widget
  889. foreach ($widgetParameters['parameters']['activeWidgets'] as $k => $v) {
  890. if($v === 1) {
  891. $widgetParameters['parameters']['activeWidgets'] = [
  892. 'journey' => 0,
  893. 'schedule' => 0,
  894. 'traffic' => 0
  895. ];
  896. $widgetParameters['parameters']['activeWidgets'][$k] = 1;
  897. $widgetParameters['parameters']['activeTab'] = $k;
  898. $widgetParameters['widgetTemplates'][$k] = $this->render("layouts/widget/widget.html.twig", $widgetParameters['parameters'])->getContent();
  899. }
  900. }
  901. //Restore activeWidget parameter
  902. $widgetParameters['parameters']['activeWidgets'] = $activeWidgets;
  903. //Add split mode params
  904. $widgetParameters['isSplit'] = true;
  905. return $this->render('modules/widget.js.twig', $widgetParameters);
  906. }
  907. public function scheduleMap(Request $request): Response
  908. {
  909. $this->initServices($request);
  910. $isRedirection = $request->get('redirection');
  911. $isInternal = $request->get('internal');
  912. $target = $request->get('target');
  913. $isPartner = $request->get('partner');
  914. $islid = $request->get('islid');
  915. $isdir = $request->get('isdir');
  916. $issaid = $request->get('issaid');
  917. $issav = $request->get('issav');
  918. $islocid = $request->get('islocid');
  919. $isSubNetworks = $request->get('issubnetworks');
  920. $widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
  921. $this->saveXHeaders($request, $widgetCode);
  922. if (empty($request->get('token'))) {
  923. throw new InvalidArgumentException("The token is missing");
  924. }
  925. $modeEvent = new ModeEvent();
  926. $this->eventDispatcher->dispatch($modeEvent, ModeEvent::NAME);
  927. $modes = $modeEvent->getDefaultModes();
  928. $modesLayout = $modeEvent->getLayoutModes();
  929. $nbDayFuture = $this->networkService->getNbDayFuture();
  930. $maxDate = new \DateTime('now');
  931. $maxDate = $maxDate->add(new \DateInterval('P'.$nbDayFuture.'D'));
  932. $configParameters = [
  933. 'isWidget' => true,
  934. 'requestReferer' => $request->headers->get('referer'),
  935. 'widgetType' => 'schedule',
  936. 'default_latlon' => $this->networkService->getLatLon(),
  937. 'network_lat' => $this->networkService->getLat(),
  938. 'network_lon' => $this->networkService->getLon(),
  939. 'external' => $this->networkService->isExternalNetwork(),
  940. 'maxDate' => $maxDate->format('Y-d-m'),
  941. 'modes' => $modes,
  942. 'baseUrl' => $this->baseUrl,
  943. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  944. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  945. 'isPartner' => !empty($isPartner) && $isPartner === 'true' ? true : false,
  946. 'widgetTarget' => !empty($target) ? $target : '',
  947. 'islid' => !empty($islid) ? $islid : '',
  948. 'isdir' => !empty($isdir) ? $isdir : '',
  949. 'issaid' => !empty($issaid) ? $issaid : '',
  950. 'issav' => !empty($issav) ? $issav : '',
  951. 'islocid' => !empty($islocid) ? $islocid : '',
  952. 'issubnetworks' => !empty($isSubNetworks) ? $isSubNetworks : ''
  953. ];
  954. $configParameters = array_merge($configParameters, $this->getCustomMapParameters($request));
  955. $configTemplate = $this->render("includes/common/js-config.html.twig", $configParameters)->getContent();
  956. $activeWidgets = [
  957. 'journey' => 0,
  958. 'schedule' => 1,
  959. 'traffic' => 0,
  960. 'linesAndPoi' => 0,
  961. ];
  962. $activeTab = 'schedule';
  963. $widgetTemplate = $this->render("layouts/widget/widget.html.twig", [
  964. 'isWidget' => true,
  965. 'widgetCode' => $widgetCode,
  966. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  967. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  968. 'modes' => $modes,
  969. 'modesLayout' => $modesLayout,
  970. 'activeWidgets' => $activeWidgets,
  971. 'activeTab' => $activeTab
  972. ])->getContent();
  973. $widgetScript = $this->getWidgetScript($request);
  974. $widgetCss = $this->getWidgetCss($request);
  975. $rtlCss = $this->getRtlCss();
  976. $hasMap = $this->hasMap($request);
  977. return $this->render('modules/widget.js.twig', [
  978. 'baseUrl' => $this->baseUrl,
  979. 'newtorkId' => $this->networkId,
  980. 'wrapperSuffix' => 'Schedule',
  981. 'config' => $configTemplate,
  982. 'widgetTemplate' => $widgetTemplate,
  983. 'widgetScript' => $widgetScript,
  984. 'widgetCss' => $widgetCss,
  985. 'rtlCss' => $rtlCss,
  986. 'hasMap' => $hasMap,
  987. ]);
  988. }
  989. public function banners(Request $request, CmsService $cmsService): Response
  990. {
  991. $parameters = [];
  992. $this->initServices($request);
  993. $isRedirection = $request->get('redirection');;
  994. $isInternal = $request->get('internal');
  995. $target = $request->get('target');
  996. $isPartner = $request->get('partner');
  997. $widgetCode = $this->getWidgetCode($request, $isRedirection, $isInternal, $isPartner, $target);
  998. $this->saveXHeaders($request, $widgetCode);
  999. if (empty($request->get('token'))) {
  1000. throw new InvalidArgumentException("The token is missing");
  1001. }
  1002. $configTemplate = $this->render("includes/common/js-config.html.twig", [
  1003. 'isWidget' => true,
  1004. 'baseUrl' => $this->baseUrl,
  1005. 'isRedirection' => !empty($isRedirection) && $isRedirection === 'true' ? true : false,
  1006. 'isInternal' => !empty($isInternal) && $isInternal === 'true' ? true : false,
  1007. 'widgetTarget' => !empty($target) ? $target : '',
  1008. 'isPartner' => !empty($isPartner) ? $isPartner : 'false'
  1009. ])->getContent();
  1010. $banners = $cmsService->getBanners();
  1011. $activeWidgets = [
  1012. 'banners' => 1,
  1013. 'journey' => 0,
  1014. 'schedule' => 0,
  1015. 'traffic' => 0,
  1016. 'linesAndPoi' => 0,
  1017. ];
  1018. $parameters['isWidget'] = true;
  1019. $parameters['isRedirection'] = !empty($isRedirection) ? $isRedirection : 'false';
  1020. $parameters['isInternal'] = !empty($isInternal) ? $isInternal : 'false';
  1021. $parameters['banners'] = $banners;
  1022. $parameters['activeWidgets'] = $activeWidgets;
  1023. $widgetTemplate = $this->render("layouts/widget/widget.html.twig", $parameters)->getContent();
  1024. $widgetScript = $this->getWidgetScript($request);
  1025. $widgetCss = $this->getWidgetCss($request);
  1026. $rtlCss = $this->getRtlCss();
  1027. $hasMap = $this->hasMap($request);
  1028. return $this->render('modules/widget.js.twig', [
  1029. 'baseUrl' => $this->baseUrl,
  1030. 'parameters' => $parameters,
  1031. 'wrapperSuffix' => 'Banners',
  1032. 'newtorkId' => $this->networkId,
  1033. 'config' => $configTemplate,
  1034. 'widgetTemplate' => $widgetTemplate,
  1035. 'widgetScript' => $widgetScript,
  1036. 'widgetCss' => $widgetCss,
  1037. 'rtlCss' => $rtlCss,
  1038. 'hasMap' => $hasMap
  1039. ]);
  1040. }
  1041. private function getCustomMapParameters(Request $request): array
  1042. {
  1043. $customMapParameters = [];
  1044. $iszoom = $request->get('iszoom');
  1045. if(!empty($iszoom) && is_numeric($iszoom)) {
  1046. $customMapParameters['customZoom'] = $iszoom;
  1047. }
  1048. $islat = $request->get('islat');
  1049. $islon = $request->get('islon');
  1050. if(!empty($islat) && is_numeric($islat) && !empty($islon) && is_numeric($islon)) {
  1051. $customMapParameters['islat'] = $islat;
  1052. $customMapParameters['islon'] = $islon;
  1053. $customMapParameters['customLatLon'] = '[' . $islat . ', ' . $islon . ']';
  1054. }
  1055. return $customMapParameters;
  1056. }
  1057. }