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