source: cpc/trunk/project/lib/model/doctrine/TitreLoi.class.php @ 3065

Last change on this file since 3065 was 3065, checked in by roux, 8 years ago

update simplifions for more complex bill hierarchy + better style + data mariage/banques (need to update model example in bin/updateDB7.sh + reset routing bin/generate_routing.sh)

File size: 5.1 KB
Line 
1<?php
2
3/**
4 * This class has been auto-generated by the Doctrine ORM Framework
5 */
6class TitreLoi extends BaseTitreLoi
7{
8
9  public function setAuteur($depute) {
10    $sexe = null;
11    if (preg_match('/^\s*(M+[\s\.ml]{1})[a-z]*\s*([dA-Z].*)\s*$/', $depute, $match)) {
12        $nom = $match[2];
13        if (preg_match('/M[ml]/', $match[1]))
14          $sexe = 'F';
15        else $sexe = 'H';
16    } else $nom = preg_replace("/^\s*(.*)\s*$/", "\\1", $depute);
17    $depute = Doctrine::getTable('Parlementaire')->findOneByNomSexeGroupeCirco($nom, $sexe);
18    if (!$depute) print "ERROR: Auteur introuvable in ".$this->source." : ".$nom." // ".$sexe."\n";
19    else {
20      $this->_set('Parlementaire', $depute);
21      $depute->free();
22    }
23  }
24
25  public function setLevel($level, $value) {
26    $this->_set($levelstr, $value);
27  }
28
29  public static function findLevel($levels = array(0,0,0,0)) {
30    for ($i = 3; $i >= 0; $i--)
31      if ($levels[$i]) return $i+1;
32    return 0;
33  }
34
35  public function getLevel() {
36    $levels = array();
37    for ($i = 1; $i < 5; $i++)
38      $levels[] = $this->_get('level'.$i, 0);
39    return self::findLevel($levels);
40  }
41
42  public function getLevelValue($level) {
43    if ($level != 1 && $level != 2 && $level != 3 && $level != 4)
44      return '';
45    return $this->_get('level'.$level);
46  }
47
48  public function getUrl() {
49    $level = $this->getLevel();
50    if (!$level)
51      return '@loi?loi='.$this->texteloi_id;
52    $args = "?loi=".$this->texteloi_id;
53    for ($i = 1; $i <= $level; $i++)
54      $args .= "&level".$i."=".$this->_get('level'.$i);
55    return '@loi_level'.$level.$args;
56  }
57
58  public function getShortLevelTitre() {
59    if ($this->getLevel())
60      return ucfirst($this->leveltype).' '.$this->_get('level'.$this->getLevel());
61    return '';
62  }
63
64  public function getLevelTitre() {
65    $titre = ucfirst($this->titre);
66    if ($this->getShortLevelTitre())
67      $titre = $this->getShortLevelTitre()."&nbsp;: ".$titre;
68    return $titre;
69  }
70
71  public function getHierarchie() {
72    if (!$this->getLevel())
73      return ''; 
74    sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
75    $titreparent = '<a href="'.url_for($this->getUrl()).'">'.$this->getShortLevelTitre()."</a>";
76    if ($this->getLevel() > 1) {
77      $parent = $this->TitreLoi;
78      $titreparent = $parent->getHierarchie()." - ".$titreparent;
79    }
80    return $titreparent;
81  }
82
83  public function getDossier() {
84    $section = Doctrine_Query::create()
85      ->select('s.id')
86      ->from('Section s, Tagging ta, Tag t')
87      ->where('s.section_id = s.id')
88      ->andWhere('ta.taggable_id = s.id')
89      ->andWhere('ta.tag_id = t.id')
90      ->andWhere('ta.taggable_model = ?', "Section")
91      ->andWhere('t.name = ?', "loi:numero=".preg_replace('/^(\d+)-.*/', '\\1', $this->texteloi_id))
92      ->fetchOne();
93    return $section;
94  }
95
96  public function getVoisins() {
97    $result = array("","");
98    $level = $this->getLevel();
99    if (!$level)
100      return $result;
101    $levelstr = "level".$level;
102    $levelvalue = $this->_get($levelstr);
103    $levels = array(0,0,0,0);
104    for ($i = 1; $i < $level; $i++)
105      $levels[$i-1] = $this->_get('level'.$i);
106    if (preg_match('/^(\d+)\s+bis$/',$levelvalue, $match)) {
107      $result[0] = $match[1];
108      $levels[$levelvalue] = $match[1] + 1;
109      if (Doctrine::getTable('TitreLoi')->findLevel($this->texteloi_id, $levels))
110        $result[1] = $match[1] + 1;
111    } else {
112      $pre = $levelvalue - 1;
113      $qvoisins = Doctrine::getTable('TitreLoi')->createQuery('c')
114        ->select('c.'.$levelstr)
115        ->where('c.texteloi_id = ?', $this->texteloi_id);
116      for ($i = 1; $i < $level; $i++)
117        $qvoisins->andWhere('c.level'.$i.' = ?', $levels[$i-1]);
118      for ($i = $level + 1; $i < 5; $i++)
119        $qvoisins->andWhere('c.level'.$i.' IS NULL');
120      $voisins = $qvoisins->andWhereIn('c.'.$levelstr, array($pre, $pre." bis", $levelvalue." bis", $levelvalue + 1))
121        ->orderBy('c.'.$levelstr)
122        ->fetchArray();
123      $ct = count($voisins);
124      if ($ct == 1) {
125        if ($levelvalue == 1) $result[1] = $voisins[0][$levelstr];
126        else $result[0] = $voisins[0][$levelstr];
127      } else if ($ct == 2) {
128        if ($levelvalue == 1)
129          $result[1] = $voisins[0][$levelstr];
130        else if (preg_match('/^(\d+)\s+bis$/', $voisins[1][$levelstr], $match) && $match[1] < $levelvalue)
131          $result[0] = $voisins[1][$levelstr];
132        else {
133          $result[0] = $voisins[0][$levelstr];
134          $result[1] = $voisins[1][$levelstr];
135        }
136      } else if ($ct > 2) {
137        if (preg_match('/bis/', $voisins[1][$levelstr]) && preg_match('/bis/', $voisins[2][$levelstr])) {
138          $result[0] = $voisins[1][$levelstr];
139          $result[1] = $voisins[2][$levelstr];
140        } else {
141          $result[0] = $voisins[0][$levelstr];
142          if (preg_match('/'.$n_section.'/', $voisins[1][$levelstr])) {
143            $result[0] = $voisins[0][$levelstr];
144            $result[1] = $voisins[1][$levelstr];
145          } else {
146            $result[0] = $voisins[1][$levelstr];
147            $result[1] = $voisins[2][$levelstr];
148          }
149        }
150      }
151    }
152    return $result;
153  }
154
155}
Note: See TracBrowser for help on using the repository browser.