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

Last change on this file since 111909 was 111909, checked in by abelass@…, 22 months ago

v 1.5.11 Corrections bugs:

  • multiple inscriptions avec déclinaisons, un input quantité par id_prix_source (merci Camille)
  • montrer et cacher les les bon champs
  • Bonne valeur par défaut dans la config
File size: 12.6 KB
Line 
1<?php
2/**
3 * Utilisations de pipelines par Réservations multiples
4 *
5 * @plugin     Réservations multiples
6 * @copyright  2014-2018
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                                $preceder_formulaire = lire_config('reservation_bank/preceder_formulaire');
238                                $id_transaction = rb_inserer_transaction($id_reservation);
239                                $quand = isset($config['quand']) ? $config['quand'] : array();
240
241                                $row = sql_fetsel('statut,date,id_auteur,email,lang,donnees_auteur', 'spip_reservations', 'id_reservation=' . intval($id_reservation));
242                                $statut = $row['statut'];
243
244                                //Déterminer la langue pour les notifications
245                                $lang = isset($row['lang']) ? $row['lang'] : lire_config('langue_site');
246                                lang_select($lang);
247
248                                // Determiner l'expediteur
249                                $options = array(
250                                'statut' => $statut,
251                                'lang' => $lang
252                                );
253                                if ($config_reservation_evenement['expediteur'] != "facteur") {
254                                        $options['expediteur'] = $config_reservation_evenement['expediteur_' . $config_reservation_evenement['expediteur']];
255                                }
256
257
258                                // Envoyer au vendeur et au client
259                                if ($config_reservation_evenement['client'] && !in_array($statut, $quand)) {
260                                        if (intval($row['id_auteur']) AND $row['id_auteur'] > 0) {
261                                                $options['email'] = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . $row['id_auteur']);
262                                        }
263                                        else {
264                                                $options['email'] = $row['email'];
265                                        }
266
267                                        $notifications('reservation_client', $id_reservation, $options);
268
269                                        $lien_paiement = recuperer_fond('inclure/lien_payer', array('id_transaction'=> $id_transaction));
270                                        if ($preceder_formulaire) {
271                                                $message = $lien_paiement . $message;
272                                        }
273                                        else {
274                                                $message .= $lien_paiement;
275                                        }
276                                }
277                        }
278                        $message_ok[] = $message;
279                }
280                // Recopiler le messages de retour
281                $m = '';
282                if (count($message_ok) > 0 and $count = count($message_ok)) {
283                        if ($count == 1) {
284                                $titre = _T('reservations_multiples:reservation_supplementaire');
285                        }
286                        else {
287                                $titre = _T('reservations_multiples:reservations_supplementaires');
288                        }
289                        $m = '<div class="reservations_supplementaires"><h3>' . $titre . '</h3>';
290                        foreach ($message_ok as $message) {
291                                $m .= $message;
292                                $nr++;
293                        }
294                        $m .= '</div>';
295                }
296
297                $flux['data']['message_ok'] = $message_original . $m;
298
299        }
300        return $flux;
301}
302
303/**
304 * Intervient sur un squelette
305 *
306 * @pipeline recuperer_fond
307 *
308 * @param array $flux
309 *              Données du pipeline
310 * @return array Données du pipeline
311 *
312 */
313function reservations_multiples_recuperer_fond($flux) {
314        $fond = $flux['args']['fond'];
315        $contexte = $flux['data']['contexte'];
316
317        // Insert le choix de clients multiples.
318        if ($fond == 'formulaires/inc-reservation_connection') {
319                $config = reservations_multiples_config();
320
321                if ($contexte['multiple_personnes'] == 'on') {
322
323                        $auteurs_multiples = recuperer_fond('inclure/auteurs_multiples', array(
324                                'nr_auteurs' => $contexte['nr_auteurs'],
325                                'champs_extras_auteurs' => $contexte['champs_extras_auteurs']
326
327                        ), array(
328                                'ajax' => 'auteurs_multiples'
329                        ));
330                        $flux['data']['texte'] .= $auteurs_multiples;
331                }
332        }
333
334        // Insert le champ de nombre d'un nombre multiple.
335        if ($fond == 'formulaires/inc-reservation_evenements_champ' or $fond == 'formulaires/inc-reservation_evenements_declinaisons_prix') {
336                $config = reservations_multiples_config();
337
338                if ($config['multiple_inscriptions'] == 'on') {
339                        if ($fond == 'formulaires/inc-reservation_evenements_champ') {
340                                $flux['data']['texte'] .= recuperer_fond('inclure/nombre_multiples', $contexte);
341                        }
342                        else {
343                                $flux['data']['texte'] .= recuperer_fond('inclure/nombre_multiples_declinaisons', $contexte);
344                        }
345                }
346        }
347
348        if($fond == 'inclure/reservation' and $contexte['statut'] == 'encours' and test_plugin_actif('reservation_bank')) {
349                include_spip('inc/filtres_mini');
350                $id_transaction = rb_inserer_transaction($contexte['id_reservation']);
351                $lien_paiement = liens_absolus(recuperer_fond('inclure/lien_payer', array('id_transaction'=> $id_transaction)));
352                $flux['data']['texte'] .= $lien_paiement;
353        }
354
355        if ($fond == 'content/paiement_reservation') {
356                $texte = recuperer_fond('inclure/recapitulatif_personnes_multiples', $contexte);
357                $flux['data']['texte'] = str_replace('</table></div>', '</table>' . $texte . '</div>', $flux['data']['texte']);
358        }
359
360        return $flux;
361}
362
363/**
364 * Insère des donnés dans le head public
365 *
366 * @pipeline insert_head
367 *
368 * @param array $flux
369 *              Données du pipeline
370 * @return array Données du pipeline
371 *
372 */
373function reservations_multiples_insert_head($flux) {
374        $script = find_in_path('scripts/reservations_multiples.js');
375        $css = find_in_path('css/reservations_multiples.css');
376        $flux .= "<link rel='stylesheet' type='text/css' media='all' href='$css' />\n" . "<script type='text/javascript' src='$script'> </script>";
377
378        return $flux;
379}
380
381/**
382 * Intervient après l'enregistrement
383 *
384 * @pipeline post_insertion
385 *
386 * @param array $flux
387 *              Données du pipeline
388 * @return array Données du pipeline
389 *
390 */
391function reservations_multiples_post_insertion($flux) {
392        if ($flux['args']['table'] == 'spip_reservations' and _request('nombre_auteurs')) {
393                $id_reservation = $flux['args']['id_objet'];
394                // premier enregisté, on met l'id_reservation_source
395                if (!_request('nr_auteur') > 0) {
396                        set_request('id_reservation_base', $id_reservation);
397                }
398                // Puis on recorrige l'id_reservation dans la session
399                else {
400                        $id_reservation_source = _request('id_reservation_base');
401                        set_request('id_reservation_source', $id_reservation_source);
402                }
403        }
404
405        return $flux;
406}
407
408/**
409 * Ajouter les configurations dans celle de réservation événements.
410 *
411 * @pipeline reservation_evenement_objets_configuration
412 *
413 * @param array $flux
414 *              Données du pipeline
415 * @return array Données du pipeline
416 */
417function reservations_multiples_reservation_evenement_objets_configuration($flux) {
418
419        $objets = array(
420                'reservations_multiples' => array(
421                        'label' => _T('reservations_multiples:reservations_multiples_titre'),
422                ),
423        );
424
425        $flux['data'] = array_merge($flux['data'], $objets);
426
427        return $flux;
428}
Note: See TracBrowser for help on using the repository browser.