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#35038" at line 21, column 5] ----
1<#-- V3.3 -->
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 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
10 LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")
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 categoryList = assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK)
16 AssetVocabularyLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil"]
17/>
18
19<#-- gestione dei breadcrumbs -->
20<#assign
21 paginaPadre = LayoutLocalService.getLayout(groupId, PaginaPadre.getData()?eval.privateLayout, PaginaPadre.getData()?eval.layoutId?number)
22 ancestors = paginaPadre.getAncestors()
23 sorted_ancestors = []
24/>
25
26<#list ancestors as parente>
27 <#assign
28 sorted_ancestors +=
29 [{
30 "name": parente.getName(themeDisplay.getLanguageId()),
31 "ancestors": parente.getAncestors()?size,
32 "data": parente
33 }]
34 />
35</#list>
36
37<div class="container finmatica-breadcrumb-container mb-4">
38 <div class="row justify-content-center">
39 <div class="col-12 col-lg-10">
40 <div class="cmp-breadcrumbs" role="navigation">
41 <nav class="breadcrumb-container" aria-label="breadcrumb">
42 <ol class="breadcrumb p-0" data-element="breadcrumb">
43 <li class="breadcrumb-item"><a
44 href="${themeDisplay.getThemeSetting('Home URL')}">
45 <span class="breadcrumb-text-truncate">Home</span>
46 </a>
47 <span class="separator">/</span>
48 </li>
49 <#list sorted_ancestors?sort_by("ancestors") as ancestor>
50 <li class="breadcrumb-item"><a
51 href="/portal${ancestor.data.getFriendlyURL()}">
52 <span class="breadcrumb-text-truncate">
53 ${ancestor.name}
54 </span>
55 </a>
56 <span class="separator">/</span>
57 </li>
58 </#list>
59 <li class="breadcrumb-item"><a
60 href="/portal${paginaPadre.getFriendlyURL()}">
61 <span class="breadcrumb-text-truncate">
62 ${paginaPadre.getName(themeDisplay.getLanguageId())}
63 </span>
64 </a>
65 <span class="separator">/</span>
66 </li>
67 <li class="breadcrumb-item">${Titolo.getData()}</li>
68 </ol>
69 </nav>
70 </div>
71 </div>
72 </div>
73</div>
74
75<#-- GET TASSONOMIE -->
76<#assign
77 argomenti = []
78 tipiDocumento = []
79 tipoAlbo = ""
80 lifeEvents = []
81 businessEvents = []
82 licenza = ""
83/>
84<#list categoryList as categoryEntry>
85
86 <#assign
87 vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(categoryEntry.getVocabularyId())
88 className = ClassNameService.fetchClassName("com.liferay.asset.kernel.model.AssetCategory")
89 friendlyUrlEntry = FriendlyURLEntryLocalService.getMainFriendlyURLEntry(className.getClassNameId(), categoryEntry.categoryId)
90 friendlyUrlList = FriendlyURLEntryLocalService.getFriendlyURLEntryLocalizations(friendlyUrlEntry.friendlyURLEntryId)
91 cat_name = categoryEntry.name
92 cat_localized_name = categoryEntry.getTitle(themeDisplay.getLocale(), true),
93 cat_url = friendlyUrlList[0].urlTitle
94 />
95 <#if vocabulary.name == "tassonomia licenze" || vocabulary.description == "licenze">
96 <#assign licenza = cat_name />
97 <#elseif vocabulary.name == "tassonomia tipi di documento" || vocabulary.description == "tipi di documento">
98 <#assign
99 tipiDocumento +=
100 [{
101 "name": cat_localized_name,
102 "url": "/portal/web/guest/${friendlyUrlEntry.urlTitle}"
103 }]
104 />
105 <#elseif vocabulary.name == "life events" || vocabulary.description == "eventi della vita delle persone">
106 <#assign lifeEvents += [ cat_localized_name ] />
107 <#elseif vocabulary.name == "tassonomia business events" || vocabulary.description == "eventi della vita delle imprese">
108 <#assign businessEvents += [ cat_localized_name ] />
109 <#elseif vocabulary.name == "tassonomia documenti albo pretorio" || vocabulary.description == "documenti albo pretorio">
110 <#assign tipoAlbo = cat_name />
111 <#elseif vocabulary.name == "tassonomia argomento" || vocabulary.description == "argomenti">
112 <#assign
113 argomenti +=
114 [{
115 "name": cat_localized_name,
116 "url": "/portal/web/guest/${cat_url}"
117 }]
118 />
119 </#if>
120</#list>
121
122<#-- GET UO RESPONSBAILE -->
123<#if jsonFactoryUtil.createJSONObject(UfficioResponsabileDocumento.getData())?has_content>
124 <#assign UO_data = jsonFactoryUtil.createJSONObject(UfficioResponsabileDocumento.getData()) />
125<#else>
126 <#assign UO_data = "" />
127</#if>
128
129<#if UO_data != "">
130 <#if UO_data.classPK??>
131 <#assign UfficiResponsabili = JournalArticleLocalService.getArticlesByResourcePrimKey(UO_data.classPK?number) />
132 <#if UfficiResponsabili?? && UfficiResponsabili?size gt 0>
133 <#assign
134 UfficioResponsabile = UfficiResponsabili[0]
135 document = UfficioResponsabile.getDocumentByLocale(themeDisplay.getLocale())
136 rootElement = document.getRootElement()
137 nome_UO = ""
138 indirizzo_UO = ""
139 immagine_UO = ""
140 urlImmagine_UO = ""
141 />
142
143 <#list rootElement.elements() as dynamicElement>
144 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
145 <#assign nome_UO = dynamicElement.element("dynamic-content").getData() />
146 <#elseif dynamicElement.attributeValue("field-reference") == "Immagine">
147 <#assign immagine_UO = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData()) />
148 <#if immagine_UO.uuid?has_content>
149 <#assign urlImmagine_UO = "/portal/c/document_library/get_file?uuid=" + immagine_UO.uuid + "&groupId=" + immagine_UO.groupId />
150 </#if>
151 <#elseif dynamicElement.attributeValue("field-reference") == "SedePrincipale">
152 <#assign sede_data = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData()) />
153 <#if sede_data.classPK??>
154
155 <#assign
156 Sedi = JournalArticleLocalService.getArticlesByResourcePrimKey(sede_data.classPK?number)
157 />
158 <#if Sedi?size gt 0>
159 <#assign
160 Sede = Sedi[0]
161 document = Sede.getDocumentByLocale(themeDisplay.getLocale())
162 rootElement = document.getRootElement()
163 />
164 <#list rootElement.elements() as dynamicElement>
165 <#if dynamicElement.attributeValue("field-reference") == "Indirizzo">
166 <#assign indirizzo_UO = dynamicElement.element("dynamic-content").getData() />
167 </#if>
168 </#list>
169 </#if>
170
171 </#if>
172 </#if>
173 </#list>
174 </#if>
175 </#if>
176</#if>
177
178<#-- GET AUTORI -->
179<#assign autori = [] />
180<#if Autori.getData()?has_content>
181 <#list Autori.getSiblings() as cur_autore>
182 <#assign
183 cur_autore_data = jsonFactoryUtil.createJSONObject(cur_autore.getData())
184 relatedAutori = JournalArticleLocalService.getArticlesByResourcePrimKey(cur_autore_data.classPK?number)
185 relatedAutore = relatedAutori[0]
186 document = relatedAutore.getDocumentByLocale(themeDisplay.getLocale())
187 rootElement = document.getRootElement()
188 nome_autore = ""
189 cognome_autore = ""
190 immagine_autore = ""
191 urlImmagine_autore = ""
192 incarico_autore = ""
193 />
194 <#list rootElement.elements() as dynamicElement>
195 <#if dynamicElement.attributeValue("field-reference") == "Nome">
196 <#assign nome_autore = dynamicElement.element("dynamic-content").getText() />
197 <#elseif dynamicElement.attributeValue("field-reference") == "Cognome">
198 <#assign cognome_autore = dynamicElement.element("dynamic-content").getText() />
199 <#elseif dynamicElement.attributeValue("field-reference") == "Immagine">
200 <#assign immagine_autore = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData()) />
201 <#if immagine_autore.uuid?has_content>
202 <#assign urlImmagine_autore = "/portal/c/document_library/get_file?uuid=" + immagine_autore.uuid + "&groupId=" + immagine_autore.groupId />
203 </#if>
204 <#elseif dynamicElement.attributeValue("field-reference") == "Incarichi">
205 <#assign
206 incarichi_autore = jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData())
207 />
208 <#if incarichi_autore?eval?has_content>
209 <#assign
210 relatedIncarichiAutore = JournalArticleLocalService.getArticlesByResourcePrimKey(incarichi_autore.classPK?number)
211 relatedIncaricoAutore = relatedIncarichiAutore[0]
212 document = relatedIncaricoAutore.getDocumentByLocale(themeDisplay.getLocale())
213 rootElement = document.getRootElement()
214 />
215 <#list rootElement.elements() as dynamicElement>
216 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
217 <#assign incarico_autore = dynamicElement.element("dynamic-content").getText() />
218 </#if>
219 </#list>
220 </#if>
221 </#if>
222 </#list>
223 <#assign
224 autori +=
225 [{
226 "nome": nome_autore,
227 "cognome": cognome_autore,
228 "urlImmagine": urlImmagine_autore,
229 "immagine": immagine_autore,
230 "incarico": incarico_autore,
231 "urlPagina": "/portal/-/${relatedAutore.getUrlTitle()}"
232 }]
233 />
234 </#list>
235</#if>
236
237<#-- GET SERVIZI COLLEGATI -->
238<#assign servizi_collegati = [] />
239<#if Servizi.getData()?has_content>
240 <#list Servizi.getSiblings() as cur_servizio>
241 <#assign
242 cur_servizio_data = jsonFactoryUtil.createJSONObject(cur_servizio.getData())
243 categorie_cur_servizio = assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle", cur_servizio_data.classPK?number)
244 relatedServizi = JournalArticleLocalService.getArticlesByResourcePrimKey(cur_servizio_data.classPK?number)
245 />
246 <#if relatedServizi?? && relatedServizi?size gt 0>
247 <#assign
248 relatedServizio = relatedServizi[0]
249 document = relatedServizio.getDocumentByLocale(themeDisplay.getLocale())
250 rootElement = document.getRootElement()
251 nome_servizio = ""
252 descrizione_servizio = ""
253 categorie_servizio = []
254 />
255 <#list rootElement.elements() as dynamicElement>
256 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
257 <#assign nome_servizio = dynamicElement.element("dynamic-content").getText() />
258 <#elseif dynamicElement.attributeValue("field-reference") == "DescrizioneBreve">
259 <#assign descrizione_servizio = dynamicElement.element("dynamic-content").getText() />
260 </#if>
261 </#list>
262 <#list categorie_cur_servizio as cur_categoria_cur_servizio>
263 <#assign cur_vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(cur_categoria_cur_servizio.getVocabularyId()) />
264 <#if
265 cur_vocabulary.getTitle()?lower_case == "tassonomia categoria servizi"
266 || cur_vocabulary.getName()?lower_case == "tassonomia categoria servizi"
267 || cur_vocabulary.getDescription()?lower_case == "categorie servizi"
268 >
269 <#assign categorie_servizio += [cur_categoria_cur_servizio] />
270 </#if>
271 </#list>
272 <#assign
273 servizi_collegati +=
274 [{
275 "nome": nome_servizio,
276 "descrizione": descrizione_servizio,
277 "categorie": categorie_servizio,
278 "url": "/portal/-/${relatedServizio.getUrlTitle()}"
279 }]
280 />
281 </#if>
282 </#list>
283</#if>
284
285
286<#-- GET DATE -->
287<#assign
288 data_inizio = ""
289 data_fine = ""
290 data_protocollo = ""
291 DataInizio_Data = getterUtil.getString(DataInizio.getData())
292 DataFine_Data = getterUtil.getString(DataFine.getData())
293 DataProtocollo_Data = getterUtil.getString(DataProtocollo.getData())
294/>
295<#if validator.isNotNull(DataInizio_Data)>
296 <#assign
297 DataInizio_DateObj = dateUtil.parseDate("yyyy-MM-dd", DataInizio_Data, locale)
298 data_inizio = dateUtil.getDate(DataInizio_DateObj, "dd MMMM yyyy" , locale)
299 />
300</#if>
301<#if validator.isNotNull(DataFine_Data)>
302 <#assign
303 DataFine_DateObj = dateUtil.parseDate("yyyy-MM-dd", DataFine_Data, locale)
304 data_fine = dateUtil.getDate(DataFine_DateObj, "dd MMMM yyyy" , locale)
305 />
306</#if>
307<#if validator.isNotNull(DataProtocollo_Data)>
308 <#assign
309 DataProtocollo_DateObj = dateUtil.parseDate("yyyy-MM-dd", DataProtocollo_Data, locale)
310 data_protocollo = dateUtil.getDate(DataProtocollo_DateObj, "dd MMMM yyyy" , locale)
311 />
312</#if>
313
314<#-- SEZIONE GET ALLEGATI -->
315<#assign documenti_collegati = [] />
316<#if DocumentiCollegati.getData()?has_content>
317 <#if DocumentiCollegati.getSiblings()?has_content>
318 <#list DocumentiCollegati.getSiblings() as cur_allegato>
319 <#assign
320 cur_allegato_data = jsonFactoryUtil.createJSONObject(cur_allegato.getData())
321 relatedAllegati = JournalArticleLocalService.getArticlesByResourcePrimKey(cur_allegato_data.classPK?number)
322 />
323 <#if relatedAllegati?? && relatedAllegati?size gt 0>
324 <#assign relatedAllegato = relatedAllegati[0] />
325 <#if relatedAllegati?? && relatedAllegati?size gt 0>
326 <#assign
327 document = relatedAllegato.getDocumentByLocale(themeDisplay.getLocale())
328 rootElement = document.getRootElement()
329 nome_allegato = ""
330 url_allegato = "/portal/-/${relatedAllegato.getUrlTitle()}"
331 />
332 <#list rootElement.elements() as dynamicElement>
333 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
334 <#assign nome_allegato = dynamicElement.element("dynamic-content").getText() />
335 </#if>
336 </#list>
337 <#assign
338 documenti_collegati +=
339 [{
340 "nome": nome_allegato,
341 "url": url_allegato
342 }]
343 />
344 </#if>
345 </#if>
346 </#list>
347 </#if>
348</#if>
349<#if Dataset.getData()?has_content>
350 <#if Dataset.getSiblings()?has_content>
351 <#list Dataset.getSiblings() as cur_allegato>
352 <#assign
353 cur_allegato_data = jsonFactoryUtil.createJSONObject(cur_allegato.getData())
354 relatedAllegati = JournalArticleLocalService.getArticlesByResourcePrimKey(cur_allegato_data.classPK?number)
355 />
356 <#if relatedAllegati?? && relatedAllegati?size gt 0>
357 <#assign
358 relatedAllegato = relatedAllegati[0]
359 document = relatedAllegato.getDocumentByLocale(themeDisplay.getLocale())
360 rootElement = document.getRootElement()
361 nome_allegato = ""
362 url_allegato = "/portal/-/${relatedAllegato.getUrlTitle()}"
363 />
364 <#list rootElement.elements() as dynamicElement>
365 <#if dynamicElement.attributeValue("field-reference") == "Titolo">
366 <#assign nome_allegato = dynamicElement.element("dynamic-content").getText() />
367 </#if>
368 </#list>
369 <#assign
370 documenti_collegati +=
371 [{
372 "nome": nome_allegato,
373 "url": url_allegato
374 }]
375 />
376 </#if>
377 </#list>
378 </#if>
379</#if>
380<#assign
381 immagini_galleria = []
382/>
383
384<#-- GET PHOTOGALLERY -->
385<#if GalleriaImmagini.getData()?has_content>
386 <#list GalleriaImmagini.getSiblings() as cur_GalleriaImmagini>
387 <#if cur_GalleriaImmagini.getData()?? && cur_GalleriaImmagini.getData() != "">
388 <#assign
389 immagini_galleria +=
390 [{
391 "alt": cur_GalleriaImmagini.getAttribute("alt")!"",
392 "fileentryid": cur_GalleriaImmagini.getAttribute("fileEntryId"),
393 "src": cur_GalleriaImmagini.getData()
394 }]
395 />
396 </#if>
397 </#list>
398</#if>
399
400<div class="container">
401 <div class="row justify-content-center">
402 <div class="col-12 col-lg-10">
403 <div class="cmp-heading pb-3 pb-lg-4">
404 <div class="row">
405 <div class="col-lg-8">
406 <h1 class="title-xxxlarge" data-element="service-title">
407 ${Titolo.getData()}
408 </h1>
409 <#if Protocollo.getData()?has_content>
410 <p class="primary-color-b5 mb-3 fs-4 fw-bold">
411 ${Protocollo.getData()}${data_protocollo?has_content?string(", ${data_protocollo}", "")}
412 </p>
413 </#if>
414 <p class="subtitle-small mb-3">
415 ${DescrizioneBreve.getData()}
416 </p>
417 </div>
418
419 <div class="col-lg-4 mt-5 mt-lg-0">
420 <div class="dropdown" id="fallback-share">
421 <button
422 aria-label="condividi sui social"
423 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-6 text-primary"
424 type="button"
425 id="shareActions"
426 data-bs-toggle="dropdown"
427 aria-haspopup="true"
428 aria-expanded="false"
429 >
430 <svg class="icon icon-primary" aria-hidden="true">
431 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-share"></use>
432 </svg>
433 <small><@liferay.language key="share" /></small>
434 </button>
435 <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions">
436 <div class="link-list-wrapper">
437 <ul class="link-list" role="menu">
438 <li role="none">
439 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('facebook')">
440 <svg class="icon icon-primary" aria-hidden="true">
441 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-facebook"></use>
442 </svg>
443 <span>Facebook</span>
444 </button>
445 </li>
446 <li role="none">
447 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('twitter')">
448 <svg class="icon icon-primary" aria-hidden="true">
449 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-twitter"></use>
450 </svg>
451 <span><@liferay.language key="Twitter" /></span>
452 </button>
453 </li>
454 <li role="none">
455 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('whatsapp')">
456 <svg class="icon icon-primary" aria-hidden="true">
457 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-whatsapp"></use>
458 </svg>
459 <span>Whatsapp</span>
460 </button>
461 </li>
462 </ul>
463 </div>
464 </div>
465 </div>
466
467 <div class="dropdown">
468 <button
469 aria-label="vedi azioni da compiere sulla pagina"
470 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-0"
471 type="button"
472 id="viewActions"
473 data-bs-toggle="dropdown"
474 aria-haspopup="true"
475 aria-expanded="false"
476 >
477 <svg class="icon icon-primary" aria-hidden="true">
478 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-more-items"></use>
479 </svg>
480 <small><@liferay.language key="actions" /></small>
481 </button>
482 <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions">
483 <div class="link-list-wrapper">
484 <ul class="link-list" role="menu">
485 <li role="none">
486 <button class="list-item px-3 fs-6 text-primary" onclick="window.print()" role="menuitem">
487 <svg class="icon icon-primary" aria-hidden="true">
488 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-print"></use>
489 </svg>
490 <span><@liferay.language key="print" /></span>
491 </button>
492 </li>
493 <li role="none">
494 <a class="list-item mail-anchor px-3 fs-6" href="mailto:" role="menuitem">
495 <svg class="icon icon-primary" aria-hidden="true">
496 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-mail"></use>
497 </svg>
498 <span><@liferay.language key="send" /></span>
499 </a>
500 </li>
501 </ul>
502 </div>
503 </div>
504 </div>
505
506 <#list argomenti>
507 <div class="mt-4 mb-3">
508 <span class="text-paragraph-small fw-semibold"><@liferay.language key="topics" />:</span>
509 <ul class="d-flex flex-wrap gap-2 mt-10 mb-3">
510 <#items as argomento>
511 <li>
512 <a href="${argomento.url}" class="chip chip-simple">
513 <span class="chip-label">
514 ${argomento.name}
515 </span>
516 </a>
517 </li>
518 </#items>
519
520 </ul>
521 </div>
522 </#list>
523
524 </div>
525 </div>
526
527 <div class="row mt-5 mb-4">
528
529 <#if (IdentificativoDelDocumento.getData())?has_content>
530 <div class="col col-lg-4">
531 <small><@liferay.language key="identifier" />:</small>
532 <p class="fw-semibold font-monospace">${IdentificativoDelDocumento.getData()}</p>
533 </div>
534 </#if>
535
536 <#if data_inizio !="">
537 <div class="col col-lg-4">
538 <small><@liferay.language key="start-date" />:</small>
539 <p class="fw-semibold font-monospace">${data_inizio}</p>
540 </div>
541 </#if>
542
543 <#if data_fine !="">
544 <div class="col col-lg-4">
545 <small><@liferay.language key="end-date" />:</small>
546 <p class="fw-semibold font-monospace">${data_fine}</p>
547 </div>
548 </#if>
549
550 </div>
551 </div>
552 </div>
553 </div>
554</div>
555
556<#if Immagine.getData()?? && Immagine.getData() !="">
557 <#assign immagineHero_alt = Immagine.getAttribute("alt")!"" />
558 <div class="container-fluid my-3">
559 <div class="row">
560 <figure class="figure px-0 img-full">
561 <img class="figure-img img-fluid" alt="${immagineHero_alt!}" data-fileentryid="${Immagine.getAttribute('fileEntryId')}" src="${Immagine.getData()}" />
562 <#if immagineHero_alt != "">
563 <figcaption class="figure-caption text-center pt-3">
564 ${immagineHero_alt}
565 </figcaption>
566 </#if>
567 </figure>
568 </div>
569 </div>
570</#if>
571
572<div class="container">
573 <div class="row border-top border-light row-column-menu-left pb-4 pb-lg-80">
574 <div class="col-12 col-lg-3 mb-4 border-col">
575 <div class="cmp-navscroll sticky-top" aria-labelledby="accordion-title-one">
576 <nav class="navbar it-navscroll-wrapper navbar-expand-lg" aria-label="${languageUtil.get(locale, 'page-index')}" data-bs-navscroll="">
577 <div class="navbar-custom" id="navbarNavProgress">
578 <div class="menu-wrapper">
579 <div class="link-list-wrapper">
580 <div class="accordion">
581 <div class="accordion-item">
582 <span class="accordion-header" id="accordion-title-one">
583 <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">
584 <@liferay.language key="page-index" />
585 <svg class="icon icon-xs right" viewBox="0 0 24 24">
586 <path d="M11.6 15.4L6 9.8l.7-.8 4.9 4.9L16.5 9l.7.8z"></path>
587 </svg>
588 </button>
589 </span>
590 <div class="progress">
591 <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>
592 </div>
593 <div id="collapse-one" class="accordion-collapse collapse show" role="region" aria-labelledby="accordion-title-one">
594 <div class="accordion-body">
595 <ul class="link-list" data-element="page-index">
596
597 <#if DescrizioneEstesa.getData()?has_content>
598 <@navigatorLink sectionId="description" title="${languageUtil.get(locale, 'description')}" />
599 </#if>
600
601 <#if URLDocumento.getData()?has_content>
602 <@navigatorLink sectionId="document" title="${languageUtil.get(locale, 'document')}" />
603 </#if>
604
605 <#if immagini_galleria?size gt 0>
606 <@navigatorLink sectionId="image-gallery" title="${languageUtil.get(locale, 'image-gallery')}" />
607 </#if>
608
609 <#if UfficioResponsabile??>
610 <@navigatorLink sectionId="office" title="${languageUtil.get(locale, 'chief-office')}" />
611 </#if>
612
613 <#if Autori.getData()?has_content>
614 <@navigatorLink sectionId="authors" title="${languageUtil.get(locale, 'author')}" />
615 </#if>
616
617 <#if FormatiDisponibili.getData()?has_content>
618 <@navigatorLink sectionId="format" title="${languageUtil.get(locale, 'available-formats')}" />
619 </#if>
620
621 <#if tipiDocumento?size gt 0>
622 <@navigatorLink sectionId="document-type" title="${languageUtil.get(locale, 'document-type')}" />
623 </#if>
624
625 <#if licenza?has_content>
626 <@navigatorLink sectionId="distribution-license" title="${languageUtil.get(locale, 'distribution-license')}" />
627 </#if>
628
629 <#if servizi_collegati?has_content>
630 <@navigatorLink sectionId="related-services" title="${languageUtil.get(locale, 'related-services')}" />
631 </#if>
632
633 <#if documenti_collegati?has_content>
634 <@navigatorLink sectionId="attachments" title="${languageUtil.get(locale, 'related-documents')}" />
635 </#if>
636
637 <#if (RiferimentiNormativi.getData())?has_content>
638 <@navigatorLink sectionId="law-requirements" title="${languageUtil.get(locale, 'normative-requirements')}" />
639 </#if>
640
641 <#if (UlterioriInformazioni.getData())?has_content>
642 <@navigatorLink sectionId="more-info" title="${languageUtil.get(locale, 'additional-information')}" />
643 </#if>
644
645 </ul>
646 </div>
647 </div>
648 </div>
649 </div>
650 </div>
651 </div>
652 </div>
653 </nav>
654 </div>
655 </div>
656 <div class="col-12 col-lg-8 offset-lg-1">
657 <div class="it-page-sections-container unstiled-lists-wrapper">
658
659 <#if DescrizioneEstesa.getData()?has_content>
660 <section class="it-page-section mb-30 pt-4" id="description">
661 <h2 class="title-xxlarge mb-3"><@liferay.language key="description" /></h2>
662 <div class="richtext-wrapper lora">
663 <p>
664 ${DescrizioneEstesa.getData()}
665 </p>
666 </div>
667 </section>
668 </#if>
669
670 <#if URLDocumento.getData()?has_content>
671 <section class="it-page-section mb-30 has-bg-grey p-4" id="document">
672 <h2 class="title-xxlarge mb-3"><@liferay.language key="document" /></h2>
673 <div class="d-flex align-items-center p-3 shadow rounded bg-white">
674 <svg class="icon icon-primary icon-lh me-2" aria-hidden="true" viewBox="0 0 24 24">
675 <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-13C5.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" />
676 </svg>
677 <a class="text-decoration_none fw-semibold t-primary" href="${URLDocumento.getData()}" target="_blank" rel="noopener noreferrer">
678 ${Titolo.getData()}
679 </a>
680 </div>
681 </section>
682 </#if>
683
684 <#list immagini_galleria>
685 <section class="it-page-section mb-30" id="image-gallery">
686 <h2 class="title-xxlarge mb-3"><@liferay.language key="image-gallery" /></h2>
687 <div class="it-carousel-wrapper it-carousel-landscape-abstract-three-cols splide splide--slide splide--ltr splide--draggable is-active mb-4" data-bs-carousel-splide="" id="splide01">
688 <div class="splide__track" id="splide01-track" style="padding-left: 0px; padding-right: 0px;">
689 <ul class="splide__list it-carousel-all py-4" id="splide01-list" style="transform: translateX(0px);">
690 <#items as img>
691 <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">
692 <div class="it-single-slide-wrapper">
693 <figure>
694 <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">
695 <figcaption class="figure-caption mt-2">
696 ${img.alt}
697 </figcaption>
698 </figure>
699 </div>
700 </li>
701 </#items>
702 </ul>
703 </div>
704 </div>
705 </section>
706 </#list>
707
708 <#if UfficioResponsabile??>
709 <section class="it-page-section mb-30 pt-4" id="office">
710 <h2 class="title-xxlarge mb-3"><@liferay.language key="chief-office" /></h2>
711 <div class="card card-teaser card-teaser-info shadow-sm rounded d-flex align-items-center p-3 p-lg-4">
712 <div class="card-body">
713 <h4 class="mb-1 title-small-semi-bold-medium">
714 <a href="/portal/web/guest/-/${UfficioResponsabile.getUrlTitle()}" class="card-title text-paragraph-regular-medium-semi mb-3 primary-color-b3">
715 ${nome_UO}
716 </a>
717 </h4>
718 <div class="card-text">
719 <p class="u-main-black">
720 ${indirizzo_UO}
721 </p>
722 </div>
723 </div>
724 <#if urlImmagine_UO?has_content>
725 <a href="${urlImmagine_UO}">
726 <div class="avatar size-xl">
727 <img src="${urlImmagine_UO}" alt="${immagine_UO.description!'Immagine unità organizzativa'}">
728 </div>
729 </a>
730 </#if>
731 </div>
732 </section>
733 </#if>
734
735 <#list autori>
736 <section class="it-page-section mb-30 pt-4" id="authors">
737 <h2 class="title-xxlarge mb-3"><@liferay.language key="author" /></h2>
738 <#items as persona>
739 <div class="col-12 col-lg-6 p-0 pe-3 mb-3">
740 <div class="d-flex pe-0 shadow-sm rounded" style="height: 120px;">
741 <div class="col-12 col-lg-9 pt-3">
742 <a href="${persona.urlPagina}" class="card-title text-paragraph-regular-medium-semi mb-1 primary-color-b3">
743 ${persona.nome} ${persona.cognome}
744 </a>
745 <#if persona.incarico?has_content>
746 <div class="card-text">
747 ${persona.incarico}
748 </div>
749 </#if>
750 </div>
751 <#if persona.urlImmagine !="">
752 <a href="${persona.urlPagina}" class="d-none d-lg-block col-lg-3 p-0">
753 <img
754 class="w-100 h-100"
755 style="object-fit: cover; object-position: center;"
756 alt="${persona.immagine.alt!"Immagine componente staff dell'unità organizzativa"}"
757 src="${persona.urlImmagine}"
758 />
759 </a>
760 </#if>
761 </div>
762 </div>
763 </#items>
764 </section>
765 </#list>
766
767 <#if FormatiDisponibili.getData()?has_content>
768 <section class="it-page-section mb-30 pt-4" id="format">
769 <h2 class="title-xxlarge mb-3"><@liferay.language key="available-formats" /></h2>
770 <div class="richtext-wrapper lora">
771 ${FormatiDisponibili.getData()}
772 </div>
773 </section>
774 </#if>
775
776 <#list tipiDocumento>
777 <section class="it-page-section mb-30 pt-4" id="document-type">
778 <h2 class="title-xxlarge mb-3"><@liferay.language key="document-type" /></h2>
779 <ul class="d-flex flex-wrap gap-2 mt-10 mb-3">
780 <#items as tipo>
781 <li>
782 <a href="${tipo.url}" class="chip chip-simple">
783 <span class="chip-label">
784 ${tipo.name}
785 </span>
786 </a>
787 </li>
788 </#items>
789 </ul>
790 </section>
791 </#list>
792
793 <#if licenza?has_content>
794 <section class="it-page-section mb-30 pt-4" id="distribution-license">
795 <h2 class="title-xxlarge mb-3"><@liferay.language key="distribution-license" /></h2>
796 <div class="richtext-wrapper lora">
797 ${licenza}
798 </div>
799 </section>
800 </#if>
801
802 <#list servizi_collegati>
803 <section class="it-page-section mb-30 pt-4" id="related-services">
804 <h2 class="title-xxlarge mb-3"><@liferay.language key="related-services" /></h2>
805 <div class="row">
806 <#items as servizio>
807 <div class="col-12 col-lg-6 p-0 pe-3 mb-3">
808 <div class="p-3 shadow-sm rounded h-100">
809 <div class="category-top fw-semibold t-primary text-uppercase" style="font-size: .8rem;">
810 <#list servizio.categorie as categoria>
811 <div>
812 <div class="category">
813 ${categoria.name}
814 </div>
815 </div>
816 </#list>
817 </div>
818 <div class="col-12 col-lg-9 p-0">
819 <a
820 href="${servizio.url}"
821 class="card-title text-paragraph-regular-medium-semi mb-1 primary-color-b3"
822 >
823 ${servizio.nome}
824 </a>
825 <div class="card-text">
826 ${servizio.descrizione}
827 </div>
828 </div>
829 </div>
830 </div>
831 </#items>
832 </div>
833 </section>
834 </#list>
835
836 <#list documenti_collegati>
837 <section class="it-page-section mb-30 pt-4" id="attachments">
838 <h2 class="title-xxlarge mb-3"><@liferay.language key="related-documents" /></h2>
839 <div class="col-12 col-md-6 shadow p-3 mb-4 rounded">
840 <#items as allegato>
841 <div class="d-flex align-items-center${allegato?has_next?string(' mb-3', '')}">
842 <svg class="icon icon-primary icon-lh me-2" aria-hidden="true" viewBox="0 0 24 24">
843 <path d="M21,3v6h-1V4.7l-7.6,7.7l-0.8-0.8L19.3,4H15V3H21z M17,19.5c0,0.3-0.2,0.5-0.5,0.5h-12C4.2,20,4,19.8,4,19.5v-12C4,7.2,4.2,7,4.5,7H12V6H4.5C3.7,6,3,6.7,3,7.5v12C3,20.3,3.7,21,4.5,21h12c0.8,0,1.5-0.7,1.5-1.5V12h-1V19.5z" />
844 </svg>
845 <a class="text-decoration_none fw-semibold t-primary" href="${allegato.url}">
846 ${allegato.nome}
847 </a>
848 </div>
849 </#items>
850 </div>
851 </section>
852 </#list>
853
854 <#if (RiferimentiNormativi.getData())?has_content>
855 <section class="it-page-section mb-30 pt-4" id="law-requirements">
856 <h2 class="title-xxlarge mb-3"><@liferay.language key="normative-requirements" /></h2>
857 <div class="richtext-wrapper lora">
858 <p>
859 ${RiferimentiNormativi.getData()}
860 </p>
861 </div>
862 </section>
863 </#if>
864
865 <#if (UlterioriInformazioni.getData())?has_content>
866 <section class="it-page-section mb-30 pt-4" id="more-info">
867 <h2 class="title-xxlarge mb-3"><@liferay.language key="additional-information" /></h2>
868 <div class="richtext-wrapper lora">
869 <p>
870 ${UlterioriInformazioni.getData()}
871 </p>
872 </div>
873 </section>
874 </#if>
875
876 </div>
877
878 <div class="mt-3">
879 <#-- DATA ULTIMA MODIFICA -->
880 <#assign
881 modifiedDate = dateUtil.parseDate("EEE, d MMM yyyy HH:mm:ss Z", .vars['reserved-article-modified-date'].data, localeUtil.getDefault())
882 displayModifiedDate = modifiedDate?datetime?string.short
883 />
884
885 <p class="text-paragraph-small mb-0 lora">
886 <span class="fw-semibold"><@liferay.language key="last-update-date" />: </span>
887 <span>
888 ${displayModifiedDate}
889 </span>
890 </p>
891 </div>
892
893 </div>
894 </div>
895</div>
896
897<script defer>
898 document.querySelectorAll(".mail-anchor").forEach(anchor => anchor.href = "mailto:&subject=${Titolo.getData()}&body=" + window.location.href);
899
900 function shareOn(type) {
901 let articleUrl = window.location.href;
902 const mapping = {
903 "facebook": "https://facebook.com/sharer/sharer.php?u=" + articleUrl,
904 "twitter": "https://twitter.com/intent/tweet/?text=" + articleUrl,
905 "linkedin": "http://www.linkedin.com/sharing/share-offsite/?url=" + articleUrl,
906 "whatsapp": "whatsapp://send?text=" + articleUrl
907 }
908
909 window.open(mapping[type], "_blank");
910 return
911 }
912
913 function bringMeTo(id) {
914 document.getElementById(id).scrollIntoView({behavior: 'smooth'});
915 }
916
917
918 // Function to dynamically load a script
919 function loadScript(src) {
920 return new Promise((resolve, reject) => {
921 const script = document.createElement('script');
922 script.src = src;
923 script.onload = resolve;
924 script.onerror = reject;
925 document.head.appendChild(script);
926 });
927 }
928
929 // Initialize all Splide elements on the page
930 async function initializeSplides() {
931 const splideElements = document.querySelectorAll('.splide');
932
933 // Check if there are any Splide elements on the page
934 if (splideElements.length === 0) {
935 return;
936 }
937
938 // Dynamically load Splide.js
939 try {
940 await loadScript('https://cdn.jsdelivr.net/npm/@splidejs/splide/dist/js/splide.min.js');
941
942 // Initialize each Splide element
943 splideElements.forEach((splideElement) => {
944 // Check if Splide is already initialized for this element
945 if (splideElement.classList.contains('is-initialized')) {
946 return;
947 }
948
949 // Initialize Splide
950 const splide = new Splide(splideElement, {
951 type: 'slide',
952 perPage: 3,
953 gap: 24,
954 padding: { left: 0, right: 0 },
955 arrows: false,
956 breakpoints: {
957 768: {
958 perPage: 1,
959 gap: 24,
960 padding: { left: 0, right: 0 },
961 arrows: false,
962 },
963 992: {
964 perPage: 2,
965 gap: 24,
966 padding: { left: 40, right: 40 },
967 arrows: false,
968 },
969 },
970 });
971
972 splide.mount();
973
974 // Mark Splide as initialized
975 splideElement.classList.add('is-initialized');
976 });
977 } catch (error) {
978 console.error("Failed to load Splide.js", error);
979 }
980 }
981
982 // Run the initializer after a 3-second delay
983 setTimeout(() => {
984 initializeSplides();
985 }, 3000);
986</script>
987
988<#macro navigatorLink sectionId title>
989<#local desc = "" />
990
991<#if title?? && title?has_content>
992 <#local desc = title />
993<#else>
994 <#local desc = sectionId />
995</#if>
996
997<li class="nav-item">
998 <a
999 class="nav-link active"
1000 onclick="bringMeTo('${sectionId}')"
1001 role="button"
1002 aria-label="${languageUtil.get(locale, 'go-to-section')}: ${title}"
1003 >
1004 <span class="title-medium">${title}</span>
1005 </a>
1006</li>
1007</#macro>