null SETTORE I: SERVIZI SOCIALI - SCOLASTICI - SPORT - TEMPO LIBERO
Redazione Affari generali
Modified 7 Months ago.
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 elencoServizi = liferayServic... [in template "34140#34167#36922" at line 176, column 1] ----
1<#-- ricavo i valori dei custom field con structureKey di commissione e partito politico -->
2<#if validator.isNotNull(themeDisplay.getLayout().getGroup().getExpandoBridge()) >
3 <#assign STRUCTURE_KEY_AREA = "" />
4 <#assign STRUCTURE_KEY_PERSONALE_AMMINISTRATIVO = "" />
5 <#assign STRUCTURE_KEY_UFFICIO = "" />
6 <#assign STRUCTURE_KEY_SERVIZIO = "" />
7 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("structure_key_area"))) >
8 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_area")??>
9 <#assign STRUCTURE_KEY_AREA = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_area")/>
10 </#if>
11 </#if>
12 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("structure_key_personale_amministrativo"))) >
13 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_personale_amministrativo")??>
14 <#assign STRUCTURE_KEY_PERSONALE_AMMINISTRATIVO = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_personale_amministrativo")/>
15 </#if>
16 </#if>
17 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("structure_key_ufficio"))) >
18 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_ufficio")??>
19 <#assign STRUCTURE_KEY_UFFICIO = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_ufficio")/>
20 </#if>
21 </#if>
22 <#if (( themeDisplay.getLayout().getGroup().getExpandoBridge().hasAttribute("structure_key_servizio"))) >
23 <#if themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_servizio")??>
24 <#assign STRUCTURE_KEY_SERVIZIO = themeDisplay.getLayout().getGroup().getExpandoBridge().getAttribute("structure_key_servizio")/>
25 </#if>
26 </#if>
27</#if>
28
29<#-- instanceId -->
30<#assign instanceId = themeDisplay.getPortletDisplay().getId()?keep_after("INSTANCE_") />
31
32<#-- etichette -->
33<#assign label_cosa_fa = languageUtil.get(locale, "label_cosa_fa") />
34<#assign label_area_riferimento = languageUtil.get(locale, "label_area_riferimento") />
35<#assign label_area_padre = languageUtil.get(locale, "label_area_padre") />
36<#assign label_organizzazione = languageUtil.get(locale, "label_organizzazione") />
37<#assign label_servizi = languageUtil.get(locale, "label_servizi") />
38<#assign label_uffici = languageUtil.get(locale, "label_uffici") />
39<#assign label_contatti = languageUtil.get(locale, "label_contatti") />
40<#assign label_sede = languageUtil.get(locale, "label_sede") />
41<#assign label_email = languageUtil.get(locale, "label_email") />
42<#assign label_pec = languageUtil.get(locale, "label_pec") />
43<#assign label_telefono = languageUtil.get(locale, "label_telefono") />
44<#assign label_fax = languageUtil.get(locale, "label_fax") />
45<#assign label_scrivi = languageUtil.get(locale, "label_scrivi") />
46<#assign label_documenti = languageUtil.get(locale, "label_documenti") />
47<#assign label_ulteriori_informazioni = languageUtil.get(locale, "label_ulteriori_informazioni") />
48<#assign label_ultimo_aggiornamento = languageUtil.get(locale, "label_ultimo_aggiornamento") />
49
50<#assign label_condividi = languageUtil.get(locale, "label_condividi") />
51<#assign label_vedi_azioni = languageUtil.get(locale, "label_vedi_azioni") />
52<#assign label_argomenti = languageUtil.get(locale, "label_argomenti") />
53<#assign label_facebook = languageUtil.get(locale, "label_facebook") />
54<#assign label_twitter = languageUtil.get(locale, "label_twitter") />
55<#assign label_linkedin = languageUtil.get(locale, "label_linkedin") />
56<#assign label_whatsapp = languageUtil.get(locale, "label_whatsapp") />
57<#assign label_stampa = languageUtil.get(locale, "label_stampa") />
58<#assign label_invia = languageUtil.get(locale, "label_invia") />
59<#assign label_indice_pagina = languageUtil.get(locale, "label_indice_pagina") />
60
61<#assign label_vai_sezione = languageUtil.get(locale, "label_vai_sezione") />
62<#assign label_vai_alla_pagina = languageUtil.get(locale, "label_vai_alla_pagina") />
63<#assign label_documento = languageUtil.get(locale, "label_documento") />
64
65<#-- Macro per scrittura log -->
66<#macro logData data>
67 <#assign logFactory = staticUtil["com.liferay.portal.kernel.log.LogFactoryUtil"]/>
68 <#assign log = logFactory.getLog('TEMPLATE_SCHEDA_AREA_AMMINISTRATIVA')/>
69 ${log.info(data)}
70</#macro>
71
72<#-- Ricavo servizi utili in seguito -->
73<#-- Servizo per ricavare le categorie -->
74<#assign catLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
75<#-- Servizio per ricavare dati del journal article -->
76<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
77<#-- Servizio per ricavare il nome del gruppo corrente -->
78<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
79<#-- Nome del sito -->
80<#assign currentGroupName = groupLocalService.getGroup(groupId).getName(locale) />
81<#-- Servizio per ricavare l'oggetto layout -->
82<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
83<#-- Servizio custo -->
84<#assign liferayServiceApiUtil = serviceLocator.findService('it.linksmt.liferay.util.service.api.service.LiferayServiceApiLocalService') />
85
86<#-- Ricavo alcuni meta dati associati all'articolo -->
87<#-- Ricavo article id -->
88<#assign articleId = .vars['reserved-article-id'].data />
89<#-- Ricavo il titolo -->
90<#assign titolo = .vars['reserved-article-title'].data />
91<#assign titolo = escapeExtraChar(titolo) />
92
93<#-- Altri dati associati all'articolo che ricavo tramite API -->
94<#assign article = journalArticleLocalService.getArticle( groupId, articleId ) />
95
96<#-- Data ultima modifica articolo -->
97<#assign articleModifiedDateObj = article.getModifiedDate() />
98<#if validator.isNotNull(articleModifiedDateObj)>
99 <#assign articleModifiedDate = dateUtil.getDate(articleModifiedDateObj, "dd/MM/yyyy, hh:mm", locale) />
100</#if>
101
102<#-- Structure journal article -->
103<#assign articleStructure = article.getDDMStructure() />
104<#-- docXML journal article -->
105<#assign docXML = saxReaderUtil.read(article.getContentByLocale(locale))>
106<#-- Url Title journal article -->
107<#assign articleUrlTitle = article.getUrlTitle() />
108<#-- Primary key journal article -->
109<#assign articlePrimKey = article.resourcePrimKey/>
110<#-- 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 -->
111<#assign PREFIX_SERVICE_CATEGORY = "_" />
112
113<#-- Ricavo tutte le categorie associate ad un articolo a meno di quelle che hanno un prefisso "_" -->
114<#function getCategoryByArticlePrimKey articlePrimKey>
115 <#assign tmp = "" />
116 <#assign articleCatNames = catLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(articlePrimKey)) />
117 <#if (articleCatNames?size > 0)>
118 <#list articleCatNames as category>
119 <#if category.name?substring(0,1) != PREFIX_SERVICE_CATEGORY >
120 <#assign tmp = tmp + category.name + ", " />
121 </#if>
122 </#list>
123 <#assign tmp = tmp?keep_before_last(",") />
124 </#if>
125 <#return tmp>
126</#function>
127
128<#-- Variante: restituisce solo la lista di oggetti category -->
129<#function getListCategoryByArticlePrimKey articlePrimKey>
130 <#assign listCategories = [] />
131 <#assign articleCat = catLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(articlePrimKey)) />
132 <#if (articleCat?size > 0)>
133 <#list articleCat as category>
134 <#if category.name?substring(0,1) != PREFIX_SERVICE_CATEGORY >
135 <#assign listCategories = listCategories + [category] />
136 </#if>
137 </#list>
138 </#if>
139 <#return listCategories>
140</#function>
141
142<#-- Funzione escape su stringa -->
143<#function escapeExtraChar text>
144 <#return text?replace("\"",""", "r")?replace("'","’", "r")>
145</#function>
146
147<#-- Verifico se il primo elemento di una lista esiste -->
148<#function firstOfListNotEmpty list>
149 <#assign result = false />
150 <#if list?? && list?has_content && list.getSiblings()?has_content && list.getSiblings()?first.getData()?has_content>
151 <#assign result = true />
152 </#if>
153 <#return result>
154</#function>
155
156<#-- Verifico che ci sia almeno un elemento in lista -->
157<#function oneAtLeastOfListNotEmpty list>
158 <#assign esito = false />
159 <#if list?? && list?has_content && list.getSiblings()?has_content>
160 <#list list.getSiblings() as cur_elem>
161 <#if cur_elem.getData()?has_content>
162 <#assign esito = true />
163 <#break>
164 </#if>
165 </#list>
166 </#if>
167 <#return esito>
168</#function>
169
170<#-- Ricavo etichetta dai name delle select -->
171<#function getOptionLabel ddmStructure fieldSelectName optionValue>
172 <#return ddmStructure.getDDMFormField(fieldSelectName).getDDMFormFieldOptions().getOptionLabels(optionValue).getString(locale)/>
173</#function>
174
175<#-- ricavo elenco di servizi referenziati, per poter effettuare un controllo successivamente -->
176<#assign elencoServizi = liferayServiceApiUtil.findJournalArticleContainingArticleReferenceClassPk('${articlePrimKey}','${STRUCTURE_KEY_SERVIZIO}')>
177
178<#-- ricavo l'elenco degli uffici, e per ognuno di essi recupero anche le persone in base al ruolo in carica in maniera univoca -->
179<#assign elencoUffici = [] />
180<#assign elencoUfficiClassPk = "" />
181<#assign elencoPersone = [] />
182<#if oneAtLeastOfListNotEmpty(office)>
183 <#list office.getSiblings() as cur_office>
184 <#assign webContentData = jsonFactoryUtil.createJSONObject(cur_office.getData()) />
185 <#-- ricavo il classPK -->
186 <#assign cur_office_classPK = webContentData.classPK?number />
187 <#-- ricavo il journal article -->
188 <#assign cur_office_ja = journalArticleLocalService.getLatestArticle(cur_office_classPK) />
189 <#-- ricavo il nome della struttura -->
190 <#assign cur_office_ja_structure_name = cur_office_ja.getDDMStructure().getName(locale) />
191 <#-- ricavo la strucutreKey -->
192 <#assign cur_office_ja_structureKey = cur_office_ja.getDDMStructureKey() />
193
194 <#if cur_office_ja??>
195 <#if cur_office_ja_structureKey == STRUCTURE_KEY_UFFICIO>
196 <#-- valorizzo l'array con il classPk dell'articolo -->
197 <#assign elencoUfficiClassPk = elencoUfficiClassPk+","+cur_office_classPK />
198
199 <#-- ricavo l'url title associato all'articolo -->
200 <#assign cur_office_ja_url_title= cur_office_ja.getUrlTitle() />
201
202 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
203 <#assign document = saxReaderUtil.read(cur_office_ja.getContentByLocale(locale)) />
204 <#assign rootElement = document.getRootElement() />
205
206 <#-- inizio a ricavare i dati dalla struttura dell'articolo -->
207 <#-- title -->
208 <#assign office_title = "" />
209 <#assign office_title_xpath = saxReaderUtil.createXPath("dynamic-element[@name='title']") />
210 <#assign office_title = office_title_xpath.selectSingleNode(rootElement).getStringValue() />
211 <#assign office_title = office_title?trim />
212
213 <#-- -->
214 <#assign elencoUffici = elencoUffici + [{"officeTitle":office_title,"officeUrlTitle":cur_office_ja_url_title}] />
215
216 <#assign cur_office_administrative_persons = liferayServiceApiUtil.findAdministrativeJournalArticlesContainingReferencesClassPkAndInCarica('${elencoUfficiClassPk}','${STRUCTURE_KEY_PERSONALE_AMMINISTRATIVO}')/>
217
218 <#if validator.isNotNull(cur_office_administrative_persons) && cur_office_administrative_persons?has_content>
219 <#list cur_office_administrative_persons as cur_office_administrative_person>
220 <#if validator.isNotNull(cur_office_administrative_person) >
221 <#-- ricavo url title dell'articolo -->
222 <#assign cur_office_administrative_person_url_title = cur_office_administrative_person.getUrlTitle() />
223 <#-- ricavo structureKey -->
224 <#assign cur_office_administrative_person_structureKey = cur_office_administrative_person.getDDMStructureKey() />
225 <#-- ricavo structure -->
226 <#assign cur_office_administrative_person_structure = cur_office_administrative_person.getDDMStructure() />
227
228 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
229 <#assign document = saxReaderUtil.read(cur_office_administrative_person.getContentByLocale(locale)) />
230 <#assign rootElement = document.getRootElement() />
231
232 <#-- name -->
233 <#assign administrative_person_name = "" />
234 <#assign administrative_person_name_xpath = saxReaderUtil.createXPath("dynamic-element[@name='name']") />
235 <#assign administrative_person_name = administrative_person_name_xpath.selectSingleNode(rootElement).getStringValue() />
236 <#assign administrative_person_name = administrative_person_name?trim />
237
238 <#-- surname -->
239 <#assign administrative_person_surname = "" />
240 <#assign administrative_person_surname_xpath = saxReaderUtil.createXPath("dynamic-element[@name='surname']") />
241 <#assign administrative_person_surname = administrative_person_surname_xpath.selectSingleNode(rootElement).getStringValue() />
242 <#assign administrative_person_surname = administrative_person_surname?trim />
243
244 <#assign elencoPersone = elencoPersone + [{"administrativePersonName":administrative_person_name,"administrativePersonSurname":administrative_person_surname,"administrativePersonUrlTitle":cur_office_administrative_person_url_title}] />
245
246 </#if>
247 </#list>
248 </#if>
249 </#if>
250 </#if>
251 </#list>
252</#if>
253
254<#-- HTML -->
255<section class="comuni-scheda scheda-area-amministrativa">
256 <div class="container">
257
258 <#-- intro scheda + funzionalita trasversali -->
259 <div class="row">
260 <div class="offset-lg-1 col-lg-6 col-md-8">
261 <section class="intro-sezione">
262 <#assign titoloScheda = escapeExtraChar(titolo) />
263 <#if validator.isNotNull(title) && validator.isNotNull(title.getData())>
264 <h2 class="titolo-sezione">${title.getData()}</h2>
265 <#assign titoloScheda = escapeExtraChar(title.getData()) />
266 </#if>
267 <#if validator.isNotNull(abstract) && validator.isNotNull(abstract.getData())>
268 <div class="abstract-sezione">${abstract.getData()}</div>
269 </#if>
270 </section>
271 </div>
272
273 <#-- blocco funzionalita trasversali -->
274 <div class="offset-lg-1 col-lg-3 col-md-4">
275 <#-- condivisione sui social -->
276 <#assign currentPageURL = themeDisplay.getPortalURL()+themeDisplay.getURLCurrent() />
277 <#assign companyName = themeDisplay.getCompany().getName() />
278
279 <#assign twitterUrl = "http://twitter.com/share?text=${companyName} - ${titoloScheda} &url=${currentPageURL}" />
280 <#assign facebookUrl = "http://www.facebook.com/sharer/sharer.php?u=${currentPageURL}" />
281 <#assign linkedinUrl = "https://www.linkedin.com/shareArticle?mini=true&url=${currentPageURL}&title=${companyName} - ${titoloScheda}" />
282 <#assign whatsappUrl = "https://api.whatsapp.com/send?text=${companyName} - ${titoloScheda} - ${currentPageURL}" />
283
284 <#-- condivisione social -->
285 <div class="dropdown d-inline share-functions">
286 <button class="btn btn-dropdown dropdown-toggle btn-sm" type="button" id="shareActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
287 <svg class="icon">
288 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-share"></use>
289 </svg>
290 <span>${label_condividi}</span>
291 </button>
292
293 <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions">
294 <div class="link-list-wrapper">
295 <ul class="link-list">
296 <li>
297 <a class="list-item" href="${facebookUrl}" target="_blank">
298 <svg class="icon icon-sm">
299 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-facebook"></use>
300 </svg>
301 <span>${label_facebook}</span>
302 </a>
303 </li>
304 <li>
305 <a class="list-item" href="${twitterUrl}" target="_blank">
306 <svg class="icon icon-sm">
307 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-twitter"></use>
308 </svg>
309 <span>${label_twitter}</span>
310 </a>
311 </li>
312 <li>
313 <a class="list-item" href="${linkedinUrl}" target="_blank">
314 <svg class="icon icon-sm">
315 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-linkedin"></use>
316 </svg>
317 <span>${label_linkedin}</span>
318 </a>
319 </li>
320 <li>
321 <a class="list-item" href="${whatsappUrl}" target="_blank">
322 <svg class="icon icon-sm">
323 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-whatsapp"></use>
324 </svg>
325 <span>${label_whatsapp}</span>
326 </a>
327 </li>
328 </ul>
329 </div>
330 </div>
331 </div>
332
333 <#-- stampa + invia via email -->
334 <#assign subjectEmail = companyName+" - "+titoloScheda />
335 <#assign bodyEmail = currentPageURL />
336
337 <div class="dropdown d-inline other-functions">
338 <button class="btn btn-dropdown dropdown-toggle btn-sm" type="button" id="viewActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
339 <svg class="icon">
340 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-more-items"></use>
341 </svg>
342 <span>${label_vedi_azioni}</span>
343 </button>
344 <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions">
345 <div class="link-list-wrapper">
346 <ul class="link-list">
347 <li>
348 <a class="list-item" href="javascript:void(0);" onclick="window.print();">
349 <svg class="icon icon-sm">
350 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-print"></use>
351 </svg>
352 <span>${label_stampa}</span>
353 </a>
354 </li>
355 <li>
356 <a class="list-item" href="mailto:?subject=${subjectEmail}&body=${bodyEmail}">
357 <svg class="icon icon-sm">
358 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-mail"></use>
359 </svg>
360 <span>${label_invia}</span>
361 </a>
362 </li>
363 </ul>
364 </div>
365 </div>
366 </div>
367
368 <#-- categorie -->
369 <#assign categorie = [] />
370
371 <#-- recupero l'elenco delle categorie da visualizzare -->
372 <#assign categorie = getListCategoryByArticlePrimKey(articlePrimKey) />
373
374 <#if categorie?? && (categorie?size > 0)>
375 <div class="mt-4 mb-4">
376 <h6>${label_argomenti}</h6>
377 <#list categorie as cur_cat>
378 <#if validator.isNotNull(cur_cat) && cur_cat != "">
379 <div class="chip chip-simple chip-primary no-link">
380 <span class="chip-label">${cur_cat.getName()}</span>
381 </div>
382 </#if>
383 </#list>
384 </div>
385 </#if>
386 </div>
387 </div>
388 </div>
389
390 <#-- dettaglio scheda -->
391 <div class="container">
392 <div class="row">
393 <div class="col">
394 <section class="dettaglio-scheda border-top">
395 <div class="row">
396 <#-- menu ancore sinistra -->
397 <div class="col-lg-3 col-md-4">
398 <aside class="left-anchor-menu">
399
400 <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">
401 <span>${label_indice_pagina}</span>
402 <svg class="icon icon-sm">
403 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-arrow-up"></use>
404 </svg>
405 </h4>
406
407 <div class="left-anchor-menu-separator"><div class="left-anchor-menu-separator-inner"></div></div>
408 <div id="${instanceId}_${articleId}_left-anchor-menu" class="collapse show" aria-labelledby="${instanceId}_${articleId}_left-anchor-menu-header">
409 <div class="anchor-menu-wrapper">
410 <ul>
411 <#-- sezione descrizione - cosa fa -->
412 <#if validator.isNotNull(description) && validator.isNotNull(description.getData())>
413 <li class="anchor-item">
414 <a class="anchor-link" href="#${instanceId}_${articleId}_description" title="${label_vai_sezione} ${label_cosa_fa}">${label_cosa_fa}</a>
415 </li>
416 </#if>
417 <#-- sezione area di riferimento -->
418 <#if validator.isNotNull(parent_administrative_area) && validator.isNotNull(parent_administrative_area.getData())>
419 <li class="anchor-item">
420 <a class="anchor-link" href="#${instanceId}_${articleId}_area" title="${label_vai_sezione} ${label_area_padre}">${label_area_padre}</a>
421 </li>
422 </#if>
423 <#-- sezione uffici -->
424 <#if validator.isNotNull(elencoUffici) && elencoUffici?has_content>
425 <li class="anchor-item">
426 <a class="anchor-link" href="#${instanceId}_${articleId}_office" title="${label_vai_sezione} ${label_uffici}">${label_uffici}</a>
427 </li>
428 </#if>
429 <#-- sezione organizzazione -->
430 <#if validator.isNotNull(elencoPersone) && elencoPersone?has_content>
431 <li class="anchor-item">
432 <a class="anchor-link" href="#${instanceId}_${articleId}_organization" title="${label_vai_sezione} ${label_organizzazione}">${label_organizzazione}</a>
433 </li>
434 </#if>
435 <#-- sezione contatti -->
436 <#if
437 (validator.isNotNull(geolocation.full_address) && validator.isNotNull(geolocation.full_address.getData())) ||
438 (oneAtLeastOfListNotEmpty(contacts.email)) ||
439 (validator.isNotNull(contacts.pec) && validator.isNotNull(contacts.pec.getData())) ||
440 (oneAtLeastOfListNotEmpty(contacts.phone)) ||
441 (validator.isNotNull(contacts.fax) && validator.isNotNull(contacts.fax.getData()))
442 >
443 <li class="anchor-item">
444 <a class="anchor-link" href="#${instanceId}_${articleId}_contacts" title="${label_vai_sezione} ${label_contatti}">${label_contatti}</a>
445 </li>
446 </#if>
447 <#-- sezione servizi -->
448 <#if validator.isNotNull(elencoServizi) && elencoServizi?has_content>
449 <li class="anchor-item">
450 <a class="anchor-link" href="#${instanceId}_${articleId}_service" title="${label_vai_sezione} ${label_servizi}">${label_servizi}</a>
451 </li>
452 </#if>
453 <#-- sezione documenti -->
454 <#if oneAtLeastOfListNotEmpty(attachment)>
455 <li class="anchor-item">
456 <a class="anchor-link" href="#${instanceId}_${articleId}_attachments" title="${label_vai_sezione} ${label_documenti}">${label_documenti}</a>
457 </li>
458 </#if>
459 <#-- sezione ulteriori informazioni + ultimo aggiornamento -->
460 <li class="anchor-item">
461 <a class="anchor-link" href="#${instanceId}_${articleId}_further_information" title="${label_vai_sezione} ${label_ulteriori_informazioni}">${label_ulteriori_informazioni}</a>
462 </li>
463 </ul>
464 </div>
465 </div>
466 </aside>
467 </div>
468
469 <div class="col-lg-9 col-md-8">
470 <div class="border-left pl-md-4 pt-4">
471 <#-- sezione testo principale -->
472 <#if validator.isNotNull(description) && validator.isNotNull(description.getData())>
473 <article id="${instanceId}_${articleId}_description" class="page-section anchor-section">
474 <h4 class="h2">${label_cosa_fa}</h4>
475 <div class="row">
476 <div class="col-12">
477 <div class="page-section-text">
478 ${description.getData()}
479 </div>
480 </div>
481 </div>
482 </article>
483 </#if>
484
485 <#-- sezione area padre di riferimento -->
486 <#if validator.isNotNull(parent_administrative_area) && validator.isNotNull(parent_administrative_area.getData())>
487 <article id="${instanceId}_${articleId}_area" class="page-section anchor-section">
488 <div class="row">
489 <div class="col-12">
490 <h4 class="h2">${label_area_padre}</h4>
491
492 <#assign webContentData = jsonFactoryUtil.createJSONObject(parent_administrative_area.getData()) />
493 <#-- ricavo il classPK -->
494 <#assign parent_administrative_area_classPK = webContentData.classPK?number />
495 <#-- ricavo il journal article -->
496 <#assign parent_administrative_area_ja = journalArticleLocalService.getLatestArticle(parent_administrative_area_classPK) />
497 <#-- ricavo il nome della struttura -->
498 <#assign parent_administrative_area_ja_structure_name = parent_administrative_area_ja.getDDMStructure().getName(locale) />
499 <#-- ricavo la structureKey -->
500 <#assign parent_administrative_area_ja_structureKey = parent_administrative_area_ja.getDDMStructureKey() />
501
502 <#if parent_administrative_area_ja??>
503 <#if parent_administrative_area_ja_structureKey == STRUCTURE_KEY_AREA>
504
505 <#-- ricavo l'url title associato all'articolo -->
506 <#assign parent_administrative_area_ja_url_title= parent_administrative_area_ja.getUrlTitle() />
507
508 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
509 <#assign document = saxReaderUtil.read(parent_administrative_area_ja.getContentByLocale(locale)) />
510 <#assign rootElement = document.getRootElement() />
511
512 <#-- inizio a ricavare i dati dalla struttura dell'articolo -->
513 <#-- title -->
514 <#assign title = "" />
515 <#assign title_xpath = saxReaderUtil.createXPath("dynamic-element[@name='title']") />
516 <#assign title = title_xpath.selectSingleNode(rootElement).getStringValue() />
517 <#assign title = title?trim />
518
519 <div class="row">
520 <div class="col-lg-6">
521 <div class="card">
522 <div class="card-body">
523 <h2 class="h2 card-title m-0 d-inline-flex">
524 <div class="category-top mb-0 mr-2">
525 <svg class="icon icon-primary">
526 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-pa"></use>
527 </svg>
528 </div>
529 <a href="/-/${parent_administrative_area_ja_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(title)}">
530 ${title}
531 </a>
532 </h2>
533 </div>
534 </div>
535 </div>
536 </div>
537
538 </#if>
539 </#if>
540 </div>
541 </div>
542 </article>
543 </#if>
544
545 <#-- sezione uffici -->
546 <#if validator.isNotNull(elencoUffici) && elencoUffici?has_content>
547 <article id="${instanceId}_${articleId}_office" class="page-section anchor-section">
548 <div class="row">
549 <div class="col-12">
550 <h4 class="h2">${label_uffici}</h4>
551 <div class="row">
552 <#list elencoUffici as cur_office>
553 <#if cur_office.officeTitle?has_content>
554 <div class="col-lg-6">
555 <div class="card">
556 <div class="card-body p-3">
557 <h2 class="h2 card-title m-0 d-inline-flex">
558 <div class="category-top mb-0 mr-2">
559 <svg class="icon icon-primary">
560 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-pa"></use>
561 </svg>
562 </div>
563 <a href="/-/${cur_office.officeUrlTitle}" title="${label_vai_alla_pagina} ${escapeExtraChar(cur_office.officeTitle)}">
564 ${cur_office.officeTitle}
565 </a>
566 </h2>
567 </div>
568 </div>
569 </div>
570 </#if>
571 </#list>
572 </div>
573 </div>
574 </div>
575 </article>
576 </#if>
577
578 <#-- sezione organizzazione -->
579 <#if validator.isNotNull(elencoPersone) && elencoPersone?has_content>
580 <article id="${instanceId}_${articleId}_organization" class="page-section anchor-section">
581 <h4 class="h2">${label_organizzazione}</h4>
582 <div class="row">
583 <div class="col-12">
584 <#list elencoPersone?sort_by("administrativePersonSurname") as cur_persona>
585 <#if cur_persona.administrativePersonName?has_content && cur_persona.administrativePersonSurname?has_content>
586 <a class="chip-link" href="/-/${cur_persona.administrativePersonUrlTitle}" title="${label_vai_alla_pagina} ${escapeExtraChar(cur_persona.administrativePersonName)} ${escapeExtraChar(cur_persona.administrativePersonSurname)}">
587 <div class="chip chip-simple chip-primary">
588 <span class="chip-label">${cur_persona.administrativePersonName} ${cur_persona.administrativePersonSurname}</span>
589 </div>
590 </a>
591 </#if>
592 </#list>
593 </div>
594 </div>
595 </article>
596 </#if>
597
598 <#-- sezione contatti -->
599 <#if
600 (validator.isNotNull(geolocation.full_address) && validator.isNotNull(geolocation.full_address.getData())) ||
601 (oneAtLeastOfListNotEmpty(contacts.email)) ||
602 (validator.isNotNull(contacts.pec) && validator.isNotNull(contacts.pec.getData())) ||
603 (oneAtLeastOfListNotEmpty(contacts.phone)) ||
604 (validator.isNotNull(contacts.fax) && validator.isNotNull(contacts.fax.getData()))
605 >
606 <article id="${instanceId}_${articleId}_contacts" class="page-section anchor-section">
607 <h4 class="h2">${label_contatti}</h4>
608 <div class="row">
609 <div class="col-lg-9">
610 <div class="card contacts-card">
611 <div class="card-body">
612 <div class="card-text">
613 <#if validator.isNotNull(geolocation.full_address) && validator.isNotNull(geolocation.full_address.getData())>
614 <p class="mb-1">
615 <span>${label_sede} ${geolocation.full_address.getData()}</span>
616 </p>
617 </#if>
618 <#if oneAtLeastOfListNotEmpty(contacts.email)>
619 <p class="mb-1">
620 <span>${label_email}</span>
621 <#list contacts.email.getSiblings() as cur_email>
622 <#if validator.isNotNull(cur_email) && validator.isNotNull(cur_email.getData())>
623 <a href="mailto:${cur_email.getData()}" title="${label_scrivi} ${cur_email.getData()}">${cur_email.getData()}</a><#if cur_email?index lt (contacts.email.getSiblings()?size-1)><span> - </span></#if>
624 </#if>
625 </#list>
626 </p>
627 </#if>
628 <#if validator.isNotNull(contacts.pec) && validator.isNotNull(contacts.pec.getData())>
629 <p class="mb-1">
630 <span>${label_pec} <a href="mailto:${contacts.pec.getData()}" title="${label_scrivi} ${contacts.pec.getData()}">${contacts.pec.getData()}</a></span>
631 </p>
632 </#if>
633 <#if oneAtLeastOfListNotEmpty(contacts.phone)>
634 <p class="mb-1">
635 <span>${label_telefono}</span>
636 <#list contacts.phone.getSiblings() as cur_phone>
637 <#if validator.isNotNull(cur_phone) && validator.isNotNull(cur_phone.getData())>
638 <a href="tel:[${cur_phone.getData()}]">${cur_phone.getData()}</a><#if cur_phone?index lt (contacts.phone.getSiblings()?size-1)><span> - </span></#if>
639 </#if>
640 </#list>
641 </p>
642 </#if>
643 <#if validator.isNotNull(contacts.fax) && validator.isNotNull(contacts.fax.getData())>
644 <p class="mb-1">
645 <span>${label_fax} ${contacts.fax.getData()}</span>
646 </p>
647 </#if>
648 </div>
649 </div>
650 </div>
651 </div>
652 </div>
653 </article>
654 </#if>
655
656 <#-- sezione servizi -->
657 <#if validator.isNotNull(elencoServizi) && elencoServizi?has_content>
658 <article id="${instanceId}_${articleId}_service" class="page-section anchor-section">
659 <h4 class="h2">${label_servizi}</h4>
660 <div class="row">
661 <#list elencoServizi as servizio_ja>
662 <#if validator.isNotNull(servizio_ja) >
663 <#-- ricavo url title dell'articolo -->
664 <#assign servizio_ja_url_title = servizio_ja.getUrlTitle() />
665 <#-- ricavo structureKey -->
666 <#assign servizio_ja_structureKey = servizio_ja.getDDMStructureKey() />
667 <#-- ricavo structure -->
668 <#assign servizio_ja_structure = servizio_ja.getDDMStructure() />
669
670 <#-- ricavo il metodo di saxReaderUtil utile per ricavare poi gli elementi della struttura -->
671 <#assign document = saxReaderUtil.read(servizio_ja.getContentByLocale(locale)) />
672 <#assign rootElement = document.getRootElement() />
673
674 <#-- name -->
675 <#assign title = "" />
676 <#assign title_xpath = saxReaderUtil.createXPath("dynamic-element[@name='title']") />
677 <#assign title = title_xpath.selectSingleNode(rootElement).getStringValue() />
678 <#assign title = title?trim />
679
680 <div class="col-lg-6">
681 <div class="card">
682 <div class="card-body">
683 <h2 class="h2 card-title m-0 d-inline-flex">
684 <div class="category-top mb-0 mr-2">
685 <svg class="icon icon-primary">
686 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-pa"></use>
687 </svg>
688 </div>
689 <a href="/-/${servizio_ja_url_title}" title="${label_vai_alla_pagina} ${escapeExtraChar(title)}">
690 ${title}
691 </a>
692 </h2>
693 </div>
694 </div>
695 </div>
696 </#if>
697 </#list>
698 </div>
699 </article>
700 </#if>
701
702 <#-- sezione documenti -->
703 <#if oneAtLeastOfListNotEmpty(attachment)>
704 <article id="${instanceId}_${articleId}_attachments" class="page-section anchor-section">
705 <h4 class="h2">${label_documenti}</h4>
706 <div class="row">
707 <#list attachment.getSiblings() as cur_attachment>
708 <#if validator.isNotNull(cur_attachment) && validator.isNotNull(cur_attachment.getData())>
709 <#attempt>
710
711 <#-- ricavo la size del documento -->
712 <#-- a partire dal link, lo splitto e ricavo il secondo ed il 5 argomento che mi servono per il metodo successivo -->
713 <#assign dlFileEntrySize = "" />
714 <#assign parts = (cur_attachment.getData())?split("/") />
715 <#assign groupId = parts[2] />
716 <#assign uuId = parts[5]?split("?")[0] />
717
718 <#assign dlFileEntryService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryLocalService') />
719 <#assign dlFileEntry = dlFileEntryService.getFileEntryByUuidAndGroupId(uuId,groupId?number) />
720
721 <#assign dlFileEntrySize = dlFileEntry.getSize() />
722 <#assign dlFileEntryExtension = dlFileEntry.getExtension()?upper_case?trim />
723
724 <#-- trasformo la dimensione in KB -->
725 <#if (dlFileEntrySize gt 0) >
726 <#assign dlFileEntrySize = (dlFileEntrySize / 1000) + " KB"/>
727 </#if>
728
729 <#-- ricavo il titolo dell'allegato: se nn c'è passo un titolo generico -->
730 <#assign attachment_header = label_documento />
731 <#if validator.isNotNull(cur_attachment.attachment_header) && validator.isNotNull(cur_attachment.attachment_header.getData()) >
732 <#assign attachment_header = cur_attachment.attachment_header.getData()?trim />
733 </#if>
734
735 <#-- visualizzo il link dell'allegato -->
736 <div class="col-lg-6">
737 <div class="card allegati-card">
738 <div class="card-body">
739 <div class="allegato d-flex">
740 <div class="icon-img-wrapper">
741 <svg class="icon">
742 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-clip"></use>
743 </svg>
744 </div>
745 <div class="text-wrapper pl-3">
746 <h5 class="h3 card-title m-0">
747 <a href="${cur_attachment.getData()}" target="_blank" title='File <#if dlFileEntryExtension != "">in formato ${dlFileEntryExtension}</#if> - ${dlFileEntrySize}'>
748 <strong>${attachment_header}</strong>
749 </a>
750 </h5>
751 <#if cur_attachment.attachment_description?? && validator.isNotNull(cur_attachment.attachment_description) && validator.isNotNull(cur_attachment.attachment_description.getData()) >
752 <div class="card-text"><small>${cur_attachment.attachment_description.getData()}</small></div>
753 </#if>
754 </div>
755 </div>
756 </div>
757 </div>
758 </div>
759 <#recover>
760 <#-- non visualizzo nulla -->
761 </#attempt>
762 </#if>
763 </#list>
764 </div>
765 </article>
766 </#if>
767
768 <#-- sezione ulteriori informazioni + data ultimo aggiornamento -->
769 <article id="${instanceId}_${articleId}_further_information" class="page-section anchor-section">
770 <h4 class="h2">${label_ulteriori_informazioni}</h4>
771 <#if validator.isNotNull(further_information) && validator.isNotNull(further_information.getData())>
772 <div class="row">
773 <div class="col-12">
774 <div class="callout">
775 <div class="callout-title">
776 <svg class="icon">
777 <use xlink:href="/o/comuni-theme/svg/sprite.svg#it-info-circle"></use>
778 </svg>
779 </div>
780 <div class="callout-text">
781 ${further_information.getData()}
782 </div>
783 </div>
784 </div>
785 </div>
786 </#if>
787
788 <#-- data ultimo aggiornamento -->
789 <div class="row">
790 <div class="col-12">
791 <p class="mb-0">${label_ultimo_aggiornamento}</p>
792 <p><strong>${articleModifiedDate}</strong></p>
793 </div>
794 </div>
795 </article>
796
797 </div>
798 </div>
799 </div>
800 </section>
801 </div>
802 </div>
803 </div>
804
805</section>