source: cpc/trunk/project/lib/model/doctrine/Intervention.class.php @ 1410

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

inutile et souvent générateur d'erreur sur les personnes auditionnées

File size: 9.2 KB
Line 
1<?php
2
3/**
4 * This class has been auto-generated by the Doctrine ORM Framework
5 */
6class Intervention extends BaseIntervention
7{
8  public function getLink() {
9    sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
10    return url_for('@interventions_seance?seance='.$this->getSeance()->id).'#inter_'.$this->getMd5();
11  }
12
13  public function getPersonne() {
14    return $this->getNomAndFonction();
15  }
16
17  public function __toString() {
18    if (strlen($this->intervention) > 1024)
19      return substr($this->intervention, 0, 512).'...';
20    return $this->intervention;
21  }
22
23  public function getTitre() {
24    if ($this->type === 'question')
25      $titre = 'Question orale du ';
26    else {
27      $titre = 'Intervention';
28      if ($this->type === 'commission')
29        $titre .= ' en commission';
30      else
31        $titre .= ' en hémicycle';
32      $titre .= ' le ';
33    }
34    $titre .= myTools::displayShortDate($this->date);
35    if ($this->type === 'question')     
36      $titre .= ' : '.ucfirst($this->Section->getTitre());
37    else if ($this->type === 'loi')
38      $titre .= ' : '.ucfirst($this->Section->Section->getTitreComplet());
39    return $titre;
40  }
41
42  public function setSeance($type, $date, $heure, $session, $commission = null) {
43    $this->setType($type);
44    if ($type == 'commission') {
45      $commission = Doctrine::getTable('Organisme')->findOneByNomOrCreateIt($commission, 'parlementaire');
46      $seance = $commission->getSeanceByDateAndMomentOrCreateIt($date, $heure, $session);
47      $commission->free();
48    } else{
49      $seance = Doctrine::getTable('Seance')->findOneOrCreateIt('hemicycle', $date, $heure, $session);
50    }
51    $id = $this->_set('seance_id', $seance->id);
52    $seance->free();
53    return $id;
54  }
55  public function setPersonnaliteByNom($nom, $fonction = null) 
56  {
57    $this->setFonction($fonction);
58    if (!preg_match('/ministre|secr[^t]+taire [^t]+tat|commissaire|garde des sceaux/i', $fonction)) { 
59      $personne = Doctrine::getTable('Parlementaire')->findOneByNom($nom);
60      if (!$personne) {
61        $personne = Doctrine::getTable('Parlementaire')->similarTo($nom);
62      }
63      if ($personne) {
64        return $this->setParlementaire($personne);
65      }
66    }
67    $personne = Doctrine::getTable('Personnalite')->findOneByNom($nom);
68    if (!$personne) {
69      $personne = new Personnalite();
70      $personne->setNom($nom);
71      $personne->save();
72    }
73    if ($personne) {
74      return $this->setPersonnalite($personne,$fonction);
75    }
76  }
77  public function setParlementaire($parlementaire, $from_db = null) {
78    if (isset($parlementaire->id)) {
79      $this->_set('parlementaire_id', $parlementaire->id);
80      if (!$from_db)
81        $this->getSeance()->addPresence($parlementaire, 'intervention', $this->source);
82      $parlementaire->free();
83    }
84  }
85
86  public function hasIntervenant() {
87    if ($this->parlementaire_id) {
88      return true;
89    }
90    if ($this->personnalite_id) {
91      return true;
92    }
93    return false;
94  }
95
96  public function getIntervenant() {
97    $perso = $this->Parlementaire;
98    if (!$perso->id)
99      $perso = $this->Personnalite;
100    return $perso;
101  }
102
103  public function getNomAndFonction() {
104    $res = null;
105    if ($this->hasIntervenant()) {
106      $res = $this->getIntervenant()->getNom();
107      if ($this->getFonction())
108        $res .= ', '.$this->getFonction();
109    }
110    return $res;
111  }
112
113  public function setContexte($contexte, $date = null, $timestamp = null, $tlois = null, $debug = 0) {
114    $tlois = preg_replace('/[^,\d]+/', '', $tlois);
115    $tlois = preg_replace('/\s+,/', ',', $tlois);
116    $tlois = preg_replace('/,\s+/', ',', $tlois);
117    $lois = explode(',', $tlois);
118    $loisstring = "";
119    foreach($lois as $loi) if ($loi) {
120      $tag = 'loi:numero='.$loi;
121      $this->addTag($tag);
122      if ($loisstring == "") $loisstring = "t.numero = $loi";
123      else $loisstring .= " OR t.numero = $loi";
124    }
125    if ($lois[0]) {
126      $urls = Doctrine_Query::create()
127        ->select('distinct(t.url_an)')
128        ->from('Texteloi t')
129        ->where('t.type = ? OR t.type = ? OR t.type = ? OR t.type = ?', array("Proposition de loi", "Proposition de résolution", "Projet de loi", "Texte de la commission"))
130        ->andWhere($loisstring)
131        ->fetchArray();
132      $ct = count($urls);
133      if ($ct == 0) $urls = Doctrine_Query::create()
134        ->select('distinct(t.url_an)')
135        ->from('Texteloi t')
136        ->where($loisstring)
137        ->fetchArray();
138      $ct = count($urls);
139      if ($ct > 1) {
140        $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp));
141        if ($debug) {
142          print "WARNING : Intervention $this->id has tags lois corresponding to multiple url_ans : ";
143          foreach ($urls as $url)
144            print $url['distinct']." ; ";
145          print " => Saving to section $this->Section->id\n";
146          $debug = 0;
147        }
148        return $debug;
149      }
150      if ($ct == 0) $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp));
151      else if ($ct == 1) {
152        $section1 = Doctrine::getTable('Section')->findOneByContexte($contexte);
153        $section2 = Doctrine::getTable('Section')->findOneByUrlAn($urls[0]['distinct']);
154        if ($section2) {
155          if (!$section1) 
156            $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt(str_replace(trim(preg_replace('/^([^>]+)(>.*)?$/', '\\1', $contexte)), $section2->titre, $contexte), $date, $timestamp));
157          else if ($section1->section_id == $section2->id)
158            $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($section1->titre_complet, $date, $timestamp));
159          else {
160            $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp));
161            if ($debug) {
162              print "WARNING : Intervention $this->id has tags lois corresponding to another section $section2->id";
163              print " => Saving to section ".$this->Section->id."\n";
164              $debug = 0;
165            }
166            return $debug;
167          }
168        }
169        else {
170          $section1 = Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp);
171          $this->setSection($section1);
172          $section1->setUrlAn($urls[0]['distinct']);
173          $section1->save();
174        }
175      }
176      if ($this->section_id != 1) {
177        $titre = $this->Section->Section->getTitre();
178        if (!(preg_match('/(cloture|ouverture|question|ordre du jour|calendrier|élection.*nouveau|démission|reprise|examen simplifié|cessation.*mandat|proclamation|souhaits)/i', $titre))) {
179          foreach($lois as $loi) {
180            $tag = 'loi:numero='.$loi;
181            $this->Section->addTag($tag);
182            if ($this->Section->section_id && $this->Section->Section->id && $this->Section->section_id != $this->section_id)
183              $this->Section->Section->addTag($tag);
184          }
185        }
186      }
187      return $debug;
188    } else {
189      $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp));
190      return $debug;
191    }
192  }
193
194  public function setAmendements($tamendements) {
195    $tamendements = preg_replace('/[^,\d]+/', '', $tamendements);
196    $amends = preg_split('/\s*,\s*/', $tamendements);
197    foreach($amends as $amend) {
198      $tag = 'loi:amendement='.$amend;
199      $this->addTag($tag);
200    }
201  }
202 
203  public function setIntervention($s) {
204    $this->_set('nb_mots', str_word_count($s));
205    return $this->_set('intervention', $s);
206  }
207
208  public function getIntervention($args = array()) {
209    $inter = $this->_get('intervention');
210    if ($this->type == 'loi' && isset($args['linkify_amendements']) && $linko = $args['linkify_amendements']) {
211      $inter = preg_replace('/\(([^\)]+)\)/', '(<i>\\1</i>)', $inter);
212      if (preg_match_all('/(amendements?[,\s]+(identiques?)?[,\s]*)((n[°os\s]*|\d+\s*|,\s*|à\s*|et\s*|rectifié\s*)+)/', $inter, $match)) {
213        $lois = implode(',', $this->getTags(array('is_triple' => true,
214                                                  'namespace' => 'loi',
215                                                  'key' => 'numero',
216                                                  'return' => 'value')));
217        if ($lois) for ($i = 0 ; $i < count($match[0]) ; $i++) {
218          $match_protected = preg_replace('/(\s*)(\d[\d\s\à]*rectifiés?|\d[\d\s\à]*)(,\s*|\s*et\s*)*/', '\1%\2%\3', $match[3][$i]);
219          if (preg_match_all('/\s*%([^%]+)%(,\s*|\s*et\s*)*/', $match_protected, $amends)) {
220            $replace = $match_protected;
221            foreach($amends[1] as $amend) {
222              $am = preg_replace('/à+/', '-', $amend);
223              $am = preg_replace('/[^\d\-]+/', '',$am);
224              $link = str_replace('LLL', urlencode($lois), $linko);
225              $link = str_replace('AAA', urlencode($am), $link);
226              $replace = preg_replace('/%'.$amend.'%/', '<a name="amend_'.$am.'" href="'.$link.'">'.$amend.'</a> ', $replace);
227            }
228            $inter = preg_replace('/'.$match[1][$i].$match[3][$i].'/', $match[1][$i].$replace, $inter);
229          }
230        }
231      }
232      if (preg_match('/<i>n[°os\s]*([\d,\set]+)<\/i>/', $inter, $match)) {
233        sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
234        foreach (explode(',', preg_replace('/\s+/', '', $match[1])) as $loi)
235          $inter = preg_replace('/'.$loi.'/', '<a href="'.url_for('@document?id='.$loi).'">'.$loi.'</a>', $inter);
236      }
237    }
238    return $inter;
239  }
240}
Note: See TracBrowser for help on using the repository browser.