source: cpc/trunk/project/lib/model/doctrine/Amendement.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: 6.6 KB
Line 
1<?php
2
3/**
4 * This class has been auto-generated by the Doctrine ORM Framework
5 */
6class Amendement extends BaseAmendement {
7
8  public function getLink() {
9    sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
10    return url_for('@amendement?loi='.$this->texteloi_id.'&numero='.$this->numero);
11  }
12  public function getPersonne() {
13    return '';
14  }
15
16  public function __toString() {
17    $str = substr(strip_tags($this->expose), 0, 250);
18    if (strlen($str) == 250) {
19      $str .= '...';
20    }
21    return $str;
22  }
23
24  public function setAuteurs($auteurs) {
25#$debug=1;
26    $auteurs = html_entity_decode($auteurs, ENT_COMPAT, 'UTF-8');
27    $groupe = null;
28    $sexe = null;
29    $regexp = array();
30    if (preg_match('/^\s*(.*),+\s*[dl]es\s+(.*\s+[gG]roupe|membres|députés)\s+(.*)\s*$/' ,$auteurs, $match)) {
31      $tmpgroupe = null;
32      foreach (myTools::getGroupesInfos() as $gpe) {
33        $regexp[] = $gpe[4];
34        if (preg_match('/('.$gpe[4].'|'.$gpe[1].')/i', $groupe)) {
35          $tmpgroupe = $gpe[1];
36          $auteurs = preg_replace('/,[^,]*'.$gpe[0].'[^,]*/', '', $auteurs);
37        }
38      }
39      if ($tmpgroupe) $groupe = $tmpgroupe;
40      else $groupe = null;
41    }
42    if ($debug) echo $auteurs." // ".$groupe."\n";
43    $arr = preg_split('/,/', $auteurs);
44    $signataireindex = 1;
45    foreach ($arr as $depute) {
46      if (preg_match('/^(.*)\((.*)\)/', $depute, $match)) {
47        $depute = trim($match[1]);
48        $circo = preg_replace('/\s/', '-', ucfirst(trim($match[2])));
49      } else $circo = null;
50      if (count($regexp)) if (preg_match('/('.implode("|", $regexp).')/i', $depute)) {
51        if ($debug) print "WARN: Skip auteur ".$depute." for ".$this->source."\n";
52        continue;
53      }
54      if (preg_match('/(membres|gouvernement|républicain|président|rapporteur|commission|délégation|questeur|apparentés|rattachés|collègues)/i', $depute)) {
55        if ($debug) print "WARN: Skip auteur ".$depute." for ".$this->source."\n";
56        continue;
57      } elseif (preg_match('/^\s*(M[Mmles]*)[\.\s]+(\w.*)\s*$/', $depute, $match)) {
58          $nom = $match[2];
59          if (preg_match('/[el]/', $match[1]))
60            $sexe = 'F';
61          else $sexe = 'H';
62      } else $nom = preg_replace("/^\s*(.*)\s*$/", "\\1", $depute);
63      $nom = ucfirst($nom);
64      if ($debug) echo $nom."//".$sexe."//".$groupe."//".$circo." => ";
65      $parl = Doctrine::getTable('Parlementaire')->findOneByNomSexeGroupeCirco($nom, $sexe, $groupe, $circo, $this);
66      if (!$parl) print "ERROR: Auteur introuvable in ".$this->source." : ".$nom." // ".$sexe." // ".$groupe."\n";
67      else {
68        if ($debug) echo $parl->nom."\n";
69        if (!$groupe && $parl->groupe_acronyme != "") $groupe = $parl->groupe_acronyme;
70        $this->addParlementaire($parl, $signataireindex);
71        $parl->free();
72      }
73      $signataireindex++;
74    }
75  }
76
77  public function addParlementaire($depute, $signataireindex) {
78    foreach(Doctrine::getTable('ParlementaireAmendement')->createQuery('pa')->select('parlementaire_id')->where('amendement_id = ?', $this->id)->fetchArray() as $parlamdt) if ($parlamdt['parlementaire_id'] == $depute->id) return true;
79   
80    $pa = new ParlementaireAmendement();
81    $pa->_set('Parlementaire', $depute);
82    $pa->_set('Amendement', $this);
83    $pa->numero_signataire = $signataireindex;
84    if ($pa->save()) {
85      $pa->free();
86      return true;
87    } else return false;
88  }
89
90  public function getSignataires($link = 0) {
91    $signa = preg_replace("/M\s+/", "M. ", $this->_get('signataires'));
92    if ($link && !preg_match('/gouvernement/i',$signa))
93      $signa = preg_replace('/(M+[\.mles\s]+)?([A-ZÉ][^,]+)\s*(,\s*|$)/', '<a href="/deputes/rechercher/\\2">\\1\\2</a>\\3', $signa);
94    return $signa;
95  }
96
97  public function getSection() {
98    return PluginTagTable::getObjectTaggedWithQuery('Section', array('loi:numero='.$this->texteloi_id))->fetchOne();
99  }
100
101  public function getIntervention($num_admt) {
102    $query = PluginTagTable::getObjectTaggedWithQuery('Intervention', array('loi:numero='.$this->texteloi_id, 'loi:amendement='.$num_admt));
103    $query->select('Intervention.id, Intervention.date, Intervention.seance_id, Intervention.md5')
104      ->groupBy('Intervention.date')
105      ->orderBy('Intervention.date DESC, Intervention.timestamp ASC');
106    return $query->fetchOne();
107  }
108
109  public function getTitre($link = 0) {
110    return $this->getPresentTitre($link).' au texte N° '.$this->texteloi_id.' - '.$this->sujet.' ('.$this->getPresentSort().')';
111  }
112
113  public function getShortTitre($link = 0) {
114    return $this->getPresentTitre($link).' ('.$this->getPresentSort().')';
115  }
116
117  public function getPresentTitre($link = 0) {
118    $parent = 0;
119    $pluriel = "";
120    if ($this->sous_amendement_de)
121      $titre = "Sous-Amendement";
122    else {
123      $parent = "";
124      $titre = "Amendement";
125    }
126    $numeros = $this->numero;
127    $lettre = $this->getLettreLoi();
128    $ident = $this->getTags(array('is_triple' => true,
129          'namespace' => 'loi',
130          'key' => 'amendement',
131          'return'    => 'value'));
132    if (count($ident) > 1 && $lettre != "") {
133      sort($ident);
134      if ($lettre) foreach ($ident as $iden) $iden .= $lettre;
135      $numeros = implode(', ', $ident);
136      $pluriel = "s";
137    }
138    $titre .= $pluriel." N° ".$numeros;
139    if ($this->rectif == 1)
140      $titre .= " rectifié".$pluriel;
141    elseif($this->rectif > 1)
142      $titre .= " ".$this->rectif."ème rectif.";
143    if ($this->sous_amendement_de) {
144      $titre .= ' à ';
145      if ($link && function_exists('url_for')) {
146        $titre .= '<a href="'.url_for('@amendement?loi='.$this->texteloi_id.'&numero='.$this->sous_amendement_de).'">';
147      }else{
148        $link = 0;
149      }
150      $titre .= 'l\'amendement N° '.$this->sous_amendement_de;
151      if ($link) $titre .= '</a>';
152    }
153    return $titre;
154  }
155
156  public function getPresentSort() {
157    return preg_replace('/indéfini/i', 'Sort indéfini', $this->getSort());
158  }
159
160  public function getTexte($style=1) {
161    if ($style == 1) {
162      return preg_replace('/\<p\>\s*«\s*([^\<]+)\<\/p\>/', '<blockquote>«&nbsp;\1</blockquote>', $this->_get('texte')); 
163    } else return $this->_get('texte');
164  }
165
166  public function getLettreLoi() {
167    if (preg_match('/^([A-Z])\d/', $this->numero, $match)) {
168      return $match[1];
169    }
170    return;
171  }
172
173  public function getTitreNoLink() {
174    return preg_replace('/\<a href.*\>(.*)<\/a\>/', '\1', $this->getTitre());
175  }
176 
177  public function getLinkPDF() {
178    return preg_replace('/\/amendement/', '/pdf/amendement', preg_replace('/\.asp(.*)$/', '.pdf', $this->source));
179  }
180
181  public function getIsLastVersion() {
182    if ($this->sort === "Rectifié")
183      return false;
184    return true;
185  }
186
187}
Note: See TracBrowser for help on using the repository browser.