@@ -17,7 +17,7 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | include_spip('base/abstract_sql'); |
@@ -31,11 +31,11 @@ discard block |
||
| 31 | 31 | * true si espace privé, false sinon. |
| 32 | 32 | **/ |
| 33 | 33 | function is_url_prive($cible) { |
| 34 | - include_spip('inc/filtres_mini'); |
|
| 35 | - $path = parse_url(tester_url_absolue($cible) ? $cible : url_absolue($cible)); |
|
| 36 | - $path = (isset($path['path']) ? $path['path'] : ''); |
|
| 34 | + include_spip('inc/filtres_mini'); |
|
| 35 | + $path = parse_url(tester_url_absolue($cible) ? $cible : url_absolue($cible)); |
|
| 36 | + $path = (isset($path['path']) ? $path['path'] : ''); |
|
| 37 | 37 | |
| 38 | - return strncmp(substr($path, -strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS)) == 0; |
|
| 38 | + return strncmp(substr($path, -strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS)) == 0; |
|
| 39 | 39 | } |
| 40 | 40 | |
| 41 | 41 | /** |
@@ -60,89 +60,89 @@ discard block |
||
| 60 | 60 | * Environnement du formulaire |
| 61 | 61 | **/ |
| 62 | 62 | function formulaires_login_charger_dist($cible = '', $login = '', $prive = null) { |
| 63 | - $erreur = _request('var_erreur'); |
|
| 64 | - |
|
| 65 | - if (!$login) { |
|
| 66 | - $login = strval(_request('var_login')); |
|
| 67 | - } |
|
| 68 | - // si on est deja identifie |
|
| 69 | - if (!$login and isset($GLOBALS['visiteur_session']['email'])) { |
|
| 70 | - $login = $GLOBALS['visiteur_session']['email']; |
|
| 71 | - } |
|
| 72 | - if (!$login and isset($GLOBALS['visiteur_session']['login'])) { |
|
| 73 | - $login = $GLOBALS['visiteur_session']['login']; |
|
| 74 | - } |
|
| 75 | - // ou si on a un cookie admin |
|
| 76 | - if (!$login) { |
|
| 77 | - if (isset($_COOKIE['spip_admin']) |
|
| 78 | - and preg_match(',^@(.*)$,', $_COOKIE['spip_admin'], $regs) |
|
| 79 | - ) { |
|
| 80 | - $login = $regs[1]; |
|
| 81 | - } |
|
| 82 | - } |
|
| 83 | - |
|
| 84 | - include_spip('inc/auth'); |
|
| 85 | - $row = auth_informer_login($login); |
|
| 86 | - |
|
| 87 | - // Construire l'environnement du squelette |
|
| 88 | - // Ne pas proposer de "rester connecte quelques jours" |
|
| 89 | - // si la duree de l'alea est inferieure a 12 h (valeur par defaut) |
|
| 90 | - |
|
| 91 | - $valeurs = array( |
|
| 92 | - 'var_login' => $login, |
|
| 93 | - 'editable' => !$row, |
|
| 94 | - 'cnx' => isset($row['cnx']) ? $row['cnx'] : '0', |
|
| 95 | - 'auth_http' => login_auth_http(), |
|
| 96 | - 'rester_connecte' => ((_RENOUVELLE_ALEA < 12 * 3600) ? '' : ' '), |
|
| 97 | - '_logo' => isset($row['logo']) ? $row['logo'] : '', |
|
| 98 | - '_alea_actuel' => isset($row['alea_actuel']) ? $row['alea_actuel'] : '', |
|
| 99 | - '_alea_futur' => isset($row['alea_futur']) ? $row['alea_futur'] : '', |
|
| 100 | - '_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth |
|
| 101 | - ); |
|
| 102 | - |
|
| 103 | - if ($erreur or !isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) { |
|
| 104 | - $valeurs['editable'] = true; |
|
| 105 | - } |
|
| 106 | - |
|
| 107 | - if (is_null($prive) ? is_url_prive($cible) : $prive) { |
|
| 108 | - include_spip('inc/autoriser'); |
|
| 109 | - $loge = autoriser('ecrire'); |
|
| 110 | - } else { |
|
| 111 | - $loge = (isset($GLOBALS['visiteur_session']['auth']) and $GLOBALS['visiteur_session']['auth'] != ''); |
|
| 112 | - } |
|
| 113 | - |
|
| 114 | - // Si on est connecte, appeler traiter() |
|
| 115 | - // et lancer la redirection si besoin |
|
| 116 | - if (!$valeurs['editable'] and $loge and _request('formulaire_action')!=='login') { |
|
| 117 | - $traiter = charger_fonction('traiter', 'formulaires/login'); |
|
| 118 | - $res = $traiter($cible, $login, $prive); |
|
| 119 | - $valeurs = array_merge($valeurs, $res); |
|
| 120 | - |
|
| 121 | - if (isset($res['redirect']) and $res['redirect']) { |
|
| 122 | - include_spip('inc/headers'); |
|
| 123 | - # preparer un lien pour quand redirige_formulaire ne fonctionne pas |
|
| 124 | - $m = redirige_formulaire($res['redirect'], '', 'ajaxform'); |
|
| 125 | - $valeurs['_deja_loge'] = inserer_attribut( |
|
| 126 | - '<a>' . _T('login_par_ici') . "</a>$m", |
|
| 127 | - 'href', |
|
| 128 | - $res['redirect'] |
|
| 129 | - ); |
|
| 130 | - } |
|
| 131 | - } |
|
| 132 | - // en cas d'echec de cookie, inc_auth a renvoye vers le script de |
|
| 133 | - // pose de cookie ; s'il n'est pas la, c'est echec cookie |
|
| 134 | - // s'il est la, c'est probablement un bookmark sur bonjour=oui, |
|
| 135 | - // et pas un echec cookie. |
|
| 136 | - if ($erreur == 'cookie') { |
|
| 137 | - $valeurs['echec_cookie'] = ' '; |
|
| 138 | - } elseif ($erreur) { |
|
| 139 | - // une erreur d'un SSO indique dans la redirection vers ici |
|
| 140 | - // mais il faut se proteger de toute tentative d'injection malveilante |
|
| 141 | - include_spip('inc/texte'); |
|
| 142 | - $valeurs['message_erreur'] = safehtml($erreur); |
|
| 143 | - } |
|
| 144 | - |
|
| 145 | - return $valeurs; |
|
| 63 | + $erreur = _request('var_erreur'); |
|
| 64 | + |
|
| 65 | + if (!$login) { |
|
| 66 | + $login = strval(_request('var_login')); |
|
| 67 | + } |
|
| 68 | + // si on est deja identifie |
|
| 69 | + if (!$login and isset($GLOBALS['visiteur_session']['email'])) { |
|
| 70 | + $login = $GLOBALS['visiteur_session']['email']; |
|
| 71 | + } |
|
| 72 | + if (!$login and isset($GLOBALS['visiteur_session']['login'])) { |
|
| 73 | + $login = $GLOBALS['visiteur_session']['login']; |
|
| 74 | + } |
|
| 75 | + // ou si on a un cookie admin |
|
| 76 | + if (!$login) { |
|
| 77 | + if (isset($_COOKIE['spip_admin']) |
|
| 78 | + and preg_match(',^@(.*)$,', $_COOKIE['spip_admin'], $regs) |
|
| 79 | + ) { |
|
| 80 | + $login = $regs[1]; |
|
| 81 | + } |
|
| 82 | + } |
|
| 83 | + |
|
| 84 | + include_spip('inc/auth'); |
|
| 85 | + $row = auth_informer_login($login); |
|
| 86 | + |
|
| 87 | + // Construire l'environnement du squelette |
|
| 88 | + // Ne pas proposer de "rester connecte quelques jours" |
|
| 89 | + // si la duree de l'alea est inferieure a 12 h (valeur par defaut) |
|
| 90 | + |
|
| 91 | + $valeurs = array( |
|
| 92 | + 'var_login' => $login, |
|
| 93 | + 'editable' => !$row, |
|
| 94 | + 'cnx' => isset($row['cnx']) ? $row['cnx'] : '0', |
|
| 95 | + 'auth_http' => login_auth_http(), |
|
| 96 | + 'rester_connecte' => ((_RENOUVELLE_ALEA < 12 * 3600) ? '' : ' '), |
|
| 97 | + '_logo' => isset($row['logo']) ? $row['logo'] : '', |
|
| 98 | + '_alea_actuel' => isset($row['alea_actuel']) ? $row['alea_actuel'] : '', |
|
| 99 | + '_alea_futur' => isset($row['alea_futur']) ? $row['alea_futur'] : '', |
|
| 100 | + '_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth |
|
| 101 | + ); |
|
| 102 | + |
|
| 103 | + if ($erreur or !isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) { |
|
| 104 | + $valeurs['editable'] = true; |
|
| 105 | + } |
|
| 106 | + |
|
| 107 | + if (is_null($prive) ? is_url_prive($cible) : $prive) { |
|
| 108 | + include_spip('inc/autoriser'); |
|
| 109 | + $loge = autoriser('ecrire'); |
|
| 110 | + } else { |
|
| 111 | + $loge = (isset($GLOBALS['visiteur_session']['auth']) and $GLOBALS['visiteur_session']['auth'] != ''); |
|
| 112 | + } |
|
| 113 | + |
|
| 114 | + // Si on est connecte, appeler traiter() |
|
| 115 | + // et lancer la redirection si besoin |
|
| 116 | + if (!$valeurs['editable'] and $loge and _request('formulaire_action')!=='login') { |
|
| 117 | + $traiter = charger_fonction('traiter', 'formulaires/login'); |
|
| 118 | + $res = $traiter($cible, $login, $prive); |
|
| 119 | + $valeurs = array_merge($valeurs, $res); |
|
| 120 | + |
|
| 121 | + if (isset($res['redirect']) and $res['redirect']) { |
|
| 122 | + include_spip('inc/headers'); |
|
| 123 | + # preparer un lien pour quand redirige_formulaire ne fonctionne pas |
|
| 124 | + $m = redirige_formulaire($res['redirect'], '', 'ajaxform'); |
|
| 125 | + $valeurs['_deja_loge'] = inserer_attribut( |
|
| 126 | + '<a>' . _T('login_par_ici') . "</a>$m", |
|
| 127 | + 'href', |
|
| 128 | + $res['redirect'] |
|
| 129 | + ); |
|
| 130 | + } |
|
| 131 | + } |
|
| 132 | + // en cas d'echec de cookie, inc_auth a renvoye vers le script de |
|
| 133 | + // pose de cookie ; s'il n'est pas la, c'est echec cookie |
|
| 134 | + // s'il est la, c'est probablement un bookmark sur bonjour=oui, |
|
| 135 | + // et pas un echec cookie. |
|
| 136 | + if ($erreur == 'cookie') { |
|
| 137 | + $valeurs['echec_cookie'] = ' '; |
|
| 138 | + } elseif ($erreur) { |
|
| 139 | + // une erreur d'un SSO indique dans la redirection vers ici |
|
| 140 | + // mais il faut se proteger de toute tentative d'injection malveilante |
|
| 141 | + include_spip('inc/texte'); |
|
| 142 | + $valeurs['message_erreur'] = safehtml($erreur); |
|
| 143 | + } |
|
| 144 | + |
|
| 145 | + return $valeurs; |
|
| 146 | 146 | } |
| 147 | 147 | |
| 148 | 148 | |
@@ -157,19 +157,19 @@ discard block |
||
| 157 | 157 | * - chaîne vide sinon. |
| 158 | 158 | **/ |
| 159 | 159 | function login_auth_http() { |
| 160 | - if (!$GLOBALS['ignore_auth_http'] |
|
| 161 | - and _request('var_erreur') == 'cookie' |
|
| 162 | - and (!isset($_COOKIE['spip_session']) or $_COOKIE['spip_session'] != 'test_echec_cookie') |
|
| 163 | - and (($GLOBALS['flag_sapi_name'] and preg_match(',apache,i', @php_sapi_name())) |
|
| 164 | - or preg_match(',^Apache.* PHP,', $_SERVER['SERVER_SOFTWARE'])) |
|
| 165 | - // Attention dans le cas 'intranet' la proposition de se loger |
|
| 166 | - // par auth_http peut conduire a l'echec. |
|
| 167 | - and !(isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) |
|
| 168 | - ) { |
|
| 169 | - return generer_url_action('cookie', '', false, true); |
|
| 170 | - } else { |
|
| 171 | - return ''; |
|
| 172 | - } |
|
| 160 | + if (!$GLOBALS['ignore_auth_http'] |
|
| 161 | + and _request('var_erreur') == 'cookie' |
|
| 162 | + and (!isset($_COOKIE['spip_session']) or $_COOKIE['spip_session'] != 'test_echec_cookie') |
|
| 163 | + and (($GLOBALS['flag_sapi_name'] and preg_match(',apache,i', @php_sapi_name())) |
|
| 164 | + or preg_match(',^Apache.* PHP,', $_SERVER['SERVER_SOFTWARE'])) |
|
| 165 | + // Attention dans le cas 'intranet' la proposition de se loger |
|
| 166 | + // par auth_http peut conduire a l'echec. |
|
| 167 | + and !(isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) |
|
| 168 | + ) { |
|
| 169 | + return generer_url_action('cookie', '', false, true); |
|
| 170 | + } else { |
|
| 171 | + return ''; |
|
| 172 | + } |
|
| 173 | 173 | } |
| 174 | 174 | |
| 175 | 175 | /** |
@@ -195,54 +195,54 @@ discard block |
||
| 195 | 195 | **/ |
| 196 | 196 | function formulaires_login_verifier_dist($cible = '', $login = '', $prive = null) { |
| 197 | 197 | |
| 198 | - $session_login = _request('var_login'); |
|
| 199 | - $session_password = _request('password'); |
|
| 200 | - $session_remember = _request('session_remember'); |
|
| 201 | - |
|
| 202 | - if (!$session_login) { |
|
| 203 | - # pas de login saisi ! |
|
| 204 | - return array('var_login' => _T('info_obligatoire')); |
|
| 205 | - } |
|
| 206 | - |
|
| 207 | - // appeler auth_identifier_login qui va : |
|
| 208 | - // - renvoyer un string si echec (message d'erreur) |
|
| 209 | - // - un array decrivant l'auteur identifie si possible |
|
| 210 | - // - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification |
|
| 211 | - include_spip('inc/auth'); |
|
| 212 | - $auteur = auth_identifier_login($session_login, $session_password); |
|
| 213 | - // on arrive ici si on ne s'est pas identifie avec un SSO |
|
| 214 | - if (!is_array($auteur)) { |
|
| 215 | - $erreurs = array(); |
|
| 216 | - if (is_string($auteur) and strlen($auteur)) { |
|
| 217 | - $erreurs['var_login'] = $auteur; |
|
| 218 | - } |
|
| 219 | - include_spip('inc/cookie'); |
|
| 220 | - spip_setcookie('spip_admin', '', time() - 3600); |
|
| 221 | - if (strlen($session_password)) { |
|
| 222 | - $erreurs['password'] = _T('login_erreur_pass'); |
|
| 223 | - } else { |
|
| 224 | - // sinon c'est un login en deux passe old style (ou js en panne) |
|
| 225 | - // pas de message d'erreur |
|
| 226 | - $erreurs['password'] = ' '; |
|
| 227 | - } |
|
| 228 | - |
|
| 229 | - return |
|
| 230 | - $erreurs; |
|
| 231 | - } |
|
| 232 | - // on a ete authentifie, construire la session |
|
| 233 | - // en gerant la duree demandee pour son cookie |
|
| 234 | - if ($session_remember !== null) { |
|
| 235 | - $auteur['cookie'] = $session_remember; |
|
| 236 | - } |
|
| 237 | - // si la connexion est refusee on renvoi un message erreur de mot de passe |
|
| 238 | - // car en donnant plus de detail on renseignerait un assaillant sur l'existence d'un compte |
|
| 239 | - if (auth_loger($auteur) === false) { |
|
| 240 | - $erreurs['message_erreur'] = _T('login_erreur_pass'); |
|
| 241 | - return $erreurs; |
|
| 242 | - } |
|
| 243 | - |
|
| 244 | - return (is_null($prive) ? is_url_prive($cible) : $prive) |
|
| 245 | - ? login_autoriser() : array(); |
|
| 198 | + $session_login = _request('var_login'); |
|
| 199 | + $session_password = _request('password'); |
|
| 200 | + $session_remember = _request('session_remember'); |
|
| 201 | + |
|
| 202 | + if (!$session_login) { |
|
| 203 | + # pas de login saisi ! |
|
| 204 | + return array('var_login' => _T('info_obligatoire')); |
|
| 205 | + } |
|
| 206 | + |
|
| 207 | + // appeler auth_identifier_login qui va : |
|
| 208 | + // - renvoyer un string si echec (message d'erreur) |
|
| 209 | + // - un array decrivant l'auteur identifie si possible |
|
| 210 | + // - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification |
|
| 211 | + include_spip('inc/auth'); |
|
| 212 | + $auteur = auth_identifier_login($session_login, $session_password); |
|
| 213 | + // on arrive ici si on ne s'est pas identifie avec un SSO |
|
| 214 | + if (!is_array($auteur)) { |
|
| 215 | + $erreurs = array(); |
|
| 216 | + if (is_string($auteur) and strlen($auteur)) { |
|
| 217 | + $erreurs['var_login'] = $auteur; |
|
| 218 | + } |
|
| 219 | + include_spip('inc/cookie'); |
|
| 220 | + spip_setcookie('spip_admin', '', time() - 3600); |
|
| 221 | + if (strlen($session_password)) { |
|
| 222 | + $erreurs['password'] = _T('login_erreur_pass'); |
|
| 223 | + } else { |
|
| 224 | + // sinon c'est un login en deux passe old style (ou js en panne) |
|
| 225 | + // pas de message d'erreur |
|
| 226 | + $erreurs['password'] = ' '; |
|
| 227 | + } |
|
| 228 | + |
|
| 229 | + return |
|
| 230 | + $erreurs; |
|
| 231 | + } |
|
| 232 | + // on a ete authentifie, construire la session |
|
| 233 | + // en gerant la duree demandee pour son cookie |
|
| 234 | + if ($session_remember !== null) { |
|
| 235 | + $auteur['cookie'] = $session_remember; |
|
| 236 | + } |
|
| 237 | + // si la connexion est refusee on renvoi un message erreur de mot de passe |
|
| 238 | + // car en donnant plus de detail on renseignerait un assaillant sur l'existence d'un compte |
|
| 239 | + if (auth_loger($auteur) === false) { |
|
| 240 | + $erreurs['message_erreur'] = _T('login_erreur_pass'); |
|
| 241 | + return $erreurs; |
|
| 242 | + } |
|
| 243 | + |
|
| 244 | + return (is_null($prive) ? is_url_prive($cible) : $prive) |
|
| 245 | + ? login_autoriser() : array(); |
|
| 246 | 246 | } |
| 247 | 247 | |
| 248 | 248 | /** |
@@ -257,21 +257,21 @@ discard block |
||
| 257 | 257 | * - tableau vide sinon. |
| 258 | 258 | **/ |
| 259 | 259 | function login_autoriser() { |
| 260 | - include_spip('inc/autoriser'); |
|
| 261 | - if (!autoriser('ecrire')) { |
|
| 262 | - $h = generer_url_action('logout', 'logout=prive&url=' . urlencode(self())); |
|
| 263 | - |
|
| 264 | - return array( |
|
| 265 | - 'message_erreur' => '<h1>' |
|
| 266 | - . _T('avis_erreur_visiteur') |
|
| 267 | - . '</h1><p>' |
|
| 268 | - . _T('texte_erreur_visiteur') |
|
| 269 | - . "</p><p class='retour'>[<a href='$h'>" |
|
| 270 | - . _T('icone_deconnecter') . '</a>]</p>' |
|
| 271 | - ); |
|
| 272 | - } |
|
| 273 | - |
|
| 274 | - return array(); |
|
| 260 | + include_spip('inc/autoriser'); |
|
| 261 | + if (!autoriser('ecrire')) { |
|
| 262 | + $h = generer_url_action('logout', 'logout=prive&url=' . urlencode(self())); |
|
| 263 | + |
|
| 264 | + return array( |
|
| 265 | + 'message_erreur' => '<h1>' |
|
| 266 | + . _T('avis_erreur_visiteur') |
|
| 267 | + . '</h1><p>' |
|
| 268 | + . _T('texte_erreur_visiteur') |
|
| 269 | + . "</p><p class='retour'>[<a href='$h'>" |
|
| 270 | + . _T('icone_deconnecter') . '</a>]</p>' |
|
| 271 | + ); |
|
| 272 | + } |
|
| 273 | + |
|
| 274 | + return array(); |
|
| 275 | 275 | } |
| 276 | 276 | |
| 277 | 277 | /** |
@@ -293,44 +293,44 @@ discard block |
||
| 293 | 293 | * Retours du traitement |
| 294 | 294 | **/ |
| 295 | 295 | function formulaires_login_traiter_dist($cible = '', $login = '', $prive = null) { |
| 296 | - $res = array(); |
|
| 297 | - // Si on se connecte dans l'espace prive, |
|
| 298 | - // ajouter "bonjour" (repere a peu pres les cookies desactives) |
|
| 299 | - if (is_null($prive) ? is_url_prive($cible) : $prive) { |
|
| 300 | - $cible = parametre_url($cible, 'bonjour', 'oui', '&'); |
|
| 301 | - } |
|
| 302 | - if ($cible == '@page_auteur') { |
|
| 303 | - $cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'], 'auteur'); |
|
| 304 | - } |
|
| 305 | - |
|
| 306 | - if ($cible) { |
|
| 307 | - $cible = parametre_url($cible, 'var_login', '', '&'); |
|
| 308 | - |
|
| 309 | - // transformer la cible absolue en cible relative |
|
| 310 | - // pour pas echouer quand la meta adresse_site est foireuse |
|
| 311 | - if (strncmp($cible, $u = url_de_base(), strlen($u)) == 0) { |
|
| 312 | - $cible = './' . substr($cible, strlen($u)); |
|
| 313 | - } elseif (tester_url_absolue($cible) and !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) { |
|
| 314 | - // si c'est une url absolue, refuser la redirection |
|
| 315 | - // sauf si cette securite est levee volontairement par le webmestre |
|
| 316 | - $cible = ''; |
|
| 317 | - } |
|
| 318 | - } |
|
| 319 | - |
|
| 320 | - // Si on est connecte, envoyer vers la destination |
|
| 321 | - if ($cible and ($cible != self('&')) and ($cible != self())) { |
|
| 322 | - $res['redirect'] = $cible; |
|
| 323 | - $res['message_ok'] = inserer_attribut( |
|
| 324 | - '<a>' . _T('login_par_ici') . '</a>', |
|
| 325 | - 'href', |
|
| 326 | - $cible |
|
| 327 | - ); |
|
| 328 | - } |
|
| 329 | - |
|
| 330 | - // avant de rediriger il faut mettre a jour les sessions sur le disque si on a charge une session |
|
| 331 | - if (function_exists('terminer_actualiser_sessions')) { |
|
| 332 | - terminer_actualiser_sessions(); |
|
| 333 | - } |
|
| 334 | - |
|
| 335 | - return $res; |
|
| 296 | + $res = array(); |
|
| 297 | + // Si on se connecte dans l'espace prive, |
|
| 298 | + // ajouter "bonjour" (repere a peu pres les cookies desactives) |
|
| 299 | + if (is_null($prive) ? is_url_prive($cible) : $prive) { |
|
| 300 | + $cible = parametre_url($cible, 'bonjour', 'oui', '&'); |
|
| 301 | + } |
|
| 302 | + if ($cible == '@page_auteur') { |
|
| 303 | + $cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'], 'auteur'); |
|
| 304 | + } |
|
| 305 | + |
|
| 306 | + if ($cible) { |
|
| 307 | + $cible = parametre_url($cible, 'var_login', '', '&'); |
|
| 308 | + |
|
| 309 | + // transformer la cible absolue en cible relative |
|
| 310 | + // pour pas echouer quand la meta adresse_site est foireuse |
|
| 311 | + if (strncmp($cible, $u = url_de_base(), strlen($u)) == 0) { |
|
| 312 | + $cible = './' . substr($cible, strlen($u)); |
|
| 313 | + } elseif (tester_url_absolue($cible) and !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) { |
|
| 314 | + // si c'est une url absolue, refuser la redirection |
|
| 315 | + // sauf si cette securite est levee volontairement par le webmestre |
|
| 316 | + $cible = ''; |
|
| 317 | + } |
|
| 318 | + } |
|
| 319 | + |
|
| 320 | + // Si on est connecte, envoyer vers la destination |
|
| 321 | + if ($cible and ($cible != self('&')) and ($cible != self())) { |
|
| 322 | + $res['redirect'] = $cible; |
|
| 323 | + $res['message_ok'] = inserer_attribut( |
|
| 324 | + '<a>' . _T('login_par_ici') . '</a>', |
|
| 325 | + 'href', |
|
| 326 | + $cible |
|
| 327 | + ); |
|
| 328 | + } |
|
| 329 | + |
|
| 330 | + // avant de rediriger il faut mettre a jour les sessions sur le disque si on a charge une session |
|
| 331 | + if (function_exists('terminer_actualiser_sessions')) { |
|
| 332 | + terminer_actualiser_sessions(); |
|
| 333 | + } |
|
| 334 | + |
|
| 335 | + return $res; |
|
| 336 | 336 | } |
@@ -19,7 +19,7 @@ discard block |
||
| 19 | 19 | */ |
| 20 | 20 | |
| 21 | 21 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 22 | - return; |
|
| 22 | + return; |
|
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | |
@@ -40,15 +40,15 @@ discard block |
||
| 40 | 40 | * @return bool|null|void |
| 41 | 41 | */ |
| 42 | 42 | function inc_session_dist($auteur = false) { |
| 43 | - if (is_numeric($auteur)) { |
|
| 44 | - return supprimer_sessions($auteur, $auteur > 0); |
|
| 45 | - } else { |
|
| 46 | - if (is_array($auteur)) { |
|
| 47 | - return ajouter_session($auteur); |
|
| 48 | - } else { |
|
| 49 | - return verifier_session($auteur); |
|
| 50 | - } |
|
| 51 | - } |
|
| 43 | + if (is_numeric($auteur)) { |
|
| 44 | + return supprimer_sessions($auteur, $auteur > 0); |
|
| 45 | + } else { |
|
| 46 | + if (is_array($auteur)) { |
|
| 47 | + return ajouter_session($auteur); |
|
| 48 | + } else { |
|
| 49 | + return verifier_session($auteur); |
|
| 50 | + } |
|
| 51 | + } |
|
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | |
@@ -77,26 +77,26 @@ discard block |
||
| 77 | 77 | */ |
| 78 | 78 | function supprimer_sessions($id_auteur, $toutes = true, $actives = true) { |
| 79 | 79 | |
| 80 | - spip_log("supprimer sessions auteur $id_auteur", "session"); |
|
| 81 | - if ($toutes or $id_auteur !== $GLOBALS['visiteur_session']['id_auteur']) { |
|
| 82 | - if ($dir = opendir(_DIR_SESSIONS)) { |
|
| 83 | - $t = time() - (4 * _RENOUVELLE_ALEA); |
|
| 84 | - while (($f = readdir($dir)) !== false) { |
|
| 85 | - if (preg_match(",^[^\d-]*(-?\d+)_\w{32}\.php[3]?$,", $f, $regs)) { |
|
| 86 | - $f = _DIR_SESSIONS . $f; |
|
| 87 | - if (($actives and $regs[1] == $id_auteur) or ($t > filemtime($f))) { |
|
| 88 | - spip_unlink($f); |
|
| 89 | - } |
|
| 90 | - } |
|
| 91 | - } |
|
| 92 | - } |
|
| 93 | - } else { |
|
| 94 | - verifier_session(); |
|
| 95 | - spip_unlink(fichier_session('alea_ephemere', true)); |
|
| 96 | - } |
|
| 97 | - |
|
| 98 | - // forcer le recalcul de la session courante |
|
| 99 | - spip_session(true); |
|
| 80 | + spip_log("supprimer sessions auteur $id_auteur", "session"); |
|
| 81 | + if ($toutes or $id_auteur !== $GLOBALS['visiteur_session']['id_auteur']) { |
|
| 82 | + if ($dir = opendir(_DIR_SESSIONS)) { |
|
| 83 | + $t = time() - (4 * _RENOUVELLE_ALEA); |
|
| 84 | + while (($f = readdir($dir)) !== false) { |
|
| 85 | + if (preg_match(",^[^\d-]*(-?\d+)_\w{32}\.php[3]?$,", $f, $regs)) { |
|
| 86 | + $f = _DIR_SESSIONS . $f; |
|
| 87 | + if (($actives and $regs[1] == $id_auteur) or ($t > filemtime($f))) { |
|
| 88 | + spip_unlink($f); |
|
| 89 | + } |
|
| 90 | + } |
|
| 91 | + } |
|
| 92 | + } |
|
| 93 | + } else { |
|
| 94 | + verifier_session(); |
|
| 95 | + spip_unlink(fichier_session('alea_ephemere', true)); |
|
| 96 | + } |
|
| 97 | + |
|
| 98 | + // forcer le recalcul de la session courante |
|
| 99 | + spip_session(true); |
|
| 100 | 100 | } |
| 101 | 101 | |
| 102 | 102 | /** |
@@ -114,116 +114,116 @@ discard block |
||
| 114 | 114 | * @return bool|string |
| 115 | 115 | */ |
| 116 | 116 | function ajouter_session($auteur) { |
| 117 | - // Si le client a deja une session valide pour son id_auteur |
|
| 118 | - // on conserve le meme fichier |
|
| 119 | - |
|
| 120 | - // Attention un visiteur peut avoir une session et un id=0, |
|
| 121 | - // => ne pas melanger les sessions des differents visiteurs |
|
| 122 | - $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0; |
|
| 123 | - |
|
| 124 | - // Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session) |
|
| 125 | - // on va vérifier s'il y a vraiment des choses à écrire |
|
| 126 | - if (!$id_auteur) { |
|
| 127 | - // On supprime les données de base pour voir le contenu réel de la session |
|
| 128 | - $auteur_verif = $auteur; |
|
| 129 | - if (isset($auteur_verif['id_auteur'])) { |
|
| 130 | - unset($auteur_verif['id_auteur']); |
|
| 131 | - } |
|
| 132 | - if (isset($auteur_verif['hash_env'])) { |
|
| 133 | - unset($auteur_verif['hash_env']); |
|
| 134 | - } |
|
| 135 | - if (isset($auteur_verif['ip_change'])) { |
|
| 136 | - unset($auteur_verif['ip_change']); |
|
| 137 | - } |
|
| 138 | - if (isset($auteur_verif['date_session'])) { |
|
| 139 | - unset($auteur_verif['date_session']); |
|
| 140 | - } |
|
| 141 | - |
|
| 142 | - // Les variables vraiment nulle ne sont pas à prendre en compte non plus |
|
| 143 | - foreach ($auteur_verif as $variable => $valeur) { |
|
| 144 | - if ($valeur === null) { |
|
| 145 | - unset($auteur_verif[$variable]); |
|
| 146 | - } |
|
| 147 | - } |
|
| 148 | - |
|
| 149 | - // Si après ça la session est vide alors on supprime l'éventuel fichier et on arrête là |
|
| 150 | - if (!$auteur_verif) { |
|
| 151 | - if (isset($_COOKIE['spip_session']) and isset($_SESSION[$_COOKIE['spip_session']])) { |
|
| 152 | - unset($_SESSION[$_COOKIE['spip_session']]); |
|
| 153 | - } |
|
| 154 | - if (isset($_COOKIE['spip_session'])) { |
|
| 155 | - unset($_COOKIE['spip_session']); |
|
| 156 | - } |
|
| 157 | - |
|
| 158 | - return false; |
|
| 159 | - } |
|
| 160 | - } |
|
| 161 | - |
|
| 162 | - if (!isset($_COOKIE['spip_session']) |
|
| 163 | - or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session']) |
|
| 164 | - ) { |
|
| 165 | - $_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true)); |
|
| 166 | - } |
|
| 167 | - |
|
| 168 | - // Maintenant on sait qu'on a des choses à écrire |
|
| 169 | - // On s'assure d'avoir au moins ces valeurs |
|
| 170 | - $auteur['id_auteur'] = $id_auteur; |
|
| 171 | - if (!isset($auteur['hash_env'])) { |
|
| 172 | - $auteur['hash_env'] = hash_env(); |
|
| 173 | - } |
|
| 174 | - if (!isset($auteur['ip_change'])) { |
|
| 175 | - $auteur['ip_change'] = false; |
|
| 176 | - } |
|
| 177 | - |
|
| 178 | - if (!isset($auteur['date_session'])) { |
|
| 179 | - $auteur['date_session'] = time(); |
|
| 180 | - } |
|
| 181 | - if (isset($auteur['prefs']) |
|
| 182 | - and is_string($auteur['prefs']) |
|
| 183 | - and $prefs = @unserialize($auteur['prefs'])) { |
|
| 184 | - $auteur['prefs'] = $prefs; |
|
| 185 | - } |
|
| 186 | - |
|
| 187 | - $fichier_session = ""; |
|
| 188 | - |
|
| 189 | - // les sessions anonymes sont stockees dans $_SESSION |
|
| 190 | - if (!$id_auteur) { |
|
| 191 | - spip_php_session_start(); |
|
| 192 | - $_SESSION[$_COOKIE['spip_session']] = preparer_ecriture_session($auteur); |
|
| 193 | - } else { |
|
| 194 | - $fichier_session = fichier_session('alea_ephemere'); |
|
| 195 | - if (!ecrire_fichier_session($fichier_session, $auteur)) { |
|
| 196 | - spip_log('Echec ecriture fichier session ' . $fichier_session, "session" . _LOG_HS); |
|
| 197 | - include_spip('inc/minipres'); |
|
| 198 | - echo minipres(); |
|
| 199 | - exit; |
|
| 200 | - } |
|
| 201 | - // verifier et limiter le nombre maxi de sessions |
|
| 202 | - // https://core.spip.net/issues/3807 |
|
| 203 | - lister_sessions_auteur($id_auteur); |
|
| 204 | - } |
|
| 205 | - |
|
| 206 | - // poser le cookie de session SPIP |
|
| 207 | - include_spip('inc/cookie'); |
|
| 208 | - $duree = definir_duree_cookie_session($auteur); |
|
| 209 | - spip_setcookie( 'spip_session', $_COOKIE['spip_session'], time() + $duree); |
|
| 210 | - spip_log("ajoute session $fichier_session cookie $duree", "session"); |
|
| 211 | - |
|
| 212 | - // Si on est admin, poser le cookie de correspondance |
|
| 213 | - if (!function_exists('autoriser')) { |
|
| 214 | - include_spip('inc/autoriser'); |
|
| 215 | - } |
|
| 216 | - if (autoriser('ecrire','','',$auteur) and _DUREE_COOKIE_ADMIN) { |
|
| 217 | - spip_setcookie('spip_admin', '@' . ($auteur['email'] ?: $auteur['login']), time() + max(_DUREE_COOKIE_ADMIN, $duree)); |
|
| 218 | - } // sinon le supprimer ... |
|
| 219 | - else { |
|
| 220 | - spip_setcookie('spip_admin', '', 1); |
|
| 221 | - } |
|
| 222 | - |
|
| 223 | - # on en profite pour purger les vieilles sessions anonymes abandonnees |
|
| 224 | - # supprimer_sessions(0, true, false); |
|
| 225 | - |
|
| 226 | - return $_COOKIE['spip_session']; |
|
| 117 | + // Si le client a deja une session valide pour son id_auteur |
|
| 118 | + // on conserve le meme fichier |
|
| 119 | + |
|
| 120 | + // Attention un visiteur peut avoir une session et un id=0, |
|
| 121 | + // => ne pas melanger les sessions des differents visiteurs |
|
| 122 | + $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0; |
|
| 123 | + |
|
| 124 | + // Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session) |
|
| 125 | + // on va vérifier s'il y a vraiment des choses à écrire |
|
| 126 | + if (!$id_auteur) { |
|
| 127 | + // On supprime les données de base pour voir le contenu réel de la session |
|
| 128 | + $auteur_verif = $auteur; |
|
| 129 | + if (isset($auteur_verif['id_auteur'])) { |
|
| 130 | + unset($auteur_verif['id_auteur']); |
|
| 131 | + } |
|
| 132 | + if (isset($auteur_verif['hash_env'])) { |
|
| 133 | + unset($auteur_verif['hash_env']); |
|
| 134 | + } |
|
| 135 | + if (isset($auteur_verif['ip_change'])) { |
|
| 136 | + unset($auteur_verif['ip_change']); |
|
| 137 | + } |
|
| 138 | + if (isset($auteur_verif['date_session'])) { |
|
| 139 | + unset($auteur_verif['date_session']); |
|
| 140 | + } |
|
| 141 | + |
|
| 142 | + // Les variables vraiment nulle ne sont pas à prendre en compte non plus |
|
| 143 | + foreach ($auteur_verif as $variable => $valeur) { |
|
| 144 | + if ($valeur === null) { |
|
| 145 | + unset($auteur_verif[$variable]); |
|
| 146 | + } |
|
| 147 | + } |
|
| 148 | + |
|
| 149 | + // Si après ça la session est vide alors on supprime l'éventuel fichier et on arrête là |
|
| 150 | + if (!$auteur_verif) { |
|
| 151 | + if (isset($_COOKIE['spip_session']) and isset($_SESSION[$_COOKIE['spip_session']])) { |
|
| 152 | + unset($_SESSION[$_COOKIE['spip_session']]); |
|
| 153 | + } |
|
| 154 | + if (isset($_COOKIE['spip_session'])) { |
|
| 155 | + unset($_COOKIE['spip_session']); |
|
| 156 | + } |
|
| 157 | + |
|
| 158 | + return false; |
|
| 159 | + } |
|
| 160 | + } |
|
| 161 | + |
|
| 162 | + if (!isset($_COOKIE['spip_session']) |
|
| 163 | + or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session']) |
|
| 164 | + ) { |
|
| 165 | + $_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true)); |
|
| 166 | + } |
|
| 167 | + |
|
| 168 | + // Maintenant on sait qu'on a des choses à écrire |
|
| 169 | + // On s'assure d'avoir au moins ces valeurs |
|
| 170 | + $auteur['id_auteur'] = $id_auteur; |
|
| 171 | + if (!isset($auteur['hash_env'])) { |
|
| 172 | + $auteur['hash_env'] = hash_env(); |
|
| 173 | + } |
|
| 174 | + if (!isset($auteur['ip_change'])) { |
|
| 175 | + $auteur['ip_change'] = false; |
|
| 176 | + } |
|
| 177 | + |
|
| 178 | + if (!isset($auteur['date_session'])) { |
|
| 179 | + $auteur['date_session'] = time(); |
|
| 180 | + } |
|
| 181 | + if (isset($auteur['prefs']) |
|
| 182 | + and is_string($auteur['prefs']) |
|
| 183 | + and $prefs = @unserialize($auteur['prefs'])) { |
|
| 184 | + $auteur['prefs'] = $prefs; |
|
| 185 | + } |
|
| 186 | + |
|
| 187 | + $fichier_session = ""; |
|
| 188 | + |
|
| 189 | + // les sessions anonymes sont stockees dans $_SESSION |
|
| 190 | + if (!$id_auteur) { |
|
| 191 | + spip_php_session_start(); |
|
| 192 | + $_SESSION[$_COOKIE['spip_session']] = preparer_ecriture_session($auteur); |
|
| 193 | + } else { |
|
| 194 | + $fichier_session = fichier_session('alea_ephemere'); |
|
| 195 | + if (!ecrire_fichier_session($fichier_session, $auteur)) { |
|
| 196 | + spip_log('Echec ecriture fichier session ' . $fichier_session, "session" . _LOG_HS); |
|
| 197 | + include_spip('inc/minipres'); |
|
| 198 | + echo minipres(); |
|
| 199 | + exit; |
|
| 200 | + } |
|
| 201 | + // verifier et limiter le nombre maxi de sessions |
|
| 202 | + // https://core.spip.net/issues/3807 |
|
| 203 | + lister_sessions_auteur($id_auteur); |
|
| 204 | + } |
|
| 205 | + |
|
| 206 | + // poser le cookie de session SPIP |
|
| 207 | + include_spip('inc/cookie'); |
|
| 208 | + $duree = definir_duree_cookie_session($auteur); |
|
| 209 | + spip_setcookie( 'spip_session', $_COOKIE['spip_session'], time() + $duree); |
|
| 210 | + spip_log("ajoute session $fichier_session cookie $duree", "session"); |
|
| 211 | + |
|
| 212 | + // Si on est admin, poser le cookie de correspondance |
|
| 213 | + if (!function_exists('autoriser')) { |
|
| 214 | + include_spip('inc/autoriser'); |
|
| 215 | + } |
|
| 216 | + if (autoriser('ecrire','','',$auteur) and _DUREE_COOKIE_ADMIN) { |
|
| 217 | + spip_setcookie('spip_admin', '@' . ($auteur['email'] ?: $auteur['login']), time() + max(_DUREE_COOKIE_ADMIN, $duree)); |
|
| 218 | + } // sinon le supprimer ... |
|
| 219 | + else { |
|
| 220 | + spip_setcookie('spip_admin', '', 1); |
|
| 221 | + } |
|
| 222 | + |
|
| 223 | + # on en profite pour purger les vieilles sessions anonymes abandonnees |
|
| 224 | + # supprimer_sessions(0, true, false); |
|
| 225 | + |
|
| 226 | + return $_COOKIE['spip_session']; |
|
| 227 | 227 | } |
| 228 | 228 | |
| 229 | 229 | /** |
@@ -243,15 +243,15 @@ discard block |
||
| 243 | 243 | * Durée en secondes |
| 244 | 244 | **/ |
| 245 | 245 | function definir_duree_cookie_session($auteur) { |
| 246 | - $coef = 2; |
|
| 247 | - if (isset($auteur['cookie'])) { |
|
| 248 | - if (is_numeric($auteur['cookie'])) { |
|
| 249 | - $coef = $auteur['cookie']; |
|
| 250 | - } else { |
|
| 251 | - $coef = 20; |
|
| 252 | - } |
|
| 253 | - } |
|
| 254 | - return (int)(_RENOUVELLE_ALEA * $coef); |
|
| 246 | + $coef = 2; |
|
| 247 | + if (isset($auteur['cookie'])) { |
|
| 248 | + if (is_numeric($auteur['cookie'])) { |
|
| 249 | + $coef = $auteur['cookie']; |
|
| 250 | + } else { |
|
| 251 | + $coef = 20; |
|
| 252 | + } |
|
| 253 | + } |
|
| 254 | + return (int)(_RENOUVELLE_ALEA * $coef); |
|
| 255 | 255 | } |
| 256 | 256 | |
| 257 | 257 | /** |
@@ -271,90 +271,90 @@ discard block |
||
| 271 | 271 | * @return bool|int|null |
| 272 | 272 | */ |
| 273 | 273 | function verifier_session($change = false) { |
| 274 | - // si pas de cookie, c'est fichu |
|
| 275 | - if (!isset($_COOKIE['spip_session'])) { |
|
| 276 | - return false; |
|
| 277 | - } |
|
| 278 | - |
|
| 279 | - $fichier_session = ""; |
|
| 280 | - |
|
| 281 | - // est-ce une session anonyme ? |
|
| 282 | - if (!intval($_COOKIE['spip_session'])) { |
|
| 283 | - spip_php_session_start(); |
|
| 284 | - if (!isset($_SESSION[$_COOKIE['spip_session']]) or !is_array($_SESSION[$_COOKIE['spip_session']])) { |
|
| 285 | - return false; |
|
| 286 | - } |
|
| 287 | - $GLOBALS['visiteur_session'] = $_SESSION[$_COOKIE['spip_session']]; |
|
| 288 | - } else { |
|
| 289 | - // Tester avec alea courant |
|
| 290 | - $fichier_session = fichier_session('alea_ephemere', true); |
|
| 291 | - if ($fichier_session and @file_exists($fichier_session)) { |
|
| 292 | - include($fichier_session); |
|
| 293 | - } else { |
|
| 294 | - // Sinon, tester avec alea precedent |
|
| 295 | - $fichier_session = fichier_session('alea_ephemere_ancien', true); |
|
| 296 | - if (!$fichier_session or !@file_exists($fichier_session)) { |
|
| 297 | - return false; |
|
| 298 | - } |
|
| 299 | - |
|
| 300 | - // Renouveler la session avec l'alea courant |
|
| 301 | - include($fichier_session); |
|
| 302 | - spip_log('renouvelle session ' . $GLOBALS['visiteur_session']['id_auteur'], "session"); |
|
| 303 | - spip_unlink($fichier_session); |
|
| 304 | - ajouter_session($GLOBALS['visiteur_session']); |
|
| 305 | - } |
|
| 306 | - } |
|
| 307 | - |
|
| 308 | - // Compatibilite ascendante : auteur_session est visiteur_session si |
|
| 309 | - // c'est un auteur SPIP authentifie (tandis qu'un visiteur_session peut |
|
| 310 | - // n'etre qu'identifie, sans aucune authentification). |
|
| 311 | - |
|
| 312 | - if (isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur']) { |
|
| 313 | - $GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session']; |
|
| 314 | - } |
|
| 315 | - |
|
| 316 | - |
|
| 317 | - // Si l'adresse IP change, inc/presentation mettra une balise image |
|
| 318 | - // avec un URL de rappel demandant a changer le nom de la session. |
|
| 319 | - // Seul celui qui a l'IP d'origine est rejoue |
|
| 320 | - // ainsi un eventuel voleur de cookie ne pourrait pas deconnecter |
|
| 321 | - // sa victime, mais se ferait deconnecter par elle. |
|
| 322 | - if (hash_env() != $GLOBALS['visiteur_session']['hash_env']) { |
|
| 323 | - if (!$GLOBALS['visiteur_session']['ip_change']) { |
|
| 324 | - define('_SESSION_REJOUER', true); |
|
| 325 | - $GLOBALS['visiteur_session']['ip_change'] = true; |
|
| 326 | - ajouter_session($GLOBALS['visiteur_session']); |
|
| 327 | - } else { |
|
| 328 | - if ($change) { |
|
| 329 | - spip_log("session non rejouee, vol de cookie ?", "session"); |
|
| 330 | - } |
|
| 331 | - } |
|
| 332 | - } else { |
|
| 333 | - if ($change) { |
|
| 334 | - spip_log("rejoue session $fichier_session " . $_COOKIE['spip_session'], "session"); |
|
| 335 | - if ($fichier_session) { |
|
| 336 | - spip_unlink($fichier_session); |
|
| 337 | - } |
|
| 338 | - $GLOBALS['visiteur_session']['ip_change'] = false; |
|
| 339 | - unset($_COOKIE['spip_session']); |
|
| 340 | - ajouter_session($GLOBALS['visiteur_session']); |
|
| 341 | - } |
|
| 342 | - } |
|
| 343 | - |
|
| 344 | - // Si la session a ete initiee il y a trop longtemps, elle est annulee |
|
| 345 | - if (isset($GLOBALS['visiteur_session']) |
|
| 346 | - and defined('_AGE_SESSION_MAX') |
|
| 347 | - and _AGE_SESSION_MAX > 0 |
|
| 348 | - and time() - @$GLOBALS['visiteur_session']['date_session'] > _AGE_SESSION_MAX |
|
| 349 | - ) { |
|
| 350 | - unset($GLOBALS['visiteur_session']); |
|
| 351 | - |
|
| 352 | - return false; |
|
| 353 | - } |
|
| 354 | - |
|
| 355 | - return is_numeric($GLOBALS['visiteur_session']['id_auteur']) |
|
| 356 | - ? $GLOBALS['visiteur_session']['id_auteur'] |
|
| 357 | - : null; |
|
| 274 | + // si pas de cookie, c'est fichu |
|
| 275 | + if (!isset($_COOKIE['spip_session'])) { |
|
| 276 | + return false; |
|
| 277 | + } |
|
| 278 | + |
|
| 279 | + $fichier_session = ""; |
|
| 280 | + |
|
| 281 | + // est-ce une session anonyme ? |
|
| 282 | + if (!intval($_COOKIE['spip_session'])) { |
|
| 283 | + spip_php_session_start(); |
|
| 284 | + if (!isset($_SESSION[$_COOKIE['spip_session']]) or !is_array($_SESSION[$_COOKIE['spip_session']])) { |
|
| 285 | + return false; |
|
| 286 | + } |
|
| 287 | + $GLOBALS['visiteur_session'] = $_SESSION[$_COOKIE['spip_session']]; |
|
| 288 | + } else { |
|
| 289 | + // Tester avec alea courant |
|
| 290 | + $fichier_session = fichier_session('alea_ephemere', true); |
|
| 291 | + if ($fichier_session and @file_exists($fichier_session)) { |
|
| 292 | + include($fichier_session); |
|
| 293 | + } else { |
|
| 294 | + // Sinon, tester avec alea precedent |
|
| 295 | + $fichier_session = fichier_session('alea_ephemere_ancien', true); |
|
| 296 | + if (!$fichier_session or !@file_exists($fichier_session)) { |
|
| 297 | + return false; |
|
| 298 | + } |
|
| 299 | + |
|
| 300 | + // Renouveler la session avec l'alea courant |
|
| 301 | + include($fichier_session); |
|
| 302 | + spip_log('renouvelle session ' . $GLOBALS['visiteur_session']['id_auteur'], "session"); |
|
| 303 | + spip_unlink($fichier_session); |
|
| 304 | + ajouter_session($GLOBALS['visiteur_session']); |
|
| 305 | + } |
|
| 306 | + } |
|
| 307 | + |
|
| 308 | + // Compatibilite ascendante : auteur_session est visiteur_session si |
|
| 309 | + // c'est un auteur SPIP authentifie (tandis qu'un visiteur_session peut |
|
| 310 | + // n'etre qu'identifie, sans aucune authentification). |
|
| 311 | + |
|
| 312 | + if (isset($GLOBALS['visiteur_session']['id_auteur']) and $GLOBALS['visiteur_session']['id_auteur']) { |
|
| 313 | + $GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session']; |
|
| 314 | + } |
|
| 315 | + |
|
| 316 | + |
|
| 317 | + // Si l'adresse IP change, inc/presentation mettra une balise image |
|
| 318 | + // avec un URL de rappel demandant a changer le nom de la session. |
|
| 319 | + // Seul celui qui a l'IP d'origine est rejoue |
|
| 320 | + // ainsi un eventuel voleur de cookie ne pourrait pas deconnecter |
|
| 321 | + // sa victime, mais se ferait deconnecter par elle. |
|
| 322 | + if (hash_env() != $GLOBALS['visiteur_session']['hash_env']) { |
|
| 323 | + if (!$GLOBALS['visiteur_session']['ip_change']) { |
|
| 324 | + define('_SESSION_REJOUER', true); |
|
| 325 | + $GLOBALS['visiteur_session']['ip_change'] = true; |
|
| 326 | + ajouter_session($GLOBALS['visiteur_session']); |
|
| 327 | + } else { |
|
| 328 | + if ($change) { |
|
| 329 | + spip_log("session non rejouee, vol de cookie ?", "session"); |
|
| 330 | + } |
|
| 331 | + } |
|
| 332 | + } else { |
|
| 333 | + if ($change) { |
|
| 334 | + spip_log("rejoue session $fichier_session " . $_COOKIE['spip_session'], "session"); |
|
| 335 | + if ($fichier_session) { |
|
| 336 | + spip_unlink($fichier_session); |
|
| 337 | + } |
|
| 338 | + $GLOBALS['visiteur_session']['ip_change'] = false; |
|
| 339 | + unset($_COOKIE['spip_session']); |
|
| 340 | + ajouter_session($GLOBALS['visiteur_session']); |
|
| 341 | + } |
|
| 342 | + } |
|
| 343 | + |
|
| 344 | + // Si la session a ete initiee il y a trop longtemps, elle est annulee |
|
| 345 | + if (isset($GLOBALS['visiteur_session']) |
|
| 346 | + and defined('_AGE_SESSION_MAX') |
|
| 347 | + and _AGE_SESSION_MAX > 0 |
|
| 348 | + and time() - @$GLOBALS['visiteur_session']['date_session'] > _AGE_SESSION_MAX |
|
| 349 | + ) { |
|
| 350 | + unset($GLOBALS['visiteur_session']); |
|
| 351 | + |
|
| 352 | + return false; |
|
| 353 | + } |
|
| 354 | + |
|
| 355 | + return is_numeric($GLOBALS['visiteur_session']['id_auteur']) |
|
| 356 | + ? $GLOBALS['visiteur_session']['id_auteur'] |
|
| 357 | + : null; |
|
| 358 | 358 | } |
| 359 | 359 | |
| 360 | 360 | /** |
@@ -369,7 +369,7 @@ discard block |
||
| 369 | 369 | * Valeur, si trouvée, `null` sinon. |
| 370 | 370 | */ |
| 371 | 371 | function session_get($nom) { |
| 372 | - return isset($GLOBALS['visiteur_session'][$nom]) ? $GLOBALS['visiteur_session'][$nom] : null; |
|
| 372 | + return isset($GLOBALS['visiteur_session'][$nom]) ? $GLOBALS['visiteur_session'][$nom] : null; |
|
| 373 | 373 | } |
| 374 | 374 | |
| 375 | 375 | |
@@ -385,32 +385,32 @@ discard block |
||
| 385 | 385 | * @return void|array |
| 386 | 386 | */ |
| 387 | 387 | function session_set($nom, $val = null) { |
| 388 | - static $remove = array(); |
|
| 389 | - static $actualiser_sessions = false; |
|
| 390 | - if ($nom === false) { |
|
| 391 | - return $remove; |
|
| 392 | - } |
|
| 393 | - if (is_null($val)) { |
|
| 394 | - // rien a faire |
|
| 395 | - if (!isset($GLOBALS['visiteur_session'][$nom])) { |
|
| 396 | - return; |
|
| 397 | - } |
|
| 398 | - unset($GLOBALS['visiteur_session'][$nom]); |
|
| 399 | - $remove[] = $nom; |
|
| 400 | - } else { |
|
| 401 | - // On ajoute la valeur dans la globale |
|
| 402 | - $GLOBALS['visiteur_session'][$nom] = $val; |
|
| 403 | - if ($remove) { |
|
| 404 | - $remove = array_diff($remove, array($nom)); |
|
| 405 | - } |
|
| 406 | - } |
|
| 407 | - if (!$actualiser_sessions) { |
|
| 408 | - // il faut creer la session si on en a pas, la premiere fois |
|
| 409 | - ajouter_session($GLOBALS['visiteur_session']); |
|
| 410 | - // in register la fonction qui mettra a jour toutes les sessions en fin de hit |
|
| 411 | - register_shutdown_function('terminer_actualiser_sessions'); |
|
| 412 | - $actualiser_sessions = true; |
|
| 413 | - } |
|
| 388 | + static $remove = array(); |
|
| 389 | + static $actualiser_sessions = false; |
|
| 390 | + if ($nom === false) { |
|
| 391 | + return $remove; |
|
| 392 | + } |
|
| 393 | + if (is_null($val)) { |
|
| 394 | + // rien a faire |
|
| 395 | + if (!isset($GLOBALS['visiteur_session'][$nom])) { |
|
| 396 | + return; |
|
| 397 | + } |
|
| 398 | + unset($GLOBALS['visiteur_session'][$nom]); |
|
| 399 | + $remove[] = $nom; |
|
| 400 | + } else { |
|
| 401 | + // On ajoute la valeur dans la globale |
|
| 402 | + $GLOBALS['visiteur_session'][$nom] = $val; |
|
| 403 | + if ($remove) { |
|
| 404 | + $remove = array_diff($remove, array($nom)); |
|
| 405 | + } |
|
| 406 | + } |
|
| 407 | + if (!$actualiser_sessions) { |
|
| 408 | + // il faut creer la session si on en a pas, la premiere fois |
|
| 409 | + ajouter_session($GLOBALS['visiteur_session']); |
|
| 410 | + // in register la fonction qui mettra a jour toutes les sessions en fin de hit |
|
| 411 | + register_shutdown_function('terminer_actualiser_sessions'); |
|
| 412 | + $actualiser_sessions = true; |
|
| 413 | + } |
|
| 414 | 414 | } |
| 415 | 415 | |
| 416 | 416 | /** |
@@ -419,12 +419,12 @@ discard block |
||
| 419 | 419 | * @uses actualiser_sessions() |
| 420 | 420 | */ |
| 421 | 421 | function terminer_actualiser_sessions() { |
| 422 | - // se remettre dans le dossier de travail au cas ou Apache a change |
|
| 423 | - chdir(_ROOT_CWD); |
|
| 424 | - // recuperer les variables a effacer |
|
| 425 | - $remove = session_set(false); |
|
| 426 | - // mettre a jour toutes les sessions |
|
| 427 | - actualiser_sessions($GLOBALS['visiteur_session'], $remove); |
|
| 422 | + // se remettre dans le dossier de travail au cas ou Apache a change |
|
| 423 | + chdir(_ROOT_CWD); |
|
| 424 | + // recuperer les variables a effacer |
|
| 425 | + $remove = session_set(false); |
|
| 426 | + // mettre a jour toutes les sessions |
|
| 427 | + actualiser_sessions($GLOBALS['visiteur_session'], $remove); |
|
| 428 | 428 | } |
| 429 | 429 | |
| 430 | 430 | |
@@ -449,78 +449,78 @@ discard block |
||
| 449 | 449 | */ |
| 450 | 450 | function actualiser_sessions($auteur, $supprimer_cles = array()) { |
| 451 | 451 | |
| 452 | - $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0; |
|
| 453 | - $id_auteur_courant = isset($GLOBALS['visiteur_session']['id_auteur']) ? intval($GLOBALS['visiteur_session']['id_auteur']) : 0; |
|
| 454 | - |
|
| 455 | - // si l'auteur est celui de la session courante, verifier/creer la session si besoin |
|
| 456 | - $fichier_session_courante = ""; |
|
| 457 | - if ($id_auteur == $id_auteur_courant) { |
|
| 458 | - $auteur = array_merge($GLOBALS['visiteur_session'], $auteur); |
|
| 459 | - ajouter_session($auteur); |
|
| 460 | - if ($id_auteur) { |
|
| 461 | - $fichier_session_courante = fichier_session('alea_ephemere'); |
|
| 462 | - } |
|
| 463 | - } |
|
| 464 | - |
|
| 465 | - // si session anonyme on ne fait rien d'autre ici : les sessions anonymes sont non partagees |
|
| 466 | - if (!$id_auteur) { |
|
| 467 | - return; |
|
| 468 | - } |
|
| 469 | - |
|
| 470 | - // les préférences sont désérialisées, toujours. |
|
| 471 | - if (isset($auteur['prefs']) and is_string($auteur['prefs'])) { |
|
| 472 | - $auteur['prefs'] = unserialize($auteur['prefs']); |
|
| 473 | - } |
|
| 474 | - |
|
| 475 | - // memoriser l'auteur courant (celui qui modifie la fiche) |
|
| 476 | - $sauve = $GLOBALS['visiteur_session']; |
|
| 477 | - |
|
| 478 | - // .. mettre a jour les sessions de l'auteur cible |
|
| 479 | - // attention au $ final pour ne pas risquer d'embarquer un .php.jeton temporaire |
|
| 480 | - // cree par une ecriture concurente d'une session (fichier atomique temporaire) |
|
| 481 | - $sessions = lister_sessions_auteur($id_auteur); |
|
| 482 | - |
|
| 483 | - // 1ere passe : lire et fusionner les sessions |
|
| 484 | - foreach ($sessions as $session) { |
|
| 485 | - $GLOBALS['visiteur_session'] = array(); |
|
| 486 | - // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence) |
|
| 487 | - if ($session !== $fichier_session_courante |
|
| 488 | - and @file_exists($session) |
|
| 489 | - ) { |
|
| 490 | - include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible |
|
| 491 | - |
|
| 492 | - $auteur = array_merge($GLOBALS['visiteur_session'], $auteur); |
|
| 493 | - } |
|
| 494 | - } |
|
| 495 | - |
|
| 496 | - // supprimer les eventuelles cles dont on ne veut plus |
|
| 497 | - foreach ($supprimer_cles as $cle) { |
|
| 498 | - unset($auteur[$cle]); |
|
| 499 | - } |
|
| 500 | - |
|
| 501 | - $auteur_session = preparer_ecriture_session($auteur); |
|
| 502 | - |
|
| 503 | - // seconde passe : ecrire les sessions qui ne sont pas a jour |
|
| 504 | - foreach ($sessions as $session) { |
|
| 505 | - $GLOBALS['visiteur_session'] = array(); |
|
| 506 | - // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence) |
|
| 507 | - if (@file_exists($session)) { |
|
| 508 | - include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible |
|
| 509 | - |
|
| 510 | - // est-ce que cette session est a mettre a jour ? |
|
| 511 | - if ($auteur_session != $GLOBALS['visiteur_session']) { |
|
| 512 | - ecrire_fichier_session($session, $auteur); |
|
| 513 | - } |
|
| 514 | - } |
|
| 515 | - } |
|
| 516 | - |
|
| 517 | - if ($id_auteur == $id_auteur_courant) { |
|
| 518 | - $GLOBALS['visiteur_session'] = $auteur; |
|
| 519 | - $GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session']; |
|
| 520 | - } else { |
|
| 521 | - // restaurer l'auteur courant |
|
| 522 | - $GLOBALS['visiteur_session'] = $sauve; |
|
| 523 | - } |
|
| 452 | + $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0; |
|
| 453 | + $id_auteur_courant = isset($GLOBALS['visiteur_session']['id_auteur']) ? intval($GLOBALS['visiteur_session']['id_auteur']) : 0; |
|
| 454 | + |
|
| 455 | + // si l'auteur est celui de la session courante, verifier/creer la session si besoin |
|
| 456 | + $fichier_session_courante = ""; |
|
| 457 | + if ($id_auteur == $id_auteur_courant) { |
|
| 458 | + $auteur = array_merge($GLOBALS['visiteur_session'], $auteur); |
|
| 459 | + ajouter_session($auteur); |
|
| 460 | + if ($id_auteur) { |
|
| 461 | + $fichier_session_courante = fichier_session('alea_ephemere'); |
|
| 462 | + } |
|
| 463 | + } |
|
| 464 | + |
|
| 465 | + // si session anonyme on ne fait rien d'autre ici : les sessions anonymes sont non partagees |
|
| 466 | + if (!$id_auteur) { |
|
| 467 | + return; |
|
| 468 | + } |
|
| 469 | + |
|
| 470 | + // les préférences sont désérialisées, toujours. |
|
| 471 | + if (isset($auteur['prefs']) and is_string($auteur['prefs'])) { |
|
| 472 | + $auteur['prefs'] = unserialize($auteur['prefs']); |
|
| 473 | + } |
|
| 474 | + |
|
| 475 | + // memoriser l'auteur courant (celui qui modifie la fiche) |
|
| 476 | + $sauve = $GLOBALS['visiteur_session']; |
|
| 477 | + |
|
| 478 | + // .. mettre a jour les sessions de l'auteur cible |
|
| 479 | + // attention au $ final pour ne pas risquer d'embarquer un .php.jeton temporaire |
|
| 480 | + // cree par une ecriture concurente d'une session (fichier atomique temporaire) |
|
| 481 | + $sessions = lister_sessions_auteur($id_auteur); |
|
| 482 | + |
|
| 483 | + // 1ere passe : lire et fusionner les sessions |
|
| 484 | + foreach ($sessions as $session) { |
|
| 485 | + $GLOBALS['visiteur_session'] = array(); |
|
| 486 | + // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence) |
|
| 487 | + if ($session !== $fichier_session_courante |
|
| 488 | + and @file_exists($session) |
|
| 489 | + ) { |
|
| 490 | + include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible |
|
| 491 | + |
|
| 492 | + $auteur = array_merge($GLOBALS['visiteur_session'], $auteur); |
|
| 493 | + } |
|
| 494 | + } |
|
| 495 | + |
|
| 496 | + // supprimer les eventuelles cles dont on ne veut plus |
|
| 497 | + foreach ($supprimer_cles as $cle) { |
|
| 498 | + unset($auteur[$cle]); |
|
| 499 | + } |
|
| 500 | + |
|
| 501 | + $auteur_session = preparer_ecriture_session($auteur); |
|
| 502 | + |
|
| 503 | + // seconde passe : ecrire les sessions qui ne sont pas a jour |
|
| 504 | + foreach ($sessions as $session) { |
|
| 505 | + $GLOBALS['visiteur_session'] = array(); |
|
| 506 | + // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence) |
|
| 507 | + if (@file_exists($session)) { |
|
| 508 | + include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible |
|
| 509 | + |
|
| 510 | + // est-ce que cette session est a mettre a jour ? |
|
| 511 | + if ($auteur_session != $GLOBALS['visiteur_session']) { |
|
| 512 | + ecrire_fichier_session($session, $auteur); |
|
| 513 | + } |
|
| 514 | + } |
|
| 515 | + } |
|
| 516 | + |
|
| 517 | + if ($id_auteur == $id_auteur_courant) { |
|
| 518 | + $GLOBALS['visiteur_session'] = $auteur; |
|
| 519 | + $GLOBALS['auteur_session'] = &$GLOBALS['visiteur_session']; |
|
| 520 | + } else { |
|
| 521 | + // restaurer l'auteur courant |
|
| 522 | + $GLOBALS['visiteur_session'] = $sauve; |
|
| 523 | + } |
|
| 524 | 524 | |
| 525 | 525 | } |
| 526 | 526 | |
@@ -535,46 +535,46 @@ discard block |
||
| 535 | 535 | */ |
| 536 | 536 | function lister_sessions_auteur($id_auteur, $nb_max = null) { |
| 537 | 537 | |
| 538 | - if (is_null($nb_max)) { |
|
| 539 | - if (!defined('_NB_SESSIONS_MAX')) { |
|
| 540 | - define('_NB_SESSIONS_MAX', 100); |
|
| 541 | - } |
|
| 542 | - $nb_max = _NB_SESSIONS_MAX; |
|
| 543 | - } |
|
| 544 | - |
|
| 545 | - // liste des sessions |
|
| 546 | - $sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\.php$'); |
|
| 547 | - |
|
| 548 | - // si on en a plus que la limite, supprimer les plus vieilles |
|
| 549 | - // si ce ne sont pas des sessions anonymes car elles sont alors chacune differentes |
|
| 550 | - if ($id_auteur |
|
| 551 | - and count($sessions) > $nb_max) { |
|
| 552 | - |
|
| 553 | - // limiter le nombre de sessions ouvertes par un auteur |
|
| 554 | - // filemtime sur les sessions |
|
| 555 | - $sessions = array_flip($sessions); |
|
| 556 | - |
|
| 557 | - // 1ere passe : lire les filemtime |
|
| 558 | - foreach ($sessions as $session => $z) { |
|
| 559 | - if ($d = @filemtime($session) |
|
| 560 | - ) { |
|
| 561 | - $sessions[$session] = $d; |
|
| 562 | - } else { |
|
| 563 | - $sessions[$session] = 0; |
|
| 564 | - } |
|
| 565 | - } |
|
| 566 | - |
|
| 567 | - // les plus anciennes en premier |
|
| 568 | - asort($sessions); |
|
| 569 | - |
|
| 570 | - $sessions = array_keys($sessions); |
|
| 571 | - while (count($sessions) > $nb_max) { |
|
| 572 | - $session = array_shift($sessions); |
|
| 573 | - @unlink($session); |
|
| 574 | - } |
|
| 575 | - } |
|
| 576 | - |
|
| 577 | - return $sessions; |
|
| 538 | + if (is_null($nb_max)) { |
|
| 539 | + if (!defined('_NB_SESSIONS_MAX')) { |
|
| 540 | + define('_NB_SESSIONS_MAX', 100); |
|
| 541 | + } |
|
| 542 | + $nb_max = _NB_SESSIONS_MAX; |
|
| 543 | + } |
|
| 544 | + |
|
| 545 | + // liste des sessions |
|
| 546 | + $sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\.php$'); |
|
| 547 | + |
|
| 548 | + // si on en a plus que la limite, supprimer les plus vieilles |
|
| 549 | + // si ce ne sont pas des sessions anonymes car elles sont alors chacune differentes |
|
| 550 | + if ($id_auteur |
|
| 551 | + and count($sessions) > $nb_max) { |
|
| 552 | + |
|
| 553 | + // limiter le nombre de sessions ouvertes par un auteur |
|
| 554 | + // filemtime sur les sessions |
|
| 555 | + $sessions = array_flip($sessions); |
|
| 556 | + |
|
| 557 | + // 1ere passe : lire les filemtime |
|
| 558 | + foreach ($sessions as $session => $z) { |
|
| 559 | + if ($d = @filemtime($session) |
|
| 560 | + ) { |
|
| 561 | + $sessions[$session] = $d; |
|
| 562 | + } else { |
|
| 563 | + $sessions[$session] = 0; |
|
| 564 | + } |
|
| 565 | + } |
|
| 566 | + |
|
| 567 | + // les plus anciennes en premier |
|
| 568 | + asort($sessions); |
|
| 569 | + |
|
| 570 | + $sessions = array_keys($sessions); |
|
| 571 | + while (count($sessions) > $nb_max) { |
|
| 572 | + $session = array_shift($sessions); |
|
| 573 | + @unlink($session); |
|
| 574 | + } |
|
| 575 | + } |
|
| 576 | + |
|
| 577 | + return $sessions; |
|
| 578 | 578 | } |
| 579 | 579 | |
| 580 | 580 | |
@@ -588,26 +588,26 @@ discard block |
||
| 588 | 588 | * @return array |
| 589 | 589 | */ |
| 590 | 590 | function preparer_ecriture_session($auteur) { |
| 591 | - $row = $auteur; |
|
| 592 | - |
|
| 593 | - // ne pas enregistrer ces elements de securite |
|
| 594 | - // dans le fichier de session |
|
| 595 | - unset($auteur['pass']); |
|
| 596 | - unset($auteur['htpass']); |
|
| 597 | - unset($auteur['low_sec']); |
|
| 598 | - unset($auteur['alea_actuel']); |
|
| 599 | - unset($auteur['alea_futur']); |
|
| 600 | - |
|
| 601 | - $auteur = pipeline('preparer_fichier_session', array('args' => array('row' => $row), 'data' => $auteur)); |
|
| 602 | - |
|
| 603 | - // ne pas enregistrer les valeurs vraiment nulle dans le fichier |
|
| 604 | - foreach ($auteur as $variable => $valeur) { |
|
| 605 | - if ($valeur === null) { |
|
| 606 | - unset($auteur[$variable]); |
|
| 607 | - } |
|
| 608 | - } |
|
| 609 | - |
|
| 610 | - return $auteur; |
|
| 591 | + $row = $auteur; |
|
| 592 | + |
|
| 593 | + // ne pas enregistrer ces elements de securite |
|
| 594 | + // dans le fichier de session |
|
| 595 | + unset($auteur['pass']); |
|
| 596 | + unset($auteur['htpass']); |
|
| 597 | + unset($auteur['low_sec']); |
|
| 598 | + unset($auteur['alea_actuel']); |
|
| 599 | + unset($auteur['alea_futur']); |
|
| 600 | + |
|
| 601 | + $auteur = pipeline('preparer_fichier_session', array('args' => array('row' => $row), 'data' => $auteur)); |
|
| 602 | + |
|
| 603 | + // ne pas enregistrer les valeurs vraiment nulle dans le fichier |
|
| 604 | + foreach ($auteur as $variable => $valeur) { |
|
| 605 | + if ($valeur === null) { |
|
| 606 | + unset($auteur[$variable]); |
|
| 607 | + } |
|
| 608 | + } |
|
| 609 | + |
|
| 610 | + return $auteur; |
|
| 611 | 611 | } |
| 612 | 612 | |
| 613 | 613 | /** |
@@ -619,17 +619,17 @@ discard block |
||
| 619 | 619 | */ |
| 620 | 620 | function ecrire_fichier_session($fichier, $auteur) { |
| 621 | 621 | |
| 622 | - $auteur = preparer_ecriture_session($auteur); |
|
| 622 | + $auteur = preparer_ecriture_session($auteur); |
|
| 623 | 623 | |
| 624 | - // enregistrer les autres donnees du visiteur |
|
| 625 | - $texte = "<" . "?php\n"; |
|
| 626 | - foreach ($auteur as $var => $val) { |
|
| 627 | - $texte .= '$GLOBALS[\'visiteur_session\'][' . var_export($var, true) . '] = ' |
|
| 628 | - . var_export($val, true) . ";\n"; |
|
| 629 | - } |
|
| 630 | - $texte .= "?" . ">\n"; |
|
| 624 | + // enregistrer les autres donnees du visiteur |
|
| 625 | + $texte = "<" . "?php\n"; |
|
| 626 | + foreach ($auteur as $var => $val) { |
|
| 627 | + $texte .= '$GLOBALS[\'visiteur_session\'][' . var_export($var, true) . '] = ' |
|
| 628 | + . var_export($val, true) . ";\n"; |
|
| 629 | + } |
|
| 630 | + $texte .= "?" . ">\n"; |
|
| 631 | 631 | |
| 632 | - return ecrire_fichier($fichier, $texte); |
|
| 632 | + return ecrire_fichier($fichier, $texte); |
|
| 633 | 633 | } |
| 634 | 634 | |
| 635 | 635 | |
@@ -642,23 +642,23 @@ discard block |
||
| 642 | 642 | */ |
| 643 | 643 | function fichier_session($alea, $tantpis = false) { |
| 644 | 644 | |
| 645 | - include_spip('inc/acces'); |
|
| 646 | - charger_aleas(); |
|
| 645 | + include_spip('inc/acces'); |
|
| 646 | + charger_aleas(); |
|
| 647 | 647 | |
| 648 | - if (empty($GLOBALS['meta'][$alea])) { |
|
| 649 | - if (!$tantpis) { |
|
| 650 | - spip_log("fichier session ($tantpis): $alea indisponible", "session"); |
|
| 651 | - include_spip('inc/minipres'); |
|
| 652 | - echo minipres(); |
|
| 653 | - } |
|
| 648 | + if (empty($GLOBALS['meta'][$alea])) { |
|
| 649 | + if (!$tantpis) { |
|
| 650 | + spip_log("fichier session ($tantpis): $alea indisponible", "session"); |
|
| 651 | + include_spip('inc/minipres'); |
|
| 652 | + echo minipres(); |
|
| 653 | + } |
|
| 654 | 654 | |
| 655 | - return ''; // echec mais $tanpis |
|
| 656 | - } else { |
|
| 657 | - $repertoire = sous_repertoire(_DIR_SESSIONS, '', false, $tantpis); |
|
| 658 | - $c = $_COOKIE['spip_session']; |
|
| 655 | + return ''; // echec mais $tanpis |
|
| 656 | + } else { |
|
| 657 | + $repertoire = sous_repertoire(_DIR_SESSIONS, '', false, $tantpis); |
|
| 658 | + $c = $_COOKIE['spip_session']; |
|
| 659 | 659 | |
| 660 | - return $repertoire . intval($c) . '_' . md5($c . ' ' . $GLOBALS['meta'][$alea]) . '.php'; |
|
| 661 | - } |
|
| 660 | + return $repertoire . intval($c) . '_' . md5($c . ' ' . $GLOBALS['meta'][$alea]) . '.php'; |
|
| 661 | + } |
|
| 662 | 662 | } |
| 663 | 663 | |
| 664 | 664 | |
@@ -675,7 +675,7 @@ discard block |
||
| 675 | 675 | * @return string |
| 676 | 676 | */ |
| 677 | 677 | function rejouer_session() { |
| 678 | - return '<img src="' . generer_url_action('cookie', 'change_session=oui', true) . '" width="0" height="0" alt="" />'; |
|
| 678 | + return '<img src="' . generer_url_action('cookie', 'change_session=oui', true) . '" width="0" height="0" alt="" />'; |
|
| 679 | 679 | } |
| 680 | 680 | |
| 681 | 681 | |
@@ -685,12 +685,12 @@ discard block |
||
| 685 | 685 | * @return string |
| 686 | 686 | */ |
| 687 | 687 | function hash_env() { |
| 688 | - static $res = ''; |
|
| 689 | - if ($res) { |
|
| 690 | - return $res; |
|
| 691 | - } |
|
| 688 | + static $res = ''; |
|
| 689 | + if ($res) { |
|
| 690 | + return $res; |
|
| 691 | + } |
|
| 692 | 692 | |
| 693 | - return $res = md5($GLOBALS['ip'] . (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '')); |
|
| 693 | + return $res = md5($GLOBALS['ip'] . (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '')); |
|
| 694 | 694 | } |
| 695 | 695 | |
| 696 | 696 | |
@@ -702,11 +702,11 @@ discard block |
||
| 702 | 702 | * @return bool True si une session PHP est ouverte. |
| 703 | 703 | **/ |
| 704 | 704 | function spip_php_session_start() { |
| 705 | - if (!is_php_session_started()) { |
|
| 706 | - return session_start(); |
|
| 707 | - } |
|
| 705 | + if (!is_php_session_started()) { |
|
| 706 | + return session_start(); |
|
| 707 | + } |
|
| 708 | 708 | |
| 709 | - return true; |
|
| 709 | + return true; |
|
| 710 | 710 | } |
| 711 | 711 | |
| 712 | 712 | /** |
@@ -716,9 +716,9 @@ discard block |
||
| 716 | 716 | * @return bool true si une session PHP est active |
| 717 | 717 | **/ |
| 718 | 718 | function is_php_session_started() { |
| 719 | - if (php_sapi_name() !== 'cli') { |
|
| 720 | - return session_status() === PHP_SESSION_ACTIVE ? true : false; |
|
| 721 | - } |
|
| 719 | + if (php_sapi_name() !== 'cli') { |
|
| 720 | + return session_status() === PHP_SESSION_ACTIVE ? true : false; |
|
| 721 | + } |
|
| 722 | 722 | |
| 723 | - return false; |
|
| 723 | + return false; |
|
| 724 | 724 | } |
@@ -83,7 +83,7 @@ discard block |
||
| 83 | 83 | $t = time() - (4 * _RENOUVELLE_ALEA); |
| 84 | 84 | while (($f = readdir($dir)) !== false) { |
| 85 | 85 | if (preg_match(",^[^\d-]*(-?\d+)_\w{32}\.php[3]?$,", $f, $regs)) { |
| 86 | - $f = _DIR_SESSIONS . $f; |
|
| 86 | + $f = _DIR_SESSIONS.$f; |
|
| 87 | 87 | if (($actives and $regs[1] == $id_auteur) or ($t > filemtime($f))) { |
| 88 | 88 | spip_unlink($f); |
| 89 | 89 | } |
@@ -160,9 +160,9 @@ discard block |
||
| 160 | 160 | } |
| 161 | 161 | |
| 162 | 162 | if (!isset($_COOKIE['spip_session']) |
| 163 | - or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session']) |
|
| 163 | + or !preg_match(',^'.$id_auteur.'_,', $_COOKIE['spip_session']) |
|
| 164 | 164 | ) { |
| 165 | - $_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true)); |
|
| 165 | + $_COOKIE['spip_session'] = $id_auteur.'_'.md5(uniqid(rand(), true)); |
|
| 166 | 166 | } |
| 167 | 167 | |
| 168 | 168 | // Maintenant on sait qu'on a des choses à écrire |
@@ -193,7 +193,7 @@ discard block |
||
| 193 | 193 | } else { |
| 194 | 194 | $fichier_session = fichier_session('alea_ephemere'); |
| 195 | 195 | if (!ecrire_fichier_session($fichier_session, $auteur)) { |
| 196 | - spip_log('Echec ecriture fichier session ' . $fichier_session, "session" . _LOG_HS); |
|
| 196 | + spip_log('Echec ecriture fichier session '.$fichier_session, "session"._LOG_HS); |
|
| 197 | 197 | include_spip('inc/minipres'); |
| 198 | 198 | echo minipres(); |
| 199 | 199 | exit; |
@@ -206,15 +206,15 @@ discard block |
||
| 206 | 206 | // poser le cookie de session SPIP |
| 207 | 207 | include_spip('inc/cookie'); |
| 208 | 208 | $duree = definir_duree_cookie_session($auteur); |
| 209 | - spip_setcookie( 'spip_session', $_COOKIE['spip_session'], time() + $duree); |
|
| 209 | + spip_setcookie('spip_session', $_COOKIE['spip_session'], time() + $duree); |
|
| 210 | 210 | spip_log("ajoute session $fichier_session cookie $duree", "session"); |
| 211 | 211 | |
| 212 | 212 | // Si on est admin, poser le cookie de correspondance |
| 213 | 213 | if (!function_exists('autoriser')) { |
| 214 | 214 | include_spip('inc/autoriser'); |
| 215 | 215 | } |
| 216 | - if (autoriser('ecrire','','',$auteur) and _DUREE_COOKIE_ADMIN) { |
|
| 217 | - spip_setcookie('spip_admin', '@' . ($auteur['email'] ?: $auteur['login']), time() + max(_DUREE_COOKIE_ADMIN, $duree)); |
|
| 216 | + if (autoriser('ecrire', '', '', $auteur) and _DUREE_COOKIE_ADMIN) { |
|
| 217 | + spip_setcookie('spip_admin', '@'.($auteur['email'] ?: $auteur['login']), time() + max(_DUREE_COOKIE_ADMIN, $duree)); |
|
| 218 | 218 | } // sinon le supprimer ... |
| 219 | 219 | else { |
| 220 | 220 | spip_setcookie('spip_admin', '', 1); |
@@ -251,7 +251,7 @@ discard block |
||
| 251 | 251 | $coef = 20; |
| 252 | 252 | } |
| 253 | 253 | } |
| 254 | - return (int)(_RENOUVELLE_ALEA * $coef); |
|
| 254 | + return (int) (_RENOUVELLE_ALEA * $coef); |
|
| 255 | 255 | } |
| 256 | 256 | |
| 257 | 257 | /** |
@@ -299,7 +299,7 @@ discard block |
||
| 299 | 299 | |
| 300 | 300 | // Renouveler la session avec l'alea courant |
| 301 | 301 | include($fichier_session); |
| 302 | - spip_log('renouvelle session ' . $GLOBALS['visiteur_session']['id_auteur'], "session"); |
|
| 302 | + spip_log('renouvelle session '.$GLOBALS['visiteur_session']['id_auteur'], "session"); |
|
| 303 | 303 | spip_unlink($fichier_session); |
| 304 | 304 | ajouter_session($GLOBALS['visiteur_session']); |
| 305 | 305 | } |
@@ -331,7 +331,7 @@ discard block |
||
| 331 | 331 | } |
| 332 | 332 | } else { |
| 333 | 333 | if ($change) { |
| 334 | - spip_log("rejoue session $fichier_session " . $_COOKIE['spip_session'], "session"); |
|
| 334 | + spip_log("rejoue session $fichier_session ".$_COOKIE['spip_session'], "session"); |
|
| 335 | 335 | if ($fichier_session) { |
| 336 | 336 | spip_unlink($fichier_session); |
| 337 | 337 | } |
@@ -543,7 +543,7 @@ discard block |
||
| 543 | 543 | } |
| 544 | 544 | |
| 545 | 545 | // liste des sessions |
| 546 | - $sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\.php$'); |
|
| 546 | + $sessions = preg_files(_DIR_SESSIONS, '/'.$id_auteur.'_.*\.php$'); |
|
| 547 | 547 | |
| 548 | 548 | // si on en a plus que la limite, supprimer les plus vieilles |
| 549 | 549 | // si ce ne sont pas des sessions anonymes car elles sont alors chacune differentes |
@@ -622,12 +622,12 @@ discard block |
||
| 622 | 622 | $auteur = preparer_ecriture_session($auteur); |
| 623 | 623 | |
| 624 | 624 | // enregistrer les autres donnees du visiteur |
| 625 | - $texte = "<" . "?php\n"; |
|
| 625 | + $texte = "<"."?php\n"; |
|
| 626 | 626 | foreach ($auteur as $var => $val) { |
| 627 | - $texte .= '$GLOBALS[\'visiteur_session\'][' . var_export($var, true) . '] = ' |
|
| 628 | - . var_export($val, true) . ";\n"; |
|
| 627 | + $texte .= '$GLOBALS[\'visiteur_session\']['.var_export($var, true).'] = ' |
|
| 628 | + . var_export($val, true).";\n"; |
|
| 629 | 629 | } |
| 630 | - $texte .= "?" . ">\n"; |
|
| 630 | + $texte .= "?".">\n"; |
|
| 631 | 631 | |
| 632 | 632 | return ecrire_fichier($fichier, $texte); |
| 633 | 633 | } |
@@ -657,7 +657,7 @@ discard block |
||
| 657 | 657 | $repertoire = sous_repertoire(_DIR_SESSIONS, '', false, $tantpis); |
| 658 | 658 | $c = $_COOKIE['spip_session']; |
| 659 | 659 | |
| 660 | - return $repertoire . intval($c) . '_' . md5($c . ' ' . $GLOBALS['meta'][$alea]) . '.php'; |
|
| 660 | + return $repertoire.intval($c).'_'.md5($c.' '.$GLOBALS['meta'][$alea]).'.php'; |
|
| 661 | 661 | } |
| 662 | 662 | } |
| 663 | 663 | |
@@ -675,7 +675,7 @@ discard block |
||
| 675 | 675 | * @return string |
| 676 | 676 | */ |
| 677 | 677 | function rejouer_session() { |
| 678 | - return '<img src="' . generer_url_action('cookie', 'change_session=oui', true) . '" width="0" height="0" alt="" />'; |
|
| 678 | + return '<img src="'.generer_url_action('cookie', 'change_session=oui', true).'" width="0" height="0" alt="" />'; |
|
| 679 | 679 | } |
| 680 | 680 | |
| 681 | 681 | |
@@ -690,7 +690,7 @@ discard block |
||
| 690 | 690 | return $res; |
| 691 | 691 | } |
| 692 | 692 | |
| 693 | - return $res = md5($GLOBALS['ip'] . (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '')); |
|
| 693 | + return $res = md5($GLOBALS['ip'].(isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '')); |
|
| 694 | 694 | } |
| 695 | 695 | |
| 696 | 696 | |
@@ -17,7 +17,7 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | /** |
@@ -42,7 +42,7 @@ discard block |
||
| 42 | 42 | * Pile complétée du code compilé |
| 43 | 43 | **/ |
| 44 | 44 | function balise_FORMULAIRE_ADMIN($p) { |
| 45 | - return calculer_balise_dynamique($p, 'FORMULAIRE_ADMIN', array()); |
|
| 45 | + return calculer_balise_dynamique($p, 'FORMULAIRE_ADMIN', array()); |
|
| 46 | 46 | } |
| 47 | 47 | |
| 48 | 48 | /** |
@@ -59,7 +59,7 @@ discard block |
||
| 59 | 59 | * - chaîne vide sinon. |
| 60 | 60 | */ |
| 61 | 61 | function balise_FORMULAIRE_ADMIN_stat($args, $context_compil) { |
| 62 | - return $args; |
|
| 62 | + return $args; |
|
| 63 | 63 | } |
| 64 | 64 | |
| 65 | 65 | |
@@ -84,66 +84,66 @@ discard block |
||
| 84 | 84 | **/ |
| 85 | 85 | function balise_FORMULAIRE_ADMIN_dyn($float = '', $debug = '') { |
| 86 | 86 | |
| 87 | - static $dejafait = false; |
|
| 87 | + static $dejafait = false; |
|
| 88 | 88 | |
| 89 | - if (empty($_COOKIE['spip_admin'])) { |
|
| 90 | - return ''; |
|
| 91 | - } |
|
| 89 | + if (empty($_COOKIE['spip_admin'])) { |
|
| 90 | + return ''; |
|
| 91 | + } |
|
| 92 | 92 | |
| 93 | - if (!is_array($debug)) { |
|
| 94 | - if ($dejafait) { |
|
| 95 | - return ''; |
|
| 96 | - } |
|
| 97 | - } else { |
|
| 98 | - if ($dejafait) { |
|
| 99 | - if (empty($debug['sourcefile'])) { |
|
| 100 | - return ''; |
|
| 101 | - } |
|
| 102 | - foreach ($debug['sourcefile'] as $k => $v) { |
|
| 103 | - if (strpos($v, 'administration.') !== false) { |
|
| 104 | - if (isset($debug['resultat'][$k . 'tout'])) { |
|
| 105 | - return $debug['resultat'][$k . 'tout']; |
|
| 106 | - } |
|
| 107 | - } |
|
| 108 | - } |
|
| 93 | + if (!is_array($debug)) { |
|
| 94 | + if ($dejafait) { |
|
| 95 | + return ''; |
|
| 96 | + } |
|
| 97 | + } else { |
|
| 98 | + if ($dejafait) { |
|
| 99 | + if (empty($debug['sourcefile'])) { |
|
| 100 | + return ''; |
|
| 101 | + } |
|
| 102 | + foreach ($debug['sourcefile'] as $k => $v) { |
|
| 103 | + if (strpos($v, 'administration.') !== false) { |
|
| 104 | + if (isset($debug['resultat'][$k . 'tout'])) { |
|
| 105 | + return $debug['resultat'][$k . 'tout']; |
|
| 106 | + } |
|
| 107 | + } |
|
| 108 | + } |
|
| 109 | 109 | |
| 110 | - return ''; |
|
| 111 | - } |
|
| 112 | - } |
|
| 110 | + return ''; |
|
| 111 | + } |
|
| 112 | + } |
|
| 113 | 113 | |
| 114 | - include_spip('inc/autoriser'); |
|
| 115 | - include_spip('base/abstract_sql'); |
|
| 114 | + include_spip('inc/autoriser'); |
|
| 115 | + include_spip('base/abstract_sql'); |
|
| 116 | 116 | |
| 117 | 117 | |
| 118 | - $dejafait = true; |
|
| 118 | + $dejafait = true; |
|
| 119 | 119 | |
| 120 | - // Preparer le #ENV des boutons |
|
| 120 | + // Preparer le #ENV des boutons |
|
| 121 | 121 | |
| 122 | - $env = admin_objet(); |
|
| 122 | + $env = admin_objet(); |
|
| 123 | 123 | |
| 124 | - // Pas de "modifier ce..." ? -> donner "acces a l'espace prive" |
|
| 125 | - if (!$env) { |
|
| 126 | - $env['ecrire'] = _DIR_RESTREINT_ABS; |
|
| 127 | - } |
|
| 124 | + // Pas de "modifier ce..." ? -> donner "acces a l'espace prive" |
|
| 125 | + if (!$env) { |
|
| 126 | + $env['ecrire'] = _DIR_RESTREINT_ABS; |
|
| 127 | + } |
|
| 128 | 128 | |
| 129 | - $env['divclass'] = $float; |
|
| 130 | - $env['lang'] = admin_lang(); |
|
| 131 | - $env['calcul'] = (_request('var_mode') ? 'recalcul' : 'calcul'); |
|
| 132 | - $env['debug'] = ((defined('_VAR_PREVIEW') and _VAR_PREVIEW) ? "" : admin_debug()); |
|
| 133 | - $env['analyser'] = (!$env['debug'] and !$GLOBALS['xhtml']) ? '' : admin_valider(); |
|
| 134 | - $env['inclure'] = ((defined('_VAR_INCLURE') and _VAR_INCLURE) ? 'inclure' : ''); |
|
| 129 | + $env['divclass'] = $float; |
|
| 130 | + $env['lang'] = admin_lang(); |
|
| 131 | + $env['calcul'] = (_request('var_mode') ? 'recalcul' : 'calcul'); |
|
| 132 | + $env['debug'] = ((defined('_VAR_PREVIEW') and _VAR_PREVIEW) ? "" : admin_debug()); |
|
| 133 | + $env['analyser'] = (!$env['debug'] and !$GLOBALS['xhtml']) ? '' : admin_valider(); |
|
| 134 | + $env['inclure'] = ((defined('_VAR_INCLURE') and _VAR_INCLURE) ? 'inclure' : ''); |
|
| 135 | 135 | |
| 136 | - if (!$GLOBALS['use_cache']) { |
|
| 137 | - $env['use_cache'] = ' *'; |
|
| 138 | - } |
|
| 136 | + if (!$GLOBALS['use_cache']) { |
|
| 137 | + $env['use_cache'] = ' *'; |
|
| 138 | + } |
|
| 139 | 139 | |
| 140 | - if (isset($debug['validation'])) { |
|
| 141 | - $env['xhtml_error'] = $debug['validation']; |
|
| 142 | - } |
|
| 140 | + if (isset($debug['validation'])) { |
|
| 141 | + $env['xhtml_error'] = $debug['validation']; |
|
| 142 | + } |
|
| 143 | 143 | |
| 144 | - $env['_pipelines']['formulaire_admin'] = array(); |
|
| 144 | + $env['_pipelines']['formulaire_admin'] = array(); |
|
| 145 | 145 | |
| 146 | - return array('formulaires/administration', 0, $env); |
|
| 146 | + return array('formulaires/administration', 0, $env); |
|
| 147 | 147 | } |
| 148 | 148 | |
| 149 | 149 | |
@@ -161,45 +161,45 @@ discard block |
||
| 161 | 161 | * Tableau de l'environnement calculé |
| 162 | 162 | **/ |
| 163 | 163 | function admin_objet() { |
| 164 | - include_spip('inc/urls'); |
|
| 165 | - $env = array(); |
|
| 166 | - |
|
| 167 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 168 | - $objets = urls_liste_objets(false); |
|
| 169 | - $objets = array_diff($objets, array('rubrique')); |
|
| 170 | - $objets = array_reverse($objets); |
|
| 171 | - array_unshift($objets, 'rubrique'); |
|
| 172 | - foreach ($objets as $obj) { |
|
| 173 | - $type = $obj; |
|
| 174 | - if ($type == objet_type($type, false) |
|
| 175 | - and $_id_type = id_table_objet($type) |
|
| 176 | - and isset($GLOBALS['contexte'][$_id_type]) |
|
| 177 | - and $id = $GLOBALS['contexte'][$_id_type] |
|
| 178 | - and !is_array($id) |
|
| 179 | - and $id = intval($id) |
|
| 180 | - ) { |
|
| 181 | - $id = sql_getfetsel($_id_type, table_objet_sql($type), "$_id_type=" . intval($id)); |
|
| 182 | - if ($id) { |
|
| 183 | - $env[$_id_type] = $id; |
|
| 184 | - $env['objet'] = $type; |
|
| 185 | - $env['id_objet'] = $id; |
|
| 186 | - $env['voir_' . $obj] = |
|
| 187 | - str_replace('&', '&', generer_url_entite($id, $obj, '', '', false)); |
|
| 188 | - if ($desc = $trouver_table(table_objet_sql($type)) |
|
| 189 | - and isset($desc['field']['id_rubrique']) |
|
| 190 | - and $type != 'rubrique' |
|
| 191 | - ) { |
|
| 192 | - unset($env['id_rubrique']); |
|
| 193 | - unset($env['voir_rubrique']); |
|
| 194 | - if (admin_preview($type, $id, $desc)) { |
|
| 195 | - $env['preview'] = parametre_url(self(), 'var_mode', 'preview', '&'); |
|
| 196 | - } |
|
| 197 | - } |
|
| 198 | - } |
|
| 199 | - } |
|
| 200 | - } |
|
| 201 | - |
|
| 202 | - return $env; |
|
| 164 | + include_spip('inc/urls'); |
|
| 165 | + $env = array(); |
|
| 166 | + |
|
| 167 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 168 | + $objets = urls_liste_objets(false); |
|
| 169 | + $objets = array_diff($objets, array('rubrique')); |
|
| 170 | + $objets = array_reverse($objets); |
|
| 171 | + array_unshift($objets, 'rubrique'); |
|
| 172 | + foreach ($objets as $obj) { |
|
| 173 | + $type = $obj; |
|
| 174 | + if ($type == objet_type($type, false) |
|
| 175 | + and $_id_type = id_table_objet($type) |
|
| 176 | + and isset($GLOBALS['contexte'][$_id_type]) |
|
| 177 | + and $id = $GLOBALS['contexte'][$_id_type] |
|
| 178 | + and !is_array($id) |
|
| 179 | + and $id = intval($id) |
|
| 180 | + ) { |
|
| 181 | + $id = sql_getfetsel($_id_type, table_objet_sql($type), "$_id_type=" . intval($id)); |
|
| 182 | + if ($id) { |
|
| 183 | + $env[$_id_type] = $id; |
|
| 184 | + $env['objet'] = $type; |
|
| 185 | + $env['id_objet'] = $id; |
|
| 186 | + $env['voir_' . $obj] = |
|
| 187 | + str_replace('&', '&', generer_url_entite($id, $obj, '', '', false)); |
|
| 188 | + if ($desc = $trouver_table(table_objet_sql($type)) |
|
| 189 | + and isset($desc['field']['id_rubrique']) |
|
| 190 | + and $type != 'rubrique' |
|
| 191 | + ) { |
|
| 192 | + unset($env['id_rubrique']); |
|
| 193 | + unset($env['voir_rubrique']); |
|
| 194 | + if (admin_preview($type, $id, $desc)) { |
|
| 195 | + $env['preview'] = parametre_url(self(), 'var_mode', 'preview', '&'); |
|
| 196 | + } |
|
| 197 | + } |
|
| 198 | + } |
|
| 199 | + } |
|
| 200 | + } |
|
| 201 | + |
|
| 202 | + return $env; |
|
| 203 | 203 | } |
| 204 | 204 | |
| 205 | 205 | |
@@ -217,30 +217,30 @@ discard block |
||
| 217 | 217 | * - Tableau d'un élément sinon. |
| 218 | 218 | **/ |
| 219 | 219 | function admin_preview($type, $id, $desc = null) { |
| 220 | - if (defined('_VAR_PREVIEW') and _VAR_PREVIEW) { |
|
| 221 | - return ''; |
|
| 222 | - } |
|
| 223 | - |
|
| 224 | - if (!$desc) { |
|
| 225 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 226 | - $desc = $trouver_table(table_objet_sql($type)); |
|
| 227 | - } |
|
| 228 | - if (!$desc or !isset($desc['field']['statut'])) { |
|
| 229 | - return ''; |
|
| 230 | - } |
|
| 231 | - |
|
| 232 | - include_spip('inc/autoriser'); |
|
| 233 | - if (!autoriser('previsualiser')) { |
|
| 234 | - return ''; |
|
| 235 | - } |
|
| 236 | - |
|
| 237 | - $notpub = sql_in("statut", array('prop', 'prive')); |
|
| 238 | - |
|
| 239 | - if ($type == 'article' and $GLOBALS['meta']['post_dates'] != 'oui') { |
|
| 240 | - $notpub .= " OR (statut='publie' AND date>" . sql_quote(date('Y-m-d H:i:s')) . ")"; |
|
| 241 | - } |
|
| 242 | - |
|
| 243 | - return sql_fetsel('1', table_objet_sql($type), id_table_objet($type) . "=" . $id . " AND ($notpub)"); |
|
| 220 | + if (defined('_VAR_PREVIEW') and _VAR_PREVIEW) { |
|
| 221 | + return ''; |
|
| 222 | + } |
|
| 223 | + |
|
| 224 | + if (!$desc) { |
|
| 225 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 226 | + $desc = $trouver_table(table_objet_sql($type)); |
|
| 227 | + } |
|
| 228 | + if (!$desc or !isset($desc['field']['statut'])) { |
|
| 229 | + return ''; |
|
| 230 | + } |
|
| 231 | + |
|
| 232 | + include_spip('inc/autoriser'); |
|
| 233 | + if (!autoriser('previsualiser')) { |
|
| 234 | + return ''; |
|
| 235 | + } |
|
| 236 | + |
|
| 237 | + $notpub = sql_in("statut", array('prop', 'prive')); |
|
| 238 | + |
|
| 239 | + if ($type == 'article' and $GLOBALS['meta']['post_dates'] != 'oui') { |
|
| 240 | + $notpub .= " OR (statut='publie' AND date>" . sql_quote(date('Y-m-d H:i:s')) . ")"; |
|
| 241 | + } |
|
| 242 | + |
|
| 243 | + return sql_fetsel('1', table_objet_sql($type), id_table_objet($type) . "=" . $id . " AND ($notpub)"); |
|
| 244 | 244 | } |
| 245 | 245 | |
| 246 | 246 | |
@@ -251,25 +251,25 @@ discard block |
||
| 251 | 251 | * Code de langue |
| 252 | 252 | **/ |
| 253 | 253 | function admin_lang() { |
| 254 | - $alang = ''; |
|
| 255 | - if (!empty($_COOKIE['spip_admin'])) { |
|
| 256 | - $email_or_login = preg_replace(',^@,', '', $_COOKIE['spip_admin']); |
|
| 257 | - $alang = sql_getfetsel('lang', 'spip_auteurs', "email=" . sql_quote($email_or_login)); |
|
| 258 | - if (!$alang) { |
|
| 259 | - $alang = sql_getfetsel('lang', 'spip_auteurs', "login=" . sql_quote($email_or_login)); |
|
| 260 | - } |
|
| 261 | - } |
|
| 262 | - if (!$alang) { |
|
| 263 | - return ''; |
|
| 264 | - } |
|
| 265 | - |
|
| 266 | - $l = lang_select($alang); |
|
| 267 | - $alang = $GLOBALS['spip_lang']; |
|
| 268 | - if ($l) { |
|
| 269 | - lang_select(); |
|
| 270 | - } |
|
| 271 | - |
|
| 272 | - return $alang; |
|
| 254 | + $alang = ''; |
|
| 255 | + if (!empty($_COOKIE['spip_admin'])) { |
|
| 256 | + $email_or_login = preg_replace(',^@,', '', $_COOKIE['spip_admin']); |
|
| 257 | + $alang = sql_getfetsel('lang', 'spip_auteurs', "email=" . sql_quote($email_or_login)); |
|
| 258 | + if (!$alang) { |
|
| 259 | + $alang = sql_getfetsel('lang', 'spip_auteurs', "login=" . sql_quote($email_or_login)); |
|
| 260 | + } |
|
| 261 | + } |
|
| 262 | + if (!$alang) { |
|
| 263 | + return ''; |
|
| 264 | + } |
|
| 265 | + |
|
| 266 | + $l = lang_select($alang); |
|
| 267 | + $alang = $GLOBALS['spip_lang']; |
|
| 268 | + if ($l) { |
|
| 269 | + lang_select(); |
|
| 270 | + } |
|
| 271 | + |
|
| 272 | + return $alang; |
|
| 273 | 273 | } |
| 274 | 274 | |
| 275 | 275 | /** |
@@ -279,11 +279,11 @@ discard block |
||
| 279 | 279 | **/ |
| 280 | 280 | function admin_valider() { |
| 281 | 281 | |
| 282 | - return ((!isset($GLOBALS['xhtml']) or $GLOBALS['xhtml'] !== 'true') ? |
|
| 283 | - (parametre_url(self(), 'var_mode', 'debug', '&') |
|
| 284 | - . '&var_mode_affiche=validation') : |
|
| 285 | - ('http://validator.w3.org/check?uri=' |
|
| 286 | - . rawurlencode("http://" . $_SERVER['HTTP_HOST'] . nettoyer_uri()))); |
|
| 282 | + return ((!isset($GLOBALS['xhtml']) or $GLOBALS['xhtml'] !== 'true') ? |
|
| 283 | + (parametre_url(self(), 'var_mode', 'debug', '&') |
|
| 284 | + . '&var_mode_affiche=validation') : |
|
| 285 | + ('http://validator.w3.org/check?uri=' |
|
| 286 | + . rawurlencode("http://" . $_SERVER['HTTP_HOST'] . nettoyer_uri()))); |
|
| 287 | 287 | } |
| 288 | 288 | |
| 289 | 289 | /** |
@@ -292,14 +292,14 @@ discard block |
||
| 292 | 292 | * @return string |
| 293 | 293 | **/ |
| 294 | 294 | function admin_debug() { |
| 295 | - return (( |
|
| 296 | - (isset($GLOBALS['forcer_debug']) and $GLOBALS['forcer_debug']) |
|
| 297 | - or (isset($GLOBALS['bouton_admin_debug']) and $GLOBALS['bouton_admin_debug']) |
|
| 298 | - or ( |
|
| 299 | - defined('_VAR_MODE') and _VAR_MODE == 'debug' |
|
| 300 | - and isset($_COOKIE['spip_debug']) and $_COOKIE['spip_debug'] |
|
| 301 | - ) |
|
| 302 | - ) and autoriser('debug') |
|
| 303 | - ) |
|
| 304 | - ? parametre_url(self(), 'var_mode', 'debug', '&') : ''; |
|
| 295 | + return (( |
|
| 296 | + (isset($GLOBALS['forcer_debug']) and $GLOBALS['forcer_debug']) |
|
| 297 | + or (isset($GLOBALS['bouton_admin_debug']) and $GLOBALS['bouton_admin_debug']) |
|
| 298 | + or ( |
|
| 299 | + defined('_VAR_MODE') and _VAR_MODE == 'debug' |
|
| 300 | + and isset($_COOKIE['spip_debug']) and $_COOKIE['spip_debug'] |
|
| 301 | + ) |
|
| 302 | + ) and autoriser('debug') |
|
| 303 | + ) |
|
| 304 | + ? parametre_url(self(), 'var_mode', 'debug', '&') : ''; |
|
| 305 | 305 | } |
@@ -101,8 +101,8 @@ discard block |
||
| 101 | 101 | } |
| 102 | 102 | foreach ($debug['sourcefile'] as $k => $v) { |
| 103 | 103 | if (strpos($v, 'administration.') !== false) { |
| 104 | - if (isset($debug['resultat'][$k . 'tout'])) { |
|
| 105 | - return $debug['resultat'][$k . 'tout']; |
|
| 104 | + if (isset($debug['resultat'][$k.'tout'])) { |
|
| 105 | + return $debug['resultat'][$k.'tout']; |
|
| 106 | 106 | } |
| 107 | 107 | } |
| 108 | 108 | } |
@@ -178,12 +178,12 @@ discard block |
||
| 178 | 178 | and !is_array($id) |
| 179 | 179 | and $id = intval($id) |
| 180 | 180 | ) { |
| 181 | - $id = sql_getfetsel($_id_type, table_objet_sql($type), "$_id_type=" . intval($id)); |
|
| 181 | + $id = sql_getfetsel($_id_type, table_objet_sql($type), "$_id_type=".intval($id)); |
|
| 182 | 182 | if ($id) { |
| 183 | 183 | $env[$_id_type] = $id; |
| 184 | 184 | $env['objet'] = $type; |
| 185 | 185 | $env['id_objet'] = $id; |
| 186 | - $env['voir_' . $obj] = |
|
| 186 | + $env['voir_'.$obj] = |
|
| 187 | 187 | str_replace('&', '&', generer_url_entite($id, $obj, '', '', false)); |
| 188 | 188 | if ($desc = $trouver_table(table_objet_sql($type)) |
| 189 | 189 | and isset($desc['field']['id_rubrique']) |
@@ -237,10 +237,10 @@ discard block |
||
| 237 | 237 | $notpub = sql_in("statut", array('prop', 'prive')); |
| 238 | 238 | |
| 239 | 239 | if ($type == 'article' and $GLOBALS['meta']['post_dates'] != 'oui') { |
| 240 | - $notpub .= " OR (statut='publie' AND date>" . sql_quote(date('Y-m-d H:i:s')) . ")"; |
|
| 240 | + $notpub .= " OR (statut='publie' AND date>".sql_quote(date('Y-m-d H:i:s')).")"; |
|
| 241 | 241 | } |
| 242 | 242 | |
| 243 | - return sql_fetsel('1', table_objet_sql($type), id_table_objet($type) . "=" . $id . " AND ($notpub)"); |
|
| 243 | + return sql_fetsel('1', table_objet_sql($type), id_table_objet($type)."=".$id." AND ($notpub)"); |
|
| 244 | 244 | } |
| 245 | 245 | |
| 246 | 246 | |
@@ -254,9 +254,9 @@ discard block |
||
| 254 | 254 | $alang = ''; |
| 255 | 255 | if (!empty($_COOKIE['spip_admin'])) { |
| 256 | 256 | $email_or_login = preg_replace(',^@,', '', $_COOKIE['spip_admin']); |
| 257 | - $alang = sql_getfetsel('lang', 'spip_auteurs', "email=" . sql_quote($email_or_login)); |
|
| 257 | + $alang = sql_getfetsel('lang', 'spip_auteurs', "email=".sql_quote($email_or_login)); |
|
| 258 | 258 | if (!$alang) { |
| 259 | - $alang = sql_getfetsel('lang', 'spip_auteurs', "login=" . sql_quote($email_or_login)); |
|
| 259 | + $alang = sql_getfetsel('lang', 'spip_auteurs', "login=".sql_quote($email_or_login)); |
|
| 260 | 260 | } |
| 261 | 261 | } |
| 262 | 262 | if (!$alang) { |
@@ -281,9 +281,8 @@ discard block |
||
| 281 | 281 | |
| 282 | 282 | return ((!isset($GLOBALS['xhtml']) or $GLOBALS['xhtml'] !== 'true') ? |
| 283 | 283 | (parametre_url(self(), 'var_mode', 'debug', '&') |
| 284 | - . '&var_mode_affiche=validation') : |
|
| 285 | - ('http://validator.w3.org/check?uri=' |
|
| 286 | - . rawurlencode("http://" . $_SERVER['HTTP_HOST'] . nettoyer_uri()))); |
|
| 284 | + . '&var_mode_affiche=validation') : ('http://validator.w3.org/check?uri=' |
|
| 285 | + . rawurlencode("http://".$_SERVER['HTTP_HOST'].nettoyer_uri()))); |
|
| 287 | 286 | } |
| 288 | 287 | |
| 289 | 288 | /** |