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. $parameters['disruptions'] = ['currentDisruptions' => [], 'futureDisruptions' => []];
  34. // Validation
  35. $parameters['validator'] = $stopAreaSchedulesValidator->validate($get);
  36. // Display
  37. if ($parameters['validator']['error'] === 0) {
  38. $parameters = $this->getListRenderParameters(
  39. $stopareaService,
  40. $scheduleNormalizer,
  41. $stopArealineNormalizer,
  42. $homePageService,
  43. $mapService,
  44. $get,
  45. $parameters
  46. );
  47. }
  48. $parameters = $homePageService->getRenderParameters($get, $parameters);
  49. $parameters = $parameters + $get;
  50. return $this->render('pages/schedule/'.$parameters['scheduleTemplate'].'.html.twig', $parameters);
  51. }
  52. public function stopArea(string $id, MapService $mapService): JsonResponse
  53. {
  54. $response = $mapService->getStopAreaStopPoints($id);
  55. return new JsonResponse(['stopPoints' => $response]);
  56. }
  57. public function getListRenderParameters(
  58. StopareaService $stopareaService,
  59. ScheduleNormalizer $scheduleNormalizer,
  60. StopareaLineNormalizer $stopArealineNormalizer,
  61. HomePageService $homePageService,
  62. MapService $mapService,
  63. array $get,
  64. array $parameters
  65. ): array {
  66. $stopAreaId = $get['issaid'] ?? '';
  67. $stopAreaSchedules = $stopareaService->getStopAreaSchedules($stopAreaId);
  68. $stopAreaSchedules = $scheduleNormalizer->normalize($stopAreaSchedules, ['groupBySubNetworks' => true]);
  69. // Stop area lines
  70. $stopAreaLines = $stopareaService->getStopAreaLines($stopAreaId);
  71. $stopAreaLines = $stopArealineNormalizer->normalizer($stopAreaLines, ['groupBySubNetworks' => true]);
  72. $name = $stopAreaSchedules['stopArea']['name'] ?? '';
  73. $city = isset($stopAreaSchedules['stopArea']['city']) ? ' - ' . $stopAreaSchedules['stopArea']['city'] : '';
  74. $parameters['groupBySubNetworks'] = true;
  75. $parameters['stopArea'] = $stopAreaSchedules['stopArea'] ?? [];
  76. $parameters['scheduleInputValue'] = $name . $city;
  77. $parameters['stopPoints'] = $stopAreaSchedules['stopPoints'] ?? [];
  78. $parameters['lines'] = $stopAreaSchedules['lines'] ?? [];
  79. $lines = $parameters['lines'];
  80. if (!empty($parameters['lines'])) {
  81. if ($parameters['groupBySubNetworks']) {
  82. $lines = [];
  83. foreach ($parameters['lines'] as $value) {
  84. foreach($value['line'] as $line) {
  85. $lines[]['line'] = $line;
  86. }
  87. }
  88. }
  89. $lineInfos = array_column($lines, 'line');
  90. $parameters['filters']['mode'] = array_unique(array_column($lineInfos, 'modeText'));
  91. $subnetworkInfos = array_column($lineInfos, 'subNetwork');
  92. $parameters['filters']['subnetwork'] = array_unique(array_column($subnetworkInfos, 'name'));
  93. }
  94. $parameters['departures'] = $stopAreaSchedules['departures'] ?? [];
  95. if (!empty($parameters['departures'])) {
  96. $departureLineInfos = array_column($parameters['departures'], 'line');
  97. $parameters['trainFilters']['mode'] = array_unique(array_column($departureLineInfos, 'modeText'));
  98. $departureSubnetworkInfos = array_column($departureLineInfos, 'subNetwork');
  99. $parameters['trainFilters']['subnetwork'] = array_unique(array_column($departureSubnetworkInfos, 'name'));
  100. }
  101. $parameters['stopAreaLines'] = $stopAreaLines;
  102. return $parameters;
  103. }
  104. }