source: spip-zone/_plugins_/inscription/trunk/inscription3_pipelines.php @ 82557

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

Faire fonctionner la recherche sur les champs ajoutés (@jef cf : https://www.mediaspip.net/documentation/les-plugins-utilises-par-mediaspip/inscription3-amelioration-de-la/article/le-plugin-inscription3#forum1435)

La pondération vaut 2 pour chaque champs

Attention : si vous utilisiez fulltext et que les index fulltext sont créés avant l'ajout de champs, il faut supprimer et recréer les indexs

Version 3.5.1

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