Dettaglio Evento
Breadcrumb
Asset Publisher
An error occurred while processing the template.
Java method "com.liferay.portal.kernel.util.DateUtil_IW.parseDate(String, String, Locale)" threw an exception when invoked on com.liferay.portal.kernel.util.DateUtil_IW object "com.liferay.portal.kernel.util.DateUtil_IW@272e8f2e"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign Data_DateObj = dateUtil.parse... [in template "20097#20123#41366" at line 311, column 13] ----
1<#--Evento Template -->
2<#assign logfactory = staticUtil["com.liferay.portal.kernel.log.LogFactoryUtil"] />
3<#assign log = logfactory.getLog("FreemarkerLog") />
4
5<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
6<#assign journalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService") />
7<#assign journalArticleId = .vars['reserved-article-id'].data />
8<#assign articleResourcePrimaryKey = journalArticleResourceLocalService.getArticleResourcePrimKey(themeDisplay.getScopeGroupId(), journalArticleId) />
9<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", articleResourcePrimaryKey) />
10<#assign escapeUtil = serviceLocator.findService("com.liferay.portal.kernel.util.HtmlUtil")/>
11<#assign categories = assetEntry.getCategories() />
12<#assign dlFileEntryService = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService') />
13
14<#assign publish_date = languageUtil.get(locale, "agora-publish-date") />
15<#assign share = languageUtil.get(locale, "agora-share") />
16<#assign arg = languageUtil.get(locale, "agora-arguments") />
17<#assign index = languageUtil.get(locale, "agora-index") />
18<#assign description_title = languageUtil.get(locale, "agora-description") />
19<#assign documents_title = languageUtil.get(locale, "agora-documents") />
20<#assign links_title = languageUtil.get(locale, "agora-links") />
21<#assign others_title = languageUtil.get(locale, "agora-others-info") />
22<#assign go = languageUtil.get(locale, "agora-go") />
23<#assign back = languageUtil.get(locale, "agora-back") />
24<#assign close = languageUtil.get(locale, "agora-close") />
25<#assign addCalendar = languageUtil.get(locale, "agora-add-calendar") />
26<#assign description_event = languageUtil.get(locale, "agora-event-description") />
27<#assign from = languageUtil.get(locale, "agora-date-from") />
28<#assign to = languageUtil.get(locale, "agora-date-to") />
29<#assign hour = languageUtil.get(locale, "agora-hour") />
30
31
32
33<#assign title = .vars['reserved-article-title'].data />
34<#assign data_pubblicazione = .vars['reserved-article-display-date'].data>
35
36<#-- ${log.info("title: " + title)} -->
37
38<#assign urlBanner = ""/>
39<#assign NumeroBannerNews = 0/>
40<#assign ariaLabelBanner = ""/>
41<#if (Banner.getData())?? && Banner.getData() != "">
42 <#assign altBanner = Banner.getAttribute("alt")/>
43 <#assign titleBanner = Banner.getAttribute("title")/>
44 <#assign urlBanner = Banner.getData()/>
45 <#assign ariaLabelBanner = "Immagine news " + titleBanner/>
46</#if>
47
48<#assign numeroDescrizioni = 0 />
49<#assign descrizione = "" />
50<#if (Descrizione.getData())?? >
51 <#assign descrizione = Descrizione.getData()/>
52 <#assign numeroDescrizioni = numeroDescrizioni + 1 />
53</#if>
54
55
56<#assign numeroDocumenti = 0/>
57<#if Documenti.getSiblings()?has_content>
58 <#list Documenti.getSiblings() as documento>
59 <#if documento?? && documento.getData()?? && documento.getData() != "" && documento.getData()?length gt 0>
60 <#assign numeroDocumenti = numeroDocumenti + 1/>
61 </#if>
62 </#list>
63</#if>
64
65
66<#assign numeroCategorie = 0 />
67<#list categories as category>
68 <#if category?? && category?has_content>
69 <#assign numeroCategorie = numeroCategorie + 1/>
70 </#if>
71</#list>
72
73<#assign numeroUlterioriInformazioni = 0/>
74<#assign ulterioriInformazioni = ""/>
75<#if (UlterioriInformazioni.getData())??>
76 <#if UlterioriInformazioni.getData() != "">
77 <#assign ulterioriInformazioni = UlterioriInformazioni.getData()/>
78 <#assign numeroUlterioriInformazioni = numeroUlterioriInformazioni + 1 />
79 </#if>
80</#if>
81
82<#assign numeroContenutiTotale = numeroDescrizioni + numeroDocumenti + numeroUlterioriInformazioni/>
83
84<#if (DataInizioEvento.getData())?? && DataInizioEvento.getData() != "">
85 <#assign date_format="dd MMMM yyyy"/>
86 <#assign data_inizio_evento = DataInizioEvento.getData() />
87 <#if data_inizio_evento != "">
88 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", data_inizio_evento?string, locale)>
89 <#assign data_inizio_evento = dateUtil.getDate(Data_DateObj, date_format, locale)?lower_case />
90 </#if>
91</#if>
92
93
94<#if (DataFineEvento.getData())?? && DataFineEvento.getData() != "">
95 <#assign date_format="dd MMMM yyyy"/>
96 <#assign data_fine_evento = DataFineEvento.getData() />
97 <#if data_fine_evento != "">
98 <#assign Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", data_fine_evento?string, locale)>
99 <#assign data_fine_evento = dateUtil.getDate(Data_DateObj, date_format, locale)?lower_case />
100 </#if>
101</#if>
102
103
104<#assign ora_inizio_evento = "" />
105<#if (OraInizioEvento.getData())?? && OraInizioEvento.getData() != "">
106 <#assign ora_inizio_evento = OraInizioEvento.getData() />
107</#if>
108
109
110<#assign ora_fine_evento = "" />
111<#if (OraFineEvento.getData())?? && OraFineEvento.getData() != "">
112 <#assign ora_fine_evento = OraFineEvento.getData() />
113</#if>
114
115
116<#assign indirizzo_evento = "" />
117<#if (Indirizzo.getData())?? && Indirizzo.getData() != "">
118 <#assign indirizzo_evento = Indirizzo.getData() />
119</#if>
120
121
122<#assign luogo_evento = "" />
123<#if (Luogo.getData())?? && Luogo.getData() != "">
124 <#assign luogo_evento = Luogo.getData() />
125</#if>
126
127
128<#assign data_evento = ""/>
129<#if DataInizioEvento.getData()?? && DataInizioEvento.getData() != "">
130 <#if DataFineEvento.getData()?? && DataFineEvento.getData() != "">
131 <#if data_inizio_evento?string != "" && data_fine_evento?string != "" && data_inizio_evento?string != data_fine_evento?string>
132 <#assign data_evento = from?capitalize + " " + data_inizio_evento?string + " " + to + " " + data_fine_evento?string/>
133 <#else>
134 <#if data_inizio_evento?string != "">
135 <#assign data_evento = data_inizio_evento/>
136 </#if>
137 </#if>
138 <#else>
139 <#if data_inizio_evento?string != "">
140 <#assign data_evento = data_inizio_evento/>
141 </#if>
142 </#if>
143</#if>
144
145<#if ora_inizio_evento?string != "" && ora_fine_evento?string != "">
146 <#assign data_evento = data_evento + " " + hour + " " + ora_inizio_evento?string + " | " + ora_fine_evento?string/>
147<#else>
148 <#if ora_inizio_evento?string != "">
149 <#assign data_evento = data_evento + " " + hour + " " + ora_inizio_evento?string />
150 <#else>
151 <#assign data_evento = data_evento + " " + hour + " " + ora_fine_evento?string />
152 </#if>
153</#if>
154
155
156
157
158<#-- URL GOOGLE per la condivisione -->
159
160<#assign googleURL="https://calendar.google.com/calendar/r/eventedit?action=TEMPLATE" />
161<#assign titoloURL = "&text=" + escapeUtil.escapeURL(title) />
162
163<#assign Data_Data_Inizio=getterUtil.getString(DataInizioEvento.getData())>
164<#assign Data_Data_Fine=getterUtil.getString(DataFineEvento.getData())>
165
166<#assign dataURLInizio="" />
167<#if validator.isNotNull(Data_Data_Inizio)>
168 <#assign Data_DateObj = Data_Data_Inizio?date("yyyy-MM-dd")>
169 <#assign dataURLInizio=dateUtil.getDate(Data_DateObj, "yyyyMMdd" , locale)?string />
170</#if>
171
172<#assign dataURLFine="" />
173<#if validator.isNotNull(Data_Data_Fine)>
174 <#assign Data_DateObj_Fine = Data_Data_Fine?date("yyyy-MM-dd")>
175 <#assign dataURLFine=dateUtil.getDate(Data_DateObj_Fine, "yyyyMMdd" , locale)?string />
176</#if>
177
178<#assign oraInizioURL="" />
179<#if ora_inizio_evento?has_content>
180 <#assign oraInizioURL="T" />
181 <#if ora_inizio_evento?length==1>
182 <#assign oraInizioURL=oraInizioURL + "0" />
183 </#if>
184 <#assign oraInizioURL=oraInizioURL + ora_inizio_evento?replace(":", "") + "00" />
185</#if>
186
187<#assign oraFineURL="" />
188<#if ora_fine_evento?has_content>
189 <#assign oraFineURL="T" />
190 <#if ora_fine_evento?length==1>
191 <#assign oraFineURL=oraFineURL + "0" />
192 </#if>
193 <#assign oraFineURL=oraFineURL + ora_fine_evento?replace(":", "") + "00" />
194</#if>
195
196<#assign descrizioneURL = "&details=" + escapeUtil.escapeURL(description_event) />
197
198<#--<#assign descrizioneURL="" />
199<#if descrizione?has_content && descrizione?has_content>
200 <#assign descrizioneURL="&details=" + descrizione?replace('<[^>]+>','','r')?replace(" ", " +") />
201</#if> -->
202
203<#assign locationURL="" />
204<#if indirizzo_evento?has_content && luogo_evento?has_content>
205<#-- <#assign locationURL="&location=" + indirizzoCompleto?replace(" ", " +") + ",+" + citta?replace(" ", " +") /> -->
206<#assign locationURL="&location=" + escapeUtil.escapeURL(indirizzo_evento) + " " + escapeUtil.escapeURL(luogo_evento) />
207</#if>
208
209<#assign googleURL=googleURL + titoloURL + "&dates=" + dataURLInizio + oraInizioURL + "/" + dataURLFine + oraFineURL + descrizioneURL + locationURL />
210
211
212<#-- URL OUTLOOK per la condivisione -->
213<#assign sysTimeOffset = .now?iso("Europe/Rome")?string?split("+")[1]>
214
215<#assign Data_Data_Inizio=getterUtil.getString(DataInizioEvento.getData())>
216<#assign Data_Data_Fine=getterUtil.getString(DataFineEvento.getData())>
217
218<#assign outlookURL="https://outlook.live.com/owa/?path=/calendar/action/compose&rru=addevent&subject=" />
219<#assign titoloURL= escapeUtil.escapeURL(title) />
220<#assign descrizioneURL = "&body=" + escapeUtil.escapeURL(description_event) />
221
222<#assign locationURL="" />
223<#if indirizzo_evento?has_content && luogo_evento?has_content>
224 <#assign locationURL="&location=" + escapeUtil.escapeURL(indirizzo_evento) + " " + escapeUtil.escapeURL(luogo_evento) />
225</#if>
226
227<#assign dataURLInizio="" />
228<#if validator.isNotNull(Data_Data_Inizio)>
229 <#assign Data_DateObj = Data_Data_Inizio?date("yyyy-MM-dd")>
230 <#assign dataURLInizio=dateUtil.getDate(Data_DateObj, "yyyyMMdd" , locale)?string />
231</#if>
232<#assign dataURLFine="" />
233<#if validator.isNotNull(Data_Data_Fine)>
234 <#assign Data_DateObj_Fine = Data_Data_Fine?date("yyyy-MM-dd")>
235 <#assign dataURLFine=dateUtil.getDate(Data_DateObj_Fine, "yyyyMMdd" , locale)?string />
236</#if>
237
238
239<#assign oraInizioURL="&startdt=" + dataURLInizio />
240<#if ora_inizio_evento?has_content>
241 <#assign oraInizioURL=oraInizioURL + "T" />
242 <#if ora_inizio_evento?length==1>
243 <#assign oraInizioURL=oraInizioURL + "0" />
244 </#if>
245 <#assign oraInizioURL=oraInizioURL + ora_inizio_evento + ":00" + "+" + sysTimeOffset/>
246
247</#if>
248<#assign oraFineURL="&enddt=" + dataURLFine />
249<#if ora_fine_evento?has_content>
250 <#assign oraFineURL=oraFineURL + "T" />
251 <#if ora_fine_evento?length==1>
252 <#assign oraFineURL=oraFineURL + "0" />
253 </#if>
254 <#assign oraFineURL=oraFineURL + ora_fine_evento + ":00" + "+" + sysTimeOffset/>
255</#if>
256<#assign outlookURL=outlookURL + titoloURL + descrizioneURL + locationURL + oraInizioURL + oraFineURL />
257
258
259<#-- CAMPI APPLE per file .ics -->
260<p id="titoloEvento" style="display: none;">${title}</p>
261<p id="luogoEvento" style="display: none;">${luogo_evento}</p>
262<p id="indirizzoEvento" style="display: none;">${indirizzo_evento}</p>
263
264<#if validator.isNotNull(Data_Data_Inizio)>
265 <#assign Data_DateObj = Data_Data_Inizio?date("yyyy-MM-dd")>
266 <#assign dataURLInizioApple=dateUtil.getDate(Data_DateObj, "yyyy/MM/dd" , locale)?string />
267</#if>
268
269<#if validator.isNotNull(Data_Data_Fine)>
270 <#assign Data_DateObj = Data_Data_Fine?date("yyyy-MM-dd")>
271 <#assign dataURLFineApple=dateUtil.getDate(Data_DateObj, "yyyy/MM/dd" , locale)?string />
272</#if>
273<#assign dataInizioURLApple=dataURLInizioApple + " " + ora_inizio_evento + ":00" />
274<#assign dataFineURLApple=dataURLFineApple + " " + ora_fine_evento + ":00" />
275
276
277<p id="dataInizioForApple" style="display: none;">${dataInizioURLApple}</p>
278<p id="dataFineForApple" style="display: none;">${dataFineURLApple}</p>
279<p id="descrEvento" style="display: none;">${description_event}</p>
280
281
282<div class="eventi-agora full-page" xmlns="http://www.w3.org/1999/html" xmlns="http://www.w3.org/1999/html">
283 <div class="px-4 pb-3 custom-shadow">
284 <div class="container">
285 <div class="row">
286 <div class="col-12 col-sm-12 col-md-9 col-lg-9">
287 <div class="title">
288 <h2>${title}</h2>
289 </div>
290 </div>
291
292 <div class="col-12 col-sm-12 col-md-3 col-lg-3 link-laterali">
293 <#if numeroCategorie gt 0>
294 <div class="argomenti">
295 <p>${arg}</p>
296 <#list categories as category>
297 <div class="chip chip-simple chip-primary">
298 <span class="chip-label">${category.getTitle(locale)}</span>
299 </div>
300 </#list>
301 </div>
302 </#if>
303 </div>
304 </div>
305 <#if validator.isNotNull(data_pubblicazione)>
306 <div class="data">
307 <span>${publish_date}</span>
308
309
310
311 <#assign Data_DateObj = dateUtil.parseDate("EEE, dd MMM yyyy HH:mm:ssZ", data_pubblicazione?string, locale)>
312
313 <#assign date = dateUtil.getDate(Data_DateObj, "dd MMM yyyy ", locale)?lower_case />
314
315 <p class="data-detail mb-0">${date?capitalize}</p>
316
317
318 </div>
319 </#if>
320 </div>
321 </div>
322
323 <div class="contenuti custom-background-white">
324 <#if urlBanner != "" && urlBanner?has_content>
325 <div class="banner d-flex justify-content-end align-items-center" style="background-image: url('${urlBanner})'">
326 <div class="dettagli-evento">
327 <#if data_evento?? && data_evento?has_content && data_evento?length gt 0>
328 <div class="dettagli-evento-data">
329 ${data_evento}
330 </div>
331 </#if>
332 <#if luogo_evento?has_content || indirizzo_evento?has_content>
333 <div class="dettagli-evento-indirizzo">
334 <div class="row">
335 <div class="col-1 d-flex justify-content-center">
336 <span class="maps-place">
337 <span class="fas fa-map-marker-alt"></span>
338 </span>
339 </div>
340 <div class="col-10 d-flex flex-column">
341 <#if luogo_evento?has_content>
342 <p class="mb-0 font-weight-normal">${luogo_evento}</p>
343 </#if>
344 <#if indirizzo_evento?has_content>
345 <p class="mb-0 font-weight-normal">${indirizzo_evento}</p>
346 </#if>
347 </div>
348 </div>
349 </div>
350 </#if>
351 </div>
352 </div>
353 </#if>
354
355 <#if numeroContenutiTotale gt 0>
356 <div class="container px-4 sezione-contenuti pt-4">
357 <div class="row border-top row-column-border row-column-menu-left mt-0">
358 <aside class="col-lg-4 col-md-12 col-sm-12 col-12">
359 <div class="sticky-wrapper navbar-wrapper">
360 <nav class="navbar it-navscroll-wrapper it-top-navscroll navbar-expand-lg indice">
361 <button class="custom-navbar-toggler" type="button" aria-controls="navbarNav"
362 aria-expanded="false" aria-label="Toggle navigation" data-target="#navbarNav">
363 <span class="it-list"></span>${index}
364 </button>
365 <div class="navbar-collapsable" id="navbarNav">
366 <div class="overlay"></div>
367 <div class="close-div sr-only">
368 <button class="btn close-menu" type="button">
369 <span class="it-close"></span>${close}
370 </button>
371 </div>
372 <a class="it-back-button" href="#">
373 <span class="fas fa-chevron-left"></span>
374 <span>${back}</span>
375 </a>
376 <div class="menu-wrapper">
377 <div class="link-list-wrapper">
378 <h3 class="no_toc pt-3">${index?upper_case}</h3>
379 <ul class="link-list indice-sezioni">
380 <li class="nav-item active">
381 <a class="nav-link active" href="#descrizione">
382 <span>${description_title?capitalize}</span>
383 </a>
384 </li>
385 <#if numeroDocumenti gt 0>
386 <li class="nav-item">
387 <a class="nav-link" href="#documenti">
388 <span>${documents_title?capitalize}</span>
389 </a>
390 </li>
391 </#if>
392 <#if numeroUlterioriInformazioni gt 0>
393 <li class="nav-item">
394 <a class="nav-link" href="#ulteriori-informazioni">
395 <span>${others_title?capitalize}</span>
396 </a>
397 </li>
398 </#if>
399 </ul>
400 </div>
401 </div>
402 </div>
403 </nav>
404 </div>
405 </aside>
406
407 <section class="col-lg-8 col-md-12 col-sm-12 col-12 it-page-sections-container">
408 <#--<#if (DataInizioEvento.getData()?? && DataInizioEvento.getData() != "") && ((DataFineEvento.getData())?? && DataFineEvento.getData() != "")>
409 <div class="share-calendar d-flex align-items-center justify-content-end">
410 ${addCalendar}
411 <button class="share-button" type="button" data-toggle="modal" data-target="#modalCalendar" onclick="openModalCalendar('${googleURL}', '${outlookURL}')">
412 <span class="fas fa-calendar-alt"></span>
413 </button>
414 </div>
415 </#if>-->
416
417 <#if numeroDescrizioni gt 0>
418 <article id="descrizione" class="it-page-section anchor-offset contenuti-testo">
419 ${descrizione}
420 </article>
421 </#if>
422
423 <#if numeroDocumenti gt 0>
424 <article id="documenti" class="it-page-section anchor-offset contenuti-testo contenuti-box">
425 <#if Documenti.getSiblings()?has_content>
426 <h3>${documents_title?capitalize}</h3>
427 <#list Documenti.getSiblings() as documento>
428 <#if documento.getData() != "" && documento.getData()?length gt 0 && documento.getData()?has_content>
429 <#assign splitter = documento.getData()?split("/")/>
430 <#attempt>
431 <#assign file = dlFileEntryService.getFileEntryByUuidAndGroupId(splitter[5]?split("?")[0], splitter[2]?number) />
432 <#assign dlFileEntry=assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry", file.fileEntryId) />
433 <#assign assetRenderer=dlFileEntry.assetRenderer />
434 <#assign docUrl=assetRenderer.getURLDownload(themeDisplay) />
435 <#assign categories_file = dlFileEntry.getCategories()/>
436
437 <div class="descrizione-documento <#if !documento?is_first> pt-4 </#if>">
438 <div class="row">
439 <div class="col-12 col-sm-12 col-md-10 col-lg-10">
440 <p class="file-title font-weight-bold h4">${file.fileName}</p>
441 ${file.getDescription()}
442 </div>
443
444 <div class="col-12 col-sm-12 col-md-2 col-lg-2 doc-download-icon d-flex justify-content-center align-items-center my-5">
445 <a href="${docUrl}" download title="${file.fileName}">
446 <span class="download">
447 <span class="fas fa-file-download fa-2x"></span>
448 </span>
449 </a>
450 </div>
451 </div>
452 <div class="row">
453 <div class="col-12 col-sm-12 col-md-12 col-lg-12">
454 <#list categories_file as category>
455 <div class="chip chip-simple chip-primary">
456 <span class="chip-label">${category.getTitle(locale)}</span>
457 </div>
458 </#list>
459 </div>
460 </div>
461 </div>
462 <#recover>
463 </#attempt>
464 </#if>
465 </#list>
466 </#if>
467 </article>
468 </#if>
469
470 <#if numeroUlterioriInformazioni gt 0>
471 <div id="ulteriori-informazioni" class="ulteriori-informazioni contenuti-box">
472 <h3>${others_title?capitalize}</h3>
473 <div>
474 <div id="descrizione" class="contenuti-testo">
475 ${ulterioriInformazioni}
476 </div>
477 </div>
478 </div>
479 </#if>
480 </section>
481 </div>
482 </div>
483 </#if>
484 </div>
485</div>
486
487
488
489<#-- MODALE CALENDARIO EVENTO -->
490<div class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="modalCalendar" aria-hidden="true" id="modalCalendar" style="display: none;">
491 <div class="modal-dialog modal-lg modal-dialog-centered">
492 <div class="modal-content">
493 <div class="modal-header align-items-center">
494 <h5 class="modal-title text-transform-unset">Aggiungi al calendario</h5>
495 <button class="close m-0 p-0" type="button" data-dismiss="modal" aria-label="Close">
496 <svg class="icon">
497 <use xlink:href="/o/agora-theme/svg/sprite.svg#it-close"></use>
498 </svg>
499 </button>
500 </div>
501 <div class="modal-body">
502 <div class="row">
503 <div class="col-md-4 text-center">
504 <button id="btAppleCal" class="bt-share">
505 <img id="imgBtApple" src="/documents/20121/46821/AppleIcon.png" height="43px">
506 <!-- <i class="fab fa-apple icon-copy-link"></i> -->
507 </button>
508 <p class="link-subtitle">Apple Calendar</p>
509 </div>
510 <div class="col-md-4 text-center">
511 <a id="btGoogleCal" href="#" target="_blank">
512 <img id="imgBtGoogle" src="/documents/20121/46821/GoogleCalendarIcon.png" height="45px">
513 </a>
514 <p class="link-subtitle">Google Calendar</p>
515 </div>
516 <div class="col-md-4 text-center">
517 <a id="btOutlookCal" href="#" target="_blank">
518 <img id="imgBtOutlook" src="/documents/20121/46821/OutlookIcon.png" height="45px">
519 </a>
520 <p class="link-subtitle">Outlook Calendar</p>
521 </div>
522 </div>
523 </div>
524 <div class="modal-footer">
525 <#--<button class="btn btn-outline-primary btn-sm" type="button" data-dismiss="modal">Cancel</button>
526 <button class="btn btn-primary btn-sm" type="button">Action 1</button>-->
527 </div>
528 </div>
529 </div>
530</div>
531
532<script>
533
534function openModalCalendar(googleURL, outlookURL) {
535 console.log("open modal");
536 $('#modalCalendar').modal('show');
537
538 $('#btGoogleCal').attr('href', googleURL);
539
540 $('#btOutlookCal').attr('href', outlookURL);
541
542 $("#btAppleCal").prop("onclick", null).off("click");
543 $('#btAppleCal').click(function() {
544 appleCal();
545 });
546
547
548 function appleCal() {
549 console.log("appleCal")
550 var titolo = $('#titoloEvento').html();
551 var luogo = $('#luogoEvento').html();
552 var ind = $('#indirizzoEvento').html();
553 var dataIn = $('#dataInizioForApple').html();
554 var dataFine = $('#dataFineForApple').html();
555 var descr = $('#descrEvento').html();
556 var calEntry = icsFormatter();
557
558 calEntry.addEvent(titolo, descr, ind + ", " + luogo, dataIn, dataFine);
559 calEntry.download(titolo.replace(/ /g, ''));
560}
561
562var icsFormatter = function() {
563 console.log("icsFormatter");
564 'use strict';
565
566 if (navigator.userAgent.indexOf('MSIE') > -1 && navigator.userAgent.indexOf('MSIE 10') == -1) {
567 console.log('Unsupported Browser');
568 return;
569 }
570
571 var SEPARATOR = (navigator.appVersion.indexOf('Win') !== -1) ? '\r\n' : '\n';
572 var calendarEvents = [];
573 var calendarStart = [
574 'BEGIN:VCALENDAR',
575 'VERSION:2.0'
576 ].join(SEPARATOR);
577 var calendarEnd = SEPARATOR + 'END:VCALENDAR';
578
579 return {
580 /**
581 * Returns events array
582 * @return {array} Events
583 */
584 'events': function() {
585 return calendarEvents;
586 },
587
588 /**
589 * Returns calendar
590 * @return {string} Calendar in iCalendar format
591 */
592 'calendar': function() {
593 return calendarStart + SEPARATOR + calendarEvents.join(SEPARATOR) + calendarEnd;
594 },
595
596 /**
597 * Add event to the calendar
598 * @param {string} subject Subject/Title of event
599 * @param {string} description Description of event
600 * @param {string} location Location of event
601 * @param {string} begin Beginning date of event
602 * @param {string} stop Ending date of event
603 */
604 'addEvent': function(subject, description, location, begin, stop) {
605 // I'm not in the mood to make these optional... So they are all required
606 if (typeof subject === 'undefined' ||
607 typeof description === 'undefined' ||
608 typeof location === 'undefined' ||
609 typeof begin === 'undefined' ||
610 typeof stop === 'undefined'
611 ) {
612 return false;
613 }
614
615 //TODO add time and time zone? use moment to format?
616 var start_date = new Date(begin);
617 var end_date = new Date(stop);
618
619 var start_year = ("0000" + (start_date.getFullYear().toString())).slice(-4);
620 var start_month = ("00" + ((start_date.getMonth() + 1).toString())).slice(-2);
621 var start_day = ("00" + ((start_date.getDate()).toString())).slice(-2);
622 var start_hours = ("00" + (start_date.getHours().toString())).slice(-2);
623 var start_minutes = ("00" + (start_date.getMinutes().toString())).slice(-2);
624 var start_seconds = ("00" + (start_date.getMinutes().toString())).slice(-2);
625
626 var end_year = ("0000" + (end_date.getFullYear().toString())).slice(-4);
627 var end_month = ("00" + ((end_date.getMonth() + 1).toString())).slice(-2);
628 var end_day = ("00" + ((end_date.getDate()).toString())).slice(-2);
629 var end_hours = ("00" + (end_date.getHours().toString())).slice(-2);
630 var end_minutes = ("00" + (end_date.getMinutes().toString())).slice(-2);
631 var end_seconds = ("00" + (end_date.getMinutes().toString())).slice(-2);
632
633 // Since some calendars don't add 0 second events, we need to remove time if there is none...
634 var start_time = '';
635 var end_time = '';
636 if (start_minutes + start_seconds + end_minutes + end_seconds !== 0) {
637 start_time = 'T' + start_hours + start_minutes + start_seconds;
638 end_time = 'T' + end_hours + end_minutes + end_seconds;
639 }
640
641 var start = start_year + start_month + start_day + start_time;
642 var end = end_year + end_month + end_day + end_time;
643
644 var calendarEvent = [
645 'BEGIN:VEVENT',
646 'CLASS:PUBLIC',
647 'DESCRIPTION:' + description,
648 'DTSTART;VALUE=DATE:' + start,
649 'DTEND;VALUE=DATE:' + end,
650 'LOCATION:' + location,
651 'SUMMARY;LANGUAGE=en-us:' + subject,
652 'TRANSP:TRANSPARENT',
653 'END:VEVENT'
654 ].join(SEPARATOR);
655
656 calendarEvents.push(calendarEvent);
657 return calendarEvent;
658 },
659
660 /**
661 * Download calendar using the saveAs function from filesave.js
662 * @param {string} filename Filename
663 * @param {string} ext Extention
664 */
665 'download': function(filename, ext) {
666 if (calendarEvents.length < 1) {
667 return false;
668 }
669
670 ext = (typeof ext !== 'undefined') ? ext : '.ics';
671 filename = (typeof filename !== 'undefined') ? filename : 'calendar';
672 var calendar = calendarStart + SEPARATOR + calendarEvents.join(SEPARATOR) + calendarEnd;
673 window.open("data:text/calendar;charset=utf8," + escape(calendar));
674 }
675 };
676};
677
678if (typeof define === "function" && define.amd) {
679 /* AMD Format */
680 define("icsFormatter", [], function() {
681 return icsFormatter();
682 });
683} else if (typeof module === "object" && module.exports) {
684 /* CommonJS Format */
685 module.exports = icsFormatter();
686} else {
687 /* Plain Browser Support */
688 this.myModule = icsFormatter();
689}
690}
691
692</script>
693
694<style>
695 .eventi-agora .nav-item .nav-link span:hover {
696 color: #212529 !important;
697 }
698
699 /*.eventi-agora .share-calendar {
700 color: #222222;
701 padding-bottom: 2rem;
702 }
703 .eventi-agora .share-calendar span {
704 font-size: 30px;
705 color: #B40507;
706 }
707
708 .eventi-agora .share-calendar .share-button {
709 border: none;
710 background-color: transparent;
711 }
712
713 #modalCalendar .modal-content .modal-title {
714 text-transform: unset;
715 text-align: center;
716 color: #000000;
717 }
718
719 #modalCalendar .modal-content .modal-body #btAppleCal {
720 border: none;
721 background-color: transparent;
722 }
723
724#modalCalendar .modal-content .modal-footer {
725 padding: 24px 24px;
726}*/
727
728</style>