An error occurred while processing the template.
The following has evaluated to null or missing: ==> cena [in template "20097#20123#DETTAGLIO-APPUNTAMENTO" at line 37, column 24] ---- 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: #assign dinnerCheck = cena.getData() [in template "20097#20123#DETTAGLIO-APPUNTAMENTO" at line 37, column 1] ----
1<#include "${templatesPath}/MACRO-DETAIL-PAGE" />
2
3<#assign userLocalService = serviceLocator.findService('com.liferay.portal.kernel.service.UserLocalService') />
4
5<#assign detailURL = aireWidgetTemplateTool.getDetailDisplayPageURL(assetEntry, serviceContext.getThemeDisplay().getDoAsUserId()) />
6<#assign downloadIcsURL = "/o/unindustria/ics/calendar?groupId=" + groupId + "&eventId=" + articleid + "&eventUrl=" + detailURL />
7<#assign customSvgPath = themeDisplay.getPathThemeImages() + "/assets/images/icons.svg" />
8
9<#assign isLoggedIn = false />
10<#if serviceContext.getThemeDisplay().isSignedIn()>
11 <#assign isLoggedIn = true />
12</#if>
13
14<#assign userId = serviceContext.getThemeDisplay().getUserId() />
15<#assign isSubscribed = aireWidgetTemplateTool.isSubscribedEvent(articleid, userId, themeDisplay) />
16<#assign idEventCreation = id.getData() />
17<#if viewForm??>
18 <#assign viewForm = viewForm.getData() />
19<#else>
20 <#assign viewForm = "false" />
21</#if>
22<#if formNotes??>
23 <#assign formNotes = formNotes.getData() />
24<#else>
25 <#assign formNotes = "" />
26</#if>
27<#if formCompany??>
28 <#assign formCompany = formCompany.getData() />
29<#else>
30 <#assign formCompany = "" />
31</#if>
32<#assign user = userLocalService.fetchUser(userId) />
33<#assign userFirstName = user.getFirstName() />
34<#assign userSurname = user.getLastName() />
35<#assign userEmail = user.getEmailAddress() />
36
37<#assign dinnerCheck = cena.getData() />
38<#assign publicPartCheck = parte_pubblica.getData() />
39<#assign privatePartCheck = parte_privata.getData() />
40<#assign streamingCheck = streaming.getData() />
41
42<#assign selfCheckboxVisibility = ""/>
43<#assign selfAutoFlagged = "false" />
44<#assign selfFormVisibility = "d-none"/>
45
46<#if !isLoggedIn>
47 <#assign selfCheckboxVisibility = "d-none"/>
48 <#assign selfAutoFlagged = "true" />
49 <#assign selfFormVisibility = ""/>
50</#if>
51
52<div class="webcontent-detail pt-0">
53 <div class="webcontent-detail__calendar-info">
54 <div class="container">
55 <div class="row">
56 <div class="col-12">
57 <div class="d-flex flex-column flex-md-row justify-content-md-between align-items-md-center">
58 <div>
59 <strong class="text-uppercase">${dateUtil.getDate(data.getData()?date("yyyy-MM-dd"), 'dd MMMM yyyy', locale)}</strong>
60 - ${languageUtil.get(locale, "aire.hour.from")} ${ora_inizio.getData()} ${languageUtil.get(locale, "aire.hour.to")} ${ora_fine.getData()}
61 </div>
62 <div class="d-flex align-items-center justify-content-between">
63 <div>
64 <button type="button" onclick="window.open('${downloadIcsURL}','_self')" target="_self" class="webcontent-detail__calendar d-flex align-items-center">
65 <svg class="ico-svg add">
66 <use xlink:href="${themeIconsPath}#calendar-alt-light"></use>
67 </svg>
68 <span class="add">${languageUtil.get(locale, "aire.mark.calendar")}</span>
69 </button>
70 </div>
71 <#if partecipazione?? && partecipazione.getData()?has_content>
72 <#if viewForm == "true">
73 <#if aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn>
74 <div class="ml-md-4">
75 <button type="button" class="cta-link cta-link--icon" data-toggle="modal" data-target="#login">
76 <span class="d-none d-lg-inline-block"><@liferay.language key="aire.signing" /></span>
77 <svg class="ico-svg">
78 <use xlink:href="${customSvgPath}#user-light"></use>
79 </svg>
80 </button>
81 </div>
82 <#elseif aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn && !isSubscribed>
83 <div class="ml-md-4">
84 <a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
85 </div>
86 <#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn && !isSubscribed>
87 <div class="ml-md-4">
88 <a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="btn-cta btn-cta--white"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
89 </div>
90 <#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn>
91 <div class="ml-md-4">
92 <a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="btn-cta btn-cta--white"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
93 </div>
94 </#if>
95 <#elseif link_iscriviti.getData()?has_content>
96 <#if aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn>
97 <div class="ml-md-4">
98 <button type="button" class="cta-link cta-link--icon" data-toggle="modal" data-target="#login">
99 <span class="d-none d-lg-inline-block"><@liferay.language key="aire.signing" /></span>
100 <svg class="ico-svg">
101 <use xlink:href="${customSvgPath}#user-light"></use>
102 </svg>
103 </button>
104 </div>
105 <#elseif aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn>
106 <div class="ml-md-4">
107 <a href="${link_iscriviti.getData()}" target="_blank" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
108 </div>
109 <#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData())>
110 <div class="ml-md-4">
111 <a href="${link_iscriviti.getData()}" target="_blank" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
112 </div>
113 </#if>
114 </#if>
115 </#if>
116 </div>
117 </div>
118 </div>
119 </div>
120 </div>
121 </div>
122 <div class="container">
123 <div class="row">
124 <nav class="col-md-4">
125 <div class="webcontent-detail__nav">
126 <ul>
127 <#if programma_titolo.getSiblings()[0].getData() != "">
128 <li><a href="#section-1" title="${languageUtil.get(locale, "aire.program")}">${languageUtil.get(locale, "aire.program")}</a></li>
129 </#if>
130 <#if logo_sponsor.getSiblings()[0].getData() != "">
131 <li><a href="#section-2" title="${languageUtil.get(locale, "aire.partner")}">${languageUtil.get(locale, "aire.partner")}</a></li>
132 </#if>
133 <#if documenti_allegati.getSiblings()[0].getData() != "" && ((aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn) || !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()))>
134 <li><a href="#section-3" title="${languageUtil.get(locale, "aire.section.documents")}">${languageUtil.get(locale, "aire.section.documents")}</a></li>
135 </#if>
136 </ul>
137 <div class="webcontent-detail__box">
138 <div class="webcontent-detail__box-title">${languageUtil.get(locale, "aire.information")}</div>
139 <div class="webcontent-detail__info d-flex">
140 <svg class="ico-svg add">
141 <use xlink:href="${themeIconsPath}#calendar-alt-light"></use>
142 </svg>
143 <div>
144 <div class="webcontent-detail__info-title">${languageUtil.get(locale, "aire.event.date")}</div>
145 <div>
146 <span class="text-uppercase">${dateUtil.getDate(data.getData()?date("yyyy-MM-dd"), 'dd MMMM yyyy', locale)}</span>
147 <br>
148 ${languageUtil.get(locale, "aire.hour.from")} ${ora_inizio.getData()} ${languageUtil.get(locale, "aire.hour.to")} ${ora_fine.getData()}
149 </div>
150 </div>
151 </div>
152 <div class="webcontent-detail__info d-flex">
153 <svg class="ico-svg add">
154 <use xlink:href="${themeIconsPath}#map-marker-alt-light"></use>
155 </svg>
156 <div>
157 <div class="webcontent-detail__info-title">${languageUtil.get(locale, "aire.location")}</div>
158 <div>${luogo.getData()}</div>
159 </div>
160 </div>
161 <#if categorieEvento?has_content>
162 <div class="webcontent-detail__info d-flex">
163 <svg class="ico-svg add">
164 <use xlink:href="${themeIconsPath}#info-light"></use>
165 </svg>
166 <div>
167 <div class="webcontent-detail__info-title">${languageUtil.get(locale, "aire.typology")}</div>
168 <#list categorieEvento as tipoEvento>
169 <div>${tipoEvento.getName()}</div>
170 </#list>
171 </div>
172 </div>
173 </#if>
174 </div>
175 <div class="webcontent-detail__box">
176 <div class="webcontent-detail__box-title">${languageUtil.get(locale, "aire.signing")}</div>
177 <div>
178 <button type="button" onclick="window.open('${downloadIcsURL}','_self')" target="_self" class="webcontent-detail__calendar d-flex align-items-center">
179 <svg class="ico-svg add">
180 <use xlink:href="${themeIconsPath}#calendar-alt-light"></use>
181 </svg>
182 <span class="add">${languageUtil.get(locale, "aire.mark.calendar")}</span>
183 </button>
184 <#if partecipazione?? && partecipazione.getData()?has_content>
185 <#if viewForm == "true">
186 <#if aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn>
187 <button type="button" class="cta-link cta-link--icon" data-toggle="modal" data-target="#login">
188 <span class="d-none d-lg-inline-block"><@liferay.language key="aire.signing" /></span>
189 <svg class="ico-svg">
190 <use xlink:href="${customSvgPath}#user-light"></use>
191 </svg>
192 </button>
193 <#elseif aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn && !isSubscribed>
194 <a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
195 <#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn && !isSubscribed>
196 <a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="btn-cta btn-cta--white"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
197 <#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn>
198 <a href="#subscribe-event" title="${languageUtil.get(locale, "aire.signing")}" class="btn-cta btn-cta--white"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
199 </#if>
200 <#elseif link_iscriviti.getData()?has_content>
201 <#if aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn>
202 <button type="button" class="cta-link cta-link--icon" data-toggle="modal" data-target="#login">
203 <span class="d-none d-lg-inline-block"><@liferay.language key="aire.signing" /></span>
204 <svg class="ico-svg">
205 <use xlink:href="${customSvgPath}#user-light"></use>
206 </svg>
207 </button>
208 <#elseif aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn>
209 <a href="${link_iscriviti.getData()}" target="_blank" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
210 <#elseif !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData())>
211 <a href="${link_iscriviti.getData()}" target="_blank" title="${languageUtil.get(locale, "aire.signing")}" class="cta-link"><span>${languageUtil.get(locale, "aire.signing")}</span></a>
212 </#if>
213 </#if>
214 </#if>
215 </div>
216 </div>
217 <#if partecipazione.getData() != "">
218 <div class="webcontent-detail__box">
219 <div class="webcontent-detail__box-title">${languageUtil.get(locale, "aire.participation")}</div>
220 <div>
221 ${partecipazione.getData()}
222 </div>
223 </div>
224 </#if>
225 <#if tags?has_content>
226 <div class="webcontent-detail__box">
227 <div class="webcontent-detail__box-title">${languageUtil.get(locale, "aire.section.tag")}</div>
228 <div>
229 <#list tags as tag>
230 <a href="/ricerca?tag=${tag.getTagId()}" title="${tag.getName()}" class="webcontent-detail__tag">#${tag.getName()}</a>
231 </#list>
232 </div>
233 </div>
234 </#if>
235 </div>
236 </nav>
237 <div class="col-md-8">
238 <div class="webcontent-detail__main">
239 <div class="d-flex justify-content-between">
240 <div class="d-flex">
241 <div class="webcontent-detail__category">
242 <#list categorieTema as categoria>
243 <span>${categoria.getName()?upper_case}</span>
244 </#list>
245 </div>
246 <#if categorieGruppo?has_content>
247 <div class="webcontent-detail__category_group"><#list categorieGruppo as categoriaG><span>${categoriaG.getName()?upper_case}</span></#list></div>
248 </#if>
249 </div>
250 <div class="bookmark position-relative">
251 <@bookmarkCheck className=className classPK=classPK structureId=structureId />
252 </div>
253 </div>
254 <#if video?? && video.getSiblings()[0].getData() != "">
255 <section id="section-video" class="webcontent-detail__img">
256 <#list video.getSiblings() as cur_video>
257 <#if cur_video.getData()?? && cur_video.getData() != "">
258 <div class="article-detail__video iframe-responsive">
259 <iframe src="${cur_video.getData()}" width="640" height="362" frameborder="0" allow="autoplay; fullscreen" allowfullscreen="allowfullscreen" loading="lazy">..</iframe>
260 </div>
261 </#if>
262 </#list>
263 </section>
264 <#elseif immagine.getData()?has_content>
265 <img src="${immagine.getData()}" alt="${titolo.getData()}" class="webcontent-detail__img" />
266 </#if>
267
268 <#if descrizione.getData()?has_content>
269 ${descrizione.getData()}
270 </#if>
271 <#if programma_titolo.getSiblings()[0].getData() != "">
272 <section id="section-1" class="webcontent-detail__section">
273 <h2 class="webcontent-detail__section-title">${languageUtil.get(locale, "aire.program")}</h2>
274 <#if programma_titolo.getSiblings()?has_content>
275 <#list programma_titolo.getSiblings() as cur_programma_titolo>
276 <p>
277 <strong>${cur_programma_titolo.programma_ora.getData()} - ${cur_programma_titolo.getData()}</strong>
278 </p>
279 ${cur_programma_titolo.programma_descrizione.getData()}
280 </#list>
281 </#if>
282 </section>
283 </#if>
284 <#if logo_sponsor.getSiblings()[0].getData() != "">
285 <section id="section-2" class="webcontent-detail__section">
286 <h2 class="webcontent-detail__section-title">${languageUtil.get(locale, "aire.partner")}</h2>
287 <div class="row">
288 <#list logo_sponsor.getSiblings() as logo>
289 <div class="col-md-3 mb-2">
290 <img alt="${logo.getAttribute('alt')}" src="${logo.getData()}" />
291 </div>
292 </#list>
293 </div>
294 </section>
295 </#if>
296 <#if documenti_allegati.getSiblings()[0].getData() != "" && ((aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && isLoggedIn) || !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()))>
297 <section id="section-3" class="webcontent-detail__section">
298 <h2 class="webcontent-detail__section-title">${languageUtil.get(locale, "aire.section.documents")}</h2>
299 <#list documenti_allegati.getSiblings() as allegato>
300 <#if allegato.getData() != "">
301 <@mostraAllegato allegato />
302 <#if allegato.titolo_doc.getData() != "">
303 <#assign titoloAllegato = allegato.titolo_doc.getData()>
304 <#else>
305 <#assign titoloAllegato = allegatoTitle>
306 </#if>
307 <a href="${fileEntryDownloadURL}" title="${titoloAllegato}" class="webcontent-detail__attachment d-flex align-items-end w-100">
308 <svg class="ico-svg">
309 <use xlink:href="${themeIconsPath}#arrow-to-bottom-light"></use>
310 </svg>
311 <span>${titoloAllegato}</span>
312 </a>
313 </#if>
314 </#list>
315 </section>
316 </#if>
317 </div>
318 </div>
319 </div>
320 </div>
321</div>
322
323<#assign formVisible = "false" />
324<#if partecipazione?? && partecipazione.getData()?has_content && viewForm == "true">
325 <#if isLoggedIn && !isSubscribed>
326 <#assign formVisible = "true" />
327 <#elseif !isLoggedIn && !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData())>
328 <#assign formVisible = "true" />
329 </#if>
330</#if>
331
332<#if formVisible == "true">
333 <div class="container">
334 <div class="row">
335 <div class="col-12">
336 <form action="javascript:void(0);" method="post" id="subscribe-event" class="form" aria-label="<@liferay.language key='aire.subscribe.event' />">
337 <div class="row">
338 <div class="col-12">
339 <h2 style="margin-bottom: 10px;"><@liferay.language key="aire.subscribe.event" /></h2>
340 </div>
341 </div>
342 <#if isLoggedIn>
343 <div class="row" id="detail-appointment-text">
344 <div class="col-12">
345 <h5 style="margin-bottom: 20px;font-weight: 400;"><@liferay.language key="aire.text.detail.appointment" /></h5>
346 </div>
347 </div>
348 </#if>
349 <div class="row">
350 <div class="col-12">
351 <div class="d-flex flex-wrap">
352 <div class="mr-5" style="min-width: 150px; max-width: 500px;">
353 <fieldset>
354
355 <div class="row" id="form-event-subscribe-self">
356
357 <div class="col-12 ${selfCheckboxVisibility}">
358 <div class="d-flex align-items-center">
359 <div class="d-flex py-2">
360 <label class="form__label m-0" for="subscribeSelf" style="width: 220px;"><@liferay.language key="aire.subscribe.self" /></label>
361 </div>
362 <div class="form__group d-flex flex-column align-content-center mr-5">
363 <input type="checkbox" name="subscribeSelf" id="subscribeSelf" class="form__input-text align-self-center checkbox-change" value="${selfAutoFlagged}"/>
364 </div>
365 </div>
366 </div>
367
368 <div class="col-12">
369 <div class="form__group subscribe-self mt-3 ${selfFormVisibility}">
370 <label class="form__label" for="nameSelf" style="width: 200px;">
371 <@liferay.language key="aire.name" />
372 <span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span>
373 </label>
374 <#if isLoggedIn>
375 <input type="text" name="nameSelf" id="nameSelf" class="form__input-text w-100 required" readonly value="${userFirstName}" style="min-width: 100px; max-width: 500px;background-color: rgba(18,80,149,.1);border: 0px;"/>
376 <#else>
377 <input type="text" name="nameSelf" id="nameSelf" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/>
378 </#if>
379 </div>
380 </div>
381 <div class="col-12">
382 <div class="form__group subscribe-self ${selfFormVisibility}">
383 <label class="form__label" for="surnameSelf" style="width: 200px;">
384 <@liferay.language key="aire.surname" />
385 <span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span>
386 </label>
387 <#if isLoggedIn>
388 <input type="text" name="surnameSelf" id="surnameSelf" class="form__input-text w-100 required" readonly value="${userSurname}" style="min-width: 100px; max-width: 500px;background-color: rgba(18,80,149,.1);border: 0px;"/>
389 <#else>
390 <input type="text" name="surnameSelf" id="surnameSelf" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/>
391 </#if>
392 </div>
393 </div>
394 <div class="col-12">
395 <div class="form__group subscribe-self ${selfFormVisibility}">
396 <label class="form__label" for="emailSelf" style="width: 200px;">
397 <@liferay.language key="aire.email" />
398 <span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span>
399 </label>
400 <#if isLoggedIn>
401 <input type="text" name="emailSelf" id="emailSelf" class="form__input-text w-100 required" readonly value="${userEmail}" style="min-width: 100px; max-width: 500px;background-color: rgba(18,80,149,.1);border: 0px;"/>
402 <#else>
403 <input type="text" name="emailSelf" id="emailSelf" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/>
404 </#if>
405 </div>
406 </div>
407 <#if formCompany == "true">
408 <div class="col-12">
409 <div class="form__group ${selfFormVisibility} subscribe-self">
410 <label class="form__label" for="companySelf" style="width: 200px;"><@liferay.language key="aire.company" /></label>
411 <textarea type="text" name="companySelf" id="companySelf" class="form__input-text w-100" style="min-width: 100px; max-width: 500px;"></textarea>
412 </div>
413 </div>
414 </#if>
415 <#if formNotes == "true">
416 <div class="col-12">
417 <div class="form__group ${selfFormVisibility} subscribe-self">
418 <label class="form__label" for="notesSelf" style="width: 200px;"><@liferay.language key="aire.notes" /></label>
419 <textarea type="text" name="notesSelf" id="notesSelf" class="form__input-text w-100" style="min-width: 100px; max-width: 500px;"></textarea>
420 </div>
421 </div>
422 </#if>
423
424 <#if dinnerCheck == "true">
425 <div class="col-12">
426 <div class="subscribe-self ${selfFormVisibility}">
427 <div class="d-flex align-items-center">
428 <div class="d-flex py-2">
429 <label class="form__label m-0" for="dinnerSelf" style="width: 220px;"><@liferay.language key="aire.dinner" /></label>
430 </div>
431 <div class="form__group d-flex flex-column align-content-center">
432 <input type="checkbox" name="dinnerSelf" id="dinnerSelf" class="form__input-text align-self-center checkbox-change" value="false"/>
433 </div>
434 </div>
435 </div>
436 </div>
437 </#if>
438
439 <#if streamingCheck == "true">
440 <div class="col-12">
441 <div class="subscribe-self ${selfFormVisibility}">
442 <div class="d-flex align-items-center">
443 <div class="d-flex py-2">
444 <label class="form__label m-0" for="streamingSelf" style="width: 220px;"><@liferay.language key="aire.remote" /></label>
445 </div>
446 <div class="form__group d-flex flex-column align-content-center">
447 <input type="checkbox" name="streamingSelf" id="streamingSelf" class="form__input-text align-self-center checkbox-change" value="false"/>
448 </div>
449 </div>
450 </div>
451 </div>
452 </#if>
453
454 <#if publicPartCheck == "true">
455 <div class="col-12">
456 <div class="subscribe-self ${selfFormVisibility}">
457 <div class="d-flex align-items-center">
458 <div class="d-flex py-2">
459 <label class="form__label m-0" for="publicPartSelf" style="width: 220px;"><@liferay.language key="aire.public.part" /></label>
460 </div>
461 <div class="form__group d-flex flex-column align-content-center mr-5">
462 <input type="checkbox" name="publicPartSelf" id="publicPartSelf" class="form__input-text align-self-center checkbox-change" value="false"/>
463 </div>
464 </div>
465 </div>
466 </div>
467 </#if>
468
469 <#if privatePartCheck == "true">
470 <div class="col-12">
471 <div class="subscribe-self ${selfFormVisibility}">
472 <div class="d-flex align-items-center">
473 <div class="d-flex py-2">
474 <label class="form__label m-0" for="privatePartSelf" style="width: 220px;"><@liferay.language key="aire.private.part" /></label>
475 </div>
476 <div class="form__group d-flex flex-column align-content-center mr-5">
477 <input type="checkbox" name="privatePartSelf" id="privatePartSelf" class="form__input-text align-self-center checkbox-change" value="false"/>
478 </div>
479 </div>
480 </div>
481 </div>
482 </#if>
483 <#if !aireWidgetTemplateTool.isPrivateAppointment(partecipazione.getData()) && !isLoggedIn>
484 <div class="col-12">
485 <@liferay_captcha["captcha"]/>
486 </div>
487 </#if>
488 </div>
489
490 </fieldset>
491 </div>
492 <#if isLoggedIn>
493 <div class="mr-5" style="min-width: 150px; max-width: 500px;">
494
495 <fieldset>
496 <div class="row" id="form-event-subscribe-other">
497
498 <div class="col-12">
499 <div class="d-flex align-items-center">
500 <div class="d-flex py-2">
501 <label class="form__label m-0" for="subscribeOther" style="width: 220px;"><@liferay.language key="aire.subscribe.other" /></label>
502 </div>
503 <div class="form__group d-flex flex-column align-content-center mr-5">
504 <input type="checkbox" name="subscribeOther" id="subscribeOther" class="form__input-text align-self-center checkbox-change" value="false"/>
505 </div>
506 </div>
507 </div>
508 <div class="col-12">
509 <div class="form__group subscribe-other d-none mt-3">
510 <label class="form__label" for="nameOther" style="width: 200px;">
511 <@liferay.language key="aire.name" />
512 <span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span>
513 </label>
514 <input type="text" name="nameOther" id="nameOther" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/>
515 </div>
516 </div>
517 <div class="col-12">
518 <div class="form__group subscribe-other d-none">
519 <label class="form__label" for="surnameOther" style="width: 200px;">
520 <@liferay.language key="aire.surname" />
521 <span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span>
522 </label>
523 <input type="text" name="surnameOther" id="surnameOther" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/>
524 </div>
525 </div>
526 <div class="col-12">
527 <div class="form__group subscribe-other d-none">
528 <label class="form__label" for="emailOther" style="width: 200px;">
529 <@liferay.language key="aire.email" />
530 <span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span>
531 </label>
532 <input type="text" name="emailOther" id="emailOther" class="form__input-text w-100 required" style="min-width: 100px; max-width: 500px;"/>
533 </div>
534 </div>
535 <#if formCompany == "true">
536 <div class="col-12">
537 <div class="form__group subscribe-other d-none">
538 <label class="form__label" for="companyOther" style="width: 200px;"><@liferay.language key="aire.company" /></label>
539 <textarea type="text" name="companyOther" id="companyOther" class="form__input-text w-100" style="min-width: 100px; max-width: 500px;"></textarea>
540 </div>
541 </div>
542 </#if>
543 <#if formNotes == "true">
544 <div class="col-12">
545 <div class="form__group subscribe-other d-none">
546 <label class="form__label" for="notesOther" style="width: 200px;"><@liferay.language key="aire.notes" /></label>
547 <textarea type="text" name="notesOther" id="notesOther" class="form__input-text w-100" style="min-width: 100px; max-width: 500px;"></textarea>
548 </div>
549 </div>
550 </#if>
551
552 <#if dinnerCheck == "true">
553 <div class="col-12">
554 <div class="subscribe-other d-none">
555 <div class="d-flex align-items-center">
556 <div class="d-flex py-2">
557 <label class="form__label m-0" for="dinnerOther" style="width: 220px;"><@liferay.language key="aire.dinner" /></label>
558 </div>
559 <div class="form__group d-flex flex-column align-content-center">
560 <input type="checkbox" name="dinnerOther" id="dinnerOther" class="form__input-text align-self-center checkbox-change" value="false"/>
561 </div>
562 </div>
563 </div>
564 </div>
565 </#if>
566
567 <#if streamingCheck == "true">
568 <div class="col-12">
569 <div class="subscribe-other d-none align-items-center">
570 <div class="d-flex align-items-center">
571 <div class="d-flex py-2">
572 <label class="form__label m-0" for="streamingOther" style="width: 220px;"><@liferay.language key="aire.remote" /></label>
573 </div>
574 <div class="form__group d-flex flex-column align-content-center">
575 <input type="checkbox" name="streamingOther" id="streamingOther" class="form__input-text align-self-center checkbox-change" value="false"/>
576 </div>
577 </div>
578 </div>
579 </div>
580 </#if>
581
582 <#if publicPartCheck == "true">
583 <div class="col-12">
584 <div class="subscribe-other d-none">
585 <div class="d-flex align-items-center">
586 <div class="d-flex py-2">
587 <label class="form__label m-0" for="publicPartOther" style="width: 220px;"><@liferay.language key="aire.public.part" /></label>
588 </div>
589 <div class="form__group d-flex flex-column align-content-center mr-5">
590 <input type="checkbox" name="publicPartOther" id="publicPartOther" class="form__input-text align-self-center checkbox-change" value="false"/>
591 </div>
592 </div>
593 </div>
594 </div>
595 </#if>
596
597 <#if privatePartCheck == "true">
598 <div class="col-12">
599 <div class="subscribe-other d-none">
600 <div class="d-flex align-items-center">
601 <div class="d-flex py-2">
602 <label class="form__label m-0" for="privatePartOther" style="width: 220px;"><@liferay.language key="aire.private.part" /></label>
603 </div>
604 <div class="form__group d-flex flex-column align-content-center mr-5">
605 <input type="checkbox" name="privatePartOther" id="privatePartOther" class="form__input-text align-self-center checkbox-change" value="false"/>
606 </div>
607 </div>
608 </div>
609 </div>
610 </#if>
611 </div>
612 </fieldset>
613 </div>
614 </#if>
615 <div id="privacy-element" class="col-12 pl-0 ${selfFormVisibility}">
616 <div class="">
617 <div class="d-flex align-items-center">
618 <div class="form__group d-flex flex-column align-content-center mr-3">
619 <input type="checkbox" name="privacy" id="privacy" class="form__input-text align-self-center" value="false"/>
620 </div>
621 <div class="d-flex py-2">
622 <label class="form__label m-0" for="privacy"><i><@liferay.language key='aire.privacy.condition' /></i>
623 <span class="reference-mark text-warning" id="fehs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-asterisk" focusable="false"><use href="https://aire-dev.ariadnedev.it/o/unindustria-theme/images/clay/icons.svg#asterisk"></use></svg></span>
624 </label>
625
626 </div>
627 </div>
628 </div>
629 </div>
630 </div>
631 </div>
632 </div>
633 <div class="row">
634 <div class="col-12">
635 <div class="form__group" id="submit-form-event">
636 <input id="submitInput" type="submit" value="<@liferay.language key='aire.signing' />" aria-label="<@liferay.language key='aire.signing'/>" title="<@liferay.language key='aire.signing' />" class="form__submit cta-link" style="margin-bottom: 20px;margin-top: 10px;padding: 0 10px"/>
637 </div>
638 </div>
639 </div>
640 <div class="row">
641 <div class="col-12">
642 <span class="d-none" id="subscription-required" style="color: red;"><@liferay.language key="aire.subscribe.event.required" /></span>
643 <span class="d-none" id="subscription-successful"><@liferay.language key="aire.subscribe.event.success" /></span>
644 <span class="d-none" id="subscription-error"><@liferay.language key="aire.subscribe.event.error" /></span>
645 </div>
646 </div>
647 </form>
648 </div>
649 </div>
650 </div>
651</#if>
652
653<#if isSubscribed>
654 <div class="container">
655 <div class="row">
656 <div class="col-12">
657 <div class="row">
658 <div class="col-12">
659 <h4 style="margin-bottom: 10px;"><@liferay.language key="aire.appointment.already.subscribed" /></h4>
660 </div>
661 </div>
662 </div>
663 </div>
664 </div>
665</#if>
666
667<div>
668 <#if id?? && id.getData()?has_content>
669 <input type="hidden" id="field-id" value="${id.getData()}">
670 </#if>
671 <#if partecipazione?? && partecipazione.getData()?has_content>
672 <input type="hidden" id="field-hidden-partecipazione" value="${partecipazione.getData()}">
673 </#if>
674 <#if cena?? && cena.getData()?has_content>
675 <input type="hidden" id="field-hidden-cena" value="${cena.getData()}">
676 </#if>
677 <#if presenza?? && presenza.getData()?has_content>
678 <input type="hidden" id="field-hidden-presenza" value="${presenza.getData()}">
679 </#if>
680 <#if streaming?? && streaming.getData()?has_content>
681 <input type="hidden" id="field-hidden-streaming" value="${streaming.getData()}">
682 </#if>
683 <#if parte_pubblica?? && parte_pubblica.getData()?has_content>
684 <input type="hidden" id="field-hidden-parte-pubblica" value="${parte_pubblica.getData()}">
685 </#if>
686 <#if parte_privata?? && parte_privata.getData()?has_content>
687 <input type="hidden" id="field-hidden-parte-privata" value="${parte_privata.getData()}">
688 </#if>
689</div>
690
691<#include "${templatesPath}/A-CHI-RIVOLGERSI" />
692
693<#assign isLoggedIn = isLoggedIn?string('true', 'false') />
694
695<script>
696
697 $(document).ready(function() {
698 $("#subscribeOther").click(function() {
699
700 if ($(this).is(":checked") || $("#subscribeSelf").is(":checked")) {
701 document.getElementById("privacy-element").classList.remove('d-none');
702 document.getElementById("privacy-element").classList.remove('d-block');
703 document.getElementById("privacy-element").classList.add('d-block');
704 } else {
705 document.getElementById("privacy-element").classList.remove('d-none');
706 document.getElementById("privacy-element").classList.remove('d-block');
707 document.getElementById("privacy-element").classList.add('d-none');
708 }
709 });
710
711 $("#subscribeSelf").click(function() {
712 if ($(this).is(":checked") || $("#subscribeOther").is(":checked")) {
713 document.getElementById("privacy-element").classList.remove('d-none');
714 document.getElementById("privacy-element").classList.remove('d-block');
715 document.getElementById("privacy-element").classList.add('d-block');
716 } else {
717 document.getElementById("privacy-element").classList.remove('d-none');
718 document.getElementById("privacy-element").classList.remove('d-block');
719 document.getElementById("privacy-element").classList.add('d-none');
720 }
721 });
722 });
723
724 $(".checkbox-change").on('change', function() {
725 $(this).attr('value', $(this).is(':checked') ? 'true' : 'false');
726 });
727
728 function setupSubscriptionHandler(checkboxId, containerClass) {
729
730 let subscribeCheckbox = document.getElementById(checkboxId);
731 let dependentContainers = document.querySelectorAll("." + containerClass);
732 let dependentFields = document.querySelectorAll("." + containerClass + " > input");
733
734 if (!subscribeCheckbox) {
735 return;
736 }
737
738 subscribeCheckbox.addEventListener('change', function () {
739 let isChecked = subscribeCheckbox.checked;
740
741 dependentContainers.forEach(container => {
742 if (isChecked) {
743 container.classList.remove('d-none');
744 container.classList.add('d-block');
745 } else {
746 container.classList.remove('d-block');
747 container.classList.add('d-none');
748 }
749 });
750
751 dependentFields.forEach(field => {
752 if (isChecked) {
753 field.setAttribute('required', 'required');
754 field.classList.add('required');
755 } else {
756 field.removeAttribute('required');
757 field.classList.remove('required');
758 }
759 });
760 });
761 }
762
763 setupSubscriptionHandler('subscribeSelf', 'subscribe-self');
764 setupSubscriptionHandler('subscribeOther', 'subscribe-other');
765
766 $(document).on("click", "#submitInput", function(e){
767 e.preventDefault();
768
769 function gatherValues(fields, permission) {
770 if (!permission) {
771 return "";
772 }
773
774 let values = {};
775 fields.forEach(function(id) {
776 let element = $("#" + id);
777 if (element.length) {
778 values[id] = element.val();
779 }
780 });
781 return values;
782 }
783
784 function generateUrl(values, suffix) {
785
786 let captchaInput = ($("[id$='captchaText']").length)? $("[id$='captchaText']").val() : "";
787
788 return "/o/unindustria/form/event/subscribe?eventId=" + "${articleid}"
789 + "&userId=" + ${userId}
790 + "&userName=" + values["name" + suffix]
791 + "&userSurname=" + values["surname" + suffix]
792 + "&userEmail=" + values["email" + suffix]
793 + "&dinner=" + values["dinner" + suffix]
794 + "&userNotes=" + values["notes" + suffix]
795 + "&company=" + values["company" + suffix]
796 + "&captchaInput=" + captchaInput
797 + "&eventIdCreation=" + "${idEventCreation}"
798 + "&publicPart=" + values["publicPart" + suffix]
799 + "&privatePart=" + values["privatePart" + suffix]
800 + "&streaming=" + values["streaming" + suffix]
801 + "&isLoggedIn=" + "${isLoggedIn}";
802 }
803
804 let valuesSelf = gatherValues([
805 "notesSelf", "companySelf", "nameSelf", "surnameSelf", "emailSelf",
806 "dinnerSelf", "streamingSelf", "publicPartSelf", "privatePartSelf"
807 ], $('#subscribeSelf').val()=='true');
808
809 let valuesOther = gatherValues([
810 "notesOther", "companyOther", "nameOther", "surnameOther", "emailOther",
811 "dinnerOther", "streamingOther", "publicPartOther", "privatePartOther"
812 ], $('#subscribeOther').val()=='true');
813
814 let validateEmail = (email) => {
815 return String(email)
816 .toLowerCase()
817 .trim()
818 .match(
819 /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
820 );
821 };
822
823 let isSelfInputValid = (valuesSelf.nameSelf?.trim().length > 0 && valuesSelf.surnameSelf?.trim().length > 0 && validateEmail(valuesSelf.emailSelf?.trim()) && $("#privacy").is(":checked"));
824 let isOtherInputValid = (valuesOther.nameOther?.trim().length > 0 && valuesOther.surnameOther?.trim().length > 0 && validateEmail(valuesOther.emailOther?.trim()) && $("#privacy").is(":checked"));
825
826 if ((!isSelfInputValid && !isOtherInputValid) || (isSelfInputValid && !isOtherInputValid && $("#subscribeOther").is(":checked")) || (isOtherInputValid && !isSelfInputValid && $("#subscribeSelf").is(":checked"))) {
827
828 $("#subscription-required").removeClass("d-none");
829 $("#submitInput")
830 .removeAttr("disabled")
831 .css({
832 "background-color": "",
833 "color": "",
834 "opacity": ""
835 });
836 return;
837 }
838
839 $("#subscription-required").addClass("d-none");
840 $("#submitInput")
841 .attr("disabled", true)
842 .css({
843 "background-color": "dimgrey",
844 "color": "linen",
845 "opacity": "1"
846 });
847
848 function subscribe(urlSubscribe, callback) {
849 $.ajax({
850 type: "GET",
851 url: urlSubscribe,
852 dataType: 'json',
853 success: function (data) {
854 if (data.results == "ok") {
855 $("#subscription-successful").removeClass("d-none");
856 $("#subscription-error").addClass("d-none");
857
858 $("#form-event-subscribe-self").hide();
859 $("#form-event-subscribe-other").hide();
860 $("#submit-form-event").hide();
861 $("#privacy-element").removeClass("d-block");
862 $("#privacy-element").addClass("d-none");
863 $("#detail-appointment-text").addClass("d-none");
864 } else {
865 $("#subscription-error").removeClass("d-none");
866 $("#submitInput")
867 .removeAttr("disabled")
868 .css({
869 "background-color": "",
870 "color": "",
871 "opacity": ""
872 });
873 }
874 },
875 error: function (xhr, ajaxOptions, thrownError) {
876 console.log("error");
877 },
878 complete: function () {
879 if (callback) {
880 callback();
881 }
882 }
883 });
884 }
885
886 if (isSelfInputValid) {
887 // First subscribe call with callback to handle the second subscribe
888 subscribe(generateUrl(valuesSelf, "Self"), function() {
889 if (isOtherInputValid) {
890 subscribe(generateUrl(valuesOther, "Other"), null);
891 }
892 });
893 } else if (isOtherInputValid) {
894 // Handle the case where only the second input is valid
895 subscribe(generateUrl(valuesOther, "Other"), null);
896 }
897 });
898
899</script>