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