Errorea gertatu da txantiloia prozesatzerakoan.
Range start index 20 is out of bounds, because the sliced sequence has only 19 element(s). (Note that indices are 0-based).
The blamed expression:
==> begin..(totalEle-one) [in template "842907#842945#2677535" at line 174, column 46]
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign finalEntries = finalEntries[b... [in template "842907#842945#2677535" at line 174, column 9]
----
1<#--FTL de funciones genericas-->
2<#assign funcionesCustomId = layout.getGroup().getExpandoBridge().getAttribute("iybg-ftl-funciones")>
3<#include "${templatesPath}/${funcionesCustomId}">
4
5<#-- Servicios -->
6<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
7<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
8<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
9<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") >
10<#assign searcher = serviceLocator.findService("net.juventud.buscador.categorias.service.SearchService")>
11<#assign urlEncoder = staticUtil["java.net.URLEncoder"]>
12
13<#-- Variables -->
14<#assign zero = getterUtil.getInteger("0")>
15<#assign one = getterUtil.getInteger("1")>
16<#assign currentPag = one>
17<#assign delta = getterUtil.getLong("10")>
18<#assign renderURL = themeDisplay.getURLCurrent()>
19<#assign hayParams = false>
20<#if renderURL?index_of("?") gte 0>
21 <#assign hayParams = true>
22</#if>
23<#assign params = renderURL?split("&")>
24<#assign queryBusqueda = "">
25<#assign selectedEstado = "">
26<#assign fechaHasta = "">
27<#assign filtro = "">
28<#assign completeCurrentRedirecUrl = urlEncoder.encode(themeDisplay.getPortalURL() + renderURL,"UTF-8")>
29<#assign totalParams = params?size>
30<#assign selectedCategory = "">
31
32<#list params as param>
33
34 <#assign paramLength = getterUtil.getInteger(param?length)>
35 <#assign equalsIndex = zero>
36 <#if param?index_of("=") != -1>
37 <#assign equalsIndex = getterUtil.getInteger(param?index_of("="))>
38 <#assign equalsIndex = equalsIndex + one>
39 </#if>
40 <#if param?index_of("zx=") != -1>
41 <#assign currentzx = param?substring(equalsIndex,paramLength)>
42 <#assign oldParam = "?zx=" + currentzx>
43 <#assign renderURL = renderURL?replace(oldParam, "")>
44 <#assign oldParam = "&zx=" + currentzx>
45 <#assign renderURL = renderURL?replace(oldParam, "")>
46 <#assign totalParams = params?size - 1>
47 </#if>
48 <#if param?contains("queryBusqueda")>
49 <#assign replaceQueryBusqueda = param?substring(equalsIndex,paramLength)>
50 <#assign queryBusqueda =replaceQueryBusqueda?replace("%2C", ",")>
51 </#if>
52 <#if param?contains("selectedEstado")>
53 <#assign selectedEstado = param?substring(equalsIndex,paramLength)>
54 </#if>
55 <#if param?contains("fechaHasta")>
56 <#assign replaceFechaHasta = param?substring(equalsIndex,paramLength)>
57 <#assign fechaHasta =replaceFechaHasta?replace("%2F", "/")>
58 </#if>
59 <#if param?contains("page")>
60 <#assign currentPag = getterUtil.getLong(param[equalsIndex..(paramLength-1)])>
61 <#assign oldParam = "&page=" + currentPag>
62 <#assign renderURL = renderURL?replace(oldParam, "")>
63 <#assign oldParam = "?page=" + currentPag>
64 <#assign renderURL = renderURL?replace(oldParam, "")>
65 <#assign totalParams = params?size - 1>
66 </#if>
67 <#if param?contains("catId")>
68 <#if params?size == 1>
69 <#assign hayParams = false>
70 </#if>
71 <#if equalsIndex != 0>
72 <#assign filtro = param[equalsIndex..(paramLength-1)]>
73 <#assign selectedCategory = filtro>
74 </#if>
75 <#assign oldParam = "&catId="+filtro>
76 <#assign renderURL = renderURL?replace(oldParam, "")>
77 <#assign oldParam = "?catId="+filtro>
78 <#assign renderURL = renderURL?replace(oldParam, "")>
79 <#assign oldParam = "&catId">
80 <#assign renderURL = renderURL?replace(oldParam, "")>
81 <#assign oldParam = "?catId">
82 <#assign renderURL = renderURL?replace(oldParam, "")>
83 <#assign totalParams = params?size - 1>
84 </#if>
85</#list>
86
87<#if searcher?exists>
88 <#assign finalEntries = searcher.searchContentsByQB(entries, queryBusqueda, filtro)>
89 <#assign finalEntries = searcher.filterContents(finalEntries, selectedEstado,fechaHasta,locale)>
90<#else>
91 <#assign finalEntries = entries>
92</#if>
93
94<#assign beginIndex = currentPag - one>
95<#assign begin = delta * beginIndex>
96
97<#assign end = begin + delta>
98
99<#assign totalEntriesSize = finalEntries?size>
100<#assign totalPag = getterUtil.getInteger((finalEntries?size)/delta)>
101
102<#assign totalPagMod = finalEntries?size%delta>
103
104<#if (finalEntries?size > delta) && totalPagMod!=0>
105 <#assign totalPag = totalPag + one>
106</#if>
107
108<#assign totalEle = finalEntries?size>
109<#assign renderPam = "&page=">
110<#if !renderURL?contains("?")>
111 <#assign renderPam = "?page=">
112</#if>
113<#assign firstURL = renderURL + renderPam + one>
114<#assign lastURL = renderURL + renderPam + totalPag>
115
116<#-- Tener encuenta las categorias -->
117<#if selectedCategory!="">
118 <#assign selectedCategoryText = "&catId=" + selectedCategory >
119 <#assign firstURL = firstURL + selectedCategoryText>
120 <#assign lastURL = lastURL + selectedCategoryText>
121</#if>
122
123<#if (totalPag > one)>
124 <#if (currentPag < totalPag)>
125 <#assign nextValue = currentPag + one>
126 <#else>
127 <#assign nextValue = totalPag>
128 </#if>
129
130 <#if (currentPag > one)>
131 <#assign previousValue = currentPag - one>
132 <#else>
133 <#assign previousValue = one>
134 </#if>
135<#else>
136 <#assign nextValue = one>
137 <#assign previousValue = one>
138</#if>
139
140<#assign nextURL = renderURL + renderPam + nextValue>
141<#assign previousURL = renderURL + renderPam + previousValue>
142<#-- Tener encuenta las categorias -->
143<#if selectedCategory!="">
144 <#assign selectedCategoryText = "&catId=" + selectedCategory >
145 <#assign nextURL = nextURL + selectedCategoryText>
146 <#assign previousURL = previousURL + selectedCategoryText>
147</#if>
148
149<#assign message = delta>
150<#assign init = (delta * (currentPag - one)) + one>
151<#assign final = delta * currentPag>
152
153<#if (totalPag > one)>
154 <#if (end < totalEle)>
155 <#assign parameters = [init, end, totalEle]>
156 <#else>
157 <#assign parameters = [init, totalEle, totalEle]>
158 </#if>
159
160 <#assign message = languageUtil.format(locale, "showing-x-x-of-x-results", parameters)>
161<#else>
162 <#assign parameters = [totalEle]>
163 <#if (totalEle == one)>
164 <#assign message = languageUtil.format(locale, "showing-x-result", parameters)>
165 <#else>
166 <#assign message = languageUtil.format(locale, "showing-x-results", parameters)>
167 </#if>
168</#if>
169
170<#if (finalEntries?size > zero)>
171 <#if (end < totalEle)>
172 <#assign finalEntries = finalEntries[begin..(end-one)]>
173 <#else>
174 <#assign finalEntries = finalEntries[begin..(totalEle-one)]>
175 </#if>
176</#if>
177
178<div class="iybg-container" id="resultadosConvocatorias" aria-live="polite">
179
180<h2 class="red-separator"><span class="iy-text-color-red iy-text-size-XL">${totalEle}</span>
181 <#if totalEle == one>
182 <@liferay.language key="iybg.convocatorias.buscador.convocatoria-encontrada-upper"/>
183 <#else>
184 <@liferay.language key="iybg.convocatorias.buscador.convocatorias-encontradas-upper"/>
185 </#if>
186</h2>
187
188<#-- navegacion por categorias -->
189<nav class="nav type01">
190 <ul class="navbar-nav">
191 <li><a id ="todas" class="nav-link active" href="${renderURL}"><@liferay.language key="iybg.todas" /></a></li>
192 <#assign convocatoriasVocabularyName = "BG-Convocatorias" />
193 <#assign categories = assetVocabularyLocalService.getGroupVocabulary(themeDisplay.getCompanyGroupId(), convocatoriasVocabularyName).getCategories() />
194
195 <#list categories as category>
196 <#assign cont = zero>
197 <#assign assetsEntries = getArticlesByCategoryId(entries,queryBusqueda,category.getCategoryId())>
198 <#assign assetsEntries = getArticlesByStateDate(assetsEntries,selectedEstado,fechaHasta,locale)>
199 <#assign cont = assetsEntries?size>
200
201 <#if hayParams>
202 <li>
203 <#if (cont > zero)>
204 <a id="${category.getCategoryId()?c}" class="nav-link" href="${renderURL}&catId=${category.getCategoryId()?c}">${category.getTitle(locale)}(${cont})</a>
205 <#else>
206 <span class="not-link"> ${category.getTitle(locale)}</span>
207 </#if>
208 </li>
209 <#else>
210 <li>
211 <#if (cont > zero)>
212 <a id="${category.getCategoryId()?c}" class="nav-link" href="${renderURL}?catId=${category.getCategoryId()?c}">${category.getTitle(locale)}(${cont})</a>
213 <#else>
214 <span class="not-link">${category.getTitle(locale)}</span>
215 </#if>
216 </li>
217 </#if>
218 </#list>
219 </ul>
220</nav>
221<#-- END Categorias -->
222
223<div class="row">
224<#if finalEntries?size != zero>
225
226 <div class="col-md-8 col-centered">
227 <ul class="bipo_participa_estados list-group list-type02">
228 <#list finalEntries as curEntry>
229 <#assign assetRenderer = curEntry.getAssetRenderer()>
230 <#assign journalArticle = assetRenderer.getAssetObject()>
231 <#assign renderer = curEntry.getAssetRenderer()>
232 <#assign className = renderer.getClassName()>
233
234 <#assign layoutUuid = journalArticle.getLayoutUuid()>
235 <#assign modifiedDate = journalArticle.getModifiedDate()>
236 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry) />
237 <#if !stringUtil.equalsIgnoreCase("showFullContent", assetLinkBehavior?string)>
238 <#assign viewURL = renderer.getURLViewInContext(renderRequest, renderResponse, viewURL) />
239 </#if>
240
241 <#--Solo se usa si se va al asset publisher directamente
242 <#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")/>
243 <#assign group = groupLocalService.getGroup(groupId)/>
244 <#assign groupFriendlyURL = group.getFriendlyURL() />
245 <#assign urlViewContext = themeDisplay.getPortalURL() + themeDisplay.getPathFriendlyURLPublic() + groupFriendlyURL + "/detalle-convocatorias/-/asset_publisher/B0ZPAtZFKdIv/content/" + journalArticle.getUrlTitle()>
246 -->
247
248 <#--Obtenemos templateKey en funcion del nombre de la plantilla-->
249 <#-- Por accesibilidad hay que hace que solo el titulo sea el enlace, no todo.
250 <#assign curTemplateKey=getTemplateKeyByTemplateName(themeDisplay.getCompanyGroupId(),"BG-Convocatoria listado")/>
251
252 <a href="${viewURL}?redirectUrl=${completeCurrentRedirecUrl}" class="list-group-item" title='<@liferay.language key="iybg.convocatorias.listado.ir-detalle"/>' tabindex="-1">
253 <@liferay_journal["journal-article"]
254 articleId=journalArticle.getArticleId()
255 ddmTemplateKey=curTemplateKey
256 groupId=journalArticle.getGroupId() />
257 </a>
258 -->
259
260
261 <#assign documentcurrentArticle = saxReaderUtil.read(journalArticle.getContentByLocale(locale)) >
262 <#assign rootElementcurrentArticle = documentcurrentArticle.getRootElement() >
263 <#assign currentArticleTitulo = saxReaderUtil.createXPath("dynamic-element[@name='titulo']/dynamic-content").selectSingleNode(rootElementcurrentArticle) >
264 <#assign currentArticleFechaCaducidad = saxReaderUtil.createXPath("dynamic-element[@name='fecha_caducidad']/dynamic-content").selectSingleNode(rootElementcurrentArticle) >
265 <#assign currentArticleNombreConvocante = saxReaderUtil.createXPath("dynamic-element[@name='ConvocanteFieldSet']/dynamic-element[@name='ConvocanteFieldSetFieldSet']/dynamic-element[@name='nombreConvocante']/dynamic-content").selectSingleNode(rootElementcurrentArticle).getStringValue() >
266
267 <#assign hashFecha="">
268 <#if validator.isNotNull(currentArticleFechaCaducidad.getData())>
269 <#assign current_date_Data = .now?date?string('yyyy-MM-dd')>
270 <#assign current_date_DateObj = dateUtil.parseDate("yyyy-MM-dd", current_date_Data, locale)>
271 <#assign fecha_caducidad_Data = getterUtil.getString(currentArticleFechaCaducidad.getData())>
272 <#assign fecha_caducidad_DateObj = dateUtil.parseDate("yyyy-MM-dd", fecha_caducidad_Data, locale)>
273 <#assign fecha_caducidad7_Data = (fecha_caducidad_DateObj?long - (7 * 86400000))?number_to_date?string("yyyy-MM-dd")>
274 <#assign fecha_caducidad7_DateObj = dateUtil.parseDate("yyyy-MM-dd", fecha_caducidad7_Data, locale)>
275 <#assign hashFecha="OK">
276 </#if>
277
278 <li class="list-group-item" tabindex="0">
279
280 <div class="row">
281
282 <div class="col-md-3">
283 <p>
284
285 <#assign convocatoriasVocabulary = assetVocabularyLocalService.getGroupVocabulary(themeDisplay.getCompanyGroupId(), convocatoriasVocabularyName) />
286 <#assign categories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", getterUtil.getLong(journalArticle.resourcePrimKey)) >
287
288 <#list categories as category>
289 <#if stringUtil.equalsIgnoreCase(category.vocabularyId?string,convocatoriasVocabulary.getVocabularyId()?string)>
290 <span class="fs-1_2 bold tc-rojo">${category.getTitle(locale)?upper_case}</span>
291 </#if>
292 </#list>
293
294 <#if validator.isNotNull(hashFecha)>
295 <#if (current_date_DateObj?date >= fecha_caducidad7_DateObj?date) && (current_date_DateObj?date <= fecha_caducidad_DateObj?date)>
296 <span class="clearfix"><span class="red-outline"><@liferay.language key="iybg.convocatorias.listado.ultimos-dias-upper"/></span></span>
297 </#if>
298 </#if>
299 </p>
300 </div>
301
302
303 <div class="col-md-9">
304 <#if currentArticleTitulo.getData()?has_content>
305 <p><a href="${viewURL}?redirectUrl=${completeCurrentRedirecUrl}" title='<@liferay.language key="iybg.convocatorias.listado.ir-detalle"/>' tabindex="-1"><span class="bold">${currentArticleTitulo.getData()}</span></a></p>
306 </#if>
307
308 <#if validator.isNotNull(hashFecha)>
309 <p class="clearfix">
310 <#if (current_date_DateObj?date > fecha_caducidad_DateObj?date)>
311 <span class="bipo_flechaderecha"><@liferay.language key="iybg.convocatorias.cerrado-upper"/></span>
312 <#else>
313 <span class="bipo_flechaderecha back-rojo"><@liferay.language key="iybg.convocatorias.abierto-upper"/></span>
314 </#if>
315
316 <#if (current_date_DateObj?date > fecha_caducidad_DateObj?date)>
317 <#-- Formato 1: dd/MM/yyyy -->
318 <span class="cerrada bipo_participa_fecha"><@liferay.language key="iybg.convocatorias.plazo-finalizado"/> ${formatFecha (fecha_caducidad_Data, 1, locale)}</span>
319 <#else>
320 <#-- Formato 1: dd/MM/yyyy -->
321 <span class="bipo_participa_fecha"><@liferay.language key="iybg.convocatorias.hasta"/> ${formatFecha (fecha_caducidad_Data, 1, locale)}</span>
322 </#if>
323 </p>
324 </#if>
325
326 <#if currentArticleNombreConvocante?has_content>
327 <p class="texto-convocantes">${currentArticleNombreConvocante}</p>
328 </#if>
329 </div>
330 </div>
331 </li>
332 </#list>
333 </ul>
334 </div>
335
336 <#if (totalEntriesSize > delta)>
337 <div class="taglib-page-iterator" >
338 <div class="clearfix lfr-pagination" >
339 <#-- <small>${message}</small>-->
340 <ul class="pager pager lfr-pagination-buttons bg-paginador">
341 <#if (currentPag == one)>
342 <li class="disabled first">
343 <a href="">← <@liferay.language key="first" /></a></li>
344 <#else>
345 <li class="first">
346 <a href="${firstURL}">← <@liferay.language key="first" /></a></li>
347 </#if>
348
349 <#if (currentPag == one)>
350 <li class="disabled">
351 <a href=""><@liferay.language key="previous" /></a></li>
352 <#else>
353 <li>
354 <a href="${previousURL}"><@liferay.language key="previous" /></a></li>
355 </#if>
356
357
358 <#if (currentPag == totalPag)>
359 <li class="disabled">
360 <a href=""><@liferay.language key="next" /></a></li>
361 <#else>
362 <li>
363 <a href="${nextURL}"><@liferay.language key="next" /></a></li>
364 </#if>
365
366 <#if (currentPag == totalPag)>
367 <li class="disabled last">
368 <a href=""><@liferay.language key="last" /> →</a></li>
369 <#else>
370 <li class="last">
371 <a href="${lastURL}"><@liferay.language key="last" /> →</a></li>
372 </#if>
373 </ul>
374 </div>
375 </div>
376 </#if>
377 <#else>
378 <div class="alert alert-info type01">
379 <p class="flex-container"><span class="bipoicon icon-calendar"></span> <span><@liferay.language key="iybg.convocatorias.listado.no-results"/></span></p>
380 </div>
381 </#if>
382
383 </div>
384</div>
385<#function getArticlesByCategoryId entries queryBusqueda categoriId>
386 <#assign categoriesEntries = searcher.searchContentsByQB(entries, queryBusqueda, categoriId?c)>
387 <#return categoriesEntries>
388</#function>
389
390<#function getArticlesByStateDate entries selectedEstado fechaHasta locale>
391 <#assign categoriesEntries = searcher.filterContents(entries, selectedEstado,fechaHasta,locale)>
392 <#return categoriesEntries>
393</#function>
394
395<script type="text/javascript">
396
397 $(function() {
398 // Handler for .ready() called.
399 var isFiltro=String(${filtro});
400
401 $("ul.navbar-nav li a").removeClass("active");
402 if (isFiltro==""){
403 $("#todas").addClass("active");
404 }else{
405 $("#"+isFiltro).addClass("active");
406 }
407
408 });
409
410</script>