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("\"",""", "r")?replace("'","’", "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>