source: spip-zone/_plugins_/inscription2/inscription2_2_0/formulaires/inscription2.php @ 34094

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

Petite assurance que tout se soit bien passé

File size: 13.4 KB
Line 
1<?php
2/**
3 * Formulaire d'inscription et de modification de profil amélioré au site
4 *
5 * Pour l'utiliser en tant que formulaire d'inscription :
6 * - #FORMULAIRE_INSCRIPTION2
7 *
8 * Pour l'utiliser afin de modifier le profil d'un utilisateur :
9 * - #FORMULAIRE_INSCRIPTION2{#ID_AUTEUR} dans une boucle auteur
10 * - #FORMULAIRE_INSCRIPTION2{#ENV{id_auteur}} si l'id_auteur est dans
11 * l'environnement (modèle / page spécifique)
12 * - #FORMULAIRE_INSCRIPTION2{2} pour éditer le profil d'un utilisateur en
13 * particulier (ici l'id_auteur numéro 2)
14 *
15 */
16
17if (!defined("_ECRIRE_INC_VERSION")) return;
18
19// charger cfg
20include_spip('cfg_options');
21include_spip('inc/autoriser');
22
23/**
24 *
25 * Chargement des valeurs par defaut des champs du formulaire
26 *
27 * @return array L'ensemble des champs et de leur valeurs
28 * @param int $id_auteur[optional] Si cette valeur est utilisée, on entre dans le cadre de
29 * la modification d'un auteur, et plus dans la création
30 */
31function formulaires_inscription2_charger_dist($id_auteur = NULL,$redirect = null){
32
33        //initialise les variables d'environnement pas défaut
34        $valeurs = array();
35
36        //recupere la liste des champs possible
37        $chercher_champs = charger_fonction('inscription2_champs_formulaire','inc');
38        $champs = $chercher_champs($id_auteur);
39
40        /**
41         * si on a un auteur alors on preremplit le formulaire avec ses informations
42         * les nom des champs sont les memes que ceux de la base de données
43         */
44        if (is_numeric($id_auteur)) {
45                if (!autoriser('modifier','auteur',$id_auteur)) {
46                        return;
47                }
48                /**
49                 * On sélectionne tout pour éviter les champs qui ne sont pas dans la
50                 * base de donnée.
51                 * par exemple : logo_auteur et reglement
52                 */
53                $auteur = sql_fetsel(
54                        '*',
55                        'spip_auteurs LEFT JOIN spip_auteurs_elargis USING(id_auteur)',
56                        'spip_auteurs_elargis.id_auteur ='.$id_auteur
57                );
58                $auteur['id_auteur'] = $id_auteur;
59                if(in_array('naissance',$champs)){
60                        if(preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/",$auteur['naissance'],$date_naissance)){
61                                include_spip('inc/date');
62                                $auteur['annee'] = $date_naissance[1];
63                                $auteur['mois'] = $date_naissance[2];
64                                $auteur['jour'] = $date_naissance[3];
65                        }
66                }
67                $champs = $auteur;
68        } else {
69            //si on est en mode creation et que l'utilisateur a saisi ses valeurs on les prends en compte
70            foreach($champs as $clef =>$valeurs) {
71            if (_request($valeurs)) {
72                $champs[$valeurs] = trim(_request($valeurs));
73            }
74            if($valeurs == 'naissance'){
75                                include_spip('inc/date');
76                                $champs['annee'] = _request('annee');
77                                $champs['mois'] = _request('mois');
78                                $champs['jour'] = _request('jour');
79            }
80            }
81        }
82
83        //Offrir aux autres plugins la possibilite de charger les donnees
84        $champs = pipeline('i2_charger_formulaire',
85                array(
86                        'args' => '',
87                        'data' => $champs
88                )
89        );
90
91        return $champs;
92}
93
94function formulaires_inscription2_verifier_dist($id_auteur = null,$redirect = null){
95
96        //initialise le tableau des erreurs
97        $erreurs = array();
98
99    //initialise le tableau de valeurs $champs => $valeur
100    $valeurs = array();
101
102        //recupere la liste des champs possible
103        $chercher_champs = charger_fonction('inscription2_champs_formulaire','inc');
104        $champs = $chercher_champs($id_auteur);
105
106        $champs_a_verifier = pipeline('i2_verifications_specifiques',array());
107
108        //gere la correspondance champs -> _request(champs)
109        foreach($champs as $clef => $valeur) {
110
111                // On récupère sa valeur
112                $valeurs[$valeur] = trim(_request($valeur));
113
114                // On vérifie s'il est obligatoire et s'il est bien rempli
115                if ((lire_config('inscription2/'.$valeur.'_obligatoire') == 'on' ) && ((empty($valeurs[$valeur]) OR (strlen(_request($valeur)) == 0)))) {
116                        $erreurs[$valeur] = _T('inscription2:champ_obligatoire');
117                        $erreurs_obligatoires = true;
118                        if($valeur == 'naissance'){
119                                $annee = trim(_request('annee'));
120                                $mois = trim(_request('mois'));
121                                $jour = trim(_request('jour'));
122                                if($annee && $mois && $jour){
123                                        unset($erreurs['naissance']);
124                                }
125                        }
126                        if(is_numeric($id_auteur) && (lire_config('inscription2/pass_fiche_mod') == 'on') && (strlen(_request('pass')) == 0)){
127                                // Si le password est vide et que l'on est dans le cas de la modification d'un auteur
128                                // On garde le pass original
129                                unset($erreurs['pass']);
130                                $pass == 'ok';
131                        }
132                }
133
134                // Sinon on la vérifie une seconde fois si nécessaire avec les fonctions spécifiques de validations
135                if(!$erreurs[$valeur]){
136                        if(array_key_exists($valeur,$champs_a_verifier)){
137                                $fonction_verif_{$valeur} = charger_fonction('inscription2_'.$champs_a_verifier[$valeur],'inc');
138                                if($val = $fonction_verif_{$valeur}($valeurs[$valeur],$id_auteur)){
139                                        $erreurs[$valeur] = $val;
140                                }
141                        }
142                }
143        }
144
145        //Verifier certains champs specifiquement
146
147        //messages d'erreur au cas par cas (PASSWORD)
148        /**
149         * Il se peut que l'on active pas le password à l'inscription
150         * mais uniquement à la modification ...
151         * On le test ici en créant la variable $pass_actif
152         */ 
153        $pass_actif = false;
154        if(is_numeric($id_auteur) && (lire_config('inscription2/pass_fiche_mod') == 'on')){
155                $pass_actif = true;
156        }else if(!$id_auteur && (lire_config('inscription2/pass') == 'on')){
157                $pass_actif = true;
158        }
159        if(($pass != 'ok') && $pass_actif) {
160                if (strlen(_request('password')) != 0){
161                        $p = _request('password');
162                }
163                else{
164                        $p = _request('pass');
165                }
166                if($p){
167                        if(strlen($p)){
168                                $pass_min = !defined('_PASS_MIN') ? 6 : _PASS_MIN; 
169                                if (strlen($p) < $pass_min) {
170                                        $erreurs['pass'] = _T('info_passe_trop_court');
171                                        $erreurs['message_erreur'] .= _T('info_passe_trop_court')."<br />";
172                                } elseif ($p != _request('password1')) {
173                                        $erreurs['pass'] = _T('info_passes_identiques');
174                                        $erreurs['message_erreur'] .= _T('info_passes_identiques')."<br />";
175                                }
176                        }else{
177                                if(!is_numeric($id_auteur)){
178                                        // (1) Si on est dans la modif d'id_auteur on garde l'ancien pass si rien n'est rentre
179                                        // donc on accepte la valeur vide
180                                        // dans le cas de la création d'un auteur ... le password sera necessaire
181                                        $erreurs['pass'] = _T('inscription2:password_obligatoire');
182                                }
183                        }
184                }
185        }
186
187        //Offrir aux autres plugins la possibilite de verifier les donnees
188        $erreurs = pipeline('i2_verifier_formulaire',
189                array(
190                        'args' => array(
191                            'champs' => $valeurs
192                        ),
193                'data' => $erreurs
194                )
195        );
196
197        //verifier que l'auteur a bien des droits d'edition
198        if (is_numeric($id_auteur)) {
199                if (!autoriser('modifier','auteur',$id_auteur)) {
200                        $erreurs['message_erreur'] .= _T('inscription2:profil_droits_insuffisants');
201                }
202        }
203
204        //message d'erreur generalise
205        if (count($erreurs)) {
206                if(isset($erreurs_obligatoires)){
207                        $erreurs['message_erreur'] .= _T('inscription2:formulaire_remplir_obligatoires');
208                }else{
209                        $erreurs['message_erreur'] .= _T('inscription2:formulaire_remplir_validation');
210                }
211
212        }
213
214    return $erreurs; // si c'est vide, traiter sera appele, sinon le formulaire sera resoumis
215}
216
217function formulaires_inscription2_traiter_dist($id_auteur = NULL,$redirect = null){
218
219        $retour = array();
220        $data = array();
221
222        if((is_numeric($id_auteur) && (lire_config('inscription2/pass_fiche_mod') != 'on'))
223                OR (is_numeric($id_auteur) && (lire_config('inscription2/pass_fiche_mod') == 'on')) && (strlen(_request('password')) == 0)){
224                $mode = 'modification_auteur_simple';
225        }
226        else if((is_numeric($id_auteur) && (lire_config('inscription2/pass_fiche_mod') == 'on')) and (strlen(_request('password')) != 0)){
227                $mode = 'modification_auteur_pass';
228        }
229        else if((lire_config('inscription2/pass') == 'on') && (strlen(_request('pass')))){
230                $mode = 'inscription_pass';
231        }
232        else{
233                $mode = 'inscription';
234        }
235
236        /* Generer la liste des champs a traiter
237        * champ => valeur formulaire
238        */
239        if(!is_numeric($id_auteur)){
240                $new = true;
241        }
242
243        $chercher_champs = charger_fonction('inscription2_champs_formulaire','inc');
244        $champs = $chercher_champs($id_auteur);
245
246        foreach($champs as $clef => $valeur) {
247                $valeurs[$valeur] = trim(_request($valeur));
248                if($valeur == 'naissance'){
249                        include_spip('inc/date');
250                        $annee = trim(_request('annee'));
251                        $mois = _request('mois');
252                        $jour = _request('jour');
253                        $valeurs[$valeur] = format_mysql_date($annee,$mois,$jour);
254                        spip_log("on récupère la valeur du champs naissance : ".$valeurs[$valeur]);
255                }
256        }
257        // Definir le login s'il a besoin de l'etre
258        // NOM et LOGIN sont des champs obligatoires donc a la creation il ne doivent pas etre vide
259        // Apres on s'en fiche s'il n'est pas dans le formulaire
260        if($new){
261                if(!$valeurs['nom']){
262                        if($valeurs['nom_famille']||$valeurs['prenom']){
263                                $valeurs['nom'] = $valeurs['prenom'].' '.$valeurs['nom_famille'];
264                        }
265                        else{
266                                $valeurs['nom'] = strtolower(translitteration(preg_replace('/@.*/', '', $valeurs['email'])));
267                        }
268                }
269                if(!$valeurs['login']){
270                        $definir_login = charger_fonction('inscription2_definir_login','inc');
271                        $valeurs['login'] = $definir_login($valeurs['nom'], $valeurs['email']);
272                }
273        }
274
275        $trouver_table = charger_fonction('trouver_table','base');
276
277        //$valeurs contient donc tous les champs remplit ou non
278        include_spip('inc/inscription2_compat_php4');
279        //definir les champs pour spip_auteurs
280        $table = "spip_auteurs";
281
282        //genere le tableau des valeurs a mettre a jour pour spip_auteurs
283        //toutes les clefs qu'inscription2 peut mettre a jour
284
285        //$clefs = array_fill_keys(array('login','nom','email','bio','nom_site','url_site','pgp'),'');
286        $clefs = $trouver_table('auteurs');
287        $clefs = $clefs['field'];
288
289        //extrait uniquement les donnees qui ont ete proposees a la modification
290        $val = array_intersect_key($valeurs,$clefs);
291
292        //Verification du password
293        if(($mode == 'inscription_pass') || ($mode == 'modification_auteur_pass')){
294                if (strlen(_request('password')) != 0)
295                        $new_pass = _request('password');
296
297                if (strlen($new_pass)>0) {
298                        include_spip('inc/acces');
299                        $htpass = generer_htpass($new_pass);
300                        $alea_actuel = creer_uniqid();
301                        $alea_futur = creer_uniqid();
302                        $pass = md5($alea_actuel.$new_pass);
303                        $val['pass'] = $pass;
304                        $val['htpass'] = $htpass;
305                        $val['alea_actuel'] = $alea_actuel;
306                        $val['alea_futur'] = $alea_futur;
307                        $val['low_sec'] = '';
308                }
309               
310                if(!is_numeric($id_auteur)){
311                        $val['statut'] = lire_config('inscription2/statut_nouveau','6forum');
312                }
313        }else{
314                if(!is_numeric($id_auteur)){
315                        $val['statut'] = 'aconfirmer';
316                }
317        }
318        $pass_length = strlen($val['pass']);
319        if($pass_length == 0){
320                unset($val['pass']);
321        }
322
323        // affecter $id_auteur avec la session si dispo
324        // présent depuis moins de quelques minutes ou inscrit partiel
325        include_spip("inc/inscription2_session");
326        if($id_inscrit = i2_session_valide()){
327                $id_auteur = $id_inscrit ;
328                $modif_par_session = true ;
329                $data["modif"] = true ;
330        }
331       
332
333        //inserer les donnees dans spip_auteurs -- si $id_auteur : mise a jour - autrement : nouvelle entree
334        if (!$new or $modif_par_session) {
335                $where = 'id_auteur = '.$id_auteur;
336                sql_updateq(
337                        $table,
338                        $val,
339                        $where
340                );
341        } else {
342                $id_auteur = sql_insertq(
343                        $table,
344                        $val
345                );
346        }
347
348        $table = 'spip_auteurs_elargis';
349        //extrait les valeurs propres a spip_auteurs_elargis
350
351        //genere le tableau des valeurs a mettre a jour pour spip_auteurs
352        //toutes les clefs qu'inscription2 peut mettre a jour
353        //s'appuie sur les tables definies par le plugin
354
355        $clefs = $trouver_table('auteurs_elargis');
356        $clefs = $clefs['field'];
357
358        if(is_array($clefs)){
359                //extrait uniquement les donnees qui ont ete proposees a la modification
360                $val = array_intersect_key($valeurs,$clefs);
361        }else{
362                $where = 'id_auteur='.sql_quote($id_auteur);
363                $res = sql_select('*',$table,$where);
364                $clefs = sql_fetch($res);
365                $val = array_intersect_key($valeurs,$clefs);
366        }
367
368        unset($val['login']);
369
370        //recherche la presence d'un complement sur l'auteur
371        $id_elargi = sql_getfetsel('id_auteur','spip_auteurs_elargis','id_auteur='.$id_auteur);
372
373        if ($id_elargi) {
374                $where = 'id_auteur = '.$id_auteur;
375                sql_updateq(
376                        $table,
377                        $val,
378                        $where
379                );
380        } else {
381                // Si on utilise la date de creation de la fiche
382                if(lire_config('inscription2/creation') == 'on'){
383                        $val['creation'] = date("Y-m-d H:i:s",time());
384                }
385                $val['id_auteur'] = $id_auteur;
386                $id = sql_insertq(
387                        $table,
388                        $val
389                );
390        }
391
392        if(isset($_FILES['logo_auteur']) && ($_FILES['logo_auteur']['error'] == 0)){
393                $chercher_logo = charger_fonction('chercher_logo', 'inc');
394               
395                // supprimer l'ancien logo
396                $on = $chercher_logo($id_auteur, 'id_auteur', 'on');
397                if ($on) @unlink($on[0]);
398
399                // ajouter le nouveau
400                include_spip('action/iconifier');
401                action_spip_image_ajouter_dist(
402                        type_du_logo('id_auteur').'on'.$id_auteur, false, false
403                ); // beurk
404                // indiquer qu'on doit recalculer les images
405                $GLOBALS['var_images'] = true;
406        }
407
408        $traiter_plugin = pipeline('i2_traiter_formulaire',
409                array(
410                        'args' => array(
411                                'id_auteur' => $id_auteur,
412                                'champs' => $valeurs
413                        ),
414                'data' => $data
415                )
416        );
417
418    if (!$new){
419        $message = _T('inscription2:profil_modifie_ok');
420        if($mode == 'modification_auteur_simple'){
421                $message .= '<br />'._T('inscription2:mot_passe_reste_identique');
422        }
423        $editable = true;
424    } else {
425                if(!$traiter_plugin['ne_pas_confirmer_par_mail']){
426                        $envoyer_inscription = charger_fonction('envoyer_inscription2','inc');
427                        $envoyer_inscription($id_auteur,$mode);
428                        $message = _T('inscription2:formulaire_inscription_ok');
429                }
430                if($traiter_plugin['message_ok'])
431                        $message = $traiter_plugin['message_ok'];
432                        $editable = false;
433    }
434
435        // Invalider les caches
436        include_spip('inc/invalideur');
437    suivre_invalideur("id='id_auteur/$id_auteur'");
438       
439        $retour['editable'] = $editable;
440        $retour['message_ok'] = $message;
441
442        if($redirect){
443                $retour['redirect'] = $redirect;
444        }
445
446    return $retour;
447}
448?>
Note: See TracBrowser for help on using the repository browser.