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