source: cpc/trunk/project/apps/frontend/modules/api/actions/actions.class.php @ 3037

Last change on this file since 3037 was 3037, checked in by roux, 7 years ago

gestion partis

File size: 10.8 KB
Line 
1<?php
2
3/**
4 * api actions.
5 *
6 * @package    cpc
7 * @subpackage api
8 * @author     Your name here
9 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
10 */
11class apiActions extends sfActions
12{
13  public function executeSynthese(sfWebRequest $request)
14  {
15   
16  }
17  public function executeDocument(sfWebRequest $request)
18  {
19    $class = $request->getParameter('class');
20    $format = $request->getParameter('format');
21    $id = $request->getParameter('id');
22    $this->forward404Unless($class);
23    $o = doctrine::getTable($class)->find($id);
24    if ($class == 'Parlementaire') {
25      return $this->redirect('api/parlementaire?slug='.$o->slug.'&format='.$format);
26    }
27    $slug = $class.'_'.$id;
28    $date = $o->updated_at; 
29    $this->res = array();
30    $this->res[strtolower($class)] = $o->toArray();
31    $this->templatize($request, 'nosdeputes.fr_'.'_'.$slug.'_'.$date);
32    $this->breakline = '';
33  }
34 /**
35  * Executes index action
36  *
37  * @param sfRequest $request A request object
38  */
39  public function executeTop(sfWebRequest $request)
40  {
41    $date = $request->getParameter('date');
42    $this->forward404Unless(preg_match('/(\d{2,4})-?(\d{2})/', $date, $d));
43    $date = preg_replace('/-/', '', $date);
44    $date = preg_replace('/^(\d{2})(\d{2})$/', '20\\1\\2', $date);
45    $d[1] = preg_replace('/^(\d{2})$/', '20\\1', $d[1]);
46    $vg = Doctrine::getTable('VariableGlobale')->findOneByChamp('stats_month_'.$d[1].'_'.$d[2]);
47    $top = unserialize($vg->value);
48
49    $this->forward404Unless($top);
50
51    $this->res = array();
52    $this->champs = array();
53    foreach(array_keys($top) as $id) {
54      $depute['id'] = $id;
55      $this->champs['id'] = 1;
56
57      foreach (array_keys($top[$id]) as $k) {
58        //Gestion de l'ordre des parametres
59        $kfinal = preg_replace('/^\d*_/', '', $k);
60        $depute[$kfinal] = $top[$id][$k]['value'];
61        $this->champs[$kfinal] = 1;
62      }
63      $this->res["deputes"][] = array('depute' => $depute);
64    }
65
66    for($i = 0 ; $i < count($this->res["deputes"]) ; $i++) {
67      foreach(array_keys($this->champs) as $key) {
68        if (!isset($this->res['deputes'][$i]['depute'][$key])) {
69          $this->res['deputes'][$i]['depute'][$key] = 0;
70        }
71      }
72    }
73
74    $this->breakline = 'depute';
75    $this->templatize($request, 'nosdeputes.fr_'.$date.'_stats_deputes');
76  }
77
78  public function executeTopSynthese(sfWebRequest $request) {
79    $format = $request->getParameter('format');
80    $this->withBOM = $request->getParameter('withBOM');
81    $qp = Doctrine::getTable('Parlementaire')->createQuery('p');
82    $fin = myTools::isFinLegislature();
83    if (!$fin) $qp->andWhere('fin_mandat IS NULL');
84    $dixmois = time() - round(60*60*24*3650/12);
85    if ($dixmois > strtotime(myTools::getDebutLegislature()))
86      $qp->andWhere('debut_mandat < ?', date('Y-m-d', $dixmois));
87    $qp->orderBy('nom_de_famille');
88    $parlementaires = $qp->execute();
89    unset($qp);
90    $this->res = array();
91    $this->champs = array();
92    foreach($parlementaires as $p) {
93      $tops = $p->top;
94      $depute['id'] = $p->id;
95      $this->champs['id'] = 1;
96      if ($fin && $tops['nb_mois'] < 4)
97        continue;
98      $depute = $this->getParlementaireArray($p, $format, 2);
99      if ($fin)
100        $depute["nb_mois"] = $tops['nb_mois'];
101      if ($format == 'csv')
102       foreach(array_keys($depute) as $key)
103        if (!isset($this->champs[$key]))
104         $this->champs[$key] = 1;
105      foreach(array_keys($tops) as $k) {
106        if ($k != 'nb_mois') {
107          //Gestion de l'ordre des parametres
108          $kfinal = preg_replace('/^\d*_/', '', $k);
109          $depute[$kfinal] = $tops[$k]['value'];
110          if (!isset($this->champs[$kfinal])) $this->champs[$kfinal] = 1;
111          if ($fin) {
112            $depute[$kfinal.'_moyenne_mensuelle']  = $tops[$k]['moyenne'];
113            if (!isset($this->champs[$kfinal.'_moyenne_mensuelle'])) $this->champs[$kfinal.'_moyenne_mensuelle'] = 1;
114          }
115        } else {
116          $depute[$k] = $tops[$k];
117          if (!isset($this->champs[$k])) $this->champs[$k] = 1;
118        }
119      }
120      $this->res["deputes"][] = array('depute' => $depute);
121    }
122
123    for($i = 0 ; $i < count($this->res["deputes"]) ; $i++) {
124      foreach(array_keys($this->champs) as $key) {
125        if (!isset($this->res['deputes'][$i]['depute'][$key])) {
126          $this->res['deputes'][$i]['depute'][$key] = 0;
127        }
128      }
129    }
130
131    $this->breakline = 'depute';
132    $this->templatize($request, 'nosdeputes.fr_synthese_'.date('Y-m-d'));
133  }
134
135
136  protected static function array2hash($array, $hashname) {
137    if (!$array)
138      return array();
139    $hash = array();
140    if (!isset($array[0])) {
141      if (isset($array->fonction))
142        return array("organisme" => $array->getNom(), "fonction" => $array->fonction);
143      else return $array;
144    }
145    foreach($array as $e) if ($e) {
146      if (isset($e->fonction))
147        $hash[] = array($hashname => array("organisme" => $e->getNom(), "fonction" => $e->fonction));
148      else $hash[] = array($hashname => preg_replace('/\n/', ', ', $e));
149    }
150    return $hash;
151  }
152
153  public function executeListParlementaires(sfWebRequest $request) 
154  {
155    $query = Doctrine::getTable('Parlementaire')->createQuery('p');
156    if ($request->getParameter('current') == true) {
157      $query->where('fin_mandat IS NULL OR debut_mandat > fin_mandat');
158      $this->multi = array();
159      $this->multi['responsabilite'] = 1;
160      $this->multi['email'] = 1;
161      $this->multi['adresse'] = 1;
162      $this->multi['mandat'] = 1;
163      $this->multi['site'] = 1;
164    }
165    $deputes = $query->execute();
166    $this->champs = array();
167    $this->res = array('deputes' => array());
168    $this->breakline = 'depute';
169    foreach($deputes as $dep) {
170      $depute = $this->getParlementaireArray($dep, $request->getParameter('format'), ($request->getParameter('current') == true ? 1 : 2));
171      if ($request->getParameter('format') == 'csv')
172       foreach(array_keys($depute) as $key)
173        if (!isset($this->champs[$key]))
174         $this->champs[$key] = 1;
175      $this->res['deputes'][] = array('depute' => $depute);
176    }
177    $this->templatize($request, 'nosdeputes.fr_deputes'.($request->getParameter('current') == true ? "_en_mandat" : "").date('Y-m-d'));
178  }
179
180  public function executeParlementaire(sfWebRequest $request) 
181  {
182    $slug = $request->getParameter('slug');
183    $this->forward404Unless($slug);
184    $depute = Doctrine::getTable('Parlementaire')->findOneBySlug($slug);
185    $this->forward404Unless($depute);
186    $this->res = array();
187    $this->res['depute'] = $this->getParlementaireArray($depute, $request->getParameter('format'));
188    $this->multi = array();
189    $this->multi['responsabilite'] = 1;
190    $this->multi['email'] = 1;
191    $this->multi['adresse'] = 1;
192    $this->multi['mandat'] = 1;
193    $this->multi['site'] = 1;
194    $this->champ = 'depute';
195    $this->breakline = '';
196    $date = $depute->updated_at.'';
197    $date = preg_replace('/[- :]/', '', $date);
198    $this->templatize($request, 'nosdeputes.fr_'.'_'.$slug.'_'.$date);
199  }
200
201
202  public static function getParlementaireArray($parl, $format, $light = 0) {
203    $res = array();
204    if (!$parl)
205        throw new Exception("pas de parlementaire");
206    $res['id'] = $parl->id * 1;
207    $res['nom'] = $parl->nom;
208    $res['nom_de_famille'] = $parl->getNomFamilleCorrect();
209    $res['prenom'] = $parl->getPrenom();
210    $res['sexe'] = $parl->sexe;
211    $res['date_naissance'] = $parl->date_naissance;
212    $res['lieu_naissance'] = $parl->lieu_naissance;
213    $res['num_deptmt'] = $parl->getNumDepartement();
214    $res['nom_circo'] = $parl->nom_circo;
215    $res['num_circo'] = $parl->num_circo * 1;
216    $res['mandat_debut'] = $parl->debut_mandat;
217    if ($parl->fin_mandat)
218      $res['mandat_fin'] = $parl->fin_mandat;
219    else if ($format == 'csv' && $light != 1)
220      $res['mandat_fin'] = "";
221    if ($parl->fin_mandat && $parl->fin_mandat >= $parl->debut_mandat)
222      $res['ancien_depute'] = 1;
223    else if ($format == 'csv' && $light != 1)
224      $res['ancien_depute'] = 0;
225    if (!$light) {
226      $groupe = $parl->getGroupe();
227      if (is_object($groupe))
228        $res['groupe'] = self::array2hash($groupe, 'groupe_politique');
229      else if ($format == 'csv')
230        $res['groupe'] = "";
231    }
232    $res['groupe_sigle'] = $parl->groupe_acronyme;
233    if (!$parl->parti)
234      $parl->parti = "";
235    $res['parti_ratt_financier'] = $parl->parti;
236    if (!$light) {
237      $res['responsabilites'] = self::array2hash($parl->getResponsabilites(), 'responsabilite');
238      $res['responsabilites_extra_parlementaires'] = self::array2hash($parl->getExtras(), 'responsabilite');
239      $res['groupes_parlementaires'] = self::array2hash($parl->getGroupes(), 'responsabilite');
240    }
241    if ($light != 2) {
242      $res['sites_web'] = self::array2hash(unserialize($parl->sites_web), 'site');
243      $res['emails'] = self::array2hash(unserialize($parl->mails), 'email');
244      $res['adresses'] = self::array2hash(unserialize($parl->adresses), 'adresse');
245      $res['anciens_mandats'] = self::array2hash(unserialize($parl->anciens_mandats), 'mandat');
246      $res['autres_mandats'] = self::array2hash(unserialize($parl->autres_mandats), 'mandat');
247      $res['anciens_autres_mandats'] = self::array2hash(unserialize($parl->anciens_autres_mandats), 'mandat');
248    }
249    $res['profession'] = $parl->profession;
250    $res['place_en_hemicycle'] = $parl->place_hemicycle;
251    $res['url_an'] = $parl->url_an;
252    $res['id_an'] = $parl->id_an;
253    $res['slug'] = $parl->getSlug();
254    sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
255    $res['url_nosdeputes'] = url_for('@parlementaire?slug='.$res['slug'], 'absolute=true');
256    $res['url_nosdeputes_api'] = url_for('api/parlementaire?format='.$format.'&slug='.$res['slug'], 'absolute=true');
257    $res['nb_mandats'] = count(unserialize($parl->getAutresMandats()));
258    return $res;
259  }
260
261  private function templatize($request, $filename) {
262    $this->setLayout(false);
263    switch($request->getParameter('format')) {
264      case 'json':
265        $this->setTemplate('json');
266        if (!$request->getParameter('textplain')) {
267          $this->getResponse()->setContentType('text/plain; charset=utf-8');
268          $this->getResponse()->setHttpHeader('content-disposition', 'attachment; filename="'.$filename.'.json"');
269        }
270        break;
271      case 'xml':
272        $this->setTemplate('xml');
273        if (!$request->getParameter('textplain')) {
274          $this->getResponse()->setContentType('text/xml; charset=utf-8');
275          //    $this->getResponse()->setHttpHeader('content-disposition', 'attachment; filename="'.$filename.'.xml"');
276        }
277        break;
278      case 'csv':
279        $this->setTemplate('csv');
280        if (!$request->getParameter('textplain')) {
281          $this->getResponse()->setContentType('application/csv; charset=utf-8');
282          $this->getResponse()->setHttpHeader('content-disposition', 'attachment; filename="'.$filename.'.csv"');
283        }
284        break;
285    default:
286      $this->forward404();
287    }
288    if ($request->getParameter('textplain')) {
289      $this->getResponse()->setContentType('text/plain; charset=utf-8');
290    }
291  }
292}
Note: See TracBrowser for help on using the repository browser.