source: cpc/trunk/project/lib/model/doctrine/Amendement.class.php @ 1327

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

La mécanique des alertes mails :
Dans la table alerte :

  • query : est la query solr correspondant à l'alerte (mot clé et/ou filtre)
  • last_mail : la date du dernier object envoyé (soit du dernier envoi mais ca permet de ne pas rater d'object), ces changements de date sont générés par la tache d'envoi, il faut donc justr l'initialiser à la création avec la date courrante
  • titre : soit les mots clés soit une explication textuelle de l'alerte (pour les alertes complexe, genre « commentaire en réponse à votre commentaire du 10 juin »)

pour la query les filtres peuvent être :
object_name:<Table>
object_id:<tupple_id>
ou des tags
tag:<nom_tag>

un certains nombre de tags sont autogérés. Pour les commentaires, par exemple, la référence à l'object est généré par tag.
Pour s'abonner aux commentaires en réponse à Intervention/XXX car donne la query :
tag:object_type=Intervention tag:object_id=XXX

File size: 6.1 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($obj) {
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    $groupe = null;
26    $sexe = null;
27    if (preg_match('/^\s*(.*),+\s*les\s+(.*\s+[gG]roupe|membres|députés)\s+(.*)\s*$/' ,$auteurs, $match)) {
28      $auteurs = $match[1];
29      $groupe = preg_replace("/^\s*(de la|de l'|du)\s*/", "", $match[3]);
30      if (preg_match('/^(.*)(et|,)\s+(M[\s\.ml].*)$/' ,$groupe, $match2)) {
31        $groupe = $match2[1];
32        $auteurs .= ", ".$match2[3];
33      }
34      if (preg_match('/(union.*mouvement.*populaire|UMP)/i',$groupe)) $groupe = "UMP";
35      elseif (preg_match('/(socialiste.*radical|SRC)/i',$groupe)) $groupe = "SRC";
36      elseif (preg_match('/(gauche.*démocrate|GDR)/i',$groupe)) $groupe = "GDR";
37      elseif (preg_match('/(nouveau.*centre|NC)/i',$groupe)) $groupe = "NC";
38      else $groupe = null;
39    }
40    if ($debug) echo $auteurs." // ".$groupe."\n";
41    $arr = preg_split('/,/', $auteurs);
42    $signataireindex = 1;
43    foreach ($arr as $depute) {
44      if (preg_match('/^(.*)\((.*)\)/', $depute, $match)) {
45        $depute = trim($match[1]);
46        $circo = preg_replace('/\s/', '-', ucfirst(trim($match[2])));
47      } else $circo = null;
48      if (preg_match('/(gouvernement|président|rapporteur|commission|questeur)/i', $depute)) {
49        if ($debug) print "WARN: Skip auteur ".$depute." for ".$this->source."\n";
50        continue;
51      } elseif (preg_match('/^\s*(M+[\s\.ml]{1})[a-z]*\s*([a-zA-Z].*)\s*$/', $depute, $match)) {
52          $nom = $match[2];
53          if (preg_match('/M[ml]/', $match[1]))
54            $sexe = 'F';
55          else $sexe = 'H';
56      } else $nom = preg_replace("/^\s*(.*)\s*$/", "\\1", $depute);
57      $nom = ucfirst($nom);
58      if ($debug) echo $nom."//".$sexe."//".$groupe."//".$circo." => ";
59      $depute = Doctrine::getTable('Parlementaire')->findOneByNomSexeGroupeCirco($nom, $sexe, $groupe, $circo, $this);
60      if (!$depute) print "ERROR: Auteur introuvable in ".$this->source."/".$this->numero." : ".$nom." // ".$sexe." // ".$groupe."\n";
61      else {
62        if ($debug) echo $depute->nom."\n";
63        if (!$groupe && $depute->groupe_acronyme != "") $groupe = $depute->groupe_acronyme;
64        $this->addParlementaire($depute, $signataireindex);
65        $depute->free();
66      }
67      $signataireindex++;
68    }
69  }
70
71  public function addParlementaire($depute, $signataireindex) {
72    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;
73   
74    $pa = new ParlementaireAmendement();
75    $pa->_set('Parlementaire', $depute);
76    $pa->_set('Amendement', $this);
77    $pa->numero_signataire = $signataireindex;
78    if ($pa->save()) {
79      $pa->free();
80      return true;
81    } else return false;
82  }
83
84  public function getSignataires($link = 0) {
85    $signa = preg_replace("/M\s+/", "M. ", $this->_get('signataires'));
86    if ($link)
87      $signa = preg_replace('/(M+[\.mles\s]+)?([\wàéëêèïîôöûüÉ\s-]+)\s*(,\s*|$)/', '<a href="/deputes?search=\\2">\\1\\2</a>\\3', $signa);
88    return $signa;
89  }
90
91  public function getSection() {
92    return PluginTagTable::getObjectTaggedWithQuery('Section', array('loi:numero='.$this->texteloi_id))->fetchOne();
93  }
94
95  public function getIntervention($num_admt) {
96    $query = PluginTagTable::getObjectTaggedWithQuery('Intervention', array('loi:numero='.$this->texteloi_id, 'loi:amendement='.$num_admt));
97    $query->select('Intervention.id, Intervention.date, Intervention.seance_id, Intervention.md5')
98      ->groupBy('Intervention.date')
99      ->orderBy('Intervention.date DESC, Intervention.timestamp ASC');
100    return $query->fetchOne();
101  }
102
103  public function getTitre() {
104    return 'Projet de loi N° '.$this->texteloi_id.' : '.$this->sujet.' - '.$this->getShortTitre();
105  }
106
107  public function getShortTitre() {
108    $parent = 0;
109    $pluriel = "";
110    $parent = $this->getTags(array('is_triple' => true,
111          'namespace' => 'loi',
112          'key' => 'sous_amendement_de',
113          'return'    => 'value'));
114    if (count($parent) == 1)
115      $titre = "Sous-Amendement";
116    else {
117      $parent = "";
118      $titre = "Amendement";
119    }
120    $numeros = $this->numero;
121    $lettre = $this->getLettreLoi();
122    $ident = $this->getTags(array('is_triple' => true,
123          'namespace' => 'loi',
124          'key' => 'amendement',
125          'return'    => 'value'));
126    if (count($ident) > 1 && $lettre != "") {
127      sort($ident);
128      if ($lettre) foreach ($ident as $iden) $iden .= $lettre;
129      $numeros = implode(', ', $ident);
130      $pluriel = "s";
131    }
132    $titre .= $pluriel." N° ".$numeros;
133    if ($this->rectif == 1)
134      $titre .= " rectifié".$pluriel;
135    elseif($this->rectif > 1)
136      $titre .= " ".$this->rectif."ème rectif.";
137    if ($parent != 0)
138      $titre .= ' à l\'amendement N° <a href="/amendements/'.$this->texteloi_id.'/'.$parent[0].'">'.$parent[0].$lettre.'</a>';
139    return "$titre".' ('.preg_replace('/indéfini/i', 'Sort indéfini', $this->getSort()).')';
140  }
141
142  public function getTexte($style=1) {
143    if ($style == 1) {
144      return preg_replace('/\<p\>\s*«\s*([^\<]+)\<\/p\>/', '<blockquote>«&nbsp;\1</blockquote>', $this->_get('texte')); 
145    } else return $this->_get('texte');
146  }
147
148  public function getLettreLoi() {
149    if (preg_match('/^([A-Z])\d/', $this->numero, $match)) {
150      return $match[1];
151    }
152    return;
153  }
154
155  public function getTitreNoLink() {
156    return preg_replace('/\<a href.*\>(.*)<\/a\>/', '\1', $this->getTitre());
157  }
158 
159  public function getLinkPDF() {
160    return preg_replace('/\/amendement/', '/pdf/amendement', preg_replace('/\.asp(.*)$/', '.pdf', $this->source));
161  }
162}
Note: See TracBrowser for help on using the repository browser.