AdminValidPaiementAction.php 5.84 KB
Newer Older
1
<?php
2
3
4
5
6
7
8
9
10
11

/*
 * This file is part of JDEV-BOARDING
 *
 * (c) François Agneray <francois.agneray@lam.fr>
 * (c) Chrystel Moreau <chrystel.moreau@lam.fr>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
12
13
14
15
16
17
18
19
20
21
22
23
24
25
namespace App\Action;

use Slim\Views\Twig;
use Psr\Log\LoggerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;

final class AdminValidPaiementAction
{
    private $view;
    private $logger;
    private $em;
    private $mailer;
26
    private $settings;
François Agneray's avatar
François Agneray committed
27

28
    public function __construct(Twig $view, LoggerInterface $logger, EntityManagerInterface $em, $mailer, $settings)
29
30
31
32
33
    {
        $this->view = $view;
        $this->logger = $logger;
        $this->em = $em;
        $this->mailer = $mailer;
34
        $this->settings = $settings;
35
    }
François Agneray's avatar
François Agneray committed
36

37
38
39
40
41
42
43
44
45
46
    public function __invoke(Request $request, Response $response, $args)
    {
        $this->logger->info("admin valid paiement page action dispatched");

        $params = $request->getQueryParams();
        $token = $params['token'];
        $valid = $params['valid'];
        $roleSI = $request->getAttribute('roleSI');

        
François Agneray's avatar
François Agneray committed
47
        if (($roleSI != 'admin') && ($roleSI != 'clo_admin')) {
48
49
50
51
52
53
54
55
56
57
58
59
60
            return $response->withStatus(401);
        }
        
        if (!array_key_exists('email', $params)) {
            return $response->withStatus(400);
        }
            
        $participant = $this->getParticipant($params['email']);
        if (!$participant) {
            return $response->withStatus(400);
        }

        
61
62
63
64
65
66
67
68
69
        // Si invalidation d'une place pre-payée
        if ($valid == 'false') {
            $organisme = $this->getOrganisme($participant->getOrganisme()->getId());
            $participant->setAccesValide(false);
            $participant->setPassPrepaye(false);
            $organisme->setNbLibres($organisme->getNbLibres() + 1);
            $this->em->flush();
            $this->sendEmailInvalidation($participant);
            return $response;
François Agneray's avatar
François Agneray committed
70
71
        } else {
            // Si validation du paiment Azur-Colloque
72
73
74
75
            $participant->setAccesValide(true);
            $this->em->flush();
            $this->sendEmailPaiement($participant);
            return $response;
François Agneray's avatar
François Agneray committed
76
        }
77
78
79
80
81
    }

    private function getParticipant($email)
    {
        $participant = $this->em->getRepository('App\Entity\Participant')->findOneBy(array('email' => strtolower($email)));
François Agneray's avatar
François Agneray committed
82
        if (isset($participant)) {
83
84
85
86
87
88
89
90
            return $participant;
        } else {
            return true;
        }
    }
    
    private function getOrganisme($orga_id)
    {
91
        $organisme = $this->em->getRepository('App\Entity\Organisme')->findOneBy(array('id' => $orga_id));
François Agneray's avatar
François Agneray committed
92
        if (isset($organisme)) {
93
94
95
96
            return $organisme;
        } else {
            return true;
        }
97
98
    }

99
    private function sendEmailInvalidation($participant)
100
    {
101
        $body  = 'Bonjour ' . $participant->getPrenom() . ' ' . $participant->getNom() . ',' . PHP_EOL;
102
        $body .= PHP_EOL;
103
        $body .= 'Votre prise en charge vient d\'être invalidée par votre organisme.' . PHP_EOL;
104
105
        $body .= PHP_EOL;
        $body .= 'Pour que votre inscription soit prise en compte, vous devez régler ';
106
        $body .= 'les frais d\'inscription sur la plate-forme Azur-Colloque: https://www.azur-colloque.fr/DR14/ .' . PHP_EOL;
107
108
        $body .= PHP_EOL;
        $body .= 'Bien cordialement' . PHP_EOL;
109
        $body .= 'Le comité d\'organisation des ' . $this->settings['jdev']['label'];
110

François Agneray's avatar
François Agneray committed
111
        $message = \Swift_Message::newInstance('Invalidation place pré-payée ' . $this->settings['jdev']['label'])
112
113
            ->setFrom(['noreply@' . $this->settings['jdev']['url'] => $this->settings['jdev']['url']])
            ->setTo([$participant->getEmail(), $this->settings['jdev']['email']])
114
115
116
117
118
119
120
121
122
            ->setBody($body);
            
        $this->mailer->send($message);
    }
    
    private function sendEmailPaiement($participant)
    {
        $body  = 'Bonjour ' . $participant->getPrenom() . ' ' . $participant->getNom() . PHP_EOL;
        $body .= PHP_EOL;
123
        $body .= 'Nous avons acté votre paiement auprès d\'Azur-Colloque pour les ' . $this->settings['jdev']['label'] . '.' . PHP_EOL;
124
        $body .= PHP_EOL;
125
        $body .= 'Votre espace personnel JdevBoarding vous permettra de sélectionner et d\'obtenir les informations nécessaires pour suivre vos sessions.'. PHP_EOL;
126
        $body .= PHP_EOL;
127
        $body .= 'En raison de la pandémie, le format des JDEV de cette édition est adapté : un premier temps fort en distanciel du 6 juillet au 10 juillet 2020.'; 
128
129
130
131
132
133
134
135
        $body .= PHP_EOL;
        $body .= 'Nous vous invitons à consulter les liens suivant pour plus d\'information :'. PHP_EOL;
        $body .= ' - http://devlog.cnrs.fr/jdev2020/inscription#information-relative-%C3%A0-la-crise-sanitaire-du-covid-10' . PHP_EOL;
        $body .= ' - http://devlog.cnrs.fr/jdev2020#agenda' . PHP_EOL;
        $body .= ' - http://devlog.cnrs.fr/jdev2020#l-%C3%A9dition-connect%C3%A9e' . PHP_EOL;
        $body .= PHP_EOL;
        $body .= 'Cette nouvelle modalité vous offrira l’avantage de pouvoir suivre plus largement le programme proposé. ';
        $body .= 'Celui-ci sera étalé temporellement. ' . PHP_EOL;
136
137
        $body .= PHP_EOL;
        $body .= 'Bien cordialement' . PHP_EOL;
138
        $body .= 'Le comité d\'organisation des ' . $this->settings['jdev']['label'];
139

140
141
142
        $message = \Swift_Message::newInstance('Validation paiement inscription ' . $this->settings['jdev']['label'])
            ->setFrom(['noreply@' . $this->settings['jdev']['url'] => $this->settings['jdev']['url']])
            ->setTo([$participant->getEmail(), $this->settings['jdev']['email']])
143
144
145
146
147
            ->setBody($body);
            
        $this->mailer->send($message);
    }
}