Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> Sedi[0] [in template "20095#20121#34623" at line 103, column 30]
----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: Sede = Sedi[0] [in template "20095#20121#34623" at line 103, column 25]
----
1<#assign
2 FriendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")
3 ClassNameService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameService")
4 JournalArticleLocalService=serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
5 LayoutLocalService=serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")
6 journalArticleId=.vars['reserved-article-id'].data
7 journalArticleResourceLocalServiceUtil=staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"]
8 assetCategoryLocalServiceUtil=staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]
9 articleResourcePK=journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)
10 categoryList=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK)
11 AssetVocabularyLocalServiceUtil=staticUtil["com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil"]
12/>
13<#setting locale=localeUtil.getDefault() />
14<#-- gestione dei breadcrumbs -->
15<#assign
16 paginaPadre=LayoutLocalService.getLayout(groupId, PaginaPadre.getData()?eval.privateLayout, PaginaPadre.getData()?eval.layoutId?number)
17 ancestors=paginaPadre.getAncestors()
18 sorted_ancestors = []
19/>
20<#list ancestors as parente>
21 <#assign
22 sorted_ancestors +=
23 [{
24 "name": parente.name,
25 "ancestors": parente.getAncestors()?size,
26 "data": parente
27 }]
28 />
29</#list>
30
31<div class="container finmatica-breadcrumb-container mb-4">
32 <div class="row justify-content-center">
33 <div class="col-12 col-lg-10">
34 <div class="cmp-breadcrumbs" role="navigation">
35 <nav class="breadcrumb-container" aria-label="breadcrumb">
36 <ol class="breadcrumb p-0" data-element="breadcrumb">
37 <li class="breadcrumb-item"><a
38 href="${themeDisplay.getThemeSetting('Home URL')}">
39 <span class="breadcrumb-text-truncate">Home</span>
40 </a>
41 <span class="separator">/</span>
42 </li>
43 <#list sorted_ancestors?sort_by("ancestors") as ancestor>
44 <li class="breadcrumb-item"><a
45 href="/portal${ancestor.data.getFriendlyURL()}">
46 <span class="breadcrumb-text-truncate">
47 ${ancestor.data.getName()}
48 </span>
49 </a>
50 <span class="separator">/</span>
51 </li>
52 </#list>
53 <li class="breadcrumb-item"><a
54 href="/portal${paginaPadre.getFriendlyURL()}">
55 <span class="breadcrumb-text-truncate">
56 ${paginaPadre.getName()}
57 </span>
58 </a>
59 <span class="separator">/</span>
60 </li>
61 <li class="breadcrumb-item">${Nome.getData()} ${Cognome.getData()}</li>
62 </ol>
63 </nav>
64 </div>
65 </div>
66 </div>
67</div>
68
69<#-- GET ORGANIZZAZIONI -->
70<#assign organizzazioni=[] />
71<#if Organizzazioni.getData()?has_content>
72 <#if Organizzazioni.getSiblings()?has_content>
73 <#list Organizzazioni.getSiblings() as cur_organizzazione>
74 <#assign
75 cur_org_data=jsonFactoryUtil.createJSONObject(cur_organizzazione.getData())
76 relatedOrgs=JournalArticleLocalService.getArticlesByResourcePrimKey(cur_org_data.classPK?number)
77 relatedOrg=relatedOrgs[0]
78 document=saxReaderUtil.read(relatedOrg.getContent())
79 rootElement=document.getRootElement()
80 nome_org=""
81 indirizzo_org=""
82 immagine_org=""
83 urlImmagine_org=""
84 />
85 <#list rootElement.elements() as dynamicElement>
86 <#if dynamicElement.attributeValue("field-reference")=="Titolo">
87 <#assign nome_org=dynamicElement.element("dynamic-content").getText() />
88 <#elseif dynamicElement.attributeValue("field-reference")=="Organizzazioni">
89 <#assign immagine_org=dynamicElement.element("dynamic-content").getText() />
90 <#if immagine_org?has_content>
91 <#assign immagine_org=jsonFactoryUtil.createJSONObject(immagine_org) />
92 <#if immagine_org?has_content>
93 <#assign
94 immagine_org=immagine_org?eval
95 has_immagine_org = true
96 />
97 </#if>
98 </#if>
99 <#elseif dynamicElement.attributeValue("field-reference")=="SedePrincipale">
100 <#assign
101 sede_data=jsonFactoryUtil.createJSONObject(dynamicElement.element("dynamic-content").getData())
102 Sedi=JournalArticleLocalService.getArticlesByResourcePrimKey(sede_data.classPK?number)
103 Sede=Sedi[0]
104 document=saxReaderUtil.read(Sede.getContent())
105 rootElement=document.getRootElement()
106 />
107 <#list rootElement.elements() as dynamicElement>
108 <#if dynamicElement.attributeValue("field-reference")=="Indirizzo">
109 <#assign indirizzo_org=dynamicElement.element("dynamic-content").getText() />
110 </#if>
111 </#list>
112 </#if>
113 </#list>
114 <#assign
115 organizzazioni +=
116 [{
117 "nome" : nome_org,
118 "indirizzo" : indirizzo_org,
119 "immagine" : immagine_org,
120 "urlPagina" : relatedOrg.getUrlTitle()
121 }]
122 />
123 </#list>
124 </#if>
125</#if>
126
127<#-- GET CV -->
128<#assign has_CV=false />
129<#if CurriculumVitae.getData() !="">
130 <#assign
131 CV_data=jsonFactoryUtil.createJSONObject(CurriculumVitae.data)
132 titolo = EtichettaCV.getData()?has_content?string("${EtichettaCV.getData()}", "${CV_data.title}")
133 has_CV=true
134 CV={"titolo": titolo, "url": CurriculumVitae.getData()}
135 />
136</#if>
137
138<#-- GET DICHIARAZIONI REDDITI -->
139<#assign dichiarazioni_redditi=[] />
140<#if DichiarazioneDeiRedditi.getData()?has_content>
141 <#assign
142 dichiarazione_data=jsonFactoryUtil.createJSONObject(DichiarazioneDeiRedditi.data)
143 titolo = EtichettaDichiarazione.getData()?has_content?string("${EtichettaDichiarazione.getData()}", "${dichiarazione_data.title}")
144 dichiarazione={"titolo": titolo, "url": DichiarazioneDeiRedditi.getData()}
145 />
146</#if>
147<#-- GET INCARICHI -->
148<#assign incarichi=[] />
149<#if Incarichi.getData()?has_content>
150 <#list Incarichi.getSiblings() as cur_incarico>
151 <#assign
152 cur_incarico_data=jsonFactoryUtil.createJSONObject(cur_incarico.getData())
153 />
154 <#if cur_incarico_data?eval?has_content>
155 <#assign
156 categorie_cur_incarico=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle", cur_incarico_data.classPK?number)
157 relatedIncarichi=JournalArticleLocalService.getArticlesByResourcePrimKey(cur_incarico_data.classPK?number)
158 relatedIncarico=relatedIncarichi[0]
159 document=saxReaderUtil.read(relatedIncarico.getContent())
160 rootElement=document.getRootElement()
161 nome_incarico=""
162 data_insediamento_incarico=""
163 compensi_incarico=""
164 />
165 <#list categorie_cur_incarico as cur_categoria_cur_incarico>
166 <#assign
167 vocabulary = AssetVocabularyLocalServiceUtil.getVocabulary(cur_categoria_cur_incarico.getVocabularyId())
168 className = ClassNameService.fetchClassName("com.liferay.asset.kernel.model.AssetCategory")
169 friendlyUrlEntry = FriendlyURLEntryLocalService.getMainFriendlyURLEntry(className.getClassNameId(), cur_categoria_cur_incarico.categoryId)
170 friendlyUrlList = FriendlyURLEntryLocalService.getFriendlyURLEntryLocalizations(friendlyUrlEntry.friendlyURLEntryId)
171 cat_name = cur_categoria_cur_incarico.name
172 cat_localized_name = cur_categoria_cur_incarico.getTitle(themeDisplay.getLocale(), true),
173 cat_url = friendlyUrlList[0].urlTitle
174 />
175 <#assign cur_vocabulary=AssetVocabularyLocalServiceUtil.getVocabulary(cur_categoria_cur_incarico.getVocabularyId()) />
176 <#if
177 cur_vocabulary.name == "tassonomia incarichi"
178 || cur_vocabulary.description == "tipo di incarico"
179 || cur_vocabulary.name == "tassonomia tipi di incarico"
180 >
181 <#assign tipo_incarico = cat_localized_name />
182 </#if>
183 </#list>
184 </#if>
185 <#list rootElement.elements() as dynamicElement>
186 <#if dynamicElement.attributeValue("field-reference")=="Titolo">
187 <#assign nome_incarico=dynamicElement.element("dynamic-content").getText() />
188 <#elseif dynamicElement.attributeValue("field-reference")=="Compensi">
189 <#assign compensi_incarico=dynamicElement.element("dynamic-content").getText() />
190 <#elseif dynamicElement.attributeValue("field-reference")=="DataInsediamento">
191 <#if dynamicElement.element("dynamic-content")?? && dynamicElement.element("dynamic-content")?has_content>
192 <#assign data_insediamento_Data=getterUtil.getString(dynamicElement.element("dynamic-content").getData()) />
193 <#if validator.isNotNull(data_insediamento_Data)>
194 <#assign
195 DataInizio_DateObj=dateUtil.parseDate("yyyy-MM-dd", data_insediamento_Data, locale)
196 data_insediamento_incarico=dateUtil.getDate(DataInizio_DateObj, "dd MMMM yyyy" , locale) />
197 </#if>
198 </#if>
199
200 </#if>
201 </#list>
202 <#assign
203 incarichi +=
204 [{
205 "nome": nome_incarico,
206 "tipo": tipo_incarico,
207 "compensi": compensi_incarico,
208 "data": data_insediamento_incarico
209 }]
210 />
211 </#list>
212</#if>
213<#-- GET SPESE ELETTORALI -->
214<#assign has_spese_elettorali=false />
215<#if SpeseElettorali.getData() !="">
216 <#assign
217 SPESE_data=jsonFactoryUtil.createJSONObject(SpeseElettorali.data)
218 titolo = EtichettaSpese.getData()?has_content?string("${EtichettaSpese.getData()}", "${SPESE_data.title}")
219 has_spese_elettorali=true
220 SPESE={"titolo": titolo, "url": SpeseElettorali.getData()}
221 />
222</#if>
223<#-- GET VARIAZIONI PATRIMONIALI -->
224<#assign has_variazioni_patrimoniali=false />
225<#if VariazioniSituazionePatrimoniale.getData() !="">
226 <#assign
227 VARIAZIONI_data=jsonFactoryUtil.createJSONObject(VariazioniSituazionePatrimoniale.data)
228 titolo = EtichettaPatrimoniale.getData()?has_content?string("${EtichettaPatrimoniale.getData()}", "${VARIAZIONI_data.title}")
229 has_variazioni_patrimoniali=true
230 VARIAZIONI={"titolo": titolo, "url": VariazioniSituazionePatrimoniale.getData()}
231 />
232</#if>
233<#-- GET CONTATTI -->
234<#assign
235 has_contatti=PuntiDiContatto.getData()?has_content
236 contatti=[] />
237<#if has_contatti>
238 <#list PuntiDiContatto.getSiblings() as cur_PuntiDiContatto>
239 <#assign
240 contatti_data=jsonFactoryUtil.createJSONObject(cur_PuntiDiContatto.getData())
241 nome_wallet=""
242 contatti_wallet=[]
243 relatedArticles=JournalArticleLocalService.getArticlesByResourcePrimKey(contatti_data.classPK?number)
244 relatedArticle=relatedArticles[0]
245 document=saxReaderUtil.read(relatedArticle.getContent())
246 rootElement=document.getRootElement() />
247 <#list rootElement.elements() as dynamicElement>
248 <#-- AGGIUNGO IL CONTATTO SOLO SE VALORIZZATO E DEFINISCO IL NOME DEL WALLET -->
249 <#if dynamicElement.attributeValue("field-reference")=="Titolo">
250 <#assign nome_wallet=dynamicElement.element("dynamic-content").getText() />
251 <#elseif dynamicElement.element("dynamic-content").getText()?has_content>
252 <#assign
253 tipo_contatto=(dynamicElement.attributeValue("field-reference")=="URL" )?string("Sito Web", dynamicElement.attributeValue("field-reference"))
254 contatti_wallet +=[ {"tipo": tipo_contatto, "valore": dynamicElement.element("dynamic-content").getText()} ]
255 />
256 </#if>
257 </#list>
258 <#assign contatti +=
259 [{
260 "titolo": nome_wallet,
261 "contatti": contatti_wallet
262 }]
263 />
264 </#list>
265</#if>
266<#-- GET PHOTOGALLERY -->
267<#assign photogallery=[] />
268<#if GalleriaDiImmagini.getSiblings()?has_content>
269<#list GalleriaDiImmagini.getSiblings() as cur_GalleriaDiImmagini>
270 <#if cur_GalleriaDiImmagini.getData()?? && cur_GalleriaDiImmagini.getData() !="">
271 <#assign
272 photogallery +=
273 [{
274 "alt" : cur_GalleriaDiImmagini.getAttribute("alt"),
275 "fileentryid" : cur_GalleriaDiImmagini.getAttribute("fileEntryId"),
276 "src" : cur_GalleriaDiImmagini.getData()
277 }]
278 />
279 </#if>
280</#list>
281</#if>
282<div class="container">
283 <div class="row justify-content-center">
284 <div class="col-12 col-lg-10">
285 <div class="cmp-heading pb-3 pb-lg-4">
286 <div class="row">
287 <div class="col-lg-8">
288 <h1 class="title-xxxlarge" data-element="service-title">
289 ${Nome.getData()} ${Cognome.getData()}
290 </h1>
291 </div>
292 <div class="col-lg-3 offset-lg-1 mt-5 mt-lg-0">
293 <div class="dropdown" id="fallback-share">
294 <button
295 aria-label="condividi sui social"
296 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-6 text-primary"
297 type="button"
298 id="shareActions"
299 data-bs-toggle="dropdown"
300 aria-haspopup="true"
301 aria-expanded="false"
302 >
303 <svg class="icon icon-primary" aria-hidden="true">
304 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-share"></use>
305 </svg>
306 <small><@liferay.language key="share" /></small>
307 </button>
308 <div class="dropdown-menu shadow-lg" aria-labelledby="shareActions">
309 <div class="link-list-wrapper">
310 <ul class="link-list" role="menu">
311 <li role="none">
312 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('facebook')">
313 <svg class="icon icon-primary" aria-hidden="true">
314 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-facebook"></use>
315 </svg>
316 <span>Facebook</span>
317 </button>
318 </li>
319 <li role="none">
320 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('twitter')">
321 <svg class="icon icon-primary" aria-hidden="true">
322 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-twitter"></use>
323 </svg>
324 <span><@liferay.language key="Twitter" /></span>
325 </button>
326 </li>
327 <li role="none">
328 <button class="list-item text-primary px-3 fs-6" role="menuitem" onclick="shareOn('whatsapp')">
329 <svg class="icon icon-primary" aria-hidden="true">
330 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-whatsapp"></use>
331 </svg>
332 <span>Whatsapp</span>
333 </button>
334 </li>
335 </ul>
336 </div>
337 </div>
338 </div>
339
340 <div class="dropdown">
341 <button
342 aria-label="vedi azioni da compiere sulla pagina"
343 class="btn btn-dropdown dropdown-toggle text-decoration-underline d-inline-flex align-items-center fs-0"
344 type="button"
345 id="viewActions"
346 data-bs-toggle="dropdown"
347 aria-haspopup="true"
348 aria-expanded="false"
349 >
350 <svg class="icon icon-primary" aria-hidden="true">
351 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-more-items"></use>
352 </svg>
353 <small><@liferay.language key="actions" /></small>
354 </button>
355 <div class="dropdown-menu shadow-lg" aria-labelledby="viewActions">
356 <div class="link-list-wrapper">
357 <ul class="link-list" role="menu">
358 <li role="none">
359 <button class="list-item px-3 fs-6 text-primary" onclick="window.print()" role="menuitem">
360 <svg class="icon icon-primary" aria-hidden="true">
361 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-print"></use>
362 </svg>
363 <span><@liferay.language key="print" /></span>
364 </button>
365 </li>
366 <li role="none">
367 <a class="list-item mail-anchor px-3 fs-6" href="mailto:" role="menuitem">
368 <svg class="icon icon-primary" aria-hidden="true">
369 <use xlink:href="${themeDisplay.getPathThemeImages()}/sprite.svg#it-mail"></use>
370 </svg>
371 <span><@liferay.language key="send" /></span>
372 </a>
373 </li>
374 </ul>
375 </div>
376 </div>
377 </div>
378 </div>
379 </div>
380 </div>
381 </div>
382 </div>
383</div>
384
385<#if Immagine.getData()?? && Immagine.getData() !="">
386<#assign immagine_alt=Immagine.getAttribute("alt")!"" />
387<div class="container-fluid my-3">
388 <div class="row">
389 <figure class="figure px-0 img-full">
390 <img alt="${Immagine.getAttribute('alt')}" data-fileentryid="${Immagine.getAttribute('fileEntryId')}" src="${Immagine.getData()}" />
391 <#if immagine_alt !="">
392 <figcaption class="figure-caption text-center pt-3">
393 ${immagine_alt}
394 </figcaption>
395 </#if>
396 </figure>
397 </div>
398</div>
399</#if>
400
401<div class="container">
402 <div class="row border-top border-light row-column-menu-left pb-4 pb-lg-80">
403 <div class="col-12 col-lg-3 mb-4 border-col">
404 <div class="cmp-navscroll sticky-top" aria-labelledby="accordion-title-one">
405 <nav class="navbar it-navscroll-wrapper navbar-expand-lg" aria-label="${languageUtil.get(locale, 'page-index')}" data-bs-navscroll="">
406 <div class="navbar-custom" id="navbarNavProgress">
407 <div class="menu-wrapper">
408 <div class="link-list-wrapper">
409 <div class="accordion">
410 <div class="accordion-item">
411 <span class="accordion-header" id="accordion-title-one">
412 <button class="accordion-button pb-10 px-3" type="button" data-bs-toggle="collapse" data-bs-target="#collapse-one" aria-expanded="true" aria-controls="collapse-one">
413 <@liferay.language key="page-index" />
414 <svg class="icon icon-xs right" viewBox="0 0 24 24">
415 <path d="M11.6 15.4L6 9.8l.7-.8 4.9 4.9L16.5 9l.7.8z"></path>
416 </svg>
417 </button>
418 </span>
419 <div class="progress">
420 <div class="progress-bar it-navscroll-progressbar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;" aria-label="Progress bar"></div>
421 </div>
422 <div id="collapse-one" class="accordion-collapse collapse show" role="region" aria-labelledby="accordion-title-one">
423 <div class="accordion-body">
424 <ul class="link-list" data-element="page-index">
425
426 <#if incarichi?size gt 0>
427 <li class="nav-item">
428 <a class="nav-link" href="#assignment">
429 <span class="title-medium"><@liferay.language key="assignments" /></span>
430 </a>
431 </li>
432 </#if>
433
434 <#if organizzazioni?size gt 0>
435 <li class="nav-item">
436 <a class="nav-link" href="#organization">
437 <span class="title-medium"><@liferay.language key="organization" /></span>
438 </a>
439 </li>
440 </#if>
441
442 <#if Competenze.getData()?has_content>
443 <li class="nav-item">
444 <a class="nav-link" href="#competenze">
445 <span class="title-medium"><@liferay.language key="responsibilities" /></span>
446 </a>
447 </li>
448 </#if>
449
450 <#if Deleghe.getData()?has_content>
451 <li class="nav-item">
452 <a class="nav-link" href="#delegations">
453 <span class="title-medium"><@liferay.language key="delegations" /></span>
454 </a>
455 </li>
456 </#if>
457
458 <#if Biografia.getData()?has_content>
459 <li class="nav-item">
460 <a class="nav-link" href="#bio">
461 <span class="title-medium"><@liferay.language key="biography" /></span>
462 </a>
463 </li>
464 </#if>
465
466 <#if GalleriaDiImmagini.getData()?has_content>
467 <li class="nav-item">
468 <a class="nav-link" href="#gallery">
469 <span class="title-medium"><@liferay.language key="image-gallery" /></span>
470 </a>
471 </li>
472 </#if>
473
474 <#if contatti?size gt 0>
475 <li class="nav-item">
476 <a class="nav-link" href="#contacts">
477 <span class="title-medium"><@liferay.language key="contact" /></span>
478 </a>
479 </li>
480 </#if>
481
482 <#if has_CV>
483 <li class="nav-item">
484 <a class="nav-link" href="#curricula">
485 <span class="title-medium"><@liferay.language key="cv" /></span>
486 </a>
487 </li>
488 </#if>
489
490 <#if SituazionePatrimoniale.getData()?has_content>
491 <li class="nav-item">
492 <a class="nav-link" href="#patrimonial-situation">
493 <span class="title-medium"><@liferay.language key="patrimonial-situation" /></span>
494 </a>
495 </li>
496 </#if>
497
498 <#if DichiarazioneDeiRedditi.getData()?has_content>
499 <li class="nav-item">
500 <a class="nav-link" href="#redditi">
501 <span class="title-medium"><@liferay.language key="tax-declaration" /></span>
502 </a>
503 </li>
504 </#if>
505
506 <#if has_spese_elettorali>
507 <li class="nav-item">
508 <a class="nav-link" href="#spese">
509 <span class="title-medium"><@liferay.language key="electoral-expenses" /></span>
510 </a>
511 </li>
512 </#if>
513
514 <#if has_variazioni_patrimoniali>
515 <li class="nav-item">
516 <a class="nav-link" href="#variations">
517 <span class="title-medium"><@liferay.language key="patrimonial-situation-variation" /></span>
518 </a>
519 </li>
520 </#if>
521
522 <#if AltreCariche.getData()?has_content>
523 <li class="nav-item">
524 <a class="nav-link" href="#other-charges">
525 <span class="title-medium"><@liferay.language key="other-assignments" /></span>
526 </a>
527 </li>
528 </#if>
529
530 <#if UlterioriInformazioni.getData()?has_content>
531 <li class="nav-item">
532 <a class="nav-link" href="#more-info">
533 <span class="title-medium">
534 <@liferay.language key="additional-information" />
535 </span>
536 </a>
537 </li>
538 </#if>
539
540 </ul>
541 </div>
542 </div>
543 </div>
544 </div>
545 </div>
546 </div>
547 </div>
548 </nav>
549 </div>
550 </div>
551 <div class="col-12 col-lg-8 offset-lg-1">
552 <div class="it-page-sections-container">
553
554 <#list incarichi>
555 <section class="it-page-section mb-30 pt-4" id="assignment">
556 <h2 class="title-xxlarge mb-3"><@liferay.language key="assignments" /></h2>
557 <div class="row">
558 <#items as incarico>
559 <div class="col-12 col-lg-6 p-0 pe-3 mb-3">
560 <div class="p-3 shadow-sm rounded h-100">
561 <div class="category-top fw-semibold t-primary text-uppercase" style="font-size: .8rem;">
562 <div>
563 <div class="category">
564 ${incarico.tipo}
565 </div>
566 </div>
567 </div>
568 <div class="col-12 col-lg-9 p-0 pt-3">
569 <p class="card-title text-paragraph-regular-medium-semi mb-1 primary-color-b3">
570 ${incarico.nome}
571 </p>
572 <div class="card-text incarichi">
573 <#if incarico.compensi !="">
574 <div>
575 <div class="fw-semibold">Compensi: </div>
576 <div>
577 ${incarico.compensi}
578 </div>
579 </div>
580 </#if>
581 <#if incarico.data !="">
582 <div>
583 <div class="fw-semibold">Data di insediamento: </div>
584 <div>
585 ${incarico.data}
586 </div>
587 </div>
588 </#if>
589 </div>
590 </div>
591 </div>
592 </div>
593 </#items>
594 </div>
595 </section>
596 </#list>
597
598 <#list organizzazioni>
599 <section class="it-page-section mb-30 pt-4" id="organization">
600 <h2 class="title-xxlarge mb-3"><@liferay.language key="organization" /></h2>
601 <div class="row">
602 <#items as org>
603 <div class="col-12 col-lg-6">
604 <div class="card card-teaser card-teaser-info shadow-sm rounded d-flex align-items-center p-3 p-lg-4">
605 <div class="card-body">
606 <h4 class="mb-1 title-small-semi-bold-medium">
607 <a href="/portal/-/${org.urlPagina}" class="text-decoration-none primary-color-b3">
608 ${org.nome}
609 </a>
610 </h4>
611 <div class="card-text">
612 <p class="u-main-black">
613 ${org.indirizzo}
614 </p>
615 </div>
616 </div>
617 <#if has_immagine_org?has_content>
618 <div class="avatar size-xl" aria-hidden="true">
619 <img
620 class="classi_css"
621 attributo_style
622 alt="${org.immagine.alt!''}"
623 src="${org.immagine.url}"
624 />
625 </div>
626 </#if>
627 </div>
628 </div>
629 </#items>
630 </div>
631 </section>
632 </#list>
633
634 <#if Competenze.getData()?has_content>
635 <section class="it-page-section mb-30 pt-4" id="competenze">
636 <h2 class="title-xxlarge mb-3"><@liferay.language key="responsibilities" /></h2>
637 <div class="richtext-wrapper lora">
638 ${Competenze.getData()}
639 </div>
640 </section>
641 </#if>
642
643 <#if Deleghe.getData()?has_content>
644 <section class="it-page-section mb-30 pt-4" id="delegations">
645 <h2 class="title-xxlarge mb-3"><@liferay.language key="delegations" /></h2>
646 <div class="richtext-wrapper lora">
647 ${Deleghe.getData()}
648 </div>
649 </section>
650 </#if>
651
652 <#if Biografia.getData()?has_content>
653 <section class="it-page-section mb-30 pt-4" id="bio">
654 <h2 class="title-xxlarge mb-3"><@liferay.language key="biography" /></h2>
655 <div class="richtext-wrapper lora">
656 ${Biografia.getData()}
657 </div>
658 </section>
659 </#if>
660
661 <#list photogallery>
662 <section class="it-page-section mb-30 pt-4" id="gallery">
663 <h2 class="title-xxlarge mb-3"><@liferay.language key="image-gallery" /></h2>
664 <div class="it-carousel-wrapper it-carousel-landscape-abstract-three-cols splide splide--slide splide--ltr splide--draggable is-active is-initialized mb-4" data-bs-carousel-splide="" id="splide01">
665 <div class="splide__track" id="splide01-track" style="padding-left: 0px; padding-right: 0px;">
666 <ul class="splide__list it-carousel-all" id="splide01-list" style="transform: translateX(0px);">
667 <#items as img>
668 <li class="splide__slide is-active is-visible h-100" id="splide01-slide0${img?counter}" style="margin-right: 24px; width: calc(calc(100% / 3) - 16px);" tabindex="0" data-focus-mouse="false">
669 <div class="it-single-slide-wrapper">
670 <figure>
671 <a href="${img.src}" target="_blank" rel="noopener noreferrer">
672 <img src="${img.src}" alt="${img.alt}" class="img-fluid" style="width: 100%; object-fit: cover; object-position: center; aspect-ratio: 1/1;" loading="lazy">
673 </a>
674 <figcaption class="figure-caption mt-2 text-center small text-muted">
675 ${img.alt}
676 </figcaption>
677 </figure>
678 </div>
679 </li>
680 </#items>
681 </ul>
682 </div>
683 </div>
684 </section>
685 </#list>
686
687 <#list contatti>
688 <section class="it-page-section mb-30" id="contacts">
689 <h2 class="title-xxlarge mb-3"><@liferay.language key="contact" /></h2>
690 <div class="row">
691 <#items as wallet_contatti>
692 <div class="col-12 col-md-6 pe-3">
693 <div class="col-11 p-3 shadow-sm rounded">
694 <div class="h6 mb-2">
695 ${wallet_contatti.titolo}
696 </div>
697 <#list wallet_contatti.contatti as contatto>
698 <div>
699 <span class="fw-semibold">
700 <@liferay.language key="${contatto.tipo?replace(' ', '-')}" />:
701 </span>
702 <#assign url_type="" />
703 <#if
704 contatto.tipo=="Email"
705 || contatto.tipo=="PEC">
706 <#assign url_type="mailto:" />
707 <#elseif
708 contatto.tipo=="Telefono"
709 || contatto.tipo=="Whatsapp"
710 || contatto.tipo=="Telegram"
711 >
712 <#assign url_type="tel:" />
713 </#if>
714 <span class="ms-1">
715 <a
716 href="${url_type}${contatto.valore}"
717 target="_blank"
718 class="text-primary">
719 ${contatto.valore}
720 </a>
721 </span>
722 </div>
723 </#list>
724 </div>
725 </div>
726 </#items>
727 </div>
728 </section>
729 </#list>
730
731 <#if has_CV>
732 <section class="it-page-section mb-30 pt-4" id="curricula">
733 <h2 class="title-xxlarge mb-3"><@liferay.language key="cv" /></h2>
734 <div class="col-12 shadow p-3 mb-4 rounded">
735 <div class="d-flex align-items-center">
736 <svg class="icon icon-primary icon-lh me-2" aria-hidden="true" viewBox="0 0 24 24">
737 <path d="M12,14.2L7.7,9.9l0.7-0.7l3.1,3.1V3h1v9.2l3.1-3l0.7,0.7L12,14.2z M19,12v7.5c0,0.3-0.2,0.5-0.5,0.5h-13C5.2,20,5,19.8,5,19.5V12H4v7.5C4,20.3,4.7,21,5.5,21h13c0.8,0,1.5-0.7,1.5-1.5V12H19z" />
738 </svg>
739 <a class="text-decoration_none fw-semibold t-primary" href="${CV.url}">
740 ${(CV.titolo)!"CV ${Nome.getData()} ${Cognome.getData()}"}
741 </a>
742 </div>
743 </div>
744 </section>
745 </#if>
746
747 <#if SituazionePatrimoniale.getData()?has_content>
748 <section class="it-page-section mb-30 pt-4" id="patrimonial-situation">
749 <h2 class="title-xxlarge mb-3"><@liferay.language key="patrimonial-situation" /></h2>
750 <div class="col-12 p-3 rounded">
751 ${SituazionePatrimoniale.getData()}
752 </div>
753 </section>
754 </#if>
755
756 <#if DichiarazioneDeiRedditi.getData()?has_content>
757 <section class="it-page-section mb-30 pt-4" id="redditi">
758 <h2 class=" title-xxlarge mb-3"><@liferay.language key="tax-declaration" /></h2>
759 <div class="col-12 shadow p-3 mb-4 rounded">
760 <div class="d-flex align-items-center">
761 <svg class="icon icon-primary icon-lh me-2" aria-hidden="true" viewBox="0 0 24 24">
762 <path d="M12,14.2L7.7,9.9l0.7-0.7l3.1,3.1V3h1v9.2l3.1-3l0.7,0.7L12,14.2z M19,12v7.5c0,0.3-0.2,0.5-0.5,0.5h-13C5.2,20,5,19.8,5,19.5V12H4v7.5C4,20.3,4.7,21,5.5,21h13c0.8,0,1.5-0.7,1.5-1.5V12H19z" />
763 </svg>
764 <a class="text-decoration_none fw-semibold t-primary" href="${dichiarazione.url}">
765 ${(dichiarazione.titolo)!"Dichiarazione dei redditi - ${Nome.getData()} ${Cognome.getData()}"}
766 </a>
767 </div>
768 </div>
769 </section>
770 </#if>
771
772 <#if has_spese_elettorali>
773 <section class="it-page-section mb-30 pt-4" id="spese">
774 <h2 class="title-xxlarge mb-3"><@liferay.language key="electoral-expenses" /></h2>
775 <p class="lora">Le spese sostenute e le obbligazioni assunte per la propaganda elettorale.</p>
776 <div class="col-12 shadow p-3 mb-4 rounded">
777 <div class="d-flex align-items-center">
778 <svg class="icon icon-primary icon-lh me-2" aria-hidden="true" viewBox="0 0 24 24">
779 <path d="M12,14.2L7.7,9.9l0.7-0.7l3.1,3.1V3h1v9.2l3.1-3l0.7,0.7L12,14.2z M19,12v7.5c0,0.3-0.2,0.5-0.5,0.5h-13C5.2,20,5,19.8,5,19.5V12H4v7.5C4,20.3,4.7,21,5.5,21h13c0.8,0,1.5-0.7,1.5-1.5V12H19z" />
780 </svg>
781 <a class="text-decoration_none fw-semibold t-primary" href="${SPESE.url}">
782 ${SPESE.titolo}
783 </a>
784 </div>
785 </div>
786 </section>
787 </#if>
788
789 <#if has_variazioni_patrimoniali>
790 <section class="it-page-section mb-30 pt-4" id="variations">
791 <h2 class="title-xxlarge mb-3"><@liferay.language key="patrimonial-situation-variation" /></h2>
792 <div class="col-12 p-3 shadow rounded mb-4">
793 <div class="d-flex align-items-center">
794 <svg class="icon icon-primary icon-lh me-2" aria-hidden="true" viewBox="0 0 24 24">
795 <path d="M12,14.2L7.7,9.9l0.7-0.7l3.1,3.1V3h1v9.2l3.1-3l0.7,0.7L12,14.2z M19,12v7.5c0,0.3-0.2,0.5-0.5,0.5h-13C5.2,20,5,19.8,5,19.5V12H4v7.5C4,20.3,4.7,21,5.5,21h13c0.8,0,1.5-0.7,1.5-1.5V12H19z" />
796 </svg>
797 <a class="text-decoration_none fw-semibold t-primary" href="${VARIAZIONI.url}">
798 ${VARIAZIONI.titolo}
799 </a>
800 </div>
801 </div>
802 </section>
803 </#if>
804
805 <#if AltreCariche.getData()?has_content>
806 <section class="it-page-section mb-30 pt-4" id="other-charges">
807 <h2 class="title-xxlarge mb-3"><@liferay.language key="other-assignments" /></h2>
808 <div class="richtext-wrapper lora">
809 ${AltreCariche.getData()}
810 </div>
811 </section>
812 </#if>
813
814 <#if UlterioriInformazioni.getData()?has_content>
815 <section class="it-page-section mb-30 pt-4" id="more-info">
816 <h2 class="title-xxlarge mb-3"><@liferay.language key="additional-information" /></h2>
817 <div class="richtext-wrapper lora">
818 ${UlterioriInformazioni.getData()}
819 </div>
820 </section>
821 </#if>
822
823 </div>
824 <div class="mt-3">
825 <#assign
826 modifiedDate=.vars['reserved-article-modified-date'].getData()?split(", ")[1]?split(" +")[0]
827 displayModifiedDate=modifiedDate?datetime("dd MMM yyyy hh:mm:ss") />
828 <p class="text-paragraph-small mb-0 lora">
829 <span class="fw-semibold"><@liferay.language key="last-update-date" />: </span>
830 <span>
831 ${displayModifiedDate?string["dd/MM/yyyy, HH:mm"]}
832 </span>
833 </p>
834 </div>
835 </div>
836 </div>
837</div>
838
839<script defer>
840document.querySelectorAll(".mail-anchor").forEach(anchor => anchor.href = "mailto:&subject=${Nome.getData()} ${Cognome.getData()}&body=" + window.location.href)
841
842function shareOn(type) {
843 let articleUrl = window.location.href;
844 const mapping = {
845 "facebook": "https://facebook.com/sharer/sharer.php?u=" + articleUrl,
846 "twitter": "https://twitter.com/intent/tweet/?text=" + articleUrl,
847 "linkedin": "http://www.linkedin.com/sharing/share-offsite/?url=" + articleUrl,
848 "whatsapp": "whatsapp://send?text=" + articleUrl
849 }
850
851 window.open(mapping[type], "_blank");
852 return
853}
854</script>
855
856<style>
857.card-text.incarichi {
858 margin-top: 1.25rem;
859}
860
861.card-text.incarichi * {
862 margin-bottom: 0px;
863}
864</style>