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

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

oups oubli

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){
448                                unset($erreurs['naissance']);
449                        }
450                        if($config_i3['naissance_obligatoire'] != 'on'){
451                                if(trim(_request('naissance')) == '0000-00-00')
452                                        unset($erreurs['naissance']);
453                        }
454                }
455                if(!$erreurs['naissance'] && _request('naissance') && (_request('naissance') != '0000-00-00')){
456                        if(_request('naissance_annee') > (date('Y')))
457                                $erreurs['naissance'] = _T('inscription3:erreur_naissance_futur');
458                        elseif(_request('naissance_annee') > (date('Y')-10))
459                                $erreurs['naissance'] = _T('inscription3:erreur_naissance_moins_cinq');
460                        elseif((date('Y') - _request('naissance_annee')) > 110)
461                                $erreurs['naissance'] = _T('inscription3:erreur_naissance_plus_110');
462                }
463               
464                $args = array_merge($flux['args'],array('champs' => $valeurs));
465               
466                /**
467                 * Offrir aux autres plugins la possibilite de verifier les donnees
468                 */
469                $erreurs = pipeline('i3_verifier_formulaire',
470                        array(
471                                'args' => $args,
472                                'data' => $erreurs
473                        )
474                );
475               
476                /**
477                 * Message d'erreur generalise
478                 */
479                if (count($erreurs)) {
480                        if(isset($erreurs_obligatoires))
481                                $erreurs['message_erreur'] .= _T('inscription3:formulaire_remplir_obligatoires');
482                        else
483                                $erreurs['message_erreur'] .= _T('inscription3:formulaire_remplir_validation');
484                }
485                $flux['data'] = $erreurs;
486        }
487       
488        return $flux;
489}
490
491/**
492 * Insertion dans le pipeline formulaire_traiter (SPIP)
493 *
494 * Traitement des valeurs spécifiques dans le formulaire d'inscription
495 *
496 * @param array $flux Le contexte d'environnement du pipeline
497 * @return array $flux Le contexte d'environnement modifié
498 */
499function inscription3_formulaire_traiter($flux){
500        include_spip('base/abstract_sql');
501        include_spip('inc/config');
502        $config_i3 = lire_config('inscription3',array());
503        if ($flux['args']['form']=='configurer_inscription3'){
504                /**
505                 * Crée les champs dans la table spip_auteurs dÚs la validation du CFG
506                 */
507                $verifier_tables = charger_fonction('inscription3_verifier_tables','inc');
508                $verifier_tables();
509        }
510        if($flux['args']['form']=='mot_de_passe'){
511                $row = sql_fetsel('id_auteur,email,login,source','spip_auteurs',array("statut<>'5poubelle'","pass<>''"),'','maj DESC','1');
512                $affordance = lire_config('inscription3/affordance_form','login');
513                switch($affordance){
514                        case 'email' : 
515                                $flux['data']['message_ok'] = _T('pass_nouveau_enregistre').
516                                        "<p>" . _T('inscription3:pass_rappel_email', array('email' => $row['email'])); break;
517                        case 'login_et_email' :
518                                $flux['data']['message_ok'] = _T('pass_nouveau_enregistre').
519                                        "<p>" . _T('inscription3:pass_rappel_login_email', array('email' => $row['email'],'login'=>$row['login']));break;
520                }
521        }
522        if ($flux['args']['form']=='inscription'){
523                include_spip('inscription3_mes_fonctions');
524               
525                $data = array();
526                /**
527                 * Les valeurs "normales" du formulaire d'inscription
528                 * qui nous permettront de retrouver l'id_auteur
529                 */
530                $nom = _request('nom_inscription');
531                $mail = _request('mail_inscription');
532               
533                /**
534                 * A ce moment là SPIP a déjà créé l'auteur et lui a déjà donné un login et pass
535                 */
536                $user = sql_fetsel('*','spip_auteurs','email='.sql_quote($mail));
537               
538                /**
539                 * Si l'on demande le passe dans le formulaire
540                 * On a un mode avec pass fourni
541                 * Sinon un mode simple
542                 */
543                if(($config_i3['pass'] == 'on') && (strlen(_request('pass')))){
544                        $mode = 'inscription_pass';
545                }
546                else{
547                        $mode = 'inscription';
548                }
549       
550                /**
551                 * Generer la liste des champs a traiter
552                 * champ => valeur formulaire
553                 */
554                $chercher_champs = charger_fonction('inscription3_champs_formulaire','inc');
555                $champs = $chercher_champs(null,'inscription');
556       
557                foreach($champs as $clef => $valeur) {
558                        $valeurs[$valeur] = trim(_request($valeur));
559                        if($valeur == 'naissance'){
560                                $annee = trim(_request('naissance_annee'));
561                                $mois = _request('naissance_mois');
562                                $jour = _request('naissance_jour');
563                                $valeurs[$valeur] = sql_format_date($annee,$mois,$jour);
564                        }
565                }
566                // Definir le login s'il a besoin de l'etre
567                // NOM et LOGIN sont des champs obligatoires donc a la creation il ne doivent pas etre vide
568                // Apres on s'en fiche s'il n'est pas dans le formulaire
569                if(!$valeurs['login'] && !$nom){
570                        if($valeurs['nom_famille']||$valeurs['prenom']){
571                                $valeurs['nom'] = trim($valeurs['prenom'].' '.$valeurs['nom_famille']);
572                        }
573                        else{
574                                $valeurs['nom'] = strtolower(translitteration(preg_replace('/@.*/', '', $mail)));
575                        }
576                }else{
577                        $valeurs['nom'] = $nom;
578                }
579                $valeurs['email'] = $mail;
580                if(!$valeurs['login']){
581                        if($user['login']){
582                                $valeurs['login'] = $user['login'];
583                        }
584                }
585                $trouver_table = charger_fonction('trouver_table','base');
586               
587                //genere le tableau des valeurs a mettre a jour pour spip_auteurs
588                //toutes les clefs qu'inscription3 peut mettre a jour
589                $clefs = $trouver_table('auteurs');
590                $clefs = $clefs['field'];
591       
592                //extrait uniquement les donnees qui ont ete proposees a la modification
593                $val = array_intersect_key($valeurs,$clefs);
594               
595                /**
596                 * Si on demande le pass dans le formulaire
597                 * Le compte est automatiquement activé
598                 */
599                if($mode == 'inscription_pass'){
600                        if (strlen(_request('password')) != 0)
601                                $new_pass = _request('password');
602                        elseif($mode == 'inscription_pass')
603                    $new_pass = _request('pass');
604       
605                        if (strlen($new_pass)>0) {
606                                include_spip('inc/acces');
607                                $val['htpass'] = generer_htpass($new_pass);
608                                $val['alea_actuel']  = creer_uniqid();
609                                $val['alea_futur'] = creer_uniqid();
610                                $val['pass'] = md5($val['alea_actuel'].$new_pass);
611                                $val['htpass'] = $htpass;
612                                $val['low_sec'] = '';
613                        }
614                        $val['statut'] = $config_i3['statut_nouveau'] ? $config_i3['statut_nouveau'] : '6forum';
615                }
616               
617                /**
618                 * On met le compte en "à confirmer" si on a configurer les chose comme cela
619                 * 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
620                 * Sinon si on a la bio dans le formulaire et qu'on la reçoit, on met directement un statut à
621                 * l'auteur, sinon on laisse l'ancien (nouveau normalement)
622                 */
623                if($config_i3['valider_comptes'] == 'on'){
624                        $mode = 'aconfirmer';
625                        if(!$val['bio']){
626                                $val['bio'] = '';
627                        }
628                        $val['statut'] = '8aconfirmer';
629                }
630                /**
631                 * Si on a le champ bio dans le formulaire on force le statut
632                 */
633                else if(_request('bio')){
634                        $val['statut'] = $config_i3['statut_nouveau'] ? $config_i3['statut_nouveau'] : '6forum';
635                }
636               
637                $pass_length = strlen($val['pass']);
638                if($pass_length == 0){
639                        unset($val['pass']);
640                }
641       
642                if (function_exists('test_inscription'))
643                        $f = 'test_inscription';
644                else $f = 'test_inscription_dist';
645
646                $desc = $f($user['bio'], $mail, $valeurs['nom'], $user['id_auteur']);
647               
648                if (is_array($desc) AND $mail = $desc['email']){
649                        include_spip('base/abstract_sql');
650                        /**
651                         * On recrée le pass pour être sûr d'avoir le bon
652                         */
653                        $desc['pass'] = creer_pass_pour_auteur($user['id_auteur']);
654                        $desc['login'] = $val['login'];
655                       
656                        /**
657                         * Mise à jour des infos
658                         */
659                        sql_updateq(
660                                "spip_auteurs",
661                                $val,
662                                'id_auteur = '.$user['id_auteur']
663                        );
664               
665                        $args = array_merge($flux['args'],array(
666                                'id_auteur' => $user['id_auteur'],
667                                'champs' => $valeurs
668                        ));
669                       
670                        /**
671                         * Prise en charge du logo
672                         */
673                        if(isset($_FILES['logo']) && ($_FILES['logo']['error'] == 0)){
674                            $chercher_logo = charger_fonction('chercher_logo', 'inc');
675                               
676                                // supprimer l'ancien logo
677                                if ($on = $chercher_logo($id_auteur, 'id_auteur', 'on')) @unlink($on[0]);
678               
679                                // ajouter le nouveau
680                                include_spip('action/iconifier');
681                                action_spip_image_ajouter_dist(
682                                        type_du_logo('id_auteur').'on'.$user['id_auteur'], false, false
683                                );
684                                // indiquer qu'on doit recalculer les images
685                                $GLOBALS['var_images'] = true;
686                        }
687                    /**
688                     * On appelle le pipeline traiter de inscription3
689                     * On connait dorénavant l'id_auteur
690                     * Ce pipeline doit retourner un array avec les valeurs possibles suivantes :
691                     * - ne_pas_confirmer_par_mail boolean (permet de squeezer la notification)
692                     * - message_ok string (permet de modifier le message de retour du formulaire)
693                     * - editable boolean (permet de modifier le comportement d'affichage au retour)
694                     */
695                        $traiter_plugin = pipeline('i3_traiter_formulaire',
696                                array(
697                                        'args' => $args,
698                                        'data' => $flux['data']
699                                )
700                        );
701                        if(!$traiter_plugin['ne_pas_confirmer_par_mail']){
702                                if($mode == 'aconfirmer'){
703                                        $traiter_plugin['message_ok'] = _T('inscription3:form_retour_aconfirmer');
704                                        if ($notifications = charger_fonction('notifications', 'inc')) {
705                                                $notifications('i3_inscriptionauteur', $user['id_auteur'],
706                                                        array('statut' => '8aconfirmer')
707                                                );
708                                        }
709                                }else if($mode == 'inscription_pass'){
710                                        $traiter_plugin['message_ok'] = _T('inscription3:form_retour_inscription_pass');
711                                        if ($notifications = charger_fonction('notifications', 'inc')) {
712                                                $notifications('i3_inscriptionauteur', $user['id_auteur'],
713                                                        array('statut' => $val['statut'],'pass' => 'ok')
714                                                );
715                                        }
716                                        if($config_i3['auto_login'] == 'on'){
717                                                $auteur = sql_fetsel('*','spip_auteurs','id_auteur='.intval($user['id_auteur']));
718                                                $session = charger_fonction('session','inc');
719                                                $session($auteur);
720                                                $traiter_plugin['message_ok'] = _T('inscription3:form_retour_inscription_pass_logue');
721                                        }
722                                }else{
723                                        $envoyer_mail = charger_fonction('envoyer_mail','inc');
724                                        if (function_exists('envoyer_inscription3')){
725                                                $mode = $config_i3['statut_nouveau'];
726                                                $f = 'envoyer_inscription3';
727                                                list($sujet,$msg,$from,$head) = $f($desc, $nom, $mode, $id);
728                                        }
729                                        if($desc){
730                                                if (!$envoyer_mail($mail, $sujet, $msg, $from, $head))
731                                                        $traiter_plugin['message_ok'] = _T('form_forum_probleme_mail');
732                                                else{
733                                                        $traiter_plugin['message_ok'] = _T('form_forum_identifiant_mail');
734                                                }
735                                        }else{
736                                                $traiter_plugin['message_ok'] = _T('form_forum_identifiant_mail');
737                                        }
738                                }
739                        }
740                       
741                        $flux['data']['editable'] = $traiter_plugin['editable'];
742                        $flux['data']['message_ok'] = $traiter_plugin['message_ok'];
743                        $flux['data']['redirect'] = $traiter_plugin['redirect'];
744                }
745        }
746        return $flux;
747}
748
749/**
750 * Insertion dans le pipeline recuperer_fond (SPIP)
751 * InsÚre des champs dans le formulaire d'inscription
752 * Ajoute un vérificateur de complexité de mot de passe sur les formulaires de mot de passe et d'édition d'auteur si besoin
753 *
754 * @param array $flux
755 * @return array
756 */
757function inscription3_recuperer_fond($flux){
758        include_spip('inc/config');
759        $config = lire_config('inscription3',array());
760        if ($flux['args']['fond']=='formulaires/inscription'){
761                $insc = recuperer_fond('formulaires/inc-inscription-inscription3',$flux['data']['contexte']);
762                $flux['data']['texte'] = preg_replace(",(<li [^>]*class=[\"']editer saisie_mail_inscription.*<\/li>),Uims","\\1".$insc,$flux['data']['texte'],1);
763                if(($texte_inscription = $config['inscription_texte']) && ($texte_inscription != 'origine')){
764                        switch($texte_inscription){
765                                case 'aucun' :
766                                        $flux['data']['texte'] = preg_replace(",<p [^>]*class=[\"']explication.*<\/p>,Uims",'',$flux['data']['texte'],1);
767                                        break;
768                                case 'libre' :
769                                        $texte = PtoBR(propre($config['inscription_texte_libre']));
770                                        $flux['data']['texte'] = preg_replace(",(<p class=[\"']explication mode[\"']>)(.*)(<\/p>),Uims","\\1".$texte."\\3",$flux['data']['texte'],1);
771                                        break;
772                        }               
773                }
774        }
775        if ($flux['args']['fond']=='formulaires/login'){
776                if(($type_affordance = $config['affordance_form']) && ($type_affordance != 'login')){
777                        switch($type_affordance){
778                                case 'email' :
779                                        $label = _T('inscription3:votre_mail');
780                                        break;
781                                case 'login_et_email' : 
782                                        $label = _T('inscription3:votre_login_mail');
783                                        break;
784                                case 'libre' :
785                                        $label = $config['inscription3/affordance_form_libre'] ? $config['inscription3/affordance_form_libre'] : _T('login_login2');
786                                        break;
787                        }
788                        if($label)
789                                $flux['data']['texte'] = preg_replace(",(<label.*for=\"var_login\">)(.*)(<\/label>),Uims","\\1".$label."\\3",$flux['data']['texte'],1); 
790                }
791        }
792        /**
793         * On ajoute un vérificateur de complexité de mot de passe
794         */
795        if(($config['inscription3/password_complexite'] == 'on') && in_array($flux['args']['fond'],array('formulaires/mot_de_passe','formulaires/editer_auteur'))){
796                $js = recuperer_fond('formulaires/inc-js_pass_verification',$flux['data']['contexte']);
797                $flux['data']['texte'] = preg_replace(",(<\/form>)(.*),Uims","\\1".$js."\\2",$flux['data']['texte'],1);
798        }
799        return $flux;
800}
801
802/**
803 * Insertion dans le pipeline editer_contenu_objet (SPIP)
804 * EnlÚve les champs dans le formulaire d'édition d'auteur pour le profil utilisateur
805 * comme il est configuré dans inscription3
806 *
807 * @param array $flux
808 * @return array
809 */
810function inscription3_editer_contenu_objet($flux){
811        $args = $flux['args'];
812        $type = $args['type'];
813        if ($type == 'auteur' && intval($args['id']) > 0 && !test_espace_prive()){
814                include_spip('inc/config');
815                $config = lire_config('inscription3',array());
816                $champs_spip = array('nom','email','bio','pgp','url_site','nom_site','login','pass');
817                $champs_vires = array();
818                $inserer_saisie = '';
819                foreach($champs_spip as $champ){
820                        if($config[$champ.'_fiche_mod'] != 'on'){
821                                if($champ == 'login'){
822                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_new_($champ).*<\/li>),Uims","",$flux['data'],1);
823                                }else if($champ == 'pass'){
824                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_new_($champ).*<\/li>),Uims","",$flux['data'],1);
825                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_new_($champ)2.*<\/li>),Uims","",$flux['data'],1);
826                                }else{
827                                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_($champ).*<\/li>),Uims","",$flux['data'],1);
828                                }
829                                $champs_vires[] = $champ;
830                                if(in_array($champ, array('nom','email')))
831                                        $inserer_saisie .= "<input type='hidden' name='$champ' value='".$flux['args']['contexte'][$champ]."' />\n";                             
832                        }
833                        /**
834                         * On vire le champs création du formulaire (ne doit pas être modifié manuellement)
835                         * Si on n'a pas ce champs rempli, on utilise la date actuelle pour le remplir
836                         * Logiquement ce champs est rempli automatiquement via pre_insertion pour tous les auteurs
837                         */
838                        if($config['creation'] == 'on'){
839                                $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_creation.*<\/li>),Uims","",$flux['data'],1);
840                                if($flux['args']['contexte']['creation'] == '0000-00-00 00:00:00'){
841                                        $flux['args']['contexte']['creation'] = date('Y-m-d H:i:s');
842                                }
843                                $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer editer_cextra_creation.*<\/li>),Uims","",$flux['data'],1);
844                                $inserer_saisie .= "<input type='hidden' name='creation' value='".$flux['args']['contexte']['creation']."' />\n";
845                        }
846                }
847                if(in_array('url_site',$champs_vires) && in_array('nom_site',$champs_vires)){
848                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer_liens.*<\/li>),Uims","",$flux['data'],1);
849                }
850                if(in_array('pass',$champs_vires) && in_array('login',$champs_vires)){
851                        $flux['data'] = preg_replace(",(<li [^>]*class=[\"']editer_identification.*<\/li>),Uims","",$flux['data'],1);
852                }
853                if(strlen($inserer_saisie)){
854                        $flux['data'] = preg_replace('%(<!-- controles md5 -->)%is',$inserer_saisie."\n".'$1', $flux['data']);
855                }
856        }
857        return $flux;
858}
859
860/**
861 * Insertion dans le pipeline "notifications_destinataires" (SPIP)
862 *
863 * En fonction du type de notification, rempli un tableau d'adresses emails
864 *
865 * @param array $flux Le contexte du pipeline
866 * @return array
867 */
868function inscription3_notifications_destinataires($flux){
869        $quoi = $flux['args']['quoi'];
870        $options = $flux['args']['options'];
871
872        /**
873         * Cas de la validation ou invalidation d'un compte d'un utilisateur
874         * Cas également de l'inscription d'un auteur
875         * Envoi à l'utilisateur ($options['type'] == 'user')
876         */
877        if (($quoi=='instituerauteur' 
878                AND $options['statut_ancien'] == '8aconfirmer'
879                AND $options['type'] == 'user') OR
880                ($quoi=='i3_inscriptionauteur' 
881                AND $options['type'] == 'user')){
882       
883                $id_auteur = $flux['args']['id']; 
884                include_spip('base/abstract_sql'); 
885                $mail = sql_getfetsel("email", "spip_auteurs", "id_auteur=".intval($id_auteur));
886                $flux['data'][] = $mail;
887        }
888        /**
889         * Cas de la validation ou invalidation d'un compte d'un utilisateur
890         * Envoi aux administrateurs ($options['type'] == 'admin')
891         */
892        else if(($quoi=='instituerauteur' 
893                AND $options['statut_ancien'] == '8aconfirmer'
894                AND $options['type'] == 'admin') OR
895                ($quoi=='i3_inscriptionauteur' 
896                AND $options['type'] == 'admin')){
897                $admins = sql_select('email','spip_auteurs','statut="0minirezo"');
898               
899                while ($qui = sql_fetch($admins)) {
900                        $flux['data'][] = $qui['email'];
901                }
902        }
903        return $flux;
904}
905
906/**
907 * Insertion dans le pipeline taches_generales_cron (SPIP)
908 *
909 * Vérifie la présence à intervalle régulier d'utilisateurs à valider ou invalider et notifie les admins
910 *
911 * @param array $taches_generales Un array des tâches du cron de SPIP
912 * @return L'array des taches complété
913 */
914function inscription3_taches_generales_cron($taches_generales){
915        $taches_generales['inscription3_taches_generales'] = 24*60*60;
916        return $taches_generales;
917}
918
919/**
920 * Insertion dans le pipeline pre_insertion (SPIP)
921 *
922 * Insérer la date d'inscription à la création de l'auteur
923 * - la date d'inscription ne se met qu'à ce moment là
924 *
925 * @param array $flux Le contexte du pipeline
926 * @return array
927 */
928function inscription3_pre_insertion($flux){
929        include_spip('inc/config');
930        if (lire_config('inscription3/creation') == 'on' && $flux['args']['table']=='spip_auteurs'){
931                $flux['data']['creation'] = date('Y-m-d H:i:s');
932        }
933        return $flux;
934}
935
936/**
937 * Insertion dans le pipeline openid_recuperer_identite (OpenID)
938 * On décrypte les informations fournies par OpenID pour les insérer dans notre formulaire
939 *
940 * @param $flux array
941 *      Le contexte du pipeline
942 *      Les informations fournies par le compte openid de la personne souhaitant s'inscrire sont dans $flux['args']
943 * @return $flux
944 *      Le contexte du pipeline décrypté, on place dans $flux['data'] les informations qui nous intéresse
945 */
946function inscription3_openid_recuperer_identite($flux){
947        if(isset($flux['args']['dob'])){
948                $flux['data']['naissance'] = $flux['args']['dob'];
949        }
950        if(isset($flux['args']['country'])){
951                $id_pays = sql_getfetsel('id_pays','spip_geo_pays','code_iso='.sql_quote($flux['args']['country']));
952                $flux['data']['pays'] = $id_pays;
953        }
954        if(isset($flux['args']['postcode'])){
955                $flux['data']['code_postal'] = $flux['args']['postcode'];
956        }
957        if(isset($flux['args']['gender'])){
958                $flux['data']['sexe'] = $flux['args']['gender'];
959        }
960        if(isset($flux['args']['fullname'])){
961                $noms = explode(' ',$flux['args']['fullname']);
962                $flux['data']['prenom'] = $noms[0];
963                array_shift($noms);
964                $flux['data']['nom_famille'] = implode(' ',$noms);
965        }
966        return $flux;
967}
968
969/**
970 * Insertion dans le pipeline openid_inscrire_redirect (OpenID)
971 */
972function inscription3_openid_inscrire_redirect($flux){
973       
974        $auteur = $flux['args']['infos_auteur'];
975
976        $url = $flux['args']['url'];
977       
978        $url = parametre_url($url,'code_postal',$auteur['code_postal']);
979        $url = parametre_url($url,'pays',$auteur['pays']);
980        $url = parametre_url($url,'naissance',$auteur['naissance']);
981        $url = parametre_url($url,'sexe',$auteur['sexe']);
982        $url = parametre_url($url,'login',$auteur['login']);
983        $url = parametre_url($url,'nom_famille',$auteur['nom_famille']);
984        $url = parametre_url($url,'prenom',$auteur['prenom']);
985        $flux['data'] = $url;
986        return $flux;
987}
988?>
Note: See TracBrowser for help on using the repository browser.