Détail Entité

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