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

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

intégration texteslois, manquent plus que les députés

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