Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> DLFileEntryLocalService.fetchDLFileEntryByUuidAndGroupId(uid,groupId)  [in template "16924578#16924624#124053" at line 127, column 40]

----
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 doc = DLFileEntryLocalService...  [in template "16924578#16924624#124053" at line 127, column 25]
----
1<#-- 
2	Se usa para mostrar el detalle de un proyecto 
3 --> 
4 
5 
6<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
7<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
8<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")> 
9<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")> 
10<#assign AssetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")> 
11 
12<#assign statusApproved = 0> 
13<#assign journalArticle = JournalArticleLocalService.fetchLatestArticle(groupId, reserved\-article\-id.data, statusApproved)> 
14<#assign assetEntry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey())> 
15<#assign categories =  AssetCategoryLocalService.getAssetEntryAssetCategories(assetEntry.getEntryId())> 
16 
17<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
18 
19<#assign DLFileEntryMetadataLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalService")> 
20 
21<#assign DDMStorageLinkLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStorageLinkLocalService")> 
22 
23<#assign DDMContentLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMContentLocalService")> 
24 
25<#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
26 
27<#assign allEntries = [] /> 
28 
29<#-- Se añade la home --> 
30<#assign site_default_url = htmlUtil.escape(themeDisplay.getLayout().getGroup().getDisplayURL(themeDisplay, false)) /> 
31<#assign site_name = htmlUtil.escape(themeDisplay.getLayout().getGroup().getDescriptiveName()) /> 
32<#assign allEntries = allEntries + [{'name' : site_name, 'url' : site_default_url }] />	 
33 
34<#-- Se añaden las paginas intermedias --> 
35<#assign entries = themeDisplay.getLayout().getAncestors()?reverse /> 
36<#list entries as itemLayout>  
37	<#assign allEntries = allEntries + [{'name' : itemLayout.getName(locale), 'url' : portalUtil.getLayoutFriendlyURL(itemLayout, themeDisplay) }] />		 
38</#list> 
39 
40<#-- Se añade la propia pagina --> 
41<#assign allEntries = allEntries + [{'name' : titular.getData(), 'url' : currentUrl }] /> 
42 
43<div class="container"> 
44	<div class="breadcrumbs-rrss-container"> 
45		<div class="breadcrumbs-blog">			 
46			<#-- Pinto los elementos del breadcrumb --> 
47			<#assign position = 1>			 
48			<#list allEntries as item>  
49				<#if item?is_last > 
50                    <span>${item.name}</span> 
51                <#else> 
52                    <a href="${item.url}">${item.name}</a>               
53                </#if>				             
54				<#assign position++> 
55			</#list> 
56		</div>         
57		<div class="text-share-rrss text-right"> 
58			<span class="text text-blue hidden-xs hidden-sm">${languageUtil.get(locale, "share")}:</span> 
59			<ul class="share-social js-share-social">				 
60				<li><a class="facebook" href="" onclick="window.open('http://www.facebook.com/sharer.php?u=${currentUrl}', '${titular.getData()}', 'width=600,height=400'); return false;" aria-label="Compartir en Facebook"><span class="icon-sm-facebook"></span></a></li> 
61				<li><a class="twitter" href="" onclick="window.open('https://twitter.com/intent/tweet?text=${titular.getData()}&amp;tw_p=tweetbutton&amp;url=${currentUrl}', '${titular.getData()}', 'width=600,height=400'); return false;" aria-label="Compartir en Twitter"><span class="icon-sm-twitter"></span></a></li> 
62				<li><a class="linkedin" href="" onclick="window.open('http://www.linkedin.com/shareArticle?&amp;title=${titular.getData()}&amp;mini=true&amp;url=${currentUrl}&amp;summary=', '${titular.getData()}', 'width=600,height=400'); return false;" aria-label="Compartir en Linkedin"><span class="icon-sm-linkedin"></span></a></li> 
63			</ul> 
64		</div>  
65	</div>        
66</div> 
67 
68 
69<#-- Imagen de fondo --> 
70<div class="bg-image-detail-info" style="background-image: url('');"></div> 
71 
72 
73<#assign VOC_TIPO = "SACYR_GLOBAL_VOC_TIPO_MULTIMEDIA"> 
74<#assign VOC_TAG = "SACYR_VOC_TAGS"> 
75<#assign STR_PAIS = "SACYR_GLOBAL_STR_PAIS"> 
76 
77<#-- Seccion proyecto --> 
78<div class="container"> 
79    <div class="detail-info detail-info--photos"> 
80        <div class="categories-list"> 
81            <ul> 
82                <#list categories as cat> 
83                    <#assign voc = AssetVocabularyLocalService.getAssetVocabulary(cat.getVocabularyId())> 
84                    <#if voc.getName() == VOC_TIPO> 
85                        <li>${cat.getTitle(locale)}</li> 
86                        <#break> 
87                    </#if> 
88                </#list> 
89            </ul> 
90        </div> 
91        <#-- Titulo --> 
92        <div class="title"> 
93            ${titular.getData()} 
94        </div> 
95        <div class="subtitle"> 
96            ${subtitular.getData()} 
97        </div> 
98        <div class=""> 
99            <#assign fecha_Data = getterUtil.getString(fecha.getData())> 
100            <#if validator.isNotNull(fecha_Data)> 
101                <#assign fecha_DateObj = dateUtil.parseDate("yyyy-MM-dd", fecha_Data, locale)> 
102                ${dateUtil.getDate(fecha_DateObj, "dd MMM yyyy - HH:mm:ss", locale)} 
103            </#if> 
104        </div> 
105 
106        <#-- Sección 2 --> 
107        <div class="main-content"> 
108            <div class="row"> 
109 
110            </div> 
111        </div> 
112    </div> 
113</div> 
114 
115 
116<#-- Carrusel fotos --> 
117<div class="gallery-slider__container js-gallery-slider"> 
118    <div class="container"> 
119        <div class="swiper-container gallery-slider js-gallery-top"> 
120            <div class="swiper-wrapper"> 
121                <#if documento.getSiblings()?has_content> 
122                    <#list documento.getSiblings() as cur_documento> 
123                        <#assign urlBase = cur_documento.getData()/> 
124                        <#assign startUid = urlBase?last_index_of("/")+1 /> 
125                        <#assign endUid = urlBase?last_index_of("?")-1 /> 
126                        <#assign uid = urlBase[startUid..endUid]/> 
127                        <#assign doc = DLFileEntryLocalService.fetchDLFileEntryByUuidAndGroupId(uid,groupId)/> 
128                        <#assign dlFileEntry = doc.getDLFileEntryType() > 
129                        <#assign raw = DLFileEntryMetadataLocalService.getFileVersionFileEntryMetadatas(doc.getFileVersion().fileVersionId)> 
130                        <#assign metadata = raw[0]/> 
131                        <#assign stStart = metadata?last_index_of("DDMStructureId")/> 
132                        <#assign stTemp = metadata[stStart..]/> 
133                        <#assign stEnd = stTemp?index_of(",")-1/> 
134                        <#assign ddmStructureId = stTemp[0..stEnd]?split("=")[1]/> 
135 
136 
137                        <#assign metadata = DLFileEntryMetadataLocalService.getFileEntryMetadata(ddmStructureId?number, doc.getFileVersion().fileVersionId)> 
138                        <#assign storageLink = DDMStorageLinkLocalService.getClassStorageLink(metadata.DDMStorageId)> 
139                        <#assign content = DDMContentLocalService.fetchDDMContent(storageLink.classPK) > 
140                        <#assign contentJSON = jsonFactoryUtil.createJSONObject(content.data)> 
141                        <#assign titleMap = contentJSON.get("fieldValues").get(0).get("value")?eval /> 
142                        <#assign descMap = contentJSON.get("fieldValues").get(1).get("value")?eval /> 
143 
144                        <div class="swiper-slide"> 
145                            <div class="photo-stream"> 
146                                <img class="image" src="${urlBase}"/> 
147                            </div> 
148                            <div class="photo-caption"> 
149                                <#if themeDisplay.locale?contains("ES") > 
150                                    <p class="photo-title">${titleMap["es_ES"]}</p> 
151                                    <p class="photo-description">${descMap["es_ES"]}</p> 
152                                <#elseif themeDisplay.locale?contains("en_US") > 
153										<#if titleMap?? && titleMap["en_US"]?? && titleMap["en_US"] != ""> 
154											<p class="photo-title">${titleMap["en_US"]}</p> 
155										</#if> 
156										<#if descMap?? && descMap["en_US"]?? && descMap["en_US"] != ""> 
157											<p class="photo-description">${descMap["en_US"]}</p> 
158										</#if> 
159                                <#else> 
160									<#if titleMap?? && titleMap["pt_POR"]?? && titleMap["pt_POR"] != ""> 
161										<p class="photo-title">${titleMap["pt_POR"]}</p> 
162									</#if> 
163									<#if descMap?? && descMap["pt_POR"]?? && descMap["pt_POR"] != ""> 
164										<p class="photo-description">${descMap["pt_POR"]}</p> 
165									</#if> 
166                                </#if> 
167                            </div> 
168                        </div> 
169                        <#-- 
170                            <#if themeDisplay.locale?contains("ES") > 
171                                <#assign value_es = imagenArticuloMap["es_ES"] /> 
172                                <p><strong> Metadata Título: </strong> ${contentJSON.get("fieldValues").get(0).get("name")} - ${value_es} - ${value_en!''}</p> 
173                                <p><strong> Metadata Descripción: </strong> ${contentJSON.get("fieldValues").get(1).get("value")} </p> 
174                                <p><strong> Metadata Fecha: </strong> ${contentJSON.get("fieldValues").get(2).get("value")} </p> 
175                                <p><strong> Metadata Número de páginas: </strong> ${contentJSON.get("fieldValues").get(3).get("value")} </p> 
176                            <#else> 
177                                <#assign value_en = imagenArticuloMap["en_US"] /> 
178                                <p><strong> Metadata Título: </strong> ${contentJSON.get("fieldValues").get(0).get("name")} -${value_en!''}</p> 
179                                <p><strong> Metadata Descripción: </strong> ${contentJSON.get("fieldValues").get(1).get("value")} </p> 
180                                <p><strong> Metadata Fecha: </strong> ${contentJSON.get("fieldValues").get(2).get("value")} </p> 
181                                <p><strong> Metadata Número de páginas: </strong> ${contentJSON.get("fieldValues").get(3).get("value")} </p> 
182                            </#if> 
183 
184                        --> 
185                    </#list> 
186                </#if> 
187            </div> 
188        </div> 
189        <!-- Add Arrows --> 
190        <div class="gallery-slider-next"></div> 
191        <div class="gallery-slider-prev"></div> 
192        <div class="swiper-container gallery-slider-thumbs js-gallery-thumbs"> 
193            <div class="swiper-wrapper"> 
194                <#if documento.getSiblings()?has_content> 
195                    <#assign counter = 0> 
196                    <#list documento.getSiblings() as cur_documento> 
197                        <#assign urlBase = cur_documento.getData()/> 
198                        <#assign startUid = urlBase?last_index_of("/")+1 /> 
199                        <#assign endUid = urlBase?last_index_of("?")-1 /> 
200                        <#assign uid = urlBase[startUid..endUid]/> 
201                        <#assign doc = DLFileEntryLocalService.fetchDLFileEntryByUuidAndGroupId(uid,groupId)/> 
202                        <#assign dlFileEntry = doc.getDLFileEntryType() > 
203                        <#assign raw = DLFileEntryMetadataLocalService.getFileVersionFileEntryMetadatas(doc.getFileVersion().fileVersionId)> 
204                        <#assign metadata = raw[0]/> 
205                        <#assign stStart = metadata?last_index_of("DDMStructureId")/> 
206                        <#assign stTemp = metadata[stStart..]/> 
207                        <#assign stEnd = stTemp?index_of(",")-1/> 
208                        <#assign ddmStructureId = stTemp[0..stEnd]?split("=")[1]/> 
209 
210 
211                        <#assign metadata = DLFileEntryMetadataLocalService.getFileEntryMetadata(ddmStructureId?number, doc.getFileVersion().fileVersionId)> 
212                        <#assign storageLink = DDMStorageLinkLocalService.getClassStorageLink(metadata.DDMStorageId)> 
213                        <#assign content = DDMContentLocalService.fetchDDMContent(storageLink.classPK) > 
214                        <#assign contentJSON = jsonFactoryUtil.createJSONObject(content.data)> 
215                        <#assign titleMap = contentJSON.get("fieldValues").get(0).get("value")?eval /> 
216                        <#assign descMap = contentJSON.get("fieldValues").get(1).get("value")?eval /> 
217 
218                        <div class="swiper-slide slide_${counter}" id="${(counter == 0)?then('active-thumb','')}"> 
219                            <div class="photo-stream"> 
220                                <img src="${urlBase}"/> 
221                            </div> 
222                        </div> 
223                        <#assign counter = counter + 1> 
224                    </#list> 
225                </#if> 
226            </div> 
227        </div> 
228    </div> 
229</div> 
230 
231<div class="container"> 
232    <div class="gallery-actions"> 
233        <div class="row"> 
234            <div class="col-sm-6"> 
235                <button id="downloadImages" class="btn download-btn"> 
236                    <span class="icon"></span>  
237                    <span class="text">Descargar</span> 
238                </button> 
239            </div> 
240            <div class="col-sm-6"> 
241                <#-- Compartir en Redes sociales parte inferior --> 
242                <div class="text-share-rrss"> 
243                    <span class="text text-blue">${languageUtil.get(locale, "share")}:</span> 
244                    <ul class="share-social">				 
245                        <li><a class="facebook" href="" onclick="window.open('http://www.facebook.com/sharer.php?u=${currentUrl}', '${titular.getData()}', 'width=600,height=400'); return false;" aria-label="Compartir en Facebook"><span class="icon-sm-facebook"></span></a></li> 
246                        <li><a class="twitter" href="" onclick="window.open('https://twitter.com/intent/tweet?text=${titular.getData()}&amp;tw_p=tweetbutton&amp;url=${currentUrl}', '${titular.getData()}', 'width=600,height=400'); return false;" aria-label="Compartir en Twitter"><span class="icon-sm-twitter"></span></a></li> 
247                        <li><a class="linkedin" href="" onclick="window.open('http://www.linkedin.com/shareArticle?&amp;title=${titular.getData()}&amp;mini=true&amp;url=${currentUrl}&amp;summary=', '${titular.getData()}', 'width=600,height=400'); return false;" aria-label="Compartir en Linkedin"><span class="icon-sm-linkedin"></span></a></li> 
248                    </ul> 
249                </div>  
250            </div>  
251        </div> 
252    </div> 
253</div> 
254 
255 
256 
257<script> 
258 
259	$('#downloadImages').on( "click", function() { 
260	 
261		var zip = new JSZip();	 
262		 
263		$('.image').each(function( index ) {		   
264		  var imgData = getBase64Image(this); 
265		  var srcArray = this.src.split("/"); 
266		  var name = srcArray[srcArray.length - 2]; 
267		  name = name.replace(/\+/g, " ");		   
268		  zip.file(name, imgData, {base64: true}); 
269		}); 
270															 
271		zip.generateAsync({type:"blob"}) 
272		.then(function(content) {			 
273			saveAs(content, "imagenes.zip"); 
274		}); 
275	}); 
276	 
277	 
278	function getBase64Image(img) { 
279	  var canvas = document.createElement("canvas"); 
280	  canvas.width = img.naturalWidth; 
281	  canvas.height = img.naturalHeight; 
282	  var ctx = canvas.getContext("2d"); 
283	  ctx.drawImage(img, 0, 0); 
284	  var dataURL = canvas.toDataURL("image/png"); 
285	  return dataURL.replace(/^data:image\/(png|jpg);base64,/, ""); 
286
287	 
288</script> 
289 
290<@liferay_util["html-top"] outputKey="htmltop" > 
291    <#-- Pinto el marcado enriquecido para el SEO --> 
292    <#assign position=1> 
293    <script type="application/ld+json"> 
294
295        "@context": "http://schema.org", 
296        "@type": "BreadcrumbList", 
297        "itemListElement": [ 
298        <#list allEntries as item>  
299
300                "@type": "ListItem", 
301                "position": ${position}, 
302                "item": { 
303                    "@id": "${item.url}", 
304                    "name": "${item.name}" 
305
306            <#if position < allEntries?size> 
307            }, 
308            <#else> 
309
310            </#if> 
311            <#assign position=position+1> 
312        </#list> 
313        ]} 
314    </script> 
315</@> 

Utilizamos cookies propias y de terceros para fines analíticos. Clica AQUÍ para más información. Puedes aceptar todas las cookies pulsando el botón "Aceptar" o configurarlas o rechazar su uso clicando .

Declaración de cookies

Estas cookies son necesarias para que el sitio web funcione y no se pueden desactivar en nuestros sistemas. Estas cookies no guardan ninguna información personal identificable.

Nombre Proveedor Propósito Caducidad Tipo
LFR_Sesión_STATE_* Liferay Administra la sesión como usuario registrado Session HTTP
GUEST_LANGUAGE_ID Liferay Determina el idioma con el que accede, para mostrar el mismo en la próxima sesión 1 year HTTP
ANONYMOUS_USER_ID Liferay Administra la sesión como usuario no registrado 1 year HTTP
COOKIE_SUPPORT Liferay Identifica que es necesario el uso de cookies para el funcionamiento del portal 1 year HTTP
JSesiónID Liferay Administra el inicio de sesión e indica que está usando el sitio Session HTTP
SACYRGDPR Sacyr Utilizada para gestionar la política de cookies Session HTTP

Estas cookies nos permiten contar las visitas y fuentes de circulación para poder medir y mejorar el desempeño de nuestro sitio. Nos ayudan a saber qué páginas son las más o menos populares, y ver cuántas personas visitan el sitio. Toda la información que recogen estas cookies es agregada y, por lo tanto, anónima.

Nombre Proveedor Propósito Caducidad Tipo
_gat Google Se utiliza con fines estadísticos y analíticos para aumentar el rendimiento de nuespos Servicios Session HTTP
_gid Google Se utiliza para almacenar y actualizar un valor único para cada página visitada Session HTTP
_ga Google Se utiliza con fines estadísticos y analíticos para aumentar el rendimiento de nuespos Servicio Session HTTP