Se ha producido un error al procesar la plantilla.
For "." left-hand operand: Expected a hash, but this has evaluated to a sequence (wrapper: f.t.SimpleSequence): ==> supporters [in template "10154#10192#null" at line 98, column 36] ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign success = supporters.add(rela... [in template "10154#10192#null" at line 98, column 17] ----
1<#--##-->
2<#--#### Scripts-->
3<#--##-->
4<script type="text/javascript" src="http://sadmin.brightcove.com/js/BrightcoveExperiences.js"></script>
5<script type="text/javascript" src="http://sadmin.brightcove.com/js/BrightcoveExperiences_all.js"></script>
6
7<#--##-->
8<#--#### Incluir plantilla de configuración-->
9<#--##-->
10<#-- Clave de la plantilla UrlConfiguration asignada en el módulo de configuración -->
11<#assign templateKey = coleccionesUtils.getUrlTemplateKey(groupId) />
12<#include templatesPath + '/' + templateKey />
13
14<#--#################################-->
15<#--#####-->
16<#--####### Carga de clases y datos-->
17<#--#####-->
18<#--#################################-->
19
20<#--##-->
21<#--#### Carga de servicios-->
22<#--##-->
23<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
24<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
25<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
26<#assign classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService") />
27<#assign assetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService") />
28<#assign artworkLocalService = serviceLocator.findService("com.vass.collection.common.service.ArtWorkLocalService") />
29<#assign artworkArtistLocalService = serviceLocator.findService("com.vass.collection.common.service.ArtWorkArtistLocalService") />
30<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
31<#assign dlFileEntryTypeLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryTypeLocalService") />
32<#assign dLFileEntryMetadataLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalService") />
33<#assign dlFileEntryService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
34
35<#--<#assign storageEngineUtil = portal.getClass().forName("com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil").newInstance() />-->
36<#--<#assign collectionsUtil = objectUtil("com.vass.collection.common.util.ColeccionesConfigurationUtil") />-->
37<#assign journalArticleClassName = "com.liferay.journal.model.JournalArticle" />
38<#assign journalArticleClassNameId = classNameLocalService.getClassNameId(journalArticleClassName) />
39<#assign globalGroup = groupLocalService.getCompanyGroup(companyId) />
40<#assign supporters = [] />
41<#assign activities = [] />
42
43<#--##-->
44<#--#### Inicialización del Search Context-->
45<#--##-->
46<#assign searchContext = objectUtil("com.liferay.portal.kernel.search.SearchContext") />
47<#assign searchContext = searchContext.setCompanyId(companyId) />
48<#--<#assign searchContext = searchContext.setLocale(locale) />-->
49
50<#--##-->
51<#--#### Inicializacion de un theme display a partir del falso theme display que viene en la falsa request-->
52<#--##-->
53<#--<#assign themedisplay = request.get("themeDisplay") />-->
54<#--<#assign themeDisplay = objectUtil("com.liferay.portal.kernel.theme.ThemeDisplay") />-->
55<#--<#assign themeDisplay = themeDisplay.setPathThemeImages(themeDisplay.getPathThemeImages()) />-->
56<#--<#assign themeDisplay = themeDisplay.setPortalURL(themeDisplay.getURLPortal()) />-->
57<#--<#assign themeDisplay = themeDisplay.setPathContext(themeDisplay.getPathContext()) />-->
58<#--<#assign themeDisplay = themeDisplay.setScopeGroupId(groupId) />-->
59
60<#--##-->
61<#--#### Carga de assets relacionados-->
62<#--##-->
63<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) />
64<#assign assetEntry = assetEntryLocalService.getEntry(journalArticleClassName, journalArticle.getResourcePrimKey()) />
65<#assign relatedItems = assetLinkLocalService.getDirectLinks(getterUtil.getLong(assetEntry.getEntryId())) />
66
67<#list relatedItems as relatedItem>
68 <#assign relatedAsset = assetEntryLocalService.getAssetEntry(relatedItem.getEntryId2()) />
69 <#--## En este caso, sólo tendran que mostrarse los JournalArticles asociados. Dependiendo de la estructura ocuparán un lugar u otro.-->
70 <#--## 1 - ACTIVIDAD: Actividades relacionadas (0..*)-->
71 <#--## 2 - COLABORADOR: Entidad colaboradora (0..*)-->
72 <#--## 3 - ITINERANCIA: (1..1)-->
73 <#--## 4 - UBICACION: Está relacionado con ITINERANCIA (1..1)-->
74 <#if relatedAsset.getClassNameId() == journalArticleClassNameId>
75 <#assign relatedArticle = journalArticleLocalService.getLatestArticle(relatedAsset.getClassPK()) />
76 <#if relatedArticle?has_content>
77 <#if relatedArticle.getStructureId() =="ITINERANCIA">
78 <#assign roaming = relatedArticle />
79 <#-- ## Si existe ITINERANCIA, es necesario localizar su UBICACION-->
80 <#-- ## Se recorren todos los AssetLinks para localizarla-->
81 <#if roaming??>
82 <#assign roamingRelatedItems = assetLinkLocalService.getDirectLinks(getterUtil.getLong(relatedItem.getEntryId2())) />
83 <#list roamingRelatedItems as roamingRelatedItem>
84 <#assign roamingRelatedAsset = assetEntryLocalService.getAssetEntry(roamingRelatedItem.getEntryId2()) />
85 <#if roamingRelatedAsset.getClassNameId() == journalArticleClassNameId >
86 <#assign roamingRelatedArticle = journalArticleLocalService.getLatestArticle(roamingRelatedAsset.getClassPK()) />
87 <#if roamingRelatedArticle?? && roamingRelatedArticle.getStructureId() == "UBICACION">
88 <#assign location = roamingRelatedArticle />
89 </#if>
90 </#if>
91 </#list>
92 </#if>
93 <#elseif relatedArticle.getStructureId() =="ACTIVIDAD">
94 <#-- ## Se almacena el resultado de la operación de añadir para que no lo pinte en pantalla-->
95 <#assign success = activities.add(relatedArticle) />
96 <#elseif relatedArticle.getStructureId() == "COLABORADOR">
97 <#-- ## Se almacena el resultado de la operación de añadir para que no lo pinte en pantalla-->
98 <#assign success = supporters.add(relatedArticle)>
99 </#if>
100 </#if>
101 </#if>
102</#list>
103
104<#--#################################-->
105<#--#####-->
106<#--####### Plantilla-->
107<#--#####-->
108<#--#################################-->
109<#assign node = saxReaderUtil.read(roaming.getContentByLocale("${locale}")) />
110<#assign roamingStartDate = node.selectSingleNode("//dynamic-element[@name='startDate']/dynamic-content").data />
111<#assign roamingEndDate = node.selectSingleNode("//dynamic-element[@name='endDate']/dynamic-content").data />
112
113<#assign startDateCalendar = roamingStartDate?date("dd/MM/yyyy") />
114<#assign endDateCalendar = roamingEndDate?date("dd/MM/yyyy") />
115<#assign nowCalendar = .now?string["dd/MM/yyyy"]?date("dd/MM/yyyy") />
116
117<#if startDateCalendar gt nowCalendar>
118 <#assign backURL= backFutureExhibitionURL />
119<#elseif endDateCalendar lt nowCalendar>
120 <#assign backURL= backOldExhibitionURL />
121<#else>
122 <#assign backURL= backCurrentExhibitionURL />
123</#if>
124
125<#if backURL??>
126 <span class="volver">
127 <a href="${backURL}"> <@liferay.language key="es.colecciones.back" /> </a>
128 </span>
129</#if>
130
131
132<div class="activity detail" itemscope itemtype="http://schema.org/Event">
133 <h2 itemprop="name"> ${title.data} </h2>
134 <p class="when">
135 <#if roamingStartDate??>
136 <span itemprop="startDate">${roamingStartDate}</span> -
137 </#if>
138
139 <#if roamingEndDate??>
140 <span itemprop="endDate">${roamingEndDate}</span>
141 </#if>
142 </p>
143
144 <p class="where" itemprop="location" itemscope itemtype="http://schema.org/Place">
145 <#assign node = saxReaderUtil.read(location.getContentByLocale("${locale}")) />
146 <#assign locationName = node.selectSingleNode("//dynamic-element[@name='title']/dynamic-content").data />
147
148 <#if locationName??>
149 <span itemprop="name">${locationName}</span>
150 </#if>
151 </p>
152
153 <div class="info">
154 <div class="description" itemprop="description">
155 <#if desc?has_content>
156 ${desc.getData()}
157 </#if>
158 </div>
159
160 <#if document?has_content || activities?has_content>
161 <div class="details">
162 <#--## Material asociado-->
163 <#if document?has_content>
164 <ul>
165 <#list document.siblings as doc>
166 <#--##Trocear url documento-->
167 <#assign segments = doc.getData()?split("/") />
168 <#--##uuid file-->
169 <#if segments?size gt 1>
170 <#assign item = segments[5] />
171 <#assign position = item?string?index_of("?") -1 />
172 <#assign uuid = item[0..position] />
173 <#--##Documento-->
174 <#assign fileEntry = dlFileEntryService.getDLFileEntryByUuidAndGroupId(uuid, groupId) />
175 <#if fileEntry??>
176 <li><a href="${doc.getData()}"><@liferay.language key="read-more" /></a></li>
177 </#if>
178 </#if>
179 </#list>
180 </ul>
181 </#if>
182
183 <#--## Actividades relacionadas-->
184 <#if activities?has_content>
185 <ul class="relatedActivities">
186 <#list activities as activity>
187 <#assign node = saxReaderUtil.read(activity.getContentByLocale("${locale}")) />
188 <#assign activityName = node.selectSingleNode("//dynamic-element[@name='title']/dynamic-content").data />
189 <#assign activityUrl = "${exhibitionDetailURL}/${groupId}/${activity.getArticleId()}" />
190
191 <li><a href="${activityUrl}">${activityName}</a></li>
192 </#list>
193 </ul>
194 </#if>
195 </div>
196 </#if>
197
198 <#--## Entidades colaboradoras-->
199 <#if supporters?has_content>
200 <div class="supporters">
201 <h3><@liferay.language key="ca.supporters" /></h3>
202 <ul itemscope itemtype="http://schema.org/Organization">
203 <#list supporters as supporter>
204 <#assign node = saxReaderUtil.read($supporter.getContentByLocale("${locale}")) />
205 <#assign supporterTitle = node.selectSingleNode("//dynamic-element[@name='title']/dynamic-content").data />
206 <#assign supporterUrl = node.selectSingleNode("//dynamic-element[@name='url_']/dynamic-content").data />
207 <#assign supporterLogo = node.selectSingleNode("//dynamic-element[@name='logo']/dynamic-content").data />
208 <li>
209 <span class="name" itemprop="name">${supporterTitle}</span>
210 <a itemprop="url" href="${supporterUrl}">
211 <img itemprop="image" src="${supporterLogo}" alt="${supporterTitle}" />
212 </a>
213 </li>
214 </#list>
215 </ul>
216 </div>
217 </#if>
218 </div>
219
220 <#--##-->
221 <#--#### Los campos video e imagen, en la estructura, son repetibles.-->
222 <#--#### Según el diseño acordado, unicamente se muestra un video o una imagen-->
223 <#--#### por lo que se coge el primero y se ignoran el resto-->
224 <#--##-->
225 <div class="media">
226 <#if video?has_content && video.getData() != "">
227 <#--##Tipo de fichero Video-->
228 <#assign dlFileEntryType = dlFileEntryTypeLocalService.getFileEntryType(groupId,'Video') />
229 <#assign listDDMStructures = dlFileEntryType.getDDMStructures() />
230 <#--##Trocear url documento-->
231 <#assign trozosVideo = video.getData()?split("/") />
232 <#--##uuid file-->
233 <#if trozosVideo?size gt 1>
234 <#assign item = trozosVideo[5] />
235 <#assign position = item?string?index_of("?") -1 />
236 <#assign trozo = item[0..position] />
237 <#--##Documento-->
238 <#assign fileEntry = dlFileEntryService.getDLFileEntryByUuidAndGroupId(trozo, groupId) />
239 <#list listDDMStructures as item>
240 <#assign fileEntryMetadata = dLFileEntryMetadataLocalService.getFileEntryMetadata(item.getStructureId(), fileEntry.getFileVersion().getFileVersionId()) />
241 <#assign fieldCode = coleccionesUtils.getDdmMetaFieldValue(fileEntryMetadata.getDDMStorageId(), themeDisplay, "fileId") />
242 </#list>
243 <#-- ##Brightcove-->
244 <object id="<@portlet.namespace />_videoplayer" class="BrightcoveExperience">
245 <param name="bgcolor" value="#FFFFFF" />
246 <param name="width" value="300" />
247 <param name="height" value="200" />
248 <param name="playerID" value="1822475294001" />
249 <param name="playerKey" value="${keyBrightcove}" />
250 <param name="isVid" value="true" />
251 <param name="isUI" value="true" />
252 <param name="dynamicStreaming" value="true" />
253 <param name="wmode" value="transparent" />
254 <param name="secureConnections" value="true" />
255 <param name="secureHTMLConnections" value="true" />
256 <param name="@videoPlayer" value="${fieldCode}" />
257 </object>
258 </#if>
259 <#else>
260 <#if image?has_content>
261 <img itemprop="image" src="${image.getData()}&imageThumbnail=3" alt="${title.getData()}" />
262 <#--##Incluir pie de imagen-->
263 <#assign array = image.getData()?split("/") />
264 <#-- Plantilla "Pie Foto" -->
265 <#-- Clave de la plantilla Pie Foto asignada en el módulo de configuración -->
266 <#assign templateKey = coleccionesUtils.captionTemplateKey(groupId) />
267 <#include templatesPath + '/' + templateKey />
268 </#if>
269 </#if>
270
271 <#--##-->
272 <#--#### Carrusel de Obras de la exposición-->
273 <#--#### Las obras se obtienen de los tags del contenidos-->
274 <#--#### La etiqueta se corresponde con el identificador de la obra-->
275 <#--##-->
276 <#assign tags = assetTagLocalService.getTagNames(journalArticleClassNameId, journalArticle.getResourcePrimKey()) />
277 <#if tags?has_content>
278 <h2><@liferay.language key="ca.artworks.exhibition" /></h2>
279 <div class="suggestion">
280 <a class="buttons prev" href="javascript:void(0)">left</a>
281 <div class="viewport">
282 <ul class="overview">
283 <#list tags as tag>
284 <#--## Obra-->
285 <#assign artwork = artworkLocalService.getArtworkByInventoryId(groupId, companyId, tag) />
286 <#--## Miniatura-->
287 <#assign artworkThumbnail = coleccionesUtils.getMiniatureArtworkURL(artwork, themeDisplay, request, globalGroup) />
288 <#--## Artistas-->
289 <#assign artists = artworkArtistLocalService.getArtist(artwork.companyId, artwork.groupId, artwork.inventoryId) />
290 <li itemscope itemtype="http://schema.org/CreativeWork">
291 <a itemprop="url" href="${artworkDetailURL}/${artwork.inventoryId}/${coleccionesUtils.getName(artwork.getTitle(locale))}">
292 <img itemprop="image" src="${artworkThumbnail}" alt="${artwork.getTitle(locale)}"/>
293 </a>
294 <#if artists?has_content>
295 <#list artists as artist>
296 <div itemscope itemtype="http://schema.org/Person">
297 <p class="artist">
298 <a itemprop="url" href="${artistDetailURL}/${artist.constituentId}/${coleccionesUtils.getName(artist.getFullName())}">
299 <span itemprop="name">${artist.getFullName()}</span>
300 </a>
301 </p>
302 </div>
303 </#list>
304 </#if>
305 <p itemprop="name" class="title">
306 <#assign artworkTitle = artwork.getTitle(locale) />
307 <#if artworkTitle??>
308 <#if artworkTitle?length < 50>
309 ${artworkTitle}
310 <#else>
311 ${artworkTitle[0..49]} ...
312 </#if>
313 </#if>
314 <span class="date">
315 <#if artwork.getStartDate()??>
316 <span itemprop="dateCreated">/ ${artwork.getStartDate()}</span>
317 </#if>
318 <#if artwork.getEndDate()?? && artwork.getEndDate() != artwork.getStartDate()>
319 - <span itemprop="datePublished">${artwork.getEndDate()}</span>
320 </#if>
321 </span>
322 </p>
323 </li>
324 </#list>
325 </ul>
326 </div>
327 <a class="buttons next" href="javascript:void(0)">right</a>
328 </div>
329 </#if>
330 </div>
331</div>