source: cpc/trunk/project/apps/frontend/modules/parlementaire/actions/actions.class.php @ 1526

Last change on this file since 1526 was 1526, checked in by roux, 10 years ago

page organisme

File size: 17.8 KB
Line 
1<?php
2
3/**
4 * parlementaire actions.
5 *
6 * @package    cpc
7 * @subpackage parlementaire
8 * @author     Your name here
9 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
10 */
11class parlementaireActions extends sfActions
12{
13  public static function imagetograyscale($im)
14  {
15    if (imageistruecolor($im)) {
16      imagetruecolortopalette($im, false, 256);
17    }
18   
19    for ($c = 0; $c < imagecolorstotal($im); $c++) {
20      $col = imagecolorsforindex($im, $c);
21      $gray = round(0.299 * $col['red'] + 0.587 * $col['green'] + 0.114 * $col['blue']);
22      imagecolorset($im, $c, $gray, $gray, $gray);
23    }
24  }
25
26  public static function horizontalFlip(&$img) {
27    $size_x = imagesx($img);
28    $size_y = imagesy($img);
29    $temp = imagecreatetruecolor($size_x, $size_y);
30    $x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y);
31    if ($x) {
32      $img = $temp;
33    }
34    else {
35      die("Unable to flip image");
36    }
37  }
38
39  public function executePhoto(sfWebRequest $request)
40  {
41    $rayon = 50; //pour la vignette
42    $bordure = 10;
43    $work_height = 500; //pour éviter des sentiments d'antialiasing
44
45    $slug = $request->getParameter('slug');
46    $parlementaire = Doctrine_Query::create()->from('Parlementaire P')->where('slug = ?', $slug)->fetchOne();
47    $this->forward404Unless($parlementaire);
48    $file = tempnam(sys_get_temp_dir(), 'Parl');
49    $photo = $parlementaire->photo;
50    if (!strlen($photo)) {
51      copy(sfConfig::get('sf_root_dir').'/web/images/xneth/avatar_depute.jpg', $file); 
52    } else {
53      $fh = fopen($file, 'w');
54      fwrite($fh ,$photo);
55      fclose($fh);
56    }
57    list($width, $height, $image_type) = getimagesize($file);
58    if (!$width || !$height) {
59      copy(sfConfig::get('sf_root_dir').'/web/images/xneth/avatar_depute.jpg', $file);
60      list($width, $height, $image_type) = getimagesize($file);
61    }
62
63    $this->getResponse()->setHttpHeader('content-type', 'image/png');
64    $this->setLayout(false);
65    $newheight = ceil($request->getParameter('height', $height)/10)*10;
66    if ($newheight > 250)
67      $newheight = 250;
68
69    $iorig = imagecreatefromjpeg($file);
70    $ih = imagecreatetruecolor($work_height*$width/$height, $work_height);
71    if ($parlementaire->fin_mandat)
72      self::imagetograyscale($iorig);
73    imagecopyresampled($ih, $iorig, 0, 0, 0, 0, $work_height*$width/$height, $work_height, $width, $height);
74    $width = $work_height*$width/$height;
75    $height = $work_height;
76    imagedestroy($iorig);
77    unlink($file);
78
79    if ((isset($parlementaire->autoflip) && $parlementaire->autoflip) XOR $request->getParameter('flip')) {
80      self::horizontalFlip($ih);
81    }
82
83    $groupe = $parlementaire->groupe_acronyme;
84    if ($groupe && !$parlementaire->fin_mandat) {
85      imagefilledellipse($ih, $width-$rayon, $height-$rayon, $rayon+$bordure, $rayon+$bordure, imagecolorallocate($ih, 255, 255, 255));
86      if ($groupe == 'GDR') {
87        imagefilledarc($ih, $width-$rayon, $height-$rayon, $rayon, $rayon, 45, 225, imagecolorallocate($ih, 0, 170, 0), IMG_ARC_EDGED);
88        imagefilledarc($ih, $width-$rayon, $height-$rayon, $rayon, $rayon, 225, 45, imagecolorallocate($ih, 240, 0, 0), IMG_ARC_EDGED);
89      }else if ($groupe == 'SRC') {
90        imagefilledellipse($ih, $width-$rayon, $height-$rayon, $rayon, $rayon, imagecolorallocate($ih, 255, 20, 160));
91      }else if ($groupe == 'UMP') {
92        imagefilledellipse($ih, $width-$rayon, $height-$rayon, $rayon, $rayon, imagecolorallocate($ih, 0, 0, 170));
93      }else if ($groupe == 'NC') {
94        imagefilledellipse($ih, $width-$rayon, $height-$rayon, $rayon, $rayon, imagecolorallocate($ih, 0, 160, 255));
95      }else if ($groupe == 'NI') {
96        imagefilledellipse($ih, $width-$rayon, $height-$rayon, $rayon, $rayon, imagecolorallocate($ih, 255, 255, 255));
97      }
98    }
99
100    if ($newheight) {
101      $newwidth = $newheight*$width/$height;
102      $image = imagecreatetruecolor($newwidth, $newheight);
103      imagecopyresampled($image, $ih, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
104      imagedestroy($ih);
105      $ih = $image;
106    }
107    $this->image = $ih;
108    $this->getResponse()->addCacheControlHttpHeader('max_age=60');
109    $this->getResponse()->setHttpHeader('Expires', $this->getResponse()->getDate(time()*2));
110  }
111
112  public function executeIndex(sfWebRequest $request)
113  {
114      //      ->where('i.date > ?', date('Y-m-d', time()-60*60*24*31*3));
115  }
116
117  public function executeRandom(sfWebRequest $request)
118  {
119    $p = Doctrine::getTable('Parlementaire')->createQuery('p')->where('fin_mandat IS NULL')->orderBy('rand()')->limit(1)->fetchOne();
120    return $this->redirect('@parlementaire?slug='.$p['slug']);
121  }
122
123  public function executeShow(sfWebRequest $request)
124  {
125    $this->parlementaire = Doctrine::getTable('Parlementaire')->findOneBySlug($request->getParameter('slug'));
126    $this->forward404Unless($this->parlementaire);
127    $request->setParameter('rss', array(array('link' => '@parlementaire_rss?slug='.$this->parlementaire->slug, 'title'=>'L\'activité de '.$this->parlementaire->nom),
128                                        array('link' => '@parlementaire_rss_commentaires?slug='.$this->parlementaire->slug, 'title'=>'Les derniers commentaires portant sur l\'activité de '.$this->parlementaire->nom)
129                                        ));
130    $this->response->addMeta('keywords', $this->parlementaire->nom.' '.$this->parlementaire->nom_circo.' '.$this->parlementaire->type.' '.$this->parlementaire->groupe_acronyme.' Assemblée nationale');
131    $this->response->addMeta('description', 'Pour tout connaître de l\'activité de '.$this->parlementaire->nom.' à l\'Assemblée Nationale. '.$this->parlementaire->nom.' est '.$this->parlementaire->getLongStatut().' à l\'Assemblée Nationale.');
132    $this->response->addMeta('parlementaire_id', 'd'.$this->parlementaire->id);
133    $this->response->addMeta('parlementaire_id_url', 'http://www.nosdeputes.fr/id/'.'d'.$this->parlementaire->id);
134
135    $this->commissions_permanentes = array();
136    $this->missions = array();
137
138    foreach ($this->parlementaire->getResponsabilites() as $resp) {
139      if (in_array($resp->organisme_id, array(2, 11, 13, 22, 204, 211, 212, 237))) {
140        array_push($this->commissions_permanentes, $resp);
141      }else{
142        array_push($this->missions, $resp);
143      }
144    }
145  }
146
147  public function executeId(sfWebRequest $request)
148  {
149    $id = preg_replace('/^d/', '', $request->getParameter('id'));
150    $p = Doctrine::getTable('Parlementaire')->find($id);
151    if ($type = $request->getParameter('type')) {
152      return $this->redirect('api/parlementaire?type='.$type.'&slug='.$p->slug.'&textplain='.$request->getParameter('textplain'));
153    }
154    return $this->redirect('@parlementaire?slug='.$p->slug);
155  }
156
157  public function executeList(sfWebRequest $request) {
158    $query = Doctrine::getTable('Parlementaire')->createQuery('p');
159    $query->orderBy('p.nom_de_famille ASC');
160    $this->parlementaires = array();
161    foreach ($query->execute() as $depute) {
162      $lettre = $depute->nom_de_famille[0];
163      if (isset($this->parlementaires[$lettre])) $this->parlementaires[$lettre][] = $depute;
164      else $this->parlementaires[$lettre] = array($depute);
165    }
166    $ctquery = Doctrine_Query::create()
167      ->from('Parlementaire p')
168      ->select('count(distinct p.id) as ct')
169      ->fetchOne();
170    $this->total = $ctquery['ct'];
171    $ctquery = Doctrine_Query::create()
172      ->from('Parlementaire p')
173      ->select('count(distinct p.id) as ct')
174      ->where('p.fin_mandat IS NULL')
175      ->orWhere('p.fin_mandat < p.debut_mandat')
176      ->fetchOne();
177    $this->actifs = $ctquery['ct'];
178  }
179
180  public function executeListProfession(sfWebRequest $request) {
181    $this->exact = 0;
182    $this->prof = strip_tags(strtolower($request->getParameter('search')));
183    if ($this->prof == "") {
184      $this->parlementaires = array();
185      $this->citoyens = array();
186    }
187    else {
188      $query = Doctrine::getTable('Parlementaire')->createQuery('p')
189        ->addSelect('p.fin_mandat')
190        ->where('p.profession LIKE ?', $this->prof)
191        ->orderBy('p.nom_de_famille ASC');
192      $this->parlementaires = $query->execute();
193      if (count($this->parlementaires) > 0)
194        $this->exact = 1;
195      else {
196        $query = Doctrine::getTable('Parlementaire')->createQuery('p')
197          ->addSelect('p.fin_mandat')
198          ->where('p.profession LIKE ?', '%'.$this->prof.'%')
199          ->orderBy('p.profession ASC')
200          ->addOrderBy('p.nom_de_famille ASC');
201        $this->parlementaires = $query->execute();
202      }
203      $query = Doctrine::getTable('Citoyen')->createQuery('c')
204        ->where('c.is_active = true')
205        ->andWhere('c.activite LIKE ?', '%'.$this->prof.'%')
206        ->orderBy('c.activite ASC')
207        ->addOrderBy('c.login');
208      $this->citoyens = $query->execute();
209    }
210  }
211  public function executeListGroupe(sfWebRequest $request) {
212    $acro = strtolower($request->getParameter('acro'));
213    $nom = Organisme::getNomByAcro($acro);
214    $this->forward404Unless($nom);
215
216    $query = Doctrine::getTable('Parlementaire')->createQuery('p')
217      ->select('p.*, po.fonction as fonction, po.importance as imp')
218      ->leftJoin('p.ParlementaireOrganisme po')
219      ->leftJoin('po.Organisme o')
220      ->where('p.fin_mandat IS NULL')
221      ->andWhere('p.groupe_acronyme = ?', $acro)
222      ->andWhere('o.type = ?', 'groupe')
223      ->andWhere('o.nom = ?', $nom);
224    $query->orderBy("imp DESC, p.nom_de_famille ASC");
225    $this->parlementaires = array();
226    $this->total = 0;
227    foreach ($query->execute() as $depute) {
228      $this->total++;
229      $imp = $depute->imp;
230      if (isset($this->parlementaires[$imp])) $this->parlementaires[$imp][] = $depute;
231      else $this->parlementaires[$imp] = array($depute);
232    }
233    $query2 = Doctrine::getTable('Organisme')->createQuery('o');
234    $query2->where('o.nom = ?', $nom);
235    $this->orga = $query2->fetchOne();
236  }
237
238  public function executeListOrganisme(sfWebRequest $request) {
239    $orga = $request->getParameter('slug');
240    $this->forward404Unless($orga);
241    $this->orga = Doctrine::getTable('Organisme')->createQuery('o')
242      ->where('o.slug = ?', $orga)->fetchOne();
243    $this->forward404Unless($this->orga);
244
245    $pageS = $request->getParameter('pages', 1);
246    $pageR = $request->getParameter('page', 1);
247    if ($pageS == 1) {
248      if ($pageR == 1)
249        $this->page = "home";
250      else $this->page = "rapports";
251    } else $this->page = "seances";
252    if ($this->page === "home") {
253      $query = Doctrine::getTable('Parlementaire')->createQuery('p')
254        ->select('p.*, po.fonction as fonction, po.importance as imp')
255        ->leftJoin('p.ParlementaireOrganisme po')
256        ->leftJoin('po.Organisme o')
257        ->where('o.slug = ?', $orga)
258        ->andWhere('p.fin_mandat IS NULL')
259        ->orderBy("po.importance DESC, p.nom_de_famille ASC");
260      $this->parlementaires = array();
261      $this->total = 0;
262      foreach ($query->execute() as $depute) {
263        $this->total++;
264        $imp = $depute->imp;
265        if (isset($this->parlementaires[$imp])) $this->parlementaires[$imp][] = $depute;
266        else $this->parlementaires[$imp] = array($depute);
267      }
268    }
269    if ($this->page === "home" || $this->page === "seances") {
270      $query2 = Doctrine::getTable('Seance')->createQuery('s')
271        ->leftJoin('s.Organisme o')
272        ->where('o.slug = ?', $orga)
273        ->orderBy('s.date DESC, s.moment ASC');
274      $this->pagerSeances = Doctrine::getTable('Seance')->getPager($request, $query2);
275    }
276    if ($this->page === "home" || $this->page === "rapports") {
277      $query3 =  Doctrine::getTable('Texteloi')->createQuery('t')
278        ->leftJoin('t.Organisme o')
279        ->where('o.slug = ?', $orga)
280        ->orderBy('t.numero DESC, t.annexe ASC');
281      $this->pagerRapports = new sfDoctrinePager('Texteloi',10);
282      $this->pagerRapports->setQuery($query3);
283      $this->pagerRapports->setPage($pageR);
284      $this->pagerRapports->init();
285    }
286  }
287
288  public function executeTag(sfWebRequest $request) {
289    $this->tquery = null;
290    if ($this->tag = $request->getParameter('tags')) {
291      $tags = split(',', $this->tag);
292
293      $this->parlementaires = Doctrine::getTable('Intervention')
294        ->createQuery('i')
295        ->select('i.id, p.*, count(i.id) as nb')
296        ->addFrom('i.Parlementaire p, Tagging tg, Tag t')
297        ->where('p.id IS NOT NULL')
298        ->andWhere('tg.taggable_id = i.id AND t.id = tg.tag_id')
299        ->andWhere('tg.taggable_model = ?', 'Intervention')
300        ->andWhereIn('t.name', $tags)
301        ->groupBy('p.id')
302        ->orderBy('nb DESC')
303        ->fetchArray();
304    }
305    $this->response->setTitle('Les parlementaires par tag');
306  }
307
308  public function executePlot(sfWebRequest $request)
309  {
310    $slug = $request->getParameter('slug');
311    $this->session = $request->getParameter('time');
312    $this->forward404Unless(preg_match('/^(lastyear|2\d{3}2\d{3})$/', $this->session));
313    $this->parlementaire = Doctrine::getTable('Parlementaire')->findOneBySlug($slug);
314    $this->forward404Unless($this->parlementaire);
315    $this->sessions = Doctrine_Query::create()
316      ->select('s.session')
317      ->from('Seance s')
318      ->leftJoin('s.Presences p')
319      ->where('p.parlementaire_id = ?', $this->parlementaire->id)
320      ->andWhere('s.session IS NOT NULL AND s.session <> ""')
321      ->groupBy('s.session')->fetchArray();
322  }
323
324  public static function topSort($a, $b) {
325    if ($b[$_GET['sort']]['value'] == $a[$_GET['sort']]['value'])
326      return strcmp($a[0]['nom_de_famille'], $b[0]['nom_de_famille']);
327    else return $b[$_GET['sort']]['value'] - $a[$_GET['sort']]['value'];
328  }
329
330  public function executeTop(sfWebRequest $request)
331  {
332    $qp = Doctrine::getTable('Parlementaire')->createQuery('p');
333    $this->top_link = '@top_global_sorted?';
334    if (($o = $request->getParameter('organisme'))) {
335      $this->top_link = '@top_organisme_global_sorted?organisme='.$o.'&';
336      $organisme = Doctrine::getTable('Organisme')->findOneBySlug($o);
337      $this->forward404Unless($organisme);
338      $ids = array();
339      foreach(Doctrine::getTable('ParlementaireOrganisme')->createQuery('po')
340              ->select('DISTINCT parlementaire_id as id')
341              ->where('organisme_id = ?', $organisme->id)->fetchArray() as $id) {
342        $ids[] = $id['id'];
343      }
344      $qp->whereIn('id', $ids);
345    }
346    $qp->andWhere('fin_mandat IS NULL')
347      ->andWhere('debut_mandat < ?', date('Y-m-d', time()-60*60*24*365/2))
348      ->orderBy('nom_de_famille');
349    $parlementaires = $qp->fetchArray();
350    unset($qp);
351    $this->tops = array();
352    foreach($parlementaires as $p) {
353      $tops = unserialize($p['top']);
354      $id = $p['id'];
355      $i = 0;
356      $this->tops[$id][$i++] = $p;
357
358      foreach(array_keys($tops) as $key) {
359        $this->tops[$id][$i]['value'] = $tops[$key]['value'];
360
361        $this->tops[$id][$i]['style'] = '';
362        if ($tops[$key]['rank'] < 151)
363          $this->tops[$id][$i]['style'] = ' style="color:green" ';
364        else if ($tops[$key]['rank'] > 577 - 151)
365          $this->tops[$id][$i]['style'] = ' style="color:red" ';
366        $i++;
367      }
368    }
369    $this->ktop = array_keys($tops);
370    $this->sort = $this->getRequestParameter('sort');
371    if (($_GET['sort'] = $this->sort)) {
372      usort($this->tops, 'parlementaireActions::topSort');
373    }
374  }
375
376  public static function dateSort($a, $b) {
377    $datea = $a->updated_at;
378    $dateb = $b->updated_at;
379    if (get_class($a) === 'Texteloi')
380      $datea = $a->date;
381    if (get_class($b) === 'Texteloi')
382      $datea = $b->date;
383    return str_replace('-', '', $dateb) - str_replace('-', '', $datea);
384  }
385  public function executeRss(sfWebRequest $request) {
386    $this->parlementaire = Doctrine::getTable('Parlementaire')->findOneBySlug($request->getParameter('slug'));
387    $this->forward404Unless($this->parlementaire);
388
389    $request->setParameter('query', 'tag=parlementaire='.$this->parlementaire);
390    $request->setParameter('title', preg_replace('/%/', $this->parlementaire->nom, $request->getParameter('title')));
391
392    if ($o = $request->getParameter('object_type'))
393      $request->setParameter('query', $request->getParameter('query').' object_type='.$o);
394    $request->setParameter('format', 'rss');
395    return $this->forward('solr', 'search');
396
397
398    $this->limit = 30;
399
400    $news = array();
401    $elements = 0;
402    if ($request->getParameter('Intervention')) {
403      $elements++; 
404      foreach(Doctrine::getTable('Intervention')->createQuery('i')
405                ->where('i.parlementaire_id = ?', $this->parlementaire->id)
406                ->limit($this->limit)->orderBy('updated_at DESC')->execute()
407                as $n) 
408        $news[] = $n;
409    }
410    if ($request->getParameter('QuestionEcrite')) {
411      $elements++; 
412      foreach(Doctrine::getTable('QuestionEcrite')->createQuery('q')
413              ->where('q.parlementaire_id = ?', $this->parlementaire->id)
414              ->limit($this->limit)->orderBy('updated_at DESC')->execute()
415              as $n) 
416        $news[] = $n;
417    }
418    if ($request->getParameter('Amendement')) {
419      $elements++; 
420      foreach(Doctrine::getTable('Amendement')->createQuery('a')
421              ->leftJoin('a.ParlementaireAmendement pa')
422              ->where('pa.parlementaire_id = ?', $this->parlementaire->id)
423              ->andWhere('a.sort <> ?', 'Rectifié')
424              ->orderBy('updated_at DESC')->limit($this->limit)->execute()
425              as $n) 
426        $news[] = $n;
427    }
428    if ($request->getParameter('Document')) {
429      $elements++;
430      $docquery = Doctrine::getTable('Texteloi')->createQuery('t')
431        ->leftJoin('t.ParlementaireTexteloi pt')
432        ->where('pt.parlementaire_id = ?', $this->parlementaire->id);
433      $type = $request->getParameter('type');
434      if ($type) {
435        $lois = array('Proposition de loi', 'Proposition de résolution');
436        if ($type === "loi")
437          $docquery->andWhere('t.type = ? OR t.type = ?', $lois);
438        else if ($type === "rap")
439          $docquery->andWhere('t.type != ? AND t.type != ?', $lois);
440      }
441      foreach($docquery->orderBy('date DESC')->limit($this->limit)->execute()
442              as $n)
443        $news[] = $n;
444    }
445 
446    if ($elements > 1) usort($news, 'parlementaireActions::dateSort');
447
448    $this->news = $news;
449    $this->feed = new sfRssFeed();
450  }
451  public function executeError404() {
452  }
453}
Note: See TracBrowser for help on using the repository browser.