source: plugins_spip/inscription3/trunk/inscription3_pipelines.php @ 7385

Last change on this file since 7385 was 7385, checked in by kent1, 7 years ago

Eviter des soucis avec la date de naissance à nouveau et mettre le pass en sha256

File size: 34.4 KB
Line 
1<?php
2/**
3 * Plugin Inscription3 pour SPIP
4 * © 2007-2012 - cmtmt, BoOz, kent1
5 * Licence GPL v3
6 *
7 * Fonctions d'insertion dans les pipelines
8 */
9
10if (!defined("_ECRIRE_INC_VERSION")) return;
11
12/**
13 *
14 * Insertion dans le pipeline i3_exceptions_chargement_champs_auteurs_elargis (Inscription3)
15 * qui empêche le chargement et la recherche de champs lors de l'affichage de formulaires (editer_auteur / inscription)
16 *
17 * @return array Un tableau des champs correspondant au "name" de son input de configuration dans le CFG
18 * @param array $array Prend un tableau en argument qui doit être complété en fonction des besoins
19 */
20
21function inscription3_i3_exceptions_chargement_champs_auteurs_elargis($array){
22        // liste des champs pour lesquels on ne doit pas charger la valeur
23
24        $array[] = 'creation';
25       
26        return $array;
27}
28
29/**
30 *
31 * Insertion dans le pipeline i3_exceptions_des_champs_auteurs_elargis
32 * qui empêche la création de certains champs dans la table
33 * aprÚs les avoir configuré
34 *
35 * @return array Un tableau des champs correspondant au "name" de son input de configuration dans le CFG
36 * @param array $array Prend un tableau en argument qui doit être complété en fonction des besoins
37 */
38
39function inscription3_i3_exceptions_des_champs_auteurs_elargis($array){
40        // liste des champs pour lesquels on ne doit pas créer de champs dans la table spip_auteurs
41
42        // Principalement les champs déjà présents dans spip_auteurs
43        $array[] = 'id_auteur';
44        $array[] = 'bio';
45        $array[] = 'nom';
46        $array[] = 'pass';
47        $array[] = 'login';
48        $array[] = 'email';
49        $array[] = 'statut';
50        $array[] = 'pgp';
51        $array[] = 'url_site';
52        $array[] = 'nom_site';
53
54        // Des choses spécifiques à inscription3
55        $array[] = 'logo';
56        $array[] = 'username';
57        $array[] = 'statut_nouveau';
58        $array[] = 'statut_int';
59        $array[] = 'statut_interne';
60        $array[] = 'accesrestreint';
61        $array[] = 'password';
62        $array[] = 'pass';
63        $array[] = 'affordance_form';
64        $array[] = 'reglement';
65        $array[] = 'reglement_article';
66        $array[] = 'password_complexite';
67        $array[] = 'validation_numero_international';
68        $array[] = 'pays_defaut';
69        $array[] = 'valider_comptes';
70        $array[] = 'message_form_inscription';
71        $array[] = 'auto_login';
72
73        return $array;
74}
75
76/**
77 *
78 * Insertion dans le pipeline i3_verifications_specifiques du plugin inscription3
79 * Utilisation de l'API verifier du plugin éponyme
80 *
81 * Pour chaque champs on fourni un array associatif contenant :
82 * - type => la fonction de l'api de vérification à utiliser
83 * - options => un array des options à passer à cette fonction
84 *
85 * @return array Tableau contenant plusieurs tableaux en fonction du type de champs
86 * @param object $array Doit recevoir un tableau du même type
87 */
88
89function inscription3_i3_verifications_specifiques($array){
90
91        // Les emails : fonction verifier/email
92        $array['email'] = array('type' => 'email','options' => array('disponible'=>'disponible'));
93        $array['mail_inscription'] = array('type' => 'email','options' => array('disponible'=>'disponible'));
94
95        // Les noms (signature)
96        $array['nom'] = array('type' => 'signature');
97        $array['nom_inscription'] = array('type' => 'signature');
98       
99        // Les logins : fonction verifier/login
100        $array['login'] = array('type' => 'login');
101
102        // Les statuts : fonction verifier/statut
103        $array['statut'] = array('type' => 'statut');
104
105        // Les codes postaux : fonction verifier/code_postal
106        $array['code_postal'] = array('type' => 'code_postal');
107
108        // Les numéros de téléphone : fonction verifier/telephone
109        $array['telephone'] = array('type' => 'telephone');
110        $array['fax'] = array('type' => 'telephone');
111        $array['mobile'] = array('type' => 'telephone');
112
113        // Les dates
114        $array['naissance'] = array('type' => 'date','options' => array('format' => 'amj'));
115       
116        return $array;
117}
118
119/**
120 * Insertion dans le pipeline affiche_droite (SPIP)
121 *
122 * Dans certaines pages définies, afficher le lien d'accÚs à la page des comptes utilisateurs
123 *
124 * @return array Le même tableau qu'il reçoit en argument
125 * @param array $flux Un tableau donnant des informations sur le contenu passé au pipeline
126 */
127
128function inscription3_affiche_droite($flux){
129        if(((preg_match('/^inscription3/',$flux['args']['exec']))
130                 || (preg_match('/^auteur/',$flux['args']['exec']))
131                 || (preg_match('/^i3_/',$flux['args']['exec']))
132                 || ($flux['args']['exec'] == 'configurer_inscription3')
133                 || (($flux['args']['exec'] == 'cfg') && ((_request('cfg') == 'inscription3') || preg_match('/^i3_/',_request('cfg'))))
134                )
135                 && ($flux['args']['exec'] != 'inscription3_adherents')){
136        $flux['data'] .= recuperer_fond('prive/inscription3_affiche_droite');
137        }
138        return $flux;
139}
140
141/**
142 * Insertion dans le pipeline i3_definition_champs
143 *
144 * Définition spécifique des champs qui ne sont pas de type text
145 * Par défaut inscription3 définit les champs comme étant de type texte, cela peut être
146 * différent pour d'autres ...
147 */
148function inscription3_i3_definition_champs($flux){
149        include_spip('inc/config');
150        /**
151         * Récupération de la configuration d'inscription3
152         * pour éviter d'avoir à utiliser la fonction lire_config beaucoup de fois
153         */
154        $config_i3 = lire_config('inscription3',array());
155
156        $flux['pays'] = array(
157                'saisie' => 'pays', // type de saisie
158                'options' => array(
159                        'sql' => "int NOT NULL", // declaration sql
160                        'option_intro'=>_T('inscription3:aucun'),
161                        'class' => 'pays',
162                        'defaut' => $config_i3['pays_defaut'] ? $config_i3['pays_defaut'] : '',
163                        'obligatoire' => ($config_i3['pays_obligatoire'] == 'on') ? true : false
164                )
165        );
166        $flux['validite'] = array(
167                'saisie' => 'date_jour_mois_annee', // type de saisie
168                'options'=> array(
169                        'sql' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // declaration sql
170                        'obligatoire' => ($config_i3['validite_obligatoire'] == 'on') ? true : false
171                ),
172                'verifier' => array(
173                        'type' => 'date',
174                        'options' => array(
175                                'format' => 'amj'
176                        )
177                )
178        );
179        $flux['creation'] = array(
180                'saisie' => 'date_jour_mois_annee', // type de saisie
181                'options' => array(
182                        'sql' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // declaration sql
183                ),
184                'restrictions' => array(
185            'voir' => array('auteur' => ''),
186            'modifier' => array('auteur' => 'webmestre')
187        )
188        );
189        $flux['naissance'] = array(
190                'saisie' => 'date_jour_mois_annee', // type de saisie
191                'options' => array(
192                        'sql' => "DATE DEFAULT '0000-00-00' NOT NULL", // declaration sql
193                        'obligatoire' => ($config_i3['naissance_obligatoire'] == 'on') ? true : false,
194                        'class'=>'nomulti'
195                ),
196                'verifier' => array(
197                        'type' => 'date',
198                        'options' => array(
199                                'format' => 'amj'
200                        )
201                )
202        );
203        $flux['sexe'] = array(
204                'saisie' => 'radio', // type de saisie
205                'options' => array(
206                        'label'=> _T('inscription3:label_civilite'),
207                        'datas'=> array(
208                                'F' => _T('inscription3:choix_feminin'),
209                                'M' => _T('inscription3:choix_masculin')
210                        ),
211                        'sql' => "varchar(2) NOT NULL default ''", // declaration sql
212                        'obligatoire' => ($config_i3['sexe_obligatoire'] == 'on') ? true : false
213                )
214        );
215       
216        $flux['commentaire']['saisie'] = 'textarea';
217        $flux['commentaire']['options'] = array_merge((is_array($flux['addresse']['options']) ? $flux['addresse']['options'] : array()),array('rows'=>5,'class'=>'adresse'));
218       
219        $flux['adresse']['saisie'] = 'textarea';
220        $flux['adresse']['options'] = array_merge((is_array($flux['addresse']['options']) ? $flux['addresse']['options'] : array()),array('rows'=>5,'class'=>'adresse'));
221
222        $flux['telephone']['verifier']['type'] = 'telephone';
223        $flux['telephone']['options'] = array('class'=>'nomulti');
224        $flux['fax']['verifier'] = 'telephone';
225        $flux['fax']['options'] = array('class'=>'nomulti');
226        $flux['mobile']['verifier']['type'] = 'telephone';
227        $flux['mobile']['options'] = array('class'=>'nomulti');
228        $flux['code_postal']['verifier']['type'] = 'code_postal';
229        $flux['code_postal']['options'] = array('class'=>'nomulti');
230
231        return $flux;
232}
233
234/**
235 * Insertion dans le pipeline formulaire_charger (SPIP)
236 *
237 * Charge des valeurs spécifiques dans le formulaire d'inscription
238 *
239 * @param array $flux Le contexte d'environnement du pipeline
240 * @return array $flux Le contexte d'environnement modifié
241 */
242function inscription3_formulaire_charger($flux){
243        if ($flux['args']['form']=='inscription'){
244                $valeurs = array();
245                $chercher_champs = charger_fonction('inscription3_champs_formulaire','inc');
246                $champs = $chercher_champs(null,'inscription');
247                foreach($champs as $clef =>$valeur) {
248            if (_request($valeur)) {
249                $valeurs[$valeur] = trim(_request($valeur));
250            }
251            if($valeur == 'naissance'){
252                if(_request('naissance') && preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/",_request('naissance'),$date_naissance)){
253                                        $valeurs['naissance_annee'] = $date_naissance[1];
254                                        $valeurs['naissance_mois'] = $date_naissance[2];
255                                        $valeurs['naissance_jour'] = $date_naissance[3];
256                }else{
257                                        $valeurs['naissance_annee'] = _request('naissance_annee');
258                                        $valeurs['naissance_mois'] = _request('naissance_mois');
259                                        $valeurs['naissance_jour'] = _request('naissance_jour');
260                }
261            }
262            }
263               
264                include_spip('cextras_pipelines');
265                $saisies = champs_extras_objet($table = 'spip_auteurs');
266                foreach($champs as $clef=>$valeur){
267                        if(!$valeurs[$valeur]){
268                                if(array_key_exists($valeur, $saisies)){
269                                        $saisie_nom = $saisies[$valeur]['options']['nom'];
270                                        if (_request($saisie_nom)) {
271                                $valeurs[$saisie_nom] = trim(_request($saisie_nom));
272                            }
273                                }
274                        }
275                       
276                }
277            $valeurs = pipeline('i3_charger_formulaire',
278                        array(
279                                'args' => $flux['args'],
280                                'data' => $valeurs
281                        ),array()
282                );
283               
284                if(is_array($flux['data'])){
285                        $flux['data'] = array_merge($flux['data'],$valeurs);
286                }else {
287                        $flux['data'] = $valeurs;
288                }
289        }
290
291        return $flux;
292}
293
294/**
295 * Insertion dans le pipeline formulaire_verifier (SPIP)
296 *
297 * Vérifie des valeurs spécifiques dans le formulaire d'inscription
298 *
299 * @param array $flux Le contexte d'environnement du pipeline
300 * @return array $flux Le contexte d'environnement modifié
301 */
302function inscription3_formulaire_verifier($flux){
303        include_spip('inc/config');
304        if ($flux['args']['form']=='configurer_inscription3'){
305                /**
306                 * On supprime l'ancienne configuration pour avoir la nouvelle dans l'ordre
307                 */
308                include_spip('inc/meta');
309                effacer_meta('inscription3');
310        }
311        if ($flux['args']['form']=='oubli'){
312                $erreurs = $flux['args']['erreurs'];
313                if(!$erreurs OR (count($erreurs) == 0)){
314                        $email = _request('oubli');
315                        $statut = sql_getfetsel('statut','spip_auteurs','email='.sql_quote($email));
316                        if($statut == '8aconfirmer'){
317                                $flux['data']['oubli'] = _T('inscription3:erreur_compte_attente_mail');
318                                $flux['data']['message_erreur'] = _T('inscription3:erreur_compte_attente');
319                        }
320                }
321        }
322        if (in_array($flux['args']['form'],array('editer_auteur','inscription'))){
323                /**
324                 * On inclue inscription3_mes_fonctions pour prendre en compte la surcharge de
325                 * formulaires_inscription_traiter en ajax
326                 */
327                $erreurs = $flux['data'];
328
329                include_spip('inscription3_fonctions');
330                include_spip('inc/editer');
331               
332                $config_i3 = lire_config('inscription3',array());
333                $erreurs['message_erreur'] = $flux['args']['erreurs']['message_erreur'];
334                if($erreurs['message_erreur'] == NULL)
335                        unset($erreurs['message_erreur']);
336                /**
337                 * Vérification des champs obligatoires
338                 * En fonction de ceux présents dans le formulaire
339                 */
340                $champs_obligatoires = charger_fonction('inscription3_champs_obligatoires','inc');
341                $obligatoires = $champs_obligatoires(null,$flux['args']['form']);
342                unset($obligatoires['email']);
343                unset($obligatoires['nom']);
344                $erreurs = array_merge($erreurs,formulaires_editer_objet_verifier('auteur',null,$obligatoires));
345               
346                if($flux['args']['form'] == 'inscription'){
347                        if(lire_config('inscription3/pass_obligatoire') == 'on' && lire_config('inscription3/pass') == 'on'){
348                                if(!_request('pass') OR !_request('password1'))
349                                        $erreurs['pass'] = _T('info_obligatoire');
350                        }
351                        else if(lire_config('inscription3/pass') == 'on'){
352                                if(_request('pass') != _request('password1')){
353                                        $erreurs['pass'] = _T('info_passes_identiques');
354                                }else if(strlen(_request('pass')) > 0){
355                                        $pass_min = !defined('_PASS_MIN') ? 6 : _PASS_MIN;
356                                        if (strlen(_request('pass')) < $pass_min) 
357                                                $erreurs['pass'] = _T('info_passe_trop_court'); 
358                                }
359                        }
360                               
361                        if($erreurs['reglement']){
362                                $erreurs['reglement'] = _T('inscription3:erreur_reglement_obligatoire');
363                        }
364                }
365               
366                if(count($erreurs))
367                        $erreurs_obligatoires = true;
368       
369            $valeurs = array();
370       
371            $verifier = charger_fonction('verifier','inc',true);
372               
373            if($verifier){
374                /**
375                         * Vérification des champs de champs extras
376                         */
377                        $champs_a_verifier = pipeline('i3_verifications_specifiques',array());
378                        //gere la correspondance champs -> _request(champs)
379                        foreach($champs_a_verifier as $clef => $type) {
380                                /*
381                                 * Si le champs n'est pas déjà en erreur suite aux champs obligatoires
382                                 * On s'assure qu'il est bien présent dans le formulaire également
383                                 */
384                                if($flux['args']['form'] == 'editer_auteur' && intval(_request('id_auteur')) > 0 && in_array($type['type'],array('email','signature'))){
385                                        $infos_auteurs = sql_fetsel('*','spip_auteurs','id_auteur='.intval(_request('id_auteur')));
386                                        if($type['type'] == 'email' && isset($type['options']['disponible'])){
387                                                if($infos_auteurs[$clef] == _request($clef))
388                                                        unset($type['options']['disponible']);
389                                        }else if($type['type'] == 'signature'){
390                                                if($infos_auteurs[$clef] == _request($clef))
391                                                        continue;
392                                        }
393                                }
394                                if(!isset($erreurs[$clef]) && _request($clef)){
395                                        $valeurs[$clef] = trim(_request($clef));
396                                        $type['options'] = array_merge(is_array($type['options']) ? $type['options'] : array(),$_GET);
397                                        $erreurs[$clef] = $verifier($valeurs[$clef],$type['type'],$type['options']);
398                                        if($erreurs[$clef] == null){
399                                                unset($erreurs[$clef]);
400                                        }
401                                }
402                        }
403                        /**
404                         * Vérification des champs de cextras
405                         * Uniquement sur le formulaire d'inscription
406                         *
407                         * On ne vérifie pas les obligatoires qui doivent être faits plus haut
408                         */
409                        if (($flux['args']['form'] == 'inscription') && $saisies = champs_extras_objet( $table = 'spip_auteurs' )) {
410                                include_spip('inc/autoriser');
411                                include_spip('inc/saisies');
412                               
413                                $saisies = saisies_lister_avec_sql($saisies);
414               
415                                // restreindre la vue selon les autorisations
416                                $id_objet = $flux['args']['args'][0]; // ? vraiment toujours ?
417                                $saisies = champs_extras_autorisation('modifier', $objet, $saisies, array_merge($flux['args'], array(
418                                        'id' => $id_objet,
419                                        'contexte' => array()))); // nous ne connaissons pas le contexte dans ce pipeline
420               
421                                foreach ($saisies as $saisie) {
422                                        $nom = $saisie['options']['nom'];
423                                        // verifier (api) + normalisation
424                                        if ($verifier
425                                           AND isset($saisie['verifier']['type'])
426                                           AND $verif = $saisie['verifier']['type']){
427                                                $options = isset($saisie['verifier']['options']) ? $saisie['verifier']['options'] : array();
428                                                $normaliser = null;
429                                                if ($erreur = $verifier(_request($nom), $verif, $options, $normaliser)) {
430                                                        $erreurs[$nom] = $erreur;
431                                                // si une valeur de normalisation a ete transmis, la prendre.
432                                                } elseif (!is_null($normaliser)) {
433                                                        set_request($nom, $normaliser);
434                                                }
435                                        }
436                                }
437                        }
438            }
439                /**
440                 * Naisance est un champs spécifique coupé en trois on le vérifie séparément
441                 * s'il est obligatoire
442                 */
443                if($erreurs['naissance']){
444                        $annee = trim(_request('naissance_annee'));
445                        $mois = trim(_request('naissance_mois'));
446                        $jour = trim(_request('naissance_jour'));
447                        if((!$annee || !$mois || !$jour) && $config_i3['naissance_obligatoire'] != 'on'){
448                                if(trim(_request('naissance')) == '0000-00-00')
449                                        unset($erreurs['naissance']);
450                        }
451                }
452                if(!$erreurs['naissance'] && _request('naissance') && (_request('naissance') != '0000-00-00')){
453                        if(_request('naissance_annee') > (date('Y')))
454                                $erreurs['naissance'] = _T('inscription3:erreur_naissance_futur');
455                        elseif(_request('naissance_annee') > (date('Y')-10))
456                                $erreurs['naissance'] = _T('inscription3:erreur_naissance_moins_cinq');
457                        elseif((date('Y') - _request('naissance_annee')) > 110)
458                                $erreurs['naissance'] = _T('inscription3:erreur_naissance_plus_110');
459                }
460               
461                $args = array_merge($flux['args'],array('champs' => $valeurs));
462               
463                /**
464                 * Offrir aux autres plugins la possibilite de verifier les donnees
465                 */
466                $erreurs = pipeline('i3_verifier_formulaire',
467                        array(
468                                'args' => $args,
469                                'data' => $erreurs
470                        )
471                );
472               
473                /**
474                 * Message d'erreur generalise
475                 */
476                if (count($erreurs)) {
477                        if(isset($erreurs_obligatoires))
478                                $erreurs['message_erreur'] .= _T('inscription3:formulaire_remplir_obligatoires');
479                        else
480                                $erreurs['message_erreur'] .= _T('inscription3:formulaire_remplir_validation');
481                }
482                $flux['data'] = $erreurs;
483        }
484       
485        return $flux;
486}
487
488/**
489 * Insertion dans le pipeline formulaire_traiter (SPIP)
490 *
491 * Traitement des valeurs spécifiques dans le formulaire d'inscription
492 *
493 * @param array $flux Le contexte d'environnement du pipeline
494 * @return array $flux Le contexte d'environnement modifié
495 */
496function inscription3_formulaire_traiter($flux){
497        include_spip('base/abstract_sql');
498        include_spip('inc/config');
499        $config_i3 = lire_config('inscription3',array());
500        if ($flux['args']['form']=='configurer_inscription3'){
501                /**
502                 * Crée les champs dans la table spip_auteurs dÚs la validation du CFG
503                 */
504                $verifier_tables = charger_fonction('inscription3_verifier_tables','inc');
505                $verifier_tables();
506        }
507        if($flux['args']['form']=='mot_de_passe'){
508                $row = sql_fetsel('id_auteur,email,login,source','spip_auteurs',array("statut<>'5poubelle'","pass<>''"),'','maj DESC','1');
509                $affordance = lire_config('inscription3/affordance_form','login');
510                switch($affordance){
511                        case 'email' : 
512                                $flux['data']['message_ok'] = _T('pass_nouveau_enregistre').
513                                        "<p>" . _T('inscription3:pass_rappel_email', array('email' => $row['email'])); break;
514                        case 'login_et_email' :
515                                $flux['data']['message_ok'] = _T('pass_nouveau_enregistre').
516                                        "<p>" . _T('inscription3:pass_rappel_login_email', array('email' => $row['email'],'login'=>$row['login']));break;
517                }
518        }
519        if ($flux['args']['form']=='inscription'){
520                include_spip('inscription3_mes_fonctions');
521               
522                $data = array();
523                /**
524                 * Les valeurs "normales" du formulaire d'inscription
525                 * qui nous permettront de retrouver l'id_auteur
526                 */
527                $nom = _request('nom_inscription');
528                $mail = _request('mail_inscription');
529               
530                /**
531                 * A ce moment là SPIP a déjà créé l'auteur et lui a déjà donné un login et pass
532                 */
533                $user = sql_fetsel('*','spip_auteurs','email='.sql_quote($mail));
534               
535                /**
536                 * Si l'on demande le passe dans le formulaire
537                 * On a un mode avec pass fourni
538                 * Sinon un mode simple
539                 */
540                if(($config_i3['pass'] == 'on') && (strlen(_request('pass'))))
541                        $mode = 'inscription_pass';
542                else
543                        $mode = 'inscription';
544       
545                /**
546                 * Generer la liste des champs a traiter
547                 * champ => valeur formulaire
548                 */
549                $chercher_champs = charger_fonction('inscription3_champs_formulaire','inc');
550                $champs = $chercher_champs(null,'inscription');
551       
552                foreach($champs as $clef => $valeur) {
553                        $valeurs[$valeur] = trim(_request($valeur));
554                        if($valeur == 'naissance'){
555                                $annee = trim(_request('naissance_annee'));
556                                $mois = _request('naissance_mois');
557                                $jour = _request('naissance_jour');
558                                $valeurs[$valeur] = sql_format_date($annee,$mois,$jour);
559                        }
560                }
561                // Definir le login s'il a besoin de l'etre
562                // NOM et LOGIN sont des champs obligatoires donc a la creation il ne doivent pas etre vide
563                // Apres on s'en fiche s'il n'est pas dans le formulaire
564                if(!$valeurs['login'] && !$nom){
565                        if($valeurs['nom_famille']||$valeurs['prenom'])
566                                $valeurs['nom'] = trim($valeurs['prenom'].' '.$valeurs['nom_famille']);
567                        else
568                                $valeurs['nom'] = strtolower(translitteration(preg_replace('/@.*/', '', $mail)));
569                }else
570                        $valeurs['nom'] = $nom;
571
572                $valeurs['email'] = $mail;
573                if(!$valeurs['login']){
574                        if($user['login'])
575                                $valeurs['login'] = $user['login'];
576                }
577               
578                $trouver_table = charger_fonction('trouver_table','base');
579               
580                //genere le tableau des valeurs a mettre a jour pour spip_auteurs
581                //toutes les clefs qu'inscription3 peut mettre a jour
582                $clefs = $trouver_table('auteurs');
583                $clefs = $clefs['field'];
584       
585                //extrait uniquement les donnees qui ont ete proposees a la modification
586                $val = array_intersect_key($valeurs,$clefs);
587               
588                /**
589                 * Si on demande le pass dans le formulaire
590                 * Le compte est automatiquement activé
591                 */
592                if($mode == 'inscription_pass'){
593                        if (strlen(_request('password')) != 0)
594                                $new_pass = _request('password');
595                        elseif($mode == 'inscription_pass')
596                    $new_pass = _request('pass');
597       
598                        if (strlen($new_pass)>0) {
599                                include_spip('inc/acces');
600                                include_spip('auth/sha256.inc');
601                                $val['htpass'] = generer_htpass($new_pass);
602                                $val['alea_actuel']  = creer_uniqid();
603                                $val['alea_futur'] = creer_uniqid();
604                                $val['pass'] = _nano_sha256($val['alea_actuel'].$new_pass);
605                                $val['htpass'] = $htpass;
606                                $val['low_sec'] = '';
607                        }
608                        $val['statut'] = $config_i3['statut_nouveau'] ? $config_i3['statut_nouveau'] : '6forum';
609                }
610               
611                /**
612                 * On met le compte en "à confirmer" si on a configurer les chose comme cela
613                 * Dans ce cas on met la bio à '' si elle n'est pas dans le form afin d'enlever le statut temporaire qui y est stocké par SPIP
614                 * Sinon si on a la bio dans le formulaire et qu'on la reçoit, on met directement un statut à
615                 * l'auteur, sinon on laisse l'ancien (nouveau normalement)
616                 */
617                if($config_i3['valider_comptes'] == 'on'){
618                        $mode = 'aconfirmer';
619                        if(!$val['bio'])
620                                $val['bio'] = '';
621                        $val['statut'] = '8aconfirmer';
622                }
623                /**
624                 * Si on a le champ bio dans le formulaire on force le statut
625                 */
626                else if(_request('bio'))
627                        $val['statut'] = $config_i3['statut_nouveau'] ? $config_i3['statut_nouveau'] : '6forum';
628               
629                if(strlen($val['pass']) == 0)
630                        unset($val['pass']);
631       
632                if (function_exists('test_inscription'))
633                        $f = 'test_inscription';
634                else $f = 'test_inscription_dist';
635
636                $desc = $f($user['bio'], $mail, $valeurs['nom'], $user['id_auteur']);
637               
638                if (is_array($desc) AND $mail = $desc['email']){
639                        include_spip('base/abstract_sql');
640                        /**
641                         * On recrée le pass pour être sûr d'avoir le bon
642                         */
643                        $desc['pass'] = creer_pass_pour_auteur($user['id_auteur']);
644                        $desc['login'] = $val['login'];
645                       
646                        /**
647                         * Mise à jour des infos
648                         */
649                        sql_updateq(
650                                "spip_auteurs",
651                                $val,
652                                'id_auteur = '.$user['id_auteur']
653                        );
654               
655                        $args = array_merge($flux['args'],array(
656                                'id_auteur' => $user['id_auteur'],
657                                'champs' => $valeurs
658                        ));
659                       
660                        /**
661                         * Prise en charge du logo
662                         */
663                        if(isset($_FILES['logo']) && ($_FILES['logo']['error'] == 0)){
664                            $chercher_logo = charger_fonction('chercher_logo', 'inc');
665                               
666                                // supprimer l'ancien logo
667                                if ($on = $chercher_logo($id_auteur, 'id_auteur', 'on')) @unlink($on[0]);
668               
669                                // ajouter le nouveau
670                                include_spip('action/iconifier');
671                                action_spip_image_ajouter_dist(
672                                        type_du_logo('id_auteur').'on'.$user['id_auteur'], false, false
673                                );
674                                // indiquer qu'on doit recalculer les images
675                                $GLOBALS['var_images'] = true;
676                        }
677                    /**
678                     * On appelle le pipeline traiter de inscription3
679                     * On connait dorénavant l'id_auteur
680                     * Ce pipeline doit retourner un array avec les valeurs possibles suivantes :
681                     * - ne_pas_confirmer_par_mail boolean (permet de squeezer la notification)
682                     * - message_ok string (permet de modifier le message de retour du formulaire)
683                     * - editable boolean (permet de modifier le comportement d'affichage au retour)
684                     */
685                        $traiter_plugin = pipeline('i3_traiter_formulaire',
686                                array(
687                                        'args' => $args,
688                                        'data' => $flux['data']
689                                )
690                        );
691                        if(!$traiter_plugin['ne_pas_confirmer_par_mail']){
692                                if($mode == 'aconfirmer'){
693                                        $traiter_plugin['message_ok'] = _T('inscription3:form_retour_aconfirmer');
694                                        if ($notifications = charger_fonction('notifications', 'inc')) {
695                                                $notifications('i3_inscriptionauteur', $user['id_auteur'],
696                                                        array('statut' => '8aconfirmer')
697                                                );
698                                        }
699                                }else if($mode == 'inscription_pass'){
700                                        $traiter_plugin['message_ok'] = _T('inscription3:form_retour_inscription_pass');
701                                        if ($notifications = charger_fonction('notifications', 'inc')) {
702                                                $notifications('i3_inscriptionauteur', $user['id_auteur'],
703                                                        array('statut' => $val['statut'],'pass' => 'ok')
704                                                );
705                                        }
706                                        if($config_i3['auto_login'] == 'on'){
707                                                $auteur = sql_fetsel('*','spip_auteurs','id_auteur='.intval($user['id_auteur']));
708                                                $session = charger_fonction('session','inc');
709                                                $session($auteur);
710                                                $traiter_plugin['message_ok'] = _T('inscription3:form_retour_inscription_pass_logue');
711                                        }
712                                }else{
713                                        $envoyer_mail = charger_fonction('envoyer_mail','inc');
714                                        if (function_exists('envoyer_inscription3')){
715                                                $mode = $config_i3['statut_nouveau'];
716                                                $f = 'envoyer_inscription3';
717                                                list($sujet,$msg,$from,$head) = $f($desc, $nom, $mode, $id);
718                                        }
719                                        if($desc){
720                                                if (!$envoyer_mail($mail, $sujet, $msg, $from, $head))
721                                                        $traiter_plugin['message_ok'] = _T('form_forum_probleme_mail');
722                                                else{
723                                                        $traiter_plugin['message_ok'] = _T('form_forum_identifiant_mail');
724                                                }
725                                        }else{
726                                                $traiter_plugin['message_ok'] = _T('form_forum_identifiant_mail');
727                                        }
728                                }
729                        }
730                        $flux['data']['editable'] = $traiter_plugin['editable'];
731                        $flux['data']['message_ok'] = $traiter_plugin['message_ok'];
732                        $flux['data']['redirect'] = $traiter_plugin['redirect'];
733                }
734        }
735        return $flux;
736}
737
738/**
739 * Insertion dans le pipeline recuperer_fond (SPIP)
740 * InsÚre des champs dans le formulaire d'inscription
741 * Ajoute un vérificateur de complexité de mot de passe sur les formulaires de mot de passe et d'édition d'auteur si besoin
742 *
743 * @param array $flux
744 * @return array
745 */
746function inscription3_recuperer_fond($flux){
747        include_spip('inc/config');
748        $config = lire_config('inscription3',array());
749        if ($flux['args']['fond']=='formulaires/inscription'){
750                $insc = recuperer_fond('formulaires/inc-inscription-inscription3',$flux['data']['contexte']);
751                $flux['data']['texte'] = preg_replace(",(<li [^>]*class=[\"']editer saisie_mail_inscription.*<\/li>),Uims","\\1".$insc,$flux['data']['texte'],1);
752                if(($texte_inscription = $config['inscription_texte']) && ($texte_inscription != 'origine')){
753                        switch($texte_inscription){
754                                case 'aucun' :
755                                        $flux['data']['texte'] = preg_replace(",<p [^>]*class=[\"']explication.*<\/p>,Uims",'',$flux['data']['texte'],1);
756                                        break;
757                                case 'libre' :
758                                        $texte = PtoBR(propre($config['inscription_texte_libre']));
759                                        $flux['data']['texte'] = preg_replace(",(<p class=[\"']explication mode[\"']>)(.*)(<\/p>),Uims","\\1".$texte."\\3",$flux['data']['texte'],1);
760                                        break;
761                        }               
762                }
763        }
764        if ($flux['args']['fond']=='formulaires/login'){
765                if(($type_affordance = $config['affordance_form']) && ($type_affordance != 'login')){
766                        switch($type_affordance){
767                                case 'email' :
768                                        $label = _T('inscription3:votre_mail');
769                                        break;
770                                case 'login_et_email' : 
771                                        $label = _T('inscription3:votre_login_mail');
772                                        break;
773                                case 'libre' :
774                                        $label = $config['inscription3/affordance_form_libre'] ? $config['inscription3/affordance_form_libre'] : _T('login_login2');
775                                        break;
776                        }
777                        if($label)
778                                $flux['data']['texte'] = preg_replace(",(<label.*for=\"var_login\">)(.*)(<\/label>),Uims","\\1".$label."\\3",$flux['data']['texte'],1); 
779                }
780        }
781        /**
782         * On ajoute un vérificateur de complexité de mot de passe
783         */
784        if(($config['inscription3/password_complexite'] == 'on') && in_array($flux['args']['fond'],array('formulaires/mot_de_passe','formulaires/editer_auteur'))){
785                $js = recuperer_fond('formulaires/inc-js_pass_verification',$flux['data']['contexte']);
786                $flux['data']['texte'] = preg_replace(",(<\/form>)(.*),Uims","\\1".$js."\\2",$flux['data']['texte'],1);
787        }
788        return $flux;
789}
790
791/**
792 * Insertion dans le pipeline editer_contenu_objet (SPIP)
793 * EnlÚve les champs dans le formulaire d'édition d'auteur pour le profil utilisateur
794 * comme il est configuré dans inscription3
795 *
796 * @param array $flux
797 * @return array
798 */
799function inscription3_editer_contenu_objet($flux){
800        $args = $flux['args'];
801        $type = $args['type'];
802        if ($type == 'auteur' && intval($args['id']) > 0 && !test_espace_prive()){
803                include_spip('inc/config');
804                $config = lire_config('inscription3',array());
805                $champs_spip = array('nom','email','bio','pgp','url_site','nom_site','login','pass');
806                $champs_vires = array();
807                $inserer_saisie = '';
808                foreach($champs_spip as $champ){
809                        if($config[$champ.'_fiche_mod'] != 'on'){
810                                if($champ == 'login'){
811                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_new_($champ).*<\/li>),Uims","",$flux['data'],1);
812                                }else if($champ == 'pass'){
813                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_new_($champ).*<\/li>),Uims","",$flux['data'],1);
814                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_new_($champ)2.*<\/li>),Uims","",$flux['data'],1);
815                                }else{
816                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_($champ).*<\/li>),Uims","",$flux['data'],1);
817                                }
818                                $champs_vires[] = $champ;
819                                if(in_array($champ, array('nom','email')))
820                                        $inserer_saisie .= "<input type='hidden' name='$champ' value='".$flux['args']['contexte'][$champ]."' />\n";                             
821                        }
822                        /**
823                         * On vire le champs création du formulaire (ne doit pas être modifié manuellement)
824                         * Si on n'a pas ce champs rempli, on utilise la date actuelle pour le remplir
825                         * Logiquement ce champs est rempli automatiquement via pre_insertion pour tous les auteurs
826                         */
827                        if($config['creation'] == 'on'){
828                                $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_creation.*<\/li>),Uims","",$flux['data'],1);
829                                if($flux['args']['contexte']['creation'] == '0000-00-00 00:00:00'){
830                                        $flux['args']['contexte']['creation'] = date('Y-m-d H:i:s');
831                                }
832                                $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_cextra_creation.*<\/li>),Uims","",$flux['data'],1);
833                                $inserer_saisie .= "<input type='hidden' name='creation' value='".$flux['args']['contexte']['creation']."' />\n";
834                        }
835                }
836                if(in_array('url_site',$champs_vires) && in_array('nom_site',$champs_vires)){
837                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer_liens.*<\/li>),Uims","",$flux['data'],1);
838                }
839                if(in_array('pass',$champs_vires) && in_array('login',$champs_vires)){
840                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer_identification.*<\/li>),Uims","",$flux['data'],1);
841                }
842                if(strlen($inserer_saisie)){
843                        $flux['data'] = preg_replace('%(<!-- controles md5 -->)%is',$inserer_saisie."\n".'$1', $flux['data']);
844                }
845        }
846        return $flux;
847}
848
849/**
850 * Insertion dans le pipeline "notifications_destinataires" (SPIP)
851 *
852 * En fonction du type de notification, rempli un tableau d'adresses emails
853 *
854 * @param array $flux Le contexte du pipeline
855 * @return array
856 */
857function inscription3_notifications_destinataires($flux){
858        $quoi = $flux['args']['quoi'];
859        $options = $flux['args']['options'];
860
861        /**
862         * Cas de la validation ou invalidation d'un compte d'un utilisateur
863         * Cas également de l'inscription d'un auteur
864         * Envoi à l'utilisateur ($options['type'] == 'user')
865         */
866        if (($quoi=='instituerauteur' 
867                AND $options['statut_ancien'] == '8aconfirmer'
868                AND $options['type'] == 'user') OR
869                ($quoi=='i3_inscriptionauteur' 
870                AND $options['type'] == 'user')){
871       
872                $id_auteur = $flux['args']['id']; 
873                include_spip('base/abstract_sql'); 
874                $mail = sql_getfetsel("email", "spip_auteurs", "id_auteur=".intval($id_auteur));
875                $flux['data'][] = $mail;
876        }
877        /**
878         * Cas de la validation ou invalidation d'un compte d'un utilisateur
879         * Envoi aux administrateurs ($options['type'] == 'admin')
880         */
881        else if(($quoi=='instituerauteur' 
882                AND $options['statut_ancien'] == '8aconfirmer'
883                AND $options['type'] == 'admin') OR
884                ($quoi=='i3_inscriptionauteur' 
885                AND $options['type'] == 'admin')){
886                $admins = sql_select('email','spip_auteurs','statut="0minirezo"');
887               
888                while ($qui = sql_fetch($admins)) {
889                        $flux['data'][] = $qui['email'];
890                }
891        }
892        return $flux;
893}
894
895/**
896 * Insertion dans le pipeline taches_generales_cron (SPIP)
897 *
898 * Vérifie la présence à intervalle régulier d'utilisateurs à valider ou invalider et notifie les admins
899 *
900 * @param array $taches_generales Un array des tâches du cron de SPIP
901 * @return L'array des taches complété
902 */
903function inscription3_taches_generales_cron($taches_generales){
904        $taches_generales['inscription3_taches_generales'] = 24*60*60;
905        return $taches_generales;
906}
907
908/**
909 * Insertion dans le pipeline pre_insertion (SPIP)
910 *
911 * Insérer la date d'inscription à la création de l'auteur
912 * - la date d'inscription ne se met qu'à ce moment là
913 *
914 * @param array $flux Le contexte du pipeline
915 * @return array
916 */
917function inscription3_pre_insertion($flux){
918        include_spip('inc/config');
919        if (lire_config('inscription3/creation') == 'on' && $flux['args']['table']=='spip_auteurs'){
920                $flux['data']['creation'] = date('Y-m-d H:i:s');
921        }
922        return $flux;
923}
924
925/**
926 * Insertion dans le pipeline openid_recuperer_identite (OpenID)
927 * On décrypte les informations fournies par OpenID pour les insérer dans notre formulaire
928 *
929 * @param $flux array
930 *      Le contexte du pipeline
931 *      Les informations fournies par le compte openid de la personne souhaitant s'inscrire sont dans $flux['args']
932 * @return $flux
933 *      Le contexte du pipeline décrypté, on place dans $flux['data'] les informations qui nous intéresse
934 */
935function inscription3_openid_recuperer_identite($flux){
936        if(isset($flux['args']['dob'])){
937                $flux['data']['naissance'] = $flux['args']['dob'];
938        }
939        if(isset($flux['args']['country'])){
940                $id_pays = sql_getfetsel('id_pays','spip_geo_pays','code_iso='.sql_quote($flux['args']['country']));
941                $flux['data']['pays'] = $id_pays;
942        }
943        if(isset($flux['args']['postcode'])){
944                $flux['data']['code_postal'] = $flux['args']['postcode'];
945        }
946        if(isset($flux['args']['gender'])){
947                $flux['data']['sexe'] = $flux['args']['gender'];
948        }
949        if(isset($flux['args']['fullname'])){
950                $noms = explode(' ',$flux['args']['fullname']);
951                $flux['data']['prenom'] = $noms[0];
952                array_shift($noms);
953                $flux['data']['nom_famille'] = implode(' ',$noms);
954        }
955        return $flux;
956}
957
958/**
959 * Insertion dans le pipeline openid_inscrire_redirect (OpenID)
960 */
961function inscription3_openid_inscrire_redirect($flux){
962       
963        $auteur = $flux['args']['infos_auteur'];
964
965        $url = $flux['args']['url'];
966       
967        $url = parametre_url($url,'code_postal',$auteur['code_postal']);
968        $url = parametre_url($url,'pays',$auteur['pays']);
969        $url = parametre_url($url,'naissance',$auteur['naissance']);
970        $url = parametre_url($url,'sexe',$auteur['sexe']);
971        $url = parametre_url($url,'login',$auteur['login']);
972        $url = parametre_url($url,'nom_famille',$auteur['nom_famille']);
973        $url = parametre_url($url,'prenom',$auteur['prenom']);
974        $flux['data'] = $url;
975        return $flux;
976}
977?>
Note: See TracBrowser for help on using the repository browser.