Commit | Line | Data |
---|---|---|
c495c100 P |
1 | <?php |
2 | ||
3 | /***************************************************************************\ | |
4 | * SPIP, Systeme de publication pour l'internet * | |
5 | * * | |
6 | * Copyright (c) 2001-2007 * | |
7 | * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * | |
8 | * * | |
9 | * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * | |
10 | * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * | |
11 | \***************************************************************************/ | |
12 | ||
13 | if (!defined("_ECRIRE_INC_VERSION")) return; | |
14 | ||
15 | include_spip('inc/minipres'); # charge lang et execute utiliser_lang | |
16 | include_spip('inc/mail'); # pour envoyer_mail | |
17 | include_spip('inc/acces'); # pour generer_htpass | |
18 | include_spip('public/assembler'); # pour calculer la page | |
19 | include_spip('inc/filtres'); # pour email_valide() | |
20 | ||
21 | // Ce fichier est celui d'une balise dynamique qui s'ignore. | |
22 | ||
23 | ||
24 | // fonction qu'on peut redefinir pour filtrer les adresses mail | |
25 | ||
26 | // http://doc.spip.org/@test_oubli | |
27 | function test_oubli($email) | |
28 | { | |
29 | if (!email_valide($email) ) | |
30 | return _T('pass_erreur_non_valide', array('email_oubli' => htmlspecialchars($email))); | |
31 | return array('mail' => $email); | |
32 | } | |
33 | ||
34 | // http://doc.spip.org/@message_oubli | |
35 | function message_oubli($email, $param) | |
36 | { | |
37 | if (function_exists('test_oubli')) | |
38 | $f = 'test_oubli'; | |
39 | else | |
40 | $f = 'test_oubli_dist'; | |
41 | $declaration = $f($email); | |
42 | ||
43 | if (!is_array($declaration)) | |
44 | return $declaration; | |
45 | ||
46 | $res = spip_query("SELECT id_auteur,statut,pass FROM spip_auteurs WHERE email =" . _q($declaration['mail'])); | |
47 | ||
48 | if (!$row = spip_fetch_array($res)) | |
49 | return _T('pass_erreur_non_enregistre', array('email_oubli' => htmlspecialchars($email))); | |
50 | ||
51 | if ($row['statut'] == '5poubelle' OR $row['pass'] == '') | |
52 | return _T('pass_erreur_acces_refuse'); | |
53 | ||
54 | include_spip('inc/acces'); # pour creer_uniqid | |
55 | $cookie = creer_uniqid(); | |
56 | spip_query("UPDATE spip_auteurs SET cookie_oubli = '$cookie' WHERE id_auteur=" . $row['id_auteur']); | |
57 | ||
58 | $nom = $GLOBALS['meta']["nom_site"]; | |
59 | if ( envoyer_mail($email, | |
60 | ("[$nom] " . _T('pass_oubli_mot')), | |
61 | _T('pass_mail_passcookie', | |
62 | array('nom_site_spip' => $nom, | |
63 | 'adresse_site' => url_de_base(), | |
64 | 'sendcookie' => generer_url_action('pass', "$param=$cookie", true)))) ) | |
65 | return _T('pass_recevoir_mail'); | |
66 | else | |
67 | return _T('pass_erreur_probleme_technique'); | |
68 | } | |
69 | ||
70 | ||
71 | // http://doc.spip.org/@formulaire_oubli_dyn | |
72 | function formulaire_oubli_dyn($p, $oubli) | |
73 | { | |
74 | ||
75 | $message = ''; | |
76 | ||
77 | // au 3e appel la variable P est positionnee et oubli = mot passe. | |
78 | // au 2e appel, P est vide et oubli vaut le mail a qui envoyer le cookie | |
79 | // au 1er appel, P et oubli sont vides | |
80 | ||
81 | if (!$p) { | |
82 | if ($oubli) $message = message_oubli($oubli, 'p'); | |
83 | } else { | |
84 | $res = spip_query("SELECT login FROM spip_auteurs WHERE cookie_oubli=" . _q($p) . " AND statut<>'5poubelle' AND pass<>''"); | |
85 | if (!$row = spip_fetch_array($res)) | |
86 | $message = _T('pass_erreur_code_inconnu'); | |
87 | else { | |
88 | if ($oubli) { | |
89 | $mdpass = md5($oubli); | |
90 | $htpass = generer_htpass($oubli); | |
91 | spip_query("UPDATE spip_auteurs SET htpass='$htpass', pass='$mdpass', alea_actuel='', cookie_oubli='' WHERE cookie_oubli=" . _q($p)); | |
92 | ||
93 | $login = $row['login']; | |
94 | $message = "<b>" . _T('pass_nouveau_enregistre') . "</b>". | |
95 | "<p>" . _T('pass_rappel_login', array('login' => $login)); | |
96 | } | |
97 | } | |
98 | } | |
99 | return array('formulaires/oubli', 0, | |
100 | array('p' => $p, | |
101 | 'message' => $message, | |
102 | 'action' => generer_url_action('pass'))); | |
103 | } | |
104 | ||
105 | // http://doc.spip.org/@action_pass_dist | |
106 | function action_pass_dist() | |
107 | { | |
108 | utiliser_langue_visiteur(); | |
109 | echo install_debut_html(_T('pass_mot_oublie')); | |
110 | inclure_balise_dynamique(formulaire_oubli_dyn(_request('p'), _request('oubli'))); | |
111 | echo install_fin_html(); | |
112 | } | |
113 | ?> |