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