source: cpc/trunk/project/lib/model/doctrine/Texteloi.class.php @ 1372

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

Intégration des multi signataires

File size: 9.1 KB
Line 
1<?php
2
3/**
4 * Texteloi
5 *
6 * This class has been auto-generated by the Doctrine ORM Framework
7 *
8 * @package    cpc
9 * @subpackage model
10 * @author     Your name here
11 * @version    SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $
12 */
13class Texteloi extends BaseTexteloi
14{
15
16  protected $cpt = 0;
17
18  public function getLink() {
19    sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
20    return url_for('@document?id='.$this->id);
21  }
22
23  public function getPersonne() {
24    $auteurs = $this->getAuteurs();
25    if (!$auteurs) return "";
26    return $auteurs[0]['nom'];
27  }
28
29  public function getAmendements($help = 0) {
30    return self::getAmdmts($this->type, $this->numero, $help);
31  }
32
33  public static function getAmdmts($type, $numero, $help = 0) {
34    if (!($type === "Rapport" && $help) && !preg_match('/(Projet de loi|Proposition de loi|Proposition de résolution|Texte de la commission)/', $type))
35      return 0;
36    $res = count(Doctrine::getTable('Amendement')->createQuery('a')
37      ->where('texteloi_id = ?', $numero)
38      ->fetchArray());
39    return $res;
40  }
41
42  public function getSection() {
43    $section = Doctrine::getTable('Section')->findOneByUrlAn($this->url_an);
44    if (!$section) $section = Doctrine_Query::create()
45      ->select('s.id')
46      ->from('Section s, Tagging ta, Tag t')
47      ->where('s.section_id = s.id')
48      ->andWhere('ta.taggable_id = s.id')
49      ->andWhere('ta.tag_id = t.id')
50      ->andWhere('ta.taggable_model = ?', "Section")
51      ->andWhere('t.name = ?', "loi:numero=".$this->numero)
52      ->fetchOne();
53    return $section;
54  }
55
56  public function setDossier($urldossier) {
57    $this->url_an = $urldossier;
58    $section = Doctrine::getTable('Section')->findOneByUrlAn($urldossier);
59    if ($section) {
60   # cela parait plus cohérent que les dossiers apparaissent comme récemment modifiés uniquement s'ils sont discutés et pas si un nouveau rapport vient les compléter je pense mais on peut envisager de le mettre tout de même si c utile pour solr par exemple
61   #   $section->setMaxDate($this->date);
62   #   $section->save();
63 #print "$section->id, $this->url_an\n";
64      return true;
65    }
66    $sections = Doctrine_Query::create()
67      ->select('s.id')
68      ->from('Section s, Tagging ta, Tag t')
69      ->where('s.section_id = s.id')
70      ->andWhere('ta.taggable_id = s.id')
71      ->andWhere('ta.tag_id = t.id')
72      ->andWhere('ta.taggable_model = ?', "Section")
73      ->andWhere('t.name = ?', "loi:numero=".$this->numero)
74      ->fetchArray();
75    $res = count($sections);
76    if ($res == O) {
77     #print "Pas de dossier trouvé pour le texte $this->id\n";
78     return false;
79    } else if ($res == 1) {
80      $section = Doctrine::getTable('Section')->find($sections[0]['id']);
81      $section->url_an = $urldossier;
82   # voir plus haut
83   #  $section->setMaxDate($this->date);
84      $section->save();
85     #print "$section->id, $this->url_an\n";
86      return true;
87    } else {
88     echo "$this->source : Plusieurs dossiers trouvés pour le texte $this->id de type $this->type\n";
89     return false;
90    }
91  }
92
93  public function setAuteurs($signataires) {   
94    //$debug=1;
95    $this->signataires = $signataires;
96   //Set signatires, auteurs via PArlemnaitreTexteDocu et Organisme
97    $orga = null;
98    $sexe = null;
99    $fonction = null;
100    $signataires = preg_replace("/(Auteur|Cosignataire|Rapporteur), /", "\\1#", $signataires);
101    if ($debug) echo $this->source." : ".$signataires."\n";
102    $signataires = preg_split('/#/', $signataires);
103    foreach ($signataires as $depute) {
104      if (preg_match('/^(M[\.mle]+)/', $depute, $match)) 
105        continue;
106      if (preg_match('/^(.*)(\set apparentés)?\s+(Auteur|Cosignataire|Rapporteur)/', $depute, $match)) {
107        $orga = trim($match[1]).$match[2];
108        $organisme = Doctrine::getTable('Organisme')->findOneByNomType($orga, 'parlementaire');
109        if ($organisme) {
110          $this->setOrganisme($organisme);
111          if (!($this->type_details)) {
112            $this->type_details = "de l";
113            if (preg_match('/^[aeiouyh]/i', $organisme->nom))
114              $this->type_details .= "'";
115            else if (preg_match('/^comit/i', $organisme))
116              $this->type_details .= "e ";
117            else $this->type_details .= "a ";
118            $this->type_details .= $organisme->nom;
119          }
120          $orga = $organisme->nom;
121        } else {
122          $groupe = Doctrine::getTable('Organisme')->findOneByNomType($orga, 'groupe');
123          if ($groupe) {
124            $this->setOrganisme($groupe);
125            $orga = " pour le groupe ".$orga;
126          }
127        }
128        break;
129      }
130    }
131    foreach ($signataires as $depute) {
132      if (preg_match('/^(M[\.mle]+)\s+(.*)\s+(Auteur|Cosignataire|Rapporteur)/', $depute, $match)) {
133        if (preg_match('/M[ml]/', $match[1]))
134          $sexe = 'F';
135        else $sexe = 'H';
136        $nom = $match[2];
137        $fonction = $match[3];
138        if (preg_match('/^(.*)\((.*)\)/', $nom, $match)) {
139          $nom = trim($match[1]);
140          $circo = preg_replace('/\s/', '-', ucfirst(trim($match[2])));
141        } else $circo = null;
142        if (preg_match('/(ministre|[eéÉ]tat|président|haut-commissaire)/i', $nom)) {
143          if ($debug) print "WARN: Skip auteur ".$nom." for ".$this->source."\n";
144          continue;
145        }
146        $nom = ucfirst($nom);
147        if ($debug) echo $nom."//".$sexe."//".$orga."//".$circo."//".$fonction." => ";
148        $depute = Doctrine::getTable('Parlementaire')->findOneByNomSexeGroupeCirco($nom, $sexe, null, $circo, $this);
149        if (!$depute) print "WARNING: Auteur introuvable in ".$this->source." : ".$nom." // ".$sexe." // ".$orga."//".$fonction."\n";
150        else {
151          if ($debug) echo $depute->nom."\n";
152          $this->addParlementaire($depute, $fonction, $orga);
153          $depute->free();
154        }
155      }
156    }
157  }
158
159  public function addParlementaire($depute, $fonction, $organisme = 0) {
160    foreach(Doctrine::getTable('ParlementaireTexteloi')->createQuery('pa')->select('parlementaire_id')->where('texteloi_id = ?', $this->id)->fetchArray() as $parldt) if ($parldt['parlementaire_id'] == $depute->id) return true;
161
162    $pd = new ParlementaireTexteloi();
163    $pd->_set('Parlementaire', $depute);
164    $pd->_set('Texteloi', $this);
165    if ($fonction === "Auteur")
166      $pd->_set('importance', 1);
167    else if ($fonction === "Rapporteur") 
168      $pd->_set('importance', 3);
169    else if ($fonction === "Cosignataire")
170      $pd->_set('importance', 5);
171    if ($organisme && $fonction != "Cosignataire") {
172      if (!(preg_match('/^ pour le groupe/', $organisme))) {
173        $fonction .= " pour l";
174        if (preg_match('/^[aeiouyh]/i', $organisme))
175          $fonction .= "'";
176        else if (preg_match('/^comit/i', $organisme))
177          $fonction .= "e ";
178        else $fonction .= "a ";
179      }
180      $fonction .= $organisme;
181    }
182    $pd->_set('fonction', $fonction);
183    if ($pd->save()) {
184      $pd->free();
185      return true;
186    } else return false;
187  }
188
189  public function getTypeString() {
190    $str = "ce";
191    if (preg_match('/(propos|lettre)/i', $this->type))
192      $str .= "tte";
193    else if ($this->type === "Avis")
194      $str .= "t";
195    $str .= " ".strtolower($this->type);
196    return $str;
197  }
198
199  public function getAuteurs() {
200    return Doctrine_Query::create()
201      ->select('p.*, pt.fonction')
202      ->from('Parlementaire p')
203      ->leftJoin('p.ParlementaireTexteloi pt')
204      ->where('pt.importance < 4')
205      ->andWhere('pt.texteloi_id = ?', $this->id)
206      ->orderBy('pt.importance, p.sexe, p.nom')
207      ->fetchArray();
208  }
209
210  public function getCosignataires() {
211    return Doctrine_Query::create()
212      ->select('p.*, pt.fonction')
213      ->from('Parlementaire p')
214      ->leftJoin('p.ParlementaireTexteloi pt')
215      ->where('pt.importance >= 4')
216      ->andWhere('pt.texteloi_id = ?', $this->id)
217      ->orderBy('pt.importance, p.sexe, p.nom')
218      ->fetchArray();
219  }
220
221  public function getSignatairesString() {
222    $str = preg_replace('/ (Cosignataire|Auteur|Rapporteur)/', '', $this->signataires);
223    return $str;
224  }
225
226  public function getCommission() {
227    if ($this->type === "Texte de la commission") {
228      $rap = Doctrine::getTable('Texteloi')->find("$this->numero");
229      return $rap->getOrganisme();
230    }
231    return $this->getOrganisme();
232  }
233
234  public function getShortTitre() {
235    $str = "";
236    if ($this->annexe && preg_match('/a/', $this->id)) {
237      $str .= "Annexe N° ".$this->annexe." ";
238      if ($this->type === "Avis")
239        $str .= "à l'";
240      else $str .=  "au ";
241    }
242    $str .= $this->type." N° ".$this->numero;
243    return $str;
244  }
245
246  public function getTitre() {
247    $str = $this->getShortTitre();
248    if (!preg_match('/^,/', $this->type_details))
249      $str .= " ";
250    $str .= $this->type_details;
251    if (!preg_match('/^,/', $this->_get('titre')))
252      $str .=  " ";
253    $str .= $this->_get('titre');
254    if ($this->annexe && preg_match('/t/', $this->id))
255      $str .= " (Tome ".$this->annexe.")";
256    return $str;
257  }
258
259  public function getContenu() {
260    $c = $this->_get('contenu');
261    return gzinflate(base64_decode($c));
262  }
263
264  public function setContenu($c) {
265    return $this->_set('contenu', base64_encode(gzdeflate($c)));
266  }
267}
Note: See TracBrowser for help on using the repository browser.