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

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

Permettre la connexion avec solr pas totalement identique à la base locale

File size: 5.0 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    }
85    $results = $s->search($query, $params, $deb, $nb);
86    //Reconstitut les résultats
87    $this->results = $results['response'];
88    for($i = 0 ; $i < count($this->results['docs']) ; $i++) {
89      $res = $this->results['docs'][$i];
90      $obj = $res['object'];
91
92      $this->results['docs'][$i]['link'] = $obj->getLink();
93      $this->results['docs'][$i]['photo'] = $this->getPhoto($obj);
94      $this->results['docs'][$i]['titre'] = $obj->getTitre();
95      $this->results['docs'][$i]['personne'] = $obj->getPersonne();
96      $this->results['docs'][$i]['highlighting'] = preg_replace('/^'.$this->results['docs'][$i]['personne'].'/', '', implode('...', $results['highlighting'][$res['id']]['text']));
97     
98    }
99    $this->results['end'] = $deb + $nb;
100    $this->results['page'] = $deb/$nb + 1;
101    if ($this->results['end'] > $this->results['numFound'] && $this->results['numFound']) {
102      $this->results['end'] = $this->results['numFound'] + 1;
103    }
104
105    //Prépare les facets
106    $this->facet['parlementaire']['prefix'] = 'parlementaire=';
107    $this->facet['parlementaire']['facet_field'] = 'tag';
108    $this->facet['parlementaire']['name'] = 'Parlementaire';
109
110    $this->facet['type']['prefix'] = '';
111    $this->facet['type']['facet_field'] = 'object_name';
112    $this->facet['type']['name'] = 'Types';
113    $this->facet['type']['values'] = $results['facet_counts']['facet_fields']['object_name'];
114
115    $tags = $results['facet_counts']['facet_fields']['tag'];
116    $this->facet['tag']['prefix'] = '';
117    $this->facet['tag']['facet_field'] = 'tag';
118    $this->facet['tag']['name'] = 'Tags';
119    foreach($tags as $tag => $nb ) {
120      if (!$nb)
121        continue;
122      if (!preg_match('/=/', $tag))
123        $this->facet['tag']['values'][$tag] = $nb;
124      if (preg_match('/^parlementaire=(.*)/', $tag, $matches)) {
125        $this->facet['parlementaire']['values'][$matches[1]] = $nb;
126      }
127    }
128    if (!$results['response']['numFound']) {
129      $this->setTemplate('noresults');
130    }else{
131      $this->fdates = array();
132      $this->fdates['max'] = 1;
133      foreach($results['facet_counts']['facet_dates']['date'] as $date => $nb) {
134        if (preg_match('/^20/', $date)) {
135          $pc = $nb/$results['response']['numFound'];
136          $this->fdates['values'][$date] = array('nb' => $nb, 'pc' => $pc);
137          if ($this->fdates['max'] < $pc) {
138            $this->fdates['max'] = $pc;
139          }
140        }
141      }
142    }
143  }
144}
Note: See TracBrowser for help on using the repository browser.