null Assessore Dott. Amedeo Rosato

Si è verificato un errore nell'elaborarazione del modello.
When calling macro "oneAtLeastOfListNotEmpty", required parameter "list" (parameter #1) was specified, but had null/missing value.

----
Tip: If the parameter value expression on the caller side is known to be legally null/missing, you may want to specify a default value for it with the "!" operator, like paramValue!defaultValue.
----

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