Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> searcher.getURLViewInContext(relatedArticle,themeDisplay) [in template "842907#842945#2659911" at line 341, column 43] ---- Tip: If the failing expression is known to be 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 urlViewContext = searcher.get... [in template "842907#842945#2659911" at line 341, column 17] ----
1<#--FTL de funciones genericas-->
2<#assign funcionesCustomId = layout.getGroup().getExpandoBridge().getAttribute("iybg-ftl-funciones")>
3<#include "${templatesPath}/${funcionesCustomId}">
4
5<#-- SERVICES -->
6<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
7<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
8<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") >
9<#assign fileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") >
10<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
11<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
12<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")/>
13<#assign textFormatter = staticUtil["com.liferay.portal.kernel.util.TextFormatter"]>
14<#assign searcher = serviceLocator.findService("net.juventud.buscador.categorias.service.SearchService")>
15
16<#-- VARIABLES -->
17<#assign articleId = .vars['reserved-article-id'].data >
18<#assign articleTitle = .vars['reserved-article-title'].data >
19<#assign journalArticle = journalArticleLocalService.fetchArticle(groupId, articleId) />
20<#assign currentArticleResourcePrimKey = journalArticle.getResourcePrimKey() />
21<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey) />
22<#assign currentArticleAssetEntryId = currentArticleAssetEntry.getEntryId() />
23<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) />
24<#assign urlEncoder = staticUtil["java.net.URLEncoder"]>
25<#assign group = groupLocalService.getGroup(groupId)/>
26<#assign groupFriendlyURL = group.getFriendlyURL() />
27<#assign renderURL = themeDisplay.getURLCurrent()>
28<#assign redirectUrl ="">
29<#assign equalsIndex = 0>
30<#assign redirectUrlPatter = "redirectUrl=">
31<#assign redirectUrlProgPatter = "redirectUrlProg=">
32
33<#-- Se viene desde detalle de listado de programas-->
34<#if (renderURL?index_of(redirectUrlPatter) != -1)>
35 <#assign paramLength = getterUtil.getInteger(renderURL?length)>
36 <#assign equalsIndex = getterUtil.getInteger(renderURL?index_of(redirectUrlPatter))>
37 <#assign equalsIndex = equalsIndex + (redirectUrlPatter?length)>
38 <#assign redirectUrl = httpUtil.decodeURL((renderURL?substring(equalsIndex,paramLength)))>
39</#if>
40
41<#-- Se vuelve desde detalle de convocatorias-->
42<#if (renderURL?index_of(redirectUrlProgPatter) != -1)>
43 <#assign paramLength = getterUtil.getInteger(renderURL?length)>
44 <#assign equalsIndex = getterUtil.getInteger(renderURL?index_of(redirectUrlProgPatter))>
45 <#assign equalsIndex = equalsIndex + (redirectUrlProgPatter?length)>
46 <#assign redirectUrl = httpUtil.decodeURL((renderURL?substring(equalsIndex,paramLength)))>
47</#if>
48
49<#if request?has_content>
50 <#assign completeCurrentUrl = urlEncoder.encode((request["attributes"]["CURRENT_COMPLETE_URL"])?string?split("?")[0]?string, "UTF-8")>
51<#else>
52 <#assign completeCurrentUrl = 'https://web.bizkaia.eus'>
53</#if>
54<#assign encodedTitle = urlEncoder.encode(articleTitle, "UTF-8")>
55<#assign completeCurrentRedirecUrl = httpUtil.decodeURL(completeCurrentUrl)>
56<#assign completeCurrentRedirecUrlProg = completeCurrentRedirecUrl + "?"+redirectUrlProgPatter + redirectUrl>
57
58<#--HTTPS-->
59<#assign currentUrl= themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
60<#assign currentUrl=currentUrl?split("?")[0] />
61<#--FIN DE HTTPS-->
62
63<section class="iybg-container">
64<div class="row">
65 <div class="col-md-8">
66 <h1 class="bold"><@liferay.language key='iybg.programas.detalle.title-upper'/></h1>
67 <div class="row">
68 <div class="col-md-1 col-sm-1">
69 <@social />
70 </div>
71
72 <div class="col-md-11 pl-2r ls-0">
73
74 <#-- Categorias de tipo Ambito asociadas al journalArticle que se está mostrando-->
75 <#assign ambitosVocabularyName = "BG-Ambitos" />
76 <#assign ambitosVocabulary = assetVocabularyLocalService.getGroupVocabulary(themeDisplay.getCompanyGroupId(), ambitosVocabularyName) />
77 <#assign categories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(journalArticle.resourcePrimKey)) >
78
79 <#list categories as category>
80 <#if validator.equals(category.vocabularyId?string,ambitosVocabulary.getVocabularyId()?string)>
81 <p class="pre-tit bold fz-medium mb-0">${category.getTitle(locale)?upper_case}</p>
82 </#if>
83 </#list>
84
85 <h2 class="mt-0 not-text-transform"><span class="bold">${titulo.getData()}</span></h2>
86 <#if descripcion.getData()?has_content>
87 <p>${descripcion.getData()}</p>
88 </#if>
89
90 <#if destinadoa.getData()?has_content>
91 <h3 class="fw-700"><@liferay.language key='iybg.programas.detalle.destinado-a'/></h3>
92 <p>${destinadoa.getData()}</p>
93 </#if>
94
95 <#if objetivos.getData()?has_content>
96 <h3 class="fw-700"><@liferay.language key='iybg.programas.detalle.objetivos'/></h3>
97 ${objetivos.getData()}
98 </#if>
99
100 <#assign nombre = "">
101 <#assign departamento = "">
102 <#assign direccion = "">
103
104 <#if bloqueEntidadPromotora.getSiblings()?has_content>
105 <#list bloqueEntidadPromotora.getSiblings() as curBloque>
106 <#assign esDiputacion = getterUtil.getBoolean(curBloque.isDipuptacion.getData())>
107 <#assign nombre = curBloque.getChild('nombreEntidad').getData()>
108 <#assign departamento = curBloque.getChild('departamentoEntidad').getData()>
109 <#assign direccion = curBloque.getChild('direccionEntidad').getData()>
110 </#list>
111 </#if>
112
113 <#if nombre?has_content || departamento?has_content || direccion?has_content >
114 <h3 class="fw-700"><@liferay.language key='iybg.programas.detalle.entidad-promotora'/></h3>
115 <ul class="bipo_listaflecha">
116 <#if esDiputacion>
117 <li>
118 <span><@liferay.language key='iybg.programas.detalle.entidad'/>: </span>
119 <#if locale =="es_ES">
120 <@liferay.language key='iybg.theme.bizkaia-bfa-es'/>
121 <#else>
122 <@liferay.language key='iybg.theme.bizkaia-bfa-eu'/>
123 </#if>
124 </li>
125 <#if departamento?has_content>
126 <li><span><@liferay.language key='iybg.programas.detalle.departamento'/>: </span> ${departamento}</li>
127 </#if>
128 <#else>
129 <#if nombre?has_content>
130 <li><span><@liferay.language key='iybg.programas.detalle.entidad'/>: </span> ${nombre}</li>
131 </#if>
132 <#if departamento?has_content>
133 <li><span><@liferay.language key='iybg.programas.detalle.ayuntamiento'/>: </span> ${departamento}</li>
134 </#if>
135 </#if>
136 <#if direccion?has_content>
137 <li><span><@liferay.language key='iybg.programas.detalle.direccion'/>: </span> ${direccion}</li>
138 </#if>
139 </ul>
140 </#if>
141
142 <#assign estrategia = "">
143 <#assign linea = "">
144
145 <#if bloqueClasificacionGaztedi.getSiblings()?has_content>
146 <#list bloqueClasificacionGaztedi.getSiblings() as curBloque>
147 <#assign estrategia = curBloque.getChild('estrategiaClasificacion').getData()>
148 <#assign linea = curBloque.getChild('lineaIntervencionClasificacion').getData()>
149 </#list>
150 </#if>
151
152 <#if estrategia?has_content || linea?has_content >
153 <h3 class="fw-700"><@liferay.language key='iybg.programas.detalle.clasificacion-proyecto-gaztedi'/></h3>
154 <ul class="bipo_listaflecha">
155 <#if estrategia?has_content >
156 <li><span><@liferay.language key='iybg.programas.detalle.estrategia'/>: </span><@liferay.language key=estrategia/></li>
157 </#if>
158 <#if linea?has_content >
159 <li><span><@liferay.language key='iybg.programas.detalle.linea'/>: </span> <@liferay.language key=linea/></li>
160 </#if>
161 </ul>
162 </#if>
163
164 <#--VER SI HAY DOCUMENTOS-->
165 <#--VALOR EN EL PRIMER ELEMENTO DOCUMENTO-->
166
167 <#assign hayDocumentos = false>
168 <#if bloqueDocumento.getSiblings()?has_content>
169 <#if bloqueDocumento.getSiblings()[0].getChild('documento')?has_content
170 && bloqueDocumento.getSiblings()[0].getChild('documento').getData()?has_content
171 && bloqueDocumento.getSiblings()[0].getChild('nombreDocumento')?has_content
172 && bloqueDocumento.getSiblings()[0].getChild('nombreDocumento').getData()?has_content>
173 <#assign hayDocumentos =true>
174 </#if>
175 </#if>
176
177 <#--VER SI HAY ENLACES-->
178 <#--VALOR EN EL PRIMER ELEMENTO ENLACE-->
179 <#assign hayEnlaces = false>
180 <#if bloqueEnlace.getSiblings()?has_content>
181 <#if bloqueEnlace.getSiblings()[0].getChild('urlEnlace')?has_content
182 && bloqueEnlace.getSiblings()[0].getChild('urlEnlace').getData()?has_content
183 && bloqueEnlace.getSiblings()[0].getChild('nombreEnlace')?has_content
184 && bloqueEnlace.getSiblings()[0].getChild('nombreEnlace').getData()?has_content>
185 <#assign hayEnlaces =true>
186 </#if>
187 </#if>
188
189 <#if hayDocumentos || hayEnlaces>
190 <h3 class="fw-700"><@liferay.language key='iybg.programas.detalle.mas-informacion'/></h3>
191
192 <#-- <ul class="dowload separated"> -->
193 <ul class="listasPDF">
194 <#--Documentos-->
195 <#if hayDocumentos>
196 <#list bloqueDocumento.getSiblings() as curBloqueDocumentos>
197 <#assign nombreDocumento = curBloqueDocumentos.getChild('nombreDocumento').getData()>
198 <#if curBloqueDocumentos.getChild('documento').getData()?has_content >
199 <#assign attachmentUrl = curBloqueDocumentos.getChild('documento').getData()>
200 <#assign fileEntry = getFileEntry(attachmentUrl) >
201
202 <#assign enlace = replaceSpecialCharacters(attachmentUrl)>
203 <#assign extension = fileEntry.extension?upper_case>
204 <#assign size =textFormatter.formatStorageSize(fileEntry.size, locale)?upper_case>
205
206 <li>
207 <a title='<@liferay.language key="opens-new-window"/>' href="${enlace}" target="_blank">
208 <span class="bipoicon icon-descargar static">${fileEntry.extension}</span>
209 ${nombreDocumento}
210 </a>
211 <strong>(${extension} ${size})</strong>
212 </li>
213 </#if>
214 </#list>
215 </#if>
216
217 <#if hayEnlaces>
218 <#list bloqueEnlace.getSiblings() as curBloqueEnlace>
219 <#if curBloqueEnlace.getChild("nombreEnlace").getData()?has_content && curBloqueEnlace.getChild('urlEnlace').getData() != "">
220 <#assign nombreEnlace = curBloqueEnlace.getChild('nombreEnlace').getData()>
221 <#assign urlEnlace = curBloqueEnlace.getChild('urlEnlace').getData()>
222 <#assign enlace = replaceSpecialCharacters(urlEnlace)>
223
224 <li>
225 <!--ENLACE-->
226 <a title='<@liferay.language key="opens-new-window"/>'
227 href="${enlace}" target="_blank" >
228 <!--ICONO DESCARGA-->
229
230 <span class="bipoicon icon-new-tab"></span> <span> ${nombreEnlace}</span></a>
231
232 </li>
233 </#if>
234 </#list>
235 </#if>
236 </ul>
237 </#if>
238 </div>
239 </div>
240 </div>
241
242 <#-- Comprobamos si hay tipologias-->
243 <#assign hayTipologias = true>
244 <#if bloqueTipologias.getSiblings()?has_content>
245
246 <#if (validator.isNull(bloqueTipologias.getSiblings()[0].getChild('tipologiaN1').getData()) ||
247 validator.equals(bloqueTipologias.getSiblings()[0].getChild('tipologiaN1').getData()?trim,""))
248 && (validator.isNull(bloqueTipologias.getSiblings()[0].getChild('tipologiaN2').getData()) ||
249 validator.equals(bloqueTipologias.getSiblings()[0].getChild('tipologiaN2').getData()?trim,""))
250 && (validator.isNull(bloqueTipologias.getSiblings()[0].getChild('tipologiaN3').getData()) ||
251 validator.equals(bloqueTipologias.getSiblings()[0].getChild('tipologiaN3').getData()?trim,""))
252 && (validator.isNull(bloqueTipologias.getSiblings()[0].getChild('tipologiaN4').getData()) ||
253 validator.equals(bloqueTipologias.getSiblings()[0].getChild('tipologiaN4').getData()?trim,""))
254 >
255 <#assign hayTipologias = false>
256 </#if>
257
258 </#if>
259
260 <#if hayTipologias || presupuesto.getData()?has_content || foto.getData()?has_content>
261
262 <div class="col-md-3">
263 <div class="card ficha">
264 <h2 class="bold"><@liferay.language key='iybg.programas.detalle.datos-programa-upper'/></h2>
265 <#if foto.getData()?? && foto.getData() != "">
266 <img data-fileentryid="${foto.getAttribute("fileEntryId")}" alt="Card image cap" src="${foto.getData()}" class="card-img-top" />
267 </#if>
268 <div class="card-body">
269
270 <ul>
271 <#if hayTipologias>
272 <li><span class="bold"><@liferay.language key='iybg.programas.detalle.tipologia'/></span>
273
274 <ul id="tipologia" class="pl-0 pt-0 pb-0">
275
276 <#list bloqueTipologias.getSiblings() as curBloque>
277 <#assign t1=curBloque.getChild('tipologiaN1').getData()>
278 <#assign t2=curBloque.getChild('tipologiaN2').getData()>
279 <#assign t3=curBloque.getChild('tipologiaN3').getData()>
280 <#assign t4=curBloque.getChild('tipologiaN4').getData()>
281
282
283 <#if validator.isNotNull(curBloque.getChild('tipologiaN1').getData()) && !validator.equals(curBloque.getChild('tipologiaN1').getData()?trim,"")>
284 <li class="mb-0"><@liferay.language key=t1/></li>
285 </#if>
286
287 <#if validator.isNotNull(curBloque.getChild('tipologiaN2').getData()) && !validator.equals(curBloque.getChild('tipologiaN2').getData()?trim,"")>
288 <li class="mb-0"><@liferay.language key=t2/></li>
289 </#if>
290
291 <#if validator.isNotNull(curBloque.getChild('tipologiaN3').getData()) && !validator.equals(curBloque.getChild('tipologiaN3').getData()?trim,"")>
292 <li class="mb-0"><@liferay.language key=t3/></li>
293 </#if>
294
295 <#if validator.isNotNull(curBloque.getChild('tipologiaN4').getData()) && !validator.equals(curBloque.getChild('tipologiaN4').getData()?trim,"")>
296 <li class="mb-0"><@liferay.language key=t4/></li>
297 </#if>
298
299 </#list>
300 </ul>
301 </li>
302 </#if>
303
304 <#if presupuesto.getData()?has_content>
305 <li>
306 <span class="bold"><@liferay.language key='iybg.programas.detalle.persupuesto-upper'/>
307 <p class="fw-700"> ${presupuesto.getData()} </p>
308 </span>
309 </li>
310 </#if>
311 </ul>
312
313 </div>
314 </div>
315 </div>
316 </#if>
317</div>
318</section>
319
320<#-- Convocatorias relacionadas-->
321<#assign currentArticleRelatedLinks = assetLinkLocalService.getDirectLinks(currentArticleAssetEntryId) />
322
323<#if currentArticleRelatedLinks?has_content >
324<section class="iybg-container">
325 <h2 class="tit-type-03 fw-700"><@liferay.language key="iybg.programas.convocatorias_relacionadas_upper"/></h2>
326
327 <div class="row">
328 <div class="col-md-8 col-centered">
329 <ul class="bipo_participa_estados list-group list-type02">
330
331 <#list currentArticleRelatedLinks as curEntry>
332 <#assign relatedAssetEntryId = curEntry.getEntryId2() />
333 <#assign relatedAssetEntry = assetEntryLocalService.getEntry(relatedAssetEntryId) />
334 <#assign relatedAssetEntryPrimKey = relatedAssetEntry.getClassPK() />
335 <#assign relatedArticle = journalArticleLocalService.getLatestArticle(relatedAssetEntryPrimKey) />
336
337 <#-- Categorias de tipo Convocatorias asociadas al journalArticle que se está mostrando-->
338 <#assign vocabularyName = "BG-Convocatorias" />
339 <#assign vocabulary = assetVocabularyLocalService.getGroupVocabulary(themeDisplay.getCompanyGroupId(), vocabularyName) />
340 <#assign relatedCategories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(relatedArticle.resourcePrimKey)) >
341 <#assign urlViewContext = searcher.getURLViewInContext(relatedArticle,themeDisplay) >
342
343 <#assign hashFecha="">
344 <#assign documentcurrentArticle = saxReaderUtil.read(relatedArticle.getContentByLocale(locale)) >
345 <#assign rootElementcurrentArticle = documentcurrentArticle.getRootElement() >
346 <#assign currentArticleTitulo = saxReaderUtil.createXPath("dynamic-element[@name='titulo']/dynamic-content").selectSingleNode(rootElementcurrentArticle) >
347 <#assign currentArticleFechaCaducidad = saxReaderUtil.createXPath("dynamic-element[@name='fecha_caducidad']/dynamic-content").selectSingleNode(rootElementcurrentArticle) >
348 <#assign currentArticleNombreConvocante = saxReaderUtil.createXPath("dynamic-element[@name='Convocante']/dynamic-element[@name='nombreConvocante']/dynamic-content").selectSingleNode(rootElementcurrentArticle).getStringValue() >
349
350
351 <#if validator.isNotNull(currentArticleFechaCaducidad.getData())>
352 <#assign current_date_Data = .now?date?string('yyyy-MM-dd')>
353 <#assign current_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", current_date_Data, locale)>
354 <#assign fecha_caducidad_Data = getterUtil.getString(currentArticleFechaCaducidad.getData())>
355 <#assign fecha_caducidad_DateObj = dateUtil.parseDate("yyyy-MM-dd", fecha_caducidad_Data, locale)>
356 <#assign fecha_caducidad7_Data = (fecha_caducidad_DateObj?long - (7 * 86400000))?number_to_date?string("yyyy-MM-dd")>
357 <#assign fecha_caducidad7_DateObj = dateUtil.parseDate("yyyy-MM-dd", fecha_caducidad7_Data, locale)>
358 <#assign hashFecha="OK">
359 </#if>
360
361 <li class="list-group-item" tabindex="0">
362
363 <div class="row">
364
365 <div class="col-md-3">
366 <p>
367
368 <#list relatedCategories as relatedcategory>
369 <#if validator.equals(relatedcategory.vocabularyId?string,vocabulary.getVocabularyId()?string)>
370 <span class="fs-1_2 bold tc-rojo">${relatedcategory.getTitle(locale)?upper_case}</span>
371 </#if>
372 </#list>
373
374 <#if validator.isNotNull(hashFecha)>
375 <#if (current_date_DateObj?date > fecha_caducidad7_DateObj?date) && (current_date_DateObj?date < fecha_caducidad_DateObj?date)>
376 <span class="clearfix"><span class="red-outline"><@liferay.language key="iybg.convocatorias.listado.ultimos-dias-upper"/></span></span>
377 </#if>
378 </#if>
379 </p>
380 </div>
381
382
383 <div class="col-md-9">
384 <#if currentArticleTitulo.getData()?has_content>
385 <p><a href="${urlViewContext}?redirectUrl=${completeCurrentRedirecUrlProg}" title='<@liferay.language key="iybg.convocatorias.listado.ir-detalle"/>' tabindex="-1"><span class="bold">${currentArticleTitulo.getData()}</span></a></p>
386 </#if>
387
388 <#if validator.isNotNull(hashFecha)>
389 <p class="clearfix">
390 <#if (current_date_DateObj?date > fecha_caducidad_DateObj?date)>
391 <span class="bipo_flechaderecha"><@liferay.language key="iybg.convocatorias.cerrado-upper"/></span>
392 <#else>
393 <span class="bipo_flechaderecha back-rojo"><@liferay.language key="iybg.convocatorias.abierto-upper"/></span>
394 </#if>
395
396 <#if (current_date_DateObj?date > fecha_caducidad_DateObj?date)>
397 <#-- Formato 1: dd/MM/yyyy -->
398 <span class="cerrada bipo_participa_fecha"><@liferay.language key="iybg.convocatorias.plazo-finalizado"/> ${formatFecha (fecha_caducidad_Data, 1, locale)}</span>
399 <#else>
400 <#-- Formato 1: dd/MM/yyyy -->
401 <span class="bipo_participa_fecha"><@liferay.language key="iybg.convocatorias.hasta"/> ${formatFecha (fecha_caducidad_Data, 1, locale)}</span>
402 </#if>
403 </p>
404 </#if>
405
406 <#if currentArticleNombreConvocante?has_content>
407 <p class="texto-convocantes">${currentArticleNombreConvocante}</p>
408 </#if>
409 </div>
410 </div>
411 </li>
412 </#list>
413 </ul>
414 </div>
415 </div>
416
417</section>
418</#if>
419
420<div class="iybg-container">
421 <div class="row">
422 <div class="col-md-12">
423 <p class="button centered btn-rojo"><a href="${redirectUrl}" title='<@liferay.language key="iybg.volver"/>'><span >←</span> <@liferay.language key="iybg.volver"/></a></p>
424 </div>
425 </div>
426</div>
427
428<#macro social>
429 <div class="m-redes_sociales">
430 <ul>
431 <li>
432 <div class="taglib-social-bookmark-facebook" >
433 <div class="fb-like" data-href="${currentUrl}" data-layout="box_count" data-action="like" data-show-faces="false" data-share="false"></div>
434 </div>
435 </li>
436 <li>
437 <a class="facebook" href="http://www.facebook.com/sharer/sharer.php?u=${currentUrl}" target="_blank" title="<@liferay.language key='opens-new-window' />">
438 <span class="sr-only"><@liferay.language key="share-facebook" /></span><span class="bipoicon icon-facebook"></span>
439 </a>
440 </li>
441 <li>
442 <a class="twitter twitter-share-button" href="https://twitter.com/intent/tweet?url=${currentUrl}&text=${encodedTitle}" target="_blank" title="<@liferay.language key='opens-new-window' />" data-size="large">
443 <span class="sr-only"><@liferay.language key="share-twitter" /></span><span class="bipoicon icon-twitter"></span>
444 </a>
445 </li>
446
447 <li>
448 <a class="whatsapp" href="whatsapp://send?text=${currentUrl}" target="_blank" title="<@liferay.language key='opens-new-window' />">
449 <span class="sr-only"><@liferay.language key="share-whatsapp" /></span><span class="bipoicon icon-whatsapp"></span>
450 </a>
451 </li>
452 </ul>
453 </div>
454</#macro>
455
456<#-- Funciones -->
457<#function getFileEntry url >
458
459 <#assign parts = url?split("/")>
460
461 <#assign group_id = getterUtil.getLong(parts[2]) >
462
463 <#assign parts = parts[5]?split("?") >
464 <#assign uuid = parts[0] >
465
466 <#return fileEntryService.getDLFileEntryByUuidAndGroupId(uuid?string, group_id) />
467</#function>
468
469<#function replaceSpecialCharacters(url)>
470 <#return htmlUtil.escapeHREF(url?replace("|","%7C")) />
471</#function>
472
473<script type="text/javascript">
474 //Si no hay elementos en la lista de tipologias, se elimina el elemento UL
475 var elementCount = $('ul#tipologia li').length;
476
477 if (elementCount <= 0){
478 $('ul#tipologia').remove();
479 }
480
481</script>