source: spip-zone/_plugins_/reservations_multiples/branches/v1/reservations_multiples_pipelines.php @ 118253

Last change on this file since 118253 was 118253, checked in by Rainer Müller, 10 months ago

v1.5.13 - envoyer notification seulement si configuré dans réservations événements.

File size: 12.7 KB
Line 
1<?php
2/**
3 * Utilisations de pipelines par Réservations multiples
4 *
5 * @plugin     Réservations multiples
6 * @copyright  2014-2019
7 * @author     Rainer Müller
8 * @licence    GNU/GPL
9 * @package    SPIP\Reservations_multiples\Pipelines
10 */
11if (!defined('_ECRIRE_INC_VERSION'))
12        return;
13
14/**
15 * Charge les valeurs d'un formulaire
16 *
17 * @pipeline formulaire_charger
18 *
19 * @param array $flux
20 *              Données du pipeline
21 * @return array Données du pipeline
22 *
23 */
24function reservations_multiples_formulaire_charger($flux) {
25        $form = $flux['args']['form'];
26
27        // Le formulaire reservation
28        if ($form == 'reservation') {
29                $config = reservations_multiples_config();
30
31                // Si inscription de plusieurs personnes
32                if ($config['multiple_personnes'] == 'on') {
33                        $nombre_auteurs = intval(_request('nr_auteurs')) ? _request('nr_auteurs') :  0;
34
35                        $i = 1;
36                        while ($i <= $nombre_auteurs) {
37                                $nr = $i++;
38                                $flux['data']['nom_' . $nr] = _request('nom_' . $nr);
39                                $flux['data']['email_' . $nr] = _request('email_' . $nr);
40                                if ($flux['data']['champs_extras_auteurs']) {
41                                        // Adapter les champs extras
42                                        foreach ($flux['data']['champs_extras_auteurs'] as $value) {
43                                                $nom_champ = $value['options']['nom'] . '_' . $nr;
44                                                $flux['data'][$nom_champ] = _request($nom_champ);
45                                        }
46                                }
47                        }
48
49
50                        $flux['data']['id_reservation_source'] = '';
51                        $flux['data']['type_lien'] = '';
52                        $flux['data']['origine_lien'] = '';
53                        $flux['data']['nr_auteurs'] = '';
54                        $flux['data']['multiple_personnes'] = 'on';
55                        $flux['data']['nombre_limite'] = $config['nombre_limite'];
56                        $flux['data']['_hidden'] .= '<input type="hidden" name="multiple_personnes" value="on">';
57                        $flux['data']['_hidden'] .= '<input type="hidden" name="nombre_limite" value="' . $config['nombre_limite'] . '">';
58                }
59        }
60
61        return $flux;
62}
63
64/**
65 * Vérifie les données d'un formulaire
66 *
67 * @pipeline formulaire_verifier
68 *
69 * @param array $flux
70 *              Données du pipeline
71 * @return array Données du pipeline
72 *
73 */
74function reservations_multiples_formulaire_verifier($flux) {
75        $form = $flux['args']['form'];
76        if ($form == 'reservation') {
77                $config = reservations_multiples_config();
78
79                // Si inscription de plusieurs personnes
80                if ($config['multiple_personnes'] == 'on') {
81                        // enlever le message d'erreur en attendand de comnprendre d'ou vient ce message qui se met d'office
82                        unset($flux['data']['message_erreur']);
83
84                if ($nombre = _request('nr_auteurs')) {
85                                include_spip('inc/saisies');
86                                include_spip('cextras_pipelines');
87                                $erreurs = array();
88
89                                if (function_exists('champs_extras_objet')) {
90                                        $champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
91
92                                        // Stocker les valeurs intitiales des champs extras
93                                        foreach ($champs_extras_auteurs as $value) {
94                                                $$value['options']['nom'] = _request($value['options']['nom']);
95                                        }
96                                }
97                                else
98                                        $champs_extras_auteurs = array();
99
100                                        // Vérification des champs additionnels
101                                $i = 1;
102                                while ($i <= $nombre) {
103                                        $nr = $i++;
104
105                                        // les champs de bases obligatoires
106                                        $obligatoires = array(
107                                                'nom_' . $nr,
108                                                'email_' . $nr
109                                        );
110
111                                        // Tester les champs de bases obligatoires
112                                        foreach ($obligatoires as $champ) {
113                                                if (!_request($champ))
114                                                        $erreurs[$champ] = _T("info_obligatoire");
115                                        }
116
117                                        if ($email = _request('email_' . $nr)) {
118                                                include_spip('inc/filtres');
119                                                // la validité du mail
120                                                if (!email_valide($email)) {
121                                                        $erreurs['email_' . $nr] = _T('form_prop_indiquer_email');
122                                                }
123                                        }
124
125                                        // Vérifier les champs extras
126                                        foreach ($champs_extras_auteurs as $value) {
127
128                                                // Adapter les request pour pouvoir faire la vérification des champs extras
129                                                set_request($value['options']['nom'], _request($value['options']['nom'] . '_' . $nr));
130                                                $e = saisies_verifier($champs_extras_auteurs);
131
132                                                // Adapter le nom du champ
133                                                if (is_array($e)) {
134                                                        foreach ($e as $champ => $erreur) {
135                                                                $erreurs[$champ . '_' . $nr] = $erreur;
136                                                        }
137                                                }
138                                        }
139                                }
140
141                                // Remettre les valeurs initiales
142                                foreach ($champs_extras_auteurs as $value) {
143                                        set_request($value['options']['nom'], $$value['options']['nom']);
144                                }
145                                $flux['data'] = array_merge($flux['data'], $erreurs);
146
147                                // remettre le message d'erreur
148                                if (count($flux['data']) > 0)
149                                        $flux['data']['message_erreur'] = _T('reservation:message_erreur');
150                        }
151                }
152        }
153        return $flux;
154}
155
156/**
157 * Traite les formulaires d'un formulaire
158 *
159 * @pipeline formulaire_traiter
160 *
161 * @param array $flux
162 *              Données du pipeline
163 * @return array Données du pipeline
164 *
165 */
166function reservations_multiples_formulaire_traiter($flux) {
167        $form = $flux['args']['form'];
168        if ($form == 'reservation' and $nombre = _request('nr_auteurs')) {
169                $config = reservations_multiples_config();
170
171                // Enregistrement des champs additionnels
172                $enregistrer = charger_fonction('reservation_enregistrer', 'inc');
173
174                // Lister les messages de retour
175                if (function_exists('champs_extras_objet')) {
176                        $champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
177                }
178                else {
179                        $champs_extras_auteurs = array();
180                }
181
182                        // ne pas créer de compte spip
183                set_request('enregistrer', '');
184
185                // inscription aux mailinglistes
186                if (test_plugin_actif('reservations_mailsubscribers')) {
187                        $inscription = charger_fonction('inscription_mailinglinglistes', 'inc');
188                }
189
190                // Ajouter les références à la réservation d'origine
191                set_request('id_reservation_source', $flux['data']['id_reservation']);
192                set_request('type_lien', 'multiple_personnes');
193                set_request('origine_lien', 'reservations_multiples');
194
195
196                // Enregistrer les réservations
197                $message_original = $flux['data']['message_ok'];
198                $message_ok = array();
199                $i = 1;
200                while ($i <= $nombre) {
201                        set_request('gratuit', FALSE);
202                        // recupérer les champs par défaut
203                        $nr = $i++;
204                        $email = _request('email_' . $nr);
205                        set_request('nom', _request('nom_' . $nr));
206                        set_request('email', $email);
207                        set_request('id_auteur', '');
208                        $nom = _request('nom');
209
210                        // Vérifier les champs extras
211                        foreach ($champs_extras_auteurs as $value) {
212
213                                // récupérer les champs extras
214                                set_request($value['options']['nom'], _request($value['options']['nom'] . '_' . $nr));
215                        }
216
217                        set_request('nr_auteur', $nr);
218
219                        // Enregistrer
220                        $flux['data']['multiple_personne'][$i] = $enregistrer('', '', '', $champs_extras_auteurs);
221                        $id_reservation = $flux['data']['id_reservation'];
222                        preg_match('/<table(.*?)<\/table>/s', $flux['data']['message_ok'], $match);
223                        $message = "<strong>$nom</strong>" . $match['0'];
224                        $nr = 0;
225
226                        // Inscription aux mailinglistes
227                        if (test_plugin_actif('reservations_mailsubscribers')) {
228                                $inscription($email);
229                        }
230
231                        // Envoyer une notification.
232                        if(test_plugin_actif('reservation_bank') &&
233                                        $notifications = charger_fonction('notifications', 'inc', true) AND
234                                        !_request('gratuit')) {
235                                include_spip('inc/config');
236                                $config_reservation_evenement = lire_config('reservation_evenement');
237                                if (isset($config_reservation_evenement['activer'])) {
238                                        $preceder_formulaire = lire_config('reservation_bank/preceder_formulaire');
239                                        $id_transaction = rb_inserer_transaction($id_reservation);
240                                        $quand = isset($config['quand']) ? $config['quand'] : array();
241
242                                        $row = sql_fetsel('statut,date,id_auteur,email,lang,donnees_auteur', 'spip_reservations', 'id_reservation=' . intval($id_reservation));
243                                        $statut = $row['statut'];
244
245                                        //Déterminer la langue pour les notifications
246                                        $lang = isset($row['lang']) ? $row['lang'] : lire_config('langue_site');
247                                        lang_select($lang);
248
249                                        // Determiner l'expediteur
250                                        $options = array(
251                                        'statut' => $statut,
252                                        'lang' => $lang
253                                        );
254                                        if ($config_reservation_evenement['expediteur'] != "facteur") {
255                                                $options['expediteur'] = $config_reservation_evenement['expediteur_' . $config_reservation_evenement['expediteur']];
256                                        }
257
258
259                                        // Envoyer au vendeur et au client
260                                        if ($config_reservation_evenement['client'] && !in_array($statut, $quand)) {
261                                                if (intval($row['id_auteur']) AND $row['id_auteur'] > 0) {
262                                                        $options['email'] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . $row['id_auteur']);
263                                                }
264                                                else {
265                                                        $options['email'] = $row['email'];
266                                                }
267
268                                                $notifications('reservation_client', $id_reservation, $options);
269
270                                                $lien_paiement = recuperer_fond('inclure/lien_payer', array('id_transaction'=> $id_transaction));
271                                                if ($preceder_formulaire) {
272                                                        $message = $lien_paiement . $message;
273                                                }
274                                                else {
275                                                        $message .= $lien_paiement;
276                                                }
277                                        }
278                                }
279                        }
280                        $message_ok[] = $message;
281                }
282                // Recopiler le messages de retour
283                $m = '';
284                if (count($message_ok) > 0 and $count = count($message_ok)) {
285                        if ($count == 1) {
286                                $titre = _T('reservations_multiples:reservation_supplementaire');
287                        }
288                        else {
289                                $titre = _T('reservations_multiples:reservations_supplementaires');
290                        }
291                        $m = '<div class="reservations_supplementaires"><h3>' . $titre . '</h3>';
292                        foreach ($message_ok as $message) {
293                                $m .= $message;
294                                $nr++;
295                        }
296                        $m .= '</div>';
297                }
298
299                $flux['data']['message_ok'] = $message_original . $m;
300
301        }
302        return $flux;
303}
304
305/**
306 * Intervient sur un squelette
307 *
308 * @pipeline recuperer_fond
309 *
310 * @param array $flux
311 *              Données du pipeline
312 * @return array Données du pipeline
313 *
314 */
315function reservations_multiples_recuperer_fond($flux) {
316        $fond = $flux['args']['fond'];
317        $contexte = $flux['data']['contexte'];
318
319        // Insert le choix de clients multiples.
320        if ($fond == 'formulaires/inc-reservation_connection') {
321                $config = reservations_multiples_config();
322
323                if ($contexte['multiple_personnes'] == 'on') {
324
325                        $auteurs_multiples = recuperer_fond('inclure/auteurs_multiples', array(
326                                'nr_auteurs' => $contexte['nr_auteurs'],
327                                'champs_extras_auteurs' => $contexte['champs_extras_auteurs']
328
329                        ), array(
330                                'ajax' => 'auteurs_multiples'
331                        ));
332                        $flux['data']['texte'] .= $auteurs_multiples;
333                }
334        }
335
336        // Insert le champ de nombre d'un nombre multiple.
337        if ($fond == 'formulaires/inc-reservation_evenements_champ' or $fond == 'formulaires/inc-reservation_evenements_declinaisons_prix') {
338                $config = reservations_multiples_config();
339
340                if ($config['multiple_inscriptions'] == 'on') {
341                        if ($fond == 'formulaires/inc-reservation_evenements_champ') {
342                                $flux['data']['texte'] .= recuperer_fond('inclure/nombre_multiples', $contexte);
343                        }
344                        else {
345                                $flux['data']['texte'] .= recuperer_fond('inclure/nombre_multiples_declinaisons', $contexte);
346                        }
347                }
348        }
349
350        if($fond == 'inclure/reservation' and $contexte['statut'] == 'encours' and test_plugin_actif('reservation_bank')) {
351                include_spip('inc/filtres_mini');
352                $id_transaction = rb_inserer_transaction($contexte['id_reservation']);
353                $lien_paiement = liens_absolus(recuperer_fond('inclure/lien_payer', array('id_transaction'=> $id_transaction)));
354                $flux['data']['texte'] .= $lien_paiement;
355        }
356
357        if ($fond == 'content/paiement_reservation') {
358                $texte = recuperer_fond('inclure/recapitulatif_personnes_multiples', $contexte);
359                $flux['data']['texte'] = str_replace('</table></div>', '</table>' . $texte . '</div>', $flux['data']['texte']);
360        }
361
362        return $flux;
363}
364
365/**
366 * Insère des donnés dans le head public
367 *
368 * @pipeline insert_head
369 *
370 * @param array $flux
371 *              Données du pipeline
372 * @return array Données du pipeline
373 *
374 */
375function reservations_multiples_insert_head($flux) {
376        $script = find_in_path('scripts/reservations_multiples.js');
377        $css = find_in_path('css/reservations_multiples.css');
378        $flux .= "<link rel='stylesheet' type='text/css' media='all' href='$css' />\n" . "<script type='text/javascript' src='$script'> </script>";
379
380        return $flux;
381}
382
383/**
384 * Intervient après l'enregistrement
385 *
386 * @pipeline post_insertion
387 *
388 * @param array $flux
389 *              Données du pipeline
390 * @return array Données du pipeline
391 *
392 */
393function reservations_multiples_post_insertion($flux) {
394        if ($flux['args']['table'] == 'spip_reservations' and _request('nombre_auteurs')) {
395                $id_reservation = $flux['args']['id_objet'];
396                // premier enregisté, on met l'id_reservation_source
397                if (!_request('nr_auteur') > 0) {
398                        set_request('id_reservation_base', $id_reservation);
399                }
400                // Puis on recorrige l'id_reservation dans la session
401                else {
402                        $id_reservation_source = _request('id_reservation_base');
403                        set_request('id_reservation_source', $id_reservation_source);
404                }
405        }
406
407        return $flux;
408}
409
410/**
411 * Ajouter les configurations dans celle de réservation événements.
412 *
413 * @pipeline reservation_evenement_objets_configuration
414 *
415 * @param array $flux
416 *              Données du pipeline
417 * @return array Données du pipeline
418 */
419function reservations_multiples_reservation_evenement_objets_configuration($flux) {
420
421        $objets = array(
422                'reservations_multiples' => array(
423                        'label' => _T('reservations_multiples:reservations_multiples_titre'),
424                ),
425        );
426
427        $flux['data'] = array_merge($flux['data'], $objets);
428
429        return $flux;
430}
Note: See TracBrowser for help on using the repository browser.