squellete2
[aidenligne_francais_universite.git] / ecrire / action / pass.php
CommitLineData
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
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15include_spip('inc/minipres'); # charge lang et execute utiliser_lang
16include_spip('inc/mail'); # pour envoyer_mail
17include_spip('inc/acces'); # pour generer_htpass
18include_spip('public/assembler'); # pour calculer la page
19include_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
27function 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
35function 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
72function 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
106function 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?>