Recherche d'asset dynamique
eu.strasbourg.dynamic-search-strasbourg-result-display-max
Détail Entité
Se ha producido un error al procesar la plantilla.
Java method "jdk.proxy56.$Proxy365.getCurrentAndFuturePublishedEventsFromPlace(String)" threw an exception when invoked on jdk.proxy56.$Proxy365 object "eu.strasbourg.service.agenda.service.impl.EventLocalServiceImpl@b6dba5b"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign placeEvents = EventLocalServi... [in template "20116#20160#553507524" at line 483, column 9]
----
1<!-- Detail lieu -->
2<#setting locale=locale />
3
4<@liferay_util["html-bottom"]>
5 <script src="/o/0-global-theme/libs/leaflet/leaflet.js"></script>
6 <link rel="stylesheet" href="/o/0-global-theme/libs/leaflet/leaflet.css" />
7</@>
8
9<#assign fileEntryHelper=serviceLocator.findService("eu.strasbourg.utils.api.FileEntryHelperService") />
10<#assign EventLocalService=serviceLocator.findService("eu.strasbourg.service.agenda.service.EventLocalService") />
11
12<article class="st-place-detail">
13 <@barreAgenda />
14
15 <header class="st-header-fiche-place st-header-fiche">
16 <@liferay.breadcrumbs />
17
18 <div class="st-wrapper st-wrapper-small">
19 <div class="st-content">
20 <div class="st-caption">
21 <h1 class="st-h2">
22 ${entry.getAlias(locale)}
23 </h1>
24 <#if entry.getTypes()?has_content>
25 <ul class="st-surtitre-cat">
26 <#list entry.getTypes() as type>
27 <li>
28 ${type.getTitle(locale)}
29 </li>
30 </#list>
31 </ul>
32 </#if>
33 </div>
34 <#if entry.imageId?has_content && entry.imageId?number != 0>
35 <div class="st-image">
36 <@strasbourg.addImage fileEntryId=entry.imageId maxWidth=560 showCopyright=true />
37 </div>
38 </#if>
39 <div class="st-wrapper-maps">
40 <a href="#skip-map-cover" class="st-btn st--btn-xs st-skip-map st-sr-only st-sr-only-focusable">
41 <@liferay_ui.message key="eu.pass-map" />
42 </a>
43 <div class="st-maps" role="region" aria-label="<@liferay_ui.message key="eu.map" />"
44 data-lat="${ entry.getMercatorY() }" data-lng="${ entry.getMercatorX() }" data-zoom="17"
45 data-callback="initMap" data-marker="true" data-markericon="default">
46 </div>
47 <div id="skip-map-cover"></div>
48 </div>
49 </div>
50 <#if entry.isEnabled()>
51 <div class="st-bloc-info">
52 <#assign occupationState = entry.getRealTime() />
53 <#assign isSwimmingPool = entry.isSwimmingPool() />
54 <#assign isIceRink = entry.isIceRink() />
55 <#assign isMairie = entry.isMairie() />
56 <#assign isParking = entry.isParking() />
57 <#assign isVelhopStation = entry.isVelhopStation() />
58 <div class="st-top-bar__left">
59 <#if isSwimmingPool || isIceRink || isMairie>
60 <p><@liferay_ui.message key="${occupationState.label}-short" /></p>
61 <#else>
62 <#if entry.periods?has_content>
63 <#if entry.isOpenNow()>
64 <p class="st-ouverture st--open"> <@liferay_ui.message key="eu.currently-open" /></p>
65 <#else>
66 <p class="st-ouverture st--closed"> <@liferay_ui.message key="eu.currently-closed" /></p>
67 </#if>
68 </#if>
69 </#if>
70 </div>
71 <#if entry.isOpenNow() && occupationState != "NOT_AVAILABLE" && occupationState != "CLOSED" && occupationState != "DISABLED" && occupationState.occupation??>
72 <div class="st-top-bar__right">
73 <p class="st-frequentation">
74 <#if isSwimmingPool || isIceRink>
75 ${occupationState.occupation?number?round?string.number} <@liferay_ui.message key="eu.place.occupation" />
76 <#elseif isMairie>
77 ${occupationState.occupationLabel}
78 <#elseif isParking>
79 ${occupationState.available?number?round?string.number} <@liferay_ui.message key="eu.place.spots-available" />
80 <#elseif isVelhopStation>
81 ${occupationState.available?number?round?string.number} <@liferay_ui.message key="eu.place.velhop-available" />
82 </#if>
83 </p>
84 <p>
85 <#if isSwimmingPool >
86 <@liferay_ui.message key="eu.place.total-capacity-long" /> ${occupationState.capacity?number?round?string.number} <@liferay_ui.message key="eu.place.person-capacity" />
87 <#elseif isParking>
88 <@liferay_ui.message key="eu.place.total-capacity-long" /> ${occupationState.capacity?number?round?string.number} <@liferay_ui.message key="eu.place.place-capacity" />
89 </#if>
90 </p>
91 <p class="st-small-text">
92 <#if isSwimmingPool>
93 <@liferay_ui.message key="live-occupation-explanation" />
94 <#elseif isMairie>
95 <@liferay_ui.message key="estimated-time-explanation" />
96 <#elseif isIceRink>
97 <@liferay_ui.message key="live-ice-rink-occupation-explanation" />
98 </#if>
99 </p>
100 </div>
101 </#if>
102 </div>
103 </#if>
104 </div>
105 </header>
106
107 <div class="st-content st-main-content">
108 <!-- Horaires -->
109 <#if entry.periods?has_content || entry.hasURLSchedule>
110 <div class="st-bloc st-bloc-sit-onglets st-wrapper st-wrapper-small st--has-margin" id="horaire">
111 <h2 class="st-h3 st-bloc-sit-title">
112 <@liferay_ui.message key="eu.times" />
113 </h2>
114 <#if entry.hasURLSchedule>
115 <div class="st-bottom-part st-text-styles">
116 <a href="${entry.getScheduleLinkURL(locale)}" target="_blank"
117 title="${entry.getScheduleLinkName(locale)}" class="st-btn st--btn-secondary st--btn-full-width">
118 ${entry.getScheduleLinkName(locale)}
119 </a>
120 </div>
121 </#if>
122 <#if !entry.hasURLSchedule>
123 <div class="st-container">
124 <div class="st-slider-tablist st-js-slider-tablist splide" role="tablist">
125 <div class="splide__track">
126 <ul class="splide__list">
127 <li class="splide__slide">
128 <button class="st-slider-tablist__button" id="tab-button-1" type="button" role="tab"
129 aria-selected="true" aria-controls="tabpanel-1">
130 <span class="st-title"><@liferay_ui.message key="eu.place.next-days" /></span>
131 </button>
132 </li>
133 <#if entry.defaultPeriod?has_content>
134 <li class="splide__slide">
135 <button class="st-slider-tablist__button"
136 id="tab-button-${entry.defaultPeriod.getPeriodId()}" type="button" role="tab"
137 aria-selected="true"
138 aria-controls="tabpanel-${entry.defaultPeriod.getPeriodId()}">
139 <span class="st-title">${entry.defaultPeriod.getName(locale)}</span>
140 </button>
141 </li>
142 </#if>
143
144 <!-- Autres periodes -->
145 <#list entry.nonDefaultPeriods as period>
146 <li class="splide__slide">
147 <button class="st-slider-tablist__button" id="tab-button-${period.getPeriodId()}"
148 type="button" role="tab" aria-selected="true"
149 aria-controls="tabpanel-${period.getPeriodId()}">
150 <span class="st-title">${period.getName(locale)}</span>
151 <span class="st-surtitre-cat">${period.getDisplay(locale)}</span>
152 </button>
153 </li>
154
155 </#list>
156
157 </ul>
158 </div>
159 <div class="splide__arrows st-nav-arrows">
160 <button class="splide__arrow splide__arrow--prev st-btn-arrow st--prev"></button>
161 <button class="splide__arrow splide__arrow--next st-btn-arrow st--next"></button>
162 </div>
163 </div>
164 <div class="st-tabpanels">
165
166 <div class="st-tabpanel" id="tabpanel-1" role="tabpanel" tabindex="0" aria-labelledby="tab-button-1">
167 <#if entry.publishedSubPlaces?has_content>
168 <h3 class="st-subplaces">${entry.getAlias(locale)}</h3>
169 </#if>
170
171 <#assign daySchedulesMap=entry.getFollowingWeekSchedules(.now, locale) />
172 <#if daySchedulesMap?has_content>
173 <ul class="st-list-rows st-basic-grid st-col-2@t-small">
174
175 <#assign hasException=false />
176 <#list daySchedulesMap?keys as day>
177 <!-- Correctif car suite a une modif on n'envoie plus une liste vide mais null, donc erreur freemarker -->
178 <#if daySchedulesMap[day]?size !=1 ||
179 (daySchedulesMap[day]?size==1 &&
180 daySchedulesMap[day][0]?? &&
181 daySchedulesMap[day][0]?has_content)>
182
183 <li class="st-item-row">
184 <p class="st-title">${day}</p>
185 <div class="st-info st-u-color-secondary">
186 <#list daySchedulesMap[day] as schedule>
187 <#if schedule.isException() ||
188 schedule.isPublicHoliday()>
189 <#assign hasException=true />
190 <#assign hasAnyException=true />
191 <#else>
192 <#assign hasException=false />
193 </#if>
194 <#if schedule.isClosed()>
195 <p class="st-ouverture st--closed st-u-color-pink">
196 <@liferay_ui.message key="eu.closed" />
197 </p>
198 <#elseif schedule.isAlwaysOpen()>
199 <p class="st-ouverture">
200 <@liferay_ui.message key="always-open" />
201 </p>
202 <#else>
203 <#list schedule.openingTimes as openingTime>
204 <p>
205 ${openingTime.first} -
206 ${openingTime.second}
207 <#if hasException>
208 <span class="st-symbol">*</span>
209 </#if>
210 </p>
211 <#if schedule.comments[openingTime?index]?has_content>
212 <p class="st-note">
213 ${schedule.comments[openingTime?index]}
214 </p>
215 </#if>
216
217 </#list>
218 </#if>
219 </#list>
220
221 </div>
222 </li>
223
224 </#if>
225 </#list>
226 </ul>
227 </#if>
228 <!-- Jours suivants pour les sous-lieux -->
229 <#list entry.publishedSubPlaces as subPlace>
230 <h3 class="st-subplaces mt-4">${subPlace.getName(locale)}</h3>
231 <#assign
232 daySchedulesMap=subPlace.getFollowingWeekSchedules(.now,
233 locale) />
234 <#if daySchedulesMap?has_content>
235 <ul class="st-list-rows st-basic-grid st-col-2@t-small">
236
237 <#list daySchedulesMap?keys as day>
238 <!-- Correctif car suite a une modif on n'envoie plus une liste vide mais null, donc erreur freemarker -->
239 <#if daySchedulesMap[day]?size !=1 ||
240 (daySchedulesMap[day]?size==1 &&
241 daySchedulesMap[day][0]?? &&
242 daySchedulesMap[day][0]?has_content)>
243 <li class="st-item-row">
244 <p class="st-title">${day}</p>
245 <div class="st-info st-u-color-secondary">
246 <#list daySchedulesMap[day] as schedule>
247 <#if schedule.isException() ||
248 schedule.isPublicHoliday()>
249 <#assign hasException=true />
250 <#assign hasAnyException=true />
251 <#else>
252 <#assign hasException=false />
253 </#if>
254 <#if schedule.isClosed()>
255 <p class="st-ouverture st--closed st-u-color-pink">
256 <@liferay_ui.message key="eu.closed" />
257 </p>
258 <#elseif schedule.isAlwaysOpen()>
259 <p class="st-ouverture">
260 <@liferay_ui.message key="always-open" />
261 </p>
262 <#else>
263 <#list schedule.openingTimes
264 as openingTime>
265 <p>
266 ${openingTime.first}
267 -
268 ${openingTime.second}
269 <#if hasException>
270 <span class="st-symbol">*</span>
271 </#if>
272 </p>
273 <#if
274 schedule.comments[openingTime?index]?has_content>
275 <p class="st-note">
276 ${schedule.comments[openingTime?index]}
277 </p>
278 </#if>
279
280 </#list>
281 </#if>
282
283 </#list>
284 </div>
285 </li>
286 </#if>
287 </#list>
288 </ul>
289 </#if>
290 </#list>
291 <#if hasAnyException?has_content && hasAnyException>
292 <!-- Message pour exceptions -->
293 <p class="st-note">
294 <@liferay_ui.message
295 key="eu.place.look-at-exceptionnal-schedule" />
296 </p>
297 </#if>
298
299 </div>
300
301 <!-- Periode par defaut -->
302 <#if entry.defaultPeriod?has_content>
303 <div class="st-tabpanel st-is-hidden" id="tabpanel-${entry.defaultPeriod.getPeriodId()}" role="tabpanel" tabindex="0"
304 aria-labelledby="tab-button-${entry.defaultPeriod.getPeriodId()}">
305 <#if entry.publishedSubPlaces?has_content>
306 <h3 class="st-subplaces">${entry.getAlias(locale)}</h3>
307 </#if>
308 <#assign
309 weekSchedules=entry.defaultPeriod.getWeekSchedule() />
310 <#assign day=0 />
311 <#if weekSchedules?has_content>
312 <ul class="st-list-rows st-basic-grid st-col-2@t-small">
313
314 <#list weekSchedules as schedule>
315 <@showTime day schedule hasException />
316 <#assign day=day + 1 />
317 </#list>
318 </ul>
319 </#if>
320 <!-- Periode par defaut pour les sous-lieux -->
321 <#list entry.publishedSubPlaces as subPlace>
322 <h3 class="st-subplaces">${subPlace.getName(locale)}</h3>
323 <ul class="st-list-rows st-basic-grid st-col-2@t-small">
324 <#assign
325 weekSchedules=subPlace.defaultPeriod.getWeekSchedule(subPlace.subPlaceId) />
326 <#assign day=0 />
327 <#list weekSchedules as schedule>
328 <@showTime day schedule hasException />
329 <#assign day=day + 1 />
330 </#list>
331 </ul>
332 </#list>
333 <#if hasAnyException?has_content && hasAnyException>
334 <!-- Message pour exceptions -->
335 <p class="st-note">
336 <@liferay_ui.message
337 key="eu.place.look-at-exceptionnal-schedule" />
338 </p>
339 </#if>
340
341 </div>
342 </#if>
343
344 <!-- Autres periodes -->
345 <#list entry.nonDefaultPeriods as period>
346 <div class="st-tabpanel st-is-hidden" id="tabpanel-${period.getPeriodId()}" role="tabpanel" tabindex="0"
347 aria-labelledby="tab-button-${period.getPeriodId()}">
348 <#if entry.publishedSubPlaces?has_content>
349 <h3 class="st-subplaces">${entry.getAlias(locale)}</h3>
350 </#if>
351
352 <ul class="st-list-rows st-basic-grid st-col-2@t-small">
353 <#assign weekSchedules=period.getWeekSchedule() />
354 <#assign day=0 />
355 <#list weekSchedules as schedule>
356 <@showTime day schedule hasException />
357 <#assign day=day + 1 />
358 </#list>
359 </ul>
360 <!-- Periode par defaut pour autres périodes -->
361 <#list entry.publishedSubPlaces as subPlace>
362 <h3 class="st-subplaces">${subPlace.getName(locale)}</h3>
363 <ul class="st-list-rows st-basic-grid st-col-2@t-small">
364 <#assign
365 weekSchedules=period.getWeekSchedule(subPlace.subPlaceId) />
366 <#assign day=0 />
367 <#list weekSchedules as schedule>
368 <@showTime day schedule hasException />
369 <#assign day=day + 1 />
370 </#list>
371 </ul>
372 </#list>
373 <#if hasAnyException?has_content && hasAnyException>
374 <!-- Message pour exceptions -->
375 <p class="st-note">
376 <@liferay_ui.message
377 key="eu.place.look-at-exceptionnal-schedule" />
378 </p>
379 </#if>
380 </div>
381
382
383 </#list>
384 </ul>
385 </div>
386 <div class="st-bottom-part st-text-styles">
387 <#if !entry.hasURLSchedule>
388 <!-- Liste des exceptions -->
389 <#assign exceptions = entry.getCompletePlaceScheduleExceptionFreeMarker(.now, true, locale) />
390 <#if exceptions?has_content || (hasAnyException?has_content && hasAnyException)>
391
392 <h3 class="st-title-medium st-h4">
393 <@liferay_ui.message key="eu.exceptional-closings-openings" />
394 </h3>
395 <ul>
396 <#list exceptions as exception>
397 <#assign exceptionPlaceName = exception.getPlaceName() />
398 <li>
399 <strong><#if exceptionPlaceName != entry.getName()>${exceptionPlaceName} - </#if>${exception.getPeriodDisplay(locale)}</strong> :
400 <#if exception.isClosed()>
401 <@liferay_ui.message key="eu.closed" />
402 <#else>
403 <#list exception.openingTimes as openingTime>
404 ${openingTime.first} - ${openingTime.second}
405 <#sep>, </#sep>
406 </#list>
407 </#if>
408 - ${exception.description}
409 </li>
410 </#list>
411 </ul>
412 </#if>
413 </#if>
414
415 <#if entry.getExceptionalSchedule(locale)?has_content>
416 <h3 class="st-title-medium st-h4"><@liferay_ui.message key="eu.exceptional-schedule" /></h3>
417 ${entry.getExceptionalSchedule(locale)}
418
419 </#if>
420 </div>
421 </div>
422 </#if>
423
424 </div>
425 </#if>
426
427 <!-- Listing Lieu meme type -->
428 <#if entry.isSearchable()>
429 <#assign assetVocabularyHelper=serviceLocator.findService("eu.strasbourg.utils.api.AssetVocabularyHelperService") />
430 <#assign placeLocalService=serviceLocator.findService("eu.strasbourg.service.place.service.PlaceLocalService") />
431 <#list entry.types as type>
432 <#if (assetVocabularyHelper.getCategoryProperty(type.categoryId, 'searchable' )=='true' )>
433 <#assign category=type />
434 </#if>
435 </#list>
436 <#assign imageEntryId = assetVocabularyHelper.getCategoryImage(category.categoryId,'picto-vert') ! "" />
437 <div class="st-bloc st-bloc-sit-focus st--with-icon st-wrapper st-wrapper-small">
438 <div class="st-container">
439
440 <div class="st-col-left">
441 <#if imageEntryId?has_content>
442 <div class="st-icon-picto" style="width: 145px;">
443 <@strasbourg.addImage fileEntryId=imageEntryId.getFileEntryId() maxWidth=91 />
444 </div>
445
446 </#if>
447
448 <div class="st-content">
449 <h2 class="st-h3"><@liferay_ui.message key="eu.noel.go-elsewhere" /></h2>
450 <p class="st-surtitre-cat">
451 <#assign arg = [placeLocalService.getPlaceCountByAssetCategory(category, themeDisplay.getCompanyGroupId()), category.getTitle(locale)?lower_case]>
452 <@liferay_ui.message key="eu.noel.other-place-x-x" arguments= arg />
453 </p>
454 </div>
455 </div>
456
457 <div class="st-col-right">
458 <a href="${strasbourg.homeURL()}rechercher-lieu-public?p_p_id=eu_strasbourg_portlet_search_asset_v2_SearchAssetPortlet&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_eu_strasbourg_portlet_search_asset_v2_SearchAssetPortlet_vocabulariesCount=2&_eu_strasbourg_portlet_search_asset_v2_SearchAssetPortlet_keywords=&_eu_strasbourg_portlet_search_asset_v2_SearchAssetPortlet_vocabulary_0=${category.categoryId}&_eu_strasbourg_portlet_search_asset_v2_SearchAssetPortlet_vocabulary_1="
459 class="st-btn st--btn-secondary">
460 <@liferay_ui.message key="eu.see-all-other-places" />
461 </a>
462 </div>
463 </div>
464 </div>
465 </#if>
466
467 <!-- Presentation -->
468 <#if entry.getPresentation(locale)?has_content>
469 <div class="st-bloc st-bloc-sit-presentation st-wrapper st-wrapper-small st--has-margin">
470 <h2 class="st-h3 st-bloc-sit-title">
471 <@liferay_ui.message key="eu.presentation" />
472 </h2>
473 <div class="st-component-container st-text-styles">
474 <div class="st-limit-height ">
475 <p>${entry.getPresentation(locale)}</p>
476 </div>
477 <@strasbourg.showMore />
478 </div>
479 </div>
480 </#if>
481
482 <!-- Agenda -->
483 <#assign placeEvents=EventLocalService.getCurrentAndFuturePublishedEventsFromPlace(entry.getSIGid()) />
484 <#if entry.displayEvents && placeEvents?has_content>
485 <div class="st-bloc st-bloc-sit-agenda st-wrapper st-wrapper-small st--has-margin">
486 <h2 class="st-h3 st-bloc-sit-title">
487 <@liferay_ui.message key="agenda" />
488 </h2>
489 <ul class="st-cards-wrapper st--has-cards-horizontal st-basic-grid st-col-2@t-small">
490 <#assign i=0 />
491 <#list placeEvents?sort_by("startDateFirstCurrentAndFuturePeriod") as event>
492 <#if i==5>
493 <#break>
494 </#if>
495 <li>
496 <div class="st-card-container">
497 <a href="${strasbourg.homeURL()}evenement/-/entity/id/${event.eventId}/${event.getNormalizedTitle(locale)}"
498 class="st-card st-card-agenda st--text-only st--card-horizontal st--with-gradient"
499 title="${event.getTitle(locale)}">
500 <div class="st-caption">
501 <h3 class="st-title-card">${event.getTitle(locale)}</h3>
502 <p class="st-surtitre-cat">
503 <#list entry.getTypes() as type>
504 <span>
505 ${type.getTitle(locale)}
506 </span>
507 </#list>
508 </p>
509 <div class="st-infos">
510 <p class="st-date">
511 <span>
512 ${event.getEventScheduleDisplayShort(locale)}
513 </span>
514 </p>
515 <p class="st-location">
516 ${event.getPlaceAlias(locale)}
517 <#if event.getPlaceAddress(locale)?has_content>
518 - ${event.getPlaceAddress(locale)}
519 </#if>
520 - ${event.placeZipCode} ${event.getPlaceCity(locale)}
521 </p>
522 </div>
523 </div>
524 <div class="st-image">
525
526 <#if event.getImageId() !=0>
527 <@strasbourg.addImage fileEntryId=event.getImageId() maxWidth=100 isFigure=true />
528 <#else>
529 <figure class="st-figure st-fit-cover" role="group" aria-label=" © ${event.getExternalImageCopyright()}">
530 <picture>
531 <img src="${event.getImageURL()}" alt="" />
532 </picture>
533 <figcaption>
534 <#if event.getExternalImageCopyright()?has_content && event.getExternalImageCopyright() != "n/a">
535 <button type="button" class="st-credits st-js-credits" aria-expanded="false" aria-label="© (<@liferay_ui.message key="eu.copyright" />)">©</button>
536 <span class="st-credits-content">© ${event.getExternalImageCopyright()}</span>
537 </#if>
538 </figcaption>
539 </figure>
540 </#if>
541
542 </div>
543 </a>
544 </div>
545 </li>
546 <#assign i++>
547 </#list>
548 </ul>
549 <a href="${strasbourg.homeURL()}agenda?toDate=${.now?date?string["dd/MM"]}/${.now?date?string["yyyy"]?number + 1}&idSIGPlace=${entry.getSIGid()}"
550 class="st-btn st--btn-secondary"> <@liferay_ui.message key="sae.all-events" /></a>
551 </div>
552 </#if>
553
554 <!-- Activite -->
555 <#assign activityLocalService=serviceLocator.findService("eu.strasbourg.service.activity.service.ActivityLocalService") />
556 <#assign placeActivityAgenda=activityLocalService.getPlaceAgenda(entry.getSIGid(), locale) />
557 <#if placeActivityAgenda.periods?has_content>
558 <div class="st-bloc st-bloc-sit-onglets st-wrapper st-wrapper-small st--has-margin">
559 <h2 class="st-h3 st-bloc-sit-title">
560 <@liferay_ui.message key="eu.activity.activities" />
561 </h2>
562 <div class="st-container">
563 <div class="st-slider-tablist st-js-slider-tablist splide" role="tablist">
564 <div class="splide__track">
565 <ul class="splide__list">
566 <#list placeActivityAgenda.periods as period>
567 <li class="splide__slide">
568 <button class="st-slider-tablist__button" id="tab-button-${period.periodId}" type="button" role="tab" aria-selected="true" aria-controls="tabpanel-${period.periodId}">
569 <span class="st-title">${period.periodName}</span>
570 </button>
571 </li>
572 </#list>
573 </ul>
574 </div>
575 <div class="splide__arrows st-nav-arrows">
576 <button
577 class="splide__arrow splide__arrow--prev st-btn-arrow st--prev"></button>
578 <button
579 class="splide__arrow splide__arrow--next st-btn-arrow st--next"></button>
580 </div>
581 </div>
582 <div class="st-tabpanels">
583 <#list placeActivityAgenda.periods as period>
584 <div class="st-tabpanel st-is-hidden" id="tabpanel-${period.periodId}" role="tabpanel" tabindex="0" aria-labelledby="tab-button-${period.periodId}">
585 <#list period.courses as course>
586 <div class="st-detail-lien">
587 <h3 class="st-title-medium st-h4">${course.courseName} </h3>
588 <a href="${strasbourg.homeURL()}cours/-/entity/id/${course.courseId}"
589 class="st-btn st--btn-secondary-ghost st--btn-xs st--btn-small-padding">
590 <@liferay_ui.message key="eu.see-detail" />
591 </a>
592 </div>
593 <#assign hasSchedules=false />
594 <#-- Check if for each day there is a schedule. Dont show ul if no day is found-->
595 <#list 0..6 as day>
596 <#assign schedulesBool=course.getSchedulesForDay(day) />
597 <#if schedulesBool?has_content>
598 <#assign hasSchedules=true />
599 </#if>
600 </#list>
601
602 <#if hasSchedules>
603 <ul class="st-list-rows st-basic-grid st-col-2@t-small">
604 <#list 0..6 as day>
605 <#assign schedules=course.getSchedulesForDay(day) />
606 <#if schedules?has_content>
607 <li class="st-item-row">
608 <p class="st-title">
609 <@liferay_ui.message
610 key="${course.getDayName(day)}" />
611 </p>
612 <div class="st-info st-u-color-secondary">
613
614 <#list schedules as schedule>
615 <p>${schedule.startTime} -
616 ${schedule.endTime} </p><#sep>
617 </#sep>
618 </#list>
619
620 </div>
621 </li>
622 </#if>
623 </#list>
624 </ul>
625 </#if>
626 </#list>
627
628 </div>
629 </#list>
630 </div>
631 </div>
632 </div>
633 </#if>
634
635 <!-- Documents Utiles/Medias -->
636 <#if entry.documentURLs?has_content || entry.videos?has_content>
637 <div class="st-bloc st-bloc-liens st-wrapper st-wrapper-small st--has-margin">
638 <h2 class="st-h3 st-bloc-sit-title"><@liferay_ui.message key="eu.useful-documents" /></h2>
639 <div class="st-component-container">
640 <ul class="st-liste st-limit-height">
641
642 <#list entry.documentsIds?split(",") as fileId>
643 <#if fileId?has_content>
644 <#assign url = fileEntryHelper.getFileEntryURL(fileId?number) />
645
646 <#if url="">
647 <#continue>
648 </#if>
649
650 <#assign title = fileEntryHelper.getFileTitle(fileId?number, locale) />
651 <#assign size = fileEntryHelper.getReadableFileEntrySize(fileId?number, locale) />
652 <#assign extension = fileEntryHelper.getFileExtension(fileId?number) />
653 <li class="st-lien-container">
654 <a href="${url}" class="st-lien" download>
655 <p class="st-title-lien">${title}</p>
656 <div class="st-lien-content">
657 <p class="st-type">(${extension?upper_case} - ${size})</p>
658 <p class="st-text"><@liferay_ui.message key="eu.download" /></p>
659
660 </div>
661 </a>
662 </li>
663 </#if>
664 </#list>
665 </ul>
666 <@strasbourg.showMore />
667 </div>
668 </div>
669 </#if>
670
671 <!-- Informations complementaires, lien du site et accès -->
672 <#if (entry.getAdditionalInformation(locale)?has_content ||
673 (entry.getSiteLabel(locale)?has_content && entry.getSiteURL(locale)?has_content)) ||
674 entry.getAccess(locale)?has_content>
675 <div class="st-bloc st-bloc-sit-colonnes st-bloc-sit-services-handicap st-wrapper st-wrapper-small st-basic-grid st-col-2@t-small st--has-margin">
676 <!-- Informations complementaires et lien du site -->
677 <#if entry.getAdditionalInformation(locale)?has_content ||
678 (entry.getSiteLabel(locale)?has_content && entry.getSiteURL(locale)?has_content)>
679 <div class="st-col">
680 <div class="st-component-container st-text-styles">
681 <h2 class="st-h3 st-bloc-sit-title">
682 <@liferay_ui.message key="eu.place.additional-information" />
683 </h2>
684 <div class="st-limit-height ">
685 ${entry.getAdditionalInformation(locale)}
686 <#if entry.getSiteLabel(locale)?has_content && entry.getSiteURL(locale)?has_content>
687 <a href="${entry.getSiteURL(locale)}" target="_blank" rel="noopener">
688 ${entry.getSiteLabel(locale)}
689 </a>
690 </#if>
691 </div>
692 <@strasbourg.showMore />
693 </div>
694 </div>
695 </#if>
696
697 <!-- Acces -->
698 <#if entry.getAccess(locale)?has_content>
699 <div class="st-col">
700 <div class="st-component-container st-text-styles">
701 <h2 class="st-h3 st-bloc-sit-title">
702 <@liferay_ui.message key="access" />
703 </h2>
704 <div class="st-limit-height">
705 ${entry.getAccess(locale)}
706 </div>
707 <@strasbourg.showMore />
708 </div>
709 </div>
710 </#if>
711 </div>
712 </#if>
713
714 <!-- Acces pour handicapes -->
715 <#if entry.hasAnyAccessForDisabled() || entry.getAccessForDisabled(locale)?has_content>
716 <div class="st-bloc st-bloc-sit-services-handicap st-wrapper st-wrapper-small st--has-margin">
717 <h2 class="st-h3 st-bloc-sit-title">
718 <@liferay_ui.message key="eu.access-for-disabled" />
719 </h2>
720 <ul class="st-meta-wrapper">
721 <#if entry.accessForWheelchair>
722 <li>
723 <span class="st-icon-handicap" aria-hidden="true"></span>
724 <@liferay_ui.message key='eu.access-for-wheelchair' />
725 </li>
726 </#if>
727 <#if entry.accessForDeaf>
728 <li>
729 <span class="st-icon-handi-auditif" aria-hidden="true"></span>
730 <@liferay_ui.message key='eu.access-for-deaf' />
731 </li>
732 </#if>
733 <#if entry.accessForBlind>
734 <li>
735 <span class="st-icon-handicap-vision" aria-hidden="true"></span>
736 <@liferay_ui.message key='eu.access-for-blind' />
737 </li>
738 </#if>
739
740 <#if entry.accessForDeficient>
741 <li>
742 <span class="st-icon-handi-mental" aria-hidden="true"></span>
743 <@liferay_ui.message key='eu.access-for-deficient' />
744 </li>
745 </#if>
746
747 <#if entry.accessForElder>
748 <li>
749 <span class="st-icon-personnes-agees" aria-hidden="true"></span>
750 <@liferay_ui.message key='eu.access-for-elder' />
751 </li>
752 </#if>
753 </ul>
754 <div class="st-component-container st-text-styles">
755 <#if entry.getAccessForDisabled(locale)?has_content>
756 <div class="st-limit-height ">
757 ${entry.getAccessForDisabled(locale)}
758 </div>
759 </#if>
760 <@strasbourg.showMore />
761 </div>
762 </div>
763 </#if>
764
765 <!-- Services et caractéristiques-->
766 <#if entry.getServiceAndActivities(locale)?has_content || entry.getCharacteristics(locale)?has_content>
767 <div class="st-bloc st-bloc-sit-colonnes st-bloc-sit-services-handicap st-wrapper st-wrapper-small st-basic-grid st-col-2@t-small st--has-margin">
768 <!-- Services -->
769 <#if entry.getServiceAndActivities(locale)?has_content>
770 <div class="st-services">
771 <div class="st-component-container st-text-styles">
772 <h2 class="st-h3 st-bloc-sit-title">
773 <@liferay_ui.message key="eu.services-and-activities" />
774 </h2>
775 <div class="st-limit-height">
776 ${entry.getServiceAndActivities(locale)}
777 </div>
778 <@strasbourg.showMore />
779 </div>
780 </div>
781 </#if>
782
783 <!-- Caracteristiques -->
784 <#if entry.getCharacteristics(locale)?has_content>
785 <div class="st-caracteristiques">
786 <div class="st-component-container st-text-styles">
787 <h2 class="st-h3 st-bloc-sit-title">
788 <@liferay_ui.message key="eu.features" />
789 </h2>
790 <div class="st-limit-height ">
791 ${entry.getCharacteristics(locale)}
792 </div>
793 <@strasbourg.showMore />
794 </div>
795 </div>
796 </#if>
797 </div>
798 </#if>
799
800 <!-- Contact -->
801 <#if entry.mail?has_content || entry.phone?has_content>
802 <div class="st-bloc st-bloc-sit-focus st-wrapper st--has-margin">
803 <div class="st-container">
804 <div class="st-col-left">
805 <h2 class="st-h3"><@liferay_ui.message key="contact" /></h2>
806 <p class="st-surtitre-cat">${entry.getAlias(locale)}</p>
807 </div>
808 <div class="st-col-right">
809 <#if entry.phone?has_content>
810 <a href="tel:${entry.phone?replace(" ","")?replace("(0)","")}" class="st-btn st--btn-secondary">${entry.phone}</a>
811 </#if>
812
813 <#if entry.mail?has_content>
814 <a href="#st-overlay-contact" class="st-btn st--btn-secondary"><@liferay_ui.message key="eu.contact-mail" /></a>
815 </#if>
816 </div>
817 </div>
818 </div>
819 </#if>
820 </div>
821
822 <#if entry.mail?has_content>
823 <@liferay_portlet.actionURL var="contactURL" name="contact">
824 <@liferay_portlet.param name="classPK" value="${entry.getPlaceId()}" />
825 <@liferay_portlet.param name="entityId" value="${entry.getPlaceId()}" />
826 <@liferay_portlet.param name="title" value="${entry.getAlias(locale)}" />
827 <@liferay_portlet.param name="type" value="Place" />
828 </@liferay_portlet.actionURL>
829 <#assign overlayContactTitle=entry.getAlias(locale) />
830
831 <@strasbourg.overlayContact entry=entry entryType="Place" overlayContactTitle=overlayContactTitle />
832 </#if>
833</article>
834
835<#macro barreAgenda>
836 <div class="st-barre-single-sit st--place">
837 <div class="st-barre-inner st-wrapper">
838 <div class="st-container-left">
839 <div class="st-content">
840 <div>
841 <h5 class="st-title">
842 ${entry.getAlias(locale)}
843 </h5>
844 <#if entry.periods?has_content>
845 <#if entry.isOpenNow()>
846 <p class="st-date st--open"> <@liferay_ui.message key="eu.currently-open" /></p>
847 <#else>
848 <p class="st-date st--closed"> <@liferay_ui.message key="eu.currently-closed" /></p>
849 </#if>
850 </#if>
851 </div>
852 <p class="st-location">
853 <#if entry.addressStreet?has_content>
854 ${entry.addressStreet} <br>
855 </#if>
856 <#if entry.addressComplement?has_content>
857 ${entry.addressComplement} <br>
858 </#if>
859 <#if entry.addressDistribution?has_content>
860 ${entry.addressDistribution} <br>
861 </#if>
862 ${entry.addressZipCode} ${entry.getCity(locale)}
863 </p>
864 </div>
865 </div>
866 <div class="st-container-right">
867 <ul class="st-liens-rapides">
868 <#if entry.getSiteLabel(locale)?has_content && entry.getSiteURL(locale)?has_content>
869 <li>
870 <a href="${entry.getSiteURL(locale)}" class="st-btn-icon st-btn-icon--white" target="_blank"
871 rel="noopener"
872 title="${entry.getSiteLabel(locale)}">
873 <span class="st-icon-web" aria-hidden="true"></span>
874 <span class="st-sr-only">${entry.getSiteLabel(locale)}</span>
875 </a>
876 </li>
877 </#if>
878 </ul>
879 <@strasbourg.socialShare />
880 </div>
881 </div>
882 </div>
883</#macro>
884
885<#macro showTime day schedule hasException>
886 <li class="st-item-row">
887 <p class="st-title">
888 <@liferay_ui.message key="jour-semaine${day}" />
889 </p>
890 <div class="st-info st-u-color-secondary">
891 <#if schedule.isClosed()>
892 <p class="st-ouverture st--closed st-u-color-pink">
893 <@liferay_ui.message key="eu.closed" />
894 </p>
895 <#elseif schedule.isAlwaysOpen()>
896 <p class="st-ouverture">
897 <@liferay_ui.message key="always-open" />
898 </p>
899 <#else>
900 <#list schedule.openingTimes as openingTime>
901 <p>
902 ${openingTime.first}
903 -
904 ${openingTime.second}
905 <#if hasException>
906 <span class="st-symbol">*</span>
907 </#if>
908 </p>
909 <#if schedule.comments[openingTime?index]?has_content>
910 <p class="st-note">
911 ${schedule.comments[openingTime?index]}
912 </p>
913 </#if>
914
915 </#list>
916 </#if>
917 </div>
918 </li>
919</#macro>
INFOS LIVE
La magia se prepara entre bastidores
Aunque las fechas oficiales y la programación aún se están definiendo entre bastidores, ya se están preparando las mejores estancias en Estrasburgo. Alojamiento, tradiciones locales o cuestiones prácticas: descubre todo lo que necesitas saber para organizar, a tu ritmo, tu visita al corazón de la Capital de la Navidad.
Consulta nuestras preguntas frecuentes y prepara tu estancia
