src/Controller/Stoparea/ScheduleController.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Stoparea;
  3. use App\Normalizer\Stoparea\ScheduleNormalizer;
  4. use App\Service\Internal\HomePageService;
  5. use App\Service\Internal\StopareaService;
  6. use App\Validator\Schedule\StopAreaSchedulesValidator;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use App\Normalizer\Stoparea\LineNormalizer as StopareaLineNormalizer;
  12. use App\Service\Internal\MapService;
  13. class ScheduleController extends AbstractController
  14. {
  15. /**
  16. * Get the schedules of a stop area
  17. */
  18. public function list(
  19. Request $request,
  20. StopAreaSchedulesValidator $stopAreaSchedulesValidator,
  21. HomePageService $homePageService,
  22. StopareaService $stopareaService,
  23. MapService $mapService,
  24. ScheduleNormalizer $scheduleNormalizer,
  25. StopareaLineNormalizer $stopArealineNormalizer
  26. ): Response {
  27. $parameters = [];
  28. $parameters['activeTab'] = 'schedule';
  29. $parameters['scheduleTemplate'] = 'stoparea-schedules';
  30. $parameters['type'] = 'stoparea';
  31. $parameters['isXmlHttpMode'] = false;
  32. $get = $request->attributes->all();
  33. $disruptions = [];
  34. $homePageService->getDisruption($disruptions);
  35. $parameters['disruptions'] = $disruptions;
  36. // Validation
  37. $parameters['validator'] = $stopAreaSchedulesValidator->validate($get);
  38. // Display
  39. if ($parameters['validator']['error'] === 0) {
  40. $parameters = $this->getListRenderParameters(
  41. $stopareaService,
  42. $scheduleNormalizer,
  43. $stopArealineNormalizer,
  44. $homePageService,
  45. $mapService,
  46. $get,
  47. $parameters
  48. );
  49. }
  50. $parameters = $homePageService->getRenderParameters($get, $parameters);
  51. $parameters = $parameters + $get;
  52. return $this->render('pages/schedule/'.$parameters['scheduleTemplate'].'.html.twig', $parameters);
  53. }
  54. public function stopArea(string $id, MapService $mapService): JsonResponse
  55. {
  56. $response = $mapService->getStopAreaStopPoints($id);
  57. return new JsonResponse(['stopPoints' => $response]);
  58. }
  59. public function getListRenderParameters(
  60. StopareaService $stopareaService,
  61. ScheduleNormalizer $scheduleNormalizer,
  62. StopareaLineNormalizer $stopArealineNormalizer,
  63. HomePageService $homePageService,
  64. MapService $mapService,
  65. array $get,
  66. array $parameters
  67. ): array {
  68. $stopAreaId = $get['issaid'] ?? '';
  69. $stopAreaSchedules = $stopareaService->getStopAreaSchedules($stopAreaId);
  70. $stopAreaSchedules = $scheduleNormalizer->normalize($stopAreaSchedules, ['groupBySubNetworks' => true]);
  71. // Stop area lines
  72. $stopAreaLines = $stopareaService->getStopAreaLines($stopAreaId);
  73. $stopAreaLines = $stopArealineNormalizer->normalizer($stopAreaLines, ['groupBySubNetworks' => true]);
  74. $name = $stopAreaSchedules['stopArea']['name'] ?? '';
  75. $city = isset($stopAreaSchedules['stopArea']['city']) ? ' - ' . $stopAreaSchedules['stopArea']['city'] : '';
  76. $parameters['groupBySubNetworks'] = true;
  77. $parameters['stopArea'] = $stopAreaSchedules['stopArea'] ?? [];
  78. $parameters['scheduleInputValue'] = $name . $city;
  79. $parameters['stopPoints'] = $stopAreaSchedules['stopPoints'] ?? [];
  80. $parameters['lines'] = $stopAreaSchedules['lines'] ?? [];
  81. $lines = $parameters['lines'];
  82. if (!empty($parameters['lines'])) {
  83. if ($parameters['groupBySubNetworks']) {
  84. $lines = [];
  85. foreach ($parameters['lines'] as $value) {
  86. foreach($value['line'] as $line) {
  87. $lines[]['line'] = $line;
  88. }
  89. }
  90. }
  91. $lineInfos = array_column($lines, 'line');
  92. $parameters['filters']['mode'] = array_unique(array_column($lineInfos, 'modeText'));
  93. $subnetworkInfos = array_column($lineInfos, 'subNetwork');
  94. $parameters['filters']['subnetwork'] = array_unique(array_column($subnetworkInfos, 'name'));
  95. }
  96. $parameters['departures'] = $stopAreaSchedules['departures'] ?? [];
  97. if (!empty($parameters['departures'])) {
  98. $departureLineInfos = array_column($parameters['departures'], 'line');
  99. $parameters['trainFilters']['mode'] = array_unique(array_column($departureLineInfos, 'modeText'));
  100. $departureSubnetworkInfos = array_column($departureLineInfos, 'subNetwork');
  101. $parameters['trainFilters']['subnetwork'] = array_unique(array_column($departureSubnetworkInfos, 'name'));
  102. }
  103. $parameters['stopAreaLines'] = $stopAreaLines;
  104. return $parameters;
  105. }
  106. }