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

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

doctrine au lieu de Doctrine ne semble plus marcher sous linux avec la 1.4

File size: 7.0 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    $this->lois = $this->intervention->getTags(array('is_triple' => true,
61                                                     'namespace' => 'loi',
62                                                     'key' => 'numero',
63                                                     'return'    => 'value'));
64    $this->amdmts = $this->intervention->getTags(array('is_triple' => true,
65                                                       'namespace' => 'loi',
66                                                       'key' => 'amendement',
67                                                       'return'    => 'value'));
68    $this->response->setTitle('Intervention de '.$this->intervention->getIntervenant()->nom);
69    //    $this->response->setDescription($this->intervention->intervention);
70  }
71 
72  public function executeSeance(sfWebRequest $request) {
73    $seance_id = $request->getParameter('seance');
74    $this->seance = Doctrine::getTable('Seance')->find($seance_id);
75    $this->forward404Unless($this->seance);
76    if ($this->seance->type == 'commission') $this->orga = $this->seance->getOrganisme();
77    $query = Doctrine::getTable('Intervention')->createquery('i')
78        ->where('i.seance_id = ?', $seance_id)
79        ->orderBy('i.timestamp ASC');
80    $qtag = Doctrine_Query::create();
81    $qtag->from('Tagging tg, tg.Tag t, Intervention i');
82    $qtag->where('i.seance_id = ?', $seance_id);
83    $qtag->andWhere('i.id = tg.taggable_id');
84    $qtag->andWhere('t.name NOT LIKE ?', 'loi:%');
85    $this->tags = PluginTagTable::getPopulars($qtag, array('model' => 'Intervention', 'limit' => 9));
86    $this->interventions = $query->execute();
87  }
88
89  public function executeTag(sfWebRequest $request) {
90    $this->tags = split('\|', $request->getParameter('tags'));
91   
92    if (Doctrine::getTable('Tag')->findOneByName($this->tags[0]))
93      $query = PluginTagTable::getObjectTaggedWithQuery('Intervention', $this->tags);
94    else
95      $query = Doctrine::getTable('Intervention')
96        ->createQuery('Intervention')->where('0');
97
98    if ($slug = $request->getParameter('parlementaire')) {
99      $this->parlementaire = Doctrine::getTable('Parlementaire')
100        ->findOneBySlug($slug);
101      if ($this->parlementaire)
102        $query->andWhere('Intervention.parlementaire_id = ?', $this->parlementaire->id)
103      ;
104    }
105
106    if ($section = $request->getParameter('section')) {
107      $query->andWhere('(Intervention.section_id = ? OR si.section_id = ?)', array($section, $section))
108        ->leftJoin('Intervention.Section si');
109    }
110
111    $query->orderBy('Intervention.date DESC, Intervention.timestamp ASC');
112    $this->query = $query;
113  }
114
115  public function executeSearch(sfWebRequest $request) {
116    $this->mots = $request->getParameter('search');
117    $mots = $this->mots;
118    $mcle = array();
119
120    if (preg_match_all('/("[^"]+")/', $mots, $quotes)) {
121      foreach(array_values($quotes[0]) as $q)
122        $mcle[] = '+'.$q;
123      $mots = preg_replace('/\s*"([^\"]+)"\s*/', ' ', $mots);
124    }
125
126    foreach(split(' ', $mots) as $mot) {
127      if ($mot && !preg_match('/^[\-\+]/', $mot))
128        $mcle[] = '+'.$mot;
129    }
130
131    $this->high = array();
132    foreach($mcle as $m) {
133      $this->high[] = preg_replace('/^[+-]"?([^"]*)"?$/', '\\1', $m);
134    }
135
136    $sql = 'SELECT i.id FROM intervention i WHERE MATCH (i.intervention) AGAINST (\''.str_replace("'", "\\'", implode(' ', $mcle)).'\' IN BOOLEAN MODE)';
137
138    $search = Doctrine_Manager::connection()
139      ->getDbh()
140      ->query($sql)->fetchAll();
141
142    $ids = array();
143    foreach($search as $s) {
144      $ids[] = $s['id'];
145    }
146
147    $this->query = Doctrine::getTable('Intervention')->createQuery('i');
148    if (count($ids))
149      $this->query->whereIn('i.id', $ids);
150    else if (count($mcle))
151      foreach($mcle as $m)
152        $this->query->andWhere('i.intervention LIKE ?', '% '.$m.' %');
153    else {
154      $this->query->where('0');
155      return ;
156    }
157
158    if ($slug = $request->getParameter('parlementaire')) {
159      $this->parlementaire = Doctrine::getTable('Parlementaire')
160        ->findOneBySlug($slug);
161      if ($this->parlementaire)
162        $this->query->andWhere('i.parlementaire_id = ?', $this->parlementaire->id);
163    }
164
165    if ($section = $request->getParameter('section')) {
166      $this->query->andWhere('(Intervention.section_id = ? OR si.section_id = ?)', array($section, $section))
167        ->leftJoin('i.Section si');
168    }
169    $this->query->orderBy('date DESC, timestamp ASC');
170    if ($request->getParameter('rss')) {
171      $this->setTemplate('rss');
172      $this->feed = new sfRssFeed();
173    } else $request->setParameter('rss', array(array('link' => '@search_interventions_mots_rss?search='.$this->mots, 'title'=>'Les dernières interventions sur '.$this->mots.' en RSS')));
174   
175  }
176}
Note: See TracBrowser for help on using the repository browser.