src/EventSubscriber/ModeSubscriber.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Event\ModeEvent;
  4. use App\Model\Mode;
  5. use App\Service\Internal\NetworkService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. class ModeSubscriber implements EventSubscriberInterface
  8. {
  9. /**
  10. * @var NetworkService
  11. */
  12. protected $networkService;
  13. public function __construct(NetworkService $networkService)
  14. {
  15. $this->networkService = $networkService;
  16. }
  17. public static function getSubscribedEvents(): array
  18. {
  19. return [
  20. ModeEvent::NAME => [
  21. ['setNetworkInfos', 4],
  22. ['getLayoutModes', 3],
  23. ['getDefaultModes', 2],
  24. ['buildExcludedModes', 1],
  25. ['getIsochroneLayoutModes', 0]
  26. ]
  27. ];
  28. }
  29. public function setNetworkInfos(ModeEvent $event)
  30. {
  31. $event->setNetworkInfos($this->networkService->getNetwork());
  32. }
  33. public function getLayoutModes(ModeEvent $event)
  34. {
  35. $modesLayout = [];
  36. $networkInfos = $event->getNetworkInfos();
  37. if (!empty($networkInfos['networks'][0]['itineraryResultLayout']['standard'])) {
  38. $modesLayout = $networkInfos['networks'][0]['itineraryResultLayout']['standard'];
  39. }
  40. $event->setLayoutModes($modesLayout);
  41. }
  42. public function getDefaultModes(ModeEvent $event)
  43. {
  44. $defaultModes = [];
  45. $networkInfos = $event->getNetworkInfos();
  46. if (!empty($networkInfos['networks'][0]['modes'])) {
  47. $defaultModes = array_diff($networkInfos['networks'][0]['modes'], Mode::NOT_REALLY_MODES);
  48. }
  49. $event->setDefaultModes($defaultModes);
  50. }
  51. /**
  52. * @throws \Exception
  53. */
  54. public function buildExcludedModes(ModeEvent $event)
  55. {
  56. $selectedModesByUserForGivenJourney = $event->getSelectedModesByUserForGivenJourney();
  57. $excludedModes = $event->getDefaultExcludedModesUserPreferences();
  58. if (null !== $selectedModesByUserForGivenJourney) {
  59. $defaultModes = $event->getDefaultModes();
  60. $excludedModes = array_diff($defaultModes, $selectedModesByUserForGivenJourney);
  61. }
  62. $event->setExcludedModes(array_values($excludedModes));
  63. }
  64. public function getIsochroneLayoutModes(ModeEvent $event)
  65. {
  66. $networkInfos = $event->getNetworkInfos();
  67. $isochronesLayoutModes = $networkInfos['networks'][0]['layouts']['isochroneLayout'] ?? [];
  68. $event->setIsochroneLayoutModes($isochronesLayoutModes);
  69. }
  70. }