Se ha producido un error al procesar la plantilla.
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@5565abba"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign startDate_DateObj = dateUtil... [in template "20096#20122#8051391" at line 526, column 25]
----
1<!--AECID-CC-Publicador-Detalle-Noticias-->
2
3<style>
4 /**********************/
5 /* Estilos de las OCE */
6 /**********************/
7
8 .aecid-detalle a {
9 color: var(--brand-color-1);
10 }
11
12 .aecid-detalle a:hover,
13 .aecid-detalle .share-option:hover {
14 opacity: .5;
15 }
16
17 .aecid-detalle h2 {
18 color: var(--brand-color-1);
19 margin-bottom: 20px;
20 font-size: 24px;
21 }
22
23 .separador {
24 color: #000;
25 }
26
27 .fecha {
28 font-weight: bold;
29 }
30
31 .categoria {
32 color: #6f6f6f;
33 font-size: 0.85em;
34 text-transform: uppercase;
35 }
36
37 .resumen {
38 color: #6f6f6f;
39 font-size: 0.9em;
40 }
41
42 .aecid-detalle iframe {
43 width: 100%;
44 height: 30em;
45 }
46
47 .contenido {
48 font-family: Arial;
49 }
50
51 .contenido img {
52 margin-left: 0 !important;
53 max-width: 100% !important;
54 height: auto;
55 }
56
57 .pieFoto {
58 font-size: 14px;
59 }
60
61 .botonRRSS {
62 display: inline-block;
63 color: #fff;
64 vertical-align: middle;
65 cursor: pointer;
66 -webkit-user-select: none;
67 -moz-user-select: none;
68 user-select: none;
69 background-color: transparent;
70 border: 1px solid transparent;
71 padding: 0.375rem 0.75rem;
72 border-radius: 0.25rem;
73 transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
74 }
75
76 .share-option {
77 background-color: transparent;
78 border: none;
79 padding: 0;
80 }
81
82 .facebook {
83 background-color: #3B5998;
84 }
85
86 .fb-xfbml-parse-ignore {
87 background-color: transparent;
88 border: none;
89 }
90
91 .fb-xfbml-parse-ignore:hover {
92 opacity: .5;
93 }
94
95 .twitter {
96 background-color: #1D9BF0;
97 }
98
99 .mainImg {
100 max-height: 21rem;
101 object-fit: cover;
102 width: auto;
103 max-width: 100%;
104 }
105
106 @media screen and (max-width: 576px) {
107 .aecid-noticia {
108 padding-left: 10px;
109 padding-right: 10px;
110 }
111 }
112
113 /*************************************/
114 /* Estilos de los Centros Culturales */
115 /*************************************/
116 .detalle-noticia img {
117 max-width: 100%;
118 }
119 .detalle-noticia h2 {
120 font-size: 2.167rem;
121 }
122 .estado {
123 -webkit-border-radius: 10px;
124 -moz-border-radius: 10px;
125 border-radius: 10px;
126 padding: .28rem .556rem;
127 display: block;
128 width: fit-content;
129 min-width: 7.4rem;
130 text-align: center;
131 }
132 .estado.neutro {
133 background-color: var(--gris-fondo);
134 }
135 .estado.verde {
136 background-color: #a4cb23;
137 color:#ffffff;
138 }
139 .estado.azul {
140 background-color: #4fc0fd;
141 color:#ffffff;
142 }
143 .estado.naranja {
144 background-color: #f39918;
145 color:#ffffff;
146 }
147 .estado.amarillo {
148 background-color: #feb71b;
149 color:#ffffff;
150 }
151 .estado.rojo {
152 background-color: #de0032;
153 color:#ffffff;
154 }
155 .estado.morado {
156 background-color: #540081;
157 color:#ffffff;
158 }
159
160 .estado.Accesibilidad {background-color: #09861e; color:#ffffff;}
161 .estado.Artes {background-color: #f5bce9; color:#ffffff;}
162 .estado.Ciencia {background-color: #034ea2; color:#ffffff;}
163 .estado.Cine {background-color: #540081; color:#ffffff;}
164 .estado.Ciudadania {background-color: #33b6ba; color:#ffffff;}
165 .estado.Cultura {background-color: #7d2721; color:#ffffff;}
166 .estado.Debate {background-color: #8f98dc; color:#ffffff;}
167 .estado.Diversidad {background-color: #ca09f1; color:#ffffff;}
168 .estado.Escenicas {background-color: #f5c109; color:#ffffff;}
169 .estado.Examenes {background-color: #ec0909; color:#ffffff;}
170 .estado.Exposiciones {background-color: #000000; color:#ffffff;}
171 .estado.Formacion {background-color: #e01451; color:#ffffff;}
172 .estado.Infantil {background-color: #a4cb22; color:#ffffff;}
173 .estado.Letras {background-color: #f39918; color:#ffffff;}
174 .estado.Mediacion {background-color: #e5de8a; color:#ffffff;}
175 .estado.Medioambiente {background-color: #3ec11a; color:#ffffff;}
176 .estado.Musica {background-color: #4fc0fd; color:#ffffff;}
177 .estado.Patrimonio {background-color: #d12929; color:#ffffff;}
178 .estado.Radio {background-color: #f462d4; color:#ffffff;}
179
180</style>
181
182
183<#assign myParamValue = request.getParameter("articulo")>
184<#assign grupostr = request.getParameter("sitio")>
185<#assign grupolong = grupostr?number >
186
187<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
188<#assign journalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService") />
189<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
190<#assign articleId = request.getParameter("articulo")>
191<#assign article = journalArticleLocalService.getArticle(grupolong, articleId)>
192<#assign articleResource = journalArticleResourceLocalService.getArticleResource(article.getResourcePrimKey())>
193<#assign articleResourcePK = articleResource.getPrimaryKey()>
194<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
195<#assign assetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")>
196<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", articleResourcePK) />
197<#assign assetEntryId = assetEntry.getEntryId() />
198<#assign groupLocalService = staticUtil["com.liferay.portal.kernel.service.GroupLocalServiceUtil"]>
199<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
200
201<!-- Funciones -->
202<#function getJournalArticleRootElement journal>
203 <#attempt>
204 <#if journal?has_content>
205 <#local journalLocaleContent = journal.getContentByLocale(locale.toString()) />
206 <#local journalContentXml = saxReaderUtil.read(journalLocaleContent) />
207 <#local rootElementContent = journalContentXml.getRootElement() />
208 <#if rootElementContent?? && rootElementContent?has_content>
209 <#return rootElementContent />
210 </#if>
211 </#if>
212 <#recover >
213 </#attempt>
214 <#return "" />
215</#function>
216
217<#function getXmlTextElement rootElementContent fieldReference>
218 <#attempt>
219 <#local xPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='" + fieldReference + "']") />
220 <#local element = xPathSelector.selectSingleNode(rootElementContent) />
221 <#return element.getStringValue()?trim />
222 <#recover >
223 </#attempt>
224 <#return "" />
225</#function>
226
227<#function getXmlTextElement rootElementContent fieldReference>
228 <#attempt>
229 <#local xPathSelector = saxReaderUtil.createXPath("dynamic-element[@field-reference='" + fieldReference + "']") />
230 <#local element = xPathSelector.selectSingleNode(rootElementContent) />
231 <#return element.getStringValue()?trim />
232 <#recover >
233 </#attempt>
234 <#return "" />
235</#function>
236
237<#function getJournalArticle resourcePrimKey>
238 <#attempt>
239 <#local journal = journalArticleLocalService.getLatestArticle(resourcePrimKey, 0) />
240 <#return journal />
241 <#recover >
242 </#attempt>
243 <#return "" />
244</#function>
245
246<#function getJournalArticleByJsonElement elementJson>
247 <#attempt>
248 <#local resourcePrimKey = elementJson.classPK?number />
249 <#local journal = getJournalArticle(resourcePrimKey) />
250 <#return journal />
251 <#recover >
252 </#attempt>
253 <#return "" />
254</#function>
255
256<#function obtenerCamposRepetidos documentRoot fieldReference >
257 <#return documentRoot.selectNodes("dynamic-element[@field-reference='" + fieldReference + "']")/>
258</#function>
259
260<#function getFriendlyUrlJournal journal>
261 <#return "/-/" + journal.getUrlTitle() />
262</#function>
263
264<#function removeUrlParams url>
265 <#if url?contains("?") >
266 <#return url?substring(0, url?index_of("?")) />
267 </#if>
268 <#return url/>
269</#function>
270
271<#macro fechaPublicacionJournal pattern="MMMM '|' dd '|' yyyy" upperCase=true>
272 <#local date = getJournalArticleDisplayDate(article) />
273 <#if date?has_content>
274 <#local dateFormat = formatDate(date, pattern) />
275 ${upperCase?then(dateFormat?upper_case, dateFormat)}
276 </#if>
277</#macro>
278
279<#function getJournalArticleDisplayDate articulo>
280 <#local journalArticleDisplayDateF = "">
281 <#attempt>
282 <#local journalArticleDisplayDate = articulo.getDisplayDate() />
283 <#if journalArticleDisplayDate?has_content>
284 <#local journalArticleDisplayDateF = journalArticleDisplayDate />
285 <#local date = dateUtil.parseDate("EEE, dd MMM yyyy HH:mm:ss Z", journalArticleDisplayDate, localeUtil.getDefault()) />
286 <#local journalArticleDisplayDateF = date />
287 </#if>
288 <#recover>
289 </#attempt>
290 <#return journalArticleDisplayDateF />
291</#function>
292
293<#function formatDate date datePattern="EEEE, dd MMMM yyyy HH:mm">
294 <#attempt>
295 <#local timeZoneMadrid = timeZoneUtil.getTimeZone("Europe/Madrid") />
296 <#local dateFormat = dateUtil.getDate(date, datePattern, locale, timeZoneMadrid) />
297 <#return dateFormat />
298 <#recover>
299 </#attempt>
300 <#return "" />
301</#function>
302
303<#assign currentURL=themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
304<#if (serviceLocator.findService("es.aecid.shorturl.service.AecidShortUrlService"))??>
305 <#assign shortUrlService=serviceLocator.findService("es.aecid.shorturl.service.AecidShortUrlService") />
306 <#assign currentShortURL=themeDisplay.getPortalURL() + '/' + shortUrlService.getShortUrl(currentURL, companyId, groupId, themeDisplay.getUserId()) />
307<#else>
308 <#assign currentShortURL=currentURL />
309</#if>
310
311
312<!-- Primero se comprueba que tipo de contenido, es decir, si el contenido es de un centro cultural o si viene de los centros de OCE -->
313<#assign site = groupLocalService.getGroup(grupolong)>
314<#assign NombreSite = site.getDescriptiveName(themeDisplay.getLocale())>
315<!-- <p>nombre del site sin tocar ${NombreSite} </p>-->
316<#assign NombreSite = NombreSite?replace(" ", "")>
317<#assign NombreSite = NombreSite?split("-")[0]>
318
319<!--<p> Nombre cortado ${NombreSite} </p>-->
320
321<!-- El id de las categorías de Categorias CC -->
322<!-- <#assign vocabularyId = 1682640 /> --> <!-- PRE -->
323<#assign vocabularyId = 7623391 /> <!-- PRO -->
324
325<!-- Se obtiene el id de la estructura del contenido -->
326
327<!------------------------------------->
328<!-- obtener los datos de los campos -->
329<!------------------------------------->
330<#if NombreSite == 'CCE'>
331 <#assign journalRootElementCC = getJournalArticleRootElement(article) />
332 <#assign URLPortal = themeDisplay.getURLPortal() />
333 <#assign URLCurrent = themeDisplay.getURLCurrent() />
334 <#assign URLComplete = URLPortal + URLCurrent />
335 <#assign URLCompleteNoParams = removeUrlParams(URLComplete) />
336 <#assign twitterAccount = "AECID-CC-Argentina" />
337<#else>
338 <#assign journalRootElement = getJournalArticleRootElement(article) />
339</#if>
340
341<#assign contenido = article.getContent() />
342
343
344<#if journalRootElementCC?has_content>
345 <#assign ImagenCC = getXmlTextElement(journalRootElementCC, "image") />
346 <#assign SubtituloCC = getXmlTextElement(journalRootElementCC, "Subtitulo") />
347 <#assign ContenidoCC = getXmlTextElement(journalRootElementCC, "mainText") />
348 <#assign LugarCC = getXmlTextElement(journalRootElementCC, "Lugar") />
349 <#assign CupoCC = getXmlTextElement(journalRootElementCC, "Cupo") />
350 <#assign FechaDesdeCC = getXmlTextElement(journalRootElementCC, "startDate") />
351 <#assign FechaHastaCC = getXmlTextElement(journalRootElementCC, "endDate") />
352 <#assign AdmisionCC = getXmlTextElement(journalRootElementCC, "PublicacionDeAdmision") />
353 <#assign CierreCC = getXmlTextElement(journalRootElementCC, "CierreDeInscripciones") />
354 <#assign HorarioCC = getXmlTextElement(journalRootElementCC, "schedule") />
355 <#assign ColaboradorCC = getXmlTextElement(journalRootElementCC, "Colaborador") />
356 <#assign OrganizadorCC = getXmlTextElement(journalRootElementCC, "Organizador") />
357 <#assign PosterCC = getXmlTextElement(journalRootElementCC, "Poster") />
358 <#assign VideoCC = getXmlTextElement(journalRootElementCC, "VideoMP4") />
359</#if>
360
361
362<#if journalRootElement?has_content>
363 <#assign video = getXmlTextElement(journalRootElement, "video") />
364 <#assign Resumen = getXmlTextElement(journalRootElement, "resumen") />
365 <#assign Imagen = getXmlTextElement(journalRootElement, "image") />
366 <#assign Contenido = getXmlTextElement(journalRootElement, "content") />
367</#if>
368
369<#assign redirectUrl = paramUtil.getString(request, "redirect", "") />
370<a class="back-button" href="${redirectUrl}">
371 <img src="${themeDisplay.getPathThemeImages()}/abajo.svg" alt="">
372 <span>Atrás</span>
373</a>
374
375
376<!-- Si el contenido que se va a visualizar es de un site de Centro Cultural se pintara de la siguiente forma-->
377<#if NombreSite == 'CCE'>
378 <!-------------------------------------------------------------------------->
379 <!--- Se visualiza el contenido con el diseño de los Centros Culturales ---->
380 <!-------------------------------------------------------------------------->
381
382 <div class="container px-3 px-lg-0 detalle-noticia">
383 <div class="col-2-1-d">
384 <div class="col-izq">
385 <h1 class="tit-h3 txt-bold txt-primario mb-4">${article.getTitle(locale)}</h1>
386
387 <#assign jsonFactory = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactory")>
388 <#assign jsonObject = jsonFactory.createJSONObject(ImagenCC)>
389 <#assign urlImagen = jsonObject.getString("url")>
390 <#assign urlImagenAlt = jsonObject.getString("alt")>
391
392 <img class="rounded mb-3" alt="${urlImagenAlt}" src="${urlImagen}" />
393 <#if SubtituloCC??>
394 <h2 class="mt-2 tit-h3">${SubtituloCC}</h2>
395 </#if>
396
397 <#if ContenidoCC??>
398 <div class="col-content">
399 ${ContenidoCC}
400 </div>
401 </#if>
402
403 <!-- Visualiza el vídeo -->
404 <#assign PosterCCtxt = PosterCC?trim?replace("{", "")?replace("}", "")?trim>
405 <#assign VideoCCtxt = VideoCC?trim?replace("{", "")?replace("}", "")?trim>
406
407 <#if PosterCCtxt?? && PosterCCtxt?trim?has_content && PosterCCtxt?trim != "">
408 <#if VideoCCtxt?? && VideoCCtxt?trim?has_content && VideoCCtxt?trim != "" >
409 <!-- Imagen -->
410 <#assign jsonObject = jsonFactory.createJSONObject(PosterCC)>
411 <#assign urlImagenPoster = jsonObject.getString("url")>
412 <#assign urlImagenAltPoster = jsonObject.getString("alt")>
413 <!-- Vídeo -->
414 <#-- 1. Limpiar barras invertidas dobles -->
415 <#assign VideoCC = VideoCC?replace('\\\\', '') />
416
417 <#-- 2. Extraer groupId -->
418 <#assign VideoGroupID = VideoCC?replace('.*"groupId"\\s*:\\s*"([^"]+)".*', '$1', 'r') />
419
420 <#-- 3. Extraer uuid -->
421 <#assign Videouuid = VideoCC?replace('.*"uuid"\\s*:\\s*"([^"]+)".*', '$1', 'r') />
422
423 <#-- 4. Construir URL del video -->
424 <#assign URLVideo = "/documents/${VideoGroupID}/${Videouuid}" />
425
426 <#-- 6. Reproducir video -->
427 <div class="embed-responsive embed-responsive-16by9 bdr-radius">
428 <video controls="" poster="${urlImagenPoster}">
429 <source src="${URLVideo}" type="video/mp4" />
430 Tu navegador no soporta la etiqueta de vídeo.
431 </video>
432 </div>
433 </#if>
434 </#if>
435
436 </div>
437 <div class="col-der">
438 <dl>
439 <!-- Categoria -->
440
441
442 <#assign categoryIds = assetEntry.getCategoryIds() />
443 <#assign categories = [] />
444 <#list categoryIds as categoryId>
445 <#assign category = assetCategoryLocalService.fetchAssetCategory(categoryId) />
446 <#if category?? && category.getVocabularyId() == vocabularyId>
447 <#assign categories += [category] />
448 </#if>
449 </#list>
450
451 <#if categories?? && categories?has_content>
452 <dt class="tit-h5 txt-uppercase txt-medi mb-2">categoria</dt>
453 <#list categories as category>
454 <#assign categoriaFiltrada = category.getName() />
455 <!--<p>categoria - ${categoriaFiltrada}</p>-->
456
457 <#switch categoriaFiltrada>
458 <#case "Accesibilidad / Inclusión">
459 <dd class="txt-uppercase"><span class="estado Accesibilidad">${categoriaFiltrada}</span></dd>
460 <#break>
461 <#case "Artes Visuales">
462 <dd class="txt-uppercase"><span class="estado Artes">${categoriaFiltrada}</span></dd>
463 <#break>
464 <#case "Ciencia / Tecnología">
465 <dd class="txt-uppercase"><span class="estado Ciencia">${categoriaFiltrada}</span></dd>
466 <#break>
467 <#case "Cine / Audiovisual">
468 <dd class="txt-uppercase"><span class="estado Cine">${categoriaFiltrada}</span></dd>
469 <#break>
470 <#case "Ciudadanía / Comunidad">
471 <dd class="txt-uppercase"><span class="estado Ciudadania">${categoriaFiltrada}</span></dd>
472 <#break>
473 <#case "Cultura para el Desarrollo">
474 <dd class="txt-uppercase"><span class="estado Cultura">${categoriaFiltrada}</span></dd>
475 <#break>
476 <#case "Debate / Pensamiento">
477 <dd class="txt-uppercase"><span class="estado Debate">${categoriaFiltrada}</span></dd>
478 <#break>
479 <#case "Diversidad / Géneros">
480 <dd class="txt-uppercase"><span class="estado Diversidad">${categoriaFiltrada}</span></dd>
481 <#break>
482 <#case "Escénicas">
483 <dd class="txt-uppercase"><span class="estado Escenicas">${categoriaFiltrada}</span></dd>
484 <#break>
485 <#case "Exámenes de español">
486 <dd class="txt-uppercase"><span class="estado Examenes">${categoriaFiltrada}</span></dd>
487 <#break>
488 <#case "Exposiciones">
489 <dd class="txt-uppercase"><span class="estado Exposiciones">${categoriaFiltrada}</span></dd>
490 <#break>
491 <#case "Formación">
492 <dd class="txt-uppercase"><span class="estado Formacion">${categoriaFiltrada}</span></dd>
493 <#break>
494 <#case "Infantil / Juvenil">
495 <dd class="txt-uppercase"><span class="estado Infantil">${categoriaFiltrada}</span></dd>
496 <#break>
497 <#case "Letras">
498 <dd class="txt-uppercase"><span class="estado Letras">${categoriaFiltrada}</span></dd>
499 <#break>
500 <#case "Mediación">
501 <dd class="txt-uppercase"><span class="estado Mediacion">${categoriaFiltrada}</span></dd>
502 <#break>
503 <#case "Medioambiente / Sostenibilidad">
504 <dd class="txt-uppercase"><span class="estado Medioambiente">${categoriaFiltrada}</span></dd>
505 <#break>
506 <#case "Música / Sonido">
507 <dd class="txt-uppercase"><span class="estado Musica">${categoriaFiltrada}</span></dd>
508 <#break>
509 <#case "Patrimonio">
510 <dd class="txt-uppercase"><span class="estado Patrimonio">${categoriaFiltrada}</span></dd>
511 <#break>
512 <#case "Radio / Pódcast">
513 <dd class="txt-uppercase"><span class="estado Radio">${categoriaFiltrada}</span></dd>
514 <#break>
515 <#default>
516 <dd class="txt-uppercase"><span class="estado neutro">${categoriaFiltrada}</span></dd>
517 <#break>
518 </#switch>
519 </#list>
520 </#if>
521
522 <!-- Fecha desde/hasta -->
523 <#assign startDate_Data = getterUtil.getString(FechaDesdeCC)>
524 <#assign endDate_Data = getterUtil.getString(FechaHastaCC)>
525 <#if startDate_Data?? && endDate_Data??>
526 <#assign startDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", startDate_Data, locale)>
527 <#assign endDate_DateObj = dateUtil.parseDate("yyyy-MM-dd", endDate_Data, locale)>
528 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Fecha</dt>
529 <dd class="txt-uppercase">
530 <#if startDate_Data == endDate_Data>
531 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)}
532 <#else>
533 ${dateUtil.getDate(startDate_DateObj, "dd MMMM yyyy", locale)} - ${dateUtil.getDate(endDate_DateObj, "MMMM yyyy", locale)}
534 </#if>
535 </dd>
536 </#if>
537
538 <!-- Campo horario -->
539 <#if (schedule.getData())?? && (schedule.getData())?has_content>
540 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Horario</dt>
541 <dd class="txt-uppercase"><span class="estado-neutro">${schedule.getData()}</span></dd>
542 </#if>
543
544 <!-- Lugar -->
545 <#if LugarCC?? && LugarCC?has_content>
546 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Lugar</dt>
547 <#switch LugarCC>
548 <#case "Opción94049536">
549 <dd class="txt-uppercase"><span class="estado neutro">Presencial</span></dd>
550 <#break>
551 <#case "Opción97760043">
552 <dd class="txt-uppercase"><span class="estado neutro">Online</span></dd>
553 <#break>
554 <#case "Opción36010935">
555 <dd class="txt-uppercase"><span class="estado neutro">Fuera del Centro</span></dd>
556 <#break>
557 </#switch>
558 </#if>
559
560 <!-- Colaborador -->
561 <#if ColaboradorCC?? && ColaboradorCC?has_content>
562 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Colaborador</dt>
563 <dd class="txt-uppercase"><span class="estado-neutro">${ColaboradorCC}</span></dd>
564 </#if>
565
566 <!-- Cupo -->
567 <#if CupoCC?? && CupoCC?has_content>
568 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Cupo</dt>
569 <dd class="txt-uppercase">${CupoCC}</dd>
570 </#if>
571
572 <!-- Organizador -->
573 <#if OrganizadorCC?? && OrganizadorCC?has_content>
574 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Organizador</dt>
575 <dd class="txt-uppercase">${OrganizadorCC}</dd>
576 </#if>
577
578 <!-- Cierre de inscripciones -->
579 <#assign CierreDeInscripciones_Data = getterUtil.getString(CierreCC)?trim>
580 <#if CierreDeInscripciones_Data?has_content>
581 <#-- Intenta parsear solo si el valor tiene contenido y está en el formato correcto -->
582 <#assign CierreDeInscripciones_DateObj = dateUtil.parseDate("yyyy-MM-dd", CierreDeInscripciones_Data, locale)>
583 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Cierre de inscripciones</dt>
584 <dd class="txt-uppercase">${dateUtil.getDate(CierreDeInscripciones_DateObj, "dd 'DE' MMMM 'DE' yyyy", locale)}</dd>
585 </#if>
586
587 <!-- Publicacion de admision -->
588 <#assign PublicacionDeAdmision_Data = getterUtil.getString(AdmisionCC)>
589 <#if validator.isNotNull(PublicacionDeAdmision_Data)>
590 <#assign PublicacionDeAdmision_DateObj = dateUtil.parseDate("yyyy-MM-dd", PublicacionDeAdmision_Data, locale)>
591 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Publicacion de Admision</dt>
592 <dd class="txt-uppercase">${dateUtil.getDate(PublicacionDeAdmision_DateObj, "dd 'DE' MMMM 'DE' yyyy", locale)}</dd>
593 </#if>
594 </dl>
595 </div>
596 </div>
597 </div>
598
599<#else>
600 <div id="aecid-detalle-noticia" class="container p-0 aecid-detalle mt-5 mb-5">
601 <div class="row aecid-noticia px-3 px-md-0">
602 <!----------------------------------------------------------->
603 <!--- Se visualiza el contenido con el diseño de las OCE ---->
604 <!----------------------------------------------------------->
605 <div class="col-lg-6 col-12 row px-0">
606 <#assign jsonFactory = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactory")>
607 <#assign jsonObject = jsonFactory.createJSONObject(Imagen)>
608 <#assign urlImagen = jsonObject.getString("url")>
609 <#assign urlImagenAlt = jsonObject.getString("alt")>
610
611 <#assign ImagenRedes = "/documents/d/global/noticias-convocatoria">
612 <#if (video?has_content)>
613 <div class="col-12 p-0">
614 <div class="row justify-content-center">
615 <div class="col-12 p-0">
616 <#if video?contains("www.youtube.com/embed/")>
617 <iframe
618 title="Reproductor de vídeo YouTube" src="${video}" frameborder="0"
619 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
620 allowfullscreen>
621 </iframe>
622
623 <#elseif video?contains("www.youtube.com/") && video?split("/")?size gte 2>
624 <iframe title="Reproductor de vídeo YouTube"
625 src="https://www.youtube.com/embed/${video?split("/")[3]}"
626 frameborder="0"
627 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
628 allowfullscreen>
629 </iframe>
630
631 <#elseif video?contains("youtu.be")>
632 <a href="${friendlyURLs[themeDisplay.getLanguageId()]!""}" title="${languageUtil.get(locale, "lleva.a.pagina")} ${article.getTitle(locale)?truncate(100, '...')}">
633 <iframe tabindex="0" height="210px" title="Reproductor de vídeo YouTube"
634 src="https://www.youtube.com/embed/${video?split("/")[3]}?showinfo=0"
635 frameborder="0"
636 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
637 allowfullscreen>
638 </iframe>
639 </a>
640
641 <#elseif video?contains("vimeo") && video?split("/")?size gte 2>
642 <iframe title="Reproductor de vídeo Vimeo"
643 src="https://player.vimeo.com/video/${video?split("/")[3]}?"
644 frameborder="0" allow="autoplay; fullscreen; picture-in-picture"
645 allowfullscreen>
646 </iframe>
647 </#if> <!-- Asegura que este cierre esté presente -->
648 </div>
649 </div>
650 </div>
651 <#else>
652 <#assign jsonFactory = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactory")>
653 <#assign jsonObject = jsonFactory.createJSONObject(Imagen)>
654 <#assign urlImagen = jsonObject.getString("url")>
655 <#assign urlImagenAlt = jsonObject.getString("alt")>
656 <div class="col-12 p-0">
657 <#if urlImagen?has_content>
658 <img alt="${urlImagenAlt}" src="${urlImagen}" class="mainImg w-100" />
659 <p class="pieFoto"><em tabindex="0"><span class="sr-only">${languageUtil.get(locale, "pie.de.foto")}: </span>
660 ${urlImagenAlt}
661 </em></p>
662 <#assign ImagenRedes = jsonObject.getString("url")>
663 <#else>
664 <img alt="Logo de AECID" src="/documents/d/global/noticias-convocatoria" class="mainImg w-100" />
665 <#assign ImagenRedes = "/documents/d/global/noticias-convocatoria">
666 </#if>
667 </div>
668 </#if>
669 </div>
670 <div class="col-lg-6 col-12 pl-lg-5 px-0 flex-column justify-content-center">
671 <div class="p-0">
672 <h2 tabindex="0">${article.getTitle(locale)}</h2>
673 </div>
674 <div class="p-0">
675 <p class="fecha" tabindex="0"><@fechaPublicacionJournal pattern="dd/MM/yyyy - HH:mm" upperCase=false/></p>
676 </div>
677 <div class="p-0">
678 <p tabindex="0"><span class="sr-only">${languageUtil.get(locale, "categorias.de.la.noticia")}</span>
679 <span class="categoria">
680 <#if categories?has_content>
681 <#list categories as category>
682 <#assign
683 numIdCategoria=category.getTreePath()?substring(category.getTreePath()?last_index_of("/")
684 - 5 , category.getTreePath()?length - 1) />
685 <span>${category.getName()}</span>
686 <span class="separador">
687 ${category?has_next?then(' | ', '')}
688 </span>
689 </#list>
690 </#if>
691 </span>
692 </p>
693 </div>
694 <div class="p-0">
695 <p class="resumen" tabindex="0"><span class="sr-only"> ${languageUtil.get(locale, "resumen.de.la.noticia")} </span>
696 <#if Resumen??>
697 ${Resumen}
698 </#if>
699 </p>
700 </div>
701 </div>
702
703 <div class="col-12 p-0">
704 <hr />
705 </div>
706 <div class="col-lg-10 col-12 p-0 ">
707 <div class="contenido" tabindex="0"><span class="sr-only">${languageUtil.get(locale, "contenido.de.la.noticia")} </span>
708 <#if Contenido??>
709 ${Contenido}
710 </#if>
711 </div>
712 </div>
713
714 <div class="col-2 d-lg-block d-none"></div>
715 <@liferay_util["html-top"]
716 outputKey="htmltop">
717 <!-- METAS RRSS -->
718 <meta property="og:url" content="${currentShortURL}" />
719 <meta property="og:site_name" content="SiteName" />
720 <meta property="og:type" content="website" />
721 <meta property="og:locale" content="gl_ES" />
722 <meta property="og:locale:alternate" content="gl_ES" />
723 <meta name="twitter:card" content="summary_large_image" />
724 <meta property="og:title" content="${article.getTitle(locale)}" />
725 <meta name="twitter:title" content="${article.getTitle(locale)}" />
726
727 <#if Resumen != "">
728 <meta property="og:description" content="${htmlUtil.stripHtml(Resumen)?replace("\"", "'" )}" />
729 <meta name="twitter:description" content="${htmlUtil.stripHtml(Resumen)?replace("\"", "'" )}" />
730 <#else>
731 <meta property="og:description" content="${article.getTitle(locale)}" />
732 <meta name="twitter:description" content="${article.getTitle(locale)}" />
733 </#if>
734
735 <meta property="og:image" content="${themeDisplay.getPortalURL()+ImagenRedes}" />
736 <meta property="og:image:secure_url" content="${themeDisplay.getPortalURL()+ImagenRedes}" />
737 <meta name="twitter:image" content="${themeDisplay.getPortalURL()+ImagenRedes}" />
738 <meta property="og:image:alt" content="Alt img og" />
739 <meta property="fb:app_id" content="???">
740 <meta property="fb:admins" content="https://www.facebook.com/Aecid.es">
741 <meta name="twitter:domain" content="${currentShortURL}" />
742 <meta name="twitter:site" content="@AECID_es" />
743 </@>
744 <div class="row col-12 p-0">
745 <!-- button visible facebook -->
746 <div class="col-flex mr-2">
747 <button class="fb-xfbml-parse-ignore" onClick="shareFacebook();" target="_blank" class="share-option"
748 index-social-media-list="0">
749 <div class="botonRRSS facebook">
750 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
751 class="bi bi-facebook" viewBox="0 0 16 16">
752 <path
753 d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951z" />
754 </svg>
755 </div>
756 </button>
757 </div>
758 <!-- button visible twitter -->
759 <div class="col-flex mr-2">
760 <a href="https://twitter.com/intent/tweet?text=Mira esta noticia: ${article.getTitle(locale)} ${currentShortURL}"
761 class="twitter-share share-option no-ico" target="_blank" index-social-media-list="1">
762 <div class="botonRRSS twitter">
763 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
764 class="bi bi-twitter" viewBox="0 0 16 16">
765 <path
766 d="M5.026 15c6.038 0 9.341-5.003 9.341-9.334 0-.14 0-.282-.006-.422A6.685 6.685 0 0 0 16 3.542a6.658 6.658 0 0 1-1.889.518 3.301 3.301 0 0 0 1.447-1.817 6.533 6.533 0 0 1-2.087.793A3.286 3.286 0 0 0 7.875 6.03a9.325 9.325 0 0 1-6.767-3.429 3.289 3.289 0 0 0 1.018 4.382A3.323 3.323 0 0 1 .64 6.575v.045a3.288 3.288 0 0 0 2.632 3.218 3.203 3.203 0 0 1-.865.115 3.23 3.23 0 0 1-.614-.057 3.283 3.283 0 0 0 3.067 2.277A6.588 6.588 0 0 1 .78 13.58a6.32 6.32 0 0 1-.78-.045A9.344 9.344 0 0 0 5.026 15z" />
767 </svg>
768 </div>
769 </a>
770 </div>
771 </div>
772 </div>
773 </div>
774</#if>
775
776<#macro compartirRedesSocialesImprimir url=URLCompleteNoParams text="" twitter=true facebook=true>
777
778 <#local urlEncoded = urlCodec.encodeURL(url) />
779
780 <#local textF= text />
781 <#if text?has_content >
782 <#local textF= htmlParserUtil.extractText(text)?trim />
783 </#if>
784
785 <!-- TWITTER -->
786 <#if twitter>
787 <#local twitterShareURL = "https://x.com/intent/tweet?url=" + urlEncoded />
788 <#if textF?has_content >
789 <#local textTwitter = textF?truncate(280, '...') />
790 <#local textTwitter = urlCodec.encodeURL(textTwitter) />
791 <#local twitterShareURL = twitterShareURL + "&text=" + textTwitter + "%0a%0a" />
792 </#if>
793 <#local twitterShareURL = twitterShareURL + "&via=" + twitterAccount />
794 </#if>
795 <#-- // -->
796
797 <#-- FACEBOOK -->
798 <#if facebook>
799 <#local facebookShareURL = "https://www.facebook.com/sharer/sharer.php?u=" + urlEncoded />
800 <#if textF?has_content >
801 <#local textFacebook = urlCodec.encodeURL(textF) />
802 <#local facebookShareURL = facebookShareURL + ""e=" + textFacebook />
803 </#if>
804 </#if>
805 <#-- // -->
806
807 <dt class="tit-h5 txt-uppercase txt-medi mb-2">Compartir</dt>
808 <dd>
809 <#if facebookShareURL?has_content >
810 <a class="no-ico" href="${facebookShareURL}" target="_blank" title="Compartir en facebook">
811 <img alt="icono facebook" src="/o/aecid-oces-theme/images/ico-facebook.svg" /></a>
812 </#if>
813
814 <#if twitterShareURL?has_content >
815 <a class="ml-2 no-ico" href="${twitterShareURL}" target="_blank" title="Compartir en X">
816 <img alt="icono X" src="/o/aecid-oces-theme/images/ico-x.svg" /></a>
817 </#if>
818 </dd>
819</#macro>


