source: trunk/spip/esqueleto-redcta/plugins/spip-listes_1_9_2/balise/formulaire_abonnement.php @ 90

Last change on this file since 90 was 90, checked in by guille, 15 years ago

importacion de spip-listes-1_9_2

File size: 12.6 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;    #securite
4
5include_spip('base/abstract_sql');
6
7// Balise independante du contexte
8
9
10function balise_FORMULAIRE_ABONNEMENT ($p) {
11        return calculer_balise_dynamique($p, 'FORMULAIRE_ABONNEMENT', array('id_liste'));
12}
13
14// args[0] indique une liste, mais ne sert pas encore
15// args[1] indique un eventuel squelette alternatif
16// [(#FORMULAIRE_ABONNEMENT{mon_squelette})]
17// un cas particulier est :
18// [(#FORMULAIRE_ABONNEMENT{listeX})]
19// qui permet d'afficher le formulaire d'abonnement a la liste numero X
20
21function balise_FORMULAIRE_ABONNEMENT_stat($args, $filtres) {
22        if(!$args[1]) $args[1]='formulaire_abonnement';
23        preg_match_all("/liste([0-9]+)/x",
24               $args[1], $matches);
25
26        if($id_liste=intval($matches[1][0])) {
27        $args[1]='formulaire_abonnement_une_liste';
28        $args[0]=$id_liste;
29        }
30         return array($args[0],$args[1]);}
31
32// Si inscriptions pas autorisees, retourner une chaine d'avertissement
33// Sinon inclusion du squelette
34// Si pas de nom ou pas de mail valide, premier appel rien d'autre a faire
35// Autrement 2e appel, envoyer un mail et le squelette ne produira pas de
36// formulaire.
37
38
39function balise_FORMULAIRE_ABONNEMENT_dyn($id_liste, $formulaire) {
40
41include_spip ("inc/meta");
42include_spip ("inc/session");
43include_spip ("inc/filtres");
44include_spip ("inc/texte");
45include_spip ("inc/meta");
46include_spip ("inc/mail");
47include_spip ("inc/acces");
48       
49       
50//recuperation des variables utiles
51$oubli_pass = _request('oubli_pass');
52$email_oubli = _request('email_oubli');
53$type = _request('type');
54$desabo = _request('desabo');
55
56// recuperation de la config
57       
58$acces_abonne = lire_meta('abonnement_config');
59($acces_abonne == 'membre') ? $acces_membres = 'oui' : $acces_membres = 'non';
60       
61// aller chercher le formulaire html qui va bien                               
62$formulaire = "formulaires/".$formulaire ;             
63               
64// code inscription au site ou/et  a la lettre d'info   
65       
66$inscriptions_ecrire = (lire_meta("accepter_inscriptions") == "oui") ;
67$inscriptions_publiques = (lire_meta('accepter_visiteurs') == "oui");
68unset($erreur);
69$affiche_formulaire="";
70$inscription_redac ="";
71$inscription_visiteur ="";
72       
73        // envoyer le cookie de relance mot de passe si pass oublie
74        if ($email_oubli) {
75                if (email_valide($email_oubli)) {
76                        $res = spip_query("SELECT * FROM spip_auteurs WHERE email ="._q($email_oubli));
77                        if ($row = spip_fetch_array($res)) {
78                                if ($row['statut'] == '5poubelle')
79                                        $erreur = _T('pass_erreur_acces_refuse');
80                                else {
81                                        $cookie = creer_uniqid();
82                                        spip_query("UPDATE spip_auteurs SET cookie_oubli = "._q($cookie)." WHERE email ="._q($email_oubli));
83       
84                                        $nom_site_spip = extraire_multi(lire_meta("nom_site"));
85                                        $adresse_site = extraire_multi(lire_meta("adresse_site"));
86       
87                                        $message = _T('spiplistes:abonnement_mail_passcookie', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site, 'cookie' => $cookie));
88                                       
89                                        if (envoyer_mail($email_oubli, "[$nom_site_spip] "._T('pass_oubli_mot'), $message))
90                                                $erreur = _T('pass_recevoir_mail');
91                                        else
92                                                $erreur = _T('pass_erreur_probleme_technique');
93                                }
94                        }
95                        else
96                                $erreur = _T('pass_erreur_non_enregistre', array('email_oubli' => htmlspecialchars($email_oubli)));
97                }
98                else
99                        $erreur = _T('pass_erreur_non_valide', array('email_oubli' => htmlspecialchars($email_oubli)));
100        }
101       
102        // afficher le formulaire d'oubli du pass
103        if($oubli_pass=="oui") {
104                return array($formulaire, $GLOBALS['delais'],
105                        array(
106                                'oubli_pass' => $oubli_pass,
107                                'erreur' => $erreur,
108                                'inscription_redac' => '',
109                                'inscription_visiteur' => '',
110                                'mode_login' => false,
111                                'reponse_formulaire' => '',
112                                'liste' => ''
113                                        )
114                        );
115        }
116        //code pour s inscrire
117        else if ($inscriptions_ecrire OR $inscriptions_publiques OR (lire_meta('forums_publics') == 'abo') ) {
118                // debut presentation
119       
120                ($inscriptions_ecrire AND $type=="redac") ? $inscription_redac = "oui" : $inscription_redac = "non" ;
121                ($type!="redac" AND $inscriptions_publiques AND $acces_membres=='oui') ? $inscription_visiteur = "oui" : $inscription_visiteur = "non" ;
122               
123                               
124                        list($affiche_formulaire,$reponse_formulaire)=formulaire_inscription(($type=="redac")? 'redac' : 'forum',$acces_membres,$formulaire);
125        }
126        else {
127                spip_log(_T('pass_erreur')." "._T('pass_rien_a_faire_ici')."visiteurs non autorises spip listes");
128        }
129       
130
131        return array($formulaire, $GLOBALS['delais'],
132                                array(
133                                        'oubli_pass' => $oubli_pass,
134                                        'erreur' => $erreur,
135                                        'inscription_redacteur' => $inscription_redac,
136                                        'acces_membres' => $acces_membres,
137                                        'inscription_visiteur' => $inscription_visiteur,
138                                        'mode_login' => $affiche_formulaire,
139                                        'reponse_formulaire' => $reponse_formulaire,
140                                        'accepter_auteur' => lire_meta("accepter_inscriptions") ,
141                                        'id_liste' => $id_liste
142                                        )
143                                );
144                               
145                               
146}
147
148
149// inscrire les visiteurs dans l'espace public (statut 6forum) ou prive (statut nouveau->1comite)
150function formulaire_inscription($type,$acces_membres,$formulaire) {
151       
152        $request_uri = $GLOBALS["REQUEST_URI"]."#abo";
153        global $mail_inscription_;
154        global $nom_inscription_;
155        global $list;
156        global $liste;
157        global $id_fond; //fond name of the form posting values
158       
159
160        if ($type == 'redac') {
161                if (lire_meta("accepter_inscriptions") != "oui") return;
162                $statut = "nouveau";
163        }
164        else if ($type == 'forum') {
165                $statut = "6forum";
166        }
167        else {
168                return; // tentative de hack...?
169        }
170
171
172       
173        if($acces_membres == 'non') $nom_inscription_ = test_login2($mail_inscription_) ;
174
175      //utiliser_langue_site();
176        $nomsite= extraire_multi(lire_meta("nom_site"));
177        $urlsite=extraire_multi(lire_meta("adresse_site"));
178       
179        //Verify the form source. This way it is possible to create many newsletter forms
180        //in the same page (but with different fond) to separate subscription and deletion as an example
181        $verify_source_fond = false;
182        if(!$id_fond) {$verify_source_fond = true;}
183        elseif($id_fond==$formulaire) $verify_source_fond = true;
184       
185        if($mail_inscription_ && $verify_source_fond){
186                $mail_valide = email_valide($mail_inscription_);       
187        }
188               
189if ($mail_valide && $nom_inscription_) {
190$result = spip_query("SELECT * FROM spip_auteurs WHERE email="._q($mail_inscription_));
191
192//echo "<div class='reponse_formulaire'>";
193
194                // l'abonne existe deja.
195                if ($row = spip_fetch_array($result)) {
196                        $id_auteur = $row['id_auteur'];
197                        $statut = $row['statut'];
198                        $abonne_existant = "oui" ;
199
200                        unset ($continue);
201                        if ($statut == '5poubelle') {
202                                $reponse_formulaire = _T('form_forum_access_refuse');
203                        }elseif ($statut == 'nouveau') {
204                                spip_query ("DELETE FROM spip_auteurs WHERE id_auteur="._q($id_auteur));
205                                $continue = true;
206                        }else{
207                // envoyer le cookie de relance modif abonnement
208
209                $cookie = creer_uniqid();
210                spip_query("UPDATE spip_auteurs SET cookie_oubli = "._q($cookie)." WHERE email ="._q($mail_inscription_));
211
212                $message = _T('spiplistes:abonnement_mail_passcookie', array('nom_site_spip' => $nomsite, 'adresse_site' => $urlsite, 'cookie' => $cookie));
213                                if (envoyer_mail($mail_inscription_, "[$nomsite] "._T('spiplistes:abonnement_titre_mail'), $message)){
214                                        $reponse_formulaire =_T('spiplistes:pass_recevoir_mail');
215                                        //echo _T('spiplistes:pass_recevoir_mail');
216                                }else{
217                                        $reponse_formulaire =_T('pass_erreur_probleme_technique');
218                                        //echo _T('pass_erreur_probleme_technique');
219                                }
220
221        }
222                } else {
223                        $continue = true;
224                }
225               
226// envoyer identifiants par mail
227if ($continue) {
228               
229//ajouter un code pour retrouver l'abonne
230
231$pass = creer_pass_aleatoire(8, $mail_inscription_);
232$login_ = test_login2($mail_inscription_);
233$mdpass = md5($pass);
234$htpass = generer_htpass($pass);
235
236$cookie = creer_uniqid();
237                       
238$type_abo = $GLOBALS['suppl_abo'] ;
239//verify suppl_abo is correct
240if($desabo!="oui" && $type_abo!="texte" && $type_abo!="html") return;
241                       
242$result = spip_query("INSERT INTO spip_auteurs (nom, email, login, pass, statut, htpass, cookie_oubli) ".
243                                "VALUES ("._q($nom_inscription_).", "._q($mail_inscription_).","._q($login_).","._q($mdpass).","._q($statut).","._q($htpass).","._q($cookie).")");
244                                spip_log("insert inscription : ->".$mail_inscription_);
245                        $id_abo=spip_insert_id();
246        spip_query("INSERT INTO `spip_auteurs_elargis` (`id_auteur`,`spip_listes_format`) VALUES ("._q($id_abo).","._q($type_abo).")");         
247               
248// abonnement aux listes http://www.phpfrance.com/tutorials/index.php?page=2&id=13
249
250$result = spip_query("SELECT * FROM spip_auteurs WHERE email="._q($mail_inscription_));
251
252        // l'abonne existe deja.
253         if ($row = spip_fetch_array($result)) {
254         $id_auteur = $row['id_auteur'];
255         $statut = $row['statut'];
256
257         // on abonne l'auteur aux listes
258             if(is_array($list)){
259                         while( list(,$val) = each($list) ){
260                                $result=spip_query("DELETE FROM spip_auteurs_listes WHERE id_auteur="._q($id_auteur)." AND id_liste="._q($val));
261                                $result=spip_query("INSERT INTO spip_auteurs_listes (id_auteur,id_liste) VALUES ("._q($id_auteur).","._q($val).")");
262                         }
263                 }
264         }
265
266                        // abo
267
268      ecrire_acces();
269
270        $nom_site_spip = extraire_multi(lire_meta("nom_site"));
271        $adresse_site = extraire_multi(lire_meta("adresse_site"));
272
273        $message = _T('form_forum_message_auto')."\n\n"._T('spiplistes:bonjour')."\n";
274                       
275                if ($desabo=="oui"){
276        $message .= _T('spiplistes:mail_non', array('nom_site_spip' => $nom_site_spip))."\n";
277        }else if($type_abo=="texte" || $type_abo=="html")  {
278
279        //SELECT des listes de l'abonne         
280                $result_list = spip_query("SELECT * FROM spip_auteurs_listes AS abonnements, spip_listes AS listes WHERE abonnements.id_auteur="._q($id_auteur)." AND abonnements.id_liste=listes.id_liste AND listes.statut='liste'");
281
282                                //lister les listes
283                         $message_list = '' ;
284                          $i = 0 ;
285
286                        while($row = spip_fetch_array($result_list)) {                 
287                                  $id_liste = $row['id_liste'] ;       
288                                  $result = spip_query("SELECT * FROM spip_listes WHERE id_liste="._q($id_liste));
289                          $row = spip_fetch_array($result);
290                          $titre = $row['titre'] ;
291                          $message_list .= "\n- ".$titre ;
292                          $i++ ;
293                        }
294
295
296                if($i>1){
297                        $message .= "\n"._T('spiplistes:inscription_responses').$nom_site_spip."." ;
298                        $message .= "\n"._T('spiplistes:inscription_listes').$message_list ;
299                } 
300                if($i==1){
301                        $message .= "\n"._T('spiplistes:inscription_response').$nom_site_spip."." ;
302                        $message .= "\n"._T('spiplistes:inscription_liste').$message_list ;
303                } 
304                if($i==0){
305                        $message .= "\n"._T('spiplistes:inscription_response').$nom_site_spip._T('spiplistes:inscription_format').$type_abo."." ;
306                }
307        }
308
309        if(($acces_membres == 'oui') && ($type == 'forum') ){
310                $message .="\n\n"._T('spiplistes:inscription_mail_forum', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site))."\n\n";
311        $message .= "- "._T('form_forum_login')." $login_\n";
312                $message .= "- "._T('form_forum_pass')." $pass\n\n";
313        }
314
315        if(($type == 'redac') OR ($inscriptions_ecrire AND $acces_membres == 'non')) {
316                $message .="\n\n"._T('spiplistes:inscription_mail_redac', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site))."\n\n";
317                $message .= "- "._T('form_forum_login')." $login_\n";
318                $message .= "- "._T('form_forum_pass')." $pass\n\n";
319        }
320
321
322      }
323
324      $message .= "\n\n-----------------------------------------\n\n" ;
325      $message .= _T('spiplistes:abonnement_mail').' '.generer_url_public("abonnement","d=$cookie") ;
326      $message .= "\n\n-----------------------------------------\n\n" ;
327               
328                if($abonne_existant != 'oui'){
329
330                        if (envoyer_mail($mail_inscription_, "[$nom_site_spip] "._T('spiplistes:form_forum_identifiants'), $message)) {
331                                spip_log("inscription : ->".$mail_inscription_);
332                                if($acces_membres == 'oui'){
333                        $reponse_formulaire =_T('form_forum_identifiant_mail');
334                        }else{
335                         $reponse_formulaire =_T('spiplistes:form_forum_identifiant_confirm');
336                         }
337                        }
338                        else {
339                        $reponse_formulaire =_T('form_forum_probleme_mail');
340                        }
341                }
342
343        }
344        else {
345                //Non c'è email o non è valida
346                if($mail_inscription_ AND !$mail_valide && $verify_source_fond){
347        $reponse_formulaire =_T('spiplistes:erreur_adresse');
348                }
349               
350                //Infos sur la liste
351                if(!$liste) $liste='';
352                return array(true,$reponse_formulaire);
353        }
354        return array(false,$reponse_formulaire);
355
356}
357
358
359
360function test_login2($mail) {
361        if (strpos($mail, "@") > 0) $login_base = substr($mail, 0, strpos($mail, "@"));
362        else $login_base = $mail;
363
364        $login_base = strtolower($login_base);
365        $login_base = ereg_replace("[^a-zA-Z0-9]", "", $login_base);
366        if (!$login_base) $login_base = "user";
367
368        for ($i = 0; ; $i++) {
369                if ($i) $login = $login_base.$i;
370                else $login = $login_base;
371                $result = spip_query("SELECT id_auteur FROM spip_auteurs WHERE login="._q($login));
372                if (!spip_num_rows($result)) break;
373        }
374
375        return $login;
376}
377
378
379?>
Note: See TracBrowser for help on using the repository browser.