perso.php 25 KB
Newer Older
1
<?php
2
namespace Controller;
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

use LQDN\Command\AddressCreateCommand;
use LQDN\Command\AddressDeleteCommand;
use LQDN\Command\AddressUpdateCommand;

class Perso extends Controller
{
    /*
    Page principale de l'administration personnelle
     */
    public function beforeRoute($f3, $args)
    {
        parent::beforeRoute($f3, $args);
        $f3->clear('SESSION.form_visible');
    }

    public function show($f3, $args)
    {
        if (!$f3->exists('SESSION.user')) {
            $f3->reroute('/login');
        }
        $this->get_infos($f3, $args);
        $this->get_contreparties($f3);
        $this->get_dons($f3);
        $this->get_recurrents($f3);
        $f3->set('block_content', 'user/perso.html');
    }

    public function get_infos($f3, $args)
    {
        // Chargement des informations de l'utilisateur
        $db = $f3->get('DB');
        // Let's update the total first
        $total = 0;
        $total_res = $db->query("SELECT SUM(somme) as total FROM dons WHERE status in (1, 4, 101, 102) AND user_id='".$f3->get('SESSION.id')."'");
38
        $total_res = $total_res->fetch(\PDO::FETCH_ASSOC);
39
40
41
42
43
        $total = $total_res['total'];
        // While we're at it, let's remove the price of each asked contreparties
        // printed piplome is 30, pibag is 50, pishirt is 100 and hoodie is 250
        // We first need to have the number of each counterpart claimed by the
        // user
44
45
46
47
        $cumul_counterpart = $db->query("SELECT sum(if(quoi='piplome', 1, 0)) as piplomes,
            sum(if(quoi='pibag', 1, 0)) as pibags,
            sum(if(quoi='pishirt', 1, 0)) as pishirts,
            sum(if(quoi='hoodie', 1, 0)) as hoodies
48
49
            FROM contreparties
            WHERE user_id = '".$f3->get('SESSION.id')."';");
50
        $cumul_counterpart = $cumul_counterpart->fetch(\PDO::FETCH_ASSOC);
51
52
53
54
55
56
57
58
59
60
61
        foreach (['hoodies', 'pishirts', 'pibags', 'piplomes'] as $key) {
            if (!array_key_exists($key, $cumul_counterpart)) {
                $cumul_counterpart[$key] = 0;
            }
        }
        $cumul = $cumul_counterpart['hoodies'] * 250 + max(($cumul_counterpart['pishirts'] - $cumul_counterpart['hoodies']), 0) * 100 + max(($cumul_counterpart['pibags'] - $cumul_counterpart['pishirts'] - $cumul_counterpart['hoodies']), 0) * 50 + max(($cumul_counterpart['piplomes'] - $cumul_counterpart['pibags'] - $cumul_counterpart['pishirts'] - $cumul_counterpart['hoodies']), 0) * 30;

        $cumul = $total - $cumul;

        $db->query("UPDATE users SET total = '".$total."', cumul = '".$cumul."' WHERE id = '".$f3->get('SESSION.id')."'");
        $result = $db->query("SELECT id, pseudo, email, total, cumul FROM users WHERE id='".$f3->get('SESSION.id')."' ");
62
        $data = $result->fetch(\PDO::FETCH_ASSOC);
63
64
65
        $f3->set('infos', $data);
        $result = $db->query("SELECT id, pdf, decimale FROM dons WHERE user_id='".$data['id']."' and pdf!='' ");
        $pdfs = array();
66
        foreach ($result->fetchAll(\PDO::FETCH_ASSOC) as $row) {
67
68
69
70
71
72
73
74
75
76
77
78
79
            $pdfs[$row['pdf']] = $row;
        }
        $addresses = $f3->get('container')['address_finder']->findByUserId((int) $data['id']);
        $f3->set('adresses', $addresses);
        $f3->set('pdfs', $pdfs);
    }

    public function get_contreparties($f3)
    {
        // Chargement des contreparties de l'utilisateur
        $db = $f3->get('DB');
        $result =$db->query("SELECT datec, status, quoi, taille, adresse_id FROM contreparties WHERE user_id='".$f3->get('SESSION.id')."' ORDER BY datec DESC");
        $data = array();
80
        foreach ($result->fetchAll(\PDO::FETCH_ASSOC) as $row) {
81
82
83
84
85
86
87
88
89
90
91
            $data[] = $row;
        }
        $f3->set('contreparties', $data);
    }

    public function get_dons($f3)
    {
        // Chargement des dons de l'utilisateur
        $db = $f3->get('DB');
        $result = $db->query("SELECT datec, somme, id, pdf, status FROM dons WHERE user_id='".$f3->get('infos.id')."' AND status IN (1,4,102) ORDER BY datec ASC");
        $data = array();
92
        foreach ($result->fetchAll(\PDO::FETCH_ASSOC) as $row) {
93
94
95
96
97
98
99
100
101
102
103
            $data[] = $row;
        }
        $f3->set('dons', $data);
    }

    public function get_recurrents($f3)
    {
        // Chargement des abonnements de l'utilisateur
        $db = $f3->get('DB');
        $result = $db->query("SELECT datec, somme, status, id, pdf, identifier FROM dons WHERE user_id='".$f3->get('infos.id')."' AND status IN (101) ORDER BY datec ASC");
        $data = array();
104
        foreach ($result->fetchAll(\PDO::FETCH_ASSOC) as $row) {
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
            $data[] = $row;
        }
        $f3->set('dons_recurrents', $data);
    }

    public function login($f3, $args)
    {
        $f3->clear('SESSION.error');
        $f3->set('form_visible', 'login');

        if ($f3->get('action')=='renew_password') {
            // Renouvellement de mot de passe
            $f3->clear('form_visible');
            $this->renew_password($f3);
            $f3->reroute('/');
        } elseif ($f3->get('action')=='create_account') {
            // Création d'un compte utilisateur
            $f3->clear('form_visible');
            $this->create_user($f3);
        } elseif ($f3->get('email')) {
            // Tentative de connexion
            // We should use auth module from Fat Free
            $db = $f3->get('DB');
128
            $mapper = new \DB\SQL\Mapper($f3->get('DB'), 'users');
129
            $auth = new \Auth($mapper, array('id' => 'email', 'pw' => 'hash'));
130
            $email = \Utils::asl($f3->get('email'));
131
132
133
134
135
136
137
            $hash = hash('sha256', $f3->get('password'));
            $login = $auth->login($email, $hash);

            // As we're login with email, not for id, we need to get it
            if ($login) {
                // We want to retrieve the associated user
                $result = $db->query("SELECT id, email FROM users WHERE email='".$email."'");
138
139
                $id = $result->fetch(\PDO::FETCH_ASSOC)['id'];
                $email = $result->fetch(\PDO::FETCH_ASSOC)['email'];
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
                $f3->set('SESSION.id', $id);
                $f3->set('SESSION.email', $email);
                $f3->set('SESSION.user', true);
                $f3->clear('form_visible');
                $f3->set('block_content', 'user/perso.html');
            } else {
                $f3->set('SESSION.error', _("Mauvais identifiant ou mot de passe."));
                Campaign::show($f3, $args);
                return;
            }
        } else {
            $f3->set('SESSION.error', _("Merci de renseigner une adresse mail."));
            Campaign::show($f3, $args);
            return;
        }
        Campaign::show($f3, $args);
    }

    public function logout($f3, $args)
    {
        $f3->clear('SESSION');
        $f3->reroute('/');
    }

    public function renew_password($f3)
    {
        if ($f3->get('email')!='') {
            // On vérifie que l'adresse mail existe
            $db = $f3->get('DB');
169
170
            $result = $db->query("SELECT email FROM users WHERE email='".\Utils::asl($f3->get('email'))."';");
            $row = $result->fetch(\PDO::FETCH_ASSOC);
171
172
            if ($row['email']!='') {
                // On régénère un mot de passe
173
                $pass = \Utils::generate_password();
174
175
176
                // On ne conserve que le mot de passe haché
                $hash = hash('sha256', $pass);
                // On le sauve en base de données
177
                $query = "UPDATE users SET hash='".$hash."' WHERE email='".\Utils::asl($f3->get('email'))."';";
178
179
180
181
                $db->query($query);

                // On le renvoie par email
                // On utilise le système SMTP de fat free
Guinness's avatar
Guinness committed
182
                $mailer = new \SMTP(SMTP_HOST, SMTP_PORT, SMTP_SECURITY, SMTP_USER, SMTP_PW);
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
                $mailer->set('From', $f3->get('mail.from'));
                $mailer->set('To', $f3->get('email'));
                $mailer->set('Subject', _("Renouvellement de mot de passe"));

                $mailer->set('FromName', $f3->get('mail.fromName'));
                $mailer->set('CharSet', "UTF-8");

                // Préparation du texte du mail par morceaux
                $text = _("Bonjour,

                    Un nouveau mot de passe vient de vous être attribuer pour pouvoir vous connecter à votre page d'administration pour choisir vos contreparties, et nous indiquer vos coordonnées :
                    %%URL_ADMIN%%
                    Identifiant : votre adresse email
                    Mot de passe : %%PASSWORD%%

                    Encore merci pour votre soutien,
                    Toute l'équipe de La Quadrature du Net
                    ")."\n\n";
                // Création de l'url d'administration
                $admin_url = "https://support.laquadrature.net/perso";
                foreach ($f3->get('languages') as $key => $language) {
                    if ($f3->get('lang')==$language[1]) {
                        $admin_url = "https://".$language[0].$f3->get('dev').".laquadrature.net/perso";
                    }
                }
                // Remplacement des variables par leurs valeurs
                $fields = array(
                    "PASSWORD" => $pass,
                    "URL_ADMIN" => $admin_url
                );
                foreach ($fields as $k=>$v) {
                    $text = str_replace("%%".$k."%%", $v, $text);
                }
                if ($mailer->send($text)) {
                    $f3->set('SESSION.message', _("Nouveau mot de passe envoyé par mail."));
                } else {
219
                    $logger = new \Log('mail.log');
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
                    $f3->set('SESSION.error', _('Oops'));
                    $logger->write($mailer->log());
                }
            } else {
                $f3->set('SESSION.error', _("Vous n'avez pas encore de compte, merci de faire un don pour cela."));
            }
        } else {
            $f3->set('SESSION.error', _("Merci de renseigner une adresse mail."));
        }
    }

    public function create_user($f3)
    {
        if ($f3->get('email')!='') {
            // On vérifie que l'adresse mail n'existe pas
            $db = $f3->get('DB');
            $query = $db->query("SELECT email FROM users WHERE email='".$f3->get('email')."';");
237
            $result = $query->fetch(\PDO::FETCH_ASSOC);
238
239
240
241
242
243
            $cumul = 0;
            if ($result['email']!=$f3->get('email')) {
                $hash = hash('sha256', $f3->get('password'));
                // On recherche le montant cumulé jusqu'à présent. On fait la somme depuis le
                // premier janvier 2013 en se basant sur l'adresse mail
                $res = $db->query("SELECT sum(dons.somme) as somme FROM dons INNER JOIN users WHERE dons.user_id = users.id AND users.email='".$f3->get('email')."' and dons.status in (1, 4, 102) and dons.datec>'2013-01-01';");
244
                $total = $res->fetch(\PDO::FETCH_ASSOC);
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
                $total = $total['somme'];
                // Création de l'utilisateur
                $query = "INSERT INTO users (email, hash, total, cumul) VALUES ('".$f3->get('email')."', '".$hash."', '".$total."', 0);";
                $res = $db->exec($query);
                $f3->set('SESSION.error', $query);
            } else {
                $f3->set('SESSION.error', _("Vous avez déjà un compte associé à cette adresse mail, merci de demander un nouveau mot de passe."));
            }
        } else {
            $f3->set('SESSION.error', _("Merci de renseigner une adresse mail."));
        }
    }

    public function infos($f3, $args)
    {
        $db = $f3->get('DB');

        if ($f3->exists('SESSION.id')) {
            // Let's firts check that both the password match
            if ($f3->get('password') != $f3->get('password_confirmation')) {
                $f3->set('SESSION.error', 'Passwords mismatch');
            } else {
267
268
                $sql = "UPDATE users SET email='".\Utils::asl($f3->get('email'))."',
                    pseudo='".\Utils::asl($f3->get('pseudo'))."'";
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
                if ($f3->get('password') != '') {
                    $hash = hash('sha256', $f3->get('password'));
                    $sql .= ", hash='".$hash."'";
                }
                $sql .= " WHERE id='".$f3->get('SESSION.id')."'";
                $db->query($sql);
            }
        } else {
            $f3->error(401);
        }
        $f3->set('SESSION.msg', _('Informations personnelles modifiées.'));
        $this->show($f3, $args);
    }

    public function adresses($f3, $args)
    {
        if (!$f3->exists('SESSION.id')) {
            $f3->error('401');
        }

        // Let's get the email adress of the user
        switch ($f3->get('action')) {
        case 'ADD':
            try {
                $f3->get('container')['command_handler']->handle(
                    new AddressCreateCommand(
295
296
297
298
299
300
301
302
303
                        \Utils::asl($f3->get('SESSION.id')),
                        \Utils::asl($f3->get('nom')),
                        \Utils::asl($f3->get('alias')),
                        \Utils::asl($f3->get('adresse')),
                        \Utils::asl($f3->get('adresse2')),
                        \Utils::asl($f3->get('codepostal')),
                        \Utils::asl($f3->get('ville')),
                        \Utils::asl($f3->get('pays')),
                        \Utils::asl($f3->get('state')),
304
305
306
307
308
309
310
311
312
313
314
                        $f3->exists('defaut')
                    )
                );
            } catch (AddressAlreadyExistsException $e) {
                $f3->set("error", _("Cette adresse existe déjà."));
                $f3->error('403');
            }
            break;
        case 'UPDATE':
            $f3->get('container')['command_handler']->handle(
                new AddressUpdateCommand(
315
316
317
318
319
320
321
322
323
                    \Utils::asl($f3->get('id')),
                    \Utils::asl($f3->get('SESSION.id')),
                    \Utils::asl($f3->get('alias')),
                    \Utils::asl($f3->get('adresse')),
                    \Utils::asl($f3->get('adresse2')),
                    \Utils::asl($f3->get('codepostal')),
                    \Utils::asl($f3->get('ville')),
                    \Utils::asl($f3->get('pays')),
                    \Utils::asl($f3->get('state')),
324
325
326
327
328
329
330
331
                    $f3->exists('defaut')
                )
            );
            break;
        case 'DELETE':
            try {
                $f3->get('container')['command_handler']->handle(
                    new AddressDeleteCommand(
332
333
                        \Utils::asl($f3->get('id')),
                        \Utils::asl($f3->get('SESSION.id'))
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
                    )
                );
            } catch (AddressUsedException $e) {
                $f3->set("error", _("Cette adresse est utilisée et il vous n'avez pas définit d'adresse par défault."));
                $f3->error('403');
            };
            break;
        }
        $f3->reroute('/perso');
    }

    public function add_contrepartie($f3, $args)
    {
        if (!$f3->exists('SESSION.user')) {
            $f3->error('401');
        }
        // Récupération du cumul actuel de l'utilisateur
        $db = $f3->get('DB');
        $result = $db->query("SELECT cumul FROM users WHERE id='".$f3->get('SESSION.id')."' ");
353
        $me = $result->fetch(\PDO::FETCH_ASSOC);
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
        $cumul = $me['cumul'];

        // Récupération des valeurs du formulaire
        $adresse_id = $f3->get('adresse_id');
        $quoi = $f3->get('quoi');
        $valeur = 0;
        $piplome_id = intval(substr($f3->get('piplome_id'), 0, strpos($f3->get('piplome_id'), '_')));
        $taille = intval($f3->get('taille'));
        $taille_h = intval($f3->get('taille_h'));
        $f3->clear('SESSION.error');
        switch ($quoi) {
        case 'piplome':
            $valeur = 30;
            break;
        case 'pibag':
            $valeur = 50;
            break;
        case 'pishirt':
            $valeur = 100;
            break;
        case 'hoopie':
            $valeur = 250;
            break;
        }

        // Ajout d'une demande de contrepartie pour chaque contrepartie
        if ($cumul >= $valeur) {
            switch ($quoi) {
            case 'piplome':
383
                $db->query("INSERT INTO contreparties (user_id,datec,quoi,taille,adresse_id,status) VALUES ('".$f3->get('SESSION.id')."',NOW(),'piplome','".\Utils::asl($piplome_id)."','".\Utils::asl($adresse_id)."',1)");
384
385
                break;
            case 'pibag':
386
                $db->query("INSERT INTO contreparties (user_id,datec,quoi,taille,adresse_id,status) VALUES ('".$f3->get('SESSION.id')."',NOW(),'pibag','','".\Utils::asl($adresse_id)."',1)");
387
388
                break;
            case 'pishirt':
389
                $db->query("INSERT INTO contreparties (user_id,datec,quoi,taille,adresse_id,status) VALUES ('".$f3->get('SESSION.id')."',NOW(),'pishirt','".\Utils::asl($taille)."','".\Utils::asl($adresse_id)."',1)");
390
391
                break;
            case 'hoopie':
392
                $db->query("INSERT INTO contreparties (user_id,datec,quoi,taille,adresse_id,status) VALUES ('".$f3->get('SESSION.id')."',NOW(),'hoodie','".\Utils::asl($taille_h)."','".\Utils::asl($adresse_id)."',1)");
393
394
395
396
397
398
399
400
401
402
403
404
405
406
            }
        }
        // Puis diminution du cumul de la valeur des contreparties
        $db->query("UPDATE users SET cumul = cumul - ".$valeur." WHERE id='".$f3->get('SESSION.id')."'");
        $f3->set('msg', _("Merci, vos contreparties seront envoyées dès que possible&nbsp;!"));
        $this->show($f3, $args);
    }

    public function receipt($f3, $params)
    {
        if (!$f3->exists('SESSION.user')) {
            $f3->reroute('/login');
        }
        // Variables utiles
407
        $logger = new \Log('receipt.log');
408
409
410
        $db = $f3->get('DB');
        $id = $params['id'];
        $command = "pdftk ";
411
        $args = " ../www/receipt.pdf fill_form ../tmp/".$id.".xfdf output ../tmp/".$id.".pdf flatten dont_ask";
412
413
414
415
416
417
418
419
420
421
422
423
424
425
        $logger->write($command . " " .$args);

        // Vérification que le don appartient bien à l'utilisateur connecté
        $query="SELECT dons.datec, 
			dons.somme, 
			adresses.nom as pseudo, 
			adresses.adresse, 
			adresses.adresse2, 
			adresses.codepostal, 
			adresses.ville,
			adresses.pays
			FROM dons 
			INNER JOIN users ON users.id = dons.user_id 
			LEFT OUTER JOIN adresses ON adresses.user_id = users.id
426
			WHERE users.id=".$f3->get('SESSION.id')." AND adresses.defaut IS true AND dons.id=".\Utils::asl($id).";";
427
428
        $result = $db->query($query);
        $logger->write($query);
429
        $don = $result->fetch(\PDO::FETCH_ASSOC);
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
        if (!$don) {
            $f3->reroute("/perso");
        }

        // Création du fichier datas
        $name = $don['pseudo'];
        $address = $name;
        if ($don['adresse']!='') {
            $address .= "\n" . $don['adresse'];
            $address .= "\n" . $don['adresse2'];
            $address .= "\n" . $don['codepostal'] . " " . $don['ville'];
        }
        $amount = $don['somme'];
        $monthes = array(
            '01'=>_('Janvier'),
            '02'=>_('Février'),
            '03'=>_('Mars'),
            '04'=>_('Avril'),
            '05'=>_('Mai'),
            '06'=>_('Juin'),
            '07'=>_('Juillet'),
            '08'=>_('Août'),
            '09'=>_('Septembre'),
            '10'=>_('Octobre'),
            '11'=>_('Novembre'),
            '12'=>_('Décembre')
        );
        $date = substr($don['datec'], 8, 2)." ".$monthes[substr($don['datec'], 5, 2)]." ".substr($don['datec'], 0, 4);
        $content = '<?xml version="1.0" encoding="UTF-8"?>
			<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
			<fields>
			<field name="address">
			<value>'.$address.'</value>
			</field>
			<field name="donor">
			<value>'.$name.'</value>
			</field>
			<field name="content">
			<value>Reçu le '.$date.' un don de '.$amount.' euros de la part de '.$name.'.</value>
			</field>
			<field name="date">
			<value>Fait à Paris le '.$date.'</value>
			</field>
			</fields>
			</xfdf>';
475
        $fp = fopen("../tmp/".$id.".xfdf", "w");
476
477
478
479
480
481
482
483
484
485
        if ($fp) {
            fputs($fp, $content);
            fclose($fp);
        }

        // Création du reçu
        $output = array();
        exec($command.$args, $output);

        // Suppression du fichier datas
486
        unlink("../tmp/".$id.".xfdf");
487
488

        // Renvoi du fichier pdf au client
489
        $fp = fopen("../tmp/".$id.".pdf", "rb");
490
        if ($fp) {
491
            $fsize = filesize("../tmp/".$id.".pdf");
492
493
494
495
496
497
498
499
500
501
502
503
504
            header("Content-Type: application/pdf");
            header("Content-Disposition: attachment; filename=\"".$id.".pdf\"");
            header("Content-Length: $fsize");
            while (!feof($fp)) {
                $buffer = fread($fp, 2048);
                echo $buffer;
            }
            fclose($fp);
        } else {
            $f3->reroute('/perso');
        }

        // Suppression du fichier reçu
505
        unlink("../tmp/".$id.".pdf");
506
507
508
509
510
511
512
        die();
    }

    public function cancel($f3, $params)
    {
        $db = $f3->get('DB');
        $result = $db->query("SELECT identifier, user_id from identifiers where identifier like '".$params['id']."'");
513
        $result = $result->fetch(\PDO::FETCH_ASSOC);
514
515
516
517
518
519
520
        if ($result) {
            $identifier = $result['identifier'];
            $user_id = $result['user_id'];
        } else {
            $f3->reroute('/perso');
        }
        // Commande customerCancel
521
        $date = new \DateTime('now', new \DateTimeZone("UTC"));
522
523
524
525
526
527
528
529
530
531
532
533
534
535
        $parameters = array(
            "shopId"    => SITE_ID,
            "cardIdent" => $identifier,
            "date"      => $date->format("Ymd"),
            "ctxMode"   => CTX_MODE,
        );
        // Calcul de la signature
        $signature = "";
        foreach ($params as $key=>$value) {
            $signature .= $value."+";
        }
        $signature .= CERTIFICATE;
        $signature = sha1($signature);
        $parameters["wsSignature"] = $signature;
536
        $client = new \SoapClient("https://paiement.systempay.fr/vads-ws/ident-v2.1?wsdl");
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
        $result = $client->customerCancel($parameters);
        // Let's add a 103 don at 0€ to keep track of them
        $f3->query("INSERT INTO dons SET
			status = '103',
			datec = NOW(),
			somme = 0,
			user_id = '".$user_id."',
			identifier = '".$identifier."',
			cumul = 0;");
        $f3->reroute('/perso');
    }

    public function renew($f3, $params)
    {
        // TODO: à écrire, finaliser, tester, mettre en prod :o)
/*
    // Variables utiles
    $id = $params['id'];

    // Cas S2 de mise à jour des infos de la CB
    $target = "https://paiement.systempay.fr/vads-payment/";
558
    $transaction_date = new \DateTime('now', new \DateTimeZone("UTC"));
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
    $params = array(
        // Champs obligatoires
        "vads_trans_date" => $transaction_date->format("YmdHis"),
        "vads_site_id" => SITE_ID,
        "vads_action_mode" => "INTERACTIVE",
        "vads_ctx_mode" => CTX_MODE,
        // Autres codes possibles (page 16)
        "vads_trans_id" => str_repeat("0",6-strlen($id)).$id,
        "vads_version" => "V2",
        // Champs facultatifs
        "vads_language" => $f3->get('lang'),
        "vads_order_id" => $id,
        "vads_url_cancel" => ROOTURL,
        "vads_url_check" => "",
        "vads_url_error" => ROOTURL,
        "vads_url_referral" => ROOTURL,
        "vads_url_refused" => ROOTURL,
        "vads_url_return" => ROOTURL,
        "vads_url_success" => ROOTURL,
        "vads_validation_mode" => "0",
        "vads_shop_name" => "La Quadrature du Net",
        "vads_shop_url" => ROOTURL
    );
    if ($f3->get('monthly')) {
        // En cas de paiement récurrent, on doit créer un compte carte si ce n'est pas déjà fait
        $result = mysql_fetch_array(mysql_query("SELECT identifier from users where email='".$email."'"));
        $identifier = "";
        if ($result) {
        $identifier = $result['identifier'];
        }
        if ($identifier=="") {
        // Si l'utilisateur n'existe pas déjà, on lui crée un identifiant
        $identifier = $id . "_" . substr($email,0,strpos($email,'@'));
        $params["vads_identifier"] = substr($identifier, 0, 50); // Pas plus de 50 caractères
        $params["vads_page_action"] = "REGISTER_SUBSCRIBE";
        $params["vads_cust_email"] = $email; // Email du porteur
        } else {
        // Sinon, on instaure juste une récurrence en utilisant l'identifiant déjà connu
        $params["vads_page_action"] = "SUBSCRIBE";
        $params["vads_identifier"] = $identifier;
        }
        $params["vads_sub_effect_date"] = date("Ymd"); // Date d'effet à ce jour
        $params["vads_sub_amount"] = $f3->get('sum')*100;
        $params["vads_sub_currency"] = "978";
        $params["vads_sub_desc"] = "RRULE:FREQ=MONTHLY;BYMONTHDAY=7"; // Tous les 7 du mois
    } else {
        // En cas de paiement ponctuel, le montant est donné différemment
        $params["vads_page_action"] = "PAYMENT";
        $params["vads_amount"] = $f3->get('sum')*100;
        $params["vads_currency"] = "978";
        $params["vads_payment_config"] = "SINGLE";
    }
    // Calcul de la signature
    ksort($params);
    $signature = "";
    foreach ($params as $key=>$value) {
        $signature .= $value."+";
    }
    $signature .= CERTIFICATE;
    $signature = sha1($signature);

    $f3->set('target', $target);
    $f3->set('params', $params);
    $f3->set('signature', $signature);
 */
    }
};