<?php
namespace App\Controller\Line;
use App\Manager\LineScheduleManager;
use App\Normalizer\DisruptionNormalizer;
use App\Normalizer\Line\LineDirectionTimetableNormalizer;
use App\Service\Internal\DisruptionService;
use App\Service\Internal\HomePageService;
use App\Service\Internal\LineService;
use App\Validator\Schedule\LineSchedulesValidator;
use Knp\Snappy\Pdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ScheduleController extends AbstractController
{
/**
* Get line schedules
*/
public function list(
Request $request,
LineSchedulesValidator $lineSchedulesValidator,
HomePageService $homePageService,
LineScheduleManager $lineScheduleManager
) {
$origin = $request->headers->get('origin');
$baseUrl = 'https://' . $request->getHost();
$parameters = [];
$parameters['scheduleTemplate'] = 'line-schedules';
$now = new \DateTime();
$parameters['datetime'] = null !== $request->query->get('date') ? $request->query->get('date') : $now->format(\DateTime::ISO8601);
$parameters['activeTab'] = 'schedule';
$widgetContext = $request->query->get('w');
$parameters['widgetContext'] = $widgetContext;
if (!$request->isXmlHttpRequest() && (empty($origin) || $origin === $baseUrl)) {
$parameters['isXmlHttpMode'] = false;
// Validation
$get = $request->attributes->all();
$parameters['validator'] = $lineSchedulesValidator->validate($get);
// Display
if ($parameters['validator']['error'] === 0) {
$parameters = $lineScheduleManager->getListRenderParameters($get, $parameters);
}
$parameters['displayDisruptionWithAjax'] = true;
$parameters = $homePageService->getRenderParameters($get, $parameters);
$parameters = $parameters + $get;
return $this->render('pages/schedule/' . $parameters['scheduleTemplate'] . '.html.twig', $parameters);
} else {
$parameters['isXmlHttpMode'] = true;
// Validation
$get = $request->attributes->all();
$parameters['validator'] = $lineSchedulesValidator->validate($get);
// Display
if ($parameters['validator']['error'] === 0) {
$parameters = $lineScheduleManager->getListRenderParameters($get, $parameters);
}
return $this->render('modules/search-widget/schedule/' . $parameters['scheduleTemplate'] . '.html.twig', $parameters);
}
}
/**
* Print line schedules
*/
public function print(
Request $request,
LineSchedulesValidator $lineSchedulesValidator,
HomePageService $homePageService,
Pdf $knpSnappyPdf,
LineScheduleManager $lineScheduleManager
) {
$parameters = [];
$parameters['scheduleTemplate'] = 'line-schedules';
$parameters['datetime'] = $request->query->get("date");
$parameters['activeTab'] = 'schedule';
$parameters['isXmlHttpMode'] = false;
// Validation
$get = $request->attributes->all();
$parameters['validator'] = $lineSchedulesValidator->validate($get);
// Display
if ($parameters['validator']['error'] === 0) {
$parameters = $lineScheduleManager->getListRenderParameters($get, $parameters);
}
$parameters['isPdfPrint'] = true;
$parameters['isPdfDownloaded'] = true;
$parameters['fileDisplay'] = empty($request->query->get('download')) ? 'inline' : 'attachment';
$parameters = $homePageService->getRenderParameters($get, $parameters);
$parameters = $parameters + $get;
$html = $this->render('pages/schedule/pdf/' . $parameters['scheduleTemplate'] . '.html.twig', $parameters)->getContent();
return new Response(
$knpSnappyPdf->getOutputFromHtml($html, ['orientation' => 'Landscape']),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => $parameters['fileDisplay'] . '; filename="' . $parameters['filename'] . '.pdf"'
)
);
}
}