source: cpc/trunk/project/apps/frontend/modules/alerte/actions/actions.class.php @ 1441

Last change on this file since 1441 was 1441, checked in by teymour, 11 years ago

Gestion de l'envoi de confirmation + qq correction de bug

File size: 4.7 KB
Line 
1<?php
2
3/**
4 * alerte actions.
5 *
6 * @package    cpc
7 * @subpackage alerte
8 * @author     Your name here
9 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
10 */
11class alerteActions extends sfActions
12{
13  public function executeParlementaire(sfWebRequest $request)
14  {
15    $slug = $request->getParameter('slug');
16    $this->forward404Unless($slug);
17    $parlementaire = doctrine::getTable('Parlementaire')->findOneBySlug($slug);
18    $this->forward404Unless($parlementaire);
19    $alerte = new Alerte();
20    $alerte->query = 'Parlemenaire='.urlencode($parlementaire);
21    $alerte->no_human_query = 1;
22    $alerte->titre = 'Recherche relative aux travaux de '.$parlementaire->nom;
23    $this->submit = 'Créer';
24    $this->form = $this->processForm($request, $alerte);
25    $this->setTemplate('form');
26  }
27
28  public function executeList(sfWebRequest $request) {
29    $citoyen_id = $this->getUser()->getAttribute('user_id');
30    $this->forward404Unless($citoyen_id);
31    $citoyen = doctrine::getTable('Citoyen')->find($citoyen_id);
32    $this->forward404Unless($citoyen);
33    $sql = doctrine::getTable('Alerte')->createQuery('a')->where('a.citoyen_id = ?', $citoyen_id)->orWhere('a.email = ?', $citoyen->getEmail());
34    $this->alertes = $sql->execute();
35  }
36
37
38  public function executeCreate(sfWebRequest $request) 
39  {
40    $alerte = new Alerte();
41    $alerte->query = $request->getParameter('query');
42    $alerte->filter = $request->getParameter('filter');
43    $this->submit = 'Créer';
44    $this->form = $this->processForm($request, $alerte);
45    $this->setTemplate('form');
46  }
47  public function executeDelete(sfWebRequest $request) 
48  {
49    $this->forward404Unless($this->alerte = Doctrine::getTable('Alerte')->createQuery('a')->where('verif = ?', $request->getParameter('verif'))->fetchOne());
50    if ($request->isMethod('post')) {
51      if ($request->getParameter('confirmed')) {
52        $this->alerte->delete();
53        $this->getUser()->setFlash('notice', 'Votre alerte email a bien été supprimée');
54      }else
55        $this->getUser()->setFlash('error', 'Votre alerte email n\'a pas été supprimée');
56      return $this->redirectPostSave();
57    }
58  }
59
60  public function executeEdit(sfWebRequest $request) 
61  {
62    $this->forward404Unless($alerte = Doctrine::getTable('Alerte')->createQuery('a')->where('verif = ?', $request->getParameter('verif'))->fetchOne());
63    $this->form =  $this->processForm($request, $alerte);
64    $this->submit = 'Éditer';
65    $this->setTemplate('form');
66  }
67
68  public function executeConfirmation(sfWebRequest $request) 
69  {
70    $this->forward404Unless($alerte = Doctrine::getTable('Alerte')->createQuery('a')->where('verif = ?', $request->getParameter('verif'))->fetchOne());
71    $alerte->confirmed = 1;
72    $alerte->save();
73    $this->getUser()->setFlash('notice', 'Merci d\'avoir confirmé votre alerte');
74    return $this->redirect("@homepage");
75  }
76  private function redirectPostSave($alerte = null) {
77    if ($citoyen_id = $this->getUser()->getAttribute('user_id'))
78      return $this->redirect('alerte/list');
79    else if ($alerte)
80      return $this->redirect('alerte/edit?verif='.$alerte->verif);
81    else
82      return $this->redirect('@homepage');
83  }
84
85  private function processForm($request, $alerte) {
86    if ($citoyen_id = $this->getUser()->getAttribute('user_id')) {
87      $alerte->citoyen_id = $citoyen_id;
88    }
89    $form = new AlerteForm($alerte);
90    if ($request->isMethod('post')) {
91      $form->bind($request->getParameter($form->getName()));
92      if ($form->isValid()) {
93        try {
94          if (!$form->save()) {
95            throw new Exception();
96          }
97        }catch(Exception $e) {
98          $this->getUser()->setFlash('error', 'Désolé nous n\'avons pu créer votre alerte, vous y étiez sans doute déjà abonné');
99          return $this->redirect('@homepage');
100        }
101        if ($this->submit == 'Créer') {
102          if ($alerte->confirmed)
103            $this->getUser()->setFlash('notice', 'Votre alerte email a été créée');
104          else {
105            $this->confirmeAlerte($alerte);
106            $this->getUser()->setFlash('notice', 'Votre alerte email a été créée, merci de confirmer votre abonnement par email');
107          }
108        }else {
109          $this->getUser()->setFlash('notice', 'Votre alerte email a été modifiée');
110        }
111        return $this->redirectPostSave($form->getObject());
112      }
113    }
114    return $form;
115  }
116  private function confirmeAlerte($alerte) {
117    $message = $this->getMailer()->compose(array('no-reply@nosdeputes.fr' => 'Regards Citoyens (ne pas répondre)'), 
118                                           $alerte->email,
119                                           '[NosDeputes.fr] Confirmation d\'Alerte email - '.$alerte->titre);
120    $text = $this->getPartial('mail/sendConfirmationAlerte', array('alerte' => $alerte));
121    $message->setBody($text, 'text/plain');
122    try {
123      $this->getMailer()->send($message);
124    }catch(Exception $e) {
125      echo "Oups could not send email ($text)\n";
126    }
127  }
128}
Note: See TracBrowser for help on using the repository browser.