source: spip-zone/_plugins_/reservation_evenement/trunk/formulaires/reservation.php @ 108004

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

v 1.27.3

  • extraire les multis
  • quelques traductions en nl
  • Property svn:executable set to *
File size: 11.6 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                                // extraire des multi.
132                                $row['titre'] = extraire_multi($row['titre']);
133                                $row['descriptif'] = extraire_multi($row['descriptif']);
134                                $row['lieu'] = extraire_multi($row['lieu']);
135                                $row['adresse'] = extraire_multi($row['adresse']);
136
137                                $evenements[$row['id_evenement']] = $row;
138                                $articles[] = $row['id_article'];
139                        }
140                }
141                // Sinon on affiche les événements de la zone établit
142                else {
143                        $evenements = $zone;
144                }
145
146                // valeurs d'initialisation
147                $valeurs['evenements'] = $evenements;
148                $valeurs['articles'] = $evenements;
149                $valeurs['lang'] = $GLOBALS['spip_lang'];
150                $valeurs['id_evenement'] = $id;
151                $valeurs['id_evenement_source'] = $id_evenement_source;
152
153
154                $valeurs['id_objet_prix'] = _request('id_objet_prix') ? (is_array(_request('id_objet_prix')) ? _request('id_objet_prix') : array(
155                        _request('id_objet_prix')
156                )) : array();
157                $valeurs['id_auteur'] = $id_auteur;
158                $valeurs['modifier_donnees_auteur'] = _request('modifier_donnees_auteur');
159                $valeurs['nom'] = $nom;
160                $valeurs['email'] = $email;
161                $valeurs['enregistrer'] = _request('enregistrer');
162                $valeurs['new_pass'] = _request('new_pass');
163                $valeurs['new_pass2'] = _request('new_pass2');
164                $valeurs['new_login'] = _request('new_login');
165                $valeurs['statut'] = 'encours';
166                $valeurs['quantite'] = _request('quantite') ? _request('quantite') : 1;
167                $valeurs['enregistrement_inscrit'] = $enregistrement_inscrit;
168                $valeurs['enregistrement_inscrit_obligatoire'] = $enregistrement_inscrit_obligatoire;
169
170                // les champs extras
171                include_spip('cextras_pipelines');
172                if (function_exists('champs_extras_objet')) {
173                        // Auteurs
174                        $valeurs['champs_extras_auteurs'] = champs_extras_objet(table_objet_sql('auteur'));
175                        foreach ($valeurs['champs_extras_auteurs'] as $key => $value) {
176                                $valeurs[$value['options']['nom']] = $session[$value['options']['nom']];
177                                $valeurs['champs_extras_auteurs'][$key]['options']['label'] = extraire_multi($value['options']['label']);
178                        }
179
180                        // Réservations
181                        $valeurs['champs_extras_reservations'] = champs_extras_objet(table_objet_sql('reservation'));
182                        foreach ($valeurs['champs_extras_reservations'] as $key => $value) {
183                                $valeurs[$value['options']['nom']] = $session[$value['options']['nom']];
184                                $valeurs['champs_extras_reservations'][$key]['options']['label'] = extraire_multi($value['options']['label']);
185                        }
186                }
187
188                $valeurs['_hidden'] .= '<input type="hidden" name="statut" value="' . $valeurs['statut'] . '"/>';
189                $valeurs['_hidden'] .= '<input type="hidden" name="lang" value="' . $valeurs['lang'] . '"/>';
190                if ($id_auteur) {
191                        $valeurs['_hidden'] .= '<input type="hidden" name="id_auteur" value="' . $valeurs['id_auteur'] . '"/>';
192                }
193                if ($enregistrement_inscrit_obligatoire)
194                        $valeurs['_hidden'] .= '<input type="hidden" name="enregistrer[]" value="1"/>';
195                        return $valeurs;
196        }
197
198        /**
199         * Vérifications du formulaire réservation
200         *
201         * @param array|int|string $id
202         *         Identifiant de l'événement, soit tableau, soit liste séparé par virgule, soit un numéro.
203         * @param array|int|string $id_article
204         *         Identifiant de l'article, soit tableau, soit liste séparé par virgule, soit un numéro
205         * @param string $retour
206         *         Url de retour.
207         * @param array|string $options
208         *         Les options :
209         *         id_evenement_source : Grouper les événements répétés (défault) ou les aficher séparément.
210         *                               Valeurs: 0, '' ou string afficher séparément les événement répétés
211         *                                        une integer supérieur 'a 0 groupe les événements avec le id_evenement_source indiqué.
212         * @return array Tableau des erreurs.
213         */
214        function formulaires_reservation_verifier_dist($id = '', $id_article = '', $retour = '', $options = array()) {
215                $erreurs = array();
216                $email = _request('email');
217                $id_auteur = _request('id_auteur');
218                $obligatoires = array();
219
220                if (isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur'] > 0) {
221                        $id_auteur = $GLOBALS['visiteur_session']['id_auteur'];
222                }
223
224                // Si l'enregistrement est choisi
225                if (_request('enregistrer')) {
226                        include_spip('inc/auth');
227                        $obligatoires = array(
228                                'nom',
229                                'email',
230                                'new_pass',
231                                'new_login'
232                        );
233                        foreach ($obligatoires as $champ) {
234                                if (!_request($champ))
235                                        $erreurs[$champ] = _T("info_obligatoire");
236                        }
237                        // Vérifier le login
238                        if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)) {
239                                $erreurs['new_login'] = $err;
240                                $erreurs['message_erreur'] .= $err;
241                        }
242
243                        // Vérifier les mp
244                        if ($p = _request('new_pass')) {
245                                if ($p != _request('new_pass2')) {
246                                        $erreurs['new_pass'] = _T('info_passes_identiques');
247                                        $erreurs['message_erreur'] .= _T('info_passes_identiques');
248                                }
249                                elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) {
250                                        $erreurs['new_pass'] = $err;
251                                }
252                        }
253                }
254                elseif (!$id_auteur) {
255                        include_spip('inc/config');
256                        $email_reutilisable = lire_config('reservation_evenement/email_reutilisable', '');
257                        $obligatoires = array(
258                                'nom',
259                                'email'
260                        );
261                }
262
263                if (test_plugin_actif('declinaisons'))
264                        array_push($obligatoires, 'id_objet_prix');
265                        else
266                                array_push($obligatoires, 'id_evenement');
267
268                                foreach ($obligatoires as $champ) {
269                                        if (!_request($champ))
270                                                $erreurs[$champ] = _T("info_obligatoire");
271                                }
272
273                                if ($email) {
274                                        include_spip('inc/filtres');
275                                        // un redacteur qui modifie son email n'a pas le droit de le vider si il y en avait un
276                                        if (!email_valide($email)) {
277                                                $erreurs['email'] = $id_auteur ? _T('form_email_non_valide') : _T('form_prop_indiquer_email');
278                                        }
279                                        elseif (!$id_auteur and !$email_reutilisable) {
280                                                if ($email_utilise = sql_getfetsel('email', 'spip_auteurs', 'email=' . sql_quote($email)))
281                                                        $erreurs['email'] = _T('reservation:erreur_email_utilise');
282                                        }
283                                }
284
285                                // les champs extras auteur
286                                include_spip('cextras_pipelines');
287
288                                if (function_exists('champs_extras_objet')) {
289                                        include_spip('inc/saisies');
290                                        // Charger les définitions
291                                        $champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
292                                        $erreurs = array_merge($erreurs, saisies_verifier($champs_extras_auteurs));
293                                }
294                                if (count($erreurs) and !isset($erreurs['message_erreur']))
295                                        $erreurs['message_erreur'] = _T('reservation:message_erreur');
296                                        return $erreurs;
297        }
298
299        /**
300         * Traitement du formulaire de réservation.
301         *
302         * @param array|int|string $id
303         *         Identifiant de l'événement, soit tableau, soit liste séparé par virgule, soit un numéro.
304         * @param array|int|string $id_article
305         *         Identifiant de l'article, soit tableau, soit liste séparé par virgule, soit un numéro
306         * @param string $retour
307         *         Url de retour.
308         * @param array|string $options
309         *         Les options :
310         *         id_evenement_source : Grouper les événements répétés (défault) ou les aficher séparément.
311         *                               Valeurs: 0, '' ou string afficher séparément les événement répétés
312         *                                        une integer supérieur 'a 0 groupe les événements avec le id_evenement_source indiqué.
313         * @return array Retours des traitements.
314         */
315        function formulaires_reservation_traiter_dist($id = '', $id_article = '', $retour = '', $options = array()) {
316                if ($retour) {
317                        refuser_traiter_formulaire_ajax();
318                }
319                $enregistrer = charger_fonction('reservation_enregistrer', 'inc');
320                $id_auteur = _request('id_auteur');
321
322                $retours = $enregistrer($id, $id_article, $id_auteur);
323
324                // Si on demande une redirection
325                if ($retour)
326                        $retours['redirect'] = $retour;
327
328                        return $retours;
329        }
Note: See TracBrowser for help on using the repository browser.