Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> relatedLuoghi[0] [in template "20095#20121#34599" at line 331, column 22]
----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: relatedLuogo = relatedLuoghi[0] [in template "20095#20121#34599" at line 331, column 9]
----
1<#assign
2 FriendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")
3 ClassNameService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameService")
4 LayoutLocalService=serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")
5 JournalArticleLocalService=serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
6 journalArticleId=.vars['reserved-article-id'].data
7 journalArticleResourceLocalServiceUtil=staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"]
8 assetCategoryLocalServiceUtil=staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]
9 articleResourcePK=journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)
10 categorie_evento=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK)
11 AssetVocabularyLocalServiceUtil=staticUtil["com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil"]
12/>
13
14<#setting locale=themeDisplay.getLanguageId() />
15
16<#-- gestione dei breadcrumbs -->
17<#assign
18 paginaPadre=LayoutLocalService.getLayout(groupId, PaginaPadre.getData()?eval.privateLayout, PaginaPadre.getData()?eval.layoutId?number)
19 ancestors=paginaPadre.getAncestors()
20 sorted_ancestors = []
21/>
22<#list ancestors as parente>
23 <#assign
24 sorted_ancestors +=
25 [{
26 "name": parente.name,
27 "ancestors": parente.getAncestors()?size,
28 "data": parente
29 }]
30 />
31</#list>
32
33<div class="container finmatica-breadcrumb-container mb-4">
34 <div class="row justify-content-center">
35 <div class="col-12 col-lg-10">
36 <div class="cmp-breadcrumbs" role="navigation">
37 <nav class="breadcrumb-container" aria-label="breadcrumb">
38 <ol class="breadcrumb p-0" data-element="breadcrumb">
39 <li class="breadcrumb-item"><a
40 href="${themeDisplay.getThemeSetting('Home URL')}">
41 <span class="breadcrumb-text-truncate">Home</span>
42 </a>
43 <span class="separator">/</span>
44 </li>
45 <#list sorted_ancestors?sort_by("ancestors") as ancestor>
46 <li class="breadcrumb-item"><a
47 href="/portal${ancestor.data.getFriendlyURL()}">
48 <span class="breadcrumb-text-truncate">
49 ${ancestor.data.getName()}
50 </span>
51 </a>
52 <span class="separator">/</span>
53 </li>
54 </#list>
55 <li class="breadcrumb-item"><a
56 href="/portal${paginaPadre.getFriendlyURL()}">
57 <span class="breadcrumb-text-truncate">
58 ${paginaPadre.getName()}
59 </span>
60 </a>
61 <span class="separator">/</span>
62 </li>
63 <li class="breadcrumb-item">${Titolo.getData()}</li>
64 </ol>
65 </nav>
66 </div>
67 </div>
68 </div>
69</div>
70
71<#-- GET BOOLEANI -->
72<#assign
73 has_photo_gallery=GalleriaDiImmagini.getData()?has_content
74 has_video_gallery=GalleriaDiVideo.getData()?has_content
75 has_media=has_photo_gallery || has_video_gallery
76 has_evento_genitore = jsonFactoryUtil.createJSONObject(EventoGenitore.getData())?eval?has_content
77 has_appuntamenti = Appuntamenti.getData()?has_content
78 allegati = []
79 immagini_galleria = []
80/>
81
82<#-- GET TIPO EVENTO E ARGOMENTI -->
83<#assign
84 tipo_evento=[]
85 argomenti=[]
86/>
87<#list categorie_evento as categoryEntry>
88 <#assign
89 vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(categoryEntry.getVocabularyId())
90 className = ClassNameService.fetchClassName("com.liferay.asset.kernel.model.AssetCategory")
91 friendlyUrlEntry = FriendlyURLEntryLocalService.getMainFriendlyURLEntry(className.getClassNameId(), categoryEntry.categoryId)
92 friendlyUrlList = FriendlyURLEntryLocalService.getFriendlyURLEntryLocalizations(friendlyUrlEntry.friendlyURLEntryId)
93 cat_name = categoryEntry.name
94 cat_localized_name = categoryEntry.getTitle(themeDisplay.getLocale(), true),
95 cat_url = friendlyUrlList[0].urlTitle
96 />
97 <#assign vocabulary=AssetVocabularyLocalServiceUtil.getVocabulary(categoryEntry.getVocabularyId()) />
98 <#if vocabulary.name=="tassonomia argomento">
99 <#assign
100 argomenti +=
101 [{
102 "name": cat_localized_name,
103 "url": cat_url
104 }]
105 />
106
107 <#elseif vocabulary.name=="tassonomia tipo di evento" || vocabulary.getDescription()=="tipo evento" />
108 <#assign tipo_evento +=[ cat_localized_name ] />
109 </#if>
110</#list>
111
112<#assign has_argomenti=argomenti?size gt 0 />
113
114<#-- GET ALLEGATI -->
115<#if Allegati.getSiblings()?has_content>
116 <#list Allegati.getSiblings() as cur_allegato>
117 <#if cur_allegato.File.getData()?has_content>
118 <#assign
119 url_allegato=""
120 nome_allegato=""
121 allegato_data=jsonFactoryUtil.createJSONObject(cur_allegato.File.data)
122 url_allegato=cur_allegato.File.getData()
123 nome_allegato=cur_allegato.Etichetta.getData()?has_content?string("${cur_allegato.Etichetta.getData()}", "${cur_allegato.File.getData()}" )
124 allegati +=
125 [{
126 "url" : url_allegato,
127 "nome" : nome_allegato
128 }]
129 />
130 </#if>
131 </#list>
132</#if>
133
134<#if has_photo_gallery>
135 <#list GalleriaDiImmagini.getSiblings() as cur_GalleriaDiImmagini>
136 <#if cur_GalleriaDiImmagini.getData()?? && cur_GalleriaDiImmagini.getData() !="">
137 <#assign
138 immagini_galleria +=
139 [{
140 "alt": cur_GalleriaDiImmagini.getAttribute("alt")!"",
141 "fileentryid": cur_GalleriaDiImmagini.getAttribute("fileEntryId"),
142 "src": cur_GalleriaDiImmagini.getData()
143 }]
144 />
145 </#if>
146 </#list>
147</#if>
148
149<#if has_evento_genitore>
150 <#assign
151 evento_genitore_data = jsonFactoryUtil.createJSONObject(EventoGenitore.getData())
152 tipi_evento_genitore = []
153 relatedGenitori = JournalArticleLocalService.getArticlesByResourcePrimKey(evento_genitore_data.classPK?number)
154 relatedGenitore = relatedGenitori[0]
155 document = saxReaderUtil.read(relatedGenitore.getContent())
156 rootElement = document.getRootElement()
157 url_genitore = "/portal/-/${relatedGenitore.getUrlTitle()}"
158 nome_genitore = ""
159 descrizione_genitore = ""
160 immagine_genitore = ""
161 competenze_genitore = ""
162 data_inizio_genitore = ""
163 contatti_genitore = []
164 evento_genitore_categories = assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle", evento_genitore_data.classPK?number)
165 />
166 <#list evento_genitore_categories as categoryEntry>
167 <#assign
168 vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(categoryEntry.getVocabularyId())
169 className = ClassNameService.fetchClassName("com.liferay.asset.kernel.model.AssetCategory")
170 friendlyUrlEntry = FriendlyURLEntryLocalService.getMainFriendlyURLEntry(className.getClassNameId(), categoryEntry.categoryId)
171 friendlyUrlList = FriendlyURLEntryLocalService.getFriendlyURLEntryLocalizations(friendlyUrlEntry.friendlyURLEntryId)
172 cat_name = categoryEntry.name
173 cat_localized_name = categoryEntry.getTitle(themeDisplay.getLocale(), true),
174 cat_url = friendlyUrlList[0].urlTitle
175 />
176 <#if
177 vocabulary.name == "tassonomia tipo di evento"
178 || vocabulary.getDescription() == "tipo evento"
179 >
180 <#assign tipi_evento_genitore += [ cat_localized_name ] />
181 </#if>
182 </#list>
183
184 <#if rootElement.elements()?has_content>
185 <#list rootElement.elements() as dynamicElement>
186 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
187 <#assign nome_genitore = dynamicElement.element("dynamic-content").getText() />
188 <#elseif dynamicElement.attributeValue("field-reference") == "DescrizioneBreve">
189 <#assign descrizione_genitore = dynamicElement.element("dynamic-content").getText() />
190 <#elseif dynamicElement.attributeValue("field-reference") == "DataInizio">
191 <#assign data_inizio_genitore = getterUtil.getString(dynamicElement.element("dynamic-content").getData())?datetime("yyyy-MM-dd HH:mm")?string["dd/MM/yyyy"] />
192 <#assign data_inizio_genitore_day = getterUtil.getString(dynamicElement.element("dynamic-content").getData())?datetime("yyyy-MM-dd HH:mm")?string["dd"] />
193 <#assign data_inizio_genitore_month = getterUtil.getString(dynamicElement.element("dynamic-content").getData())?datetime("yyyy-MM-dd HH:mm")?string["MMMM"] />
194 <#elseif dynamicElement.attributeValue("field-reference")=="Immagine">
195 <#assign immagine_genitore=dynamicElement.element("dynamic-content").getText() />
196 <#if immagine_genitore?has_content>
197 <#assign immagine_genitore=jsonFactoryUtil.createJSONObject(immagine_genitore) />
198 <#if immagine_genitore?has_content>
199 <#assign immagine_genitore=immagine_genitore?eval />
200 </#if>
201 </#if>
202 <#elseif dynamicElement.attributeValue("field-reference") == "Competenze">
203 <#assign competenze_genitore = dynamicElement.element("dynamic-content").getText() />
204 <#elseif dynamicElement.attributeValue("field-reference") == "Contatti">
205 <#assign
206 contatti_genitore_data = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData())
207 relatedContatti = JournalArticleLocalService.getArticlesByResourcePrimKey(contatti_UO_data.classPK?number)
208 tipo_contatto = ""
209 valore_contatto = ""
210 categorie_contatti=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",contatti_UO_data.classPK?number)
211 relatedContatto = relatedContatti[0]
212 document = saxReaderUtil.read(relatedContatto.getContent())
213 rootElement = document.getRootElement()
214 />
215
216 <#list categorie_contatti as categoryEntry>
217 <#assign
218 vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(categoryEntry.getVocabularyId())
219 className = ClassNameService.fetchClassName("com.liferay.asset.kernel.model.AssetCategory")
220 friendlyUrlEntry = FriendlyURLEntryLocalService.getMainFriendlyURLEntry(className.getClassNameId(), categoryEntry.categoryId)
221 friendlyUrlList = FriendlyURLEntryLocalService.getFriendlyURLEntryLocalizations(friendlyUrlEntry.friendlyURLEntryId)
222 cat_name = categoryEntry.name
223 cat_localized_name = categoryEntry.getTitle(themeDisplay.getLocale(), true),
224 cat_url = friendlyUrlList[0].urlTitle
225 />
226 <#if categoryEntry.name?lower_case == "url">
227 <#assign tipo_contatto = "${languageUtil.get(locale, 'Sito-Web')}" />
228 <#else>
229 <#assign tipo_contatto = cat_localized_name />
230 </#if>
231 </#list>
232
233 <#list rootElement.elements() as dynamicElement>
234 <#if dynamicElement.attributeValue("name") == "Valore">
235 <#assign valore_contatto = dynamicElement.element("dynamic-content").getText()/>
236 </#if>
237 </#list>
238
239 <#assign contatti_UO += [tipo_contatto?string, valore_contatto?string] />
240 </#if>
241 </#list>
242 </#if>
243</#if>
244
245<#assign appuntamenti = [] />
246<#if Appuntamenti.getSiblings()?has_content>
247 <#list Appuntamenti.getSiblings() as cur_Appuntamenti>
248 <#assign
249 evento_appuntamento_data = jsonFactoryUtil.createJSONObject(cur_Appuntamenti.getData())
250 />
251 <#if evento_appuntamento_data.classPK?has_content>
252 <#assign
253 tipi_evento_appuntamento = []
254 relatedAppuntamenti = JournalArticleLocalService.getArticlesByResourcePrimKey(evento_appuntamento_data.classPK?number)
255 relatedAppuntamento = relatedAppuntamenti[0]
256 document = saxReaderUtil.read(relatedAppuntamento.getContent())
257 rootElement = document.getRootElement()
258 url_appuntamento = "/portal/-/${relatedAppuntamento.getUrlTitle()}"
259 nome_appuntamento = ""
260 descrizione_appuntamento = ""
261 immagine_appuntamento = ""
262 data_inizio_appuntamento = ""
263 evento_appuntamento_categories = assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle", evento_appuntamento_data.classPK?number)
264 />
265 <#list evento_appuntamento_categories as categoryEntry>
266 <#assign
267 vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(categoryEntry.getVocabularyId())
268 className = ClassNameService.fetchClassName("com.liferay.asset.kernel.model.AssetCategory")
269 friendlyUrlEntry = FriendlyURLEntryLocalService.getMainFriendlyURLEntry(className.getClassNameId(), categoryEntry.categoryId)
270 friendlyUrlList = FriendlyURLEntryLocalService.getFriendlyURLEntryLocalizations(friendlyUrlEntry.friendlyURLEntryId)
271 cat_name = categoryEntry.name
272 cat_localized_name = categoryEntry.getTitle(themeDisplay.getLocale(), true),
273 cat_url = friendlyUrlList[0].urlTitle
274 />
275 <#if
276 vocabulary.name == "tassonomia tipo di evento"
277 || vocabulary.getDescription() == "tipo evento"
278 >
279 <#assign tipi_evento_appuntamento += [ cat_localized_name ] />
280 </#if>
281 </#list>
282
283 <#if rootElement.elements()?has_content>
284 <#list rootElement.elements() as dynamicElement>
285 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
286 <#assign nome_appuntamento = dynamicElement.element("dynamic-content").getText() />
287 <#elseif dynamicElement.attributeValue("field-reference") == "DescrizioneBreve">
288 <#assign descrizione_appuntamento = dynamicElement.element("dynamic-content").getText() />
289 <#elseif dynamicElement.attributeValue("field-reference") == "DataInizio">
290 <#assign data_inizio_appuntamento = getterUtil.getString(dynamicElement.element("dynamic-content").getData())?datetime("yyyy-MM-dd HH:mm")?string["dd/MM/yyyy"] />
291 <#assign data_inizio_appuntamento_day = getterUtil.getString(dynamicElement.element("dynamic-content").getData())?datetime("yyyy-MM-dd HH:mm")?string["dd"] />
292 <#assign data_inizio_appuntamento_month = getterUtil.getString(dynamicElement.element("dynamic-content").getData())?datetime("yyyy-MM-dd HH:mm")?string["MMMM"] />
293 <#elseif dynamicElement.attributeValue("field-reference")=="Immagine">
294 <#assign immagine_appuntamento=dynamicElement.element("dynamic-content").getText() />
295 <#if immagine_appuntamento?has_content>
296 <#assign immagine_appuntamento=jsonFactoryUtil.createJSONObject(immagine_appuntamento) />
297 <#if immagine_appuntamento?has_content>
298 <#assign immagine_appuntamento=immagine_appuntamento?eval />
299 </#if>
300 </#if>
301 <#elseif dynamicElement.attributeValue("field-reference") == "Competenze">
302 <#assign competenze_appuntamento = dynamicElement.element("dynamic-content").getText() />
303 </#if>
304 </#list>
305 <#assign appuntamenti +=
306 [{
307 "nome": nome_appuntamento,
308 "immagine": immagine_appuntamento,
309 "descrizione": descrizione_appuntamento,
310 "data_inizio": data_inizio_appuntamento,
311 "giorno": data_inizio_appuntamento_day,
312 "mese": data_inizio_appuntamento_month,
313 "tipi": tipi_evento_appuntamento,
314 "url": url_appuntamento
315 }] />
316 </#if>
317 </#if>
318 </#list>
319</#if>
320
321<#-- GET LUOGO_DATA -->
322<#assign
323 luogo_data=jsonFactoryUtil.createJSONObject(Luogo.getData())
324 has_luogo=luogo_data?eval?has_content
325/>
326
327<#if has_luogo>
328 <#assign
329 relatedLuoghi=JournalArticleLocalService.getArticlesByResourcePrimKey(luogo_data.classPK?number)
330 relatedLuogo=relatedLuoghi[0]
331 document=saxReaderUtil.read(relatedLuogo.getContent())
332 rootElement=document.getRootElement()
333 nome_luogo=""
334 url_luogo="${relatedLuogo.getUrlTitle()}"
335 indirizzo_luogo=""
336 orari_luogo=""
337 immagine_luogo=""
338 urlImmagine_luogo=""
339 has_immagine_luogo=false
340 />
341 <#list rootElement.elements() as dynamicElement>
342 <#if dynamicElement.attributeValue("field-reference")=="Titolo">
343 <#assign nome_luogo=dynamicElement.element("dynamic-content").getText() />
344 <#elseif dynamicElement.attributeValue("field-reference")=="Indirizzo">
345 <#assign indirizzo_luogo=dynamicElement.element("dynamic-content").getText() />
346 <#elseif dynamicElement.attributeValue("field-reference")=="OrarioPerIlPubblico">
347 <#assign orari_luogo=dynamicElement.element("dynamic-content").getText() />
348 <#elseif dynamicElement.attributeValue("field-reference")=="Immagine">
349 <#assign immagine_luogo="" />
350 <#if dynamicElement.element("dynamic-content")??>
351 <#assign immagine_luogo=dynamicElement.element("dynamic-content").getText() />
352 <#if immagine_luogo?has_content>
353 <#assign immagine_luogo=jsonFactoryUtil.createJSONObject(immagine_luogo) />
354 <#if immagine_luogo?has_content && immagine_luogo.url?has_content>
355 <#assign
356 immagine_luogo=immagine_luogo?eval
357 has_immagine_luogo=immagine_luogo?has_content && immagine_luogo.url?has_content />
358 <#else>
359 <#assign has_immagine_luogo=false />
360 </#if>
361 </#if>
362 </#if>
363 </#if>
364 </#list>
365</#if>
366<#-- GET DATI UO -->
367<#assign
368 data_UO=jsonFactoryUtil.createJSONObject(OrganizzatoDa.getData())
369 has_UO=data_UO?eval?has_content
370/>
371<#if has_UO>
372 <#assign
373 relatedArticles=JournalArticleLocalService.getArticlesByResourcePrimKey(data_UO.classPK?number)
374 relatedArticle=relatedArticles[0]
375 document=saxReaderUtil.read(relatedArticle.getContent())
376 rootElement=document.getRootElement()
377 url_UO=relatedArticle.getUrlTitle()
378 nome_UO=""
379 descrizione_UO=""
380 immagine_UO=""
381 urlImmagine_UO=""
382 competenze_UO=""
383 indirizzo_UO=""
384 contatti_UO=[]
385 />
386 <#if rootElement.elements()?has_content>
387 <#list rootElement.elements() as dynamicElement>
388 <#if dynamicElement.attributeValue("field-reference")=="Titolo">
389 <#assign nome_UO=dynamicElement.element("dynamic-content").getText() />
390 <#elseif dynamicElement.attributeValue("field-reference")=="DescrizioneBreve">
391 <#assign descrizione_UO=dynamicElement.element("dynamic-content").getText() />
392 <#elseif dynamicElement.attributeValue("field-reference")=="Immagine">
393 <#assign immagine_UO=jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData()) />
394 <#if immagine_UO.uuid?has_content>
395 <#assign urlImmagine_UO="/portal/c/document_library/get_file?uuid=" + immagine_UO.uuid + "&groupId=" + immagine_UO.groupId />
396 </#if>
397 <#elseif dynamicElement.attributeValue("field-reference")=="Competenze">
398 <#assign competenze_UO=dynamicElement.element("dynamic-content").getText() />
399 <#elseif dynamicElement.attributeValue("field-reference")=="SedePrincipale">
400 <#assign
401 sede_UO_data=jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData())
402 relatedSedi=JournalArticleLocalService.getArticlesByResourcePrimKey(sede_UO_data.classPK?number)
403 relatedSede=relatedSedi[0]
404 document=saxReaderUtil.read(relatedSede.getContent())
405 rootElement=document.getRootElement()
406 />
407 <#list rootElement.elements() as dynamicElement>
408 <#if dynamicElement.attributeValue("field-reference")=="Indirizzo">
409 <#assign indirizzo_UO=dynamicElement.element("dynamic-content").getText() />
410 </#if>
411 </#list>
412 <#elseif dynamicElement.attributeValue("field-reference")=="Contatti">
413 <#assign
414 valore_contatto=""
415 contatti_UO_data=jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData())
416 relatedContatti=JournalArticleLocalService.getArticlesByResourcePrimKey(contatti_UO_data.classPK?number)
417 relatedContatto=relatedContatti[0]
418 document=saxReaderUtil.read(relatedContatto.getContent())
419 rootElement=document.getRootElement()
420 />
421 <#list rootElement.elements() as dynamicElement>
422 <#if dynamicElement.element("dynamic-content").getText()?has_content>
423 <#assign
424 tipo_contatto=(dynamicElement.attributeValue("field-reference")=="URL" )?string("Sito Web", dynamicElement.attributeValue("field-reference"))
425 contatti_UO +=
426 [{
427 "tipo" : tipo_contatto,
428 "valore" : dynamicElement.element("dynamic-content").getText()
429 }]
430 />
431 </#if>
432 </#list>
433 </#if>
434 </#list>
435 </#if>
436</#if>
437
438<#-- SEZIONE GET CONTATTI -->
439<#assign
440 contatti_wallet=[]
441 contatti_data=jsonFactoryUtil.createJSONObject(PuntiDiContatto.getData())
442 has_contatti=contatti_data?eval?has_content
443/>
444<#if has_contatti>
445 <#assign
446 relatedArticles=JournalArticleLocalService.getArticlesByResourcePrimKey(contatti_data.classPK?number)
447 relatedArticle=relatedArticles[0]
448 document=saxReaderUtil.read(relatedArticle.getContent())
449 rootElement=document.getRootElement()
450 />
451 <#list rootElement.elements() as dynamicElement>
452 <#if dynamicElement.element("dynamic-content")?? && dynamicElement.element("dynamic-content").getText()?has_content>
453 <#assign
454 tipo_contatto=(dynamicElement.attributeValue("field-reference")=="URL" )?string("Sito Web", dynamicElement.attributeValue("field-reference"))
455 contatti_wallet +=
456 [{
457 "tipo" : tipo_contatto,
458 "valore" : dynamicElement.element("dynamic-content").getText()
459 }]
460 />
461 </#if>
462 </#list>
463</#if>
464
465<#assign parteciperanno=[] />
466<#if Parteciperanno.getData()?has_content>
467 <#list Parteciperanno.getSiblings() as cur_Persone>
468 <#assign
469 cur_persona_data=jsonFactoryUtil.createJSONObject(cur_Persone.getData())
470 relatedPersone=JournalArticleLocalService.getArticlesByResourcePrimKey(cur_persona_data.classPK?number)
471 relatedPersona=relatedPersone[0]
472 document=saxReaderUtil.read(relatedPersona.getContent())
473 rootElement=document.getRootElement()
474 nome_persona=""
475 cognome_persona=""
476 immagine_persona=""
477 biografia=""
478 incarichi=[]
479 />
480 <#list rootElement.elements() as dynamicElement>
481 <#if dynamicElement.attributeValue("field-reference")=="Nome">
482 <#assign nome_persona=dynamicElement.element("dynamic-content").getText() />
483 <#elseif dynamicElement.attributeValue("field-reference")=="Cognome">
484 <#assign cognome_persona=dynamicElement.element("dynamic-content").getText() />
485 <#elseif dynamicElement.attributeValue("field-reference")=="Incarichi">
486 <#assign
487 incarichi_data=jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getText())
488 has_incarichi=incarichi_data?eval?? && incarichi_data?eval?has_content
489 />
490
491 <#if has_incarichi>
492 <#assign
493 relatedIncarichi=JournalArticleLocalService.getArticlesByResourcePrimKey(incarichi_data.classPK?number)
494 relatedIncarico=relatedIncarichi[0]
495 document=saxReaderUtil.read(relatedIncarico.getContent())
496 rootElement=document.getRootElement()
497 />
498 <#list rootElement.elements() as dynamicElement>
499 <#if dynamicElement.attributeValue("field-reference")=="Titolo">
500 <#assign
501 nome_incarico = dynamicElement.element("dynamic-content").getText()
502 incarichi += [ nome_incarico ]
503 />
504 </#if>
505 </#list>
506 </#if>
507
508 <#elseif dynamicElement.attributeValue("field-reference")=="Biografia">
509 <#assign biografia=dynamicElement.element("dynamic-content").getText() />
510 <#elseif dynamicElement.attributeValue("field-reference")=="Immagine">
511 <#assign immagine=dynamicElement.element("dynamic-content").getText() />
512 <#if immagine?has_content>
513 <#assign immagine=jsonFactoryUtil.createJSONObject(immagine) />
514 <#if immagine?has_content>
515 <#assign immagine=immagine?eval />
516 </#if>
517 </#if>
518 </#if>
519 </#list>
520 <#assign
521 parteciperanno +=
522 [{
523 "nome" : nome_persona + " " + cognome_persona,
524 "url" : "${cur_Persone.getFriendlyUrl()}",
525 "immagine" : immagine,
526 "biografia" : biografia,
527 "incarichi" : incarichi
528 }]
529 />
530 </#list>
531</#if>
532<div class="container">
533 <div class="row justify-content-center">
534 <div class="col-12 col-lg-10">
535 <div class="cmp-heading pb-3 pb-lg-4">
536 <div class="row">
537 <div class="col-lg-8 py-lg-2">
538 <h1>
539 ${Titolo.getData()}
540 </h1>
541 <h2 class="visually-hidden"><@liferay.language key="announcement-details" /></h2>
542 <p>
543 ${Sottotitolo.getData()}
544 </p>
545 <div class="row mt-5 mb-4">
546
547 <#if (DataInizio.getData())??>
548 <#assign DataInizio_Data=getterUtil.getString(DataInizio.getData()) />
549 <#if validator.isNotNull(DataInizio_Data)>
550 <div class="col-6">
551 <small><@liferay.language key="event-start" />:</small>
552 <p class="fw-semibold font-monospace">
553 ${DataInizio_Data?datetime("yyyy-MM-dd HH:mm")?string["dd/MM/yyyy HH:mm"]}
554 </p>
555 </div>
556 </#if>
557 </#if>
558
559 <#if (DataFine.getData())??>
560 <#assign DataFine_Data=getterUtil.getString(DataFine.getData()) />
561 <#if validator.isNotNull(DataFine_Data)>
562 <div class="col-6">
563 <small><@liferay.language key="event-end" />:</small>
564 <p class="fw-semibold font-monospace">
565 ${DataFine_Data?datetime("yyyy-MM-dd HH:mm")?string["dd/MM/yyyy HH:mm"]}
566 </p>
567 </div>
568 </#if>
569 </#if>
570
571 </div>
572 </div>
573
574 <div class="col-lg-3 offset-lg-1 mt-5 mt-lg-0">
575
576 <div class="dropdown" id="fallback-share">
577 <button
578 aria-label="condividi sui social"
579 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-6 text-primary"
580 type="button"
581 id="shareActions"
582 data-bs-toggle="dropdown"
583 aria-haspopup="true"
584 aria-expanded="false"
585 >
586 <svg class="icon icon-primary" aria-hidden="true">
587 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-share"></use>
588 </svg>
589 <small><@liferay.language key="share" /></small>
590 </button>
591 <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions">
592 <div class="link-list-wrapper">
593 <ul class="link-list" role="menu">
594 <li role="none">
595 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('facebook')">
596 <svg class="icon icon-primary" aria-hidden="true">
597 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-facebook"></use>
598 </svg>
599 <span>Facebook</span>
600 </button>
601 </li>
602 <li role="none">
603 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('twitter')">
604 <svg class="icon icon-primary" aria-hidden="true">
605 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-twitter"></use>
606 </svg>
607 <span><@liferay.language key="Twitter" /></span>
608 </button>
609 </li>
610 <li role="none">
611 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('whatsapp')">
612 <svg class="icon icon-primary" aria-hidden="true">
613 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-whatsapp"></use>
614 </svg>
615 <span>Whatsapp</span>
616 </button>
617 </li>
618 </ul>
619 </div>
620 </div>
621 </div>
622
623 <div class="dropdown">
624 <button
625 aria-label="vedi azioni da compiere sulla pagina"
626 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-0"
627 type="button"
628 id="viewActions"
629 data-bs-toggle="dropdown"
630 aria-haspopup="true"
631 aria-expanded="false"
632 >
633 <svg class="icon icon-primary" aria-hidden="true">
634 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-more-items"></use>
635 </svg>
636 <small><@liferay.language key="actions" /></small>
637 </button>
638 <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions">
639 <div class="link-list-wrapper">
640 <ul class="link-list" role="menu">
641 <li role="none">
642 <button class="list-item px-3 fs-6 text-primary" onclick="window.print()" role="menuitem">
643 <svg class="icon icon-primary" aria-hidden="true">
644 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-print"></use>
645 </svg>
646 <span><@liferay.language key="print" /></span>
647 </button>
648 </li>
649 <li role="none">
650 <a class="list-item mail-anchor px-3 fs-6" href="mailto:" role="menuitem">
651 <svg class="icon icon-primary" aria-hidden="true">
652 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-mail"></use>
653 </svg>
654 <span><@liferay.language key="send" /></span>
655 </a>
656 </li>
657 </ul>
658 </div>
659 </div>
660 </div>
661
662 <#list argomenti>
663 <div class="mt-4 mb-3">
664 <span class="text-paragraph-small fw-semibold"><@liferay.language key="topics" />:</span>
665 <ul class="d-flex flex-wrap gap-2 mt-10 mb-3">
666
667 <#items as argomento>
668 <li>
669 <a href="${argomento.url}" class="chip chip-simple">
670 <span class="chip-label">
671 ${argomento.name}
672 </span>
673 </a>
674 </li>
675 </#items>
676
677 </ul>
678 </div>
679 </#list>
680
681 <#list tipo_evento>
682 <div class="mb-3">
683 <span class="text-paragraph-small fw-semibold"><@liferay.language key="event-type" />:</span>
684 <ul>
685 <#items as tipo>
686 <li>
687 <span class="badge bg-primary">
688 ${tipo}
689 </span>
690 </li>
691 </#items>
692
693 </ul>
694 </div>
695 </#list>
696
697 </div>
698 </div>
699 </div>
700 </div>
701
702 </div>
703</div>
704<#-- IMMAGINE HERO -->
705<#if Immagine.getData()?? && Immagine.getData() !="">
706<div class="container-fluid my-3">
707 <div class="row">
708 <figure class="figure px-0 img-full">
709 <img src="${Immagine.getData()}" class="figure-img img-fluid" alt="${Immagine.getAttribute('alt')}" loading="lazy">
710 <figcaption class="figure-caption text-center pt-3">
711 ${Immagine.getAttribute("alt")}
712 </figcaption>
713 </figure>
714 </div>
715</div>
716</#if>
717<#-- NAVIGAZIONE E CONTENUTO -->
718<div class="container">
719 <div class="row border-top border-light row-column-menu-left pb-4 pb-lg-80">
720 <div class="col-12 col-lg-3 mb-4 border-col">
721 <div class="cmp-navscroll sticky-top" aria-labelledby="accordion-title-one">
722 <nav class="navbar it-navscroll-wrapper navbar-expand-lg" aria-label="<@liferay.language key='page-index' />" data-bs-navscroll="">
723 <div class="navbar-custom" id="navbarNavProgress">
724 <div class="menu-wrapper">
725 <div class="link-list-wrapper">
726 <div class="accordion">
727 <div class="accordion-item">
728 <span class="accordion-header" id="accordion-title-one">
729 <button class="accordion-button pb-10 px-3" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-one" aria-expanded="true" aria-controls="collapse-one">
730 <@liferay.language key="page-index" />
731 <svg class="icon icon-xs right">
732 <use href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-expand"></use>
733 </svg>
734 </button>
735 </span>
736 <div class="progress">
737 <div class="progress-bar it-navscroll-progressbar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;" aria-label="Progress bar"></div>
738 </div>
739 <div id="collapse-one" class="accordion-collapse collapse show" role="region" aria-labelledby="accordion-title-one">
740 <div class="accordion-body">
741 <ul class="link-list" data-element="page-index">
742 <#-- LINK A SEZIONE -->
743
744 <#if Descrizione.getData()?has_content>
745 <li class="nav-item">
746 <a class="nav-link" href="#description">
747 <span class="title-medium"><@liferay.language key="description" /></span>
748 </a>
749 </li>
750 </#if>
751
752 <#if has_evento_genitore>
753 <li class="nav-item">
754 <a class="nav-link" href="#parent">
755 <span class="title-medium"><@liferay.language key="parent-event" /></span>
756 </a>
757 </li>
758 </#if>
759
760 <#if Parteciperanno.getData()?has_content>
761 <li class="nav-item">
762 <a class="nav-link" href="#people">
763 <span class="title-medium"><@liferay.language key="will-participate" /></span>
764 </a>
765 </li>
766 </#if>
767
768 <#if has_media>
769 <li class="nav-item">
770 <a class="nav-link" href="#galleries">
771 <span class="title-medium"><@liferay.language key="images-and-videos" /></span>
772 </a>
773 </li>
774 </#if>
775
776 <#if AChieRivolto.getData()?has_content>
777 <li class="nav-item">
778 <a class="nav-link" href="#who">
779 <span class="title-medium"><@liferay.language key="aimed-at" /></span>
780 </a>
781 </li>
782 </#if>
783
784 <#if has_luogo>
785 <li class="nav-item">
786 <a class="nav-link" href="#place">
787 <span class="title-medium"><@liferay.language key="place" /></span>
788 </a>
789 </li>
790 </#if>
791
792 <#if Costo.getData()?has_content>
793 <li class="nav-item">
794 <a class="nav-link" href="#costs">
795 <span class="title-medium"><@liferay.language key="costs" /></span>
796 </a>
797 </li>
798 </#if>
799
800 <#if allegati?size gt 0>
801 <li class="nav-item">
802 <a class="nav-link" href="#attachments">
803 <span class="title-medium"><@liferay.language key="attachments" /></span>
804 </a>
805 </li>
806 </#if>
807
808 <#if appuntamenti?size gt 0>
809 <li class="nav-item">
810 <a class="nav-link" href="#appointments">
811 <span class="title-medium"><@liferay.language key="meetups" /></span>
812 </a>
813 </li>
814 </#if>
815
816 <#if has_contatti>
817 <li class="nav-item">
818 <a class="nav-link" href="#contacts">
819 <span class="title-medium"><@liferay.language key="contacts" /></span>
820 </a>
821 </li>
822 </#if>
823
824 <#if has_UO>
825 <li class="nav-item">
826 <a class="nav-link" href="#office">
827 <span class="title-medium"><@liferay.language key="organized-by" /></span>
828 </a>
829 </li>
830 </#if>
831
832 <#if PatrocinatoDa.getData()?? && PatrocinatoDa.getData()?has_content>
833 <li class="nav-item">
834 <a class="nav-link" href="#patrocinato">
835 <span class="title-medium"><@liferay.language key="sponsored-by" /></span>
836 </a>
837 </li>
838 </#if>
839
840 <#if Sponsor.getData()?has_content>
841 <li class="nav-item">
842 <a class="nav-link" href="#sponsor">
843 <span class="title-medium"><@liferay.language key="sponsors" /></span>
844 </a>
845 </li>
846 </#if>
847
848 <#if UlterioriInformazioni.getData()?has_content>
849 <li class="nav-item">
850 <a class="nav-link" href="#more-info">
851 <span class="title-medium"><@liferay.language key="more-info" /></span>
852 </a>
853 </li>
854 </#if>
855 </ul>
856 </div>
857 </div>
858 </div>
859 </div>
860 </div>
861 </div>
862 </div>
863 </nav>
864 </div>
865 </div>
866 <div class="col-12 col-lg-8 offset-lg-1">
867 <div class="it-page-sections-container pt-4">
868 <#-- CONTENUTO -->
869 <#if Descrizione.getData()?has_content>
870 <section class="it-page-section mb-30" id="description">
871 <h2 class="title-xxlarge mb-3"><@liferay.language key="description" /></h2>
872 <div class="richtext-wrapper lora">
873 ${Descrizione.getData()}
874 </div>
875 </section>
876 </#if>
877
878 <#if has_evento_genitore>
879 <section class="it-page-section mb-30" id="parent">
880 <h2 class="title-xxlarge mb-3"><@liferay.language key="parent-event" /></h2>
881 <div class="row">
882 <div class="col-12">
883 <div class="card-wrapper border border-light rounded shadow-sm cmp-list-card-img cmp-list-card-img-hr">
884 <div class="card no-after rounded mw-100">
885 <div class="row g-2 g-md-0 flex-md-column">
886 <#if immagine_genitore?has_content && immagine_genitore.url?has_content>
887 <div class="col-4 order-2 order-md-1" style="position-relative">
888 <div class="card-calendar d-flex flex-column justify-content-center">
889 <span class="card-date">${data_inizio_genitore_day}</span>
890 <span class="card-day">${data_inizio_genitore_month}</span>
891 </div>
892 <img
893 class="rounded-top img-fluid img-responsive"
894 src="${immagine_genitore.url}"
895 title="${nome_genitore}"
896 alt="${nome_genitore}"
897 />
898 </div>
899 </#if>
900 <div class="col-8 order-1 order-md-2">
901 <div class="card-body pb-0">
902 <div class="category-top cmp-list-card-img__body">
903 <div>
904 <span class="category">
905 <#list tipi_evento_genitore as tipo>
906 <div class="badge bg-primary">${tipo}</div>
907 </#list>
908 </span>
909 <span class="data">${data_inizio_genitore}</span>
910 </div>
911 </div>
912 <a href="${url_genitore}" class="text-decoration-none">
913 <h3 class="h5 card-title">${nome_genitore}</h3>
914 </a>
915 <p class="card-text d-none d-md-block lora">${descrizione_genitore}</p>
916 </div>
917 </div>
918 </div>
919 </div>
920 </div>
921 </div>
922 </div>
923 </section>
924 </#if>
925
926 <#list parteciperanno>
927 <section class="it-page-section mb-30 pt-4" id="people">
928 <h2 class="title-xxlarge mb-3"><@liferay.language key="will-participate" /></h2>
929 <div class="row">
930 <#items as persona>
931 <div class="col-12 col-lg-6 p-0 pe-3 mb-3 shadow-sm rounded">
932 <div class="d-flex pe-0">
933 <div class="col-12 col-lg-9 pt-3">
934 <a href="${persona.url}" class="card-title text-paragraph-regular-medium-semi mb-1 primary-color-b3">
935 ${persona.nome}
936 </a>
937 <div class="card-text">
938
939 <#if persona.incarichi?? && persona.incarichi?has_content>
940 <p class="fw-semibold mb-2">
941 <#list persona.incarichi as incarico>
942 <div class="fw-semibold text-primary">${incarico}</div>
943 </#list>
944 </p>
945 </#if>
946
947 <#if persona.biografia?has_content>
948 <p class="fw-semibold mb-2">
949 ${persona.biografia}
950 </p>
951 </#if>
952 </div>
953 </div>
954 <#if persona.immagine?has_content>
955 <a href="${persona.url}" class="d-none d-lg-block col-lg-3 p-0">
956 <img
957 class="w-100"
958 style="object-fit: cover; object-position: center; max-height: 120px;"
959 alt="${persona.immagine.alt!""}"
960 src="${persona.immagine.url}"
961 />
962 </a>
963 </#if>
964 </div>
965 </div>
966 </#items>
967 </div>
968 </section>
969 </#list>
970
971 <#if has_media>
972 <section class="it-page-section mb-30" id="galleries">
973 <h2 class="title-xxlarge mb-3"><@liferay.language key="images-and-videos" /></h2>
974 <#list immagini_galleria>
975 <div class="it-carousel-wrapper it-carousel-landscape-abstract-three-cols splide splide--slide splide--ltr splide--draggable is-active is-initialized mb-4" data-bs-carousel-splide="" id="splide01">
976 <div class="it-header-block">
977 <div class="it-header-block-title">
978 <h3 style="border: none;"><@liferay.language key="images" /></h3>
979 </div>
980 </div>
981 <div class="splide__track" id="splide01-track" style="padding-left: 0px; padding-right: 0px;">
982 <ul class="splide__list it-carousel-all" id="splide01-list" style="transform: translateX(0px);">
983 <#items as img>
984 <li class="splide__slide is-active is-visible h-100" id="splide01-slide0${img?counter}" style="margin-right: 24px; width: calc(calc(100% / 3) - 16px);" tabindex="0" data-focus-mouse="false">
985 <div class="it-single-slide-wrapper">
986 <figure>
987 <img src="${img.src}" alt="${img.alt}" class="img-fluid" style="width: 100%; aspect-ratio: 1/1; object-fit: cover; object-position: center;" loading="lazy">
988 <figcaption class="figure-caption mt-2">
989 ${img.alt}
990 </figcaption>
991 </figure>
992 </div>
993 </li>
994 </#items>
995 </ul>
996 </div>
997 </div>
998 </#list>
999
1000 <#if has_video_gallery>
1001 <h3><@liferay.language key="videos" /></h3>
1002 <div id="iframe-wrapper">
1003 <#list GalleriaDiVideo.getSiblings() as cur_GalleriaDiVideo>
1004 <div class="iframe-element">
1005 ${cur_GalleriaDiVideo.getData()}
1006 </div>
1007 </#list>
1008 </div>
1009 </#if>
1010 </section>
1011 </#if>
1012
1013 <#if AChieRivolto.getData()?has_content>
1014 <section class="it-page-section mb-30" id="who">
1015 <h2 class="title-xxlarge mb-3"><@liferay.language key="aimed-at" /></h2>
1016 <div class="richtext-wrapper lora">
1017 ${AChieRivolto.getData()}
1018 </div>
1019 </section>
1020 </#if>
1021
1022 <#if has_luogo>
1023 <section class="it-page-section mb-30" id="place">
1024 <h2 class="title-xxlarge mb-3"><@liferay.language key="place" /></h2>
1025 <div class="">
1026 <div class="card card-teaser card-teaser-info rounded shadow-sm p-4">
1027 <div class="card-body pe-3">
1028 <h5 class="card-title mb-2">
1029 <a class="text-decoration-none" href="${url_luogo}">
1030 ${nome_luogo}
1031 </a>
1032 </h5>
1033 <div class="card-text">
1034 <#if indirizzo_luogo !="">
1035 <p class="mb-2"><@liferay.language key="address" />: ${indirizzo_luogo}</p>
1036 </#if>
1037 <#if orari_luogo !="">
1038 <p class="mb-2"><@liferay.language key="timetables" />: ${orari_luogo}</p>
1039 </#if>
1040 </div>
1041 </div>
1042 <#if has_immagine_luogo>
1043 <div class="avatar size-xl">
1044 <img
1045 alt="${immagine_luogo.alt!nome_luogo}"
1046 src="${immagine_luogo.url}"
1047 style="aspect-ratio: 1;"
1048 />
1049 </div>
1050 </#if>
1051 </div>
1052 </div>
1053 </section>
1054 </#if>
1055
1056 <#if Costo.getData()?has_content>
1057 <section class="it-page-section mb-30" id="costs">
1058 <h2 class="title-xxlarge mb-3"><@liferay.language key="costs" /></h2>
1059 <div class="richtext-wrapper lora">
1060 ${Costo.getData()}
1061 </div>
1062 </section>
1063 </#if>
1064
1065 <#list allegati>
1066 <section class="it-page-section mb-30" id="attachments">
1067 <h2 class="title-xxlarge mb-3"><@liferay.language key="attachments" /></h2>
1068 <div class="col-12 ps-0">
1069 <ul class="col-12 shadow rounded my-4 p-3 bg-white">
1070 <#items as allegato>
1071 <li group="attachments" class="d-flex align-items-center">
1072 <div class="row d-flex align-items-center w-100 ${allegato?has_next?string(" mb-2", "")}">
1073 <div class="col-1 d-flex justify-content-center align-items-center p-0">
1074 <svg class="icon icon-primary icon-lh" aria-hidden="true" viewBox="0 0 24 24">
1075 <path d="M12,14.2L7.7,9.9l0.7-0.7l3.1,3.1V3h1v9.2l3.1-3l0.7,0.7L12,14.2z M19,12v7.5c0,0.3-0.2,0.5-0.5,0.5h-13 C5.2,20,5,19.8,5,19.5V12H4v7.5C4,20.3,4.7,21,5.5,21h13c0.8,0,1.5-0.7,1.5-1.5V12H19z" />
1076 </svg>
1077 </div>
1078 <div class="col-11 p-0">
1079 <a class="text-decoration_none fw-semibold t-primary" href="${allegato.url}">
1080 ${allegato.nome}
1081 </a>
1082 </div>
1083 </div>
1084 </li>
1085 </#items>
1086 </ul>
1087 </div>
1088 </section>
1089 </#list>
1090
1091 <#list appuntamenti>
1092 <section class="it-page-section mb-30" id="appointments">
1093 <h2 class="title-xxlarge mb-3"><@liferay.language key="meetups" /></h2>
1094 <div class="row">
1095 <#items as app>
1096 <div class="col-12 col-md-6">
1097 <div class="card-wrapper border border-light rounded shadow-sm cmp-list-card-img cmp-list-card-img-hr">
1098 <div class="card no-after rounded">
1099 <div class="row g-2 g-md-0 flex-md-column">
1100 <#if app.immagine?has_content && app.immagine.url?has_content>
1101 <div class="col-4 order-2 order-md-1" style="position-relative">
1102 <div class="card-calendar d-flex flex-column justify-content-center">
1103 <span class="card-date">${app.giorno}</span>
1104 <span class="card-day">${app.mese}</span>
1105 </div>
1106 <img
1107 class="rounded-top img-fluid img-responsive"
1108 src="${app.immagine.url}"
1109 title="${app.nome}"
1110 alt="${app.nome}"
1111 />
1112 </div>
1113 </#if>
1114
1115 <div class="col-8 order-1 order-md-2">
1116 <div class="card-body pb-0">
1117 <div class="category-top cmp-list-card-img__body">
1118 <div>
1119 <#list app.tipi>
1120 <span class="category">
1121 <#items as tipo>
1122 <div class="badge bg-primary">${tipo}</div>
1123 </#items>
1124 </span>
1125 </#list>
1126 <span class="data">${app.data_inizio}</span>
1127 </div>
1128 </div>
1129 <a href="${app.url}" class="text-decoration-none">
1130 <h3 class="h5 card-title">${app.nome}</h3>
1131 </a>
1132 <p class="card-text d-none d-md-block lora">${app.descrizione}</p>
1133 </div>
1134 </div>
1135 </div>
1136 </div>
1137 </div>
1138 </div>
1139 </#items>
1140 </div>
1141 </section>
1142 </#list>
1143
1144 <#list contatti_wallet>
1145 <section class="it-page-section mb-30 pt-4" id="contacts">
1146 <h2 class="title-xxlarge mb-3"><@liferay.language key="contacts" /></h2>
1147 <div class="row">
1148 <div class="col-12 col-lg-6 shadow rounded p-3">
1149 <#items as contatto>
1150 <div>
1151 <#assign url_type="" />
1152 <#if
1153 contatto.tipo=="Email"
1154 || contatto.tipo=="PEC"
1155 >
1156 <#assign url_type="mailto:" />
1157 <#elseif
1158 contatto.tipo=="Telefono"
1159 || contatto.tipo=="Whatsapp"
1160 || contatto.tipo=="Telegram"
1161 >
1162 <#assign url_type="tel:" />
1163 </#if>
1164 <span class="fw-semibold">${contatto.tipo}:</span>
1165 <span class="ms-1">
1166 <a
1167 href="${url_type}${contatto.valore}"
1168 target="_blank"
1169 class="t-primary"
1170 >
1171 ${contatto.valore}
1172 </a>
1173 </span>
1174 </div>
1175 </#items>
1176 </div>
1177 </div>
1178 </section>
1179 </#list>
1180
1181 <#if has_UO>
1182 <section class="it-page-section mb-30" id="office">
1183 <h2 class="mb-3"><@liferay.language key="organized-by" /></h2>
1184 <div class="row">
1185 <div class="col-12 col-lg-6">
1186 <div class="card-wrapper rounded h-auto mt-10">
1187 <div class="card card-teaser card-teaser-info rounded shadow-sm p-3">
1188 <div class="card-body pe-3">
1189 <div class="mb-3">
1190 <a class="card-title text-paragraph-regular-medium-semi primary-color-b3" href="/portal/-/${url_UO}">
1191 ${nome_UO}
1192 </a>
1193 <#if indirizzo_UO?has_content>
1194 <small class="d-block">
1195 ${indirizzo_UO}
1196 </small>
1197 </#if>
1198 </div>
1199 <div class="card-text">
1200 <#list contatti_UO>
1201 <div class="col-12 rounded p-0">
1202 <#items as contatto>
1203 <div>
1204 <#assign url_type="" />
1205 <#if
1206 contatto.tipo=="Email"
1207 || contatto.tipo=="PEC"
1208 >
1209 <#assign url_type="mailto:" />
1210 <#elseif
1211 contatto.tipo=="Telefono"
1212 || contatto.tipo=="Whatsapp"
1213 || contatto.tipo=="Telegram"
1214 >
1215 <#assign url_type="tel:" />
1216 </#if>
1217 <span class="fw-semibold">
1218 ${contatto.tipo}:</span>
1219 <span class="ms-1">
1220 <a
1221 href="${url_type}${contatto.valore}"
1222 target="_blank"
1223 class="t-primary"
1224 >
1225 ${contatto.valore}
1226 </a>
1227 </span>
1228 </div>
1229 </#items>
1230 </div>
1231 </#list>
1232 </div>
1233 </div>
1234 <#if urlImmagine_UO !="">
1235 <div class="avatar size-xl">
1236 <a href="/portal/-/${url_UO}">
1237 <img
1238 alt="Immagine unità organizzativa responsabile"
1239 src="${urlImmagine_UO}"
1240 style="aspect-ratio: 1/1;"
1241 />
1242 </a>
1243 </div>
1244 </#if>
1245 </div>
1246 </div>
1247 </div>
1248 </div>
1249 </section>
1250 </#if>
1251
1252 <#if PatrocinatoDa.getData()?? && PatrocinatoDa.getData()?has_content>
1253 <section class="it-page-section mb-30" id="patrocinato">
1254 <h2 class="title-xxlarge mb-3"><@liferay.language key="sponsored-by" /></h2>
1255 <div class="richtext-wrapper lora" >
1256 ${PatrocinatoDa.getData()}
1257 </div>
1258 </section>
1259 </#if>
1260
1261 <#if Sponsor.getData()?has_content>
1262 <section class="it-page-section mb-30" id="sponsor">
1263 <h2 class="title-xxlarge mb-3"><@liferay.language key="sponsors" /></h2>
1264 <div class="richtext-wrapper lora">
1265 ${Sponsor.getData()}
1266 </div>
1267 </section>
1268 </#if>
1269
1270 <#if UlterioriInformazioni.getData()?has_content>
1271 <section class="it-page-section mb-30" id="more-info">
1272 <h2 class="title-xxlarge mb-3"><@liferay.language key="more-info" /></h2>
1273 <div class="richtext-wrapper lora">
1274 ${UlterioriInformazioni.getData()}
1275 </div>
1276 </section>
1277 </#if>
1278
1279 <div class="border-top border-light pt-4 mt-2 mb-30">
1280 <#-- DATA ULTIMA MODIFICA -->
1281 <#assign
1282 modifiedDate=.vars['reserved-article-modified-date'].getData()?split(", ")[1]?split(" +")[0]
1283 displayModifiedDate=modifiedDate?datetime("dd MMM yyyy hh:mm:ss")
1284 />
1285 <p class="text-paragraph-small mb-0 lora">
1286 <span class="fw-semibold"><@liferay.language key="last-update-date" />: </span>
1287 <span>
1288 ${displayModifiedDate?string["dd/MM/yyyy, HH:mm"]}
1289 </span>
1290 </p>
1291 </div>
1292 </div>
1293 </div>
1294 </div>
1295</div>
1296
1297<script defer>
1298document.querySelectorAll(".mail-anchor").forEach(anchor => anchor.href = "mailto:&subject=${Titolo.getData()}&body=" + window.location.href)
1299
1300function shareOn(type) {
1301 let articleUrl = window.location.href;
1302 const mapping = {
1303 "facebook": "https://facebook.com/sharer/sharer.php?u=" + articleUrl,
1304 "twitter": "https://twitter.com/intent/tweet/?text=" + articleUrl,
1305 "linkedin": "http://www.linkedin.com/sharing/share-offsite/?url=" + articleUrl,
1306 "whatsapp": "whatsapp://send?text=" + articleUrl
1307 }
1308
1309 window.open(mapping[type], "_blank");
1310 return
1311}
1312</script>
1313
1314<style>
1315#iframe-wrapper {
1316 display: grid;
1317 gap: 0.125rem;
1318 grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
1319}
1320
1321#iframe-wrapper .iframe-element iframe {
1322 width: 100%;
1323}
1324
1325a.chip.chip-simple span.chip-label {
1326 translate: 0 -25%;
1327}
1328</style>