solr_search_results.html
1 <#setting url_escaping_charset="UTF-8">
2 <#if conf_user_query??>
3 <#assign conf_query = "&conf=${conf_user_query}">
4 <#else>
5 <#assign conf_query = "">
6 </#if>
7 <#-- Encode facet queries -->
8 <#macro EncodeFQ list_fq optionalParam="" optionalParamDate=false >
9 <#assign encoded_facets_queries = "">
10 <#list list_fq as facet>
11 <#assign facet_url = facet?url>
12 <#if !optionalParam?has_content>
13 <#assign encoded_facets_queries = encoded_facets_queries+"&fq="+facet_url>
14 <#else>
15 <#if optionalParam != facet_url && optionalParamDate == false>
16 <#assign encoded_facets_queries = encoded_facets_queries+"&fq="+facet_url>
17 </#if>
18 <#if optionalParam != facet_url?url && optionalParamDate== true >
19 <#assign encoded_facets_queries = encoded_facets_queries+"&fq="+facet_url>
20 </#if>
21 </#if>
22 </#list>
23 ${encoded_facets_queries}
24 </#macro>
25 <#macro CreateFilterUrl facets_list sh facet query count name="" >
26 <#assign filter_name = count.name>
27 <#if name!="">
28 <#assign filter_name = name>
29 </#if>
30 <#if sh?has_content>
31 <li>
32 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}<@EncodeFQ facets_list sh?url />${conf_query}">
33 <i class="fa fa-check-square fa-fw"></i>
34 ${filter_name}
35 <span class="label label-primary">${count.count}</span>
36 </a>
37 </li>
38 <#else>
39 <#if count.count > 0>
40 <li>
41 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}&facetlabel=${count.name}&facetname=${facet.name}&fq=${facet.name}:${count.name?url}<@EncodeFQ facets_list />${conf_query}">
42 <i class="fa fa-square-o fa-fw"></i>
43 ${filter_name}
44 <span class="label label-primary">${count.count}</span>
45 </a>
46 </li>
47 </#if>
48 </#if>
49 </#macro>
50
51 <#if conf.extraMappingQuery>
52 <script type="text/javascript">
53 var loadresource = document.createElement('link');
54 loadresource.setAttribute("rel", "stylesheet");
55 loadresource.setAttribute("type", "text/css");
56 loadresource.setAttribute("href", "js/plugins/leaflet/leaflet/leaflet.css");
57 document.getElementsByTagName("head")[0].appendChild(loadresource);
58 loadresource = document.createElement('link');
59 loadresource.setAttribute("rel", "stylesheet");
60 loadresource.setAttribute("type", "text/css");
61 loadresource.setAttribute("href", "js/plugins/leaflet/leaflet/MarkerCluster.css");
62 document.getElementsByTagName("head")[0].appendChild(loadresource);
63 loadresource = document.createElement('link');
64 loadresource.setAttribute("rel", "stylesheet");
65 loadresource.setAttribute("type", "text/css");
66 loadresource.setAttribute("href", "js/plugins/leaflet/leaflet/MarkerCluster.Default.css");
67 document.getElementsByTagName("head")[0].appendChild(loadresource);
68 </script>
69 <script src = "js/plugins/leaflet/leaflet/leaflet.js"></script>
70 <script src="js/plugins/leaflet/leaflet/leaflet.markercluster.js"></script>
71 <script type="text/javascript">
72 $(window).load(function () {
73 var map = L.map('map').setView([48.85632, 2.33272], 12);
74 var points = [
75 <#list points as point>
76 {
77 "type": "${point.type}",
78 "code": "${point.code}",
79 "id": "${point.id}",
80 "geojson": ${point.geojson}
81 }<#if point_has_next>,</#if>
82 </#list>
83 ];
84 // create the tile layer with correct attribution
85 var osmUrl='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
86 var osmAttrib='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors';
87 var osm = new L.TileLayer(osmUrl, {minZoom: 8, maxZoom: 16, attribution: osmAttrib}).addTo(map);
88 var marker_clusters = {};
89 var marker_icons = {};
90 //Workardound https://github.com/Leaflet/Leaflet/issues/3696
91 var defaultIcon = L.Icon.extend({
92 options: {
93 iconSize: [25, 41],
94 iconAnchor: [12, 41],
95 popupAnchor: [1, -34],
96 shadowSize: [41, 41],
97 shadowUrl: L.Icon.Default.imagePath + '/marker-shadow.png'
98 }
99 });
100 var greenIcon = new defaultIcon({
101 iconUrl: L.Icon.Default.imagePath + '/marker-icon-green.png',
102 iconRetinaUrl: L.Icon.Default.imagePath + '/marker-icon-green-2x.png',
103 });
104 var yellowIcon = new defaultIcon({
105 iconUrl: L.Icon.Default.imagePath + '/marker-icon-yellow.png',
106 iconRetinaUrl: L.Icon.Default.imagePath + '/marker-icon-yellow-2x.png'
107 });
108 var redIcon = new defaultIcon({
109 iconUrl: L.Icon.Default.imagePath + '/marker-icon-red.png',
110 iconRetinaUrl: L.Icon.Default.imagePath + '/marker-icon-red-2x.png'
111 });
112 var createGreenCluster = function (cluster) {
113 var childCount = cluster.getChildCount();
114 return new L.DivIcon({ html: '<div><span>' + childCount + '</span></div>', className: 'marker-cluster marker-cluster-small', iconSize: new L.Point(40, 40) });
115 };
116 var createYellowCluster = function (cluster) {
117 var childCount = cluster.getChildCount();
118 return new L.DivIcon({ html: '<div><span>' + childCount + '</span></div>', className: 'marker-cluster marker-cluster-medium', iconSize: new L.Point(40, 40) });
119 };
120 var createRedCluster = function (cluster) {
121 var childCount = cluster.getChildCount();
122 return new L.DivIcon({ html: '<div><span>' + childCount + '</span></div>', className: 'marker-cluster marker-cluster-large', iconSize: new L.Point(40, 40) });
123 };
124 for (var i = 0; i < points.length; i++) {
125 var markers = undefined;
126 var icon = undefined;
127 var layer = "";
128 var popupContent = undefined;
129 var properties = points[i]["geojson"]["properties"];
130 if (typeof(properties) != 'undefined') {
131 layer = properties["layer"];
132 }
133 if (!layer) {
134 layer = points[i]["code"];
135 }
136 if (typeof(marker_clusters[layer]) != "undefined") {
137 markers = marker_clusters[layer];
138 icon = marker_icons[layer];
139 } else {
140 if (typeof(properties) != 'undefined' && typeof(properties["icon"]) != 'undefined') {
141 var clusterIconCreateFunction = undefined;
142 if (properties["icon"] == 'red' ) {
143 icon = redIcon;
144 clusterIconCreateFunction = createRedCluster;
145 } else if (properties["icon"] == 'green' ) {
146 icon = greenIcon;
147 clusterIconCreateFunction = createGreenCluster;
148 } else if (properties["icon"] == 'yellow' ) {
149 icon = yellowIcon;
150 clusterIconCreateFunction = createYellowCluster;
151 }
152 if (typeof(clusterIconCreateFunction) != 'undefined') {
153 markers = new L.MarkerClusterGroup({
154 iconCreateFunction: clusterIconCreateFunction
155 });
156 }
157 }
158 if (typeof(icon) == 'undefined') {
159 markers = new L.MarkerClusterGroup();
160 icon = new L.Icon.Default();
161 }
162 marker_clusters[layer] = markers;
163 marker_icons[layer] = icon;
164 }
165 var marker = L.marker([points[i]["geojson"]["geometry"]["coordinates"][1],points[i]["geojson"]["geometry"]["coordinates"][0]] ,{icon: icon});
166 if ( (typeof(properties) != 'undefined') && (typeof(properties["popupContent"]) != 'undefined') ) {
167 if (properties["popupContent"]) {
168 marker.bindPopup(properties["popupContent"])
169 }
170 } else {
171 popupContent = "<p>Loading " + points[i]["type"] + " " + points[i]["id"] + " " + points[i]["code"] + "...</p>";
172 marker.bindPopup(popupContent)
173 marker.on('click', (function(point) {
174 return function(e) {
175 var properties = point["properties"];
176 var popup = e.target.getPopup();
177 var url;
178 if ( (typeof(properties) != 'undefined') && (typeof(properties["popupAjax"]) != 'undefined') ) {
179 url = properties["popupAjax"];
180 } else {
181 url = "rest/leaflet/popup/" + point["type"] + "/" + point["id"] + "/" + point["code"];
182 }
183
184 $.get(url).done(function(data) {
185 popup.setContent(data);
186 popup.update();
187 }).fail(function() {
188 map.closePopup();
189 });
190 };
191 })(points[i]));
192 }
193 markers.addLayer(marker);
194 }
195 for (var markers in marker_clusters) {
196 if (marker_clusters.hasOwnProperty(markers)) {
197 map.addLayer(marker_clusters[markers]);
198 }
199 }
200 var baseMaps = {
201 "osm": osm
202 };
203 var overlayMaps = marker_clusters;
204 // paramétrage et ajout du L.control.layers à la carte
205 L.control.layers(baseMaps, overlayMaps).addTo(map);
206 });
207 </script>
208 </#if>
209 <
210 <div id="solr-form-section">
211 <div class="row">
212 <div class="col-xs-12 col-sm-12">
213 <ol class="breadcrumb">
214 <li>
215 <a target="_top" href="">Accueil</a>
216 </li>
217 <li>
218 <a target="_top" href="jsp/site/Portal.jsp?page=search-solr">Recherche</a>
219 </li>
220 <li>
221 <span class="last-path">#i18n{portal.search.search_results.title}</span>
222 </li>
223 </ol>
224 <h2>#i18n{portal.search.search_results.title}</h2>
225 <div id="resultForm" class="row">
226 <div class="col-xs-12 col-sm-12">
227 <form id="search" name="search" class="form" method="post" action="${fullUrl}">
228 <input type="hidden" name="page" value="search-solr">
229 <#if conf_user_query??>
230 <input type="hidden" name="conf" value="${conf_user_query}">
231 </#if>
232 <input type="hidden" name="sort_name" value="${sort_name!}">
233 <input type="hidden" name="sort_order" value="${sort_order!}">
234 <#if facets_list??>
235 <#list facets_list as facet>
236 <input type="hidden" name="fq" id="${facet[0..3]}" data-type="${facet[0..3]}" data-val="${facet[5..]}" value="${facet}">
237 </#list>
238 </#if>
239 <div class="form-group">
240 <label for="" class="sr-only">Recherche</label>
241 <div class="input-group">
242 <input type="text" name="query" class="form-control" placeholder="Rechercher" value="${query?if_exists}" id="solr">
243 <span class="input-group-btn">
244 <button type="submit" class="btn btn-primary btn-lg" title=" #i18n{portal.search.search_results.buttonSearch}">
245 <i class="fa fa-search"></i>
246 </button>
247 </span>
248 <#if conf.extraMappingQuery>
249 <div id="map" style="height: 400px; width: 100%"></div>
250 </#if>
251 </div>
252 </div>
253 <#-- spellChecker -->
254 <#if suggestion?has_content>
255 <div id="spellchecker" class="form-group">
256 <p class="lead">
257 <#list suggestion as sugg>
258 <#assign newQuery="" >
259 <span class="text-gray">#i18n{search.solr.display.result.spellchecker}</span> <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&query=${sugg.getCollationQueryString()?url}<@EncodeFQ facets_list />${conf_query}">${sugg.getCollationQueryString()}</a>
260 </#list>
261 </p>
262 </div>
263 </#if>
264 </form>
265 <#if error?has_content>
266 <div class="row">
267 <div class="col-xs-12 col-sm-offset-2 col-sm-6">
268 <div class="alert alert-danger">${error}</div>
269 </div>
270 </div>
271 </#if>
272 <div class="row">
273 <div class="col-xs-12 col-sm-6">
274 <h3 id="item-count">Il y a <span>${paginator.itemsCount} résultats </span> pour la recherche ${query?if_exists}</h3>
275 </div>
276 <div class="col-xs-12 col-sm-6">
277 <#if sort_list??>
278 <h3 id="tri" class="text-right">
279 Trier par pertinence
280 <#list sort_list as field>
281 <#if field.enableSort>
282 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&query=${query?url}<@EncodeFQ facets_list />&sort_name=${field.solrName}&sort_order=desc${conf_query}" title="${field.label} desc">
283 <i class="fa fa-chevron-down"></i>
284 </a>
285 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&query=${query?url}<@EncodeFQ facets_list />&sort_name=${field.solrName}&sort_order=asc${conf_query}" title="${field.label} asc">
286 <i class="fa fa-chevron-up"></i>
287 </a>
288 </#if>
289 </#list>
290 </h3>
291 </#if>
292 </div>
293 </div>
294 <div class="row">
295 <div class="col-xs-12 col-sm-3">
296 <label for="from" class="sr-only">De</label>
297 <div class="input-group">
298 <span class="input-group-addon">De</span>
299 <input type="text" class="form-control" id="from" name="from">
300 </div>
301 </div>
302 <div class="col-xs-12 col-sm-3">
303 <label for="to" class="sr-only"> à </label>
304 <div class="input-group">
305 <span class="input-group-addon"> à</span>
306 <input type="text" class="form-control" id="to" name="to">
307 </div>
308 </div>
309 </div>
310 <#if historique??>
311 <#assign fl=historique?size>
312 <#if fl > 0>
313 <div id="filters" class="row">
314 <div class="col-xs-12 col-sm-12">
315 <h5>Filtre<#if fl > 1>s</#if> actif<#if fl > 1>s</#if> :</h5>
316 <#list historique as fh>
317 <a id="a-${fh.name[0..3]}" data-type="${fh.name[5..]}" class="btn btn-primary" href="${fullUrl}?page=search-solr&query=${query?url}${fh.query}" class="btn btn-primary">
318 <#if fh.name[0..3]='date'>
319 <#assign toDate = "${fh.name[6..26]}"?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")>
320 <#assign toString = "${toDate?string('yyyy')}">
321 <#assign nowString = "${.now?string('yyyy')}">
322 <#if toString = nowString>
323 <#assign toMonth = "${toDate?string('MMMM')}">
324 ${toMonth} ${toString}
325 <#else>
326 ${toString}
327 </#if>
328
329 <#else>
330 ${fh.name[5..]}
331 </#if> <i class="fa fa-remove fa-fw"></i>
332 </a>
333 </#list>
334 </div>
335 </div>
336 </#if>
337 </#if>
338 <#-- Historique -->
339 <p id="historique" class="text-right">
340 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}${conf_query}">
341 Rénitialiser
342 </a>
343 </p>
344 </div>
345 </div>
346 <#-- results -->
347 <div id="resultList">
348 <div class="row">
349 <#-- facet refining -->
350 <div id="facets" class="col-xs-12 col-sm-4">
351 <#-- facets field -->
352 <#if facets??><#-- empty or null when no connection to server -->
353 <#assign i=0>
354 <#list facets as facet>
355 <#assign i=i+1>
356
357 <#if facet.values?? >
358 <#assign ftype=solr_fields[facet.name].label>
359 <#-- when there is no result, facet is not null, but facet.values is -->
360 <div class="panel-group" id="accordion-${i}" role="tablist" aria-multiselectable="true">
361 <div class="panel panel-default">
362 <div class="panel-heading" role="tab" id="heading-${i}">
363 <a role="button" data-toggle="collapse" data-parent="#accordion-${i}" href="#collapse-${i}" aria-expanded="true" aria-controls="collapse">
364 <h4 class="panel-title">
365 <i class="fa fa-fw fa-chevron-right"></i> <strong>${solr_fields[facet.name].label}</strong>
366 </h4>
367 </a>
368 </div>
369 <div id="collapse-${i}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading-${i}">
370 <div class="panel-body">
371 <#assign list_dir="">
372 <#assign list_met="">
373 <#assign list_syn="">
374 <ul class="list-unstyled">
375 <#list facet.values as count>
376 <#assign sh = "">
377 <#list historique as fh>
378 <#if fh.name = facet.name+":"+count.name>
379 <#assign sh = facet.name+":"+count.name>
380 </#if>
381 </#list>
382
383 <#switch ftype>
384 <#case "Type">
385 <#assign sName=count.name>
386 <#switch count.name>
387 <#case "blogs">
388 <#assign sName="Actualités">
389 <#break>
390 <#case "helpdesk">
391 <#assign sName="F.A.Q.">
392 <#break>
393 <#default>
394 <#assign sName=count.name?capitalize>
395 </#switch>
396 <@CreateFilterUrl facets_list sh facet query count sName/>
397 <#break>
398
399 <#case "Site">
400 <#switch count.name>
401 <#case "IntraParis-Portail">
402 <@CreateFilterUrl facets_list sh facet query count />
403 <#break>
404 <#case "IntraParis-Achats">
405 <#case "IntraParis-AIP">
406 <#case "IntraParis-Association">
407 <#case "IntraParis-Communication">
408 <#case "IntraParis-CompteParisien">
409 <#case "IntraParis-Elise">
410 <#case "IntraParis-FacilFamille">
411 <#case "IntraParis-Finances">
412 <#case "IntraParis-Jurilib">
413 <#case "IntraParis-Mairie11">
414 <#case "IntraParis-Mairie12">
415 <#case "IntraParis-Mairie16">
416 <#case "IntraParis-Mairie18">
417 <#case "IntraParis-Mairie4">
418 <#case "IntraParis-Mairie7">
419 <#case "IntraParis-Nomos">
420 <#case "IntraParis-Qualiparis">
421 <#case "IntraParis-RelationUsager">
422 <#case "IntraParis-RH">
423 <#case "IntraParis-SEQUANA">
424 <#assign list_met>
425 ${list_met}
426 <@CreateFilterUrl facets_list sh facet query count />
427 </#assign>
428 <#break>
429 <#case "IntraParis-CabinetDeLaMaire">
430 <#case "IntraParis-CASVP">
431 <#case "IntraParis-Conseil-De-Paris">
432 <#case "IntraParis-DAC">
433 <#case "IntraParis-DAE">
434 <#case "IntraParis-DAJ">
435 <#case "IntraParis-DASCO">
436 <#case "IntraParis-DASES">
437 <#case "IntraParis-DDCT">
438 <#case "IntraParis-Delib">
439 <#case "IntraParis-DEVE">
440 <#case "IntraParis-DFA">
441 <#case "IntraParis-DFPE">
442 <#case "IntraParis-DICOM">
443 <#case "IntraParis-DILT">
444 <#case "IntraParis-DJS">
445 <#case "IntraParis-DLH">
446 <#case "IntraParis-DPA">
447 <#case "IntraParis-DPE">
448 <#case "IntraParis-DPP">
449 <#case "IntraParis-DRH">
450 <#case "IntraParis-DSTI">
451 <#case "IntraParis-DSIN">
452 <#case "IntraParis-DU">
453 <#case "IntraParis-DVD">
454 <#case "IntraParis-IG">
455 <#case "IntraParis-SG">
456 <#case "IntraParis-MUSEES">
457 <#assign list_dir>
458 ${list_dir}
459 <@CreateFilterUrl facets_list sh facet query count />
460 </#assign>
461 <#break>
462 <#case "IntraParis-CASVP-CFTC">
463 <#case "IntraParis-CASVP-CGT">
464 <#case "IntraParis-CASVP-FO">
465 <#case "IntraParis-CASVP-SUD">
466 <#case "IntraParis-CASVP-SUPAP-FSU">
467 <#case "IntraParis-CASVP-UNSA">
468 <#case "IntraParis-CFDT">
469 <#case "IntraParis-CFTC">
470 <#case "IntraParis-CGC">
471 <#case "IntraParis-CGT">
472 <#case "IntraParis-EPPM-CFDT">
473 <#case "IntraParis-EPPM-CFTC">
474 <#case "IntraParis-EPPM-CGC">
475 <#case "IntraParis-EPPM-CGT">
476 <#case "IntraParis-EPPM-FO">
477 <#case "IntraParis-EPPM-SUD">
478 <#case "IntraParis-EPPM-SUPAP-FSU">
479 <#case "IntraParis-EPPM-UCP">
480 <#case "IntraParis-EPPM-UNSA">
481 <#case "IntraParis-FO">
482 <#case "IntraParis-SUD">
483 <#case "IntraParis-SUPAP-FSU">
484 <#case "IntraParis-UCP">
485 <#case "IntraParis-UNSA">
486 <#assign list_syn>
487 ${list_syn}
488 <@CreateFilterUrl facets_list sh facet query count />
489 </#assign>
490 <#break>
491 </#switch>
492 <#break>
493 </#switch>
494
495 </#list>
496 <li>
497 <#if ftype="Site">
498 <p id="dir-title" class="lead" data-toggle="collapse" data-target="#dir"><i class="fa fa-chevron-right fa-fw"></i> Direction <span class="label label-primary"></span></p>
499 <ul id="dir" class="collapse" aria-labelledby="dir-title">
500 ${list_dir}
501 </ul>
502 <p id="met-title" class="lead" data-toggle="collapse" data-target="#met"><i class="fa fa-chevron-right fa-fw"></i> Métier <span class="label label-primary"></span></p>
503 <ul id="met" class="collapse" aria-labelledby="met-title">
504 ${list_met}
505 </ul>
506 <p id="syn-title" class="lead" data-toggle="collapse" data-target="#syn"><i class="fa fa-chevron-right fa-fw"></i> Syndicats <span class="label label-primary"></span></p>
507 <ul id="syn" class="collapse" aria-labelledby="syn-title">
508 ${list_syn}
509 </ul>
510 </#if>
511 </li>
512 </ul>
513
514 </div>
515 </div>
516 </div>
517 </div>
518 </#if>
519 </#list>
520 </#if>
521 <#-- facets date refining -->
522 <#if facets_date??>
523 <#list facets_date as field>
524 <#if field.counts??>
525 <#-- when there is no result, facet is not null, but facet.counts is -->
526 <div class="panel-group" id="accordion-date" role="tablist" aria-multiselectable="true">
527 <div class="panel panel-default">
528 <div class="panel-heading" role="tab" id="heading-date">
529 <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse-date" aria-expanded="true" aria-controls="collapse">
530 <h4 class="panel-title">
531 <i class="fa fa-fw fa-chevron-right"></i> <strong> ${solr_fields[field.name].label} </strong>
532 </h4>
533 </a>
534 </div>
535 <div id="collapse-date" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading-date">
536 <div class="panel-body">
537 <ul class="list-unstyled">
538 <#assign year_count=0>
539 <#assign current_year=0>
540 <#assign nYear=0>
541 <#assign nowString = "${.now?string('yyyy')}">
542 <#assign nowNumber = nowString?number>
543 <#assign prev_year=0>
544 <#list field.counts?reverse as count>
545 <#if count.count != 0>
546 <#assign toDate = "${count.value}"?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")>
547 <#assign toString = "${toDate?string('yyyy')}">
548 <#assign toMonth = "${toDate?string('MMMM')}">
549 <#if nowString=toString >
550 <#assign daterange = "${field.name}:[${count.value} TO ${count.value}${facetDateGap}]"?url>
551 <#else>
552 <#assign daterange = "${field.name}:[${prev_year}-01-01T00:00:00Z TO ${prev_year+1}-01-01T00:00:00Z]"?url>
553 </#if>
554
555 <#assign sh = "">
556 <#list historique as fh>
557 <#if fh.name?url = daterange>
558 <#assign sh = daterange>
559 </#if>
560 </#list>
561 <#if nowString=toString >
562 <#if sh?has_content >
563 <li>
564 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}<@EncodeFQ facets_list sh?url true />${conf_query}">
565 <i class="fa fa-check-square fa-fw"></i> ${toMonth} ${toString} <span class="label label-primary">${count.count}</span>
566 </a>
567 </li>
568 <#else>
569 <li>
570 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}&facetlabel=${toMonth}-${toString}&facetname=${field.name}&fq=${daterange}<@EncodeFQ facets_list />${conf_query}">
571 <i class="fa fa-square-o fa-fw"></i> ${toMonth} ${toString} <span class="label label-primary">${count.count}</span>
572 </a>
573 </li>
574 </#if>
575 <#assign nYear=toString?number>
576 <#else>
577 <#if toString?number > 0 >
578 <#assign current_year=toString?number>
579 <#if current_year = nYear>
580 <#assign year_count= year_count + count.count>
581 <#else>
582 <#if nYear != nowNumber && nYear > 0>
583 <#if sh?has_content >
584 <li>
585 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}<@EncodeFQ facets_list sh?url true />${conf_query}">
586 <i class="fa fa-check-square fa-fw"></i> ${nYear} <span class="label label-primary">${year_count}</span>
587 </a>
588 </li>
589 <#else>
590 <li>
591 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}&facetlabel=${prev_year}&facetname=${field.name}&fq=${daterange}<@EncodeFQ facets_list />${conf_query}">
592 <i class="fa fa-square-o fa-fw"></i> ${nYear} <span class="label label-primary">${year_count}</span>
593 </a>
594 </li>
595 </#if>
596 </#if>
597 <#assign nYear = toString?number>
598 <#assign year_count=count.count >
599 </#if>
600 </#if>
601 </#if>
602
603 </#if>
604 <#assign prev_year=current_year>
605 </#list>
606 <#if 0 < prev_year>
607 <#assign daterange = "${field.name}:[${prev_year}-01-01T00:00:00Z TO ${prev_year+1}-01-01T00:00:00Z]"?url>
608 <#assign sh = "">
609 <#list historique as fh>
610 <#if fh.name?url = daterange>
611 <#assign sh = daterange>
612 </#if>
613 </#list>
614 <#if sh?has_content >
615 <li>
616 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}<@EncodeFQ facets_list sh?url true />${conf_query}">
617 <i class="fa fa-check-square fa-fw"></i> ${nYear} <span class="label label-primary">${year_count}</span>
618 </a>
619 </li>
620 <#else>
621 <li>
622 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}&facetlabel=${prev_year}&facetname=${field.name}&fq=${daterange}<@EncodeFQ facets_list />${conf_query}">
623 <i class="fa fa-square-o fa-fw"></i> ${nYear} <span class="label label-primary">${year_count}</span>
624 </a>
625 </li>
626 </#if>
627 </#if>
628 </ul>
629 </div>
630 </div>
631 </div>
632 </div>
633 </#if>
634 </#list>
635 </#if>
636 <#-- facets Intersection -->
637 <#if facet_tree??>
638
639 <div id="intersection" class="">
640 <#list facet_tree?keys as key>
641 <table>
642 <th>
643 <#assign field1= "${key}"?split(",")[0] >
644 <#assign field2= "${key}"?split(",")[1] >
645 ${solr_fields[field1].label} / ${solr_fields[field2].label}
646 </th>
647 <#list facet_tree[key] as facet>
648 <#if facet.values??>
649 <#-- when there is no result, facet is not null, but facet.values is -->
650 <tr>
651 <td>
652 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}&fq=${field1}:${facet.name?url}<@EncodeFQ facets_list/>${conf_query}">${facet.name}</a>
653 </td>
654 </tr>
655 <tr>
656 <td>
657 <ul>
658 <#list facet.values as count>
659 <li>
660 <a href="${fullUrl}?page=search-solr&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}&query=${query?url}&fq=${field1}:${facet.name?url}&fq=${field2}:${count.name?url}<@EncodeFQ facets_list/>${conf_query}">${count.name}(${count.count})</a>
661 </li>
662 </#list>
663 </ul>
664 </td>
665 </tr>
666 </#if>
667 </#list>
668 </table>
669 </#list>
670 </div>
671 </#if>
672
673 </div>
674 <div id="resultItems" class="col-xs-12 col-sm-8">
675 <form name="search" class="form-inline" method="post" action="${fullUrl}">
676 <input type="hidden" name="page" value="search-solr">
677 <input type="hidden" name="query" value="${query?if_exists}" >
678 <#if conf_user_query??>
679 <input type="hidden" name="conf" value="${conf_user_query}">
680 </#if>
681 <input type="hidden" name="sort_name" value="${sort_name!}">
682 <input type="hidden" name="sort_order" value="${sort_order!}">
683 <#if facets_list??>
684 <#list facets_list as facet>
685 <input type="hidden" name="fq" value="${facet}">
686 </#list>
687 </#if>
688 <#-- Number of documents per page selector #i18n{portal.search.search_results.labelNbDocsPerPage}: -->
689 <div class="pagination">
690 <@NbItemsPerPageSelectorCombo nb_items_per_page?string /> <@paginationSearch paginator=paginator />
691 </div>
692 </form>
693 <hr>
694 <div class="item">
695 <#list results_list as result>
696 <#switch result.type>
697 <#case "helpdesk">
698 <#assign image='fichier_article'>
699 <#break>
700 <#case "blogs">
701 <#assign image='fichier_article'>
702 <#break>
703 <#case "directory">
704 <#assign image='fichier_article'>
705 <#break>
706 <#case "PAGE">
707 <#assign image='fichier_article'>
708 <#break>
709 <#case "htmlpage">
710 <#assign image='fichier_article'>
711 <#break>
712 <#case "Fichiers en téléchargement">
713 <#assign image='fichiers_pdf'>
714 <#break>
715 <#default>
716 <#assign image='fichier_article'>
717 </#switch>
718 <div class="row">
719 <div class="hidden-xs col-sm-1">
720 <a class="img" href="${result.url}&terms=${query?url}&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}<@EncodeFQ facets_list />">
721 <img src="images/local/skin/${image}.png" alt="" title="" class="img-responsive">
722 </a>
723 </div>
724 <div class="col-xs-12 col-sm-11">
725 <a href="${result.url}&terms=${query?url}&items_per_page=${nb_items_per_page}&sort_name=${sort_name!}&sort_order=${sort_order!}<@EncodeFQ facets_list />">
726 <h2>${result.title}</h2>
727 <p class="date"><#if result.date?has_content>${result.date?date} - </#if>${result.site}</p>
728 <div class="result-text">
729 <#if result.summary??>${(result.highlight.map["summary"][0])!result.summary}</#if>
730 <#if result.highlight??>
731 <#-- get a extract from the "content" field where there is one (or more) of the searched words -->
732 <#if result.highlight.map["content"]??>
733 #i18n{search.solr.display.result.summary.extract} :
734 <#list result.highlight.map["content"] as extrait>
735 ${extrait}
736 </#list>
737 </#if>
738 </#if>
739 </div>
740 </a>
741
742 </div>
743 </div>
744 </#list>
745 <hr>
746 <form name="search" class="form-inline" method="post" action="${fullUrl}">
747 <input type="hidden" name="page" value="search-solr" />
748 <input type="hidden" name="query" value="${query?if_exists}" >
749 <#if conf_user_query??>
750 <input type="hidden" name="conf" value="${conf_user_query}">
751 </#if>
752 <input type="hidden" name="sort_name" value="${sort_name!}">
753 <input type="hidden" name="sort_order" value="${sort_order!}">
754 <#if facets_list??>
755 <#list facets_list as facet>
756 <input type="hidden" name="fq" value="${facet}">
757 </#list>
758 </#if>
759 <#-- Number of documents per page selector #i18n{portal.search.search_results.labelNbDocsPerPage}: -->
760 <div class="pagination">
761 <@NbItemsPerPageSelectorCombo nb_items_per_page?string /> <@paginationSearch paginator=paginator />
762 </div>
763 </form>
764 </div>
765 </div>
766 </div>
767 <#-- Freemarker macros -->
768 <#macro paginationSearch paginator >
769 <#if (paginator.pagesCount > 1) >
770 <@paginationSitePageLinks paginator=paginator />
771 </#if>
772 </#macro>
773 <#-- Number of items per page selector - Combo Box implementation -->
774 <#macro NbItemsPerPageSelectorCombo nb_items_per_page>
775 <select name="items_per_page" class="perpage">
776 <#list [ "10" , "20" , "50" , "100" ] as nb>
777 <#if nb_items_per_page = nb >
778 <option selected="selected" value="${nb}">${nb} par page</option>
779 <#else>
780 <option value="${nb}">${nb} par page</option>
781 </#if>
782 </#list>
783 </select>
784 </#macro>
785 <#-- Number of items per page selector - Radio List implementation -->
786 <#macro NbItemsPerPageSelectorRadioList nb_items_per_page>
787 <#list [ "5" , "10" , "20" , "50" ] as nb>
788 <#if nb = nb_items_per_page >
789 <input value="${nb}" id="items_per_page${nb}" name="items_per_page" class="radio" type="radio" checked ><label for="items_per_page${nb}">${nb}</label>
790 <#else>
791 <input value="${nb}" id="items_per_page${nb}" name="items_per_page" class="radio" type="radio" ><label for="items_per_page${nb}">${nb}</label>
792 </#if>
793 </#list>
794 </#macro>
795
796 <script>
797 $(function() {
798 $('.panel-title').on( 'click', function(e){
799 $(this).find('i').toggleClass('fa-chevron-down').toggleClass('fa-chevron-up');
800 });
801
802 $('.lead').on( 'click', function(e){
803 $(this).find('i').toggleClass('fa-chevron-down').toggleClass('fa-chevron-up');
804 });
805
806 $('.perpage').on( 'change', function(e){
807 var f = $(this).parents('.form-inline');
808 f.submit();
809 });
810
811 var collapsible = $('i.fa-check-square').parents('.collapse');
812 collapsible.each(function() {
813 $(this).collapse('show');
814 var collParent = $(this).attr('aria-labelledby');
815 $('#' + collParent).find('i').toggleClass('fa-chevron-down').toggleClass('fa-chevron-up');
816 });
817
818 $('#solr').autocomplete({
819 source: function(request, response){
820 $.ajax({
821 url: '@base_url@servlet/plugins/SolrSuggest',
822 dataType: 'jsonp',
823 minLength: 3,
824 data: {
825 q: request.term,
826 },
827 success: function(data) {
828 var formattedResponse = $.map(data.response.docs, function (item) {
829 return {
830 label: item.title,
831 value: item.title,
832 };
833 });
834 response( formattedResponse );
835 }
836 });
837 },
838 });
839
840 if ( $("#historique").length > 0 ){
841 var stype=$('#a-type').data('type');
842
843 switch (stype) {
844 case 'blogs':
845 $('#a-type').html('Actualités <i class="fa fa-remove fa-fw"></i>');
846 break;
847 case 'helpdesk':
848 $("#a-type").html('F.A.Q. <i class="fa fa-remove fa-fw"></i>');
849 break;
850 }
851 }
852
853 if ( $("input#date").length > 0 ){
854 var valFrom = "";
855 var aFrom = $("input#date").attr("data-val").substring(1,11).split("-");
856 var i = 0;
857 while (i < aFrom.length ){
858 valFrom += aFrom.pop() + "/";
859 }
860 valFrom=valFrom.substr( 0, valFrom.length - 1 )
861 $( "#from" ).val( valFrom );
862
863 var valTo = "";
864 var aTo = $("input#date").attr("data-val").substring(25,35).split("-");
865 var i = 0;
866 while (i < aTo.length ) {
867 valTo += aTo.pop() + "/";
868 }
869 valTo = valTo.substr( 0, valTo.length - 1 )
870 $( "#to" ).val( valTo );
871
872
873 $("#a-date").html( "Du " + valFrom +" au "+ valTo + " <i class=\"fa fa-remove fa-fw\"></i>");
874 $("#a-date").attr("title", "Supprimer le filtre date: Du " + valFrom +" au "+ valTo );
875 };
876
877 $( "#from" ).datepicker({
878 regional: "fr",
879 defaultDate: "+1w",
880 changeMonth: true,
881 changeYear: true,
882 onClose: function( selectedDate ) {
883 $( "#to" ).datepicker( "option", "minDate", selectedDate );
884 }
885 }).datepicker( );
886 $( "#to" ).datepicker({
887 regional: "fr",
888 defaultDate: "+1w",
889 changeMonth: true,
890 changeYear: true,
891 onClose: function( selectedDate ) {
892 $( "#from" ).datepicker( "option", "maxDate", selectedDate );
893 }
894 });
895
896 $("#search").submit( function(){
897 if( $( "#from" ).val() != "" ){
898 var dateFrom = $.datepicker.formatDate( "yy-mm-dd", $( "#from" ).datepicker( "getDate" ) );
899
900 if ( $( "#to" ).val() == "" ){
901 var date = new Date();
902 var s= date.getDate() + "/" + date.getMonth() + "/" + date.getYear();
903 $( "#to" ).datepicker( "setDate", s );
904 }
905 var dateTo = $.datepicker.formatDate( "yy-mm-dd", $( "#to" ).datepicker( "getDate" ) );
906
907 if ( $("input#date").length == 0 ){
908 $("#search").append('<input name="fq" id="date" data-type="date" data-val="" value="" type="hidden">');
909 };
910 $("input#date").val("date:[" + dateFrom.toString() + "T00:00:00Z TO " + dateTo.toString() + "T00:00:00Z]" );
911 }
912 });
913
914 });
915 </script>