templates/pages/_includes/details/_itinerary.html.twig line 1

Open in your IDE?
  1. {#
  2. Bloc « Votre itinéraire » sur la page détail.
  3. Variables attendues : cruise (entité Cruise).
  4. #}
  5. {% import '_snippets/components/macros/cruise.html.twig' as cruiseMacros %}
  6. {% import 'pages/_includes/details/_itinerary_macros.html.twig' as itineraryMacros %}
  7. {% set segments = cruise.itinerary.itinerarySegments|default([]) %}
  8. <div class="container-fluid mb-5">
  9. <div class="row">
  10. <div class="col-lg-1 col-md-1 col-sm-12"></div>
  11. <div class="col-lg-10 col-md-10 col-sm-12">
  12. <div class="itinerary br3">
  13. <h2>
  14. <div class="icon">{{ getLucidIcon('map-pin') }}</div>
  15. {{ 'details.itinerary.title'|trans }}
  16. </h2>
  17. <div class="itinerary-wrapper">
  18. <div class="itinerary-map-section">
  19. <div class="map">
  20. {{ cruiseMacros.leaflet_map(cruise) }}
  21. </div>
  22. </div>
  23. <div class="itinerary-stopovers-section">
  24. <div class="stopovers br3">
  25. <div class="your_stopovers">
  26. <div>{{ 'details.itinerary.your_stopovers'|trans }}</div>
  27. </div>
  28. <div class="stopovers_head">
  29. <div>{{ 'details.itinerary.day'|trans }}</div>
  30. <div class="stopover_name">{{ 'details.itinerary.stopover'|trans }}</div>
  31. <div>{{ 'details.itinerary.date'|trans }}</div>
  32. <div>{{ 'details.itinerary.arrival'|trans }}</div>
  33. <div>{{ 'details.itinerary.departure'|trans }}</div>
  34. </div>
  35. <div class="stopovers_body">
  36. {% for segment in segments %}
  37. {% set isSeaDay = segment.segmentType.value == 'day_at_sea' %}
  38. {% set stopover = segment.stopover|default(null) %}
  39. {% set isPortStop = stopover is not null and not isSeaDay %}
  40. {% set segmentDate = getSegmentDateForCruise(cruise, segment) %}
  41. {% set mediasStopover = isPortStop ? crea_media_get_medias(["Stopover"], stopover) : [] %}
  42. {% set stopoverDescription = isPortStop ? stopover.details.description|default(stopover.description|default('')) : '' %}
  43. {% set stopoverAccordions = isPortStop ? stopover.details.accordion|default([]) : [] %}
  44. {% set hasExpandableContent = isPortStop and (
  45. mediasStopover|length > 0
  46. or stopoverDescription|striptags|trim is not empty
  47. or stopover.whatToDo|default('') is not empty
  48. or stopover.accessGuide|default('') is not empty
  49. or stopoverAccordions is not empty
  50. ) %}
  51. {% set activities = getSegmentActivities(segment)|default([]) %}
  52. <div class="{{ hasExpandableContent ? 'accordion br2' : 'br2' }}">
  53. <div class="stopover{{ hasExpandableContent ? ' accordion-trigger' : '' }}">
  54. <div class="day">
  55. <div class="icon accordion-chevron{{ hasExpandableContent === false ? ' hidden' : '' }}">{{ getLucidIcon('chevron-down') }}</div>
  56. <div class="number {{ loop.first ? 'first' : '' }}">
  57. {{ itineraryMacros.day_marker(segment, loop) }}
  58. </div>
  59. </div>
  60. <div class="stopover_name">
  61. <div class="stopover_name_main">
  62. <div class="stopover_icon_mobile">
  63. {{ itineraryMacros.day_marker(segment, loop, true) }}
  64. </div>
  65. <div class="stopover_name_text">
  66. {% if isSeaDay %}
  67. {{ 'details.itinerary.day_at_sea'|trans }}
  68. {% else %}
  69. {{ stopover.name|default('')|raw }}
  70. {% endif %}
  71. {% if loop.first or loop.last %}
  72. <div class="first_or_last_stopover">
  73. {{ loop.first ? ('details.itinerary.embarkation'|trans) : ('details.itinerary.disembarkation'|trans) }}
  74. </div>
  75. {% endif %}
  76. {% if activities is not empty %}
  77. <div class="stopover_activity sea_destination">
  78. {% for activity in activities %}
  79. {% if activity.startTime is not null and activity.endTime is null %}
  80. {{ 'details.itinerary.sea_destination_activity.start_time'|trans({'%time%': activity.startTime|date('H:i')}) }}
  81. {% elseif activity.endTime is not null and activity.startTime is null %}
  82. {{ 'details.itinerary.sea_destination_activity.end_time'|trans({'%time%': activity.endTime|date('H:i')}) }}
  83. {% elseif activity.endTime is not null and activity.startTime is not null %}
  84. {{ 'details.itinerary.sea_destination_activity.both_times'|trans({'%start_time%': activity.startTime|date('H:i'), '%end_time%': activity.endTime|date('H:i')}) }}
  85. {% endif %}
  86. {% endfor %}
  87. </div>
  88. {% endif %}
  89. </div>
  90. </div>
  91. </div>
  92. <div class="stopover_date">{{ segmentDate ? segmentDate|date('d/m/Y') : '' }}</div>
  93. <div class="stopover_arrival">
  94. {% if segment.arrivalTime is not null %}
  95. {{ segment.arrivalTime|date('H:i') }}
  96. {% elseif loop.first %}
  97. {{ getLucidIcon('log-in') }}
  98. {% else %}
  99. -
  100. {% endif %}
  101. </div>
  102. <div class="stopover_departure">
  103. {% if segment.departureTime is not null %}
  104. {{ segment.departureTime|date('H:i') }}
  105. {% elseif loop.last %}
  106. {{ getLucidIcon('log-in') }}
  107. {% else %}
  108. -
  109. {% endif %}
  110. </div>
  111. </div>
  112. {% if hasExpandableContent %}
  113. {{ itineraryMacros.stopover_expandable_content(stopover, mediasStopover, stopoverDescription, stopoverAccordions) }}
  114. {% endif %}
  115. </div>
  116. {% endfor %}
  117. </div>
  118. </div>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. <div class="col-lg-1 col-md-1 col-sm-12"></div>
  124. </div>
  125. </div>