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

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

ajouts fonctios sur documents + correction parsing id documents

File size: 7.2 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 getAmendements() {
17    if (!preg_match('/(Projet de loi|Proposition de loi|Proposition de résolution|Texte de la commission)/', $this->type))
18      return 0;
19    $res = count(Doctrine::getTable('Amendement')->createQuery('a')
20      ->where('texteloi_id = ?', $this->numero)
21      ->fetchArray());
22    return $res;
23  }
24
25  public function getDossier() {
26    $section = Doctrine::getTable('Section')->findOneByUrlAn($this->url_an);
27    if (!$section) $section = Doctrine_Query::create()
28      ->select('s.id')
29      ->from('Section s, Tagging ta, Tag t')
30      ->where('s.section_id = s.id')
31      ->andWhere('ta.taggable_id = s.id')
32      ->andWhere('ta.tag_id = t.id')
33      ->andWhere('ta.taggable_model = ?', "Section")
34      ->andWhere('t.name = ?', "loi:numero=".$this->numero)
35      ->fetchOne();
36    return $section;
37  }
38
39  public function setDossier($urldossier) {
40    $this->url_an = $urldossier;
41    $section = Doctrine::getTable('Section')->findOneByUrlAn($urldossier);
42    if ($section) {
43   # 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
44   #   $section->setMaxDate($this->date);
45   #   $section->save();
46 #print "$section->id, $this->url_an\n";
47      return true;
48    }
49    $sections = Doctrine_Query::create()
50      ->select('s.id')
51      ->from('Section s, Tagging ta, Tag t')
52      ->where('s.section_id = s.id')
53      ->andWhere('ta.taggable_id = s.id')
54      ->andWhere('ta.tag_id = t.id')
55      ->andWhere('ta.taggable_model = ?', "Section")
56      ->andWhere('t.name = ?', "loi:numero=".$this->numero)
57      ->fetchArray();
58    $res = count($sections);
59    if ($res == O) {
60     #print "Pas de dossier trouvé pour le texte $this->id\n";
61     return false;
62    } else if ($res == 1) {
63      $section = Doctrine::getTable('Section')->find($sections[0]['id']);
64      $section->url_an = $urldossier;
65   # voir plus haut
66   #  $section->setMaxDate($this->date);
67      $section->save();
68     #print "$section->id, $this->url_an\n";
69      return true;
70    } else {
71     echo "$this->source : Plusieurs dossiers trouvés pour le texte $this->id de type $this->type\n";
72     return false;
73    }
74  }
75
76  public function setAuteurs($signataires) {    //$debug=1;
77    $this->signataires = $signataires;
78   //Set signatires, auteurs via PArlemnaitreTexteDocu et Organisme
79    $orga = null;
80    $sexe = null;
81    $fonction = null;
82    $signataires = preg_replace("/(Auteur|Cosignataire|Rapporteur), /", "\\1#", $signataires);
83    if ($debug) echo $this->source." : ".$signataires."\n";
84    $signataires = preg_split('/#/', $signataires);
85    foreach ($signataires as $depute) {
86      if (preg_match('/^(M[\.mle]+)/', $depute, $match)) 
87        continue;
88      if (preg_match('/^(.*)(\set apparentés)?\s+(Auteur|Cosignataire|Rapporteur)/', $depute, $match)) {
89        $orga = trim($match[1]).$match[2];
90        $organisme = Doctrine::getTable('Organisme')->findOneByNomType($orga, 'parlementaire');
91        if ($organisme) {
92          $this->set('Organisme', $organisme);
93          $orga = $organisme->nom;
94        } else {
95          $groupe = Doctrine::getTable('Organisme')->findOneByNomType($orga, 'groupe');
96          if ($groupe) {
97            $this->set('Organisme', $groupe);
98            $orga = " pour le groupe ".$orga;
99          }
100        }
101        break;
102      }
103    }
104    foreach ($signataires as $depute) {
105      if (preg_match('/^(M[\.mle]+)\s+(.*)\s+(Auteur|Cosignataire|Rapporteur)/', $depute, $match)) {
106        if (preg_match('/M[ml]/', $match[1]))
107          $sexe = 'F';
108        else $sexe = 'H';
109        $nom = $match[2];
110        $fonction = $match[3];
111        if (preg_match('/^(.*)\((.*)\)/', $nom, $match)) {
112          $nom = trim($match[1]);
113          $circo = preg_replace('/\s/', '-', ucfirst(trim($match[2])));
114        } else $circo = null;
115        if (preg_match('/(ministre|[eéÉ]tat|président|haut-commissaire)/i', $nom)) {
116          if ($debug) print "WARN: Skip auteur ".$nom." for ".$this->source."\n";
117          continue;
118        }
119        $nom = ucfirst($nom);
120        if ($debug) echo $nom."//".$sexe."//".$orga."//".$circo."//".$fonction." => ";
121        $depute = Doctrine::getTable('Parlementaire')->findOneByNomSexeGroupeCirco($nom, $sexe, null, $circo, $this);
122        if (!$depute) print "WARNING: Auteur introuvable in ".$this->source." : ".$nom." // ".$sexe." // ".$orga."//".$fonction."\n";
123        else {
124          if ($debug) echo $depute->nom."\n";
125          $this->addParlementaire($depute, $fonction, $orga);
126          $depute->free();
127        }
128      }
129    }
130  }
131
132  public function addParlementaire($depute, $fonction, $organisme = 0) {
133    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;
134
135    $pd = new ParlementaireTexteloi();
136    $pd->_set('Parlementaire', $depute);
137    $pd->_set('Texteloi', $this);
138    if ($fonction === "Auteur")
139      $pd->_set('importance', 1);
140    else if ($fonction === "Rapporteur") 
141      $pd->_set('importance', 3);
142    else if ($fonction === "Cosignataire")
143      $pd->_set('importance', 5);
144    if ($organisme && $fonction != "Cosignataire") {
145      if (!(preg_match('/^ pour le groupe/', $organisme))) {
146        $fonction .= " pour l";
147        if (preg_match('/^[aeiouyh]/i', $organisme))
148          $fonction .= "'";
149        else if (preg_match('/^comit/i', $organisme))
150          $fonction .= "e ";
151        else $fonction .= "a ";
152      }
153      $fonction .= $organisme;
154    }
155    $pd->_set('fonction', $fonction);
156    if ($pd->save()) {
157      $pd->free();
158      return true;
159    } else return false;
160  }
161
162  public function getTypeString() {
163    $str = "ce";
164    if (preg_match('/(propos|lettre)/', $this->type))
165      $str .= "tte";
166    $str .= " ".strtolower($this->type);
167    return $str;
168  }
169
170  public function getAuteursString() {
171    if ($this->type === "Texte de la commission")
172      return $this->signataires;
173    return $this->signataires;
174  }
175
176  public function getCommission() {
177    if ($this->type === "Texte de la commission") {
178      $rap = Doctrine::getTable('Texteloi')->find("$this->numero");
179      return $rap->getOrganisme();
180    }
181    return $this->getOrganisme();
182  }
183
184  public function getTitreComplet() {
185    $str = "";
186    if ($this->annexe && preg_match('/a/', $this->id)) {
187      $str .= "Annexe N°&nbsp;".$annexe." ";
188      if ($this->type === "Avis")
189        $str .= "à l'";
190      else $str .=  "au ";
191    }
192    $str .= $this->type;
193    if (!preg_match('/^,/', $this->type_details))
194      $str .= " ";
195    $str .= $this->type_details;
196    if (!preg_match('/^,/', $this->titre))
197      $str .=  " ";
198    $str .= $this->titre;
199    if ($this->annexe && preg_match('/t/', $this->id))
200      $str .= " (Tome $annexe)";
201    return $str;
202  }
203}
Note: See TracBrowser for help on using the repository browser.