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

Last change on this file since 1388 was 1388, checked in by goya, 11 years ago

mieux avec le dossier aussi

File size: 9.3 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 = Doctrine::getTable('Personnalite')->similarTo($nom);
70    }
71    if (!$personne) {
72      $personne = new Personnalite();
73      $personne->setNom($nom);
74      $personne->save();
75    }
76    if ($personne) {
77      return $this->setPersonnalite($personne,$fonction);
78    }
79  }
80  public function setParlementaire($parlementaire, $from_db = null) {
81    if (isset($parlementaire->id)) {
82      $this->_set('parlementaire_id', $parlementaire->id);
83      if (!$from_db)
84        $this->getSeance()->addPresence($parlementaire, 'intervention', $this->source);
85      $parlementaire->free();
86    }
87  }
88
89  public function hasIntervenant() {
90    if ($this->parlementaire_id) {
91      return true;
92    }
93    if ($this->personnalite_id) {
94      return true;
95    }
96    return false;
97  }
98
99  public function getIntervenant() {
100    $perso = $this->Parlementaire;
101    if (!$perso->id)
102      $perso = $this->Personnalite;
103    return $perso;
104  }
105
106  public function getNomAndFonction() {
107    $res = null;
108    if ($this->hasIntervenant()) {
109      $res = $this->getIntervenant()->getNom();
110      if ($this->getFonction())
111        $res .= ', '.$this->getFonction();
112    }
113    return $res;
114  }
115
116  public function setContexte($contexte, $date = null, $timestamp = null, $tlois = null, $debug = 0) {
117    $tlois = preg_replace('/[^,\d]+/', '', $tlois);
118    $tlois = preg_replace('/\s+,/', ',', $tlois);
119    $tlois = preg_replace('/,\s+/', ',', $tlois);
120    $lois = explode(',', $tlois);
121    $loisstring = "";
122    foreach($lois as $loi) if ($loi) {
123      $tag = 'loi:numero='.$loi;
124      $this->addTag($tag);
125      if ($loisstring == "") $loisstring = "t.numero = $loi";
126      else $loisstring .= " OR t.numero = $loi";
127    }
128    if ($lois[0]) {
129      $urls = Doctrine_Query::create()
130        ->select('distinct(t.url_an)')
131        ->from('Texteloi t')
132        ->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"))
133        ->andWhere($loisstring)
134        ->fetchArray();
135      $ct = count($urls);
136      if ($ct == 0) $urls = Doctrine_Query::create()
137        ->select('distinct(t.url_an)')
138        ->from('Texteloi t')
139        ->where($loisstring)
140        ->fetchArray();
141      $ct = count($urls);
142      if ($ct > 1) {
143        $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp));
144        if ($debug) {
145          print "WARNING : Intervention $this->id has tags lois corresponding to multiple url_ans : ";
146          foreach ($urls as $url)
147            print $url['distinct']." ; ";
148          print " => Saving to section $this->Section->id\n";
149          $debug = 0;
150        }
151        return $debug;
152      }
153      if ($ct == 0) $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp));
154      else if ($ct == 1) {
155        $section1 = Doctrine::getTable('Section')->findOneByContexte($contexte);
156        $section2 = Doctrine::getTable('Section')->findOneByUrlAn($urls[0]['distinct']);
157        if ($section2) {
158          if (!$section1) 
159            $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt(str_replace(trim(preg_replace('/^([^>]+)(>.*)?$/', '\\1', $contexte)), $section2->titre, $contexte), $date, $timestamp));
160          else if ($section1->section_id == $section2->id)
161            $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($section1->titre_complet, $date, $timestamp));
162          else {
163            $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp));
164            if ($debug) {
165              print "WARNING : Intervention $this->id has tags lois corresponding to another section $section2->id";
166              print " => Saving to section ".$this->Section->id."\n";
167              $debug = 0;
168            }
169            return $debug;
170          }
171        }
172        else {
173          $section1 = Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp);
174          $this->setSection($section1);
175          $section1->setUrlAn($urls[0]['distinct']);
176          $section1->save();
177        }
178      }
179      if ($this->section_id != 1) {
180        $titre = $this->Section->Section->getTitre();
181        if (!(preg_match('/(cloture|ouverture|question|ordre du jour|calendrier|élection.*nouveau|démission|reprise|examen simplifié|cessation.*mandat|proclamation|souhaits)/i', $titre))) {
182          foreach($lois as $loi) {
183            $tag = 'loi:numero='.$loi;
184            $this->Section->addTag($tag);
185            if ($this->Section->section_id && $this->Section->Section->id && $this->Section->section_id != $this->section_id)
186              $this->Section->Section->addTag($tag);
187          }
188        }
189      }
190      return $debug;
191    } else {
192      $this->setSection(Doctrine::getTable('Section')->findOneByContexteOrCreateIt($contexte, $date, $timestamp));
193      return $debug;
194    }
195  }
196
197  public function setAmendements($tamendements) {
198    $tamendements = preg_replace('/[^,\d]+/', '', $tamendements);
199    $amends = preg_split('/\s*,\s*/', $tamendements);
200    foreach($amends as $amend) {
201      $tag = 'loi:amendement='.$amend;
202      $this->addTag($tag);
203    }
204  }
205 
206  public function setIntervention($s) {
207    $this->_set('nb_mots', str_word_count($s));
208    return $this->_set('intervention', $s);
209  }
210
211  public function getIntervention($args = array()) {
212    $inter = $this->_get('intervention');
213    if ($this->type == 'loi' && isset($args['linkify_amendements']) && $linko = $args['linkify_amendements']) {
214      $inter = preg_replace('/\(([^\)]+)\)/', '(<i>\\1</i>)', $inter);
215      if (preg_match_all('/(amendements?[,\s]+(identiques?)?[,\s]*)((n[°os\s]*|\d+\s*|,\s*|à\s*|et\s*|rectifié\s*)+)/', $inter, $match)) {
216        $lois = implode(',', $this->getTags(array('is_triple' => true,
217                                                  'namespace' => 'loi',
218                                                  'key' => 'numero',
219                                                  'return' => 'value')));
220        if ($lois) for ($i = 0 ; $i < count($match[0]) ; $i++) {
221          $match_protected = preg_replace('/(\s*)(\d[\d\s\à]*rectifiés?|\d[\d\s\à]*)(,\s*|\s*et\s*)*/', '\1%\2%\3', $match[3][$i]);
222          if (preg_match_all('/\s*%([^%]+)%(,\s*|\s*et\s*)*/', $match_protected, $amends)) {
223            $replace = $match_protected;
224            foreach($amends[1] as $amend) {
225              $am = preg_replace('/à+/', '-', $amend);
226              $am = preg_replace('/[^\d\-]+/', '',$am);
227              $link = str_replace('LLL', urlencode($lois), $linko);
228              $link = str_replace('AAA', urlencode($am), $link);
229              $replace = preg_replace('/%'.$amend.'%/', '<a name="amend_'.$am.'" href="'.$link.'">'.$amend.'</a> ', $replace);
230            }
231            $inter = preg_replace('/'.$match[1][$i].$match[3][$i].'/', $match[1][$i].$replace, $inter);
232          }
233        }
234      }
235      if (preg_match('/<i>n[°os\s]*([\d,\set]+)<\/i>/', $inter, $match)) {
236        sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
237        foreach (explode(',', preg_replace('/\s+/', '', $match[1])) as $loi)
238          $inter = preg_replace('/'.$loi.'/', '<a href="'.url_for('@document?id='.$loi).'">'.$loi.'</a>', $inter);
239      }
240    }
241    return $inter;
242  }
243}
Note: See TracBrowser for help on using the repository browser.