src/Controller/Line/ScheduleController.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Line;
  3. use App\Manager\LineScheduleManager;
  4. use App\Normalizer\DisruptionNormalizer;
  5. use App\Normalizer\Line\LineDirectionTimetableNormalizer;
  6. use App\Service\Internal\DisruptionService;
  7. use App\Service\Internal\HomePageService;
  8. use App\Service\Internal\LineService;
  9. use App\Validator\Schedule\LineSchedulesValidator;
  10. use Knp\Snappy\Pdf;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. class ScheduleController extends AbstractController
  15. {
  16. /**
  17. * Get line schedules
  18. */
  19. public function list(
  20. Request $request,
  21. LineSchedulesValidator $lineSchedulesValidator,
  22. HomePageService $homePageService,
  23. LineScheduleManager $lineScheduleManager
  24. ) {
  25. $origin = $request->headers->get('origin');
  26. $baseUrl = 'https://' . $request->getHost();
  27. $parameters = [];
  28. $parameters['scheduleTemplate'] = 'line-schedules';
  29. $now = new \DateTime();
  30. $parameters['datetime'] = null !== $request->query->get('date') ? $request->query->get('date') : $now->format(\DateTime::ISO8601);
  31. $parameters['activeTab'] = 'schedule';
  32. $widgetContext = $request->query->get('w');
  33. $parameters['widgetContext'] = $widgetContext;
  34. if (!$request->isXmlHttpRequest() && (empty($origin) || $origin === $baseUrl)) {
  35. $parameters['isXmlHttpMode'] = false;
  36. // Validation
  37. $get = $request->attributes->all();
  38. $parameters['validator'] = $lineSchedulesValidator->validate($get);
  39. // Display
  40. if ($parameters['validator']['error'] === 0) {
  41. $parameters = $lineScheduleManager->getListRenderParameters($get, $parameters);
  42. }
  43. $parameters['displayDisruptionWithAjax'] = true;
  44. $parameters = $homePageService->getRenderParameters($get, $parameters);
  45. $parameters = $parameters + $get;
  46. return $this->render('pages/schedule/' . $parameters['scheduleTemplate'] . '.html.twig', $parameters);
  47. } else {
  48. $parameters['isXmlHttpMode'] = true;
  49. // Validation
  50. $get = $request->attributes->all();
  51. $parameters['validator'] = $lineSchedulesValidator->validate($get);
  52. // Display
  53. if ($parameters['validator']['error'] === 0) {
  54. $parameters = $lineScheduleManager->getListRenderParameters($get, $parameters);
  55. }
  56. return $this->render('modules/search-widget/schedule/' . $parameters['scheduleTemplate'] . '.html.twig', $parameters);
  57. }
  58. }
  59. /**
  60. * Print line schedules
  61. */
  62. public function print(
  63. Request $request,
  64. LineSchedulesValidator $lineSchedulesValidator,
  65. HomePageService $homePageService,
  66. Pdf $knpSnappyPdf,
  67. LineScheduleManager $lineScheduleManager
  68. ) {
  69. $parameters = [];
  70. $parameters['scheduleTemplate'] = 'line-schedules';
  71. $parameters['datetime'] = $request->query->get("date");
  72. $parameters['activeTab'] = 'schedule';
  73. $parameters['isXmlHttpMode'] = false;
  74. // Validation
  75. $get = $request->attributes->all();
  76. $parameters['validator'] = $lineSchedulesValidator->validate($get);
  77. // Display
  78. if ($parameters['validator']['error'] === 0) {
  79. $parameters = $lineScheduleManager->getListRenderParameters($get, $parameters);
  80. }
  81. $parameters['isPdfPrint'] = true;
  82. $parameters['isPdfDownloaded'] = true;
  83. $parameters['fileDisplay'] = empty($request->query->get('download')) ? 'inline' : 'attachment';
  84. $parameters = $homePageService->getRenderParameters($get, $parameters);
  85. $parameters = $parameters + $get;
  86. $html = $this->render('pages/schedule/pdf/' . $parameters['scheduleTemplate'] . '.html.twig', $parameters)->getContent();
  87. return new Response(
  88. $knpSnappyPdf->getOutputFromHtml($html, ['orientation' => 'Landscape']),
  89. 200,
  90. array(
  91. 'Content-Type' => 'application/pdf',
  92. 'Content-Disposition' => $parameters['fileDisplay'] . '; filename="' . $parameters['filename'] . '.pdf"'
  93. )
  94. );
  95. }
  96. }