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

Last change on this file since 3091 was 3091, checked in by goya, 7 years ago

refacto api code to add task to generate dump of all amdmts for a bill

File size: 10.2 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  public function executeListParlementaires(sfWebRequest $request) 
136  {
137    $query = Doctrine::getTable('Parlementaire')->createQuery('p');
138    if ($request->getParameter('current') == true) {
139      $query->where('fin_mandat IS NULL OR debut_mandat > fin_mandat');
140      $this->multi = array();
141      $this->multi['responsabilite'] = 1;
142      $this->multi['email'] = 1;
143      $this->multi['adresse'] = 1;
144      $this->multi['mandat'] = 1;
145      $this->multi['site'] = 1;
146    }
147    $deputes = $query->execute();
148    $this->champs = array();
149    $this->res = array('deputes' => array());
150    $this->breakline = 'depute';
151    foreach($deputes as $dep) {
152      $depute = $this->getParlementaireArray($dep, $request->getParameter('format'), ($request->getParameter('current') == true ? 1 : 2));
153      if ($request->getParameter('format') == 'csv')
154       foreach(array_keys($depute) as $key)
155        if (!isset($this->champs[$key]))
156         $this->champs[$key] = 1;
157      $this->res['deputes'][] = array('depute' => $depute);
158    }
159    $this->templatize($request, 'nosdeputes.fr_deputes'.($request->getParameter('current') == true ? "_en_mandat" : "").date('Y-m-d'));
160  }
161
162  public function executeParlementaire(sfWebRequest $request) 
163  {
164    $slug = $request->getParameter('slug');
165    $this->forward404Unless($slug);
166    $depute = Doctrine::getTable('Parlementaire')->findOneBySlug($slug);
167    $this->forward404Unless($depute);
168    $this->res = array();
169    $this->res['depute'] = $this->getParlementaireArray($depute, $request->getParameter('format'));
170    $this->multi = array();
171    $this->multi['responsabilite'] = 1;
172    $this->multi['email'] = 1;
173    $this->multi['adresse'] = 1;
174    $this->multi['mandat'] = 1;
175    $this->multi['site'] = 1;
176    $this->champ = 'depute';
177    $this->breakline = '';
178    $date = $depute->updated_at.'';
179    $date = preg_replace('/[- :]/', '', $date);
180    $this->templatize($request, 'nosdeputes.fr_'.'_'.$slug.'_'.$date);
181  }
182
183
184  public static function getParlementaireArray($parl, $format, $light = 0) {
185    $res = array();
186    if (!$parl)
187        throw new Exception("pas de parlementaire");
188    $res['id'] = $parl->id * 1;
189    $res['nom'] = $parl->nom;
190    $res['nom_de_famille'] = $parl->getNomFamilleCorrect();
191    $res['prenom'] = $parl->getPrenom();
192    $res['sexe'] = $parl->sexe;
193    $res['date_naissance'] = $parl->date_naissance;
194    $res['lieu_naissance'] = $parl->lieu_naissance;
195    $res['num_deptmt'] = $parl->getNumDepartement();
196    $res['nom_circo'] = $parl->nom_circo;
197    $res['num_circo'] = $parl->num_circo * 1;
198    $res['mandat_debut'] = $parl->debut_mandat;
199    if ($parl->fin_mandat)
200      $res['mandat_fin'] = $parl->fin_mandat;
201    else if ($format == 'csv' && $light != 1)
202      $res['mandat_fin'] = "";
203    if ($parl->fin_mandat && $parl->fin_mandat >= $parl->debut_mandat)
204      $res['ancien_depute'] = 1;
205    else if ($format == 'csv' && $light != 1)
206      $res['ancien_depute'] = 0;
207    if (!$light) {
208      $groupe = $parl->getGroupe();
209      if (is_object($groupe))
210        $res['groupe'] = myTools::array2hash($groupe, 'groupe_politique');
211      else if ($format == 'csv')
212        $res['groupe'] = "";
213    }
214    $res['groupe_sigle'] = $parl->groupe_acronyme;
215    if (!$parl->parti)
216      $parl->parti = "";
217    $res['parti_ratt_financier'] = $parl->parti;
218    if (!$light) {
219      $res['responsabilites'] = myTools::array2hash($parl->getResponsabilites(), 'responsabilite');
220      $res['responsabilites_extra_parlementaires'] = myTools::array2hash($parl->getExtras(), 'responsabilite');
221      $res['groupes_parlementaires'] = myTools::array2hash($parl->getGroupes(), 'responsabilite');
222    }
223    if ($light != 2) {
224      $res['sites_web'] = myTools::array2hash(unserialize($parl->sites_web), 'site');
225      $res['emails'] = myTools::array2hash(unserialize($parl->mails), 'email');
226      $res['adresses'] = myTools::array2hash(unserialize($parl->adresses), 'adresse');
227      $res['anciens_mandats'] = myTools::array2hash(unserialize($parl->anciens_mandats), 'mandat');
228      $res['autres_mandats'] = myTools::array2hash(unserialize($parl->autres_mandats), 'mandat');
229      $res['anciens_autres_mandats'] = myTools::array2hash(unserialize($parl->anciens_autres_mandats), 'mandat');
230    }
231    $res['profession'] = $parl->profession;
232    $res['place_en_hemicycle'] = $parl->place_hemicycle;
233    $res['url_an'] = $parl->url_an;
234    $res['id_an'] = $parl->id_an;
235    $res['slug'] = $parl->getSlug();
236    sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
237    $res['url_nosdeputes'] = url_for('@parlementaire?slug='.$res['slug'], 'absolute=true');
238    $res['url_nosdeputes_api'] = url_for('api/parlementaire?format='.$format.'&slug='.$res['slug'], 'absolute=true');
239    $res['nb_mandats'] = count(unserialize($parl->getAutresMandats()));
240    return $res;
241  }
242
243  private function templatize($request, $filename) {
244    $this->setLayout(false);
245    switch($request->getParameter('format')) {
246      case 'json':
247        $this->setTemplate('json');
248        if (!$request->getParameter('textplain')) {
249          $this->getResponse()->setContentType('text/plain; charset=utf-8');
250          $this->getResponse()->setHttpHeader('content-disposition', 'attachment; filename="'.$filename.'.json"');
251        }
252        break;
253      case 'xml':
254        $this->setTemplate('xml');
255        if (!$request->getParameter('textplain')) {
256          $this->getResponse()->setContentType('text/xml; charset=utf-8');
257          //    $this->getResponse()->setHttpHeader('content-disposition', 'attachment; filename="'.$filename.'.xml"');
258        }
259        break;
260      case 'csv':
261        $this->setTemplate('csv');
262        if (!$request->getParameter('textplain')) {
263          $this->getResponse()->setContentType('application/csv; charset=utf-8');
264          $this->getResponse()->setHttpHeader('content-disposition', 'attachment; filename="'.$filename.'.csv"');
265        }
266        break;
267    default:
268      $this->forward404();
269    }
270    if ($request->getParameter('textplain')) {
271      $this->getResponse()->setContentType('text/plain; charset=utf-8');
272    }
273  }
274}
Note: See TracBrowser for help on using the repository browser.