null SETTORE III: TECNICO

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("\"","&quot;", "r")?replace("'","&rsquo;", "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>