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>