source: spip-zone/_plugins_/reservation_evenement/branches/v1/formulaires/reservation.php @ 105052

Last change on this file since 105052 was 105052, checked in by abelass@…, 3 years ago

v1.26.0 - tenir compte des champs extras reservation sur le formulaire de réservation

  • Property svn:executable set to *
File size: 11.4 KB
Line 
1<?php
2/**
3 * Le Formulaire réservation
4 *
5 * @plugin     Réservation Événements
6 * @copyright  2013
7 * @author     Rainer Müller
8 * @licence    GNU/GPL
9 * @package    SPIP\Reservation_evenement\Formulaires
10 */
11if (!defined("_ECRIRE_INC_VERSION"))
12        return;
13
14        include_spip('inc/actions');
15        include_spip('inc/editer');
16
17        /**
18         * Chargement du formulaire réservation
19         *
20         * @param array|int|string $id
21         *         Identifiant de l'événement, soit tableau, soit liste séparé par virgule, soit un numéro.
22         * @param array|int|string $id_article
23         *         Identifiant de l'article, soit tableau, soit liste séparé par virgule, soit un numéro.
24         * @param string $retour
25         *         Url de retour.
26         * @param array|string $options
27         *         Les options :
28         *         id_evenement_source : Grouper les événements répétés (défault) ou les aficher séparément.
29         *                               Valeurs: 0, '' ou string afficher séparément les événement répétés
30         *                                        une integer supérieur 'a 0 groupe les événements avec le id_evenement_source indiqué.
31         * @return array Environnement du formulaire.
32         */
33        function formulaires_reservation_charger_dist($id = array(), $id_article = '', $retour = '', $options = array()) {
34
35                include_spip('inc/config');
36                include_spip('formulaires/selecteur/generique_fonctions');
37
38                $config = lire_config('reservation_evenement', array());
39                $enregistrement_inscrit = isset($config['enregistrement_inscrit']) ? $config['enregistrement_inscrit'] : '';
40                $enregistrement_inscrit_obligatoire = isset($config['enregistrement_inscrit_obligatoire']) ? $config['enregistrement_inscrit_obligatoire'] : '';
41                $valeurs = array();
42
43                // On obtient les options.
44                if(!is_array($options)) {
45                        $options = explode(',', $options);
46                        foreach($options AS $option) {
47                                list($variable, $valeur) = explode(':', $option);
48                                $$variable = $valeurs[$variable] = $valeur;
49                        }
50                }
51                else {
52                        foreach ($options AS $variable => $valeur) {
53                                $$variable = $valeurs[$variable] = $valeur;
54                        }
55                }
56
57                if(isset($id_evenement_source)) {
58                        if ($id_evenement_source == 0) {
59                                $id_evenement_source = false;
60                        }
61                }
62                else {
63                        $id_evenement_source = 0;
64                }
65
66
67                if (intval($GLOBALS['visiteur_session'])) {
68                        $session = $GLOBALS['visiteur_session'];
69                        $nom = $session['nom'];
70                        $email = $session['email'];
71                        $id_auteur = isset($session['id_auteur']) ? $session['id_auteur'] : '';
72                }
73
74                // Si l'affichage n'est pas déjà définie on établit si une zone s'applique
75                if (!$id_article and !$id) {
76                        include_spip('inc/reservation_evenements');
77
78                        $rubrique_reservation = isset($config['rubrique_reservation']) ? $config['rubrique_reservation'] : '';
79                        if (is_array($rubrique_reservation)) {
80                                $rubrique_reservation = picker_selected($rubrique_reservation, 'rubrique');
81                                $zone = rubrique_reservation('', 'evenement', $rubrique_reservation, array(
82                                        'tableau' => 'oui',
83                                        'where' => 'e.date_fin>NOW() AND e.inscription=1 AND e.statut="publie"',
84                                        'select' => '*',
85                                        'resultat' => 'par_id'
86                                ));
87                        }
88                }
89
90                // Si pas de zone, on établit les événements à afficher
91                if (!is_array($zone)) {
92                        $where = array(
93                                'date_fin>NOW() AND inscription=1 AND statut="publie"'
94                        );
95
96                        // Si filtré par événement/s
97                        if ($id) {
98                                if (is_array($id)){
99                                        $id = implode(',', $id);
100                                }
101                                if ($id_evenement_source) {
102                                        $sql = sql_select('id_evenement_source,id_evenement',
103                                                        'spip_evenements',
104                                                        'id_evenement IN (' . $id . ')');
105
106                                        $id = array();
107                                        while ($row = sql_fetch($sql)) {
108                                                if ($row['id_evenement_source'] == 0)
109                                                        $id[] = $row['id_evenement'];
110                                                        else
111                                                                $id[] = $row['id_evenement_source'];
112                                        }
113                                        $id = implode(',', $id);
114                                }
115                                $where[] = 'id_evenement IN (' . $id . ')';
116                        }
117
118                        // Si filtré par article/s
119                        if ($id_article) {
120                                if (is_array($id_article))
121                                        $id_article = implode(',', $id_article);
122
123                                        $where[] = 'id_article IN (' . $id_article . ')';
124                        }
125
126                        $sql = sql_select('*', 'spip_evenements', $where, '', 'date_debut,date_fin');
127
128                        $evenements = array();
129                        $articles = array();
130                        while ($row = sql_fetch($sql)) {
131                                $evenements[$row['id_evenement']] = $row;
132                                $articles[] = $row['id_article'];
133                        }
134                }
135                // Sinon on affiche les événements de la zone établit
136                else {
137                        $evenements = $zone;
138                }
139
140                // valeurs d'initialisation
141                $valeurs['evenements'] = $evenements;
142                $valeurs['articles'] = $evenements;
143                $valeurs['lang'] = $GLOBALS['spip_lang'];
144                $valeurs['id_evenement'] = $id;
145                $valeurs['id_evenement_source'] = $id_evenement_source;
146
147
148                $valeurs['id_objet_prix'] = _request('id_objet_prix') ? (is_array(_request('id_objet_prix')) ? _request('id_objet_prix') : array(
149                        _request('id_objet_prix')
150                )) : array();
151                $valeurs['id_auteur'] = $id_auteur;
152                $valeurs['modifier_donnees_auteur'] = _request('modifier_donnees_auteur');
153                $valeurs['nom'] = $nom;
154                $valeurs['email'] = $email;
155                $valeurs['enregistrer'] = _request('enregistrer');
156                $valeurs['new_pass'] = _request('new_pass');
157                $valeurs['new_pass2'] = _request('new_pass2');
158                $valeurs['new_login'] = _request('new_login');
159                $valeurs['statut'] = 'encours';
160                $valeurs['quantite'] = _request('quantite') ? _request('quantite') : 1;
161                $valeurs['enregistrement_inscrit'] = $enregistrement_inscrit;
162                $valeurs['enregistrement_inscrit_obligatoire'] = $enregistrement_inscrit_obligatoire;
163
164                // les champs extras
165                include_spip('cextras_pipelines');
166                if (function_exists('champs_extras_objet')) {
167                        // Auteurs
168                        $valeurs['champs_extras_auteurs'] = champs_extras_objet(table_objet_sql('auteur'));
169                        foreach ($valeurs['champs_extras_auteurs'] as $key => $value) {
170                                $valeurs[$value['options']['nom']] = $session[$value['options']['nom']];
171                                $valeurs['champs_extras_auteurs'][$key]['options']['label'] = extraire_multi($value['options']['label']);
172                        }
173
174                        // Réservations
175                        $valeurs['champs_extras_reservations'] = champs_extras_objet(table_objet_sql('reservation'));
176                        foreach ($valeurs['champs_extras_reservations'] as $key => $value) {
177                                $valeurs[$value['options']['nom']] = $session[$value['options']['nom']];
178                                $valeurs['champs_extras_reservations'][$key]['options']['label'] = extraire_multi($value['options']['label']);
179                        }
180                }
181
182                $valeurs['_hidden'] .= '<input type="hidden" name="statut" value="' . $valeurs['statut'] . '"/>';
183                $valeurs['_hidden'] .= '<input type="hidden" name="lang" value="' . $valeurs['lang'] . '"/>';
184                if ($id_auteur) {
185                        $valeurs['_hidden'] .= '<input type="hidden" name="id_auteur" value="' . $valeurs['id_auteur'] . '"/>';
186                }
187                if ($enregistrement_inscrit_obligatoire)
188                        $valeurs['_hidden'] .= '<input type="hidden" name="enregistrer[]" value="1"/>';
189                        return $valeurs;
190        }
191
192        /**
193         * Vérifications du formulaire réservation
194         *
195         * @param array|int|string $id
196         *         Identifiant de l'événement, soit tableau, soit liste séparé par virgule, soit un numéro.
197         * @param array|int|string $id_article
198         *         Identifiant de l'article, soit tableau, soit liste séparé par virgule, soit un numéro
199         * @param string $retour
200         *         Url de retour.
201         * @param array|string $options
202         *         Les options :
203         *         id_evenement_source : Grouper les événements répétés (défault) ou les aficher séparément.
204         *                               Valeurs: 0, '' ou string afficher séparément les événement répétés
205         *                                        une integer supérieur 'a 0 groupe les événements avec le id_evenement_source indiqué.
206         * @return array Tableau des erreurs.
207         */
208        function formulaires_reservation_verifier_dist($id = '', $id_article = '', $retour = '', $options = array()) {
209                $erreurs = array();
210                $email = _request('email');
211                $id_auteur = _request('id_auteur');
212                $obligatoires = array();
213
214                if (isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur'] > 0) {
215                        $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
216                }
217
218                // Si l'enregistrement est choisi
219                if (_request('enregistrer')) {
220                        include_spip('inc/auth');
221                        $obligatoires = array(
222                                'nom',
223                                'email',
224                                'new_pass',
225                                'new_login'
226                        );
227                        foreach ($obligatoires as $champ) {
228                                if (!_request($champ))
229                                        $erreurs[$champ] = _T("info_obligatoire");
230                        }
231                        // Vérifier le login
232                        if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)) {
233                                $erreurs['new_login'] = $err;
234                                $erreurs['message_erreur'] .= $err;
235                        }
236
237                        // Vérifier les mp
238                        if ($p = _request('new_pass')) {
239                                if ($p != _request('new_pass2')) {
240                                        $erreurs['new_pass'] = _T('info_passes_identiques');
241                                        $erreurs['message_erreur'] .= _T('info_passes_identiques');
242                                }
243                                elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) {
244                                        $erreurs['new_pass'] = $err;
245                                }
246                        }
247                }
248                elseif (!$id_auteur) {
249                        include_spip('inc/config');
250                        $email_reutilisable = lire_config('reservation_evenement/email_reutilisable', '');
251                        $obligatoires = array(
252                                'nom',
253                                'email'
254                        );
255                }
256
257                if (test_plugin_actif('declinaisons'))
258                        array_push($obligatoires, 'id_objet_prix');
259                        else
260                                array_push($obligatoires, 'id_evenement');
261
262                                foreach ($obligatoires as $champ) {
263                                        if (!_request($champ))
264                                                $erreurs[$champ] = _T("info_obligatoire");
265                                }
266
267                                if ($email) {
268                                        include_spip('inc/filtres');
269                                        // un redacteur qui modifie son email n'a pas le droit de le vider si il y en avait un
270                                        if (!email_valide($email)) {
271                                                $erreurs['email'] = $id_auteur ? _T('form_email_non_valide') : _T('form_prop_indiquer_email');
272                                        }
273                                        elseif (!$id_auteur and !$email_reutilisable) {
274                                                if ($email_utilise = sql_getfetsel('email', 'spip_auteurs', 'email=' . sql_quote($email)))
275                                                        $erreurs['email'] = _T('reservation:erreur_email_utilise');
276                                        }
277                                }
278
279                                // les champs extras auteur
280                                include_spip('cextras_pipelines');
281
282                                if (function_exists('champs_extras_objet')) {
283                                        include_spip('inc/saisies');
284                                        // Charger les définitions
285                                        $champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
286                                        $erreurs = array_merge($erreurs, saisies_verifier($champs_extras_auteurs));
287                                }
288                                if (count($erreurs) and !isset($erreurs['message_erreur']))
289                                        $erreurs['message_erreur'] = _T('reservation:message_erreur');
290                                        return $erreurs;
291        }
292
293        /**
294         * Traitement du formulaire de réservation.
295         *
296         * @param array|int|string $id
297         *         Identifiant de l'événement, soit tableau, soit liste séparé par virgule, soit un numéro.
298         * @param array|int|string $id_article
299         *         Identifiant de l'article, soit tableau, soit liste séparé par virgule, soit un numéro
300         * @param string $retour
301         *         Url de retour.
302         * @param array|string $options
303         *         Les options :
304         *         id_evenement_source : Grouper les événements répétés (défault) ou les aficher séparément.
305         *                               Valeurs: 0, '' ou string afficher séparément les événement répétés
306         *                                        une integer supérieur 'a 0 groupe les événements avec le id_evenement_source indiqué.
307         * @return array Retours des traitements.
308         */
309        function formulaires_reservation_traiter_dist($id = '', $id_article = '', $retour = '', $options = array()) {
310                if ($retour) {
311                        refuser_traiter_formulaire_ajax();
312                }
313                $enregistrer = charger_fonction('reservation_enregistrer', 'inc');
314                $id_auteur = _request('id_auteur');
315
316                $retours = $enregistrer($id, $id_article, $id_auteur);
317
318                // Si on demande une redirection
319                if ($retour)
320                        $retours['redirect'] = $retour;
321
322                        return $retours;
323        }
Note: See TracBrowser for help on using the repository browser.