4 |
david |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
if (!defined("_ECRIRE_INC_VERSION")) return; #securite
|
|
|
4 |
|
|
|
5 |
include(_FILE_CONNECT);
|
|
|
6 |
include_ecrire("inc_meta.php3");
|
|
|
7 |
include_ecrire("inc_session.php3");
|
|
|
8 |
include_ecrire("inc_filtres.php3");
|
|
|
9 |
|
|
|
10 |
global $balise_LOGIN_PUBLIC_collecte;
|
|
|
11 |
$balise_LOGIN_PUBLIC_collecte = array('url');
|
|
|
12 |
|
|
|
13 |
# retourner:
|
|
|
14 |
# 1. l'url collectee ci-dessus (args0) ou donnee en filtre (filtre0)
|
|
|
15 |
# 2. l'eventuel parametre de la balise (args1) fournie par
|
|
|
16 |
# calculer_balise_dynamique, en l'occurence le #LOGIN courant si l'on
|
|
|
17 |
# programme une <boucle(AUTEURS)>[(#LOGIN_PUBLIC{#LOGIN})]
|
|
|
18 |
|
|
|
19 |
function balise_LOGIN_PUBLIC_stat ($args, $filtres) {
|
|
|
20 |
return array($filtres[0] ? $filtres[0] : $args[0], $args[1], $args[2]);
|
|
|
21 |
}
|
|
|
22 |
|
|
|
23 |
function balise_LOGIN_PUBLIC_dyn($url, $login) {
|
|
|
24 |
|
|
|
25 |
if (!$url # pas d'url passee en filtr eou dans le contexte
|
|
|
26 |
AND !$url = _request('url') # ni d'url passee par l'utilisateur
|
|
|
27 |
) {
|
|
|
28 |
$link = new Link();
|
|
|
29 |
$link->delVar('var_erreur');
|
|
|
30 |
$link->delVar('var_login');
|
|
|
31 |
$url = $link->getUrl();
|
|
|
32 |
}
|
|
|
33 |
return login_explicite($login, $url, 'forum');
|
|
|
34 |
}
|
|
|
35 |
|
|
|
36 |
function login_explicite($login, $cible, $mode) {
|
|
|
37 |
global $auteur_session;
|
|
|
38 |
|
|
|
39 |
$link = new Link();
|
|
|
40 |
$link->delVar('var_erreur');
|
|
|
41 |
$link->delVar('var_login');
|
|
|
42 |
$action = $link->getUrl();
|
|
|
43 |
|
|
|
44 |
if ($cible) {
|
|
|
45 |
$cible = ereg_replace("[?&]var_erreur=[^&]*", '', $cible);
|
|
|
46 |
$cible = ereg_replace("[?&]var_login=[^&]*", '', $cible);
|
|
|
47 |
} else {
|
|
|
48 |
if (ereg("[?&]url=([^&]*)", $action, $m))
|
|
|
49 |
$cible = urldecode($m[1]);
|
|
|
50 |
else
|
|
|
51 |
$cible = _DIR_RESTREINT ;
|
|
|
52 |
}
|
|
|
53 |
|
|
|
54 |
include_ecrire("inc_session.php3");
|
|
|
55 |
verifier_visiteur();
|
|
|
56 |
|
|
|
57 |
if ($auteur_session AND
|
|
|
58 |
($auteur_session['statut']=='0minirezo' OR $auteur_session['statut']=='1comite')) {
|
|
|
59 |
if (($cible != $action) && !headers_sent())
|
|
|
60 |
redirige_par_entete($cible);
|
|
|
61 |
return http_href($cible, _T('login_par_ici'));
|
|
|
62 |
}
|
|
|
63 |
return login_pour_tous($login ? $login : _request('var_login'), $cible, $action, $mode);
|
|
|
64 |
}
|
|
|
65 |
|
|
|
66 |
function login_pour_tous($login, $cible, $action, $mode) {
|
|
|
67 |
global $ignore_auth_http, $php_module, $_SERVER, $_COOKIE;
|
|
|
68 |
|
|
|
69 |
// en cas d'echec de cookie, inc_auth a renvoye vers spip_cookie qui
|
|
|
70 |
// a tente de poser un cookie ; s'il n'est pas la, c'est echec cookie
|
|
|
71 |
// s'il est la, c'est probablement un bookmark sur bonjour=oui,
|
|
|
72 |
// et pas un echec cookie.
|
|
|
73 |
if (_request('var_echec_cookie'))
|
|
|
74 |
$echec_cookie = ($_COOKIE['spip_session'] != 'test_echec_cookie');
|
|
|
75 |
$auth_http = ($echec_cookie AND $php_module AND !$ignore_auth_http) ?
|
|
|
76 |
'spip_cookie.php3' : '';
|
|
|
77 |
// Attention dans le cas 'intranet' la proposition de se loger
|
|
|
78 |
// par auth_http peut conduire a l'echec.
|
|
|
79 |
if ($_SERVER['PHP_AUTH_USER'] AND $_SERVER['PHP_AUTH_PW'])
|
|
|
80 |
$auth_http = '';
|
|
|
81 |
|
|
|
82 |
// Le login est memorise dans le cookie d'admin eventuel
|
|
|
83 |
if (!$login) {
|
|
|
84 |
if (ereg("^@(.*)$", $_COOKIE['spip_admin'], $regs))
|
|
|
85 |
$login = $regs[1];
|
|
|
86 |
} else if ($login == '-1')
|
|
|
87 |
$login = '';
|
|
|
88 |
|
|
|
89 |
$erreur = '';
|
|
|
90 |
if ($login) {
|
|
|
91 |
$s = spip_query("SELECT * FROM spip_auteurs
|
|
|
92 |
WHERE login='" .addslashes($login) ."'");
|
|
|
93 |
$row = spip_fetch_array($s);
|
|
|
94 |
|
|
|
95 |
// Retrouver ceux qui signent de leur nom ou email
|
|
|
96 |
if (!$row AND !$GLOBALS['ldap_present']) {
|
|
|
97 |
if ($t = spip_fetch_array(
|
|
|
98 |
spip_query(
|
|
|
99 |
"SELECT * FROM spip_auteurs
|
|
|
100 |
WHERE (nom LIKE '" .addslashes($login) ."'
|
|
|
101 |
OR email LIKE '" .addslashes($login) ."')
|
|
|
102 |
AND login<>'' AND statut<>'5poubelle'"
|
|
|
103 |
))) {
|
|
|
104 |
$row = $t;
|
|
|
105 |
$login_alt = $login; # afficher ce qu'on a tape
|
|
|
106 |
$login = $t['login'];
|
|
|
107 |
}
|
|
|
108 |
}
|
|
|
109 |
|
|
|
110 |
if ((!$row AND !$GLOBALS['ldap_present']) OR
|
|
|
111 |
($row['statut'] == '5poubelle') OR
|
|
|
112 |
(($row['source'] == 'spip') AND $row['pass'] == '')) {
|
|
|
113 |
$erreur = _T('login_identifiant_inconnu',
|
|
|
114 |
array('login' => htmlspecialchars($login)));
|
|
|
115 |
$row = array();
|
|
|
116 |
$login = '';
|
|
|
117 |
@spip_setcookie("spip_admin", "", time() - 3600);
|
|
|
118 |
} else {
|
|
|
119 |
// on laisse le menu decider de la langue
|
|
|
120 |
unset($row['lang']);
|
|
|
121 |
}
|
|
|
122 |
}
|
|
|
123 |
if (!$row)
|
|
|
124 |
$row = array();
|
|
|
125 |
|
|
|
126 |
// afficher "erreur de mot de passe" si &var_erreur=pass
|
|
|
127 |
if (_request('var_erreur') == 'pass')
|
|
|
128 |
$erreur = _T('login_erreur_pass');
|
|
|
129 |
|
|
|
130 |
// url des inscriptions
|
|
|
131 |
$inscription = ((lire_meta("accepter_inscriptions") == "oui")
|
|
|
132 |
OR (($mode == 'forum')
|
|
|
133 |
AND (lire_meta("accepter_visiteurs") == "oui"
|
|
|
134 |
OR lire_meta('forums_publics') == 'abo'))
|
|
|
135 |
) ? 'spip_inscription.php3' : '';
|
|
|
136 |
|
|
|
137 |
return array('formulaire_login', 0,
|
|
|
138 |
array_merge(
|
|
|
139 |
array_map('texte_script', $row),
|
|
|
140 |
array(
|
|
|
141 |
'action2' => ($login ? 'spip_cookie.php3' : $action),
|
|
|
142 |
'erreur' => $erreur,
|
|
|
143 |
'action' => $action,
|
|
|
144 |
'url' => $cible,
|
|
|
145 |
'auth_http' => $auth_http,
|
|
|
146 |
'echec_cookie' => ($echec_cookie ? ' ' : ''),
|
|
|
147 |
'inscription' => $inscription,
|
|
|
148 |
'login' => $login,
|
|
|
149 |
'login_alt' => ($login_alt ? $login_alt : $login)
|
|
|
150 |
)
|
|
|
151 |
)
|
|
|
152 |
);
|
|
|
153 |
|
|
|
154 |
}
|
|
|
155 |
|
|
|
156 |
// Bouton duree de connexion
|
|
|
157 |
|
|
|
158 |
function filtre_rester_connecte($prefs) {
|
|
|
159 |
$prefs = unserialize(stripslashes($prefs));
|
|
|
160 |
return $prefs['cnx'] == 'perma' ? ' ' : '';
|
|
|
161 |
}
|
|
|
162 |
|
|
|
163 |
// made in cherche_image_nommee. A partager.
|
|
|
164 |
|
|
|
165 |
function silogoauteur($id_auteur, $formats = array ('gif', 'jpg', 'png')) {
|
|
|
166 |
reset($formats);
|
|
|
167 |
while (list(, $format) = each($formats)) {
|
|
|
168 |
$d = _DIR_IMG . "auton$id_auteur.$format";
|
|
|
169 |
if (@file_exists($d)) return $d;
|
|
|
170 |
}
|
|
|
171 |
return '';
|
|
|
172 |
}
|
|
|
173 |
|
|
|
174 |
?>
|