squellete2
[aidenligne_francais_universite.git] / ecrire / action / pass.php
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 ?>