source: cpc/trunk/project/apps/frontend/modules/amendement/actions/actions.class.php @ 2672

Last change on this file since 2672 was 2672, checked in by teymour, 9 years ago

Gestion des sous amendements dans la table sous-amendements

File size: 7.9 KB
Line 
1<?php
2
3class amendementActions extends sfActions
4{
5  static $seuil_amdmts = 8;
6 
7  public function executeShow(sfWebRequest $request)
8  {
9    $query = Doctrine::getTable('Amendement')->createquery('a')
10      ->where('a.texteloi_id = ?', $request->getParameter('loi'))
11      ->andWhere('a.numero = ?', $request->getParameter('numero'))
12      ->andWhere('a.sort <> ?', 'Rectifié')
13      ->leftJoin('a.ParlementaireAmendement pa')
14      ->leftJoin('pa.Parlementaire p');
15
16     $this->amendement = $query->fetchOne();
17     $this->forward404Unless($this->amendement);
18
19     if (!($section = $this->amendement->getSection()))
20       $this->section = NULL;
21     else $this->section = $section->getSection(1);
22
23     $this->identiques = Doctrine::getTable('Amendement')->createQuery('a')
24       ->where('content_md5 = ?', $this->amendement->content_md5)
25       ->orderBy('numero')
26       ->execute();
27
28     if (count($this->identiques) < 2) {
29       $this->identiques = array();
30     }
31     
32     $this->seance = $this->amendement->getIntervention($this->amendement->numero);
33     foreach($this->identiques as $a) {
34       if ($this->seance)
35         break;
36       $this->seance = $this->amendement->getIntervention($a->numero);
37     }
38
39     $this->sous_admts = Doctrine_Query::create()
40       ->select('a.id, a.numero, a.sort')
41       ->from('Amendement a')
42       ->where('a.sous_amendement_de = ?', $this->amendement->numero)
43       ->orderBy('a.numero')
44       ->fetchArray();
45   
46     $this->titreloi = Doctrine::getTable('TitreLoi')->findLightLoi($this->amendement->texteloi_id);
47     $this->loi = Doctrine::getTable('Texteloi')->findLoi($this->amendement->texteloi_id);
48  }
49
50  public function executeParlementaire(sfWebRequest $request)
51  {
52    $this->parlementaire = Doctrine::getTable('Parlementaire')
53      ->findOneBySlug($request->getParameter('slug'));
54    $this->forward404Unless($this->parlementaire);
55    $this->amendements = Doctrine::getTable('Amendement')->createQuery('a')
56      ->leftJoin('a.ParlementaireAmendement pa')
57      ->where('pa.parlementaire_id = ?', $this->parlementaire->id)
58      ->andWhere('a.sort <> ?', 'Rectifié')
59    //  ->andWhere('pa.numero_signataire <= ?', self::$seuil_amdmts)
60      ->orderBy('a.date DESC, a.texteloi_id DESC, a.numero DESC');
61
62    $request->setParameter('rss', array(array('link' => '@parlementaire_amendements_rss?slug='.$this->parlementaire->slug, 'title'=>'Les derniers amendements de '.$this->parlementaire->nom.' en RSS')));
63  }
64
65  public function executeParlementaireSection(sfWebRequest $request) 
66  {
67    $this->parlementaire = Doctrine::getTable('Parlementaire')->findOneBySlug($request->getParameter('slug'));
68    $this->forward404Unless($this->parlementaire);
69
70    $this->section = Doctrine::getTable('Section')->find($request->getParameter('id'));
71    $this->forward404Unless($this->section);
72
73    $lois = $this->section->getTags(array('is_triple' => true,
74                                          'namespace' => 'loi',
75                                          'key' => 'numero',
76                                          'return' => 'value'));
77
78    $this->qamendements = Doctrine::getTable('Amendement')->createQuery('a')
79      ->leftJoin('a.ParlementaireAmendement pa')
80      ->where('pa.parlementaire_id = ?', $this->parlementaire->id)
81      ->andWhere('a.sort <> ?', 'Rectifié')
82      ->andWhereIn('a.texteloi_id', $lois)
83      ->orderBy('a.texteloi_id DESC, a.date DESC, a.numero DESC');
84  }
85
86  public function executeSearch(sfWebRequest $request)
87  {
88    $this->mots = $request->getParameter('search');
89    $mots = $this->mots;
90    $mcle = array();
91   
92    if (preg_match_all('/("[^"]+")/', $mots, $quotes)) {
93      foreach(array_values($quotes[0]) as $q)
94        $mcle[] = '+'.$q;
95      $mots = preg_replace('/\s*"([^\"]+)"\s*/', ' ', $mots);
96    }
97
98    foreach(split(' ', $mots) as $mot) {
99      if ($mot && !preg_match('/^[\-\+]/', $mot))
100        $mcle[] = '+'.$mot;
101    }
102
103    $this->high = array();
104    foreach($mcle as $m) {
105      $this->high[] = preg_replace('/^[+-]"?([^"]*)"?$/', '\\1', $m);
106    }
107    $sql = 'SELECT a.id FROM amendement a WHERE MATCH (a.texte,a.expose) AGAINST (\''.implode(' ', $mcle).'\' IN BOOLEAN MODE)';
108    $search = Doctrine_Manager::connection()
109      ->getDbh()
110      ->query($sql)->fetchAll();
111    $ids = array();
112    foreach($search as $s)
113      $ids[] = $s['id'];
114   
115    $this->query = Doctrine::getTable('Amendement')->createQuery('a');
116    if (count($ids))
117      $this->query->whereIn('a.id', $ids);
118    else if (count($mcle)) foreach($mcle as $m) {
119      $this->query->andWhere('a.texte LIKE ?', '% '.$m.' %');
120      $this->query->orWhere('a.expose LIKE ?', '% '.$m.' %');
121    } else {
122      $this->query->where('0');
123      return ;
124    }
125
126    if ($slug = $request->getParameter('parlementaire')) {
127      $this->parlementaire = Doctrine::getTable('Parlementaire')
128        ->findOneBySlug($slug);
129      if ($this->parlementaire)
130        $this->query->leftJoin('a.ParlementaireAmendement pa')
131          ->andWhere('pa.parlementaire_id = ?', $this->parlementaire->id);
132    }
133    $this->query->orderBy('a.date DESC, a.texteloi_id DESC, a.numero DESC');
134    if ($request->getParameter('rss')) {
135      $this->setTemplate('rss');
136      $this->feed = new sfRssFeed();
137    } else $request->setParameter('rss', array(array('link' => '@search_amendements_mots_rss?search='.$this->mots, 'title'=>'Les derniers amendements sur '.$this->mots.' en RSS')));
138
139  }
140
141  public function executeFind(sfWebRequest $request)
142  {
143    $this->lois = split(',', $request->getParameter('loi'));
144    $amdt = $request->getParameter('numero');
145    $this->forward404Unless(count($this->lois) && $amdt);
146    if ($amdt == 'all' || $amdt == 'new' ) {
147      if (count($this->lois) == 1) {
148        $this->loi = Doctrine::getTable('TitreLoi')->findLightLoi($this->lois[0]);
149        if (!$this->loi)
150          $this->loi = Doctrine::getTable('Texteloi')->findLoi($this->lois[0]);
151      }
152      $this->amendements_query = Doctrine::getTable('Amendement')
153        ->createQuery('a')
154        ->where('a.sort <> ?', 'Rectifié');
155      for ($ct=0;$ct<count($this->lois);$ct++)
156        $this->amendements_query->andWhere('a.texteloi_id = ?', $this->lois[$ct]);
157      if ($amdt == 'new')
158        $this->amendements_query->orderBy('a.texteloi_id DESC, a.created_at DESC, a.source');
159      else $this->amendements_query->orderBy('a.texteloi_id DESC, a.source');
160      return ;
161    }
162    $numeros = array();
163    if (count($this->lois) == 1 && preg_match('/^(\d+)([A-Z])$/i', $amdt, $match)) {
164      $numero = ($match[1]+0).strtoupper($match[2]);
165      $this->redirect('@amendement?loi='.$this->lois[0].'&numero='.$numero);
166    } else if (preg_match('/(\d+[A-Z]?)-(\d+[A-Z]?)/i', $amdt, $match)) {
167      if (preg_match('/^(\d+)[A-Z]$/i', $match[1], $match2)) $numsta = $match2[1];
168      else $numsta = $match[1];
169      if (preg_match('/^(\d+)[A-Z]$/i', $match[2], $match2)) $numsto = $match2[1];
170      else $numsto = $match[2];
171      for($cpt = $numsta ; $cpt <= $numsto ; $cpt++)
172        array_push($numeros, $cpt);
173    } else {
174      preg_match_all('/\D*(\d+)[A-Z]?\D*/i', $amdt, $match);
175      $numeros = $match[1];
176    }
177    $amendements = array();
178    foreach($this->lois as $loi) foreach($numeros as $numero) {
179      $query = PluginTagTable::getObjectTaggedWithQuery('Amendement', array('loi:amendement='.$numero));
180      $query->andWhere('texteloi_id = ?', $loi)
181        ->andWhere('sort <> ?', 'Rectifié');
182      $res = $query->execute();
183      if (count($res)) foreach ($res as $amd) {
184        $amendements[$amd->id] = $amd;
185      }
186    }
187    if (count($amendements) == 1) {
188      $a = array_keys($amendements);
189      $this->redirect('@amendement_id?id='.$a[0]);
190    }
191    $this->amendements = array_values($amendements);
192  }
193
194  public function executeRedirect(sfWebRequest $request)
195  {
196    $id = $request->getParameter('id');
197    $a = Doctrine::getTable('Amendement')->find($id);
198    $this->forward404Unless($a);
199    $this->redirect('@amendement?loi='.$a->texteloi_id.'&numero='.$a->numero);
200  }
201}
Note: See TracBrowser for help on using the repository browser.