src/Controller/Line/ScheduleController.php line 23

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