squellete2
[aidenligne_francais_universite.git] / ecrire / balise / login_public.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; #securite
14
15include_spip('base/abstract_sql');
16spip_connect();
17
18// http://doc.spip.org/@balise_LOGIN_PUBLIC
19function balise_LOGIN_PUBLIC ($p, $nom='LOGIN_PUBLIC') {
20 return calculer_balise_dynamique($p, $nom, array('url'));
21}
22
23# retourner:
24# 1. l'url collectee ci-dessus (args0) ou donnee en filtre (filtre0)
25# 2. l'eventuel parametre de la balise (args1) fournie par
26# calculer_balise_dynamique, en l'occurence le #LOGIN courant si l'on
27# programme une <boucle(AUTEURS)>[(#LOGIN_PUBLIC{#LOGIN})]
28
29// http://doc.spip.org/@balise_LOGIN_PUBLIC_stat
30function balise_LOGIN_PUBLIC_stat ($args, $filtres) {
31 return array($filtres[0] ? $filtres[0] : $args[0], $args[1], $args[2]);
32}
33
34// http://doc.spip.org/@balise_LOGIN_PUBLIC_dyn
35function balise_LOGIN_PUBLIC_dyn($url, $login) {
36
37 if (!$url # pas d'url passee en filtre ou dans le contexte
38 AND !$url = _request('url') # ni d'url passee par l'utilisateur
39 ){
40 $url = str_replace('&amp;', '&', self());
41 }
42 return login_explicite($login, $url, true);
43}
44
45// cette fonction est commune a la balise #LOGIN_PUBLIC et #LOGIN_PRIVE
46// elle doit accepter les visiteurs dans le premier cas, mais pas dans le second
47// http://doc.spip.org/@login_explicite
48function login_explicite($login, $cible, $accepter_visiteurs = false) {
49 global $auteur_session;
50
51 // passer $action dans parametre_url pour avoir une chance que $cible == $action
52 // et pas faire de boulce infinie de redirection
53 $action = parametre_url(str_replace('&amp;', '&', self()),'var_dummy','','&');
54 if ($cible) {
55 $cible = parametre_url($cible, 'var_erreur', '', '&');
56 $cible = parametre_url($cible, 'var_login', '', '&');
57 } else {
58 if (ereg("[?&]url=([^&]*)", $action, $m))
59 $cible = rawurldecode($m[1]);
60 else
61 $cible = _DIR_RESTREINT ;
62 }
63
64 verifier_visiteur();
65
66 // Si on est connecte, envoyer vers la destination
67 // sauf si on y est deja
68 if ($auteur_session AND
69 ($auteur_session['statut']=='0minirezo'
70 OR $auteur_session['statut']=='1comite'
71 OR ($accepter_visiteurs && ($auteur_session['statut']=='6forum')))) {
72 $auth = charger_fonction('auth','inc');
73 $auth = $auth();
74 if (($auth==="")
75 OR ($accepter_visiteurs && ($auth=='6forum'))) {
76 if ($cible != $action) {
77 if (!headers_sent() AND !$_GET['var_mode']) {
78 include_spip('inc/headers');
79 redirige_par_entete($cible);
80 } else {
81 include_spip('inc/minipres');
82 return http_href($cible, _T('login_par_ici'));
83 }
84 } else
85 return ''; # on est arrive on bon endroit, et logue'...
86 }
87 }
88
89 return login_pour_tous($login ? $login : _request('var_login'), $cible, $action);
90}
91
92// http://doc.spip.org/@login_pour_tous
93function login_pour_tous($login, $cible, $action) {
94 global $ignore_auth_http, $_SERVER, $_COOKIE;
95
96 // en cas d'echec de cookie, inc_auth a renvoye vers le script de
97 // pose de cookie ; s'il n'est pas la, c'est echec cookie
98 // s'il est la, c'est probablement un bookmark sur bonjour=oui,
99 // et pas un echec cookie.
100 if (_request('var_echec_cookie'))
101 $echec_cookie = ($_COOKIE['spip_session'] != 'test_echec_cookie');
102 else $echec_cookie = '';
103
104 // hack grossier pour changer le message en cas d'echec d'un visiteur(6forum) sur ecrire/
105 $echec_visiteur = _request('var_echec_visiteur')?' ':'';
106
107
108 $pose_cookie = generer_url_public('spip_cookie');
109 $auth_http = '';
110 if ($echec_cookie AND !$ignore_auth_http) {
111 if (($GLOBALS['flag_sapi_name']
112 AND eregi("apache", @php_sapi_name()))
113 OR ereg("^Apache.* PHP", $_SERVER['SERVER_SOFTWARE']))
114 $auth_http = $pose_cookie;
115 }
116 // Attention dans le cas 'intranet' la proposition de se loger
117 // par auth_http peut conduire a l'echec.
118 if (isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']))
119 $auth_http = '';
120
121 // Le login est memorise dans le cookie d'admin eventuel
122 if (!$login) {
123 if (ereg("^@(.*)$", $_COOKIE['spip_admin'], $regs))
124 $login = $regs[1];
125 } else if ($login == '-1')
126 $login = '';
127
128 $erreur = '';
129 if ($login) {
130 $row = spip_abstract_fetsel('*', 'spip_auteurs', "login=" . _q($login));
131 // Retrouver ceux qui signent de leur nom ou email
132 if (!$row AND !$GLOBALS['ldap_present']) {
133 $row = spip_abstract_fetsel('*', 'spip_auteurs', "(nom = " . _q($login) . " OR email = " . _q($login) . ") AND login<>'' AND statut<>'5poubelle'");
134 if ($row) {
135 $login_alt = $login; # afficher ce qu'on a tape
136 $login = $row['login'];
137 }
138 }
139
140 if ((!$row AND !$GLOBALS['ldap_present']) OR
141 ($row['statut'] == '5poubelle') OR
142 (($row['source'] == 'spip') AND $row['pass'] == '')) {
143 $erreur = _T('login_identifiant_inconnu',
144 array('login' => htmlspecialchars($login)));
145 $row = array();
146 $login = '';
147 include_spip('inc/cookie');
148 spip_setcookie("spip_admin", "", time() - 3600);
149 } else {
150 // on laisse le menu decider de la langue
151 unset($row['lang']);
152 }
153 }
154 if (!$row)
155 $row = array();
156 // afficher "erreur de mot de passe" si &var_erreur=pass
157 if (_request('var_erreur') == 'pass')
158 $erreur = _T('login_erreur_pass');
159
160 // Appeler le squelette formulaire_login
161 return array('formulaires/login', $GLOBALS['delais'],
162 array_merge(
163 array_map('texte_script', $row),
164 array(
165 'action2' => ($login ? $pose_cookie: $action),
166 'erreur' => $erreur,
167 'action' => $action,
168 'url' => $cible,
169 'auth_http' => $auth_http,
170 'echec_cookie' => ($echec_cookie ? ' ' : ''),
171 'echec_visiteur' => $echec_visiteur,
172 'login' => $login,
173 'login_alt' => (isset($login_alt) ? $login_alt : $login),
174 'self' => str_replace('&amp;', '&', self())
175 )
176 )
177 );
178
179}
180
181// Bouton duree de connexion
182
183// http://doc.spip.org/@filtre_rester_connecte
184function filtre_rester_connecte($prefs) {
185 $prefs = unserialize(stripslashes($prefs));
186 return $prefs['cnx'] == 'perma' ? ' ' : '';
187}
188
189?>