source: cpc/trunk/project/apps/frontend/modules/solr/actions/actions.class.php @ 1416

Last change on this file since 1416 was 1416, checked in by teymour, 11 years ago

argument from to sur la recherche

File size: 5.3 KB
Line 
1<?php
2
3/**
4 * solr actions.
5 *
6 * @package    cpc
7 * @subpackage solr
8 * @author     Your name here
9 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
10 */
11class solrActions extends sfActions
12{
13
14  private function getPhoto($obj) {
15    sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
16    switch(get_class($obj)) {
17    case 'Intervention':
18      if ($obj->getParlementaire())
19        return url_for('@resized_photo_parlementaire?height=70&slug='.$obj->getIntervenant()->getSlug());
20      return '';
21    case 'QuestionEcrite':
22      return url_for('@resized_photo_parlementaire?height=70&slug='.$obj->getParlementaire()->getSlug());
23    case 'Amendement':
24      return '';
25    case 'Parlementaire':
26      return url_for('@resized_photo_parlementaire?height=70&slug='.$obj->getSlug());
27    case 'Commentaire':
28      return url_for('@photo_citoyen?slug='.$obj->getCitoyen()->getSlug());
29    }
30  }
31 /**
32  * Executes index action
33  *
34  * @param sfRequest $request A request object
35  */
36  public function executeSearch(sfWebRequest $request)
37  {
38    if ($search = $request->getParameter('search')) {
39      return $this->redirect('solr/search?query='.$search);
40    }
41    $this->query = $request->getParameter('query');
42   
43    $query = preg_replace('/\*/', '', $this->query);
44
45    if (!strlen($query)) {
46      $query = '*';
47    }
48
49    $nb = 20;
50    $deb = ($request->getParameter('page', 1) - 1) * $nb ;
51    $fq = '';
52    $this->facet = array();
53
54    $this->selected = array();
55    if ($on = $request->getParameter('object_name')) {
56      $this->selected['object_name'][$on] = 1;
57      $fq .= " object_name:$on";
58    }
59    if ($tags = $request->getParameter('tag')) {
60      foreach(explode(',', $tags) as $tag) {
61        $this->selected['tag'][$tag] = 1;
62        $fq .= ' tag:"'.$tag.'"';
63      }
64    }
65    //Récupère les résultats auprès de SolR
66    $s = new SolrConnector();
67    $params = array('hl'=>'true', 'fl' => 'id,object_id,object_name', 'hl.fragsize'=>500, "facet"=>"true", "facet.field"=>array("object_name","tag"), "facet.date" => "date", "facet.date.start"=>"2007-05-01T00:00:00Z", "facet.date.end"=>"NOW", "facet.date.gap"=>"+1MONTH", 'fq' => $fq);
68    $this->sort_type = 'pertinence';
69    if ($this->sort = $request->getParameter('sort')) {
70      $params['sort'] = "date desc";
71      $this->sort_type = 'date';
72    }
73    if ($date = $request->getParameter('date')) {
74      $dates = explode(',', $date);
75      $date = array_pop($dates);
76      $period = 'MONTH';
77      if (count($dates) == 1)
78        $period = 'DAY';
79      $query .= ' date:['.$date.' TO '.$date.'+1'.$period.']';
80      $this->selected['date'][$date] = 1;
81      $params['facet.date.start']=$date;
82      $params['facet.date.end'] = $date.'+1'.$period;
83      $params['facet.date.gap'] = '+1DAY';
84    }else {
85      if ($from = $request->getParameter('from')) {
86        $to = $request->getParameter('to', 'NOW');
87        $query .= ' date:['.$from.' TO '.$to.']';
88        $params['facet.date.start']=$from;
89        $params['facet.date.end'] = $to;
90        $params['facet.date.gap'] = '+1MONTH';
91      }
92    }
93    $results = $s->search($query, $params, $deb, $nb);
94    //Reconstitut les résultats
95    $this->results = $results['response'];
96    for($i = 0 ; $i < count($this->results['docs']) ; $i++) {
97      $res = $this->results['docs'][$i];
98      $obj = $res['object'];
99
100      $this->results['docs'][$i]['link'] = $obj->getLink();
101      $this->results['docs'][$i]['photo'] = $this->getPhoto($obj);
102      $this->results['docs'][$i]['titre'] = $obj->getTitre();
103      $this->results['docs'][$i]['personne'] = $obj->getPersonne();
104      $this->results['docs'][$i]['highlighting'] = preg_replace('/^'."$this->results['docs'][$i]['personne']".'/', '', implode('...', $results['highlighting'][$res['id']]['text']));
105     
106    }
107    $this->results['end'] = $deb + $nb;
108    $this->results['page'] = $deb/$nb + 1;
109    if ($this->results['end'] > $this->results['numFound'] && $this->results['numFound']) {
110      $this->results['end'] = $this->results['numFound'] + 1;
111    }
112
113    //Prépare les facets
114    $this->facet['parlementaire']['prefix'] = 'parlementaire=';
115    $this->facet['parlementaire']['facet_field'] = 'tag';
116    $this->facet['parlementaire']['name'] = 'Parlementaire';
117
118    $this->facet['type']['prefix'] = '';
119    $this->facet['type']['facet_field'] = 'object_name';
120    $this->facet['type']['name'] = 'Types';
121    $this->facet['type']['values'] = $results['facet_counts']['facet_fields']['object_name'];
122
123    $tags = $results['facet_counts']['facet_fields']['tag'];
124    $this->facet['tag']['prefix'] = '';
125    $this->facet['tag']['facet_field'] = 'tag';
126    $this->facet['tag']['name'] = 'Tags';
127    foreach($tags as $tag => $nb ) {
128      if (!$nb)
129        continue;
130      if (!preg_match('/=/', $tag))
131        $this->facet['tag']['values'][$tag] = $nb;
132      if (preg_match('/^parlementaire=(.*)/', $tag, $matches)) {
133        $this->facet['parlementaire']['values'][$matches[1]] = $nb;
134      }
135    }
136    if (!$results['response']['numFound']) {
137      $this->setTemplate('noresults');
138    }else{
139      $this->fdates = array();
140      $this->fdates['max'] = 1;
141      foreach($results['facet_counts']['facet_dates']['date'] as $date => $nb) {
142        if (preg_match('/^20/', $date)) {
143          $pc = $nb/$results['response']['numFound'];
144          $this->fdates['values'][$date] = array('nb' => $nb, 'pc' => $pc);
145          if ($this->fdates['max'] < $pc) {
146            $this->fdates['max'] = $pc;
147          }
148        }
149      }
150    }
151  }
152}
Note: See TracBrowser for help on using the repository browser.