source: spip-zone/_plugins_/spip-listes/spip-listes_1_9_3/balise/formulaire_abonnement.php @ 48920

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

date_picker_init n'est plus utilisé depuis longtemps

  • Property svn:keywords set to LastChangedBy LastChangedDate LastChangedRevision
File size: 16.0 KB
Line 
1<?php
2/**
3 * Balise: #FORMULAIRE_ABONNEMENT
4 *
5 * Si inscriptions pas autorisees, retourner une chaine d'avertissement
6 * Sinon inclusion du squelette
7 * Si pas de nom ou pas de mail valide, premier appel rien d'autre a faire
8 * Autrement 2e appel, envoyer un mail et le squelette ne produira pas de
9 * formulaire.
10 * @see formulaire_abonnement.html
11 *              qui est un formulaire d'exemple d'utilisation
12 *              de la balise.
13 * @see formulaires/formulaire_abonnement.html
14 *              qui est le formulaire utilisé par cette balise
15 *              pour calculer le contenu du formulaire
16 *              d'abonnement ou de gestion, à l'aide du contexte.
17 * @package spiplistes
18 */
19 // $LastChangedRevision: 48920 $
20 // $LastChangedBy: paladin@quesaco.org $
21 // $LastChangedDate: 2011-06-19 08:37:12 +0000 (Sun, 19 Jun 2011) $
22
23if(!defined('_ECRIRE_INC_VERSION')) return;     #securite
24
25include_spip('base/abstract_sql');
26include_spip('inc/spiplistes_api_globales');
27include_spip('inc/spiplistes_api');
28include_spip('inc/spiplistes_api_courrier');
29include_once(_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_mail.inc.php');
30
31// Balise independante du contexte
32
33function balise_FORMULAIRE_ABONNEMENT ($p) {
34
35        spiplistes_debug_log('balise_FORMULAIRE_ABONNEMENT()');
36
37        return(calculer_balise_dynamique($p, 'FORMULAIRE_ABONNEMENT', array('id_liste')));
38}
39
40/**
41 * args[0] indique une liste
42 * args[1] indique un eventuel squelette alternatif
43 * [(#FORMULAIRE_ABONNEMENT{mon_squelette})]
44 * un cas particulier est :
45 * [(#FORMULAIRE_ABONNEMENT{listeX})]
46 * qui permet d'afficher le formulaire d'abonnement a la liste numero X
47 * @param array $args
48 * @param $filtres
49 * @return array
50 */
51function balise_FORMULAIRE_ABONNEMENT_stat($args, $filtres) {
52
53        preg_match_all('/liste([0-9]+)/x', $args[1], $matches);
54        if($id_liste = intval($matches[1][0])) {
55                $args[0]=$id_liste;
56        }
57        $args[1]='formulaire_abonnement';
58       
59        return(array($args[0],$args[1]));
60}
61
62
63function balise_FORMULAIRE_ABONNEMENT_dyn($id_liste, $formulaire) {
64
65        //spiplistes_debug_log("balise_FORMULAIRE_ABONNEMENT_dyn() -$id_liste-");
66
67        include_spip ('inc/meta');
68        include_spip ('inc/session');
69        include_spip ('inc/filtres');
70        include_spip ('inc/texte');
71        include_spip ('inc/meta');
72        include_spip ('inc/mail');
73        include_spip ('inc/acces');
74        include_once (_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_mail.inc.php');
75
76               
77        //recuperation des variables utiles
78        $oubli_pass = _request('oubli_pass');
79        $email_oubli = _request('email_oubli');
80        $type = _request('type');
81       
82        // recuperation de la config SPIP-Listes
83        // 'simple' = ne renvoie que la confirmation d'abonnement
84        // 'membre' = complete le mail par un mot de passe pour s'identifier sur le site
85        $acces_membres = ($GLOBALS['meta']['abonnement_config'] == 'membre') ? 'oui' : 'non';
86               
87        // aller chercher le formulaire html qui va bien                               
88        $formulaire = 'formulaires/'.$formulaire ;             
89                       
90        // Accepter l'inscription en tant qu'auteur ?
91        // pour memo: l'auteur a acces a l'espace prive'
92        $inscriptions_ecrire = ($GLOBALS['meta']['accepter_inscriptions'] == 'oui');
93        // Accepter l'inscription en tant que visiteur ?
94        // pour memo: le visiteur n'a pas acces a l'espace prive'
95        $inscriptions_publiques = ($GLOBALS['meta']['accepter_visiteurs'] == 'oui');
96       
97        $affiche_formulaire = $inscription_redacteur = $inscription_visiteur = '';
98       
99        $nom_site_spip = spiplistes_nom_site_texte ($lang);
100        $adresse_site = $GLOBALS['meta']['adresse_site'];
101       
102        // envoyer le cookie de relance mot de passe si pass oublie
103        if($email_oubli)
104        {
105                if(email_valide($email_oubli))
106                {
107                        $row = spiplistes_auteurs_auteur_select('id_auteur,statut'
108                                                                                                        , 'email='.sql_quote($email_oubli)
109                                                                                                        );
110                       
111                        if($row /* = sql_fetch($sql_result) */ )
112                        {
113                                if($row['statut'] == '5poubelle')
114                                {
115                                        $erreur = _T('pass_erreur_acces_refuse');
116                                }
117                                else if($id_abo = intval($row['id_auteur']))
118                                {
119                                        $cookie = creer_uniqid();
120                                        spiplistes_auteurs_cookie_oubli_updateq($cookie, $email_oubli);
121                                       
122                                        $message = _T('spiplistes:abonnement_mail_passcookie'
123                                                                , array(
124                                                                        'nom_site_spip' => $nom_site_spip
125                                                                        , 'adresse_site' => $adresse_site
126                                                                        , 'cookie' => $cookie)
127                                                                );
128                               
129                                        $objet = "[$nom_site_spip] " . _T('pass_oubli_mot');
130                                        $patron = spiplistes_patron_message();
131                                        $format = spiplistes_format_abo_demande($id_abo);
132                                        $contexte = array();
133                                        $email_a_envoyer = spiplistes_preparer_message (
134                                                $objet
135                                                , $patron
136                                                , $format
137                                                , $contexte
138                                                , $abonne['email']
139                                                , $abonne['nom']);
140                                       
141                                        if(spiplistes_envoyer_mail($email_oubli
142                                                                                           , $objet
143                                                                                           , $email_a_envoyer
144                                                                                           ))
145                                        {
146                                                $erreur = _T('pass_recevoir_mail');
147                                        }
148                                        else
149                                        {
150                                                $erreur = _T('pass_erreur_probleme_technique');
151                                        }
152                                }
153                        }
154                        else
155                        {
156                                $erreur = _T('pass_erreur_non_enregistre'
157                                                         , array('email_oubli' => htmlspecialchars($email_oubli))
158                                                         );
159                        }
160                }
161                else
162                {
163                        $erreur = _T('pass_erreur_non_valide'
164                                                 , array('email_oubli' => htmlspecialchars($email_oubli))
165                                                 );
166                }
167        } // end if $email_oubli
168       
169        // afficher le formulaire d'oubli du pass
170        if($oubli_pass == 'oui') {
171                return array($formulaire,
172                                         $GLOBALS['delais'],
173                        array(
174                                'oubli_pass' => $oubli_pass
175                                , 'erreur' => $erreur
176                                , 'inscription_redac' => ''
177                                , 'inscription_visiteur' => ''
178                                , 'mode_login' => false
179                                , 'reponse_formulaire' => false
180                                , 'liste' => ''
181                        )
182                );
183        }
184       
185        //code pour s inscrire
186        else if(
187                $inscriptions_ecrire 
188                || $inscriptions_publiques 
189                || ($GLOBALS['meta']['forums_publics'] == 'abo') 
190        ) {
191                $accepter_nouveau = 'oui';
192               
193                // debut presentation
194       
195                $inscription_redacteur = 
196                        ($inscriptions_ecrire && ($type=='redac')) 
197                        ? 'oui' 
198                        : 'non'
199                        ;
200
201                $inscription_visiteur = 
202                        (($type!='redac') && $inscriptions_publiques && ($acces_membres=='oui')) 
203                        ? 'oui' 
204                        : 'non'
205                        ;
206                               
207                list($affiche_formulaire
208                         , $reponse_formulaire
209                         , $mode_modifier
210                         , $abonne
211                         ) = 
212                        spiplistes_formulaire_abonnement(
213                                (($type=='redac') ? 'redac' : 'forum')
214                                , $acces_membres
215                                , $formulaire
216                                , $nom_site_spip
217                                , $inscription_redacteur
218                                , $inscription_visiteur
219                        );
220        }
221        else {
222                spiplistes_debug_log (_T('pass_erreur').' acces visiteurs non autorises');
223        }
224       
225        return array($formulaire, $GLOBALS['delais'],
226                                array(
227                                        'oubli_pass' => $oubli_pass
228                                        , 'erreur' => $erreur
229                                        , 'inscription_redacteur' => $inscription_redacteur
230                                        //, 'acces_membres' => $acces_membres
231                                        , 'inscription_visiteur' => $inscription_visiteur
232                                        , 'mode_login' => $affiche_formulaire
233                                        , 'message_formulaire' => $message_formulaire
234                                        , 'reponse_formulaire' => $reponse_formulaire
235                                        , 'accepter_auteur' => $GLOBALS['meta']['accepter_inscriptions']
236                                        , 'id_liste' => $id_liste
237                                        , 'accepter_nouveau' => $accepter_nouveau
238                                        , 'mode_modifier' => $mode_modifier
239                                        , 'id_auteur' => $abonne['id_auteur']
240                                        , 'format' => $abonne['format']
241                                        )
242                                );
243                               
244                               
245} // end balise_FORMULAIRE_ABONNEMENT_dyn()
246
247
248/**
249 * Abonnement d'un visiteur ou d'un auteur
250 * Si authentifie', modifie l'abonnement, sinon envoie mail avec cookie_oubli pour confirmer.
251 * Si adresse_mail absent de la base, cree un login a partir de l'email et renvoie un mail de confirmation.
252 *
253 * @param string $type
254 * @param string $acces_membres
255 * @param string $formulaire
256 * @param string $nom_site_spip
257 * @param string $inscription_redacteur
258 * @param string $inscription_visiteur
259 * @return array()
260 */
261function spiplistes_formulaire_abonnement (
262                                                                                        $type
263                                                                                        , $acces_membres
264                                                                                        , $formulaire
265                                                                                        , $nom_site_spip
266                                                                                        , $inscription_redacteur
267                                                                                        , $inscription_visiteur
268                                                                                        ) {
269       
270        $mail_inscription_ = trim(strtolower(_request('mail_inscription_')));
271        $nom_inscription_ = trim(_request('nom_inscription_'));
272        $type_abo = _request('suppl_abo') ;
273        $listes_demande = _request('list');
274        $desabo = ($type_abo == 'non') ? 'oui' : 'non';
275       
276        $adresse_site = $GLOBALS['meta']['adresse_site'];
277
278        $reponse_formulaire = '';
279        $email_a_envoyer = $mode_modifier = $sql_where = false;
280        $abonne = array();
281       
282        /**
283         * La variable d est transmise via URL proposé en pied de mail
284         * du courrier envoyé.
285         * Elle n'est pas utilisée dans le squelette
286         * d'abonnement.
287         */
288        $d = _request('d');
289       
290        if(!empty($d)) {
291                $sql_where = array(
292                                'cookie_oubli='.sql_quote($d)
293                                , 'statut<>'.sql_quote('5poubelle')
294                                , 'pass<>'.sql_quote('')
295                        );
296        }
297        // ou si identifie'
298        else if($connect_id_auteur = intval($GLOBALS['auteur_session']['id_auteur']))
299        {
300                $sql_where = array("id_auteur=$connect_id_auteur");
301        }
302        if($sql_where) {
303                // cherche les coordonnees de l'abonne'
304                $sql_select = 'id_auteur,statut,nom,email,cookie_oubli';
305                $sql_result = sql_select(
306                        $sql_select
307                        , 'spip_auteurs'
308                        , $sql_where
309                        , '', '', 1
310                );
311                if($row = sql_fetch($sql_result)) {
312                        foreach(explode(',', $sql_select) as $key) {
313                                $abonne[$key] = $row[$key];
314                        }
315                }
316                $abonne['format'] = spiplistes_format_abo_demande($abonne['id_auteur']);
317               
318        }
319       
320        $abonne['cookie_oubli'] = creer_uniqid();
321        spiplistes_debug_log ('COOKIE: '.$abonne['cookie_oubli']);
322       
323        // si identifie' par cookie ou login... effectuer les modifications demandees
324        if(count($abonne)) {
325               
326                // toujours rester en mode modif pour permettre la correction
327                $mode_modifier = 'oui';
328               
329                if($desabo == 'oui')
330                {
331                        spiplistes_format_abo_modifier($abonne['id_auteur']);
332                        $reponse_formulaire = _T('spiplistes:vous_etes_desabonne');
333                        $email_a_envoyer = true;
334                }
335               
336                else if($listes_demande)
337                {
338                        //spiplistes_debug_log("demande modification abonnements listes " . implode(",", $listes_demande));
339                       
340                        if(is_array($listes_demande) && count($listes_demande))
341                        {
342                                $listes_ajoutees = spiplistes_abonnements_ajouter($abonne['id_auteur']
343                                                                                                                        , array_map('intval', $listes_demande)
344                                                                                                                        );
345                                $curr_abos_auteur = spiplistes_abonnements_listes_auteur($abonne['id_auteur']);
346                               
347                                foreach($curr_abos_auteur as $id_liste) {
348                                        if(!in_array($id_liste, $listes_demande)) {
349                                                spiplistes_abonnements_auteur_desabonner($abonne['id_auteur']
350                                                                                                                                 , $id_liste
351                                                                                                                                 );
352                                        }
353                                }
354                        }
355                       
356                        // modifier le format de reception ?
357                        if(spiplistes_format_valide($type_abo) && ($type_abo != $abonne['format']))
358                        {
359                                spiplistes_format_abo_modifier($abonne['id_auteur'], $abonne['format'] = $type_abo);
360                                //$abonne['ids_abos'] = spiplistes_abonnements_listes_auteur($abonne['id_auteur']);
361                               
362                        }
363                       
364                        $reponse_formulaire = _T('spiplistes:demande_enregistree_retour_mail');
365                        $email_a_envoyer = true;
366                }
367                else
368                {
369                        //spiplistes_debug_log('pas de demande, afficher formulaire de modif au complet');
370                        $reponse_formulaire = ''
371                                . '<span class="nom">' . $abonne['nom'] . "</span>\n"
372                                . '<span class="souhait">' . _T('spiplistes:effectuez_modif_validez', array('s'=>$abonne['nom'])). "</span>\n"
373                                ;
374                }
375               
376                $id_abonne = $abonne['id_auteur'];
377                $objet_email = _T('spiplistes:votre_abo_listes');
378                $contexte = array('titre' => $objet_email);
379               
380        }
381        else // non identifie' ? gestion par cookie_oubli.
382        {
383                $texte_intro = _T('form_forum_message_auto') . '<br /><br />'._T('spiplistes:bonjour') . "<br />\n";
384               
385                $abonne = array('email' => email_valide($mail_inscription_));
386               
387                if($abonne['email'])
388                {
389                        // si l'abonne existe deja mais pas d'action demandee,
390                        // affiche formulaire complet
391                        if ($row = 
392                                spiplistes_auteurs_auteur_select ('id_auteur,login,nom,statut,lang'
393                                                                                                  , 'email='.sql_quote($abonne['email'])
394                                                                                                  )
395                        ) {
396                               
397                                $abonne['id_auteur'] = intval($row['id_auteur']);
398                                $abonne['statut'] = $row['statut'];
399                                $abonne['login'] = $row['login'];
400                                $abonne['nom'] = $row['nom'];
401                                $abonne['lang'] = $row['lang'];
402                                $abonne['format'] =
403                                        ($f = spiplistes_format_abo_demande($abonne['id_auteur']))
404                                        ? $f
405                                        : 'texte'
406                                        ;
407       
408                                if($abonne['statut'] == '5poubelle')
409                                {
410                                        $reponse_formulaire = _T('form_forum_access_refuse');
411                                }
412                                // si encore nouveau, c'est qu'il ne s'est jamais identifie'
413                                else if($abonne['statut'] == 'nouveau')
414                                {
415                                        // le supprimer. Il sera re-cree plus loin
416                                        spiplistes_auteurs_auteur_delete('id_auteur='.sql_quote($abonne['id_auteur']));
417                                        $abonne['id_auteur'] = false;
418                                }
419                                else {
420                                        // demande de modifier l'abonnement ? envoie le cookie de relance par mail
421                                        spiplistes_auteurs_cookie_oubli_updateq($abonne['cookie_oubli']
422                                                                                                                        , $abonne['email']
423                                                                                                                        );
424                                        $objet_email = _T('spiplistes:abonnement_titre_mail');
425                                        $texte_email = spiplistes_texte_inventaire_abos($abonne['id_auteur']
426                                                                                                                                        , $type_abo
427                                                                                                                                        , $nom_site_spip
428                                                                                                                                        );
429                                        $contexte = array('titre' => $objet_email);
430                                        $id_abonne = $abonne['id_auteur'];
431                                }
432                               
433                        }
434                        // l'adresse mail n'existe pas dans la base.
435                        else 
436                        {
437                               
438                                $abonne['login'] = spiplistes_login_from_email($abonne['email']);
439                                $abonne['nom'] =
440                                        (($acces_membres == 'non') || empty($nom_inscription_))
441                                        ? ucfirst($abonne['login'])
442                                        : $nom_inscription_
443                                        ;
444                               
445                                // ajouter l'abonne
446                                $pass = creer_pass_aleatoire(8, $abonne['email']);
447                                $abonne['zepass'] = $pass;
448                                $abonne['mdpass'] = md5($pass);
449                                $abonne['htpass'] = generer_htpass($pass);
450                               
451                                $abonne['statut'] = ($inscription_redacteur == 'oui') ? 'nouveau' : '6forum';
452       
453                                // format d'envoi par defaut pour le premier envoi de confirmation
454                                $abonne['format'] = spiplistes_format_abo_default();
455                               
456                                // creation du compte ...
457                                if($id_abonne = spiplistes_auteurs_auteur_insertq(
458                                                array(
459                                                        'nom' => $abonne['nom']
460                                                        , 'email' => $abonne['email']
461                                                        , 'login' => $abonne['login']
462                                                        , 'pass' => $abonne['mdpass']
463                                                        , 'statut' => $abonne['statut']
464                                                        , 'htpass' => $abonne['htpass']
465                                                        , 'cookie_oubli' => $abonne['cookie_oubli']
466                                                        )
467                                        )) {
468                                        // creation .htpasswd & LDAP si besoin systeme
469                                        ecrire_acces();
470                                       
471                                        // premier format de reception par defaut
472                                        spiplistes_format_abo_modifier($id_abonne, $abonne['format']);
473                                }
474
475                                $objet_email = _T('spiplistes:confirmation_inscription');
476                               
477                                $contexte = array(
478                                                                'titre' => $objet_email
479                                                                , 'nouvel_inscription' => 'oui'
480                                                                , 'inscription_redacteur' => $inscription_redacteur
481                                                                , 'inscription_visiteur' => $inscription_visiteur
482                                                        );
483                        }
484                       
485                        $email_a_envoyer = true;
486                       
487                }
488                else if(!empty($mail_inscription_)) {
489                        //Non email o non valida
490                        return(array(true, _T('spiplistes:erreur_adresse'), $mode_modifier, false));
491                }
492        }
493        if($id_abonne && $email_a_envoyer) {
494               
495                $abonne['ids_abos'] = spiplistes_abonnements_listes_auteur($abonne['id_auteur']);
496
497                $abonne['format'] = spiplistes_format_valide($abonne['format']);
498               
499                $email_a_envoyer = spiplistes_preparer_message(
500                                        ($objet_email = "[$nom_site_spip] " . $objet_email)
501                                        , spiplistes_patron_message()
502                                        , array_merge($contexte, $abonne)
503                                        );
504                if(
505                        spiplistes_envoyer_mail(
506                                $abonne['email']
507                                , $objet_email
508                                , $email_a_envoyer
509                                , false
510                                , ''
511                                , $abonne['format']
512                        )
513                ) {
514                        $reponse_formulaire =
515                                ($acces_membres == 'oui')
516                                ? _T('form_forum_identifiant_mail')
517                                : _T('spiplistes:demande_enregistree_retour_mail')
518                                ;
519                }
520                else {
521                        $reponse_formulaire = _T('form_forum_probleme_mail');
522                }
523        } 
524
525        return(array(true, $reponse_formulaire, $mode_modifier, $abonne));
526} // end spiplistes_formulaire_abonnement()
527
528
529/**
530 * Petit message texte - inventaire des abonnements
531 * @return string
532 */
533function spiplistes_texte_inventaire_abos ($id_abonne, $type_abo, $nom_site_spip) {
534       
535        // fait l'inventaire des abos
536        $listes_abonnements = spiplistes_abonnements_listes_auteur ($id_abonne, true);
537        $nb = count($listes_abonnements);
538        $message_list = 
539                ($nb)
540                ? "\n- " . implode("\n- ", $listes_abonnements) . ".\n"
541                : ''
542                ;
543
544        $m1 = ($nb > 1) ? 'inscription_reponses_s' : 'inscription_reponse_s';
545        if($nb > 1) {
546                $m2 = _T('spiplistes:inscription_listes_f', array('f' => $type_abo));
547        } else if($nb == 1) {
548                $m2 = _T('spiplistes:inscription_liste_f', array('f' => $type_abo));
549        } else {
550                $m2 = _T('spiplistes:vous_abonne_aucune_liste');
551        }
552        $texte = ''
553                . "\n"._T('spiplistes:'.$m1, array('s' => htmlentities($nom_site_spip)))
554                . ".\n"
555                . $m2.$message_list
556                ;
557        return($texte);
558}
Note: See TracBrowser for help on using the repository browser.