Subversion Repositories Sites.tela-botanica.org

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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);
34
}
35
 
36
function login_explicite($login, $cible) {
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
		AND !$_GET['var_mode'])
61
			redirige_par_entete($cible);
62
		return http_href($cible, _T('login_par_ici'));
63
	}
64
	return login_pour_tous($login ? $login : _request('var_login'), $cible, $action);
65
}
66
 
67
function login_pour_tous($login, $cible, $action) {
68
	global $ignore_auth_http, $php_module, $_SERVER, $_COOKIE;
69
 
70
	// en cas d'echec de cookie, inc_auth a renvoye vers spip_cookie qui
71
	// a tente de poser un cookie ; s'il n'est pas la, c'est echec cookie
72
	// s'il est la, c'est probablement un bookmark sur bonjour=oui,
73
	// et pas un echec cookie.
74
	if (_request('var_echec_cookie'))
75
		$echec_cookie = ($_COOKIE['spip_session'] != 'test_echec_cookie');
76
	$auth_http = ($echec_cookie AND $php_module AND !$ignore_auth_http) ?
77
		'spip_cookie.php3' : '';
78
	// Attention dans le cas 'intranet' la proposition de se loger
79
	// par auth_http peut conduire a l'echec.
80
	if ($_SERVER['PHP_AUTH_USER'] AND $_SERVER['PHP_AUTH_PW'])
81
		$auth_http = '';
82
 
83
	// Le login est memorise dans le cookie d'admin eventuel
84
	if (!$login) {
85
		if (ereg("^@(.*)$", $_COOKIE['spip_admin'], $regs))
86
			$login = $regs[1];
87
	} else if ($login == '-1')
88
		$login = '';
89
 
90
	$erreur = '';
91
	if ($login) {
92
		$s = spip_query("SELECT * FROM spip_auteurs
93
			WHERE login='" .addslashes($login) ."'");
94
		$row =  spip_fetch_array($s);
95
 
96
		// Retrouver ceux qui signent de leur nom ou email
97
		if (!$row AND !$GLOBALS['ldap_present']) {
98
			if ($t = spip_fetch_array(
99
			spip_query(
100
				"SELECT * FROM spip_auteurs
101
				WHERE (nom LIKE '" .addslashes($login) ."'
102
				OR email LIKE '" .addslashes($login) ."')
103
				AND login<>'' AND statut<>'5poubelle'"
104
			))) {
105
				$row = $t;
106
				$login_alt = $login; # afficher ce qu'on a tape
107
				$login = $t['login'];
108
			}
109
		}
110
 
111
		if ((!$row AND !$GLOBALS['ldap_present']) OR
112
			($row['statut'] == '5poubelle') OR
113
			(($row['source'] == 'spip') AND $row['pass'] == '')) {
114
			$erreur =  _T('login_identifiant_inconnu',
115
				array('login' => htmlspecialchars($login)));
116
			$row = array();
117
			$login = '';
118
			@spip_setcookie("spip_admin", "", time() - 3600);
119
		} else {
120
			// on laisse le menu decider de la langue
121
			unset($row['lang']);
122
		}
123
	}
124
	if (!$row)
125
		$row = array();
126
 
127
	// afficher "erreur de mot de passe" si &var_erreur=pass
128
	if (_request('var_erreur') == 'pass')
129
		$erreur = _T('login_erreur_pass');
130
 
131
	return array('formulaire_login', $GLOBALS['delais'],
132
		array_merge(
133
				array_map('texte_script', $row),
134
				array(
135
					'action2' => ($login ? 'spip_cookie.php3' : $action),
136
					'erreur' => $erreur,
137
					'action' => $action,
138
					'url' => $cible,
139
					'auth_http' => $auth_http,
140
					'echec_cookie' => ($echec_cookie ? ' ' : ''),
141
					'login' => $login,
142
					'login_alt' => ($login_alt ? $login_alt : $login),
143
					'self' => $GLOBALS["clean_link"]->getUrl()
144
					)
145
				)
146
			);
147
 
148
}
149
 
150
// Bouton duree de connexion
151
 
152
function filtre_rester_connecte($prefs) {
153
	$prefs = unserialize(stripslashes($prefs));
154
	return $prefs['cnx'] == 'perma' ? ' ' : '';
155
}
156
 
157
// made in cherche_image_nommee. A partager.
158
 
159
function silogoauteur($id_auteur, $formats = array ('gif', 'jpg', 'png')) {
160
	reset($formats);
161
	while (list(, $format) = each($formats)) {
162
		$d = _DIR_IMG . "auton$id_auteur.$format";
163
		if (@file_exists($d)) return $d;
164
	}
165
	return  '';
166
}
167
 
168
?>