An error occurred while processing the template.
Java method "as.asac.template.tools.DLToolImpl.getDLFileEntryByPath(String)" threw an exception when invoked on as.asac.template.tools.DLToolImpl object "as.asac.template.tools.DLToolImpl@69c6997f"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign dlFileEntryTrack = dlTool.get... [in template "37703#37743#1559015" at line 386, column 153]
----
1<#-- Services -->
2<#assign assetEntryLocalServiceUtil = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
3<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")/>
4<#assign journalArticleResourceServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")/>
5
6<#-- Reserved vbles -->
7<#assign title = .vars['reserved-article-title'].data>
8<#assign articleId=.vars["reserved-article-id"].data />
9<#assign description=.vars["reserved-article-description"].data />
10<#assign smallImageUrl=.vars["reserved-article-small-image-url"].data />
11<#assign date=.vars["reserved-article-display-date"].data />
12<#assign request = .vars['request']>
13
14<#-- Init -->
15<#assign assetEntry = journalTool.getAssetEntryByArticleId(groupId, articleId)>
16<#assign journalArticle = journalTool.getJournalArticleByAssetEntry(assetEntry)>
17<#assign articleURL = themeDisplay.getURLPortal()+themeDisplay.getURLCurrent()>
18<#assign articleSocialBookmarks = themeDisplay.getThemeSetting("article-social-bookmarks")!>
19<#assign layoutSetBannerPath = layoutTool.getLayoutSetBannerPath(groupId, themeDisplay.getLayout().isPrivateLayout())!>
20<#assign articleMainImageThumbnail3 = dlTool.getThumbnail(smallImageUrl, "3", layoutSetBannerPath)! />
21<#assign articleMainImageThumbnail1 = dlTool.getThumbnail(smallImageUrl, "1")! />
22<#assign ddmStructureNameNormalize = "template-${friendlyURLNormalizerTool.normalize(journalArticle.getDDMStructure().getName(localeUtil.getDefault()))}" />
23<#assign baseUrl = themeDisplay.getURLPortal()/>
24
25<#-- Build -->
26<#if Nombre.data?has_content>
27 <#assign title = Nombre.data>
28</#if>
29<#assign address = []>
30<#if Contacto.Zona.data?has_content>
31 <#assign address = address + [Contacto.Zona.data] />
32</#if>
33
34<#-- KML -->
35<#assign dlFileEntryKML = dlTool.getDLFileEntryByPath(TrazadoRuta.getData())!/>
36<#assign document = "" />
37<#assign lookAtLongitude = ""/>
38<#assign lookAtLatitude = ""/>
39<#assign coordinates_all = "" />
40<#if validator.isNotNull(dlFileEntryKML)>
41 <#assign document = saxReaderUtil.read(dlFileEntryKML.getContentStream())/>
42 <#assign rootElement = document.getRootElement()/>
43 <#assign xpath = saxReaderUtil.createXPath("//root:Camera/root:longitude", "root", "http://www.opengis.net/kml/2.2")/>
44 <#assign lookAtLongitude = xpath.selectSingleNode(document)!>
45 <#assign xpath = saxReaderUtil.createXPath("//root:Camera/root:latitude", "root", "http://www.opengis.net/kml/2.2")/>
46 <#assign lookAtLatitude = xpath.selectSingleNode(document)!>
47</#if>
48
49<#if validator.isNotNull(document) && validator.isNull(lookAtLongitude)>
50 <#assign xpath = saxReaderUtil.createXPath("//root:LookAt/root:longitude", "root", "http://www.opengis.net/kml/2.2")/>
51 <#assign lookAtLongitude = xpath.selectSingleNode(document)!>
52</#if>
53
54<#if validator.isNotNull(document) && validator.isNull(lookAtLatitude)>
55 <#assign xpath = saxReaderUtil.createXPath("//root:LookAt/root:latitude", "root", "http://www.opengis.net/kml/2.2")/>
56 <#assign lookAtLatitude = xpath.selectSingleNode(document)!>
57</#if>
58
59<#-- En caso de que no haya ni lookAt ni camera -->
60<#if validator.isNotNull(document) && (validator.isNull(lookAtLongitude) || validator.isNull(lookAtLatitude))>
61 <#assign xpath = saxReaderUtil.createXPath("//root:Placemark/root:LineString/root:coordinates", "root", "http://www.opengis.net/kml/2.2")/>
62 <#assign coordinates_all = xpath.selectSingleNode(document)!>
63 <#assign coordinates_array = coordinates_all.data?split(" ")>
64 <#assign coordinate_middle_pos = getterUtil.getInteger(coordinates_array?size/2)>
65 <#assign coordinate_middle = coordinates_array[coordinate_middle_pos]?split(",")>
66 <#assign lookAtLongitude = coordinate_middle[0]>
67 <#assign lookAtLatitude = coordinate_middle[1]>
68</#if>
69
70<#if validator.isNotNull(document) && validator.isNotNull(coordinates_all) >
71 <#assign xpath = saxReaderUtil.createXPath("//root:Placemark/root:LineString/root:coordinates", "root", "http://www.opengis.net/kml/2.2")/>
72 <#assign coordinates_all = xpath.selectSingleNode(document)!>
73 <#assign coordinates_array = coordinates_all.getData()?split(" ")/>
74 <#assign coordinates_start = coordinates_array[0]?split(",")/>
75</#if>
76
77<#assign tramosAlternativosArray = []/>
78
79<#if Tramos.getSiblings()?size!=0>
80
81 <#list Tramos.getSiblings() as tramo>
82 <#if tramo.TramoAlternativo.getData()=="true">
83 <#assign tramosAlternativosArray = tramosAlternativosArray + ["true"] />
84 <#else>
85 <#assign tramosAlternativosArray = tramosAlternativosArray + [ "false" ] />
86 </#if>
87
88 </#list>
89
90</#if>
91
92<#-- Id de los tramos -->
93<#assign counter = 1>
94<#assign count = 0>
95
96<#-- Obtener el nombre de los tramos -->
97<#assign xpath = saxReaderUtil.createXPath("//root:LineString/ancestor::root:Placemark/root:name", "root", "http://www.opengis.net/kml/2.2")>
98<#assign placemarksName = xpath.selectNodes(document)>
99
100<#assign tipoRuta = stringUtil.lowerCase(TipoRuta.getData())/>
101<#assign iconTipoRuta = stringUtil.lowerCase(journalTool.getJournalArticleField(groupId, articleId, "TipoRuta", portal.getSiteDefaultLocale(groupId)))/>
102
103<article class="template ${ddmStructureNameNormalize}" role="article" itemscope itemtype="http://schema.org/TouristicAttraction">
104
105 <header class="article-header-wrapper row no-gutters">
106
107 <div class="article-header-container article-header-container-static">
108 <div class="container">
109 <div class="row no-gutters">
110 <div class="col-md-6">
111 <div class="article-image" style="background-image: url('${articleMainImageThumbnail3}')">
112 <img class="sr-only" src="${articleMainImageThumbnail3}" alt="${languageUtil.format(request,'go-to-x','image')} ${title}" itemprop="image"/>
113 </div>
114 </div>
115 <div class="article-info-wrapper col-md-6">
116 <div class="article-info">
117
118 <h2 class="article-title" itemprop="name">${title}</h2>
119 <div class="article-list-wrapper">
120
121 <ul class="article-list list-unstyled article-list-info">
122 <li class="article-list-item mb-4">
123 <span class="fas fa-map-marker-alt">
124 <span class="hide-accessible">${languageUtil.get(request,"address")}</span>
125 </span>
126 <span class="field-wrapper" itemprop="address">
127 <span class="important">
128 <#assign concejos = []/>
129 <#list Contacto.Concejos.getSiblings() as Item>
130 <#if Item.data?has_content>
131 <#assign concejos = [Item.data] />
132 </#if>
133 </#list>
134 ${stringUtil.merge(concejos)}
135 </span>
136 <span class="text d-block">${stringUtil.merge(address)}</span>
137 </span>
138 </li>
139 </ul>
140
141 <div class="article-info-table article-info-table-fixed">
142 <div class="article-info-table-row">
143 <div class="article-info-table-cell">
144 <div class="article-list-wrapper">
145 <ul class="article-list list-unstyled article-list-info info-route">
146
147 <#if Contacto.Distancia.data?has_content>
148 <li class="article-list-item">
149 <span class="fas fa-ruler-horizontal">
150 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-distancia")}</span>
151 </span>
152 <span class="field-wrapper">
153 <span class="field">${languageUtil.get(request, "infoasturias-distancia")}:</span>
154 <#list Contacto.Distancia.getSiblings() as Item>
155 <span class="text btn btn-primary btn-thin text-capitalize"><span class="font-size-11 text-distance">${Item.data}</span> kms</span><#if Item_has_next> </#if>
156 </#list>
157 </span>
158 </li>
159 </#if>
160
161 <#if Contacto.Dificultad.data?has_content && tipoRuta!="coche">
162 <#assign dificultadMap = {
163 "1": languageUtil.get(request,"infoasturias-dificultad-baja"),
164 "2": languageUtil.get(request,"infoasturias-dificultad-media"),
165 "3": languageUtil.get(request,"infoasturias-dificultad-alta")
166 }
167 />
168 <li class="article-list-item">
169 <span class="fas fa-layer-group">
170 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-dificultad")}</span>
171 </span>
172 <span class="field-wrapper">
173 <span class="field">${languageUtil.get(request, "infoasturias-dificultad")}:</span>
174 <span class="text">
175 <span>${dificultadMap[Contacto.Dificultad.data]}</span>
176 </span>
177 </span>
178 </li>
179 </#if>
180
181 <#if Contacto.Codigo.data?has_content>
182 <li class="article-list-item">
183 <span class="fas fa-info">
184 <span class="hide-accessible">${languageUtil.get(request,"code")}</span>
185 </span>
186 <span class="field-wrapper">
187 <span class="field">${languageUtil.get(request, "code")}:</span>
188 <span class="text">
189 <span>${Contacto.Codigo.data}</span>
190 </span>
191 </span>
192 </li>
193 </#if>
194
195 <#if Contacto.Altitud.data?has_content>
196 <li class="article-list-item">
197 <span class="fas fa-ruler-vertical">
198 <span class="hide-accessible">${languageUtil.get(request,"metadata.Geographic.ALTITUDE")}</span>
199 </span>
200 <span class="field-wrapper">
201 <span class="field">${languageUtil.get(request, "metadata.Geographic.ALTITUDE")}:</span>
202 <span class="text">${Contacto.Altitud.data}</span>
203 </span>
204 </li>
205 </#if>
206
207 <#if Contacto.Desnivel.data?has_content>
208 <li class="article-list-item">
209 <span class="fas fa-chart-line">
210 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-desnivel")}</span>
211 </span>
212 <span class="field-wrapper">
213 <span class="field">${languageUtil.get(request, "infoasturias-desnivel")}:</span>
214 <span class="text">${Contacto.Desnivel.data} m.</span>
215 </span>
216 </li>
217 </#if>
218 </ul>
219 </div>
220 </div>
221 <div class="article-info-table-cell">
222 <div class="article-list-wrapper">
223 <ul class="article-list list-unstyled article-list-info">
224 <#if Contacto.TiempoBTT.data?has_content>
225 <li class="article-list-item">
226 <span class="fas fa-bicycle">
227 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-btt")}</span>
228 </span>
229 <span class="field-wrapper">
230 <span class="field">${languageUtil.get(request, "infoasturias-btt")}:</span>
231 <span class="text">${Contacto.TiempoBTT.data}</span>
232 </span>
233 </li>
234 </#if>
235
236 <#if Contacto.TiempoAPie.data?has_content>
237 <li class="article-list-item">
238 <span class="fas fa-shoe-prints">
239 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-a-pie")}</span>
240 </span>
241 <span class="field-wrapper">
242 <span class="field">${languageUtil.get(request, "infoasturias-a-pie")}:</span>
243 <span class="text">${Contacto.TiempoAPie.data}</span>
244 </span>
245 </li>
246 </#if>
247
248 <#if Contacto.TiempoCoche.data?has_content>
249 <li class="article-list-item">
250 <span class="fas fa-car">
251 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-coches")}</span>
252 </span>
253 <span class="field-wrapper">
254 <span class="field">${languageUtil.get(request, "infoasturias-coches")}:</span>
255 <span class="text">${Contacto.TiempoCoche.data}</span>
256 </span>
257 </li>
258 </#if>
259
260 <#if Contacto.TiempoViasVerdes.data?has_content>
261 <li class="article-list-item">
262 <span class="fas fa-route">
263 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-vias-verdes")}</span>
264 </span>
265 <span class="field-wrapper">
266 <span class="field">${languageUtil.get(request, "infoasturias-vias-verdes")}:</span>
267 <span class="text">${Contacto.TiempoViasVerdes.data}</span>
268 </span>
269 </li>
270 </#if>
271
272 <#if Contacto.TiempoAscension.data?has_content>
273 <li class="article-list-item">
274 <span class="fas fa-hiking">
275 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-ascension")}</span>
276 </span>
277 <span class="field-wrapper">
278 <span class="field">${languageUtil.get(request, "infoasturias-ascension")}:</span>
279 <span class="text">${Contacto.TiempoAscension.data}</span>
280 </span>
281 </li>
282 </#if>
283 </ul>
284 </div>
285 </div>
286 </div>
287 <div class="article-info-table-row">
288 <div class="article-info-table-cell">
289 <div class="article-list-wrapper">
290 <ul class="article-list list-unstyled article-list-info">
291 <#if Contacto.SituacionGeografica.data?has_content>
292 <li class="article-list-item">
293 <span class="fas fa-map-marked-alt">
294 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-situacion-geografica")}</span>
295 </span>
296 <span class="field-wrapper">
297 <span class="field">${languageUtil.get(request, "infoasturias-situacion-geografica")}:</span>
298 <span class="text">${Contacto.SituacionGeografica.data}</span>
299 </span>
300 </li>
301 </#if>
302
303 <#if Contacto.PuntoDePartida.data?has_content>
304 <li class="article-list-item">
305 <span class="fas fa-map-marker">
306 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-punto-de-partida")}</span>
307 </span>
308 <span class="field-wrapper">
309 <span class="field">${languageUtil.get(request, "infoasturias-punto-de-partida")}:</span>
310 <span class="text">${Contacto.PuntoDePartida.data}</span>
311 </span>
312 </li>
313 </#if>
314
315 <#if TipoRuta.data?has_content>
316 <li class="article-list-item hide"><#-- Se oculta por indicación de Noemí 27062022 -->
317 <span class="fas fa-route">
318 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-tipo-de-ruta")}</span>
319 </span>
320 <span class="field-wrapper">
321 <span class="field">${languageUtil.get(request, "infoasturias-tipo-de-ruta")}:</span>
322 <span class="text">${TipoRuta.data}</span>
323 </span>
324 </li>
325 </#if>
326
327 <#if Contacto.TipoDeRecorrido.data?has_content>
328 <li class="article-list-item">
329 <span class="fas fa-route">
330 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-tipo-recorrido")}</span>
331 </span>
332 <span class="field-wrapper">
333 <span class="field">${languageUtil.get(request, "infoasturias-tipo-recorrido")}:</span>
334 <span class="text">${Contacto.TipoDeRecorrido.data}</span>
335 </span>
336 </li>
337 </#if>
338 </ul>
339 </div>
340 </div>
341 <div class="article-info-table-cell">
342 <div class="article-list-wrapper">
343 <ul class="article-list list-unstyled article-list-info">
344 <#if Folletos.Folleto.data?has_content>
345 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Folletos.Folleto.data) />
346 <#if validator.isNotNull(dlFileEntry)>
347 <#assign downloadURL = "/documents/${groupId}/${dlFileEntry.getUuid()}" />
348 <#assign ext = dlFileEntry.getExtension()/>
349 <li class="article-list-item document document-${ext}">
350 <i class="far fa-file-pdf"></i>
351 <span class="field-wrapper">
352 <span class="field">${languageUtil.get(request, "visuality-issuu")}:</span>
353 <span class="text">
354 <#list Folletos.Folleto.getSiblings() as Item>
355 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Item.data) />
356 <#if validator.isNotNull(dlFileEntry)>
357 <#assign downloadURL = "/documents/${groupId}/${dlFileEntry.getUuid()}" />
358 <a href="${downloadURL}" title='${dlFileEntry.getTitle()}' class="">${dlFileEntry.getTitle()}</a><#if Item_has_next>, </#if>
359 </#if>
360 </#list>
361 </span>
362 </span>
363 </li>
364 </#if>
365 </#if>
366
367 <#if TrazadoRuta.data?has_content || TrazadoRutaGPX.data?has_content>
368 <li class="article-list-item document">
369 <span class="far fa-file">
370 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-trazado-de-la-ruta")}</span>
371 </span>
372 <span class="field-wrapper">
373 <span class="field">${languageUtil.get(request, "infoasturias-trazado-de-la-ruta")}:</span>
374 <span class="text">
375
376 <#assign tracks = [] />
377 <#if TrazadoRuta.data?has_content>
378 <#assign tracks = tracks + [TrazadoRuta.data] />
379 </#if>
380 <#if TrazadoRutaGPX.data?has_content >
381 <#assign tracks = tracks + [TrazadoRutaGPX.data] />
382 </#if>
383
384 <#if tracks?has_content >
385 <#list tracks as track>
386 <#assign dlFileEntryTrack = dlTool.getDLFileEntryByPath(track) />
387 <#if validator.isNotNull(dlFileEntryTrack)>
388 <#assign downloadURLkml = "/documents/${groupId}/${dlFileEntryTrack.getUuid()}" />
389 <#assign extKML = dlFileEntryTrack.getExtension()/>
390 <a href="${downloadURLkml}" class="${extKML}" title="${languageUtil.get(request,'infoasturias-download')} ${extKML}">${languageUtil.get(request,'infoasturias-download')} ${extKML}</a><#if track?has_next>, </#if>
391 </#if>
392 </#list>
393 </#if>
394
395 </span>
396 </span>
397 </li>
398 </#if>
399 </ul>
400 </div>
401 </div>
402 </div>
403 </div>
404 </div>
405 </div>
406 </div>
407 </div>
408 </div>
409 </div>
410 </header>
411
412 <div class="sheet sheet-lg">
413
414
415 <div class="article-great <#if validator.isNull(Informacion.Resumen.data)>hide</#if>">
416 <div class="route-resume-tracks-box hide">
417 <div class="route-resume-tracks">
418 <div class="route-resume-track-marker route-resume-track-marker-first"><div class="route-point-text"></div><div class="route-km-text">Km 0</div></div>
419 <div class="route-resume-track-marker route-resume-track-marker-last"><div class="route-point-text"></div><div class="route-km-text">Km 0</div></div>
420 </div>
421 </div>
422 <#if Informacion.Resumen.data?has_content>
423 <p>${htmlUtil.extractText(Informacion.Resumen.data)}</p>
424 </#if>
425 </div>
426
427
428
429 <#assign hasTab1 = Contacto.ContactoTexto.data?has_content || Informacion.InformacionTexto.data?has_content>
430 <#assign hasTab2 = Informacion.TextoTramos.data?has_content || validator.isNotNull(Tramos.TramoAlternativo.data) || Tramos.OrigenDestino.data?has_content || Tramos.DistanciaTramo.data?has_content || Tramos.DescripcionTramo.data?has_content>
431 <#assign hasTab3 = Geolocalizacion.Coordenadas.data?has_content || validator.isNotNull(TrazadoRuta.getData())>
432 <#assign hasTab4 = Informacion.Itinerario.data?has_content>
433 <#assign hasTab5 = Detalle.DetalleTexto.data?has_content || Detalle.DetalleImagen.data?has_content>
434 <#assign showFirstTab = true>
435
436 <div class="article-accordion accordion">
437 <#if Visualizador.Slide.getData()?has_content>
438 <div class="slick article-slick article-section <#if Visualizador.Slide.getSiblings()?size==1>hide</#if>">
439 <#list Visualizador.Slide.getSiblings() as Slide>
440 <#if validator.isNotNull(Slide.getData()) || validator.isNotNull(Slide.SlideUrl.getData())>
441 <#assign slideThumbnail3 = dlTool.getThumbnailByJSON(Slide.data, "3")! />
442 <#assign slideThumbnail2 = dlTool.getThumbnailByJSON(Slide.data, "2")! />
443 <#assign slidePath = dlTool.getPathByJSON(Slide.data, themeDisplay.getScopeGroupId())! />
444 <#assign slideUrl = Slide.SlideUrl.data />
445 <#assign dataMap = "" />
446
447 <#if slideUrl?has_content>
448
449 <#assign slideTitle = "${languageUtil.get(request, 'video')} ${Slide?index}" />
450 <#if Slide.SlideTitulo.data?has_content>
451 <#assign slideTitle = Slide.SlideTitulo.data />
452 </#if>
453
454 <#-- Youtube -->
455 <#assign slideUrl = stringUtil.replace(slideUrl, 'watch?v=', 'embed/') />
456 <#assign slideThumbnail2 = stringUtil.replace(slideUrl, 'www', 'img') />
457 <#assign slideThumbnail2 = stringUtil.replace(slideThumbnail2, 'embed', 'vi') />
458 <#assign slideThumbnail2 = '${slideThumbnail2}/mqdefault.jpg' />
459
460 <#-- Vimeo -->
461 <#if slideUrl?contains("vimeo")>
462 <#assign slideUrl = stringUtil.replace(slideUrl, 'http://vimeo.com/', 'https://player.vimeo.com/video/') />
463 <#assign slideVimeoId = stringUtil.extractLast(slideUrl, 'https://player.vimeo.com/video/') />
464 <#if slideVimeoId?has_content>
465 <#assign slideVimeoJsonPath = 'http://vimeo.com/api/v2/video/${slideVimeoId}.json' />
466 <#assign slideVimeoJsonContent = getUrlContent.getContent(slideVimeoJsonPath)! />
467 <#if slideVimeoJsonContent?has_content>
468 <#assign slideVimeoJsonArray = jsonFactoryUtil.createJSONArray(slideVimeoJsonContent) />
469 <#assign slideVimeoJsonItem = slideVimeoJsonArray.get(0) />
470 <#assign slideThumbnail2 = slideVimeoJsonItem.thumbnail_medium />
471 </#if>
472 </#if>
473 </#if>
474
475 <div id="slide-${Slide?index}" class="slide">
476 <a class="card card-simple card-video" href="#" onclick="javascript: event.preventDefault(); showDialogIframe('${slideUrl}', '${slideTitle}', 800, 600, 'videoPopup', 'videoPopupIframe');" title="${slideTitle}">
477 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
478 <img class="hide-accessible" alt="${slideTitle}" src="${slideThumbnail2}">
479 </a>
480 </div>
481 <#else>
482 <#assign slideTitle = "${languageUtil.get(request, 'image')} ${Slide?index}" />
483 <#if Slide.SlideTitulo.data?has_content>
484 <#assign slideTitle = Slide.SlideTitulo.data />
485 </#if>
486
487 <div class="slide">
488 <a class="card card-simple lightbox" href="${slidePath}" title="${slideTitle}">
489 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
490 <img class="hide-accessible" alt="${slideTitle}" src="${slideThumbnail2}">
491 </a>
492 </div>
493 </#if>
494 </#if>
495 </#list>
496 </div>
497 </#if>
498
499 <#if hasTab1>
500 <div id="tab1" class="article-section accordion-item">
501 <a href="#tabContent1" id="tabHeading" class="d-block border-0 tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent1" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'info')}</h3></a>
502 <div id="tabContent1" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading">
503 <#if Contacto.ContactoTexto.data?has_content>
504 ${Contacto.ContactoTexto.data}
505 </#if>
506 <#if Informacion.InformacionTexto.data?has_content>
507 ${Informacion.InformacionTexto.data}
508 </#if>
509 </div>
510 </div>
511 <#assign showFirstTab = false>
512 </#if>
513
514 <#if hasTab2>
515 <div id="tab2" class="article-section accordion-item">
516 <a href="#tabContent2" id="tabHeading2" class="d-block border-0 tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent2" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-recorrido')}</h3></a>
517 <div id="tabContent2" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading2">
518 <#list Informacion.TextoTramos.getSiblings() as Item>
519 <#if validator.isNotNull(Item.data)>
520 <p>${Item.data}</p>
521 </#if>
522 </#list>
523 <#list Tramos.getSiblings() as Item>
524 <h4 id="track-${Item?index+1}" class="h4 mt-5 route-${Item?index+1}">
525 <#if tipoRuta=="coche">${languageUtil.get(request,"day")} ${Item?index+1}:</#if> ${Item.OrigenDestino.data}
526 <span class="route-distance btn btn-link float-right text-capitalize">
527 ${Item.DistanciaTramo.data}
528 </span>
529 </h4>
530
531 <#if getterUtil.getBoolean(Item.TramoAlternativo.getData()) && getterUtil.getBoolean(Item.TramoAlternativo.getData())>
532 <ul class="article-list list-unstyled article-list-info">
533 <li class="article-list-item">
534 <span class="fas fa-route">
535 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-tramo-alternativo")}</span>
536 </span>
537 <span class="field-wrapper">
538 <span class="field">${languageUtil.get(request, "infoasturias-tramo-alternativo")}:</span>
539 </span>
540 </li>
541 </ul>
542 </#if>
543
544 <#if Item.DescripcionTramo.data?has_content>
545 ${Item.DescripcionTramo.data}
546 </#if>
547 </#list>
548 </div>
549 </div>
550 <#assign showFirstTab = false>
551 </#if>
552
553 <#if hasTab3>
554 <#assign showFirstTab = true>
555 <#assign coordenadas=stringUtil.split(Geolocalizacion.Coordenadas.data) />
556 <div id="tab3" class="article-section accordion-item">
557 <a href="#tabContent3" id="tabHeading3" class="d-block border-0 tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent3" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'map')}</h3></a>
558 <div id="tabContent3" class="article-section-content accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading3">
559 <script src="/o/turismo-asturias-theme/js/leaflet/leaflet.js"></script>
560 <script type="text/javascript">
561 <#assign xpath = saxReaderUtil.createXPath("//root:StyleMap", "root", "http://www.opengis.net/kml/2.2")/>
562 <#assign style_maps = xpath.selectNodes(document)/>
563
564 var style_mapsJS = {};
565 var line_stylesJS = {};
566
567 <#list style_maps as style_map>
568 <#assign style_map_styleurl_path = "${style_map.getUniquePath()}/*[name()='Pair']/*[name()='styleUrl']"/>
569 <#assign style_map_styleurl_node = style_map.selectSingleNode(style_map_styleurl_path)/>
570 <#assign nodeText = style_map_styleurl_node.getText()/>
571 style_mapsJS['${style_map.selectSingleNode("${style_map.getUniquePath()}/@id").getText()}'] = '${nodeText?substring(1)}';
572 </#list>
573 <#assign xpath = saxReaderUtil.createXPath("//root:Style", "root", "http://www.opengis.net/kml/2.2")/>
574 <#assign line_styles = xpath.selectNodes(document)/>
575
576 <#list line_styles as line_style>
577 <#assign line_style_color_path = "${line_style.getUniquePath()}/*[name()='LineStyle']/*[name()='color']"/>
578 <#assign line_style_color_node = line_style.selectSingleNode(line_style_color_path)!/>
579 <#if validator.isNotNull(line_style_color_node)>
580 line_stylesJS['${line_style.selectSingleNode("${line_style.getUniquePath()}/@id").getText()}'] = {color: '#${line_style_color_node.getText()?substring(6,8)}${line_style_color_node.getText()?substring(4,6)}${line_style_color_node.getText()?substring(2,4)}', opacity: 0x${line_style_color_node.getText()?substring(0,2)}/0xFF};
581 </#if>
582 </#list>
583 </script>
584
585
586 <script type="text/javascript">
587 var route = {};//Ruta
588 var totalDistance = 0;
589 <#list placemarksName as name>
590
591 var nombreTramo = "${name.getText()}";
592 nombreTramo = nombreTramo.replace("Tramo ","");
593 nombreTramo = nombreTramo.replace(/[–]/gi,'-');
594 nombreTramo = nombreTramo.trim();
595
596
597 var tramo = {};//Datos del tramo
598 var coordinatesJS = [];//Coordenadas del tramo
599
600 <#-- Identificador color del Tramo -->
601 <#assign xpath = saxReaderUtil.createXPath("//root:LineString/ancestor::root:Placemark[root:name='${name.getText()}']/root:styleUrl", "root", "http://www.opengis.net/kml/2.2")/>
602 <#assign styleUrl = xpath.selectSingleNode(document)!>
603
604 <#-- Obtener los puntos de ruta para dibujarlos -->
605 <#assign xpath = saxReaderUtil.createXPath("//root:LineString/ancestor::root:Placemark[root:name='${name.getText()}']/root:LineString/root:coordinates", "root", "http://www.opengis.net/kml/2.2")/>
606 <#assign coordinates = xpath.selectSingleNode(document)!>
607 <#-- Hacemos un split para separar las coordenadas -->
608 <#assign arrayCoordinates = coordinates.getText()?split(" ")/>
609 <#assign start=""/>
610 <#assign end=""/>
611 <#list arrayCoordinates as coordinate>
612 <#assign splitCoordinates = coordinate?split(",")/>
613
614
615 <#if splitCoordinates?size gte 2>
616 coordinatesJS.push(new L.LatLng(${splitCoordinates[1]}, ${splitCoordinates[0]}));
617 <#if validator.isNull(start)>
618 <#assign start = "${splitCoordinates[1]} +',' + ${splitCoordinates[0]}">
619 </#if>
620 <#assign end = "${splitCoordinates[1]} +',' + ${splitCoordinates[0]}">
621 </#if>
622
623 </#list>
624 tramo['start'] = ${start};
625 tramo['end'] = ${end};
626
627 var distance = 0;
628 var previousPoint="";
629
630 tramo['name'] = nombreTramo;
631 tramo['lineStyle'] = line_stylesJS[style_mapsJS['${styleUrl.getText()?substring(1)}']];
632 tramo['coordinates'] = coordinatesJS;
633
634 coordinatesJS.forEach(function (latLng) {
635 if (previousPoint) {
636 distance += previousPoint.distanceTo(latLng);
637 }
638 previousPoint = latLng;
639 });
640
641 tramo['distance'] = (distance/1000).toFixed(1)/1;
642 totalDistance +=(distance/1000).toFixed(1)/1;
643
644 <#if tramosAlternativosArray?size!=0>
645 tramo['isAlternative'] = ${tramosAlternativosArray[count]};
646 <#else>
647 tramo['isAlternative'] = false;
648 </#if>
649
650
651 route['${counter}'] = tramo;
652
653 <#assign counter = counter +1/>
654 <#assign count = count +1/>
655
656 </#list>
657 </script>
658 <div class="article-section-content">
659 <div id="article-map-wrapper-${articleId}" class="article-map-wrapper">
660 <div id="article-map-content-${articleId}" style="width: 100%; height: 400px; z-index:1"><!-- MAP --></div>
661 <div class="article-map-form">
662 <div class="name important">${title}</div>
663 <div class="gps"><span class="label">GPS:</span> <span class="value important" itemprop="geo">${lookAtLatitude.getText()}, ${lookAtLongitude.getText()}</span></div>
664 <form action="https://maps.google.es/maps" method="get" target="_blank">
665 <input type="hidden" name="daddr" value="${lookAtLatitude.getText()}, ${lookAtLongitude.getText()}">
666 <label for="saddrText"><span class="label hide-accessible">${languageUtil.get(request,'infoasturias-insert-from')}: </span></label>
667 <label for="saddr"><span class="label">${languageUtil.get(request,'infoasturias-from')}: </span></label>
668 <input class="form-control" type="text" maxlength="40" name="saddrText" id="saddrText" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}">
669 <input class="form-control" type="hidden" name="saddr" id="saddr" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}">
670 <button class="btn btn-text" type="submit">${languageUtil.get(request,'infoasturias-como-llegar')} »</button>
671 </form>
672 </div>
673 </div>
674
675 <script type="text/javascript">
676 AUI().ready('aui-base', function(A){
677 var lookAt = new L.LatLng(${lookAtLatitude.getText()}, ${lookAtLongitude.getText()});//Cámara
678
679 <#if validator.isNotNull (Geolocalizacion.Coordenadas.data)>
680 lookAt = new L.LatLng(${Geolocalizacion.Coordenadas.data});//contenido
681 </#if>
682 const mapContent = new L.Map('article-map-content-${articleId}', { center: lookAt, zoom: 10 });
683 const osm = new L.TileLayer('https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}');
684
685
686 mapContent.addLayer(osm);
687
688 //definir iconos inicio y fin tramo
689 var startMarker;
690 var middleMarker;
691 var endMarker;
692 var colorSeries = ["e9ecef","f5f7f9","fff"];
693 var colorSeriesSelector = 0;
694 var generalDistance =0;
695
696 var endIconTheme = '/o/turismo-asturias-theme/images/icons/routes/Icono_Fin_Ruta_${iconTipoRuta}_min.png';
697 var endIcon = L.icon({
698 iconUrl: endIconTheme,
699 iconSize: [27, 35],
700 iconAnchor: [13, 35],
701 iconShadow: [0,0],
702 popupAnchor: [0, -30]
703 });
704 var middleIconTheme = '/o/turismo-asturias-theme/images/icons/routes/gmaps-marker-icon-grey.png';
705 var middleIcon = L.icon({
706 iconUrl: middleIconTheme,
707 iconSize: [20, 28],
708 iconAnchor: [10, 28],
709 iconShadow: [0,0],
710 popupAnchor: [0, -30]
711 });
712
713 var startIconTheme = '/o/turismo-asturias-theme/images/icons/routes/Icono_Inicio_Ruta_${iconTipoRuta}_min.png';
714 var startIcon = L.icon({
715 iconUrl: startIconTheme,
716 iconSize: [27, 35],
717 iconAnchor: [13, 35],
718 iconShadow: [0,0],
719 popupAnchor: [0, -30]
720 });
721
722 for (const ruta in route) {
723 var stretch = route[ruta];
724
725 var name = stretch.name;
726 var nameArray = name.split("-");
727 var coordinates = stretch.coordinates;
728 var distance =''+ stretch.distance;
729 var isStrechAlternative = stretch.isAlternative;
730 var lineStyle = stretch.lineStyle || { color: '#3c3be3', opacity: 1 };
731 var startCoordinates = stretch.start.split(",");
732 var endCoordinates = stretch.end.split(",");
733
734 var track_node = A.Node.create('<div class="route-resume-track ' + (ruta==1?'route-resume-track-first':'') + '"><a class="route-resume-track-link" href="#track-'+(ruta)+'"></a></div>');
735 var track_size = ((distance/totalDistance*100) + '%');
736 track_node.setStyles({width: track_size, backgroundColor: '#' + colorSeries[colorSeriesSelector]});
737 track_node.appendTo(A.one('.route-resume-tracks'));
738
739
740 if(distance)
741 A.one('.template .route-'+ ruta + ' .route-distance').text(distance.replace(".",",") + ' Kms');
742
743 if(!isStrechAlternative)
744 generalDistance = generalDistance + stretch.distance;
745
746 if(Object.keys(route).length == 1){
747 A.one('.route-resume-track-marker-first .route-point-text').text(nameArray[0]);
748 A.one('.route-resume-track-marker-last .route-km-text').text('Km ' + distance.replace(".",","));
749 A.one('.route-resume-track-marker-last .route-point-text').text(nameArray[nameArray.length-1]);
750 startMarker = L.marker([startCoordinates[0],startCoordinates[1]], {icon: startIcon}).bindPopup(nameArray[0]).addTo(mapContent);
751 endMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: endIcon}).bindPopup(nameArray.length-1).addTo(mapContent);
752 }
753 else{
754 var track_point =A.Node.create('<div class="route-resume-point"></div>');
755 if(ruta==1){
756 A.one('.route-resume-track-marker-first .route-point-text').text(nameArray[0]);
757 var track_point_text = A.Node.create('<div class="route-point-text">' + nameArray[1] + '</div><div class="route-km-text">Km '+distance+'</div>');
758 startMarker = L.marker([startCoordinates[0],startCoordinates[1]], {icon: startIcon}).bindPopup(nameArray[0]).addTo(mapContent);
759
760 if(ruta == Object.keys(route).length-1 && route[Object.keys(route).length].isAlternative)
761 endMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: endIcon}).bindPopup(nameArray.length-1).addTo(mapContent);
762 else
763 middleMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: middleIcon}).bindPopup(nameArray.length-1).addTo(mapContent);
764
765 track_point_text.appendTo(track_point);
766 track_point.appendTo(A.one('.route-resume-tracks'));
767 }
768 else if(ruta == Object.keys(route).length){
769 A.one('.route-resume-track-marker-last .route-km-text').text('Km ' + distance.replace(".",","));
770 A.one('.route-resume-track-marker-last .route-point-text').text(nameArray[nameArray.length-1]);
771
772 if(isStrechAlternative){
773 middleMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: middleIcon}).bindPopup(nameArray[nameArray.length-1]).addTo(mapContent);
774 var alternativetrack_node = A.Node.create('<li class="article-list-item distance-wrapper"><span class="fas fa-ruler-horizontal"><span class="hide-accessible"> ${languageUtil.get(request, "infoasturias-tramo-alternativo")}</span></span><span class="field-wrapper"><span class="field">${languageUtil.get(request, "infoasturias-tramo-alternativo")}: </span><span class="text btn btn-secondary btn-thin text-lowercase"><span class="font-size-11 text-white text-distance-alternative">'+distance +'</span> kms</span></span></li>');
775 alternativetrack_node.appendTo(A.one('.template .info-route'));
776 }
777 else{
778 endMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: endIcon}).bindPopup(nameArray[nameArray.length-1]).addTo(mapContent);
779 }
780 }
781 else{
782 var track_point_text = A.Node.create('<div class="route-point-text">' + nameArray[nameArray.length-1] + '</div><div class="route-km-text">Km '+distance+'</div>');
783 track_point_text.appendTo(track_point);
784 track_point.appendTo(A.one('.route-resume-tracks'));
785 middleMarker = L.marker([startCoordinates[0],startCoordinates[1]], {icon: middleIcon}).bindPopup(nameArray[0]).addTo(mapContent);
786 }
787 }
788
789 var polyline = new L.Polyline(coordinates, {
790 color: '' + lineStyle.color,
791 opacity: lineStyle.opacity
792 });
793 polyline.bindPopup(name).addTo(mapContent);
794
795
796 colorSeriesSelector++;
797 if(colorSeriesSelector == 3)
798 colorSeriesSelector = 0;
799
800 }//fin rutas
801
802 if(generalDistance)
803 A.one('.template .text-distance').text(''+ Math.round(generalDistance * 100) / 100);
804
805 //Contributor
806 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
807 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'
808 }).addTo(mapContent);
809
810 }); //AUI.ready
811 </script>
812 </div>
813 <#if validator.isNotNull(dlFileEntryKML) && tipoRuta!="coche">
814
815 <#assign params = {
816 "displayStyle":"ddmTemplate_435797",
817 "displayStyleGroupId":"${themeDisplay.getCompanyGroupId()}",
818 "portletId": portletTool.getPortletId(request),
819 "articleId":"${articleId}",
820 "dlFileEntryuuId":"${dlFileEntryKML.getUuid()}"
821 }>
822 <#assign portletURL = portletTool.createURL(request, "as_asac_adtvisor_portlet_AdtVisorDialogPortlet", themeDisplay.getPlid(), "RENDER_PHASE", "pop_up", params) />
823 <div class="button-row button-row-center my-3">
824 <button type="button" class="btn btn-primary btn-small text-center text-uppercase" onclick="event.preventDefault(); showDialogIframe('${portletURL}','${languageUtil.get(request,'profile')}', '800px', '','elevationProfile', 'elevationProfileIframe');">
825 ${languageUtil.get(request,'infoasturias-ver-perfil-elevacion')}
826 </button>
827 </div>
828
829 </#if>
830 </div>
831 </div>
832 <#assign showFirstTab = false>
833 </#if>
834
835 <#if hasTab4>
836 <div id="tab4" class="article-section accordion-item hide">
837 <a href="#tabContent4" id="tabHeading4" class=" tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent4" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-itinerario')}</h3></a>
838 <div id="tabContent4" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading4">
839 <#list Informacion.Itinerario.getSiblings() as Item>
840 <#if Item.data?has_content>
841 <div class=" itinerario <#if !Item?is_last>pb-5</#if>"><p>${Item.data}</p></div>
842 </#if>
843 </#list>
844 </div>
845 </div>
846 <#assign showFirstTab = false>
847 </#if>
848
849 <#if hasTab5>
850 <div id="tab5" class="article-section accordion-item">
851 <a href="#tabContent5" id="tabHeading5" class="tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent5" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'detail')}</h3></a>
852 <div id="tabContent5" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading5">
853 <#assign htmlGallery = journalTool.getHTMLGallery(Detalle.DetalleImagen.getSiblings(), 3, "gallery-thumbs") />
854
855 <#if Detalle.DetalleTexto.data?has_content>
856 ${Detalle.DetalleTexto.data}
857 </#if>
858
859 <#if validator.isNotNull(htmlGallery)>
860 <section class="image-gallery">
861 <h4 class="h4 pb-0">${languageUtil.get(locale, "image-gallery")}</h4>
862 ${htmlGallery}
863 </section>
864 </#if>
865 </div>
866 </div>
867 <#assign showFirstTab = false>
868 </#if>
869 </div>
870 <#if Informacion.Observaciones.data?has_content>
871 <div class="article-border">
872 ${Informacion.Observaciones.data}
873 </div>
874 </#if>
875 </div>
876
877 <#-- Related -->
878 <#assign relatedJournalArticles = assetTool.getRelatedJournalArticlesApproved(assetEntry)/>
879 <#if validator.isNotNull(relatedJournalArticles) && relatedJournalArticles?size gt 0>
880 <div class="article-related portlet-background-grey-container">
881 <div class="container">
882 <h3 class="title-section">${languageUtil.get(request,'related-assets')}</h3>
883 <div class="slick article-related-slick">
884 <#list relatedJournalArticles as currentJournalArticle>
885 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
886 <div class="slide">
887 <a class="card background card-background-9-14" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
888 <span class="d-block image-wrapper aspect-ratio-bg-cover" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
889 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
890 <span class="card-body">
891 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
892 </span>
893 </span>
894 </a>
895 </div>
896 </#list>
897 </div>
898 </div>
899 </div>
900 </#if>
901
902 <#-- Nearby -->
903 <#assign classTypeIds = [598853,582814,625593,623117,609431,593783]>
904 <#assign assetsNearJournalArticles = assetNearTool.getNearJournalArticles(themeDisplay.getScopeGroupId(), assetEntry.getEntryId(), 50.0, classTypeIds, 25)! />
905 <#if validator.isNotNull(assetsNearJournalArticles) && assetsNearJournalArticles?size gt 0>
906 <div class="article-nearby portlet-container-margin">
907 <div class="container">
908 <div class="article-nearby-container">
909 <h3 class="title-section">${languageUtil.get(request,'infoasturias-near-here')}</h3>
910 <div class="slick article-nearby-slick">
911 <#list assetsNearJournalArticles as currentJournalArticle>
912 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
913 <div class="slide">
914 <a class="card" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
915 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
916 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
917 <span class="card-hover">
918 <span class="card-text">${currentJournalArticle.getDescription(locale)}</span>
919 </span>
920 </span>
921 <span class="card-body">
922 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
923 <span class="card-subtitle">
924 <span class="d-block">${currentJournalArticle.getVersion()} Kms</span>
925 <span class="d-block">${journalTool.getCategoriesNames(groupId, currentJournalArticle.getArticleId(), locale, ["Concejos"])}</span>
926 </span>
927 </span>
928 </a>
929 </div>
930 </#list>
931 </div>
932 </div>
933 </div>
934 </div>
935 </#if>
936</article>