Consistent Quality
An error occurred while processing the template.
The following has evaluated to null or missing: ==> cur_DocumentiAllegati.testoDoc [in template "20101#20128#44261" at line 231, column 28] ---- Tip: It's the step after the last dot 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: #if cur_DocumentiAllegati.testoDoc.ge... [in template "20101#20128#44261" at line 231, column 23] ----
1<#-- Evento template New -->
2
3<#assign assetEntryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
4<#assign assetLinkLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")>
5<#assign journalArticleLocalService = serviceLocator.findService('com.liferay.journal.service.JournalArticleLocalService') />
6<#assign dlFileEntryService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService') />
7<#assign abilabCommonService = serviceLocator.findService('it.extracube.abilab.common.service.AbilabCommonService')/>
8<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")/>
9
10<#assign journalArticle = serviceLocator.findService('com.liferay.journal.service.JournalArticleLocalService') />
11<#assign article = journalArticle.getArticle(groupId, .vars['reserved-article-id'].data)/>
12
13<#assign currentArticleResourcePrimKey = article.getResourcePrimKey() />
14<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
15<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
16<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) />
17
18<#assign view = languageUtil.get(locale, "abi_view") />
19<#assign press = languageUtil.get(locale, "abi_press") />
20<#assign meet = languageUtil.get(locale, "abi_act_meet") />
21<#assign agendaEvent = languageUtil.get(locale, "abi_agenda") />
22<#assign goMinisito = languageUtil.get(locale, "abi_go_minisito") />
23<#assign documentsTitle = languageUtil.get(locale, "abi_documents") />
24<#assign downloadTitle = languageUtil.get(locale, "abi_download") />
25<#assign newsRelated = languageUtil.get(locale, "abi_news_related") />
26
27<#assign is_signed_in = themeDisplay.isSignedIn() />
28
29<#-- Controllo permessi per download dei file -->
30<#assign roleLocalService = serviceLocator.findService('com.liferay.portal.kernel.service.RoleLocalService') />
31<#assign user = themeDisplay.getRealUser() />
32
33<#-- Controllo sul gruppo -->
34<#assign userGroups = user.getUserGroups() />
35
36<#assign acceptedGroup = "Consorziato" />
37<#assign findGroup = false />
38<#list userGroups as group>
39 <#if group.getName() == acceptedGroup>
40 <#assign findGroup = true />
41 </#if>
42</#list>
43
44<#-- Controllo sul Ruolo -->
45<#assign roleLocalService = serviceLocator.findService('com.liferay.portal.kernel.service.RoleLocalService') />
46<#assign userRoles = roleLocalService.getUserRoles(user.getUserId())>
47
48<#assign acceptedRole = "Consorziato" />
49<#assign acceptedRoleAdmin = "Administrator" />
50<#assign acceptedRoleEditor = "Editor ABI-Lab" />
51<#assign findRole = false />
52<#list userRoles as role>
53 <#if (role.getName() == acceptedRole) || (role.getName() == acceptedRoleAdmin) || (role.getName() == acceptedRoleEditor)>
54 <#assign findRole = true />
55 </#if>
56</#list>
57
58<div class="evento">
59 <div class="main">
60 <div class="evento-header" style="background-image: url(${ImmagineEvento.getData()});">
61 <div class="container">
62 <div class="margin-100"></div>
63 <div class="header-cover row">
64 <#assign title = .vars['reserved-article-title'].data />
65 <#assign subscribe=languageUtil.get(locale, "abi_subscribe_event" ) />
66
67 <#assign program=languageUtil.get(locale, "abi_program" ) />
68 <#assign reach=languageUtil.get(locale, "abi_reach_event" ) />
69 <#assign calculate=languageUtil.get(locale, "abi_route" ) />
70 <#assign download=languageUtil.get(locale, "abi_download_app" ) />
71
72 <div class="col-titolo col-12 col-lg-7">
73 <h1 class="underscore">${title}</h1>
74 </div>
75 <#assign startDate=getterUtil.getString(DataInizio.getData())>
76 <#assign startdate_DateObj=dateUtil.parseDate("yyyy-MM-dd", startDate?string, locale) />
77 <#assign start_d_year=dateUtil.getDate(startdate_DateObj, "yyyy" , locale) />
78 <#assign start_d_day=dateUtil.getDate(startdate_DateObj, "dd" , locale) />
79 <#assign start_d_month=dateUtil.getDate(startdate_DateObj, "MMMM" , locale) />
80
81 <#assign endDate=getterUtil.getString(DataFine.getData())>
82 <#assign enddate_DateObj=dateUtil.parseDate("yyyy-MM-dd", endDate?string, locale) />
83 <#assign end_d_year=dateUtil.getDate(enddate_DateObj, "yyyy" , locale) />
84 <#assign end_d_day=dateUtil.getDate(enddate_DateObj, "dd" , locale) />
85 <#assign end_d_month=dateUtil.getDate(enddate_DateObj, "MMMM" , locale) />
86
87 <div class="col-dettaglio col-12 col-lg-4 offset-lg-1">
88 <div class="data-evento">
89 <div class="data-evento-detail">
90 <div class="data-evento-detail-firtcol">
91 <span class="gg">${start_d_day}</span>
92 <span class="mm">${start_d_month}</span>
93 <span class="yyyy">${start_d_year}</span>
94 <#--
95 <#if startDate != endDate>
96 <hr style="border:1px solid #002D6C">
97 <span class="gg">${end_d_day}</span>
98 <span class="mm">${end_d_month}</span>
99 <span class="yyyy">${end_d_year}</span>
100 </#if>
101 -->
102 </div>
103 <div class="data-evento-detail-secondcol align-self-center">
104 <span class="icon"></span>
105 <span class="event-start">${OraInizio.getData()}</span>
106 <span class="event-end">${OraFine.getData()}</span>
107 </div>
108 </div>
109 <div class="border-gray"></div>
110 <#if Luogo.getData()?has_content || Indirizzo.getData()?has_content>
111 <div class="calcola-tragitto">
112 <#if Luogo.getData()?has_content || Indirizzo.getData()?has_content>
113 <div class="icona">
114 <img src="/o/abilab-theme/images/pointer.svg" alt="">
115 </div>
116 <div class="indirizzo">
117 <#if Luogo.getData()?has_content>
118 <span class="loco">${Luogo.getData()}</span>
119 </#if>
120 <#if Indirizzo.getData()?has_content>
121 <span class="via">${Indirizzo.getData()}</span>
122 </#if>
123 </div>
124 </#if>
125 <#--<div class="link">
126 <a href="#" class="arrow">${calculate}</a>
127 </div>-->
128 </div>
129 </#if>
130 </div>
131 </div>
132 </div>
133 </div>
134 </div>
135 <div class="evento-content">
136 <div class="container row">
137 <div class="col-12 col-lg-7 evento-content-detail">
138 <div class="main-content">
139 <h3>${TestoOverviewTile.getData()}</h3>
140
141 <#-- Video Corporate -->
142 <#if video?? && video.getData()?has_content && video.getData() != "" >
143 <#assign videoCorporate = video.getData() >
144 <iframe class="video-corporate" src="${videoCorporate}" type=video/mp4>
145 </iframe>
146 </#if>
147
148 <#-- Testo Evento -->
149 <#if Testo.getData()?has_content>
150 ${Testo.getData()}
151 </#if>
152
153 <#-- Galleria -->
154 <#assign countGallery = 0 />
155 <#if immagine?? && immagine.getSiblings()?has_content>
156 <#list immagine.getSiblings() as cur_immagine>
157 <#if cur_immagine.getData()?? && cur_immagine.getData() !="">
158 <#assign countGallery = countGallery + 1 />
159 </#if>
160 </#list>
161 </#if>
162
163 <#if countGallery gt 0>
164 <div class="editoriale main evento-gallery">
165 <div class="swiper-with-thumbs swiper-with-thumbs-custom mb-0">
166 <div class="swiper-container gallery-top gallery-top-custom">
167 <div class="swiper-wrapper">
168 <#list immagine.getSiblings() as cur_immagine>
169 <#if cur_immagine.getData()?? && cur_immagine.getData() !="">
170 <div class="swiper-slide">
171 <div class="swiper-slide-img">
172 <img src="${cur_immagine.getData()}" />
173 </div>
174 </div>
175 </#if>
176 </#list>
177 </div>
178
179 <div class="swiper-navigation-wrapper">
180 <#if countGallery gt 1>
181 <div class="d-none d-lg-block desktop-navigation">
182 <div class="swiper-navigation">
183 <!-- If we need navigation buttons -->
184 <div class="swiper-prev" tabindex="0" role="button" aria-label="Previous slide"></div>
185 <div class="swiper-next" tabindex="0" role="button" aria-label="Next slide"></div>
186 </div>
187 </div>
188 <div class="swiper-bullets d-block d-lg-none"></div>
189 </#if>
190 </div>
191 </div>
192 <div class="swiper-container gallery-thumbs d-none">
193 <div class="swiper-wrapper">
194 <#list immagine.getSiblings() as cur_immagine>
195 <#if cur_immagine.getData()?? && cur_immagine.getData() !="">
196 <div class="swiper-slide" style="background-image:url(${cur_immagine.getData()})"></div>
197 </#if>
198 </#list>
199 </div>
200 </div>
201 </div>
202 </div>
203 </#if>
204
205 <#-- Atti dell'incontro -->
206 <#assign countDoc = 0 >
207 <#if DocumentiAllegati?? && DocumentiAllegati.getSiblings()?has_content >
208 <#list DocumentiAllegati.getSiblings() as cur_DocumentiAllegati >
209 <#if cur_DocumentiAllegati?? && cur_DocumentiAllegati.getData()?has_content && cur_DocumentiAllegati.getData() != "" && cur_DocumentiAllegati.getData()?length gt 0 >
210 <#assign countDoc = countDoc + 1 >
211 </#if>
212 </#list>
213 </#if>
214${countDoc?string}
215 <#if countDoc gt 0 >
216 <div class="documenti-evento">
217 <h2 class="underscore">${meet}</h2>
218 <#list DocumentiAllegati.getSiblings() as cur_DocumentiAllegati>
219 <#assign urlDoc = "" />
220 <#assign titoloDoc = "" />
221 <#assign descrizioneDoc = "" />
222
223 <#if cur_DocumentiAllegati?? && cur_DocumentiAllegati.getData()?has_content && cur_DocumentiAllegati.getData() != "" && cur_DocumentiAllegati.getData()?length gt 0 >
224 <#assign urlDoc = cur_DocumentiAllegati.getData() />
225 </#if>
226
227 <#if cur_DocumentiAllegati.TitoloDocumento.getData()?has_content && cur_DocumentiAllegati.TitoloDocumento.getData() != "" && cur_DocumentiAllegati.TitoloDocumento.getData()?length gt 0 >
228 <#assign titoloDoc = cur_DocumentiAllegati.TitoloDocumento.getData() />
229 </#if>
230
231 <#if cur_DocumentiAllegati.testoDoc.getData()?has_content && cur_DocumentiAllegati.testoDoc.getData() != "" && cur_DocumentiAllegati.testoDoc.getData()?length gt 0 >
232 <#assign descrizioneDoc = cur_DocumentiAllegati.testoDoc.getData() />
233 </#if>
234
235 <#if urlDoc?has_content>
236 <#if titoloDoc?has_content || descrizioneDoc?has_content>
237 <#if titoloDoc?has_content>
238 <a href="${urlDoc}" download>
239 ${titoloDoc}
240 </a>
241 ${descrizioneDoc}
242 <#else>
243 <a href="${urlDoc}" download>
244 ${descrizioneDoc}
245 </a>
246 </#if>
247 <#else>
248 <span>${urlDoc}</span>
249 </#if>
250 <#else>
251 <#if titoloDoc?has_content>
252 <b>${titoloDoc}</b>
253 </#if>
254
255 <#if descrizioneDoc?has_content>
256 ${descrizioneDoc}
257 </#if>
258 </#if>
259
260 <#if cur_DocumentiAllegati?? && (
261 (cur_DocumentiAllegati.getData()?has_content && cur_DocumentiAllegati.getData()?length gt 0) ||
262 (cur_DocumentiAllegati.TitoloDocumento.getData()?has_content && cur_DocumentiAllegati.TitoloDocumento.getData()?length gt 0) ||
263 (cur_DocumentiAllegati.testoDoc.getData()?has_content && cur_DocumentiAllegati.testoDoc.getData()?length gt 0)) >
264 <div class="border-bottom-gray"></div>
265 </#if>
266 </#list>
267 </div>
268 </#if>
269
270 <#-- Documenti in evidenza -->
271 <#assign countDocumentInEvidenza = 0 />
272 <#if docEvidenza?? && docEvidenza.getSiblings()?has_content>
273 <#list docEvidenza.getSiblings() as cur_documento>
274 <#if cur_documento.getData()?has_content && cur_documento.getData() != "" && cur_documento.getData()?length gt 0>
275 <#assign countDocumentInEvidenza = countDocumentInEvidenza + 1 />
276 </#if>
277 </#list>
278 </#if>
279
280 <#if countDocumentInEvidenza gt 0>
281 <div class="working-table margin-30 mb-5">
282 <div class="main pb-0">
283 <div class="container">
284 <div class="content-wrapper">
285 <div class="main-content mb-0">
286 <div class="report-documenti">
287 <h2 class="underscore">${documentsTitle}</h2>
288 <div class="report-documenti-wrapper row">
289
290 <#list docEvidenza.getSiblings() as cur_documento>
291 <#if cur_documento ?? && cur_documento.getData()?has_content && cur_documento.getData() != "">
292
293 <#assign assetEntryDocumento = assetEntryLocalService.getEntry(cur_documento.getData()?eval.className, cur_documento.getData()?eval.classPK?number) />
294
295 <#assign assetEntryDocumentoPrimKey = assetEntryDocumento.getClassPK() />
296 <#assign articleDocumento = journalArticleLocalService.getLatestArticle(assetEntryDocumentoPrimKey) />
297 <#assign docXml = saxReaderUtil.read(articleDocumento.getContentByLocale(locale)) />
298
299 <#assign title = articleDocumento.getTitle(locale) />
300 <#assign description = docXml.valueOf("//dynamic-element[@name='Descrizione']/dynamic-content/text()") />
301 <#assign date = docXml.valueOf("//dynamic-element[@name='Data']/dynamic-content/text()") />
302 <#assign date_DateObj = dateUtil.parseDate("yyyy-MM-dd", date?string, locale)>
303 <#assign d_fullDay = dateUtil.getDate(date_DateObj, "dd.MM.yyyy", locale) />
304 <#assign d_year = dateUtil.getDate(date_DateObj, "yyyy", locale) />
305
306 <#assign tipoContenuto = docXml.valueOf("//dynamic-element[@name='TipoContenuto']/dynamic-content/text()") />
307
308 <div class="col-lg-6 col-12">
309 <div class="singolo-report-documenti">
310 <div class="singolo-report-documenti-content">
311 <div class="singolo-report-documenti-head">
312 <#if tipoContenuto?has_content && tipoContenuto != "">
313 <div class="singolo-report-documenti-name">
314 ${tipoContenuto}
315 </div>
316 </#if>
317 <div class="singolo-report-documenti-calendar">
318 ${d_fullDay}
319 </div>
320 </div>
321 <h4 class="singolo-report-documenti-title">
322 ${title}
323 </h4>
324 <div class="singolo-report-documenti-descrizione">
325 <#if description?length gt 150>
326 ${description?replace('<[^>]+>','','r')?substring(0, 149)}...
327 <#else>
328 ${description}
329 </#if>
330 </div>
331 <div class="singolo-report-documenti-cta">
332 <#assign doc = docXml.valueOf("//dynamic-element[@name='Documento']/dynamic-content/text()") />
333 <#if doc?has_content && doc?length gt 0>
334 <#assign document = doc?eval />
335 <#assign dlFileEntryService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService') />
336 <#attempt>
337 <#assign file = dlFileEntryService.getFileEntryByUuidAndGroupId(document.uuid, document.groupId?number) />
338 <#assign assetEntry=assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry", file.fileEntryId) />
339 <#assign assetRenderer=assetEntry.assetRenderer />
340 <#assign docUrl=assetRenderer.getURLDownload(themeDisplay) />
341
342 <a href="${docUrl}" class="btn green download" title="${downloadTitle}" download >${downloadTitle}</a>
343 <#recover>
344 </#attempt>
345 </#if>
346 </div>
347 </div>
348 </div>
349 </div>
350 </#if>
351 </#list>
352 </div>
353 </div>
354 </div>
355 </div>
356 </div>
357 </div>
358 </div>
359 </#if>
360 </div>
361 </div>
362 <div class="col-12 col-lg-4 offset-lg-1 sidebar-content">
363 <#if LinkRegistrazione.getData()?has_content && LinkRegistrazione.getData() != "">
364 <a class="btn green arrow mt-1" href="${LinkRegistrazione.getData()}">
365 ${subscribe}
366 </a>
367
368 <#if agenda?? && agenda.getData()?has_content && agenda.getData() != "">
369 <a class="btn transparent blue download mt-1" href="${agenda.getData()}" download>
370 ${agendaEvent}
371 </a>
372 </#if>
373 <#else>
374 <#-- Video dell'incontro -->
375 <#if VideoIncontro?? && VideoIncontro.getData()?has_content && VideoIncontro.getData() != ''>
376 <#assign splitter = VideoIncontro.getData()?split("/") />
377 <#assign docGroupId = splitter[2]?number />
378
379 <#-- Controllo sul membro -->
380 <#assign userLocalService = serviceLocator.findService('com.liferay.portal.kernel.service.UserLocalService') />
381 <#assign findMember = userLocalService.hasGroupUser(docGroupId, user.getUserId()) />
382
383 <#if findGroup || findRole || findMember>
384 <a href="${VideoIncontro.getData()}" class="btn green download" download>
385 ${VideoIncontro.TitoloBottone.getData()}
386 </a>
387 <#else>
388 <a href="#" class="btn locked" data-toggle="modal" data-target="#login-form">
389 ${VideoIncontro.TitoloBottone.getData()}
390 </a>
391 </#if>
392 </#if>
393
394 <#-- Rapporto in evidenza dell'incontro -->
395 <#if RapportoEvidenza?? && RapportoEvidenza.getData()?has_content && RapportoEvidenza.getData() != ''>
396 <#assign splitter2 = RapportoEvidenza.getData()?split("/") />
397 <#assign docGroupId2 = splitter2[2]?number />
398
399 <#-- Controllo sul membro -->
400 <#assign userLocalService = serviceLocator.findService('com.liferay.portal.kernel.service.UserLocalService') />
401 <#assign findMember2 = userLocalService.hasGroupUser(docGroupId2, user.getUserId()) />
402
403 <#if findGroup || findRole || findMember2>
404 <a href="${RapportoEvidenza.getData()}" class="btn green download" download>
405 ${RapportoEvidenza.TitoloBottone1.getData()}
406 </a>
407 <#else>
408 <a href="#" class="btn locked" data-toggle="modal" data-target="#login-form">
409 ${RapportoEvidenza.TitoloBottone1.getData()}
410 </a>
411 </#if>
412 </#if>
413
414
415 <#-- Link minisito -->
416 <#assign countlinkMinisito = 0 />
417 <#if titoloLinkMinisito?? && titoloLinkMinisito.getData()?has_content && titoloLinkMinisito.getData() !="" >
418 <#if titoloLinkMinisito.getSiblings()?has_content>
419 <#list titoloLinkMinisito.getSiblings() as cur_linkMinisito>
420 <#if cur_linkMinisito.getData()?has_content && cur_linkMinisito.getData()?length gt 0>
421 <#assign countlinkMinisito = countlinkMinisito + 1 />
422 </#if>
423 </#list>
424 </#if>
425 </#if>
426
427 <#assign findMemberSite = false />
428 <#if countlinkMinisito gt 0>
429 <#if titoloLinkMinisito.getSiblings()?has_content >
430 <#list titoloLinkMinisito.getSiblings() as cur_linkMinisito>
431 <#assign groupSite = groupLocalService.fetchFriendlyURLGroup(themeDisplay.getCompanyId()?long, cur_linkMinisito.getData())/>
432 <#if groupSite?? && groupSite?has_content && groupSite != "">
433 <#assign userLocalService = serviceLocator.findService('com.liferay.portal.kernel.service.UserLocalService') />
434 <#assign findMemberSite = userLocalService.hasGroupUser(groupSite.getGroupId(), user.getUserId()) />
435 </#if>
436
437 <#assign titoloBottone = goMinisito />
438 <#if cur_linkMinisito.urlLinkMinisito.getData()?has_content && cur_linkMinisito.urlLinkMinisito.getData()?length gt 0>
439 <#assign titoloBottone = cur_linkMinisito.urlLinkMinisito.getData() />
440 </#if>
441
442 <#if findGroup || findRole || findMemberSite >
443 <#if cur_linkMinisito.getData()?has_content && cur_linkMinisito.getData()?length gt 0>
444 <a href="/web${cur_linkMinisito.getData()}" class="btn green arrow w-100">
445 ${titoloBottone}
446 </a>
447 </#if>
448 <#else>
449 <a href="#" class="btn locked w-100" data-toggle="modal" data-target="#login-form">
450 ${titoloBottone}
451 </a>
452 </#if>
453 </#list>
454 </#if>
455 </#if>
456 </#if>
457
458 <#-- Contenuti Correlati -->
459 <#assign countContenutiCorrelati = 0 />
460 <#if contenutiCorrelati?? && contenutiCorrelati.getSiblings()?has_content>
461 <#list contenutiCorrelati.getSiblings() as cur_contenutoCorrelato>
462 <#if cur_contenutoCorrelato?? && cur_contenutoCorrelato.getData()?has_content && cur_contenutoCorrelato.getData() != "">
463 <#assign countContenutiCorrelati = countContenutiCorrelati + 1 />
464 </#if>
465 </#list>
466 </#if>
467
468 <#if countContenutiCorrelati gt 0>
469 <div class="working-table bg-white mt-1">
470 <div class="main py-0">
471 <div class="container">
472 <div class="content-wrapper">
473 <div class="sidebar">
474 <div class="title">
475 ${newsRelated}
476 </div>
477 <div class="correlated-link">
478 <#list contenutiCorrelati.getSiblings() as cur_contenutoCorrelato>
479 <#if contenutiCorrelati?? && cur_contenutoCorrelato.getData()?has_content && cur_contenutoCorrelato.getData() != "" >
480 <a class="arrow" href="${cur_contenutoCorrelato.getData()}" >
481 ${cur_contenutoCorrelato.testoContenutoCorrelato.getData()}
482 </a>
483 </#if>
484 </#list>
485 </div>
486 </div>
487 </div>
488 </div>
489 </div>
490 </div>
491 </#if>
492 </div>
493 </div>
494 </div>
495 </div>
496</div>