Publicador de contenidos
Se ha producido un error al procesar la plantilla.
Java method "com.sun.proxy.$Proxy627.getCalendarBooking(long)" threw an exception when invoked on com.sun.proxy.$Proxy627 object "com.liferay.calendar.service.impl.CalendarBookingLocalServiceImpl@1f8dfa54"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign calendarBooking = CalendarBoo... [in template "21222#21260#41707205" at line 50, column 5]
----
1<#assign BuscadorAgendaService = serviceLocator.findService("net.izfe.gipuzkoa.agenda.buscador.api.BuscadorAgendaService") />
2<#assign CalendarBookingLocalService = serviceLocator.findService("com.liferay.calendar.service.CalendarBookingLocalService") />
3<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
4<#assign AssetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
5<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
6<#assign DlAppServiceUtil = staticUtil["com.liferay.document.library.kernel.service.DLAppServiceUtil"] />
7
8<#assign HttpUtil = staticUtil["com.liferay.portal.kernel.util.HttpUtil"] />
9<#assign url = themeDisplay.getURLPortal()+themeDisplay.getURLCurrent()>
10<#assign calendarBookingId = HttpUtil.getParameter(url,"entryId")>
11<#assign instanceIndex = HttpUtil.getParameter(url,"instanceIndex")>
12<#assign parameters = HttpUtil.getParameterMap(url)>
13<#list parameters as key, parameter>
14 <#if key?contains("entryId") && parameter[0]!="">
15 <#assign calendarBookingId = parameter[0]>
16 <#elseif key?contains("instanceIndex") && parameter[0]!="">
17 <#assign instanceIndex = parameter[0]>
18 </#if>
19</#list>
20
21<#assign default_category_background_color = "6c757d">
22<#assign default_category_text_color = "fff">
23
24<#if themeDisplay.getLocale() == "es_ES" >
25 <#assign abrir_mapa ="Abrir mapa en otra ventana">
26 <#assign mas_informacion_es ="Más información sobre el evento ">
27 <#assign mas_informacion_eus ="">
28 <#assign add_calendario ="Añadir a calendario">
29 <#assign add_calendar ="Añadir a Google Calendar">
30<#else>
31 <#assign abrir_mapa ="Ireki mapa beste leiho batean">
32 <#assign mas_informacion_eus =" ekitaldiari buruz">
33 <#assign mas_informacion_es ="Informazio gehiago">
34 <#assign add_calendario ="Egutegira gehitu">
35 <#assign add_calendar ="Google Calendar-era gehitu">
36</#if>
37
38<#attempt>
39 <#assign calendarBookingIdNumber = calendarBookingId?number>
40<#recover>
41 <#assign calendarBookingIdNumber = -1>
42</#attempt>
43<#attempt>
44 <#assign instanceIndexNumber = instanceIndex?number>
45<#recover>
46 <#assign instanceIndexNumber = -1>
47</#attempt>
48
49<#if calendarBookingIdNumber != -1 >
50 <#assign calendarBooking = CalendarBookingLocalService.getCalendarBooking(calendarBookingIdNumber) />
51 <#if instanceIndexNumber != -1 >
52 <#assign evento = BuscadorAgendaService.getEvento(calendarBookingIdNumber, instanceIndexNumber, themeDisplay.getLocale(), themeDisplay.getPortalURL()) />
53 <#else>
54 <#assign evento = BuscadorAgendaService.getEvento(calendarBookingIdNumber, themeDisplay.getLocale(), themeDisplay.getPortalURL()) />
55 </#if>
56 <#assign startDate=evento.getStartDate()>
57 <#assign endDate=evento.getEndDate()>
58 <#assign images_folder = themeDisplay.getPathThemeImages() />
59 <#assign direccion="" />
60 <#if evento.direccion?has_content >
61 <#assign direccion=direccion+evento.direccion />
62 </#if>
63 <#if evento.direccion?has_content && evento.localizacion?has_content>
64 <#assign direccion=direccion+"/" />
65 </#if>
66 <#if evento.localizacion?has_content >
67 <#assign direccion=direccion+evento.localizacion />
68 </#if>
69
70 <#assign fileEntryId = "" />
71 <#assign assetEntry = AssetEntryLocalService.fetchEntry("com.liferay.calendar.model.CalendarBooking", evento.calendarBookingId) />
72 <#assign assetLinks = AssetLinkLocalService.getLinks(assetEntry.getEntryId()) />
73 <#list assetLinks as assetLink>
74 <#if assetLink.getEntryId1() != assetEntry.getEntryId()>
75 <#assign assetLinkEntry = AssetEntryLocalService.getAssetEntry(assetLink.getEntryId1()) />
76
77 <#if assetLinkEntry.mimeType?starts_with("image/")>
78 <#assign dlFileEntry = DLFileEntryLocalService.getDLFileEntry(assetLinkEntry.getClassPK()) />
79 <#assign fileEntryId = dlFileEntry.getFileEntryId() />
80 </#if>
81 </#if>
82 </#list>
83
84 <@liferay_util["html-top"]>
85 <#if evento.title?has_content >
86 <title>${evento.title}</title>
87 <meta property="og:title" content='${evento.title}'>
88 </#if>
89 <#if evento.imagenPath?has_content >
90 <meta property="og:image" content='${evento.imagenPath}'>
91 </#if>
92 <#if evento.direccion?has_content >
93 <meta property="og:description" content='${evento.direccion}'>
94 </#if>
95 <meta property="og:url" content='${themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()}'>
96 </@>
97
98 <div id="izfe-detalles-evento" class="mt-4 mb-4">
99 <div class="row flex-column-reverse flex-md-row">
100 <div class="col-12 col-md-8">
101 <h2 class="mb-4">
102 ${evento.title}
103 </h2>
104
105 <!-- SEPARAR FECHAS Y HORAS-->
106 <#attempt>
107 <#assign fechaInicio = startDate />
108 <#recover>
109 <#assign fechaInicio = "" />
110 </#attempt>
111
112 <#attempt>
113 <#assign horaInicio = evento.getStartOnlyTime() />
114 <#recover>
115 <#assign horaInicio = "" />
116 </#attempt>
117
118 <#attempt>
119 <#assign fechaFin = endDate />
120 <#recover>
121 <#assign fechaFin = "" />
122 </#attempt>
123
124 <#attempt>
125 <#assign horaFin = evento.getEndOnlyTime() />
126 <#recover>
127 <#assign horaFin = "" />
128 </#attempt>
129
130 <#-- D A T A -->
131 <div class="izfe-bg-blue-dark p-2">
132 <#if fechaInicio == fechaFin >
133 <div class="d-flex align-items-center ml-3">
134 <div class="izfe-icon-calendar-time-white"></div>
135 <p class="text-white mb-0 ml-2">
136
137 <#if fechaInicio != "" >
138 <span class="mr-1">
139 ${fechaInicio}
140 </span>
141 </#if>
142
143 <#if fechaFin != "" && fechaFin != fechaInicio>
144 -
145 <span class="ml-1">
146 ${fechaFin}
147 </span>
148 <#elseif !evento.isAllDay()>
149 <span class="ml-3 mr-1">
150 ${horaInicio}
151 </span>
152 -
153 <span class="ml-1">
154 ${horaFin}
155 </span>
156 </#if>
157
158 </p>
159 </div>
160 <#else>
161 <div class="d-flex align-items-center ml-3">
162 <div class="izfe-icon-calendar-time-white"></div>
163 <p class="text-white mb-0 ml-2">${fechaInicio}</p>
164 <span class="text-white ml-2 mr-2">-</span>
165 <p class="text-white mb-0">${fechaFin}</p>
166 </div>
167 </#if>
168 </div>
169
170 <#-- K O K A P E N A -->
171 <#if evento.localizacion?has_content || evento.direccion?has_content>
172 <div class="izfe-evento-localizacion-direccion d-flex align-items-center pl-3 pr-3 pt-2 pb-2">
173 <div class="d-flex flex-column flex-lg-row align-items-lg-center">
174
175 <#if evento.urlDireccion != "">
176 <a class="ml-2 d-flex align-items-center" aria-label="${abrir_mapa}" href="${evento.urlDireccion}" target="_blank">
177 <div class="izfe-icon-ubicacion-blue"></div>
178 <p class="mb-0 ml-2">
179 <#if evento.direccion?has_content >
180 ${evento.direccion}
181 </#if>
182 <#if evento.direccion?has_content && evento.localizacion?has_content>
183 <span class="ml-1 mr-1">/</span>
184 </#if>
185 <#if evento.localizacion?has_content >
186 ${evento.localizacion}
187 </#if>
188 </p>
189 </a>
190 <#else>
191 <div class="ml-2 d-flex align-items-center">
192 <div class="izfe-icon-ubicacion"></div>
193 <p class=" mb-0 ml-2">
194 <#if evento.direccion?has_content >
195 ${evento.direccion}</p>
196 </#if>
197 <#if evento.direccion?has_content && evento.localizacion?has_content>
198 <span class="ml-1 mr-1">/</span>
199 </#if>
200 <#if evento.localizacion?has_content >
201 ${evento.localizacion}
202 </#if>
203 </p>
204 </div>
205 </#if>
206 </div>
207 </div>
208 </#if>
209
210 <#-- H I Z K U N T Z A -->
211 <#if evento.localizacion?has_content || evento.direccion?has_content>
212 <div class="izfe-evento-localizacion-direccion d-flex align-items-center pl-3 pr-3 pt-2 pb-2">
213 <div class="d-flex flex-column flex-lg-row align-items-lg-center">
214 <span class="ml-2 d-flex align-items-center">
215
216 <div class="izfe-icon-ubicacion-blue "
217 style="display: block;
218 background-image: url('https://www.pasaia.eus/documents/90521/41645111/Icon-Hizkuntza.svg/e76a1109-9132-6b42-e169-f825c3c42a46?t=1736329809854');
219 background-size: 100% auto;background-repeat: no-repeat;background-position: center center;width: 20px;height: 20px;">
220 </div>
221 <p class="mb-0 ml-2">
222 <#list evento.getListaCategorias() as category>
223 <#if category.properties?has_content && category.properties["folderId"]?has_content && category.properties["icon"]?has_content && category.properties["uuid"]?has_content && category.properties["folderId"] == "41645111">
224 <img class="izfe-icon mr-2" alt="${category.name}" src="/documents/${themeDisplay.getScopeGroupId()}/${category.properties["folderId"]}/${category.properties["icon"]}/${category.properties["uuid"]}" />
225 </#if>
226 </#list>
227 </p>
228 </span>
229 </div>
230 </div>
231 </#if>
232
233
234
235 <div class="row mt-4">
236 <div class="col-12" id="izfe-evento-descripcion">
237 <#if evento.descripcion != "">
238 ${evento.descripcion}
239 </#if>
240 </div>
241 </div>
242 <#assign startDateArr=startDate?split("/") />
243 <#assign endDateArr=evento.getEndDate()?split("/") />
244 <#assign startTime=evento.getStartOnlyTime()?replace(":","")+"00" />
245 <#assign endTime=evento.getEndOnlyTime()?replace(":","")+"00" />
246
247 <#assign startTimeStamp=startDateArr[2]+startDateArr[1]+startDateArr[0]+"T"+startTime+"" />
248 <#assign endTimeStamp=endDateArr[2]+endDateArr[1]+endDateArr[0]+"T"+endTime+"" />
249
250 <div class="calendar-btns">
251 <button id="add-calendar">${add_calendario}</button>
252 <a href="https://calendar.google.com/calendar/render?action=TEMPLATE&text=${evento.title?replace("\n", "")?replace("\t", "")?replace('<[^>]+>','','r')?trim?replace('\"',"'")}&dates=${startTimeStamp}/${endTimeStamp}&details=${evento.descripcion?replace("\n", "")?replace("\t", "")?replace('<[^>]+>','','r')?trim}&recur=&location=${direccion}&trp=false">${add_calendar}</a>
253 </div>
254 </div>
255
256 <div class="col-12 col-md-4">
257 <#if fileEntryId?has_content>
258 <@adaptive_media_image["img"]
259 alt=""
260 fileVersion=DlAppServiceUtil.getFileEntry(fileEntryId).getFileVersion()
261 class="w-100 mb-3" />
262 </#if>
263
264
265
266 <#if evento.webEvento != "">
267 <a class="izfe-btn-blue d-block text-center" href="${evento.webEvento}" aria-label="${mas_informacion_es}${evento.title}${mas_informacion_eus}" target="_blank">
268 <@liferay.language key="DGN.mas-informacion-evento" />
269 </a>
270 </#if>
271 </div>
272 </div>
273
274 <!-- EVENTOS RELACIONADOS -->
275 <#assign eventosRelacionados = BuscadorAgendaService.listaProximosEventos(
276 themeDisplay.getCompanyId(),
277 themeDisplay.getLocale(),
278 themeDisplay.getPortalURL(),
279 null,
280 10,
281 [themeDisplay.getLayout().getGroupId()])
282 />
283 <#if eventosRelacionados?has_content>
284 <div class="row mt-4 mb-4" id="izfe-evento-relacionados">
285 <div class="listaEventos container-agenda-template col-12">
286 <div>
287 <h3 class="mb-3">
288 <@liferay.language key="DGN.otros-eventos"/>
289 </h3>
290 </div>
291 <div class="row">
292 <#assign contadorRelacionados = 0 >
293
294 <#list eventosRelacionados as eventoRelacionado>
295 <#if (eventoRelacionado.calendarBookingId != evento.calendarBookingId) ||
296 (eventoRelacionado.isRecurring() && eventoRelacionado.instanceIndex != evento.instanceIndex)>
297
298 <#assign imagePath = "" />
299 <#assign fileEntryId = "" />
300 <#assign assetEntry = AssetEntryLocalService.fetchEntry("com.liferay.calendar.model.CalendarBooking", eventoRelacionado.calendarBookingId) />
301 <#assign assetLinks = AssetLinkLocalService.getLinks(assetEntry.getEntryId()) />
302 <#list assetLinks as assetLink>
303 <#if assetLink.getEntryId1() != assetEntry.getEntryId()>
304 <#assign assetLinkEntry = AssetEntryLocalService.getAssetEntry(assetLink.getEntryId1()) />
305
306 <#if assetLinkEntry.mimeType?starts_with("image/")>
307 <#assign dlFileEntry = DLFileEntryLocalService.getDLFileEntry(assetLinkEntry.getClassPK()) />
308 <#assign imagePath = "/documents/${dlFileEntry.getGroupId()}/${dlFileEntry.getFolderId()}/${dlFileEntry.getTitle()}/${dlFileEntry.getUuid()}" />
309 <#assign fileEntryId = dlFileEntry.getFileEntryId() />
310 </#if>
311 </#if>
312 </#list>
313
314 <#attempt>
315 <#assign fechaInicioRelacionado = eventoRelacionado.getStartDate() />
316 <#recover>
317 <#assign fechaInicioRelacionado = "" />
318 </#attempt>
319
320 <#attempt>
321 <#assign horaInicioRelacionado = eventoRelacionado.getStartOnlyTime() />
322 <#recover>
323 <#assign horaInicioRelacionado = "" />
324 </#attempt>
325
326 <#attempt>
327 <#assign fechaFinRelacionado = eventoRelacionado.getEndDate() />
328 <#recover>
329 <#assign fechaFinRelacionado = "" />
330 </#attempt>
331
332 <#attempt>
333 <#assign horaFinRelacionado = eventoRelacionado.getEndOnlyTime() />
334 <#recover>
335 <#assign horaFinRelacionado = "" />
336 </#attempt>
337
338 <#if contadorRelacionados < 3 >
339
340 <#assign eventoURL = "/web/pasaia/agenda/ekitaldia?entryId=" + eventoRelacionado.getCalendarBookingId() />
341 <#if eventoRelacionado.isRecurring() >
342 <#assign eventoURL = eventoURL + "&instanceIndex=" + eventoRelacionado.getInstanceIndex() />
343 </#if>
344 <div class="col-12 col-lg-4 mb-4">
345 <div class="izfe-evento-item-link d-block izfe-bg-blue-dark text-white h-100 m-0">
346 <div class="izfe-evento-item row m-0">
347 <div class="col-4 p-0">
348 <span class="d-flex h-100 align-items-center">
349 <#if imagePath?has_content>
350 <img class="izfe-evento-img h-100"
351 alt=""
352 src="${imagePath}?imageThumbnail=1"
353 />
354 </#if>
355 </span>
356 </div>
357 <div class="col-8 p-0">
358 <span class="d-flex h-100 w-100 p-0">
359 <div class="d-flex flex-column p-3" style="justify-content:flex-start !important;">
360 <div class="row">
361 <div class="col-12">
362 <#-- Columna derecha para el resto -->
363 <div class="d-flex justify-content-end">
364 <#list eventoRelacionado.getListaCategorias() as category>
365 <#if category.properties?has_content
366 && category.properties["folderId"]?has_content
367 && category.properties["icon"]?has_content
368 && category.properties["uuid"]?has_content
369 && category.properties["folderId"] == "41627360">
370 <div class="d-flex align-items-center ml-2">
371 <img class="izfe-icon" alt="${category.name}"
372 src="/documents/${themeDisplay.getScopeGroupId()}/${category.properties["folderId"]}/${category.properties["icon"]}/${category.properties["uuid"]}" />
373
374 </div>
375 </#if>
376 </#list>
377 </div>
378 </div>
379 </div>
380 <div class="row">
381 <div class="col-12">
382 <p id="${eventoRelacionado.calendarBookingId}" class="mb-3 h4 text-dark">${eventoRelacionado.title}</p>
383 <div class="d-flex align-items-center izfe-evento-fecha flex-wrap mb-2">
384 <span class="izfe-icon-calendar-time-black"></span>
385 <span class="ml-1 mr-1">
386 <#if fechaInicioRelacionado != "" >
387 ${fechaInicioRelacionado}
388 </#if>
389 <#if fechaFinRelacionado != "" && fechaFinRelacionado != fechaInicioRelacionado >
390 - ${fechaFinRelacionado}
391 <#elseif eventoRelacionado.allDay == false>
392 ${horaInicioRelacionado} - ${horaFinRelacionado}
393 </#if>
394 </span>
395 </div>
396
397 <#-- K O K A P E N A -->
398 <div class="d-flex align-items-center flex-wrap izfe-evento-localizacion">
399 <#if eventoRelacionado.getLocalizacion()!="">
400 <span class="izfe-icon-ubicacion mb-2">${eventoRelacionado.localizacion}</span>
401 </#if>
402 </div>
403
404
405
406 <#-- H I Z K U N T Z A -->
407 <div class="d-flex align-items-center flex-wrap izfe-evento-hizkuntza">
408 <span class="izfe-icon-hizkuntza">
409 <#list eventoRelacionado.getListaCategorias() as category>
410 <#if category.properties?has_content
411 && category.properties["folderId"]?has_content
412 && category.properties["icon"]?has_content
413 && category.properties["uuid"]?has_content
414 && category.properties["folderId"] == "41645111">
415
416 <img class="izfe-icon mr-2" alt="${category.name}"
417 src="/documents/${themeDisplay.getScopeGroupId()}/${category.properties["folderId"]}/${category.properties["icon"]}/${category.properties["uuid"]}" />
418
419
420 </#if>
421 </#list>
422 </span>
423
424 </div>
425
426 </div>
427 </div>
428 </div>
429 </span>
430 </div>
431 </div>
432 <a aria-labelledby="${eventoRelacionado.getCalendarBookingId()}" href="${eventoURL}"></a>
433 </div>
434 </div>
435 </#if>
436 <#assign contadorRelacionados++ />
437 </#if>
438 </#list>
439 </div>
440 </div>
441 </div>
442 </#if>
443 </div>
444
445 <script type="text/javascript">
446 var saveAs=saveAs||function(e){"use strict";if(typeof e==="undefined"||typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var t=e.document,n=function(){return e.URL||e.webkitURL||e},r=t.createElementNS("http://www.w3.org/1999/xhtml","a"),o="download"in r,a=function(e){var t=new MouseEvent("click");e.dispatchEvent(t)},i=/constructor/i.test(e.HTMLElement)||e.safari,f=/CriOS\/[\d]+/.test(navigator.userAgent),u=function(t){(e.setImmediate||e.setTimeout)(function(){throw t},0)},s="application/octet-stream",d=1e3*40,c=function(e){var t=function(){if(typeof e==="string"){n().revokeObjectURL(e)}else{e.remove()}};setTimeout(t,d)},l=function(e,t,n){t=[].concat(t);var r=t.length;while(r--){var o=e["on"+t[r]];if(typeof o==="function"){try{o.call(e,n||e)}catch(a){u(a)}}}},p=function(e){if(/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)){return new Blob([String.fromCharCode(65279),e],{type:e.type})}return e},v=function(t,u,d){if(!d){t=p(t)}var v=this,w=t.type,m=w===s,y,h=function(){l(v,"writestart progress write writeend".split(" "))},S=function(){if((f||m&&i)&&e.FileReader){var r=new FileReader;r.onloadend=function(){var t=f?r.result:r.result.replace(/^data:[^;]*;/,"data:attachment/file;");var n=e.open(t,"_blank");if(!n)e.location.href=t;t=undefined;v.readyState=v.DONE;h()};r.readAsDataURL(t);v.readyState=v.INIT;return}if(!y){y=n().createObjectURL(t)}if(m){e.location.href=y}else{var o=e.open(y,"_blank");if(!o){e.location.href=y}}v.readyState=v.DONE;h();c(y)};v.readyState=v.INIT;if(o){y=n().createObjectURL(t);setTimeout(function(){r.href=y;r.download=u;a(r);h();c(y);v.readyState=v.DONE});return}S()},w=v.prototype,m=function(e,t,n){return new v(e,t||e.name||"download",n)};if(typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob){return function(e,t,n){t=t||e.name||"download";if(!n){e=p(e)}return navigator.msSaveOrOpenBlob(e,t)}}w.abort=function(){};w.readyState=w.INIT=0;w.WRITING=1;w.DONE=2;w.error=w.onwritestart=w.onprogress=w.onwrite=w.onabort=w.onerror=w.onwriteend=null;return m}(typeof self!=="undefined"&&self||typeof window!=="undefined"&&window||this.content);if(typeof module!=="undefined"&&module.exports){module.exports.saveAs=saveAs}else if(typeof define!=="undefined"&&define!==null&&define.amd!==null){define("FileSaver.js",function(){return saveAs})}
447 var ics=function(e,t){"use strict";{if(!(navigator.userAgent.indexOf("MSIE")>-1&&-1==navigator.userAgent.indexOf("MSIE 10"))){void 0===e&&(e="default"),void 0===t&&(t="Calendar");var r=-1!==navigator.appVersion.indexOf("Win")?"\r\n":"\n",n=[],i=["BEGIN:VCALENDAR","PRODID:"+t,"VERSION:2.0"].join(r),o=r+"END:VCALENDAR",a=["SU","MO","TU","WE","TH","FR","SA"];return{events:function(){return n},calendar:function(){return i+r+n.join(r)+o},addEvent:function(t,i,o,l,u,s){if(void 0===t||void 0===i||void 0===o||void 0===l||void 0===u)return!1;if(s&&!s.rrule){if("YEARLY"!==s.freq&&"MONTHLY"!==s.freq&&"WEEKLY"!==s.freq&&"DAILY"!==s.freq)throw"Recurrence rrule frequency must be provided and be one of the following: 'YEARLY', 'MONTHLY', 'WEEKLY', or 'DAILY'";if(s.until&&isNaN(Date.parse(s.until)))throw"Recurrence rrule 'until' must be a valid date string";if(s.interval&&isNaN(parseInt(s.interval)))throw"Recurrence rrule 'interval' must be an integer";if(s.count&&isNaN(parseInt(s.count)))throw"Recurrence rrule 'count' must be an integer";if(void 0!==s.byday){if("[object Array]"!==Object.prototype.toString.call(s.byday))throw"Recurrence rrule 'byday' must be an array";if(s.byday.length>7)throw"Recurrence rrule 'byday' array must not be longer than the 7 days in a week";s.byday=s.byday.filter(function(e,t){return s.byday.indexOf(e)==t});for(var c in s.byday)if(a.indexOf(s.byday[c])<0)throw"Recurrence rrule 'byday' values must include only the following: 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'"}}var g=new Date(l),d=new Date(u),f=new Date,S=("0000"+g.getFullYear().toString()).slice(-4),E=("00"+(g.getMonth()+1).toString()).slice(-2),v=("00"+g.getDate().toString()).slice(-2),y=("00"+g.getHours().toString()).slice(-2),A=("00"+g.getMinutes().toString()).slice(-2),T=("00"+g.getSeconds().toString()).slice(-2),b=("0000"+d.getFullYear().toString()).slice(-4),D=("00"+(d.getMonth()+1).toString()).slice(-2),N=("00"+d.getDate().toString()).slice(-2),h=("00"+d.getHours().toString()).slice(-2),I=("00"+d.getMinutes().toString()).slice(-2),R=("00"+d.getMinutes().toString()).slice(-2),M=("0000"+f.getFullYear().toString()).slice(-4),w=("00"+(f.getMonth()+1).toString()).slice(-2),L=("00"+f.getDate().toString()).slice(-2),O=("00"+f.getHours().toString()).slice(-2),p=("00"+f.getMinutes().toString()).slice(-2),Y=("00"+f.getMinutes().toString()).slice(-2),U="",V="";y+A+T+h+I+R!=0&&(U="T"+y+A+T,V="T"+h+I+R);var B,C=S+E+v+U,j=b+D+N+V,m=M+w+L+("T"+O+p+Y);if(s)if(s.rrule)B=s.rrule;else{if(B="rrule:FREQ="+s.freq,s.until){var x=new Date(Date.parse(s.until)).toISOString();B+=";UNTIL="+x.substring(0,x.length-13).replace(/[-]/g,"")+"000000Z"}s.interval&&(B+=";INTERVAL="+s.interval),s.count&&(B+=";COUNT="+s.count),s.byday&&s.byday.length>0&&(B+=";BYDAY="+s.byday.join(","))}(new Date).toISOString();var H=["BEGIN:VEVENT","UID:"+n.length+"@"+e,"CLASS:PUBLIC","DESCRIPTION:"+i,"DTSTAMP;VALUE=DATE-TIME:"+m,"DTSTART;VALUE=DATE-TIME:"+C,"DTEND;VALUE=DATE-TIME:"+j,"LOCATION:"+o,"SUMMARY;LANGUAGE=en-us:"+t,"TRANSP:TRANSPARENT","END:VEVENT"];return B&&H.splice(4,0,B),H=H.join(r),n.push(H),H},download:function(e,t){if(n.length<1)return!1;t=void 0!==t?t:".ics",e=void 0!==e?e:"calendar";var a,l=i+r+n.join(r)+o;if(-1===navigator.userAgent.indexOf("MSIE 10"))a=new Blob([l]);else{var u=new BlobBuilder;u.append(l),a=u.getBlob("text/x-vCalendar;charset="+document.characterSet)}return saveAs(a,e+t),l},build:function(){return!(n.length<1)&&i+r+n.join(r)+o}}}console.log("Unsupported Browser")}};
448 </script>
449
450 <script type="text/javascript">
451 cal_event = ics();
452 var descripcion=`${evento.descripcion?replace("\n", "")?replace("\t", "")?replace('<[^>]+>','','r')?trim}`;
453 <#assign startDateArr=startDate?split("/") />
454 <#assign endDateArr=evento.getEndDate()?split("/") />
455 var startDate="${startDateArr[1]}/${startDateArr[0]}/${startDateArr[2]}";
456 var endDate="${endDateArr[1]}/${endDateArr[0]}/${endDateArr[2]}";
457 <#assign direccion="" />
458 <#if evento.direccion?has_content >
459 <#assign direccion=direccion+evento.direccion />
460 </#if>
461 <#if evento.direccion?has_content && evento.localizacion?has_content>
462 <#assign direccion=direccion+"/" />
463 </#if>
464 <#if evento.localizacion?has_content >
465 <#assign direccion=direccion+evento.localizacion />
466 </#if>
467
468 cal_event.addEvent(
469 '${evento.title?replace('<[^>]+>','','r')?replace('\'','"')}',
470 descripcion,
471 '${direccion}',
472 startDate+' ${evento.getStartOnlyTime()}',
473 endDate+' ${evento.getEndOnlyTime()}');
474
475 document.getElementById("add-calendar").addEventListener("click", function() {
476 cal_event.download('${evento.title?replace('<[^>]+>','','r')?replace('\'','"')}');
477 });
478
479 </script>
480
481 <script>
482 $(document).ready(function() {
483 var canonicalUrlParameters = "";
484 var currentUrl = window.location.href;
485 var urlParams = new URLSearchParams(window.location.search);
486 urlParams.forEach(function(value, key) {
487 if (""==canonicalUrlParameters) {
488 canonicalUrlParameters = "?";
489 } else {
490 canonicalUrlParameters += "&";
491 }
492 canonicalUrlParameters += key + "=" + value;
493 });
494
495 // Obtener el <link rel="canonical">
496 var canonicalLink = $('link[rel="canonical"]');
497 canonicalLink.attr('href',canonicalLink.attr('href') + canonicalUrlParameters);
498
499 // Obtener todos los <link rel="alternate">
500 $('link[rel="alternate"]').each(function() {
501 $(this).attr('href',$(this).attr('href') + canonicalUrlParameters);
502 });
503 });
504 </script>
505</#if>






