source: cpc/trunk/project/lib/model/doctrine/Seance.class.php @ 2707

Last change on this file since 2707 was 2707, checked in by teymour, 9 years ago

Ajout des présences pour l'APF, l'UIP et les groupes d'amitiés

File size: 5.7 KB
Line 
1<?php
2
3/**
4 * This class has been auto-generated by the Doctrine ORM Framework
5 */
6class Seance extends BaseSeance
7{
8  public function __tostring() {
9    return 'séance du '.myTools::displayDate($this->date).', '.$this->moment;
10  }
11 
12  static $debut_session = null;
13  public static function identifySession($date) {
14    if (!self::$debut_session) {
15      $session = Doctrine::getTable('VariableGlobale')->findOneByChamp('session');
16      self::$debut_session = unserialize($session->value);
17    }
18    if (!is_array(self::$debut_session))
19        return ;
20    foreach(array_keys(self::$debut_session) as $session) {
21      if (strtotime($date) >= strtotime(self::$debut_session[$session]))
22        return $session;
23    }
24  }
25
26  public function setSession($session) {
27    if (!$session && $this->date)
28      $session = self::identifySession($this->date);
29    return $this->_set('session', $session);
30  }
31  public function addPresence($parlementaire, $type, $source) {
32    $q = Doctrine::getTable('Presence')->createQuery('p');
33    $q->where('parlementaire_id = ?', $parlementaire->id)->andWhere('seance_id = ?', $this->id);
34    $presence = $q->execute()->getFirst();
35    $q->free();
36    unset($q);
37    if (!$presence) {
38      $presence = new Presence();
39      $presence->Parlementaire = $parlementaire;
40      $presence->Seance = $this;
41      $presence->date = $this->date;
42      $presence->save();
43    }
44    $res = $presence->addPreuve($type, $source);
45    $presence->free();
46    return $res;
47  }
48 
49  public function addPresenceLight($parlementaire_id, $type, $source) {
50    $q = Doctrine::getTable('Presence')->createQuery('p');
51    $q->where('parlementaire_id = ?', $parlementaire_id)->andWhere('seance_id = ?', $this->id);
52    $presence = $q->execute()->getFirst();
53    $q->free();
54    unset($q);
55    if (!$presence) {
56      $presence = new Presence();
57      $presence->_set('parlementaire_id', $parlementaire_id);
58      $presence->Seance = $this;
59      $presence->date = $this->date;
60      $presence->save();
61    }
62    $res = $presence->addPreuve($type, $source);
63    $presence->free();
64    return $res;
65  }
66
67 
68  public static function convertMoment($moment) {
69    if (strlen($moment) > 25)
70      return substr($moment, 0, 255);
71    if (preg_match('`(seance|séance)`i', $moment)) {
72        if (preg_match('`1`', $moment)) return "1ère séance";
73        if (preg_match('`(\d{1})`', $moment, $match)) return $match[1];
74        return $moment;
75    }
76    if (preg_match('/(reunion|réunion|^\d+$)/i', $moment)) {
77      if (preg_match('/1/', $moment)) return "1ère réunion";
78      if (preg_match('/(\d+)/', $moment, $match)) return $match[1]."ème réunion";
79      return $moment;
80    }
81    if (preg_match('/(\d{1,2})[:h](\d{2})/', $moment, $match)) {
82      $moment = sprintf("%02d:%02d", $match[1], $match[2]);
83      return $moment;
84    }
85    return $moment;
86  }
87 
88  public function getShortMoment() {
89    if (preg_match('/:/', $this->moment))
90      return preg_replace('/^0/', '', str_replace('00', '', str_replace(':', 'h', $this->moment)));
91    else if (!$this->moment)
92      return "réunion";
93    return $this->moment;
94  }
95 
96  public function setDate($date) {
97    if (!$this->_set('date', $date))
98      return false;
99    $date = strtotime($date);
100    $annee = date('Y', $date);
101    $semaine = date('W', $date);
102    if ($semaine == 53) {
103      $annee++;
104      $semaine = 1;
105    }
106    $this->_set('annee', $annee);
107    $this->_set('numero_semaine', $semaine);
108    return true;
109  }
110  public function getInterventions() {
111    $q = Doctrine::getTable('Intervention')->createQuery('i')->where('seance_id = ?', $this->id)->leftJoin('i.Personnalite p')->leftJoin('i.Parlementaire pa')->orderBy('i.timestamp ASC');
112    return $q->execute();
113  }
114  public function getTableMatiere() {
115    $q = Doctrine_Query::create()->select('s.titre, s.titre_complet, s.id, s.section_id, s.nb_interventions')->from('Section s')->leftJoin('s.Interventions i')->where('i.seance_id = ?', $this->id)->orderBy('i.timestamp ASC');
116    return $q->fetchArray();
117  }
118
119  public function getTypeOrga() {
120    if ($this->type == 'hemicycle') return "Hémicycle";
121    return $this->getOrganisme()->getNom();
122  }
123
124  public function deleteInterventions() {
125    if ($this->countComments()) {
126      throw new Exception('Il existe des commentaires');
127    }
128    foreach (Doctrine::getTable('Intervention')->createQuery('i')->where('i.seance_id = ?', $this->id)->execute() as $i) {
129      $i->delete();
130    }
131  }
132
133  public function countComments() {
134    $interventions = Doctrine::getTable('Intervention')->createQuery('i')->where('i.seance_id = ?', $this->id)->select('i.id')->fetchArray();
135    if (!count($interventions)) {
136        if ($this->type != "commission")
137          echo("WARNING: Pas d'intervention dans cette séance\n");
138        return 0;
139    }
140    $q = Doctrine::getTable('Commentaire')->createQuery('c')->whereIn('c.object_id', $interventions)->andWhere('c.object_type = ?', 'Intervention');
141    return $q->count();
142  }
143
144  public function getTitre($miniature = 0, $hemicycle = 0, $ref = '') {
145    $titre = '';
146    if ($ref != '')
147      $titre .= '<a href="'.url_for('@interventions_seance?seance='.$this->id).'#inter_'.$ref.'">';
148    if ($miniature == 0)
149      $titre .= 'S';
150    else $titre .= 's';
151    $titre .= 'éance ';
152    if ($hemicycle == 1)
153      $titre .= 'en hémicycle ';
154    $titre .= 'du '.preg_replace('/^0(\d)/', '\\1', myTools::displayDate($this->getDate()));
155    if ($moment = $this->getMoment()) {
156      if (preg_match('/(réunion|^\d+$)/', $moment))
157        $titre .= ' : ';
158      else $titre .= ' à ';
159      $titre .= $moment;
160    }
161    $titre = preg_replace('/00:00/', 'minuit', $titre);
162    $titre = preg_replace('/0(\d:\d{2})/', '\\1', $titre);
163    $titre = preg_replace('/ (\d+):(\d{2})/', ' \\1h\\2', $titre);
164    if ($ref != '')
165      $titre .= '</a>';
166    return $titre;
167  }
168}
Note: See TracBrowser for help on using the repository browser.