source: cpc/trunk/project/apps/frontend/modules/solr/templates/searchSuccess.php @ 1589

Last change on this file since 1589 was 1589, checked in by teymour, 10 years ago

Correction de bug sur le & + présentation

File size: 11.0 KB
Line 
1<?php 
2$sf_response->setTitle("Recherche de $query");  $style = "xneth";
3
4function url_search($query, $args) 
5{
6  $extra = '';
7  $url = "solr/search?query=".$query;
8  foreach($args as $key => $value) {
9    if (is_array($value)) {
10      if (count($value)) { $extra .= '&'.$key.'='.implode(',', array_keys($value)); }
11    }   
12    else { $extra .= '&'.$key.'='.$value; }
13  }
14  return $url.$extra;
15}
16
17function link_search($text, $query, $args, $options) 
18{
19  if($options) { return link_to($text, url_search($query, $args), $options); }
20  else { return link_to($text, url_search($query, $args)); }
21}
22
23function addToDate($date, $interval) {
24  $date = preg_replace('/\-/', '', $date);
25  $annee = substr($date, 0, 4);
26  $mois = substr($date, 4, 2);
27  $jour = substr($date, 6, 2);
28  if($interval == 'mois') {
29    $date = mktime(0, 0, 0, $mois + 1, $jour, $annee); 
30    #int mktime  ("H","m","s","M","j","Y", -1)
31  }
32  else { $date = mktime(0, 0, 0, $mois, $jour - 1, $annee); }
33  $date = date("Ymd", $date);
34  return $date;
35}
36
37$recherche = preg_replace('/"/', '&quot;', $query);
38
39switch ($vue) {
40  case "jour":
41    $periode_text = 'le '.myTools::displayShortDate($start);
42    $intitule_resultats = 'Résultats pour "<em>'.$recherche.'</em>" '.$periode_text;
43    $graph = 0;
44    break;
45  case "mois":
46    $periode_text = 'en '.myTools::displayMoisAnnee($start);
47    $intitule_resultats = 'Résultats pour "<em>'.$recherche.'</em>" ';
48    $graph = 1;
49    break;
50  case "par_jour":
51    $periode_text = 'entre le '.myTools::displayShortDate($start).' et le '.myTools::displayShortDate($end);
52    $intitule_resultats = 'Résultats pour "<em>'.$recherche.'</em>" ';
53    $graph = 1;
54    break;
55  case "par_mois":
56    $periode_text = 'entre '.myTools::displayMoisAnnee($start).' et '.myTools::displayMoisAnnee($end);
57    $intitule_resultats = 'Résultats pour "<em>'.$recherche.'</em>" ';
58    $graph = 1;
59    break;
60  default:
61    $periode_text = "supprimer les critère de dates";
62    $intitule_resultats = 'Recherche de "<em>'.$recherche.'</em>';
63    $graph = 1;
64}
65
66//////////////////// DEBUT SANS AJAX /////////////////////
67//////////////////////////////////////////////////////////
68
69if (!$ajax) :
70?>
71<script type="text/javascript">
72<!--
73function urlParams(params) {
74        param = new Object();
75        if(jQuery.isArray(params)) {
76    jQuery.each(params, function() {
77      val = this.split('=');
78      param[val[0]] = val[1];
79    });
80  }
81  else {
82    val = params.split('=');
83    param[val[0]] = val[1];
84  }
85        return param;
86}
87
88periode = new Array();
89date_href = new Array();
90nb_li = 0;
91bh = 0;
92nh = 0;
93if(location.search.substring(1)) { parametre = urlParams(location.search.substring(1).split('&')); }
94else { parametre = new Object(); }
95
96timer4update = null;
97function realAjaxUpdate(lien) {
98  lien += '&ajax=1';
99  $('#results_container').load(lien, function() {$('#results_container').fadeTo(100,1);});
100}
101function ajaxUpdateFor(lien) {
102  if (timer4update) {
103    clearTimeout(timer4update);
104    timer4update = null;
105  }
106  $('#results_container').css('opacity', 0.5);
107  timer4update = setTimeout('realAjaxUpdate("'+lien+'")', 2500);
108}
109
110$(document).ready(function() {
111  $(".date li").each(function() {
112    if($(this).height() > bh) { bh = $(this).height(); }
113    date_li = $(this).find('a').attr("title").split(':');
114    date_href[nb_li] = $(this).find('a').attr("href");
115    $(this).find(".hover_graph").attr("onclick", "document.location.replace('http://"+location.host+date_href[nb_li]+"')");
116    $(this).find(".hover_graph").css("cursor", "pointer");
117    periode[nb_li] = date_li[0];
118    nb_li++;
119  });
120  if(bh <= 30) {
121    $(".date li").each(function() {
122      nh = $(this).height() * 2; $(this).height(nh);
123    });
124    bh = bh * 2;
125  }
126  if(bh <= 170) { bh = bh + 30; $(".date").height(bh); }
127  $(".date").fadeIn(300); /* à revoir */
128        $(function() {
129                $("#slider_date_graph").slider({
130                        range: true,
131                        min: 0,
132                        max: nb_li-1,
133                        values: [0, nb_li],
134                        slide: function(event, ui) {
135                          from = date_href[ui.values[0]].split('?');
136                          from = urlParams(from[1].split('&'));
137                          from = from["date"].split('%2C');
138                          to = date_href[ui.values[1]].split('?');
139                          to = urlParams(to[1].split('&'));
140                          to = to["date"].split('%2C');
141                          parametre["date"] = from[0]+'%2C'+to[0];
142                         
143                          lien = document.location+'';
144                          lien = lien.replace(/date=[^&]+/, '');
145                          if (!lien.match(/\?/))
146                            lien += '?';
147                          else
148                            lien += '&';
149                          lien += 'date='+parametre['date'];
150
151                          if(ui.values[0] == ui.values[1]) {
152                            texte_periode = '<a href="'+lien+'" style="text-decoration: underline;"><strong>'+periode[ui.values[0]]+'<\/strong><\/a>';
153                          }
154                          else {
155                            texte_periode = '<a href="'+lien+'" style="text-decoration: underline;"><strong>entre '+periode[ui.values[0]]+' et '+ periode[ui.values[1]]+'<\/strong><\/a>';
156                          }
157                          ajaxUpdateFor(lien);
158                          $("#periode").text("");
159                                $("#periode").append(texte_periode);
160                        }
161                });
162                $("#periode").text('entre ' + periode[$("#slider_date_graph").slider("values", 0)] + ' et ' + periode[$("#slider_date_graph").slider("values", 1)]);
163        });
164});
165//-->
166</script>
167
168<div class="solr">
169  <div class="searchbox">
170  <form action="">
171  <p>
172    <input name="search" value="<?php echo $recherche; ?>" />
173    <input type="submit" value="Rechercher"/>
174  </p>
175  </form>
176</div>
177<h1><?php echo $intitule_resultats; ?></h1>
178<?php 
179if($graph) { 
180  $width_date = 900;
181  $left = 2;
182  $espacement = 4;
183  $width = (($width_date - $left) / count($fdates['values'])) - $espacement;
184?>
185<div class="cont_date_graph">
186   <span>Affiner par date :</span> <span id="periode"><?php echo $periode_text; ?></span>
187  <div class="date" style="width: <?php echo $width_date ?>px;">
188  <ul>
189    <?php $i = 0; foreach($fdates['values'] as $date => $nb) :
190    $i++;
191    $height = round($nb['pc']*100/($fdates['max']) * 2);
192    $padding = 200-$height; ?>
193    <li<?php echo ' style="list-style-image: none; width: '.$width.'px; height: '.$height.'px; left: '.$left.'px;">'; 
194    $left = $left + $width; if($i < (count($fdates['values']))) { $left = $left + $espacement; }
195    $newargs = $selected;
196   
197    $newargs['date'] = $date.'%2C'.$date;
198   
199    if(($vue == 'jour') or ($vue == 'par_jour') or ($vue == 'mois')){ 
200      $title_date = myTools::displayShortDate($date).' : '.$nb['nb'].' résultats';
201    }
202    if($vue == 'par_mois') { 
203      $title_date = ucfirst(myTools::displayMoisAnnee($date)).' : '.$nb['nb'].' résultats';
204    }
205    if($vue == 'par_mois') { 
206      $newargs['date'] = $date.'%2C'.addToDate($date, 'mois');
207    }
208   
209    echo '<div class="hover_graph" title="'.$title_date.'" style="width: '.$width.'px; height: '.$padding.'px;  bottom: '.$height.'px;"></div><span class="text_graph">'.link_search($nb['nb'], $query, $newargs, array('title' => $title_date)).'</span>'; 
210   
211    # echo ' '.$nb['nb'].' résultats ('; printf('%02d', $nb['pc']*100/($fdates['max'])); echo '%)';
212    ?>
213    </li>
214    <?php endforeach; ?>
215  </ul>
216  </div>
217  <div id="slider_date_graph"></div>
218</div>
219<?php } ?>
220<div id="results_container">
221<?php 
222endif; 
223///////////////////// FIN SANS AJAX /////////////////////
224?>
225<div class="nb_results">
226  <h2>Résultats <?php echo $results['start']+1; ?> à <?php echo min($results['end'],$results['numFound']); ?> sur <?php echo $results['numFound']; ?> <strong>triés par <?php echo $sort_type; ?></strong> -
227  <span class="tri">
228  <?php 
229  $newargs = $selected;
230  if ($sort) {
231    if (isset($newargs['sort'])) { $newargs['sort'] = 0; }
232    echo link_search('trier par pertinence', $query, $newargs, 0); 
233  } 
234  else {
235    $newargs['sort'] = 1;
236    echo link_search('trier par date', $query, $newargs, 0); 
237  }
238  ?>
239  </span></h2>
240</div>
241<div class="options">
242  <div class="mail">
243  <h3>Alerte email</h3>
244  <?php 
245  $args = '';
246  foreach(array_keys($selected) as $k) {
247    if (!is_array($selected[$k])) 
248      continue;
249    if ($args)
250      $args .= '&';
251    $args.= "$k=".implode(',', array_keys($selected[$k]));
252  }
253  echo link_to('Recevoir un email lorsque de nouveaux résultats seront publiés pour cette recherche', 'alerte/create?filter='.urlencode($args).'&query='.urlencode($query));
254
255global $facetName2HumanName;
256$facetName2HumanName = array(
257                             'Parlementaire' => 'Filtrer par Parlementaire',
258                             'Types' => 'Filtrer par type de document',
259                             'Tags' => 'Filtrer par tags',
260                             'TexteLoi' => 'Document parlementaires',
261                             'QuestionEcrite' => 'Questions ecrites',
262                             'Tags' => 'Filtrer par tags'
263);
264function facet2Human($id) {
265  global $facetName2HumanName;
266  if (!isset($facetName2HumanName[$id])) {
267    return $id;
268  }
269  return $facetName2HumanName[$id];
270}
271  ?>
272  </div>
273  <div class="facets">
274  <h3>Affiner la recherche</h3>
275  <?php 
276  if(isset($newargs['date'])) {
277    $args_sans_date = $newargs;
278    unset($args_sans_date['date']);
279    echo '<p><strong>Filtrer par dates</strong></p><ul><li class="selected">'.link_search($periode_text, $query, $args_sans_date, 0).'</li></ul>';
280  }
281 
282  foreach(array_keys($facet) as $k) { if (isset($facet[$k]['values']) && count($facet[$k]['values'])) : ?>
283    <div class="<?php echo $k; ?>">
284       <p><strong><?php echo facet2Human($facet[$k]['name']); ?></strong></p>
285    <ul>
286    <?php foreach($facet[$k]['values'] as $value => $nb) : if ($nb) :
287      $is_selected = isset($selected[$facet[$k]['facet_field']][$facet[$k]['prefix'].$value]) && 
288                  $selected[$facet[$k]['facet_field']][$facet[$k]['prefix'].$value];
289    ?>
290      <li<?php if ($is_selected) echo ' class="selected"'; ?>><?php 
291      $newargs = $selected;
292      if ($is_selected) 
293        unset($newargs[$facet[$k]['facet_field']][$facet[$k]['prefix'].$value]);
294      else                           
295        $newargs[$facet[$k]['facet_field']][$facet[$k]['prefix'].$value] = 1;
296      echo link_search(facet2Human($value), $query, $newargs, 0); ?>&nbsp;(<?php echo $nb; ?>)
297      </li>
298    <?php endif; endforeach; ?>
299    </ul>
300    </div>
301  <?php endif; } ?>
302  </div>
303</div>
304<div class="results">
305  <?php foreach ($results['docs'] as $record) : ?>
306  <div class="item">
307  <h4><a href="<?php echo $record['link']; ?>"><?php echo $record['titre']; ?></a></h4>
308  <?php if ($record['photo']) { ?>
309  <p class="photo"><a href="<?php echo $record['link']; ?>" rel="nofollow"><?php echo $record['photo']; ?></a></p>
310  <?php } ?>
311  <p class="intervenant"><a href="<?php echo $record['link']; ?>" rel="nofollow"><?php echo $record['personne']; ?></a></p>
312  <p class="content"><?php echo $record['highlighting']; ?></p>
313  <p class="more"><a href="<?php echo $record['link']; ?>">Consulter</a></p>
314  </div>
315  <div class="record">
316  </div>
317  <?php endforeach; ?>
318</div>
319<div class="pager">
320  <div class="next">
321  <?php
322  if ($results['end']-1 != $results['numFound']) {
323    $newargs = $selected;
324    $newargs['page'][$results['page'] + 1] = 1;
325    echo link_search('page suivante', $query, $newargs, 0); 
326  }
327  ?>
328  </div>
329  <div class="last">
330  <?php
331  $newargs = $selected;
332  $newargs['page'][$results['page'] - 1] = 1;
333  if ($results['page'] > 1) {
334    if (isset($newargs['page'][1]))
335    unset($newargs['page'][1]);
336    echo link_search('page précédente', $query, $newargs, 0); 
337  }
338  ?>
339  </div>
340</div>
341</div>
342<?php if (!$ajax) : ?>
343</div>
344<?php endif; ?>
Note: See TracBrowser for help on using the repository browser.