source: spip-zone/_plugins_/_test_/inscription2/inscription2_193/formulaires/inscription2_ajax.php @ 27285

Last change on this file since 27285 was 27285, checked in by kent1@…, 10 years ago

rétablir la validation des champs

File size: 11.3 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2008                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15// charger cfg
16include_spip('cfg_options');
17// charger les fonctions de formilaires
18include_spip('inc/inscription2_form_fonctions');
19
20// chargement des valeurs par defaut des champs du formulaire
21function formulaires_inscription2_ajax_charger_dist($id_auteur = NULL){
22   
23        //initialise les variables d'environnement pas défaut
24        $valeurs = array();
25
26        //récupere la liste des champs possible
27        $champs = inscription2_champs_formulaire($id_auteur);
28
29        //si on a bien un auteur alors on préremplit le formulaire avec ses informations
30        //les nom des champs sont les memes que ceux de la base de données
31        if (is_numeric($id_auteur)) {
32               
33                $auteur = sql_fetsel(
34                        $champs,
35                        'spip_auteurs LEFT JOIN spip_auteurs_elargis USING(id_auteur)',
36                        'spip_auteurs_elargis.id_auteur ='.$id_auteur
37                );
38                $auteur['id_auteur'] = $id_auteur;
39                $champs = $auteur;
40        } else {       
41            //si on est en mode création et que l'utilisateur a saisi ses valeurs on les prends en compte
42            foreach($champs as $clef =>$valeurs) {
43            if (_request($valeurs)) {
44                $champs[$valeurs] = _request($valeurs);
45            }
46            }           
47        }
48        return $champs;
49}
50
51function formulaires_inscription2_ajax_verifier_dist($id_auteur = NULL){
52   
53        //charge la fonction de controle du login et mail
54        //$test_inscription = charger_fonction('test_inscription');
55       
56        //initialise le tableau des erreurs
57        $erreurs = array();
58       
59    //initilise le tableau de valeurs $champs => $valeur
60    $valeurs = array(); 
61   
62        //récupere la liste des champs possible
63        $champs = inscription2_champs_formulaire($id_auteur);   
64
65    //gere la correspondance champs -> _request(champs)
66        foreach(inscription2_champs_formulaire($id_auteur) as $clef => $valeur) {
67                $valeurs[$valeur] = _request($valeur);
68        }               
69               
70        //verifier les champs obligatoires
71        foreach ($valeurs  as $champs => $valeur) {
72                if ((lire_config('inscription2/'.$champs.'_obligatoire') == 'on') && (empty($valeur) OR (strlen(_request($champ)) == 0))) {
73                        $erreurs[$champs] = _T('inscription2:champ_obligatoire');
74                        if(is_numeric($id_auteur) && (lire_config('inscription2/pass_fiche_mod') == 'on') && (strlen(_request('pass')) == 0)){
75                                // Si le password est vide et que l'on est dans le cas de la modification d'un auteur
76                                // On garde le pass original
77                                spip_log("pass= $pass");
78                                unset($erreurs['pass']);
79                                $pass == 'ok';
80                        }
81                }
82        }
83       
84        //messages d'erreur au cas par cas (PASSWORD)
85        //vérification des champs
86
87        // Sinon on le verifie
88        if(($pass != 'ok') && (lire_config('inscription2/pass') == 'on')) {
89               
90                if($p = _request('pass')) {
91                        if(strlen($p)){
92                                if (strlen($p) < 6) {
93                                        $erreurs['pass'] = _T('info_passe_trop_court');
94                                        $erreurs['message_erreur'] .= _T('info_passe_trop_court')."<br />";
95                                } elseif ($p != _request('password1')) {
96                                        $erreurs['pass'] = _T('info_passes_identiques');
97                                        $erreurs['message_erreur'] .= _T('info_passes_identiques')."<br />";
98                                }
99                        }else{
100                                if(!is_numeric($id_auteur)){
101                                        // Si on est dans la modif d'id_auteur on garde l'ancien pass si rien n'est rentré
102                                        // donc on accepte la valeur vide
103                                        // dans le cas de la création d'un auteur ... le password sera nécessaire
104                                        $erreurs['pass'] = _T('inscription2:password_obligatoire');
105                                }
106                        }
107                }
108        }
109       
110        //messages d'erreur au cas par cas (CODE POSTAL)
111    //liste des champs de type code postal
112        $champs_code_postal = array('code_postal','code_postal_pro');
113       
114        // vérification des champs saisis
115        foreach($champs_code_postal as $champs) {
116            if(lire_config('inscription2/'.$champs) == 'on') {
117                $erreur = inscription2_valide_cp($valeurs[$champs]);
118                if($erreur){
119                        $erreurs[$champs] = $erreur;
120                }               
121            }
122        }       
123
124        //messages d'erreur au cas par cas (TELEPHONE)
125        //liste des champs de type téléphone
126        $champs_telephone = array('telephone','fax','mobile','telephone_pro','fax_pro','mobile_pro');
127       
128        // vérification des champs saisis
129        foreach($champs_telephone as $champs) {
130            if(lire_config('inscription2/'.$champs) == 'on') {
131                $erreur = inscription2_valide_numero($valeurs[$champs]);
132                if($erreur){
133                        $erreurs[$champs] = $erreur;
134                }               
135            }
136        }
137
138        //Offrir aux autres plugins la possibilité de vérifier les données
139        $erreurs = pipeline('i2_validation_formulaire',
140                array(
141                        'args' => array(
142                            'champs' => $valeurs
143                        ),
144                'data' => $erreurs
145                )
146        );
147       
148       
149        //verifier que l'auteur a bien des droits d'edition
150        if (is_numeric($id_auteur)) {
151                include_spip('inc/autoriser');
152                if (!autoriser('modifier','auteur',$id_auteur)) {
153                        $erreurs['message_erreur'] .= _T('inscription2:profil_droits_insuffisants');
154                }
155        }
156   
157        //Verifier certains champs specifiquement
158       
159        //Verifier le login
160        // c'est a dire regarder dans la base si un autre utilisateur que celui en cours possede le login saisi
161        if (_request('login')) {
162                if (sql_getfetsel('id_auteur','spip_auteurs','id_auteur !='.intval($id_auteur).' AND login LIKE \''._request('login').'\'')) {
163                        $erreurs['login'] = _T('inscription2:formulaire_login_deja_utilise');
164                }
165        }
166       
167        //message d'erreur generalise
168        if (count($erreurs)) {
169                spip_log($erreurs,"inscription2");
170                $erreurs['message_erreur'] .= _T('inscription2:formulaire_remplir_obligatoires');
171        }
172       
173    return $erreurs; // si c'est vide, traiter sera appele, sinon le formulaire sera resoumis
174}
175
176function formulaires_inscription2_ajax_traiter_dist($id_auteur = NULL){
177        spip_log('traiter','inscription2');
178        global $tables_principales;
179       
180        if((is_numeric($id_auteur) && (lire_config('inscription2/pass_fiche_mod') != 'on'))
181                OR (is_numeric($id_auteur) && (lire_config('inscription2/pass_fiche_mod') == 'on')) && (strlen(_request('pass')) == 0)){
182                $mode = 'modification_auteur_simple';
183        }
184        else if((is_numeric($id_auteur) && (lire_config('inscription2/pass_fiche_mod') == 'on'))){
185                $mode = 'modification_auteur_pass';
186        }
187        else if((lire_config('inscription2/pass') == 'on') && (strlen(_request('pass')))){
188                $mode = 'inscription_pass';
189        }
190        else{
191                $mode = 'inscription';
192        }
193       
194        /* Génerer la liste des champs à traiter
195        * champ => valeur formulaire
196        */
197       
198        $champs = inscription2_champs_formulaire($id_auteur);
199        foreach($champs as $clef => $valeur) {
200                $valeurs[$valeur] = _request($valeur);
201        }
202       
203        // Définir le login s'il a besoin de l'être
204        // NOM et LOGIN sont des champs obligatoires donc à la création il ne doivent pas être vide
205        // Après on s'en fiche s'il n'est pas dans le formulaire
206        if($new){
207                if(!$valeurs['nom']){
208                        if($valeurs['nom_famille']||$valeurs['prenom']){
209                                $valeurs['nom'] = $valeurs['prenom'].' '.$valeurs['nom_famille'];
210                        }
211                        else{
212                                $valeurs['nom'] = strtolower(translitteration(preg_replace('/@.*/', '', $valeurs['email'])));
213                        }
214                }
215                if(!$valeurs['login']){
216                        $valeurs['login'] = test_login($valeurs['nom'], $valeurs['email']);
217                }
218        }
219       
220        //$valeurs contient donc tous les champs remplit ou non
221       
222        //definir les champs pour spip_auteurs
223        $table = "spip_auteurs";
224   
225        //genere le tableau des valeurs à mettre à jour pour spip_auteurs
226        //toutes les clefs qu'inscription2 peut mettre à jour
227        include_spip('inc/inscription2_compat_php4');
228        $clefs = array_fill_keys(array('login','nom','email','bio'),'');
229        //extrait uniquement les données qui ont été proposées à la modification
230        $val = array_intersect_key($valeurs,$clefs);
231       
232        //Vérification du password
233        if($mode == ('inscription_pass' || 'modification_auteur_pass')){
234                $new_pass = _request('pass');
235                if (strlen($new_pass)) {
236                        include_spip('inc/acces');
237                        $htpass = generer_htpass($new_pass);
238                        $alea_actuel = creer_uniqid();
239                        $alea_futur = creer_uniqid();
240                        $pass = md5($alea_actuel.$new_pass);
241                        $val['pass'] = $pass;
242                        $val['htpass'] = $htpass;
243                        $val['alea_actuel'] = $alea_actuel;
244                        $val['alea_futur'] = $alea_futur;
245                        $val['low_sec'] = '';
246                }
247                if(!is_numeric($id_auteur)){
248                        $val['statut'] = lire_config('inscription2/statut_nouveau');
249                }
250        }else{
251                if(!is_numeric($id_auteur)){
252                        $val['statut'] = 'aconfirmer';
253                }
254        }
255       
256        //inserer les données dans spip_auteurs -- si $id_auteur : mise à jour - autrement : nouvelle entrée
257        if (is_numeric($id_auteur)) {
258                $where = 'id_auteur = '.$id_auteur;
259                sql_updateq(
260                        $table,
261                        $val,
262                        $where
263                );
264                $new = false;
265        } else {
266                $id_auteur = sql_insertq(
267                        $table,
268                        $val
269                );
270                $new = true;
271        }
272       
273        $table = 'spip_auteurs_elargis';
274        //extrait les valeurs propres à spip_auteurs_elargis
275       
276        //genere le tableau des valeurs à mettre à jour pour spip_auteurs
277        //toutes les clefs qu'inscription2 peut mettre à jour
278        //s'appuie sur les tables definies par le plugin
279        $clefs = $tables_principales[$table]['field'];
280        //extrait uniquement les données qui ont été proposées à la modification
281        $val = array_intersect_key($valeurs,$clefs);
282        unset($val['login']);
283        //recherche la presence d'un complément sur l'auteur
284        $id_elargi = sql_getfetsel('id_auteur','spip_auteurs_elargis','id_auteur='.$id_auteur);
285       
286        if ($id_elargi) {
287                $where = 'id_auteur = '.$id_auteur;
288                sql_updateq(
289                        $table,
290                        $val,
291                        $where     
292                );
293        } else {
294                // Si on utilise la date de creation de la fiche
295                if(lire_config('inscription2/creation') == 'on'){
296                        $val['creation'] = date("Y-m-d H:i:s",time());
297                }
298                $val['id_auteur'] = $id_auteur;
299                $id = sql_insertq(
300                        $table,
301                        $val
302                );
303        }
304   
305    if (!$new){
306        $message = _T('inscription2:profil_modifie_ok');
307        if($mode = 'modification_auteur_simple'){
308                $message .= '<br />'._T('inscription2:mot_passe_reste_identique');
309        }
310        $editable = true;
311    } else {
312                $envoyer_inscription = charger_fonction('envoyer_inscription2','inc');
313                $envoyer_inscription($id_auteur,$mode);
314                $message = _T('inscription2:formulaire_inscription_ok');
315                $editable = false;
316    }
317       
318        $traiter_plugin = pipeline('i2_traiter_formulaire',
319                array(
320                        'args' => array(
321                                'id_auteur' => $id_auteur,
322                                'champs' => $val
323                        ),
324                'data' => null
325                )
326        );
327       
328    return array('editable'=>$editable,'message' => $message);
329}
330
331// http://doc.spip.org/@test_login
332function test_login($nom, $mail) {
333        include_spip('inc/charsets');
334        $nom = strtolower(translitteration($nom));
335        $login_base = preg_replace("/[^\w\d_]/", "_", $nom);
336
337        // il faut eviter que le login soit vraiment trop court
338        if (strlen($login_base) < 3) {
339                $mail = strtolower(translitteration(preg_replace('/@.*/', '', $mail)));
340                $login_base = preg_replace("/[^\w\d]/", "_", $nom);
341        }
342        if (strlen($login_base) < 3)
343                $login_base = 'user';
344
345        // eviter aussi qu'il soit trop long (essayer d'attraper le prenom)
346        if (strlen($login_base) > 10) {
347                $login_base = preg_replace("/^(.{4,}(_.{1,7})?)_.*/",
348                        '\1', $login_base);
349                $login_base = substr($login_base, 0,13);
350        }
351
352        $login = $login_base;
353
354        for ($i = 1; ; $i++) {
355                if (!sql_countsel('spip_auteurs', "login='$login'"))
356                        return $login;
357                $login = $login_base.$i;
358        }
359}
360?>
Note: See TracBrowser for help on using the repository browser.