Christmas Camp - Comune di Avetrana
Indietro Christmas Camp
Si è verificato un errore nell'elaborarazione del modello.
Java method "com.sun.proxy.$Proxy190.getFileEntryByUuidAndGroupId(String, long)" threw an exception when invoked on com.sun.proxy.$Proxy190 object "com.liferay.document.library.internal.service.FriendlyURLDLFileEntryLocalServiceWrapper@695ba094"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign dlFileEntry = dlFileEntryLoca... [in template "281621#281649#296381" at line 727, column 65]
----
1<#if themeDisplay.getLayout().isPrivateLayout()==false>
2
3 <#-- instanceId -->
4 <#assign instanceId = themeDisplay.getPortletDisplay().getId()?keep_after("INSTANCE_") />
5
6 <#-- Etichette -->
7 <#-- categorie -->
8 <#assign label_vai_pagina_ricerca = languageUtil.get(locale , "label_vai_pagina_ricerca")/>
9 <#assign label_argomenti = languageUtil.get(locale , "label_argomenti")/>
10 <#assign label_altro = languageUtil.get(locale , "label_altro")/>
11 <#assign label_categorie = languageUtil.get(locale , "label_categorie")/>
12 <#assign label_cerca_contenuti_argomento = languageUtil.get(locale , "label_cerca_contenuti_argomento")/>
13 <#assign label_cerca_contenuti_categoria = languageUtil.get(locale , "label_cerca_contenuti_categoria")/>
14 <#-- varie -->
15 <#assign label_ulteriori_informazioni = languageUtil.get(locale , "label_ulteriori_informazioni")/>
16 <#assign label_ultimo_aggiornamento = languageUtil.get(locale , "label_ultimo_aggiornamento")/>
17 <#-- indice pagina -->
18 <#assign label_vai_alla_pagina = languageUtil.get(locale , "label_vai_alla_pagina")/>
19 <#assign label_vai_sezione = languageUtil.get(locale , "label_vai_sezione")/>
20 <#assign label_torna_indietro = languageUtil.get(locale , "label_torna_indietro")/>
21 <#assign label_chiudi = languageUtil.get(locale , "label_chiudi")/>
22 <#assign label_indice_pagina = languageUtil.get(locale , "label_indice_pagina")/>
23 <#-- galleria -->
24 <#assign js_slide_precedente = languageUtil.get(locale , "js_slide_precedente")/>
25 <#assign js_slide_successiva = languageUtil.get(locale , "js_slide_successiva")/>
26 <#assign js_vai_prima_slide = languageUtil.get(locale , "js_vai_prima_slide")/>
27 <#assign js_vai_ultima_slide = languageUtil.get(locale , "js_vai_ultima_slide")/>
28 <#assign js_vai_slide = languageUtil.get(locale , "js_vai_slide")/>
29 <#assign js_vai_pagina = languageUtil.get(locale , "js_vai_pagina")/>
30 <#assign js_attiva_autoplay = languageUtil.get(locale , "js_attiva_autoplay")/>
31 <#assign js_pausa_autoplay = languageUtil.get(locale , "js_pausa_autoplay")/>
32
33 <#-- struttura articolo -->
34 <#assign label_identificativo = languageUtil.get(locale , "label_identificativo")/>
35 <#assign label_protocollo = languageUtil.get(locale , "label_protocollo")/>
36 <#assign label_data_protocollo = languageUtil.get(locale , "label_data_protocollo")/>
37 <#assign label_descrizione = languageUtil.get(locale , "label_descrizione")/>
38 <#assign label_documento = languageUtil.get(locale , "label_documento")/>
39 <#assign label_gallery = languageUtil.get(locale , "label_gallery")/>
40 <#assign label_autore = languageUtil.get(locale , "label_autore")/>
41 <#assign label_ufficio_responsabile = languageUtil.get(locale , "label_ufficio_responsabile")/>
42 <#assign label_autori = languageUtil.get(locale , "label_autori")/>
43 <#assign label_formati_disponibili = languageUtil.get(locale , "label_formati_disponibili")/>
44 <#assign label_servizi = languageUtil.get(locale , "label_servizi")/>
45 <#assign label_date = languageUtil.get(locale , "label_date")/>
46 <#assign label_data_inizio = languageUtil.get(locale , "label_data_inizio")/>
47 <#assign label_data_fine = languageUtil.get(locale , "label_data_fine")/>
48 <#assign label_riferimenti_normativi = languageUtil.get(locale , "label_riferimenti_normativi")/>
49 <#assign label_documenti = languageUtil.get(locale , "label_documenti")/>
50 <#assign label_dataset = languageUtil.get(locale , "label_dataset")/>
51 <#assign label_download = languageUtil.get(locale , "label_download")/>
52 <#assign label_file = languageUtil.get(locale , "label_file")/>
53 <#assign label_in_formato = languageUtil.get(locale , "label_in_formato")/>
54
55 <#-- Ricavo servizi utili in seguito -->
56 <#-- Servizio per ricavare l'oggetto layout -->
57 <#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
58 <#-- Servizio utile per ricavare i documenti della DM -->
59 <#assign dlFileEntryLocalService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') />
60
61 <#-- Inclusione template con macros e relativi servizi -->
62 <#include "${templatesPath}/COMMON_MACROS" />
63
64 <#-- campi personalizzati -->
65 <#-- ricavo dai campi personalizzati i valori degli elenco pagine Novita' -->
66 <#assign RICERCA_PAGE_URL = "" />
67 <#assign ARGOMENTI_VOCABULARY_ID = "" />
68 <#if validator.isNotNull(themeDisplay.getLayout().getGroup().getExpandoBridge()) >
69 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("argomenti_vocabulary_id"))) >
70 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("argomenti_vocabulary_id")??>
71 <#assign ARGOMENTI_VOCABULARY_ID = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("argomenti_vocabulary_id")/>
72 </#if>
73 </#if>
74 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("ricerca_page_url"))) >
75 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("ricerca_page_url")??>
76 <#assign RICERCA_PAGE_URL = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("ricerca_page_url")/>
77 <#-- data la pagina dell'elenco, ne ricavo la regular url -->
78 <#if RICERCA_PAGE_URL?has_content>
79 <#assign ricercaPageLayout = layoutLocalService.getFriendlyURLLayout(groupId, false, RICERCA_PAGE_URL) />
80 <#if ricercaPageLayout??>
81 <#assign ricercaPageUrl = ricercaPageLayout.getRegularURL(request) />
82 <#if ricercaPageUrl??>
83 <#assign RICERCA_PAGE_URL = ricercaPageUrl />
84 </#if>
85 </#if>
86 </#if>
87 </#if>
88 </#if>
89 </#if>
90
91 <#-- HTML -->
92 <div class="detail-card documenti-detail-card">
93
94 <#-- intestazione articolo -->
95 <div class="container">
96 <div class="row">
97 <div class="col-lg-8">
98
99 <#-- struttura: title (titolo) - obbligatorio -->
100 <#if validator.isNotNull(title) && validator.isNotNull(title.getData())>
101 <h1>${title.getData()}</h1>
102 </#if>
103
104 <#-- struttura: abstract (descrizione breve) - obbligatorio -->
105 <#if validator.isNotNull(abstract) && validator.isNotNull(abstract.getData())>
106 <p>${abstract.getData()}</p>
107 </#if>
108
109 <#-- identificativo, protocollo e data protocollo -->
110 <#if (validator.isNotNull(identifier) && validator.isNotNull(identifier.getData())) ||
111 (validator.isNotNull(protocol) && validator.isNotNull(protocol.getData())) ||
112 (validator.isNotNull(date) && validator.isNotNull(date.getData()))
113 >
114 <div class="row">
115 <#-- struttura: identifier (identificativo) -->
116 <#if validator.isNotNull(identifier) && validator.isNotNull(identifier.getData())>
117 <div class="col-lg">
118 <small>${label_identificativo}:</small>
119 <p class="fw-semibold font-monospace">${identifier.getData()}</p>
120 </div>
121 </#if>
122
123 <#-- struttura: protocol (protocollo) -->
124 <#if validator.isNotNull(protocol) && validator.isNotNull(protocol.getData())>
125 <div class="col-lg">
126 <small>${label_protocollo}:</small>
127 <p class="fw-semibold font-monospace">${protocol.getData()}</p>
128 </div>
129 </#if>
130
131 <#-- struttura: date (data del protocollo) - obbligatorio -->
132 <#if validator.isNotNull(date) && validator.isNotNull(date.getData())>
133 <div class="col-lg">
134 <small>${label_data_protocollo}:</small>
135 <#assign date_Data = getterUtil.getString(date.getData())>
136 <#if validator.isNotNull(date_Data)>
137 <#assign date_DateObj = dateUtil.parseDate("yyyy-MM-dd", date_Data, locale)>
138 <p class="fw-semibold font-monospace">${dateUtil.getDate(date_DateObj, "dd MMM yyyy", locale)}</p>
139 </#if>
140 </div>
141 </#if>
142 </div>
143 </#if>
144 </div>
145
146 <#-- blocco funzionalita trasversali -->
147 <div class="col-lg-3 offset-lg-1">
148
149 <#-- Inclusione template con macros e relativi servizi -->
150 <#include "${templatesPath}/COMMON_SHARE_FUNCTIONS" />
151
152 <#-- categorie: poichè ci possono essere piu' categorie appartenenti a vari vocabolari, separo quelle degli ARGOMENTI dalle altre -->
153 <#assign categorie = [] />
154 <#assign categorieArgomenti = [] />
155 <#assign categorieAltre = [] />
156
157 <#-- recupero l'elenco delle categorie da visualizzare -->
158 <#assign categorie = getListCategoryByArticlePrimKey( journalArticleResourcePrimKey ) />
159
160 <#-- ciclo le categorie e le raggruppo in due array distinti -->
161 <#if categorie?? && (categorie?size > 0)>
162 <#list categorie as curCat>
163 <#if validator.isNotNull(curCat) && curCat != "">
164 <#if curCat.getVocabularyId() == getterUtil.getLong(ARGOMENTI_VOCABULARY_ID)>
165 <#assign categorieArgomenti = categorieArgomenti + [curCat] />
166 <#else>
167 <#assign categorieAltre = categorieAltre + [curCat] />
168 </#if>
169 </#if>
170 </#list>
171
172 <div class="row mt-4 mb-4">
173 <#-- categorie ARGOMENTI -->
174 <#if categorieArgomenti?? && (categorieArgomenti?size > 0)>
175 <div class="col-md-auto mb-2">
176 <div><small>${label_argomenti}</small></div>
177 <#list categorieArgomenti as curCat>
178 <#if validator.isNotNull(curCat) && curCat != "">
179 <a class="chip-link" href="${RICERCA_PAGE_URL}?categoryIds=${curCat.getCategoryId()}" title="${label_cerca_contenuti_argomento}">
180 <div class="chip chip-simple chip-primary">
181 <span class="chip-label">${curCat.getTitle(locale)}</span>
182 </div>
183 </a>
184 </#if>
185 </#list>
186 </div>
187 </#if>
188
189 <#-- altre categorie -->
190 <#if categorieAltre?? && (categorieAltre?size > 0)>
191 <div class="col-md-auto mb-2">
192 <div><small>${label_categorie}</small></div>
193 <#list categorieAltre as curCat>
194 <#if validator.isNotNull(curCat) && curCat != "">
195 <a class="chip-link" href="${RICERCA_PAGE_URL}?categoryIds=${curCat.getCategoryId()}" title="${label_cerca_contenuti_categoria}">
196 <div class="chip chip-simple chip-primary">
197 <span class="chip-label">${curCat.getTitle(locale)}</span>
198 </div>
199 </a>
200 </#if>
201 </#list>
202 </div>
203 </#if>
204 </div>
205
206 </#if>
207 </div>
208 </div>
209 </div>
210
211 <#-- sezione immagine principale -->
212 <#-- struttura: image (immagine principale) -->
213 <#if validator.isNotNull(image) && validator.isNotNull(image.getData())>
214 <#attempt>
215 <div class="main-image-wrapper my-3">
216 <div class="row">
217 <div class="col-12 p-0">
218 <figure class="img-full">
219 <#assign imageAltCaption = htmlUtil.escapeAttribute(title.getData()) />
220
221 <img src="${image.getData()}" class="figure-img img-fluid" alt="${imageAltCaption}">
222 </figure>
223 </div>
224 </div>
225 </div>
226 <#recover>
227 <#-- in caso di problemi non visualizzo nulla -->
228 </#attempt>
229 </#if>
230
231 <#-- sezione contenuto pagina -->
232 <div class="container">
233 <div class="row border-top row-column-border row-column-menu-left">
234
235 <#-- aside -->
236 <aside class="col-lg-4">
237 <#-- indice di pagina -->
238 <#-- inizio blocco aside con ancore, gestite sia a livello desktop che mobile -->
239 <nav class="navbar it-navscroll-wrapper navbar-expand-lg it-bottom-navscroll affix-top">
240 <button aria-controls="navbarNav_${instanceId}_${articleId}" aria-expanded="false" aria-label="Toggle navigation" class="custom-navbar-toggler" data-target="#navbarNav_${instanceId}_${articleId}" type="button">
241 <span class="it-list"></span>${label_indice_pagina}
242 </button>
243 <div class="navbar-collapsable" id="navbarNav_${instanceId}_${articleId}">
244 <div class="overlay"> </div>
245 <div class="close-div visually-hidden">
246 <button class="btn close-menu" type="button">
247 <span class="it-close"></span>${label_chiudi}
248 </button>
249 </div>
250 <a class="it-back-button" href="#">
251 <svg class="icon icon-sm icon-primary align-top">
252 <use xlink:href="/o/portale-istituzionale-theme/svg/sprite.svg#it-chevron-left"></use>
253 </svg>
254 <span>${label_torna_indietro}</span>
255 </a>
256 <div class="menu-wrapper">
257 <div class="link-list-wrapper menu-link-list">
258 <h3 class="no_toc">${label_indice_pagina}</h3>
259
260 <#-- num ancora: serve per individuare la prima ancora che deve avere la classe active -->
261 <#assign anchorNum = 0 />
262
263 <#-- elenco ancore del menu laterale di pagina -->
264 <ul class="link-list">
265
266 <#-- descrizione -->
267 <#if validator.isNotNull(description) && validator.isNotNull(description.getData())>
268 <#assign anchorNum = anchorNum + 1 />
269 <li class="nav-item <#if anchorNum == 1>active</#if>">
270 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#description_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_descrizione}">
271 <span>${label_descrizione}</span>
272 </a>
273 </li>
274 </#if>
275
276 <#-- documento -->
277 <#if validator.isNotNull(attachmentSection.attachment) && validator.isNotNull(attachmentSection.attachment.getData())>
278 <#assign anchorNum = anchorNum + 1 />
279 <li class="nav-item <#if anchorNum == 1>active</#if>">
280 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#attachment_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_documento}">
281 <span>${label_documento}</span>
282 </a>
283 </li>
284 </#if>
285
286 <#-- galleria immagini - verifico che ci sia almeno una img ed uso la variabile booleana successivamente -->
287 <#assign existImageGallery = false />
288 <#list imageGallerySection.getSiblings() as curImageGallerySection>
289 <#if validator.isNotNull(curImageGallerySection.galleryImage) && validator.isNotNull(curImageGallerySection.galleryImage.getData())>
290 <#attempt>
291 <#assign existImageGallery = true />
292 <#recover>
293 <#-- se l'img per qualche motivo da errore, non imposto la variabile -->
294 </#attempt>
295 </#if>
296 <#if existImageGallery>
297 <#break>
298 </#if>
299 </#list>
300 <#if existImageGallery>
301 <#assign anchorNum = anchorNum + 1 />
302 <li class="nav-item <#if anchorNum == 1>active</#if>">
303 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#imageGallery_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_gallery}">
304 <span>${label_gallery}</span>
305 </a>
306 </li>
307 </#if>
308
309 <#-- ufficio responsabile - verifico che esista -->
310 <#assign existResponsibleOffice = false />
311 <#-- responsibleOffice è un web content -->
312 <#if validator.isNotNull(responsibleOffice) && validator.isNotNull(responsibleOffice.getData())>
313 <#attempt>
314 <#assign webContentData = jsonFactoryUtil.createJSONObject(responsibleOffice.getData()) />
315 <#if webContentData?? && webContentData.title??>
316 <#assign existResponsibleOffice = true />
317 </#if>
318 <#recover>
319 <#-- se il web content per qualche motivo da errore, non imposto la variabile -->
320 </#attempt>
321 </#if>
322 <#if existResponsibleOffice>
323 <#assign anchorNum = anchorNum + 1 />
324 <li class="nav-item <#if anchorNum == 1>active</#if>">
325 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#responsibleOffice_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_ufficio_responsabile}">
326 <span>${label_ufficio_responsabile}</span>
327 </a>
328 </li>
329 </#if>
330
331 <#-- autori documento -->
332 <#if validator.isNotNull(authors) && validator.isNotNull(authors.getData())>
333 <#assign anchorNum = anchorNum + 1 />
334 <li class="nav-item <#if anchorNum == 1>active</#if>">
335 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#authors_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_autori}">
336 <span>${label_autori}</span>
337 </a>
338 </li>
339 </#if>
340
341 <#-- formati documento -->
342 <#if validator.isNotNull(availableFormats) && validator.isNotNull(availableFormats.getData())>
343 <#assign anchorNum = anchorNum + 1 />
344 <li class="nav-item <#if anchorNum == 1>active</#if>">
345 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#availableFormats_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_formati_disponibili}">
346 <span>${label_formati_disponibili}</span>
347 </a>
348 </li>
349 </#if>
350
351 <#-- servizi: verifico che ci sia almeno un web content servizio ed uso la variabile booleana successivamente -->
352 <#assign existServices = false />
353 <#-- attachment è un web content -->
354 <#if service.getSiblings()?has_content>
355 <#list service.getSiblings() as curService>
356 <#if validator.isNotNull(curService) && validator.isNotNull(curService.getData())>
357 <#attempt>
358 <#assign webContentData = jsonFactoryUtil.createJSONObject(curService.getData()) />
359 <#if webContentData?? && webContentData.title??>
360 <#assign existServices = true />
361 </#if>
362 <#recover>
363 <#-- se il web content per qualche motivo da errore, non imposto la variabile -->
364 </#attempt>
365 </#if>
366 <#if existServices>
367 <#break>
368 </#if>
369 </#list>
370 </#if>
371 <#if existServices>
372 <#assign anchorNum = anchorNum + 1 />
373 <li class="nav-item <#if anchorNum == 1>active</#if>">
374 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#services_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_servizi}">
375 <span>${label_servizi}</span>
376 </a>
377 </li>
378 </#if>
379
380 <#-- date inizio e fine validità -->
381 <#if (validator.isNotNull(startDate) && validator.isNotNull(startDate.getData())) || (validator.isNotNull(endDate) && validator.isNotNull(endDate.getData()))>
382 <#assign anchorNum = anchorNum + 1 />
383 <li class="nav-item <#if anchorNum == 1>active</#if>">
384 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#date_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_date}">
385 <span>${label_date}</span>
386 </a>
387 </li>
388 </#if>
389
390 <#-- riferimenti normativi -->
391 <#if validator.isNotNull(normativeReferences) && validator.isNotNull(normativeReferences.getData())>
392 <#assign anchorNum = anchorNum + 1 />
393 <li class="nav-item <#if anchorNum == 1>active</#if>">
394 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#normativeReferences_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_riferimenti_normativi}">
395 <span>${label_riferimenti_normativi}</span>
396 </a>
397 </li>
398 </#if>
399
400 <#-- documenti: verifico che ci sia almeno un web content documento ed uso la variabile booleana successivamente -->
401 <#assign existAttachments = false />
402 <#-- relatedAttachment è un web content -->
403 <#if relatedAttachment.getSiblings()?has_content>
404 <#list relatedAttachment.getSiblings() as curRelatedAttachment>
405 <#if validator.isNotNull(curRelatedAttachment) && validator.isNotNull(curRelatedAttachment.getData())>
406 <#attempt>
407 <#assign webContentData = jsonFactoryUtil.createJSONObject(curRelatedAttachment.getData()) />
408 <#if webContentData?? && webContentData.title??>
409 <#assign existAttachments = true />
410 </#if>
411 <#recover>
412 <#-- se il web content per qualche motivo da errore, non imposto la variabile -->
413 </#attempt>
414 </#if>
415 <#if existAttachments>
416 <#break>
417 </#if>
418 </#list>
419 </#if>
420 <#if existAttachments>
421 <#assign anchorNum = anchorNum + 1 />
422 <li class="nav-item <#if anchorNum == 1>active</#if>">
423 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#attachments_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_documenti}">
424 <span>${label_documenti}</span>
425 </a>
426 </li>
427 </#if>
428
429 <#-- dataset: verifico che ci sia almeno un web content dataset ed uso la variabile booleana successivamente -->
430 <#assign existDatasets = false />
431 <#-- dataset è un web content -->
432 <#if dataset.getSiblings()?has_content>
433 <#list dataset.getSiblings() as curDataset>
434 <#if validator.isNotNull(curDataset) && validator.isNotNull(curDataset.getData())>
435 <#attempt>
436 <#assign webContentData = jsonFactoryUtil.createJSONObject(curDataset.getData()) />
437 <#if webContentData?? && webContentData.title??>
438 <#assign existDatasets = true />
439 </#if>
440 <#recover>
441 <#-- se il web content per qualche motivo da errore, non imposto la variabile -->
442 </#attempt>
443 </#if>
444 <#if existDatasets>
445 <#break>
446 </#if>
447 </#list>
448 </#if>
449 <#if existDatasets>
450 <#assign anchorNum = anchorNum + 1 />
451 <li class="nav-item <#if anchorNum == 1>active</#if>">
452 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#dataset_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_dataset}">
453 <span>${label_dataset}</span>
454 </a>
455 </li>
456 </#if>
457
458
459
460 <#-- ulteriori informazioni: ancora sempre presente per via della data ultimo aggiornamento -->
461 <#assign anchorNum = anchorNum + 1 />
462 <li class="nav-item <#if anchorNum == 1>active</#if>">
463 <a class="nav-link <#if anchorNum == 1>active</#if>" href="#moreInfo_${instanceId}_${articleId}" title="${label_vai_sezione} ${label_ulteriori_informazioni}">
464 <span>${label_ulteriori_informazioni}</span>
465 </a>
466 </li>
467
468 </ul>
469 </div>
470 </div>
471 </div>
472 </nav>
473 <#-- fine indice di pagina -->
474 </aside>
475 <#-- fine aside -->
476
477 <#-- contenuto della pagina -->
478 <div class="col-lg-8 it-page-sections-container p-4 border-left only-desktop">
479
480 <#-- struttura: description (descrizione completa) - obbligatorio -->
481 <#if validator.isNotNull(description) && validator.isNotNull(description.getData())>
482 <article class="it-page-section anchor-offset mb-4" id="description_${instanceId}_${articleId}">
483 <h4>${label_descrizione}</h4>
484 <div class="font-serif">
485 ${description.getData()}
486 </div>
487 </article>
488 </#if>
489
490 <#-- struttura: attachment (Documento) -->
491 <#if validator.isNotNull(attachmentSection.attachment) && validator.isNotNull(attachmentSection.attachment.getData())>
492 <article class="it-page-section anchor-offset mb-4" id="attachment_${instanceId}_${articleId}">
493 <h4>${label_documento}</h4>
494
495 <#attempt>
496 <#-- ricavo la size del documento -->
497 <#-- a partire dal link, lo splitto e ricavo il secondo ed il 5 argomento che mi servono per il metodo successivo -->
498 <#assign dlFileEntrySize = "" />
499 <#assign parts = (attachmentSection.attachment.getData())?split("/") />
500 <#assign groupId = parts[2] />
501 <#assign uuId = parts[5]?split("?")[0] />
502
503 <#assign dlFileEntry = dlFileEntryLocalService.getFileEntryByUuidAndGroupId(uuId,groupId?number) />
504
505 <#assign dlFileEntrySize = dlFileEntry.getSize() />
506 <#assign dlFileEntryExtension = dlFileEntry.getExtension()?upper_case?trim />
507
508 <#-- trasformo la dimensione in KB -->
509 <#if (dlFileEntrySize gt 0) >
510 <#assign dlFileEntrySize = (dlFileEntrySize / 1000) + " KB"/>
511 </#if>
512
513 <#-- ricavo il titolo dell'allegato: se nn c'è passo un titolo generico -->
514 <#assign attachmentHeader = label_documento />
515 <#if validator.isNotNull(attachmentSection.attachmentTitle) && validator.isNotNull(attachmentSection.attachmentTitle.getData()) >
516 <#assign attachmentHeader = htmlUtil.escapeAttribute(attachmentSection.attachmentTitle.getData()) />
517 </#if>
518
519 <#-- visualizzo il link dell'allegato -->
520 <div class="card card-teaser shadow rounded">
521 <svg class="icon">
522 <use xlink:href="/o/portale-istituzionale-theme/svg/sprite.svg#it-clip"></use>
523 </svg>
524 <div class="card-body">
525 <h5 class="card-title">
526 <a href="${attachmentSection.attachment.getData()}" target="_blank" title='${label_file} <#if dlFileEntryExtension != "">${label_in_formato} ${dlFileEntryExtension}</#if> - ${dlFileEntrySize}'>
527 <strong>${attachmentHeader}</strong>
528 </a>
529 </h5>
530 <#if validator.isNotNull(attachmentSection.attachmentDescription) && validator.isNotNull(attachmentSection.attachmentDescription.getData()) >
531 <div class="card-text"><small>${attachmentSection.attachmentDescription.getData()}</small></div>
532 </#if>
533 </div>
534 </div>
535 <#recover>
536 <#-- non visualizzo nulla -->
537 </#attempt>
538 </article>
539 </#if>
540
541 <#-- struttura: imageGallerySection con i campi figli, immagine, autore e didascalia -->
542 <#-- costruisco l'html agid per la galleria che usa il plugin splide -->
543 <#if existImageGallery>
544 <article class="it-page-section anchor-offset mb-4" id="imageGallery_${instanceId}_${articleId}">
545 <h4>${label_gallery}</h4>
546
547 <section id="imageGalleryWrapper_${instanceId}_${articleId}" class="it-carousel-wrapper it-carousel-landscape-abstract it-full-carousel it-big-img splide" aria-label="${label_gallery}">
548 <div class="splide__track">
549 <ul class="splide__list">
550 <#list imageGallerySection.getSiblings() as curImageGallerySection>
551 <#-- tutto il codice lo inserisco dopo il controllo dell'esistenza dell'img -->
552 <#if validator.isNotNull(curImageGallerySection.galleryImage) && validator.isNotNull(curImageGallerySection.galleryImage.getData())>
553 <#attempt>
554 <#-- imposto l'alt per ogni immagine: ricavo la didascalia, se esiste, altrimenti uso il valore di default uguale al titolo obbligatorio -->
555 <#assign altCaption = htmlUtil.escapeAttribute(title.getData()) />
556 <#if validator.isNotNull(curImageGallerySection.galleryImageCaption) && validator.isNotNull(curImageGallerySection.galleryImageCaption.getData())>
557 <#assign altCaption = htmlUtil.escapeAttribute(curImageGallerySection.galleryImageCaption.getData()) />
558 </#if>
559
560 <li class="splide__slide">
561 <div class="it-single-slide-wrapper">
562 <div class="card-wrapper">
563 <div class="card card-img no-after border-0 shadow-none m-0">
564 <div class="img-responsive-wrapper">
565 <div class="img-responsive">
566 <div class="img-wrapper">
567 <img src="${curImageGallerySection.galleryImage.getData()}" alt="${altCaption}">
568 </div>
569 </div>
570 </div>
571 <#if
572 (validator.isNotNull(curImageGallerySection.galleryImageAuthor) && validator.isNotNull(curImageGallerySection.galleryImageAuthor.getData())) ||
573 (validator.isNotNull(curImageGallerySection.galleryImageCaption) && validator.isNotNull(curImageGallerySection.galleryImageCaption.getData()))
574 >
575 <div class="card-body text-center p-2">
576 <#if validator.isNotNull(curImageGallerySection.galleryImageCaption) && validator.isNotNull(curImageGallerySection.galleryImageCaption.getData())>
577 <p class="mb-0"><small>${curImageGallerySection.galleryImageCaption.getData()}</small></p>
578 </#if>
579 <#if validator.isNotNull(curImageGallerySection.galleryImageAuthor) && validator.isNotNull(curImageGallerySection.galleryImageAuthor.getData())>
580 <p><small>${label_autore}: ${curImageGallerySection.galleryImageAuthor.getData()}</small></p>
581 </#if>
582 </div>
583 </#if>
584 </div>
585 </div>
586 </div>
587 </li>
588 <#recover>
589 <#-- in caso di problemi non visualizzo nulla -->
590 </#attempt>
591 </#if>
592 </#list>
593 </ul>
594 </div>
595 </section>
596 </article>
597 </#if>
598
599 <#-- struttura: responsibleOffice (ufficio responsabile): obbligatorio -->
600 <#if existResponsibleOffice>
601 <article class="it-page-section anchor-offset mb-4" id="responsibleOffice_${instanceId}_${articleId}">
602 <h4>${label_ufficio_responsabile}</h4>
603
604 <#if validator.isNotNull(responsibleOffice) && validator.isNotNull(responsibleOffice.getData())>
605 <#attempt>
606 <#assign webContentData = jsonFactoryUtil.createJSONObject(responsibleOffice.getData()) />
607
608 <#if webContentData?? && webContentData.classPK??>
609 <#-- ricavo il classPK -->
610 <#assign webContent_classPK = webContentData.classPK?number />
611 <#-- ricavo il journal article -->
612 <#assign webContent_ja = journalArticleLocalService.getLatestArticle(webContent_classPK) />
613 <#-- ricavo il nome della struttura -->
614 <#assign webContent_jaStructureName = webContent_ja.getDDMStructure().getName(locale) />
615 <#-- ricavo il valore della structrurekey -->
616 <#assign webContent_jaStructureKey = webContent_ja.getDDMStructureKey() />
617
618 <#if webContent_ja??>
619 <#-- ricavo l'url title associato all'articolo -->
620 <#assign webContent_jaUrlTitle= webContent_ja.getUrlTitle() />
621
622 <#-- inizializzo le variabili usate in seguito -->
623 <#assign responsibleOfficeTitle = "", responsibleOfficeMainOffice = "" />
624
625 <#-- applico la funzione getFieldValue per ricavare i dati che mi servono -->
626 <#-- title - campo obbligatorio -->
627 <#assign responsibleOfficeTitle = getFieldValue(webContent_ja, 'title') />
628
629 <#-- main office -->
630 <#assign responsibleOfficeMainOffice = getFieldValue(webContent_ja, 'mainOffice') />
631
632 <#-- ricavo dal web content mainOffice annidato nuovamente i dati che servono -->
633 <#if validator.isNotNull(responsibleOfficeMainOffice)>
634 <#assign responsibleOfficeMainOffice_webContentData = jsonFactoryUtil.createJSONObject(responsibleOfficeMainOffice) />
635
636 <#if responsibleOfficeMainOffice_webContentData?? && responsibleOfficeMainOffice_webContentData.classPK??>
637 <#-- ricavo il classPK -->
638 <#assign responsibleOfficeMainOffice_webContent_classPK = responsibleOfficeMainOffice_webContentData.classPK?number />
639 <#-- ricavo il journal article -->
640 <#assign responsibleOfficeMainOffice_webContent_ja = journalArticleLocalService.getLatestArticle(responsibleOfficeMainOffice_webContent_classPK) />
641 <#-- ricavo il nome della struttura -->
642 <#assign responsibleOfficeMainOffice_webContent_jaStructureName = responsibleOfficeMainOffice_webContent_ja.getDDMStructure().getName(locale) />
643 <#-- ricavo il valore della structrurekey -->
644 <#assign responsibleOfficeMainOffice_webContent_jaStructureKey = responsibleOfficeMainOffice_webContent_ja.getDDMStructureKey() />
645
646 <#if responsibleOfficeMainOffice_webContent_ja??>
647 <#-- ricavo l'url title associato all'articolo -->
648 <#assign responsibleOfficeMainOffice_webContent_jaUrlTitle= responsibleOfficeMainOffice_webContent_ja.getUrlTitle() />
649
650 <#-- inizializzo le variabili usate in seguito -->
651 <#assign responsibleOfficeMainOfficeAddress = "", responsibleOfficeMainOfficeImage = "", imageUrl = ""/>
652
653 <#-- applico la funzione getFieldValue per ricavare i dati che mi servono -->
654 <#-- address -->
655 <#assign responsibleOfficeMainOfficeAddress = getFieldValue(responsibleOfficeMainOffice_webContent_ja, 'address') />
656
657 <#-- image -->
658 <#assign responsibleOfficeMainOfficeImage = getFieldValue(responsibleOfficeMainOffice_webContent_ja, 'image') />
659
660 <#if validator.isNotNull(responsibleOfficeMainOfficeImage)>
661 <#assign imageJson = jsonFactoryUtil.createJSONObject(responsibleOfficeMainOfficeImage) />
662 <#if imageJson?? && imageJson?has_content && imageJson.uuid?? && imageJson.groupId??>
663 <#assign imageDlFileEntry = dlFileEntryLocalService.getFileEntryByUuidAndGroupId(imageJson.uuid,imageJson.groupId?number) />
664 <#assign imageUrl = "/documents/"+groupId+"/"+imageDlFileEntry.getFolderId()+"/"+imageDlFileEntry.getFileName()+"/"+imageJson.uuid />
665 </#if>
666 </#if>
667 </#if>
668 </#if>
669 </#if>
670 </#if>
671 </#if>
672
673 <#-- html -->
674 <#if validator.isNotNull(responsibleOfficeTitle)>
675 <div class="row">
676 <div class="col-12 col-sm-8">
677 <div class="card card-teaser rounded shadow p-4">
678 <div class="card-body">
679 <h5 class="card-title">
680 <a href="/-/${webContent_jaUrlTitle}" title="${label_vai_alla_pagina} ${htmlUtil.escapeAttribute(responsibleOfficeTitle)}">
681 ${responsibleOfficeTitle}
682 </a>
683 </h5>
684 <#if validator.isNotNull(responsibleOfficeMainOfficeAddress)>
685 <div class="card-text">
686 <p>${responsibleOfficeMainOfficeAddress}</p>
687 </div>
688 </#if>
689 </div>
690 <#if validator.isNotNull(imageUrl)>
691 <div class="avatar size-xl">
692 <img src="${imageUrl}" alt="${htmlUtil.escapeAttribute(responsibleOfficeTitle)}">
693 </div>
694 </#if>
695 </div>
696 </div>
697 </div>
698 </#if>
699
700 <#recover>
701 <#-- se il web content per qualche motivo da errore, non imposto la variabile -->
702 </#attempt>
703 </#if>
704 </article>
705 </#if>
706
707 <#-- struttura: authors (autori) -->
708 <#if validator.isNotNull(authors) && validator.isNotNull(authors.getData())>
709 <article class="it-page-section anchor-offset mb-4" id="authors_${instanceId}_${articleId}">
710 <h4>${label_autori}</h4>
711 <div class="font-serif">
712 ${authors.getData()}
713 </div>
714 </article>
715 </#if>
716
717 <#-- struttura: availableFormats (formati disponibili) - obbligatorio -->
718 <#if validator.isNotNull(availableFormats) && validator.isNotNull(availableFormats.getData())>
719 <article class="it-page-section anchor-offset mb-4" id="authors_${instanceId}_${articleId}">
720 <h4>${label_formati_disponibili}</h4>
721 <div class="font-serif">
722 <#assign dlFileEntrySize = "" />
723 <#assign parts = (attachmentSection.attachment.getData())?split("/") />
724 <#assign groupId = parts[2] />
725 <#assign uuId = parts[5]?split("?")[0] />
726
727 <#assign dlFileEntry = dlFileEntryLocalService.getFileEntryByUuidAndGroupId(uuId,groupId?number) />
728
729 <#assign dlFileEntrySize = dlFileEntry.getSize() />
730 <#assign dlFileEntryExtension = dlFileEntry.getExtension()?trim />
731
732 .${dlFileEntryExtension}
733 </div>
734 </article>
735 </#if>
736
737 <#-- struttura: service (servizio) : ripetibile -->
738 <#if existServices>
739 <article class="it-page-section anchor-offset mb-4" id="services_${instanceId}_${articleId}">
740 <h4>${label_servizi}</h4>
741
742 <div class="card-wrapper card-teaser-wrapper">
743 <#list service.getSiblings() as curService>
744 <#if validator.isNotNull(curService) && validator.isNotNull(curService.getData())>
745 <#attempt>
746 <#assign webContentData = jsonFactoryUtil.createJSONObject(curService.getData()) />
747
748 <#if webContentData?? && webContentData.classPK??>
749 <#-- ricavo il classPK -->
750 <#assign webContent_classPK = webContentData.classPK?number />
751 <#-- ricavo il journal article -->
752 <#assign webContent_ja = journalArticleLocalService.getLatestArticle(webContent_classPK) />
753 <#-- ricavo il nome della struttura -->
754 <#assign webContent_jaStructureName = webContent_ja.getDDMStructure().getName(locale) />
755 <#-- ricavo il valore della structrurekey -->
756 <#assign webContent_jaStructureKey = webContent_ja.getDDMStructureKey() />
757
758 <#if webContent_ja??>
759 <#-- ricavo l'url title associato all'articolo -->
760 <#assign webContent_jaUrlTitle= webContent_ja.getUrlTitle() />
761
762 <#-- inizializzo le variabili usate in seguito -->
763 <#assign curServiceTitle = "" />
764
765 <#-- applico la funzione getFieldValue per ricavare i dati che mi servono -->
766 <#-- title -->
767 <#assign curServiceTitle = getFieldValue(webContent_ja, 'title') />
768
769 </#if>
770 </#if>
771
772 <#-- html -->
773 <#if validator.isNotNull(curServiceTitle)>
774 <div class="card card-teaser rounded shadow p-4">
775 <svg class="icon">
776 <use xlink:href="/o/portale-istituzionale-theme/svg/sprite.svg#it-pa"></use>
777 </svg>
778 <div class="card-body">
779 <h5 class="card-title">
780 <a href="/-/${webContent_jaUrlTitle}" title="${label_vai_alla_pagina} ${htmlUtil.escapeAttribute(curServiceTitle)}">
781 ${curServiceTitle}
782 </a>
783 </h5>
784 </div>
785 </div>
786 </#if>
787
788 <#recover>
789 <#-- se il web content per qualche motivo da errore, non imposto la variabile -->
790 </#attempt>
791 </#if>
792 </#list>
793 </div>
794 </article>
795 </#if>
796
797
798 <#-- struttura: startDate, endDate -->
799 <#if (validator.isNotNull(startDate) && validator.isNotNull(startDate.getData())) || (validator.isNotNull(endDate) && validator.isNotNull(endDate.getData()))>
800 <article class="it-page-section anchor-offset mb-4" id="date_${instanceId}_${articleId}">
801 <h4>${label_date}</h4>
802
803 <#if validator.isNotNull(startDate) && validator.isNotNull(startDate.getData())>
804 <div class="point-list-wrapper my-4">
805 <div class="point-list">
806 <div class="point-list-aside point-list-primary">
807 <#assign startDate_Data = getterUtil.getString(startDate.getData()) />
808 <#if validator.isNotNull(startDate_Data)>
809 <#assign startDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", startDate_Data, locale) />
810 <div class="point-date font-monospace">${dateUtil.getDate(startDate_DateObj, "dd", locale)}</div>
811 <div class="point-month font-monospace">${dateUtil.getDate(startDate_DateObj, "MMM", locale)}</div>
812 </#if>
813 </div>
814 <div class="point-list-content">
815 <div class="card card-teaser shadow rounded m-0">
816 <div class="card-body">
817 <h5 class="card-title mb-0">
818 ${label_data_inizio}
819 </h5>
820 </div>
821 </div>
822 </div>
823 </div>
824 </div>
825 </#if>
826
827 <#-- struttura: endDate (data fine) -->
828 <#if validator.isNotNull(endDate) && validator.isNotNull(endDate.getData())>
829 <div class="point-list-wrapper my-4">
830 <div class="point-list">
831 <div class="point-list-aside point-list-primary">
832 <#assign endDate_Data = getterUtil.getString(endDate.getData()) />
833 <#if validator.isNotNull(endDate_Data)>
834 <#assign endDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", endDate_Data, locale) />
835 <div class="point-date font-monospace">${dateUtil.getDate(endDate_DateObj, "dd", locale)}</div>
836 <div class="point-month font-monospace">${dateUtil.getDate(endDate_DateObj, "MMM", locale)}</div>
837 </#if>
838 </div>
839 <div class="point-list-content">
840 <div class="card card-teaser shadow rounded m-0">
841 <div class="card-body">
842 <h5 class="card-title mb-0">
843 ${label_data_fine}
844 </h5>
845 </div>
846 </div>
847 </div>
848 </div>
849 </div>
850 </#if>
851 </article>
852 </#if>
853
854 <#-- struttura: normativeReferences (riferimenti normativi) -->
855 <#if validator.isNotNull(normativeReferences) && validator.isNotNull(normativeReferences.getData())>
856 <article class="it-page-section anchor-offset mb-4" id="normativeReferences_${instanceId}_${articleId}">
857 <h4>${label_riferimenti_normativi}</h4>
858 <div class="font-serif">
859 ${normativeReferences.getData()}
860 </div>
861 </article>
862 </#if>
863
864 <#-- struttura: attachment (Documento): ripetibile -->
865 <#-- ciclo per ottenere il singolo allegato obbligatorio incluso nel web content Documento -->
866 <#if existAttachments>
867 <article class="it-page-section anchor-offset mb-4" id="attachments_${instanceId}_${articleId}">
868 <h4>${label_documenti}</h4>
869
870 <div class="card-wrapper card-teaser-wrapper">
871 <#list relatedAttachment.getSiblings() as curRelatedAttachment>
872 <#if validator.isNotNull(curRelatedAttachment) && validator.isNotNull(curRelatedAttachment.getData())>
873 <#attempt>
874 <#assign webContentData = jsonFactoryUtil.createJSONObject(curRelatedAttachment.getData()) />
875
876 <#if webContentData?? && webContentData.classPK??>
877 <#-- ricavo il classPK -->
878 <#assign webContent_classPK = webContentData.classPK?number />
879 <#-- ricavo il journal article -->
880 <#assign webContent_ja = journalArticleLocalService.getLatestArticle(webContent_classPK) />
881 <#-- ricavo il nome della struttura -->
882 <#assign webContent_jaStructureName = webContent_ja.getDDMStructure().getName(locale) />
883 <#-- ricavo il valore della structrurekey -->
884 <#assign webContent_jaStructureKey = webContent_ja.getDDMStructureKey() />
885
886 <#if webContent_ja??>
887 <#-- ricavo l'url title associato all'articolo -->
888 <#assign webContent_jaUrlTitle= webContent_ja.getUrlTitle() />
889
890 <#-- inizializzo le variabili usate in seguito -->
891 <#assign curRelatedAttachmentFile = "", fileUrl = "", curRelatedAttachmentTitle = "" />
892
893 <#-- applico la funzione getFieldValue per ricavare i dati che mi servono -->
894 <#-- allegato: obbligatorio -->
895 <#assign curRelatedAttachmentFile = getFieldValue(webContent_ja, 'attachment') />
896 <#if validator.isNotNull(curRelatedAttachmentFile)>
897 <#assign fileJson = jsonFactoryUtil.createJSONObject(curRelatedAttachmentFile) />
898 <#if fileJson?? && fileJson?has_content && fileJson.uuid?? && fileJson.groupId??>
899 <#assign dlFileEntry = dlFileEntryLocalService.getFileEntryByUuidAndGroupId(fileJson.uuid,fileJson.groupId?number) />
900 <#assign fileUrl = "/documents/"+groupId+"/"+dlFileEntry.getFolderId()+"/"+dlFileEntry.getFileName()+"/"+fileJson.uuid />
901 </#if>
902 </#if>
903
904 <#-- titolo allegato: obbligatorio -->
905 <#assign curRelatedAttachmentTitle = getFieldValue(webContent_ja, 'attachmentTitle') />
906
907 <#-- html -->
908 <#if validator.isNotNull(fileUrl) && validator.isNotNull(curRelatedAttachmentTitle)>
909 <div class="card card-teaser shadow p-4 mt-3 rounded">
910 <svg class="icon">
911 <use xlink:href="/o/portale-istituzionale-theme/svg/sprite.svg#it-clip"></use>
912 </svg>
913 <div class="card-body">
914 <h5 class="card-title">
915 <a href="${fileUrl}" target="_blank" title="${label_download} ${htmlUtil.escapeAttribute(curRelatedAttachmentTitle)}">${curRelatedAttachmentTitle}</a>
916 </h5>
917 </div>
918 </div>
919 </#if>
920
921 </#if>
922 </#if>
923 <#recover>
924 <#-- se il web content per qualche motivo da errore, non imposto la variabile -->
925 </#attempt>
926 </#if>
927 </#list>
928 </div>
929 </article>
930 </#if>
931
932 <#-- struttura: dataset (Dataset): ripetibile -->
933 <#-- ciclo per ottenere il singolo allegato obbligatorio incluso nel web content Dataset -->
934 <#if existDatasets>
935 <article class="it-page-section anchor-offset mb-4" id="dataset_${instanceId}_${articleId}">
936 <h4>${label_dataset}</h4>
937
938 <div class="card-wrapper card-teaser-wrapper ">
939 <#list dataset.getSiblings() as curDataset>
940 <#if validator.isNotNull(curDataset) && validator.isNotNull(curDataset.getData())>
941 <#attempt>
942 <#assign webContentData = jsonFactoryUtil.createJSONObject(curDataset.getData()) />
943
944 <#if webContentData?? && webContentData.classPK??>
945 <#-- ricavo il classPK -->
946 <#assign webContent_classPK = webContentData.classPK?number />
947 <#-- ricavo il journal article -->
948 <#assign webContent_ja = journalArticleLocalService.getLatestArticle(webContent_classPK) />
949 <#-- ricavo il nome della struttura -->
950 <#assign webContent_jaStructureName = webContent_ja.getDDMStructure().getName(locale) />
951 <#-- ricavo il valore della structrurekey -->
952 <#assign webContent_jaStructureKey = webContent_ja.getDDMStructureKey() />
953
954 <#if webContent_ja??>
955 <#-- ricavo l'url title associato all'articolo -->
956 <#assign webContent_jaUrlTitle= webContent_ja.getUrlTitle() />
957
958 <#-- inizializzo le variabili usate in seguito -->
959 <#assign curDatasetAttachment = "", fileUrl = "", curDatasetAttachmentTitle = "" />
960
961 <#-- applico la funzione getFieldValue per ricavare i dati che mi servono -->
962 <#-- allegato: obbligatorio -->
963 <#assign curDatasetAttachment = getFieldValue(webContent_ja, 'attachment') />
964
965 <#if validator.isNotNull(curDatasetAttachment)>
966 <#assign fileJson = jsonFactoryUtil.createJSONObject(curDatasetAttachment) />
967 <#if fileJson?? && fileJson?has_content && fileJson.uuid?? && fileJson.groupId??>
968 <#assign dlFileEntry = dlFileEntryLocalService.getFileEntryByUuidAndGroupId(fileJson.uuid,fileJson.groupId?number) />
969 <#assign fileUrl = "/documents/"+groupId+"/"+dlFileEntry.getFolderId()+"/"+dlFileEntry.getFileName()+"/"+fileJson.uuid />
970 </#if>
971 </#if>
972
973 <#-- titolo allegato: obbligatorio -->
974 <#assign curDatasetAttachmentTitle = getFieldValue(webContent_ja, 'attachmentTitle') />
975
976 <#-- html -->
977 <#if validator.isNotNull(fileUrl) && validator.isNotNull(curDatasetAttachmentTitle)>
978 <div class="card card-teaser shadow p-4 mt-3 rounded">
979 <svg class="icon">
980 <use xlink:href="/o/portale-istituzionale-theme/svg/sprite.svg#it-clip"></use>
981 </svg>
982 <div class="card-body">
983 <h5 class="card-title">
984 <a href="${fileUrl}" target="_blank" title="${label_download} ${htmlUtil.escapeAttribute(curDatasetAttachmentTitle)}">${curDatasetAttachmentTitle}</a>
985 </h5>
986 </div>
987 </div>
988 </#if>
989
990 </#if>
991 </#if>
992 <#recover>
993 <#-- se il web content per qualche motivo da errore, non imposto la variabile -->
994 </#attempt>
995 </#if>
996 </#list>
997 </div>
998 </article>
999 </#if>
1000
1001 <#-- struttura: moreInformation -->
1002 <article class="it-page-section anchor-offset mb-4" id="moreInfo_${instanceId}_${articleId}">
1003 <h4>${label_ulteriori_informazioni}</h4>
1004 </article>
1005
1006 <#-- data ultimo aggiornamento -->
1007 <article id="last-modified-date" class="anchor-offset mb-4">
1008 <p class="font-serif">${label_ultimo_aggiornamento}</p>
1009 <h6><strong>${articleModifiedDate}</strong></h6>
1010 </article>
1011
1012 </div>
1013 </div>
1014 </div>
1015 </div>
1016
1017 <script>
1018 // inizializzazione galleria immagini se ci sono img
1019 <#if existImageGallery>
1020 new Splide( '#imageGalleryWrapper_${instanceId}_${articleId}',{
1021 arrows: false,
1022 i18n: {
1023 prev: "${js_slide_precedente}",
1024 next: "${js_slide_successiva}",
1025 first: "${js_vai_prima_slide}",
1026 last: "${js_vai_ultima_slide}",
1027 slideX: "${js_vai_slide}" + " %s",
1028 pageX: "${js_vai_pagina}" + " %s",
1029 play: "${js_attiva_autoplay}",
1030 pause: "${js_pausa_autoplay}"
1031 }
1032 } ).mount();
1033 </#if>
1034 </script>
1035
1036</#if>