source: cpc/trunk/project/apps/frontend/modules/intervention/actions/actions.class.php @ 1349

Last change on this file since 1349 was 1349, checked in by roux, 11 years ago

amélioration présentation page intervention individuelle

File size: 7.5 KB
Line 
1<?php
2
3/**
4 * intervention actions.
5 *
6 * @package    cpc
7 * @subpackage intervention
8 * @author     Your name here
9 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
10 */
11class interventionActions extends sfActions
12{
13  public function executeParlementaire(sfWebRequest $request)
14  {
15    if (!$this->type = $request->getParameter('type')) $this->type = 'all';
16    $this->parlementaire = Doctrine::getTable('Parlementaire')->findOneBySlug($request->getParameter('slug'));
17    $this->forward404Unless($this->parlementaire);
18    $this->interventions = Doctrine::getTable('Intervention')->createQuery('i')
19      ->where('i.parlementaire_id = ?', $this->parlementaire->id);
20    if (preg_match('/(commission|question|loi)$/', $this->type)) {
21      $this->interventions->andWhere('i.type = ?', $this->type);
22      if ($this->type == 'question')
23        $this->interventions->andWhere('i.fonction NOT LIKE ?', 'président%')
24          ->andWhere('i.nb_mots > ?', 40)
25          ->groupBy('i.seance_id');
26    } else if ($this->type != 'all')
27      $this->forward404();
28    if ($this->type == 'question') $this->titre = 'Questions orales';
29    else {
30      $this->titre = 'Interventions';
31      if ($this->type == 'loi') 
32        $this->titre .= ' en hémicycle';
33      else if ($this->type == 'commission') 
34        $this->titre .= ' en commissions';
35    }
36    $this->response->setTitle($this->titre.' de '.$this->parlementaire->nom);
37    $this->interventions->orderBy('i.date DESC, i.timestamp ASC');
38  }
39 
40  public function executeParlementaireOrganisme(sfWebRequest $request) {
41    $this->parlementaire = Doctrine::getTable('Parlementaire')->findOneBySlug($request->getParameter('slug'));
42    $this->forward404Unless($this->parlementaire);
43    $this->orga = Doctrine::getTable('Organisme')->find($request->getParameter('orga'));
44    $this->forward404Unless($this->orga);
45    $this->interventions = Doctrine::getTable('Intervention')->createQuery('i')
46      ->leftJoin('i.Seance s')
47      ->where('i.parlementaire_id = ?', $this->parlementaire->id)
48      ->andWhere('s.organisme_id = ?', $this->orga)
49      ->orderBy('i.date DESC, i.timestamp ASC');
50    $this->surtitre = link_to($this->orga->getNom(), '@list_parlementaires_organisme?slug='.$this->orga->getSlug());
51    $this->titre = 'Interventions';
52    $this->response->setTitle($this->titre.' en '.$this->orga->nom.' de '.$this->parlementaire->nom);
53  }
54
55  public function executeShow(sfWebRequest $request) {
56    $this->intervention = Doctrine::getTable('Intervention')->createquery('i')
57      ->where('i.id = ?', $request->getParameter('id'))
58      ->fetchOne();
59    $this->forward404Unless($this->intervention);
60
61    $titre = "";
62    $this->section = $this->intervention->getSection();
63    $this->secparent = $this->section->getSection();
64    $this->seance = $this->intervention->getSeance();
65    if ($this->intervention->getType() == 'commission') {
66      $this->orga = $this->seance->getOrganisme();
67      $titre .= $this->orga->getNom();
68    } else if ($this->secparent && !(preg_match('/questions/i', $this->secparent->getTitre())))
69      $titre .= $this->secparent->getTitre();
70    else 
71      $titre .= $this->section->getTitre();
72    $titre .= " - ".$this->seance->getTitre();
73    $this->lois = $this->intervention->getTags(array('is_triple' => true,
74                                                     'namespace' => 'loi',
75                                                     'key' => 'numero',
76                                                     'return'    => 'value'));
77    $this->amdmts = $this->intervention->getTags(array('is_triple' => true,
78                                                       'namespace' => 'loi',
79                                                       'key' => 'amendement',
80                                                       'return'    => 'value'));
81    $this->response->setTitle($titre.' - Intervention de '.$this->intervention->getIntervenant()->nom." - NosDéputés.fr");
82    //    $this->response->setDescription($this->intervention->intervention);
83  }
84 
85  public function executeSeance(sfWebRequest $request) {
86    $seance_id = $request->getParameter('seance');
87    $this->seance = Doctrine::getTable('Seance')->find($seance_id);
88    $this->forward404Unless($this->seance);
89    if ($this->seance->type == 'commission') $this->orga = $this->seance->getOrganisme();
90    $query = Doctrine::getTable('Intervention')->createquery('i')
91        ->where('i.seance_id = ?', $seance_id)
92        ->orderBy('i.timestamp ASC');
93    $qtag = Doctrine_Query::create();
94    $qtag->from('Tagging tg, tg.Tag t, Intervention i');
95    $qtag->where('i.seance_id = ?', $seance_id);
96    $qtag->andWhere('i.id = tg.taggable_id');
97    $qtag->andWhere('t.name NOT LIKE ?', 'loi:%');
98    $this->tags = PluginTagTable::getPopulars($qtag, array('model' => 'Intervention', 'limit' => 9));
99    $this->interventions = $query->execute();
100  }
101
102  public function executeTag(sfWebRequest $request) {
103    $this->tags = split('\|', $request->getParameter('tags'));
104   
105    if (Doctrine::getTable('Tag')->findOneByName($this->tags[0]))
106      $query = PluginTagTable::getObjectTaggedWithQuery('Intervention', $this->tags);
107    else
108      $query = Doctrine::getTable('Intervention')
109        ->createQuery('Intervention')->where('0');
110
111    if ($slug = $request->getParameter('parlementaire')) {
112      $this->parlementaire = Doctrine::getTable('Parlementaire')
113        ->findOneBySlug($slug);
114      if ($this->parlementaire)
115        $query->andWhere('Intervention.parlementaire_id = ?', $this->parlementaire->id)
116      ;
117    }
118
119    if ($section = $request->getParameter('section')) {
120      $query->andWhere('(Intervention.section_id = ? OR si.section_id = ?)', array($section, $section))
121        ->leftJoin('Intervention.Section si');
122    }
123
124    $query->orderBy('Intervention.date DESC, Intervention.timestamp ASC');
125    $this->query = $query;
126  }
127
128  public function executeSearch(sfWebRequest $request) {
129    $this->mots = $request->getParameter('search');
130    $mots = $this->mots;
131    $mcle = array();
132
133    if (preg_match_all('/("[^"]+")/', $mots, $quotes)) {
134      foreach(array_values($quotes[0]) as $q)
135        $mcle[] = '+'.$q;
136      $mots = preg_replace('/\s*"([^\"]+)"\s*/', ' ', $mots);
137    }
138
139    foreach(split(' ', $mots) as $mot) {
140      if ($mot && !preg_match('/^[\-\+]/', $mot))
141        $mcle[] = '+'.$mot;
142    }
143
144    $this->high = array();
145    foreach($mcle as $m) {
146      $this->high[] = preg_replace('/^[+-]"?([^"]*)"?$/', '\\1', $m);
147    }
148
149    $sql = 'SELECT i.id FROM intervention i WHERE MATCH (i.intervention) AGAINST (\''.str_replace("'", "\\'", implode(' ', $mcle)).'\' IN BOOLEAN MODE)';
150
151    $search = Doctrine_Manager::connection()
152      ->getDbh()
153      ->query($sql)->fetchAll();
154
155    $ids = array();
156    foreach($search as $s) {
157      $ids[] = $s['id'];
158    }
159
160    $this->query = Doctrine::getTable('Intervention')->createQuery('i');
161    if (count($ids))
162      $this->query->whereIn('i.id', $ids);
163    else if (count($mcle))
164      foreach($mcle as $m)
165        $this->query->andWhere('i.intervention LIKE ?', '% '.$m.' %');
166    else {
167      $this->query->where('0');
168      return ;
169    }
170
171    if ($slug = $request->getParameter('parlementaire')) {
172      $this->parlementaire = Doctrine::getTable('Parlementaire')
173        ->findOneBySlug($slug);
174      if ($this->parlementaire)
175        $this->query->andWhere('i.parlementaire_id = ?', $this->parlementaire->id);
176    }
177
178    if ($section = $request->getParameter('section')) {
179      $this->query->andWhere('(Intervention.section_id = ? OR si.section_id = ?)', array($section, $section))
180        ->leftJoin('i.Section si');
181    }
182    $this->query->orderBy('date DESC, timestamp ASC');
183    if ($request->getParameter('rss')) {
184      $this->setTemplate('rss');
185      $this->feed = new sfRssFeed();
186    } else $request->setParameter('rss', array(array('link' => '@search_interventions_mots_rss?search='.$this->mots, 'title'=>'Les dernières interventions sur '.$this->mots.' en RSS')));
187   
188  }
189}
Note: See TracBrowser for help on using the repository browser.