null Richiesta Paesaggistica
Si è verificato un errore nell'elaborarazione del modello.
Java method "com.sun.proxy.$Proxy321.findJournalArticleContainingArticleReferenceClassPk(String, String)" threw an exception when invoked on com.sun.proxy.$Proxy321 object "it.linksmt.liferay.util.service.api.service.impl.LiferayServiceApiLocalServiceImpl@7c8bd81b"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign elencoAree = liferayServiceAp... [in template "34140#34167#45024" at line 579, column 121] ----
1<#-- ricavo i valori dei custom field con structureKey di area amministrativa e ufficio -->
2<#if validator.isNotNull(themeDisplay.getLayout().getGroup().getExpandoBridge()) >
3 <#assign STRUCTURE_KEY_SERVIZIO = "" />
4 <#assign STRUCTURE_KEY_AREA = "" />
5 <#assign STRUCTURE_KEY_UFFICIO = "" />
6 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("structure_key_servizio"))) >
7 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_servizio")??>
8 <#assign STRUCTURE_KEY_SERVIZIO = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_servizio")/>
9 </#if>
10 </#if>
11 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("structure_key_area"))) >
12 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_area")??>
13 <#assign STRUCTURE_KEY_AREA = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_area")/>
14 </#if>
15 </#if>
16 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("structure_key_ufficio"))) >
17 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_ufficio")??>
18 <#assign STRUCTURE_KEY_UFFICIO = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_ufficio")/>
19 </#if>
20 </#if>
21</#if>
22
23<#-- instanceId -->
24<#assign instanceId = themeDisplay.getPortletDisplay().getId()?keep_after("INSTANCE_") />
25
26<#-- etichette -->
27<#assign label_pubblicazione = languageUtil.get(locale, "label_pubblicazione") />
28<#assign label_data_pubblicazione = languageUtil.get(locale, "label_data_pubblicazione") />
29<#assign label_documenti = languageUtil.get(locale, "label_documenti") />
30<#assign label_servizi_correlati = languageUtil.get(locale, "label_servizi_correlati") />
31<#assign label_risorse_correlate = languageUtil.get(locale, "label_risorse_correlate") />
32<#assign label_ufficio_riferimento = languageUtil.get(locale, "label_ufficio_riferimento") />
33<#assign label_area_riferimento = languageUtil.get(locale, "label_area_riferimento") />
34<#assign label_ufficio_area_riferimento = languageUtil.get(locale, "label_ufficio_area_riferimento") />
35<#assign label_ulteriori_informazioni = languageUtil.get(locale, "label_ulteriori_informazioni") />
36<#assign label_ultimo_aggiornamento = languageUtil.get(locale, "label_ultimo_aggiornamento") />
37
38<#assign label_condividi = languageUtil.get(locale, "label_condividi") />
39<#assign label_vedi_azioni = languageUtil.get(locale, "label_vedi_azioni") />
40<#assign label_argomenti = languageUtil.get(locale, "label_argomenti") />
41<#assign label_facebook = languageUtil.get(locale, "label_facebook") />
42<#assign label_twitter = languageUtil.get(locale, "label_twitter") />
43<#assign label_linkedin = languageUtil.get(locale, "label_linkedin") />
44<#assign label_whatsapp = languageUtil.get(locale, "label_whatsapp") />
45<#assign label_stampa = languageUtil.get(locale, "label_stampa") />
46<#assign label_invia = languageUtil.get(locale, "label_invia") />
47<#assign label_indice_pagina = languageUtil.get(locale, "label_indice_pagina") />
48
49<#assign label_vai_sezione = languageUtil.get(locale, "label_vai_sezione") />
50<#assign label_vai_alla_pagina = languageUtil.get(locale, "label_vai_alla_pagina") />
51<#assign label_documento = languageUtil.get(locale, "label_documento") />
52<#assign label_data = languageUtil.get(locale, "label_data") />
53
54<#-- Ricavo servizi utili in seguito -->
55<#-- Servizo per ricavare le categorie -->
56<#assign catLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
57<#-- Servizio per ricavare dati del journal article -->
58<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
59<#-- Servizio per ricavare il nome del gruppo corrente -->
60<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
61<#-- Nome del sito -->
62<#assign currentGroupName = groupLocalService.getGroup(groupId).getName(locale) />
63<#-- Servizio per ricavare l'oggetto layout -->
64<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
65<#-- Servizi per recuperare risorse correlate -->
66<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
67<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
68<#-- Servizio custom -->
69<#assign liferayServiceApiUtil = serviceLocator.findService('it.linksmt.liferay.util.service.api.service.LiferayServiceApiLocalService') />
70
71<#-- Ricavo alcuni meta dati associati all'articolo -->
72<#-- Ricavo article id -->
73<#assign articleId = .vars['reserved-article-id'].data />
74<#-- Ricavo il titolo -->
75<#assign titolo = .vars['reserved-article-title'].data />
76<#assign titolo = escapeExtraChar(titolo) />
77
78<#-- Altri dati associati all'articolo che ricavo tramite API -->
79<#assign article = journalArticleLocalService.getArticle( groupId, articleId ) />
80
81<#-- Data ultima modifica articolo -->
82<#assign articleModifiedDateObj = article.getModifiedDate() />
83<#if validator.isNotNull(articleModifiedDateObj)>
84 <#assign articleModifiedDate = dateUtil.getDate(articleModifiedDateObj, "dd/MM/yyyy, hh:mm", locale) />
85</#if>
86
87<#-- Url Title journal article -->
88<#assign articleUrlTitle = article.getUrlTitle() />
89<#-- Primary key journal article -->
90<#assign articlePrimKey = article.resourcePrimKey/>
91
92<#-- Se il carattere indicato è il prefisso della categoria, indica che la stessa non deve essere mostrata a video, ma viene solo usata per scopi funzionali -->
93<#assign PREFIX_SERVICE_CATEGORY = "_" />
94
95<#-- Ricavo tutte le categorie associate ad un articolo a meno di quelle che hanno un prefisso "_" -->
96<#function getCategoryByArticlePrimKey articlePrimKey>
97 <#assign tmp = "" />
98 <#assign articleCatNames = catLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(articlePrimKey)) />
99 <#if (articleCatNames?size > 0)>
100 <#list articleCatNames as category>
101 <#if category.name?substring(0,1) != PREFIX_SERVICE_CATEGORY >
102 <#assign tmp = tmp + category.name + ", " />
103 </#if>
104 </#list>
105 <#assign tmp = tmp?keep_before_last(",") />
106 </#if>
107 <#return tmp>
108</#function>
109
110<#-- Variante: restituisce solo la lista di oggetti category -->
111<#function getListCategoryByArticlePrimKey articlePrimKey>
112 <#assign listCategories = [] />
113 <#assign articleCat = catLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(articlePrimKey)) />
114 <#if (articleCat?size > 0)>
115 <#list articleCat as category>
116 <#if category.name?substring(0,1) != PREFIX_SERVICE_CATEGORY >
117 <#assign listCategories = listCategories + [category] />
118 </#if>
119 </#list>
120 </#if>
121 <#return listCategories>
122</#function>
123
124<#-- Funzione escape su stringa -->
125<#function escapeExtraChar text>
126 <#return text?replace("\"",""", "r")?replace("'","’", "r")>
127</#function>
128
129<#-- Verifico se il primo elemento di una lista esiste -->
130<#function firstOfListNotEmpty list>
131 <#assign result = false />
132 <#if list?? && list?has_content && list.getSiblings()?has_content && list.getSiblings()?first.getData()?has_content>
133 <#assign result = true />
134 </#if>
135 <#return result>
136</#function>
137
138<#-- Verifico che ci sia almeno un elemento in lista -->
139<#function oneAtLeastOfListNotEmpty list>
140 <#assign esito = false />
141 <#if list?? && list?has_content && list.getSiblings()?has_content>
142 <#list list.getSiblings() as cur_elem>
143 <#if cur_elem.getData()?has_content>
144 <#assign esito = true />
145 <#break>
146 </#if>
147 </#list>
148 </#if>
149 <#return esito>
150</#function>
151
152<#-- ricavo la data per utilizzarla dopo -->
153<#-- data pubblicazione -->
154<#if validator.isNotNull(start_date) && validator.isNotNull(start_date.getData())>
155 <#assign start_date_string = getterUtil.getString(start_date.getData()) />
156 <#if validator.isNotNull(start_date_string) && start_date_string?trim != "">
157 <#assign start_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", start_date.getData(), locale) />
158 <#assign start_date_res = dateUtil.getDate(start_date_DateObj, "dd MMMM yyyy", locale) />
159 <#assign start_date_compact = dateUtil.getDate(start_date_DateObj, "dd-MMM-yy", locale) />
160 </#if>
161</#if>
162
163<#-- ricavo elenco di articoli correlati -->
164<#assign currentArticleResourcePrimKey = article.getResourcePrimKey() />
165<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
166<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
167<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) />
168
169<#-- HTML -->
170<section class="comuni-scheda scheda-modulo">
171 <div class="container">
172
173 <#-- intro scheda + funzionalita trasversali -->
174 <div class="row">
175 <div class="offset-lg-1 col-lg-6 col-md-8">
176 <section class="intro-sezione">
177 <#assign titoloScheda = escapeExtraChar(titolo) />
178 <#if validator.isNotNull(title) && validator.isNotNull(title.getData())>
179 <h2 class="titolo-sezione">${title.getData()}</h2>
180 <#assign titoloScheda = escapeExtraChar(title.getData()) />
181 </#if>
182 <#if validator.isNotNull(abstract) && validator.isNotNull(abstract.getData())>
183 <div class="abstract-sezione">${abstract.getData()}</div>
184 </#if>
185
186 </section>
187 </div>
188
189 <#-- blocco funzionalita trasversali -->
190 <div class="offset-lg-1 col-lg-3 col-md-4">
191 <#-- condivisione sui social -->
192 <#assign currentPageURL = themeDisplay.getPortalURL()+themeDisplay.getURLCurrent() />
193 <#assign companyName = themeDisplay.getCompany().getName() />
194
195 <#assign twitterUrl = "http://twitter.com/share?text=${companyName} - ${titoloScheda} &url=${currentPageURL}" />
196 <#assign facebookUrl = "http://www.facebook.com/sharer/sharer.php?u=${currentPageURL}" />
197 <#assign linkedinUrl = "https://www.linkedin.com/shareArticle?mini=true&url=${currentPageURL}&title=${companyName} - ${titoloScheda}" />
198 <#assign whatsappUrl = "https://api.whatsapp.com/send?text=${companyName} - ${titoloScheda} - ${currentPageURL}" />
199
200 <#-- condivisione social -->
201 <div class="dropdown d-inline share-functions">
202 <button class="btn btn-dropdown dropdown-toggle btn-sm" type="button" id="shareActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
203 <svg class="icon">
204 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-share"></use>
205 </svg>
206 <span>${label_condividi}</span>
207 </button>
208
209 <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions">
210 <div class="link-list-wrapper">
211 <ul class="link-list">
212 <li>
213 <a class="list-item" href="${facebookUrl}" target="_blank">
214 <svg class="icon icon-sm">
215 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-facebook"></use>
216 </svg>
217 <span>${label_facebook}</span>
218 </a>
219 </li>
220 <li>
221 <a class="list-item" href="${twitterUrl}" target="_blank">
222 <svg class="icon icon-sm">
223 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-twitter"></use>
224 </svg>
225 <span>${label_twitter}</span>
226 </a>
227 </li>
228 <li>
229 <a class="list-item" href="${linkedinUrl}" target="_blank">
230 <svg class="icon icon-sm">
231 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-linkedin"></use>
232 </svg>
233 <span>${label_linkedin}</span>
234 </a>
235 </li>
236 <li>
237 <a class="list-item" href="${whatsappUrl}" target="_blank">
238 <svg class="icon icon-sm">
239 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-whatsapp"></use>
240 </svg>
241 <span>${label_whatsapp}</span>
242 </a>
243 </li>
244 </ul>
245 </div>
246 </div>
247 </div>
248
249 <#-- stampa + invia via email -->
250 <#assign subjectEmail = companyName+" - "+titoloScheda />
251 <#assign bodyEmail = currentPageURL />
252
253 <div class="dropdown d-inline other-functions">
254 <button class="btn btn-dropdown dropdown-toggle btn-sm" type="button" id="viewActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
255 <svg class="icon">
256 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-more-items"></use>
257 </svg>
258 <span>${label_vedi_azioni}</span>
259 </button>
260 <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions">
261 <div class="link-list-wrapper">
262 <ul class="link-list">
263 <li>
264 <a class="list-item" href="javascript:void(0);" onclick="window.print();">
265 <svg class="icon icon-sm">
266 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-print"></use>
267 </svg>
268 <span>${label_stampa}</span>
269 </a>
270 </li>
271 <li>
272 <a class="list-item" href="mailto:?subject=${subjectEmail}&body=${bodyEmail}">
273 <svg class="icon icon-sm">
274 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-mail"></use>
275 </svg>
276 <span>${label_invia}</span>
277 </a>
278 </li>
279 </ul>
280 </div>
281 </div>
282 </div>
283
284 <#-- categorie -->
285 <#assign categorie = [] />
286
287 <#-- recupero l'elenco delle categorie da visualizzare -->
288 <#assign categorie = getListCategoryByArticlePrimKey(articlePrimKey) />
289
290 <#if categorie?? && (categorie?size > 0)>
291 <div class="mt-4 mb-4">
292 <h6>${label_argomenti}</h6>
293 <#list categorie as cur_cat>
294 <#if validator.isNotNull(cur_cat) && cur_cat != "">
295 <div class="chip chip-simple chip-primary no-link">
296 <span class="chip-label">${cur_cat.getName()}</span>
297 </div>
298 </#if>
299 </#list>
300 </div>
301 </#if>
302 </div>
303 </div>
304 </div>
305
306 <#-- dettaglio scheda -->
307 <div class="container">
308 <div class="row">
309 <div class="col">
310 <section class="dettaglio-scheda border-top">
311 <div class="row">
312 <#-- menu ancore sinistra -->
313 <div class="col-lg-3 col-md-4">
314 <aside class="left-anchor-menu">
315
316 <h4 class="left-anchor-menu-header" id="${instanceId}_${articleId}_left-anchor-menu-header" data-toggle="collapse" data-target="#${instanceId}_${articleId}_left-anchor-menu" aria-expanded="true" aria-controls="${instanceId}_${articleId}_left-anchor-menu">
317 <span>${label_indice_pagina}</span>
318 <svg class="icon icon-sm">
319 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-arrow-up"></use>
320 </svg>
321 </h4>
322
323 <div class="left-anchor-menu-separator"><div class="left-anchor-menu-separator-inner"></div></div>
324
325 <div id="${instanceId}_${articleId}_left-anchor-menu" class="collapse show" aria-labelledby="${instanceId}_${articleId}_left-anchor-menu-header">
326 <div class="anchor-menu-wrapper">
327 <ul>
328 <#-- gia ricavato nella sezione principale della scheda -->
329 <#if start_date_compact?has_content>
330 <li class="anchor-item">
331 <a class="anchor-link" href="#${instanceId}_${articleId}_date" title="${label_vai_sezione} ${label_pubblicazione}">${label_pubblicazione}</a>
332 </li>
333 </#if>
334 <#-- sezione documenti -->
335 <#if oneAtLeastOfListNotEmpty(attachment)>
336 <li class="anchor-item">
337 <a class="anchor-link" href="#${instanceId}_${articleId}_attachments" title="${label_vai_sezione} ${label_documenti}">${label_documenti}</a>
338 </li>
339 </#if>
340 <#-- servizi correlati -->
341 <#if validator.isNotNull(currentArticleRelatedLinks) && currentArticleRelatedLinks?size gt 0 >
342 <li class="anchor-item">
343 <a class="anchor-link" href="#${instanceId}_${articleId}_related_articles" title="${label_vai_sezione} ${label_servizi_correlati}">${label_servizi_correlati}</a>
344 </li>
345 </#if>
346 <#-- sezione ufficio di riferimento -->
347 <#if validator.isNotNull(office) && validator.isNotNull(office.getData())>
348 <li class="anchor-item">
349 <a class="anchor-link" href="#${instanceId}_${articleId}_office" title="${label_vai_sezione} ${label_documenti}">${label_ufficio_area_riferimento}</a>
350 </li>
351 </#if>
352 <#-- sezione ulteriori informazioni + ultimo aggiornamento -->
353 <li class="anchor-item">
354 <a class="anchor-link" href="#${instanceId}_${articleId}_further_information" title="${label_vai_sezione} ${label_ulteriori_informazioni}">${label_ulteriori_informazioni}</a>
355 </li>
356 </ul>
357 </div>
358 </div>
359 </aside>
360 </div>
361
362 <div class="col-lg-9 col-md-8">
363 <div class="border-left pl-md-4 pt-4">
364 <#-- sezione testo principale -->
365 <#if validator.isNotNull(description) && validator.isNotNull(description.getData())>
366 <article class="page-section">
367 <div class="row">
368 <div class="col-12">
369 <div class="page-section-text">
370 ${description.getData()}
371 </div>
372 </div>
373 </div>
374 </article>
375 </#if>
376
377 <#-- data pubblicazione -->
378 <#if start_date_compact?has_content>
379 <article id="${instanceId}_${articleId}_date" class="page-section anchor-section">
380 <h4 class="h2">${label_pubblicazione}</h4>
381 <div class="row">
382 <div class="col-12">
383 <#assign start_date_split = start_date_compact?split("-") />
384 <div class="point-list-wrapper my-4">
385 <div class="point-list">
386 <div class="point-list-aside point-list-warning">
387 <div class="point-date">${start_date_split[0]}</div>
388 <div class="point-month">${start_date_split[1]}/${start_date_split[2]}</div>
389 <#-- <div class="point-year">${start_date_split[2]}</div> -->
390 </div>
391 <div class="point-list-content">
392 <div class="card m-0">
393 <div class="card-body">
394 <h5 class="h3 card-title m-0"><span>${label_data_pubblicazione}</span></h5>
395 </div>
396 </div>
397 </div>
398 </div>
399 </div>
400 </div>
401 </div>
402 </article>
403 </#if>
404
405 <#-- sezione documenti -->
406 <#if oneAtLeastOfListNotEmpty(attachment)>
407 <article id="${instanceId}_${articleId}_attachments" class="page-section anchor-section">
408 <h4 class="h2">${label_documenti}</h4>
409 <div class="row">
410 <#list attachment.getSiblings() as cur_attachment>
411 <#if validator.isNotNull(cur_attachment) && validator.isNotNull(cur_attachment.getData())>
412 <#attempt>
413
414 <#-- ricavo la size del documento -->
415 <#-- a partire dal link, lo splitto e ricavo il secondo ed il 5 argomento che mi servono per il metodo successivo -->
416 <#assign dlFileEntrySize = "" />
417 <#assign parts = (cur_attachment.getData())?split("/") />
418 <#assign groupId = parts[2] />
419 <#assign uuId = parts[5]?split("?")[0] />
420
421 <#assign dlFileEntryService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') />
422 <#assign dlFileEntry = dlFileEntryService.getFileEntryByUuidAndGroupId(uuId,groupId?number) />
423
424 <#assign dlFileEntrySize = dlFileEntry.getSize() />
425 <#assign dlFileEntryExtension = dlFileEntry.getExtension()?upper_case?trim />
426
427 <#-- trasformo la dimensione in KB -->
428 <#if (dlFileEntrySize gt 0) >
429 <#assign dlFileEntrySize = (dlFileEntrySize / 1000) + " KB"/>
430 </#if>
431
432 <#-- ricavo il titolo dell'allegato: se nn c'è passo un titolo generico -->
433 <#assign attachment_header = label_documento />
434 <#if validator.isNotNull(cur_attachment.attachment_header) && validator.isNotNull(cur_attachment.attachment_header.getData()) >
435 <#assign attachment_header = cur_attachment.attachment_header.getData()?trim />
436 </#if>
437
438 <#-- visualizzo il link dell'allegato -->
439 <div class="col-lg-6">
440 <div class="card allegati-card">
441 <div class="card-body">
442 <div class="allegato d-flex">
443 <div class="icon-img-wrapper">
444 <svg class="icon">
445 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-clip"></use>
446 </svg>
447 </div>
448 <div class="text-wrapper pl-3">
449 <h5 class="h3 card-title m-0">
450 <a href="${cur_attachment.getData()}" target="_blank" title='File <#if dlFileEntryExtension != "">in formato ${dlFileEntryExtension}</#if> - ${dlFileEntrySize}'>
451 <strong>${attachment_header}</strong>
452 </a>
453 </h5>
454 <#if cur_attachment.attachment_description?? && validator.isNotNull(cur_attachment.attachment_description) && validator.isNotNull(cur_attachment.attachment_description.getData()) >
455 <div class="card-text"><small>${cur_attachment.attachment_description.getData()}</small></div>
456 </#if>
457 </div>
458 </div>
459 </div>
460 </div>
461 </div>
462 <#recover>
463 <#-- non visualizzo nulla -->
464 </#attempt>
465 </#if>
466 </#list>
467 </div>
468 </article>
469 </#if>
470
471 <#-- sezione link articoli correlati -->
472 <#if validator.isNotNull(currentArticleRelatedLinks) && currentArticleRelatedLinks?size gt 0 >
473 <div class="row">
474 <div class="col-12">
475 <article id="${instanceId}_${articleId}_related_articles" class="page-section anchor-section">
476 <h4 class="h2">${label_servizi_correlati}</h4>
477 <div class="row">
478 <#list currentArticleRelatedLinks as related_entry>
479 <#assign relatedAssetEntryId = related_entry.getEntryId2() />
480 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(relatedAssetEntryId) />
481 <#assign relatedAssetEntryPrimKey = relatedAssetEntry.getClassPK() />
482 <#assign relatedArticle = journalArticleLocalService.getLatestArticle(relatedAssetEntryPrimKey) />
483 <#assign relatedArticleStructure = relatedArticle.getDDMStructure().getName(locale) />
484 <#assign relatedArticleStructureKey = relatedArticle.getDDMStructureKey() />
485
486 <#if relatedArticleStructureKey == STRUCTURE_KEY_SERVIZIO>
487 <#-- ricavo l'url title associato all'articolo -->
488 <#assign related_js_url_title = relatedArticle.getUrlTitle() />
489
490 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
491 <#assign document = saxReaderUtil.read(relatedArticle.getContentByLocale(locale)) />
492 <#assign rootElement = document.getRootElement() />
493
494 <#-- inizio a ricavare i dati dalla struttura dell'articolo -->
495 <#-- titolo -->
496 <#assign title = "" />
497 <#assign title_xpath = saxReaderUtil.createXPath("dynamic-element[@name='title']") />
498 <#assign title = title_xpath.selectSingleNode(rootElement).getStringValue() />
499 <#assign title = title?trim />
500
501 <#if title?has_content>
502 <div class="col-lg-6">
503 <div class="card">
504 <div class="card-body">
505 <h2 class="h2 card-title m-0 d-inline-flex">
506 <div class="category-top mb-0 mr-2">
507 <svg class="icon icon-primary">
508 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-pa"></use>
509 </svg>
510 </div>
511 <a href="/-/${related_js_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(title)}">
512 ${title}
513 </a>
514 </h2>
515 </div>
516 </div>
517 </div>
518 </#if>
519 </#if>
520 </#list>
521 </div>
522 </article>
523 </div>
524 </div>
525 </#if>
526
527 <#-- sezione uffico di riferimento-->
528 <#if validator.isNotNull(office) && validator.isNotNull(office.getData())>
529 <article id="${instanceId}_${articleId}_office" class="page-section anchor-section">
530 <div class="row">
531 <div class="col-12">
532 <h4 class="h2">${label_ufficio_area_riferimento}</h4>
533 <div class="row">
534 <#assign webContentData = jsonFactoryUtil.createJSONObject(office.getData()) />
535 <#-- ricavo il classPK -->
536 <#assign office_classPK = webContentData.classPK?number />
537 <#-- ricavo il journal article -->
538 <#assign office_ja = journalArticleLocalService.getLatestArticle(office_classPK) />
539 <#-- ricavo il nome della struttura -->
540 <#assign office_ja_structure_name = office_ja.getDDMStructure().getName(locale) />
541 <#-- ricavo la structureKey -->
542 <#assign office_ja_structureKey = office_ja.getDDMStructureKey() />
543
544 <#if office_ja??>
545 <#if office_ja_structureKey == STRUCTURE_KEY_UFFICIO>
546
547 <#-- ricavo l'url title associato all'articolo -->
548 <#assign office_ja_url_title= office_ja.getUrlTitle() />
549
550 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
551 <#assign document = saxReaderUtil.read(office_ja.getContentByLocale(locale)) />
552 <#assign rootElement = document.getRootElement() />
553
554 <#-- inizio a ricavare i dati dalla struttura dell'articolo -->
555 <#-- title -->
556 <#assign title = "" />
557 <#assign title_xpath = saxReaderUtil.createXPath("dynamic-element[@name='title']") />
558 <#assign title = title_xpath.selectSingleNode(rootElement).getStringValue() />
559 <#assign title = title?trim />
560
561 <div class="col-lg-6">
562 <div class="card">
563 <div class="card-body">
564 <h2 class="h2 card-title m-0 d-inline-flex">
565 <div class="category-top mb-0 mr-2">
566 <svg class="icon icon-primary">
567 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-pa"></use>
568 </svg>
569 </div>
570 <a href="/-/${office_ja_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(title)}">
571 ${title}
572 </a>
573 </h2>
574 </div>
575 </div>
576 </div>
577
578 <#-- ricavo dall'ufficio la sua area madre -->
579 <#assign elencoAree = liferayServiceApiUtil.findJournalArticleContainingArticleReferenceClassPk('${office_classPK}','${STRUCTURE_KEY_AREA}')>
580
581 <#if validator.isNotNull(elencoAree) && elencoAree?has_content>
582 <#list elencoAree as area_ja>
583 <#if validator.isNotNull(area_ja) >
584 <#-- ricavo url title dell'articolo -->
585 <#assign area_ja_url_title = area_ja.getUrlTitle() />
586 <#-- ricavo structureKey -->
587 <#assign area_ja_structureKey = area_ja.getDDMStructureKey() />
588 <#-- ricavo structure -->
589 <#assign area_ja_structure = area_ja.getDDMStructure() />
590
591 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
592 <#assign document = saxReaderUtil.read(area_ja.getContentByLocale(locale)) />
593 <#assign rootElement = document.getRootElement() />
594
595 <#-- name -->
596 <#assign title = "" />
597 <#assign title_xpath = saxReaderUtil.createXPath("dynamic-element[@name='title']") />
598 <#assign title = title_xpath.selectSingleNode(rootElement).getStringValue() />
599 <#assign title = title?trim />
600
601 <div class="col-lg-6">
602 <div class="card">
603 <div class="card-body">
604 <h2 class="h2 card-title m-0 d-inline-flex">
605 <div class="category-top mb-0 mr-2">
606 <svg class="icon icon-primary">
607 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-pa"></use>
608 </svg>
609 </div>
610 <a href="/-/${area_ja_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(title)}">
611 ${title}
612 </a>
613 </h2>
614 </div>
615 </div>
616 </div>
617 </#if>
618 </#list>
619 </#if>
620
621 </#if>
622 </#if>
623 </div>
624 </div>
625 </div>
626 </article>
627 </#if>
628
629 <#-- sezione ulteriori informazioni + data ultimo aggiornamento -->
630 <article id="${instanceId}_${articleId}_further_information" class="page-section anchor-section">
631 <h4 class="h2">${label_ulteriori_informazioni}</h4>
632 <#if validator.isNotNull(further_information) && validator.isNotNull(further_information.getData())>
633 <div class="row">
634 <div class="col-12">
635 <div class="callout">
636 <div class="callout-title">
637 <svg class="icon">
638 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-info-circle"></use>
639 </svg>
640 </div>
641 <div class="callout-text">
642 ${further_information.getData()}
643 </div>
644 </div>
645 </div>
646 </div>
647 </#if>
648 <#-- data ultimo aggiornamento -->
649 <div class="row">
650 <div class="col-12">
651 <p class="mb-0">${label_ultimo_aggiornamento}</p>
652 <p><strong>${articleModifiedDate}</strong></p>
653 </div>
654 </div>
655 </article>
656
657 </div>
658 </div>
659 </div>
660 </section>
661 </div>
662 </div>
663 </div>
664</section>