Convocatoria de Estabilización - 12/12/2022
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> contenidoRelacionadoUrl?split('/w/')[1] [in template "20099#20125#930868" at line 751, column 101] ---- Tip: It's the final [] step that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign contenidoRelacionadoUrl = cur... [in template "20099#20125#930868" at line 751, column 41] ----
1<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
2<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
3<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
4<#assign assetPublisherHelper = serviceLocator.findService("com.liferay.asset.publisher.util.AssetPublisherHelper") />
5<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
6<#assign dlFileVersionPreviewLocalService = serviceLocator.findService("com.liferay.document.library.service.DLFileVersionPreviewLocalService") />
7<#assign dlFileVersionService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileVersionService") />
8<#assign assetLinkFilterService = serviceLocator.findService("com.abaco.portales.related.service.RelatedAssetLinkFilterService") />
9
10<#-- Get current entry assets -->
11<#assign currentArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) />
12<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey() />
13<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
14<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
15<#assign currentArticleRelatedLinks = assetLinkFilterService.getOrderedListByPublishDate(currentArticleAssetEntryId) />
16
17<#assign backURL = (request.getParameter("redirect"))!"" />
18
19<#assign style_imagen_fondo = "">
20<#if (imagenes.imagenes_imagen_fondo.getData())?? && imagenes.imagenes_imagen_fondo.getData() != "">
21 <#assign style_imagen_fondo = "background-image: url('${imagenes.imagenes_imagen_fondo.getData()}')">
22</#if>
23
24<style>
25 ::-moz-selection {
26 background:rgba(8,112,33,0.5);
27 color:white
28 }
29 ::selection {
30 background:rgba(8,112,33,0.5);
31 color:white
32 }
33
34 #wrapper .procedimiento-hito__title-disabled {
35 font-weight: 400;
36 font-size: initial;
37 }
38 #wrapper .procedimiento-hito__description {
39 font-size: initial;
40 }
41 #wrapper .documentos-entries {
42 flex-direction: column;
43 align-items: flex-start;
44 }
45 #wrapper .documentos-entries .documento-entrie {
46 width: 100%;
47 }
48 #wrapper .documentos-entries ul {
49 list-style: none;
50 display: flex;
51 flex-direction: row;
52 justify-content: flex-start;
53 flex-wrap: wrap;
54 gap: 5px;
55 padding-left: 0;
56 }
57 #wrapper .documentos-entries ul>li {
58 width: auto;
59 min-width: 33%;
60 }
61 @media (max-width: 776px) {
62 #wrapper .documentos-entries ul {
63 flex-direction: column;
64 }
65 }
66 #wrapper .documentos-entries .documento-entry {
67 width: 100%
68 }
69 #wrapper .procedimiento-enlaces li a[target="_blank"] {
70 background: url("https://www.juntadeandalucia.es/educacion/portals/abaco-juntav2-theme/images/subsite/icons/icon_external_link.png") no-repeat scroll 100% center/14px transparent;
71 padding-right: 25px !important;
72 }
73 #wrapper .procedimiento-hito__title:hover {
74 color: var(--secondary-color);
75 }
76
77 #the-canvas {
78 border: 1px solid black;
79 direction: ltr;
80 }
81 .related-content__container {
82 display: none;
83 }
84</style>
85<script>
86 function actualizarMenuAsideProcedimiento() {
87 var procedimientoMain = $('.procedimiento-main');
88 var procedimientoAside = $('.procedimiento-aside');
89 var links = procedimientoAside.find('a');
90
91 procedimientoMain.find('div[id]').each(function() {
92 var divTop = $(this).offset().top - 200;
93 var divBottom = divTop + $(this).outerHeight();
94 var scrollTop = $(window).scrollTop();
95
96 if (scrollTop >= divTop && scrollTop < divBottom) {
97 links.closest('li').removeClass('elem-active');
98 var href = '#' + $(this).attr('id');
99 procedimientoAside.find('a[href="' + href + '"]').closest('li').addClass('elem-active');
100 }
101 });
102 }
103 function handleResizeProcedimiento() {
104 var menu = $('.procedimiento-aside .menu');
105 var scrollTop = $(window).scrollTop();
106 var procedimientoMainTop = $('.procedimiento-main').offset().top;
107
108 if ($(window).width() <= 992 || scrollTop <= procedimientoMainTop) {
109 menu.css({
110 'position': 'relative',
111 'top': '0',
112 'width': 'auto'
113 });
114 } else {
115 var aside = $('.procedimiento-aside');
116 var asideTop = aside.offset().top;
117 var asideBottom = asideTop + aside.outerHeight();
118 var asideWidth = aside.width();
119 var bannerv6Height = $('#bannerv6').outerHeight();
120 var navbarTopHeight = $('#navbar-top').outerHeight();
121 var menuHeight = menu.outerHeight();
122 var maxTop = asideBottom - menuHeight - bannerv6Height - navbarTopHeight + 140;
123
124 if (scrollTop >= asideTop && scrollTop <= maxTop) {
125 menu.css({
126 'position': 'fixed',
127 'top': '140px',
128 'width': asideWidth + 'px'
129 });
130 } else if (scrollTop > maxTop) {
131 var newTop = maxTop - scrollTop;
132 menu.css({
133 'position': 'fixed',
134 'top': newTop + 'px',
135 'width': asideWidth + 'px'
136 });
137 }
138 }
139 }
140 function handleScrollProcedimiento() {
141 var scrollTop = $(window).scrollTop();
142 var aside = $('.procedimiento-aside');
143 var menu = $('.procedimiento-aside .menu');
144 var asideTop = aside.offset().top;
145 var asideBottom = asideTop + aside.outerHeight();
146 var asideWidth = aside.width();
147 var bannerv6Height = $('#bannerv6').outerHeight();
148 var navbarTopHeight = $('#navbar-top').outerHeight();
149 var menuHeight = menu.outerHeight();
150 var maxTop = asideBottom - menuHeight - bannerv6Height - navbarTopHeight + 140;
151 var newTop = maxTop - scrollTop;
152
153 if ($(window).width() > 992) {
154 if (scrollTop >= asideTop && scrollTop <= maxTop) {
155 menu.css({
156 'position': 'fixed',
157 'top': '140px',
158 'width': asideWidth + 'px'
159 });
160 } else if (scrollTop > maxTop) {
161 menu.css({
162 'position': 'fixed',
163 'top': newTop + 'px',
164 'width': asideWidth + 'px'
165 });
166 } else {
167 menu.css({
168 'position': 'relative',
169 'top': '0',
170 'width': 'auto'
171 });
172 }
173 }
174 }
175
176 $(window).on('scroll', actualizarMenuAsideProcedimiento);
177 $(window).on('resize', handleResizeProcedimiento);
178 $(window).on('scroll', handleScrollProcedimiento);
179 $(document).ready(function() {
180 function scrollToMenuAsideProcedimiento(event) {
181 event.preventDefault(); // Prevenir el comportamiento predeterminado del enlace
182
183 var targetId = $(this).attr('href').substring(1);
184 var targetElement = $('#' + targetId);
185
186 if (targetElement && targetElement.length > 0) {
187 var targetRect = targetElement[0].getBoundingClientRect();
188 var navbarHeight = $('#navbar-top').outerHeight() || 0;
189 var bannerv6Height = $('#bannerv6').outerHeight() || 0;
190
191 var scrollToPosition = targetRect.top + $(window).scrollTop() - navbarHeight - bannerv6Height - 15;
192
193 $('html, body').animate({
194 scrollTop: scrollToPosition
195 }, 'slow');
196 } else {
197 console.log("Target element not found or does not exist.");
198 }
199 }
200 $('.procedimiento-aside a').on('click', scrollToMenuAsideProcedimiento);
201
202 function moveInverterToFirst() {
203 var parentDiv = document.getElementById("atributos");
204
205 if (parentDiv) {
206 var children = parentDiv.children;
207 var childrenArray = Array.prototype.slice.call(children);
208
209 var inverterDivIndex = childrenArray.findIndex(function(child) {
210 return child.classList.contains("procedimiento-hito__container--inverter");
211 });
212
213 if (inverterDivIndex !== -1) {
214 var inverterDiv = childrenArray[inverterDivIndex];
215
216 parentDiv.removeChild(inverterDiv);
217
218 var titleSection = parentDiv.querySelector('h2.title-section');
219
220 if (titleSection) {
221 titleSection.insertAdjacentElement('afterend', inverterDiv);
222 } else {
223 parentDiv.insertBefore(inverterDiv, parentDiv.firstChild);
224 }
225 }
226 }
227 }
228 // Llamar a la función para ejecutar la acción
229 //moveInverterToFirst();
230});
231
232</script>
233
234<#macro detailDoc fileEntry cssClass>
235 <div class="documento-entry ${cssClass}" onmouseenter="event.srcElement.style.overflow='unset';" onmouseleave="event.srcElement.style.overflow='hidden';">
236 <#assign
237 fileVersion = fileEntry.getLatestFileVersion(true)
238 viewURL = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + fileEntry.getGroupId() + "/" + fileEntry.getFolderId() + "/" + htmlUtil.escape(fileEntry.getFileName()) + "/" + fileEntry.getUuid() + "?version=" + fileVersion.getVersion()
239 viewThumbnail = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + fileEntry.getGroupId() + "/" + fileEntry.getFolderId() + "/" + htmlUtil.escape(fileEntry.getFileName()) + "/" + fileEntry.getUuid() + "?version=" + fileVersion.getVersion() + "&documentThumbnail=1"
240 />
241 <div class="documento-entry__preview ${fileEntry.getExtension()}">
242 <a href="${viewURL}" target="_blank" title="Ver documento ${fileEntry.getTitle()}">
243 <span class="sr-only">Ver documento ${fileEntry.getTitle()}</span>
244 <div class="documento-entry__preview--icon font-icomoon icon-ico-${fileEntry.getExtension()}"></div>
245 <#if fileEntry.getExtension() == 'pdf'>
246 <img id="the-canvas-${fileEntry.fileEntryId}" src="${viewThumbnail}" class="documento-entry__preview--canvas" style="margin-left: auto;
247 margin-right: auto; display:flex;">
248 </#if>
249 <#if fileEntry.getMimeType()?contains("image")>
250 <img id="the-canvas-${fileEntry.fileEntryId}" src="${viewURL}" class="documento-entry__preview--canvas" style="margin-left: auto;
251 margin-right: auto; display:flex;">
252 </#if>
253 </a>
254 </div>
255 <div class="documento-entry__datos">
256 <a href="${viewURL}" target="_blank" class="documento-entry__datos--titulo" title="Ver documento ${fileEntry.getTitle()}">
257 ${fileEntry.getTitle()}
258 </a>
259 <#if fileEntry.getDescription()?? && fileEntry.getDescription()?has_content>
260 <p>${fileEntry.getDescription()}</p>
261 </#if>
262
263 </div>
264 <div class="documento-entry__info">
265 <a href="${viewURL}" target="_blank" download title="Descargar documento">
266 Descargar ${fileEntry.getExtension()} <span class="text-nowrap">(#{(fileEntry.getSize()/1024); M1} Kb)</span>
267 </a>
268 </div>
269 </div>
270</#macro>
271
272<#macro listDocs filesFolder>
273 <#list filesFolder as fileEntry>
274 <#if !(fileEntry.getMimeType()?contains("image") || fileEntry.getMimeType()?contains("video") || fileEntry.getMimeType()?contains("audio")) >
275 <@detailDoc fileEntry=fileEntry cssClass="content-folder"/>
276 </#if>
277 </#list>
278</#macro>
279
280<div class="container">
281 <div class="back_button">
282 <a href="${backURL}" title="Volver a la página anterior">
283 <span class="icon-reply" aria-hidden="true"></span>
284 <span class="">Volver</span> <!-- Añadir texto solo visible para lectores de pantalla -->
285 </a>
286 </div>
287</div>
288
289<div class="procedimiento-banner procedimiento-banner--light" style="${style_imagen_fondo}">
290 <div class="container">
291 <div class="procedimiento-banner__cont-header-logo">
292 <div class="procedimiento-banner__container-header">
293 <header class="procedimiento-banner__header">
294 <#if (ficha.ficha_titulo_visible.getData())??>
295 <h1 class="procedimiento-banner__alias">${ficha.ficha_titulo_visible.getData()}</h1>
296 </#if>
297 </header>
298 </div>
299 <div class="procedimiento-banner__container-logo">
300 <figure class="procedimiento-banner__logo">
301 <#if (imagenes.imagenes_imagen_representativa.getData())?? && imagenes.imagenes_imagen_representativa.getData() != "">
302 <img
303 src="${imagenes.imagenes_imagen_representativa.getData()}"
304 alt="${imagenes.imagenes_imagen_representativa.getAttribute("alt")}"
305 data-fileentryid="${imagenes.imagenes_imagen_representativa.getAttribute("fileEntryId")}"
306 />
307 </#if>
308 </figure>
309 </div>
310 </div>
311 </div>
312</div>
313
314<#-- Contenido procedimiento y menú lateral -->
315<div class="container procedimiento-container">
316
317 <#-- Contenido del procedimiento -->
318 <div class="procedimiento-main">
319
320 <#-- Ficha del procedimiento -->
321 <div class="container procedimiento-ficha" id="ficha" role="region" aria-labelledby="ficha-title">
322 <h2 class="title-section" id="ficha-title">Información general</h2>
323 <div class="procedimiento-ficha__apartados">
324 <#if (ficha.ficha_titulo_formal.getData())?? && (ficha.ficha_titulo_formal.getData() != "")>
325 <div class="procedimiento-ficha__apartados__apartado">
326 <h4>Titulo formal:</h4>
327 <p>${ficha.ficha_titulo_formal.getData()}</p>
328 </div>
329 </#if>
330 <div class="procedimiento-ficha__apartados__apartado">
331 <h4>Código:</h4>
332 <#if (ficha.ficha_codigo.getData())?? && (ficha.ficha_codigo.getData() != "")>
333 <p>${ficha.ficha_codigo.getData()}</p>
334 <#else>
335 <p>Procedimiento no codificado</p>
336 </#if>
337 </div>
338 <#if (ficha.ficha_destinatarios.getData())?? && (ficha.ficha_destinatarios.getData() != "")>
339 <div class="procedimiento-ficha__apartados__apartado">
340 <h4>Destinatarios:</h4>
341 <p>${ficha.ficha_destinatarios.getData()}</p>
342 </div>
343 </#if>
344 <div class="procedimiento-ficha__apartados__apartado">
345 <h4>Fecha de creación:</h4>
346 <#assign fichaProcedimiento_Fecha_procedimiento_Data = getterUtil.getString(ficha.ficha_fecha_creacion.getData())>
347 <#if validator.isNotNull(fichaProcedimiento_Fecha_procedimiento_Data)>
348 <p>
349 <#assign fichaProcedimiento_Fecha_procedimiento_DateObj = dateUtil.parseDate("yyyy-MM-dd", fichaProcedimiento_Fecha_procedimiento_Data, locale)>
350 ${dateUtil.getDate(fichaProcedimiento_Fecha_procedimiento_DateObj, "dd MMM yyyy", locale)}
351 </p>
352 </#if>
353 </div>
354 </div>
355
356 <#if (ficha.ficha_descripcion.getData())?? && (ficha.ficha_descripcion.getData() != "")>
357 <div class="procedimiento-ficha__description" role="region" aria-labelledby="ficha-description-title">
358 <h3 id="ficha-description-title">Descripción</h3>
359 <p>${ficha.ficha_descripcion.getData()}</p>
360 </div>
361 </#if>
362 </div>
363
364 <#--Fin Ficha del procedimiento -->
365
366 <#-- Atributos -->
367 <#if atributos?size != 0 && (convocatoria.convocatoria_mostrar.getData() == "si" || plazo_solicitud.plazo_solicitud_mostrar.getData() == "si" || estado.estado_mostrar.getData() == "si") >
368 <div class="container procedimiento-hito uno" id="atributos">
369 <h2 class="title-section">Atributos</h2>
370
371 <#-- Atributo destacados -->
372 <#if atributos?size != 0>
373 <#list atributos.getSiblings() as atributo>
374 <#-- Obtener y formatear las fechas de cada atributo -->
375 <#assign hito_grupo_campos_hito_fecha_desde_Data = getterUtil.getString(atributo.atributos_fecha_inicio.getData())>
376 <#if validator.isNotNull(hito_grupo_campos_hito_fecha_desde_Data)>
377 <#assign hito_grupo_campos_hito_fecha_desde_DateObj = dateUtil.parseDate("yyyy-MM-dd", hito_grupo_campos_hito_fecha_desde_Data, locale)>
378 <#assign atributos_fecha_inicio = dateUtil.getDate(hito_grupo_campos_hito_fecha_desde_DateObj, "dd MMM yyyy", locale)>
379 </#if>
380
381 <#assign hito_grupo_campos_hito_fecha_hasta_Data = getterUtil.getString(atributo.atributos_fecha_final.getData())>
382 <#if validator.isNotNull(hito_grupo_campos_hito_fecha_hasta_Data)>
383 <#assign hito_grupo_campos_hito_fecha_hasta_DateObj = dateUtil.parseDate("yyyy-MM-dd", hito_grupo_campos_hito_fecha_hasta_Data, locale)>
384 <#assign atributos_fecha_final = dateUtil.getDate(hito_grupo_campos_hito_fecha_hasta_DateObj, "dd MMM yyyy", locale)>
385 </#if>
386
387 <#-- Mostrar el atributo solo si atributos_mostrar y atributos_destacado son "si" -->
388 <#if (atributo.atributos_titulo.getData())?? && (atributo.atributos_mostrar.getData())?? && (atributo.atributos_destacado.getData())??>
389 <#if atributo.atributos_mostrar.getData() == "si" && atributo.atributos_destacado.getData() == "si">
390 <div class="procedimiento-hito__container procedimiento-hito__container--inverter">
391 <div class="procedimiento-hito__section">
392 <h3 title="${atributo.atributos_titulo.getData()}">${atributo.atributos_titulo.getData()}</h3>
393 <#if validator.isNotNull(hito_grupo_campos_hito_fecha_desde_Data) && validator.isNotNull(hito_grupo_campos_hito_fecha_hasta_Data)>
394 <h4>
395 ${atributos_fecha_inicio} - ${atributos_fecha_final}
396 <span class="">
397 <i class="icon-calendar"></i>
398 </span>
399 </h4>
400 </#if>
401 </div>
402 <div class="procedimiento-hito__container-content">
403 <div class="procedimiento-hito__container-a">
404 <#if (atributo.atributos_enlace_externo.getData())??>
405 <a href="${atributo.atributos_enlace_externo.getData()}" target="_blank" class="procedimiento-hito__link">
406 </#if>
407 <div class="">
408 <div class="procedimiento-hito__icon">
409 <span class="">
410 <i class="icon-warning-sign"></i>
411 </span>
412 </div>
413 </div>
414 <div class="procedimiento-hito__title-container">
415 <#if (atributo.atributos_descripcion.getData())??>
416 <div class="procedimiento-hito__subtitle">
417 ${atributo.atributos_descripcion.getData()}
418 </div>
419 </#if>
420 </div>
421 <#if (atributo.atributos_enlace_externo.getData())??>
422 </a>
423 </#if>
424 </div>
425 </div>
426 </div>
427 </#if>
428 </#if>
429 </#list>
430 </#if>
431
432 <#-- Convocatoria -->
433 <#-- Obtener y formatear las fechas de convocatoria -->
434 <#assign convocatoria_grupo_campos_convocatoria_fecha_desde_Data = getterUtil.getString(convocatoria.convocatoria_fecha_inicio.getData())>
435 <#if validator.isNotNull(convocatoria_grupo_campos_convocatoria_fecha_desde_Data)>
436 <#assign convocatoria_grupo_campos_convocatoria_fecha_desde_DateObj = dateUtil.parseDate("yyyy-MM-dd", convocatoria_grupo_campos_convocatoria_fecha_desde_Data, locale)>
437 <#assign convocatoria_fecha_inicio = dateUtil.getDate(convocatoria_grupo_campos_convocatoria_fecha_desde_DateObj, "dd MMM yyyy", locale)>
438 </#if>
439
440 <#assign convocatoria_grupo_campos_convocatoria_fecha_hasta_Data = getterUtil.getString(convocatoria.convocatoria_fecha_final.getData())>
441 <#if validator.isNotNull(convocatoria_grupo_campos_convocatoria_fecha_hasta_Data)>
442 <#assign convocatoria_grupo_campos_convocatoria_fecha_hasta_DateObj = dateUtil.parseDate("yyyy-MM-dd", convocatoria_grupo_campos_convocatoria_fecha_hasta_Data, locale)>
443 <#assign convocatoria_fecha_final = dateUtil.getDate(convocatoria_grupo_campos_convocatoria_fecha_hasta_DateObj, "dd MMM yyyy", locale)>
444 </#if>
445
446 <#if (convocatoria.convocatoria_titulo.getData())?? && (convocatoria.convocatoria_mostrar.getData())??>
447 <#if convocatoria.convocatoria_mostrar.getData() == "si">
448 <div class="procedimiento-hito__container">
449 <div class="procedimiento-hito__section">
450 <h3 title="CONVOCATORIA">CONVOCATORIA</h3>
451 <#if validator.isNotNull(convocatoria_grupo_campos_convocatoria_fecha_desde_Data) && validator.isNotNull(convocatoria_grupo_campos_convocatoria_fecha_hasta_Data)>
452 <h4>
453 ${convocatoria_fecha_inicio} - ${convocatoria_fecha_final}
454 <span class="">
455 <i class="icon-calendar"></i>
456 </span>
457 </h4>
458 <#else>
459 <h4>
460 ${convocatoria_fecha_inicio}
461 <span class="">
462 <i class="icon-calendar"></i>
463 </span>
464 </h4>
465 </#if>
466 </div>
467 <div class="procedimiento-hito__container-content">
468 <div class="procedimiento-hito__container-a">
469 <#if (convocatoria.convocatoria_enlace.getData())??>
470 <a href="${convocatoria.convocatoria_enlace.getData()}" target="_blank" class="procedimiento-hito__link">
471 </#if>
472 <div class="">
473 <div class="procedimiento-hito__icon">
474 <span class="">
475 <i class="icon-comment"></i>
476 </span>
477 </div>
478 </div>
479 <div class="procedimiento-hito__title-container">
480 <h3 class="procedimiento-hito__title">${convocatoria.convocatoria_titulo.getData()}</h3>
481 </div>
482 </a>
483 </div>
484 </div>
485 </div>
486 </#if>
487 </#if>
488 <#-- Fin Convocatoria -->
489
490 <#-- Estado del procedimiento -->
491 <#if (estado.estado_descripcion.getData())?? && (estado.estado_mostrar.getData())??>
492 <#if estado.estado_mostrar.getData() == "si" >
493 <div class="procedimiento-hito__container">
494 <div class="procedimiento-hito__section">
495 <h3 title="ESTADO">ESTADO</h3>
496 <#assign estado_grupo_campos_estado_fecha_Data = getterUtil.getString(estado.estado_fecha.getData())>
497 <#if validator.isNotNull(estado_grupo_campos_estado_fecha_Data)>
498 <#assign estado_grupo_campos_estado_fecha_Data_DateObj = dateUtil.parseDate("yyyy-MM-dd", estado_grupo_campos_estado_fecha_Data, locale)>
499 <h4>
500 ${dateUtil.getDate(estado_grupo_campos_estado_fecha_Data_DateObj, "dd MMM yyyy", locale)}
501 <span class="">
502 <i class="icon-calendar"></i>
503 </span>
504 </h4>
505 </#if>
506 </div>
507 <div class="procedimiento-hito__container-content">
508 <div class="procedimiento-hito__container-a">
509 <div class="">
510 <div class="procedimiento-hito__icon">
511 <span class="">
512 <i class="icon-paper-clip"></i>
513 </span>
514 </div>
515 </div>
516 <div class="procedimiento-hito__title-container">
517 <div class="procedimiento-hito__description">${estado.estado_descripcion.getData()}</div>
518 </div>
519
520 </div>
521 </div>
522 </div>
523 </#if>
524 </#if>
525 <#-- Fin Estado del procedimiento -->
526
527 <#-- Plazo de solicitud -->
528 <#-- Obtener y formatear las fechas de plazo de solicitud -->
529 <#assign plazo_solicitud_grupo_campos_plazo_solicitud_fecha_desde_Data = getterUtil.getString(plazo_solicitud.plazo_solicitud_fecha_inicio.getData())>
530 <#if validator.isNotNull(plazo_solicitud_grupo_campos_plazo_solicitud_fecha_desde_Data)>
531 <#assign plazo_solicitud_grupo_campos_plazo_solicitud_fecha_desde_DateObj = dateUtil.parseDate("yyyy-MM-dd", plazo_solicitud_grupo_campos_plazo_solicitud_fecha_desde_Data, locale)>
532 <#assign plazo_solicitud_fecha_inicio = dateUtil.getDate(plazo_solicitud_grupo_campos_plazo_solicitud_fecha_desde_DateObj, "dd MMM yyyy", locale)>
533 </#if>
534
535 <#assign plazo_solicitud_grupo_campos_plazo_solicitud_fecha_hasta_Data = getterUtil.getString(plazo_solicitud.plazo_solicitud_fecha_final.getData())>
536 <#if validator.isNotNull(plazo_solicitud_grupo_campos_plazo_solicitud_fecha_hasta_Data)>
537 <#assign plazo_solicitud_grupo_campos_plazo_solicitud_fecha_hasta_DateObj = dateUtil.parseDate("yyyy-MM-dd", plazo_solicitud_grupo_campos_plazo_solicitud_fecha_hasta_Data, locale)>
538 <#assign plazo_solicitud_fecha_final = dateUtil.getDate(plazo_solicitud_grupo_campos_plazo_solicitud_fecha_hasta_DateObj, "dd MMM yyyy", locale)>
539 </#if>
540
541 <#if (plazo_solicitud.plazo_solicitud_titulo.getData())?? && (plazo_solicitud.plazo_solicitud_mostrar.getData())??>
542 <#if plazo_solicitud.plazo_solicitud_mostrar.getData() == "si">
543 <div class="procedimiento-hito__container">
544 <div class="procedimiento-hito__section">
545 <h3 title="PLAZO DE SOLICITUD">PLAZO DE SOLICITUD</h3>
546 <#if validator.isNotNull(plazo_solicitud_grupo_campos_plazo_solicitud_fecha_desde_Data) && validator.isNotNull(plazo_solicitud_grupo_campos_plazo_solicitud_fecha_hasta_Data)>
547 <h4>
548 ${plazo_solicitud_fecha_inicio} - ${plazo_solicitud_fecha_final}
549 <span class="">
550 <i class="icon-calendar"></i>
551 </span>
552 </h4>
553 </#if>
554 </div>
555 <div class="procedimiento-hito__container-content">
556 <div class="procedimiento-hito__container-a">
557 <#-- Verificar el estado del plazo de solicitud -->
558 <#assign estadoSolicitud = plazo_solicitud.plazo_solicitud_estado.getData()>
559 <#if ( ( estadoSolicitud == "abierto" || estadoSolicitud == "pendiente" ) && (plazo_solicitud.plazo_solicitud_enlace.getData())?? && validator.isNotNull(plazo_solicitud.plazo_solicitud_enlace.getData()))>
560 <a href="${plazo_solicitud.plazo_solicitud_enlace.getData()}" target="_blank" class="procedimiento-hito__link">
561 <#elseif estadoSolicitud == "cerrado">
562 <div class="procedimiento-hito__link-disabled">
563 </#if>
564 <div class="procedimiento-section-col procedimiento-section-col-infoicon">
565 <#-- Estado de la Solicitud (ICONO: Abierto, Cerrado, Pendiente) -->
566 <#if (estadoSolicitud)?? && validator.isNotNull(estadoSolicitud)>
567 <#if estadoSolicitud == "abierto">
568 <span class="icon-unlock" title="Estado de la solicitud: abierto" aria-label="Estado de la solicitud: abierto"></span>
569 <#elseif estadoSolicitud == "cerrado">
570 <span class="icon-lock" title="Estado de la solicitud: cerrado" aria-label="Estado de la solicitud: cerrado"></span>
571 <#else>
572 <span class="icon-spinner" title="Estado de la solicitud: pendiente" aria-label="Estado de la solicitud: pendiente"></span>
573 </#if>
574 </#if>
575 </div>
576 <div class="">
577 <div class="procedimiento-hito__icon">
578 <span class="">
579 <i class="icon-calendar"></i>
580 </span>
581 </div>
582 </div>
583 <div class="procedimiento-hito__title-container">
584 <#if (plazo_solicitud.plazo_solicitud_titulo.getData())?? && plazo_solicitud.plazo_solicitud_titulo.getData() != "">
585 <h5 class="procedimiento-hito__title">${plazo_solicitud.plazo_solicitud_titulo.getData()}</h5>
586 <#else>
587 <#if (estadoSolicitud)?? && validator.isNotNull(estadoSolicitud)>
588 <#if estadoSolicitud == "abierto">
589 <h5 class="procedimiento-hito__title">Abierto</h5>
590 <#elseif estadoSolicitud == "cerrado">
591 <h5 class="procedimiento-hito__title-disabled">Cerrado</h5>
592 <#else>
593 <h5 class="procedimiento-hito__title">Pendiente</h5>
594 </#if>
595 </#if>
596 </#if>
597 </div>
598 <#if (( estadoSolicitud == "abierto" || estadoSolicitud == "pendiente" ) && (plazo_solicitud.plazo_solicitud_enlace.getData())?? && validator.isNotNull(plazo_solicitud.plazo_solicitud_enlace.getData()))>
599 </a>
600 <#else>
601 </div>
602 </#if>
603 </div>
604 </div>
605 </div>
606 </#if>
607 </#if>
608 <#-- Fin Plazo de solicitud -->
609
610 <#-- Atributos no destacados -->
611 <#if atributos?size != 0>
612 <#list atributos.getSiblings() as atributo>
613 <#-- Obtener y formatear las fechas de cada atributo -->
614 <#assign hito_grupo_campos_hito_fecha_desde_Data = getterUtil.getString(atributo.atributos_fecha_inicio.getData())>
615 <#if validator.isNotNull(hito_grupo_campos_hito_fecha_desde_Data)>
616 <#assign hito_grupo_campos_hito_fecha_desde_DateObj = dateUtil.parseDate("yyyy-MM-dd", hito_grupo_campos_hito_fecha_desde_Data, locale)>
617 <#assign atributos_fecha_inicio = dateUtil.getDate(hito_grupo_campos_hito_fecha_desde_DateObj, "dd MMM yyyy", locale)>
618 </#if>
619
620 <#assign hito_grupo_campos_hito_fecha_hasta_Data = getterUtil.getString(atributo.atributos_fecha_final.getData())>
621 <#if validator.isNotNull(hito_grupo_campos_hito_fecha_hasta_Data)>
622 <#assign hito_grupo_campos_hito_fecha_hasta_DateObj = dateUtil.parseDate("yyyy-MM-dd", hito_grupo_campos_hito_fecha_hasta_Data, locale)>
623 <#assign atributos_fecha_final = dateUtil.getDate(hito_grupo_campos_hito_fecha_hasta_DateObj, "dd MMM yyyy", locale)>
624 </#if>
625
626 <#-- Mostrar el atributo solo si atributos_mostrar y atributos_destacado son "no" -->
627 <#if (atributo.atributos_titulo.getData())?? && (atributo.atributos_mostrar.getData())?? && (atributo.atributos_destacado.getData())??>
628 <#if atributo.atributos_mostrar.getData() == "si">
629 <#if atributo.atributos_destacado.getData()??>
630 <#if atributo.atributos_destacado.getData() == "no">
631 <div class="procedimiento-hito__container">
632 <div class="procedimiento-hito__section">
633 <h3 title="${atributo.atributos_titulo.getData()}">${atributo.atributos_titulo.getData()}</h3>
634 <#if validator.isNotNull(hito_grupo_campos_hito_fecha_desde_Data) && validator.isNotNull(hito_grupo_campos_hito_fecha_hasta_Data)>
635 <h4>
636 ${atributos_fecha_inicio} - ${atributos_fecha_final}
637 <span class="">
638 <i class="icon-calendar"></i>
639 </span>
640 </h4>
641 </#if>
642 </div>
643 <div class="procedimiento-hito__container-content">
644 <div class="procedimiento-hito__container-a">
645 <#if (atributo.atributos_enlace_externo.getData())??>
646 <a href="${atributo.atributos_enlace_externo.getData()}" target="_blank" class="procedimiento-hito__link">
647 </#if>
648 <div class="">
649 <div class="procedimiento-hito__icon">
650 <span class="">
651 <i class="icon-warning-sign"></i>
652 </span>
653 </div>
654 </div>
655 <div class="procedimiento-hito__title-container">
656 <#if (atributo.atributos_descripcion.getData())??>
657 <div class="procedimiento-hito__subtitle">
658 ${atributo.atributos_descripcion.getData()}
659 </div>
660 </#if>
661 </div>
662 <#if (atributo.atributos_enlace_externo.getData())??>
663 </a>
664 </#if>
665 </div>
666 </div>
667 </div>
668 </#if>
669 </#if>
670 </#if>
671 </#if>
672 </#list>
673 </#if>
674 <#-- Fin Atributos no destacados -->
675
676 </div>
677 </#if>
678 <#-- Fin Atributos -->
679
680 <#-- Fases -->
681 <#-- Get Date texts -->
682 <#assign daysText = "">
683 <#assign monthText = "">
684 <#assign daysWrapperClass = "">
685 <#assign monthWrapperClass = "">
686 <#-- Obtener y formatear las fechas de cada fase -->
687 <#assign fases_fases_fecha_Data = getterUtil.getString(fases.fases_fecha.getData())>
688 <#if validator.isNotNull(fases_fases_fecha_Data)>
689 <#assign fases_fases_fecha_DateObj = dateUtil.parseDate("yyyy-MM-dd", fases_fases_fecha_Data, locale)>
690 <#assign fase_fecha = dateUtil.getDate(fases_fases_fecha_DateObj, "dd MMM yyyy", locale)>
691 </#if>
692
693 <#if fases?size != 0>
694 <div class="container procedimiento-carousel" id="fases">
695 <h2 class="title-section">Fases</h2>
696 <div class="container">
697 <div class="procedimiento-carrusel__wrapper">
698 <#-- Crear un mapa para agrupar por año y mes -->
699 <#assign fasesMap = {} />
700
701 <#-- Iterar sobre las fases para agruparlas -->
702 <#list fases.getSiblings() as fa>
703
704 <#-- Obtener la fecha de la fase -->
705 <#assign faseFechaData = getterUtil.getString(fa.fases_fecha.getData())>
706 <#if validator.isNotNull(faseFechaData)>
707 <#assign faseFechaDateObj = dateUtil.parseDate("yyyy-MM-dd", faseFechaData, locale)>
708 <#assign year = dateUtil.getDate(faseFechaDateObj, "yyyy", locale)>
709 <#assign monthNumber = dateUtil.getDate(faseFechaDateObj, "MM", locale)>
710 <#assign month = dateUtil.getDate(faseFechaDateObj, "MMMM", locale)>
711 <#assign day = dateUtil.getDate(faseFechaDateObj, "d", locale)>
712 <#assign dayOfWeek = dateUtil.getDate(faseFechaDateObj, "EE", locale)>
713
714 <#-- Inicializar el mapa para el año si no existe -->
715 <#if !fasesMap[year]?has_content>
716 <#assign fasesMap = fasesMap + { (year) : {} } />
717 </#if>
718
719 <#-- Inicializar el mapa para el mes si no existe dentro del año -->
720 <#if !fasesMap[year][monthNumber]?has_content>
721 <#assign yearMap = fasesMap[year] + { (monthNumber) : [] } />
722 <#assign fasesMap = fasesMap + { (year) : yearMap } />
723 </#if>
724
725 <#-- Obtener el título de la fase -->
726 <#assign faseTitulo = getterUtil.getString(fa.fases_titulo.getData()) />
727
728 <#-- Obtener contenido relacionado para esta fase -->
729 <#assign webContentData = jsonFactoryUtil.createJSONObject(fa.fases_contenido_relacionado.getData()) />
730 <#--assign enlaceDirectLink = assetLinkFilterService.getLinkDirectLink(webContentData.classPK?eval) /-->
731
732 <#assign contenidoRelacionadoTitle = "" />
733 <#assign contenidoRelacionadoUrl = "" />
734 <#if webContentData?? && webContentData.title??>
735
736 <#assign contenidoRelacionadoTitle = webContentData.title />
737 <#assign contenidoRelacionadoUrl = fa.fases_contenido_relacionado.getFriendlyUrl() />
738
739 <#if webContentData.subtype=="Enlace">
740 <#--assign enlaceDirectLinkTest= journalArticleLocalService.getArticle(groupId, webContentData.className, webContentData.classPK?eval)/-->
741 <#assign contenidoRelacionadoJournal= journalArticleLocalService.getLatestArticle(webContentData.classPK?eval)/>
742 <#assign contenidoRelacionadoUrl = assetLinkFilterService.getDynamicElementByName(contenidoRelacionadoJournal, "enlaceExterno")!"" />
743 </#if>
744
745 <#if webContentData.subtype=="Normativa">
746 <#assign viewURL = requestMap.attributes.viewURL!""/>
747 <#assign urlView = friendlyURLs[themeDisplay.getLanguageId()]!"" />
748 <#assign siteFriendly = themeDisplay.getScopeGroup().getFriendlyURL() />
749
750 <#assign currentSiteURL = urlView?split('/w/')[0]?replace("/normativa", siteFriendly) />
751 <#assign contenidoRelacionadoUrl = currentSiteURL + '/w/' + contenidoRelacionadoUrl?split('/w/')[1]+'?redirect=' + htmlUtil.escapeURL(themeDisplay.getURLCurrent())/>
752 </#if>
753
754 </#if>
755
756 <#-- Añadir la fase a la lista correspondiente del mes dentro del año -->
757 <#assign faseData = {
758 "day": day,
759 "dayOfWeek": dayOfWeek,
760 "month": month,
761 "monthNumber": monthNumber,
762 "year": year,
763 "isDestacada": fa.fases_destacado.getData() == "si",
764 "title": faseTitulo,
765 "contenidoRelacionadoTitle": contenidoRelacionadoTitle,
766 "contenidoRelacionadoUrl": contenidoRelacionadoUrl
767 } />
768
769 <#-- Asignar la lista actualizada al mes correspondiente dentro del año -->
770 <#assign tempList = fasesMap[year][monthNumber] + [faseData] />
771 <#assign yearMap = fasesMap[year] + { (monthNumber) : tempList } />
772 <#assign fasesMap = fasesMap + { (year) : yearMap } />
773 </#if>
774 </#list>
775
776 <#-- Iterar sobre el mapa agrupado y ordenado para mostrar las fases -->
777 <#list fasesMap?keys?sort as year>
778 <div class="year-container">
779 <h3 class="year-container__year-title"><span>Año</span> ${year}</h3>
780 <#assign monthsMap = fasesMap[year]>
781 <div class="months-container">
782 <#list monthsMap?keys?sort as monthNumber>
783 <#assign month = monthsMap[monthNumber][0]["month"]>
784 <div class="month-container">
785 <h4 class="month-container__month-title">${month}</h4>
786 <div class="month-container__month-fases">
787 <#list monthsMap[monthNumber] as fase>
788 <div class="carrusel-item">
789 <#if fase.isDestacada>
790 <div class="carrusel-item-inner destacada">
791 <#else>
792 <div class="carrusel-item-inner">
793 </#if>
794 <div class="carrusel-item-header">
795 <h5><span>${fase.day}</span></h5>
796 <h6><span>${fase.dayOfWeek}</span></h6>
797 </div>
798 <div class="carrusel-item-arrow">
799 <span class="">
800 <i class="icon-arrow-right"></i>
801 </span>
802 </div>
803 <div class="carrusel-item-image-content">
804 <div class="tt-event-carousel-item-desc">
805 <#-- Mostrar contenido relacionado -->
806 <#if fase.contenidoRelacionadoUrl?? && fase.contenidoRelacionadoTitle??>
807 <div class="contenido-relacionado">
808 <a href="${fase.contenidoRelacionadoUrl}" target="_blank" title="${fase.contenidoRelacionadoTitle}" aria-label="${fase.contenidoRelacionadoTitle}">${fase.title}</a>
809 </div>
810 </#if>
811 </div>
812 </div>
813 </div>
814 </div>
815 </#list>
816 </div>
817 </div>
818 </#list>
819 </div>
820 </div>
821 </#list>
822 </div>
823 </div>
824 </div>
825 </#if>
826 <#-- Fin Fases -->
827
828
829 <#-- Documentos del procedimiento -->
830 <#if documentos.getSiblings()?has_content && documentos.getSiblings()?size != 0>
831 <#-- Crear una lista para almacenar los documentos -->
832 <#assign documentosList = [] />
833
834 <#-- Iterar sobre los documentos para obtener sus datos -->
835 <#list documentos.getSiblings() as documento>
836 <#-- Obtener el título del documento -->
837 <#assign documentoTitulo = getterUtil.getString(documento.documentos_titulo.getData())>
838
839 <#-- Asignar mostrarTitulo en función de la validez del título -->
840 <#assign mostrarTitulo = (documentoTitulo?has_content)>
841
842 <#-- Crear una lista para almacenar los documentos asociados -->
843 <#assign documentosAsociados = [] />
844
845 <#-- Iterar sobre los documentos asociados -->
846 <#list documento.documentos_documento.getSiblings() as cur_DocumentosDelProcedimiento>
847 <#if validator.isNotNull(cur_DocumentosDelProcedimiento.getData())>
848 <#assign dta = cur_DocumentosDelProcedimiento.data />
849 <#assign dta_map = jsonFactoryUtil.createJSONObject(dta) />
850 <#assign fileEntry = dlFileEntryLocalService.getFileEntry(dta_map.fileEntryId?number) />
851 <#assign documentosAsociados = documentosAsociados + [fileEntry] />
852 </#if>
853 </#list>
854
855 <#-- Agregar a la lista de documentos si hay al menos un documento asociado -->
856 <#if documentosAsociados?size != 0>
857 <#assign documentosList = documentosList + [{
858 "title": documentoTitulo,
859 "mostrarTitulo": mostrarTitulo,
860 "documentosAsociados": documentosAsociados
861 }] />
862 </#if>
863 </#list>
864
865 <#-- Mostrar los documentos si hay al menos uno -->
866 <#if documentosList?size != 0>
867 <div class="container" id="documentos">
868 <h2 class="title-section">Documentos</h2>
869 <div class="documentos-entries">
870 <#list documentosList as documento>
871 <div class="documento-entrie">
872 <#if documento.mostrarTitulo>
873 <h3>${documento.title}:</h3>
874 <#else>
875 <h3>Más documentos:</h3>
876 </#if>
877 <ul>
878 <#list documento.documentosAsociados as fileEntry>
879 <li>
880 <@detailDoc fileEntry=fileEntry cssClass="no-content-folder"/>
881 </li>
882 </#list>
883 </ul>
884 </div>
885 </#list>
886 </div>
887 </div>
888 </#if>
889 </#if>
890 <#-- Fin Documentos del procedimiento -->
891
892 <#-- Imagenes del procedimiento: Por ahora no se muestran nada más que en la zona superior
893 <#if (imagenes.Imagen_representativa.getData())?? && imagenes.Imagen_representativa.getData() != "">
894 <div class="container" id="imagenes">
895 <h2 class="title-section">Imágenes</h2>
896 <div class="procedimiento-imagenes">
897 <img alt="${imagenes.Imagen_representativa.getAttribute("alt")}" data-fileentryid="${imagenes.Imagen_representativa.getAttribute("fileEntryId")}" src="${imagenes.Imagen_representativa.getData()}" />
898 </div>
899 </div>
900 </#if>
901 -->
902
903 <#-- Enlaces del procedimiento -->
904 <#if enlaces.getSiblings()?has_content && enlaces.getSiblings()?size != 0>
905 <#-- Crear una lista para almacenar los enlaces -->
906 <#assign enlacesList = [] />
907
908 <#-- Iterar sobre los enlaces para obtener sus datos -->
909 <#list enlaces.getSiblings() as enlace>
910 <#-- Obtener el título del enlace -->
911 <#assign enlaceTitulo = getterUtil.getString(enlace.enlaces_titulo.getData())>
912 <#-- Obtener el enlace externo y enlace a página-->
913 <#assign enlaceExterno = getterUtil.getString(enlace.enlaces_enlace_externo.getData())>
914 <#assign enlacePagina = getterUtil.getString(enlace.enlaces_enlace_pagina.getFriendlyUrl())>
915 <#-- Obtener el titulo de enlace a página-->
916 <#assign enlacePaginaData = getterUtil.getString(enlace.enlaces_enlace_pagina.getData())>
917 <#assign enlacePaginaDataJSON = jsonFactoryUtil.createJSONObject(enlacePaginaData)>
918 <#assign enlaceTituloPagina = enlacePaginaDataJSON.getString("title")>
919
920 <#-- Agregar a la lista si hay título y al menos un enlace -->
921 <#if validator.isNotNull(enlaceExterno) || validator.isNotNull(enlacePagina)>
922 <#assign enlacesList = enlacesList + [{
923 "titleExterno": enlaceTitulo,
924 "urlExterno": enlaceExterno,
925 "titlePagina": enlaceTituloPagina,
926 "urlPagina": enlacePagina
927 }] />
928 </#if>
929 </#list>
930
931 <#-- Mostrar los enlaces si hay al menos uno -->
932 <#if enlacesList?size != 0>
933 <div class="container" id="enlaces">
934 <h2 class="title-section">Enlaces</h2>
935 <div class="procedimiento-enlaces">
936 <ul>
937 <#list enlacesList as enlace>
938 <#if enlace.urlExterno != "">
939 <li>
940 <a href="${enlace.urlExterno}" target="_blank">
941 <#if enlace.titleExterno != "">
942 ${enlace.titleExterno}
943 <#else>
944 Enlace
945 </#if>
946 </a>
947 </li>
948 </#if>
949 <#if enlace.urlPagina != "">
950 <li>
951 <#if validator.isNotNull(enlace.titlePagina)>
952 <a data-senna-off="true" href="${enlace.urlPagina}" target="_self">${enlace.titlePagina}</a>
953 <#else>
954 <a data-senna-off="true" href="${enlace.urlPagina}" target="_self">Enlace a Página</a>
955 </#if>
956 </li>
957 </#if>
958 </#list>
959 </ul>
960 </div>
961 </div>
962 </#if>
963 </#if>
964 <#-- Fin Enlaces del procedimiento -->
965
966 </div>
967 <#-- Fin Contenido del procedimiento -->
968
969 <#-- Menú aside de navegación -->
970 <aside class="procedimiento-aside">
971 <div class="menu">
972 <h3>Índice</h3>
973 <nav>
974 <ol>
975 <#if (ficha.ficha_titulo_visible.getData())?? && ficha.ficha_titulo_visible.getData() != "">
976 <li class="elem-active"><a href="#ficha">Información general</a></li>
977 </#if>
978 <#if atributos?size != 0 && (convocatoria.convocatoria_mostrar.getData() == "si" || plazo_solicitud.plazo_solicitud_mostrar.getData() == "si" || estado.estado_mostrar.getData() == "si") >
979 <li><a href="#atributos">Atributos</a></li>
980 </#if>
981 <#if fases?size != 0>
982 <li><a href="#fases">Fases</a></li>
983 </#if>
984
985 <#if documentos.getSiblings()?has_content && documentosList?size != 0>
986 <li><a href="#documentos">Documentos</a></li>
987 </#if>
988
989 <#-- Quitamos imágenes por ahora
990 <#if (imagenes.Imagen_representativa.getData())?? && imagenes.Imagen_representativa.getData() != "">
991 <li><a href="#imagenes">Imágenes</a></li>
992 </#if> -->
993
994 <#if enlaces.getSiblings()?has_content && enlacesList?size != 0>
995 <li><a href="#enlaces">Enlaces</a></li>
996 </#if>
997
998 </ol>
999 </nav>
1000 </div>
1001 </aside>
1002 <#-- Fin Menú aside de navegación -->
1003
1004</div>
1005
1006<#include "${templatesPath}/398918" >
1007<div class="container">
1008 <div class="back_button">
1009 <a href="${backURL}">
1010 <span class="icon-reply" title="Volver" aria-label="Volver"></span>
1011 Volver
1012 </a>
1013 </div>
1014</div>
Nodo: sv0666:8080