BRETON Philippe - CH-Côte de lumiere
Une erreur s'est produite lors du traitement du modèle.
For "." left-hand operand: Expected a hash, but this has evaluated to a sequence (Collections$UnmodifiableRandomAccessList wrapped into f.t.DefaultListAdapter): ==> assetEntries [in template "20101#20127#ODS_PROFESSIONNEL" at line 71, column 31] ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign nombrePlan = assetEntries.size() [in template "20101#20127#ODS_PROFESSIONNEL" at line 71, column 9] ----
1<#assign requestedCat = request.getParameter('categoryId')!0>
2<#assign requestedCat = requestedCat?number>
3<#-- Structure et template du type d'articles que je veux récupérer -->
4<#assign ddmStructureKey = "ODS_SERVICE_INFORMATIONS">
5<#assign ddmTemplateKey = "ODS_SERVICE_INFORMATIONS">
6
7<#-- Déclaration des services -->
8<#assign assetVocabularyLocalServiceUtil = objectUtil("com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil")>
9<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
10<#assign journalArticleResourceLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService") />
11<#assign OrderByComparatorFactoryUtil = staticUtil["com.liferay.portal.kernel.util.OrderByComparatorFactoryUtil"]>
12<#assign classNameLocalServiceUtil = staticUtil["com.liferay.portal.kernel.service.ClassNameLocalServiceUtil"]>
13<#assign assetEntryQuery = objectUtil("com.liferay.asset.kernel.service.persistence.AssetEntryQuery")>
14<#assign assetEntryLocalServiceUtil = objectUtil("com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil")>
15<#assign dLAppLocalServiceUtil = objectUtil("com.liferay.document.library.kernel.service.DLAppLocalServiceUtil")>
16<#assign assetEntryCatRelLocalServiceUtil = serviceLocator.findService("com.liferay.asset.entry.rel.service.AssetEntryAssetCategoryRelLocalService")>
17<#assign assetCategoryPropertyLocalServiceUtil = serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")>
18<#assign DDMStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService")>
19<#assign layoutLocalServiceUtil = objectUtil("com.liferay.portal.kernel.service.LayoutLocalServiceUtil")>
20
21<#assign structureClassName = classNameLocalServiceUtil.getClassName("com.liferay.journal.model.JournalArticle")>
22<#assign structureClassNameId= structureClassName.getClassNameId()?number>
23<#assign structure = DDMStructureLocalService.getStructure(themeDisplay.getCompanyGroupId(), structureClassNameId, ddmStructureKey)![] >
24<#assign classTypeId=structure.getStructureId()>
25<#-- Récupération du vocabulaire et de la liste des spécialités -->
26<#assign vocabulary = assetVocabularyLocalServiceUtil.getGroupVocabulary(themeDisplay.getScopeGroupId(), "Offres de soins")>
27<#assign specialites = assetCategoryLocalService.getVocabularyCategories(vocabulary.getVocabularyId(), -1, -1, null)>
28
29<#-- Id de l'article -->
30<#assign journalArticleId = .vars['reserved-article-id'].data>
31<#-- Ressource PK de l'article -->
32<#assign articleResourcePK = journalArticleResourceLocalService.getArticleResourcePrimKey(groupId, journalArticleId)/>
33<#-- Liste des catégories de l'article -->
34<#assign categoryList=assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK)>
35
36<#list categoryList as cur_cat>
37 <#if cur_cat.getVocabularyId() == vocabulary.getVocabularyId()>
38 <#if cur_cat.getCategoryId() == requestedCat>
39 <#assign catToFetch = cur_cat>
40 <#assign className = classNameLocalServiceUtil.getClassName("com.liferay.journal.model.JournalArticle") />
41 <#assign classNameId = className.getClassNameId()?number />
42 <#assign void = assetEntryQuery.setAllCategoryIds([requestedCat])>
43 <#assign void = assetEntryQuery.setClassNameIds([classNameId])>
44 <#--assign assetEntries = assetEntryLocalServiceUtil.getEntries(assetEntryQuery)-->
45 <#assign void = assetEntryQuery.setClassTypeIds([classTypeId])>
46 <#assign assetEntries = assetEntryLocalServiceUtil.getEntries(assetEntryQuery)>
47 <#-- Récupération de l'article du bloc d'information -->
48 <#list assetEntries as cur_entry>
49 <#assign renderer = cur_entry.getAssetRenderer() >
50 <#assign journalArticle = renderer.getArticle() >
51 </#list>
52 </#if>
53 </#if>
54</#list>
55
56<#assign images = {} >
57
58<#-- Initialisation des variables utilisées dans le JavaScript -->
59<#assign googleMapsAPIKey = 0>
60<#assign images_front_path = "">
61<#assign googleMapsAPIKey = themeDisplay.getScopeGroup().getTypeSettingsProperty("googleMapsAPIKey")!0>
62<#assign images_front_path = themeDisplay.getPathThemeImages()>
63
64<#if catToFetch??>
65 <#assign className = classNameLocalServiceUtil.getClassName("com.liferay.document.library.kernel.model.DLFileEntry") >
66 <#assign classNameId = className.getClassNameId()?number >
67 <#assign assetEntryQuery = objectUtil("com.liferay.asset.kernel.service.persistence.AssetEntryQuery")>
68 <#assign void = assetEntryQuery.setAllCategoryIds([catToFetch.getCategoryId()])>
69 <#assign void = assetEntryQuery.setClassNameIds([classNameId])>
70 <#assign assetEntries = assetEntryLocalServiceUtil.getEntries(assetEntryQuery)>
71 <#assign nombrePlan = assetEntries.size()>
72 <#-- Boucle sur chaque assetEntry pour récupérer l'url et la localisation -->
73 <#list assetEntries as assetEntry>
74 <#-- Récupération de l'URL -->
75 <#assign dlFileEntryId = assetEntry.getClassPK()>
76 <#assign fileEntry = dLAppLocalServiceUtil.getFileEntry(dlFileEntryId)>
77 <#-- Filtre sur le type de contenu -->
78 <#if fileEntry.getMimeType() =="image/jpeg" ||fileEntry.getMimeType() == "image/png" || fileEntry.getMimeType() =="image/jpg" >
79 <#assign url="/documents/"+fileEntry.getRepositoryId()+"/"+fileEntry.getFolderId()+"/"+fileEntry.getFileName()+"/"+fileEntry.getUuid()>
80 </#if>
81 <#if url??>
82 <#-- Recherche des categories du vocabulaire "Localisations" -->
83 <#assign vocabulary = assetVocabularyLocalServiceUtil.getGroupVocabulary(layout.getGroupId(),"Localisations")>
84 <#assign categoriesFile = assetEntryCatRelLocalServiceUtil.getAssetEntryAssetCategoryRelsByAssetEntryId(assetEntry.getEntryId())>
85 <#list categoriesFile as categorieFile>
86 <#assign cat = assetCategoryLocalService.getCategory(categorieFile.getAssetCategoryId())>
87 <#if cat.getVocabularyId()==vocabulary.getVocabularyId()>
88 <#assign latitude = "46.663889812571426">
89 <#assign longitude = "-1.2996525449218552">
90 <#assign tooltip = "Site de " + cat.getName()>
91 <#-- Recherche des propriétés associées à la position -->
92 <#assign catProperty = assetCategoryPropertyLocalServiceUtil.fetchCategoryProperty(cat.getCategoryId(), "Latitude")![]>
93 <#if catProperty?size gt 0>
94 <#assign latitude = catProperty.getValue()>
95 </#if>
96 <#assign catProperty = assetCategoryPropertyLocalServiceUtil.fetchCategoryProperty(cat.getCategoryId(), "Longitude")![]>
97 <#if catProperty?size gt 0>
98 <#assign longitude = catProperty.getValue()>
99 </#if>
100 <#assign catProperty = assetCategoryPropertyLocalServiceUtil.fetchCategoryProperty(cat.getCategoryId(), "InfoBulle")![]>
101 <#if catProperty?size gt 0>
102 <#assign tooltip = catProperty.getValue()>
103 </#if>
104 <#assign images = images + { cat.getName() : {"url": url, "Lat": latitude, "Lng": longitude, "Tooltip": tooltip }} >
105 </#if>
106 </#list>
107 </#if>
108 </#list>
109</#if>
110
111<#-- Nom et prénom du professionnel -->
112<div class="row professionnel-result">
113 <div class="col-md-12">
114 <div class="ods-detail-container">
115 <h2>${Nom.getData()} ${Prenom.getData()}</h2>
116 </div>
117 </div>
118</div>
119
120<#if catToFetch??>
121 <#-- ############### AFFICHAGE DE LA CARTE ET DES PLANS ##################################### -->
122 <div class="row no-gutters">
123 <div class="col-md-6">
124 <div id="map_canvas" style="height: 622px; position: relative; overflow: hidden;"></div>
125 </div>
126
127 <div class="col-md-6" style="height: 100%; overflow:hidden;" >
128 <div class="item-adress">
129 <#-- Liste des images à afficher en lien avec un POI -->
130 <#list images?values as poi>
131 <div class="active-link" id="address-${poi?index}">
132 <div class="address-container hide">
133 <div class="address">
134 <div class="row">
135 <div class="col-md-12">
136 <img src="${poi.url}" style="max-width: 100%; max-height: 400px;">
137 </div>
138 </div>
139 </div>
140 </div>
141 </div>
142 </#list>
143 </div>
144 </div>
145 </div>
146<#else>
147 <div class="professionnel-col">
148 <div class="linkPro resultTitle">Medecin</div>
149 </div>
150 <div class="professionnel-col">
151 <#assign portletId = themeDisplay.getPortletDisplay().getId()?remove_beginning("com_liferay_journal_content_web_portlet_JournalContentPortlet_INSTANCE")>
152 <#list categoryList as cur_category>
153 <#assign color = "">
154 <#assign ll = themeDisplay.getLayout()>
155 <#if cur_category.getVocabularyId() == vocabulary.getVocabularyId()>
156
157 <#if cur_category.getParentCategoryId() == 0>
158 <#assign parentCategorie=cur_category>
159 <#else>
160 <#assign parentCategorie=assetCategoryLocalService.getCategory(cur_category.getParentCategoryId())>
161 </#if>
162 <#assign catName = parentCategorie.getName()>
163 <#assign catProperty = assetCategoryPropertyLocalServiceUtil.fetchCategoryProperty(parentCategorie.getCategoryId(), "CSS")![]>
164 <#if catProperty?size gt 0>
165 <#assign catName = catProperty.getValue()>
166 </#if>
167 <#assign url = themeDisplay.getURLCurrent()>
168 <#if url?index_of("?") gt 0 >
169 <#assign url = url + "&categoryId=" + cur_category.getCategoryId()>
170 <#else>
171 <#assign url = url + "?categoryId=" + cur_category.getCategoryId()>
172 </#if>
173 <#assign catProperty = assetCategoryPropertyLocalServiceUtil.fetchCategoryProperty(parentCategorie.getCategoryId(), "COLOR")![]>
174 <#if catProperty?size gt 0>
175 <#assign color = catProperty.getValue()>
176 </#if>
177 <#assign cssColor = "">
178 <#if (color?has_content)>
179 <#assign cssColor= "color" + portletId + cur_category?index>
180 <style>
181 .professionnel-col .service-item.${cssColor}
182 {
183 background-color: #${color};
184 }
185 </style>
186 </#if>
187 <#if catName?lower_case == "custom">
188 <#assign assetEntries = assetEntryCatRelLocalServiceUtil.getAssetEntryAssetCategoryRelsByAssetCategoryId(parentCategorie.getCategoryId()) >
189 <#assign layoutClassName = classNameLocalServiceUtil.getClassName("com.liferay.portal.kernel.model.Layout")>
190 <#assign layoutClassNameId= layoutClassName.getClassNameId()?number>
191 <#list assetEntries as ae>
192 <#attempt>
193 <#assign assetEntry = assetEntryLocalServiceUtil.getEntry(ae.getAssetEntryId()) />
194 <#if assetEntry.getClassNameId() == layoutClassNameId>
195 <#assign ll = layoutLocalServiceUtil.getLayout(assetEntry.classPK)>
196 </#if>
197 <#recover>
198 </#attempt>
199 </#list>
200 </#if>
201
202 <div class="service-item ${catName?lower_case} ${cssColor}">
203 <@liferay_theme["layout-icon"] layout=ll />
204 <a href="${url}">${cur_category.getName()}</a>
205 </div>
206 </#if>
207 </#list>
208 </div>
209</#if>
210
211<#-- Métier et nom du service-->
212<div class="ods-detail-container detail-pro-result">
213 <#if catToFetch??>
214 <hr>
215 <div class="row">
216 <#assign catUrl = "/web" + themeDisplay.getScopeGroup().getFriendlyURL()+"/"+catToFetch.getName()?lower_case>
217 <#assign assetEntries = assetEntryCatRelLocalServiceUtil.getAssetEntryAssetCategoryRelsByAssetCategoryId(catToFetch.getCategoryId()) >
218 <#assign layoutClassName = classNameLocalServiceUtil.getClassName("com.liferay.portal.kernel.model.Layout")>
219 <#assign layoutClassNameId= layoutClassName.getClassNameId()?number>
220 <#list assetEntries as ae>
221 <#attempt>
222 <#assign assetEntry = assetEntryLocalServiceUtil.getEntry(ae.getAssetEntryId()) />
223 <#if assetEntry.getClassNameId() == layoutClassNameId>
224 <#assign ll = layoutLocalServiceUtil.getLayout(assetEntry.classPK)>
225 <#assign catUrl = "/web" + themeDisplay.getScopeGroup().getFriendlyURL() + ll.getFriendlyURL()>
226 </#if>
227 <#recover>
228 </#attempt>
229 </#list>
230 <div class="ods-detail-header col-md-12">
231 <div class="professionnel-col">
232 <div class="linkPro resultTitle">Medecin</div>
233 </div>
234 <h5><a href="${catUrl}">${catToFetch.getName()}</a></h5>
235 </div>
236 </div>
237 </#if>
238 <#-- Article d'information -->
239 <#if journalArticle?? && journalArticle.getDDMTemplateKey()== ddmTemplateKey && journalArticle.getDDMStructureKey()==ddmStructureKey>
240 <hr>
241 <div class="row">
242 <div class="col-md-12">
243 <@liferay_journal["journal-article"] articleId=journalArticle.getArticleId() groupId=journalArticle.getGroupId() ddmTemplateKey=ddmTemplateKey />
244 </div>
245 </div>
246 </#if>
247</div>
248
249<#if catToFetch??>
250 <#-- ############### JS POUR AFFICHAGE DE LA CARTE ET DES PLANS ##################################### -->
251 <script data-senna-track="permanent">
252 Liferay.namespace('Maps').onGMapsReady = function(event) {
253 Liferay.Maps.gmapsReady = true;
254
255 Liferay.fire('gmapsReady');
256 };
257 </script>
258 <script data-senna-track="permanent" src="https://maps.googleapis.com/maps/api/js?callback=Liferay.Maps.onGMapsReady&key=${googleMapsAPIKey}" type="text/javascript"></script>
259 <script type="text/javascript">
260 var map;
261 var bounds = new google.maps.LatLngBounds();
262 var myPoints = [];
263 var markers = [];
264
265 <#if themeDisplay??>
266 var gsKmlUrl = '${themeDisplay.getPathThemeImages()}/google-map/85.kml';
267 </#if>
268 var images_front_path = '${images_front_path}';
269
270 function isBreakpoint(e) {
271 return $(".device-" + e).is(":visible")
272 }
273
274 function isMobile() {
275 return isBreakpoint("xs")
276 }
277
278 function isMD() {
279 return isBreakpoint("md")
280 }
281
282 function isLG() {
283 return isBreakpoint("lg")
284 }
285
286 function setMapHomeHeight() {
287 var i = 56,
288 n = $(".map-home .address-container");
289 n.each(function(e, t) {
290 e == n.length - 1 ? i += $(t).outerHeight(!1) : i += $(t).outerHeight(!0)
291 });
292 var e = $("#map_canvas");
293 isMD() || isLG() ? (e.height(i), e.closest(".row").find(".col-md-2").height(i)) : (e.height("400px"), e.closest(".row").find(".col-md-2").height("400px"))
294 }
295
296 function createMap() {
297 setMapHomeHeight();
298
299 var zoomNum;
300 if (isBreakpoint('sm')) {
301 zoomNum = 8;
302 } else if (isBreakpoint('xs')) {
303 zoomNum = 6;
304 } else {
305 zoomNum = 9;
306 }
307
308 var mapConfig = {
309 // How zoomed in you want the map to start at (always required)
310 zoom: zoomNum,
311 scrollwheel: false,
312 streetViewControl: false,
313 mapTypeControl: false,
314 fullscreenControl: true,
315 fullscreenControlOptions: {
316 position: google.maps.ControlPosition.LEFT_TOP
317 },
318 zoomControl: true,
319 zoomControlOptions: {
320 position: google.maps.ControlPosition.LEFT_BOTTOM
321 },
322 center: {lat: 46.663889812571426, lng: -1.2996525449218552}, // CHD Vendée, La Roche/Yon
323 styles: [{
324 "featureType": "landscape",
325 "elementType": "geometry",
326 "stylers": [{
327 "saturation": "-100"
328 }]
329 }, {
330 "featureType": "poi",
331 "elementType": "labels",
332 "stylers": [{
333 "visibility": "off"
334 }]
335 }, {
336 "featureType": "poi",
337 "elementType": "labels.text.stroke",
338 "stylers": [{
339 "visibility": "off"
340 }]
341 }, {
342 "featureType": "road",
343 "elementType": "labels.text",
344 "stylers": [{
345 "color": "#545454"
346 }]
347 }, {
348 "featureType": "road",
349 "elementType": "labels.text.stroke",
350 "stylers": [{
351 "visibility": "off"
352 }]
353 }, {
354 "featureType": "road.highway",
355 "elementType": "geometry.fill",
356 "stylers": [{
357 "saturation": "-87"
358 }, {
359 "lightness": "-40"
360 }, {
361 "color": "#ffffff"
362 }]
363 }, {
364 "featureType": "road.highway",
365 "elementType": "geometry.stroke",
366 "stylers": [{
367 "visibility": "off"
368 }]
369 }, {
370 "featureType": "road.highway.controlled_access",
371 "elementType": "geometry.fill",
372 "stylers": [{
373 "color": "#f0f0f0"
374 }, {
375 "saturation": "-22"
376 }, {
377 "lightness": "-16"
378 }]
379 }, {
380 "featureType": "road.highway.controlled_access",
381 "elementType": "geometry.stroke",
382 "stylers": [{
383 "visibility": "off"
384 }]
385 }, {
386 "featureType": "road.highway.controlled_access",
387 "elementType": "labels.icon",
388 "stylers": [{
389 "visibility": "on"
390 }]
391 }, {
392 "featureType": "road.arterial",
393 "elementType": "geometry.stroke",
394 "stylers": [{
395 "visibility": "off"
396 }]
397 }, {
398 "featureType": "road.local",
399 "elementType": "geometry.stroke",
400 "stylers": [{
401 "visibility": "off"
402 }]
403 }, {
404 "featureType": "water",
405 "elementType": "geometry.fill",
406 "stylers": [{
407 "saturation": "-52"
408 }, {
409 "hue": "#00e4ff"
410 }, {
411 "lightness": "-16"
412 }]
413 }]
414 };
415
416 map = new google.maps.Map(document.getElementById('map_canvas'), mapConfig);
417 var xs = {
418 url: images_front_path + '/google-map/pinpoint-xs.png',
419 size: new google.maps.Size(54, 52),
420 origin: new google.maps.Point(0, 0),
421 anchor: new google.maps.Point(27, 52)
422 };
423
424 var xl = {
425 url: images_front_path + '/google-map/pinpoint-xl.png',
426 size: new google.maps.Size(110, 103),
427 origin: new google.maps.Point(0, 0),
428 anchor: new google.maps.Point(55, 103)
429 };
430
431 var ctaLayer = new google.maps.KmlLayer({
432 url: gsKmlUrl,
433 map: map,
434 clickableIcons: false,
435 preserveViewport: true
436 });
437
438 <#-- Liste des POI à afficher en lien avec une image -->
439 <#list images?values as poi>
440 var iconSize = xl;
441 markers[ ${poi?index} ] = new google.maps.Marker({
442 position: new google.maps.LatLng( ${poi.Lat}, ${poi.Lng} ),
443 map: map,
444 icon: iconSize,
445 title: "${poi.Tooltip}"
446 });
447
448 markers[ ${poi?index} ].addListener('click', function() {
449 clearMarkers(markers);
450 markers[ ${poi?index} ].setIcon(images_front_path + '/google-map/pinpoint-xl.png');
451
452 $('.address-container').addClass('hide');
453 $('#address-${poi?index}').find('.address-container').removeClass('hide');
454 });
455 </#list>
456
457 myPoints.push(new google.maps.LatLng(46.6684334, -1.4121495));
458 myPoints.push(new google.maps.LatLng(46.970508, -1.310356));
459 myPoints.push(new google.maps.LatLng(46.451894, -1.170386));
460 for (var i = 0; i < myPoints.length; i++) {
461 bounds.extend(myPoints[i]);
462 }
463 map.fitBounds(bounds);
464 google.maps.event.addListenerOnce(map, 'tilesloaded', fixMyPageOnce);
465 }
466
467 if (Liferay.Maps.gmapsReady) {
468 createMap();
469 }
470 else {
471 Liferay.once('gmapsReady', createMap);
472 }
473
474 function fixMyPageOnce() {
475 for (var i = 0; i < markers.length; i++) {
476 if (markers[i] !== undefined) {
477 google.maps.event.trigger(markers[i], 'click');
478 break;
479 }
480 }
481 }
482
483 function clearMarkers(pointers) {
484 for (var i = 0; i < pointers.length; i++) {
485 if (pointers[i] !== undefined) {
486 pointers[i].setIcon(images_front_path + '/google-map/pinpoint-xs.png');
487 }
488 }
489 }
490
491 $(window).resize(function() {
492 setMapHomeHeight();
493 });
494 </script>
495</#if>