1 | <?php |
---|
2 | |
---|
3 | if (!defined("_ECRIRE_INC_VERSION")) return; #securite |
---|
4 | |
---|
5 | include_spip('base/abstract_sql'); |
---|
6 | |
---|
7 | // Balise independante du contexte |
---|
8 | |
---|
9 | |
---|
10 | function 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 | |
---|
21 | function 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 | |
---|
39 | function balise_FORMULAIRE_ABONNEMENT_dyn($id_liste, $formulaire) { |
---|
40 | |
---|
41 | include_spip ("inc/meta"); |
---|
42 | include_spip ("inc/session"); |
---|
43 | include_spip ("inc/filtres"); |
---|
44 | include_spip ("inc/texte"); |
---|
45 | include_spip ("inc/meta"); |
---|
46 | include_spip ("inc/mail"); |
---|
47 | include_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"); |
---|
68 | unset($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) |
---|
150 | function 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 | |
---|
189 | if ($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 |
---|
227 | if ($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 |
---|
240 | if($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 | |
---|
360 | function 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 | ?> |
---|