@@ -19,15 +19,15 @@ |
||
| 19 | 19 | * @package SPIP\Core\SQL\Upgrade |
| 20 | 20 | **/ |
| 21 | 21 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 22 | - return; |
|
| 22 | + return; |
|
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | $GLOBALS['maj'][2021_02_18_00] = [ |
| 26 | - ['sql_alter', "TABLE spip_auteurs CHANGE imessage imessage VARCHAR(3) DEFAULT '' NOT NULL" ], |
|
| 27 | - ['sql_updateq', 'spip_auteurs', ['imessage' => 'oui'], "imessage != 'non' OR imessage IS NULL" ], |
|
| 26 | + ['sql_alter', "TABLE spip_auteurs CHANGE imessage imessage VARCHAR(3) DEFAULT '' NOT NULL" ], |
|
| 27 | + ['sql_updateq', 'spip_auteurs', ['imessage' => 'oui'], "imessage != 'non' OR imessage IS NULL" ], |
|
| 28 | 28 | ]; |
| 29 | 29 | |
| 30 | 30 | $GLOBALS['maj'][2022_02_23_02] = [ |
| 31 | - ['sql_alter', "TABLE spip_auteurs ADD backup_cles mediumtext DEFAULT '' NOT NULL" ], |
|
| 32 | - ['sql_delete', "spip_meta","nom='secret_du_site'" ], |
|
| 31 | + ['sql_alter', "TABLE spip_auteurs ADD backup_cles mediumtext DEFAULT '' NOT NULL" ], |
|
| 32 | + ['sql_delete', "spip_meta","nom='secret_du_site'" ], |
|
| 33 | 33 | ]; |
@@ -23,11 +23,11 @@ |
||
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | $GLOBALS['maj'][2021_02_18_00] = [ |
| 26 | - ['sql_alter', "TABLE spip_auteurs CHANGE imessage imessage VARCHAR(3) DEFAULT '' NOT NULL" ], |
|
| 27 | - ['sql_updateq', 'spip_auteurs', ['imessage' => 'oui'], "imessage != 'non' OR imessage IS NULL" ], |
|
| 26 | + ['sql_alter', "TABLE spip_auteurs CHANGE imessage imessage VARCHAR(3) DEFAULT '' NOT NULL"], |
|
| 27 | + ['sql_updateq', 'spip_auteurs', ['imessage' => 'oui'], "imessage != 'non' OR imessage IS NULL"], |
|
| 28 | 28 | ]; |
| 29 | 29 | |
| 30 | 30 | $GLOBALS['maj'][2022_02_23_02] = [ |
| 31 | - ['sql_alter', "TABLE spip_auteurs ADD backup_cles mediumtext DEFAULT '' NOT NULL" ], |
|
| 32 | - ['sql_delete', "spip_meta","nom='secret_du_site'" ], |
|
| 31 | + ['sql_alter', "TABLE spip_auteurs ADD backup_cles mediumtext DEFAULT '' NOT NULL"], |
|
| 32 | + ['sql_delete', "spip_meta", "nom='secret_du_site'"], |
|
| 33 | 33 | ]; |
@@ -21,7 +21,7 @@ discard block |
||
| 21 | 21 | |
| 22 | 22 | |
| 23 | 23 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 24 | - return; |
|
| 24 | + return; |
|
| 25 | 25 | } |
| 26 | 26 | |
| 27 | 27 | |
@@ -44,70 +44,70 @@ discard block |
||
| 44 | 44 | * @return array|string |
| 45 | 45 | */ |
| 46 | 46 | function action_inscrire_auteur_dist($statut, $mail_complet, $nom, $options = []) { |
| 47 | - if (!is_array($options)) { |
|
| 48 | - $options = ['id' => $options]; |
|
| 49 | - } |
|
| 50 | - |
|
| 51 | - if (function_exists('test_inscription')) { |
|
| 52 | - $f = 'test_inscription'; |
|
| 53 | - } else { |
|
| 54 | - $f = 'test_inscription_dist'; |
|
| 55 | - } |
|
| 56 | - $desc = $f($statut, $mail_complet, $nom, $options); |
|
| 57 | - |
|
| 58 | - // erreur ? |
|
| 59 | - if (!is_array($desc)) { |
|
| 60 | - return _T($desc); |
|
| 61 | - } |
|
| 62 | - |
|
| 63 | - include_spip('base/abstract_sql'); |
|
| 64 | - $res = sql_select('statut, id_auteur, login, email, nom', 'spip_auteurs', 'email=' . sql_quote($desc['email'])); |
|
| 65 | - // erreur ? |
|
| 66 | - if (!$res) { |
|
| 67 | - return _T('titre_probleme_technique'); |
|
| 68 | - } |
|
| 69 | - |
|
| 70 | - $row = sql_fetch($res); |
|
| 71 | - sql_free($res); |
|
| 72 | - if ($row) { |
|
| 73 | - if (isset($options['force_nouveau']) and $options['force_nouveau'] == true) { |
|
| 74 | - $desc['id_auteur'] = $row['id_auteur']; |
|
| 75 | - $desc = inscription_nouveau($desc); |
|
| 76 | - } else { |
|
| 77 | - $desc = $row; |
|
| 78 | - } |
|
| 79 | - } else // s'il n'existe pas deja, creer les identifiants |
|
| 80 | - { |
|
| 81 | - $desc = inscription_nouveau($desc); |
|
| 82 | - } |
|
| 83 | - |
|
| 84 | - // erreur ? |
|
| 85 | - if (!is_array($desc)) { |
|
| 86 | - return $desc; |
|
| 87 | - } |
|
| 88 | - |
|
| 89 | - |
|
| 90 | - // generer le mot de passe (ou le refaire si compte inutilise) |
|
| 91 | - $desc['pass'] = creer_pass_pour_auteur($desc['id_auteur']); |
|
| 92 | - |
|
| 93 | - // attribuer un jeton pour confirmation par clic sur un lien |
|
| 94 | - $desc['jeton'] = auteur_attribuer_jeton($desc['id_auteur']); |
|
| 95 | - |
|
| 96 | - // charger de suite cette fonction, pour ses utilitaires |
|
| 97 | - $envoyer_inscription = charger_fonction('envoyer_inscription', ''); |
|
| 98 | - [$sujet, $msg, $from, $head] = $envoyer_inscription($desc, $nom, $statut, $options); |
|
| 99 | - |
|
| 100 | - $notifications = charger_fonction('notifications', 'inc'); |
|
| 101 | - notifications_envoyer_mails($mail_complet, $msg, $sujet, $from, $head); |
|
| 102 | - |
|
| 103 | - // Notifications |
|
| 104 | - $notifications( |
|
| 105 | - 'inscription', |
|
| 106 | - $desc['id_auteur'], |
|
| 107 | - ['nom' => $desc['nom'], 'email' => $desc['email']] |
|
| 108 | - ); |
|
| 109 | - |
|
| 110 | - return $desc; |
|
| 47 | + if (!is_array($options)) { |
|
| 48 | + $options = ['id' => $options]; |
|
| 49 | + } |
|
| 50 | + |
|
| 51 | + if (function_exists('test_inscription')) { |
|
| 52 | + $f = 'test_inscription'; |
|
| 53 | + } else { |
|
| 54 | + $f = 'test_inscription_dist'; |
|
| 55 | + } |
|
| 56 | + $desc = $f($statut, $mail_complet, $nom, $options); |
|
| 57 | + |
|
| 58 | + // erreur ? |
|
| 59 | + if (!is_array($desc)) { |
|
| 60 | + return _T($desc); |
|
| 61 | + } |
|
| 62 | + |
|
| 63 | + include_spip('base/abstract_sql'); |
|
| 64 | + $res = sql_select('statut, id_auteur, login, email, nom', 'spip_auteurs', 'email=' . sql_quote($desc['email'])); |
|
| 65 | + // erreur ? |
|
| 66 | + if (!$res) { |
|
| 67 | + return _T('titre_probleme_technique'); |
|
| 68 | + } |
|
| 69 | + |
|
| 70 | + $row = sql_fetch($res); |
|
| 71 | + sql_free($res); |
|
| 72 | + if ($row) { |
|
| 73 | + if (isset($options['force_nouveau']) and $options['force_nouveau'] == true) { |
|
| 74 | + $desc['id_auteur'] = $row['id_auteur']; |
|
| 75 | + $desc = inscription_nouveau($desc); |
|
| 76 | + } else { |
|
| 77 | + $desc = $row; |
|
| 78 | + } |
|
| 79 | + } else // s'il n'existe pas deja, creer les identifiants |
|
| 80 | + { |
|
| 81 | + $desc = inscription_nouveau($desc); |
|
| 82 | + } |
|
| 83 | + |
|
| 84 | + // erreur ? |
|
| 85 | + if (!is_array($desc)) { |
|
| 86 | + return $desc; |
|
| 87 | + } |
|
| 88 | + |
|
| 89 | + |
|
| 90 | + // generer le mot de passe (ou le refaire si compte inutilise) |
|
| 91 | + $desc['pass'] = creer_pass_pour_auteur($desc['id_auteur']); |
|
| 92 | + |
|
| 93 | + // attribuer un jeton pour confirmation par clic sur un lien |
|
| 94 | + $desc['jeton'] = auteur_attribuer_jeton($desc['id_auteur']); |
|
| 95 | + |
|
| 96 | + // charger de suite cette fonction, pour ses utilitaires |
|
| 97 | + $envoyer_inscription = charger_fonction('envoyer_inscription', ''); |
|
| 98 | + [$sujet, $msg, $from, $head] = $envoyer_inscription($desc, $nom, $statut, $options); |
|
| 99 | + |
|
| 100 | + $notifications = charger_fonction('notifications', 'inc'); |
|
| 101 | + notifications_envoyer_mails($mail_complet, $msg, $sujet, $from, $head); |
|
| 102 | + |
|
| 103 | + // Notifications |
|
| 104 | + $notifications( |
|
| 105 | + 'inscription', |
|
| 106 | + $desc['id_auteur'], |
|
| 107 | + ['nom' => $desc['nom'], 'email' => $desc['email']] |
|
| 108 | + ); |
|
| 109 | + |
|
| 110 | + return $desc; |
|
| 111 | 111 | } |
| 112 | 112 | |
| 113 | 113 | |
@@ -130,23 +130,23 @@ discard block |
||
| 130 | 130 | * |
| 131 | 131 | */ |
| 132 | 132 | function test_inscription_dist($statut, $mail, $nom, $options) { |
| 133 | - include_spip('inc/filtres'); |
|
| 134 | - if (!$r = email_valide($mail)) { |
|
| 135 | - return 'info_email_invalide'; |
|
| 136 | - } |
|
| 137 | - $nom = trim(corriger_caracteres($nom)); |
|
| 138 | - $res = ['email' => $r, 'nom' => $nom, 'prefs' => $statut]; |
|
| 139 | - if (isset($options['login'])) { |
|
| 140 | - $login = trim(corriger_caracteres($options['login'])); |
|
| 141 | - if ((strlen($login) >= _LOGIN_TROP_COURT) and (strlen($nom) <= 64)) { |
|
| 142 | - $res['login'] = $login; |
|
| 143 | - } |
|
| 144 | - } |
|
| 145 | - if (!isset($res['login']) and ((strlen($nom) < _LOGIN_TROP_COURT) or (strlen($nom) > 64))) { |
|
| 146 | - return 'ecrire:info_login_trop_court'; |
|
| 147 | - } |
|
| 148 | - |
|
| 149 | - return $res; |
|
| 133 | + include_spip('inc/filtres'); |
|
| 134 | + if (!$r = email_valide($mail)) { |
|
| 135 | + return 'info_email_invalide'; |
|
| 136 | + } |
|
| 137 | + $nom = trim(corriger_caracteres($nom)); |
|
| 138 | + $res = ['email' => $r, 'nom' => $nom, 'prefs' => $statut]; |
|
| 139 | + if (isset($options['login'])) { |
|
| 140 | + $login = trim(corriger_caracteres($options['login'])); |
|
| 141 | + if ((strlen($login) >= _LOGIN_TROP_COURT) and (strlen($nom) <= 64)) { |
|
| 142 | + $res['login'] = $login; |
|
| 143 | + } |
|
| 144 | + } |
|
| 145 | + if (!isset($res['login']) and ((strlen($nom) < _LOGIN_TROP_COURT) or (strlen($nom) > 64))) { |
|
| 146 | + return 'ecrire:info_login_trop_court'; |
|
| 147 | + } |
|
| 148 | + |
|
| 149 | + return $res; |
|
| 150 | 150 | } |
| 151 | 151 | |
| 152 | 152 | |
@@ -159,33 +159,33 @@ discard block |
||
| 159 | 159 | * @return mixed|string |
| 160 | 160 | */ |
| 161 | 161 | function inscription_nouveau($desc) { |
| 162 | - if (!isset($desc['login']) or !strlen($desc['login'])) { |
|
| 163 | - $desc['login'] = test_login($desc['nom'], $desc['email']); |
|
| 164 | - } |
|
| 162 | + if (!isset($desc['login']) or !strlen($desc['login'])) { |
|
| 163 | + $desc['login'] = test_login($desc['nom'], $desc['email']); |
|
| 164 | + } |
|
| 165 | 165 | |
| 166 | - $desc['statut'] = 'nouveau'; |
|
| 167 | - include_spip('action/editer_auteur'); |
|
| 168 | - if (isset($desc['id_auteur'])) { |
|
| 169 | - $id_auteur = $desc['id_auteur']; |
|
| 170 | - } else { |
|
| 171 | - $id_auteur = auteur_inserer(); |
|
| 172 | - } |
|
| 166 | + $desc['statut'] = 'nouveau'; |
|
| 167 | + include_spip('action/editer_auteur'); |
|
| 168 | + if (isset($desc['id_auteur'])) { |
|
| 169 | + $id_auteur = $desc['id_auteur']; |
|
| 170 | + } else { |
|
| 171 | + $id_auteur = auteur_inserer(); |
|
| 172 | + } |
|
| 173 | 173 | |
| 174 | - if (!$id_auteur) { |
|
| 175 | - return _T('titre_probleme_technique'); |
|
| 176 | - } |
|
| 174 | + if (!$id_auteur) { |
|
| 175 | + return _T('titre_probleme_technique'); |
|
| 176 | + } |
|
| 177 | 177 | |
| 178 | - $desc['lang'] = $GLOBALS['spip_lang']; |
|
| 178 | + $desc['lang'] = $GLOBALS['spip_lang']; |
|
| 179 | 179 | |
| 180 | - include_spip('inc/autoriser'); |
|
| 181 | - // lever l'autorisation pour pouvoir modifier le statut |
|
| 182 | - autoriser_exception('modifier', 'auteur', $id_auteur); |
|
| 183 | - auteur_modifier($id_auteur, $desc); |
|
| 184 | - autoriser_exception('modifier', 'auteur', $id_auteur, false); |
|
| 180 | + include_spip('inc/autoriser'); |
|
| 181 | + // lever l'autorisation pour pouvoir modifier le statut |
|
| 182 | + autoriser_exception('modifier', 'auteur', $id_auteur); |
|
| 183 | + auteur_modifier($id_auteur, $desc); |
|
| 184 | + autoriser_exception('modifier', 'auteur', $id_auteur, false); |
|
| 185 | 185 | |
| 186 | - $desc['id_auteur'] = $id_auteur; |
|
| 186 | + $desc['id_auteur'] = $id_auteur; |
|
| 187 | 187 | |
| 188 | - return $desc; |
|
| 188 | + return $desc; |
|
| 189 | 189 | } |
| 190 | 190 | |
| 191 | 191 | |
@@ -202,27 +202,27 @@ discard block |
||
| 202 | 202 | * @return string |
| 203 | 203 | */ |
| 204 | 204 | function test_login($nom, $mail) { |
| 205 | - include_spip('inc/charsets'); |
|
| 206 | - $nom = strtolower(translitteration($nom)); |
|
| 207 | - $login_base = preg_replace('/[^\w\d_]/', '_', $nom); |
|
| 208 | - |
|
| 209 | - // il faut eviter que le login soit vraiment trop court |
|
| 210 | - if (strlen($login_base) < 3) { |
|
| 211 | - $mail = strtolower(translitteration(preg_replace('/@.*/', '', $mail))); |
|
| 212 | - $login_base = preg_replace('/[^\w\d]/', '_', $mail); |
|
| 213 | - } |
|
| 214 | - if (strlen($login_base) < 3) { |
|
| 215 | - $login_base = 'user'; |
|
| 216 | - } |
|
| 217 | - |
|
| 218 | - $login = $login_base; |
|
| 219 | - |
|
| 220 | - for ($i = 1;; $i++) { |
|
| 221 | - if (!sql_countsel('spip_auteurs', "login='$login'")) { |
|
| 222 | - return $login; |
|
| 223 | - } |
|
| 224 | - $login = $login_base . $i; |
|
| 225 | - } |
|
| 205 | + include_spip('inc/charsets'); |
|
| 206 | + $nom = strtolower(translitteration($nom)); |
|
| 207 | + $login_base = preg_replace('/[^\w\d_]/', '_', $nom); |
|
| 208 | + |
|
| 209 | + // il faut eviter que le login soit vraiment trop court |
|
| 210 | + if (strlen($login_base) < 3) { |
|
| 211 | + $mail = strtolower(translitteration(preg_replace('/@.*/', '', $mail))); |
|
| 212 | + $login_base = preg_replace('/[^\w\d]/', '_', $mail); |
|
| 213 | + } |
|
| 214 | + if (strlen($login_base) < 3) { |
|
| 215 | + $login_base = 'user'; |
|
| 216 | + } |
|
| 217 | + |
|
| 218 | + $login = $login_base; |
|
| 219 | + |
|
| 220 | + for ($i = 1;; $i++) { |
|
| 221 | + if (!sql_countsel('spip_auteurs', "login='$login'")) { |
|
| 222 | + return $login; |
|
| 223 | + } |
|
| 224 | + $login = $login_base . $i; |
|
| 225 | + } |
|
| 226 | 226 | } |
| 227 | 227 | |
| 228 | 228 | |
@@ -240,26 +240,26 @@ discard block |
||
| 240 | 240 | */ |
| 241 | 241 | function envoyer_inscription_dist($desc, $nom, $mode, $options = []) { |
| 242 | 242 | |
| 243 | - $contexte = array_merge($desc, $options); |
|
| 244 | - $contexte['nom'] = $nom; |
|
| 245 | - $contexte['mode'] = $mode; |
|
| 246 | - $contexte['url_confirm'] = generer_url_action('confirmer_inscription', '', true, true); |
|
| 247 | - $contexte['url_confirm'] = parametre_url($contexte['url_confirm'], 'email', $desc['email']); |
|
| 248 | - $contexte['url_confirm'] = parametre_url($contexte['url_confirm'], 'jeton', $desc['jeton']); |
|
| 249 | - // S'il y a l'option redirect, on l'ajoute directement ici |
|
| 250 | - if (isset($options['redirect'])) { |
|
| 251 | - $contexte['url_confirm'] = parametre_url($contexte['url_confirm'], 'redirect', $options['redirect']); |
|
| 252 | - } |
|
| 253 | - |
|
| 254 | - $modele_mail = 'modeles/mail_inscription'; |
|
| 255 | - if (isset($options['modele_mail']) and $options['modele_mail']) { |
|
| 256 | - $modele_mail = $options['modele_mail']; |
|
| 257 | - } |
|
| 258 | - $message = recuperer_fond($modele_mail, $contexte); |
|
| 259 | - $from = ($options['from'] ?? null); |
|
| 260 | - $head = null; |
|
| 261 | - |
|
| 262 | - return ['', $message, $from, $head]; |
|
| 243 | + $contexte = array_merge($desc, $options); |
|
| 244 | + $contexte['nom'] = $nom; |
|
| 245 | + $contexte['mode'] = $mode; |
|
| 246 | + $contexte['url_confirm'] = generer_url_action('confirmer_inscription', '', true, true); |
|
| 247 | + $contexte['url_confirm'] = parametre_url($contexte['url_confirm'], 'email', $desc['email']); |
|
| 248 | + $contexte['url_confirm'] = parametre_url($contexte['url_confirm'], 'jeton', $desc['jeton']); |
|
| 249 | + // S'il y a l'option redirect, on l'ajoute directement ici |
|
| 250 | + if (isset($options['redirect'])) { |
|
| 251 | + $contexte['url_confirm'] = parametre_url($contexte['url_confirm'], 'redirect', $options['redirect']); |
|
| 252 | + } |
|
| 253 | + |
|
| 254 | + $modele_mail = 'modeles/mail_inscription'; |
|
| 255 | + if (isset($options['modele_mail']) and $options['modele_mail']) { |
|
| 256 | + $modele_mail = $options['modele_mail']; |
|
| 257 | + } |
|
| 258 | + $message = recuperer_fond($modele_mail, $contexte); |
|
| 259 | + $from = ($options['from'] ?? null); |
|
| 260 | + $head = null; |
|
| 261 | + |
|
| 262 | + return ['', $message, $from, $head]; |
|
| 263 | 263 | } |
| 264 | 264 | |
| 265 | 265 | |
@@ -270,12 +270,12 @@ discard block |
||
| 270 | 270 | * @return string |
| 271 | 271 | */ |
| 272 | 272 | function creer_pass_pour_auteur($id_auteur) { |
| 273 | - include_spip('inc/acces'); |
|
| 274 | - $pass = creer_pass_aleatoire(max(_PASS_LONGUEUR_MINI, 16), $id_auteur); |
|
| 275 | - include_spip('action/editer_auteur'); |
|
| 276 | - auteur_instituer($id_auteur, ['pass' => $pass]); |
|
| 273 | + include_spip('inc/acces'); |
|
| 274 | + $pass = creer_pass_aleatoire(max(_PASS_LONGUEUR_MINI, 16), $id_auteur); |
|
| 275 | + include_spip('action/editer_auteur'); |
|
| 276 | + auteur_instituer($id_auteur, ['pass' => $pass]); |
|
| 277 | 277 | |
| 278 | - return $pass; |
|
| 278 | + return $pass; |
|
| 279 | 279 | } |
| 280 | 280 | |
| 281 | 281 | /** |
@@ -288,17 +288,17 @@ discard block |
||
| 288 | 288 | * @return string |
| 289 | 289 | */ |
| 290 | 290 | function tester_statut_inscription($statut_tmp, $id) { |
| 291 | - include_spip('inc/autoriser'); |
|
| 292 | - if ($statut_tmp) { |
|
| 293 | - return autoriser('inscrireauteur', $statut_tmp, $id) ? $statut_tmp : ''; |
|
| 294 | - } elseif ( |
|
| 295 | - autoriser('inscrireauteur', $statut_tmp = '1comite', $id) |
|
| 296 | - or autoriser('inscrireauteur', $statut_tmp = '6forum', $id) |
|
| 297 | - ) { |
|
| 298 | - return $statut_tmp; |
|
| 299 | - } |
|
| 300 | - |
|
| 301 | - return ''; |
|
| 291 | + include_spip('inc/autoriser'); |
|
| 292 | + if ($statut_tmp) { |
|
| 293 | + return autoriser('inscrireauteur', $statut_tmp, $id) ? $statut_tmp : ''; |
|
| 294 | + } elseif ( |
|
| 295 | + autoriser('inscrireauteur', $statut_tmp = '1comite', $id) |
|
| 296 | + or autoriser('inscrireauteur', $statut_tmp = '6forum', $id) |
|
| 297 | + ) { |
|
| 298 | + return $statut_tmp; |
|
| 299 | + } |
|
| 300 | + |
|
| 301 | + return ''; |
|
| 302 | 302 | } |
| 303 | 303 | |
| 304 | 304 | |
@@ -312,35 +312,35 @@ discard block |
||
| 312 | 312 | * @return array |
| 313 | 313 | */ |
| 314 | 314 | function confirmer_statut_inscription($auteur) { |
| 315 | - // securite |
|
| 316 | - if ($auteur['statut'] != 'nouveau') { |
|
| 317 | - return $auteur; |
|
| 318 | - } |
|
| 319 | - |
|
| 320 | - $s = $auteur['prefs']; |
|
| 321 | - // securite, au cas ou prefs aurait ete corrompu (ou deja ecrase par un tableau serialize) |
|
| 322 | - if (!preg_match(',^\w+$,', $s)) { |
|
| 323 | - $s = '6forum'; |
|
| 324 | - } |
|
| 325 | - include_spip('inc/autoriser'); |
|
| 326 | - if (!autoriser('inscrireauteur', $s)) { |
|
| 327 | - return $auteur; |
|
| 328 | - } |
|
| 329 | - |
|
| 330 | - include_spip('inc/autoriser'); |
|
| 331 | - // accorder l'autorisation de modif du statut auteur |
|
| 332 | - autoriser_exception('modifier', 'auteur', $auteur['id_auteur']); |
|
| 333 | - include_spip('action/editer_auteur'); |
|
| 334 | - // changer le statut |
|
| 335 | - auteur_modifier($auteur['id_auteur'], ['statut' => $s]); |
|
| 336 | - unset($_COOKIE['spip_session']); // forcer la maj de la session |
|
| 337 | - // lever l'autorisation de modif du statut auteur |
|
| 338 | - autoriser_exception('modifier', 'auteur', $auteur['id_auteur'], false); |
|
| 339 | - |
|
| 340 | - // mettre a jour le statut |
|
| 341 | - $auteur['statut'] = $s; |
|
| 342 | - |
|
| 343 | - return $auteur; |
|
| 315 | + // securite |
|
| 316 | + if ($auteur['statut'] != 'nouveau') { |
|
| 317 | + return $auteur; |
|
| 318 | + } |
|
| 319 | + |
|
| 320 | + $s = $auteur['prefs']; |
|
| 321 | + // securite, au cas ou prefs aurait ete corrompu (ou deja ecrase par un tableau serialize) |
|
| 322 | + if (!preg_match(',^\w+$,', $s)) { |
|
| 323 | + $s = '6forum'; |
|
| 324 | + } |
|
| 325 | + include_spip('inc/autoriser'); |
|
| 326 | + if (!autoriser('inscrireauteur', $s)) { |
|
| 327 | + return $auteur; |
|
| 328 | + } |
|
| 329 | + |
|
| 330 | + include_spip('inc/autoriser'); |
|
| 331 | + // accorder l'autorisation de modif du statut auteur |
|
| 332 | + autoriser_exception('modifier', 'auteur', $auteur['id_auteur']); |
|
| 333 | + include_spip('action/editer_auteur'); |
|
| 334 | + // changer le statut |
|
| 335 | + auteur_modifier($auteur['id_auteur'], ['statut' => $s]); |
|
| 336 | + unset($_COOKIE['spip_session']); // forcer la maj de la session |
|
| 337 | + // lever l'autorisation de modif du statut auteur |
|
| 338 | + autoriser_exception('modifier', 'auteur', $auteur['id_auteur'], false); |
|
| 339 | + |
|
| 340 | + // mettre a jour le statut |
|
| 341 | + $auteur['statut'] = $s; |
|
| 342 | + |
|
| 343 | + return $auteur; |
|
| 344 | 344 | } |
| 345 | 345 | |
| 346 | 346 | |
@@ -354,20 +354,20 @@ discard block |
||
| 354 | 354 | * @return string |
| 355 | 355 | */ |
| 356 | 356 | function auteur_attribuer_jeton($id_auteur): string { |
| 357 | - include_spip('base/abstract_sql'); |
|
| 358 | - include_spip('inc/acces'); |
|
| 359 | - include_spip('inc/chiffrer'); |
|
| 360 | - // s'assurer de l'unicite du jeton pour le couple (email,cookie) |
|
| 361 | - do { |
|
| 362 | - // Un morceau du jeton est lisible en bdd pour éviter de devoir déchiffrer |
|
| 363 | - // tous les jetons connus pour vérifier le jeton d’un auteur. |
|
| 364 | - $public = substr(creer_uniqid(), 0, 7) . '.'; |
|
| 365 | - $jeton = $public . creer_uniqid(); |
|
| 366 | - $jeton_chiffre_prefixe = $public . Chiffrement::chiffrer($jeton, SpipCles::secret_du_site()); |
|
| 367 | - sql_updateq('spip_auteurs', ['cookie_oubli' => $jeton_chiffre_prefixe], 'id_auteur=' . intval($id_auteur)); |
|
| 368 | - } while (sql_countsel('spip_auteurs', 'cookie_oubli=' . sql_quote($jeton_chiffre_prefixe, '', 'string')) > 1); |
|
| 369 | - |
|
| 370 | - return $jeton; |
|
| 357 | + include_spip('base/abstract_sql'); |
|
| 358 | + include_spip('inc/acces'); |
|
| 359 | + include_spip('inc/chiffrer'); |
|
| 360 | + // s'assurer de l'unicite du jeton pour le couple (email,cookie) |
|
| 361 | + do { |
|
| 362 | + // Un morceau du jeton est lisible en bdd pour éviter de devoir déchiffrer |
|
| 363 | + // tous les jetons connus pour vérifier le jeton d’un auteur. |
|
| 364 | + $public = substr(creer_uniqid(), 0, 7) . '.'; |
|
| 365 | + $jeton = $public . creer_uniqid(); |
|
| 366 | + $jeton_chiffre_prefixe = $public . Chiffrement::chiffrer($jeton, SpipCles::secret_du_site()); |
|
| 367 | + sql_updateq('spip_auteurs', ['cookie_oubli' => $jeton_chiffre_prefixe], 'id_auteur=' . intval($id_auteur)); |
|
| 368 | + } while (sql_countsel('spip_auteurs', 'cookie_oubli=' . sql_quote($jeton_chiffre_prefixe, '', 'string')) > 1); |
|
| 369 | + |
|
| 370 | + return $jeton; |
|
| 371 | 371 | } |
| 372 | 372 | |
| 373 | 373 | /** |
@@ -381,20 +381,20 @@ discard block |
||
| 381 | 381 | * @return string|null |
| 382 | 382 | */ |
| 383 | 383 | function auteur_lire_jeton(int $id_auteur, bool $autoInit = false): ?string { |
| 384 | - include_spip('base/abstract_sql'); |
|
| 385 | - $jeton_chiffre_prefixe = sql_getfetsel('cookie_oubli', 'spip_auteurs', 'id_auteur=' . $id_auteur); |
|
| 386 | - if ($jeton_chiffre_prefixe) { |
|
| 387 | - include_spip('inc/chiffrer'); |
|
| 388 | - $jeton_chiffre = substr($jeton_chiffre_prefixe, 8); |
|
| 389 | - $jeton = Chiffrement::dechiffrer($jeton_chiffre, SpipCles::secret_du_site()); |
|
| 390 | - if ($jeton) { |
|
| 391 | - return $jeton; |
|
| 392 | - } |
|
| 393 | - } |
|
| 394 | - if ($autoInit) { |
|
| 395 | - return auteur_attribuer_jeton($id_auteur); |
|
| 396 | - } |
|
| 397 | - return null; |
|
| 384 | + include_spip('base/abstract_sql'); |
|
| 385 | + $jeton_chiffre_prefixe = sql_getfetsel('cookie_oubli', 'spip_auteurs', 'id_auteur=' . $id_auteur); |
|
| 386 | + if ($jeton_chiffre_prefixe) { |
|
| 387 | + include_spip('inc/chiffrer'); |
|
| 388 | + $jeton_chiffre = substr($jeton_chiffre_prefixe, 8); |
|
| 389 | + $jeton = Chiffrement::dechiffrer($jeton_chiffre, SpipCles::secret_du_site()); |
|
| 390 | + if ($jeton) { |
|
| 391 | + return $jeton; |
|
| 392 | + } |
|
| 393 | + } |
|
| 394 | + if ($autoInit) { |
|
| 395 | + return auteur_attribuer_jeton($id_auteur); |
|
| 396 | + } |
|
| 397 | + return null; |
|
| 398 | 398 | } |
| 399 | 399 | |
| 400 | 400 | /** |
@@ -404,25 +404,25 @@ discard block |
||
| 404 | 404 | * @return array|bool |
| 405 | 405 | */ |
| 406 | 406 | function auteur_verifier_jeton($jeton) { |
| 407 | - // refuser un jeton corrompu |
|
| 408 | - if (preg_match(',[^0-9a-f.],i', $jeton)) { |
|
| 409 | - return false; |
|
| 410 | - } |
|
| 411 | - |
|
| 412 | - include_spip('base/abstract_sql'); |
|
| 413 | - include_spip('inc/chiffrer'); |
|
| 414 | - $public = substr($jeton, 0, 8); |
|
| 415 | - |
|
| 416 | - // Les auteurs qui ont un jetons ressemblant |
|
| 417 | - $auteurs = sql_allfetsel('*', 'spip_auteurs', 'cookie_oubli LIKE ' . sql_quote($public . '%')); |
|
| 418 | - foreach ($auteurs as $auteur) { |
|
| 419 | - $jeton_chiffre = substr($auteur['cookie_oubli'], 8); |
|
| 420 | - $_jeton = Chiffrement::dechiffrer($jeton_chiffre, SpipCles::secret_du_site()); |
|
| 421 | - if ($_jeton and hash_equals($jeton, $_jeton)) { |
|
| 422 | - return $auteur; |
|
| 423 | - } |
|
| 424 | - } |
|
| 425 | - return false; |
|
| 407 | + // refuser un jeton corrompu |
|
| 408 | + if (preg_match(',[^0-9a-f.],i', $jeton)) { |
|
| 409 | + return false; |
|
| 410 | + } |
|
| 411 | + |
|
| 412 | + include_spip('base/abstract_sql'); |
|
| 413 | + include_spip('inc/chiffrer'); |
|
| 414 | + $public = substr($jeton, 0, 8); |
|
| 415 | + |
|
| 416 | + // Les auteurs qui ont un jetons ressemblant |
|
| 417 | + $auteurs = sql_allfetsel('*', 'spip_auteurs', 'cookie_oubli LIKE ' . sql_quote($public . '%')); |
|
| 418 | + foreach ($auteurs as $auteur) { |
|
| 419 | + $jeton_chiffre = substr($auteur['cookie_oubli'], 8); |
|
| 420 | + $_jeton = Chiffrement::dechiffrer($jeton_chiffre, SpipCles::secret_du_site()); |
|
| 421 | + if ($_jeton and hash_equals($jeton, $_jeton)) { |
|
| 422 | + return $auteur; |
|
| 423 | + } |
|
| 424 | + } |
|
| 425 | + return false; |
|
| 426 | 426 | } |
| 427 | 427 | |
| 428 | 428 | /** |
@@ -432,6 +432,6 @@ discard block |
||
| 432 | 432 | * @return bool |
| 433 | 433 | */ |
| 434 | 434 | function auteur_effacer_jeton($id_auteur) { |
| 435 | - include_spip('base/abstract_sql'); |
|
| 436 | - return sql_updateq('spip_auteurs', ['cookie_oubli' => ''], 'id_auteur=' . intval($id_auteur)); |
|
| 435 | + include_spip('base/abstract_sql'); |
|
| 436 | + return sql_updateq('spip_auteurs', ['cookie_oubli' => ''], 'id_auteur=' . intval($id_auteur)); |
|
| 437 | 437 | } |
@@ -61,7 +61,7 @@ discard block |
||
| 61 | 61 | } |
| 62 | 62 | |
| 63 | 63 | include_spip('base/abstract_sql'); |
| 64 | - $res = sql_select('statut, id_auteur, login, email, nom', 'spip_auteurs', 'email=' . sql_quote($desc['email'])); |
|
| 64 | + $res = sql_select('statut, id_auteur, login, email, nom', 'spip_auteurs', 'email='.sql_quote($desc['email'])); |
|
| 65 | 65 | // erreur ? |
| 66 | 66 | if (!$res) { |
| 67 | 67 | return _T('titre_probleme_technique'); |
@@ -217,11 +217,11 @@ discard block |
||
| 217 | 217 | |
| 218 | 218 | $login = $login_base; |
| 219 | 219 | |
| 220 | - for ($i = 1;; $i++) { |
|
| 220 | + for ($i = 1; ; $i++) { |
|
| 221 | 221 | if (!sql_countsel('spip_auteurs', "login='$login'")) { |
| 222 | 222 | return $login; |
| 223 | 223 | } |
| 224 | - $login = $login_base . $i; |
|
| 224 | + $login = $login_base.$i; |
|
| 225 | 225 | } |
| 226 | 226 | } |
| 227 | 227 | |
@@ -361,11 +361,11 @@ discard block |
||
| 361 | 361 | do { |
| 362 | 362 | // Un morceau du jeton est lisible en bdd pour éviter de devoir déchiffrer |
| 363 | 363 | // tous les jetons connus pour vérifier le jeton d’un auteur. |
| 364 | - $public = substr(creer_uniqid(), 0, 7) . '.'; |
|
| 365 | - $jeton = $public . creer_uniqid(); |
|
| 366 | - $jeton_chiffre_prefixe = $public . Chiffrement::chiffrer($jeton, SpipCles::secret_du_site()); |
|
| 367 | - sql_updateq('spip_auteurs', ['cookie_oubli' => $jeton_chiffre_prefixe], 'id_auteur=' . intval($id_auteur)); |
|
| 368 | - } while (sql_countsel('spip_auteurs', 'cookie_oubli=' . sql_quote($jeton_chiffre_prefixe, '', 'string')) > 1); |
|
| 364 | + $public = substr(creer_uniqid(), 0, 7).'.'; |
|
| 365 | + $jeton = $public.creer_uniqid(); |
|
| 366 | + $jeton_chiffre_prefixe = $public.Chiffrement::chiffrer($jeton, SpipCles::secret_du_site()); |
|
| 367 | + sql_updateq('spip_auteurs', ['cookie_oubli' => $jeton_chiffre_prefixe], 'id_auteur='.intval($id_auteur)); |
|
| 368 | + } while (sql_countsel('spip_auteurs', 'cookie_oubli='.sql_quote($jeton_chiffre_prefixe, '', 'string')) > 1); |
|
| 369 | 369 | |
| 370 | 370 | return $jeton; |
| 371 | 371 | } |
@@ -382,7 +382,7 @@ discard block |
||
| 382 | 382 | */ |
| 383 | 383 | function auteur_lire_jeton(int $id_auteur, bool $autoInit = false): ?string { |
| 384 | 384 | include_spip('base/abstract_sql'); |
| 385 | - $jeton_chiffre_prefixe = sql_getfetsel('cookie_oubli', 'spip_auteurs', 'id_auteur=' . $id_auteur); |
|
| 385 | + $jeton_chiffre_prefixe = sql_getfetsel('cookie_oubli', 'spip_auteurs', 'id_auteur='.$id_auteur); |
|
| 386 | 386 | if ($jeton_chiffre_prefixe) { |
| 387 | 387 | include_spip('inc/chiffrer'); |
| 388 | 388 | $jeton_chiffre = substr($jeton_chiffre_prefixe, 8); |
@@ -414,7 +414,7 @@ discard block |
||
| 414 | 414 | $public = substr($jeton, 0, 8); |
| 415 | 415 | |
| 416 | 416 | // Les auteurs qui ont un jetons ressemblant |
| 417 | - $auteurs = sql_allfetsel('*', 'spip_auteurs', 'cookie_oubli LIKE ' . sql_quote($public . '%')); |
|
| 417 | + $auteurs = sql_allfetsel('*', 'spip_auteurs', 'cookie_oubli LIKE '.sql_quote($public.'%')); |
|
| 418 | 418 | foreach ($auteurs as $auteur) { |
| 419 | 419 | $jeton_chiffre = substr($auteur['cookie_oubli'], 8); |
| 420 | 420 | $_jeton = Chiffrement::dechiffrer($jeton_chiffre, SpipCles::secret_du_site()); |
@@ -433,5 +433,5 @@ discard block |
||
| 433 | 433 | */ |
| 434 | 434 | function auteur_effacer_jeton($id_auteur) { |
| 435 | 435 | include_spip('base/abstract_sql'); |
| 436 | - return sql_updateq('spip_auteurs', ['cookie_oubli' => ''], 'id_auteur=' . intval($id_auteur)); |
|
| 436 | + return sql_updateq('spip_auteurs', ['cookie_oubli' => ''], 'id_auteur='.intval($id_auteur)); |
|
| 437 | 437 | } |
@@ -2,439 +2,439 @@ discard block |
||
| 2 | 2 | // This is a SPIP language file -- Ceci est un fichier langue de SPIP |
| 3 | 3 | // Fichier source, a modifier dans https://git.spip.net/spip/spip.git |
| 4 | 4 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 5 | - return; |
|
| 5 | + return; |
|
| 6 | 6 | } |
| 7 | 7 | |
| 8 | 8 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 9 | 9 | |
| 10 | - // A |
|
| 11 | - 'activer_plugin' => 'Activer le plugin', |
|
| 12 | - 'affichage' => 'Affichage', |
|
| 13 | - 'aide_non_disponible' => 'Cette partie de l’aide en ligne n’est pas encore disponible dans cette langue.', |
|
| 14 | - 'annuler_recherche' => 'Annuler la recherche', |
|
| 15 | - 'auteur' => 'Auteur :', |
|
| 16 | - 'avis_acces_interdit' => 'Accès interdit.', |
|
| 17 | - 'avis_acces_interdit_prive' => 'Vous n’avez pas le droit d’accéder à la page <b>@exec@</b>.', |
|
| 18 | - 'avis_article_modifie' => 'Attention, @nom_auteur_modif@ a travaillé sur cet article il y a @date_diff@ minutes', |
|
| 19 | - 'avis_aucun_resultat' => 'Aucun résultat.', |
|
| 20 | - 'avis_base_inaccessible' => 'Impossible de se connecter à la base de données @base@.', |
|
| 21 | - 'avis_chemin_invalide_1' => 'Le chemin que vous avez choisi', |
|
| 22 | - 'avis_chemin_invalide_2' => 'ne semble pas valide. Veuillez retourner à la page précédente et vérifier les informations fournies.', |
|
| 23 | - 'avis_connexion_echec_1' => 'La connexion à la base de données a échoué.', |
|
| 24 | - 'avis_connexion_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', |
|
| 25 | - 'avis_connexion_echec_3' => '<b>N.B.</b> Sur de nombreux serveurs, vous devez <b>demander</b> l’activation de votre accès à la base de données avant de pouvoir l’utiliser. Si vous ne pouvez vous connecter, vérifiez que vous avez effectué cette démarche.', |
|
| 26 | - 'avis_connexion_erreur_creer_base' => 'La base de données n’a pas pu être créée.', |
|
| 27 | - 'avis_connexion_erreur_fichier_cle_manquant_1' => 'L\'installation doit être faite par un webmestre avec un backup des clés et son mot de passe', |
|
| 28 | - 'avis_connexion_erreur_fichier_cle_manquant_2' => 'L\'installation doit être faite par un webmestre avec un backup des clés', |
|
| 29 | - 'avis_connexion_erreur_nom_base' => 'Le nom de la base ne peut contenir que des lettres, des chiffres et des tirets', |
|
| 30 | - 'avis_connexion_ldap_echec_1' => 'La connexion au serveur LDAP a échoué.', |
|
| 31 | - 'avis_connexion_ldap_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', |
|
| 32 | - 'avis_connexion_ldap_echec_3' => 'Alternativement, n’utilisez pas le support LDAP pour importer des utilisateurs.', |
|
| 33 | - 'avis_deplacement_rubrique' => 'Attention ! Cette rubrique contient @contient_breves@ brève@scb@ : si vous la déplacez, veuillez cocher cette case de confirmation.', |
|
| 34 | - 'avis_erreur_connexion_mysql' => 'Erreur de connexion SQL', |
|
| 35 | - 'avis_erreur_creation_compte' => 'Echec lors de l\'initialisation du compte', |
|
| 36 | - 'avis_espace_interdit' => '<b>Espace interdit</b> <div>SPIP est déjà installé.</div>', |
|
| 37 | - 'avis_lecture_noms_bases_1' => 'Le programme d’installation n’a pas pu lire les noms des bases de données installées.', |
|
| 38 | - 'avis_lecture_noms_bases_2' => 'Soit aucune base n’est disponible, soit la fonction permettant de lister les bases a été désactivée |
|
| 10 | + // A |
|
| 11 | + 'activer_plugin' => 'Activer le plugin', |
|
| 12 | + 'affichage' => 'Affichage', |
|
| 13 | + 'aide_non_disponible' => 'Cette partie de l’aide en ligne n’est pas encore disponible dans cette langue.', |
|
| 14 | + 'annuler_recherche' => 'Annuler la recherche', |
|
| 15 | + 'auteur' => 'Auteur :', |
|
| 16 | + 'avis_acces_interdit' => 'Accès interdit.', |
|
| 17 | + 'avis_acces_interdit_prive' => 'Vous n’avez pas le droit d’accéder à la page <b>@exec@</b>.', |
|
| 18 | + 'avis_article_modifie' => 'Attention, @nom_auteur_modif@ a travaillé sur cet article il y a @date_diff@ minutes', |
|
| 19 | + 'avis_aucun_resultat' => 'Aucun résultat.', |
|
| 20 | + 'avis_base_inaccessible' => 'Impossible de se connecter à la base de données @base@.', |
|
| 21 | + 'avis_chemin_invalide_1' => 'Le chemin que vous avez choisi', |
|
| 22 | + 'avis_chemin_invalide_2' => 'ne semble pas valide. Veuillez retourner à la page précédente et vérifier les informations fournies.', |
|
| 23 | + 'avis_connexion_echec_1' => 'La connexion à la base de données a échoué.', |
|
| 24 | + 'avis_connexion_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', |
|
| 25 | + 'avis_connexion_echec_3' => '<b>N.B.</b> Sur de nombreux serveurs, vous devez <b>demander</b> l’activation de votre accès à la base de données avant de pouvoir l’utiliser. Si vous ne pouvez vous connecter, vérifiez que vous avez effectué cette démarche.', |
|
| 26 | + 'avis_connexion_erreur_creer_base' => 'La base de données n’a pas pu être créée.', |
|
| 27 | + 'avis_connexion_erreur_fichier_cle_manquant_1' => 'L\'installation doit être faite par un webmestre avec un backup des clés et son mot de passe', |
|
| 28 | + 'avis_connexion_erreur_fichier_cle_manquant_2' => 'L\'installation doit être faite par un webmestre avec un backup des clés', |
|
| 29 | + 'avis_connexion_erreur_nom_base' => 'Le nom de la base ne peut contenir que des lettres, des chiffres et des tirets', |
|
| 30 | + 'avis_connexion_ldap_echec_1' => 'La connexion au serveur LDAP a échoué.', |
|
| 31 | + 'avis_connexion_ldap_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', |
|
| 32 | + 'avis_connexion_ldap_echec_3' => 'Alternativement, n’utilisez pas le support LDAP pour importer des utilisateurs.', |
|
| 33 | + 'avis_deplacement_rubrique' => 'Attention ! Cette rubrique contient @contient_breves@ brève@scb@ : si vous la déplacez, veuillez cocher cette case de confirmation.', |
|
| 34 | + 'avis_erreur_connexion_mysql' => 'Erreur de connexion SQL', |
|
| 35 | + 'avis_erreur_creation_compte' => 'Echec lors de l\'initialisation du compte', |
|
| 36 | + 'avis_espace_interdit' => '<b>Espace interdit</b> <div>SPIP est déjà installé.</div>', |
|
| 37 | + 'avis_lecture_noms_bases_1' => 'Le programme d’installation n’a pas pu lire les noms des bases de données installées.', |
|
| 38 | + 'avis_lecture_noms_bases_2' => 'Soit aucune base n’est disponible, soit la fonction permettant de lister les bases a été désactivée |
|
| 39 | 39 | pour des raisons de sécurité (ce qui est le cas chez de nombreux hébergeurs).', |
| 40 | - 'avis_lecture_noms_bases_3' => 'Dans la seconde alternative, il est probable qu’une base portant votre nom de login soit utilisable :', |
|
| 41 | - 'avis_non_acces_page' => 'Vous n’avez pas accès à cette page.', |
|
| 42 | - 'avis_operation_echec' => 'L’opération a échoué.', |
|
| 43 | - 'avis_operation_impossible' => 'Opération impossible', |
|
| 44 | - 'avis_suppression_base' => 'ATTENTION, la suppression des données est irréversible', |
|
| 40 | + 'avis_lecture_noms_bases_3' => 'Dans la seconde alternative, il est probable qu’une base portant votre nom de login soit utilisable :', |
|
| 41 | + 'avis_non_acces_page' => 'Vous n’avez pas accès à cette page.', |
|
| 42 | + 'avis_operation_echec' => 'L’opération a échoué.', |
|
| 43 | + 'avis_operation_impossible' => 'Opération impossible', |
|
| 44 | + 'avis_suppression_base' => 'ATTENTION, la suppression des données est irréversible', |
|
| 45 | 45 | |
| 46 | - // B |
|
| 47 | - 'bouton_acces_ldap' => 'Ajouter l’accès à LDAP', |
|
| 48 | - 'bouton_ajouter' => 'Ajouter', |
|
| 49 | - 'bouton_annuler' => 'Annuler', |
|
| 50 | - 'bouton_cache_activer' => 'Réactiver le cache', |
|
| 51 | - 'bouton_cache_desactiver' => 'Désactiver temporairement le cache', |
|
| 52 | - 'bouton_demande_publication' => 'Demander la publication de cet article', |
|
| 53 | - 'bouton_desactive_tout' => 'Tout désactiver', |
|
| 54 | - 'bouton_desinstaller' => 'Désinstaller', |
|
| 55 | - 'bouton_effacer_tout' => 'Effacer TOUT', |
|
| 56 | - 'bouton_envoyer_message' => 'Message définitif : envoyer', |
|
| 57 | - 'bouton_fermer' => 'Fermer', |
|
| 58 | - 'bouton_mettre_a_jour_base' => 'Mettre à jour la base de données', |
|
| 59 | - 'bouton_modifier' => 'Modifier', |
|
| 60 | - 'bouton_radio_afficher' => 'Afficher', |
|
| 61 | - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Apparaître dans la liste des rédacteurs connectés', |
|
| 62 | - 'bouton_radio_envoi_annonces_adresse' => 'Envoyer les annonces à l’adresse :', |
|
| 63 | - 'bouton_radio_envoi_liste_nouveautes' => 'Envoyer la liste des nouveautés', |
|
| 64 | - 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ne pas apparaître dans la liste des rédacteurs', |
|
| 65 | - 'bouton_radio_non_envoi_annonces_editoriales' => 'Ne pas envoyer d’annonces éditoriales', |
|
| 66 | - 'bouton_redirection' => 'REDIRECTION', |
|
| 67 | - 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Réinitialiser aux valeurs par défaut', |
|
| 68 | - 'bouton_relancer_inscription' => 'Relancer l’inscription', |
|
| 69 | - 'bouton_relancer_inscriptions' => 'Relancer les inscriptions', |
|
| 70 | - 'bouton_relancer_installation' => 'Relancer l’installation', |
|
| 71 | - 'bouton_reset_password' => 'Générer un nouveau mot de passe et l’envoyer par email', |
|
| 72 | - 'bouton_suivant' => 'Suivant', |
|
| 73 | - 'bouton_tenter_recuperation' => 'Tenter une réparation', |
|
| 74 | - 'bouton_test_proxy' => 'Essayer le proxy', |
|
| 75 | - 'bouton_vider_cache' => 'Vider le cache', |
|
| 46 | + // B |
|
| 47 | + 'bouton_acces_ldap' => 'Ajouter l’accès à LDAP', |
|
| 48 | + 'bouton_ajouter' => 'Ajouter', |
|
| 49 | + 'bouton_annuler' => 'Annuler', |
|
| 50 | + 'bouton_cache_activer' => 'Réactiver le cache', |
|
| 51 | + 'bouton_cache_desactiver' => 'Désactiver temporairement le cache', |
|
| 52 | + 'bouton_demande_publication' => 'Demander la publication de cet article', |
|
| 53 | + 'bouton_desactive_tout' => 'Tout désactiver', |
|
| 54 | + 'bouton_desinstaller' => 'Désinstaller', |
|
| 55 | + 'bouton_effacer_tout' => 'Effacer TOUT', |
|
| 56 | + 'bouton_envoyer_message' => 'Message définitif : envoyer', |
|
| 57 | + 'bouton_fermer' => 'Fermer', |
|
| 58 | + 'bouton_mettre_a_jour_base' => 'Mettre à jour la base de données', |
|
| 59 | + 'bouton_modifier' => 'Modifier', |
|
| 60 | + 'bouton_radio_afficher' => 'Afficher', |
|
| 61 | + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Apparaître dans la liste des rédacteurs connectés', |
|
| 62 | + 'bouton_radio_envoi_annonces_adresse' => 'Envoyer les annonces à l’adresse :', |
|
| 63 | + 'bouton_radio_envoi_liste_nouveautes' => 'Envoyer la liste des nouveautés', |
|
| 64 | + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ne pas apparaître dans la liste des rédacteurs', |
|
| 65 | + 'bouton_radio_non_envoi_annonces_editoriales' => 'Ne pas envoyer d’annonces éditoriales', |
|
| 66 | + 'bouton_redirection' => 'REDIRECTION', |
|
| 67 | + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Réinitialiser aux valeurs par défaut', |
|
| 68 | + 'bouton_relancer_inscription' => 'Relancer l’inscription', |
|
| 69 | + 'bouton_relancer_inscriptions' => 'Relancer les inscriptions', |
|
| 70 | + 'bouton_relancer_installation' => 'Relancer l’installation', |
|
| 71 | + 'bouton_reset_password' => 'Générer un nouveau mot de passe et l’envoyer par email', |
|
| 72 | + 'bouton_suivant' => 'Suivant', |
|
| 73 | + 'bouton_tenter_recuperation' => 'Tenter une réparation', |
|
| 74 | + 'bouton_test_proxy' => 'Essayer le proxy', |
|
| 75 | + 'bouton_vider_cache' => 'Vider le cache', |
|
| 76 | 76 | |
| 77 | - // C |
|
| 78 | - 'cache_modifiable_webmestre' => 'Ce paramètre est modifiable par le webmestre du site.', |
|
| 79 | - 'calendrier_synchro' => 'Si vous utilisez un logiciel d’agenda compatible <b>iCal</b>, vous pouvez le synchroniser avec les informations de ce site.', |
|
| 80 | - 'config_activer_champs' => 'Activer les champs suivants', |
|
| 81 | - 'config_choix_base_sup' => 'indiquer une base sur ce serveur', |
|
| 82 | - 'config_erreur_base_sup' => 'SPIP n’a pas accès à la liste des bases accessibles', |
|
| 83 | - 'config_info_base_sup' => 'Si vous avez d’autres bases de données à interroger à travers SPIP, avec son serveur SQL ou avec un autre, le formulaire ci-dessous, vous permet de les déclarer. Si vous laissez certains champs vides, les identifiants de connexion à la base principale seront utilisés.', |
|
| 84 | - 'config_info_base_sup_disponibles' => 'Bases supplémentaires déjà interrogeables :', |
|
| 85 | - 'config_info_enregistree' => 'La nouvelle configuration a été enregistrée', |
|
| 86 | - 'config_info_logos' => 'Chaque élément du site peut avoir un logo, ainsi qu’un « logo de survol »', |
|
| 87 | - 'config_info_logos_utiliser' => 'Utiliser les logos', |
|
| 88 | - 'config_info_logos_utiliser_non' => 'Ne pas utiliser les logos', |
|
| 89 | - 'config_info_logos_utiliser_survol' => 'Utiliser les logos de survol', |
|
| 90 | - 'config_info_logos_utiliser_survol_non' => 'Ne pas utiliser les logos de survol', |
|
| 91 | - 'config_info_redirection' => 'En activant cette option, vous pourrez créer des articles virtuels, simples références d’articles publiés sur d’autres sites ou hors de SPIP.', |
|
| 92 | - 'config_redirection' => 'Articles virtuels', |
|
| 93 | - 'config_titre_base_sup' => 'Déclaration d’une base supplémentaire', |
|
| 94 | - 'config_titre_base_sup_choix' => 'Choisissez une base supplémentaire', |
|
| 95 | - 'connexion_ldap' => 'Connexion :', |
|
| 96 | - 'creer_et_associer_un_auteur' => 'Créer et associer un auteur', |
|
| 77 | + // C |
|
| 78 | + 'cache_modifiable_webmestre' => 'Ce paramètre est modifiable par le webmestre du site.', |
|
| 79 | + 'calendrier_synchro' => 'Si vous utilisez un logiciel d’agenda compatible <b>iCal</b>, vous pouvez le synchroniser avec les informations de ce site.', |
|
| 80 | + 'config_activer_champs' => 'Activer les champs suivants', |
|
| 81 | + 'config_choix_base_sup' => 'indiquer une base sur ce serveur', |
|
| 82 | + 'config_erreur_base_sup' => 'SPIP n’a pas accès à la liste des bases accessibles', |
|
| 83 | + 'config_info_base_sup' => 'Si vous avez d’autres bases de données à interroger à travers SPIP, avec son serveur SQL ou avec un autre, le formulaire ci-dessous, vous permet de les déclarer. Si vous laissez certains champs vides, les identifiants de connexion à la base principale seront utilisés.', |
|
| 84 | + 'config_info_base_sup_disponibles' => 'Bases supplémentaires déjà interrogeables :', |
|
| 85 | + 'config_info_enregistree' => 'La nouvelle configuration a été enregistrée', |
|
| 86 | + 'config_info_logos' => 'Chaque élément du site peut avoir un logo, ainsi qu’un « logo de survol »', |
|
| 87 | + 'config_info_logos_utiliser' => 'Utiliser les logos', |
|
| 88 | + 'config_info_logos_utiliser_non' => 'Ne pas utiliser les logos', |
|
| 89 | + 'config_info_logos_utiliser_survol' => 'Utiliser les logos de survol', |
|
| 90 | + 'config_info_logos_utiliser_survol_non' => 'Ne pas utiliser les logos de survol', |
|
| 91 | + 'config_info_redirection' => 'En activant cette option, vous pourrez créer des articles virtuels, simples références d’articles publiés sur d’autres sites ou hors de SPIP.', |
|
| 92 | + 'config_redirection' => 'Articles virtuels', |
|
| 93 | + 'config_titre_base_sup' => 'Déclaration d’une base supplémentaire', |
|
| 94 | + 'config_titre_base_sup_choix' => 'Choisissez une base supplémentaire', |
|
| 95 | + 'connexion_ldap' => 'Connexion :', |
|
| 96 | + 'creer_et_associer_un_auteur' => 'Créer et associer un auteur', |
|
| 97 | 97 | |
| 98 | - // D |
|
| 99 | - 'date_mot_heures' => 'heures', |
|
| 98 | + // D |
|
| 99 | + 'date_mot_heures' => 'heures', |
|
| 100 | 100 | |
| 101 | - // E |
|
| 102 | - 'ecran_connexion_couleur_principale' => 'Couleur principale', |
|
| 103 | - 'ecran_connexion_image_fond' => 'Image de fond', |
|
| 104 | - 'ecran_connexion_image_fond_explication' => 'Utiliser une image (format JPEG, 1920x1080 pixels)', |
|
| 105 | - 'ecran_connexion_image_revenir_couleur_defaut' => 'Revenir à la couleur par défaut', |
|
| 106 | - 'ecran_connexion_titre' => 'Écran de connexion', |
|
| 107 | - 'ecran_securite' => ' + écran de sécurité @version@', |
|
| 108 | - 'email' => 'email', |
|
| 109 | - 'email_2' => 'email :', |
|
| 110 | - 'en_savoir_plus' => 'En savoir plus', |
|
| 111 | - 'entree_adresse_annuaire' => 'Adresse de l’annuaire', |
|
| 112 | - 'entree_adresse_email' => 'Votre adresse email', |
|
| 113 | - 'entree_adresse_email_2' => 'Adresse email', |
|
| 114 | - 'entree_base_donnee_1' => 'Adresse de la base de données', |
|
| 115 | - 'entree_base_donnee_2' => '(Souvent cette adresse correspond à celle de votre site, parfois elle correspond à la mention « localhost », parfois elle est laissée totalement vide.)', |
|
| 116 | - 'entree_biographie' => 'Courte biographie en quelques mots.', |
|
| 117 | - 'entree_chemin_acces' => '<b>Entrer</b> le chemin d’accès :', |
|
| 118 | - 'entree_cle_pgp' => 'Votre clé PGP', |
|
| 119 | - 'entree_cle_pgp_2' => 'Clé PGP', |
|
| 120 | - 'entree_contenu_rubrique' => '(Contenu de la rubrique en quelques mots.)', |
|
| 121 | - 'entree_identifiants_connexion' => 'Vos identifiants de connexion...', |
|
| 122 | - 'entree_identifiants_connexion_2' => 'Identifiants de connexion', |
|
| 123 | - 'entree_informations_connexion_ldap' => 'Veuillez entrer dans ce formulaire les informations de connexion à votre annuaire LDAP. |
|
| 101 | + // E |
|
| 102 | + 'ecran_connexion_couleur_principale' => 'Couleur principale', |
|
| 103 | + 'ecran_connexion_image_fond' => 'Image de fond', |
|
| 104 | + 'ecran_connexion_image_fond_explication' => 'Utiliser une image (format JPEG, 1920x1080 pixels)', |
|
| 105 | + 'ecran_connexion_image_revenir_couleur_defaut' => 'Revenir à la couleur par défaut', |
|
| 106 | + 'ecran_connexion_titre' => 'Écran de connexion', |
|
| 107 | + 'ecran_securite' => ' + écran de sécurité @version@', |
|
| 108 | + 'email' => 'email', |
|
| 109 | + 'email_2' => 'email :', |
|
| 110 | + 'en_savoir_plus' => 'En savoir plus', |
|
| 111 | + 'entree_adresse_annuaire' => 'Adresse de l’annuaire', |
|
| 112 | + 'entree_adresse_email' => 'Votre adresse email', |
|
| 113 | + 'entree_adresse_email_2' => 'Adresse email', |
|
| 114 | + 'entree_base_donnee_1' => 'Adresse de la base de données', |
|
| 115 | + 'entree_base_donnee_2' => '(Souvent cette adresse correspond à celle de votre site, parfois elle correspond à la mention « localhost », parfois elle est laissée totalement vide.)', |
|
| 116 | + 'entree_biographie' => 'Courte biographie en quelques mots.', |
|
| 117 | + 'entree_chemin_acces' => '<b>Entrer</b> le chemin d’accès :', |
|
| 118 | + 'entree_cle_pgp' => 'Votre clé PGP', |
|
| 119 | + 'entree_cle_pgp_2' => 'Clé PGP', |
|
| 120 | + 'entree_contenu_rubrique' => '(Contenu de la rubrique en quelques mots.)', |
|
| 121 | + 'entree_identifiants_connexion' => 'Vos identifiants de connexion...', |
|
| 122 | + 'entree_identifiants_connexion_2' => 'Identifiants de connexion', |
|
| 123 | + 'entree_informations_connexion_ldap' => 'Veuillez entrer dans ce formulaire les informations de connexion à votre annuaire LDAP. |
|
| 124 | 124 | Ces informations doivent pouvoir vous être fournies par l’administrateur du système, |
| 125 | 125 | ou du réseau.', |
| 126 | - 'entree_infos_perso' => 'Qui êtes-vous ?', |
|
| 127 | - 'entree_infos_perso_2' => 'Qui est l’auteur ?', |
|
| 128 | - 'entree_interieur_rubrique' => 'À l’intérieur de la rubrique :', |
|
| 129 | - 'entree_liens_sites' => '<b>Lien hypertexte</b> (référence, site à visiter...)', |
|
| 130 | - 'entree_login' => 'Votre login', |
|
| 131 | - 'entree_login_connexion_1' => 'Le login de connexion', |
|
| 132 | - 'entree_login_connexion_2' => '(Correspond parfois à votre login d’accès au FTP ; parfois laissé vide)', |
|
| 133 | - 'entree_mot_passe' => 'Votre mot de passe', |
|
| 134 | - 'entree_mot_passe_1' => 'Le mot de passe de connexion', |
|
| 135 | - 'entree_mot_passe_2' => '(Correspond parfois à votre mot de passe pour le FTP ; parfois laissé vide)', |
|
| 136 | - 'entree_nom_fichier' => 'Veuillez entrer le nom du fichier @texte_compresse@ :', |
|
| 137 | - 'entree_nom_pseudo' => 'Votre nom ou votre pseudo', |
|
| 138 | - 'entree_nom_pseudo_1' => '(Votre nom ou votre pseudo)', |
|
| 139 | - 'entree_nom_pseudo_2' => 'Nom ou pseudo', |
|
| 140 | - 'entree_nom_site' => 'Le nom de votre site', |
|
| 141 | - 'entree_nom_site_2' => 'Nom du site de l’auteur', |
|
| 142 | - 'entree_nouveau_passe' => 'Nouveau mot de passe', |
|
| 143 | - 'entree_passe_ldap' => 'Mot de passe', |
|
| 144 | - 'entree_port_annuaire' => 'Le numéro de port de l’annuaire', |
|
| 145 | - 'entree_signature' => 'Signature', |
|
| 146 | - 'entree_titre_obligatoire' => '<b>Titre</b> [Obligatoire]<br />', |
|
| 147 | - 'entree_url' => 'L’adresse (URL) de votre site', |
|
| 148 | - 'entree_url_2' => 'Adresse (URL) du site', |
|
| 149 | - 'erreur_connect_deja_existant' => 'Un serveur existe déjà avec ce nom', |
|
| 150 | - 'erreur_contenu_suspect' => 'Texte échappé', |
|
| 151 | - 'erreur_email_deja_existant' => 'Cette adresse email est déjà enregistrée.', |
|
| 152 | - 'erreur_nom_connect_incorrect' => 'Ce nom de serveur n’est pas autorisé', |
|
| 153 | - 'erreur_plugin_attribut_balise_manquant' => 'Attribut @attribut@ manquant dans la balise @balise@.', |
|
| 154 | - 'erreur_plugin_desinstalation_echouee' => 'La désinstallation du plugin a échoué. Vous pouvez néanmoins le désactiver.', |
|
| 155 | - 'erreur_plugin_fichier_absent' => 'Fichier absent', |
|
| 156 | - 'erreur_plugin_fichier_def_absent' => 'Fichier de définition absent', |
|
| 157 | - 'erreur_plugin_nom_fonction_interdit' => 'Nom de fonction interdit', |
|
| 158 | - 'erreur_plugin_nom_manquant' => 'Nom du plugin manquant', |
|
| 159 | - 'erreur_plugin_prefix_manquant' => 'Espace de nommage du plugin non défini', |
|
| 160 | - 'erreur_plugin_tag_plugin_absent' => '<plugin> manquant dans le fichier de définition', |
|
| 161 | - 'erreur_plugin_version_manquant' => 'Version du plugin manquante', |
|
| 162 | - 'erreur_type_fichier' => 'Type de fichier incorrect', |
|
| 126 | + 'entree_infos_perso' => 'Qui êtes-vous ?', |
|
| 127 | + 'entree_infos_perso_2' => 'Qui est l’auteur ?', |
|
| 128 | + 'entree_interieur_rubrique' => 'À l’intérieur de la rubrique :', |
|
| 129 | + 'entree_liens_sites' => '<b>Lien hypertexte</b> (référence, site à visiter...)', |
|
| 130 | + 'entree_login' => 'Votre login', |
|
| 131 | + 'entree_login_connexion_1' => 'Le login de connexion', |
|
| 132 | + 'entree_login_connexion_2' => '(Correspond parfois à votre login d’accès au FTP ; parfois laissé vide)', |
|
| 133 | + 'entree_mot_passe' => 'Votre mot de passe', |
|
| 134 | + 'entree_mot_passe_1' => 'Le mot de passe de connexion', |
|
| 135 | + 'entree_mot_passe_2' => '(Correspond parfois à votre mot de passe pour le FTP ; parfois laissé vide)', |
|
| 136 | + 'entree_nom_fichier' => 'Veuillez entrer le nom du fichier @texte_compresse@ :', |
|
| 137 | + 'entree_nom_pseudo' => 'Votre nom ou votre pseudo', |
|
| 138 | + 'entree_nom_pseudo_1' => '(Votre nom ou votre pseudo)', |
|
| 139 | + 'entree_nom_pseudo_2' => 'Nom ou pseudo', |
|
| 140 | + 'entree_nom_site' => 'Le nom de votre site', |
|
| 141 | + 'entree_nom_site_2' => 'Nom du site de l’auteur', |
|
| 142 | + 'entree_nouveau_passe' => 'Nouveau mot de passe', |
|
| 143 | + 'entree_passe_ldap' => 'Mot de passe', |
|
| 144 | + 'entree_port_annuaire' => 'Le numéro de port de l’annuaire', |
|
| 145 | + 'entree_signature' => 'Signature', |
|
| 146 | + 'entree_titre_obligatoire' => '<b>Titre</b> [Obligatoire]<br />', |
|
| 147 | + 'entree_url' => 'L’adresse (URL) de votre site', |
|
| 148 | + 'entree_url_2' => 'Adresse (URL) du site', |
|
| 149 | + 'erreur_connect_deja_existant' => 'Un serveur existe déjà avec ce nom', |
|
| 150 | + 'erreur_contenu_suspect' => 'Texte échappé', |
|
| 151 | + 'erreur_email_deja_existant' => 'Cette adresse email est déjà enregistrée.', |
|
| 152 | + 'erreur_nom_connect_incorrect' => 'Ce nom de serveur n’est pas autorisé', |
|
| 153 | + 'erreur_plugin_attribut_balise_manquant' => 'Attribut @attribut@ manquant dans la balise @balise@.', |
|
| 154 | + 'erreur_plugin_desinstalation_echouee' => 'La désinstallation du plugin a échoué. Vous pouvez néanmoins le désactiver.', |
|
| 155 | + 'erreur_plugin_fichier_absent' => 'Fichier absent', |
|
| 156 | + 'erreur_plugin_fichier_def_absent' => 'Fichier de définition absent', |
|
| 157 | + 'erreur_plugin_nom_fonction_interdit' => 'Nom de fonction interdit', |
|
| 158 | + 'erreur_plugin_nom_manquant' => 'Nom du plugin manquant', |
|
| 159 | + 'erreur_plugin_prefix_manquant' => 'Espace de nommage du plugin non défini', |
|
| 160 | + 'erreur_plugin_tag_plugin_absent' => '<plugin> manquant dans le fichier de définition', |
|
| 161 | + 'erreur_plugin_version_manquant' => 'Version du plugin manquante', |
|
| 162 | + 'erreur_type_fichier' => 'Type de fichier incorrect', |
|
| 163 | 163 | |
| 164 | - // H |
|
| 165 | - 'htaccess_a_simuler' => 'Avertissement : la configuration de votre serveur HTTP ne tient pas compte des fichiers @htaccess@. Pour pouvoir assurer une bonne sécurité, il faut que vous modifiiez cette configuration sur ce point, ou bien que les constantes @constantes@ (définissables dans le fichier mes_options.php) aient comme valeur des répertoires en dehors de @document_root@.', |
|
| 166 | - 'htaccess_inoperant' => 'htaccess inopérant', |
|
| 164 | + // H |
|
| 165 | + 'htaccess_a_simuler' => 'Avertissement : la configuration de votre serveur HTTP ne tient pas compte des fichiers @htaccess@. Pour pouvoir assurer une bonne sécurité, il faut que vous modifiiez cette configuration sur ce point, ou bien que les constantes @constantes@ (définissables dans le fichier mes_options.php) aient comme valeur des répertoires en dehors de @document_root@.', |
|
| 166 | + 'htaccess_inoperant' => 'htaccess inopérant', |
|
| 167 | 167 | |
| 168 | - // I |
|
| 169 | - 'ical_info1' => 'Cette page présente plusieurs méthodes pour rester en contact avec la vie de ce site.', |
|
| 170 | - 'ical_info2' => 'Pour plus de renseignements sur toutes ces techniques, n’hésitez pas à consulter <a href="@spipnet@">la documentation de SPIP</a>.', |
|
| 171 | - 'ical_info_calendrier' => 'Deux calendriers sont à votre disposition. Le premier est un plan du site annonçant tous les articles publiés. Le second contient les annonces éditoriales ainsi que vos derniers messages privés : il vous est réservé grâce à une clé personnelle, que vous pouvez modifier à tout moment en renouvelant votre mot de passe.', |
|
| 172 | - 'ical_methode_http' => 'Téléchargement', |
|
| 173 | - 'ical_methode_webcal' => 'Synchronisation (webcal://)', |
|
| 174 | - 'ical_texte_js' => 'Une ligne de javascript vous permet d’afficher très simplement, sur n’importe quel site vous appartenant, les articles récents publiés sur ce site.', |
|
| 175 | - 'ical_texte_prive' => 'Ce calendrier, à usage strictement personnel, vous informe de l’activité éditoriale privée de ce site (tâches et rendez-vous personnels, articles et brèves proposés...).', |
|
| 176 | - 'ical_texte_public' => 'Ce calendrier vous permet de suivre l’activité publique de ce site (articles et brèves publiés).', |
|
| 177 | - 'ical_texte_rss' => 'Vous pouvez syndiquer les nouveautés de ce site dans n’importe quel lecteur de fichiers au format XML/RSS (Rich Site Summary). C’est aussi le format qui permet à SPIP de lire les nouveautés publiées sur d’autres sites utilisant un format d’échange compatible (sites syndiqués).', |
|
| 178 | - 'ical_titre_js' => 'Javascript', |
|
| 179 | - 'ical_titre_mailing' => 'Mailing-list', |
|
| 180 | - 'ical_titre_rss' => 'Fichiers de syndication', |
|
| 181 | - 'icone_accueil' => 'Accueil', |
|
| 182 | - 'icone_activer_cookie' => 'Activer le cookie de correspondance', |
|
| 183 | - 'icone_activite' => 'Activité', |
|
| 184 | - 'icone_admin_plugin' => 'Gestion des plugins', |
|
| 185 | - 'icone_administration' => 'Maintenance', |
|
| 186 | - 'icone_afficher_auteurs' => 'Afficher les auteurs', |
|
| 187 | - 'icone_afficher_visiteurs' => 'Afficher les visiteurs', |
|
| 188 | - 'icone_arret_discussion' => 'Ne plus participer à cette discussion', |
|
| 189 | - 'icone_calendrier' => 'Calendrier', |
|
| 190 | - 'icone_configuration' => 'Configuration', |
|
| 191 | - 'icone_creer_auteur' => 'Créer un nouvel auteur et l’associer à cet article', |
|
| 192 | - 'icone_creer_mot_cle' => 'Créer un nouveau mot-clé et le lier à cet article', |
|
| 193 | - 'icone_creer_rubrique_2' => 'Créer une nouvelle rubrique', |
|
| 194 | - 'icone_developpement' => 'Développement', |
|
| 195 | - 'icone_edition' => 'Édition', |
|
| 196 | - 'icone_ma_langue' => 'Ma langue', |
|
| 197 | - 'icone_mes_infos' => 'Mes informations', |
|
| 198 | - 'icone_mes_preferences' => 'Mes préférences', |
|
| 199 | - 'icone_modifier_article' => 'Modifier cet article', |
|
| 200 | - 'icone_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 201 | - 'icone_publication' => 'Publication', |
|
| 202 | - 'icone_relancer_signataire' => 'Relancer le signataire', |
|
| 203 | - 'icone_retour' => 'Retour', |
|
| 204 | - 'icone_retour_article' => 'Retour à l’article', |
|
| 205 | - 'icone_squelette' => 'Squelettes', |
|
| 206 | - 'icone_suivi_publication' => 'Suivi de la publication', |
|
| 207 | - 'icone_supprimer_cookie' => 'Supprimer le cookie de correspondance', |
|
| 208 | - 'icone_supprimer_rubrique' => 'Supprimer cette rubrique', |
|
| 209 | - 'icone_supprimer_signature' => 'Supprimer cette signature', |
|
| 210 | - 'icone_valider_signature' => 'Valider cette signature', |
|
| 211 | - 'image_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', |
|
| 212 | - 'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', |
|
| 213 | - 'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', |
|
| 214 | - 'info_1_article' => '1 article', |
|
| 215 | - 'info_1_auteur' => '1 auteur', |
|
| 216 | - 'info_1_message' => '1 message', |
|
| 217 | - 'info_1_mot_cle' => '1 mot-clé', |
|
| 218 | - 'info_1_rubrique' => '1 rubrique', |
|
| 219 | - 'info_1_visiteur' => '1 visiteur', |
|
| 220 | - 'info_activer_cookie' => 'Vous pouvez activer un <b>cookie de correspondance</b>, ce qui vous |
|
| 168 | + // I |
|
| 169 | + 'ical_info1' => 'Cette page présente plusieurs méthodes pour rester en contact avec la vie de ce site.', |
|
| 170 | + 'ical_info2' => 'Pour plus de renseignements sur toutes ces techniques, n’hésitez pas à consulter <a href="@spipnet@">la documentation de SPIP</a>.', |
|
| 171 | + 'ical_info_calendrier' => 'Deux calendriers sont à votre disposition. Le premier est un plan du site annonçant tous les articles publiés. Le second contient les annonces éditoriales ainsi que vos derniers messages privés : il vous est réservé grâce à une clé personnelle, que vous pouvez modifier à tout moment en renouvelant votre mot de passe.', |
|
| 172 | + 'ical_methode_http' => 'Téléchargement', |
|
| 173 | + 'ical_methode_webcal' => 'Synchronisation (webcal://)', |
|
| 174 | + 'ical_texte_js' => 'Une ligne de javascript vous permet d’afficher très simplement, sur n’importe quel site vous appartenant, les articles récents publiés sur ce site.', |
|
| 175 | + 'ical_texte_prive' => 'Ce calendrier, à usage strictement personnel, vous informe de l’activité éditoriale privée de ce site (tâches et rendez-vous personnels, articles et brèves proposés...).', |
|
| 176 | + 'ical_texte_public' => 'Ce calendrier vous permet de suivre l’activité publique de ce site (articles et brèves publiés).', |
|
| 177 | + 'ical_texte_rss' => 'Vous pouvez syndiquer les nouveautés de ce site dans n’importe quel lecteur de fichiers au format XML/RSS (Rich Site Summary). C’est aussi le format qui permet à SPIP de lire les nouveautés publiées sur d’autres sites utilisant un format d’échange compatible (sites syndiqués).', |
|
| 178 | + 'ical_titre_js' => 'Javascript', |
|
| 179 | + 'ical_titre_mailing' => 'Mailing-list', |
|
| 180 | + 'ical_titre_rss' => 'Fichiers de syndication', |
|
| 181 | + 'icone_accueil' => 'Accueil', |
|
| 182 | + 'icone_activer_cookie' => 'Activer le cookie de correspondance', |
|
| 183 | + 'icone_activite' => 'Activité', |
|
| 184 | + 'icone_admin_plugin' => 'Gestion des plugins', |
|
| 185 | + 'icone_administration' => 'Maintenance', |
|
| 186 | + 'icone_afficher_auteurs' => 'Afficher les auteurs', |
|
| 187 | + 'icone_afficher_visiteurs' => 'Afficher les visiteurs', |
|
| 188 | + 'icone_arret_discussion' => 'Ne plus participer à cette discussion', |
|
| 189 | + 'icone_calendrier' => 'Calendrier', |
|
| 190 | + 'icone_configuration' => 'Configuration', |
|
| 191 | + 'icone_creer_auteur' => 'Créer un nouvel auteur et l’associer à cet article', |
|
| 192 | + 'icone_creer_mot_cle' => 'Créer un nouveau mot-clé et le lier à cet article', |
|
| 193 | + 'icone_creer_rubrique_2' => 'Créer une nouvelle rubrique', |
|
| 194 | + 'icone_developpement' => 'Développement', |
|
| 195 | + 'icone_edition' => 'Édition', |
|
| 196 | + 'icone_ma_langue' => 'Ma langue', |
|
| 197 | + 'icone_mes_infos' => 'Mes informations', |
|
| 198 | + 'icone_mes_preferences' => 'Mes préférences', |
|
| 199 | + 'icone_modifier_article' => 'Modifier cet article', |
|
| 200 | + 'icone_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 201 | + 'icone_publication' => 'Publication', |
|
| 202 | + 'icone_relancer_signataire' => 'Relancer le signataire', |
|
| 203 | + 'icone_retour' => 'Retour', |
|
| 204 | + 'icone_retour_article' => 'Retour à l’article', |
|
| 205 | + 'icone_squelette' => 'Squelettes', |
|
| 206 | + 'icone_suivi_publication' => 'Suivi de la publication', |
|
| 207 | + 'icone_supprimer_cookie' => 'Supprimer le cookie de correspondance', |
|
| 208 | + 'icone_supprimer_rubrique' => 'Supprimer cette rubrique', |
|
| 209 | + 'icone_supprimer_signature' => 'Supprimer cette signature', |
|
| 210 | + 'icone_valider_signature' => 'Valider cette signature', |
|
| 211 | + 'image_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', |
|
| 212 | + 'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', |
|
| 213 | + 'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', |
|
| 214 | + 'info_1_article' => '1 article', |
|
| 215 | + 'info_1_auteur' => '1 auteur', |
|
| 216 | + 'info_1_message' => '1 message', |
|
| 217 | + 'info_1_mot_cle' => '1 mot-clé', |
|
| 218 | + 'info_1_rubrique' => '1 rubrique', |
|
| 219 | + 'info_1_visiteur' => '1 visiteur', |
|
| 220 | + 'info_activer_cookie' => 'Vous pouvez activer un <b>cookie de correspondance</b>, ce qui vous |
|
| 221 | 221 | permettra de passer facilement du site public au site privé.', |
| 222 | - 'info_activer_menu_developpement' => 'Afficher le menu Développement', |
|
| 223 | - 'info_admin_etre_webmestre' => 'Me donner les droits de webmestre', |
|
| 224 | - 'info_admin_je_suis_webmestre' => 'Je suis <b>webmestre</b>', |
|
| 225 | - 'info_admin_statuer_webmestre' => 'Donner à cet administrateur les droits de webmestre', |
|
| 226 | - 'info_admin_webmestre' => 'Cet administrateur est <b>webmestre</b>', |
|
| 227 | - 'info_administrateur' => 'Administrateur', |
|
| 228 | - 'info_administrateur_1' => 'Administrateur', |
|
| 229 | - 'info_administrateur_2' => 'du site (<i>utilisez avec précaution</i>)', |
|
| 230 | - 'info_administrateur_site_01' => 'Si vous êtes administrateur du site, veuillez', |
|
| 231 | - 'info_administrateur_site_02' => 'cliquer sur ce lien', |
|
| 232 | - 'info_administrateurs' => 'Administrateurs', |
|
| 233 | - 'info_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', |
|
| 234 | - 'info_adresse' => 'à l’adresse :', |
|
| 235 | - 'info_adresse_desinscription' => 'Adresse de désinscription :', |
|
| 236 | - 'info_adresse_url' => 'Adresse (URL) du site public', |
|
| 237 | - 'info_afficher_par_nb' => 'Afficher par', |
|
| 238 | - 'info_aide_en_ligne' => 'Aide en ligne SPIP', |
|
| 239 | - 'info_ajout_image' => 'Lorsque vous ajoutez des images en tant que documents joints à un article, |
|
| 222 | + 'info_activer_menu_developpement' => 'Afficher le menu Développement', |
|
| 223 | + 'info_admin_etre_webmestre' => 'Me donner les droits de webmestre', |
|
| 224 | + 'info_admin_je_suis_webmestre' => 'Je suis <b>webmestre</b>', |
|
| 225 | + 'info_admin_statuer_webmestre' => 'Donner à cet administrateur les droits de webmestre', |
|
| 226 | + 'info_admin_webmestre' => 'Cet administrateur est <b>webmestre</b>', |
|
| 227 | + 'info_administrateur' => 'Administrateur', |
|
| 228 | + 'info_administrateur_1' => 'Administrateur', |
|
| 229 | + 'info_administrateur_2' => 'du site (<i>utilisez avec précaution</i>)', |
|
| 230 | + 'info_administrateur_site_01' => 'Si vous êtes administrateur du site, veuillez', |
|
| 231 | + 'info_administrateur_site_02' => 'cliquer sur ce lien', |
|
| 232 | + 'info_administrateurs' => 'Administrateurs', |
|
| 233 | + 'info_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', |
|
| 234 | + 'info_adresse' => 'à l’adresse :', |
|
| 235 | + 'info_adresse_desinscription' => 'Adresse de désinscription :', |
|
| 236 | + 'info_adresse_url' => 'Adresse (URL) du site public', |
|
| 237 | + 'info_afficher_par_nb' => 'Afficher par', |
|
| 238 | + 'info_aide_en_ligne' => 'Aide en ligne SPIP', |
|
| 239 | + 'info_ajout_image' => 'Lorsque vous ajoutez des images en tant que documents joints à un article, |
|
| 240 | 240 | SPIP peut créer pour vous, automatiquement, des vignettes (miniatures) des |
| 241 | 241 | images insérées. Cela permet par exemple de créer |
| 242 | 242 | automatiquement une galerie ou un portfolio.', |
| 243 | - 'info_ajouter_rubrique' => 'Ajouter une autre rubrique à administrer :', |
|
| 244 | - 'info_annonce_nouveautes' => 'Annonce des nouveautés', |
|
| 245 | - 'info_article' => 'article', |
|
| 246 | - 'info_article_2' => 'articles', |
|
| 247 | - 'info_article_a_paraitre' => 'Les articles post-datés à paraître', |
|
| 248 | - 'info_articles_02' => 'articles', |
|
| 249 | - 'info_articles_2' => 'Articles', |
|
| 250 | - 'info_articles_auteur' => 'Les articles de cet auteur', |
|
| 251 | - 'info_articles_miens' => 'Mes articles', |
|
| 252 | - 'info_articles_tous' => 'Tous les articles', |
|
| 253 | - 'info_articles_trouves' => 'Articles trouvés', |
|
| 254 | - 'info_attente_validation' => 'Vos articles en attente de validation', |
|
| 255 | - 'info_aucun_article' => 'Aucun article', |
|
| 256 | - 'info_aucun_auteur' => 'Aucun auteur', |
|
| 257 | - 'info_aucun_message' => 'Aucun message', |
|
| 258 | - 'info_aucun_rubrique' => 'Aucune rubrique', |
|
| 259 | - 'info_aujourdhui' => 'aujourd’hui :', |
|
| 260 | - 'info_auteur_gere_rubriques' => 'Cet auteur gère les rubriques suivantes :', |
|
| 261 | - 'info_auteur_gere_toutes_rubriques' => 'Cet auteur gère <b>toutes les rubriques</b>', |
|
| 262 | - 'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', |
|
| 263 | - 'info_auteurs' => 'Les auteurs', |
|
| 264 | - 'info_auteurs_par_tri' => 'Auteurs@partri@', |
|
| 265 | - 'info_auteurs_trouves' => 'Auteurs trouvés', |
|
| 266 | - 'info_authentification_externe' => 'Authentification externe', |
|
| 267 | - 'info_avertissement' => 'Avertissement', |
|
| 268 | - 'info_barre_outils' => 'avec sa barre d’outils ?', |
|
| 269 | - 'info_base_installee' => 'La structure de votre base de données est installée.', |
|
| 270 | - 'info_bio' => 'Biographie', |
|
| 271 | - 'info_cache_desactive' => 'Le cache est temporairement désactivé.', |
|
| 272 | - 'info_chapeau' => 'Chapeau', |
|
| 273 | - 'info_chapeau_2' => 'Chapeau :', |
|
| 274 | - 'info_chemin_acces_1' => 'Options : <b>Chemin d’accès dans l’annuaire</b>', |
|
| 275 | - 'info_chemin_acces_2' => 'Vous devez désormais configurer le chemin d’accès aux informations dans l’annuaire. Cette information est indispensable pour lire les profils utilisateurs stockés dans l’annuaire.', |
|
| 276 | - 'info_chemin_acces_annuaire' => 'Options : <b>Chemin d’accès dans l’annuaire</b>', |
|
| 277 | - 'info_choix_base' => 'Troisième étape :', |
|
| 278 | - 'info_classement_1' => '<sup>er</sup> sur @liste@', |
|
| 279 | - 'info_classement_2' => '<sup>e</sup> sur @liste@', |
|
| 280 | - 'info_code_acces' => 'N’oubliez pas vos propres codes d’accès !', |
|
| 281 | - 'info_config_suivi' => 'Si cette adresse correspond à une mailing-list, vous pouvez indiquer ci-dessous l’adresse à laquelle les participants au site peuvent s’inscrire. Cette adresse peut être une URL (par exemple la page d’inscription à la liste par le Web), ou une adresse email dotée d’un sujet spécifique (par exemple : <tt>@adresse_suivi@?subject=subscribe</tt>) :', |
|
| 282 | - 'info_config_suivi_explication' => 'Vous pouvez vous abonner à la mailing-list de ce site. Vous recevrez alors par courrier électronique les annonces d’articles et de brèves proposés à la publication.', |
|
| 283 | - 'info_confirmer_passe' => 'Confirmer ce nouveau mot de passe :', |
|
| 284 | - 'info_conflit_edition_avis_non_sauvegarde' => 'Attention, les champs suivants ont été modifiés par ailleurs. Vos modifications sur ces champs n’ont donc pas été enregistrées.', |
|
| 285 | - 'info_conflit_edition_differences' => 'Différences :', |
|
| 286 | - 'info_conflit_edition_version_enregistree' => 'La version enregistrée :', |
|
| 287 | - 'info_conflit_edition_votre_version' => 'Votre version :', |
|
| 288 | - 'info_connexion_base' => 'Essai de connexion à la base', |
|
| 289 | - 'info_connexion_base_donnee' => 'Connexion à votre base de données', |
|
| 290 | - 'info_connexion_ldap_ok' => '<b>La connexion LDAP a réussi.</b><p> Vous pouvez passer à l’étape suivante.</p>', |
|
| 291 | - 'info_connexion_mysql' => 'Votre connexion SQL', |
|
| 292 | - 'info_connexion_ok' => 'La connexion a réussi.', |
|
| 293 | - 'info_contact' => 'Contact', |
|
| 294 | - 'info_contenu_articles' => 'Contenu des articles', |
|
| 295 | - 'info_contributions' => 'Contributions', |
|
| 296 | - 'info_creation_paragraphe' => 'Pour créer des paragraphes, laissez simplement des lignes vides.', |
|
| 297 | - 'info_creation_rubrique' => 'Avant de pouvoir écrire des articles,<br /> vous devez créer au moins une rubrique.<br />', |
|
| 298 | - 'info_creation_tables' => 'Création des tables de la base', |
|
| 299 | - 'info_creer_base' => '<b>Créer</b> une nouvelle base de données :', |
|
| 300 | - 'info_dans_rubrique' => 'Dans la rubrique :', |
|
| 301 | - 'info_date_publication_anterieure' => 'Date de rédaction antérieure :', |
|
| 302 | - 'info_date_referencement' => 'DATE DE RÉFÉRENCEMENT DE CE SITE :', |
|
| 303 | - 'info_derniere_etape' => 'C’est terminé !', |
|
| 304 | - 'info_descriptif' => 'Descriptif :', |
|
| 305 | - 'info_desinstaller_plugin' => 'supprime les données et désactive le plugin', |
|
| 306 | - 'info_discussion_cours' => 'Discussions en cours', |
|
| 307 | - 'info_ecrire_article' => 'Avant de pouvoir écrire des articles, vous devez créer au moins une rubrique.', |
|
| 308 | - 'info_email_envoi' => 'Adresse email d’envoi (optionnel)', |
|
| 309 | - 'info_email_envoi_txt' => 'Indiquez ici l’adresse à utiliser pour envoyer les emails (à défaut, l’adresse destinataire sera utilisée comme adresse d’envoi) :', |
|
| 310 | - 'info_email_webmestre' => 'Adresse email du webmestre', |
|
| 311 | - 'info_envoi_email_automatique' => 'Envoi de mails automatique', |
|
| 312 | - 'info_envoyer_maintenant' => 'Envoyer maintenant', |
|
| 313 | - 'info_etape_suivante' => 'Passer à l’étape suivante', |
|
| 314 | - 'info_etape_suivante_1' => 'Vous pouvez passer à l’étape suivante.', |
|
| 315 | - 'info_etape_suivante_2' => 'Vous pouvez passer à l’étape suivante.', |
|
| 316 | - 'info_exceptions_proxy' => 'Exceptions pour le proxy', |
|
| 317 | - 'info_exportation_base' => 'exportation de la base vers @archive@', |
|
| 318 | - 'info_facilite_suivi_activite' => 'Afin de faciliter le suivi de l’activité |
|
| 243 | + 'info_ajouter_rubrique' => 'Ajouter une autre rubrique à administrer :', |
|
| 244 | + 'info_annonce_nouveautes' => 'Annonce des nouveautés', |
|
| 245 | + 'info_article' => 'article', |
|
| 246 | + 'info_article_2' => 'articles', |
|
| 247 | + 'info_article_a_paraitre' => 'Les articles post-datés à paraître', |
|
| 248 | + 'info_articles_02' => 'articles', |
|
| 249 | + 'info_articles_2' => 'Articles', |
|
| 250 | + 'info_articles_auteur' => 'Les articles de cet auteur', |
|
| 251 | + 'info_articles_miens' => 'Mes articles', |
|
| 252 | + 'info_articles_tous' => 'Tous les articles', |
|
| 253 | + 'info_articles_trouves' => 'Articles trouvés', |
|
| 254 | + 'info_attente_validation' => 'Vos articles en attente de validation', |
|
| 255 | + 'info_aucun_article' => 'Aucun article', |
|
| 256 | + 'info_aucun_auteur' => 'Aucun auteur', |
|
| 257 | + 'info_aucun_message' => 'Aucun message', |
|
| 258 | + 'info_aucun_rubrique' => 'Aucune rubrique', |
|
| 259 | + 'info_aujourdhui' => 'aujourd’hui :', |
|
| 260 | + 'info_auteur_gere_rubriques' => 'Cet auteur gère les rubriques suivantes :', |
|
| 261 | + 'info_auteur_gere_toutes_rubriques' => 'Cet auteur gère <b>toutes les rubriques</b>', |
|
| 262 | + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', |
|
| 263 | + 'info_auteurs' => 'Les auteurs', |
|
| 264 | + 'info_auteurs_par_tri' => 'Auteurs@partri@', |
|
| 265 | + 'info_auteurs_trouves' => 'Auteurs trouvés', |
|
| 266 | + 'info_authentification_externe' => 'Authentification externe', |
|
| 267 | + 'info_avertissement' => 'Avertissement', |
|
| 268 | + 'info_barre_outils' => 'avec sa barre d’outils ?', |
|
| 269 | + 'info_base_installee' => 'La structure de votre base de données est installée.', |
|
| 270 | + 'info_bio' => 'Biographie', |
|
| 271 | + 'info_cache_desactive' => 'Le cache est temporairement désactivé.', |
|
| 272 | + 'info_chapeau' => 'Chapeau', |
|
| 273 | + 'info_chapeau_2' => 'Chapeau :', |
|
| 274 | + 'info_chemin_acces_1' => 'Options : <b>Chemin d’accès dans l’annuaire</b>', |
|
| 275 | + 'info_chemin_acces_2' => 'Vous devez désormais configurer le chemin d’accès aux informations dans l’annuaire. Cette information est indispensable pour lire les profils utilisateurs stockés dans l’annuaire.', |
|
| 276 | + 'info_chemin_acces_annuaire' => 'Options : <b>Chemin d’accès dans l’annuaire</b>', |
|
| 277 | + 'info_choix_base' => 'Troisième étape :', |
|
| 278 | + 'info_classement_1' => '<sup>er</sup> sur @liste@', |
|
| 279 | + 'info_classement_2' => '<sup>e</sup> sur @liste@', |
|
| 280 | + 'info_code_acces' => 'N’oubliez pas vos propres codes d’accès !', |
|
| 281 | + 'info_config_suivi' => 'Si cette adresse correspond à une mailing-list, vous pouvez indiquer ci-dessous l’adresse à laquelle les participants au site peuvent s’inscrire. Cette adresse peut être une URL (par exemple la page d’inscription à la liste par le Web), ou une adresse email dotée d’un sujet spécifique (par exemple : <tt>@adresse_suivi@?subject=subscribe</tt>) :', |
|
| 282 | + 'info_config_suivi_explication' => 'Vous pouvez vous abonner à la mailing-list de ce site. Vous recevrez alors par courrier électronique les annonces d’articles et de brèves proposés à la publication.', |
|
| 283 | + 'info_confirmer_passe' => 'Confirmer ce nouveau mot de passe :', |
|
| 284 | + 'info_conflit_edition_avis_non_sauvegarde' => 'Attention, les champs suivants ont été modifiés par ailleurs. Vos modifications sur ces champs n’ont donc pas été enregistrées.', |
|
| 285 | + 'info_conflit_edition_differences' => 'Différences :', |
|
| 286 | + 'info_conflit_edition_version_enregistree' => 'La version enregistrée :', |
|
| 287 | + 'info_conflit_edition_votre_version' => 'Votre version :', |
|
| 288 | + 'info_connexion_base' => 'Essai de connexion à la base', |
|
| 289 | + 'info_connexion_base_donnee' => 'Connexion à votre base de données', |
|
| 290 | + 'info_connexion_ldap_ok' => '<b>La connexion LDAP a réussi.</b><p> Vous pouvez passer à l’étape suivante.</p>', |
|
| 291 | + 'info_connexion_mysql' => 'Votre connexion SQL', |
|
| 292 | + 'info_connexion_ok' => 'La connexion a réussi.', |
|
| 293 | + 'info_contact' => 'Contact', |
|
| 294 | + 'info_contenu_articles' => 'Contenu des articles', |
|
| 295 | + 'info_contributions' => 'Contributions', |
|
| 296 | + 'info_creation_paragraphe' => 'Pour créer des paragraphes, laissez simplement des lignes vides.', |
|
| 297 | + 'info_creation_rubrique' => 'Avant de pouvoir écrire des articles,<br /> vous devez créer au moins une rubrique.<br />', |
|
| 298 | + 'info_creation_tables' => 'Création des tables de la base', |
|
| 299 | + 'info_creer_base' => '<b>Créer</b> une nouvelle base de données :', |
|
| 300 | + 'info_dans_rubrique' => 'Dans la rubrique :', |
|
| 301 | + 'info_date_publication_anterieure' => 'Date de rédaction antérieure :', |
|
| 302 | + 'info_date_referencement' => 'DATE DE RÉFÉRENCEMENT DE CE SITE :', |
|
| 303 | + 'info_derniere_etape' => 'C’est terminé !', |
|
| 304 | + 'info_descriptif' => 'Descriptif :', |
|
| 305 | + 'info_desinstaller_plugin' => 'supprime les données et désactive le plugin', |
|
| 306 | + 'info_discussion_cours' => 'Discussions en cours', |
|
| 307 | + 'info_ecrire_article' => 'Avant de pouvoir écrire des articles, vous devez créer au moins une rubrique.', |
|
| 308 | + 'info_email_envoi' => 'Adresse email d’envoi (optionnel)', |
|
| 309 | + 'info_email_envoi_txt' => 'Indiquez ici l’adresse à utiliser pour envoyer les emails (à défaut, l’adresse destinataire sera utilisée comme adresse d’envoi) :', |
|
| 310 | + 'info_email_webmestre' => 'Adresse email du webmestre', |
|
| 311 | + 'info_envoi_email_automatique' => 'Envoi de mails automatique', |
|
| 312 | + 'info_envoyer_maintenant' => 'Envoyer maintenant', |
|
| 313 | + 'info_etape_suivante' => 'Passer à l’étape suivante', |
|
| 314 | + 'info_etape_suivante_1' => 'Vous pouvez passer à l’étape suivante.', |
|
| 315 | + 'info_etape_suivante_2' => 'Vous pouvez passer à l’étape suivante.', |
|
| 316 | + 'info_exceptions_proxy' => 'Exceptions pour le proxy', |
|
| 317 | + 'info_exportation_base' => 'exportation de la base vers @archive@', |
|
| 318 | + 'info_facilite_suivi_activite' => 'Afin de faciliter le suivi de l’activité |
|
| 319 | 319 | éditoriale du site, SPIP peut faire parvenir par mail, par exemple |
| 320 | 320 | à une mailing-list des rédacteurs, l’annonce des demandes de |
| 321 | 321 | publication et des validations d’articles.', |
| 322 | - 'info_fichiers_authent' => 'Fichiers d’authentification « .htpasswd »', |
|
| 323 | - 'info_forums_abo_invites' => 'Votre site comporte des forums sur abonnement ; les visiteurs sont donc invités à s’enregistrer sur le site public.', |
|
| 324 | - 'info_gauche_admin_tech' => '<b>Cette page est uniquement accessible aux responsables du site.</b><p> Elle donne accès aux différentes |
|
| 322 | + 'info_fichiers_authent' => 'Fichiers d’authentification « .htpasswd »', |
|
| 323 | + 'info_forums_abo_invites' => 'Votre site comporte des forums sur abonnement ; les visiteurs sont donc invités à s’enregistrer sur le site public.', |
|
| 324 | + 'info_gauche_admin_tech' => '<b>Cette page est uniquement accessible aux responsables du site.</b><p> Elle donne accès aux différentes |
|
| 325 | 325 | fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui |
| 326 | 326 | exige d’avoir un accès FTP au site Web.</p>', |
| 327 | - 'info_gauche_admin_vider' => '<b>Cette page est uniquement accessible aux responsables du site.</b><p> Elle donne accès aux différentes |
|
| 327 | + 'info_gauche_admin_vider' => '<b>Cette page est uniquement accessible aux responsables du site.</b><p> Elle donne accès aux différentes |
|
| 328 | 328 | fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui |
| 329 | 329 | exige d’avoir un accès FTP au site Web.</p>', |
| 330 | - 'info_gauche_auteurs' => 'Vous trouverez ici tous les auteurs du site. |
|
| 330 | + 'info_gauche_auteurs' => 'Vous trouverez ici tous les auteurs du site. |
|
| 331 | 331 | Leur statut est indiqué par la couleur de leur icone (administrateur = vert ; rédacteur = jaune).', |
| 332 | - 'info_gauche_auteurs_exterieurs' => 'Les auteurs extérieurs, sans accès au site, sont indiqués par une icone bleue ; |
|
| 332 | + 'info_gauche_auteurs_exterieurs' => 'Les auteurs extérieurs, sans accès au site, sont indiqués par une icone bleue ; |
|
| 333 | 333 | les auteurs effacés par une icone grise.', |
| 334 | - 'info_gauche_messagerie' => 'La messagerie vous permet d’échanger des messages entre rédacteurs, de conserver des pense-bêtes (pour votre usage personnel) ou d’afficher des annonces sur la page d’accueil de l’espace privé (si vous êtes administrateur).', |
|
| 335 | - 'info_gauche_statistiques_referers' => 'Cette page présente la liste des <i>referers</i>, c’est-à-dire des sites contenant des liens menant vers votre propre site, uniquement pour hier et aujourd’hui ; cette liste est remise à zéro toutes les 24 heures.', |
|
| 336 | - 'info_gauche_visiteurs_enregistres' => 'Vous trouverez ici les visiteurs enregistrés |
|
| 334 | + 'info_gauche_messagerie' => 'La messagerie vous permet d’échanger des messages entre rédacteurs, de conserver des pense-bêtes (pour votre usage personnel) ou d’afficher des annonces sur la page d’accueil de l’espace privé (si vous êtes administrateur).', |
|
| 335 | + 'info_gauche_statistiques_referers' => 'Cette page présente la liste des <i>referers</i>, c’est-à-dire des sites contenant des liens menant vers votre propre site, uniquement pour hier et aujourd’hui ; cette liste est remise à zéro toutes les 24 heures.', |
|
| 336 | + 'info_gauche_visiteurs_enregistres' => 'Vous trouverez ici les visiteurs enregistrés |
|
| 337 | 337 | dans l’espace public du site (forums sur abonnement).', |
| 338 | - 'info_generation_miniatures_images' => 'Génération de miniatures des images', |
|
| 339 | - 'info_gerer_trad_objets' => '@objets@ : gérer les liens de traduction', |
|
| 340 | - 'info_hebergeur_desactiver_envoi_email' => 'Certains hébergeurs désactivent l’envoi automatique de |
|
| 338 | + 'info_generation_miniatures_images' => 'Génération de miniatures des images', |
|
| 339 | + 'info_gerer_trad_objets' => '@objets@ : gérer les liens de traduction', |
|
| 340 | + 'info_hebergeur_desactiver_envoi_email' => 'Certains hébergeurs désactivent l’envoi automatique de |
|
| 341 | 341 | mails depuis leurs serveurs. Dans ce cas, les fonctionnalités suivantes |
| 342 | 342 | de SPIP ne fonctionneront pas.', |
| 343 | - 'info_hier' => 'hier :', |
|
| 344 | - 'info_identification_publique' => 'Votre identité publique...', |
|
| 345 | - 'info_image_process' => 'Veuillez sélectionner la meilleure méthode de fabrication des vignettes en cliquant sur l’image correspondante.', |
|
| 346 | - 'info_image_process2' => 'Si aucune image n’apparaît, alors le serveur qui héberge votre site n’a pas été configuré pour utiliser de tels outils. Si vous souhaitez utiliser ces fonctions, contactez le responsable technique et demandez les extensions « GD » ou « Imagick ».', |
|
| 347 | - 'info_images_auto' => 'Images calculées automatiquement', |
|
| 348 | - 'info_informations_personnelles' => 'Informations personnelles', |
|
| 349 | - 'info_inscription' => 'Inscription le', |
|
| 350 | - 'info_inscription_automatique' => 'Inscription automatique de nouveaux rédacteurs', |
|
| 351 | - 'info_jeu_caractere' => 'Jeu de caractères du site', |
|
| 352 | - 'info_jours' => 'jours', |
|
| 353 | - 'info_laisser_champs_vides' => 'laisser ces champs vides)', |
|
| 354 | - 'info_langues' => 'Langues du site', |
|
| 355 | - 'info_ldap_ok' => 'L’authentification LDAP est installée.', |
|
| 356 | - 'info_lien_hypertexte' => 'Lien hypertexte :', |
|
| 357 | - 'info_liste_nouveautes_envoyee' => 'La liste des nouveautés a été envoyée', |
|
| 358 | - 'info_liste_redacteurs_connectes' => 'Liste des rédacteurs connectés', |
|
| 359 | - 'info_login_existant' => 'Ce login existe déjà.', |
|
| 360 | - 'info_login_trop_court' => 'Login trop court.', |
|
| 361 | - 'info_login_trop_court_car_pluriel' => 'Le login doit contenir au moins @nb@ caractères.', |
|
| 362 | - 'info_logos' => 'Les logos', |
|
| 363 | - 'info_maximum' => 'maximum :', |
|
| 364 | - 'info_meme_rubrique' => 'Dans la même rubrique', |
|
| 365 | - 'info_message_en_redaction' => 'Vos messages en cours de rédaction', |
|
| 366 | - 'info_message_technique' => 'Message technique :', |
|
| 367 | - 'info_messagerie_interne' => 'Messagerie interne', |
|
| 368 | - 'info_mise_a_niveau_base' => 'mise à niveau de votre base SQL', |
|
| 369 | - 'info_mise_a_niveau_base_2' => '{{Attention !}} Vous avez installé une version |
|
| 343 | + 'info_hier' => 'hier :', |
|
| 344 | + 'info_identification_publique' => 'Votre identité publique...', |
|
| 345 | + 'info_image_process' => 'Veuillez sélectionner la meilleure méthode de fabrication des vignettes en cliquant sur l’image correspondante.', |
|
| 346 | + 'info_image_process2' => 'Si aucune image n’apparaît, alors le serveur qui héberge votre site n’a pas été configuré pour utiliser de tels outils. Si vous souhaitez utiliser ces fonctions, contactez le responsable technique et demandez les extensions « GD » ou « Imagick ».', |
|
| 347 | + 'info_images_auto' => 'Images calculées automatiquement', |
|
| 348 | + 'info_informations_personnelles' => 'Informations personnelles', |
|
| 349 | + 'info_inscription' => 'Inscription le', |
|
| 350 | + 'info_inscription_automatique' => 'Inscription automatique de nouveaux rédacteurs', |
|
| 351 | + 'info_jeu_caractere' => 'Jeu de caractères du site', |
|
| 352 | + 'info_jours' => 'jours', |
|
| 353 | + 'info_laisser_champs_vides' => 'laisser ces champs vides)', |
|
| 354 | + 'info_langues' => 'Langues du site', |
|
| 355 | + 'info_ldap_ok' => 'L’authentification LDAP est installée.', |
|
| 356 | + 'info_lien_hypertexte' => 'Lien hypertexte :', |
|
| 357 | + 'info_liste_nouveautes_envoyee' => 'La liste des nouveautés a été envoyée', |
|
| 358 | + 'info_liste_redacteurs_connectes' => 'Liste des rédacteurs connectés', |
|
| 359 | + 'info_login_existant' => 'Ce login existe déjà.', |
|
| 360 | + 'info_login_trop_court' => 'Login trop court.', |
|
| 361 | + 'info_login_trop_court_car_pluriel' => 'Le login doit contenir au moins @nb@ caractères.', |
|
| 362 | + 'info_logos' => 'Les logos', |
|
| 363 | + 'info_maximum' => 'maximum :', |
|
| 364 | + 'info_meme_rubrique' => 'Dans la même rubrique', |
|
| 365 | + 'info_message_en_redaction' => 'Vos messages en cours de rédaction', |
|
| 366 | + 'info_message_technique' => 'Message technique :', |
|
| 367 | + 'info_messagerie_interne' => 'Messagerie interne', |
|
| 368 | + 'info_mise_a_niveau_base' => 'mise à niveau de votre base SQL', |
|
| 369 | + 'info_mise_a_niveau_base_2' => '{{Attention !}} Vous avez installé une version |
|
| 370 | 370 | des fichiers SPIP {antérieure} à celle qui se trouvait |
| 371 | 371 | auparavant sur ce site : votre base de données risque d’être |
| 372 | 372 | perdue et votre site ne fonctionnera plus.<br />{{Réinstallez les |
| 373 | 373 | fichiers de SPIP.}}', |
| 374 | - 'info_modification_enregistree' => 'Votre modification a été enregistrée', |
|
| 375 | - 'info_modifier_auteur' => 'Modifier l’auteur :', |
|
| 376 | - 'info_modifier_rubrique' => 'Modifier la rubrique :', |
|
| 377 | - 'info_modifier_titre' => 'Modifier : @titre@', |
|
| 378 | - 'info_mon_site_spip' => 'Mon site SPIP', |
|
| 379 | - 'info_moyenne' => 'moyenne :', |
|
| 380 | - 'info_multi_cet_article' => 'Langue de cet article :', |
|
| 381 | - 'info_multi_langues_choisies' => 'Veuillez sélectionner ci-après les langues à disposition des rédacteurs de votre site. |
|
| 374 | + 'info_modification_enregistree' => 'Votre modification a été enregistrée', |
|
| 375 | + 'info_modifier_auteur' => 'Modifier l’auteur :', |
|
| 376 | + 'info_modifier_rubrique' => 'Modifier la rubrique :', |
|
| 377 | + 'info_modifier_titre' => 'Modifier : @titre@', |
|
| 378 | + 'info_mon_site_spip' => 'Mon site SPIP', |
|
| 379 | + 'info_moyenne' => 'moyenne :', |
|
| 380 | + 'info_multi_cet_article' => 'Langue de cet article :', |
|
| 381 | + 'info_multi_langues_choisies' => 'Veuillez sélectionner ci-après les langues à disposition des rédacteurs de votre site. |
|
| 382 | 382 | Les langues déjà utilisées dans votre site (affichées en premier) ne peuvent pas être désactivées.', |
| 383 | - 'info_multi_objets' => '@objets@ : activer le menu de langue', |
|
| 384 | - 'info_multi_secteurs' => '... seulement pour les rubriques situées à la racine ?', |
|
| 385 | - 'info_nb_articles' => '@nb@ articles', |
|
| 386 | - 'info_nb_auteurs' => '@nb@ auteurs', |
|
| 387 | - 'info_nb_messages' => '@nb@ messages', |
|
| 388 | - 'info_nb_mots_cles' => '@nb@ mots-clés', |
|
| 389 | - 'info_nb_rubriques' => '@nb@ rubriques', |
|
| 390 | - 'info_nb_visiteurs' => '@nb@ visiteurs', |
|
| 391 | - 'info_nom' => 'Nom', |
|
| 392 | - 'info_nom_destinataire' => 'Nom du destinataire', |
|
| 393 | - 'info_nom_pas_conforme' => 'les tags html ne sont pas autorisés', |
|
| 394 | - 'info_nom_site' => 'Nom de votre site', |
|
| 395 | - 'info_nombre_articles' => '@nb_articles@ articles,', |
|
| 396 | - 'info_nombre_rubriques' => '@nb_rubriques@ rubriques,', |
|
| 397 | - 'info_nombre_sites' => '@nb_sites@ sites,', |
|
| 398 | - 'info_non_deplacer' => 'Ne pas déplacer...', |
|
| 399 | - 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP peut envoyer, régulièrement, l’annonce des dernières nouveautés du site |
|
| 383 | + 'info_multi_objets' => '@objets@ : activer le menu de langue', |
|
| 384 | + 'info_multi_secteurs' => '... seulement pour les rubriques situées à la racine ?', |
|
| 385 | + 'info_nb_articles' => '@nb@ articles', |
|
| 386 | + 'info_nb_auteurs' => '@nb@ auteurs', |
|
| 387 | + 'info_nb_messages' => '@nb@ messages', |
|
| 388 | + 'info_nb_mots_cles' => '@nb@ mots-clés', |
|
| 389 | + 'info_nb_rubriques' => '@nb@ rubriques', |
|
| 390 | + 'info_nb_visiteurs' => '@nb@ visiteurs', |
|
| 391 | + 'info_nom' => 'Nom', |
|
| 392 | + 'info_nom_destinataire' => 'Nom du destinataire', |
|
| 393 | + 'info_nom_pas_conforme' => 'les tags html ne sont pas autorisés', |
|
| 394 | + 'info_nom_site' => 'Nom de votre site', |
|
| 395 | + 'info_nombre_articles' => '@nb_articles@ articles,', |
|
| 396 | + 'info_nombre_rubriques' => '@nb_rubriques@ rubriques,', |
|
| 397 | + 'info_nombre_sites' => '@nb_sites@ sites,', |
|
| 398 | + 'info_non_deplacer' => 'Ne pas déplacer...', |
|
| 399 | + 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP peut envoyer, régulièrement, l’annonce des dernières nouveautés du site |
|
| 400 | 400 | (articles et brèves récemment publiés).', |
| 401 | - 'info_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 402 | - 'info_non_modifiable' => 'ne peut pas être modifié', |
|
| 403 | - 'info_non_suppression_mot_cle' => 'je ne veux pas supprimer ce mot-clé.', |
|
| 404 | - 'info_notes' => 'Notes', |
|
| 405 | - 'info_nouvel_article' => 'Nouvel article', |
|
| 406 | - 'info_nouvelle_traduction' => 'Nouvelle traduction :', |
|
| 407 | - 'info_numero_article' => 'ARTICLE NUMÉRO :', |
|
| 408 | - 'info_obligatoire_02' => '(obligatoire)', |
|
| 409 | - 'info_option_accepter_visiteurs' => 'Accepter l’inscription de visiteurs du site public', |
|
| 410 | - 'info_option_ne_pas_accepter_visiteurs' => 'Refuser l’inscription des visiteurs', |
|
| 411 | - 'info_options_avancees' => 'OPTIONS AVANCÉES', |
|
| 412 | - 'info_ou' => 'ou...', |
|
| 413 | - 'info_page_interdite' => 'Page interdite', |
|
| 414 | - 'info_par_nom' => 'par nom', |
|
| 415 | - 'info_par_nombre_article' => 'par nombre d’articles', |
|
| 416 | - 'info_par_statut' => 'par statut', |
|
| 417 | - 'info_par_tri' => '’(par @tri@)’', |
|
| 418 | - 'info_passe_trop_court' => 'Mot de passe trop court.', |
|
| 419 | - 'info_passe_trop_court_car_pluriel' => 'Le mot de passe doit contenir au moins @nb@ caractères.', |
|
| 420 | - 'info_passes_identiques' => 'Les deux mots de passe ne sont pas identiques.', |
|
| 421 | - 'info_plus_cinq_car' => 'plus de 5 caractères', |
|
| 422 | - 'info_plus_cinq_car_2' => '(Plus de 5 caractères)', |
|
| 423 | - 'info_plus_trois_car' => '(Plus de 3 caractères)', |
|
| 424 | - 'info_popularite' => 'popularité : @popularite@ ; visites : @visites@', |
|
| 425 | - 'info_post_scriptum' => 'Post-Scriptum', |
|
| 426 | - 'info_post_scriptum_2' => 'Post-scriptum :', |
|
| 427 | - 'info_pour' => 'pour', |
|
| 428 | - 'info_preview_texte' => 'Il est possible de prévisualiser les différents éléments éditoriaux du site ayant au moins le statut « proposé », ainsi que les éléments en cours de rédaction dont on est l’auteur. Cette fonctionnalité doit-elle être disponible pour les administrateurs, les rédacteurs, ou personne ?', |
|
| 429 | - 'info_procedez_par_etape' => 'procédez étape par étape', |
|
| 430 | - 'info_procedure_maj_version' => 'la procédure de mise à jour doit être lancée afin d’adapter |
|
| 401 | + 'info_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 402 | + 'info_non_modifiable' => 'ne peut pas être modifié', |
|
| 403 | + 'info_non_suppression_mot_cle' => 'je ne veux pas supprimer ce mot-clé.', |
|
| 404 | + 'info_notes' => 'Notes', |
|
| 405 | + 'info_nouvel_article' => 'Nouvel article', |
|
| 406 | + 'info_nouvelle_traduction' => 'Nouvelle traduction :', |
|
| 407 | + 'info_numero_article' => 'ARTICLE NUMÉRO :', |
|
| 408 | + 'info_obligatoire_02' => '(obligatoire)', |
|
| 409 | + 'info_option_accepter_visiteurs' => 'Accepter l’inscription de visiteurs du site public', |
|
| 410 | + 'info_option_ne_pas_accepter_visiteurs' => 'Refuser l’inscription des visiteurs', |
|
| 411 | + 'info_options_avancees' => 'OPTIONS AVANCÉES', |
|
| 412 | + 'info_ou' => 'ou...', |
|
| 413 | + 'info_page_interdite' => 'Page interdite', |
|
| 414 | + 'info_par_nom' => 'par nom', |
|
| 415 | + 'info_par_nombre_article' => 'par nombre d’articles', |
|
| 416 | + 'info_par_statut' => 'par statut', |
|
| 417 | + 'info_par_tri' => '’(par @tri@)’', |
|
| 418 | + 'info_passe_trop_court' => 'Mot de passe trop court.', |
|
| 419 | + 'info_passe_trop_court_car_pluriel' => 'Le mot de passe doit contenir au moins @nb@ caractères.', |
|
| 420 | + 'info_passes_identiques' => 'Les deux mots de passe ne sont pas identiques.', |
|
| 421 | + 'info_plus_cinq_car' => 'plus de 5 caractères', |
|
| 422 | + 'info_plus_cinq_car_2' => '(Plus de 5 caractères)', |
|
| 423 | + 'info_plus_trois_car' => '(Plus de 3 caractères)', |
|
| 424 | + 'info_popularite' => 'popularité : @popularite@ ; visites : @visites@', |
|
| 425 | + 'info_post_scriptum' => 'Post-Scriptum', |
|
| 426 | + 'info_post_scriptum_2' => 'Post-scriptum :', |
|
| 427 | + 'info_pour' => 'pour', |
|
| 428 | + 'info_preview_texte' => 'Il est possible de prévisualiser les différents éléments éditoriaux du site ayant au moins le statut « proposé », ainsi que les éléments en cours de rédaction dont on est l’auteur. Cette fonctionnalité doit-elle être disponible pour les administrateurs, les rédacteurs, ou personne ?', |
|
| 429 | + 'info_procedez_par_etape' => 'procédez étape par étape', |
|
| 430 | + 'info_procedure_maj_version' => 'la procédure de mise à jour doit être lancée afin d’adapter |
|
| 431 | 431 | la base de données à la nouvelle version de SPIP.', |
| 432 | - 'info_proxy_ok' => 'Test du proxy réussi.', |
|
| 433 | - 'info_ps' => 'P.-S.', |
|
| 434 | - 'info_publier' => 'publier', |
|
| 435 | - 'info_publies' => 'Vos articles publiés en ligne', |
|
| 436 | - 'info_question_accepter_visiteurs' => 'Si les squelettes de votre site prévoient l’enregistrement de visiteurs sans accès à l’espace privé, veuillez activer l’option ci-dessous :', |
|
| 437 | - 'info_question_inscription_nouveaux_redacteurs' => 'Acceptez-vous les inscriptions de nouveaux rédacteurs à |
|
| 432 | + 'info_proxy_ok' => 'Test du proxy réussi.', |
|
| 433 | + 'info_ps' => 'P.-S.', |
|
| 434 | + 'info_publier' => 'publier', |
|
| 435 | + 'info_publies' => 'Vos articles publiés en ligne', |
|
| 436 | + 'info_question_accepter_visiteurs' => 'Si les squelettes de votre site prévoient l’enregistrement de visiteurs sans accès à l’espace privé, veuillez activer l’option ci-dessous :', |
|
| 437 | + 'info_question_inscription_nouveaux_redacteurs' => 'Acceptez-vous les inscriptions de nouveaux rédacteurs à |
|
| 438 | 438 | partir du site public ? Si vous acceptez, les visiteurs pourront s’inscrire |
| 439 | 439 | depuis un formulaire automatisé et accéderont alors à l’espace privé pour |
| 440 | 440 | proposer leurs propres articles. <div class="notice">Lors de la phase d’inscription, |
@@ -443,406 +443,406 @@ discard block |
||
| 443 | 443 | hébergeurs désactivent l’envoi de mails depuis leurs |
| 444 | 444 | serveurs : dans ce cas, l’inscription automatique est |
| 445 | 445 | impossible.</div>', |
| 446 | - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', |
|
| 447 | - 'info_racine_site' => 'Racine du site', |
|
| 448 | - 'info_recharger_page' => 'Veuillez recharger cette page dans quelques instants.', |
|
| 449 | - 'info_recherche_auteur_zero' => 'Aucun résultat pour « @cherche_auteur@ ».', |
|
| 450 | - 'info_recommencer' => 'Veuillez recommencer.', |
|
| 451 | - 'info_redacteur_1' => 'Rédacteur', |
|
| 452 | - 'info_redacteur_2' => 'ayant accès à l’espace privé (<i>recommandé</i>)', |
|
| 453 | - 'info_redacteurs' => 'Rédacteurs', |
|
| 454 | - 'info_redaction_en_cours' => 'EN COURS DE RÉDACTION', |
|
| 455 | - 'info_redirection' => 'Redirection', |
|
| 456 | - 'info_redirection_activee' => 'La redirection est activée.', |
|
| 457 | - 'info_redirection_boucle' => 'Vous essayez de rediriger l’article sur lui-même.', |
|
| 458 | - 'info_redirection_desactivee' => 'La redirection a été supprimée.', |
|
| 459 | - 'info_refuses' => 'Vos articles refusés', |
|
| 460 | - 'info_reglage_ldap' => 'Options : <b>Réglage de l’importation LDAP</b>', |
|
| 461 | - 'info_renvoi_article' => '<b>Redirection.</b> Cet article renvoie à la page :', |
|
| 462 | - 'info_reserve_admin' => 'Seuls les administrateurs peuvent modifier cette adresse.', |
|
| 463 | - 'info_restreindre_rubrique' => 'Restreindre la gestion à la rubrique :', |
|
| 464 | - 'info_resultat_recherche' => 'Résultats de la recherche :', |
|
| 465 | - 'info_rubriques' => 'Rubriques', |
|
| 466 | - 'info_rubriques_02' => 'rubriques', |
|
| 467 | - 'info_rubriques_trouvees' => 'Rubriques trouvées', |
|
| 468 | - 'info_sans_titre' => 'Sans titre', |
|
| 469 | - 'info_selection_chemin_acces' => '<b>Sélectionnez</b> ci-après le chemin d’accès dans l’annuaire :', |
|
| 470 | - 'info_signatures' => 'signatures', |
|
| 471 | - 'info_site' => 'Site', |
|
| 472 | - 'info_site_2' => 'site :', |
|
| 473 | - 'info_site_min' => 'site', |
|
| 474 | - 'info_site_reference_2' => 'Site référencé', |
|
| 475 | - 'info_site_web' => 'Site Web :', |
|
| 476 | - 'info_sites' => 'sites', |
|
| 477 | - 'info_sites_lies_mot' => 'Les sites référencés liés à ce mot-clé', |
|
| 478 | - 'info_sites_proxy' => 'Utiliser un proxy', |
|
| 479 | - 'info_sites_trouves' => 'Sites trouvés', |
|
| 480 | - 'info_sous_titre' => 'Soustitre :', |
|
| 481 | - 'info_statut_administrateur' => 'Administrateur', |
|
| 482 | - 'info_statut_auteur' => 'Statut de cet auteur :', |
|
| 483 | - 'info_statut_auteur_2' => 'Je suis', |
|
| 484 | - 'info_statut_auteur_a_confirmer' => 'Inscription à confirmer', |
|
| 485 | - 'info_statut_auteur_autre' => 'Autre statut :', |
|
| 486 | - 'info_statut_redacteur' => 'Rédacteur', |
|
| 487 | - 'info_statut_utilisateurs_1' => 'Statut par défaut des utilisateurs importés', |
|
| 488 | - 'info_statut_utilisateurs_2' => 'Choisissez le statut qui est attribué aux personnes présentes dans l’annuaire LDAP lorsqu’elles se connectent pour la première fois. Vous pourrez par la suite modifier cette valeur pour chaque auteur au cas par cas.', |
|
| 489 | - 'info_suivi_activite' => 'Suivi de l’activité éditoriale', |
|
| 490 | - 'info_surtitre' => 'Surtitre :', |
|
| 491 | - 'info_syndication_integrale_1' => 'Votre site propose des fichiers de syndication (voir « <a href="@url@">@titre@</a> »).', |
|
| 492 | - 'info_syndication_integrale_2' => 'Souhaitez-vous transmettre les articles dans leur intégralité, ou ne diffuser qu’un résumé de quelques centaines de caractères ?', |
|
| 493 | - 'info_table_prefix' => 'Vous pouvez modifier le préfixe du nom des tables de données (ceci est indispensable lorsque l’on souhaite installer plusieurs sites dans la même base de données). Ce préfixe s’écrit en lettres minuscules, non accentuées, et sans espace.', |
|
| 494 | - 'info_taille_maximale_images' => 'SPIP va tester la taille maximale des images qu’il peut traiter (en millions de pixels).<br /> Les images plus grandes ne seront pas réduites.', |
|
| 495 | - 'info_taille_maximale_vignette' => 'Taille maximale des vignettes générées par le système :', |
|
| 496 | - 'info_terminer_installation' => 'Vous pouvez maintenant terminer la procédure d’installation standard.', |
|
| 497 | - 'info_texte' => 'Texte', |
|
| 498 | - 'info_texte_explicatif' => 'Texte explicatif', |
|
| 499 | - 'info_texte_long' => '(le texte est long : il apparaît donc en plusieurs parties qui seront recollées après validation.)', |
|
| 500 | - 'info_texte_message' => 'Texte de votre message', |
|
| 501 | - 'info_texte_message_02' => 'Texte du message', |
|
| 502 | - 'info_titre' => 'Titre :', |
|
| 503 | - 'info_total' => 'total :', |
|
| 504 | - 'info_tous_articles_en_redaction' => 'Tous les articles en cours de rédaction', |
|
| 505 | - 'info_tous_articles_presents' => 'Tous les articles publiés dans cette rubrique', |
|
| 506 | - 'info_tous_articles_refuses' => 'Tous les articles refusés', |
|
| 507 | - 'info_tous_les' => 'tous les :', |
|
| 508 | - 'info_tout_site' => 'Tout le site', |
|
| 509 | - 'info_tout_site2' => 'L’article n’a pas été traduit dans cette langue.', |
|
| 510 | - 'info_tout_site3' => 'L’article a été traduit dans cette langue, mais des modifications ont été apportées par la suite à l’article de référence. La traduction doit être mise à jour.', |
|
| 511 | - 'info_tout_site4' => 'L’article a été traduit dans cette langue, et la traduction est à jour.', |
|
| 512 | - 'info_tout_site5' => 'Article original.', |
|
| 513 | - 'info_tout_site6' => '<b>Attention :</b> seuls les articles originaux sont affichés. |
|
| 446 | + 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', |
|
| 447 | + 'info_racine_site' => 'Racine du site', |
|
| 448 | + 'info_recharger_page' => 'Veuillez recharger cette page dans quelques instants.', |
|
| 449 | + 'info_recherche_auteur_zero' => 'Aucun résultat pour « @cherche_auteur@ ».', |
|
| 450 | + 'info_recommencer' => 'Veuillez recommencer.', |
|
| 451 | + 'info_redacteur_1' => 'Rédacteur', |
|
| 452 | + 'info_redacteur_2' => 'ayant accès à l’espace privé (<i>recommandé</i>)', |
|
| 453 | + 'info_redacteurs' => 'Rédacteurs', |
|
| 454 | + 'info_redaction_en_cours' => 'EN COURS DE RÉDACTION', |
|
| 455 | + 'info_redirection' => 'Redirection', |
|
| 456 | + 'info_redirection_activee' => 'La redirection est activée.', |
|
| 457 | + 'info_redirection_boucle' => 'Vous essayez de rediriger l’article sur lui-même.', |
|
| 458 | + 'info_redirection_desactivee' => 'La redirection a été supprimée.', |
|
| 459 | + 'info_refuses' => 'Vos articles refusés', |
|
| 460 | + 'info_reglage_ldap' => 'Options : <b>Réglage de l’importation LDAP</b>', |
|
| 461 | + 'info_renvoi_article' => '<b>Redirection.</b> Cet article renvoie à la page :', |
|
| 462 | + 'info_reserve_admin' => 'Seuls les administrateurs peuvent modifier cette adresse.', |
|
| 463 | + 'info_restreindre_rubrique' => 'Restreindre la gestion à la rubrique :', |
|
| 464 | + 'info_resultat_recherche' => 'Résultats de la recherche :', |
|
| 465 | + 'info_rubriques' => 'Rubriques', |
|
| 466 | + 'info_rubriques_02' => 'rubriques', |
|
| 467 | + 'info_rubriques_trouvees' => 'Rubriques trouvées', |
|
| 468 | + 'info_sans_titre' => 'Sans titre', |
|
| 469 | + 'info_selection_chemin_acces' => '<b>Sélectionnez</b> ci-après le chemin d’accès dans l’annuaire :', |
|
| 470 | + 'info_signatures' => 'signatures', |
|
| 471 | + 'info_site' => 'Site', |
|
| 472 | + 'info_site_2' => 'site :', |
|
| 473 | + 'info_site_min' => 'site', |
|
| 474 | + 'info_site_reference_2' => 'Site référencé', |
|
| 475 | + 'info_site_web' => 'Site Web :', |
|
| 476 | + 'info_sites' => 'sites', |
|
| 477 | + 'info_sites_lies_mot' => 'Les sites référencés liés à ce mot-clé', |
|
| 478 | + 'info_sites_proxy' => 'Utiliser un proxy', |
|
| 479 | + 'info_sites_trouves' => 'Sites trouvés', |
|
| 480 | + 'info_sous_titre' => 'Soustitre :', |
|
| 481 | + 'info_statut_administrateur' => 'Administrateur', |
|
| 482 | + 'info_statut_auteur' => 'Statut de cet auteur :', |
|
| 483 | + 'info_statut_auteur_2' => 'Je suis', |
|
| 484 | + 'info_statut_auteur_a_confirmer' => 'Inscription à confirmer', |
|
| 485 | + 'info_statut_auteur_autre' => 'Autre statut :', |
|
| 486 | + 'info_statut_redacteur' => 'Rédacteur', |
|
| 487 | + 'info_statut_utilisateurs_1' => 'Statut par défaut des utilisateurs importés', |
|
| 488 | + 'info_statut_utilisateurs_2' => 'Choisissez le statut qui est attribué aux personnes présentes dans l’annuaire LDAP lorsqu’elles se connectent pour la première fois. Vous pourrez par la suite modifier cette valeur pour chaque auteur au cas par cas.', |
|
| 489 | + 'info_suivi_activite' => 'Suivi de l’activité éditoriale', |
|
| 490 | + 'info_surtitre' => 'Surtitre :', |
|
| 491 | + 'info_syndication_integrale_1' => 'Votre site propose des fichiers de syndication (voir « <a href="@url@">@titre@</a> »).', |
|
| 492 | + 'info_syndication_integrale_2' => 'Souhaitez-vous transmettre les articles dans leur intégralité, ou ne diffuser qu’un résumé de quelques centaines de caractères ?', |
|
| 493 | + 'info_table_prefix' => 'Vous pouvez modifier le préfixe du nom des tables de données (ceci est indispensable lorsque l’on souhaite installer plusieurs sites dans la même base de données). Ce préfixe s’écrit en lettres minuscules, non accentuées, et sans espace.', |
|
| 494 | + 'info_taille_maximale_images' => 'SPIP va tester la taille maximale des images qu’il peut traiter (en millions de pixels).<br /> Les images plus grandes ne seront pas réduites.', |
|
| 495 | + 'info_taille_maximale_vignette' => 'Taille maximale des vignettes générées par le système :', |
|
| 496 | + 'info_terminer_installation' => 'Vous pouvez maintenant terminer la procédure d’installation standard.', |
|
| 497 | + 'info_texte' => 'Texte', |
|
| 498 | + 'info_texte_explicatif' => 'Texte explicatif', |
|
| 499 | + 'info_texte_long' => '(le texte est long : il apparaît donc en plusieurs parties qui seront recollées après validation.)', |
|
| 500 | + 'info_texte_message' => 'Texte de votre message', |
|
| 501 | + 'info_texte_message_02' => 'Texte du message', |
|
| 502 | + 'info_titre' => 'Titre :', |
|
| 503 | + 'info_total' => 'total :', |
|
| 504 | + 'info_tous_articles_en_redaction' => 'Tous les articles en cours de rédaction', |
|
| 505 | + 'info_tous_articles_presents' => 'Tous les articles publiés dans cette rubrique', |
|
| 506 | + 'info_tous_articles_refuses' => 'Tous les articles refusés', |
|
| 507 | + 'info_tous_les' => 'tous les :', |
|
| 508 | + 'info_tout_site' => 'Tout le site', |
|
| 509 | + 'info_tout_site2' => 'L’article n’a pas été traduit dans cette langue.', |
|
| 510 | + 'info_tout_site3' => 'L’article a été traduit dans cette langue, mais des modifications ont été apportées par la suite à l’article de référence. La traduction doit être mise à jour.', |
|
| 511 | + 'info_tout_site4' => 'L’article a été traduit dans cette langue, et la traduction est à jour.', |
|
| 512 | + 'info_tout_site5' => 'Article original.', |
|
| 513 | + 'info_tout_site6' => '<b>Attention :</b> seuls les articles originaux sont affichés. |
|
| 514 | 514 | Les traductions sont associées à l’original, |
| 515 | 515 | dans une couleur qui indique leur état :', |
| 516 | - 'info_traductions' => 'Traductions', |
|
| 517 | - 'info_travail_colaboratif' => 'Travail collaboratif sur les articles', |
|
| 518 | - 'info_un_article' => 'un article,', |
|
| 519 | - 'info_un_site' => 'un site,', |
|
| 520 | - 'info_une_rubrique' => 'une rubrique,', |
|
| 521 | - 'info_une_rubrique_02' => '1 rubrique', |
|
| 522 | - 'info_url' => 'URL :', |
|
| 523 | - 'info_url_proxy' => 'URL du proxy', |
|
| 524 | - 'info_url_proxy_pas_conforme' => 'l’URL du proxy n’est pas valide.', |
|
| 525 | - 'info_url_site_pas_conforme' => 'l’URL du site n’est pas valide.', |
|
| 526 | - 'info_url_test_proxy' => 'URL de test', |
|
| 527 | - 'info_urlref' => 'Lien hypertexte :', |
|
| 528 | - 'info_utilisation_spip' => 'Vous pouvez maintenant commencer à utiliser le système de publication assistée...', |
|
| 529 | - 'info_visites_par_mois' => 'Affichage par mois :', |
|
| 530 | - 'info_visiteur_1' => 'Visiteur', |
|
| 531 | - 'info_visiteur_2' => 'du site public', |
|
| 532 | - 'info_visiteurs' => 'Visiteurs', |
|
| 533 | - 'info_visiteurs_02' => 'Visiteurs du site public', |
|
| 534 | - 'info_webmestre_forces' => 'Les webmestres sont actuellement définis dans <tt>@file_options@</tt>.', |
|
| 535 | - 'install_adresse_base_hebergeur' => 'Adresse de la base de données attribuée par l’hébergeur', |
|
| 536 | - 'install_connect_ok' => 'La nouvelle base a bien été déclarée sous le nom de serveur @connect@.', |
|
| 537 | - 'install_echec_annonce' => 'L’installation va probablement échouer, ou aboutir à un site non fonctionnel...', |
|
| 538 | - 'install_extension_mbstring' => 'SPIP ne fonctionne pas avec :', |
|
| 539 | - 'install_extension_php_obligatoire' => 'SPIP exige l’extension php :', |
|
| 540 | - 'install_login_base_hebergeur' => 'Login de connexion attribué par l’hébergeur', |
|
| 541 | - 'install_nom_base_hebergeur' => 'Nom de la base attribué par l’hébergeur :', |
|
| 542 | - 'install_pas_table' => 'Base actuellement sans tables', |
|
| 543 | - 'install_pass_base_hebergeur' => 'Mot de passe de connexion attribué par l’hébergeur', |
|
| 544 | - 'install_php_extension' => 'Les extensions suivantes sont manquantes : @extensions@', |
|
| 545 | - 'install_php_version' => 'PHP version @version@ insuffisant (minimum = @minimum@)', |
|
| 546 | - 'install_php_version_max' => 'PHP version @version@ trop récent (maximum = @maximum@)', |
|
| 547 | - 'install_select_langue' => 'Sélectionnez une langue puis cliquez sur le bouton « suivant » pour lancer la procédure d’installation.', |
|
| 548 | - 'install_select_type_db' => 'Indiquer le type de base de données :', |
|
| 549 | - 'install_select_type_mysql' => 'MySQL', |
|
| 550 | - 'install_select_type_pg' => 'PostgreSQL', |
|
| 551 | - 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 552 | - 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 553 | - 'install_serveur_hebergeur' => 'Serveur de base de données attribué par l’hébergeur', |
|
| 554 | - 'install_table_prefix_hebergeur' => 'Préfixe de table attribué par l’hébergeur :', |
|
| 555 | - 'install_tables_base' => 'Tables de la base', |
|
| 556 | - 'install_types_db_connus' => 'SPIP sait utiliser <b>MySQL</b> (le plus répandu) et <b>SQLite</b>.', |
|
| 557 | - 'install_types_db_connus_avertissement' => 'Le support de <b>PostgreSQL</b> est également proposé à titre experimental', |
|
| 558 | - 'instituer_erreur_statut_a_change' => 'Le statut a déjà été modifié', |
|
| 559 | - 'instituer_erreur_statut_non_autorise' => 'Vous ne pouvez pas choisir ce statut', |
|
| 560 | - 'intem_redacteur' => 'rédacteur', |
|
| 561 | - 'intitule_licence' => 'Licence', |
|
| 562 | - 'item_accepter_inscriptions' => 'Accepter les inscriptions', |
|
| 563 | - 'item_activer_messages_avertissement' => 'Activer les messages d’avertissement', |
|
| 564 | - 'item_administrateur_2' => 'administrateur', |
|
| 565 | - 'item_afficher_calendrier' => 'Afficher dans le calendrier', |
|
| 566 | - 'item_autoriser_syndication_integrale' => 'Diffuser l’intégralité des articles dans les fichiers de syndication', |
|
| 567 | - 'item_choix_administrateurs' => 'les administrateurs', |
|
| 568 | - 'item_choix_generation_miniature' => 'Générer automatiquement les miniatures des images.', |
|
| 569 | - 'item_choix_non_generation_miniature' => 'Ne pas générer de miniatures des images.', |
|
| 570 | - 'item_choix_redacteurs' => 'les rédacteurs', |
|
| 571 | - 'item_choix_visiteurs' => 'les visiteurs du site public', |
|
| 572 | - 'item_creer_fichiers_authent' => 'Créer les fichiers .htpasswd', |
|
| 573 | - 'item_login' => 'Login', |
|
| 574 | - 'item_messagerie_agenda' => 'Activer la messagerie et l’agenda', |
|
| 575 | - 'item_mots_cles_association_articles' => 'aux articles', |
|
| 576 | - 'item_mots_cles_association_rubriques' => 'aux rubriques', |
|
| 577 | - 'item_mots_cles_association_sites' => 'aux sites référencés ou syndiqués.', |
|
| 578 | - 'item_non' => 'Non', |
|
| 579 | - 'item_non_accepter_inscriptions' => 'Ne pas accepter les inscriptions', |
|
| 580 | - 'item_non_activer_messages_avertissement' => 'Pas de messages d’avertissement', |
|
| 581 | - 'item_non_afficher_calendrier' => 'Ne pas afficher dans le calendrier', |
|
| 582 | - 'item_non_autoriser_syndication_integrale' => 'Ne diffuser qu’un résumé', |
|
| 583 | - 'item_non_creer_fichiers_authent' => 'Ne pas créer ces fichiers', |
|
| 584 | - 'item_non_messagerie_agenda' => 'Désactiver la messagerie et l’agenda', |
|
| 585 | - 'item_non_publier_articles' => 'Ne pas publier les articles avant la date de publication fixée.', |
|
| 586 | - 'item_nouvel_auteur' => 'Nouvel auteur', |
|
| 587 | - 'item_nouvelle_rubrique' => 'Nouvelle rubrique', |
|
| 588 | - 'item_oui' => 'Oui', |
|
| 589 | - 'item_publier_articles' => 'Publier les articles, quelle que soit leur date de publication.', |
|
| 590 | - 'item_reponse_article' => 'Réponse à l’article', |
|
| 591 | - 'item_visiteur' => 'visiteur', |
|
| 516 | + 'info_traductions' => 'Traductions', |
|
| 517 | + 'info_travail_colaboratif' => 'Travail collaboratif sur les articles', |
|
| 518 | + 'info_un_article' => 'un article,', |
|
| 519 | + 'info_un_site' => 'un site,', |
|
| 520 | + 'info_une_rubrique' => 'une rubrique,', |
|
| 521 | + 'info_une_rubrique_02' => '1 rubrique', |
|
| 522 | + 'info_url' => 'URL :', |
|
| 523 | + 'info_url_proxy' => 'URL du proxy', |
|
| 524 | + 'info_url_proxy_pas_conforme' => 'l’URL du proxy n’est pas valide.', |
|
| 525 | + 'info_url_site_pas_conforme' => 'l’URL du site n’est pas valide.', |
|
| 526 | + 'info_url_test_proxy' => 'URL de test', |
|
| 527 | + 'info_urlref' => 'Lien hypertexte :', |
|
| 528 | + 'info_utilisation_spip' => 'Vous pouvez maintenant commencer à utiliser le système de publication assistée...', |
|
| 529 | + 'info_visites_par_mois' => 'Affichage par mois :', |
|
| 530 | + 'info_visiteur_1' => 'Visiteur', |
|
| 531 | + 'info_visiteur_2' => 'du site public', |
|
| 532 | + 'info_visiteurs' => 'Visiteurs', |
|
| 533 | + 'info_visiteurs_02' => 'Visiteurs du site public', |
|
| 534 | + 'info_webmestre_forces' => 'Les webmestres sont actuellement définis dans <tt>@file_options@</tt>.', |
|
| 535 | + 'install_adresse_base_hebergeur' => 'Adresse de la base de données attribuée par l’hébergeur', |
|
| 536 | + 'install_connect_ok' => 'La nouvelle base a bien été déclarée sous le nom de serveur @connect@.', |
|
| 537 | + 'install_echec_annonce' => 'L’installation va probablement échouer, ou aboutir à un site non fonctionnel...', |
|
| 538 | + 'install_extension_mbstring' => 'SPIP ne fonctionne pas avec :', |
|
| 539 | + 'install_extension_php_obligatoire' => 'SPIP exige l’extension php :', |
|
| 540 | + 'install_login_base_hebergeur' => 'Login de connexion attribué par l’hébergeur', |
|
| 541 | + 'install_nom_base_hebergeur' => 'Nom de la base attribué par l’hébergeur :', |
|
| 542 | + 'install_pas_table' => 'Base actuellement sans tables', |
|
| 543 | + 'install_pass_base_hebergeur' => 'Mot de passe de connexion attribué par l’hébergeur', |
|
| 544 | + 'install_php_extension' => 'Les extensions suivantes sont manquantes : @extensions@', |
|
| 545 | + 'install_php_version' => 'PHP version @version@ insuffisant (minimum = @minimum@)', |
|
| 546 | + 'install_php_version_max' => 'PHP version @version@ trop récent (maximum = @maximum@)', |
|
| 547 | + 'install_select_langue' => 'Sélectionnez une langue puis cliquez sur le bouton « suivant » pour lancer la procédure d’installation.', |
|
| 548 | + 'install_select_type_db' => 'Indiquer le type de base de données :', |
|
| 549 | + 'install_select_type_mysql' => 'MySQL', |
|
| 550 | + 'install_select_type_pg' => 'PostgreSQL', |
|
| 551 | + 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 552 | + 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 553 | + 'install_serveur_hebergeur' => 'Serveur de base de données attribué par l’hébergeur', |
|
| 554 | + 'install_table_prefix_hebergeur' => 'Préfixe de table attribué par l’hébergeur :', |
|
| 555 | + 'install_tables_base' => 'Tables de la base', |
|
| 556 | + 'install_types_db_connus' => 'SPIP sait utiliser <b>MySQL</b> (le plus répandu) et <b>SQLite</b>.', |
|
| 557 | + 'install_types_db_connus_avertissement' => 'Le support de <b>PostgreSQL</b> est également proposé à titre experimental', |
|
| 558 | + 'instituer_erreur_statut_a_change' => 'Le statut a déjà été modifié', |
|
| 559 | + 'instituer_erreur_statut_non_autorise' => 'Vous ne pouvez pas choisir ce statut', |
|
| 560 | + 'intem_redacteur' => 'rédacteur', |
|
| 561 | + 'intitule_licence' => 'Licence', |
|
| 562 | + 'item_accepter_inscriptions' => 'Accepter les inscriptions', |
|
| 563 | + 'item_activer_messages_avertissement' => 'Activer les messages d’avertissement', |
|
| 564 | + 'item_administrateur_2' => 'administrateur', |
|
| 565 | + 'item_afficher_calendrier' => 'Afficher dans le calendrier', |
|
| 566 | + 'item_autoriser_syndication_integrale' => 'Diffuser l’intégralité des articles dans les fichiers de syndication', |
|
| 567 | + 'item_choix_administrateurs' => 'les administrateurs', |
|
| 568 | + 'item_choix_generation_miniature' => 'Générer automatiquement les miniatures des images.', |
|
| 569 | + 'item_choix_non_generation_miniature' => 'Ne pas générer de miniatures des images.', |
|
| 570 | + 'item_choix_redacteurs' => 'les rédacteurs', |
|
| 571 | + 'item_choix_visiteurs' => 'les visiteurs du site public', |
|
| 572 | + 'item_creer_fichiers_authent' => 'Créer les fichiers .htpasswd', |
|
| 573 | + 'item_login' => 'Login', |
|
| 574 | + 'item_messagerie_agenda' => 'Activer la messagerie et l’agenda', |
|
| 575 | + 'item_mots_cles_association_articles' => 'aux articles', |
|
| 576 | + 'item_mots_cles_association_rubriques' => 'aux rubriques', |
|
| 577 | + 'item_mots_cles_association_sites' => 'aux sites référencés ou syndiqués.', |
|
| 578 | + 'item_non' => 'Non', |
|
| 579 | + 'item_non_accepter_inscriptions' => 'Ne pas accepter les inscriptions', |
|
| 580 | + 'item_non_activer_messages_avertissement' => 'Pas de messages d’avertissement', |
|
| 581 | + 'item_non_afficher_calendrier' => 'Ne pas afficher dans le calendrier', |
|
| 582 | + 'item_non_autoriser_syndication_integrale' => 'Ne diffuser qu’un résumé', |
|
| 583 | + 'item_non_creer_fichiers_authent' => 'Ne pas créer ces fichiers', |
|
| 584 | + 'item_non_messagerie_agenda' => 'Désactiver la messagerie et l’agenda', |
|
| 585 | + 'item_non_publier_articles' => 'Ne pas publier les articles avant la date de publication fixée.', |
|
| 586 | + 'item_nouvel_auteur' => 'Nouvel auteur', |
|
| 587 | + 'item_nouvelle_rubrique' => 'Nouvelle rubrique', |
|
| 588 | + 'item_oui' => 'Oui', |
|
| 589 | + 'item_publier_articles' => 'Publier les articles, quelle que soit leur date de publication.', |
|
| 590 | + 'item_reponse_article' => 'Réponse à l’article', |
|
| 591 | + 'item_visiteur' => 'visiteur', |
|
| 592 | 592 | |
| 593 | - // J |
|
| 594 | - 'jour_non_connu_nc' => 'n.c.', |
|
| 593 | + // J |
|
| 594 | + 'jour_non_connu_nc' => 'n.c.', |
|
| 595 | 595 | |
| 596 | - // L |
|
| 597 | - 'label_bando_outils' => 'Barre d’outils', |
|
| 598 | - 'label_bando_outils_afficher' => 'Afficher les outils', |
|
| 599 | - 'label_bando_outils_masquer' => 'Masquer les outils', |
|
| 600 | - 'label_choix_langue' => 'Sélectionnez votre langue', |
|
| 601 | - 'label_nom_fichier_connect' => 'Indiquez le nom utilisé pour ce serveur', |
|
| 602 | - 'label_slogan_site' => 'Slogan du site', |
|
| 603 | - 'label_taille_ecran' => 'Largeur de l’écran', |
|
| 604 | - 'label_texte_et_icones_navigation' => 'Menu de navigation', |
|
| 605 | - 'label_texte_et_icones_page' => 'Affichage dans la page', |
|
| 606 | - 'ldap_correspondance' => 'héritage du champ @champ@', |
|
| 607 | - 'ldap_correspondance_1' => 'Héritage des champs LDAP', |
|
| 608 | - 'ldap_correspondance_2' => 'Pour chacun des champs SPIP suivants, indiquer le nom du champ LDAP correspondant. Laisser vide pour ne pas le remplir, séparer par des espaces ou des virgules pour essayer plusieurs champs LDAP.', |
|
| 609 | - 'lien_ajouter_auteur' => 'Ajouter cet auteur', |
|
| 610 | - 'lien_ajouter_une_rubrique' => 'Ajouter cette rubrique', |
|
| 611 | - 'lien_email' => 'email', |
|
| 612 | - 'lien_nom_site' => 'NOM DU SITE :', |
|
| 613 | - 'lien_rapide_contenu' => 'Aller au contenu', |
|
| 614 | - 'lien_rapide_navigation' => 'Aller à la navigation', |
|
| 615 | - 'lien_rapide_recherche' => 'Aller à la recherche', |
|
| 616 | - 'lien_retirer_auteur' => 'Retirer l’auteur', |
|
| 617 | - 'lien_retirer_rubrique' => 'Retirer la rubrique', |
|
| 618 | - 'lien_retirer_tous_auteurs' => 'Retirer tous les auteurs', |
|
| 619 | - 'lien_retirer_toutes_rubriques' => 'Retirer toutes les rubriques', |
|
| 620 | - 'lien_site' => 'site', |
|
| 621 | - 'lien_tout_decocher' => 'Tout décocher', |
|
| 622 | - 'lien_tout_deplier' => 'Tout déplier', |
|
| 623 | - 'lien_tout_replier' => 'Tout replier', |
|
| 624 | - 'lien_tout_supprimer' => 'Tout supprimer', |
|
| 625 | - 'lien_trier_nom' => 'Trier par nom', |
|
| 626 | - 'lien_trier_nombre_articles' => 'Trier par nombre d’articles', |
|
| 627 | - 'lien_trier_statut' => 'Trier par statut', |
|
| 628 | - 'lien_voir_en_ligne' => 'VOIR EN LIGNE :', |
|
| 629 | - 'logo_article' => 'Logo de l’article', |
|
| 630 | - 'logo_auteur' => 'Logo de l’auteur', |
|
| 631 | - 'logo_rubrique' => 'Logo de la rubrique', |
|
| 632 | - 'logo_site' => 'Logo de ce site', |
|
| 633 | - 'logo_standard_rubrique' => 'Logo standard des rubriques', |
|
| 634 | - 'logo_survol' => 'Logo pour survol', |
|
| 596 | + // L |
|
| 597 | + 'label_bando_outils' => 'Barre d’outils', |
|
| 598 | + 'label_bando_outils_afficher' => 'Afficher les outils', |
|
| 599 | + 'label_bando_outils_masquer' => 'Masquer les outils', |
|
| 600 | + 'label_choix_langue' => 'Sélectionnez votre langue', |
|
| 601 | + 'label_nom_fichier_connect' => 'Indiquez le nom utilisé pour ce serveur', |
|
| 602 | + 'label_slogan_site' => 'Slogan du site', |
|
| 603 | + 'label_taille_ecran' => 'Largeur de l’écran', |
|
| 604 | + 'label_texte_et_icones_navigation' => 'Menu de navigation', |
|
| 605 | + 'label_texte_et_icones_page' => 'Affichage dans la page', |
|
| 606 | + 'ldap_correspondance' => 'héritage du champ @champ@', |
|
| 607 | + 'ldap_correspondance_1' => 'Héritage des champs LDAP', |
|
| 608 | + 'ldap_correspondance_2' => 'Pour chacun des champs SPIP suivants, indiquer le nom du champ LDAP correspondant. Laisser vide pour ne pas le remplir, séparer par des espaces ou des virgules pour essayer plusieurs champs LDAP.', |
|
| 609 | + 'lien_ajouter_auteur' => 'Ajouter cet auteur', |
|
| 610 | + 'lien_ajouter_une_rubrique' => 'Ajouter cette rubrique', |
|
| 611 | + 'lien_email' => 'email', |
|
| 612 | + 'lien_nom_site' => 'NOM DU SITE :', |
|
| 613 | + 'lien_rapide_contenu' => 'Aller au contenu', |
|
| 614 | + 'lien_rapide_navigation' => 'Aller à la navigation', |
|
| 615 | + 'lien_rapide_recherche' => 'Aller à la recherche', |
|
| 616 | + 'lien_retirer_auteur' => 'Retirer l’auteur', |
|
| 617 | + 'lien_retirer_rubrique' => 'Retirer la rubrique', |
|
| 618 | + 'lien_retirer_tous_auteurs' => 'Retirer tous les auteurs', |
|
| 619 | + 'lien_retirer_toutes_rubriques' => 'Retirer toutes les rubriques', |
|
| 620 | + 'lien_site' => 'site', |
|
| 621 | + 'lien_tout_decocher' => 'Tout décocher', |
|
| 622 | + 'lien_tout_deplier' => 'Tout déplier', |
|
| 623 | + 'lien_tout_replier' => 'Tout replier', |
|
| 624 | + 'lien_tout_supprimer' => 'Tout supprimer', |
|
| 625 | + 'lien_trier_nom' => 'Trier par nom', |
|
| 626 | + 'lien_trier_nombre_articles' => 'Trier par nombre d’articles', |
|
| 627 | + 'lien_trier_statut' => 'Trier par statut', |
|
| 628 | + 'lien_voir_en_ligne' => 'VOIR EN LIGNE :', |
|
| 629 | + 'logo_article' => 'Logo de l’article', |
|
| 630 | + 'logo_auteur' => 'Logo de l’auteur', |
|
| 631 | + 'logo_rubrique' => 'Logo de la rubrique', |
|
| 632 | + 'logo_site' => 'Logo de ce site', |
|
| 633 | + 'logo_standard_rubrique' => 'Logo standard des rubriques', |
|
| 634 | + 'logo_survol' => 'Logo pour survol', |
|
| 635 | 635 | |
| 636 | - // M |
|
| 637 | - 'menu_aide_installation_choix_base' => 'Choix de votre base', |
|
| 638 | - 'module_fichier_langue' => 'Fichier de langue', |
|
| 639 | - 'module_raccourci' => 'Raccourci', |
|
| 640 | - 'module_texte_affiche' => 'Texte affiché', |
|
| 641 | - 'module_texte_explicatif' => 'Vous pouvez insérer les raccourcis suivants dans les squelettes de votre site public. Ils seront automatiquement traduits dans les différentes langues pour lesquelles il existe un fichier de langue.', |
|
| 642 | - 'module_texte_traduction' => 'Le fichier de langue « @module@ » est disponible en :', |
|
| 643 | - 'mois_non_connu' => 'non connu', |
|
| 636 | + // M |
|
| 637 | + 'menu_aide_installation_choix_base' => 'Choix de votre base', |
|
| 638 | + 'module_fichier_langue' => 'Fichier de langue', |
|
| 639 | + 'module_raccourci' => 'Raccourci', |
|
| 640 | + 'module_texte_affiche' => 'Texte affiché', |
|
| 641 | + 'module_texte_explicatif' => 'Vous pouvez insérer les raccourcis suivants dans les squelettes de votre site public. Ils seront automatiquement traduits dans les différentes langues pour lesquelles il existe un fichier de langue.', |
|
| 642 | + 'module_texte_traduction' => 'Le fichier de langue « @module@ » est disponible en :', |
|
| 643 | + 'mois_non_connu' => 'non connu', |
|
| 644 | 644 | |
| 645 | - // N |
|
| 646 | - 'nouvelle_version_spip' => 'La mise à jour @version@ de SPIP est disponible', |
|
| 647 | - 'nouvelle_version_spip_majeure' => 'Une nouvelle version SPIP @version@ est disponible', |
|
| 645 | + // N |
|
| 646 | + 'nouvelle_version_spip' => 'La mise à jour @version@ de SPIP est disponible', |
|
| 647 | + 'nouvelle_version_spip_majeure' => 'Une nouvelle version SPIP @version@ est disponible', |
|
| 648 | 648 | |
| 649 | - // O |
|
| 650 | - 'onglet_contenu' => 'Contenu', |
|
| 651 | - 'onglet_declarer_une_autre_base' => 'Déclarer une autre base', |
|
| 652 | - 'onglet_discuter' => 'Discuter', |
|
| 653 | - 'onglet_interactivite' => 'Interactivité', |
|
| 654 | - 'onglet_proprietes' => 'Propriétés', |
|
| 655 | - 'onglet_repartition_actuelle' => 'actuellement', |
|
| 656 | - 'onglet_sous_rubriques' => 'Sous-rubriques', |
|
| 649 | + // O |
|
| 650 | + 'onglet_contenu' => 'Contenu', |
|
| 651 | + 'onglet_declarer_une_autre_base' => 'Déclarer une autre base', |
|
| 652 | + 'onglet_discuter' => 'Discuter', |
|
| 653 | + 'onglet_interactivite' => 'Interactivité', |
|
| 654 | + 'onglet_proprietes' => 'Propriétés', |
|
| 655 | + 'onglet_repartition_actuelle' => 'actuellement', |
|
| 656 | + 'onglet_sous_rubriques' => 'Sous-rubriques', |
|
| 657 | 657 | |
| 658 | - // P |
|
| 659 | - 'page_pas_proxy' => 'Cette page ne doit pas passer par le proxy', |
|
| 660 | - 'pas_de_proxy_pour' => 'Au besoin, indiquez les machines ou domaines pour lesquels ce proxy ne doit pas s’appliquer (par exemple : @exemple@)', |
|
| 661 | - 'phpinfo' => 'Configuration PHP', |
|
| 662 | - 'plugin_charge_paquet' => 'Chargement du paquet @name@', |
|
| 663 | - 'plugin_charger' => 'Télécharger', |
|
| 664 | - 'plugin_erreur_charger' => 'erreur : impossible de charger @zip@', |
|
| 665 | - 'plugin_erreur_droit1' => 'Le répertoire <code>@dest@</code> n’est pas accessible en écriture.', |
|
| 666 | - 'plugin_erreur_droit2' => 'Veuillez vérifier les droits sur ce répertoire (et le créer le cas échéant), ou installer les fichiers par FTP.', |
|
| 667 | - 'plugin_erreur_zip' => 'échec pclzip : erreur @status@', |
|
| 668 | - 'plugin_etat_developpement' => 'en développement', |
|
| 669 | - 'plugin_etat_experimental' => 'expérimental', |
|
| 670 | - 'plugin_etat_stable' => 'stable', |
|
| 671 | - 'plugin_etat_test' => 'en test', |
|
| 672 | - 'plugin_impossible_activer' => 'Impossible d’activer le plugin @plugin@', |
|
| 673 | - 'plugin_info_automatique1' => 'Si vous souhaitez autoriser l’installation automatique des plugins, veuillez :', |
|
| 674 | - 'plugin_info_automatique1_lib' => 'Si vous souhaitez autoriser l’installation automatique de cette librairie, veuillez :', |
|
| 675 | - 'plugin_info_automatique2' => 'créer un répertoire <code>@rep@</code> ;', |
|
| 676 | - 'plugin_info_automatique3' => 'vérifier que le serveur est autorisé à écrire dans ce répertoire.', |
|
| 677 | - 'plugin_info_automatique_creer' => 'à créer à la racine du site.', |
|
| 678 | - 'plugin_info_automatique_exemples' => 'exemples :', |
|
| 679 | - 'plugin_info_automatique_ftp' => 'Vous pouvez installer des plugins, par FTP, dans le répertoire <tt>@rep@</tt>', |
|
| 680 | - 'plugin_info_automatique_lib' => 'Certains plugins demandent aussi à pouvoir télécharger des fichiers dans le répertoire <code>lib/</code>, à créer le cas échéant à la racine du site.', |
|
| 681 | - 'plugin_info_automatique_liste' => 'Vos listes de plugins :', |
|
| 682 | - 'plugin_info_automatique_liste_officielle' => 'les plugins officiels', |
|
| 683 | - 'plugin_info_automatique_liste_update' => 'Mettre à jour les listes', |
|
| 684 | - 'plugin_info_automatique_ou' => 'ou...', |
|
| 685 | - 'plugin_info_automatique_select' => 'Sélectionnez ci-dessous un plugin : SPIP le téléchargera et l’installera dans le répertoire <code>@rep@</code> ; si ce plugin existe déjà, il sera mis à jour.', |
|
| 686 | - 'plugin_info_credit' => 'Crédits', |
|
| 687 | - 'plugin_info_erreur_xml' => 'La déclaration de ce plugin est incorrecte', |
|
| 688 | - 'plugin_info_install_ok' => 'Installation réussie', |
|
| 689 | - 'plugin_info_necessite' => 'Nécessite :', |
|
| 690 | - 'plugin_info_non_compatible_spip' => 'Ce plugin n’est pas compatible avec cette version de SPIP', |
|
| 691 | - 'plugin_info_plugins_dist_1' => 'Les plugins ci-dessous sont chargés et activés dans le répertoire @plugins_dist@.', |
|
| 692 | - 'plugin_info_plugins_dist_2' => 'Ils ne sont pas désactivables.', |
|
| 693 | - 'plugin_info_telecharger' => 'à télécharger depuis @url@ et à installer dans @rep@', |
|
| 694 | - 'plugin_info_upgrade_ok' => 'Mise à jour réussie', |
|
| 695 | - 'plugin_librairies_installees' => 'Librairies installées', |
|
| 696 | - 'plugin_necessite_extension_php' => 'Nécessite l’extension PHP @plugin@ en version @version@.', |
|
| 697 | - 'plugin_necessite_extension_php_sans_version' => 'Nécessite l’extension PHP @plugin@', |
|
| 698 | - 'plugin_necessite_lib' => 'Ce plugin nécessite la librairie @lib@', |
|
| 699 | - 'plugin_necessite_php' => 'Nécessite @plugin@ en version @version@.', |
|
| 700 | - 'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@.', |
|
| 701 | - 'plugin_necessite_plugin_sans_version' => 'Nécessite le plugin @plugin@', |
|
| 702 | - 'plugin_necessite_spip' => 'Nécessite SPIP en version @version@ minimum.', |
|
| 703 | - 'plugin_source' => 'source : ', |
|
| 704 | - 'plugin_titre_automatique' => 'Installation automatique', |
|
| 705 | - 'plugin_titre_automatique_ajouter' => 'Ajouter des plugins', |
|
| 706 | - 'plugin_titre_installation' => 'Installation du plugin @plugin@', |
|
| 707 | - 'plugin_titre_modifier' => 'Mes plugins', |
|
| 708 | - 'plugin_utilise_extension_php' => 'L’extension PHP @plugin@ doit être en version @version@.', |
|
| 709 | - 'plugin_utilise_php' => '@plugin@ doit être en version @version@.', |
|
| 710 | - 'plugin_utilise_plugin' => 'Le plugin @plugin@ doit être en version @version@.', |
|
| 711 | - 'plugin_zip_active' => 'Continuez pour l’activer', |
|
| 712 | - 'plugin_zip_adresse' => 'indiquez ci-dessous l’adresse d’un fichier zip de plugin à télécharger, ou encore l’adresse d’une liste de plugins.', |
|
| 713 | - 'plugin_zip_adresse_champ' => 'Adresse du plugin ou de la liste ', |
|
| 714 | - 'plugin_zip_content' => 'Il contient les fichiers suivants (@taille@),<br />prêts à installer dans le répertoire <code>@rep@</code>', |
|
| 715 | - 'plugin_zip_installe_finie' => 'Le fichier @zip@ a été décompacté et installé.', |
|
| 716 | - 'plugin_zip_installe_rep_finie' => 'Le fichier @zip@ a été décompacté et installé dans le répertoire @rep@', |
|
| 717 | - 'plugin_zip_installer' => 'Vous pouvez maintenant l’installer.', |
|
| 718 | - 'plugin_zip_telecharge' => 'Le fichier @zip@ a été téléchargé', |
|
| 719 | - 'plugins_actif_aucun' => 'Aucun plugin activé.', |
|
| 720 | - 'plugins_actif_un' => 'Un plugin activé.', |
|
| 721 | - 'plugins_actifs' => '@count@ plugins activés.', |
|
| 722 | - 'plugins_actifs_liste' => 'Actifs', |
|
| 723 | - 'plugins_compte' => '@count@ plugins', |
|
| 724 | - 'plugins_disponible_un' => 'Un plugin disponible.', |
|
| 725 | - 'plugins_disponibles' => '@count@ plugins disponibles.', |
|
| 726 | - 'plugins_erreur' => 'Erreur dans les plugins : @plugins@', |
|
| 727 | - 'plugins_liste' => 'Liste des plugins', |
|
| 728 | - 'plugins_liste_dist' => 'Plugins verrouillés', |
|
| 729 | - 'plugins_recents' => 'Plugins récents.', |
|
| 730 | - 'plugins_tous_liste' => 'Tous', |
|
| 731 | - 'plugins_vue_hierarchie' => 'Hiérarchie', |
|
| 732 | - 'plugins_vue_liste' => 'Liste', |
|
| 733 | - 'protocole_ldap' => 'Version du protocole :', |
|
| 658 | + // P |
|
| 659 | + 'page_pas_proxy' => 'Cette page ne doit pas passer par le proxy', |
|
| 660 | + 'pas_de_proxy_pour' => 'Au besoin, indiquez les machines ou domaines pour lesquels ce proxy ne doit pas s’appliquer (par exemple : @exemple@)', |
|
| 661 | + 'phpinfo' => 'Configuration PHP', |
|
| 662 | + 'plugin_charge_paquet' => 'Chargement du paquet @name@', |
|
| 663 | + 'plugin_charger' => 'Télécharger', |
|
| 664 | + 'plugin_erreur_charger' => 'erreur : impossible de charger @zip@', |
|
| 665 | + 'plugin_erreur_droit1' => 'Le répertoire <code>@dest@</code> n’est pas accessible en écriture.', |
|
| 666 | + 'plugin_erreur_droit2' => 'Veuillez vérifier les droits sur ce répertoire (et le créer le cas échéant), ou installer les fichiers par FTP.', |
|
| 667 | + 'plugin_erreur_zip' => 'échec pclzip : erreur @status@', |
|
| 668 | + 'plugin_etat_developpement' => 'en développement', |
|
| 669 | + 'plugin_etat_experimental' => 'expérimental', |
|
| 670 | + 'plugin_etat_stable' => 'stable', |
|
| 671 | + 'plugin_etat_test' => 'en test', |
|
| 672 | + 'plugin_impossible_activer' => 'Impossible d’activer le plugin @plugin@', |
|
| 673 | + 'plugin_info_automatique1' => 'Si vous souhaitez autoriser l’installation automatique des plugins, veuillez :', |
|
| 674 | + 'plugin_info_automatique1_lib' => 'Si vous souhaitez autoriser l’installation automatique de cette librairie, veuillez :', |
|
| 675 | + 'plugin_info_automatique2' => 'créer un répertoire <code>@rep@</code> ;', |
|
| 676 | + 'plugin_info_automatique3' => 'vérifier que le serveur est autorisé à écrire dans ce répertoire.', |
|
| 677 | + 'plugin_info_automatique_creer' => 'à créer à la racine du site.', |
|
| 678 | + 'plugin_info_automatique_exemples' => 'exemples :', |
|
| 679 | + 'plugin_info_automatique_ftp' => 'Vous pouvez installer des plugins, par FTP, dans le répertoire <tt>@rep@</tt>', |
|
| 680 | + 'plugin_info_automatique_lib' => 'Certains plugins demandent aussi à pouvoir télécharger des fichiers dans le répertoire <code>lib/</code>, à créer le cas échéant à la racine du site.', |
|
| 681 | + 'plugin_info_automatique_liste' => 'Vos listes de plugins :', |
|
| 682 | + 'plugin_info_automatique_liste_officielle' => 'les plugins officiels', |
|
| 683 | + 'plugin_info_automatique_liste_update' => 'Mettre à jour les listes', |
|
| 684 | + 'plugin_info_automatique_ou' => 'ou...', |
|
| 685 | + 'plugin_info_automatique_select' => 'Sélectionnez ci-dessous un plugin : SPIP le téléchargera et l’installera dans le répertoire <code>@rep@</code> ; si ce plugin existe déjà, il sera mis à jour.', |
|
| 686 | + 'plugin_info_credit' => 'Crédits', |
|
| 687 | + 'plugin_info_erreur_xml' => 'La déclaration de ce plugin est incorrecte', |
|
| 688 | + 'plugin_info_install_ok' => 'Installation réussie', |
|
| 689 | + 'plugin_info_necessite' => 'Nécessite :', |
|
| 690 | + 'plugin_info_non_compatible_spip' => 'Ce plugin n’est pas compatible avec cette version de SPIP', |
|
| 691 | + 'plugin_info_plugins_dist_1' => 'Les plugins ci-dessous sont chargés et activés dans le répertoire @plugins_dist@.', |
|
| 692 | + 'plugin_info_plugins_dist_2' => 'Ils ne sont pas désactivables.', |
|
| 693 | + 'plugin_info_telecharger' => 'à télécharger depuis @url@ et à installer dans @rep@', |
|
| 694 | + 'plugin_info_upgrade_ok' => 'Mise à jour réussie', |
|
| 695 | + 'plugin_librairies_installees' => 'Librairies installées', |
|
| 696 | + 'plugin_necessite_extension_php' => 'Nécessite l’extension PHP @plugin@ en version @version@.', |
|
| 697 | + 'plugin_necessite_extension_php_sans_version' => 'Nécessite l’extension PHP @plugin@', |
|
| 698 | + 'plugin_necessite_lib' => 'Ce plugin nécessite la librairie @lib@', |
|
| 699 | + 'plugin_necessite_php' => 'Nécessite @plugin@ en version @version@.', |
|
| 700 | + 'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@.', |
|
| 701 | + 'plugin_necessite_plugin_sans_version' => 'Nécessite le plugin @plugin@', |
|
| 702 | + 'plugin_necessite_spip' => 'Nécessite SPIP en version @version@ minimum.', |
|
| 703 | + 'plugin_source' => 'source : ', |
|
| 704 | + 'plugin_titre_automatique' => 'Installation automatique', |
|
| 705 | + 'plugin_titre_automatique_ajouter' => 'Ajouter des plugins', |
|
| 706 | + 'plugin_titre_installation' => 'Installation du plugin @plugin@', |
|
| 707 | + 'plugin_titre_modifier' => 'Mes plugins', |
|
| 708 | + 'plugin_utilise_extension_php' => 'L’extension PHP @plugin@ doit être en version @version@.', |
|
| 709 | + 'plugin_utilise_php' => '@plugin@ doit être en version @version@.', |
|
| 710 | + 'plugin_utilise_plugin' => 'Le plugin @plugin@ doit être en version @version@.', |
|
| 711 | + 'plugin_zip_active' => 'Continuez pour l’activer', |
|
| 712 | + 'plugin_zip_adresse' => 'indiquez ci-dessous l’adresse d’un fichier zip de plugin à télécharger, ou encore l’adresse d’une liste de plugins.', |
|
| 713 | + 'plugin_zip_adresse_champ' => 'Adresse du plugin ou de la liste ', |
|
| 714 | + 'plugin_zip_content' => 'Il contient les fichiers suivants (@taille@),<br />prêts à installer dans le répertoire <code>@rep@</code>', |
|
| 715 | + 'plugin_zip_installe_finie' => 'Le fichier @zip@ a été décompacté et installé.', |
|
| 716 | + 'plugin_zip_installe_rep_finie' => 'Le fichier @zip@ a été décompacté et installé dans le répertoire @rep@', |
|
| 717 | + 'plugin_zip_installer' => 'Vous pouvez maintenant l’installer.', |
|
| 718 | + 'plugin_zip_telecharge' => 'Le fichier @zip@ a été téléchargé', |
|
| 719 | + 'plugins_actif_aucun' => 'Aucun plugin activé.', |
|
| 720 | + 'plugins_actif_un' => 'Un plugin activé.', |
|
| 721 | + 'plugins_actifs' => '@count@ plugins activés.', |
|
| 722 | + 'plugins_actifs_liste' => 'Actifs', |
|
| 723 | + 'plugins_compte' => '@count@ plugins', |
|
| 724 | + 'plugins_disponible_un' => 'Un plugin disponible.', |
|
| 725 | + 'plugins_disponibles' => '@count@ plugins disponibles.', |
|
| 726 | + 'plugins_erreur' => 'Erreur dans les plugins : @plugins@', |
|
| 727 | + 'plugins_liste' => 'Liste des plugins', |
|
| 728 | + 'plugins_liste_dist' => 'Plugins verrouillés', |
|
| 729 | + 'plugins_recents' => 'Plugins récents.', |
|
| 730 | + 'plugins_tous_liste' => 'Tous', |
|
| 731 | + 'plugins_vue_hierarchie' => 'Hiérarchie', |
|
| 732 | + 'plugins_vue_liste' => 'Liste', |
|
| 733 | + 'protocole_ldap' => 'Version du protocole :', |
|
| 734 | 734 | |
| 735 | - // Q |
|
| 736 | - 'queue_executer_maintenant' => 'Exécuter maintenant', |
|
| 737 | - 'queue_info_purger' => 'Vous pouvez supprimer toutes les tâches de fond en attente et réinitialiser la liste avec les tâches périodiques', |
|
| 738 | - 'queue_nb_jobs_in_queue' => '@nb@ tâches en attente', |
|
| 739 | - 'queue_next_job_in_nb_sec' => 'Prochaine tâche dans @nb@ s', |
|
| 740 | - 'queue_no_job_in_queue' => 'Aucune tâche en attente', |
|
| 741 | - 'queue_one_job_in_queue' => '1 tâche en attente', |
|
| 742 | - 'queue_priorite_tache' => 'priorité', |
|
| 743 | - 'queue_purger_queue' => 'Réinitialiser la liste des tâches', |
|
| 744 | - 'queue_titre' => 'Tâches de fond', |
|
| 735 | + // Q |
|
| 736 | + 'queue_executer_maintenant' => 'Exécuter maintenant', |
|
| 737 | + 'queue_info_purger' => 'Vous pouvez supprimer toutes les tâches de fond en attente et réinitialiser la liste avec les tâches périodiques', |
|
| 738 | + 'queue_nb_jobs_in_queue' => '@nb@ tâches en attente', |
|
| 739 | + 'queue_next_job_in_nb_sec' => 'Prochaine tâche dans @nb@ s', |
|
| 740 | + 'queue_no_job_in_queue' => 'Aucune tâche en attente', |
|
| 741 | + 'queue_one_job_in_queue' => '1 tâche en attente', |
|
| 742 | + 'queue_priorite_tache' => 'priorité', |
|
| 743 | + 'queue_purger_queue' => 'Réinitialiser la liste des tâches', |
|
| 744 | + 'queue_titre' => 'Tâches de fond', |
|
| 745 | 745 | |
| 746 | - // R |
|
| 747 | - 'repertoire_plugins' => 'Répertoire :', |
|
| 748 | - 'required' => '(obligatoire)', |
|
| 746 | + // R |
|
| 747 | + 'repertoire_plugins' => 'Répertoire :', |
|
| 748 | + 'required' => '(obligatoire)', |
|
| 749 | 749 | |
| 750 | - // S |
|
| 751 | - 'sans_heure' => 'sans heure', |
|
| 752 | - 'statut_admin_restreint' => 'admin restreint', |
|
| 753 | - 'statut_webmestre' => 'webmestre', |
|
| 750 | + // S |
|
| 751 | + 'sans_heure' => 'sans heure', |
|
| 752 | + 'statut_admin_restreint' => 'admin restreint', |
|
| 753 | + 'statut_webmestre' => 'webmestre', |
|
| 754 | 754 | |
| 755 | - // T |
|
| 756 | - 'tache_cron_asap' => 'Tâche CRON @function@ (ASAP)', |
|
| 757 | - 'tache_cron_secondes' => 'Tâche CRON @function@ (toutes les @nb@ s)', |
|
| 758 | - 'taille_cache_image' => 'Les images calculées automatiquement par SPIP (vignettes des documents, titres présentés sous forme graphique, fonctions mathématiques au format TeX...) occupent dans le répertoire @dir@ un total de @taille@.', |
|
| 759 | - 'taille_cache_infinie' => 'Ce site ne prévoit pas de limitation de taille du répertoire du cache.', |
|
| 760 | - 'taille_cache_maxi' => 'SPIP essaie de limiter la taille du répertoire du cache de ce site à environ <b>@octets@</b> de données.', |
|
| 761 | - 'taille_cache_moins_de' => 'La taille du cache est de moins de @octets@.', |
|
| 762 | - 'taille_cache_octets' => 'La taille du cache est actuellement de @octets@ environ.', |
|
| 763 | - 'taille_cache_vide' => 'Le cache est vide.', |
|
| 764 | - 'taille_repertoire_cache' => 'Taille du répertoire cache', |
|
| 765 | - 'text_article_propose_publication' => 'Article proposé pour la publication.', |
|
| 766 | - 'texte_acces_ldap_anonyme_1' => 'Certains serveurs LDAP n’acceptent aucun accès anonyme. Dans ce cas il faut spécifier un identifiant d’accès initial afin de pouvoir ensuite rechercher des informations dans l’annuaire. Dans la plupart des cas néanmoins, les champs suivants pourront être laissés vides.', |
|
| 767 | - 'texte_admin_effacer_01' => 'Cette commande efface <i>tout</i> le contenu de la base de données, |
|
| 755 | + // T |
|
| 756 | + 'tache_cron_asap' => 'Tâche CRON @function@ (ASAP)', |
|
| 757 | + 'tache_cron_secondes' => 'Tâche CRON @function@ (toutes les @nb@ s)', |
|
| 758 | + 'taille_cache_image' => 'Les images calculées automatiquement par SPIP (vignettes des documents, titres présentés sous forme graphique, fonctions mathématiques au format TeX...) occupent dans le répertoire @dir@ un total de @taille@.', |
|
| 759 | + 'taille_cache_infinie' => 'Ce site ne prévoit pas de limitation de taille du répertoire du cache.', |
|
| 760 | + 'taille_cache_maxi' => 'SPIP essaie de limiter la taille du répertoire du cache de ce site à environ <b>@octets@</b> de données.', |
|
| 761 | + 'taille_cache_moins_de' => 'La taille du cache est de moins de @octets@.', |
|
| 762 | + 'taille_cache_octets' => 'La taille du cache est actuellement de @octets@ environ.', |
|
| 763 | + 'taille_cache_vide' => 'Le cache est vide.', |
|
| 764 | + 'taille_repertoire_cache' => 'Taille du répertoire cache', |
|
| 765 | + 'text_article_propose_publication' => 'Article proposé pour la publication.', |
|
| 766 | + 'texte_acces_ldap_anonyme_1' => 'Certains serveurs LDAP n’acceptent aucun accès anonyme. Dans ce cas il faut spécifier un identifiant d’accès initial afin de pouvoir ensuite rechercher des informations dans l’annuaire. Dans la plupart des cas néanmoins, les champs suivants pourront être laissés vides.', |
|
| 767 | + 'texte_admin_effacer_01' => 'Cette commande efface <i>tout</i> le contenu de la base de données, |
|
| 768 | 768 | y compris <i>tous</i> les accès rédacteurs et administrateurs. Après l’avoir exécutée, vous devrez lancer la |
| 769 | 769 | réinstallation de SPIP pour recréer une nouvelle base ainsi qu’un premier accès administrateur.', |
| 770 | - 'texte_adresse_annuaire_1' => '(Si votre annuaire est installé sur la même machine que ce site Web, il s’agit probablement de « localhost ».)', |
|
| 771 | - 'texte_ajout_auteur' => 'L’auteur suivant a été ajouté à l’article :', |
|
| 772 | - 'texte_annuaire_ldap_1' => 'Si vous avez accès à un annuaire (LDAP), vous pouvez l’utiliser pour importer automatiquement des utilisateurs sous SPIP.', |
|
| 773 | - 'texte_article_statut' => 'Cet article est :', |
|
| 774 | - 'texte_article_virtuel' => 'Article virtuel', |
|
| 775 | - 'texte_article_virtuel_reference' => '<b>Article virtuel :</b> article référencé dans votre site SPIP, mais redirigé vers une autre URL. Pour supprimer la redirection, effacez l’URL ci-dessus.', |
|
| 776 | - 'texte_aucun_resultat_auteur' => 'Aucun résultat pour "@cherche_auteur@"', |
|
| 777 | - 'texte_auteur_messagerie' => 'Ce site peut vous indiquer en permanence la liste des rédacteurs connectés, ce qui vous permet d’échanger des messages en direct. Vous pouvez décider de ne pas apparaître dans cette liste (vous êtes « invisible » pour les autres utilisateurs).', |
|
| 778 | - 'texte_auteurs' => 'LES AUTEURS', |
|
| 779 | - 'texte_choix_base_1' => 'Choisissez votre base :', |
|
| 780 | - 'texte_choix_base_2' => 'Le serveur SQL contient plusieurs bases de données.', |
|
| 781 | - 'texte_choix_base_3' => '<b>Sélectionnez</b> ci-après celle qui vous a été attribuée par votre hébergeur :', |
|
| 782 | - 'texte_choix_table_prefix' => 'Préfixe des tables :', |
|
| 783 | - 'texte_compte_element' => '@count@ élément', |
|
| 784 | - 'texte_compte_elements' => '@count@ éléments', |
|
| 785 | - 'texte_conflit_edition_correction' => 'Veuillez contrôler ci-dessous les différences entre les deux versions du texte ; vous pouvez aussi copier vos modifications, puis recommencer.', |
|
| 786 | - 'texte_connexion_mysql' => 'Consultez les informations fournies par votre hébergeur : vous devez y trouver le serveur de base de données qu’il propose et vos identifiants personnels pour vous y connecter.', |
|
| 787 | - 'texte_contenu_article' => '(Contenu de l’article en quelques mots.)', |
|
| 788 | - 'texte_contenu_articles' => 'Selon la maquette adoptée pour votre site, vous pouvez décider |
|
| 770 | + 'texte_adresse_annuaire_1' => '(Si votre annuaire est installé sur la même machine que ce site Web, il s’agit probablement de « localhost ».)', |
|
| 771 | + 'texte_ajout_auteur' => 'L’auteur suivant a été ajouté à l’article :', |
|
| 772 | + 'texte_annuaire_ldap_1' => 'Si vous avez accès à un annuaire (LDAP), vous pouvez l’utiliser pour importer automatiquement des utilisateurs sous SPIP.', |
|
| 773 | + 'texte_article_statut' => 'Cet article est :', |
|
| 774 | + 'texte_article_virtuel' => 'Article virtuel', |
|
| 775 | + 'texte_article_virtuel_reference' => '<b>Article virtuel :</b> article référencé dans votre site SPIP, mais redirigé vers une autre URL. Pour supprimer la redirection, effacez l’URL ci-dessus.', |
|
| 776 | + 'texte_aucun_resultat_auteur' => 'Aucun résultat pour "@cherche_auteur@"', |
|
| 777 | + 'texte_auteur_messagerie' => 'Ce site peut vous indiquer en permanence la liste des rédacteurs connectés, ce qui vous permet d’échanger des messages en direct. Vous pouvez décider de ne pas apparaître dans cette liste (vous êtes « invisible » pour les autres utilisateurs).', |
|
| 778 | + 'texte_auteurs' => 'LES AUTEURS', |
|
| 779 | + 'texte_choix_base_1' => 'Choisissez votre base :', |
|
| 780 | + 'texte_choix_base_2' => 'Le serveur SQL contient plusieurs bases de données.', |
|
| 781 | + 'texte_choix_base_3' => '<b>Sélectionnez</b> ci-après celle qui vous a été attribuée par votre hébergeur :', |
|
| 782 | + 'texte_choix_table_prefix' => 'Préfixe des tables :', |
|
| 783 | + 'texte_compte_element' => '@count@ élément', |
|
| 784 | + 'texte_compte_elements' => '@count@ éléments', |
|
| 785 | + 'texte_conflit_edition_correction' => 'Veuillez contrôler ci-dessous les différences entre les deux versions du texte ; vous pouvez aussi copier vos modifications, puis recommencer.', |
|
| 786 | + 'texte_connexion_mysql' => 'Consultez les informations fournies par votre hébergeur : vous devez y trouver le serveur de base de données qu’il propose et vos identifiants personnels pour vous y connecter.', |
|
| 787 | + 'texte_contenu_article' => '(Contenu de l’article en quelques mots.)', |
|
| 788 | + 'texte_contenu_articles' => 'Selon la maquette adoptée pour votre site, vous pouvez décider |
|
| 789 | 789 | que certains éléments des articles ne sont pas utilisés. |
| 790 | 790 | Utilisez la liste ci-dessous pour indiquer quels éléments sont disponibles.', |
| 791 | - 'texte_crash_base' => 'Si votre base de données a |
|
| 791 | + 'texte_crash_base' => 'Si votre base de données a |
|
| 792 | 792 | crashé, vous pouvez tenter une réparation |
| 793 | 793 | automatique.', |
| 794 | - 'texte_creer_rubrique' => 'Avant de pouvoir écrire des articles,<br /> vous devez créer une rubrique.', |
|
| 795 | - 'texte_date_creation_article' => 'DATE DE CRÉATION DE L’ARTICLE :', # on ajoute le ":" |
|
| 796 | - 'texte_date_creation_objet' => 'Date de création :', # on ajoute le ":" |
|
| 797 | - 'texte_date_publication_anterieure' => 'Date de rédaction antérieure :', |
|
| 798 | - 'texte_date_publication_anterieure_nonaffichee' => 'Ne pas afficher de date de rédaction antérieure.', |
|
| 799 | - 'texte_date_publication_article' => 'DATE DE PUBLICATION EN LIGNE :', |
|
| 800 | - 'texte_date_publication_objet' => 'Date de publication en ligne :', |
|
| 801 | - 'texte_definir_comme_traduction_rubrique' => 'Cette rubrique est une traduction de la rubrique numéro :', |
|
| 802 | - 'texte_descriptif_rapide' => 'Descriptif rapide', |
|
| 803 | - 'texte_effacer_base' => 'Effacer la base de données SPIP', |
|
| 804 | - 'texte_effacer_statistiques' => 'Effacer les statistiques', |
|
| 805 | - 'texte_en_cours_validation' => 'Les contenus ci-dessous sont en attente de validation.', |
|
| 806 | - 'texte_enrichir_mise_a_jour' => 'Vous pouvez enrichir la mise en page de votre texte en utilisant des « raccourcis typographiques ».', |
|
| 807 | - 'texte_fichier_authent' => '<b>SPIP doit-il créer les fichiers spéciaux |
|
| 794 | + 'texte_creer_rubrique' => 'Avant de pouvoir écrire des articles,<br /> vous devez créer une rubrique.', |
|
| 795 | + 'texte_date_creation_article' => 'DATE DE CRÉATION DE L’ARTICLE :', # on ajoute le ":" |
|
| 796 | + 'texte_date_creation_objet' => 'Date de création :', # on ajoute le ":" |
|
| 797 | + 'texte_date_publication_anterieure' => 'Date de rédaction antérieure :', |
|
| 798 | + 'texte_date_publication_anterieure_nonaffichee' => 'Ne pas afficher de date de rédaction antérieure.', |
|
| 799 | + 'texte_date_publication_article' => 'DATE DE PUBLICATION EN LIGNE :', |
|
| 800 | + 'texte_date_publication_objet' => 'Date de publication en ligne :', |
|
| 801 | + 'texte_definir_comme_traduction_rubrique' => 'Cette rubrique est une traduction de la rubrique numéro :', |
|
| 802 | + 'texte_descriptif_rapide' => 'Descriptif rapide', |
|
| 803 | + 'texte_effacer_base' => 'Effacer la base de données SPIP', |
|
| 804 | + 'texte_effacer_statistiques' => 'Effacer les statistiques', |
|
| 805 | + 'texte_en_cours_validation' => 'Les contenus ci-dessous sont en attente de validation.', |
|
| 806 | + 'texte_enrichir_mise_a_jour' => 'Vous pouvez enrichir la mise en page de votre texte en utilisant des « raccourcis typographiques ».', |
|
| 807 | + 'texte_fichier_authent' => '<b>SPIP doit-il créer les fichiers spéciaux |
|
| 808 | 808 | <tt>.htpasswd</tt> et <tt>.htpasswd-admin</tt> dans le répertoire @dossier@ ?</b> |
| 809 | 809 | <p>Ces fichiers peuvent vous servir à restreindre l’accès aux auteurs et administrateurs en d’autres endroits de votre site (programme externe de statistiques, par exemple).</p> |
| 810 | 810 | <p>Si vous n’en avez pas l’utilité, vous pouvez laisser cette option à sa valeur par défaut (pas de création des fichiers).</p>', |
| 811 | - 'texte_informations_personnelles_1' => 'Le système va maintenant vous créer un accès personnalisé au site.', |
|
| 812 | - 'texte_informations_personnelles_2' => '(Note : il s’agit d’une réinstallation, si votre accès marche toujours vous pouvez', |
|
| 813 | - 'texte_introductif_article' => '(Texte introductif de l’article.)', |
|
| 814 | - 'texte_jeu_caractere' => 'Il est conseillé d’employer, sur votre site, l’alphabet universel (<tt>utf-8</tt>) : celui-ci permet l’affichage de textes dans toutes les langues, et ne pose plus de problèmes de compatibilité avec les navigateurs modernes.', |
|
| 815 | - 'texte_jeu_caractere_3' => 'Votre site est actuellement installé dans le jeu de caractères :', |
|
| 816 | - 'texte_jeu_caractere_4' => 'Si cela ne correspond pas à la réalité de vos données (suite, par exemple, à une restauration de base de données), ou si <em>vous démarrez ce site</em> et souhaitez partir sur un autre jeu de caractères, veuillez indiquer ce dernier ici :', |
|
| 817 | - 'texte_login_ldap_1' => '(Laisser vide pour un accès anonyme, ou entrer le chemin complet, par exemple « <tt>uid=dupont, ou=users, dc=mon-domaine, dc=com</tt> ».)', |
|
| 818 | - 'texte_login_precaution' => 'Attention ! Ceci est le login sous lequel vous êtes connecté actuellement. |
|
| 811 | + 'texte_informations_personnelles_1' => 'Le système va maintenant vous créer un accès personnalisé au site.', |
|
| 812 | + 'texte_informations_personnelles_2' => '(Note : il s’agit d’une réinstallation, si votre accès marche toujours vous pouvez', |
|
| 813 | + 'texte_introductif_article' => '(Texte introductif de l’article.)', |
|
| 814 | + 'texte_jeu_caractere' => 'Il est conseillé d’employer, sur votre site, l’alphabet universel (<tt>utf-8</tt>) : celui-ci permet l’affichage de textes dans toutes les langues, et ne pose plus de problèmes de compatibilité avec les navigateurs modernes.', |
|
| 815 | + 'texte_jeu_caractere_3' => 'Votre site est actuellement installé dans le jeu de caractères :', |
|
| 816 | + 'texte_jeu_caractere_4' => 'Si cela ne correspond pas à la réalité de vos données (suite, par exemple, à une restauration de base de données), ou si <em>vous démarrez ce site</em> et souhaitez partir sur un autre jeu de caractères, veuillez indiquer ce dernier ici :', |
|
| 817 | + 'texte_login_ldap_1' => '(Laisser vide pour un accès anonyme, ou entrer le chemin complet, par exemple « <tt>uid=dupont, ou=users, dc=mon-domaine, dc=com</tt> ».)', |
|
| 818 | + 'texte_login_precaution' => 'Attention ! Ceci est le login sous lequel vous êtes connecté actuellement. |
|
| 819 | 819 | Utilisez ce formulaire avec précaution...', |
| 820 | - 'texte_messagerie_agenda' => 'Une messagerie permet aux rédacteurs du site de communiquer entre eux directement dans l’espace privé du site. Elle est associée à un agenda.', |
|
| 821 | - 'texte_mise_a_niveau_base_1' => 'Vous venez de mettre à jour les fichiers SPIP. |
|
| 820 | + 'texte_messagerie_agenda' => 'Une messagerie permet aux rédacteurs du site de communiquer entre eux directement dans l’espace privé du site. Elle est associée à un agenda.', |
|
| 821 | + 'texte_mise_a_niveau_base_1' => 'Vous venez de mettre à jour les fichiers SPIP. |
|
| 822 | 822 | Il faut maintenant mettre à niveau la base de données |
| 823 | 823 | du site.', |
| 824 | - 'texte_modifier_article' => 'Modifier l’article :', |
|
| 825 | - 'texte_multilinguisme' => 'Si vous souhaitez gérer des objets en plusieurs langues, avec une navigation complexe, vous pouvez ajouter un menu de sélection de langue sur ces objets, en fonction de l’organisation de votre site.', |
|
| 826 | - 'texte_multilinguisme_trad' => 'Vous pouvez également activer un système de gestion de liens entre les différentes traductions sur certains objets.', |
|
| 827 | - 'texte_non_compresse' => '<i>non compressé</i> (votre serveur ne supportant pas cette fonctionnalité)', |
|
| 828 | - 'texte_nouvelle_version_spip_1' => 'Vous avez installé une nouvelle version de SPIP.', |
|
| 829 | - 'texte_nouvelle_version_spip_2' => 'Cette nouvelle version nécessite une mise à jour plus complète qu’à l’accoutumée. Si vous êtes webmestre du site, veuillez effacer le fichier @connect@ et reprendre l’installation afin de mettre à jour vos paramètres de connexion à la base de données.<p> (NB. : si vous avez oublié vos paramètres de connexion, jetez un œil au fichier @connect@ avant de le supprimer...)</p>', |
|
| 830 | - 'texte_operation_echec' => 'Retournez à la page précédente, sélectionnez une autre base ou créez-en une nouvelle. Vérifiez les informations fournies par votre hébergeur.', |
|
| 831 | - 'texte_plus_trois_car' => 'plus de 3 caractères', |
|
| 832 | - 'texte_plusieurs_articles' => 'Plusieurs auteurs trouvés pour "@cherche_auteur@" :', |
|
| 833 | - 'texte_port_annuaire' => '(La valeur indiquée par défaut convient généralement.)', |
|
| 834 | - 'texte_presente_plugin' => 'Cette page liste les plugins disponibles sur le site. Vous pouvez activer les plugins nécessaires en cochant la case correspondante.', |
|
| 835 | - 'texte_proposer_publication' => 'Lorsque votre article est terminé,<br /> vous pouvez proposer sa publication.', |
|
| 836 | - 'texte_proxy' => 'Dans certains cas (intranet, réseaux protégés), les sites distants (documentation de SPIP, sites syndiqués, etc.) ne sont accessibles qu’à travers un <i>proxy HTTP</i>. Le cas échéant, indiquez ci-dessous son adresse, sous la forme @proxy_en_cours@. En général, vous laisserez cette case vide.', |
|
| 837 | - 'texte_publication_articles_post_dates' => 'Quel comportement SPIP doit-il adopter face aux articles dont la |
|
| 824 | + 'texte_modifier_article' => 'Modifier l’article :', |
|
| 825 | + 'texte_multilinguisme' => 'Si vous souhaitez gérer des objets en plusieurs langues, avec une navigation complexe, vous pouvez ajouter un menu de sélection de langue sur ces objets, en fonction de l’organisation de votre site.', |
|
| 826 | + 'texte_multilinguisme_trad' => 'Vous pouvez également activer un système de gestion de liens entre les différentes traductions sur certains objets.', |
|
| 827 | + 'texte_non_compresse' => '<i>non compressé</i> (votre serveur ne supportant pas cette fonctionnalité)', |
|
| 828 | + 'texte_nouvelle_version_spip_1' => 'Vous avez installé une nouvelle version de SPIP.', |
|
| 829 | + 'texte_nouvelle_version_spip_2' => 'Cette nouvelle version nécessite une mise à jour plus complète qu’à l’accoutumée. Si vous êtes webmestre du site, veuillez effacer le fichier @connect@ et reprendre l’installation afin de mettre à jour vos paramètres de connexion à la base de données.<p> (NB. : si vous avez oublié vos paramètres de connexion, jetez un œil au fichier @connect@ avant de le supprimer...)</p>', |
|
| 830 | + 'texte_operation_echec' => 'Retournez à la page précédente, sélectionnez une autre base ou créez-en une nouvelle. Vérifiez les informations fournies par votre hébergeur.', |
|
| 831 | + 'texte_plus_trois_car' => 'plus de 3 caractères', |
|
| 832 | + 'texte_plusieurs_articles' => 'Plusieurs auteurs trouvés pour "@cherche_auteur@" :', |
|
| 833 | + 'texte_port_annuaire' => '(La valeur indiquée par défaut convient généralement.)', |
|
| 834 | + 'texte_presente_plugin' => 'Cette page liste les plugins disponibles sur le site. Vous pouvez activer les plugins nécessaires en cochant la case correspondante.', |
|
| 835 | + 'texte_proposer_publication' => 'Lorsque votre article est terminé,<br /> vous pouvez proposer sa publication.', |
|
| 836 | + 'texte_proxy' => 'Dans certains cas (intranet, réseaux protégés), les sites distants (documentation de SPIP, sites syndiqués, etc.) ne sont accessibles qu’à travers un <i>proxy HTTP</i>. Le cas échéant, indiquez ci-dessous son adresse, sous la forme @proxy_en_cours@. En général, vous laisserez cette case vide.', |
|
| 837 | + 'texte_publication_articles_post_dates' => 'Quel comportement SPIP doit-il adopter face aux articles dont la |
|
| 838 | 838 | date de publication a été fixée à une |
| 839 | 839 | échéance future ?', |
| 840 | - 'texte_rappel_selection_champs' => '[N’oubliez pas de sélectionner correctement ce champ.]', |
|
| 841 | - 'texte_recalcul_page' => 'Si vous voulez |
|
| 840 | + 'texte_rappel_selection_champs' => '[N’oubliez pas de sélectionner correctement ce champ.]', |
|
| 841 | + 'texte_recalcul_page' => 'Si vous voulez |
|
| 842 | 842 | recalculer une seule page, passez plutôt par l’espace public et utilisez-y le bouton « recalculer ».', |
| 843 | - 'texte_recuperer_base' => 'Réparer la base de données', |
|
| 844 | - 'texte_reference_mais_redirige' => 'article référencé dans votre site SPIP, mais redirigé vers une autre URL.', |
|
| 845 | - 'texte_requetes_echouent' => '<b>Lorsque certaines requêtes SQL échouent |
|
| 843 | + 'texte_recuperer_base' => 'Réparer la base de données', |
|
| 844 | + 'texte_reference_mais_redirige' => 'article référencé dans votre site SPIP, mais redirigé vers une autre URL.', |
|
| 845 | + 'texte_requetes_echouent' => '<b>Lorsque certaines requêtes SQL échouent |
|
| 846 | 846 | systématiquement et sans raison apparente, il est possible |
| 847 | 847 | que ce soit à cause de la base de données |
| 848 | 848 | elle-même.</b><p> |
@@ -853,90 +853,90 @@ discard block |
||
| 853 | 853 | peut-être des indices de ce qui ne va pas...</p><p> |
| 854 | 854 | Si le problème persiste, prenez contact avec votre |
| 855 | 855 | hébergeur.</p>', |
| 856 | - 'texte_selection_langue_principale' => 'Vous pouvez sélectionner ci-dessous la « langue principale » du site. Ce choix ne vous oblige - heureusement ! - pas à écrire vos articles dans la langue sélectionnée, mais permet de déterminer : |
|
| 856 | + 'texte_selection_langue_principale' => 'Vous pouvez sélectionner ci-dessous la « langue principale » du site. Ce choix ne vous oblige - heureusement ! - pas à écrire vos articles dans la langue sélectionnée, mais permet de déterminer : |
|
| 857 | 857 | <ul><li> le format par défaut des dates sur le site public ;</li> |
| 858 | 858 | <li> la nature du moteur typographique que SPIP doit utiliser pour le rendu des textes ;</li> |
| 859 | 859 | <li> la langue utilisée dans les formulaires du site public ;</li> |
| 860 | 860 | <li> la langue présentée par défaut dans l’espace privé.</li></ul>', |
| 861 | - 'texte_sous_titre' => 'Sous-titre', |
|
| 862 | - 'texte_statistiques_visites' => '(barres foncées : dimanche / courbe foncée : évolution de la moyenne)', |
|
| 863 | - 'texte_statut_attente_validation' => 'en attente de validation', |
|
| 864 | - 'texte_statut_publies' => 'publiés en ligne', |
|
| 865 | - 'texte_statut_refuses' => 'refusés', |
|
| 866 | - 'texte_suppression_fichiers' => 'Utilisez cette commande afin de supprimer tous les fichiers présents |
|
| 861 | + 'texte_sous_titre' => 'Sous-titre', |
|
| 862 | + 'texte_statistiques_visites' => '(barres foncées : dimanche / courbe foncée : évolution de la moyenne)', |
|
| 863 | + 'texte_statut_attente_validation' => 'en attente de validation', |
|
| 864 | + 'texte_statut_publies' => 'publiés en ligne', |
|
| 865 | + 'texte_statut_refuses' => 'refusés', |
|
| 866 | + 'texte_suppression_fichiers' => 'Utilisez cette commande afin de supprimer tous les fichiers présents |
|
| 867 | 867 | dans le cache SPIP. Cela permet par exemple de forcer un recalcul de toutes les pages si vous |
| 868 | 868 | avez fait des modifications importantes de graphisme ou de structure du site.', |
| 869 | - 'texte_sur_titre' => 'Sur-titre', |
|
| 870 | - 'texte_table_ok' => ' : cette table est OK.', |
|
| 871 | - 'texte_tentative_recuperation' => 'Tentative de réparation', |
|
| 872 | - 'texte_tenter_reparation' => 'Tenter une réparation de la base de données', |
|
| 873 | - 'texte_test_proxy' => 'Pour faire un essai de ce proxy, indiquez ici l’adresse d’un site Web |
|
| 869 | + 'texte_sur_titre' => 'Sur-titre', |
|
| 870 | + 'texte_table_ok' => ' : cette table est OK.', |
|
| 871 | + 'texte_tentative_recuperation' => 'Tentative de réparation', |
|
| 872 | + 'texte_tenter_reparation' => 'Tenter une réparation de la base de données', |
|
| 873 | + 'texte_test_proxy' => 'Pour faire un essai de ce proxy, indiquez ici l’adresse d’un site Web |
|
| 874 | 874 | que vous souhaitez tester.', |
| 875 | - 'texte_titre_02' => 'Titre :', |
|
| 876 | - 'texte_titre_obligatoire' => '<b>Titre</b> [Obligatoire]', |
|
| 877 | - 'texte_travail_article' => '@nom_auteur_modif@ a travaillé sur cet article il y a @date_diff@ minutes', |
|
| 878 | - 'texte_travail_collaboratif' => 'S’il est fréquent que plusieurs rédacteurs |
|
| 875 | + 'texte_titre_02' => 'Titre :', |
|
| 876 | + 'texte_titre_obligatoire' => '<b>Titre</b> [Obligatoire]', |
|
| 877 | + 'texte_travail_article' => '@nom_auteur_modif@ a travaillé sur cet article il y a @date_diff@ minutes', |
|
| 878 | + 'texte_travail_collaboratif' => 'S’il est fréquent que plusieurs rédacteurs |
|
| 879 | 879 | travaillent sur le même article, le système |
| 880 | 880 | peut afficher les articles récemment « ouverts » |
| 881 | 881 | afin d’éviter les modifications simultanées. |
| 882 | 882 | Cette option est désactivée par défaut |
| 883 | 883 | afin d’éviter d’afficher des messages d’avertissement |
| 884 | 884 | intempestifs.', |
| 885 | - 'texte_vide' => 'vide', |
|
| 886 | - 'texte_vider_cache' => 'Vider le cache', |
|
| 887 | - 'titre_admin_tech' => 'Maintenance technique', |
|
| 888 | - 'titre_admin_vider' => 'Maintenance technique', |
|
| 889 | - 'titre_ajouter_un_auteur' => 'Ajouter un auteur', |
|
| 890 | - 'titre_ajouter_un_mot' => 'Ajouter un mot-clé', |
|
| 891 | - 'titre_cadre_afficher_article' => 'Afficher les articles', |
|
| 892 | - 'titre_cadre_afficher_traductions' => 'Afficher l’état des traductions pour les langues suivantes :', |
|
| 893 | - 'titre_cadre_ajouter_auteur' => 'AJOUTER UN AUTEUR :', |
|
| 894 | - 'titre_cadre_interieur_rubrique' => 'À l’intérieur de la rubrique', |
|
| 895 | - 'titre_cadre_numero_auteur' => 'AUTEUR NUMÉRO', |
|
| 896 | - 'titre_cadre_numero_objet' => '@objet@ NUMÉRO :', |
|
| 897 | - 'titre_cadre_signature_obligatoire' => '<b>Signature</b> [Obligatoire]<br />', |
|
| 898 | - 'titre_config_contenu_notifications' => 'Notifications', |
|
| 899 | - 'titre_config_contenu_prive' => 'Dans l’espace privé', |
|
| 900 | - 'titre_config_contenu_public' => 'Sur le site public', |
|
| 901 | - 'titre_config_fonctions' => 'Configuration du site', |
|
| 902 | - 'titre_config_langage' => 'Configurer la langue', |
|
| 903 | - 'titre_configuration' => 'Configuration du site', |
|
| 904 | - 'titre_configurer_preferences' => 'Configurer vos préférences', |
|
| 905 | - 'titre_configurer_preferences_menus' => 'Configurer vos préférences de menus', |
|
| 906 | - 'titre_conflit_edition' => 'Conflit lors de l’édition', |
|
| 907 | - 'titre_connexion_ldap' => 'Options : <b>Votre connexion LDAP</b>', |
|
| 908 | - 'titre_groupe_mots' => 'GROUPE DE MOTS :', |
|
| 909 | - 'titre_identite_site' => 'Identité du site', |
|
| 910 | - 'titre_langue_article' => 'Langue de l’article', |
|
| 911 | - 'titre_langue_rubrique' => 'Langue de la rubrique', |
|
| 912 | - 'titre_langue_trad_article' => 'LANGUE ET TRADUCTIONS DE L’ARTICLE', |
|
| 913 | - 'titre_les_articles' => 'LES ARTICLES', |
|
| 914 | - 'titre_messagerie_agenda' => 'Messagerie et agenda', |
|
| 915 | - 'titre_naviguer_dans_le_site' => 'Naviguer dans le site...', |
|
| 916 | - 'titre_nouvelle_rubrique' => 'Nouvelle rubrique', |
|
| 917 | - 'titre_numero_rubrique' => 'RUBRIQUE NUMÉRO :', |
|
| 918 | - 'titre_page_articles_edit' => 'Modifier : @titre@', |
|
| 919 | - 'titre_page_articles_page' => 'Les articles', |
|
| 920 | - 'titre_page_articles_tous' => 'Tout le site', |
|
| 921 | - 'titre_page_calendrier' => 'Calendrier @nom_mois@ @annee@', |
|
| 922 | - 'titre_page_config_contenu' => 'Configuration du site', |
|
| 923 | - 'titre_page_delete_all' => 'suppression totale et irréversible', |
|
| 924 | - 'titre_page_recherche' => 'Résultats de la recherche @recherche@', |
|
| 925 | - 'titre_page_statistiques_referers' => 'Statistiques (liens entrants)', |
|
| 926 | - 'titre_page_upgrade' => 'Mise à niveau de SPIP', |
|
| 927 | - 'titre_preference_menus_favoris' => 'Menus favoris', |
|
| 928 | - 'titre_publication_articles_post_dates' => 'Publication des articles post-datés', |
|
| 929 | - 'titre_reparation' => 'Réparation', |
|
| 930 | - 'titre_suivi_petition' => 'Suivi des pétitions', |
|
| 931 | - 'tls_ldap' => 'Transport Layer Security :', |
|
| 932 | - 'trad_article_traduction' => 'Toutes les versions de cet article :', |
|
| 933 | - 'trad_delier' => 'Ne plus lier à ces traductions', |
|
| 934 | - 'trad_lier' => 'Cet article est une traduction de l’article numéro :', |
|
| 935 | - 'trad_new' => 'Écrire une nouvelle traduction', |
|
| 885 | + 'texte_vide' => 'vide', |
|
| 886 | + 'texte_vider_cache' => 'Vider le cache', |
|
| 887 | + 'titre_admin_tech' => 'Maintenance technique', |
|
| 888 | + 'titre_admin_vider' => 'Maintenance technique', |
|
| 889 | + 'titre_ajouter_un_auteur' => 'Ajouter un auteur', |
|
| 890 | + 'titre_ajouter_un_mot' => 'Ajouter un mot-clé', |
|
| 891 | + 'titre_cadre_afficher_article' => 'Afficher les articles', |
|
| 892 | + 'titre_cadre_afficher_traductions' => 'Afficher l’état des traductions pour les langues suivantes :', |
|
| 893 | + 'titre_cadre_ajouter_auteur' => 'AJOUTER UN AUTEUR :', |
|
| 894 | + 'titre_cadre_interieur_rubrique' => 'À l’intérieur de la rubrique', |
|
| 895 | + 'titre_cadre_numero_auteur' => 'AUTEUR NUMÉRO', |
|
| 896 | + 'titre_cadre_numero_objet' => '@objet@ NUMÉRO :', |
|
| 897 | + 'titre_cadre_signature_obligatoire' => '<b>Signature</b> [Obligatoire]<br />', |
|
| 898 | + 'titre_config_contenu_notifications' => 'Notifications', |
|
| 899 | + 'titre_config_contenu_prive' => 'Dans l’espace privé', |
|
| 900 | + 'titre_config_contenu_public' => 'Sur le site public', |
|
| 901 | + 'titre_config_fonctions' => 'Configuration du site', |
|
| 902 | + 'titre_config_langage' => 'Configurer la langue', |
|
| 903 | + 'titre_configuration' => 'Configuration du site', |
|
| 904 | + 'titre_configurer_preferences' => 'Configurer vos préférences', |
|
| 905 | + 'titre_configurer_preferences_menus' => 'Configurer vos préférences de menus', |
|
| 906 | + 'titre_conflit_edition' => 'Conflit lors de l’édition', |
|
| 907 | + 'titre_connexion_ldap' => 'Options : <b>Votre connexion LDAP</b>', |
|
| 908 | + 'titre_groupe_mots' => 'GROUPE DE MOTS :', |
|
| 909 | + 'titre_identite_site' => 'Identité du site', |
|
| 910 | + 'titre_langue_article' => 'Langue de l’article', |
|
| 911 | + 'titre_langue_rubrique' => 'Langue de la rubrique', |
|
| 912 | + 'titre_langue_trad_article' => 'LANGUE ET TRADUCTIONS DE L’ARTICLE', |
|
| 913 | + 'titre_les_articles' => 'LES ARTICLES', |
|
| 914 | + 'titre_messagerie_agenda' => 'Messagerie et agenda', |
|
| 915 | + 'titre_naviguer_dans_le_site' => 'Naviguer dans le site...', |
|
| 916 | + 'titre_nouvelle_rubrique' => 'Nouvelle rubrique', |
|
| 917 | + 'titre_numero_rubrique' => 'RUBRIQUE NUMÉRO :', |
|
| 918 | + 'titre_page_articles_edit' => 'Modifier : @titre@', |
|
| 919 | + 'titre_page_articles_page' => 'Les articles', |
|
| 920 | + 'titre_page_articles_tous' => 'Tout le site', |
|
| 921 | + 'titre_page_calendrier' => 'Calendrier @nom_mois@ @annee@', |
|
| 922 | + 'titre_page_config_contenu' => 'Configuration du site', |
|
| 923 | + 'titre_page_delete_all' => 'suppression totale et irréversible', |
|
| 924 | + 'titre_page_recherche' => 'Résultats de la recherche @recherche@', |
|
| 925 | + 'titre_page_statistiques_referers' => 'Statistiques (liens entrants)', |
|
| 926 | + 'titre_page_upgrade' => 'Mise à niveau de SPIP', |
|
| 927 | + 'titre_preference_menus_favoris' => 'Menus favoris', |
|
| 928 | + 'titre_publication_articles_post_dates' => 'Publication des articles post-datés', |
|
| 929 | + 'titre_reparation' => 'Réparation', |
|
| 930 | + 'titre_suivi_petition' => 'Suivi des pétitions', |
|
| 931 | + 'tls_ldap' => 'Transport Layer Security :', |
|
| 932 | + 'trad_article_traduction' => 'Toutes les versions de cet article :', |
|
| 933 | + 'trad_delier' => 'Ne plus lier à ces traductions', |
|
| 934 | + 'trad_lier' => 'Cet article est une traduction de l’article numéro :', |
|
| 935 | + 'trad_new' => 'Écrire une nouvelle traduction', |
|
| 936 | 936 | |
| 937 | - // U |
|
| 938 | - 'utf8_convert_erreur_orig' => 'Erreur : le jeu de caractères @charset@ n’est pas supporté.', |
|
| 937 | + // U |
|
| 938 | + 'utf8_convert_erreur_orig' => 'Erreur : le jeu de caractères @charset@ n’est pas supporté.', |
|
| 939 | 939 | |
| 940 | - // V |
|
| 941 | - 'version' => 'Version :' |
|
| 940 | + // V |
|
| 941 | + 'version' => 'Version :' |
|
| 942 | 942 | ); |
@@ -19,7 +19,7 @@ discard block |
||
| 19 | 19 | use Spip\Chiffrer\SpipCles; |
| 20 | 20 | |
| 21 | 21 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 22 | - return; |
|
| 22 | + return; |
|
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | /** |
@@ -34,138 +34,138 @@ discard block |
||
| 34 | 34 | */ |
| 35 | 35 | function auth_spip_dist($login, $pass, $serveur = '', $phpauth = false) { |
| 36 | 36 | |
| 37 | - // retrouver le login |
|
| 38 | - $login = auth_spip_retrouver_login($login); |
|
| 39 | - // login inconnu, n'allons pas plus loin |
|
| 40 | - if (!$login) { |
|
| 41 | - return []; |
|
| 42 | - } |
|
| 43 | - |
|
| 44 | - $md5pass = ''; |
|
| 45 | - $shapass = $shanext = ''; |
|
| 46 | - $auteur_peut_sauver_cles = false; |
|
| 47 | - |
|
| 48 | - if ($pass) { |
|
| 49 | - $row = sql_fetsel( |
|
| 50 | - '*', |
|
| 51 | - 'spip_auteurs', |
|
| 52 | - 'login=' . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'", |
|
| 53 | - '', |
|
| 54 | - '', |
|
| 55 | - '', |
|
| 56 | - '', |
|
| 57 | - $serveur |
|
| 58 | - ); |
|
| 59 | - |
|
| 60 | - // lever un flag si cet auteur peut sauver les cles |
|
| 61 | - if ($row['statut'] === '0minirezo' and $row['webmestre'] === 'oui' and isset($row['backup_cles'])) { |
|
| 62 | - $auteur_peut_sauver_cles = true; |
|
| 63 | - } |
|
| 64 | - } |
|
| 65 | - |
|
| 66 | - // login inexistant ou mot de passe vide |
|
| 67 | - if (!$pass or !$row) { |
|
| 68 | - return []; |
|
| 69 | - } |
|
| 70 | - |
|
| 71 | - include_spip('inc/chiffrer'); |
|
| 72 | - $cles = SpipCles::instance(); |
|
| 73 | - $secret = $cles->getSecretAuth(); |
|
| 74 | - |
|
| 75 | - switch (strlen($row['pass'])) { |
|
| 76 | - case 32: |
|
| 77 | - // tres anciens mots de passe encodes en md5(alea.pass) |
|
| 78 | - $md5pass = md5($row['alea_actuel'] . $pass); |
|
| 79 | - if ($row['pass'] !== $md5pass) { |
|
| 80 | - unset($row); |
|
| 81 | - } |
|
| 82 | - break; |
|
| 83 | - case 64: |
|
| 84 | - // anciens mots de passe encodes en sha256(alea.pass) |
|
| 85 | - include_spip('auth/sha256.inc'); |
|
| 86 | - $shapass = spip_sha256($row['alea_actuel'] . $pass); |
|
| 87 | - if ($row['pass'] !== $shapass) { |
|
| 88 | - unset($row); |
|
| 89 | - } |
|
| 90 | - break; |
|
| 91 | - |
|
| 92 | - case 60: |
|
| 93 | - case 98: |
|
| 94 | - default: |
|
| 95 | - // doit-on restaurer un backup des cles ? |
|
| 96 | - if ( |
|
| 97 | - !$secret |
|
| 98 | - and $auteur_peut_sauver_cles |
|
| 99 | - and !empty($row['backup_cles']) |
|
| 100 | - ) { |
|
| 101 | - if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) { |
|
| 102 | - spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 103 | - $cles->save(); |
|
| 104 | - } |
|
| 105 | - else { |
|
| 106 | - spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR); |
|
| 107 | - sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 108 | - } |
|
| 109 | - } |
|
| 110 | - |
|
| 111 | - if (!$secret or !Password::verifier($pass, $row['pass'], $secret)) { |
|
| 112 | - unset($row); |
|
| 113 | - } |
|
| 114 | - break; |
|
| 115 | - } |
|
| 116 | - |
|
| 117 | - // Migration depuis ancienne version : si on a pas encore de cle |
|
| 118 | - // ET si c'est le login d'un auteur qui peut sauver la cle |
|
| 119 | - // créer la clé (en s'assurant bien que personne n'a de backup d'un precedent fichier cle.php) |
|
| 120 | - // si c'est un auteur normal, on ne fait rien, il garde son ancien pass hashé en sha256 en attendant le login d'un webmestre |
|
| 121 | - if (!$secret and $auteur_peut_sauver_cles) { |
|
| 122 | - if (auth_spip_initialiser_secret()) { |
|
| 123 | - $secret = $cles->getSecretAuth(); |
|
| 124 | - } |
|
| 125 | - } |
|
| 126 | - |
|
| 127 | - // login/mot de passe incorrect |
|
| 128 | - if (empty($row)) { |
|
| 129 | - return []; |
|
| 130 | - } |
|
| 131 | - |
|
| 132 | - // fait tourner le codage du pass dans la base |
|
| 133 | - // sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action() |
|
| 134 | - if (!$phpauth and $secret) { |
|
| 135 | - include_spip('inc/acces'); // pour creer_uniqid et verifier_htaccess |
|
| 136 | - $pass_hash_next = Password::hacher($pass, $secret); |
|
| 137 | - if ($pass_hash_next) { |
|
| 138 | - $set = [ |
|
| 139 | - 'alea_actuel' => 'alea_futur', // @deprecated 4.1 |
|
| 140 | - 'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text'), // @deprecated 4.1 |
|
| 141 | - 'pass' => sql_quote($pass_hash_next, $serveur, 'text'), |
|
| 142 | - ]; |
|
| 143 | - // a chaque login de webmestre : sauvegarde chiffree des clés du site (avec les pass du webmestre) |
|
| 144 | - if ($auteur_peut_sauver_cles) { |
|
| 145 | - $set['backup_cles'] = sql_quote($cles->backup($pass), $serveur, 'text'); |
|
| 146 | - } |
|
| 147 | - |
|
| 148 | - @sql_update( |
|
| 149 | - 'spip_auteurs', |
|
| 150 | - $set, |
|
| 151 | - 'id_auteur=' . intval($row['id_auteur']) . ' AND pass=' . sql_quote( |
|
| 152 | - $row['pass'], |
|
| 153 | - $serveur, |
|
| 154 | - 'text' |
|
| 155 | - ), |
|
| 156 | - [], |
|
| 157 | - $serveur |
|
| 158 | - ); |
|
| 159 | - } |
|
| 160 | - |
|
| 161 | - // En profiter pour verifier la securite de tmp/ |
|
| 162 | - // Si elle ne fonctionne pas a l'installation, prevenir |
|
| 163 | - if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) { |
|
| 164 | - return false; |
|
| 165 | - } |
|
| 166 | - } |
|
| 167 | - |
|
| 168 | - return $row; |
|
| 37 | + // retrouver le login |
|
| 38 | + $login = auth_spip_retrouver_login($login); |
|
| 39 | + // login inconnu, n'allons pas plus loin |
|
| 40 | + if (!$login) { |
|
| 41 | + return []; |
|
| 42 | + } |
|
| 43 | + |
|
| 44 | + $md5pass = ''; |
|
| 45 | + $shapass = $shanext = ''; |
|
| 46 | + $auteur_peut_sauver_cles = false; |
|
| 47 | + |
|
| 48 | + if ($pass) { |
|
| 49 | + $row = sql_fetsel( |
|
| 50 | + '*', |
|
| 51 | + 'spip_auteurs', |
|
| 52 | + 'login=' . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'", |
|
| 53 | + '', |
|
| 54 | + '', |
|
| 55 | + '', |
|
| 56 | + '', |
|
| 57 | + $serveur |
|
| 58 | + ); |
|
| 59 | + |
|
| 60 | + // lever un flag si cet auteur peut sauver les cles |
|
| 61 | + if ($row['statut'] === '0minirezo' and $row['webmestre'] === 'oui' and isset($row['backup_cles'])) { |
|
| 62 | + $auteur_peut_sauver_cles = true; |
|
| 63 | + } |
|
| 64 | + } |
|
| 65 | + |
|
| 66 | + // login inexistant ou mot de passe vide |
|
| 67 | + if (!$pass or !$row) { |
|
| 68 | + return []; |
|
| 69 | + } |
|
| 70 | + |
|
| 71 | + include_spip('inc/chiffrer'); |
|
| 72 | + $cles = SpipCles::instance(); |
|
| 73 | + $secret = $cles->getSecretAuth(); |
|
| 74 | + |
|
| 75 | + switch (strlen($row['pass'])) { |
|
| 76 | + case 32: |
|
| 77 | + // tres anciens mots de passe encodes en md5(alea.pass) |
|
| 78 | + $md5pass = md5($row['alea_actuel'] . $pass); |
|
| 79 | + if ($row['pass'] !== $md5pass) { |
|
| 80 | + unset($row); |
|
| 81 | + } |
|
| 82 | + break; |
|
| 83 | + case 64: |
|
| 84 | + // anciens mots de passe encodes en sha256(alea.pass) |
|
| 85 | + include_spip('auth/sha256.inc'); |
|
| 86 | + $shapass = spip_sha256($row['alea_actuel'] . $pass); |
|
| 87 | + if ($row['pass'] !== $shapass) { |
|
| 88 | + unset($row); |
|
| 89 | + } |
|
| 90 | + break; |
|
| 91 | + |
|
| 92 | + case 60: |
|
| 93 | + case 98: |
|
| 94 | + default: |
|
| 95 | + // doit-on restaurer un backup des cles ? |
|
| 96 | + if ( |
|
| 97 | + !$secret |
|
| 98 | + and $auteur_peut_sauver_cles |
|
| 99 | + and !empty($row['backup_cles']) |
|
| 100 | + ) { |
|
| 101 | + if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) { |
|
| 102 | + spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 103 | + $cles->save(); |
|
| 104 | + } |
|
| 105 | + else { |
|
| 106 | + spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR); |
|
| 107 | + sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 108 | + } |
|
| 109 | + } |
|
| 110 | + |
|
| 111 | + if (!$secret or !Password::verifier($pass, $row['pass'], $secret)) { |
|
| 112 | + unset($row); |
|
| 113 | + } |
|
| 114 | + break; |
|
| 115 | + } |
|
| 116 | + |
|
| 117 | + // Migration depuis ancienne version : si on a pas encore de cle |
|
| 118 | + // ET si c'est le login d'un auteur qui peut sauver la cle |
|
| 119 | + // créer la clé (en s'assurant bien que personne n'a de backup d'un precedent fichier cle.php) |
|
| 120 | + // si c'est un auteur normal, on ne fait rien, il garde son ancien pass hashé en sha256 en attendant le login d'un webmestre |
|
| 121 | + if (!$secret and $auteur_peut_sauver_cles) { |
|
| 122 | + if (auth_spip_initialiser_secret()) { |
|
| 123 | + $secret = $cles->getSecretAuth(); |
|
| 124 | + } |
|
| 125 | + } |
|
| 126 | + |
|
| 127 | + // login/mot de passe incorrect |
|
| 128 | + if (empty($row)) { |
|
| 129 | + return []; |
|
| 130 | + } |
|
| 131 | + |
|
| 132 | + // fait tourner le codage du pass dans la base |
|
| 133 | + // sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action() |
|
| 134 | + if (!$phpauth and $secret) { |
|
| 135 | + include_spip('inc/acces'); // pour creer_uniqid et verifier_htaccess |
|
| 136 | + $pass_hash_next = Password::hacher($pass, $secret); |
|
| 137 | + if ($pass_hash_next) { |
|
| 138 | + $set = [ |
|
| 139 | + 'alea_actuel' => 'alea_futur', // @deprecated 4.1 |
|
| 140 | + 'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text'), // @deprecated 4.1 |
|
| 141 | + 'pass' => sql_quote($pass_hash_next, $serveur, 'text'), |
|
| 142 | + ]; |
|
| 143 | + // a chaque login de webmestre : sauvegarde chiffree des clés du site (avec les pass du webmestre) |
|
| 144 | + if ($auteur_peut_sauver_cles) { |
|
| 145 | + $set['backup_cles'] = sql_quote($cles->backup($pass), $serveur, 'text'); |
|
| 146 | + } |
|
| 147 | + |
|
| 148 | + @sql_update( |
|
| 149 | + 'spip_auteurs', |
|
| 150 | + $set, |
|
| 151 | + 'id_auteur=' . intval($row['id_auteur']) . ' AND pass=' . sql_quote( |
|
| 152 | + $row['pass'], |
|
| 153 | + $serveur, |
|
| 154 | + 'text' |
|
| 155 | + ), |
|
| 156 | + [], |
|
| 157 | + $serveur |
|
| 158 | + ); |
|
| 159 | + } |
|
| 160 | + |
|
| 161 | + // En profiter pour verifier la securite de tmp/ |
|
| 162 | + // Si elle ne fonctionne pas a l'installation, prevenir |
|
| 163 | + if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) { |
|
| 164 | + return false; |
|
| 165 | + } |
|
| 166 | + } |
|
| 167 | + |
|
| 168 | + return $row; |
|
| 169 | 169 | } |
| 170 | 170 | |
| 171 | 171 | /** |
@@ -180,33 +180,33 @@ discard block |
||
| 180 | 180 | * @return bool |
| 181 | 181 | */ |
| 182 | 182 | function auth_spip_initialiser_secret(bool $force = false): bool { |
| 183 | - include_spip('inc/chiffrer'); |
|
| 184 | - $cles = SpipCles::instance(); |
|
| 185 | - $secret = $cles->getSecretAuth(); |
|
| 186 | - |
|
| 187 | - // on ne fait rien si on a un secret dispo |
|
| 188 | - if ($secret) { |
|
| 189 | - return false; |
|
| 190 | - } |
|
| 191 | - |
|
| 192 | - // si force, on ne verifie pas la presence d'un backup chez un webmestre |
|
| 193 | - if ($force) { |
|
| 194 | - spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 195 | - $secret = $cles->getSecretAuth(true); |
|
| 196 | - return true; |
|
| 197 | - } |
|
| 198 | - |
|
| 199 | - $has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''"); |
|
| 200 | - $has_backup = array_column($has_backup, 'id_auteur'); |
|
| 201 | - if (empty($has_backup)) { |
|
| 202 | - spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 203 | - $secret = $cles->getSecretAuth(true); |
|
| 204 | - return true; |
|
| 205 | - } |
|
| 206 | - else { |
|
| 207 | - spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR); |
|
| 208 | - return false; |
|
| 209 | - } |
|
| 183 | + include_spip('inc/chiffrer'); |
|
| 184 | + $cles = SpipCles::instance(); |
|
| 185 | + $secret = $cles->getSecretAuth(); |
|
| 186 | + |
|
| 187 | + // on ne fait rien si on a un secret dispo |
|
| 188 | + if ($secret) { |
|
| 189 | + return false; |
|
| 190 | + } |
|
| 191 | + |
|
| 192 | + // si force, on ne verifie pas la presence d'un backup chez un webmestre |
|
| 193 | + if ($force) { |
|
| 194 | + spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 195 | + $secret = $cles->getSecretAuth(true); |
|
| 196 | + return true; |
|
| 197 | + } |
|
| 198 | + |
|
| 199 | + $has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''"); |
|
| 200 | + $has_backup = array_column($has_backup, 'id_auteur'); |
|
| 201 | + if (empty($has_backup)) { |
|
| 202 | + spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 203 | + $secret = $cles->getSecretAuth(true); |
|
| 204 | + return true; |
|
| 205 | + } |
|
| 206 | + else { |
|
| 207 | + spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR); |
|
| 208 | + return false; |
|
| 209 | + } |
|
| 210 | 210 | } |
| 211 | 211 | |
| 212 | 212 | /** |
@@ -216,19 +216,19 @@ discard block |
||
| 216 | 216 | * @return array |
| 217 | 217 | */ |
| 218 | 218 | function auth_spip_formulaire_login($flux) { |
| 219 | - // javascript qui gere la securite du login en evitant de faire circuler le pass en clair |
|
| 220 | - $js = file_get_contents(find_in_path('prive/javascript/login.js')); |
|
| 221 | - $flux['data'] .= |
|
| 222 | - '<script type="text/javascript">/*<![CDATA[*/' |
|
| 223 | - . "$js\n" |
|
| 224 | - . "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "'," |
|
| 225 | - . "'page_auteur': '" . generer_url_public('informer_auteur') . "'," |
|
| 226 | - . "'informe_auteur_en_cours':false," |
|
| 227 | - . "'attente_informe':0};" |
|
| 228 | - . "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});" |
|
| 229 | - . '/*]]>*/</script>'; |
|
| 230 | - |
|
| 231 | - return $flux; |
|
| 219 | + // javascript qui gere la securite du login en evitant de faire circuler le pass en clair |
|
| 220 | + $js = file_get_contents(find_in_path('prive/javascript/login.js')); |
|
| 221 | + $flux['data'] .= |
|
| 222 | + '<script type="text/javascript">/*<![CDATA[*/' |
|
| 223 | + . "$js\n" |
|
| 224 | + . "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "'," |
|
| 225 | + . "'page_auteur': '" . generer_url_public('informer_auteur') . "'," |
|
| 226 | + . "'informe_auteur_en_cours':false," |
|
| 227 | + . "'attente_informe':0};" |
|
| 228 | + . "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});" |
|
| 229 | + . '/*]]>*/</script>'; |
|
| 230 | + |
|
| 231 | + return $flux; |
|
| 232 | 232 | } |
| 233 | 233 | |
| 234 | 234 | |
@@ -240,11 +240,11 @@ discard block |
||
| 240 | 240 | * toujours true pour un auteur cree dans SPIP |
| 241 | 241 | */ |
| 242 | 242 | function auth_spip_autoriser_modifier_login(string $serveur = ''): bool { |
| 243 | - // les fonctions d'ecriture sur base distante sont encore incompletes |
|
| 244 | - if (strlen($serveur)) { |
|
| 245 | - return false; |
|
| 246 | - } |
|
| 247 | - return true; |
|
| 243 | + // les fonctions d'ecriture sur base distante sont encore incompletes |
|
| 244 | + if (strlen($serveur)) { |
|
| 245 | + return false; |
|
| 246 | + } |
|
| 247 | + return true; |
|
| 248 | 248 | } |
| 249 | 249 | |
| 250 | 250 | /** |
@@ -258,25 +258,25 @@ discard block |
||
| 258 | 258 | * message d'erreur si login non valide, chaine vide sinon |
| 259 | 259 | */ |
| 260 | 260 | function auth_spip_verifier_login($new_login, $id_auteur = 0, $serveur = '') { |
| 261 | - // login et mot de passe |
|
| 262 | - if (strlen($new_login)) { |
|
| 263 | - if (strlen($new_login) < _LOGIN_TROP_COURT) { |
|
| 264 | - return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]); |
|
| 265 | - } else { |
|
| 266 | - $n = sql_countsel( |
|
| 267 | - 'spip_auteurs', |
|
| 268 | - 'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'", |
|
| 269 | - '', |
|
| 270 | - '', |
|
| 271 | - $serveur |
|
| 272 | - ); |
|
| 273 | - if ($n) { |
|
| 274 | - return _T('info_login_existant'); |
|
| 275 | - } |
|
| 276 | - } |
|
| 277 | - } |
|
| 278 | - |
|
| 279 | - return ''; |
|
| 261 | + // login et mot de passe |
|
| 262 | + if (strlen($new_login)) { |
|
| 263 | + if (strlen($new_login) < _LOGIN_TROP_COURT) { |
|
| 264 | + return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]); |
|
| 265 | + } else { |
|
| 266 | + $n = sql_countsel( |
|
| 267 | + 'spip_auteurs', |
|
| 268 | + 'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'", |
|
| 269 | + '', |
|
| 270 | + '', |
|
| 271 | + $serveur |
|
| 272 | + ); |
|
| 273 | + if ($n) { |
|
| 274 | + return _T('info_login_existant'); |
|
| 275 | + } |
|
| 276 | + } |
|
| 277 | + } |
|
| 278 | + |
|
| 279 | + return ''; |
|
| 280 | 280 | } |
| 281 | 281 | |
| 282 | 282 | /** |
@@ -288,41 +288,41 @@ discard block |
||
| 288 | 288 | * @return bool |
| 289 | 289 | */ |
| 290 | 290 | function auth_spip_modifier_login($new_login, $id_auteur, $serveur = '') { |
| 291 | - if (is_null($new_login) or auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') { |
|
| 292 | - return false; |
|
| 293 | - } |
|
| 294 | - if ( |
|
| 295 | - !$id_auteur = intval($id_auteur) |
|
| 296 | - or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 297 | - ) { |
|
| 298 | - return false; |
|
| 299 | - } |
|
| 300 | - if ($new_login == $auteur['login']) { |
|
| 301 | - return true; |
|
| 302 | - } // on a rien fait mais c'est bon ! |
|
| 303 | - |
|
| 304 | - include_spip('action/editer_auteur'); |
|
| 305 | - |
|
| 306 | - // vider le login des auteurs a la poubelle qui avaient ce meme login |
|
| 307 | - if (strlen($new_login)) { |
|
| 308 | - $anciens = sql_allfetsel( |
|
| 309 | - 'id_auteur', |
|
| 310 | - 'spip_auteurs', |
|
| 311 | - 'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'", |
|
| 312 | - '', |
|
| 313 | - '', |
|
| 314 | - '', |
|
| 315 | - '', |
|
| 316 | - $serveur |
|
| 317 | - ); |
|
| 318 | - while ($row = array_pop($anciens)) { |
|
| 319 | - auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur |
|
| 320 | - } |
|
| 321 | - } |
|
| 322 | - |
|
| 323 | - auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur |
|
| 324 | - |
|
| 325 | - return true; |
|
| 291 | + if (is_null($new_login) or auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') { |
|
| 292 | + return false; |
|
| 293 | + } |
|
| 294 | + if ( |
|
| 295 | + !$id_auteur = intval($id_auteur) |
|
| 296 | + or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 297 | + ) { |
|
| 298 | + return false; |
|
| 299 | + } |
|
| 300 | + if ($new_login == $auteur['login']) { |
|
| 301 | + return true; |
|
| 302 | + } // on a rien fait mais c'est bon ! |
|
| 303 | + |
|
| 304 | + include_spip('action/editer_auteur'); |
|
| 305 | + |
|
| 306 | + // vider le login des auteurs a la poubelle qui avaient ce meme login |
|
| 307 | + if (strlen($new_login)) { |
|
| 308 | + $anciens = sql_allfetsel( |
|
| 309 | + 'id_auteur', |
|
| 310 | + 'spip_auteurs', |
|
| 311 | + 'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'", |
|
| 312 | + '', |
|
| 313 | + '', |
|
| 314 | + '', |
|
| 315 | + '', |
|
| 316 | + $serveur |
|
| 317 | + ); |
|
| 318 | + while ($row = array_pop($anciens)) { |
|
| 319 | + auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur |
|
| 320 | + } |
|
| 321 | + } |
|
| 322 | + |
|
| 323 | + auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur |
|
| 324 | + |
|
| 325 | + return true; |
|
| 326 | 326 | } |
| 327 | 327 | |
| 328 | 328 | /** |
@@ -334,44 +334,44 @@ discard block |
||
| 334 | 334 | * @return string |
| 335 | 335 | */ |
| 336 | 336 | function auth_spip_retrouver_login($login, $serveur = '') { |
| 337 | - if (!strlen($login)) { |
|
| 338 | - return null; |
|
| 339 | - } // pas la peine de requeter |
|
| 340 | - $l = sql_quote($login, $serveur, 'text'); |
|
| 341 | - if ( |
|
| 342 | - $r = sql_getfetsel( |
|
| 343 | - 'login', |
|
| 344 | - 'spip_auteurs', |
|
| 345 | - "statut<>'5poubelle'" . |
|
| 346 | - ' AND (length(pass)>0)' . |
|
| 347 | - " AND (login=$l)", |
|
| 348 | - '', |
|
| 349 | - '', |
|
| 350 | - '', |
|
| 351 | - '', |
|
| 352 | - $serveur |
|
| 353 | - ) |
|
| 354 | - ) { |
|
| 355 | - return $r; |
|
| 356 | - } |
|
| 357 | - // Si pas d'auteur avec ce login |
|
| 358 | - // regarder s'il a saisi son nom ou son mail. |
|
| 359 | - // Ne pas fusionner avec la requete precedente |
|
| 360 | - // car un nom peut etre homonyme d'un autre login |
|
| 361 | - else { |
|
| 362 | - return sql_getfetsel( |
|
| 363 | - 'login', |
|
| 364 | - 'spip_auteurs', |
|
| 365 | - "statut<>'5poubelle'" . |
|
| 366 | - ' AND (length(pass)>0)' . |
|
| 367 | - " AND (login<>'' AND (nom=$l OR email=$l))", |
|
| 368 | - '', |
|
| 369 | - '', |
|
| 370 | - '', |
|
| 371 | - '', |
|
| 372 | - $serveur |
|
| 373 | - ); |
|
| 374 | - } |
|
| 337 | + if (!strlen($login)) { |
|
| 338 | + return null; |
|
| 339 | + } // pas la peine de requeter |
|
| 340 | + $l = sql_quote($login, $serveur, 'text'); |
|
| 341 | + if ( |
|
| 342 | + $r = sql_getfetsel( |
|
| 343 | + 'login', |
|
| 344 | + 'spip_auteurs', |
|
| 345 | + "statut<>'5poubelle'" . |
|
| 346 | + ' AND (length(pass)>0)' . |
|
| 347 | + " AND (login=$l)", |
|
| 348 | + '', |
|
| 349 | + '', |
|
| 350 | + '', |
|
| 351 | + '', |
|
| 352 | + $serveur |
|
| 353 | + ) |
|
| 354 | + ) { |
|
| 355 | + return $r; |
|
| 356 | + } |
|
| 357 | + // Si pas d'auteur avec ce login |
|
| 358 | + // regarder s'il a saisi son nom ou son mail. |
|
| 359 | + // Ne pas fusionner avec la requete precedente |
|
| 360 | + // car un nom peut etre homonyme d'un autre login |
|
| 361 | + else { |
|
| 362 | + return sql_getfetsel( |
|
| 363 | + 'login', |
|
| 364 | + 'spip_auteurs', |
|
| 365 | + "statut<>'5poubelle'" . |
|
| 366 | + ' AND (length(pass)>0)' . |
|
| 367 | + " AND (login<>'' AND (nom=$l OR email=$l))", |
|
| 368 | + '', |
|
| 369 | + '', |
|
| 370 | + '', |
|
| 371 | + '', |
|
| 372 | + $serveur |
|
| 373 | + ); |
|
| 374 | + } |
|
| 375 | 375 | } |
| 376 | 376 | |
| 377 | 377 | /** |
@@ -382,11 +382,11 @@ discard block |
||
| 382 | 382 | * toujours true pour un auteur cree dans SPIP |
| 383 | 383 | */ |
| 384 | 384 | function auth_spip_autoriser_modifier_pass(string $serveur = ''): bool { |
| 385 | - // les fonctions d'ecriture sur base distante sont encore incompletes |
|
| 386 | - if (strlen($serveur)) { |
|
| 387 | - return false; |
|
| 388 | - } |
|
| 389 | - return true; |
|
| 385 | + // les fonctions d'ecriture sur base distante sont encore incompletes |
|
| 386 | + if (strlen($serveur)) { |
|
| 387 | + return false; |
|
| 388 | + } |
|
| 389 | + return true; |
|
| 390 | 390 | } |
| 391 | 391 | |
| 392 | 392 | |
@@ -407,12 +407,12 @@ discard block |
||
| 407 | 407 | * message d'erreur si login non valide, chaine vide sinon |
| 408 | 408 | */ |
| 409 | 409 | function auth_spip_verifier_pass($login, $new_pass, $id_auteur = 0, $serveur = '') { |
| 410 | - // login et mot de passe |
|
| 411 | - if (strlen($new_pass) < _PASS_LONGUEUR_MINI) { |
|
| 412 | - return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]); |
|
| 413 | - } |
|
| 410 | + // login et mot de passe |
|
| 411 | + if (strlen($new_pass) < _PASS_LONGUEUR_MINI) { |
|
| 412 | + return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]); |
|
| 413 | + } |
|
| 414 | 414 | |
| 415 | - return ''; |
|
| 415 | + return ''; |
|
| 416 | 416 | } |
| 417 | 417 | |
| 418 | 418 | /** |
@@ -426,48 +426,48 @@ discard block |
||
| 426 | 426 | * @return bool |
| 427 | 427 | */ |
| 428 | 428 | function auth_spip_modifier_pass($login, $new_pass, $id_auteur, $serveur = '') { |
| 429 | - if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') { |
|
| 430 | - return false; |
|
| 431 | - } |
|
| 432 | - |
|
| 433 | - if ( |
|
| 434 | - !$id_auteur = intval($id_auteur) |
|
| 435 | - or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 436 | - ) { |
|
| 437 | - return false; |
|
| 438 | - } |
|
| 439 | - |
|
| 440 | - include_spip('inc/chiffrer'); |
|
| 441 | - $cles = SpipCles::instance(); |
|
| 442 | - $secret = $cles->getSecretAuth(); |
|
| 443 | - if (!$secret) { |
|
| 444 | - if (auth_spip_initialiser_secret()) { |
|
| 445 | - $secret = $cles->getSecretAuth(); |
|
| 446 | - } |
|
| 447 | - else { |
|
| 448 | - return false; |
|
| 449 | - } |
|
| 450 | - } |
|
| 451 | - |
|
| 452 | - |
|
| 453 | - include_spip('inc/acces'); |
|
| 454 | - $set = [ |
|
| 455 | - 'pass' => Password::hacher($new_pass, $secret), |
|
| 456 | - 'htpass' => generer_htpass($new_pass), |
|
| 457 | - 'alea_actuel' => creer_uniqid(), // @deprecated 4.1 |
|
| 458 | - 'alea_futur' => creer_uniqid(), // @deprecated 4.1 |
|
| 459 | - 'low_sec' => '', |
|
| 460 | - ]; |
|
| 461 | - |
|
| 462 | - // si c'est un webmestre, on met a jour son backup des cles |
|
| 463 | - if ($auteur['statut'] === '0minirezo' and $auteur['webmestre'] === 'oui') { |
|
| 464 | - $set['backup_cles'] = $cles->backup($new_pass); |
|
| 465 | - } |
|
| 466 | - |
|
| 467 | - include_spip('action/editer_auteur'); |
|
| 468 | - auteur_modifier($id_auteur, $set, true); // manque la gestion de $serveur |
|
| 469 | - |
|
| 470 | - return true; // on a bien modifie le pass |
|
| 429 | + if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') { |
|
| 430 | + return false; |
|
| 431 | + } |
|
| 432 | + |
|
| 433 | + if ( |
|
| 434 | + !$id_auteur = intval($id_auteur) |
|
| 435 | + or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 436 | + ) { |
|
| 437 | + return false; |
|
| 438 | + } |
|
| 439 | + |
|
| 440 | + include_spip('inc/chiffrer'); |
|
| 441 | + $cles = SpipCles::instance(); |
|
| 442 | + $secret = $cles->getSecretAuth(); |
|
| 443 | + if (!$secret) { |
|
| 444 | + if (auth_spip_initialiser_secret()) { |
|
| 445 | + $secret = $cles->getSecretAuth(); |
|
| 446 | + } |
|
| 447 | + else { |
|
| 448 | + return false; |
|
| 449 | + } |
|
| 450 | + } |
|
| 451 | + |
|
| 452 | + |
|
| 453 | + include_spip('inc/acces'); |
|
| 454 | + $set = [ |
|
| 455 | + 'pass' => Password::hacher($new_pass, $secret), |
|
| 456 | + 'htpass' => generer_htpass($new_pass), |
|
| 457 | + 'alea_actuel' => creer_uniqid(), // @deprecated 4.1 |
|
| 458 | + 'alea_futur' => creer_uniqid(), // @deprecated 4.1 |
|
| 459 | + 'low_sec' => '', |
|
| 460 | + ]; |
|
| 461 | + |
|
| 462 | + // si c'est un webmestre, on met a jour son backup des cles |
|
| 463 | + if ($auteur['statut'] === '0minirezo' and $auteur['webmestre'] === 'oui') { |
|
| 464 | + $set['backup_cles'] = $cles->backup($new_pass); |
|
| 465 | + } |
|
| 466 | + |
|
| 467 | + include_spip('action/editer_auteur'); |
|
| 468 | + auteur_modifier($id_auteur, $set, true); // manque la gestion de $serveur |
|
| 469 | + |
|
| 470 | + return true; // on a bien modifie le pass |
|
| 471 | 471 | } |
| 472 | 472 | |
| 473 | 473 | /** |
@@ -481,58 +481,58 @@ discard block |
||
| 481 | 481 | * @return void |
| 482 | 482 | */ |
| 483 | 483 | function auth_spip_synchroniser_distant($id_auteur, $champs, $options = [], string $serveur = ''): void { |
| 484 | - // ne rien faire pour une base distante : on ne sait pas regenerer les htaccess |
|
| 485 | - if (strlen($serveur)) { |
|
| 486 | - return; |
|
| 487 | - } |
|
| 488 | - // si un login, pass ou statut a ete modifie |
|
| 489 | - // regenerer les fichier htpass |
|
| 490 | - if ( |
|
| 491 | - isset($champs['login']) |
|
| 492 | - or isset($champs['pass']) |
|
| 493 | - or isset($champs['statut']) |
|
| 494 | - or (isset($options['all']) and $options['all']) |
|
| 495 | - ) { |
|
| 496 | - $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME; |
|
| 497 | - $htpasswd = _DIR_TMP . _AUTH_USER_FILE; |
|
| 498 | - |
|
| 499 | - // Cette variable de configuration peut etre posee par un plugin |
|
| 500 | - // par exemple acces_restreint ; |
|
| 501 | - // si .htaccess existe, outrepasser spip_meta |
|
| 502 | - if ( |
|
| 503 | - (!isset($GLOBALS['meta']['creer_htpasswd']) or ($GLOBALS['meta']['creer_htpasswd'] != 'oui')) |
|
| 504 | - and !@file_exists($htaccess) |
|
| 505 | - ) { |
|
| 506 | - spip_unlink($htpasswd); |
|
| 507 | - spip_unlink($htpasswd . '-admin'); |
|
| 508 | - |
|
| 509 | - return; |
|
| 510 | - } |
|
| 511 | - |
|
| 512 | - # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre |
|
| 513 | - # de devenir redacteur le cas echeant (auth http)... a nettoyer |
|
| 514 | - // attention, il faut au prealable se connecter a la base (necessaire car utilise par install) |
|
| 515 | - |
|
| 516 | - $p1 = ''; // login:htpass pour tous |
|
| 517 | - $p2 = ''; // login:htpass pour les admins |
|
| 518 | - $s = sql_select( |
|
| 519 | - 'login, htpass, statut', |
|
| 520 | - 'spip_auteurs', |
|
| 521 | - sql_in('statut', ['1comite', '0minirezo', 'nouveau']) |
|
| 522 | - ); |
|
| 523 | - while ($t = sql_fetch($s)) { |
|
| 524 | - if (strlen($t['login']) and strlen($t['htpass'])) { |
|
| 525 | - $p1 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 526 | - if ($t['statut'] == '0minirezo') { |
|
| 527 | - $p2 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 528 | - } |
|
| 529 | - } |
|
| 530 | - } |
|
| 531 | - sql_free($s); |
|
| 532 | - if ($p1) { |
|
| 533 | - ecrire_fichier($htpasswd, $p1); |
|
| 534 | - ecrire_fichier($htpasswd . '-admin', $p2); |
|
| 535 | - spip_log("Ecriture de $htpasswd et $htpasswd-admin"); |
|
| 536 | - } |
|
| 537 | - } |
|
| 484 | + // ne rien faire pour une base distante : on ne sait pas regenerer les htaccess |
|
| 485 | + if (strlen($serveur)) { |
|
| 486 | + return; |
|
| 487 | + } |
|
| 488 | + // si un login, pass ou statut a ete modifie |
|
| 489 | + // regenerer les fichier htpass |
|
| 490 | + if ( |
|
| 491 | + isset($champs['login']) |
|
| 492 | + or isset($champs['pass']) |
|
| 493 | + or isset($champs['statut']) |
|
| 494 | + or (isset($options['all']) and $options['all']) |
|
| 495 | + ) { |
|
| 496 | + $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME; |
|
| 497 | + $htpasswd = _DIR_TMP . _AUTH_USER_FILE; |
|
| 498 | + |
|
| 499 | + // Cette variable de configuration peut etre posee par un plugin |
|
| 500 | + // par exemple acces_restreint ; |
|
| 501 | + // si .htaccess existe, outrepasser spip_meta |
|
| 502 | + if ( |
|
| 503 | + (!isset($GLOBALS['meta']['creer_htpasswd']) or ($GLOBALS['meta']['creer_htpasswd'] != 'oui')) |
|
| 504 | + and !@file_exists($htaccess) |
|
| 505 | + ) { |
|
| 506 | + spip_unlink($htpasswd); |
|
| 507 | + spip_unlink($htpasswd . '-admin'); |
|
| 508 | + |
|
| 509 | + return; |
|
| 510 | + } |
|
| 511 | + |
|
| 512 | + # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre |
|
| 513 | + # de devenir redacteur le cas echeant (auth http)... a nettoyer |
|
| 514 | + // attention, il faut au prealable se connecter a la base (necessaire car utilise par install) |
|
| 515 | + |
|
| 516 | + $p1 = ''; // login:htpass pour tous |
|
| 517 | + $p2 = ''; // login:htpass pour les admins |
|
| 518 | + $s = sql_select( |
|
| 519 | + 'login, htpass, statut', |
|
| 520 | + 'spip_auteurs', |
|
| 521 | + sql_in('statut', ['1comite', '0minirezo', 'nouveau']) |
|
| 522 | + ); |
|
| 523 | + while ($t = sql_fetch($s)) { |
|
| 524 | + if (strlen($t['login']) and strlen($t['htpass'])) { |
|
| 525 | + $p1 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 526 | + if ($t['statut'] == '0minirezo') { |
|
| 527 | + $p2 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 528 | + } |
|
| 529 | + } |
|
| 530 | + } |
|
| 531 | + sql_free($s); |
|
| 532 | + if ($p1) { |
|
| 533 | + ecrire_fichier($htpasswd, $p1); |
|
| 534 | + ecrire_fichier($htpasswd . '-admin', $p2); |
|
| 535 | + spip_log("Ecriture de $htpasswd et $htpasswd-admin"); |
|
| 536 | + } |
|
| 537 | + } |
|
| 538 | 538 | } |
@@ -49,7 +49,7 @@ discard block |
||
| 49 | 49 | $row = sql_fetsel( |
| 50 | 50 | '*', |
| 51 | 51 | 'spip_auteurs', |
| 52 | - 'login=' . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'", |
|
| 52 | + 'login='.sql_quote($login, $serveur, 'text')." AND statut<>'5poubelle'", |
|
| 53 | 53 | '', |
| 54 | 54 | '', |
| 55 | 55 | '', |
@@ -75,7 +75,7 @@ discard block |
||
| 75 | 75 | switch (strlen($row['pass'])) { |
| 76 | 76 | case 32: |
| 77 | 77 | // tres anciens mots de passe encodes en md5(alea.pass) |
| 78 | - $md5pass = md5($row['alea_actuel'] . $pass); |
|
| 78 | + $md5pass = md5($row['alea_actuel'].$pass); |
|
| 79 | 79 | if ($row['pass'] !== $md5pass) { |
| 80 | 80 | unset($row); |
| 81 | 81 | } |
@@ -83,7 +83,7 @@ discard block |
||
| 83 | 83 | case 64: |
| 84 | 84 | // anciens mots de passe encodes en sha256(alea.pass) |
| 85 | 85 | include_spip('auth/sha256.inc'); |
| 86 | - $shapass = spip_sha256($row['alea_actuel'] . $pass); |
|
| 86 | + $shapass = spip_sha256($row['alea_actuel'].$pass); |
|
| 87 | 87 | if ($row['pass'] !== $shapass) { |
| 88 | 88 | unset($row); |
| 89 | 89 | } |
@@ -99,12 +99,12 @@ discard block |
||
| 99 | 99 | and !empty($row['backup_cles']) |
| 100 | 100 | ) { |
| 101 | 101 | if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) { |
| 102 | - spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 102 | + spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #'.$row['id_auteur'], 'auth'._LOG_INFO_IMPORTANTE); |
|
| 103 | 103 | $cles->save(); |
| 104 | 104 | } |
| 105 | 105 | else { |
| 106 | - spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR); |
|
| 107 | - sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 106 | + spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #'.$row['id_auteur']." n'est pas valide", 'auth'._LOG_ERREUR); |
|
| 107 | + sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur='.intval($row['id_auteur'])); |
|
| 108 | 108 | } |
| 109 | 109 | } |
| 110 | 110 | |
@@ -148,7 +148,7 @@ discard block |
||
| 148 | 148 | @sql_update( |
| 149 | 149 | 'spip_auteurs', |
| 150 | 150 | $set, |
| 151 | - 'id_auteur=' . intval($row['id_auteur']) . ' AND pass=' . sql_quote( |
|
| 151 | + 'id_auteur='.intval($row['id_auteur']).' AND pass='.sql_quote( |
|
| 152 | 152 | $row['pass'], |
| 153 | 153 | $serveur, |
| 154 | 154 | 'text' |
@@ -191,20 +191,20 @@ discard block |
||
| 191 | 191 | |
| 192 | 192 | // si force, on ne verifie pas la presence d'un backup chez un webmestre |
| 193 | 193 | if ($force) { |
| 194 | - spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 194 | + spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth'._LOG_INFO_IMPORTANTE); |
|
| 195 | 195 | $secret = $cles->getSecretAuth(true); |
| 196 | 196 | return true; |
| 197 | 197 | } |
| 198 | 198 | |
| 199 | - $has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''"); |
|
| 199 | + $has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut='.sql_quote('0minirezo').' AND webmestre='.sql_quote('oui')." AND backup_cles!=''"); |
|
| 200 | 200 | $has_backup = array_column($has_backup, 'id_auteur'); |
| 201 | 201 | if (empty($has_backup)) { |
| 202 | - spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 202 | + spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth'._LOG_INFO_IMPORTANTE); |
|
| 203 | 203 | $secret = $cles->getSecretAuth(true); |
| 204 | 204 | return true; |
| 205 | 205 | } |
| 206 | 206 | else { |
| 207 | - spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR); |
|
| 207 | + spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #'.implode(', #', $has_backup).' doit se connecter pour restaurer son backup des cles', 'auth'._LOG_ERREUR); |
|
| 208 | 208 | return false; |
| 209 | 209 | } |
| 210 | 210 | } |
@@ -221,8 +221,8 @@ discard block |
||
| 221 | 221 | $flux['data'] .= |
| 222 | 222 | '<script type="text/javascript">/*<![CDATA[*/' |
| 223 | 223 | . "$js\n" |
| 224 | - . "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "'," |
|
| 225 | - . "'page_auteur': '" . generer_url_public('informer_auteur') . "'," |
|
| 224 | + . "var login_info={'login':'".$flux['args']['contexte']['var_login']."'," |
|
| 225 | + . "'page_auteur': '".generer_url_public('informer_auteur')."'," |
|
| 226 | 226 | . "'informe_auteur_en_cours':false," |
| 227 | 227 | . "'attente_informe':0};" |
| 228 | 228 | . "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});" |
@@ -265,7 +265,7 @@ discard block |
||
| 265 | 265 | } else { |
| 266 | 266 | $n = sql_countsel( |
| 267 | 267 | 'spip_auteurs', |
| 268 | - 'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'", |
|
| 268 | + 'login='.sql_quote($new_login).' AND id_auteur!='.intval($id_auteur)." AND statut!='5poubelle'", |
|
| 269 | 269 | '', |
| 270 | 270 | '', |
| 271 | 271 | $serveur |
@@ -293,7 +293,7 @@ discard block |
||
| 293 | 293 | } |
| 294 | 294 | if ( |
| 295 | 295 | !$id_auteur = intval($id_auteur) |
| 296 | - or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 296 | + or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur='.intval($id_auteur), '', '', '', '', $serveur) |
|
| 297 | 297 | ) { |
| 298 | 298 | return false; |
| 299 | 299 | } |
@@ -308,7 +308,7 @@ discard block |
||
| 308 | 308 | $anciens = sql_allfetsel( |
| 309 | 309 | 'id_auteur', |
| 310 | 310 | 'spip_auteurs', |
| 311 | - 'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'", |
|
| 311 | + 'login='.sql_quote($new_login, $serveur, 'text')." AND statut='5poubelle'", |
|
| 312 | 312 | '', |
| 313 | 313 | '', |
| 314 | 314 | '', |
@@ -342,8 +342,8 @@ discard block |
||
| 342 | 342 | $r = sql_getfetsel( |
| 343 | 343 | 'login', |
| 344 | 344 | 'spip_auteurs', |
| 345 | - "statut<>'5poubelle'" . |
|
| 346 | - ' AND (length(pass)>0)' . |
|
| 345 | + "statut<>'5poubelle'". |
|
| 346 | + ' AND (length(pass)>0)'. |
|
| 347 | 347 | " AND (login=$l)", |
| 348 | 348 | '', |
| 349 | 349 | '', |
@@ -362,8 +362,8 @@ discard block |
||
| 362 | 362 | return sql_getfetsel( |
| 363 | 363 | 'login', |
| 364 | 364 | 'spip_auteurs', |
| 365 | - "statut<>'5poubelle'" . |
|
| 366 | - ' AND (length(pass)>0)' . |
|
| 365 | + "statut<>'5poubelle'". |
|
| 366 | + ' AND (length(pass)>0)'. |
|
| 367 | 367 | " AND (login<>'' AND (nom=$l OR email=$l))", |
| 368 | 368 | '', |
| 369 | 369 | '', |
@@ -432,7 +432,7 @@ discard block |
||
| 432 | 432 | |
| 433 | 433 | if ( |
| 434 | 434 | !$id_auteur = intval($id_auteur) |
| 435 | - or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 435 | + or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur='.intval($id_auteur), '', '', '', '', $serveur) |
|
| 436 | 436 | ) { |
| 437 | 437 | return false; |
| 438 | 438 | } |
@@ -493,8 +493,8 @@ discard block |
||
| 493 | 493 | or isset($champs['statut']) |
| 494 | 494 | or (isset($options['all']) and $options['all']) |
| 495 | 495 | ) { |
| 496 | - $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME; |
|
| 497 | - $htpasswd = _DIR_TMP . _AUTH_USER_FILE; |
|
| 496 | + $htaccess = _DIR_RESTREINT._ACCESS_FILE_NAME; |
|
| 497 | + $htpasswd = _DIR_TMP._AUTH_USER_FILE; |
|
| 498 | 498 | |
| 499 | 499 | // Cette variable de configuration peut etre posee par un plugin |
| 500 | 500 | // par exemple acces_restreint ; |
@@ -504,7 +504,7 @@ discard block |
||
| 504 | 504 | and !@file_exists($htaccess) |
| 505 | 505 | ) { |
| 506 | 506 | spip_unlink($htpasswd); |
| 507 | - spip_unlink($htpasswd . '-admin'); |
|
| 507 | + spip_unlink($htpasswd.'-admin'); |
|
| 508 | 508 | |
| 509 | 509 | return; |
| 510 | 510 | } |
@@ -522,16 +522,16 @@ discard block |
||
| 522 | 522 | ); |
| 523 | 523 | while ($t = sql_fetch($s)) { |
| 524 | 524 | if (strlen($t['login']) and strlen($t['htpass'])) { |
| 525 | - $p1 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 525 | + $p1 .= $t['login'].':'.$t['htpass']."\n"; |
|
| 526 | 526 | if ($t['statut'] == '0minirezo') { |
| 527 | - $p2 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 527 | + $p2 .= $t['login'].':'.$t['htpass']."\n"; |
|
| 528 | 528 | } |
| 529 | 529 | } |
| 530 | 530 | } |
| 531 | 531 | sql_free($s); |
| 532 | 532 | if ($p1) { |
| 533 | 533 | ecrire_fichier($htpasswd, $p1); |
| 534 | - ecrire_fichier($htpasswd . '-admin', $p2); |
|
| 534 | + ecrire_fichier($htpasswd.'-admin', $p2); |
|
| 535 | 535 | spip_log("Ecriture de $htpasswd et $htpasswd-admin"); |
| 536 | 536 | } |
| 537 | 537 | } |
@@ -101,8 +101,7 @@ discard block |
||
| 101 | 101 | if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) { |
| 102 | 102 | spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE); |
| 103 | 103 | $cles->save(); |
| 104 | - } |
|
| 105 | - else { |
|
| 104 | + } else { |
|
| 106 | 105 | spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) mais le backup du webmestre #' . $row['id_auteur'] . " n'est pas valide", 'auth' . _LOG_ERREUR); |
| 107 | 106 | sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur'])); |
| 108 | 107 | } |
@@ -202,8 +201,7 @@ discard block |
||
| 202 | 201 | spip_log("Pas de cle secrete disponible, et aucun webmestre n'a de backup, on regenere une nouvelle cle - tous les mots de passe sont invalides", 'auth' . _LOG_INFO_IMPORTANTE); |
| 203 | 202 | $secret = $cles->getSecretAuth(true); |
| 204 | 203 | return true; |
| 205 | - } |
|
| 206 | - else { |
|
| 204 | + } else { |
|
| 207 | 205 | spip_log('Pas de cle secrete disponible (fichier config/cle.php absent ?) un des webmestres #' . implode(', #', $has_backup) . ' doit se connecter pour restaurer son backup des cles', 'auth' . _LOG_ERREUR); |
| 208 | 206 | return false; |
| 209 | 207 | } |
@@ -443,8 +441,7 @@ discard block |
||
| 443 | 441 | if (!$secret) { |
| 444 | 442 | if (auth_spip_initialiser_secret()) { |
| 445 | 443 | $secret = $cles->getSecretAuth(); |
| 446 | - } |
|
| 447 | - else { |
|
| 444 | + } else { |
|
| 448 | 445 | return false; |
| 449 | 446 | } |
| 450 | 447 | } |
@@ -16,10 +16,10 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Actions |
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | - use \Spip\Chiffrer\SpipCles; |
|
| 19 | + use \Spip\Chiffrer\SpipCles; |
|
| 20 | 20 | |
| 21 | 21 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 22 | - return; |
|
| 22 | + return; |
|
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | /** |
@@ -52,19 +52,19 @@ discard block |
||
| 52 | 52 | * @return array|string |
| 53 | 53 | */ |
| 54 | 54 | function inc_securiser_action_dist($action = '', $arg = '', $redirect = '', $mode = false, $att = '', $public = false) { |
| 55 | - if ($action) { |
|
| 56 | - return securiser_action_auteur($action, $arg, $redirect, $mode, $att, $public); |
|
| 57 | - } else { |
|
| 58 | - $arg = _request('arg'); |
|
| 59 | - $hash = _request('hash'); |
|
| 60 | - $action = _request('action') ?: _request('formulaire_action'); |
|
| 61 | - if ($a = verifier_action_auteur("$action-$arg", $hash)) { |
|
| 62 | - return $arg; |
|
| 63 | - } |
|
| 64 | - include_spip('inc/minipres'); |
|
| 65 | - echo minipres(); |
|
| 66 | - exit; |
|
| 67 | - } |
|
| 55 | + if ($action) { |
|
| 56 | + return securiser_action_auteur($action, $arg, $redirect, $mode, $att, $public); |
|
| 57 | + } else { |
|
| 58 | + $arg = _request('arg'); |
|
| 59 | + $hash = _request('hash'); |
|
| 60 | + $action = _request('action') ?: _request('formulaire_action'); |
|
| 61 | + if ($a = verifier_action_auteur("$action-$arg", $hash)) { |
|
| 62 | + return $arg; |
|
| 63 | + } |
|
| 64 | + include_spip('inc/minipres'); |
|
| 65 | + echo minipres(); |
|
| 66 | + exit; |
|
| 67 | + } |
|
| 68 | 68 | } |
| 69 | 69 | |
| 70 | 70 | /** |
@@ -83,29 +83,29 @@ discard block |
||
| 83 | 83 | */ |
| 84 | 84 | function demander_confirmation_avant_action($titre, $titre_bouton, $url_action = null) { |
| 85 | 85 | |
| 86 | - if (!$url_action) { |
|
| 87 | - $url_action = self(); |
|
| 88 | - $action = _request('action'); |
|
| 89 | - $url_action = parametre_url($url_action, 'action', $action, '&'); |
|
| 90 | - } |
|
| 91 | - else { |
|
| 92 | - $action = parametre_url($url_action, 'action'); |
|
| 93 | - } |
|
| 94 | - |
|
| 95 | - $arg = parametre_url($url_action, 'arg'); |
|
| 96 | - $confirm = md5("$action:$arg:" . realpath(__FILE__)); |
|
| 97 | - if (_request('confirm_action') === $confirm) { |
|
| 98 | - return true; |
|
| 99 | - } |
|
| 100 | - |
|
| 101 | - $url_confirm = parametre_url($url_action, 'confirm_action', $confirm, '&'); |
|
| 102 | - include_spip('inc/filtres'); |
|
| 103 | - $bouton_action = bouton_action($titre_bouton, $url_confirm); |
|
| 104 | - $corps = "<div style='text-align:center;'>$bouton_action</div>"; |
|
| 105 | - |
|
| 106 | - include_spip('inc/minipres'); |
|
| 107 | - echo minipres($titre, $corps); |
|
| 108 | - exit; |
|
| 86 | + if (!$url_action) { |
|
| 87 | + $url_action = self(); |
|
| 88 | + $action = _request('action'); |
|
| 89 | + $url_action = parametre_url($url_action, 'action', $action, '&'); |
|
| 90 | + } |
|
| 91 | + else { |
|
| 92 | + $action = parametre_url($url_action, 'action'); |
|
| 93 | + } |
|
| 94 | + |
|
| 95 | + $arg = parametre_url($url_action, 'arg'); |
|
| 96 | + $confirm = md5("$action:$arg:" . realpath(__FILE__)); |
|
| 97 | + if (_request('confirm_action') === $confirm) { |
|
| 98 | + return true; |
|
| 99 | + } |
|
| 100 | + |
|
| 101 | + $url_confirm = parametre_url($url_action, 'confirm_action', $confirm, '&'); |
|
| 102 | + include_spip('inc/filtres'); |
|
| 103 | + $bouton_action = bouton_action($titre_bouton, $url_confirm); |
|
| 104 | + $corps = "<div style='text-align:center;'>$bouton_action</div>"; |
|
| 105 | + |
|
| 106 | + include_spip('inc/minipres'); |
|
| 107 | + echo minipres($titre, $corps); |
|
| 108 | + exit; |
|
| 109 | 109 | } |
| 110 | 110 | |
| 111 | 111 | /** |
@@ -136,34 +136,34 @@ discard block |
||
| 136 | 136 | */ |
| 137 | 137 | function securiser_action_auteur($action, $arg, $redirect = '', $mode = false, $att = '', $public = false) { |
| 138 | 138 | |
| 139 | - // mode URL ou array |
|
| 140 | - if (!is_string($mode)) { |
|
| 141 | - $hash = calculer_action_auteur("$action-$arg", is_numeric($att) ? $att : null); |
|
| 142 | - |
|
| 143 | - $r = rawurlencode($redirect); |
|
| 144 | - if ($mode === -1) { |
|
| 145 | - return ['action' => $action, 'arg' => $arg, 'hash' => $hash]; |
|
| 146 | - } else { |
|
| 147 | - return generer_url_action( |
|
| 148 | - $action, |
|
| 149 | - 'arg=' . rawurlencode($arg) . "&hash=$hash" . (!$r ? '' : "&redirect=$r"), |
|
| 150 | - $mode, |
|
| 151 | - $public |
|
| 152 | - ); |
|
| 153 | - } |
|
| 154 | - } |
|
| 155 | - |
|
| 156 | - // mode formulaire |
|
| 157 | - $hash = calculer_action_auteur("$action-$arg"); |
|
| 158 | - $att .= " style='margin: 0px; border: 0px'"; |
|
| 159 | - if ($redirect) { |
|
| 160 | - $redirect = "\n\t\t<input name='redirect' type='hidden' value='" . str_replace("'", ''', $redirect) . "' />"; |
|
| 161 | - } |
|
| 162 | - $mode .= $redirect . " |
|
| 139 | + // mode URL ou array |
|
| 140 | + if (!is_string($mode)) { |
|
| 141 | + $hash = calculer_action_auteur("$action-$arg", is_numeric($att) ? $att : null); |
|
| 142 | + |
|
| 143 | + $r = rawurlencode($redirect); |
|
| 144 | + if ($mode === -1) { |
|
| 145 | + return ['action' => $action, 'arg' => $arg, 'hash' => $hash]; |
|
| 146 | + } else { |
|
| 147 | + return generer_url_action( |
|
| 148 | + $action, |
|
| 149 | + 'arg=' . rawurlencode($arg) . "&hash=$hash" . (!$r ? '' : "&redirect=$r"), |
|
| 150 | + $mode, |
|
| 151 | + $public |
|
| 152 | + ); |
|
| 153 | + } |
|
| 154 | + } |
|
| 155 | + |
|
| 156 | + // mode formulaire |
|
| 157 | + $hash = calculer_action_auteur("$action-$arg"); |
|
| 158 | + $att .= " style='margin: 0px; border: 0px'"; |
|
| 159 | + if ($redirect) { |
|
| 160 | + $redirect = "\n\t\t<input name='redirect' type='hidden' value='" . str_replace("'", ''', $redirect) . "' />"; |
|
| 161 | + } |
|
| 162 | + $mode .= $redirect . " |
|
| 163 | 163 | <input name='hash' type='hidden' value='$hash' /> |
| 164 | 164 | <input name='arg' type='hidden' value='$arg' />"; |
| 165 | 165 | |
| 166 | - return generer_form_action($action, $mode, $att, $public); |
|
| 166 | + return generer_form_action($action, $mode, $att, $public); |
|
| 167 | 167 | } |
| 168 | 168 | |
| 169 | 169 | /** |
@@ -173,48 +173,48 @@ discard block |
||
| 173 | 173 | * @return array |
| 174 | 174 | */ |
| 175 | 175 | function caracteriser_auteur($id_auteur = null) { |
| 176 | - static $caracterisation = []; |
|
| 177 | - |
|
| 178 | - if (is_null($id_auteur) and !isset($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 179 | - // si l'auteur courant n'est pas connu alors qu'il peut demander une action |
|
| 180 | - // c'est une connexion par php_auth ou 1 instal, on se rabat sur le cookie. |
|
| 181 | - // S'il n'avait pas le droit de realiser cette action, le hash sera faux. |
|
| 182 | - if ( |
|
| 183 | - isset($_COOKIE['spip_session']) |
|
| 184 | - and (preg_match('/^(\d+)/', $_COOKIE['spip_session'], $r)) |
|
| 185 | - ) { |
|
| 186 | - return [$r[1], '']; |
|
| 187 | - // Necessaire aux forums anonymes. |
|
| 188 | - // Pour le reste, ca echouera. |
|
| 189 | - } else { |
|
| 190 | - return ['0', '']; |
|
| 191 | - } |
|
| 192 | - } |
|
| 193 | - // Eviter l'acces SQL si le pass est connu de PHP |
|
| 194 | - if (is_null($id_auteur)) { |
|
| 195 | - $id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ?? 0; |
|
| 196 | - if (isset($GLOBALS['visiteur_session']['pass']) and $GLOBALS['visiteur_session']['pass']) { |
|
| 197 | - return $caracterisation[$id_auteur] = [$id_auteur, $GLOBALS['visiteur_session']['pass']]; |
|
| 198 | - } |
|
| 199 | - } |
|
| 200 | - |
|
| 201 | - if (isset($caracterisation[$id_auteur])) { |
|
| 202 | - return $caracterisation[$id_auteur]; |
|
| 203 | - } |
|
| 204 | - |
|
| 205 | - if ($id_auteur) { |
|
| 206 | - include_spip('base/abstract_sql'); |
|
| 207 | - $t = sql_fetsel('id_auteur, pass', 'spip_auteurs', "id_auteur=$id_auteur"); |
|
| 208 | - if ($t) { |
|
| 209 | - return $caracterisation[$id_auteur] = [$t['id_auteur'], $t['pass']]; |
|
| 210 | - } |
|
| 211 | - include_spip('inc/minipres'); |
|
| 212 | - echo minipres(); |
|
| 213 | - exit; |
|
| 214 | - } // Visiteur anonyme, pour ls forums par exemple |
|
| 215 | - else { |
|
| 216 | - return ['0', '']; |
|
| 217 | - } |
|
| 176 | + static $caracterisation = []; |
|
| 177 | + |
|
| 178 | + if (is_null($id_auteur) and !isset($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 179 | + // si l'auteur courant n'est pas connu alors qu'il peut demander une action |
|
| 180 | + // c'est une connexion par php_auth ou 1 instal, on se rabat sur le cookie. |
|
| 181 | + // S'il n'avait pas le droit de realiser cette action, le hash sera faux. |
|
| 182 | + if ( |
|
| 183 | + isset($_COOKIE['spip_session']) |
|
| 184 | + and (preg_match('/^(\d+)/', $_COOKIE['spip_session'], $r)) |
|
| 185 | + ) { |
|
| 186 | + return [$r[1], '']; |
|
| 187 | + // Necessaire aux forums anonymes. |
|
| 188 | + // Pour le reste, ca echouera. |
|
| 189 | + } else { |
|
| 190 | + return ['0', '']; |
|
| 191 | + } |
|
| 192 | + } |
|
| 193 | + // Eviter l'acces SQL si le pass est connu de PHP |
|
| 194 | + if (is_null($id_auteur)) { |
|
| 195 | + $id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ?? 0; |
|
| 196 | + if (isset($GLOBALS['visiteur_session']['pass']) and $GLOBALS['visiteur_session']['pass']) { |
|
| 197 | + return $caracterisation[$id_auteur] = [$id_auteur, $GLOBALS['visiteur_session']['pass']]; |
|
| 198 | + } |
|
| 199 | + } |
|
| 200 | + |
|
| 201 | + if (isset($caracterisation[$id_auteur])) { |
|
| 202 | + return $caracterisation[$id_auteur]; |
|
| 203 | + } |
|
| 204 | + |
|
| 205 | + if ($id_auteur) { |
|
| 206 | + include_spip('base/abstract_sql'); |
|
| 207 | + $t = sql_fetsel('id_auteur, pass', 'spip_auteurs', "id_auteur=$id_auteur"); |
|
| 208 | + if ($t) { |
|
| 209 | + return $caracterisation[$id_auteur] = [$t['id_auteur'], $t['pass']]; |
|
| 210 | + } |
|
| 211 | + include_spip('inc/minipres'); |
|
| 212 | + echo minipres(); |
|
| 213 | + exit; |
|
| 214 | + } // Visiteur anonyme, pour ls forums par exemple |
|
| 215 | + else { |
|
| 216 | + return ['0', '']; |
|
| 217 | + } |
|
| 218 | 218 | } |
| 219 | 219 | |
| 220 | 220 | /** |
@@ -229,30 +229,30 @@ discard block |
||
| 229 | 229 | * @return string |
| 230 | 230 | */ |
| 231 | 231 | function _action_auteur(string $action, int $id_auteur, ?string $pass, string $alea): string { |
| 232 | - static $sha = []; |
|
| 233 | - $pass = $pass ?? ''; |
|
| 234 | - $entry = "$action:$id_auteur:$pass:$alea"; |
|
| 235 | - if (!isset($sha[$entry])) { |
|
| 236 | - $sha[$entry] = hash_hmac('sha256', "$action::$id_auteur", "$pass::" . _action_get_alea($alea)); |
|
| 237 | - } |
|
| 238 | - |
|
| 239 | - return $sha[$entry]; |
|
| 232 | + static $sha = []; |
|
| 233 | + $pass = $pass ?? ''; |
|
| 234 | + $entry = "$action:$id_auteur:$pass:$alea"; |
|
| 235 | + if (!isset($sha[$entry])) { |
|
| 236 | + $sha[$entry] = hash_hmac('sha256', "$action::$id_auteur", "$pass::" . _action_get_alea($alea)); |
|
| 237 | + } |
|
| 238 | + |
|
| 239 | + return $sha[$entry]; |
|
| 240 | 240 | } |
| 241 | 241 | |
| 242 | 242 | function _action_get_alea(string $alea): string { |
| 243 | - if (!isset($GLOBALS['meta'][$alea])) { |
|
| 244 | - if (!$exec = _request('exec') or !autoriser_sans_cookie($exec)) { |
|
| 245 | - include_spip('inc/acces'); |
|
| 246 | - charger_aleas(); |
|
| 247 | - if (empty($GLOBALS['meta'][$alea])) { |
|
| 248 | - include_spip('inc/minipres'); |
|
| 249 | - echo minipres(); |
|
| 250 | - spip_log("$alea indisponible"); |
|
| 251 | - exit; |
|
| 252 | - } |
|
| 253 | - } |
|
| 254 | - } |
|
| 255 | - return $GLOBALS['meta'][$alea] ?? ''; |
|
| 243 | + if (!isset($GLOBALS['meta'][$alea])) { |
|
| 244 | + if (!$exec = _request('exec') or !autoriser_sans_cookie($exec)) { |
|
| 245 | + include_spip('inc/acces'); |
|
| 246 | + charger_aleas(); |
|
| 247 | + if (empty($GLOBALS['meta'][$alea])) { |
|
| 248 | + include_spip('inc/minipres'); |
|
| 249 | + echo minipres(); |
|
| 250 | + spip_log("$alea indisponible"); |
|
| 251 | + exit; |
|
| 252 | + } |
|
| 253 | + } |
|
| 254 | + } |
|
| 255 | + return $GLOBALS['meta'][$alea] ?? ''; |
|
| 256 | 256 | } |
| 257 | 257 | |
| 258 | 258 | /** |
@@ -263,9 +263,9 @@ discard block |
||
| 263 | 263 | * @return string |
| 264 | 264 | */ |
| 265 | 265 | function calculer_action_auteur($action, $id_auteur = null) { |
| 266 | - [$id_auteur, $pass] = caracteriser_auteur($id_auteur); |
|
| 266 | + [$id_auteur, $pass] = caracteriser_auteur($id_auteur); |
|
| 267 | 267 | |
| 268 | - return _action_auteur($action, $id_auteur, $pass, 'alea_ephemere'); |
|
| 268 | + return _action_auteur($action, $id_auteur, $pass, 'alea_ephemere'); |
|
| 269 | 269 | } |
| 270 | 270 | |
| 271 | 271 | |
@@ -278,15 +278,15 @@ discard block |
||
| 278 | 278 | * @return bool |
| 279 | 279 | */ |
| 280 | 280 | function verifier_action_auteur($action, $hash) { |
| 281 | - [$id_auteur, $pass] = caracteriser_auteur(); |
|
| 282 | - if ( |
|
| 283 | - hash_equals($hash, _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) |
|
| 284 | - or hash_equals($hash, _action_auteur($action, $id_auteur, $pass, 'alea_ephemere_ancien')) |
|
| 285 | - ) { |
|
| 286 | - return true; |
|
| 287 | - } |
|
| 288 | - |
|
| 289 | - return false; |
|
| 281 | + [$id_auteur, $pass] = caracteriser_auteur(); |
|
| 282 | + if ( |
|
| 283 | + hash_equals($hash, _action_auteur($action, $id_auteur, $pass, 'alea_ephemere')) |
|
| 284 | + or hash_equals($hash, _action_auteur($action, $id_auteur, $pass, 'alea_ephemere_ancien')) |
|
| 285 | + ) { |
|
| 286 | + return true; |
|
| 287 | + } |
|
| 288 | + |
|
| 289 | + return false; |
|
| 290 | 290 | } |
| 291 | 291 | |
| 292 | 292 | // |
@@ -301,8 +301,8 @@ discard block |
||
| 301 | 301 | * @return string |
| 302 | 302 | */ |
| 303 | 303 | function secret_du_site() { |
| 304 | - include_spip('inc/chiffrer'); |
|
| 305 | - return SpipCles::secret_du_site(); |
|
| 304 | + include_spip('inc/chiffrer'); |
|
| 305 | + return SpipCles::secret_du_site(); |
|
| 306 | 306 | } |
| 307 | 307 | |
| 308 | 308 | /** |
@@ -312,7 +312,7 @@ discard block |
||
| 312 | 312 | * @return string |
| 313 | 313 | */ |
| 314 | 314 | function calculer_cle_action($action) { |
| 315 | - return hash_hmac('sha256', $action, secret_du_site()); |
|
| 315 | + return hash_hmac('sha256', $action, secret_du_site()); |
|
| 316 | 316 | } |
| 317 | 317 | |
| 318 | 318 | /** |
@@ -323,7 +323,7 @@ discard block |
||
| 323 | 323 | * @return bool |
| 324 | 324 | */ |
| 325 | 325 | function verifier_cle_action($action, $cle) { |
| 326 | - return hash_equals($cle, calculer_cle_action($action)); |
|
| 326 | + return hash_equals($cle, calculer_cle_action($action)); |
|
| 327 | 327 | } |
| 328 | 328 | |
| 329 | 329 | |
@@ -340,19 +340,19 @@ discard block |
||
| 340 | 340 | * @return string Token, de la forme "{id}*{hash}" |
| 341 | 341 | */ |
| 342 | 342 | function calculer_token_previsu($url, $id_auteur = null, $alea = 'alea_ephemere') { |
| 343 | - if (is_null($id_auteur)) { |
|
| 344 | - if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 345 | - $id_auteur = $GLOBALS['visiteur_session']['id_auteur']; |
|
| 346 | - } |
|
| 347 | - } |
|
| 348 | - if (!$id_auteur = intval($id_auteur)) { |
|
| 349 | - return ''; |
|
| 350 | - } |
|
| 351 | - // On nettoie l’URL de tous les var_. |
|
| 352 | - $url = nettoyer_uri_var($url); |
|
| 353 | - |
|
| 354 | - $token = _action_auteur('previsualiser-' . $url, $id_auteur, secret_du_site(), $alea); |
|
| 355 | - return "$id_auteur-$token"; |
|
| 343 | + if (is_null($id_auteur)) { |
|
| 344 | + if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 345 | + $id_auteur = $GLOBALS['visiteur_session']['id_auteur']; |
|
| 346 | + } |
|
| 347 | + } |
|
| 348 | + if (!$id_auteur = intval($id_auteur)) { |
|
| 349 | + return ''; |
|
| 350 | + } |
|
| 351 | + // On nettoie l’URL de tous les var_. |
|
| 352 | + $url = nettoyer_uri_var($url); |
|
| 353 | + |
|
| 354 | + $token = _action_auteur('previsualiser-' . $url, $id_auteur, secret_du_site(), $alea); |
|
| 355 | + return "$id_auteur-$token"; |
|
| 356 | 356 | } |
| 357 | 357 | |
| 358 | 358 | |
@@ -370,31 +370,31 @@ discard block |
||
| 370 | 370 | * + Tableau (id auteur, type d’objet, id_objet) sinon. |
| 371 | 371 | */ |
| 372 | 372 | function verifier_token_previsu($token) { |
| 373 | - // retrouver auteur / hash |
|
| 374 | - $e = explode('-', $token, 2); |
|
| 375 | - if (count($e) == 2 and is_numeric(reset($e))) { |
|
| 376 | - $id_auteur = intval(reset($e)); |
|
| 377 | - } else { |
|
| 378 | - return false; |
|
| 379 | - } |
|
| 380 | - |
|
| 381 | - // calculer le type et id de l’url actuelle |
|
| 382 | - include_spip('inc/urls'); |
|
| 383 | - include_spip('inc/filtres_mini'); |
|
| 384 | - $url = url_absolue(self()); |
|
| 385 | - |
|
| 386 | - // verifier le token |
|
| 387 | - $_token = calculer_token_previsu($url, $id_auteur, 'alea_ephemere'); |
|
| 388 | - if (!$_token or !hash_equals($token, $_token)) { |
|
| 389 | - $_token = calculer_token_previsu($url, $id_auteur, 'alea_ephemere_ancien'); |
|
| 390 | - if (!$_token or !hash_equals($token, $_token)) { |
|
| 391 | - return false; |
|
| 392 | - } |
|
| 393 | - } |
|
| 394 | - |
|
| 395 | - return [ |
|
| 396 | - 'id_auteur' => $id_auteur, |
|
| 397 | - ]; |
|
| 373 | + // retrouver auteur / hash |
|
| 374 | + $e = explode('-', $token, 2); |
|
| 375 | + if (count($e) == 2 and is_numeric(reset($e))) { |
|
| 376 | + $id_auteur = intval(reset($e)); |
|
| 377 | + } else { |
|
| 378 | + return false; |
|
| 379 | + } |
|
| 380 | + |
|
| 381 | + // calculer le type et id de l’url actuelle |
|
| 382 | + include_spip('inc/urls'); |
|
| 383 | + include_spip('inc/filtres_mini'); |
|
| 384 | + $url = url_absolue(self()); |
|
| 385 | + |
|
| 386 | + // verifier le token |
|
| 387 | + $_token = calculer_token_previsu($url, $id_auteur, 'alea_ephemere'); |
|
| 388 | + if (!$_token or !hash_equals($token, $_token)) { |
|
| 389 | + $_token = calculer_token_previsu($url, $id_auteur, 'alea_ephemere_ancien'); |
|
| 390 | + if (!$_token or !hash_equals($token, $_token)) { |
|
| 391 | + return false; |
|
| 392 | + } |
|
| 393 | + } |
|
| 394 | + |
|
| 395 | + return [ |
|
| 396 | + 'id_auteur' => $id_auteur, |
|
| 397 | + ]; |
|
| 398 | 398 | } |
| 399 | 399 | |
| 400 | 400 | /** |
@@ -403,13 +403,13 @@ discard block |
||
| 403 | 403 | * @return bool|array |
| 404 | 404 | */ |
| 405 | 405 | function decrire_token_previsu() { |
| 406 | - static $desc = null; |
|
| 407 | - if (is_null($desc)) { |
|
| 408 | - if ($token = _request('var_previewtoken')) { |
|
| 409 | - $desc = verifier_token_previsu($token); |
|
| 410 | - } else { |
|
| 411 | - $desc = false; |
|
| 412 | - } |
|
| 413 | - } |
|
| 414 | - return $desc; |
|
| 406 | + static $desc = null; |
|
| 407 | + if (is_null($desc)) { |
|
| 408 | + if ($token = _request('var_previewtoken')) { |
|
| 409 | + $desc = verifier_token_previsu($token); |
|
| 410 | + } else { |
|
| 411 | + $desc = false; |
|
| 412 | + } |
|
| 413 | + } |
|
| 414 | + return $desc; |
|
| 415 | 415 | } |
@@ -93,7 +93,7 @@ discard block |
||
| 93 | 93 | } |
| 94 | 94 | |
| 95 | 95 | $arg = parametre_url($url_action, 'arg'); |
| 96 | - $confirm = md5("$action:$arg:" . realpath(__FILE__)); |
|
| 96 | + $confirm = md5("$action:$arg:".realpath(__FILE__)); |
|
| 97 | 97 | if (_request('confirm_action') === $confirm) { |
| 98 | 98 | return true; |
| 99 | 99 | } |
@@ -146,7 +146,7 @@ discard block |
||
| 146 | 146 | } else { |
| 147 | 147 | return generer_url_action( |
| 148 | 148 | $action, |
| 149 | - 'arg=' . rawurlencode($arg) . "&hash=$hash" . (!$r ? '' : "&redirect=$r"), |
|
| 149 | + 'arg='.rawurlencode($arg)."&hash=$hash".(!$r ? '' : "&redirect=$r"), |
|
| 150 | 150 | $mode, |
| 151 | 151 | $public |
| 152 | 152 | ); |
@@ -157,9 +157,9 @@ discard block |
||
| 157 | 157 | $hash = calculer_action_auteur("$action-$arg"); |
| 158 | 158 | $att .= " style='margin: 0px; border: 0px'"; |
| 159 | 159 | if ($redirect) { |
| 160 | - $redirect = "\n\t\t<input name='redirect' type='hidden' value='" . str_replace("'", ''', $redirect) . "' />"; |
|
| 160 | + $redirect = "\n\t\t<input name='redirect' type='hidden' value='".str_replace("'", ''', $redirect)."' />"; |
|
| 161 | 161 | } |
| 162 | - $mode .= $redirect . " |
|
| 162 | + $mode .= $redirect." |
|
| 163 | 163 | <input name='hash' type='hidden' value='$hash' /> |
| 164 | 164 | <input name='arg' type='hidden' value='$arg' />"; |
| 165 | 165 | |
@@ -233,7 +233,7 @@ discard block |
||
| 233 | 233 | $pass = $pass ?? ''; |
| 234 | 234 | $entry = "$action:$id_auteur:$pass:$alea"; |
| 235 | 235 | if (!isset($sha[$entry])) { |
| 236 | - $sha[$entry] = hash_hmac('sha256', "$action::$id_auteur", "$pass::" . _action_get_alea($alea)); |
|
| 236 | + $sha[$entry] = hash_hmac('sha256', "$action::$id_auteur", "$pass::"._action_get_alea($alea)); |
|
| 237 | 237 | } |
| 238 | 238 | |
| 239 | 239 | return $sha[$entry]; |
@@ -351,7 +351,7 @@ discard block |
||
| 351 | 351 | // On nettoie l’URL de tous les var_. |
| 352 | 352 | $url = nettoyer_uri_var($url); |
| 353 | 353 | |
| 354 | - $token = _action_auteur('previsualiser-' . $url, $id_auteur, secret_du_site(), $alea); |
|
| 354 | + $token = _action_auteur('previsualiser-'.$url, $id_auteur, secret_du_site(), $alea); |
|
| 355 | 355 | return "$id_auteur-$token"; |
| 356 | 356 | } |
| 357 | 357 | |
@@ -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'); |
@@ -35,33 +35,33 @@ discard block |
||
| 35 | 35 | * - une chaîne vide si autorisation à pénétrer dans l'espace privé. |
| 36 | 36 | */ |
| 37 | 37 | function inc_auth_dist() { |
| 38 | - $row = auth_mode(); |
|
| 38 | + $row = auth_mode(); |
|
| 39 | 39 | |
| 40 | - if ($row) { |
|
| 41 | - return auth_init_droits($row); |
|
| 42 | - } |
|
| 40 | + if ($row) { |
|
| 41 | + return auth_init_droits($row); |
|
| 42 | + } |
|
| 43 | 43 | |
| 44 | - if (!$GLOBALS['connect_login']) { |
|
| 45 | - return auth_a_loger(); |
|
| 46 | - } |
|
| 44 | + if (!$GLOBALS['connect_login']) { |
|
| 45 | + return auth_a_loger(); |
|
| 46 | + } |
|
| 47 | 47 | |
| 48 | - // Cas ou l'auteur a ete identifie mais on n'a pas d'info sur lui |
|
| 49 | - // C'est soit parce que la base est inutilisable, |
|
| 50 | - // soit parce que la table des auteurs a changee (restauration etc) |
|
| 51 | - // Pas la peine d'insister. |
|
| 52 | - // Renvoyer le nom fautif et une URL de remise a zero |
|
| 48 | + // Cas ou l'auteur a ete identifie mais on n'a pas d'info sur lui |
|
| 49 | + // C'est soit parce que la base est inutilisable, |
|
| 50 | + // soit parce que la table des auteurs a changee (restauration etc) |
|
| 51 | + // Pas la peine d'insister. |
|
| 52 | + // Renvoyer le nom fautif et une URL de remise a zero |
|
| 53 | 53 | |
| 54 | - if (spip_connect()) { |
|
| 55 | - return [ |
|
| 56 | - 'login' => $GLOBALS['connect_login'], |
|
| 57 | - 'site' => generer_url_public('', 'action=logout&logout=prive') |
|
| 58 | - ]; |
|
| 59 | - } |
|
| 54 | + if (spip_connect()) { |
|
| 55 | + return [ |
|
| 56 | + 'login' => $GLOBALS['connect_login'], |
|
| 57 | + 'site' => generer_url_public('', 'action=logout&logout=prive') |
|
| 58 | + ]; |
|
| 59 | + } |
|
| 60 | 60 | |
| 61 | - $n = intval(sql_errno()); |
|
| 62 | - spip_log("Erreur base de donnees $n " . sql_error()); |
|
| 61 | + $n = intval(sql_errno()); |
|
| 62 | + spip_log("Erreur base de donnees $n " . sql_error()); |
|
| 63 | 63 | |
| 64 | - return $n ?: 1; |
|
| 64 | + return $n ?: 1; |
|
| 65 | 65 | } |
| 66 | 66 | |
| 67 | 67 | /** |
@@ -73,39 +73,39 @@ discard block |
||
| 73 | 73 | * @return array|string |
| 74 | 74 | */ |
| 75 | 75 | function auth_echec($raison) { |
| 76 | - include_spip('inc/minipres'); |
|
| 77 | - include_spip('inc/headers'); |
|
| 78 | - // pas authentifie. Pourquoi ? |
|
| 79 | - if (is_string($raison)) { |
|
| 80 | - // redirection vers une page d'authentification |
|
| 81 | - // on ne revient pas de cette fonction |
|
| 82 | - // sauf si pb de header |
|
| 83 | - $raison = redirige_formulaire($raison); |
|
| 84 | - } elseif (is_int($raison)) { |
|
| 85 | - // erreur SQL a afficher |
|
| 86 | - $raison = minipres( |
|
| 87 | - _T('info_travaux_titre'), |
|
| 88 | - _T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>' |
|
| 89 | - ); |
|
| 90 | - } elseif (@$raison['statut']) { |
|
| 91 | - // un simple visiteur n'a pas acces a l'espace prive |
|
| 92 | - spip_log('connexion refusee a ' . @$raison['id_auteur']); |
|
| 93 | - $raison = minipres(_T('avis_erreur_connexion'), _T('avis_erreur_visiteur')); |
|
| 94 | - } else { |
|
| 95 | - // auteur en fin de droits ... |
|
| 96 | - $h = $raison['site']; |
|
| 97 | - $raison = minipres( |
|
| 98 | - _T('avis_erreur_connexion'), |
|
| 99 | - '<br /><br /><p>' |
|
| 100 | - . _T('texte_inc_auth_1', ['auth_login' => $raison['login']]) |
|
| 101 | - . " <a href='$h'>" |
|
| 102 | - . _T('texte_inc_auth_2') |
|
| 103 | - . '</a>' |
|
| 104 | - . _T('texte_inc_auth_3') |
|
| 105 | - ); |
|
| 106 | - } |
|
| 107 | - |
|
| 108 | - return $raison; |
|
| 76 | + include_spip('inc/minipres'); |
|
| 77 | + include_spip('inc/headers'); |
|
| 78 | + // pas authentifie. Pourquoi ? |
|
| 79 | + if (is_string($raison)) { |
|
| 80 | + // redirection vers une page d'authentification |
|
| 81 | + // on ne revient pas de cette fonction |
|
| 82 | + // sauf si pb de header |
|
| 83 | + $raison = redirige_formulaire($raison); |
|
| 84 | + } elseif (is_int($raison)) { |
|
| 85 | + // erreur SQL a afficher |
|
| 86 | + $raison = minipres( |
|
| 87 | + _T('info_travaux_titre'), |
|
| 88 | + _T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>' |
|
| 89 | + ); |
|
| 90 | + } elseif (@$raison['statut']) { |
|
| 91 | + // un simple visiteur n'a pas acces a l'espace prive |
|
| 92 | + spip_log('connexion refusee a ' . @$raison['id_auteur']); |
|
| 93 | + $raison = minipres(_T('avis_erreur_connexion'), _T('avis_erreur_visiteur')); |
|
| 94 | + } else { |
|
| 95 | + // auteur en fin de droits ... |
|
| 96 | + $h = $raison['site']; |
|
| 97 | + $raison = minipres( |
|
| 98 | + _T('avis_erreur_connexion'), |
|
| 99 | + '<br /><br /><p>' |
|
| 100 | + . _T('texte_inc_auth_1', ['auth_login' => $raison['login']]) |
|
| 101 | + . " <a href='$h'>" |
|
| 102 | + . _T('texte_inc_auth_2') |
|
| 103 | + . '</a>' |
|
| 104 | + . _T('texte_inc_auth_3') |
|
| 105 | + ); |
|
| 106 | + } |
|
| 107 | + |
|
| 108 | + return $raison; |
|
| 109 | 109 | } |
| 110 | 110 | |
| 111 | 111 | /** |
@@ -115,81 +115,81 @@ discard block |
||
| 115 | 115 | * @return array|bool|string |
| 116 | 116 | */ |
| 117 | 117 | function auth_mode() { |
| 118 | - // |
|
| 119 | - // Initialiser variables (eviter hacks par URL) |
|
| 120 | - // |
|
| 121 | - $GLOBALS['connect_login'] = ''; |
|
| 122 | - $id_auteur = null; |
|
| 123 | - $GLOBALS['auth_can_disconnect'] = false; |
|
| 124 | - |
|
| 125 | - // |
|
| 126 | - // Recuperer les donnees d'identification |
|
| 127 | - // |
|
| 128 | - include_spip('inc/session'); |
|
| 129 | - // Session valide en cours ? |
|
| 130 | - if (isset($_COOKIE['spip_session'])) { |
|
| 131 | - $session = charger_fonction('session', 'inc'); |
|
| 132 | - if ( |
|
| 133 | - $id_auteur = $session() |
|
| 134 | - or $id_auteur === 0 // reprise sur restauration |
|
| 135 | - ) { |
|
| 136 | - $GLOBALS['auth_can_disconnect'] = true; |
|
| 137 | - $GLOBALS['connect_login'] = session_get('login'); |
|
| 138 | - } else { |
|
| 139 | - unset($_COOKIE['spip_session']); |
|
| 140 | - } |
|
| 141 | - } |
|
| 142 | - |
|
| 143 | - // Essayer auth http si significatif |
|
| 144 | - // (ignorer les login d'intranet independants de spip) |
|
| 145 | - if (!$GLOBALS['ignore_auth_http']) { |
|
| 146 | - if ( |
|
| 147 | - (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW']) |
|
| 148 | - and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) |
|
| 149 | - or |
|
| 150 | - // Si auth http differtente de basic, PHP_AUTH_PW |
|
| 151 | - // est indisponible mais tentons quand meme pour |
|
| 152 | - // autocreation via LDAP |
|
| 153 | - (isset($_SERVER['REMOTE_USER']) |
|
| 154 | - and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], '')) |
|
| 155 | - ) { |
|
| 156 | - if (!$id_auteur) { |
|
| 157 | - $_SERVER['PHP_AUTH_PW'] = ''; |
|
| 158 | - $GLOBALS['auth_can_disconnect'] = true; |
|
| 159 | - $GLOBALS['visiteur_session'] = $r; |
|
| 160 | - $GLOBALS['connect_login'] = session_get('login'); |
|
| 161 | - $id_auteur = $r['id_auteur']; |
|
| 162 | - } else { |
|
| 163 | - // cas de la session en plus de PHP_AUTH |
|
| 164 | - /* if ($id_auteur != $r['id_auteur']){ |
|
| 118 | + // |
|
| 119 | + // Initialiser variables (eviter hacks par URL) |
|
| 120 | + // |
|
| 121 | + $GLOBALS['connect_login'] = ''; |
|
| 122 | + $id_auteur = null; |
|
| 123 | + $GLOBALS['auth_can_disconnect'] = false; |
|
| 124 | + |
|
| 125 | + // |
|
| 126 | + // Recuperer les donnees d'identification |
|
| 127 | + // |
|
| 128 | + include_spip('inc/session'); |
|
| 129 | + // Session valide en cours ? |
|
| 130 | + if (isset($_COOKIE['spip_session'])) { |
|
| 131 | + $session = charger_fonction('session', 'inc'); |
|
| 132 | + if ( |
|
| 133 | + $id_auteur = $session() |
|
| 134 | + or $id_auteur === 0 // reprise sur restauration |
|
| 135 | + ) { |
|
| 136 | + $GLOBALS['auth_can_disconnect'] = true; |
|
| 137 | + $GLOBALS['connect_login'] = session_get('login'); |
|
| 138 | + } else { |
|
| 139 | + unset($_COOKIE['spip_session']); |
|
| 140 | + } |
|
| 141 | + } |
|
| 142 | + |
|
| 143 | + // Essayer auth http si significatif |
|
| 144 | + // (ignorer les login d'intranet independants de spip) |
|
| 145 | + if (!$GLOBALS['ignore_auth_http']) { |
|
| 146 | + if ( |
|
| 147 | + (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW']) |
|
| 148 | + and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) |
|
| 149 | + or |
|
| 150 | + // Si auth http differtente de basic, PHP_AUTH_PW |
|
| 151 | + // est indisponible mais tentons quand meme pour |
|
| 152 | + // autocreation via LDAP |
|
| 153 | + (isset($_SERVER['REMOTE_USER']) |
|
| 154 | + and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], '')) |
|
| 155 | + ) { |
|
| 156 | + if (!$id_auteur) { |
|
| 157 | + $_SERVER['PHP_AUTH_PW'] = ''; |
|
| 158 | + $GLOBALS['auth_can_disconnect'] = true; |
|
| 159 | + $GLOBALS['visiteur_session'] = $r; |
|
| 160 | + $GLOBALS['connect_login'] = session_get('login'); |
|
| 161 | + $id_auteur = $r['id_auteur']; |
|
| 162 | + } else { |
|
| 163 | + // cas de la session en plus de PHP_AUTH |
|
| 164 | + /* if ($id_auteur != $r['id_auteur']){ |
|
| 165 | 165 | spip_log("vol de session $id_auteur" . join(', ', $r)); |
| 166 | 166 | unset($_COOKIE['spip_session']); |
| 167 | 167 | $id_auteur = ''; |
| 168 | 168 | } */ |
| 169 | - } |
|
| 170 | - } else { |
|
| 171 | - // Authentification .htaccess old style, car .htaccess semble |
|
| 172 | - // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW |
|
| 173 | - if (isset($_SERVER['REMOTE_USER'])) { |
|
| 174 | - $GLOBALS['connect_login'] = $_SERVER['REMOTE_USER']; |
|
| 175 | - } |
|
| 176 | - } |
|
| 177 | - } |
|
| 178 | - |
|
| 179 | - $where = (is_numeric($id_auteur) |
|
| 180 | - /*AND $id_auteur>0*/ // reprise lors des restaurations |
|
| 181 | - ) ? |
|
| 182 | - "id_auteur=$id_auteur" : |
|
| 183 | - (!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text')); |
|
| 184 | - |
|
| 185 | - if (!$where) { |
|
| 186 | - return ''; |
|
| 187 | - } |
|
| 188 | - |
|
| 189 | - // Trouver les autres infos dans la table auteurs. |
|
| 190 | - // le champ 'quand' est utilise par l'agenda |
|
| 191 | - |
|
| 192 | - return sql_fetsel('*, en_ligne AS quand', 'spip_auteurs', "$where AND statut!='5poubelle'"); |
|
| 169 | + } |
|
| 170 | + } else { |
|
| 171 | + // Authentification .htaccess old style, car .htaccess semble |
|
| 172 | + // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW |
|
| 173 | + if (isset($_SERVER['REMOTE_USER'])) { |
|
| 174 | + $GLOBALS['connect_login'] = $_SERVER['REMOTE_USER']; |
|
| 175 | + } |
|
| 176 | + } |
|
| 177 | + } |
|
| 178 | + |
|
| 179 | + $where = (is_numeric($id_auteur) |
|
| 180 | + /*AND $id_auteur>0*/ // reprise lors des restaurations |
|
| 181 | + ) ? |
|
| 182 | + "id_auteur=$id_auteur" : |
|
| 183 | + (!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text')); |
|
| 184 | + |
|
| 185 | + if (!$where) { |
|
| 186 | + return ''; |
|
| 187 | + } |
|
| 188 | + |
|
| 189 | + // Trouver les autres infos dans la table auteurs. |
|
| 190 | + // le champ 'quand' est utilise par l'agenda |
|
| 191 | + |
|
| 192 | + return sql_fetsel('*, en_ligne AS quand', 'spip_auteurs', "$where AND statut!='5poubelle'"); |
|
| 193 | 193 | } |
| 194 | 194 | |
| 195 | 195 | /** |
@@ -207,86 +207,86 @@ discard block |
||
| 207 | 207 | */ |
| 208 | 208 | function auth_init_droits($row) { |
| 209 | 209 | |
| 210 | - include_spip('inc/autoriser'); |
|
| 211 | - if (!autoriser('loger', '', 0, $row)) { |
|
| 212 | - return false; |
|
| 213 | - } |
|
| 214 | - |
|
| 215 | - |
|
| 216 | - if ($row['statut'] == 'nouveau') { |
|
| 217 | - include_spip('action/inscrire_auteur'); |
|
| 218 | - $row = confirmer_statut_inscription($row); |
|
| 219 | - } |
|
| 220 | - |
|
| 221 | - $GLOBALS['connect_id_auteur'] = $row['id_auteur']; |
|
| 222 | - $GLOBALS['connect_login'] = $row['login']; |
|
| 223 | - $GLOBALS['connect_statut'] = $row['statut']; |
|
| 224 | - |
|
| 225 | - $GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row); |
|
| 226 | - |
|
| 227 | - // au cas ou : ne pas memoriser les champs sensibles |
|
| 228 | - unset($GLOBALS['visiteur_session']['pass']); |
|
| 229 | - unset($GLOBALS['visiteur_session']['htpass']); |
|
| 230 | - unset($GLOBALS['visiteur_session']['alea_actuel']); |
|
| 231 | - unset($GLOBALS['visiteur_session']['alea_futur']); |
|
| 232 | - unset($GLOBALS['visiteur_session']['ldap_password']); |
|
| 233 | - |
|
| 234 | - // creer la session au besoin |
|
| 235 | - if (!isset($_COOKIE['spip_session'])) { |
|
| 236 | - $session = charger_fonction('session', 'inc'); |
|
| 237 | - $spip_session = $session($row); |
|
| 238 | - } |
|
| 239 | - |
|
| 240 | - // reinjecter les preferences_auteur apres le reset de spip_session |
|
| 241 | - // car utilisees au retour par auth_loger() |
|
| 242 | - $r = @unserialize($row['prefs']); |
|
| 243 | - $GLOBALS['visiteur_session']['prefs'] = ($r ?: []); |
|
| 244 | - // si prefs pas definies, les definir par defaut |
|
| 245 | - if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])) { |
|
| 246 | - $GLOBALS['visiteur_session']['prefs']['couleur'] = 2; |
|
| 247 | - $GLOBALS['visiteur_session']['prefs']['display'] = 2; |
|
| 248 | - $GLOBALS['visiteur_session']['prefs']['display_navigation'] = 'navigation_avec_icones'; |
|
| 249 | - $GLOBALS['visiteur_session']['prefs']['display_outils'] = 'oui'; |
|
| 250 | - } |
|
| 251 | - |
|
| 252 | - $GLOBALS['visiteur_session'] = pipeline( |
|
| 253 | - 'preparer_visiteur_session', |
|
| 254 | - ['args' => ['row' => $row], |
|
| 255 | - 'data' => $GLOBALS['visiteur_session']] |
|
| 256 | - ); |
|
| 257 | - |
|
| 258 | - // Etablir les droits selon le codage attendu |
|
| 259 | - // dans ecrire/index.php ecrire/prive.php |
|
| 260 | - |
|
| 261 | - // Pas autorise a acceder a ecrire ? renvoyer le tableau |
|
| 262 | - // A noter : le premier appel a autoriser() a le bon gout |
|
| 263 | - // d'initialiser $GLOBALS['visiteur_session']['restreint'], |
|
| 264 | - // qui ne figure pas dans le fichier de session |
|
| 265 | - |
|
| 266 | - if (!autoriser('ecrire')) { |
|
| 267 | - return $row; |
|
| 268 | - } |
|
| 269 | - |
|
| 270 | - // autoriser('ecrire') ne laisse passer que les Admin et les Redac |
|
| 271 | - |
|
| 272 | - auth_trace($row); |
|
| 273 | - |
|
| 274 | - // Administrateurs |
|
| 275 | - if (in_array($GLOBALS['connect_statut'], explode(',', _STATUT_AUTEUR_RUBRIQUE))) { |
|
| 276 | - if ( |
|
| 277 | - isset($GLOBALS['visiteur_session']['restreint']) |
|
| 278 | - and is_array($GLOBALS['visiteur_session']['restreint']) |
|
| 279 | - ) { |
|
| 280 | - $GLOBALS['connect_id_rubrique'] = $GLOBALS['visiteur_session']['restreint']; |
|
| 281 | - } |
|
| 282 | - if ($GLOBALS['connect_statut'] == '0minirezo') { |
|
| 283 | - $GLOBALS['connect_toutes_rubriques'] = !$GLOBALS['connect_id_rubrique']; |
|
| 284 | - } |
|
| 285 | - } |
|
| 286 | - |
|
| 287 | - // Pour les redacteurs, inc_version a fait l'initialisation minimale |
|
| 288 | - |
|
| 289 | - return ''; // i.e. pas de pb. |
|
| 210 | + include_spip('inc/autoriser'); |
|
| 211 | + if (!autoriser('loger', '', 0, $row)) { |
|
| 212 | + return false; |
|
| 213 | + } |
|
| 214 | + |
|
| 215 | + |
|
| 216 | + if ($row['statut'] == 'nouveau') { |
|
| 217 | + include_spip('action/inscrire_auteur'); |
|
| 218 | + $row = confirmer_statut_inscription($row); |
|
| 219 | + } |
|
| 220 | + |
|
| 221 | + $GLOBALS['connect_id_auteur'] = $row['id_auteur']; |
|
| 222 | + $GLOBALS['connect_login'] = $row['login']; |
|
| 223 | + $GLOBALS['connect_statut'] = $row['statut']; |
|
| 224 | + |
|
| 225 | + $GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row); |
|
| 226 | + |
|
| 227 | + // au cas ou : ne pas memoriser les champs sensibles |
|
| 228 | + unset($GLOBALS['visiteur_session']['pass']); |
|
| 229 | + unset($GLOBALS['visiteur_session']['htpass']); |
|
| 230 | + unset($GLOBALS['visiteur_session']['alea_actuel']); |
|
| 231 | + unset($GLOBALS['visiteur_session']['alea_futur']); |
|
| 232 | + unset($GLOBALS['visiteur_session']['ldap_password']); |
|
| 233 | + |
|
| 234 | + // creer la session au besoin |
|
| 235 | + if (!isset($_COOKIE['spip_session'])) { |
|
| 236 | + $session = charger_fonction('session', 'inc'); |
|
| 237 | + $spip_session = $session($row); |
|
| 238 | + } |
|
| 239 | + |
|
| 240 | + // reinjecter les preferences_auteur apres le reset de spip_session |
|
| 241 | + // car utilisees au retour par auth_loger() |
|
| 242 | + $r = @unserialize($row['prefs']); |
|
| 243 | + $GLOBALS['visiteur_session']['prefs'] = ($r ?: []); |
|
| 244 | + // si prefs pas definies, les definir par defaut |
|
| 245 | + if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])) { |
|
| 246 | + $GLOBALS['visiteur_session']['prefs']['couleur'] = 2; |
|
| 247 | + $GLOBALS['visiteur_session']['prefs']['display'] = 2; |
|
| 248 | + $GLOBALS['visiteur_session']['prefs']['display_navigation'] = 'navigation_avec_icones'; |
|
| 249 | + $GLOBALS['visiteur_session']['prefs']['display_outils'] = 'oui'; |
|
| 250 | + } |
|
| 251 | + |
|
| 252 | + $GLOBALS['visiteur_session'] = pipeline( |
|
| 253 | + 'preparer_visiteur_session', |
|
| 254 | + ['args' => ['row' => $row], |
|
| 255 | + 'data' => $GLOBALS['visiteur_session']] |
|
| 256 | + ); |
|
| 257 | + |
|
| 258 | + // Etablir les droits selon le codage attendu |
|
| 259 | + // dans ecrire/index.php ecrire/prive.php |
|
| 260 | + |
|
| 261 | + // Pas autorise a acceder a ecrire ? renvoyer le tableau |
|
| 262 | + // A noter : le premier appel a autoriser() a le bon gout |
|
| 263 | + // d'initialiser $GLOBALS['visiteur_session']['restreint'], |
|
| 264 | + // qui ne figure pas dans le fichier de session |
|
| 265 | + |
|
| 266 | + if (!autoriser('ecrire')) { |
|
| 267 | + return $row; |
|
| 268 | + } |
|
| 269 | + |
|
| 270 | + // autoriser('ecrire') ne laisse passer que les Admin et les Redac |
|
| 271 | + |
|
| 272 | + auth_trace($row); |
|
| 273 | + |
|
| 274 | + // Administrateurs |
|
| 275 | + if (in_array($GLOBALS['connect_statut'], explode(',', _STATUT_AUTEUR_RUBRIQUE))) { |
|
| 276 | + if ( |
|
| 277 | + isset($GLOBALS['visiteur_session']['restreint']) |
|
| 278 | + and is_array($GLOBALS['visiteur_session']['restreint']) |
|
| 279 | + ) { |
|
| 280 | + $GLOBALS['connect_id_rubrique'] = $GLOBALS['visiteur_session']['restreint']; |
|
| 281 | + } |
|
| 282 | + if ($GLOBALS['connect_statut'] == '0minirezo') { |
|
| 283 | + $GLOBALS['connect_toutes_rubriques'] = !$GLOBALS['connect_id_rubrique']; |
|
| 284 | + } |
|
| 285 | + } |
|
| 286 | + |
|
| 287 | + // Pour les redacteurs, inc_version a fait l'initialisation minimale |
|
| 288 | + |
|
| 289 | + return ''; // i.e. pas de pb. |
|
| 290 | 290 | } |
| 291 | 291 | |
| 292 | 292 | /** |
@@ -295,23 +295,23 @@ discard block |
||
| 295 | 295 | * @return string |
| 296 | 296 | */ |
| 297 | 297 | function auth_a_loger() { |
| 298 | - $redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), true); |
|
| 299 | - |
|
| 300 | - // un echec au "bonjour" (login initial) quand le statut est |
|
| 301 | - // inconnu signale sans doute un probleme de cookies |
|
| 302 | - if (isset($_GET['bonjour'])) { |
|
| 303 | - $redirect = parametre_url( |
|
| 304 | - $redirect, |
|
| 305 | - 'var_erreur', |
|
| 306 | - (!isset($GLOBALS['visiteur_session']['statut']) |
|
| 307 | - ? 'cookie' |
|
| 308 | - : 'statut' |
|
| 309 | - ), |
|
| 310 | - '&' |
|
| 311 | - ); |
|
| 312 | - } |
|
| 313 | - |
|
| 314 | - return $redirect; |
|
| 298 | + $redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), true); |
|
| 299 | + |
|
| 300 | + // un echec au "bonjour" (login initial) quand le statut est |
|
| 301 | + // inconnu signale sans doute un probleme de cookies |
|
| 302 | + if (isset($_GET['bonjour'])) { |
|
| 303 | + $redirect = parametre_url( |
|
| 304 | + $redirect, |
|
| 305 | + 'var_erreur', |
|
| 306 | + (!isset($GLOBALS['visiteur_session']['statut']) |
|
| 307 | + ? 'cookie' |
|
| 308 | + : 'statut' |
|
| 309 | + ), |
|
| 310 | + '&' |
|
| 311 | + ); |
|
| 312 | + } |
|
| 313 | + |
|
| 314 | + return $redirect; |
|
| 315 | 315 | } |
| 316 | 316 | |
| 317 | 317 | /** |
@@ -323,19 +323,19 @@ discard block |
||
| 323 | 323 | * @param null|string $date |
| 324 | 324 | */ |
| 325 | 325 | function auth_trace($row, $date = null) { |
| 326 | - // Indiquer la connexion. A la minute pres ca suffit. |
|
| 327 | - if (!is_numeric($connect_quand = $row['quand'] ?? '')) { |
|
| 328 | - $connect_quand = strtotime($connect_quand); |
|
| 329 | - } |
|
| 326 | + // Indiquer la connexion. A la minute pres ca suffit. |
|
| 327 | + if (!is_numeric($connect_quand = $row['quand'] ?? '')) { |
|
| 328 | + $connect_quand = strtotime($connect_quand); |
|
| 329 | + } |
|
| 330 | 330 | |
| 331 | - $date ??= date('Y-m-d H:i:s'); |
|
| 331 | + $date ??= date('Y-m-d H:i:s'); |
|
| 332 | 332 | |
| 333 | - if (abs(strtotime($date) - $connect_quand) >= 60) { |
|
| 334 | - sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 335 | - $row['en_ligne'] = $date; |
|
| 336 | - } |
|
| 333 | + if (abs(strtotime($date) - $connect_quand) >= 60) { |
|
| 334 | + sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 335 | + $row['en_ligne'] = $date; |
|
| 336 | + } |
|
| 337 | 337 | |
| 338 | - pipeline('trig_auth_trace', ['args' => ['row' => $row, 'date' => $date]]); |
|
| 338 | + pipeline('trig_auth_trace', ['args' => ['row' => $row, 'date' => $date]]); |
|
| 339 | 339 | } |
| 340 | 340 | |
| 341 | 341 | |
@@ -361,28 +361,28 @@ discard block |
||
| 361 | 361 | * @return mixed |
| 362 | 362 | */ |
| 363 | 363 | function auth_administrer($fonction, $args, $defaut = false) { |
| 364 | - $auth_methode = array_shift($args); |
|
| 365 | - $auth_methode = $auth_methode ?: 'spip'; // valeur par defaut au cas ou |
|
| 366 | - if ( |
|
| 367 | - $auth = charger_fonction($auth_methode, 'auth', true) |
|
| 368 | - and function_exists($f = "auth_{$auth_methode}_$fonction") |
|
| 369 | - ) { |
|
| 370 | - $res = $f(...$args); |
|
| 371 | - } else { |
|
| 372 | - $res = $defaut; |
|
| 373 | - } |
|
| 374 | - $res = pipeline( |
|
| 375 | - 'auth_administrer', |
|
| 376 | - [ |
|
| 377 | - 'args' => [ |
|
| 378 | - 'fonction' => $fonction, |
|
| 379 | - 'methode' => $auth_methode, |
|
| 380 | - 'args' => $args |
|
| 381 | - ], |
|
| 382 | - 'data' => $res |
|
| 383 | - ] |
|
| 384 | - ); |
|
| 385 | - return $res; |
|
| 364 | + $auth_methode = array_shift($args); |
|
| 365 | + $auth_methode = $auth_methode ?: 'spip'; // valeur par defaut au cas ou |
|
| 366 | + if ( |
|
| 367 | + $auth = charger_fonction($auth_methode, 'auth', true) |
|
| 368 | + and function_exists($f = "auth_{$auth_methode}_$fonction") |
|
| 369 | + ) { |
|
| 370 | + $res = $f(...$args); |
|
| 371 | + } else { |
|
| 372 | + $res = $defaut; |
|
| 373 | + } |
|
| 374 | + $res = pipeline( |
|
| 375 | + 'auth_administrer', |
|
| 376 | + [ |
|
| 377 | + 'args' => [ |
|
| 378 | + 'fonction' => $fonction, |
|
| 379 | + 'methode' => $auth_methode, |
|
| 380 | + 'args' => $args |
|
| 381 | + ], |
|
| 382 | + 'data' => $res |
|
| 383 | + ] |
|
| 384 | + ); |
|
| 385 | + return $res; |
|
| 386 | 386 | } |
| 387 | 387 | |
| 388 | 388 | /** |
@@ -392,11 +392,11 @@ discard block |
||
| 392 | 392 | * @return array |
| 393 | 393 | */ |
| 394 | 394 | function auth_formulaire_login($flux) { |
| 395 | - foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 396 | - $flux = auth_administrer('formulaire_login', [$methode, $flux], $flux); |
|
| 397 | - } |
|
| 395 | + foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 396 | + $flux = auth_administrer('formulaire_login', [$methode, $flux], $flux); |
|
| 397 | + } |
|
| 398 | 398 | |
| 399 | - return $flux; |
|
| 399 | + return $flux; |
|
| 400 | 400 | } |
| 401 | 401 | |
| 402 | 402 | |
@@ -410,19 +410,19 @@ discard block |
||
| 410 | 410 | * @return string/bool |
| 411 | 411 | */ |
| 412 | 412 | function auth_retrouver_login($login, $serveur = '') { |
| 413 | - if (!spip_connect($serveur)) { |
|
| 414 | - include_spip('inc/minipres'); |
|
| 415 | - echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique')); |
|
| 416 | - exit; |
|
| 417 | - } |
|
| 418 | - |
|
| 419 | - foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 420 | - if ($auteur = auth_administrer('retrouver_login', [$methode, $login, $serveur])) { |
|
| 421 | - return $auteur; |
|
| 422 | - } |
|
| 423 | - } |
|
| 424 | - |
|
| 425 | - return false; |
|
| 413 | + if (!spip_connect($serveur)) { |
|
| 414 | + include_spip('inc/minipres'); |
|
| 415 | + echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique')); |
|
| 416 | + exit; |
|
| 417 | + } |
|
| 418 | + |
|
| 419 | + foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 420 | + if ($auteur = auth_administrer('retrouver_login', [$methode, $login, $serveur])) { |
|
| 421 | + return $auteur; |
|
| 422 | + } |
|
| 423 | + } |
|
| 424 | + |
|
| 425 | + return false; |
|
| 426 | 426 | } |
| 427 | 427 | |
| 428 | 428 | /** |
@@ -437,34 +437,34 @@ discard block |
||
| 437 | 437 | * @return array |
| 438 | 438 | */ |
| 439 | 439 | function auth_informer_login($login, $serveur = '') { |
| 440 | - if ( |
|
| 441 | - !$login |
|
| 442 | - or !$login_base = auth_retrouver_login($login, $serveur) |
|
| 443 | - or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur) |
|
| 444 | - ) { |
|
| 445 | - // generer de fausses infos, mais credibles, pour eviter une attaque |
|
| 446 | - // https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691 |
|
| 447 | - |
|
| 448 | - $row = [ |
|
| 449 | - 'login' => $login, |
|
| 450 | - 'cnx' => '0', |
|
| 451 | - 'logo' => '', |
|
| 452 | - ]; |
|
| 453 | - |
|
| 454 | - return $row; |
|
| 455 | - } |
|
| 456 | - |
|
| 457 | - $prefs = @unserialize($row['prefs']); |
|
| 458 | - $infos = [ |
|
| 459 | - 'id_auteur' => $row['id_auteur'], |
|
| 460 | - 'login' => $row['login'], |
|
| 461 | - 'cnx' => (isset($prefs['cnx']) and $prefs['cnx'] === 'perma') ? '1' : '0', |
|
| 462 | - 'logo' => recuperer_fond('formulaires/inc-logo_auteur', $row), |
|
| 463 | - ]; |
|
| 464 | - |
|
| 465 | - verifier_visiteur(); |
|
| 466 | - |
|
| 467 | - return auth_administrer('informer_login', [$row['source'], $infos, $row, $serveur], $infos); |
|
| 440 | + if ( |
|
| 441 | + !$login |
|
| 442 | + or !$login_base = auth_retrouver_login($login, $serveur) |
|
| 443 | + or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur) |
|
| 444 | + ) { |
|
| 445 | + // generer de fausses infos, mais credibles, pour eviter une attaque |
|
| 446 | + // https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691 |
|
| 447 | + |
|
| 448 | + $row = [ |
|
| 449 | + 'login' => $login, |
|
| 450 | + 'cnx' => '0', |
|
| 451 | + 'logo' => '', |
|
| 452 | + ]; |
|
| 453 | + |
|
| 454 | + return $row; |
|
| 455 | + } |
|
| 456 | + |
|
| 457 | + $prefs = @unserialize($row['prefs']); |
|
| 458 | + $infos = [ |
|
| 459 | + 'id_auteur' => $row['id_auteur'], |
|
| 460 | + 'login' => $row['login'], |
|
| 461 | + 'cnx' => (isset($prefs['cnx']) and $prefs['cnx'] === 'perma') ? '1' : '0', |
|
| 462 | + 'logo' => recuperer_fond('formulaires/inc-logo_auteur', $row), |
|
| 463 | + ]; |
|
| 464 | + |
|
| 465 | + verifier_visiteur(); |
|
| 466 | + |
|
| 467 | + return auth_administrer('informer_login', [$row['source'], $infos, $row, $serveur], $infos); |
|
| 468 | 468 | } |
| 469 | 469 | |
| 470 | 470 | |
@@ -478,21 +478,21 @@ discard block |
||
| 478 | 478 | * @return mixed |
| 479 | 479 | */ |
| 480 | 480 | function auth_identifier_login($login, $password, $serveur = '') { |
| 481 | - $erreur = ''; |
|
| 482 | - foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 483 | - if ($auth = charger_fonction($methode, 'auth', true)) { |
|
| 484 | - $auteur = $auth($login, $password, $serveur); |
|
| 485 | - if (is_array($auteur) and count($auteur)) { |
|
| 486 | - spip_log("connexion de $login par methode $methode"); |
|
| 487 | - $auteur['auth'] = $methode; |
|
| 488 | - return $auteur; |
|
| 489 | - } elseif (is_string($auteur)) { |
|
| 490 | - $erreur .= "$auteur "; |
|
| 491 | - } |
|
| 492 | - } |
|
| 493 | - } |
|
| 494 | - |
|
| 495 | - return $erreur; |
|
| 481 | + $erreur = ''; |
|
| 482 | + foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 483 | + if ($auth = charger_fonction($methode, 'auth', true)) { |
|
| 484 | + $auteur = $auth($login, $password, $serveur); |
|
| 485 | + if (is_array($auteur) and count($auteur)) { |
|
| 486 | + spip_log("connexion de $login par methode $methode"); |
|
| 487 | + $auteur['auth'] = $methode; |
|
| 488 | + return $auteur; |
|
| 489 | + } elseif (is_string($auteur)) { |
|
| 490 | + $erreur .= "$auteur "; |
|
| 491 | + } |
|
| 492 | + } |
|
| 493 | + } |
|
| 494 | + |
|
| 495 | + return $erreur; |
|
| 496 | 496 | } |
| 497 | 497 | |
| 498 | 498 | /** |
@@ -506,8 +506,8 @@ discard block |
||
| 506 | 506 | * @return string |
| 507 | 507 | */ |
| 508 | 508 | function auth_url_retour_login($auth_methode, $login, $redirect = '', $serveur = '') { |
| 509 | - $securiser_action = charger_fonction('securiser_action', 'inc'); |
|
| 510 | - return $securiser_action('auth', "$auth_methode/$login", $redirect, true); |
|
| 509 | + $securiser_action = charger_fonction('securiser_action', 'inc'); |
|
| 510 | + return $securiser_action('auth', "$auth_methode/$login", $redirect, true); |
|
| 511 | 511 | } |
| 512 | 512 | |
| 513 | 513 | /** |
@@ -521,9 +521,9 @@ discard block |
||
| 521 | 521 | * @return mixed |
| 522 | 522 | */ |
| 523 | 523 | function auth_terminer_identifier_login($auth_methode, $login, $serveur = '') { |
| 524 | - $args = func_get_args(); |
|
| 525 | - $auteur = auth_administrer('terminer_identifier_login', $args); |
|
| 526 | - return $auteur; |
|
| 524 | + $args = func_get_args(); |
|
| 525 | + $auteur = auth_administrer('terminer_identifier_login', $args); |
|
| 526 | + return $auteur; |
|
| 527 | 527 | } |
| 528 | 528 | |
| 529 | 529 | /** |
@@ -533,29 +533,29 @@ discard block |
||
| 533 | 533 | * @return bool |
| 534 | 534 | */ |
| 535 | 535 | function auth_loger($auteur) { |
| 536 | - if (!is_array($auteur) or !count($auteur)) { |
|
| 537 | - return false; |
|
| 538 | - } |
|
| 539 | - |
|
| 540 | - // initialiser et poser le cookie de session |
|
| 541 | - unset($_COOKIE['spip_session']); |
|
| 542 | - if (auth_init_droits($auteur) === false) { |
|
| 543 | - return false; |
|
| 544 | - } |
|
| 545 | - |
|
| 546 | - // initialiser les prefs |
|
| 547 | - $p = $GLOBALS['visiteur_session']['prefs']; |
|
| 548 | - $p['cnx'] = (isset($auteur['cookie']) and $auteur['cookie'] == 'oui') ? 'perma' : ''; |
|
| 549 | - |
|
| 550 | - sql_updateq( |
|
| 551 | - 'spip_auteurs', |
|
| 552 | - ['prefs' => serialize($p)], |
|
| 553 | - 'id_auteur=' . intval($auteur['id_auteur']) |
|
| 554 | - ); |
|
| 555 | - |
|
| 556 | - // bloquer ici le visiteur qui tente d'abuser de ses droits |
|
| 557 | - verifier_visiteur(); |
|
| 558 | - return true; |
|
| 536 | + if (!is_array($auteur) or !count($auteur)) { |
|
| 537 | + return false; |
|
| 538 | + } |
|
| 539 | + |
|
| 540 | + // initialiser et poser le cookie de session |
|
| 541 | + unset($_COOKIE['spip_session']); |
|
| 542 | + if (auth_init_droits($auteur) === false) { |
|
| 543 | + return false; |
|
| 544 | + } |
|
| 545 | + |
|
| 546 | + // initialiser les prefs |
|
| 547 | + $p = $GLOBALS['visiteur_session']['prefs']; |
|
| 548 | + $p['cnx'] = (isset($auteur['cookie']) and $auteur['cookie'] == 'oui') ? 'perma' : ''; |
|
| 549 | + |
|
| 550 | + sql_updateq( |
|
| 551 | + 'spip_auteurs', |
|
| 552 | + ['prefs' => serialize($p)], |
|
| 553 | + 'id_auteur=' . intval($auteur['id_auteur']) |
|
| 554 | + ); |
|
| 555 | + |
|
| 556 | + // bloquer ici le visiteur qui tente d'abuser de ses droits |
|
| 557 | + verifier_visiteur(); |
|
| 558 | + return true; |
|
| 559 | 559 | } |
| 560 | 560 | |
| 561 | 561 | /** |
@@ -565,8 +565,8 @@ discard block |
||
| 565 | 565 | * return void |
| 566 | 566 | **/ |
| 567 | 567 | function auth_deloger() { |
| 568 | - $logout = charger_fonction('logout', 'action'); |
|
| 569 | - $logout(); |
|
| 568 | + $logout = charger_fonction('logout', 'action'); |
|
| 569 | + $logout(); |
|
| 570 | 570 | } |
| 571 | 571 | |
| 572 | 572 | /** |
@@ -580,8 +580,8 @@ discard block |
||
| 580 | 580 | * @return bool |
| 581 | 581 | */ |
| 582 | 582 | function auth_autoriser_modifier_login($auth_methode, $serveur = '') { |
| 583 | - $args = func_get_args(); |
|
| 584 | - return auth_administrer('autoriser_modifier_login', $args); |
|
| 583 | + $args = func_get_args(); |
|
| 584 | + return auth_administrer('autoriser_modifier_login', $args); |
|
| 585 | 585 | } |
| 586 | 586 | |
| 587 | 587 | /** |
@@ -596,8 +596,8 @@ discard block |
||
| 596 | 596 | * message d'erreur ou chaine vide si pas d'erreur |
| 597 | 597 | */ |
| 598 | 598 | function auth_verifier_login($auth_methode, $new_login, $id_auteur = 0, $serveur = '') { |
| 599 | - $args = func_get_args(); |
|
| 600 | - return auth_administrer('verifier_login', $args, ''); |
|
| 599 | + $args = func_get_args(); |
|
| 600 | + return auth_administrer('verifier_login', $args, ''); |
|
| 601 | 601 | } |
| 602 | 602 | |
| 603 | 603 | /** |
@@ -610,8 +610,8 @@ discard block |
||
| 610 | 610 | * @return bool |
| 611 | 611 | */ |
| 612 | 612 | function auth_modifier_login($auth_methode, $new_login, $id_auteur, $serveur = '') { |
| 613 | - $args = func_get_args(); |
|
| 614 | - return auth_administrer('modifier_login', $args); |
|
| 613 | + $args = func_get_args(); |
|
| 614 | + return auth_administrer('modifier_login', $args); |
|
| 615 | 615 | } |
| 616 | 616 | |
| 617 | 617 | /** |
@@ -626,8 +626,8 @@ discard block |
||
| 626 | 626 | * succès ou échec |
| 627 | 627 | */ |
| 628 | 628 | function auth_autoriser_modifier_pass($auth_methode, $serveur = '') { |
| 629 | - $args = func_get_args(); |
|
| 630 | - return auth_administrer('autoriser_modifier_pass', $args); |
|
| 629 | + $args = func_get_args(); |
|
| 630 | + return auth_administrer('autoriser_modifier_pass', $args); |
|
| 631 | 631 | } |
| 632 | 632 | |
| 633 | 633 | /** |
@@ -643,8 +643,8 @@ discard block |
||
| 643 | 643 | * message d'erreur ou chaine vide si pas d'erreur |
| 644 | 644 | */ |
| 645 | 645 | function auth_verifier_pass($auth_methode, $login, $new_pass, $id_auteur = 0, $serveur = '') { |
| 646 | - $args = func_get_args(); |
|
| 647 | - return auth_administrer('verifier_pass', $args, ''); |
|
| 646 | + $args = func_get_args(); |
|
| 647 | + return auth_administrer('verifier_pass', $args, ''); |
|
| 648 | 648 | } |
| 649 | 649 | |
| 650 | 650 | /** |
@@ -660,8 +660,8 @@ discard block |
||
| 660 | 660 | * succes ou echec |
| 661 | 661 | */ |
| 662 | 662 | function auth_modifier_pass($auth_methode, $login, $new_pass, $id_auteur, $serveur = '') { |
| 663 | - $args = func_get_args(); |
|
| 664 | - return auth_administrer('modifier_pass', $args); |
|
| 663 | + $args = func_get_args(); |
|
| 664 | + return auth_administrer('modifier_pass', $args); |
|
| 665 | 665 | } |
| 666 | 666 | |
| 667 | 667 | /** |
@@ -677,24 +677,24 @@ discard block |
||
| 677 | 677 | * @return void |
| 678 | 678 | */ |
| 679 | 679 | function auth_synchroniser_distant( |
| 680 | - $auth_methode = true, |
|
| 681 | - $id_auteur = 0, |
|
| 682 | - $champs = [], |
|
| 683 | - $options = [], |
|
| 684 | - $serveur = '' |
|
| 680 | + $auth_methode = true, |
|
| 681 | + $id_auteur = 0, |
|
| 682 | + $champs = [], |
|
| 683 | + $options = [], |
|
| 684 | + $serveur = '' |
|
| 685 | 685 | ) { |
| 686 | - $args = func_get_args(); |
|
| 687 | - if ($auth_methode === true or (isset($options['all']) and $options['all'] == true)) { |
|
| 688 | - $options['all'] = true; // ajouter une option all=>true pour chaque auth |
|
| 689 | - $args = [true, $id_auteur, $champs, $options, $serveur]; |
|
| 690 | - foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 691 | - array_shift($args); |
|
| 692 | - array_unshift($args, $methode); |
|
| 693 | - auth_administrer('synchroniser_distant', $args); |
|
| 694 | - } |
|
| 695 | - } else { |
|
| 696 | - auth_administrer('synchroniser_distant', $args); |
|
| 697 | - } |
|
| 686 | + $args = func_get_args(); |
|
| 687 | + if ($auth_methode === true or (isset($options['all']) and $options['all'] == true)) { |
|
| 688 | + $options['all'] = true; // ajouter une option all=>true pour chaque auth |
|
| 689 | + $args = [true, $id_auteur, $champs, $options, $serveur]; |
|
| 690 | + foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 691 | + array_shift($args); |
|
| 692 | + array_unshift($args, $methode); |
|
| 693 | + auth_administrer('synchroniser_distant', $args); |
|
| 694 | + } |
|
| 695 | + } else { |
|
| 696 | + auth_administrer('synchroniser_distant', $args); |
|
| 697 | + } |
|
| 698 | 698 | } |
| 699 | 699 | |
| 700 | 700 | |
@@ -707,45 +707,45 @@ discard block |
||
| 707 | 707 | * @return array|bool |
| 708 | 708 | */ |
| 709 | 709 | function lire_php_auth($login, $pw, $serveur = '') { |
| 710 | - if ( |
|
| 711 | - !$login |
|
| 712 | - or !$login = auth_retrouver_login($login, $serveur) |
|
| 713 | - ) { |
|
| 714 | - return false; |
|
| 715 | - } |
|
| 716 | - |
|
| 717 | - $row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login, $serveur, 'text'), '', '', '', '', $serveur); |
|
| 718 | - |
|
| 719 | - if (!$row) { |
|
| 720 | - if ( |
|
| 721 | - include_spip('inc/auth') |
|
| 722 | - and auth_ldap_connect($serveur) |
|
| 723 | - and $auth_ldap = charger_fonction('ldap', 'auth', true) |
|
| 724 | - ) { |
|
| 725 | - return $auth_ldap($login, $pw, $serveur, true); |
|
| 726 | - } |
|
| 727 | - |
|
| 728 | - return false; |
|
| 729 | - } |
|
| 730 | - // su pas de source definie |
|
| 731 | - // ou auth/xxx introuvable, utiliser 'spip' |
|
| 732 | - if ( |
|
| 733 | - !$auth_methode = $row['source'] |
|
| 734 | - or !$auth = charger_fonction($auth_methode, 'auth', true) |
|
| 735 | - ) { |
|
| 736 | - $auth = charger_fonction('spip', 'auth', true); |
|
| 737 | - } |
|
| 738 | - |
|
| 739 | - $auteur = ''; |
|
| 740 | - if ($auth) { |
|
| 741 | - $auteur = $auth($login, $pw, $serveur, true); |
|
| 742 | - } |
|
| 743 | - // verifier que ce n'est pas un message d'erreur |
|
| 744 | - if (is_array($auteur) and count($auteur)) { |
|
| 745 | - return $auteur; |
|
| 746 | - } |
|
| 747 | - |
|
| 748 | - return false; |
|
| 710 | + if ( |
|
| 711 | + !$login |
|
| 712 | + or !$login = auth_retrouver_login($login, $serveur) |
|
| 713 | + ) { |
|
| 714 | + return false; |
|
| 715 | + } |
|
| 716 | + |
|
| 717 | + $row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login, $serveur, 'text'), '', '', '', '', $serveur); |
|
| 718 | + |
|
| 719 | + if (!$row) { |
|
| 720 | + if ( |
|
| 721 | + include_spip('inc/auth') |
|
| 722 | + and auth_ldap_connect($serveur) |
|
| 723 | + and $auth_ldap = charger_fonction('ldap', 'auth', true) |
|
| 724 | + ) { |
|
| 725 | + return $auth_ldap($login, $pw, $serveur, true); |
|
| 726 | + } |
|
| 727 | + |
|
| 728 | + return false; |
|
| 729 | + } |
|
| 730 | + // su pas de source definie |
|
| 731 | + // ou auth/xxx introuvable, utiliser 'spip' |
|
| 732 | + if ( |
|
| 733 | + !$auth_methode = $row['source'] |
|
| 734 | + or !$auth = charger_fonction($auth_methode, 'auth', true) |
|
| 735 | + ) { |
|
| 736 | + $auth = charger_fonction('spip', 'auth', true); |
|
| 737 | + } |
|
| 738 | + |
|
| 739 | + $auteur = ''; |
|
| 740 | + if ($auth) { |
|
| 741 | + $auteur = $auth($login, $pw, $serveur, true); |
|
| 742 | + } |
|
| 743 | + // verifier que ce n'est pas un message d'erreur |
|
| 744 | + if (is_array($auteur) and count($auteur)) { |
|
| 745 | + return $auteur; |
|
| 746 | + } |
|
| 747 | + |
|
| 748 | + return false; |
|
| 749 | 749 | } |
| 750 | 750 | |
| 751 | 751 | /** |
@@ -761,21 +761,21 @@ discard block |
||
| 761 | 761 | * @param string $lien |
| 762 | 762 | */ |
| 763 | 763 | function ask_php_auth($pb, $raison, $retour = '', $url = '', $re = '', $lien = '') { |
| 764 | - @Header('WWW-Authenticate: Basic realm="espace prive"'); |
|
| 765 | - @Header('HTTP/1.0 401 Unauthorized'); |
|
| 766 | - $corps = ''; |
|
| 767 | - $public = generer_url_public(); |
|
| 768 | - $ecrire = generer_url_ecrire(); |
|
| 769 | - $retour = $retour ?: _T('icone_retour'); |
|
| 770 | - $corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] "; |
|
| 771 | - if ($url) { |
|
| 772 | - $corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]"; |
|
| 773 | - } |
|
| 774 | - |
|
| 775 | - if ($lien) { |
|
| 776 | - $corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]'; |
|
| 777 | - } |
|
| 778 | - include_spip('inc/minipres'); |
|
| 779 | - echo minipres($pb, $corps); |
|
| 780 | - exit; |
|
| 764 | + @Header('WWW-Authenticate: Basic realm="espace prive"'); |
|
| 765 | + @Header('HTTP/1.0 401 Unauthorized'); |
|
| 766 | + $corps = ''; |
|
| 767 | + $public = generer_url_public(); |
|
| 768 | + $ecrire = generer_url_ecrire(); |
|
| 769 | + $retour = $retour ?: _T('icone_retour'); |
|
| 770 | + $corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] "; |
|
| 771 | + if ($url) { |
|
| 772 | + $corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]"; |
|
| 773 | + } |
|
| 774 | + |
|
| 775 | + if ($lien) { |
|
| 776 | + $corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]'; |
|
| 777 | + } |
|
| 778 | + include_spip('inc/minipres'); |
|
| 779 | + echo minipres($pb, $corps); |
|
| 780 | + exit; |
|
| 781 | 781 | } |
@@ -59,7 +59,7 @@ discard block |
||
| 59 | 59 | } |
| 60 | 60 | |
| 61 | 61 | $n = intval(sql_errno()); |
| 62 | - spip_log("Erreur base de donnees $n " . sql_error()); |
|
| 62 | + spip_log("Erreur base de donnees $n ".sql_error()); |
|
| 63 | 63 | |
| 64 | 64 | return $n ?: 1; |
| 65 | 65 | } |
@@ -85,11 +85,11 @@ discard block |
||
| 85 | 85 | // erreur SQL a afficher |
| 86 | 86 | $raison = minipres( |
| 87 | 87 | _T('info_travaux_titre'), |
| 88 | - _T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>' |
|
| 88 | + _T('titre_probleme_technique').'<p><tt>'.sql_errno().' '.sql_error().'</tt></p>' |
|
| 89 | 89 | ); |
| 90 | 90 | } elseif (@$raison['statut']) { |
| 91 | 91 | // un simple visiteur n'a pas acces a l'espace prive |
| 92 | - spip_log('connexion refusee a ' . @$raison['id_auteur']); |
|
| 92 | + spip_log('connexion refusee a '.@$raison['id_auteur']); |
|
| 93 | 93 | $raison = minipres(_T('avis_erreur_connexion'), _T('avis_erreur_visiteur')); |
| 94 | 94 | } else { |
| 95 | 95 | // auteur en fin de droits ... |
@@ -179,8 +179,7 @@ discard block |
||
| 179 | 179 | $where = (is_numeric($id_auteur) |
| 180 | 180 | /*AND $id_auteur>0*/ // reprise lors des restaurations |
| 181 | 181 | ) ? |
| 182 | - "id_auteur=$id_auteur" : |
|
| 183 | - (!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text')); |
|
| 182 | + "id_auteur=$id_auteur" : (!strlen($GLOBALS['connect_login']) ? '' : 'login='.sql_quote($GLOBALS['connect_login'], '', 'text')); |
|
| 184 | 183 | |
| 185 | 184 | if (!$where) { |
| 186 | 185 | return ''; |
@@ -222,7 +221,7 @@ discard block |
||
| 222 | 221 | $GLOBALS['connect_login'] = $row['login']; |
| 223 | 222 | $GLOBALS['connect_statut'] = $row['statut']; |
| 224 | 223 | |
| 225 | - $GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row); |
|
| 224 | + $GLOBALS['visiteur_session'] = array_merge((array) $GLOBALS['visiteur_session'], $row); |
|
| 226 | 225 | |
| 227 | 226 | // au cas ou : ne pas memoriser les champs sensibles |
| 228 | 227 | unset($GLOBALS['visiteur_session']['pass']); |
@@ -295,7 +294,7 @@ discard block |
||
| 295 | 294 | * @return string |
| 296 | 295 | */ |
| 297 | 296 | function auth_a_loger() { |
| 298 | - $redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), true); |
|
| 297 | + $redirect = generer_url_public('login', 'url='.rawurlencode(self('&', true)), true); |
|
| 299 | 298 | |
| 300 | 299 | // un echec au "bonjour" (login initial) quand le statut est |
| 301 | 300 | // inconnu signale sans doute un probleme de cookies |
@@ -331,7 +330,7 @@ discard block |
||
| 331 | 330 | $date ??= date('Y-m-d H:i:s'); |
| 332 | 331 | |
| 333 | 332 | if (abs(strtotime($date) - $connect_quand) >= 60) { |
| 334 | - sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 333 | + sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur='.intval($row['id_auteur'])); |
|
| 335 | 334 | $row['en_ligne'] = $date; |
| 336 | 335 | } |
| 337 | 336 | |
@@ -440,7 +439,7 @@ discard block |
||
| 440 | 439 | if ( |
| 441 | 440 | !$login |
| 442 | 441 | or !$login_base = auth_retrouver_login($login, $serveur) |
| 443 | - or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur) |
|
| 442 | + or !$row = sql_fetsel('*', 'spip_auteurs', 'login='.sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur) |
|
| 444 | 443 | ) { |
| 445 | 444 | // generer de fausses infos, mais credibles, pour eviter une attaque |
| 446 | 445 | // https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691 |
@@ -550,7 +549,7 @@ discard block |
||
| 550 | 549 | sql_updateq( |
| 551 | 550 | 'spip_auteurs', |
| 552 | 551 | ['prefs' => serialize($p)], |
| 553 | - 'id_auteur=' . intval($auteur['id_auteur']) |
|
| 552 | + 'id_auteur='.intval($auteur['id_auteur']) |
|
| 554 | 553 | ); |
| 555 | 554 | |
| 556 | 555 | // bloquer ici le visiteur qui tente d'abuser de ses droits |
@@ -714,7 +713,7 @@ discard block |
||
| 714 | 713 | return false; |
| 715 | 714 | } |
| 716 | 715 | |
| 717 | - $row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login, $serveur, 'text'), '', '', '', '', $serveur); |
|
| 716 | + $row = sql_fetsel('*', 'spip_auteurs', 'login='.sql_quote($login, $serveur, 'text'), '', '', '', '', $serveur); |
|
| 718 | 717 | |
| 719 | 718 | if (!$row) { |
| 720 | 719 | if ( |
@@ -769,11 +768,11 @@ discard block |
||
| 769 | 768 | $retour = $retour ?: _T('icone_retour'); |
| 770 | 769 | $corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] "; |
| 771 | 770 | if ($url) { |
| 772 | - $corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]"; |
|
| 771 | + $corps .= "[<a href='".generer_url_action('cookie', "essai_auth_http=oui&$url")."'>$re</a>]"; |
|
| 773 | 772 | } |
| 774 | 773 | |
| 775 | 774 | if ($lien) { |
| 776 | - $corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]'; |
|
| 775 | + $corps .= " [<a href='$ecrire'>"._T('login_espace_prive').'</a>]'; |
|
| 777 | 776 | } |
| 778 | 777 | include_spip('inc/minipres'); |
| 779 | 778 | echo minipres($pb, $corps); |
@@ -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 | |
@@ -48,71 +48,71 @@ discard block |
||
| 48 | 48 | * Nom de la fonction, ou false. |
| 49 | 49 | */ |
| 50 | 50 | function charger_fonction($nom, $dossier = 'exec', $continue = false) { |
| 51 | - static $echecs = []; |
|
| 52 | - |
|
| 53 | - if (strlen($dossier) and substr($dossier, -1) != '/') { |
|
| 54 | - $dossier .= '/'; |
|
| 55 | - } |
|
| 56 | - $f = str_replace('/', '_', $dossier) . $nom; |
|
| 57 | - |
|
| 58 | - if (function_exists($f)) { |
|
| 59 | - return $f; |
|
| 60 | - } |
|
| 61 | - if (function_exists($g = $f . '_dist')) { |
|
| 62 | - return $g; |
|
| 63 | - } |
|
| 64 | - |
|
| 65 | - if (isset($echecs[$f])) { |
|
| 66 | - return $echecs[$f]; |
|
| 67 | - } |
|
| 68 | - // Sinon charger le fichier de declaration si plausible |
|
| 69 | - |
|
| 70 | - if (!preg_match(',^\w+$,', $f)) { |
|
| 71 | - if ($continue) { |
|
| 72 | - return false; |
|
| 73 | - } //appel interne, on passe |
|
| 74 | - include_spip('inc/minipres'); |
|
| 75 | - echo minipres(); |
|
| 76 | - exit; |
|
| 77 | - } |
|
| 78 | - |
|
| 79 | - // passer en minuscules (cf les balises de formulaires) |
|
| 80 | - // et inclure le fichier |
|
| 81 | - if ( |
|
| 82 | - !$inc = include_spip($dossier . ($d = strtolower($nom))) |
|
| 83 | - // si le fichier truc/machin/nom.php n'existe pas, |
|
| 84 | - // la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions |
|
| 85 | - and strlen(dirname($dossier)) and dirname($dossier) != '.' |
|
| 86 | - ) { |
|
| 87 | - include_spip(substr($dossier, 0, -1)); |
|
| 88 | - } |
|
| 89 | - if (function_exists($f)) { |
|
| 90 | - return $f; |
|
| 91 | - } |
|
| 92 | - if (function_exists($g)) { |
|
| 93 | - return $g; |
|
| 94 | - } |
|
| 95 | - |
|
| 96 | - if ($continue) { |
|
| 97 | - return $echecs[$f] = false; |
|
| 98 | - } |
|
| 99 | - |
|
| 100 | - // Echec : message d'erreur |
|
| 101 | - spip_log("fonction $nom ($f ou $g) indisponible" . |
|
| 102 | - ($inc ? '' : " (fichier $d absent de $dossier)")); |
|
| 103 | - |
|
| 104 | - include_spip('inc/minipres'); |
|
| 105 | - echo minipres( |
|
| 106 | - _T('forum_titre_erreur'), |
|
| 107 | - $inc ? |
|
| 108 | - _T('fonction_introuvable', ['fonction' => '<code>' . spip_htmlentities($f) . '</code>']) |
|
| 109 | - . '<br />' |
|
| 110 | - . _T('fonction_introuvable', ['fonction' => '<code>' . spip_htmlentities($g) . '</code>']) |
|
| 111 | - : |
|
| 112 | - _T('fichier_introuvable', ['fichier' => '<code>' . spip_htmlentities($d) . '</code>']), |
|
| 113 | - ['all_inline' => true,'status' => 404] |
|
| 114 | - ); |
|
| 115 | - exit; |
|
| 51 | + static $echecs = []; |
|
| 52 | + |
|
| 53 | + if (strlen($dossier) and substr($dossier, -1) != '/') { |
|
| 54 | + $dossier .= '/'; |
|
| 55 | + } |
|
| 56 | + $f = str_replace('/', '_', $dossier) . $nom; |
|
| 57 | + |
|
| 58 | + if (function_exists($f)) { |
|
| 59 | + return $f; |
|
| 60 | + } |
|
| 61 | + if (function_exists($g = $f . '_dist')) { |
|
| 62 | + return $g; |
|
| 63 | + } |
|
| 64 | + |
|
| 65 | + if (isset($echecs[$f])) { |
|
| 66 | + return $echecs[$f]; |
|
| 67 | + } |
|
| 68 | + // Sinon charger le fichier de declaration si plausible |
|
| 69 | + |
|
| 70 | + if (!preg_match(',^\w+$,', $f)) { |
|
| 71 | + if ($continue) { |
|
| 72 | + return false; |
|
| 73 | + } //appel interne, on passe |
|
| 74 | + include_spip('inc/minipres'); |
|
| 75 | + echo minipres(); |
|
| 76 | + exit; |
|
| 77 | + } |
|
| 78 | + |
|
| 79 | + // passer en minuscules (cf les balises de formulaires) |
|
| 80 | + // et inclure le fichier |
|
| 81 | + if ( |
|
| 82 | + !$inc = include_spip($dossier . ($d = strtolower($nom))) |
|
| 83 | + // si le fichier truc/machin/nom.php n'existe pas, |
|
| 84 | + // la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions |
|
| 85 | + and strlen(dirname($dossier)) and dirname($dossier) != '.' |
|
| 86 | + ) { |
|
| 87 | + include_spip(substr($dossier, 0, -1)); |
|
| 88 | + } |
|
| 89 | + if (function_exists($f)) { |
|
| 90 | + return $f; |
|
| 91 | + } |
|
| 92 | + if (function_exists($g)) { |
|
| 93 | + return $g; |
|
| 94 | + } |
|
| 95 | + |
|
| 96 | + if ($continue) { |
|
| 97 | + return $echecs[$f] = false; |
|
| 98 | + } |
|
| 99 | + |
|
| 100 | + // Echec : message d'erreur |
|
| 101 | + spip_log("fonction $nom ($f ou $g) indisponible" . |
|
| 102 | + ($inc ? '' : " (fichier $d absent de $dossier)")); |
|
| 103 | + |
|
| 104 | + include_spip('inc/minipres'); |
|
| 105 | + echo minipres( |
|
| 106 | + _T('forum_titre_erreur'), |
|
| 107 | + $inc ? |
|
| 108 | + _T('fonction_introuvable', ['fonction' => '<code>' . spip_htmlentities($f) . '</code>']) |
|
| 109 | + . '<br />' |
|
| 110 | + . _T('fonction_introuvable', ['fonction' => '<code>' . spip_htmlentities($g) . '</code>']) |
|
| 111 | + : |
|
| 112 | + _T('fichier_introuvable', ['fichier' => '<code>' . spip_htmlentities($d) . '</code>']), |
|
| 113 | + ['all_inline' => true,'status' => 404] |
|
| 114 | + ); |
|
| 115 | + exit; |
|
| 116 | 116 | } |
| 117 | 117 | |
| 118 | 118 | /** |
@@ -122,17 +122,17 @@ discard block |
||
| 122 | 122 | * @return bool |
| 123 | 123 | */ |
| 124 | 124 | function include_once_check($file) { |
| 125 | - if (file_exists($file)) { |
|
| 126 | - include_once $file; |
|
| 125 | + if (file_exists($file)) { |
|
| 126 | + include_once $file; |
|
| 127 | 127 | |
| 128 | - return true; |
|
| 129 | - } |
|
| 130 | - $crash = (isset($GLOBALS['meta']['message_crash_plugins']) ? unserialize($GLOBALS['meta']['message_crash_plugins']) : ''); |
|
| 131 | - $crash = ($crash ?: []); |
|
| 132 | - $crash[$file] = true; |
|
| 133 | - ecrire_meta('message_crash_plugins', serialize($crash)); |
|
| 128 | + return true; |
|
| 129 | + } |
|
| 130 | + $crash = (isset($GLOBALS['meta']['message_crash_plugins']) ? unserialize($GLOBALS['meta']['message_crash_plugins']) : ''); |
|
| 131 | + $crash = ($crash ?: []); |
|
| 132 | + $crash[$file] = true; |
|
| 133 | + ecrire_meta('message_crash_plugins', serialize($crash)); |
|
| 134 | 134 | |
| 135 | - return false; |
|
| 135 | + return false; |
|
| 136 | 136 | } |
| 137 | 137 | |
| 138 | 138 | |
@@ -156,7 +156,7 @@ discard block |
||
| 156 | 156 | * - string : chemin du fichier trouvé |
| 157 | 157 | **/ |
| 158 | 158 | function include_spip($f, $include = true) { |
| 159 | - return find_in_path($f . '.php', '', $include); |
|
| 159 | + return find_in_path($f . '.php', '', $include); |
|
| 160 | 160 | } |
| 161 | 161 | |
| 162 | 162 | /** |
@@ -176,7 +176,7 @@ discard block |
||
| 176 | 176 | * - string : chemin du fichier trouvé |
| 177 | 177 | **/ |
| 178 | 178 | function require_spip($f) { |
| 179 | - return find_in_path($f . '.php', '', 'required'); |
|
| 179 | + return find_in_path($f . '.php', '', 'required'); |
|
| 180 | 180 | } |
| 181 | 181 | |
| 182 | 182 | |
@@ -185,27 +185,27 @@ discard block |
||
| 185 | 185 | * quand on a besoin dans le PHP de filtres/fonctions qui y sont definis |
| 186 | 186 | */ |
| 187 | 187 | function include_fichiers_fonctions() { |
| 188 | - static $done = false; |
|
| 189 | - if (!$done) { |
|
| 190 | - include_spip('inc/lang'); |
|
| 191 | - |
|
| 192 | - // NB: mes_fonctions peut initialiser $dossier_squelettes (old-style) |
|
| 193 | - // donc il faut l'inclure "en globals" |
|
| 194 | - if ($f = find_in_path('mes_fonctions.php')) { |
|
| 195 | - global $dossier_squelettes; |
|
| 196 | - include_once(_ROOT_CWD . $f); |
|
| 197 | - } |
|
| 198 | - |
|
| 199 | - if (@is_readable(_CACHE_PLUGINS_FCT)) { |
|
| 200 | - // chargement optimise precompile |
|
| 201 | - include_once(_CACHE_PLUGINS_FCT); |
|
| 202 | - } |
|
| 203 | - if (test_espace_prive()) { |
|
| 204 | - include_spip('inc/filtres_ecrire'); |
|
| 205 | - } |
|
| 206 | - include_spip('public/fonctions'); // charger les fichiers fonctions associes aux criteres, balises.. |
|
| 207 | - $done = true; |
|
| 208 | - } |
|
| 188 | + static $done = false; |
|
| 189 | + if (!$done) { |
|
| 190 | + include_spip('inc/lang'); |
|
| 191 | + |
|
| 192 | + // NB: mes_fonctions peut initialiser $dossier_squelettes (old-style) |
|
| 193 | + // donc il faut l'inclure "en globals" |
|
| 194 | + if ($f = find_in_path('mes_fonctions.php')) { |
|
| 195 | + global $dossier_squelettes; |
|
| 196 | + include_once(_ROOT_CWD . $f); |
|
| 197 | + } |
|
| 198 | + |
|
| 199 | + if (@is_readable(_CACHE_PLUGINS_FCT)) { |
|
| 200 | + // chargement optimise precompile |
|
| 201 | + include_once(_CACHE_PLUGINS_FCT); |
|
| 202 | + } |
|
| 203 | + if (test_espace_prive()) { |
|
| 204 | + include_spip('inc/filtres_ecrire'); |
|
| 205 | + } |
|
| 206 | + include_spip('public/fonctions'); // charger les fichiers fonctions associes aux criteres, balises.. |
|
| 207 | + $done = true; |
|
| 208 | + } |
|
| 209 | 209 | } |
| 210 | 210 | |
| 211 | 211 | /** |
@@ -231,23 +231,23 @@ discard block |
||
| 231 | 231 | * Les paramètres du pipeline modifiés |
| 232 | 232 | **/ |
| 233 | 233 | function minipipe($fonc, &$val) { |
| 234 | - // fonction |
|
| 235 | - if (function_exists($fonc)) { |
|
| 236 | - $val = $fonc($val); |
|
| 237 | - } // Class::Methode |
|
| 238 | - else { |
|
| 239 | - if ( |
|
| 240 | - preg_match('/^(\w*)::(\w*)$/S', $fonc, $regs) |
|
| 241 | - and $methode = [$regs[1], $regs[2]] |
|
| 242 | - and is_callable($methode) |
|
| 243 | - ) { |
|
| 244 | - $val = $methode($val); |
|
| 245 | - } else { |
|
| 246 | - spip_log("Erreur - '$fonc' non definie !"); |
|
| 247 | - } |
|
| 248 | - } |
|
| 249 | - |
|
| 250 | - return $val; |
|
| 234 | + // fonction |
|
| 235 | + if (function_exists($fonc)) { |
|
| 236 | + $val = $fonc($val); |
|
| 237 | + } // Class::Methode |
|
| 238 | + else { |
|
| 239 | + if ( |
|
| 240 | + preg_match('/^(\w*)::(\w*)$/S', $fonc, $regs) |
|
| 241 | + and $methode = [$regs[1], $regs[2]] |
|
| 242 | + and is_callable($methode) |
|
| 243 | + ) { |
|
| 244 | + $val = $methode($val); |
|
| 245 | + } else { |
|
| 246 | + spip_log("Erreur - '$fonc' non definie !"); |
|
| 247 | + } |
|
| 248 | + } |
|
| 249 | + |
|
| 250 | + return $val; |
|
| 251 | 251 | } |
| 252 | 252 | |
| 253 | 253 | /** |
@@ -278,46 +278,46 @@ discard block |
||
| 278 | 278 | * Résultat |
| 279 | 279 | */ |
| 280 | 280 | function pipeline($action, $val = null) { |
| 281 | - static $charger; |
|
| 282 | - |
|
| 283 | - // chargement initial des fonctions mises en cache, ou generation du cache |
|
| 284 | - if (!$charger) { |
|
| 285 | - if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) { |
|
| 286 | - include_spip('inc/plugin'); |
|
| 287 | - // generer les fichiers php precompiles |
|
| 288 | - // de chargement des plugins et des pipelines |
|
| 289 | - actualise_plugins_actifs(); |
|
| 290 | - if (!($ok = @is_readable($charger))) { |
|
| 291 | - spip_log("fichier $charger pas cree"); |
|
| 292 | - } |
|
| 293 | - } |
|
| 294 | - |
|
| 295 | - if ($ok) { |
|
| 296 | - include_once $charger; |
|
| 297 | - } |
|
| 298 | - } |
|
| 299 | - |
|
| 300 | - // appliquer notre fonction si elle existe |
|
| 301 | - $fonc = 'execute_pipeline_' . strtolower($action); |
|
| 302 | - if (function_exists($fonc)) { |
|
| 303 | - $val = $fonc($val); |
|
| 304 | - } // plantage ? |
|
| 305 | - else { |
|
| 306 | - spip_log("fonction $fonc absente : pipeline desactive", _LOG_ERREUR); |
|
| 307 | - } |
|
| 308 | - |
|
| 309 | - // si le flux est une table avec 2 cle args&data |
|
| 310 | - // on ne ressort du pipe que les donnees dans 'data' |
|
| 311 | - // array_key_exists pour php 4.1.0 |
|
| 312 | - if ( |
|
| 313 | - is_array($val) |
|
| 314 | - and count($val) == 2 |
|
| 315 | - and (array_key_exists('data', $val)) |
|
| 316 | - ) { |
|
| 317 | - $val = $val['data']; |
|
| 318 | - } |
|
| 319 | - |
|
| 320 | - return $val; |
|
| 281 | + static $charger; |
|
| 282 | + |
|
| 283 | + // chargement initial des fonctions mises en cache, ou generation du cache |
|
| 284 | + if (!$charger) { |
|
| 285 | + if (!($ok = @is_readable($charger = _CACHE_PIPELINES))) { |
|
| 286 | + include_spip('inc/plugin'); |
|
| 287 | + // generer les fichiers php precompiles |
|
| 288 | + // de chargement des plugins et des pipelines |
|
| 289 | + actualise_plugins_actifs(); |
|
| 290 | + if (!($ok = @is_readable($charger))) { |
|
| 291 | + spip_log("fichier $charger pas cree"); |
|
| 292 | + } |
|
| 293 | + } |
|
| 294 | + |
|
| 295 | + if ($ok) { |
|
| 296 | + include_once $charger; |
|
| 297 | + } |
|
| 298 | + } |
|
| 299 | + |
|
| 300 | + // appliquer notre fonction si elle existe |
|
| 301 | + $fonc = 'execute_pipeline_' . strtolower($action); |
|
| 302 | + if (function_exists($fonc)) { |
|
| 303 | + $val = $fonc($val); |
|
| 304 | + } // plantage ? |
|
| 305 | + else { |
|
| 306 | + spip_log("fonction $fonc absente : pipeline desactive", _LOG_ERREUR); |
|
| 307 | + } |
|
| 308 | + |
|
| 309 | + // si le flux est une table avec 2 cle args&data |
|
| 310 | + // on ne ressort du pipe que les donnees dans 'data' |
|
| 311 | + // array_key_exists pour php 4.1.0 |
|
| 312 | + if ( |
|
| 313 | + is_array($val) |
|
| 314 | + and count($val) == 2 |
|
| 315 | + and (array_key_exists('data', $val)) |
|
| 316 | + ) { |
|
| 317 | + $val = $val['data']; |
|
| 318 | + } |
|
| 319 | + |
|
| 320 | + return $val; |
|
| 321 | 321 | } |
| 322 | 322 | |
| 323 | 323 | /** |
@@ -361,38 +361,38 @@ discard block |
||
| 361 | 361 | * paramètre est planté pour cause de compatibilité ascendante. |
| 362 | 362 | */ |
| 363 | 363 | function spip_log($message = null, $name = null) { |
| 364 | - static $pre = []; |
|
| 365 | - static $log; |
|
| 366 | - preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string)$name, $regs); |
|
| 367 | - if (!isset($regs[1]) or !$logname = $regs[1]) { |
|
| 368 | - $logname = null; |
|
| 369 | - } |
|
| 370 | - if (!isset($regs[2])) { |
|
| 371 | - $niveau = _LOG_INFO; |
|
| 372 | - } |
|
| 373 | - else { |
|
| 374 | - $niveau = intval($regs[2]); |
|
| 375 | - } |
|
| 376 | - |
|
| 377 | - if ($niveau <= (defined('_LOG_FILTRE_GRAVITE') ? _LOG_FILTRE_GRAVITE : _LOG_INFO_IMPORTANTE)) { |
|
| 378 | - if (!$pre) { |
|
| 379 | - $pre = [ |
|
| 380 | - _LOG_HS => 'HS:', |
|
| 381 | - _LOG_ALERTE_ROUGE => 'ALERTE:', |
|
| 382 | - _LOG_CRITIQUE => 'CRITIQUE:', |
|
| 383 | - _LOG_ERREUR => 'ERREUR:', |
|
| 384 | - _LOG_AVERTISSEMENT => 'WARNING:', |
|
| 385 | - _LOG_INFO_IMPORTANTE => '!INFO:', |
|
| 386 | - _LOG_INFO => 'info:', |
|
| 387 | - _LOG_DEBUG => 'debug:' |
|
| 388 | - ]; |
|
| 389 | - $log = charger_fonction('log', 'inc'); |
|
| 390 | - } |
|
| 391 | - if (!is_string($message)) { |
|
| 392 | - $message = print_r($message, true); |
|
| 393 | - } |
|
| 394 | - $log($pre[$niveau] . ' ' . $message, $logname); |
|
| 395 | - } |
|
| 364 | + static $pre = []; |
|
| 365 | + static $log; |
|
| 366 | + preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string)$name, $regs); |
|
| 367 | + if (!isset($regs[1]) or !$logname = $regs[1]) { |
|
| 368 | + $logname = null; |
|
| 369 | + } |
|
| 370 | + if (!isset($regs[2])) { |
|
| 371 | + $niveau = _LOG_INFO; |
|
| 372 | + } |
|
| 373 | + else { |
|
| 374 | + $niveau = intval($regs[2]); |
|
| 375 | + } |
|
| 376 | + |
|
| 377 | + if ($niveau <= (defined('_LOG_FILTRE_GRAVITE') ? _LOG_FILTRE_GRAVITE : _LOG_INFO_IMPORTANTE)) { |
|
| 378 | + if (!$pre) { |
|
| 379 | + $pre = [ |
|
| 380 | + _LOG_HS => 'HS:', |
|
| 381 | + _LOG_ALERTE_ROUGE => 'ALERTE:', |
|
| 382 | + _LOG_CRITIQUE => 'CRITIQUE:', |
|
| 383 | + _LOG_ERREUR => 'ERREUR:', |
|
| 384 | + _LOG_AVERTISSEMENT => 'WARNING:', |
|
| 385 | + _LOG_INFO_IMPORTANTE => '!INFO:', |
|
| 386 | + _LOG_INFO => 'info:', |
|
| 387 | + _LOG_DEBUG => 'debug:' |
|
| 388 | + ]; |
|
| 389 | + $log = charger_fonction('log', 'inc'); |
|
| 390 | + } |
|
| 391 | + if (!is_string($message)) { |
|
| 392 | + $message = print_r($message, true); |
|
| 393 | + } |
|
| 394 | + $log($pre[$niveau] . ' ' . $message, $logname); |
|
| 395 | + } |
|
| 396 | 396 | } |
| 397 | 397 | |
| 398 | 398 | /** |
@@ -403,8 +403,8 @@ discard block |
||
| 403 | 403 | * @param array $opt Tableau d'options |
| 404 | 404 | **/ |
| 405 | 405 | function journal($phrase, $opt = []) { |
| 406 | - $journal = charger_fonction('journal', 'inc'); |
|
| 407 | - $journal($phrase, $opt); |
|
| 406 | + $journal = charger_fonction('journal', 'inc'); |
|
| 407 | + $journal($phrase, $opt); |
|
| 408 | 408 | } |
| 409 | 409 | |
| 410 | 410 | |
@@ -423,37 +423,37 @@ discard block |
||
| 423 | 423 | **/ |
| 424 | 424 | function _request($var, $c = false) { |
| 425 | 425 | |
| 426 | - if (is_array($c)) { |
|
| 427 | - return $c[$var] ?? null; |
|
| 428 | - } |
|
| 429 | - |
|
| 430 | - if (isset($_GET[$var])) { |
|
| 431 | - $a = $_GET[$var]; |
|
| 432 | - } elseif (isset($_POST[$var])) { |
|
| 433 | - $a = $_POST[$var]; |
|
| 434 | - } else { |
|
| 435 | - return null; |
|
| 436 | - } |
|
| 437 | - |
|
| 438 | - // Si on est en ajax et en POST tout a ete encode |
|
| 439 | - // via encodeURIComponent, il faut donc repasser |
|
| 440 | - // dans le charset local... |
|
| 441 | - if ( |
|
| 442 | - defined('_AJAX') |
|
| 443 | - and _AJAX |
|
| 444 | - and isset($GLOBALS['meta']['charset']) |
|
| 445 | - and $GLOBALS['meta']['charset'] != 'utf-8' |
|
| 446 | - and is_string($a) |
|
| 447 | - // check rapide mais pas fiable |
|
| 448 | - and preg_match(',[\x80-\xFF],', $a) |
|
| 449 | - // check fiable |
|
| 450 | - and include_spip('inc/charsets') |
|
| 451 | - and is_utf8($a) |
|
| 452 | - ) { |
|
| 453 | - return importer_charset($a, 'utf-8'); |
|
| 454 | - } |
|
| 455 | - |
|
| 456 | - return $a; |
|
| 426 | + if (is_array($c)) { |
|
| 427 | + return $c[$var] ?? null; |
|
| 428 | + } |
|
| 429 | + |
|
| 430 | + if (isset($_GET[$var])) { |
|
| 431 | + $a = $_GET[$var]; |
|
| 432 | + } elseif (isset($_POST[$var])) { |
|
| 433 | + $a = $_POST[$var]; |
|
| 434 | + } else { |
|
| 435 | + return null; |
|
| 436 | + } |
|
| 437 | + |
|
| 438 | + // Si on est en ajax et en POST tout a ete encode |
|
| 439 | + // via encodeURIComponent, il faut donc repasser |
|
| 440 | + // dans le charset local... |
|
| 441 | + if ( |
|
| 442 | + defined('_AJAX') |
|
| 443 | + and _AJAX |
|
| 444 | + and isset($GLOBALS['meta']['charset']) |
|
| 445 | + and $GLOBALS['meta']['charset'] != 'utf-8' |
|
| 446 | + and is_string($a) |
|
| 447 | + // check rapide mais pas fiable |
|
| 448 | + and preg_match(',[\x80-\xFF],', $a) |
|
| 449 | + // check fiable |
|
| 450 | + and include_spip('inc/charsets') |
|
| 451 | + and is_utf8($a) |
|
| 452 | + ) { |
|
| 453 | + return importer_charset($a, 'utf-8'); |
|
| 454 | + } |
|
| 455 | + |
|
| 456 | + return $a; |
|
| 457 | 457 | } |
| 458 | 458 | |
| 459 | 459 | |
@@ -471,22 +471,22 @@ discard block |
||
| 471 | 471 | * - false sinon |
| 472 | 472 | **/ |
| 473 | 473 | function set_request($var, $val = null, $c = false) { |
| 474 | - if (is_array($c)) { |
|
| 475 | - unset($c[$var]); |
|
| 476 | - if ($val !== null) { |
|
| 477 | - $c[$var] = $val; |
|
| 478 | - } |
|
| 474 | + if (is_array($c)) { |
|
| 475 | + unset($c[$var]); |
|
| 476 | + if ($val !== null) { |
|
| 477 | + $c[$var] = $val; |
|
| 478 | + } |
|
| 479 | 479 | |
| 480 | - return $c; |
|
| 481 | - } |
|
| 480 | + return $c; |
|
| 481 | + } |
|
| 482 | 482 | |
| 483 | - unset($_GET[$var]); |
|
| 484 | - unset($_POST[$var]); |
|
| 485 | - if ($val !== null) { |
|
| 486 | - $_GET[$var] = $val; |
|
| 487 | - } |
|
| 483 | + unset($_GET[$var]); |
|
| 484 | + unset($_POST[$var]); |
|
| 485 | + if ($val !== null) { |
|
| 486 | + $_GET[$var] = $val; |
|
| 487 | + } |
|
| 488 | 488 | |
| 489 | - return false; # n'affecte pas $c |
|
| 489 | + return false; # n'affecte pas $c |
|
| 490 | 490 | } |
| 491 | 491 | |
| 492 | 492 | /** |
@@ -506,25 +506,25 @@ discard block |
||
| 506 | 506 | * @return array|mixed|string |
| 507 | 507 | */ |
| 508 | 508 | function spip_sanitize_from_request($value, $key, $sanitize_function = 'entites_html') { |
| 509 | - if (is_array($value)) { |
|
| 510 | - if ($key == '*') { |
|
| 511 | - $key = array_keys($value); |
|
| 512 | - } |
|
| 513 | - if (!is_array($key)) { |
|
| 514 | - $key = [$key]; |
|
| 515 | - } |
|
| 516 | - foreach ($key as $k) { |
|
| 517 | - if (!empty($value[$k])) { |
|
| 518 | - $value[$k] = spip_sanitize_from_request($value[$k], $k, $sanitize_function); |
|
| 519 | - } |
|
| 520 | - } |
|
| 521 | - return $value; |
|
| 522 | - } |
|
| 523 | - // si la valeur vient des GET ou POST on la sanitize |
|
| 524 | - if (!empty($value) and $value == _request($key)) { |
|
| 525 | - $value = $sanitize_function($value); |
|
| 526 | - } |
|
| 527 | - return $value; |
|
| 509 | + if (is_array($value)) { |
|
| 510 | + if ($key == '*') { |
|
| 511 | + $key = array_keys($value); |
|
| 512 | + } |
|
| 513 | + if (!is_array($key)) { |
|
| 514 | + $key = [$key]; |
|
| 515 | + } |
|
| 516 | + foreach ($key as $k) { |
|
| 517 | + if (!empty($value[$k])) { |
|
| 518 | + $value[$k] = spip_sanitize_from_request($value[$k], $k, $sanitize_function); |
|
| 519 | + } |
|
| 520 | + } |
|
| 521 | + return $value; |
|
| 522 | + } |
|
| 523 | + // si la valeur vient des GET ou POST on la sanitize |
|
| 524 | + if (!empty($value) and $value == _request($key)) { |
|
| 525 | + $value = $sanitize_function($value); |
|
| 526 | + } |
|
| 527 | + return $value; |
|
| 528 | 528 | } |
| 529 | 529 | |
| 530 | 530 | /** |
@@ -532,23 +532,22 @@ discard block |
||
| 532 | 532 | * |
| 533 | 533 | * On est sur le web, on exclut certains protocoles, |
| 534 | 534 | * notamment 'file://', 'php://' et d'autres… |
| 535 | - |
|
| 536 | 535 | * @param string $url |
| 537 | 536 | * @return bool |
| 538 | 537 | */ |
| 539 | 538 | function tester_url_absolue($url) { |
| 540 | - $url = trim($url ?? ''); |
|
| 541 | - if ($url && preg_match(';^([a-z]{3,7}:)?//;Uims', $url, $m)) { |
|
| 542 | - if ( |
|
| 543 | - isset($m[1]) |
|
| 544 | - and $p = strtolower(rtrim($m[1], ':')) |
|
| 545 | - and in_array($p, ['file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip']) |
|
| 546 | - ) { |
|
| 547 | - return false; |
|
| 548 | - } |
|
| 549 | - return true; |
|
| 550 | - } |
|
| 551 | - return false; |
|
| 539 | + $url = trim($url ?? ''); |
|
| 540 | + if ($url && preg_match(';^([a-z]{3,7}:)?//;Uims', $url, $m)) { |
|
| 541 | + if ( |
|
| 542 | + isset($m[1]) |
|
| 543 | + and $p = strtolower(rtrim($m[1], ':')) |
|
| 544 | + and in_array($p, ['file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip']) |
|
| 545 | + ) { |
|
| 546 | + return false; |
|
| 547 | + } |
|
| 548 | + return true; |
|
| 549 | + } |
|
| 550 | + return false; |
|
| 552 | 551 | } |
| 553 | 552 | |
| 554 | 553 | /** |
@@ -570,95 +569,95 @@ discard block |
||
| 570 | 569 | * @return string URL |
| 571 | 570 | */ |
| 572 | 571 | function parametre_url($url, $c, $v = null, $sep = '&') { |
| 573 | - // requete erronnee : plusieurs variable dans $c et aucun $v |
|
| 574 | - if (strpos($c, '|') !== false and is_null($v)) { |
|
| 575 | - return null; |
|
| 576 | - } |
|
| 577 | - |
|
| 578 | - // lever l'#ancre |
|
| 579 | - if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) { |
|
| 580 | - $url = $r[1]; |
|
| 581 | - $ancre = $r[2]; |
|
| 582 | - } else { |
|
| 583 | - $ancre = ''; |
|
| 584 | - } |
|
| 585 | - |
|
| 586 | - // eclater |
|
| 587 | - $url = preg_split(',[?]|&|&,', $url); |
|
| 588 | - |
|
| 589 | - // recuperer la base |
|
| 590 | - $a = array_shift($url); |
|
| 591 | - if (!$a) { |
|
| 592 | - $a = './'; |
|
| 593 | - } |
|
| 594 | - |
|
| 595 | - $regexp = ',^(' . str_replace('[]', '\[\]', $c) . '[[]?[]]?)(=.*)?$,'; |
|
| 596 | - $ajouts = array_flip(explode('|', $c)); |
|
| 597 | - $u = is_array($v) ? $v : rawurlencode((string) $v); |
|
| 598 | - $testv = (is_array($v) ? count($v) : strlen((string) $v)); |
|
| 599 | - $v_read = null; |
|
| 600 | - // lire les variables et agir |
|
| 601 | - foreach ($url as $n => $val) { |
|
| 602 | - if (preg_match($regexp, urldecode($val), $r)) { |
|
| 603 | - $r = array_pad($r, 3, null); |
|
| 604 | - if ($v === null) { |
|
| 605 | - // c'est un tableau, on memorise les valeurs |
|
| 606 | - if (substr($r[1], -2) == '[]') { |
|
| 607 | - if (!$v_read) { |
|
| 608 | - $v_read = []; |
|
| 609 | - } |
|
| 610 | - $v_read[] = $r[2] ? substr($r[2], 1) : ''; |
|
| 611 | - } // c'est un scalaire, on retourne direct |
|
| 612 | - else { |
|
| 613 | - return $r[2] ? substr($r[2], 1) : ''; |
|
| 614 | - } |
|
| 615 | - } // suppression |
|
| 616 | - elseif (!$testv) { |
|
| 617 | - unset($url[$n]); |
|
| 618 | - } |
|
| 619 | - // Ajout. Pour une variable, remplacer au meme endroit, |
|
| 620 | - // pour un tableau ce sera fait dans la prochaine boucle |
|
| 621 | - elseif (substr($r[1], -2) != '[]') { |
|
| 622 | - $url[$n] = $r[1] . '=' . $u; |
|
| 623 | - unset($ajouts[$r[1]]); |
|
| 624 | - } |
|
| 625 | - // Pour les tableaux on laisse tomber les valeurs de |
|
| 626 | - // départ, on remplira à l'étape suivante |
|
| 627 | - else { |
|
| 628 | - unset($url[$n]); |
|
| 629 | - } |
|
| 630 | - } |
|
| 631 | - } |
|
| 632 | - |
|
| 633 | - // traiter les parametres pas encore trouves |
|
| 634 | - if ( |
|
| 635 | - $v === null |
|
| 636 | - and $args = func_get_args() |
|
| 637 | - and count($args) == 2 |
|
| 638 | - ) { |
|
| 639 | - return $v_read; // rien trouve ou un tableau |
|
| 640 | - } elseif ($testv) { |
|
| 641 | - foreach ($ajouts as $k => $n) { |
|
| 642 | - if (!is_array($v)) { |
|
| 643 | - $url[] = $k . '=' . $u; |
|
| 644 | - } else { |
|
| 645 | - $id = (substr($k, -2) == '[]') ? $k : ($k . '[]'); |
|
| 646 | - foreach ($v as $w) { |
|
| 647 | - $url[] = $id . '=' . (is_array($w) ? 'Array' : rawurlencode($w)); |
|
| 648 | - } |
|
| 649 | - } |
|
| 650 | - } |
|
| 651 | - } |
|
| 652 | - |
|
| 653 | - // eliminer les vides |
|
| 654 | - $url = array_filter($url); |
|
| 655 | - |
|
| 656 | - // recomposer l'adresse |
|
| 657 | - if ($url) { |
|
| 658 | - $a .= '?' . join($sep, $url); |
|
| 659 | - } |
|
| 660 | - |
|
| 661 | - return $a . $ancre; |
|
| 572 | + // requete erronnee : plusieurs variable dans $c et aucun $v |
|
| 573 | + if (strpos($c, '|') !== false and is_null($v)) { |
|
| 574 | + return null; |
|
| 575 | + } |
|
| 576 | + |
|
| 577 | + // lever l'#ancre |
|
| 578 | + if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) { |
|
| 579 | + $url = $r[1]; |
|
| 580 | + $ancre = $r[2]; |
|
| 581 | + } else { |
|
| 582 | + $ancre = ''; |
|
| 583 | + } |
|
| 584 | + |
|
| 585 | + // eclater |
|
| 586 | + $url = preg_split(',[?]|&|&,', $url); |
|
| 587 | + |
|
| 588 | + // recuperer la base |
|
| 589 | + $a = array_shift($url); |
|
| 590 | + if (!$a) { |
|
| 591 | + $a = './'; |
|
| 592 | + } |
|
| 593 | + |
|
| 594 | + $regexp = ',^(' . str_replace('[]', '\[\]', $c) . '[[]?[]]?)(=.*)?$,'; |
|
| 595 | + $ajouts = array_flip(explode('|', $c)); |
|
| 596 | + $u = is_array($v) ? $v : rawurlencode((string) $v); |
|
| 597 | + $testv = (is_array($v) ? count($v) : strlen((string) $v)); |
|
| 598 | + $v_read = null; |
|
| 599 | + // lire les variables et agir |
|
| 600 | + foreach ($url as $n => $val) { |
|
| 601 | + if (preg_match($regexp, urldecode($val), $r)) { |
|
| 602 | + $r = array_pad($r, 3, null); |
|
| 603 | + if ($v === null) { |
|
| 604 | + // c'est un tableau, on memorise les valeurs |
|
| 605 | + if (substr($r[1], -2) == '[]') { |
|
| 606 | + if (!$v_read) { |
|
| 607 | + $v_read = []; |
|
| 608 | + } |
|
| 609 | + $v_read[] = $r[2] ? substr($r[2], 1) : ''; |
|
| 610 | + } // c'est un scalaire, on retourne direct |
|
| 611 | + else { |
|
| 612 | + return $r[2] ? substr($r[2], 1) : ''; |
|
| 613 | + } |
|
| 614 | + } // suppression |
|
| 615 | + elseif (!$testv) { |
|
| 616 | + unset($url[$n]); |
|
| 617 | + } |
|
| 618 | + // Ajout. Pour une variable, remplacer au meme endroit, |
|
| 619 | + // pour un tableau ce sera fait dans la prochaine boucle |
|
| 620 | + elseif (substr($r[1], -2) != '[]') { |
|
| 621 | + $url[$n] = $r[1] . '=' . $u; |
|
| 622 | + unset($ajouts[$r[1]]); |
|
| 623 | + } |
|
| 624 | + // Pour les tableaux on laisse tomber les valeurs de |
|
| 625 | + // départ, on remplira à l'étape suivante |
|
| 626 | + else { |
|
| 627 | + unset($url[$n]); |
|
| 628 | + } |
|
| 629 | + } |
|
| 630 | + } |
|
| 631 | + |
|
| 632 | + // traiter les parametres pas encore trouves |
|
| 633 | + if ( |
|
| 634 | + $v === null |
|
| 635 | + and $args = func_get_args() |
|
| 636 | + and count($args) == 2 |
|
| 637 | + ) { |
|
| 638 | + return $v_read; // rien trouve ou un tableau |
|
| 639 | + } elseif ($testv) { |
|
| 640 | + foreach ($ajouts as $k => $n) { |
|
| 641 | + if (!is_array($v)) { |
|
| 642 | + $url[] = $k . '=' . $u; |
|
| 643 | + } else { |
|
| 644 | + $id = (substr($k, -2) == '[]') ? $k : ($k . '[]'); |
|
| 645 | + foreach ($v as $w) { |
|
| 646 | + $url[] = $id . '=' . (is_array($w) ? 'Array' : rawurlencode($w)); |
|
| 647 | + } |
|
| 648 | + } |
|
| 649 | + } |
|
| 650 | + } |
|
| 651 | + |
|
| 652 | + // eliminer les vides |
|
| 653 | + $url = array_filter($url); |
|
| 654 | + |
|
| 655 | + // recomposer l'adresse |
|
| 656 | + if ($url) { |
|
| 657 | + $a .= '?' . join($sep, $url); |
|
| 658 | + } |
|
| 659 | + |
|
| 660 | + return $a . $ancre; |
|
| 662 | 661 | } |
| 663 | 662 | |
| 664 | 663 | /** |
@@ -676,21 +675,21 @@ discard block |
||
| 676 | 675 | * @return string |
| 677 | 676 | */ |
| 678 | 677 | function ancre_url($url, $ancre) { |
| 679 | - // lever l'#ancre |
|
| 680 | - if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) { |
|
| 681 | - $url = $r[1]; |
|
| 682 | - } |
|
| 683 | - if (preg_match('/[^-_a-zA-Z0-9]+/S', $ancre)) { |
|
| 684 | - if (!function_exists('translitteration')) { |
|
| 685 | - include_spip('inc/charsets'); |
|
| 686 | - } |
|
| 687 | - $ancre = preg_replace( |
|
| 688 | - ['/^[^-_a-zA-Z0-9]+/', '/[^-_a-zA-Z0-9]/'], |
|
| 689 | - ['', '-'], |
|
| 690 | - translitteration($ancre) |
|
| 691 | - ); |
|
| 692 | - } |
|
| 693 | - return $url . (strlen($ancre) ? '#' . $ancre : ''); |
|
| 678 | + // lever l'#ancre |
|
| 679 | + if (preg_match(',^([^#]*)(#.*)$,', $url, $r)) { |
|
| 680 | + $url = $r[1]; |
|
| 681 | + } |
|
| 682 | + if (preg_match('/[^-_a-zA-Z0-9]+/S', $ancre)) { |
|
| 683 | + if (!function_exists('translitteration')) { |
|
| 684 | + include_spip('inc/charsets'); |
|
| 685 | + } |
|
| 686 | + $ancre = preg_replace( |
|
| 687 | + ['/^[^-_a-zA-Z0-9]+/', '/[^-_a-zA-Z0-9]/'], |
|
| 688 | + ['', '-'], |
|
| 689 | + translitteration($ancre) |
|
| 690 | + ); |
|
| 691 | + } |
|
| 692 | + return $url . (strlen($ancre) ? '#' . $ancre : ''); |
|
| 694 | 693 | } |
| 695 | 694 | |
| 696 | 695 | /** |
@@ -700,16 +699,16 @@ discard block |
||
| 700 | 699 | * @return string |
| 701 | 700 | */ |
| 702 | 701 | function nettoyer_uri($reset = null) { |
| 703 | - static $done = false; |
|
| 704 | - static $propre = ''; |
|
| 705 | - if (!is_null($reset)) { |
|
| 706 | - return $propre = $reset; |
|
| 707 | - } |
|
| 708 | - if ($done) { |
|
| 709 | - return $propre; |
|
| 710 | - } |
|
| 711 | - $done = true; |
|
| 712 | - return $propre = nettoyer_uri_var($GLOBALS['REQUEST_URI']); |
|
| 702 | + static $done = false; |
|
| 703 | + static $propre = ''; |
|
| 704 | + if (!is_null($reset)) { |
|
| 705 | + return $propre = $reset; |
|
| 706 | + } |
|
| 707 | + if ($done) { |
|
| 708 | + return $propre; |
|
| 709 | + } |
|
| 710 | + $done = true; |
|
| 711 | + return $propre = nettoyer_uri_var($GLOBALS['REQUEST_URI']); |
|
| 713 | 712 | } |
| 714 | 713 | |
| 715 | 714 | /** |
@@ -721,16 +720,16 @@ discard block |
||
| 721 | 720 | * @return string |
| 722 | 721 | */ |
| 723 | 722 | function nettoyer_uri_var($request_uri) { |
| 724 | - $uri1 = $request_uri; |
|
| 725 | - do { |
|
| 726 | - $uri = $uri1; |
|
| 727 | - $uri1 = preg_replace( |
|
| 728 | - ',([?&])(var_[^=&]*|PHPSESSID|fbclid|utm_[^=&]*)=[^&]*(&|$),i', |
|
| 729 | - '\1', |
|
| 730 | - $uri |
|
| 731 | - ); |
|
| 732 | - } while ($uri <> $uri1); |
|
| 733 | - return preg_replace(',[?&]$,', '', $uri1); |
|
| 723 | + $uri1 = $request_uri; |
|
| 724 | + do { |
|
| 725 | + $uri = $uri1; |
|
| 726 | + $uri1 = preg_replace( |
|
| 727 | + ',([?&])(var_[^=&]*|PHPSESSID|fbclid|utm_[^=&]*)=[^&]*(&|$),i', |
|
| 728 | + '\1', |
|
| 729 | + $uri |
|
| 730 | + ); |
|
| 731 | + } while ($uri <> $uri1); |
|
| 732 | + return preg_replace(',[?&]$,', '', $uri1); |
|
| 734 | 733 | } |
| 735 | 734 | |
| 736 | 735 | |
@@ -744,48 +743,48 @@ discard block |
||
| 744 | 743 | * URL vers soi-même |
| 745 | 744 | **/ |
| 746 | 745 | function self($amp = '&', $root = false) { |
| 747 | - $url = nettoyer_uri(); |
|
| 748 | - if ( |
|
| 749 | - !$root |
|
| 750 | - and ( |
|
| 751 | - // si pas de profondeur on peut tronquer |
|
| 752 | - $GLOBALS['profondeur_url'] < (_DIR_RESTREINT ? 1 : 2) |
|
| 753 | - // sinon c'est OK si _SET_HTML_BASE a ete force a false |
|
| 754 | - or (defined('_SET_HTML_BASE') and !_SET_HTML_BASE)) |
|
| 755 | - ) { |
|
| 756 | - $url = preg_replace(',^[^?]*/,', '', $url); |
|
| 757 | - } |
|
| 758 | - // ajouter le cas echeant les variables _POST['id_...'] |
|
| 759 | - foreach ($_POST as $v => $c) { |
|
| 760 | - if (substr($v, 0, 3) == 'id_') { |
|
| 761 | - $url = parametre_url($url, $v, $c, '&'); |
|
| 762 | - } |
|
| 763 | - } |
|
| 764 | - |
|
| 765 | - // supprimer les variables sans interet |
|
| 766 | - if (test_espace_prive()) { |
|
| 767 | - $url = preg_replace(',([?&])(' |
|
| 768 | - . 'lang|show_docs|' |
|
| 769 | - . 'changer_lang|var_lang|action)=[^&]*,i', '\1', $url); |
|
| 770 | - $url = preg_replace(',([?&])[&]+,', '\1', $url); |
|
| 771 | - $url = preg_replace(',[&]$,', '\1', $url); |
|
| 772 | - } |
|
| 773 | - |
|
| 774 | - // eviter les hacks |
|
| 775 | - include_spip('inc/filtres_mini'); |
|
| 776 | - $url = spip_htmlspecialchars($url); |
|
| 777 | - |
|
| 778 | - $url = str_replace(["'", '"', '<', '[', ']', ':'], ['%27', '%22', '%3C', '%5B', '%5D', '%3A'], $url); |
|
| 779 | - |
|
| 780 | - // & ? |
|
| 781 | - if ($amp != '&') { |
|
| 782 | - $url = str_replace('&', $amp, $url); |
|
| 783 | - } |
|
| 784 | - |
|
| 785 | - // Si ca demarre par ? ou vide, donner './' |
|
| 786 | - $url = preg_replace(',^([?].*)?$,', './\1', $url); |
|
| 787 | - |
|
| 788 | - return $url; |
|
| 746 | + $url = nettoyer_uri(); |
|
| 747 | + if ( |
|
| 748 | + !$root |
|
| 749 | + and ( |
|
| 750 | + // si pas de profondeur on peut tronquer |
|
| 751 | + $GLOBALS['profondeur_url'] < (_DIR_RESTREINT ? 1 : 2) |
|
| 752 | + // sinon c'est OK si _SET_HTML_BASE a ete force a false |
|
| 753 | + or (defined('_SET_HTML_BASE') and !_SET_HTML_BASE)) |
|
| 754 | + ) { |
|
| 755 | + $url = preg_replace(',^[^?]*/,', '', $url); |
|
| 756 | + } |
|
| 757 | + // ajouter le cas echeant les variables _POST['id_...'] |
|
| 758 | + foreach ($_POST as $v => $c) { |
|
| 759 | + if (substr($v, 0, 3) == 'id_') { |
|
| 760 | + $url = parametre_url($url, $v, $c, '&'); |
|
| 761 | + } |
|
| 762 | + } |
|
| 763 | + |
|
| 764 | + // supprimer les variables sans interet |
|
| 765 | + if (test_espace_prive()) { |
|
| 766 | + $url = preg_replace(',([?&])(' |
|
| 767 | + . 'lang|show_docs|' |
|
| 768 | + . 'changer_lang|var_lang|action)=[^&]*,i', '\1', $url); |
|
| 769 | + $url = preg_replace(',([?&])[&]+,', '\1', $url); |
|
| 770 | + $url = preg_replace(',[&]$,', '\1', $url); |
|
| 771 | + } |
|
| 772 | + |
|
| 773 | + // eviter les hacks |
|
| 774 | + include_spip('inc/filtres_mini'); |
|
| 775 | + $url = spip_htmlspecialchars($url); |
|
| 776 | + |
|
| 777 | + $url = str_replace(["'", '"', '<', '[', ']', ':'], ['%27', '%22', '%3C', '%5B', '%5D', '%3A'], $url); |
|
| 778 | + |
|
| 779 | + // & ? |
|
| 780 | + if ($amp != '&') { |
|
| 781 | + $url = str_replace('&', $amp, $url); |
|
| 782 | + } |
|
| 783 | + |
|
| 784 | + // Si ca demarre par ? ou vide, donner './' |
|
| 785 | + $url = preg_replace(',^([?].*)?$,', './\1', $url); |
|
| 786 | + |
|
| 787 | + return $url; |
|
| 789 | 788 | } |
| 790 | 789 | |
| 791 | 790 | |
@@ -796,7 +795,7 @@ discard block |
||
| 796 | 795 | * true si c'est le cas, false sinon. |
| 797 | 796 | */ |
| 798 | 797 | function test_espace_prive() { |
| 799 | - return defined('_ESPACE_PRIVE') ? _ESPACE_PRIVE : false; |
|
| 798 | + return defined('_ESPACE_PRIVE') ? _ESPACE_PRIVE : false; |
|
| 800 | 799 | } |
| 801 | 800 | |
| 802 | 801 | /** |
@@ -806,7 +805,7 @@ discard block |
||
| 806 | 805 | * @return bool |
| 807 | 806 | */ |
| 808 | 807 | function test_plugin_actif($plugin) { |
| 809 | - return ($plugin and defined('_DIR_PLUGIN_' . strtoupper($plugin))) ? true : false; |
|
| 808 | + return ($plugin and defined('_DIR_PLUGIN_' . strtoupper($plugin))) ? true : false; |
|
| 810 | 809 | } |
| 811 | 810 | |
| 812 | 811 | /** |
@@ -837,52 +836,52 @@ discard block |
||
| 837 | 836 | * Texte |
| 838 | 837 | */ |
| 839 | 838 | function _T($texte, $args = [], $options = []) { |
| 840 | - static $traduire = false; |
|
| 841 | - $o = ['class' => '', 'force' => true, 'sanitize' => true]; |
|
| 842 | - if ($options) { |
|
| 843 | - // support de l'ancien argument $class |
|
| 844 | - if (is_string($options)) { |
|
| 845 | - $options = ['class' => $options]; |
|
| 846 | - } |
|
| 847 | - $o = array_merge($o, $options); |
|
| 848 | - } |
|
| 849 | - |
|
| 850 | - if (!$traduire) { |
|
| 851 | - $traduire = charger_fonction('traduire', 'inc'); |
|
| 852 | - include_spip('inc/lang'); |
|
| 853 | - } |
|
| 854 | - |
|
| 855 | - // On peut passer explicitement la langue dans le tableau |
|
| 856 | - // On utilise le même nom de variable que la globale |
|
| 857 | - if (isset($args['spip_lang'])) { |
|
| 858 | - $lang = $args['spip_lang']; |
|
| 859 | - // On l'enleve pour ne pas le passer au remplacement |
|
| 860 | - unset($args['spip_lang']); |
|
| 861 | - } // Sinon on prend la langue du contexte |
|
| 862 | - else { |
|
| 863 | - $lang = $GLOBALS['spip_lang']; |
|
| 864 | - } |
|
| 865 | - $text = $traduire($texte, $lang); |
|
| 866 | - |
|
| 867 | - if ($text === null || !strlen($text)) { |
|
| 868 | - if (!$o['force']) { |
|
| 869 | - return ''; |
|
| 870 | - } |
|
| 871 | - |
|
| 872 | - $text = $texte; |
|
| 873 | - |
|
| 874 | - // pour les chaines non traduites, assurer un service minimum |
|
| 875 | - if (!$GLOBALS['test_i18n'] and (_request('var_mode') != 'traduction')) { |
|
| 876 | - $n = strpos($text, ':'); |
|
| 877 | - if ($n !== false) { |
|
| 878 | - $text = substr($text, $n + 1); |
|
| 879 | - } |
|
| 880 | - $text = str_replace('_', ' ', $text); |
|
| 881 | - } |
|
| 882 | - $o['class'] = null; |
|
| 883 | - } |
|
| 884 | - |
|
| 885 | - return _L($text, $args, $o); |
|
| 839 | + static $traduire = false; |
|
| 840 | + $o = ['class' => '', 'force' => true, 'sanitize' => true]; |
|
| 841 | + if ($options) { |
|
| 842 | + // support de l'ancien argument $class |
|
| 843 | + if (is_string($options)) { |
|
| 844 | + $options = ['class' => $options]; |
|
| 845 | + } |
|
| 846 | + $o = array_merge($o, $options); |
|
| 847 | + } |
|
| 848 | + |
|
| 849 | + if (!$traduire) { |
|
| 850 | + $traduire = charger_fonction('traduire', 'inc'); |
|
| 851 | + include_spip('inc/lang'); |
|
| 852 | + } |
|
| 853 | + |
|
| 854 | + // On peut passer explicitement la langue dans le tableau |
|
| 855 | + // On utilise le même nom de variable que la globale |
|
| 856 | + if (isset($args['spip_lang'])) { |
|
| 857 | + $lang = $args['spip_lang']; |
|
| 858 | + // On l'enleve pour ne pas le passer au remplacement |
|
| 859 | + unset($args['spip_lang']); |
|
| 860 | + } // Sinon on prend la langue du contexte |
|
| 861 | + else { |
|
| 862 | + $lang = $GLOBALS['spip_lang']; |
|
| 863 | + } |
|
| 864 | + $text = $traduire($texte, $lang); |
|
| 865 | + |
|
| 866 | + if ($text === null || !strlen($text)) { |
|
| 867 | + if (!$o['force']) { |
|
| 868 | + return ''; |
|
| 869 | + } |
|
| 870 | + |
|
| 871 | + $text = $texte; |
|
| 872 | + |
|
| 873 | + // pour les chaines non traduites, assurer un service minimum |
|
| 874 | + if (!$GLOBALS['test_i18n'] and (_request('var_mode') != 'traduction')) { |
|
| 875 | + $n = strpos($text, ':'); |
|
| 876 | + if ($n !== false) { |
|
| 877 | + $text = substr($text, $n + 1); |
|
| 878 | + } |
|
| 879 | + $text = str_replace('_', ' ', $text); |
|
| 880 | + } |
|
| 881 | + $o['class'] = null; |
|
| 882 | + } |
|
| 883 | + |
|
| 884 | + return _L($text, $args, $o); |
|
| 886 | 885 | } |
| 887 | 886 | |
| 888 | 887 | |
@@ -909,53 +908,53 @@ discard block |
||
| 909 | 908 | * Texte |
| 910 | 909 | */ |
| 911 | 910 | function _L($text, $args = [], $options = []) { |
| 912 | - $f = $text; |
|
| 913 | - $defaut_options = [ |
|
| 914 | - 'class' => null, |
|
| 915 | - 'sanitize' => true, |
|
| 916 | - ]; |
|
| 917 | - // support de l'ancien argument $class |
|
| 918 | - if ($options and is_string($options)) { |
|
| 919 | - $options = ['class' => $options]; |
|
| 920 | - } |
|
| 921 | - if (is_array($options)) { |
|
| 922 | - $options += $defaut_options; |
|
| 923 | - } else { |
|
| 924 | - $options = $defaut_options; |
|
| 925 | - } |
|
| 926 | - |
|
| 927 | - if (is_array($args) and count($args)) { |
|
| 928 | - if (!function_exists('interdire_scripts')) { |
|
| 929 | - include_spip('inc/texte'); |
|
| 930 | - } |
|
| 931 | - if (!function_exists('echapper_html_suspect')) { |
|
| 932 | - include_spip('inc/texte_mini'); |
|
| 933 | - } |
|
| 934 | - foreach ($args as $name => $value) { |
|
| 935 | - if (strpos($text, (string) "@$name@") !== false) { |
|
| 936 | - if ($options['sanitize']) { |
|
| 937 | - $value = echapper_html_suspect($value); |
|
| 938 | - $value = interdire_scripts($value, -1); |
|
| 939 | - } |
|
| 940 | - if (!empty($options['class'])) { |
|
| 941 | - $value = "<span class='" . $options['class'] . "'>$value</span>"; |
|
| 942 | - } |
|
| 943 | - $text = str_replace("@$name@", $value, $text); |
|
| 944 | - unset($args[$name]); |
|
| 945 | - } |
|
| 946 | - } |
|
| 947 | - // Si des variables n'ont pas ete inserees, le signaler |
|
| 948 | - // (chaines de langues pas a jour) |
|
| 949 | - if ($args) { |
|
| 950 | - spip_log("$f: variables inutilisees " . join(', ', array_keys($args)), _LOG_DEBUG); |
|
| 951 | - } |
|
| 952 | - } |
|
| 953 | - |
|
| 954 | - if (($GLOBALS['test_i18n'] or (_request('var_mode') == 'traduction')) and is_null($options['class'])) { |
|
| 955 | - return "<span class='debug-traduction-erreur'>$text</span>"; |
|
| 956 | - } else { |
|
| 957 | - return $text; |
|
| 958 | - } |
|
| 911 | + $f = $text; |
|
| 912 | + $defaut_options = [ |
|
| 913 | + 'class' => null, |
|
| 914 | + 'sanitize' => true, |
|
| 915 | + ]; |
|
| 916 | + // support de l'ancien argument $class |
|
| 917 | + if ($options and is_string($options)) { |
|
| 918 | + $options = ['class' => $options]; |
|
| 919 | + } |
|
| 920 | + if (is_array($options)) { |
|
| 921 | + $options += $defaut_options; |
|
| 922 | + } else { |
|
| 923 | + $options = $defaut_options; |
|
| 924 | + } |
|
| 925 | + |
|
| 926 | + if (is_array($args) and count($args)) { |
|
| 927 | + if (!function_exists('interdire_scripts')) { |
|
| 928 | + include_spip('inc/texte'); |
|
| 929 | + } |
|
| 930 | + if (!function_exists('echapper_html_suspect')) { |
|
| 931 | + include_spip('inc/texte_mini'); |
|
| 932 | + } |
|
| 933 | + foreach ($args as $name => $value) { |
|
| 934 | + if (strpos($text, (string) "@$name@") !== false) { |
|
| 935 | + if ($options['sanitize']) { |
|
| 936 | + $value = echapper_html_suspect($value); |
|
| 937 | + $value = interdire_scripts($value, -1); |
|
| 938 | + } |
|
| 939 | + if (!empty($options['class'])) { |
|
| 940 | + $value = "<span class='" . $options['class'] . "'>$value</span>"; |
|
| 941 | + } |
|
| 942 | + $text = str_replace("@$name@", $value, $text); |
|
| 943 | + unset($args[$name]); |
|
| 944 | + } |
|
| 945 | + } |
|
| 946 | + // Si des variables n'ont pas ete inserees, le signaler |
|
| 947 | + // (chaines de langues pas a jour) |
|
| 948 | + if ($args) { |
|
| 949 | + spip_log("$f: variables inutilisees " . join(', ', array_keys($args)), _LOG_DEBUG); |
|
| 950 | + } |
|
| 951 | + } |
|
| 952 | + |
|
| 953 | + if (($GLOBALS['test_i18n'] or (_request('var_mode') == 'traduction')) and is_null($options['class'])) { |
|
| 954 | + return "<span class='debug-traduction-erreur'>$text</span>"; |
|
| 955 | + } else { |
|
| 956 | + return $text; |
|
| 957 | + } |
|
| 959 | 958 | } |
| 960 | 959 | |
| 961 | 960 | |
@@ -969,13 +968,13 @@ discard block |
||
| 969 | 968 | * @return string |
| 970 | 969 | */ |
| 971 | 970 | function joli_repertoire($rep) { |
| 972 | - $a = substr($rep, 0, 1); |
|
| 973 | - if ($a <> '.' and $a <> '/') { |
|
| 974 | - $rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS) . $rep; |
|
| 975 | - } |
|
| 976 | - $rep = preg_replace(',(^\.\.\/),', '', $rep); |
|
| 971 | + $a = substr($rep, 0, 1); |
|
| 972 | + if ($a <> '.' and $a <> '/') { |
|
| 973 | + $rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS) . $rep; |
|
| 974 | + } |
|
| 975 | + $rep = preg_replace(',(^\.\.\/),', '', $rep); |
|
| 977 | 976 | |
| 978 | - return $rep; |
|
| 977 | + return $rep; |
|
| 979 | 978 | } |
| 980 | 979 | |
| 981 | 980 | |
@@ -1000,54 +999,54 @@ discard block |
||
| 1000 | 999 | * @return float|int|string|void |
| 1001 | 1000 | */ |
| 1002 | 1001 | function spip_timer($t = 'rien', $raw = false) { |
| 1003 | - static $time; |
|
| 1004 | - $a = time(); |
|
| 1005 | - $b = microtime(); |
|
| 1006 | - // microtime peut contenir les microsecondes et le temps |
|
| 1007 | - $b = explode(' ', $b); |
|
| 1008 | - if (count($b) == 2) { |
|
| 1009 | - $a = end($b); |
|
| 1010 | - } // plus precis ! |
|
| 1011 | - $b = reset($b); |
|
| 1012 | - if (!isset($time[$t])) { |
|
| 1013 | - $time[$t] = $a + $b; |
|
| 1014 | - } else { |
|
| 1015 | - $p = ($a + $b - $time[$t]) * 1000; |
|
| 1016 | - unset($time[$t]); |
|
| 1002 | + static $time; |
|
| 1003 | + $a = time(); |
|
| 1004 | + $b = microtime(); |
|
| 1005 | + // microtime peut contenir les microsecondes et le temps |
|
| 1006 | + $b = explode(' ', $b); |
|
| 1007 | + if (count($b) == 2) { |
|
| 1008 | + $a = end($b); |
|
| 1009 | + } // plus precis ! |
|
| 1010 | + $b = reset($b); |
|
| 1011 | + if (!isset($time[$t])) { |
|
| 1012 | + $time[$t] = $a + $b; |
|
| 1013 | + } else { |
|
| 1014 | + $p = ($a + $b - $time[$t]) * 1000; |
|
| 1015 | + unset($time[$t]); |
|
| 1017 | 1016 | # echo "'$p'";exit; |
| 1018 | - if ($raw) { |
|
| 1019 | - return $p; |
|
| 1020 | - } |
|
| 1021 | - if ($p < 1000) { |
|
| 1022 | - $s = ''; |
|
| 1023 | - } else { |
|
| 1024 | - $s = sprintf('%d ', $x = floor($p / 1000)); |
|
| 1025 | - $p -= ($x * 1000); |
|
| 1026 | - } |
|
| 1017 | + if ($raw) { |
|
| 1018 | + return $p; |
|
| 1019 | + } |
|
| 1020 | + if ($p < 1000) { |
|
| 1021 | + $s = ''; |
|
| 1022 | + } else { |
|
| 1023 | + $s = sprintf('%d ', $x = floor($p / 1000)); |
|
| 1024 | + $p -= ($x * 1000); |
|
| 1025 | + } |
|
| 1027 | 1026 | |
| 1028 | - return $s . sprintf($s ? '%07.3f ms' : '%.3f ms', $p); |
|
| 1029 | - } |
|
| 1027 | + return $s . sprintf($s ? '%07.3f ms' : '%.3f ms', $p); |
|
| 1028 | + } |
|
| 1030 | 1029 | } |
| 1031 | 1030 | |
| 1032 | 1031 | |
| 1033 | 1032 | // Renvoie False si un fichier n'est pas plus vieux que $duree secondes, |
| 1034 | 1033 | // sinon renvoie True et le date sauf si ca n'est pas souhaite |
| 1035 | 1034 | function spip_touch($fichier, $duree = 0, $touch = true) { |
| 1036 | - if ($duree) { |
|
| 1037 | - clearstatcache(); |
|
| 1038 | - if ((@$f = filemtime($fichier)) and ($f >= time() - $duree)) { |
|
| 1039 | - return false; |
|
| 1040 | - } |
|
| 1041 | - } |
|
| 1042 | - if ($touch !== false) { |
|
| 1043 | - if (!@touch($fichier)) { |
|
| 1044 | - spip_unlink($fichier); |
|
| 1045 | - @touch($fichier); |
|
| 1046 | - }; |
|
| 1047 | - @chmod($fichier, _SPIP_CHMOD & ~0111); |
|
| 1048 | - } |
|
| 1035 | + if ($duree) { |
|
| 1036 | + clearstatcache(); |
|
| 1037 | + if ((@$f = filemtime($fichier)) and ($f >= time() - $duree)) { |
|
| 1038 | + return false; |
|
| 1039 | + } |
|
| 1040 | + } |
|
| 1041 | + if ($touch !== false) { |
|
| 1042 | + if (!@touch($fichier)) { |
|
| 1043 | + spip_unlink($fichier); |
|
| 1044 | + @touch($fichier); |
|
| 1045 | + }; |
|
| 1046 | + @chmod($fichier, _SPIP_CHMOD & ~0111); |
|
| 1047 | + } |
|
| 1049 | 1048 | |
| 1050 | - return true; |
|
| 1049 | + return true; |
|
| 1051 | 1050 | } |
| 1052 | 1051 | |
| 1053 | 1052 | |
@@ -1058,11 +1057,11 @@ discard block |
||
| 1058 | 1057 | * @uses cron() |
| 1059 | 1058 | **/ |
| 1060 | 1059 | function action_cron() { |
| 1061 | - include_spip('inc/headers'); |
|
| 1062 | - http_response_code(204); // No Content |
|
| 1063 | - header('Connection: close'); |
|
| 1064 | - define('_DIRECT_CRON_FORCE', true); |
|
| 1065 | - cron(); |
|
| 1060 | + include_spip('inc/headers'); |
|
| 1061 | + http_response_code(204); // No Content |
|
| 1062 | + header('Connection: close'); |
|
| 1063 | + define('_DIRECT_CRON_FORCE', true); |
|
| 1064 | + cron(); |
|
| 1066 | 1065 | } |
| 1067 | 1066 | |
| 1068 | 1067 | /** |
@@ -1078,26 +1077,26 @@ discard block |
||
| 1078 | 1077 | * True si la tache a pu être effectuée |
| 1079 | 1078 | */ |
| 1080 | 1079 | function cron($taches = [], $taches_old = []) { |
| 1081 | - // si pas en mode cron force, laisser tomber. |
|
| 1082 | - if (!defined('_DIRECT_CRON_FORCE')) { |
|
| 1083 | - return false; |
|
| 1084 | - } |
|
| 1085 | - if (!is_array($taches)) { |
|
| 1086 | - $taches = $taches_old; |
|
| 1087 | - } // compat anciens appels |
|
| 1088 | - // si taches a inserer en base et base inaccessible, laisser tomber |
|
| 1089 | - // sinon on ne verifie pas la connexion tout de suite, car si ca se trouve |
|
| 1090 | - // queue_sleep_time_to_next_job() dira qu'il n'y a rien a faire |
|
| 1091 | - // et on evite d'ouvrir une connexion pour rien (utilisation de _DIRECT_CRON_FORCE dans mes_options.php) |
|
| 1092 | - if ($taches and count($taches) and !spip_connect()) { |
|
| 1093 | - return false; |
|
| 1094 | - } |
|
| 1095 | - spip_log('cron !', 'jq' . _LOG_DEBUG); |
|
| 1096 | - if ($genie = charger_fonction('genie', 'inc', true)) { |
|
| 1097 | - return $genie($taches); |
|
| 1098 | - } |
|
| 1099 | - |
|
| 1100 | - return false; |
|
| 1080 | + // si pas en mode cron force, laisser tomber. |
|
| 1081 | + if (!defined('_DIRECT_CRON_FORCE')) { |
|
| 1082 | + return false; |
|
| 1083 | + } |
|
| 1084 | + if (!is_array($taches)) { |
|
| 1085 | + $taches = $taches_old; |
|
| 1086 | + } // compat anciens appels |
|
| 1087 | + // si taches a inserer en base et base inaccessible, laisser tomber |
|
| 1088 | + // sinon on ne verifie pas la connexion tout de suite, car si ca se trouve |
|
| 1089 | + // queue_sleep_time_to_next_job() dira qu'il n'y a rien a faire |
|
| 1090 | + // et on evite d'ouvrir une connexion pour rien (utilisation de _DIRECT_CRON_FORCE dans mes_options.php) |
|
| 1091 | + if ($taches and count($taches) and !spip_connect()) { |
|
| 1092 | + return false; |
|
| 1093 | + } |
|
| 1094 | + spip_log('cron !', 'jq' . _LOG_DEBUG); |
|
| 1095 | + if ($genie = charger_fonction('genie', 'inc', true)) { |
|
| 1096 | + return $genie($taches); |
|
| 1097 | + } |
|
| 1098 | + |
|
| 1099 | + return false; |
|
| 1101 | 1100 | } |
| 1102 | 1101 | |
| 1103 | 1102 | /** |
@@ -1129,17 +1128,17 @@ discard block |
||
| 1129 | 1128 | * Le numéro de travail ajouté ou `0` si aucun travail n’a été ajouté. |
| 1130 | 1129 | */ |
| 1131 | 1130 | function job_queue_add( |
| 1132 | - $function, |
|
| 1133 | - $description, |
|
| 1134 | - $arguments = [], |
|
| 1135 | - $file = '', |
|
| 1136 | - $no_duplicate = false, |
|
| 1137 | - $time = 0, |
|
| 1138 | - $priority = 0 |
|
| 1131 | + $function, |
|
| 1132 | + $description, |
|
| 1133 | + $arguments = [], |
|
| 1134 | + $file = '', |
|
| 1135 | + $no_duplicate = false, |
|
| 1136 | + $time = 0, |
|
| 1137 | + $priority = 0 |
|
| 1139 | 1138 | ) { |
| 1140 | - include_spip('inc/queue'); |
|
| 1139 | + include_spip('inc/queue'); |
|
| 1141 | 1140 | |
| 1142 | - return queue_add_job($function, $description, $arguments, $file, $no_duplicate, $time, $priority); |
|
| 1141 | + return queue_add_job($function, $description, $arguments, $file, $no_duplicate, $time, $priority); |
|
| 1143 | 1142 | } |
| 1144 | 1143 | |
| 1145 | 1144 | /** |
@@ -1150,9 +1149,9 @@ discard block |
||
| 1150 | 1149 | * @return bool |
| 1151 | 1150 | */ |
| 1152 | 1151 | function job_queue_remove($id_job) { |
| 1153 | - include_spip('inc/queue'); |
|
| 1152 | + include_spip('inc/queue'); |
|
| 1154 | 1153 | |
| 1155 | - return queue_remove_job($id_job); |
|
| 1154 | + return queue_remove_job($id_job); |
|
| 1156 | 1155 | } |
| 1157 | 1156 | |
| 1158 | 1157 | /** |
@@ -1165,9 +1164,9 @@ discard block |
||
| 1165 | 1164 | * or an array of simple array to link multiples objet in one time |
| 1166 | 1165 | */ |
| 1167 | 1166 | function job_queue_link($id_job, $objets) { |
| 1168 | - include_spip('inc/queue'); |
|
| 1167 | + include_spip('inc/queue'); |
|
| 1169 | 1168 | |
| 1170 | - return queue_link_job($id_job, $objets); |
|
| 1169 | + return queue_link_job($id_job, $objets); |
|
| 1171 | 1170 | } |
| 1172 | 1171 | |
| 1173 | 1172 | |
@@ -1187,36 +1186,36 @@ discard block |
||
| 1187 | 1186 | * - `null` si la queue n'est pas encore initialisée |
| 1188 | 1187 | */ |
| 1189 | 1188 | function queue_sleep_time_to_next_job($force = null) { |
| 1190 | - static $queue_next_job_time = -1; |
|
| 1191 | - if ($force === true) { |
|
| 1192 | - $queue_next_job_time = -1; |
|
| 1193 | - } elseif ($force) { |
|
| 1194 | - $queue_next_job_time = $force; |
|
| 1195 | - } |
|
| 1196 | - |
|
| 1197 | - if ($queue_next_job_time == -1) { |
|
| 1198 | - if (!defined('_JQ_NEXT_JOB_TIME_FILENAME')) { |
|
| 1199 | - define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP . 'job_queue_next.txt'); |
|
| 1200 | - } |
|
| 1201 | - // utiliser un cache memoire si dispo |
|
| 1202 | - if (function_exists('cache_get') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) { |
|
| 1203 | - $queue_next_job_time = cache_get(_JQ_NEXT_JOB_TIME_FILENAME); |
|
| 1204 | - } else { |
|
| 1205 | - $queue_next_job_time = null; |
|
| 1206 | - if (lire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, $contenu)) { |
|
| 1207 | - $queue_next_job_time = intval($contenu); |
|
| 1208 | - } |
|
| 1209 | - } |
|
| 1210 | - } |
|
| 1211 | - |
|
| 1212 | - if (is_null($queue_next_job_time)) { |
|
| 1213 | - return null; |
|
| 1214 | - } |
|
| 1215 | - if (!$_SERVER['REQUEST_TIME']) { |
|
| 1216 | - $_SERVER['REQUEST_TIME'] = time(); |
|
| 1217 | - } |
|
| 1218 | - |
|
| 1219 | - return $queue_next_job_time - $_SERVER['REQUEST_TIME']; |
|
| 1189 | + static $queue_next_job_time = -1; |
|
| 1190 | + if ($force === true) { |
|
| 1191 | + $queue_next_job_time = -1; |
|
| 1192 | + } elseif ($force) { |
|
| 1193 | + $queue_next_job_time = $force; |
|
| 1194 | + } |
|
| 1195 | + |
|
| 1196 | + if ($queue_next_job_time == -1) { |
|
| 1197 | + if (!defined('_JQ_NEXT_JOB_TIME_FILENAME')) { |
|
| 1198 | + define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP . 'job_queue_next.txt'); |
|
| 1199 | + } |
|
| 1200 | + // utiliser un cache memoire si dispo |
|
| 1201 | + if (function_exists('cache_get') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) { |
|
| 1202 | + $queue_next_job_time = cache_get(_JQ_NEXT_JOB_TIME_FILENAME); |
|
| 1203 | + } else { |
|
| 1204 | + $queue_next_job_time = null; |
|
| 1205 | + if (lire_fichier(_JQ_NEXT_JOB_TIME_FILENAME, $contenu)) { |
|
| 1206 | + $queue_next_job_time = intval($contenu); |
|
| 1207 | + } |
|
| 1208 | + } |
|
| 1209 | + } |
|
| 1210 | + |
|
| 1211 | + if (is_null($queue_next_job_time)) { |
|
| 1212 | + return null; |
|
| 1213 | + } |
|
| 1214 | + if (!$_SERVER['REQUEST_TIME']) { |
|
| 1215 | + $_SERVER['REQUEST_TIME'] = time(); |
|
| 1216 | + } |
|
| 1217 | + |
|
| 1218 | + return $queue_next_job_time - $_SERVER['REQUEST_TIME']; |
|
| 1220 | 1219 | } |
| 1221 | 1220 | |
| 1222 | 1221 | |
@@ -1228,11 +1227,11 @@ discard block |
||
| 1228 | 1227 | * @return string |
| 1229 | 1228 | */ |
| 1230 | 1229 | function quote_amp($u) { |
| 1231 | - return preg_replace( |
|
| 1232 | - '/&(?![a-z]{0,4}\w{2,3};|#x?[0-9a-f]{2,6};)/i', |
|
| 1233 | - '&', |
|
| 1234 | - $u |
|
| 1235 | - ); |
|
| 1230 | + return preg_replace( |
|
| 1231 | + '/&(?![a-z]{0,4}\w{2,3};|#x?[0-9a-f]{2,6};)/i', |
|
| 1232 | + '&', |
|
| 1233 | + $u |
|
| 1234 | + ); |
|
| 1236 | 1235 | } |
| 1237 | 1236 | |
| 1238 | 1237 | |
@@ -1255,27 +1254,27 @@ discard block |
||
| 1255 | 1254 | * Balise HTML `<script>` et son contenu |
| 1256 | 1255 | **/ |
| 1257 | 1256 | function http_script($script, $src = '', $noscript = '') { |
| 1258 | - static $done = []; |
|
| 1257 | + static $done = []; |
|
| 1259 | 1258 | |
| 1260 | - if ($src && !isset($done[$src])) { |
|
| 1261 | - $done[$src] = true; |
|
| 1262 | - $src = find_in_path($src, _JAVASCRIPT); |
|
| 1263 | - $src = " src='$src'"; |
|
| 1264 | - } else { |
|
| 1265 | - $src = ''; |
|
| 1266 | - } |
|
| 1267 | - if ($script) { |
|
| 1268 | - $script = ("/*<![CDATA[*/\n" . |
|
| 1269 | - preg_replace(',</([^>]*)>,', '<\/\1>', $script) . |
|
| 1270 | - '/*]]>*/'); |
|
| 1271 | - } |
|
| 1272 | - if ($noscript) { |
|
| 1273 | - $noscript = "<noscript>\n\t$noscript\n</noscript>\n"; |
|
| 1274 | - } |
|
| 1259 | + if ($src && !isset($done[$src])) { |
|
| 1260 | + $done[$src] = true; |
|
| 1261 | + $src = find_in_path($src, _JAVASCRIPT); |
|
| 1262 | + $src = " src='$src'"; |
|
| 1263 | + } else { |
|
| 1264 | + $src = ''; |
|
| 1265 | + } |
|
| 1266 | + if ($script) { |
|
| 1267 | + $script = ("/*<![CDATA[*/\n" . |
|
| 1268 | + preg_replace(',</([^>]*)>,', '<\/\1>', $script) . |
|
| 1269 | + '/*]]>*/'); |
|
| 1270 | + } |
|
| 1271 | + if ($noscript) { |
|
| 1272 | + $noscript = "<noscript>\n\t$noscript\n</noscript>\n"; |
|
| 1273 | + } |
|
| 1275 | 1274 | |
| 1276 | - return ($src or $script or $noscript) |
|
| 1277 | - ? "<script type='text/javascript'$src>$script</script>$noscript" |
|
| 1278 | - : ''; |
|
| 1275 | + return ($src or $script or $noscript) |
|
| 1276 | + ? "<script type='text/javascript'$src>$script</script>$noscript" |
|
| 1277 | + : ''; |
|
| 1279 | 1278 | } |
| 1280 | 1279 | |
| 1281 | 1280 | |
@@ -1310,7 +1309,7 @@ discard block |
||
| 1310 | 1309 | * Texte échappé |
| 1311 | 1310 | **/ |
| 1312 | 1311 | function texte_script(string $texte): string { |
| 1313 | - return str_replace('\'', '\\\'', str_replace('\\', '\\\\', $texte)); |
|
| 1312 | + return str_replace('\'', '\\\'', str_replace('\\', '\\\\', $texte)); |
|
| 1314 | 1313 | } |
| 1315 | 1314 | |
| 1316 | 1315 | |
@@ -1347,68 +1346,68 @@ discard block |
||
| 1347 | 1346 | * Liste des chemins, par ordre de priorité. |
| 1348 | 1347 | **/ |
| 1349 | 1348 | function _chemin($dir_path = null) { |
| 1350 | - static $path_base = null; |
|
| 1351 | - static $path_full = null; |
|
| 1352 | - if ($path_base == null) { |
|
| 1353 | - // Chemin standard depuis l'espace public |
|
| 1354 | - $path = defined('_SPIP_PATH') ? _SPIP_PATH : |
|
| 1355 | - _DIR_RACINE . ':' . |
|
| 1356 | - _DIR_RACINE . 'squelettes-dist/:' . |
|
| 1357 | - _DIR_RACINE . 'prive/:' . |
|
| 1358 | - _DIR_RESTREINT; |
|
| 1359 | - // Ajouter squelettes/ |
|
| 1360 | - if (@is_dir(_DIR_RACINE . 'squelettes')) { |
|
| 1361 | - $path = _DIR_RACINE . 'squelettes/:' . $path; |
|
| 1362 | - } |
|
| 1363 | - foreach (explode(':', $path) as $dir) { |
|
| 1364 | - if (strlen($dir) and substr($dir, -1) != '/') { |
|
| 1365 | - $dir .= '/'; |
|
| 1366 | - } |
|
| 1367 | - $path_base[] = $dir; |
|
| 1368 | - } |
|
| 1369 | - $path_full = $path_base; |
|
| 1370 | - // Et le(s) dossier(s) des squelettes nommes |
|
| 1371 | - if (strlen($GLOBALS['dossier_squelettes'])) { |
|
| 1372 | - foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) { |
|
| 1373 | - array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/'); |
|
| 1374 | - } |
|
| 1375 | - } |
|
| 1376 | - $GLOBALS['path_sig'] = md5(serialize($path_full)); |
|
| 1377 | - } |
|
| 1378 | - if ($dir_path === null) { |
|
| 1379 | - return $path_full; |
|
| 1380 | - } |
|
| 1381 | - |
|
| 1382 | - if (is_array($dir_path) or strlen($dir_path)) { |
|
| 1383 | - $tete = ''; |
|
| 1384 | - if (reset($path_base) == _DIR_RACINE . 'squelettes/') { |
|
| 1385 | - $tete = array_shift($path_base); |
|
| 1386 | - } |
|
| 1387 | - $dirs = (is_array($dir_path) ? $dir_path : explode(':', $dir_path)); |
|
| 1388 | - $dirs = array_reverse($dirs); |
|
| 1389 | - foreach ($dirs as $dir_path) { |
|
| 1390 | - if (substr($dir_path, -1) != '/') { |
|
| 1391 | - $dir_path .= '/'; |
|
| 1392 | - } |
|
| 1393 | - if (!in_array($dir_path, $path_base)) { |
|
| 1394 | - array_unshift($path_base, $dir_path); |
|
| 1395 | - } |
|
| 1396 | - } |
|
| 1397 | - if (strlen($tete)) { |
|
| 1398 | - array_unshift($path_base, $tete); |
|
| 1399 | - } |
|
| 1400 | - } |
|
| 1401 | - $path_full = $path_base; |
|
| 1402 | - // Et le(s) dossier(s) des squelettes nommes |
|
| 1403 | - if (strlen($GLOBALS['dossier_squelettes'])) { |
|
| 1404 | - foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) { |
|
| 1405 | - array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE) . $d . '/'); |
|
| 1406 | - } |
|
| 1407 | - } |
|
| 1408 | - |
|
| 1409 | - $GLOBALS['path_sig'] = md5(serialize($path_full)); |
|
| 1410 | - |
|
| 1411 | - return $path_full; |
|
| 1349 | + static $path_base = null; |
|
| 1350 | + static $path_full = null; |
|
| 1351 | + if ($path_base == null) { |
|
| 1352 | + // Chemin standard depuis l'espace public |
|
| 1353 | + $path = defined('_SPIP_PATH') ? _SPIP_PATH : |
|
| 1354 | + _DIR_RACINE . ':' . |
|
| 1355 | + _DIR_RACINE . 'squelettes-dist/:' . |
|
| 1356 | + _DIR_RACINE . 'prive/:' . |
|
| 1357 | + _DIR_RESTREINT; |
|
| 1358 | + // Ajouter squelettes/ |
|
| 1359 | + if (@is_dir(_DIR_RACINE . 'squelettes')) { |
|
| 1360 | + $path = _DIR_RACINE . 'squelettes/:' . $path; |
|
| 1361 | + } |
|
| 1362 | + foreach (explode(':', $path) as $dir) { |
|
| 1363 | + if (strlen($dir) and substr($dir, -1) != '/') { |
|
| 1364 | + $dir .= '/'; |
|
| 1365 | + } |
|
| 1366 | + $path_base[] = $dir; |
|
| 1367 | + } |
|
| 1368 | + $path_full = $path_base; |
|
| 1369 | + // Et le(s) dossier(s) des squelettes nommes |
|
| 1370 | + if (strlen($GLOBALS['dossier_squelettes'])) { |
|
| 1371 | + foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) { |
|
| 1372 | + array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/'); |
|
| 1373 | + } |
|
| 1374 | + } |
|
| 1375 | + $GLOBALS['path_sig'] = md5(serialize($path_full)); |
|
| 1376 | + } |
|
| 1377 | + if ($dir_path === null) { |
|
| 1378 | + return $path_full; |
|
| 1379 | + } |
|
| 1380 | + |
|
| 1381 | + if (is_array($dir_path) or strlen($dir_path)) { |
|
| 1382 | + $tete = ''; |
|
| 1383 | + if (reset($path_base) == _DIR_RACINE . 'squelettes/') { |
|
| 1384 | + $tete = array_shift($path_base); |
|
| 1385 | + } |
|
| 1386 | + $dirs = (is_array($dir_path) ? $dir_path : explode(':', $dir_path)); |
|
| 1387 | + $dirs = array_reverse($dirs); |
|
| 1388 | + foreach ($dirs as $dir_path) { |
|
| 1389 | + if (substr($dir_path, -1) != '/') { |
|
| 1390 | + $dir_path .= '/'; |
|
| 1391 | + } |
|
| 1392 | + if (!in_array($dir_path, $path_base)) { |
|
| 1393 | + array_unshift($path_base, $dir_path); |
|
| 1394 | + } |
|
| 1395 | + } |
|
| 1396 | + if (strlen($tete)) { |
|
| 1397 | + array_unshift($path_base, $tete); |
|
| 1398 | + } |
|
| 1399 | + } |
|
| 1400 | + $path_full = $path_base; |
|
| 1401 | + // Et le(s) dossier(s) des squelettes nommes |
|
| 1402 | + if (strlen($GLOBALS['dossier_squelettes'])) { |
|
| 1403 | + foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) { |
|
| 1404 | + array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE) . $d . '/'); |
|
| 1405 | + } |
|
| 1406 | + } |
|
| 1407 | + |
|
| 1408 | + $GLOBALS['path_sig'] = md5(serialize($path_full)); |
|
| 1409 | + |
|
| 1410 | + return $path_full; |
|
| 1412 | 1411 | } |
| 1413 | 1412 | |
| 1414 | 1413 | /** |
@@ -1421,78 +1420,78 @@ discard block |
||
| 1421 | 1420 | * @return array Liste de chemins |
| 1422 | 1421 | **/ |
| 1423 | 1422 | function creer_chemin() { |
| 1424 | - $path_a = _chemin(); |
|
| 1425 | - static $c = ''; |
|
| 1423 | + $path_a = _chemin(); |
|
| 1424 | + static $c = ''; |
|
| 1426 | 1425 | |
| 1427 | - // on calcule le chemin si le dossier skel a change |
|
| 1428 | - if ($c != $GLOBALS['dossier_squelettes']) { |
|
| 1429 | - // assurer le non plantage lors de la montee de version : |
|
| 1430 | - $c = $GLOBALS['dossier_squelettes']; |
|
| 1431 | - $path_a = _chemin(''); // forcer un recalcul du chemin |
|
| 1432 | - } |
|
| 1426 | + // on calcule le chemin si le dossier skel a change |
|
| 1427 | + if ($c != $GLOBALS['dossier_squelettes']) { |
|
| 1428 | + // assurer le non plantage lors de la montee de version : |
|
| 1429 | + $c = $GLOBALS['dossier_squelettes']; |
|
| 1430 | + $path_a = _chemin(''); // forcer un recalcul du chemin |
|
| 1431 | + } |
|
| 1433 | 1432 | |
| 1434 | - return $path_a; |
|
| 1433 | + return $path_a; |
|
| 1435 | 1434 | } |
| 1436 | 1435 | |
| 1437 | 1436 | |
| 1438 | 1437 | function lister_themes_prives() { |
| 1439 | - static $themes = null; |
|
| 1440 | - if (is_null($themes)) { |
|
| 1441 | - // si pas encore definie |
|
| 1442 | - if (!defined('_SPIP_THEME_PRIVE')) { |
|
| 1443 | - define('_SPIP_THEME_PRIVE', 'spip'); |
|
| 1444 | - } |
|
| 1445 | - $themes = [_SPIP_THEME_PRIVE]; |
|
| 1446 | - // lors d'une installation neuve, prefs n'est pas definie. |
|
| 1447 | - if (isset($GLOBALS['visiteur_session']['prefs'])) { |
|
| 1448 | - $prefs = $GLOBALS['visiteur_session']['prefs']; |
|
| 1449 | - } else { |
|
| 1450 | - $prefs = []; |
|
| 1451 | - } |
|
| 1452 | - if (is_string($prefs)) { |
|
| 1453 | - $prefs = unserialize($GLOBALS['visiteur_session']['prefs']); |
|
| 1454 | - } |
|
| 1455 | - if ( |
|
| 1456 | - ((isset($prefs['theme']) and $theme = $prefs['theme']) |
|
| 1457 | - or (isset($GLOBALS['theme_prive_defaut']) and $theme = $GLOBALS['theme_prive_defaut'])) |
|
| 1458 | - and $theme != _SPIP_THEME_PRIVE |
|
| 1459 | - ) { |
|
| 1460 | - array_unshift($themes, $theme); |
|
| 1461 | - } // placer le theme choisi en tete |
|
| 1462 | - } |
|
| 1463 | - |
|
| 1464 | - return $themes; |
|
| 1438 | + static $themes = null; |
|
| 1439 | + if (is_null($themes)) { |
|
| 1440 | + // si pas encore definie |
|
| 1441 | + if (!defined('_SPIP_THEME_PRIVE')) { |
|
| 1442 | + define('_SPIP_THEME_PRIVE', 'spip'); |
|
| 1443 | + } |
|
| 1444 | + $themes = [_SPIP_THEME_PRIVE]; |
|
| 1445 | + // lors d'une installation neuve, prefs n'est pas definie. |
|
| 1446 | + if (isset($GLOBALS['visiteur_session']['prefs'])) { |
|
| 1447 | + $prefs = $GLOBALS['visiteur_session']['prefs']; |
|
| 1448 | + } else { |
|
| 1449 | + $prefs = []; |
|
| 1450 | + } |
|
| 1451 | + if (is_string($prefs)) { |
|
| 1452 | + $prefs = unserialize($GLOBALS['visiteur_session']['prefs']); |
|
| 1453 | + } |
|
| 1454 | + if ( |
|
| 1455 | + ((isset($prefs['theme']) and $theme = $prefs['theme']) |
|
| 1456 | + or (isset($GLOBALS['theme_prive_defaut']) and $theme = $GLOBALS['theme_prive_defaut'])) |
|
| 1457 | + and $theme != _SPIP_THEME_PRIVE |
|
| 1458 | + ) { |
|
| 1459 | + array_unshift($themes, $theme); |
|
| 1460 | + } // placer le theme choisi en tete |
|
| 1461 | + } |
|
| 1462 | + |
|
| 1463 | + return $themes; |
|
| 1465 | 1464 | } |
| 1466 | 1465 | |
| 1467 | 1466 | function find_in_theme($file, $subdir = '', $include = false) { |
| 1468 | - static $themefiles = []; |
|
| 1469 | - if (isset($themefiles["$subdir$file"])) { |
|
| 1470 | - return $themefiles["$subdir$file"]; |
|
| 1471 | - } |
|
| 1472 | - // on peut fournir une icone generique -xx.svg qui fera le job dans toutes les tailles, et qui est prioritaire sur le png |
|
| 1473 | - // si il y a un .svg a la bonne taille (-16.svg) a cote, on l'utilise en remplacement du -16.png |
|
| 1474 | - if ( |
|
| 1475 | - preg_match(',-(\d+)[.](png|gif|svg)$,', $file, $m) |
|
| 1476 | - and $file_svg_generique = substr($file, 0, -strlen($m[0])) . '-xx.svg' |
|
| 1477 | - and $f = find_in_theme("$file_svg_generique") |
|
| 1478 | - ) { |
|
| 1479 | - if ($fsize = substr($f, 0, -6) . $m[1] . '.svg' and file_exists($fsize)) { |
|
| 1480 | - return $themefiles["$subdir$file"] = $fsize; |
|
| 1481 | - } |
|
| 1482 | - else { |
|
| 1483 | - return $themefiles["$subdir$file"] = "$f?" . $m[1] . 'px'; |
|
| 1484 | - } |
|
| 1485 | - } |
|
| 1486 | - |
|
| 1487 | - $themes = lister_themes_prives(); |
|
| 1488 | - foreach ($themes as $theme) { |
|
| 1489 | - if ($f = find_in_path($file, "prive/themes/$theme/$subdir", $include)) { |
|
| 1490 | - return $themefiles["$subdir$file"] = $f; |
|
| 1491 | - } |
|
| 1492 | - } |
|
| 1493 | - spip_log("$file introuvable dans le theme prive " . reset($themes), 'theme'); |
|
| 1494 | - |
|
| 1495 | - return $themefiles["$subdir$file"] = ''; |
|
| 1467 | + static $themefiles = []; |
|
| 1468 | + if (isset($themefiles["$subdir$file"])) { |
|
| 1469 | + return $themefiles["$subdir$file"]; |
|
| 1470 | + } |
|
| 1471 | + // on peut fournir une icone generique -xx.svg qui fera le job dans toutes les tailles, et qui est prioritaire sur le png |
|
| 1472 | + // si il y a un .svg a la bonne taille (-16.svg) a cote, on l'utilise en remplacement du -16.png |
|
| 1473 | + if ( |
|
| 1474 | + preg_match(',-(\d+)[.](png|gif|svg)$,', $file, $m) |
|
| 1475 | + and $file_svg_generique = substr($file, 0, -strlen($m[0])) . '-xx.svg' |
|
| 1476 | + and $f = find_in_theme("$file_svg_generique") |
|
| 1477 | + ) { |
|
| 1478 | + if ($fsize = substr($f, 0, -6) . $m[1] . '.svg' and file_exists($fsize)) { |
|
| 1479 | + return $themefiles["$subdir$file"] = $fsize; |
|
| 1480 | + } |
|
| 1481 | + else { |
|
| 1482 | + return $themefiles["$subdir$file"] = "$f?" . $m[1] . 'px'; |
|
| 1483 | + } |
|
| 1484 | + } |
|
| 1485 | + |
|
| 1486 | + $themes = lister_themes_prives(); |
|
| 1487 | + foreach ($themes as $theme) { |
|
| 1488 | + if ($f = find_in_path($file, "prive/themes/$theme/$subdir", $include)) { |
|
| 1489 | + return $themefiles["$subdir$file"] = $f; |
|
| 1490 | + } |
|
| 1491 | + } |
|
| 1492 | + spip_log("$file introuvable dans le theme prive " . reset($themes), 'theme'); |
|
| 1493 | + |
|
| 1494 | + return $themefiles["$subdir$file"] = ''; |
|
| 1496 | 1495 | } |
| 1497 | 1496 | |
| 1498 | 1497 | |
@@ -1516,31 +1515,31 @@ discard block |
||
| 1516 | 1515 | * sinon chaîne vide. |
| 1517 | 1516 | **/ |
| 1518 | 1517 | function chemin_image($icone) { |
| 1519 | - static $icone_renommer; |
|
| 1520 | - if ($p = strpos($icone, '?')) { |
|
| 1521 | - $icone = substr($icone, 0, $p); |
|
| 1522 | - } |
|
| 1523 | - // gerer le cas d'un double appel en evitant de refaire le travail inutilement |
|
| 1524 | - if (strpos($icone, '/') !== false and file_exists($icone)) { |
|
| 1525 | - return $icone; |
|
| 1526 | - } |
|
| 1527 | - |
|
| 1528 | - // si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct |
|
| 1529 | - if (preg_match(',[.](png|gif|jpg|webp|svg)$,', $icone) and $f = find_in_theme("images/$icone")) { |
|
| 1530 | - return $f; |
|
| 1531 | - } |
|
| 1532 | - // sinon passer par le module de renommage |
|
| 1533 | - if (is_null($icone_renommer)) { |
|
| 1534 | - $icone_renommer = charger_fonction('icone_renommer', 'inc', true); |
|
| 1535 | - } |
|
| 1536 | - if ($icone_renommer) { |
|
| 1537 | - [$icone, $fonction] = $icone_renommer($icone, ''); |
|
| 1538 | - if (file_exists($icone)) { |
|
| 1539 | - return $icone; |
|
| 1540 | - } |
|
| 1541 | - } |
|
| 1542 | - |
|
| 1543 | - return find_in_path($icone, _NOM_IMG_PACK); |
|
| 1518 | + static $icone_renommer; |
|
| 1519 | + if ($p = strpos($icone, '?')) { |
|
| 1520 | + $icone = substr($icone, 0, $p); |
|
| 1521 | + } |
|
| 1522 | + // gerer le cas d'un double appel en evitant de refaire le travail inutilement |
|
| 1523 | + if (strpos($icone, '/') !== false and file_exists($icone)) { |
|
| 1524 | + return $icone; |
|
| 1525 | + } |
|
| 1526 | + |
|
| 1527 | + // si c'est un nom d'image complet (article-24.png) essayer de le renvoyer direct |
|
| 1528 | + if (preg_match(',[.](png|gif|jpg|webp|svg)$,', $icone) and $f = find_in_theme("images/$icone")) { |
|
| 1529 | + return $f; |
|
| 1530 | + } |
|
| 1531 | + // sinon passer par le module de renommage |
|
| 1532 | + if (is_null($icone_renommer)) { |
|
| 1533 | + $icone_renommer = charger_fonction('icone_renommer', 'inc', true); |
|
| 1534 | + } |
|
| 1535 | + if ($icone_renommer) { |
|
| 1536 | + [$icone, $fonction] = $icone_renommer($icone, ''); |
|
| 1537 | + if (file_exists($icone)) { |
|
| 1538 | + return $icone; |
|
| 1539 | + } |
|
| 1540 | + } |
|
| 1541 | + |
|
| 1542 | + return find_in_path($icone, _NOM_IMG_PACK); |
|
| 1544 | 1543 | } |
| 1545 | 1544 | |
| 1546 | 1545 | // |
@@ -1578,128 +1577,128 @@ discard block |
||
| 1578 | 1577 | * - false : fichier introuvable |
| 1579 | 1578 | **/ |
| 1580 | 1579 | function find_in_path($file, $dirname = '', $include = false) { |
| 1581 | - static $dirs = []; |
|
| 1582 | - static $inc = []; # cf https://git.spip.net/spip/spip/commit/42e4e028e38c839121efaee84308d08aee307eec |
|
| 1583 | - static $c = ''; |
|
| 1584 | - |
|
| 1585 | - if (!$file and !strlen($file)) { |
|
| 1586 | - return false; |
|
| 1587 | - } |
|
| 1588 | - |
|
| 1589 | - // on calcule le chemin si le dossier skel a change |
|
| 1590 | - if ($c != $GLOBALS['dossier_squelettes']) { |
|
| 1591 | - // assurer le non plantage lors de la montee de version : |
|
| 1592 | - $c = $GLOBALS['dossier_squelettes']; |
|
| 1593 | - creer_chemin(); // forcer un recalcul du chemin et la mise a jour de path_sig |
|
| 1594 | - } |
|
| 1595 | - |
|
| 1596 | - if (isset($GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])) { |
|
| 1597 | - if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]) { |
|
| 1598 | - return false; |
|
| 1599 | - } |
|
| 1600 | - if ($include and !isset($inc[$dirname][$file])) { |
|
| 1601 | - include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]; |
|
| 1602 | - $inc[$dirname][$file] = $inc[''][$dirname . $file] = true; |
|
| 1603 | - } |
|
| 1604 | - |
|
| 1605 | - return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]; |
|
| 1606 | - } |
|
| 1607 | - |
|
| 1608 | - $a = strrpos($file, '/'); |
|
| 1609 | - if ($a !== false) { |
|
| 1610 | - $dirname .= substr($file, 0, ++$a); |
|
| 1611 | - $file = substr($file, $a); |
|
| 1612 | - } |
|
| 1613 | - |
|
| 1614 | - foreach (creer_chemin() as $dir) { |
|
| 1615 | - if (!isset($dirs[$a = $dir . $dirname])) { |
|
| 1616 | - $dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a); |
|
| 1617 | - } |
|
| 1618 | - if ($dirs[$a]) { |
|
| 1619 | - if (file_exists(_ROOT_CWD . ($a .= $file))) { |
|
| 1620 | - if ($include and !isset($inc[$dirname][$file])) { |
|
| 1621 | - include_once _ROOT_CWD . $a; |
|
| 1622 | - $inc[$dirname][$file] = $inc[''][$dirname . $file] = true; |
|
| 1623 | - } |
|
| 1624 | - if (!defined('_SAUVER_CHEMIN')) { |
|
| 1625 | - // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher |
|
| 1626 | - if (is_null($GLOBALS['path_files'])) { |
|
| 1627 | - return $a; |
|
| 1628 | - } |
|
| 1629 | - define('_SAUVER_CHEMIN', true); |
|
| 1630 | - } |
|
| 1631 | - |
|
| 1632 | - return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a; |
|
| 1633 | - } |
|
| 1634 | - } |
|
| 1635 | - } |
|
| 1636 | - |
|
| 1637 | - if ($include) { |
|
| 1638 | - spip_log("include_spip $dirname$file non trouve"); |
|
| 1639 | - if ($include === 'required') { |
|
| 1640 | - echo '<pre>', |
|
| 1641 | - '<strong>Erreur Fatale</strong><br />'; |
|
| 1642 | - if (function_exists('debug_print_backtrace')) { |
|
| 1643 | - echo debug_print_backtrace(); |
|
| 1644 | - } |
|
| 1645 | - echo '</pre>'; |
|
| 1646 | - die("Erreur interne: ne peut inclure $dirname$file"); |
|
| 1647 | - } |
|
| 1648 | - } |
|
| 1649 | - |
|
| 1650 | - if (!defined('_SAUVER_CHEMIN')) { |
|
| 1651 | - // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher |
|
| 1652 | - if (is_null($GLOBALS['path_files'])) { |
|
| 1653 | - return false; |
|
| 1654 | - } |
|
| 1655 | - define('_SAUVER_CHEMIN', true); |
|
| 1656 | - } |
|
| 1657 | - |
|
| 1658 | - return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false; |
|
| 1580 | + static $dirs = []; |
|
| 1581 | + static $inc = []; # cf https://git.spip.net/spip/spip/commit/42e4e028e38c839121efaee84308d08aee307eec |
|
| 1582 | + static $c = ''; |
|
| 1583 | + |
|
| 1584 | + if (!$file and !strlen($file)) { |
|
| 1585 | + return false; |
|
| 1586 | + } |
|
| 1587 | + |
|
| 1588 | + // on calcule le chemin si le dossier skel a change |
|
| 1589 | + if ($c != $GLOBALS['dossier_squelettes']) { |
|
| 1590 | + // assurer le non plantage lors de la montee de version : |
|
| 1591 | + $c = $GLOBALS['dossier_squelettes']; |
|
| 1592 | + creer_chemin(); // forcer un recalcul du chemin et la mise a jour de path_sig |
|
| 1593 | + } |
|
| 1594 | + |
|
| 1595 | + if (isset($GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file])) { |
|
| 1596 | + if (!$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]) { |
|
| 1597 | + return false; |
|
| 1598 | + } |
|
| 1599 | + if ($include and !isset($inc[$dirname][$file])) { |
|
| 1600 | + include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]; |
|
| 1601 | + $inc[$dirname][$file] = $inc[''][$dirname . $file] = true; |
|
| 1602 | + } |
|
| 1603 | + |
|
| 1604 | + return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]; |
|
| 1605 | + } |
|
| 1606 | + |
|
| 1607 | + $a = strrpos($file, '/'); |
|
| 1608 | + if ($a !== false) { |
|
| 1609 | + $dirname .= substr($file, 0, ++$a); |
|
| 1610 | + $file = substr($file, $a); |
|
| 1611 | + } |
|
| 1612 | + |
|
| 1613 | + foreach (creer_chemin() as $dir) { |
|
| 1614 | + if (!isset($dirs[$a = $dir . $dirname])) { |
|
| 1615 | + $dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a); |
|
| 1616 | + } |
|
| 1617 | + if ($dirs[$a]) { |
|
| 1618 | + if (file_exists(_ROOT_CWD . ($a .= $file))) { |
|
| 1619 | + if ($include and !isset($inc[$dirname][$file])) { |
|
| 1620 | + include_once _ROOT_CWD . $a; |
|
| 1621 | + $inc[$dirname][$file] = $inc[''][$dirname . $file] = true; |
|
| 1622 | + } |
|
| 1623 | + if (!defined('_SAUVER_CHEMIN')) { |
|
| 1624 | + // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher |
|
| 1625 | + if (is_null($GLOBALS['path_files'])) { |
|
| 1626 | + return $a; |
|
| 1627 | + } |
|
| 1628 | + define('_SAUVER_CHEMIN', true); |
|
| 1629 | + } |
|
| 1630 | + |
|
| 1631 | + return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a; |
|
| 1632 | + } |
|
| 1633 | + } |
|
| 1634 | + } |
|
| 1635 | + |
|
| 1636 | + if ($include) { |
|
| 1637 | + spip_log("include_spip $dirname$file non trouve"); |
|
| 1638 | + if ($include === 'required') { |
|
| 1639 | + echo '<pre>', |
|
| 1640 | + '<strong>Erreur Fatale</strong><br />'; |
|
| 1641 | + if (function_exists('debug_print_backtrace')) { |
|
| 1642 | + echo debug_print_backtrace(); |
|
| 1643 | + } |
|
| 1644 | + echo '</pre>'; |
|
| 1645 | + die("Erreur interne: ne peut inclure $dirname$file"); |
|
| 1646 | + } |
|
| 1647 | + } |
|
| 1648 | + |
|
| 1649 | + if (!defined('_SAUVER_CHEMIN')) { |
|
| 1650 | + // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher |
|
| 1651 | + if (is_null($GLOBALS['path_files'])) { |
|
| 1652 | + return false; |
|
| 1653 | + } |
|
| 1654 | + define('_SAUVER_CHEMIN', true); |
|
| 1655 | + } |
|
| 1656 | + |
|
| 1657 | + return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false; |
|
| 1659 | 1658 | } |
| 1660 | 1659 | |
| 1661 | 1660 | function clear_path_cache() { |
| 1662 | - $GLOBALS['path_files'] = []; |
|
| 1663 | - spip_unlink(_CACHE_CHEMIN); |
|
| 1661 | + $GLOBALS['path_files'] = []; |
|
| 1662 | + spip_unlink(_CACHE_CHEMIN); |
|
| 1664 | 1663 | } |
| 1665 | 1664 | |
| 1666 | 1665 | function load_path_cache() { |
| 1667 | - // charger le path des plugins |
|
| 1668 | - if (@is_readable(_CACHE_PLUGINS_PATH)) { |
|
| 1669 | - include_once(_CACHE_PLUGINS_PATH); |
|
| 1670 | - } |
|
| 1671 | - $GLOBALS['path_files'] = []; |
|
| 1672 | - // si le visiteur est admin, |
|
| 1673 | - // on ne recharge pas le cache pour forcer sa mise a jour |
|
| 1674 | - if ( |
|
| 1675 | - // la session n'est pas encore chargee a ce moment, on ne peut donc pas s'y fier |
|
| 1676 | - //AND (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut']!='0minirezo') |
|
| 1677 | - // utiliser le cookie est un pis aller qui marche 'en general' |
|
| 1678 | - // on blinde par un second test au moment de la lecture de la session |
|
| 1679 | - // !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin']) |
|
| 1680 | - // et en ignorant ce cache en cas de recalcul explicite |
|
| 1681 | - !_request('var_mode') |
|
| 1682 | - ) { |
|
| 1683 | - // on essaye de lire directement sans verrou pour aller plus vite |
|
| 1684 | - if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)) { |
|
| 1685 | - // mais si semble corrompu on relit avec un verrou |
|
| 1686 | - if (!$GLOBALS['path_files'] = unserialize($contenu)) { |
|
| 1687 | - lire_fichier(_CACHE_CHEMIN, $contenu); |
|
| 1688 | - if (!$GLOBALS['path_files'] = unserialize($contenu)) { |
|
| 1689 | - $GLOBALS['path_files'] = []; |
|
| 1690 | - } |
|
| 1691 | - } |
|
| 1692 | - } |
|
| 1693 | - } |
|
| 1666 | + // charger le path des plugins |
|
| 1667 | + if (@is_readable(_CACHE_PLUGINS_PATH)) { |
|
| 1668 | + include_once(_CACHE_PLUGINS_PATH); |
|
| 1669 | + } |
|
| 1670 | + $GLOBALS['path_files'] = []; |
|
| 1671 | + // si le visiteur est admin, |
|
| 1672 | + // on ne recharge pas le cache pour forcer sa mise a jour |
|
| 1673 | + if ( |
|
| 1674 | + // la session n'est pas encore chargee a ce moment, on ne peut donc pas s'y fier |
|
| 1675 | + //AND (!isset($GLOBALS['visiteur_session']['statut']) OR $GLOBALS['visiteur_session']['statut']!='0minirezo') |
|
| 1676 | + // utiliser le cookie est un pis aller qui marche 'en general' |
|
| 1677 | + // on blinde par un second test au moment de la lecture de la session |
|
| 1678 | + // !isset($_COOKIE[$GLOBALS['cookie_prefix'].'_admin']) |
|
| 1679 | + // et en ignorant ce cache en cas de recalcul explicite |
|
| 1680 | + !_request('var_mode') |
|
| 1681 | + ) { |
|
| 1682 | + // on essaye de lire directement sans verrou pour aller plus vite |
|
| 1683 | + if ($contenu = spip_file_get_contents(_CACHE_CHEMIN)) { |
|
| 1684 | + // mais si semble corrompu on relit avec un verrou |
|
| 1685 | + if (!$GLOBALS['path_files'] = unserialize($contenu)) { |
|
| 1686 | + lire_fichier(_CACHE_CHEMIN, $contenu); |
|
| 1687 | + if (!$GLOBALS['path_files'] = unserialize($contenu)) { |
|
| 1688 | + $GLOBALS['path_files'] = []; |
|
| 1689 | + } |
|
| 1690 | + } |
|
| 1691 | + } |
|
| 1692 | + } |
|
| 1694 | 1693 | } |
| 1695 | 1694 | |
| 1696 | 1695 | function save_path_cache() { |
| 1697 | - if ( |
|
| 1698 | - defined('_SAUVER_CHEMIN') |
|
| 1699 | - and _SAUVER_CHEMIN |
|
| 1700 | - ) { |
|
| 1701 | - ecrire_fichier(_CACHE_CHEMIN, serialize($GLOBALS['path_files'])); |
|
| 1702 | - } |
|
| 1696 | + if ( |
|
| 1697 | + defined('_SAUVER_CHEMIN') |
|
| 1698 | + and _SAUVER_CHEMIN |
|
| 1699 | + ) { |
|
| 1700 | + ecrire_fichier(_CACHE_CHEMIN, serialize($GLOBALS['path_files'])); |
|
| 1701 | + } |
|
| 1703 | 1702 | } |
| 1704 | 1703 | |
| 1705 | 1704 | |
@@ -1719,33 +1718,33 @@ discard block |
||
| 1719 | 1718 | * @return array |
| 1720 | 1719 | */ |
| 1721 | 1720 | function find_all_in_path($dir, $pattern, $recurs = false) { |
| 1722 | - $liste_fichiers = []; |
|
| 1723 | - $maxfiles = 10000; |
|
| 1724 | - |
|
| 1725 | - // cas borderline si dans mes_options on appelle redirige_par_entete qui utilise _T et charge un fichier de langue |
|
| 1726 | - // on a pas encore inclus flock.php |
|
| 1727 | - if (!function_exists('preg_files')) { |
|
| 1728 | - include_once _ROOT_RESTREINT . 'inc/flock.php'; |
|
| 1729 | - } |
|
| 1730 | - |
|
| 1731 | - // Parcourir le chemin |
|
| 1732 | - foreach (creer_chemin() as $d) { |
|
| 1733 | - $f = $d . $dir; |
|
| 1734 | - if (@is_dir($f)) { |
|
| 1735 | - $liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? [] : $recurs); |
|
| 1736 | - foreach ($liste as $chemin) { |
|
| 1737 | - $nom = basename($chemin); |
|
| 1738 | - // ne prendre que les fichiers pas deja trouves |
|
| 1739 | - // car find_in_path prend le premier qu'il trouve, |
|
| 1740 | - // les autres sont donc masques |
|
| 1741 | - if (!isset($liste_fichiers[$nom])) { |
|
| 1742 | - $liste_fichiers[$nom] = $chemin; |
|
| 1743 | - } |
|
| 1744 | - } |
|
| 1745 | - } |
|
| 1746 | - } |
|
| 1747 | - |
|
| 1748 | - return $liste_fichiers; |
|
| 1721 | + $liste_fichiers = []; |
|
| 1722 | + $maxfiles = 10000; |
|
| 1723 | + |
|
| 1724 | + // cas borderline si dans mes_options on appelle redirige_par_entete qui utilise _T et charge un fichier de langue |
|
| 1725 | + // on a pas encore inclus flock.php |
|
| 1726 | + if (!function_exists('preg_files')) { |
|
| 1727 | + include_once _ROOT_RESTREINT . 'inc/flock.php'; |
|
| 1728 | + } |
|
| 1729 | + |
|
| 1730 | + // Parcourir le chemin |
|
| 1731 | + foreach (creer_chemin() as $d) { |
|
| 1732 | + $f = $d . $dir; |
|
| 1733 | + if (@is_dir($f)) { |
|
| 1734 | + $liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? [] : $recurs); |
|
| 1735 | + foreach ($liste as $chemin) { |
|
| 1736 | + $nom = basename($chemin); |
|
| 1737 | + // ne prendre que les fichiers pas deja trouves |
|
| 1738 | + // car find_in_path prend le premier qu'il trouve, |
|
| 1739 | + // les autres sont donc masques |
|
| 1740 | + if (!isset($liste_fichiers[$nom])) { |
|
| 1741 | + $liste_fichiers[$nom] = $chemin; |
|
| 1742 | + } |
|
| 1743 | + } |
|
| 1744 | + } |
|
| 1745 | + } |
|
| 1746 | + |
|
| 1747 | + return $liste_fichiers; |
|
| 1749 | 1748 | } |
| 1750 | 1749 | |
| 1751 | 1750 | /** |
@@ -1757,17 +1756,17 @@ discard block |
||
| 1757 | 1756 | * @return bool |
| 1758 | 1757 | */ |
| 1759 | 1758 | function autoriser_sans_cookie($nom, $strict = false) { |
| 1760 | - static $autsanscookie = ['install', 'base_repair']; |
|
| 1759 | + static $autsanscookie = ['install', 'base_repair']; |
|
| 1761 | 1760 | |
| 1762 | - if (in_array($nom, $autsanscookie)) { |
|
| 1763 | - if (test_espace_prive()) { |
|
| 1764 | - include_spip('base/connect_sql'); |
|
| 1765 | - if (!$strict or !spip_connect()) { |
|
| 1766 | - return true; |
|
| 1767 | - } |
|
| 1768 | - } |
|
| 1769 | - } |
|
| 1770 | - return false; |
|
| 1761 | + if (in_array($nom, $autsanscookie)) { |
|
| 1762 | + if (test_espace_prive()) { |
|
| 1763 | + include_spip('base/connect_sql'); |
|
| 1764 | + if (!$strict or !spip_connect()) { |
|
| 1765 | + return true; |
|
| 1766 | + } |
|
| 1767 | + } |
|
| 1768 | + } |
|
| 1769 | + return false; |
|
| 1771 | 1770 | } |
| 1772 | 1771 | |
| 1773 | 1772 | /** |
@@ -1777,60 +1776,60 @@ discard block |
||
| 1777 | 1776 | * @return string |
| 1778 | 1777 | */ |
| 1779 | 1778 | function charger_fonction_url(string $quoi, string $type = '') { |
| 1780 | - if ($type === 'defaut') { |
|
| 1781 | - $objet = objet_type($quoi); |
|
| 1782 | - if ( |
|
| 1783 | - $f = charger_fonction('generer_' . $objet . '_url', 'urls', true) |
|
| 1784 | - // deprecated |
|
| 1785 | - or $f = charger_fonction('generer_url_' . $objet, 'urls', true) |
|
| 1786 | - ) { |
|
| 1787 | - return $f; |
|
| 1788 | - } |
|
| 1789 | - return ''; |
|
| 1790 | - } |
|
| 1791 | - |
|
| 1792 | - $url_type = $type; |
|
| 1793 | - if (!$url_type) { |
|
| 1794 | - $url_type = $GLOBALS['type_urls'] ?? $GLOBALS['meta']['type_urls'] ?? 'page'; // sinon type "page" par défaut |
|
| 1795 | - } |
|
| 1796 | - |
|
| 1797 | - // inclure le module d'url |
|
| 1798 | - include_spip('urls/' . $url_type); |
|
| 1799 | - |
|
| 1800 | - switch ($quoi) { |
|
| 1801 | - case 'page': |
|
| 1802 | - if ( |
|
| 1803 | - function_exists($f = "urls_{$url_type}_generer_url_page") |
|
| 1804 | - or function_exists($f .= '_dist') |
|
| 1805 | - // ou une fonction custom utilisateur independante du type d'url |
|
| 1806 | - or function_exists($f = 'generer_url_page') |
|
| 1807 | - or function_exists($f .= '_dist') |
|
| 1808 | - ) { |
|
| 1809 | - return $f; |
|
| 1810 | - } |
|
| 1811 | - // pas de compat ancienne version ici, c'est une nouvelle feature |
|
| 1812 | - return ''; |
|
| 1813 | - case 'objet': |
|
| 1814 | - case 'decoder': |
|
| 1815 | - default: |
|
| 1816 | - $fquoi = ($quoi === 'objet' ? 'generer_url_objet' : 'decoder_url'); |
|
| 1817 | - if ( |
|
| 1818 | - function_exists($f = "urls_{$url_type}_{$fquoi}") |
|
| 1819 | - or function_exists($f .= '_dist') |
|
| 1820 | - ) { |
|
| 1821 | - return $f; |
|
| 1822 | - } |
|
| 1823 | - // est-ce qu'on a une ancienne fonction urls_xxx_dist() ? |
|
| 1824 | - // c'est un ancien module d'url, on appelle l'ancienne fonction qui fait tout |
|
| 1825 | - if ($f = charger_fonction($url_type, 'urls', true)) { |
|
| 1826 | - return $f; |
|
| 1827 | - } |
|
| 1828 | - // sinon on se rabat sur les urls page si ce n'est pas un type demande explicitement |
|
| 1829 | - if (!$type and $url_type !== 'page'){ |
|
| 1830 | - return charger_fonction_url($quoi, 'page'); |
|
| 1831 | - } |
|
| 1832 | - return ''; |
|
| 1833 | - } |
|
| 1779 | + if ($type === 'defaut') { |
|
| 1780 | + $objet = objet_type($quoi); |
|
| 1781 | + if ( |
|
| 1782 | + $f = charger_fonction('generer_' . $objet . '_url', 'urls', true) |
|
| 1783 | + // deprecated |
|
| 1784 | + or $f = charger_fonction('generer_url_' . $objet, 'urls', true) |
|
| 1785 | + ) { |
|
| 1786 | + return $f; |
|
| 1787 | + } |
|
| 1788 | + return ''; |
|
| 1789 | + } |
|
| 1790 | + |
|
| 1791 | + $url_type = $type; |
|
| 1792 | + if (!$url_type) { |
|
| 1793 | + $url_type = $GLOBALS['type_urls'] ?? $GLOBALS['meta']['type_urls'] ?? 'page'; // sinon type "page" par défaut |
|
| 1794 | + } |
|
| 1795 | + |
|
| 1796 | + // inclure le module d'url |
|
| 1797 | + include_spip('urls/' . $url_type); |
|
| 1798 | + |
|
| 1799 | + switch ($quoi) { |
|
| 1800 | + case 'page': |
|
| 1801 | + if ( |
|
| 1802 | + function_exists($f = "urls_{$url_type}_generer_url_page") |
|
| 1803 | + or function_exists($f .= '_dist') |
|
| 1804 | + // ou une fonction custom utilisateur independante du type d'url |
|
| 1805 | + or function_exists($f = 'generer_url_page') |
|
| 1806 | + or function_exists($f .= '_dist') |
|
| 1807 | + ) { |
|
| 1808 | + return $f; |
|
| 1809 | + } |
|
| 1810 | + // pas de compat ancienne version ici, c'est une nouvelle feature |
|
| 1811 | + return ''; |
|
| 1812 | + case 'objet': |
|
| 1813 | + case 'decoder': |
|
| 1814 | + default: |
|
| 1815 | + $fquoi = ($quoi === 'objet' ? 'generer_url_objet' : 'decoder_url'); |
|
| 1816 | + if ( |
|
| 1817 | + function_exists($f = "urls_{$url_type}_{$fquoi}") |
|
| 1818 | + or function_exists($f .= '_dist') |
|
| 1819 | + ) { |
|
| 1820 | + return $f; |
|
| 1821 | + } |
|
| 1822 | + // est-ce qu'on a une ancienne fonction urls_xxx_dist() ? |
|
| 1823 | + // c'est un ancien module d'url, on appelle l'ancienne fonction qui fait tout |
|
| 1824 | + if ($f = charger_fonction($url_type, 'urls', true)) { |
|
| 1825 | + return $f; |
|
| 1826 | + } |
|
| 1827 | + // sinon on se rabat sur les urls page si ce n'est pas un type demande explicitement |
|
| 1828 | + if (!$type and $url_type !== 'page'){ |
|
| 1829 | + return charger_fonction_url($quoi, 'page'); |
|
| 1830 | + } |
|
| 1831 | + return ''; |
|
| 1832 | + } |
|
| 1834 | 1833 | } |
| 1835 | 1834 | |
| 1836 | 1835 | |
@@ -1859,48 +1858,48 @@ discard block |
||
| 1859 | 1858 | * (cas des raccourcis personalises [->spip20] : il faut implementer une fonction generer_spip_url et une fonction generer_spip_url_ecrire) |
| 1860 | 1859 | */ |
| 1861 | 1860 | function generer_objet_url($id, string $entite, string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string { |
| 1862 | - if ($public === null) { |
|
| 1863 | - $public = !test_espace_prive(); |
|
| 1864 | - } |
|
| 1865 | - $id = intval($id); |
|
| 1866 | - $entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet... |
|
| 1867 | - |
|
| 1868 | - if (!$public) { |
|
| 1869 | - if (!$entite) { |
|
| 1870 | - return ''; |
|
| 1871 | - } |
|
| 1872 | - if (!function_exists('generer_objet_url_ecrire')) { |
|
| 1873 | - include_spip('inc/urls'); |
|
| 1874 | - } |
|
| 1875 | - $res = generer_objet_url_ecrire($id, $entite, $args, $ancre, false, $connect); |
|
| 1876 | - } else { |
|
| 1877 | - $f = charger_fonction_url('objet', $type ?? ''); |
|
| 1878 | - |
|
| 1879 | - // @deprecated si $entite='', on veut la fonction de passage URL ==> id |
|
| 1880 | - // @see charger_fonction_url |
|
| 1881 | - if (!$entite) { |
|
| 1882 | - return $f; |
|
| 1883 | - } |
|
| 1884 | - |
|
| 1885 | - // mais d'abord il faut tester le cas des urls sur une |
|
| 1886 | - // base distante |
|
| 1887 | - if ( |
|
| 1888 | - $connect |
|
| 1889 | - and $g = charger_fonction('connect', 'urls', true) |
|
| 1890 | - ) { |
|
| 1891 | - $f = $g; |
|
| 1892 | - } |
|
| 1893 | - |
|
| 1894 | - $res = $f(intval($id), $entite, $args ?: '', $ancre ?: '', $connect); |
|
| 1895 | - } |
|
| 1896 | - if ($res) { |
|
| 1897 | - return $res; |
|
| 1898 | - } |
|
| 1899 | - |
|
| 1900 | - // On a ete gentil mais la .... |
|
| 1901 | - spip_log("generer_objet_url: entite $entite ($f) inconnue $type $public $connect", _LOG_ERREUR); |
|
| 1902 | - |
|
| 1903 | - return ''; |
|
| 1861 | + if ($public === null) { |
|
| 1862 | + $public = !test_espace_prive(); |
|
| 1863 | + } |
|
| 1864 | + $id = intval($id); |
|
| 1865 | + $entite = objet_type($entite); // cas particulier d'appels sur objet/id_objet... |
|
| 1866 | + |
|
| 1867 | + if (!$public) { |
|
| 1868 | + if (!$entite) { |
|
| 1869 | + return ''; |
|
| 1870 | + } |
|
| 1871 | + if (!function_exists('generer_objet_url_ecrire')) { |
|
| 1872 | + include_spip('inc/urls'); |
|
| 1873 | + } |
|
| 1874 | + $res = generer_objet_url_ecrire($id, $entite, $args, $ancre, false, $connect); |
|
| 1875 | + } else { |
|
| 1876 | + $f = charger_fonction_url('objet', $type ?? ''); |
|
| 1877 | + |
|
| 1878 | + // @deprecated si $entite='', on veut la fonction de passage URL ==> id |
|
| 1879 | + // @see charger_fonction_url |
|
| 1880 | + if (!$entite) { |
|
| 1881 | + return $f; |
|
| 1882 | + } |
|
| 1883 | + |
|
| 1884 | + // mais d'abord il faut tester le cas des urls sur une |
|
| 1885 | + // base distante |
|
| 1886 | + if ( |
|
| 1887 | + $connect |
|
| 1888 | + and $g = charger_fonction('connect', 'urls', true) |
|
| 1889 | + ) { |
|
| 1890 | + $f = $g; |
|
| 1891 | + } |
|
| 1892 | + |
|
| 1893 | + $res = $f(intval($id), $entite, $args ?: '', $ancre ?: '', $connect); |
|
| 1894 | + } |
|
| 1895 | + if ($res) { |
|
| 1896 | + return $res; |
|
| 1897 | + } |
|
| 1898 | + |
|
| 1899 | + // On a ete gentil mais la .... |
|
| 1900 | + spip_log("generer_objet_url: entite $entite ($f) inconnue $type $public $connect", _LOG_ERREUR); |
|
| 1901 | + |
|
| 1902 | + return ''; |
|
| 1904 | 1903 | } |
| 1905 | 1904 | |
| 1906 | 1905 | /** |
@@ -1908,10 +1907,10 @@ discard block |
||
| 1908 | 1907 | * @see generer_objet_url |
| 1909 | 1908 | */ |
| 1910 | 1909 | function generer_url_entite($id = 0, $entite = '', $args = '', $ancre = '', $public = null, $type = null) { |
| 1911 | - if ($public and is_string($public)) { |
|
| 1912 | - return generer_objet_url(intval($id), $entite, $args ?: '', $ancre ?: '', true, $type ?? '', $public); |
|
| 1913 | - } |
|
| 1914 | - return generer_objet_url(intval($id), $entite, $args ?: '', $ancre ?: '', $public, $type ?? ''); |
|
| 1910 | + if ($public and is_string($public)) { |
|
| 1911 | + return generer_objet_url(intval($id), $entite, $args ?: '', $ancre ?: '', true, $type ?? '', $public); |
|
| 1912 | + } |
|
| 1913 | + return generer_objet_url(intval($id), $entite, $args ?: '', $ancre ?: '', $public, $type ?? ''); |
|
| 1915 | 1914 | } |
| 1916 | 1915 | |
| 1917 | 1916 | /** |
@@ -1923,19 +1922,19 @@ discard block |
||
| 1923 | 1922 | * @return string |
| 1924 | 1923 | */ |
| 1925 | 1924 | function generer_objet_url_ecrire_edit($id, string $entite, string $args = '', string $ancre = ''): string { |
| 1926 | - $id = intval($id); |
|
| 1927 | - $exec = objet_info($entite, 'url_edit'); |
|
| 1928 | - $url = generer_url_ecrire($exec, $args); |
|
| 1929 | - if (intval($id)) { |
|
| 1930 | - $url = parametre_url($url, id_table_objet($entite), $id); |
|
| 1931 | - } else { |
|
| 1932 | - $url = parametre_url($url, 'new', 'oui'); |
|
| 1933 | - } |
|
| 1934 | - if ($ancre) { |
|
| 1935 | - $url = ancre_url($url, $ancre); |
|
| 1936 | - } |
|
| 1925 | + $id = intval($id); |
|
| 1926 | + $exec = objet_info($entite, 'url_edit'); |
|
| 1927 | + $url = generer_url_ecrire($exec, $args); |
|
| 1928 | + if (intval($id)) { |
|
| 1929 | + $url = parametre_url($url, id_table_objet($entite), $id); |
|
| 1930 | + } else { |
|
| 1931 | + $url = parametre_url($url, 'new', 'oui'); |
|
| 1932 | + } |
|
| 1933 | + if ($ancre) { |
|
| 1934 | + $url = ancre_url($url, $ancre); |
|
| 1935 | + } |
|
| 1937 | 1936 | |
| 1938 | - return $url; |
|
| 1937 | + return $url; |
|
| 1939 | 1938 | } |
| 1940 | 1939 | |
| 1941 | 1940 | /** |
@@ -1943,18 +1942,18 @@ discard block |
||
| 1943 | 1942 | * @see generer_objet_url_ecrire_edit |
| 1944 | 1943 | */ |
| 1945 | 1944 | function generer_url_ecrire_entite_edit($id, $entite, $args = '', $ancre = '') { |
| 1946 | - return generer_objet_url_ecrire_edit(intval($id), $entite, $args, $ancre); |
|
| 1945 | + return generer_objet_url_ecrire_edit(intval($id), $entite, $args, $ancre); |
|
| 1947 | 1946 | } |
| 1948 | 1947 | |
| 1949 | 1948 | |
| 1950 | 1949 | function urls_connect_dist($i, &$entite, $args = '', $ancre = '', $public = null) { |
| 1951 | - include_spip('base/connect_sql'); |
|
| 1952 | - $id_type = id_table_objet($entite, $public); |
|
| 1950 | + include_spip('base/connect_sql'); |
|
| 1951 | + $id_type = id_table_objet($entite, $public); |
|
| 1953 | 1952 | |
| 1954 | - return _DIR_RACINE . get_spip_script('./') |
|
| 1955 | - . '?' . _SPIP_PAGE . "=$entite&$id_type=$i&connect=$public" |
|
| 1956 | - . (!$args ? '' : "&$args") |
|
| 1957 | - . (!$ancre ? '' : "#$ancre"); |
|
| 1953 | + return _DIR_RACINE . get_spip_script('./') |
|
| 1954 | + . '?' . _SPIP_PAGE . "=$entite&$id_type=$i&connect=$public" |
|
| 1955 | + . (!$args ? '' : "&$args") |
|
| 1956 | + . (!$ancre ? '' : "#$ancre"); |
|
| 1958 | 1957 | } |
| 1959 | 1958 | |
| 1960 | 1959 | |
@@ -1965,18 +1964,18 @@ discard block |
||
| 1965 | 1964 | * @return string |
| 1966 | 1965 | */ |
| 1967 | 1966 | function urlencode_1738($url) { |
| 1968 | - if (preg_match(',[^\x00-\x7E],sS', $url)) { |
|
| 1969 | - $uri = ''; |
|
| 1970 | - for ($i = 0; $i < strlen($url); $i++) { |
|
| 1971 | - if (ord($a = $url[$i]) > 127) { |
|
| 1972 | - $a = rawurlencode($a); |
|
| 1973 | - } |
|
| 1974 | - $uri .= $a; |
|
| 1975 | - } |
|
| 1976 | - $url = $uri; |
|
| 1977 | - } |
|
| 1967 | + if (preg_match(',[^\x00-\x7E],sS', $url)) { |
|
| 1968 | + $uri = ''; |
|
| 1969 | + for ($i = 0; $i < strlen($url); $i++) { |
|
| 1970 | + if (ord($a = $url[$i]) > 127) { |
|
| 1971 | + $a = rawurlencode($a); |
|
| 1972 | + } |
|
| 1973 | + $uri .= $a; |
|
| 1974 | + } |
|
| 1975 | + $url = $uri; |
|
| 1976 | + } |
|
| 1978 | 1977 | |
| 1979 | - return quote_amp($url); |
|
| 1978 | + return quote_amp($url); |
|
| 1980 | 1979 | } |
| 1981 | 1980 | |
| 1982 | 1981 | /** |
@@ -1992,14 +1991,14 @@ discard block |
||
| 1992 | 1991 | * @return string |
| 1993 | 1992 | */ |
| 1994 | 1993 | function generer_objet_url_absolue($id = 0, string $entite = '', string $args = '', string $ancre = '', ?bool $public = null, string $type = '', string $connect = ''): string { |
| 1995 | - $id = intval($id); |
|
| 1996 | - $h = generer_objet_url($id, $entite, $args, $ancre, $public, $type, $connect); |
|
| 1997 | - if (!preg_match(',^\w+:,', $h)) { |
|
| 1998 | - include_spip('inc/filtres_mini'); |
|
| 1999 | - $h = url_absolue($h); |
|
| 2000 | - } |
|
| 1994 | + $id = intval($id); |
|
| 1995 | + $h = generer_objet_url($id, $entite, $args, $ancre, $public, $type, $connect); |
|
| 1996 | + if (!preg_match(',^\w+:,', $h)) { |
|
| 1997 | + include_spip('inc/filtres_mini'); |
|
| 1998 | + $h = url_absolue($h); |
|
| 1999 | + } |
|
| 2001 | 2000 | |
| 2002 | - return $h; |
|
| 2001 | + return $h; |
|
| 2003 | 2002 | } |
| 2004 | 2003 | |
| 2005 | 2004 | /** |
@@ -2007,7 +2006,7 @@ discard block |
||
| 2007 | 2006 | * @see generer_objet_url_absolue |
| 2008 | 2007 | */ |
| 2009 | 2008 | function generer_url_entite_absolue($id = 0, $entite = '', $args = '', $ancre = '', $connect = null) { |
| 2010 | - return generer_objet_url_absolue(intval($id), $entite, $args, $ancre, true, '', $connect); |
|
| 2009 | + return generer_objet_url_absolue(intval($id), $entite, $args, $ancre, true, '', $connect); |
|
| 2011 | 2010 | } |
| 2012 | 2011 | |
| 2013 | 2012 | |
@@ -2023,11 +2022,11 @@ discard block |
||
| 2023 | 2022 | * true si la valeur est considérée active ; false sinon. |
| 2024 | 2023 | **/ |
| 2025 | 2024 | function test_valeur_serveur($truc) { |
| 2026 | - if (!$truc) { |
|
| 2027 | - return false; |
|
| 2028 | - } |
|
| 2025 | + if (!$truc) { |
|
| 2026 | + return false; |
|
| 2027 | + } |
|
| 2029 | 2028 | |
| 2030 | - return (strtolower($truc) !== 'off'); |
|
| 2029 | + return (strtolower($truc) !== 'off'); |
|
| 2031 | 2030 | } |
| 2032 | 2031 | |
| 2033 | 2032 | // |
@@ -2055,82 +2054,82 @@ discard block |
||
| 2055 | 2054 | */ |
| 2056 | 2055 | function url_de_base($profondeur = null) { |
| 2057 | 2056 | |
| 2058 | - static $url = []; |
|
| 2059 | - if (is_array($profondeur)) { |
|
| 2060 | - return $url = $profondeur; |
|
| 2061 | - } |
|
| 2062 | - if ($profondeur === false) { |
|
| 2063 | - return $url; |
|
| 2064 | - } |
|
| 2065 | - |
|
| 2066 | - if (is_null($profondeur)) { |
|
| 2067 | - $profondeur = $GLOBALS['profondeur_url'] ?? (_DIR_RESTREINT ? 0 : 1); |
|
| 2068 | - } |
|
| 2069 | - |
|
| 2070 | - if (isset($url[$profondeur])) { |
|
| 2071 | - return $url[$profondeur]; |
|
| 2072 | - } |
|
| 2073 | - |
|
| 2074 | - $http = 'http'; |
|
| 2075 | - |
|
| 2076 | - if ( |
|
| 2077 | - isset($_SERVER['SCRIPT_URI']) |
|
| 2078 | - and substr($_SERVER['SCRIPT_URI'], 0, 5) == 'https' |
|
| 2079 | - ) { |
|
| 2080 | - $http = 'https'; |
|
| 2081 | - } elseif ( |
|
| 2082 | - isset($_SERVER['HTTPS']) |
|
| 2083 | - and test_valeur_serveur($_SERVER['HTTPS']) |
|
| 2084 | - ) { |
|
| 2085 | - $http = 'https'; |
|
| 2086 | - } |
|
| 2087 | - |
|
| 2088 | - // note : HTTP_HOST contient le :port si necessaire |
|
| 2089 | - $host = $_SERVER['HTTP_HOST'] ?? null; |
|
| 2090 | - // si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback |
|
| 2091 | - if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) { |
|
| 2092 | - $host = $GLOBALS['meta']['adresse_site']; |
|
| 2093 | - if ($scheme = parse_url($host, PHP_URL_SCHEME)) { |
|
| 2094 | - $http = $scheme; |
|
| 2095 | - $host = str_replace("{$scheme}://", '', $host); |
|
| 2096 | - } |
|
| 2097 | - } |
|
| 2098 | - if ( |
|
| 2099 | - isset($_SERVER['SERVER_PORT']) |
|
| 2100 | - and $port = $_SERVER['SERVER_PORT'] |
|
| 2101 | - and strpos($host, ':') == false |
|
| 2102 | - ) { |
|
| 2103 | - if (!defined('_PORT_HTTP_STANDARD')) { |
|
| 2104 | - define('_PORT_HTTP_STANDARD', '80'); |
|
| 2105 | - } |
|
| 2106 | - if (!defined('_PORT_HTTPS_STANDARD')) { |
|
| 2107 | - define('_PORT_HTTPS_STANDARD', '443'); |
|
| 2108 | - } |
|
| 2109 | - if ($http == 'http' and !in_array($port, explode(',', _PORT_HTTP_STANDARD))) { |
|
| 2110 | - $host .= ":$port"; |
|
| 2111 | - } |
|
| 2112 | - if ($http == 'https' and !in_array($port, explode(',', _PORT_HTTPS_STANDARD))) { |
|
| 2113 | - $host .= ":$port"; |
|
| 2114 | - } |
|
| 2115 | - } |
|
| 2116 | - |
|
| 2117 | - if (!$GLOBALS['REQUEST_URI']) { |
|
| 2118 | - if (isset($_SERVER['REQUEST_URI'])) { |
|
| 2119 | - $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI']; |
|
| 2120 | - } else { |
|
| 2121 | - $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : ''; |
|
| 2122 | - if ( |
|
| 2123 | - !empty($_SERVER['QUERY_STRING']) |
|
| 2124 | - and !strpos($_SERVER['REQUEST_URI'], '?') |
|
| 2125 | - ) { |
|
| 2126 | - $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; |
|
| 2127 | - } |
|
| 2128 | - } |
|
| 2129 | - } |
|
| 2130 | - |
|
| 2131 | - $url[$profondeur] = url_de_($http, $host, $GLOBALS['REQUEST_URI'], $profondeur); |
|
| 2132 | - |
|
| 2133 | - return $url[$profondeur]; |
|
| 2057 | + static $url = []; |
|
| 2058 | + if (is_array($profondeur)) { |
|
| 2059 | + return $url = $profondeur; |
|
| 2060 | + } |
|
| 2061 | + if ($profondeur === false) { |
|
| 2062 | + return $url; |
|
| 2063 | + } |
|
| 2064 | + |
|
| 2065 | + if (is_null($profondeur)) { |
|
| 2066 | + $profondeur = $GLOBALS['profondeur_url'] ?? (_DIR_RESTREINT ? 0 : 1); |
|
| 2067 | + } |
|
| 2068 | + |
|
| 2069 | + if (isset($url[$profondeur])) { |
|
| 2070 | + return $url[$profondeur]; |
|
| 2071 | + } |
|
| 2072 | + |
|
| 2073 | + $http = 'http'; |
|
| 2074 | + |
|
| 2075 | + if ( |
|
| 2076 | + isset($_SERVER['SCRIPT_URI']) |
|
| 2077 | + and substr($_SERVER['SCRIPT_URI'], 0, 5) == 'https' |
|
| 2078 | + ) { |
|
| 2079 | + $http = 'https'; |
|
| 2080 | + } elseif ( |
|
| 2081 | + isset($_SERVER['HTTPS']) |
|
| 2082 | + and test_valeur_serveur($_SERVER['HTTPS']) |
|
| 2083 | + ) { |
|
| 2084 | + $http = 'https'; |
|
| 2085 | + } |
|
| 2086 | + |
|
| 2087 | + // note : HTTP_HOST contient le :port si necessaire |
|
| 2088 | + $host = $_SERVER['HTTP_HOST'] ?? null; |
|
| 2089 | + // si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback |
|
| 2090 | + if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) { |
|
| 2091 | + $host = $GLOBALS['meta']['adresse_site']; |
|
| 2092 | + if ($scheme = parse_url($host, PHP_URL_SCHEME)) { |
|
| 2093 | + $http = $scheme; |
|
| 2094 | + $host = str_replace("{$scheme}://", '', $host); |
|
| 2095 | + } |
|
| 2096 | + } |
|
| 2097 | + if ( |
|
| 2098 | + isset($_SERVER['SERVER_PORT']) |
|
| 2099 | + and $port = $_SERVER['SERVER_PORT'] |
|
| 2100 | + and strpos($host, ':') == false |
|
| 2101 | + ) { |
|
| 2102 | + if (!defined('_PORT_HTTP_STANDARD')) { |
|
| 2103 | + define('_PORT_HTTP_STANDARD', '80'); |
|
| 2104 | + } |
|
| 2105 | + if (!defined('_PORT_HTTPS_STANDARD')) { |
|
| 2106 | + define('_PORT_HTTPS_STANDARD', '443'); |
|
| 2107 | + } |
|
| 2108 | + if ($http == 'http' and !in_array($port, explode(',', _PORT_HTTP_STANDARD))) { |
|
| 2109 | + $host .= ":$port"; |
|
| 2110 | + } |
|
| 2111 | + if ($http == 'https' and !in_array($port, explode(',', _PORT_HTTPS_STANDARD))) { |
|
| 2112 | + $host .= ":$port"; |
|
| 2113 | + } |
|
| 2114 | + } |
|
| 2115 | + |
|
| 2116 | + if (!$GLOBALS['REQUEST_URI']) { |
|
| 2117 | + if (isset($_SERVER['REQUEST_URI'])) { |
|
| 2118 | + $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI']; |
|
| 2119 | + } else { |
|
| 2120 | + $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : ''; |
|
| 2121 | + if ( |
|
| 2122 | + !empty($_SERVER['QUERY_STRING']) |
|
| 2123 | + and !strpos($_SERVER['REQUEST_URI'], '?') |
|
| 2124 | + ) { |
|
| 2125 | + $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; |
|
| 2126 | + } |
|
| 2127 | + } |
|
| 2128 | + } |
|
| 2129 | + |
|
| 2130 | + $url[$profondeur] = url_de_($http, $host, $GLOBALS['REQUEST_URI'], $profondeur); |
|
| 2131 | + |
|
| 2132 | + return $url[$profondeur]; |
|
| 2134 | 2133 | } |
| 2135 | 2134 | |
| 2136 | 2135 | /** |
@@ -2143,26 +2142,26 @@ discard block |
||
| 2143 | 2142 | * @return string |
| 2144 | 2143 | */ |
| 2145 | 2144 | function url_de_($http, $host, $request, $prof = 0) { |
| 2146 | - $prof = max($prof, 0); |
|
| 2145 | + $prof = max($prof, 0); |
|
| 2147 | 2146 | |
| 2148 | - $myself = ltrim($request, '/'); |
|
| 2149 | - # supprimer la chaine de GET |
|
| 2150 | - [$myself] = explode('?', $myself); |
|
| 2151 | - // vieux mode HTTP qui envoie après le nom de la methode l'URL compléte |
|
| 2152 | - // protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"] |
|
| 2153 | - if (strpos($myself, '://') !== false) { |
|
| 2154 | - $myself = explode('://', $myself); |
|
| 2155 | - array_shift($myself); |
|
| 2156 | - $myself = implode('://', $myself); |
|
| 2157 | - $myself = explode('/', $myself); |
|
| 2158 | - array_shift($myself); |
|
| 2159 | - $myself = implode('/', $myself); |
|
| 2160 | - } |
|
| 2161 | - $url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/'; |
|
| 2147 | + $myself = ltrim($request, '/'); |
|
| 2148 | + # supprimer la chaine de GET |
|
| 2149 | + [$myself] = explode('?', $myself); |
|
| 2150 | + // vieux mode HTTP qui envoie après le nom de la methode l'URL compléte |
|
| 2151 | + // protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"] |
|
| 2152 | + if (strpos($myself, '://') !== false) { |
|
| 2153 | + $myself = explode('://', $myself); |
|
| 2154 | + array_shift($myself); |
|
| 2155 | + $myself = implode('://', $myself); |
|
| 2156 | + $myself = explode('/', $myself); |
|
| 2157 | + array_shift($myself); |
|
| 2158 | + $myself = implode('/', $myself); |
|
| 2159 | + } |
|
| 2160 | + $url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/'; |
|
| 2162 | 2161 | |
| 2163 | - $url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/'); |
|
| 2162 | + $url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/'); |
|
| 2164 | 2163 | |
| 2165 | - return $url; |
|
| 2164 | + return $url; |
|
| 2166 | 2165 | } |
| 2167 | 2166 | |
| 2168 | 2167 | |
@@ -2197,26 +2196,26 @@ discard block |
||
| 2197 | 2196 | * @return string URL |
| 2198 | 2197 | **/ |
| 2199 | 2198 | function generer_url_ecrire(?string $script = '', $args = '', $no_entities = false, $rel = false) { |
| 2200 | - $script ??= ''; |
|
| 2201 | - if (!$rel) { |
|
| 2202 | - $rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT; |
|
| 2203 | - } else { |
|
| 2204 | - if (!is_string($rel)) { |
|
| 2205 | - $rel = _DIR_RESTREINT ?: './' . _SPIP_ECRIRE_SCRIPT; |
|
| 2206 | - } |
|
| 2207 | - } |
|
| 2208 | - |
|
| 2209 | - [$script, $ancre] = array_pad(explode('#', $script), 2, null); |
|
| 2210 | - if ($script and ($script <> 'accueil' or $rel)) { |
|
| 2211 | - $args = "?exec=$script" . (!$args ? '' : "&$args"); |
|
| 2212 | - } elseif ($args) { |
|
| 2213 | - $args = "?$args"; |
|
| 2214 | - } |
|
| 2215 | - if ($ancre) { |
|
| 2216 | - $args .= "#$ancre"; |
|
| 2217 | - } |
|
| 2218 | - |
|
| 2219 | - return $rel . ($no_entities ? $args : str_replace('&', '&', $args)); |
|
| 2199 | + $script ??= ''; |
|
| 2200 | + if (!$rel) { |
|
| 2201 | + $rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT; |
|
| 2202 | + } else { |
|
| 2203 | + if (!is_string($rel)) { |
|
| 2204 | + $rel = _DIR_RESTREINT ?: './' . _SPIP_ECRIRE_SCRIPT; |
|
| 2205 | + } |
|
| 2206 | + } |
|
| 2207 | + |
|
| 2208 | + [$script, $ancre] = array_pad(explode('#', $script), 2, null); |
|
| 2209 | + if ($script and ($script <> 'accueil' or $rel)) { |
|
| 2210 | + $args = "?exec=$script" . (!$args ? '' : "&$args"); |
|
| 2211 | + } elseif ($args) { |
|
| 2212 | + $args = "?$args"; |
|
| 2213 | + } |
|
| 2214 | + if ($ancre) { |
|
| 2215 | + $args .= "#$ancre"; |
|
| 2216 | + } |
|
| 2217 | + |
|
| 2218 | + return $rel . ($no_entities ? $args : str_replace('&', '&', $args)); |
|
| 2220 | 2219 | } |
| 2221 | 2220 | |
| 2222 | 2221 | // |
@@ -2238,15 +2237,15 @@ discard block |
||
| 2238 | 2237 | * Nom du fichier (constante _SPIP_SCRIPT), sinon nom par défaut |
| 2239 | 2238 | **/ |
| 2240 | 2239 | function get_spip_script($default = '') { |
| 2241 | - if (!defined('_SPIP_SCRIPT')) { |
|
| 2242 | - return 'spip.php'; |
|
| 2243 | - } |
|
| 2244 | - # cas define('_SPIP_SCRIPT', ''); |
|
| 2245 | - if (_SPIP_SCRIPT) { |
|
| 2246 | - return _SPIP_SCRIPT; |
|
| 2247 | - } else { |
|
| 2248 | - return $default; |
|
| 2249 | - } |
|
| 2240 | + if (!defined('_SPIP_SCRIPT')) { |
|
| 2241 | + return 'spip.php'; |
|
| 2242 | + } |
|
| 2243 | + # cas define('_SPIP_SCRIPT', ''); |
|
| 2244 | + if (_SPIP_SCRIPT) { |
|
| 2245 | + return _SPIP_SCRIPT; |
|
| 2246 | + } else { |
|
| 2247 | + return $default; |
|
| 2248 | + } |
|
| 2250 | 2249 | } |
| 2251 | 2250 | |
| 2252 | 2251 | /** |
@@ -2275,45 +2274,45 @@ discard block |
||
| 2275 | 2274 | * @return string URL |
| 2276 | 2275 | **/ |
| 2277 | 2276 | function generer_url_public($script = '', $args = '', $no_entities = false, $rel = true, $action = '') { |
| 2278 | - // si le script est une action (spip_pass, spip_inscription), |
|
| 2279 | - // standardiser vers la nouvelle API |
|
| 2280 | - |
|
| 2281 | - if (is_array($args)) { |
|
| 2282 | - $args = http_build_query($args); |
|
| 2283 | - } |
|
| 2284 | - |
|
| 2285 | - $url = ''; |
|
| 2286 | - if ($f = charger_fonction_url('page')) { |
|
| 2287 | - $url = $f($script, $args); |
|
| 2288 | - if ($url and !$rel) { |
|
| 2289 | - include_spip('inc/filtres_mini'); |
|
| 2290 | - $url = url_absolue($url); |
|
| 2291 | - } |
|
| 2292 | - } |
|
| 2293 | - if (!$url) { |
|
| 2294 | - if (!$action) { |
|
| 2295 | - $action = get_spip_script(); |
|
| 2296 | - } |
|
| 2297 | - if ($script) { |
|
| 2298 | - $action = parametre_url($action, _SPIP_PAGE, $script, '&'); |
|
| 2299 | - } |
|
| 2300 | - if ($args) { |
|
| 2301 | - $action .= (strpos($action, '?') !== false ? '&' : '?') . $args; |
|
| 2302 | - } |
|
| 2303 | - // ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide |
|
| 2304 | - $url = ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(',^/[.]/,', '/', "/$action")); |
|
| 2305 | - } |
|
| 2306 | - |
|
| 2307 | - if (!$no_entities) { |
|
| 2308 | - $url = quote_amp($url); |
|
| 2309 | - } |
|
| 2310 | - |
|
| 2311 | - return $url; |
|
| 2277 | + // si le script est une action (spip_pass, spip_inscription), |
|
| 2278 | + // standardiser vers la nouvelle API |
|
| 2279 | + |
|
| 2280 | + if (is_array($args)) { |
|
| 2281 | + $args = http_build_query($args); |
|
| 2282 | + } |
|
| 2283 | + |
|
| 2284 | + $url = ''; |
|
| 2285 | + if ($f = charger_fonction_url('page')) { |
|
| 2286 | + $url = $f($script, $args); |
|
| 2287 | + if ($url and !$rel) { |
|
| 2288 | + include_spip('inc/filtres_mini'); |
|
| 2289 | + $url = url_absolue($url); |
|
| 2290 | + } |
|
| 2291 | + } |
|
| 2292 | + if (!$url) { |
|
| 2293 | + if (!$action) { |
|
| 2294 | + $action = get_spip_script(); |
|
| 2295 | + } |
|
| 2296 | + if ($script) { |
|
| 2297 | + $action = parametre_url($action, _SPIP_PAGE, $script, '&'); |
|
| 2298 | + } |
|
| 2299 | + if ($args) { |
|
| 2300 | + $action .= (strpos($action, '?') !== false ? '&' : '?') . $args; |
|
| 2301 | + } |
|
| 2302 | + // ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide |
|
| 2303 | + $url = ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(',^/[.]/,', '/', "/$action")); |
|
| 2304 | + } |
|
| 2305 | + |
|
| 2306 | + if (!$no_entities) { |
|
| 2307 | + $url = quote_amp($url); |
|
| 2308 | + } |
|
| 2309 | + |
|
| 2310 | + return $url; |
|
| 2312 | 2311 | } |
| 2313 | 2312 | |
| 2314 | 2313 | function generer_url_prive($script, $args = '', $no_entities = false) { |
| 2315 | 2314 | |
| 2316 | - return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php'); |
|
| 2315 | + return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php'); |
|
| 2317 | 2316 | } |
| 2318 | 2317 | |
| 2319 | 2318 | // Pour les formulaires en methode POST, |
@@ -2338,19 +2337,19 @@ discard block |
||
| 2338 | 2337 | **/ |
| 2339 | 2338 | function generer_form_ecrire($script, $corps, $atts = '', $submit = '') { |
| 2340 | 2339 | |
| 2341 | - $script1 = explode('&', $script); |
|
| 2342 | - $script1 = reset($script1); |
|
| 2340 | + $script1 = explode('&', $script); |
|
| 2341 | + $script1 = reset($script1); |
|
| 2343 | 2342 | |
| 2344 | - return "<form action='" |
|
| 2345 | - . ($script ? generer_url_ecrire($script) : '') |
|
| 2346 | - . "' " |
|
| 2347 | - . ($atts ?: " method='post'") |
|
| 2348 | - . "><div>\n" |
|
| 2349 | - . "<input type='hidden' name='exec' value='$script1' />" |
|
| 2350 | - . $corps |
|
| 2351 | - . (!$submit ? '' : |
|
| 2352 | - ("<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><input class='fondo submit btn' type='submit' value=\"" . entites_html($submit) . '" /></div>')) |
|
| 2353 | - . "</div></form>\n"; |
|
| 2343 | + return "<form action='" |
|
| 2344 | + . ($script ? generer_url_ecrire($script) : '') |
|
| 2345 | + . "' " |
|
| 2346 | + . ($atts ?: " method='post'") |
|
| 2347 | + . "><div>\n" |
|
| 2348 | + . "<input type='hidden' name='exec' value='$script1' />" |
|
| 2349 | + . $corps |
|
| 2350 | + . (!$submit ? '' : |
|
| 2351 | + ("<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><input class='fondo submit btn' type='submit' value=\"" . entites_html($submit) . '" /></div>')) |
|
| 2352 | + . "</div></form>\n"; |
|
| 2354 | 2353 | } |
| 2355 | 2354 | |
| 2356 | 2355 | /** |
@@ -2367,22 +2366,22 @@ discard block |
||
| 2367 | 2366 | * @return string |
| 2368 | 2367 | */ |
| 2369 | 2368 | function generer_form_action($script, $corps, $atts = '', $public = false) { |
| 2370 | - // si l'on est dans l'espace prive, on garde dans l'url |
|
| 2371 | - // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire |
|
| 2372 | - // ou non de proceder a l'authentification (cas typique de l'install par exemple) |
|
| 2373 | - $h = (_DIR_RACINE and !$public) |
|
| 2374 | - ? generer_url_ecrire(_request('exec')) |
|
| 2375 | - : generer_url_public(); |
|
| 2369 | + // si l'on est dans l'espace prive, on garde dans l'url |
|
| 2370 | + // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire |
|
| 2371 | + // ou non de proceder a l'authentification (cas typique de l'install par exemple) |
|
| 2372 | + $h = (_DIR_RACINE and !$public) |
|
| 2373 | + ? generer_url_ecrire(_request('exec')) |
|
| 2374 | + : generer_url_public(); |
|
| 2376 | 2375 | |
| 2377 | - return "\n<form action='" . |
|
| 2378 | - $h . |
|
| 2379 | - "'" . |
|
| 2380 | - $atts . |
|
| 2381 | - ">\n" . |
|
| 2382 | - '<div>' . |
|
| 2383 | - "\n<input type='hidden' name='action' value='$script' />" . |
|
| 2384 | - $corps . |
|
| 2385 | - '</div></form>'; |
|
| 2376 | + return "\n<form action='" . |
|
| 2377 | + $h . |
|
| 2378 | + "'" . |
|
| 2379 | + $atts . |
|
| 2380 | + ">\n" . |
|
| 2381 | + '<div>' . |
|
| 2382 | + "\n<input type='hidden' name='action' value='$script' />" . |
|
| 2383 | + $corps . |
|
| 2384 | + '</div></form>'; |
|
| 2386 | 2385 | } |
| 2387 | 2386 | |
| 2388 | 2387 | /** |
@@ -2401,22 +2400,22 @@ discard block |
||
| 2401 | 2400 | * URL |
| 2402 | 2401 | */ |
| 2403 | 2402 | function generer_url_action($script, $args = '', $no_entities = false, $public = false) { |
| 2404 | - // si l'on est dans l'espace prive, on garde dans l'url |
|
| 2405 | - // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire |
|
| 2406 | - // ou non de proceder a l'authentification (cas typique de l'install par exemple) |
|
| 2407 | - $url = (_DIR_RACINE and !$public) |
|
| 2408 | - ? generer_url_ecrire(_request('exec')) |
|
| 2409 | - : generer_url_public('', '', false, false); |
|
| 2410 | - $url = parametre_url($url, 'action', $script); |
|
| 2411 | - if ($args) { |
|
| 2412 | - $url .= quote_amp('&' . $args); |
|
| 2413 | - } |
|
| 2403 | + // si l'on est dans l'espace prive, on garde dans l'url |
|
| 2404 | + // l'exec a l'origine de l'action, qui permet de savoir si il est necessaire |
|
| 2405 | + // ou non de proceder a l'authentification (cas typique de l'install par exemple) |
|
| 2406 | + $url = (_DIR_RACINE and !$public) |
|
| 2407 | + ? generer_url_ecrire(_request('exec')) |
|
| 2408 | + : generer_url_public('', '', false, false); |
|
| 2409 | + $url = parametre_url($url, 'action', $script); |
|
| 2410 | + if ($args) { |
|
| 2411 | + $url .= quote_amp('&' . $args); |
|
| 2412 | + } |
|
| 2414 | 2413 | |
| 2415 | - if ($no_entities) { |
|
| 2416 | - $url = str_replace('&', '&', $url); |
|
| 2417 | - } |
|
| 2414 | + if ($no_entities) { |
|
| 2415 | + $url = str_replace('&', '&', $url); |
|
| 2416 | + } |
|
| 2418 | 2417 | |
| 2419 | - return $url; |
|
| 2418 | + return $url; |
|
| 2420 | 2419 | } |
| 2421 | 2420 | |
| 2422 | 2421 | |
@@ -2435,23 +2434,23 @@ discard block |
||
| 2435 | 2434 | * URL |
| 2436 | 2435 | */ |
| 2437 | 2436 | function generer_url_api(string $script, string $path, string $args, bool $no_entities = false, ?bool $public = null) { |
| 2438 | - if (is_null($public)) { |
|
| 2439 | - $public = (_DIR_RACINE ? false : ''); |
|
| 2440 | - } |
|
| 2441 | - if (substr($script, -4) !== '.api') { |
|
| 2442 | - $script .= '.api'; |
|
| 2443 | - } |
|
| 2444 | - $url = |
|
| 2445 | - (($public ? _DIR_RACINE : _DIR_RESTREINT) ?: './') |
|
| 2446 | - . $script . '/' |
|
| 2447 | - . ($path ? trim($path, '/') : '') |
|
| 2448 | - . ($args ? '?' . quote_amp($args) : ''); |
|
| 2437 | + if (is_null($public)) { |
|
| 2438 | + $public = (_DIR_RACINE ? false : ''); |
|
| 2439 | + } |
|
| 2440 | + if (substr($script, -4) !== '.api') { |
|
| 2441 | + $script .= '.api'; |
|
| 2442 | + } |
|
| 2443 | + $url = |
|
| 2444 | + (($public ? _DIR_RACINE : _DIR_RESTREINT) ?: './') |
|
| 2445 | + . $script . '/' |
|
| 2446 | + . ($path ? trim($path, '/') : '') |
|
| 2447 | + . ($args ? '?' . quote_amp($args) : ''); |
|
| 2449 | 2448 | |
| 2450 | - if ($no_entities) { |
|
| 2451 | - $url = str_replace('&', '&', $url); |
|
| 2452 | - } |
|
| 2449 | + if ($no_entities) { |
|
| 2450 | + $url = str_replace('&', '&', $url); |
|
| 2451 | + } |
|
| 2453 | 2452 | |
| 2454 | - return $url; |
|
| 2453 | + return $url; |
|
| 2455 | 2454 | } |
| 2456 | 2455 | |
| 2457 | 2456 | |
@@ -2464,8 +2463,8 @@ discard block |
||
| 2464 | 2463 | * @param string $ta Répertoire temporaire accessible |
| 2465 | 2464 | */ |
| 2466 | 2465 | function spip_initialisation($pi = null, $pa = null, $ti = null, $ta = null) { |
| 2467 | - spip_initialisation_core($pi, $pa, $ti, $ta); |
|
| 2468 | - spip_initialisation_suite(); |
|
| 2466 | + spip_initialisation_core($pi, $pa, $ti, $ta); |
|
| 2467 | + spip_initialisation_suite(); |
|
| 2469 | 2468 | } |
| 2470 | 2469 | |
| 2471 | 2470 | /** |
@@ -2485,322 +2484,322 @@ discard block |
||
| 2485 | 2484 | * @param string $ta Répertoire temporaire accessible |
| 2486 | 2485 | */ |
| 2487 | 2486 | function spip_initialisation_core($pi = null, $pa = null, $ti = null, $ta = null) { |
| 2488 | - static $too_late = 0; |
|
| 2489 | - if ($too_late++) { |
|
| 2490 | - return; |
|
| 2491 | - } |
|
| 2492 | - |
|
| 2493 | - // Declaration des repertoires |
|
| 2494 | - |
|
| 2495 | - // le nom du repertoire plugins/ activables/desactivables |
|
| 2496 | - if (!defined('_DIR_PLUGINS')) { |
|
| 2497 | - define('_DIR_PLUGINS', _DIR_RACINE . 'plugins/'); |
|
| 2498 | - } |
|
| 2499 | - |
|
| 2500 | - // le nom du repertoire des extensions/ permanentes du core, toujours actives |
|
| 2501 | - if (!defined('_DIR_PLUGINS_DIST')) { |
|
| 2502 | - define('_DIR_PLUGINS_DIST', _DIR_RACINE . 'plugins-dist/'); |
|
| 2503 | - } |
|
| 2504 | - |
|
| 2505 | - // le nom du repertoire des librairies |
|
| 2506 | - if (!defined('_DIR_LIB')) { |
|
| 2507 | - define('_DIR_LIB', _DIR_RACINE . 'lib/'); |
|
| 2508 | - } |
|
| 2509 | - |
|
| 2510 | - if (!defined('_DIR_IMG')) { |
|
| 2511 | - define('_DIR_IMG', $pa); |
|
| 2512 | - } |
|
| 2513 | - if (!defined('_DIR_LOGOS')) { |
|
| 2514 | - define('_DIR_LOGOS', $pa); |
|
| 2515 | - } |
|
| 2516 | - if (!defined('_DIR_IMG_ICONES')) { |
|
| 2517 | - define('_DIR_IMG_ICONES', _DIR_LOGOS . 'icones/'); |
|
| 2518 | - } |
|
| 2519 | - |
|
| 2520 | - if (!defined('_DIR_DUMP')) { |
|
| 2521 | - define('_DIR_DUMP', $ti . 'dump/'); |
|
| 2522 | - } |
|
| 2523 | - if (!defined('_DIR_SESSIONS')) { |
|
| 2524 | - define('_DIR_SESSIONS', $ti . 'sessions/'); |
|
| 2525 | - } |
|
| 2526 | - if (!defined('_DIR_TRANSFERT')) { |
|
| 2527 | - define('_DIR_TRANSFERT', $ti . 'upload/'); |
|
| 2528 | - } |
|
| 2529 | - if (!defined('_DIR_CACHE')) { |
|
| 2530 | - define('_DIR_CACHE', $ti . 'cache/'); |
|
| 2531 | - } |
|
| 2532 | - if (!defined('_DIR_CACHE_XML')) { |
|
| 2533 | - define('_DIR_CACHE_XML', _DIR_CACHE . 'xml/'); |
|
| 2534 | - } |
|
| 2535 | - if (!defined('_DIR_SKELS')) { |
|
| 2536 | - define('_DIR_SKELS', _DIR_CACHE . 'skel/'); |
|
| 2537 | - } |
|
| 2538 | - if (!defined('_DIR_AIDE')) { |
|
| 2539 | - define('_DIR_AIDE', _DIR_CACHE . 'aide/'); |
|
| 2540 | - } |
|
| 2541 | - if (!defined('_DIR_TMP')) { |
|
| 2542 | - define('_DIR_TMP', $ti); |
|
| 2543 | - } |
|
| 2544 | - |
|
| 2545 | - if (!defined('_DIR_VAR')) { |
|
| 2546 | - define('_DIR_VAR', $ta); |
|
| 2547 | - } |
|
| 2548 | - |
|
| 2549 | - if (!defined('_DIR_ETC')) { |
|
| 2550 | - define('_DIR_ETC', $pi); |
|
| 2551 | - } |
|
| 2552 | - if (!defined('_DIR_CONNECT')) { |
|
| 2553 | - define('_DIR_CONNECT', $pi); |
|
| 2554 | - } |
|
| 2555 | - if (!defined('_DIR_CHMOD')) { |
|
| 2556 | - define('_DIR_CHMOD', $pi); |
|
| 2557 | - } |
|
| 2558 | - |
|
| 2559 | - if (!isset($GLOBALS['test_dirs'])) { |
|
| 2560 | - // Pas $pi car il est bon de le mettre hors ecriture apres intstall |
|
| 2561 | - // il sera rajoute automatiquement si besoin a l'etape 2 de l'install |
|
| 2562 | - $GLOBALS['test_dirs'] = [$pa, $ti, $ta]; |
|
| 2563 | - } |
|
| 2564 | - |
|
| 2565 | - // Declaration des fichiers |
|
| 2566 | - |
|
| 2567 | - if (!defined('_CACHE_PLUGINS_PATH')) { |
|
| 2568 | - define('_CACHE_PLUGINS_PATH', _DIR_CACHE . 'charger_plugins_chemins.php'); |
|
| 2569 | - } |
|
| 2570 | - if (!defined('_CACHE_PLUGINS_OPT')) { |
|
| 2571 | - define('_CACHE_PLUGINS_OPT', _DIR_CACHE . 'charger_plugins_options.php'); |
|
| 2572 | - } |
|
| 2573 | - if (!defined('_CACHE_PLUGINS_FCT')) { |
|
| 2574 | - define('_CACHE_PLUGINS_FCT', _DIR_CACHE . 'charger_plugins_fonctions.php'); |
|
| 2575 | - } |
|
| 2576 | - if (!defined('_CACHE_PIPELINES')) { |
|
| 2577 | - define('_CACHE_PIPELINES', _DIR_CACHE . 'charger_pipelines.php'); |
|
| 2578 | - } |
|
| 2579 | - if (!defined('_CACHE_CHEMIN')) { |
|
| 2580 | - define('_CACHE_CHEMIN', _DIR_CACHE . 'chemin.txt'); |
|
| 2581 | - } |
|
| 2582 | - |
|
| 2583 | - # attention .php obligatoire pour ecrire_fichier_securise |
|
| 2584 | - if (!defined('_FILE_META')) { |
|
| 2585 | - define('_FILE_META', $ti . 'meta_cache.php'); |
|
| 2586 | - } |
|
| 2587 | - if (!defined('_DIR_LOG')) { |
|
| 2588 | - define('_DIR_LOG', _DIR_TMP . 'log/'); |
|
| 2589 | - } |
|
| 2590 | - if (!defined('_FILE_LOG')) { |
|
| 2591 | - define('_FILE_LOG', 'spip'); |
|
| 2592 | - } |
|
| 2593 | - if (!defined('_FILE_LOG_SUFFIX')) { |
|
| 2594 | - define('_FILE_LOG_SUFFIX', '.log'); |
|
| 2595 | - } |
|
| 2596 | - |
|
| 2597 | - // Le fichier de connexion a la base de donnees |
|
| 2598 | - // tient compte des anciennes versions (inc_connect...) |
|
| 2599 | - if (!defined('_FILE_CONNECT_INS')) { |
|
| 2600 | - define('_FILE_CONNECT_INS', 'connect'); |
|
| 2601 | - } |
|
| 2602 | - if (!defined('_FILE_CONNECT')) { |
|
| 2603 | - define( |
|
| 2604 | - '_FILE_CONNECT', |
|
| 2605 | - (@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f |
|
| 2606 | - : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f |
|
| 2607 | - : false)) |
|
| 2608 | - ); |
|
| 2609 | - } |
|
| 2610 | - |
|
| 2611 | - // Le fichier de reglages des droits |
|
| 2612 | - if (!defined('_FILE_CHMOD_INS')) { |
|
| 2613 | - define('_FILE_CHMOD_INS', 'chmod'); |
|
| 2614 | - } |
|
| 2615 | - if (!defined('_FILE_CHMOD')) { |
|
| 2616 | - define( |
|
| 2617 | - '_FILE_CHMOD', |
|
| 2618 | - (@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f |
|
| 2619 | - : false) |
|
| 2620 | - ); |
|
| 2621 | - } |
|
| 2622 | - |
|
| 2623 | - if (!defined('_FILE_LDAP')) { |
|
| 2624 | - define('_FILE_LDAP', 'ldap.php'); |
|
| 2625 | - } |
|
| 2626 | - |
|
| 2627 | - if (!defined('_FILE_TMP_SUFFIX')) { |
|
| 2628 | - define('_FILE_TMP_SUFFIX', '.tmp.php'); |
|
| 2629 | - } |
|
| 2630 | - if (!defined('_FILE_CONNECT_TMP')) { |
|
| 2631 | - define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX); |
|
| 2632 | - } |
|
| 2633 | - if (!defined('_FILE_CHMOD_TMP')) { |
|
| 2634 | - define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX); |
|
| 2635 | - } |
|
| 2636 | - |
|
| 2637 | - // Definition des droits d'acces en ecriture |
|
| 2638 | - if (!defined('_SPIP_CHMOD') and _FILE_CHMOD) { |
|
| 2639 | - include_once _FILE_CHMOD; |
|
| 2640 | - } |
|
| 2641 | - |
|
| 2642 | - // Se mefier des fichiers mal remplis! |
|
| 2643 | - if (!defined('_SPIP_CHMOD')) { |
|
| 2644 | - define('_SPIP_CHMOD', 0777); |
|
| 2645 | - } |
|
| 2646 | - |
|
| 2647 | - if (!defined('_DEFAULT_CHARSET')) { |
|
| 2648 | - /** Le charset par défaut lors de l'installation */ |
|
| 2649 | - define('_DEFAULT_CHARSET', 'utf-8'); |
|
| 2650 | - } |
|
| 2651 | - if (!defined('_ROOT_PLUGINS')) { |
|
| 2652 | - define('_ROOT_PLUGINS', _ROOT_RACINE . 'plugins/'); |
|
| 2653 | - } |
|
| 2654 | - if (!defined('_ROOT_PLUGINS_DIST')) { |
|
| 2655 | - define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . 'plugins-dist/'); |
|
| 2656 | - } |
|
| 2657 | - if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) { |
|
| 2658 | - define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL)); |
|
| 2659 | - } |
|
| 2660 | - |
|
| 2661 | - // La taille des Log |
|
| 2662 | - if (!defined('_MAX_LOG')) { |
|
| 2663 | - define('_MAX_LOG', 100); |
|
| 2664 | - } |
|
| 2665 | - |
|
| 2666 | - // Sommes-nous dans l'empire du Mal ? |
|
| 2667 | - // (ou sous le signe du Pingouin, ascendant GNU ?) |
|
| 2668 | - if (isset($_SERVER['SERVER_SOFTWARE']) and strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false) { |
|
| 2669 | - if (!defined('_OS_SERVEUR')) { |
|
| 2670 | - define('_OS_SERVEUR', 'windows'); |
|
| 2671 | - } |
|
| 2672 | - if (!defined('_SPIP_LOCK_MODE')) { |
|
| 2673 | - define('_SPIP_LOCK_MODE', 1); |
|
| 2674 | - } // utiliser le flock php |
|
| 2675 | - } else { |
|
| 2676 | - if (!defined('_OS_SERVEUR')) { |
|
| 2677 | - define('_OS_SERVEUR', ''); |
|
| 2678 | - } |
|
| 2679 | - if (!defined('_SPIP_LOCK_MODE')) { |
|
| 2680 | - define('_SPIP_LOCK_MODE', 1); |
|
| 2681 | - } // utiliser le flock php |
|
| 2682 | - #if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite |
|
| 2683 | - } |
|
| 2684 | - |
|
| 2685 | - // Langue par defaut |
|
| 2686 | - if (!defined('_LANGUE_PAR_DEFAUT')) { |
|
| 2687 | - define('_LANGUE_PAR_DEFAUT', 'fr'); |
|
| 2688 | - } |
|
| 2689 | - |
|
| 2690 | - // |
|
| 2691 | - // Module de lecture/ecriture/suppression de fichiers utilisant flock() |
|
| 2692 | - // (non surchargeable en l'etat ; attention si on utilise include_spip() |
|
| 2693 | - // pour le rendre surchargeable, on va provoquer un reecriture |
|
| 2694 | - // systematique du noyau ou une baisse de perfs => a etudier) |
|
| 2695 | - include_once _ROOT_RESTREINT . 'inc/flock.php'; |
|
| 2696 | - |
|
| 2697 | - // charger tout de suite le path et son cache |
|
| 2698 | - load_path_cache(); |
|
| 2699 | - |
|
| 2700 | - // *********** traiter les variables ************ |
|
| 2701 | - |
|
| 2702 | - // |
|
| 2703 | - // Securite |
|
| 2704 | - // |
|
| 2705 | - |
|
| 2706 | - // Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto |
|
| 2707 | - if (isset($_REQUEST['GLOBALS'])) { |
|
| 2708 | - die(); |
|
| 2709 | - } |
|
| 2710 | - // nettoyer les magic quotes \' et les caracteres nuls %00 |
|
| 2711 | - spip_desinfecte($_GET); |
|
| 2712 | - spip_desinfecte($_POST); |
|
| 2713 | - spip_desinfecte($_COOKIE); |
|
| 2714 | - spip_desinfecte($_REQUEST); |
|
| 2715 | - |
|
| 2716 | - // appliquer le cookie_prefix |
|
| 2717 | - if ($GLOBALS['cookie_prefix'] != 'spip') { |
|
| 2718 | - include_spip('inc/cookie'); |
|
| 2719 | - recuperer_cookies_spip($GLOBALS['cookie_prefix']); |
|
| 2720 | - } |
|
| 2721 | - |
|
| 2722 | - // |
|
| 2723 | - // Capacites php (en fonction de la version) |
|
| 2724 | - // |
|
| 2725 | - $GLOBALS['flag_ob'] = (function_exists('ob_start') |
|
| 2726 | - && function_exists('ini_get') |
|
| 2727 | - && !strstr(@ini_get('disable_functions'), 'ob_')); |
|
| 2728 | - $GLOBALS['flag_sapi_name'] = function_exists('php_sapi_name'); |
|
| 2729 | - $GLOBALS['flag_get_cfg_var'] = (@get_cfg_var('error_reporting') != ''); |
|
| 2730 | - $GLOBALS['flag_upload'] = (!$GLOBALS['flag_get_cfg_var'] || |
|
| 2731 | - (get_cfg_var('upload_max_filesize') > 0)); |
|
| 2732 | - |
|
| 2733 | - |
|
| 2734 | - // Compatibilite avec serveurs ne fournissant pas $REQUEST_URI |
|
| 2735 | - if (isset($_SERVER['REQUEST_URI'])) { |
|
| 2736 | - $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI']; |
|
| 2737 | - } else { |
|
| 2738 | - $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : ''; |
|
| 2739 | - if ( |
|
| 2740 | - !empty($_SERVER['QUERY_STRING']) |
|
| 2741 | - and !strpos($_SERVER['REQUEST_URI'], '?') |
|
| 2742 | - ) { |
|
| 2743 | - $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; |
|
| 2744 | - } |
|
| 2745 | - } |
|
| 2746 | - |
|
| 2747 | - // Duree de validite de l'alea pour les cookies et ce qui s'ensuit. |
|
| 2748 | - if (!defined('_RENOUVELLE_ALEA')) { |
|
| 2749 | - define('_RENOUVELLE_ALEA', 12 * 3600); |
|
| 2750 | - } |
|
| 2751 | - if (!defined('_DUREE_COOKIE_ADMIN')) { |
|
| 2752 | - define('_DUREE_COOKIE_ADMIN', 14 * 24 * 3600); |
|
| 2753 | - } |
|
| 2754 | - |
|
| 2755 | - // charger les meta si possible et renouveller l'alea au besoin |
|
| 2756 | - // charge aussi effacer_meta et ecrire_meta |
|
| 2757 | - $inc_meta = charger_fonction('meta', 'inc'); |
|
| 2758 | - $inc_meta(); |
|
| 2759 | - |
|
| 2760 | - // nombre de repertoires depuis la racine |
|
| 2761 | - // on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"] |
|
| 2762 | - // ou a defaut celle donnee en meta ; (mais si celle-ci est fausse |
|
| 2763 | - // le calcul est faux) |
|
| 2764 | - if (!_DIR_RESTREINT) { |
|
| 2765 | - $GLOBALS['profondeur_url'] = 1; |
|
| 2766 | - } else { |
|
| 2767 | - $uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : ''; |
|
| 2768 | - $uri_ref = $_SERVER['SCRIPT_NAME']; |
|
| 2769 | - if ( |
|
| 2770 | - !$uri_ref |
|
| 2771 | - // si on est appele avec un autre ti, on est sans doute en mutu |
|
| 2772 | - // si jamais c'est de la mutu avec sous rep, on est perdu si on se fie |
|
| 2773 | - // a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer |
|
| 2774 | - // s'en remettre a l'adresse du site. alea jacta est. |
|
| 2775 | - or $ti !== _NOM_TEMPORAIRES_INACCESSIBLES |
|
| 2776 | - ) { |
|
| 2777 | - if (isset($GLOBALS['meta']['adresse_site'])) { |
|
| 2778 | - $uri_ref = parse_url($GLOBALS['meta']['adresse_site']); |
|
| 2779 | - $uri_ref = ($uri_ref['path'] ?? '') . '/'; |
|
| 2780 | - } else { |
|
| 2781 | - $uri_ref = ''; |
|
| 2782 | - } |
|
| 2783 | - } |
|
| 2784 | - if (!$uri or !$uri_ref) { |
|
| 2785 | - $GLOBALS['profondeur_url'] = 0; |
|
| 2786 | - } else { |
|
| 2787 | - $GLOBALS['profondeur_url'] = max( |
|
| 2788 | - 0, |
|
| 2789 | - substr_count($uri[0], '/') |
|
| 2790 | - - substr_count($uri_ref, '/') |
|
| 2791 | - ); |
|
| 2792 | - } |
|
| 2793 | - } |
|
| 2794 | - // s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session |
|
| 2795 | - if (_FILE_CONNECT) { |
|
| 2796 | - if ( |
|
| 2797 | - verifier_visiteur() == '0minirezo' |
|
| 2798 | - // si c'est un admin sans cookie admin, il faut ignorer le cache chemin ! |
|
| 2799 | - and !isset($_COOKIE['spip_admin']) |
|
| 2800 | - ) { |
|
| 2801 | - clear_path_cache(); |
|
| 2802 | - } |
|
| 2803 | - } |
|
| 2487 | + static $too_late = 0; |
|
| 2488 | + if ($too_late++) { |
|
| 2489 | + return; |
|
| 2490 | + } |
|
| 2491 | + |
|
| 2492 | + // Declaration des repertoires |
|
| 2493 | + |
|
| 2494 | + // le nom du repertoire plugins/ activables/desactivables |
|
| 2495 | + if (!defined('_DIR_PLUGINS')) { |
|
| 2496 | + define('_DIR_PLUGINS', _DIR_RACINE . 'plugins/'); |
|
| 2497 | + } |
|
| 2498 | + |
|
| 2499 | + // le nom du repertoire des extensions/ permanentes du core, toujours actives |
|
| 2500 | + if (!defined('_DIR_PLUGINS_DIST')) { |
|
| 2501 | + define('_DIR_PLUGINS_DIST', _DIR_RACINE . 'plugins-dist/'); |
|
| 2502 | + } |
|
| 2503 | + |
|
| 2504 | + // le nom du repertoire des librairies |
|
| 2505 | + if (!defined('_DIR_LIB')) { |
|
| 2506 | + define('_DIR_LIB', _DIR_RACINE . 'lib/'); |
|
| 2507 | + } |
|
| 2508 | + |
|
| 2509 | + if (!defined('_DIR_IMG')) { |
|
| 2510 | + define('_DIR_IMG', $pa); |
|
| 2511 | + } |
|
| 2512 | + if (!defined('_DIR_LOGOS')) { |
|
| 2513 | + define('_DIR_LOGOS', $pa); |
|
| 2514 | + } |
|
| 2515 | + if (!defined('_DIR_IMG_ICONES')) { |
|
| 2516 | + define('_DIR_IMG_ICONES', _DIR_LOGOS . 'icones/'); |
|
| 2517 | + } |
|
| 2518 | + |
|
| 2519 | + if (!defined('_DIR_DUMP')) { |
|
| 2520 | + define('_DIR_DUMP', $ti . 'dump/'); |
|
| 2521 | + } |
|
| 2522 | + if (!defined('_DIR_SESSIONS')) { |
|
| 2523 | + define('_DIR_SESSIONS', $ti . 'sessions/'); |
|
| 2524 | + } |
|
| 2525 | + if (!defined('_DIR_TRANSFERT')) { |
|
| 2526 | + define('_DIR_TRANSFERT', $ti . 'upload/'); |
|
| 2527 | + } |
|
| 2528 | + if (!defined('_DIR_CACHE')) { |
|
| 2529 | + define('_DIR_CACHE', $ti . 'cache/'); |
|
| 2530 | + } |
|
| 2531 | + if (!defined('_DIR_CACHE_XML')) { |
|
| 2532 | + define('_DIR_CACHE_XML', _DIR_CACHE . 'xml/'); |
|
| 2533 | + } |
|
| 2534 | + if (!defined('_DIR_SKELS')) { |
|
| 2535 | + define('_DIR_SKELS', _DIR_CACHE . 'skel/'); |
|
| 2536 | + } |
|
| 2537 | + if (!defined('_DIR_AIDE')) { |
|
| 2538 | + define('_DIR_AIDE', _DIR_CACHE . 'aide/'); |
|
| 2539 | + } |
|
| 2540 | + if (!defined('_DIR_TMP')) { |
|
| 2541 | + define('_DIR_TMP', $ti); |
|
| 2542 | + } |
|
| 2543 | + |
|
| 2544 | + if (!defined('_DIR_VAR')) { |
|
| 2545 | + define('_DIR_VAR', $ta); |
|
| 2546 | + } |
|
| 2547 | + |
|
| 2548 | + if (!defined('_DIR_ETC')) { |
|
| 2549 | + define('_DIR_ETC', $pi); |
|
| 2550 | + } |
|
| 2551 | + if (!defined('_DIR_CONNECT')) { |
|
| 2552 | + define('_DIR_CONNECT', $pi); |
|
| 2553 | + } |
|
| 2554 | + if (!defined('_DIR_CHMOD')) { |
|
| 2555 | + define('_DIR_CHMOD', $pi); |
|
| 2556 | + } |
|
| 2557 | + |
|
| 2558 | + if (!isset($GLOBALS['test_dirs'])) { |
|
| 2559 | + // Pas $pi car il est bon de le mettre hors ecriture apres intstall |
|
| 2560 | + // il sera rajoute automatiquement si besoin a l'etape 2 de l'install |
|
| 2561 | + $GLOBALS['test_dirs'] = [$pa, $ti, $ta]; |
|
| 2562 | + } |
|
| 2563 | + |
|
| 2564 | + // Declaration des fichiers |
|
| 2565 | + |
|
| 2566 | + if (!defined('_CACHE_PLUGINS_PATH')) { |
|
| 2567 | + define('_CACHE_PLUGINS_PATH', _DIR_CACHE . 'charger_plugins_chemins.php'); |
|
| 2568 | + } |
|
| 2569 | + if (!defined('_CACHE_PLUGINS_OPT')) { |
|
| 2570 | + define('_CACHE_PLUGINS_OPT', _DIR_CACHE . 'charger_plugins_options.php'); |
|
| 2571 | + } |
|
| 2572 | + if (!defined('_CACHE_PLUGINS_FCT')) { |
|
| 2573 | + define('_CACHE_PLUGINS_FCT', _DIR_CACHE . 'charger_plugins_fonctions.php'); |
|
| 2574 | + } |
|
| 2575 | + if (!defined('_CACHE_PIPELINES')) { |
|
| 2576 | + define('_CACHE_PIPELINES', _DIR_CACHE . 'charger_pipelines.php'); |
|
| 2577 | + } |
|
| 2578 | + if (!defined('_CACHE_CHEMIN')) { |
|
| 2579 | + define('_CACHE_CHEMIN', _DIR_CACHE . 'chemin.txt'); |
|
| 2580 | + } |
|
| 2581 | + |
|
| 2582 | + # attention .php obligatoire pour ecrire_fichier_securise |
|
| 2583 | + if (!defined('_FILE_META')) { |
|
| 2584 | + define('_FILE_META', $ti . 'meta_cache.php'); |
|
| 2585 | + } |
|
| 2586 | + if (!defined('_DIR_LOG')) { |
|
| 2587 | + define('_DIR_LOG', _DIR_TMP . 'log/'); |
|
| 2588 | + } |
|
| 2589 | + if (!defined('_FILE_LOG')) { |
|
| 2590 | + define('_FILE_LOG', 'spip'); |
|
| 2591 | + } |
|
| 2592 | + if (!defined('_FILE_LOG_SUFFIX')) { |
|
| 2593 | + define('_FILE_LOG_SUFFIX', '.log'); |
|
| 2594 | + } |
|
| 2595 | + |
|
| 2596 | + // Le fichier de connexion a la base de donnees |
|
| 2597 | + // tient compte des anciennes versions (inc_connect...) |
|
| 2598 | + if (!defined('_FILE_CONNECT_INS')) { |
|
| 2599 | + define('_FILE_CONNECT_INS', 'connect'); |
|
| 2600 | + } |
|
| 2601 | + if (!defined('_FILE_CONNECT')) { |
|
| 2602 | + define( |
|
| 2603 | + '_FILE_CONNECT', |
|
| 2604 | + (@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f |
|
| 2605 | + : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f |
|
| 2606 | + : false)) |
|
| 2607 | + ); |
|
| 2608 | + } |
|
| 2609 | + |
|
| 2610 | + // Le fichier de reglages des droits |
|
| 2611 | + if (!defined('_FILE_CHMOD_INS')) { |
|
| 2612 | + define('_FILE_CHMOD_INS', 'chmod'); |
|
| 2613 | + } |
|
| 2614 | + if (!defined('_FILE_CHMOD')) { |
|
| 2615 | + define( |
|
| 2616 | + '_FILE_CHMOD', |
|
| 2617 | + (@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f |
|
| 2618 | + : false) |
|
| 2619 | + ); |
|
| 2620 | + } |
|
| 2621 | + |
|
| 2622 | + if (!defined('_FILE_LDAP')) { |
|
| 2623 | + define('_FILE_LDAP', 'ldap.php'); |
|
| 2624 | + } |
|
| 2625 | + |
|
| 2626 | + if (!defined('_FILE_TMP_SUFFIX')) { |
|
| 2627 | + define('_FILE_TMP_SUFFIX', '.tmp.php'); |
|
| 2628 | + } |
|
| 2629 | + if (!defined('_FILE_CONNECT_TMP')) { |
|
| 2630 | + define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX); |
|
| 2631 | + } |
|
| 2632 | + if (!defined('_FILE_CHMOD_TMP')) { |
|
| 2633 | + define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX); |
|
| 2634 | + } |
|
| 2635 | + |
|
| 2636 | + // Definition des droits d'acces en ecriture |
|
| 2637 | + if (!defined('_SPIP_CHMOD') and _FILE_CHMOD) { |
|
| 2638 | + include_once _FILE_CHMOD; |
|
| 2639 | + } |
|
| 2640 | + |
|
| 2641 | + // Se mefier des fichiers mal remplis! |
|
| 2642 | + if (!defined('_SPIP_CHMOD')) { |
|
| 2643 | + define('_SPIP_CHMOD', 0777); |
|
| 2644 | + } |
|
| 2645 | + |
|
| 2646 | + if (!defined('_DEFAULT_CHARSET')) { |
|
| 2647 | + /** Le charset par défaut lors de l'installation */ |
|
| 2648 | + define('_DEFAULT_CHARSET', 'utf-8'); |
|
| 2649 | + } |
|
| 2650 | + if (!defined('_ROOT_PLUGINS')) { |
|
| 2651 | + define('_ROOT_PLUGINS', _ROOT_RACINE . 'plugins/'); |
|
| 2652 | + } |
|
| 2653 | + if (!defined('_ROOT_PLUGINS_DIST')) { |
|
| 2654 | + define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . 'plugins-dist/'); |
|
| 2655 | + } |
|
| 2656 | + if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) { |
|
| 2657 | + define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL)); |
|
| 2658 | + } |
|
| 2659 | + |
|
| 2660 | + // La taille des Log |
|
| 2661 | + if (!defined('_MAX_LOG')) { |
|
| 2662 | + define('_MAX_LOG', 100); |
|
| 2663 | + } |
|
| 2664 | + |
|
| 2665 | + // Sommes-nous dans l'empire du Mal ? |
|
| 2666 | + // (ou sous le signe du Pingouin, ascendant GNU ?) |
|
| 2667 | + if (isset($_SERVER['SERVER_SOFTWARE']) and strpos($_SERVER['SERVER_SOFTWARE'], '(Win') !== false) { |
|
| 2668 | + if (!defined('_OS_SERVEUR')) { |
|
| 2669 | + define('_OS_SERVEUR', 'windows'); |
|
| 2670 | + } |
|
| 2671 | + if (!defined('_SPIP_LOCK_MODE')) { |
|
| 2672 | + define('_SPIP_LOCK_MODE', 1); |
|
| 2673 | + } // utiliser le flock php |
|
| 2674 | + } else { |
|
| 2675 | + if (!defined('_OS_SERVEUR')) { |
|
| 2676 | + define('_OS_SERVEUR', ''); |
|
| 2677 | + } |
|
| 2678 | + if (!defined('_SPIP_LOCK_MODE')) { |
|
| 2679 | + define('_SPIP_LOCK_MODE', 1); |
|
| 2680 | + } // utiliser le flock php |
|
| 2681 | + #if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite |
|
| 2682 | + } |
|
| 2683 | + |
|
| 2684 | + // Langue par defaut |
|
| 2685 | + if (!defined('_LANGUE_PAR_DEFAUT')) { |
|
| 2686 | + define('_LANGUE_PAR_DEFAUT', 'fr'); |
|
| 2687 | + } |
|
| 2688 | + |
|
| 2689 | + // |
|
| 2690 | + // Module de lecture/ecriture/suppression de fichiers utilisant flock() |
|
| 2691 | + // (non surchargeable en l'etat ; attention si on utilise include_spip() |
|
| 2692 | + // pour le rendre surchargeable, on va provoquer un reecriture |
|
| 2693 | + // systematique du noyau ou une baisse de perfs => a etudier) |
|
| 2694 | + include_once _ROOT_RESTREINT . 'inc/flock.php'; |
|
| 2695 | + |
|
| 2696 | + // charger tout de suite le path et son cache |
|
| 2697 | + load_path_cache(); |
|
| 2698 | + |
|
| 2699 | + // *********** traiter les variables ************ |
|
| 2700 | + |
|
| 2701 | + // |
|
| 2702 | + // Securite |
|
| 2703 | + // |
|
| 2704 | + |
|
| 2705 | + // Ne pas se faire manger par un bug php qui accepte ?GLOBALS[truc]=toto |
|
| 2706 | + if (isset($_REQUEST['GLOBALS'])) { |
|
| 2707 | + die(); |
|
| 2708 | + } |
|
| 2709 | + // nettoyer les magic quotes \' et les caracteres nuls %00 |
|
| 2710 | + spip_desinfecte($_GET); |
|
| 2711 | + spip_desinfecte($_POST); |
|
| 2712 | + spip_desinfecte($_COOKIE); |
|
| 2713 | + spip_desinfecte($_REQUEST); |
|
| 2714 | + |
|
| 2715 | + // appliquer le cookie_prefix |
|
| 2716 | + if ($GLOBALS['cookie_prefix'] != 'spip') { |
|
| 2717 | + include_spip('inc/cookie'); |
|
| 2718 | + recuperer_cookies_spip($GLOBALS['cookie_prefix']); |
|
| 2719 | + } |
|
| 2720 | + |
|
| 2721 | + // |
|
| 2722 | + // Capacites php (en fonction de la version) |
|
| 2723 | + // |
|
| 2724 | + $GLOBALS['flag_ob'] = (function_exists('ob_start') |
|
| 2725 | + && function_exists('ini_get') |
|
| 2726 | + && !strstr(@ini_get('disable_functions'), 'ob_')); |
|
| 2727 | + $GLOBALS['flag_sapi_name'] = function_exists('php_sapi_name'); |
|
| 2728 | + $GLOBALS['flag_get_cfg_var'] = (@get_cfg_var('error_reporting') != ''); |
|
| 2729 | + $GLOBALS['flag_upload'] = (!$GLOBALS['flag_get_cfg_var'] || |
|
| 2730 | + (get_cfg_var('upload_max_filesize') > 0)); |
|
| 2731 | + |
|
| 2732 | + |
|
| 2733 | + // Compatibilite avec serveurs ne fournissant pas $REQUEST_URI |
|
| 2734 | + if (isset($_SERVER['REQUEST_URI'])) { |
|
| 2735 | + $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI']; |
|
| 2736 | + } else { |
|
| 2737 | + $GLOBALS['REQUEST_URI'] = (php_sapi_name() !== 'cli') ? $_SERVER['PHP_SELF'] : ''; |
|
| 2738 | + if ( |
|
| 2739 | + !empty($_SERVER['QUERY_STRING']) |
|
| 2740 | + and !strpos($_SERVER['REQUEST_URI'], '?') |
|
| 2741 | + ) { |
|
| 2742 | + $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; |
|
| 2743 | + } |
|
| 2744 | + } |
|
| 2745 | + |
|
| 2746 | + // Duree de validite de l'alea pour les cookies et ce qui s'ensuit. |
|
| 2747 | + if (!defined('_RENOUVELLE_ALEA')) { |
|
| 2748 | + define('_RENOUVELLE_ALEA', 12 * 3600); |
|
| 2749 | + } |
|
| 2750 | + if (!defined('_DUREE_COOKIE_ADMIN')) { |
|
| 2751 | + define('_DUREE_COOKIE_ADMIN', 14 * 24 * 3600); |
|
| 2752 | + } |
|
| 2753 | + |
|
| 2754 | + // charger les meta si possible et renouveller l'alea au besoin |
|
| 2755 | + // charge aussi effacer_meta et ecrire_meta |
|
| 2756 | + $inc_meta = charger_fonction('meta', 'inc'); |
|
| 2757 | + $inc_meta(); |
|
| 2758 | + |
|
| 2759 | + // nombre de repertoires depuis la racine |
|
| 2760 | + // on compare a l'adresse de spip.php : $_SERVER["SCRIPT_NAME"] |
|
| 2761 | + // ou a defaut celle donnee en meta ; (mais si celle-ci est fausse |
|
| 2762 | + // le calcul est faux) |
|
| 2763 | + if (!_DIR_RESTREINT) { |
|
| 2764 | + $GLOBALS['profondeur_url'] = 1; |
|
| 2765 | + } else { |
|
| 2766 | + $uri = isset($_SERVER['REQUEST_URI']) ? explode('?', $_SERVER['REQUEST_URI']) : ''; |
|
| 2767 | + $uri_ref = $_SERVER['SCRIPT_NAME']; |
|
| 2768 | + if ( |
|
| 2769 | + !$uri_ref |
|
| 2770 | + // si on est appele avec un autre ti, on est sans doute en mutu |
|
| 2771 | + // si jamais c'est de la mutu avec sous rep, on est perdu si on se fie |
|
| 2772 | + // a spip.php qui est a la racine du spip, et vue qu'on sait pas se reperer |
|
| 2773 | + // s'en remettre a l'adresse du site. alea jacta est. |
|
| 2774 | + or $ti !== _NOM_TEMPORAIRES_INACCESSIBLES |
|
| 2775 | + ) { |
|
| 2776 | + if (isset($GLOBALS['meta']['adresse_site'])) { |
|
| 2777 | + $uri_ref = parse_url($GLOBALS['meta']['adresse_site']); |
|
| 2778 | + $uri_ref = ($uri_ref['path'] ?? '') . '/'; |
|
| 2779 | + } else { |
|
| 2780 | + $uri_ref = ''; |
|
| 2781 | + } |
|
| 2782 | + } |
|
| 2783 | + if (!$uri or !$uri_ref) { |
|
| 2784 | + $GLOBALS['profondeur_url'] = 0; |
|
| 2785 | + } else { |
|
| 2786 | + $GLOBALS['profondeur_url'] = max( |
|
| 2787 | + 0, |
|
| 2788 | + substr_count($uri[0], '/') |
|
| 2789 | + - substr_count($uri_ref, '/') |
|
| 2790 | + ); |
|
| 2791 | + } |
|
| 2792 | + } |
|
| 2793 | + // s'il y a un cookie ou PHP_AUTH, initialiser visiteur_session |
|
| 2794 | + if (_FILE_CONNECT) { |
|
| 2795 | + if ( |
|
| 2796 | + verifier_visiteur() == '0minirezo' |
|
| 2797 | + // si c'est un admin sans cookie admin, il faut ignorer le cache chemin ! |
|
| 2798 | + and !isset($_COOKIE['spip_admin']) |
|
| 2799 | + ) { |
|
| 2800 | + clear_path_cache(); |
|
| 2801 | + } |
|
| 2802 | + } |
|
| 2804 | 2803 | } |
| 2805 | 2804 | |
| 2806 | 2805 | /** |
@@ -2809,157 +2808,157 @@ discard block |
||
| 2809 | 2808 | * |
| 2810 | 2809 | */ |
| 2811 | 2810 | function spip_initialisation_suite() { |
| 2812 | - static $too_late = 0; |
|
| 2813 | - if ($too_late++) { |
|
| 2814 | - return; |
|
| 2815 | - } |
|
| 2816 | - |
|
| 2817 | - // taille mini des login |
|
| 2818 | - if (!defined('_LOGIN_TROP_COURT')) { |
|
| 2819 | - define('_LOGIN_TROP_COURT', 4); |
|
| 2820 | - } |
|
| 2821 | - |
|
| 2822 | - // la taille maxi des logos (0 : pas de limite) (pas de define par defaut, ce n'est pas utile) |
|
| 2823 | - #if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko |
|
| 2824 | - #if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels |
|
| 2825 | - #if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels |
|
| 2826 | - |
|
| 2827 | - // la taille maxi des images (0 : pas de limite) (pas de define par defaut, ce n'est pas utile) |
|
| 2828 | - #if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko |
|
| 2829 | - #if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko |
|
| 2830 | - #if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels |
|
| 2831 | - #if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels |
|
| 2832 | - |
|
| 2833 | - if (!defined('_PASS_LONGUEUR_MINI')) { |
|
| 2834 | - define('_PASS_LONGUEUR_MINI', 6); |
|
| 2835 | - } |
|
| 2836 | - |
|
| 2837 | - // largeur maximale des images dans l'administration |
|
| 2838 | - if (!defined('_IMG_ADMIN_MAX_WIDTH')) { |
|
| 2839 | - define('_IMG_ADMIN_MAX_WIDTH', 768); |
|
| 2840 | - } |
|
| 2841 | - |
|
| 2842 | - // Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite) |
|
| 2843 | - if (!defined('_IMG_QUALITE')) { |
|
| 2844 | - define('_IMG_QUALITE', 85); |
|
| 2845 | - } # valeur par defaut |
|
| 2846 | - if (!defined('_IMG_GD_QUALITE')) { |
|
| 2847 | - define('_IMG_GD_QUALITE', _IMG_QUALITE); |
|
| 2848 | - } # surcharge pour la lib GD |
|
| 2849 | - if (!defined('_IMG_CONVERT_QUALITE')) { |
|
| 2850 | - define('_IMG_CONVERT_QUALITE', _IMG_QUALITE); |
|
| 2851 | - } # surcharge pour imagick en ligne de commande |
|
| 2852 | - // Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE |
|
| 2853 | - if (!defined('_IMG_IMAGICK_QUALITE')) { |
|
| 2854 | - define('_IMG_IMAGICK_QUALITE', 75); |
|
| 2855 | - } # surcharge pour imagick en PHP |
|
| 2856 | - |
|
| 2857 | - if (!defined('_COPIE_LOCALE_MAX_SIZE')) { |
|
| 2858 | - define('_COPIE_LOCALE_MAX_SIZE', 33_554_432); |
|
| 2859 | - } // poids en octet |
|
| 2860 | - |
|
| 2861 | - // qq chaines standard |
|
| 2862 | - if (!defined('_ACCESS_FILE_NAME')) { |
|
| 2863 | - define('_ACCESS_FILE_NAME', '.htaccess'); |
|
| 2864 | - } |
|
| 2865 | - if (!defined('_AUTH_USER_FILE')) { |
|
| 2866 | - define('_AUTH_USER_FILE', '.htpasswd'); |
|
| 2867 | - } |
|
| 2868 | - if (!defined('_SPIP_DUMP')) { |
|
| 2869 | - define('_SPIP_DUMP', 'dump@nom_site@@[email protected]'); |
|
| 2870 | - } |
|
| 2871 | - if (!defined('_CACHE_RUBRIQUES')) { |
|
| 2872 | - /** Fichier cache pour le navigateur de rubrique du bandeau */ |
|
| 2873 | - define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt'); |
|
| 2874 | - } |
|
| 2875 | - if (!defined('_CACHE_RUBRIQUES_MAX')) { |
|
| 2876 | - /** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */ |
|
| 2877 | - define('_CACHE_RUBRIQUES_MAX', 500); |
|
| 2878 | - } |
|
| 2879 | - |
|
| 2880 | - if (!defined('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR')) { |
|
| 2881 | - /** |
|
| 2882 | - * Basculer les contextes ajax en fichier si la longueur d’url est trop grande |
|
| 2883 | - * @var int Nombre de caractères */ |
|
| 2884 | - define('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR', 2000); |
|
| 2885 | - } |
|
| 2886 | - |
|
| 2887 | - if (!defined('_EXTENSION_SQUELETTES')) { |
|
| 2888 | - define('_EXTENSION_SQUELETTES', 'html'); |
|
| 2889 | - } |
|
| 2890 | - |
|
| 2891 | - if (!defined('_DOCTYPE_ECRIRE')) { |
|
| 2892 | - /** Définit le doctype de l’espace privé */ |
|
| 2893 | - define('_DOCTYPE_ECRIRE', "<!DOCTYPE html>\n"); |
|
| 2894 | - } |
|
| 2895 | - if (!defined('_DOCTYPE_AIDE')) { |
|
| 2896 | - /** Définit le doctype de l’aide en ligne */ |
|
| 2897 | - define( |
|
| 2898 | - '_DOCTYPE_AIDE', |
|
| 2899 | - "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>" |
|
| 2900 | - ); |
|
| 2901 | - } |
|
| 2902 | - |
|
| 2903 | - if (!defined('_SPIP_SCRIPT')) { |
|
| 2904 | - /** L'adresse de base du site ; on peut mettre '' si la racine est gerée par |
|
| 2905 | - * le script de l'espace public, alias index.php */ |
|
| 2906 | - define('_SPIP_SCRIPT', 'spip.php'); |
|
| 2907 | - } |
|
| 2908 | - if (!defined('_SPIP_PAGE')) { |
|
| 2909 | - /** Argument page, personalisable en cas de conflit avec un autre script */ |
|
| 2910 | - define('_SPIP_PAGE', 'page'); |
|
| 2911 | - } |
|
| 2912 | - |
|
| 2913 | - // le script de l'espace prive |
|
| 2914 | - // Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes: |
|
| 2915 | - // les anciens IIS n'acceptent pas les POST sur ecrire/ (#419) |
|
| 2916 | - // meme pb sur thttpd cf. https://forum.spip.net/fr_184153.html |
|
| 2917 | - if (!defined('_SPIP_ECRIRE_SCRIPT')) { |
|
| 2918 | - if (!empty($_SERVER['SERVER_SOFTWARE']) and preg_match(',IIS|thttpd,', $_SERVER['SERVER_SOFTWARE'])) { |
|
| 2919 | - define('_SPIP_ECRIRE_SCRIPT', 'index.php'); |
|
| 2920 | - } else { |
|
| 2921 | - define('_SPIP_ECRIRE_SCRIPT', ''); |
|
| 2922 | - } |
|
| 2923 | - } |
|
| 2924 | - |
|
| 2925 | - |
|
| 2926 | - if (!defined('_SPIP_AJAX')) { |
|
| 2927 | - define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax'])) |
|
| 2928 | - ? 1 |
|
| 2929 | - : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0))); |
|
| 2930 | - } |
|
| 2931 | - |
|
| 2932 | - // La requete est-elle en ajax ? |
|
| 2933 | - if (!defined('_AJAX')) { |
|
| 2934 | - define( |
|
| 2935 | - '_AJAX', |
|
| 2936 | - (isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery |
|
| 2937 | - or !empty($_REQUEST['var_ajax_redir']) # redirection 302 apres ajax jQuery |
|
| 2938 | - or !empty($_REQUEST['var_ajaxcharset']) # compat ascendante pour plugins |
|
| 2939 | - or !empty($_REQUEST['var_ajax']) # forms ajax & inclure ajax de spip |
|
| 2940 | - ) |
|
| 2941 | - and empty($_REQUEST['var_noajax']) # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient |
|
| 2942 | - ); |
|
| 2943 | - } |
|
| 2944 | - |
|
| 2945 | - # nombre de pixels maxi pour calcul de la vignette avec gd |
|
| 2946 | - # au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation |
|
| 2947 | - # les configurations limitees en memoire ont un seuil plutot vers 1MPixel |
|
| 2948 | - if (!defined('_IMG_GD_MAX_PIXELS')) { |
|
| 2949 | - define( |
|
| 2950 | - '_IMG_GD_MAX_PIXELS', |
|
| 2951 | - (isset($GLOBALS['meta']['max_taille_vignettes']) and $GLOBALS['meta']['max_taille_vignettes']) |
|
| 2952 | - ? $GLOBALS['meta']['max_taille_vignettes'] |
|
| 2953 | - : 0 |
|
| 2954 | - ); |
|
| 2955 | - } |
|
| 2956 | - |
|
| 2957 | - // Protocoles a normaliser dans les chaines de langues |
|
| 2958 | - if (!defined('_PROTOCOLES_STD')) { |
|
| 2959 | - define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal'); |
|
| 2960 | - } |
|
| 2961 | - |
|
| 2962 | - init_var_mode(); |
|
| 2811 | + static $too_late = 0; |
|
| 2812 | + if ($too_late++) { |
|
| 2813 | + return; |
|
| 2814 | + } |
|
| 2815 | + |
|
| 2816 | + // taille mini des login |
|
| 2817 | + if (!defined('_LOGIN_TROP_COURT')) { |
|
| 2818 | + define('_LOGIN_TROP_COURT', 4); |
|
| 2819 | + } |
|
| 2820 | + |
|
| 2821 | + // la taille maxi des logos (0 : pas de limite) (pas de define par defaut, ce n'est pas utile) |
|
| 2822 | + #if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko |
|
| 2823 | + #if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels |
|
| 2824 | + #if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels |
|
| 2825 | + |
|
| 2826 | + // la taille maxi des images (0 : pas de limite) (pas de define par defaut, ce n'est pas utile) |
|
| 2827 | + #if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko |
|
| 2828 | + #if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko |
|
| 2829 | + #if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels |
|
| 2830 | + #if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels |
|
| 2831 | + |
|
| 2832 | + if (!defined('_PASS_LONGUEUR_MINI')) { |
|
| 2833 | + define('_PASS_LONGUEUR_MINI', 6); |
|
| 2834 | + } |
|
| 2835 | + |
|
| 2836 | + // largeur maximale des images dans l'administration |
|
| 2837 | + if (!defined('_IMG_ADMIN_MAX_WIDTH')) { |
|
| 2838 | + define('_IMG_ADMIN_MAX_WIDTH', 768); |
|
| 2839 | + } |
|
| 2840 | + |
|
| 2841 | + // Qualite des images calculees automatiquement. C'est un nombre entre 0 et 100, meme pour imagick (on ramene a 0..1 par la suite) |
|
| 2842 | + if (!defined('_IMG_QUALITE')) { |
|
| 2843 | + define('_IMG_QUALITE', 85); |
|
| 2844 | + } # valeur par defaut |
|
| 2845 | + if (!defined('_IMG_GD_QUALITE')) { |
|
| 2846 | + define('_IMG_GD_QUALITE', _IMG_QUALITE); |
|
| 2847 | + } # surcharge pour la lib GD |
|
| 2848 | + if (!defined('_IMG_CONVERT_QUALITE')) { |
|
| 2849 | + define('_IMG_CONVERT_QUALITE', _IMG_QUALITE); |
|
| 2850 | + } # surcharge pour imagick en ligne de commande |
|
| 2851 | + // Historiquement la valeur pour imagick semble differente. Si ca n'est pas necessaire, il serait preferable de garder _IMG_QUALITE |
|
| 2852 | + if (!defined('_IMG_IMAGICK_QUALITE')) { |
|
| 2853 | + define('_IMG_IMAGICK_QUALITE', 75); |
|
| 2854 | + } # surcharge pour imagick en PHP |
|
| 2855 | + |
|
| 2856 | + if (!defined('_COPIE_LOCALE_MAX_SIZE')) { |
|
| 2857 | + define('_COPIE_LOCALE_MAX_SIZE', 33_554_432); |
|
| 2858 | + } // poids en octet |
|
| 2859 | + |
|
| 2860 | + // qq chaines standard |
|
| 2861 | + if (!defined('_ACCESS_FILE_NAME')) { |
|
| 2862 | + define('_ACCESS_FILE_NAME', '.htaccess'); |
|
| 2863 | + } |
|
| 2864 | + if (!defined('_AUTH_USER_FILE')) { |
|
| 2865 | + define('_AUTH_USER_FILE', '.htpasswd'); |
|
| 2866 | + } |
|
| 2867 | + if (!defined('_SPIP_DUMP')) { |
|
| 2868 | + define('_SPIP_DUMP', 'dump@nom_site@@[email protected]'); |
|
| 2869 | + } |
|
| 2870 | + if (!defined('_CACHE_RUBRIQUES')) { |
|
| 2871 | + /** Fichier cache pour le navigateur de rubrique du bandeau */ |
|
| 2872 | + define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt'); |
|
| 2873 | + } |
|
| 2874 | + if (!defined('_CACHE_RUBRIQUES_MAX')) { |
|
| 2875 | + /** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */ |
|
| 2876 | + define('_CACHE_RUBRIQUES_MAX', 500); |
|
| 2877 | + } |
|
| 2878 | + |
|
| 2879 | + if (!defined('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR')) { |
|
| 2880 | + /** |
|
| 2881 | + * Basculer les contextes ajax en fichier si la longueur d’url est trop grande |
|
| 2882 | + * @var int Nombre de caractères */ |
|
| 2883 | + define('_CACHE_CONTEXTES_AJAX_SUR_LONGUEUR', 2000); |
|
| 2884 | + } |
|
| 2885 | + |
|
| 2886 | + if (!defined('_EXTENSION_SQUELETTES')) { |
|
| 2887 | + define('_EXTENSION_SQUELETTES', 'html'); |
|
| 2888 | + } |
|
| 2889 | + |
|
| 2890 | + if (!defined('_DOCTYPE_ECRIRE')) { |
|
| 2891 | + /** Définit le doctype de l’espace privé */ |
|
| 2892 | + define('_DOCTYPE_ECRIRE', "<!DOCTYPE html>\n"); |
|
| 2893 | + } |
|
| 2894 | + if (!defined('_DOCTYPE_AIDE')) { |
|
| 2895 | + /** Définit le doctype de l’aide en ligne */ |
|
| 2896 | + define( |
|
| 2897 | + '_DOCTYPE_AIDE', |
|
| 2898 | + "<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>" |
|
| 2899 | + ); |
|
| 2900 | + } |
|
| 2901 | + |
|
| 2902 | + if (!defined('_SPIP_SCRIPT')) { |
|
| 2903 | + /** L'adresse de base du site ; on peut mettre '' si la racine est gerée par |
|
| 2904 | + * le script de l'espace public, alias index.php */ |
|
| 2905 | + define('_SPIP_SCRIPT', 'spip.php'); |
|
| 2906 | + } |
|
| 2907 | + if (!defined('_SPIP_PAGE')) { |
|
| 2908 | + /** Argument page, personalisable en cas de conflit avec un autre script */ |
|
| 2909 | + define('_SPIP_PAGE', 'page'); |
|
| 2910 | + } |
|
| 2911 | + |
|
| 2912 | + // le script de l'espace prive |
|
| 2913 | + // Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes: |
|
| 2914 | + // les anciens IIS n'acceptent pas les POST sur ecrire/ (#419) |
|
| 2915 | + // meme pb sur thttpd cf. https://forum.spip.net/fr_184153.html |
|
| 2916 | + if (!defined('_SPIP_ECRIRE_SCRIPT')) { |
|
| 2917 | + if (!empty($_SERVER['SERVER_SOFTWARE']) and preg_match(',IIS|thttpd,', $_SERVER['SERVER_SOFTWARE'])) { |
|
| 2918 | + define('_SPIP_ECRIRE_SCRIPT', 'index.php'); |
|
| 2919 | + } else { |
|
| 2920 | + define('_SPIP_ECRIRE_SCRIPT', ''); |
|
| 2921 | + } |
|
| 2922 | + } |
|
| 2923 | + |
|
| 2924 | + |
|
| 2925 | + if (!defined('_SPIP_AJAX')) { |
|
| 2926 | + define('_SPIP_AJAX', ((!isset($_COOKIE['spip_accepte_ajax'])) |
|
| 2927 | + ? 1 |
|
| 2928 | + : (($_COOKIE['spip_accepte_ajax'] != -1) ? 1 : 0))); |
|
| 2929 | + } |
|
| 2930 | + |
|
| 2931 | + // La requete est-elle en ajax ? |
|
| 2932 | + if (!defined('_AJAX')) { |
|
| 2933 | + define( |
|
| 2934 | + '_AJAX', |
|
| 2935 | + (isset($_SERVER['HTTP_X_REQUESTED_WITH']) # ajax jQuery |
|
| 2936 | + or !empty($_REQUEST['var_ajax_redir']) # redirection 302 apres ajax jQuery |
|
| 2937 | + or !empty($_REQUEST['var_ajaxcharset']) # compat ascendante pour plugins |
|
| 2938 | + or !empty($_REQUEST['var_ajax']) # forms ajax & inclure ajax de spip |
|
| 2939 | + ) |
|
| 2940 | + and empty($_REQUEST['var_noajax']) # horrible exception, car c'est pas parce que la requete est ajax jquery qu'il faut tuer tous les formulaires ajax qu'elle contient |
|
| 2941 | + ); |
|
| 2942 | + } |
|
| 2943 | + |
|
| 2944 | + # nombre de pixels maxi pour calcul de la vignette avec gd |
|
| 2945 | + # au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation |
|
| 2946 | + # les configurations limitees en memoire ont un seuil plutot vers 1MPixel |
|
| 2947 | + if (!defined('_IMG_GD_MAX_PIXELS')) { |
|
| 2948 | + define( |
|
| 2949 | + '_IMG_GD_MAX_PIXELS', |
|
| 2950 | + (isset($GLOBALS['meta']['max_taille_vignettes']) and $GLOBALS['meta']['max_taille_vignettes']) |
|
| 2951 | + ? $GLOBALS['meta']['max_taille_vignettes'] |
|
| 2952 | + : 0 |
|
| 2953 | + ); |
|
| 2954 | + } |
|
| 2955 | + |
|
| 2956 | + // Protocoles a normaliser dans les chaines de langues |
|
| 2957 | + if (!defined('_PROTOCOLES_STD')) { |
|
| 2958 | + define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal'); |
|
| 2959 | + } |
|
| 2960 | + |
|
| 2961 | + init_var_mode(); |
|
| 2963 | 2962 | } |
| 2964 | 2963 | |
| 2965 | 2964 | /** |
@@ -2993,219 +2992,219 @@ discard block |
||
| 2993 | 2992 | * ` var_mode` (calcul ou recalcul). |
| 2994 | 2993 | */ |
| 2995 | 2994 | function init_var_mode() { |
| 2996 | - static $done = false; |
|
| 2997 | - if (!$done) { |
|
| 2998 | - if (isset($_GET['var_mode'])) { |
|
| 2999 | - $var_mode = explode(',', $_GET['var_mode']); |
|
| 3000 | - // tout le monde peut calcul/recalcul |
|
| 3001 | - if (!defined('_VAR_MODE')) { |
|
| 3002 | - if (in_array('recalcul', $var_mode)) { |
|
| 3003 | - define('_VAR_MODE', 'recalcul'); |
|
| 3004 | - } elseif (in_array('calcul', $var_mode)) { |
|
| 3005 | - define('_VAR_MODE', 'calcul'); |
|
| 3006 | - } |
|
| 3007 | - } |
|
| 3008 | - $var_mode = array_diff($var_mode, ['calcul', 'recalcul']); |
|
| 3009 | - if ($var_mode) { |
|
| 3010 | - include_spip('inc/autoriser'); |
|
| 3011 | - // autoriser preview si preview seulement, et sinon autoriser debug |
|
| 3012 | - if ( |
|
| 3013 | - autoriser( |
|
| 3014 | - ($_GET['var_mode'] == 'preview') |
|
| 3015 | - ? 'previsualiser' |
|
| 3016 | - : 'debug' |
|
| 3017 | - ) |
|
| 3018 | - ) { |
|
| 3019 | - if (in_array('traduction', $var_mode)) { |
|
| 3020 | - // forcer le calcul pour passer dans traduire |
|
| 3021 | - if (!defined('_VAR_MODE')) { |
|
| 3022 | - define('_VAR_MODE', 'calcul'); |
|
| 3023 | - } |
|
| 3024 | - // et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages |
|
| 3025 | - if (!defined('_VAR_NOCACHE')) { |
|
| 3026 | - define('_VAR_NOCACHE', true); |
|
| 3027 | - } |
|
| 3028 | - $var_mode = array_diff($var_mode, ['traduction']); |
|
| 3029 | - } |
|
| 3030 | - if (in_array('preview', $var_mode)) { |
|
| 3031 | - // basculer sur les criteres de preview dans les boucles |
|
| 3032 | - if (!defined('_VAR_PREVIEW')) { |
|
| 3033 | - define('_VAR_PREVIEW', true); |
|
| 3034 | - } |
|
| 3035 | - // forcer le calcul |
|
| 3036 | - if (!defined('_VAR_MODE')) { |
|
| 3037 | - define('_VAR_MODE', 'calcul'); |
|
| 3038 | - } |
|
| 3039 | - // et ne pas enregistrer de cache |
|
| 3040 | - if (!defined('_VAR_NOCACHE')) { |
|
| 3041 | - define('_VAR_NOCACHE', true); |
|
| 3042 | - } |
|
| 3043 | - $var_mode = array_diff($var_mode, ['preview']); |
|
| 3044 | - } |
|
| 3045 | - if (in_array('inclure', $var_mode)) { |
|
| 3046 | - // forcer le compilo et ignorer les caches existants |
|
| 3047 | - if (!defined('_VAR_MODE')) { |
|
| 3048 | - define('_VAR_MODE', 'calcul'); |
|
| 3049 | - } |
|
| 3050 | - if (!defined('_VAR_INCLURE')) { |
|
| 3051 | - define('_VAR_INCLURE', true); |
|
| 3052 | - } |
|
| 3053 | - // et ne pas enregistrer de cache |
|
| 3054 | - if (!defined('_VAR_NOCACHE')) { |
|
| 3055 | - define('_VAR_NOCACHE', true); |
|
| 3056 | - } |
|
| 3057 | - $var_mode = array_diff($var_mode, ['inclure']); |
|
| 3058 | - } |
|
| 3059 | - if (in_array('urls', $var_mode)) { |
|
| 3060 | - // forcer le compilo et ignorer les caches existants |
|
| 3061 | - if (!defined('_VAR_MODE')) { |
|
| 3062 | - define('_VAR_MODE', 'calcul'); |
|
| 3063 | - } |
|
| 3064 | - if (!defined('_VAR_URLS')) { |
|
| 3065 | - define('_VAR_URLS', true); |
|
| 3066 | - } |
|
| 3067 | - $var_mode = array_diff($var_mode, ['urls']); |
|
| 3068 | - } |
|
| 3069 | - if (in_array('images', $var_mode)) { |
|
| 3070 | - // forcer le compilo et ignorer les caches existants |
|
| 3071 | - if (!defined('_VAR_MODE')) { |
|
| 3072 | - define('_VAR_MODE', 'calcul'); |
|
| 3073 | - } |
|
| 3074 | - // indiquer qu'on doit recalculer les images |
|
| 3075 | - if (!defined('_VAR_IMAGES')) { |
|
| 3076 | - define('_VAR_IMAGES', true); |
|
| 3077 | - } |
|
| 3078 | - $var_mode = array_diff($var_mode, ['images']); |
|
| 3079 | - } |
|
| 3080 | - if (in_array('debug', $var_mode)) { |
|
| 3081 | - if (!defined('_VAR_MODE')) { |
|
| 3082 | - define('_VAR_MODE', 'debug'); |
|
| 3083 | - } |
|
| 3084 | - // et ne pas enregistrer de cache |
|
| 3085 | - if (!defined('_VAR_NOCACHE')) { |
|
| 3086 | - define('_VAR_NOCACHE', true); |
|
| 3087 | - } |
|
| 3088 | - $var_mode = array_diff($var_mode, ['debug']); |
|
| 3089 | - } |
|
| 3090 | - if (count($var_mode) and !defined('_VAR_MODE')) { |
|
| 3091 | - define('_VAR_MODE', reset($var_mode)); |
|
| 3092 | - } |
|
| 3093 | - if (isset($GLOBALS['visiteur_session']['nom'])) { |
|
| 3094 | - spip_log($GLOBALS['visiteur_session']['nom'] |
|
| 3095 | - . ' ' . _VAR_MODE); |
|
| 3096 | - } |
|
| 3097 | - } // pas autorise ? |
|
| 3098 | - else { |
|
| 3099 | - // si on n'est pas connecte on se redirige, si on est pas en cli et pas deja en train de se loger |
|
| 3100 | - if ( |
|
| 3101 | - !$GLOBALS['visiteur_session'] |
|
| 3102 | - and !empty($_SERVER['HTTP_HOST']) |
|
| 3103 | - and !empty($_SERVER['REQUEST_METHOD']) |
|
| 3104 | - and $_SERVER['REQUEST_METHOD'] === 'GET' |
|
| 3105 | - ) { |
|
| 3106 | - $self = self('&', true); |
|
| 3107 | - if (strpos($self, 'page=login') === false) { |
|
| 3108 | - include_spip('inc/headers'); |
|
| 3109 | - $redirect = parametre_url(self('&', true), 'var_mode', $_GET['var_mode'], '&'); |
|
| 3110 | - redirige_par_entete(generer_url_public('login', 'url=' . rawurlencode($redirect), true)); |
|
| 3111 | - } |
|
| 3112 | - } |
|
| 3113 | - // sinon tant pis |
|
| 3114 | - } |
|
| 3115 | - } |
|
| 3116 | - } |
|
| 3117 | - if (!defined('_VAR_MODE')) { |
|
| 3118 | - /** |
|
| 3119 | - * Indique le mode de calcul ou d'affichage de la page. |
|
| 3120 | - * @see init_var_mode() |
|
| 3121 | - */ |
|
| 3122 | - define('_VAR_MODE', false); |
|
| 3123 | - } |
|
| 3124 | - $done = true; |
|
| 3125 | - } |
|
| 2995 | + static $done = false; |
|
| 2996 | + if (!$done) { |
|
| 2997 | + if (isset($_GET['var_mode'])) { |
|
| 2998 | + $var_mode = explode(',', $_GET['var_mode']); |
|
| 2999 | + // tout le monde peut calcul/recalcul |
|
| 3000 | + if (!defined('_VAR_MODE')) { |
|
| 3001 | + if (in_array('recalcul', $var_mode)) { |
|
| 3002 | + define('_VAR_MODE', 'recalcul'); |
|
| 3003 | + } elseif (in_array('calcul', $var_mode)) { |
|
| 3004 | + define('_VAR_MODE', 'calcul'); |
|
| 3005 | + } |
|
| 3006 | + } |
|
| 3007 | + $var_mode = array_diff($var_mode, ['calcul', 'recalcul']); |
|
| 3008 | + if ($var_mode) { |
|
| 3009 | + include_spip('inc/autoriser'); |
|
| 3010 | + // autoriser preview si preview seulement, et sinon autoriser debug |
|
| 3011 | + if ( |
|
| 3012 | + autoriser( |
|
| 3013 | + ($_GET['var_mode'] == 'preview') |
|
| 3014 | + ? 'previsualiser' |
|
| 3015 | + : 'debug' |
|
| 3016 | + ) |
|
| 3017 | + ) { |
|
| 3018 | + if (in_array('traduction', $var_mode)) { |
|
| 3019 | + // forcer le calcul pour passer dans traduire |
|
| 3020 | + if (!defined('_VAR_MODE')) { |
|
| 3021 | + define('_VAR_MODE', 'calcul'); |
|
| 3022 | + } |
|
| 3023 | + // et ne pas enregistrer de cache pour ne pas trainer les surlignages sur d'autres pages |
|
| 3024 | + if (!defined('_VAR_NOCACHE')) { |
|
| 3025 | + define('_VAR_NOCACHE', true); |
|
| 3026 | + } |
|
| 3027 | + $var_mode = array_diff($var_mode, ['traduction']); |
|
| 3028 | + } |
|
| 3029 | + if (in_array('preview', $var_mode)) { |
|
| 3030 | + // basculer sur les criteres de preview dans les boucles |
|
| 3031 | + if (!defined('_VAR_PREVIEW')) { |
|
| 3032 | + define('_VAR_PREVIEW', true); |
|
| 3033 | + } |
|
| 3034 | + // forcer le calcul |
|
| 3035 | + if (!defined('_VAR_MODE')) { |
|
| 3036 | + define('_VAR_MODE', 'calcul'); |
|
| 3037 | + } |
|
| 3038 | + // et ne pas enregistrer de cache |
|
| 3039 | + if (!defined('_VAR_NOCACHE')) { |
|
| 3040 | + define('_VAR_NOCACHE', true); |
|
| 3041 | + } |
|
| 3042 | + $var_mode = array_diff($var_mode, ['preview']); |
|
| 3043 | + } |
|
| 3044 | + if (in_array('inclure', $var_mode)) { |
|
| 3045 | + // forcer le compilo et ignorer les caches existants |
|
| 3046 | + if (!defined('_VAR_MODE')) { |
|
| 3047 | + define('_VAR_MODE', 'calcul'); |
|
| 3048 | + } |
|
| 3049 | + if (!defined('_VAR_INCLURE')) { |
|
| 3050 | + define('_VAR_INCLURE', true); |
|
| 3051 | + } |
|
| 3052 | + // et ne pas enregistrer de cache |
|
| 3053 | + if (!defined('_VAR_NOCACHE')) { |
|
| 3054 | + define('_VAR_NOCACHE', true); |
|
| 3055 | + } |
|
| 3056 | + $var_mode = array_diff($var_mode, ['inclure']); |
|
| 3057 | + } |
|
| 3058 | + if (in_array('urls', $var_mode)) { |
|
| 3059 | + // forcer le compilo et ignorer les caches existants |
|
| 3060 | + if (!defined('_VAR_MODE')) { |
|
| 3061 | + define('_VAR_MODE', 'calcul'); |
|
| 3062 | + } |
|
| 3063 | + if (!defined('_VAR_URLS')) { |
|
| 3064 | + define('_VAR_URLS', true); |
|
| 3065 | + } |
|
| 3066 | + $var_mode = array_diff($var_mode, ['urls']); |
|
| 3067 | + } |
|
| 3068 | + if (in_array('images', $var_mode)) { |
|
| 3069 | + // forcer le compilo et ignorer les caches existants |
|
| 3070 | + if (!defined('_VAR_MODE')) { |
|
| 3071 | + define('_VAR_MODE', 'calcul'); |
|
| 3072 | + } |
|
| 3073 | + // indiquer qu'on doit recalculer les images |
|
| 3074 | + if (!defined('_VAR_IMAGES')) { |
|
| 3075 | + define('_VAR_IMAGES', true); |
|
| 3076 | + } |
|
| 3077 | + $var_mode = array_diff($var_mode, ['images']); |
|
| 3078 | + } |
|
| 3079 | + if (in_array('debug', $var_mode)) { |
|
| 3080 | + if (!defined('_VAR_MODE')) { |
|
| 3081 | + define('_VAR_MODE', 'debug'); |
|
| 3082 | + } |
|
| 3083 | + // et ne pas enregistrer de cache |
|
| 3084 | + if (!defined('_VAR_NOCACHE')) { |
|
| 3085 | + define('_VAR_NOCACHE', true); |
|
| 3086 | + } |
|
| 3087 | + $var_mode = array_diff($var_mode, ['debug']); |
|
| 3088 | + } |
|
| 3089 | + if (count($var_mode) and !defined('_VAR_MODE')) { |
|
| 3090 | + define('_VAR_MODE', reset($var_mode)); |
|
| 3091 | + } |
|
| 3092 | + if (isset($GLOBALS['visiteur_session']['nom'])) { |
|
| 3093 | + spip_log($GLOBALS['visiteur_session']['nom'] |
|
| 3094 | + . ' ' . _VAR_MODE); |
|
| 3095 | + } |
|
| 3096 | + } // pas autorise ? |
|
| 3097 | + else { |
|
| 3098 | + // si on n'est pas connecte on se redirige, si on est pas en cli et pas deja en train de se loger |
|
| 3099 | + if ( |
|
| 3100 | + !$GLOBALS['visiteur_session'] |
|
| 3101 | + and !empty($_SERVER['HTTP_HOST']) |
|
| 3102 | + and !empty($_SERVER['REQUEST_METHOD']) |
|
| 3103 | + and $_SERVER['REQUEST_METHOD'] === 'GET' |
|
| 3104 | + ) { |
|
| 3105 | + $self = self('&', true); |
|
| 3106 | + if (strpos($self, 'page=login') === false) { |
|
| 3107 | + include_spip('inc/headers'); |
|
| 3108 | + $redirect = parametre_url(self('&', true), 'var_mode', $_GET['var_mode'], '&'); |
|
| 3109 | + redirige_par_entete(generer_url_public('login', 'url=' . rawurlencode($redirect), true)); |
|
| 3110 | + } |
|
| 3111 | + } |
|
| 3112 | + // sinon tant pis |
|
| 3113 | + } |
|
| 3114 | + } |
|
| 3115 | + } |
|
| 3116 | + if (!defined('_VAR_MODE')) { |
|
| 3117 | + /** |
|
| 3118 | + * Indique le mode de calcul ou d'affichage de la page. |
|
| 3119 | + * @see init_var_mode() |
|
| 3120 | + */ |
|
| 3121 | + define('_VAR_MODE', false); |
|
| 3122 | + } |
|
| 3123 | + $done = true; |
|
| 3124 | + } |
|
| 3126 | 3125 | } |
| 3127 | 3126 | |
| 3128 | 3127 | // Annuler les magic quotes \' sur GET POST COOKIE et GLOBALS ; |
| 3129 | 3128 | // supprimer aussi les eventuels caracteres nuls %00, qui peuvent tromper |
| 3130 | 3129 | // la commande is_readable('chemin/vers/fichier/interdit%00truc_normal') |
| 3131 | 3130 | function spip_desinfecte(&$t, $deep = true) { |
| 3132 | - foreach ($t as $key => $val) { |
|
| 3133 | - if (is_string($t[$key])) { |
|
| 3134 | - $t[$key] = str_replace(chr(0), '-', $t[$key]); |
|
| 3135 | - } // traiter aussi les "texte_plus" de article_edit |
|
| 3136 | - else { |
|
| 3137 | - if ($deep and is_array($t[$key]) and $key !== 'GLOBALS') { |
|
| 3138 | - spip_desinfecte($t[$key], $deep); |
|
| 3139 | - } |
|
| 3140 | - } |
|
| 3141 | - } |
|
| 3131 | + foreach ($t as $key => $val) { |
|
| 3132 | + if (is_string($t[$key])) { |
|
| 3133 | + $t[$key] = str_replace(chr(0), '-', $t[$key]); |
|
| 3134 | + } // traiter aussi les "texte_plus" de article_edit |
|
| 3135 | + else { |
|
| 3136 | + if ($deep and is_array($t[$key]) and $key !== 'GLOBALS') { |
|
| 3137 | + spip_desinfecte($t[$key], $deep); |
|
| 3138 | + } |
|
| 3139 | + } |
|
| 3140 | + } |
|
| 3142 | 3141 | } |
| 3143 | 3142 | |
| 3144 | 3143 | // retourne le statut du visiteur s'il s'annonce |
| 3145 | 3144 | |
| 3146 | 3145 | function verifier_visiteur() { |
| 3147 | - // Rq: pour que cette fonction marche depuis mes_options |
|
| 3148 | - // il faut forcer l'init si ce n'est fait |
|
| 3149 | - // mais on risque de perturber des plugins en initialisant trop tot |
|
| 3150 | - // certaines constantes |
|
| 3151 | - @spip_initialisation_core( |
|
| 3152 | - (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES), |
|
| 3153 | - (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES), |
|
| 3154 | - (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES), |
|
| 3155 | - (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) |
|
| 3156 | - ); |
|
| 3157 | - |
|
| 3158 | - // Demarrer une session NON AUTHENTIFIEE si on donne son nom |
|
| 3159 | - // dans un formulaire sans login (ex: #FORMULAIRE_FORUM) |
|
| 3160 | - // Attention on separe bien session_nom et nom, pour eviter |
|
| 3161 | - // les melanges entre donnees SQL et variables plus aleatoires |
|
| 3162 | - $variables_session = ['session_nom', 'session_email']; |
|
| 3163 | - foreach ($variables_session as $var) { |
|
| 3164 | - if (_request($var) !== null) { |
|
| 3165 | - $init = true; |
|
| 3166 | - break; |
|
| 3167 | - } |
|
| 3168 | - } |
|
| 3169 | - if (isset($init)) { |
|
| 3170 | - #@spip_initialisation_suite(); |
|
| 3171 | - $session = charger_fonction('session', 'inc'); |
|
| 3172 | - $session(); |
|
| 3173 | - include_spip('inc/texte'); |
|
| 3174 | - foreach ($variables_session as $var) { |
|
| 3175 | - if (($a = _request($var)) !== null) { |
|
| 3176 | - $GLOBALS['visiteur_session'][$var] = safehtml($a); |
|
| 3177 | - } |
|
| 3178 | - } |
|
| 3179 | - if (!isset($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 3180 | - $GLOBALS['visiteur_session']['id_auteur'] = 0; |
|
| 3181 | - } |
|
| 3182 | - $session($GLOBALS['visiteur_session']); |
|
| 3183 | - |
|
| 3184 | - return 0; |
|
| 3185 | - } |
|
| 3186 | - |
|
| 3187 | - $h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']); |
|
| 3188 | - if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) { |
|
| 3189 | - $session = charger_fonction('session', 'inc'); |
|
| 3190 | - if ($session()) { |
|
| 3191 | - return $GLOBALS['visiteur_session']['statut']; |
|
| 3192 | - } |
|
| 3193 | - if ($h and isset($_SERVER['PHP_AUTH_PW'])) { |
|
| 3194 | - include_spip('inc/auth'); |
|
| 3195 | - $h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); |
|
| 3196 | - } |
|
| 3197 | - if ($h) { |
|
| 3198 | - $GLOBALS['visiteur_session'] = $h; |
|
| 3199 | - |
|
| 3200 | - return $GLOBALS['visiteur_session']['statut']; |
|
| 3201 | - } |
|
| 3202 | - } |
|
| 3203 | - |
|
| 3204 | - // au moins son navigateur nous dit la langue preferee de cet inconnu |
|
| 3205 | - include_spip('inc/lang'); |
|
| 3206 | - utiliser_langue_visiteur(); |
|
| 3207 | - |
|
| 3208 | - return false; |
|
| 3146 | + // Rq: pour que cette fonction marche depuis mes_options |
|
| 3147 | + // il faut forcer l'init si ce n'est fait |
|
| 3148 | + // mais on risque de perturber des plugins en initialisant trop tot |
|
| 3149 | + // certaines constantes |
|
| 3150 | + @spip_initialisation_core( |
|
| 3151 | + (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES), |
|
| 3152 | + (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES), |
|
| 3153 | + (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES), |
|
| 3154 | + (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) |
|
| 3155 | + ); |
|
| 3156 | + |
|
| 3157 | + // Demarrer une session NON AUTHENTIFIEE si on donne son nom |
|
| 3158 | + // dans un formulaire sans login (ex: #FORMULAIRE_FORUM) |
|
| 3159 | + // Attention on separe bien session_nom et nom, pour eviter |
|
| 3160 | + // les melanges entre donnees SQL et variables plus aleatoires |
|
| 3161 | + $variables_session = ['session_nom', 'session_email']; |
|
| 3162 | + foreach ($variables_session as $var) { |
|
| 3163 | + if (_request($var) !== null) { |
|
| 3164 | + $init = true; |
|
| 3165 | + break; |
|
| 3166 | + } |
|
| 3167 | + } |
|
| 3168 | + if (isset($init)) { |
|
| 3169 | + #@spip_initialisation_suite(); |
|
| 3170 | + $session = charger_fonction('session', 'inc'); |
|
| 3171 | + $session(); |
|
| 3172 | + include_spip('inc/texte'); |
|
| 3173 | + foreach ($variables_session as $var) { |
|
| 3174 | + if (($a = _request($var)) !== null) { |
|
| 3175 | + $GLOBALS['visiteur_session'][$var] = safehtml($a); |
|
| 3176 | + } |
|
| 3177 | + } |
|
| 3178 | + if (!isset($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 3179 | + $GLOBALS['visiteur_session']['id_auteur'] = 0; |
|
| 3180 | + } |
|
| 3181 | + $session($GLOBALS['visiteur_session']); |
|
| 3182 | + |
|
| 3183 | + return 0; |
|
| 3184 | + } |
|
| 3185 | + |
|
| 3186 | + $h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']); |
|
| 3187 | + if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) { |
|
| 3188 | + $session = charger_fonction('session', 'inc'); |
|
| 3189 | + if ($session()) { |
|
| 3190 | + return $GLOBALS['visiteur_session']['statut']; |
|
| 3191 | + } |
|
| 3192 | + if ($h and isset($_SERVER['PHP_AUTH_PW'])) { |
|
| 3193 | + include_spip('inc/auth'); |
|
| 3194 | + $h = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']); |
|
| 3195 | + } |
|
| 3196 | + if ($h) { |
|
| 3197 | + $GLOBALS['visiteur_session'] = $h; |
|
| 3198 | + |
|
| 3199 | + return $GLOBALS['visiteur_session']['statut']; |
|
| 3200 | + } |
|
| 3201 | + } |
|
| 3202 | + |
|
| 3203 | + // au moins son navigateur nous dit la langue preferee de cet inconnu |
|
| 3204 | + include_spip('inc/lang'); |
|
| 3205 | + utiliser_langue_visiteur(); |
|
| 3206 | + |
|
| 3207 | + return false; |
|
| 3209 | 3208 | } |
| 3210 | 3209 | |
| 3211 | 3210 | |
@@ -3228,21 +3227,21 @@ discard block |
||
| 3228 | 3227 | * - string Langue utilisée. |
| 3229 | 3228 | **/ |
| 3230 | 3229 | function lang_select($lang = null) { |
| 3231 | - static $pile_langues = []; |
|
| 3232 | - if (!function_exists('changer_langue')) { |
|
| 3233 | - include_spip('inc/lang'); |
|
| 3234 | - } |
|
| 3235 | - if ($lang === null) { |
|
| 3236 | - $lang = array_pop($pile_langues); |
|
| 3237 | - } else { |
|
| 3238 | - array_push($pile_langues, $GLOBALS['spip_lang']); |
|
| 3239 | - } |
|
| 3240 | - if (isset($GLOBALS['spip_lang']) and $lang == $GLOBALS['spip_lang']) { |
|
| 3241 | - return $lang; |
|
| 3242 | - } |
|
| 3243 | - changer_langue($lang); |
|
| 3230 | + static $pile_langues = []; |
|
| 3231 | + if (!function_exists('changer_langue')) { |
|
| 3232 | + include_spip('inc/lang'); |
|
| 3233 | + } |
|
| 3234 | + if ($lang === null) { |
|
| 3235 | + $lang = array_pop($pile_langues); |
|
| 3236 | + } else { |
|
| 3237 | + array_push($pile_langues, $GLOBALS['spip_lang']); |
|
| 3238 | + } |
|
| 3239 | + if (isset($GLOBALS['spip_lang']) and $lang == $GLOBALS['spip_lang']) { |
|
| 3240 | + return $lang; |
|
| 3241 | + } |
|
| 3242 | + changer_langue($lang); |
|
| 3244 | 3243 | |
| 3245 | - return $lang; |
|
| 3244 | + return $lang; |
|
| 3246 | 3245 | } |
| 3247 | 3246 | |
| 3248 | 3247 | /** |
@@ -3259,20 +3258,20 @@ discard block |
||
| 3259 | 3258 | * Identifiant de la session |
| 3260 | 3259 | **/ |
| 3261 | 3260 | function spip_session($force = false) { |
| 3262 | - static $session; |
|
| 3263 | - if ($force or !isset($session)) { |
|
| 3264 | - $s = pipeline( |
|
| 3265 | - 'definir_session', |
|
| 3266 | - $GLOBALS['visiteur_session'] |
|
| 3267 | - ? serialize($GLOBALS['visiteur_session']) |
|
| 3268 | - . '_' . @$_COOKIE['spip_session'] |
|
| 3269 | - : '' |
|
| 3270 | - ); |
|
| 3271 | - $session = $s ? substr(md5($s), 0, 8) : ''; |
|
| 3272 | - } |
|
| 3261 | + static $session; |
|
| 3262 | + if ($force or !isset($session)) { |
|
| 3263 | + $s = pipeline( |
|
| 3264 | + 'definir_session', |
|
| 3265 | + $GLOBALS['visiteur_session'] |
|
| 3266 | + ? serialize($GLOBALS['visiteur_session']) |
|
| 3267 | + . '_' . @$_COOKIE['spip_session'] |
|
| 3268 | + : '' |
|
| 3269 | + ); |
|
| 3270 | + $session = $s ? substr(md5($s), 0, 8) : ''; |
|
| 3271 | + } |
|
| 3273 | 3272 | |
| 3274 | - #spip_log('session: '.$session); |
|
| 3275 | - return $session; |
|
| 3273 | + #spip_log('session: '.$session); |
|
| 3274 | + return $session; |
|
| 3276 | 3275 | } |
| 3277 | 3276 | |
| 3278 | 3277 | |
@@ -3291,9 +3290,9 @@ discard block |
||
| 3291 | 3290 | * Lien sur une icone d'aide |
| 3292 | 3291 | **/ |
| 3293 | 3292 | function aider($aide = '', $distante = false) { |
| 3294 | - $aider = charger_fonction('aide', 'inc', true); |
|
| 3293 | + $aider = charger_fonction('aide', 'inc', true); |
|
| 3295 | 3294 | |
| 3296 | - return $aider ? $aider($aide, '', [], $distante) : ''; |
|
| 3295 | + return $aider ? $aider($aide, '', [], $distante) : ''; |
|
| 3297 | 3296 | } |
| 3298 | 3297 | |
| 3299 | 3298 | /** |
@@ -3303,24 +3302,24 @@ discard block |
||
| 3303 | 3302 | */ |
| 3304 | 3303 | function exec_info_dist() { |
| 3305 | 3304 | |
| 3306 | - include_spip('inc/autoriser'); |
|
| 3307 | - if (autoriser('phpinfos')) { |
|
| 3308 | - $cookies_masques = ['spip_session', 'PHPSESSID']; |
|
| 3309 | - $cookies_backup = []; |
|
| 3310 | - foreach ($cookies_masques as $k) { |
|
| 3311 | - if (!empty($_COOKIE[$k])) { |
|
| 3312 | - $cookies_backup[$k] = $_COOKIE[$k]; |
|
| 3313 | - $_COOKIE[$k] = '******************************'; |
|
| 3314 | - } |
|
| 3315 | - } |
|
| 3316 | - phpinfo(); |
|
| 3317 | - foreach ($cookies_backup as $k => $v) { |
|
| 3318 | - $_COOKIE[$k] = $v; |
|
| 3319 | - } |
|
| 3320 | - } else { |
|
| 3321 | - include_spip('inc/filtres'); |
|
| 3322 | - sinon_interdire_acces(); |
|
| 3323 | - } |
|
| 3305 | + include_spip('inc/autoriser'); |
|
| 3306 | + if (autoriser('phpinfos')) { |
|
| 3307 | + $cookies_masques = ['spip_session', 'PHPSESSID']; |
|
| 3308 | + $cookies_backup = []; |
|
| 3309 | + foreach ($cookies_masques as $k) { |
|
| 3310 | + if (!empty($_COOKIE[$k])) { |
|
| 3311 | + $cookies_backup[$k] = $_COOKIE[$k]; |
|
| 3312 | + $_COOKIE[$k] = '******************************'; |
|
| 3313 | + } |
|
| 3314 | + } |
|
| 3315 | + phpinfo(); |
|
| 3316 | + foreach ($cookies_backup as $k => $v) { |
|
| 3317 | + $_COOKIE[$k] = $v; |
|
| 3318 | + } |
|
| 3319 | + } else { |
|
| 3320 | + include_spip('inc/filtres'); |
|
| 3321 | + sinon_interdire_acces(); |
|
| 3322 | + } |
|
| 3324 | 3323 | } |
| 3325 | 3324 | |
| 3326 | 3325 | /** |
@@ -3340,13 +3339,13 @@ discard block |
||
| 3340 | 3339 | * - string si $message à false. |
| 3341 | 3340 | **/ |
| 3342 | 3341 | function erreur_squelette($message = '', $lieu = '') { |
| 3343 | - $debusquer = charger_fonction('debusquer', 'public'); |
|
| 3344 | - if (is_array($lieu)) { |
|
| 3345 | - include_spip('public/compiler'); |
|
| 3346 | - $lieu = reconstruire_contexte_compil($lieu); |
|
| 3347 | - } |
|
| 3342 | + $debusquer = charger_fonction('debusquer', 'public'); |
|
| 3343 | + if (is_array($lieu)) { |
|
| 3344 | + include_spip('public/compiler'); |
|
| 3345 | + $lieu = reconstruire_contexte_compil($lieu); |
|
| 3346 | + } |
|
| 3348 | 3347 | |
| 3349 | - return $debusquer($message, $lieu); |
|
| 3348 | + return $debusquer($message, $lieu); |
|
| 3350 | 3349 | } |
| 3351 | 3350 | |
| 3352 | 3351 | /** |
@@ -3383,108 +3382,108 @@ discard block |
||
| 3383 | 3382 | * - ou tableau d'information sur le squelette. |
| 3384 | 3383 | */ |
| 3385 | 3384 | function recuperer_fond($fond, $contexte = [], $options = [], string $connect = '') { |
| 3386 | - if (!function_exists('evaluer_fond')) { |
|
| 3387 | - include_spip('public/assembler'); |
|
| 3388 | - } |
|
| 3389 | - // assurer la compat avec l'ancienne syntaxe |
|
| 3390 | - // (trim etait le 3eme argument, par defaut a true) |
|
| 3391 | - if (!is_array($options)) { |
|
| 3392 | - $options = ['trim' => $options]; |
|
| 3393 | - } |
|
| 3394 | - if (!isset($options['trim'])) { |
|
| 3395 | - $options['trim'] = true; |
|
| 3396 | - } |
|
| 3397 | - |
|
| 3398 | - if (isset($contexte['connect'])) { |
|
| 3399 | - $connect = $contexte['connect']; |
|
| 3400 | - unset($contexte['connect']); |
|
| 3401 | - } |
|
| 3402 | - |
|
| 3403 | - $texte = ''; |
|
| 3404 | - $pages = []; |
|
| 3405 | - $lang_select = ''; |
|
| 3406 | - if (!isset($options['etoile']) or !$options['etoile']) { |
|
| 3407 | - // Si on a inclus sans fixer le critere de lang, on prend la langue courante |
|
| 3408 | - if (!isset($contexte['lang'])) { |
|
| 3409 | - $contexte['lang'] = $GLOBALS['spip_lang']; |
|
| 3410 | - } |
|
| 3411 | - |
|
| 3412 | - if ($contexte['lang'] != $GLOBALS['meta']['langue_site']) { |
|
| 3413 | - $lang_select = lang_select($contexte['lang']); |
|
| 3414 | - } |
|
| 3415 | - } |
|
| 3416 | - |
|
| 3417 | - if (!isset($GLOBALS['_INC_PUBLIC'])) { |
|
| 3418 | - $GLOBALS['_INC_PUBLIC'] = 0; |
|
| 3419 | - } |
|
| 3420 | - |
|
| 3421 | - $GLOBALS['_INC_PUBLIC']++; |
|
| 3422 | - |
|
| 3423 | - // fix #4235 |
|
| 3424 | - $cache_utilise_session_appelant = ($GLOBALS['cache_utilise_session'] ?? null); |
|
| 3425 | - |
|
| 3426 | - |
|
| 3427 | - foreach (is_array($fond) ? $fond : [$fond] as $f) { |
|
| 3428 | - unset($GLOBALS['cache_utilise_session']); // fix #4235 |
|
| 3429 | - |
|
| 3430 | - $page = evaluer_fond($f, $contexte, $connect); |
|
| 3431 | - if ($page === '') { |
|
| 3432 | - $c = $options['compil'] ?? ''; |
|
| 3433 | - $a = ['fichier' => $f]; |
|
| 3434 | - $erreur = _T('info_erreur_squelette2', $a); // squelette introuvable |
|
| 3435 | - erreur_squelette($erreur, $c); |
|
| 3436 | - // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 |
|
| 3437 | - $page = ['texte' => '', 'erreur' => $erreur]; |
|
| 3438 | - } |
|
| 3439 | - |
|
| 3440 | - $page = pipeline('recuperer_fond', [ |
|
| 3441 | - 'args' => ['fond' => $f, 'contexte' => $contexte, 'options' => $options, 'connect' => $connect], |
|
| 3442 | - 'data' => $page |
|
| 3443 | - ]); |
|
| 3444 | - if (isset($options['ajax']) and $options['ajax']) { |
|
| 3445 | - if (!function_exists('encoder_contexte_ajax')) { |
|
| 3446 | - include_spip('inc/filtres'); |
|
| 3447 | - } |
|
| 3448 | - $page['texte'] = encoder_contexte_ajax( |
|
| 3449 | - array_merge( |
|
| 3450 | - $contexte, |
|
| 3451 | - ['fond' => $f], |
|
| 3452 | - ($connect ? ['connect' => $connect] : []) |
|
| 3453 | - ), |
|
| 3454 | - '', |
|
| 3455 | - $page['texte'], |
|
| 3456 | - $options['ajax'] |
|
| 3457 | - ); |
|
| 3458 | - } |
|
| 3459 | - |
|
| 3460 | - if (isset($options['raw']) and $options['raw']) { |
|
| 3461 | - $pages[] = $page; |
|
| 3462 | - } else { |
|
| 3463 | - $texte .= $options['trim'] ? rtrim($page['texte'] ?? '') : $page['texte']; |
|
| 3464 | - } |
|
| 3465 | - |
|
| 3466 | - // contamination de la session appelante, pour les inclusions statiques |
|
| 3467 | - if (isset($page['invalideurs']['session'])) { |
|
| 3468 | - $cache_utilise_session_appelant = $page['invalideurs']['session']; |
|
| 3469 | - } |
|
| 3470 | - } |
|
| 3471 | - |
|
| 3472 | - // restaurer le sessionnement du contexte appelant, |
|
| 3473 | - // éventuellement contaminé si on vient de récupérer une inclusion statique sessionnée |
|
| 3474 | - if (isset($cache_utilise_session_appelant)) { |
|
| 3475 | - $GLOBALS['cache_utilise_session'] = $cache_utilise_session_appelant; |
|
| 3476 | - } |
|
| 3477 | - |
|
| 3478 | - $GLOBALS['_INC_PUBLIC']--; |
|
| 3479 | - |
|
| 3480 | - if ($lang_select) { |
|
| 3481 | - lang_select(); |
|
| 3482 | - } |
|
| 3483 | - if (isset($options['raw']) and $options['raw']) { |
|
| 3484 | - return is_array($fond) ? $pages : reset($pages); |
|
| 3485 | - } else { |
|
| 3486 | - return $options['trim'] ? ltrim($texte) : $texte; |
|
| 3487 | - } |
|
| 3385 | + if (!function_exists('evaluer_fond')) { |
|
| 3386 | + include_spip('public/assembler'); |
|
| 3387 | + } |
|
| 3388 | + // assurer la compat avec l'ancienne syntaxe |
|
| 3389 | + // (trim etait le 3eme argument, par defaut a true) |
|
| 3390 | + if (!is_array($options)) { |
|
| 3391 | + $options = ['trim' => $options]; |
|
| 3392 | + } |
|
| 3393 | + if (!isset($options['trim'])) { |
|
| 3394 | + $options['trim'] = true; |
|
| 3395 | + } |
|
| 3396 | + |
|
| 3397 | + if (isset($contexte['connect'])) { |
|
| 3398 | + $connect = $contexte['connect']; |
|
| 3399 | + unset($contexte['connect']); |
|
| 3400 | + } |
|
| 3401 | + |
|
| 3402 | + $texte = ''; |
|
| 3403 | + $pages = []; |
|
| 3404 | + $lang_select = ''; |
|
| 3405 | + if (!isset($options['etoile']) or !$options['etoile']) { |
|
| 3406 | + // Si on a inclus sans fixer le critere de lang, on prend la langue courante |
|
| 3407 | + if (!isset($contexte['lang'])) { |
|
| 3408 | + $contexte['lang'] = $GLOBALS['spip_lang']; |
|
| 3409 | + } |
|
| 3410 | + |
|
| 3411 | + if ($contexte['lang'] != $GLOBALS['meta']['langue_site']) { |
|
| 3412 | + $lang_select = lang_select($contexte['lang']); |
|
| 3413 | + } |
|
| 3414 | + } |
|
| 3415 | + |
|
| 3416 | + if (!isset($GLOBALS['_INC_PUBLIC'])) { |
|
| 3417 | + $GLOBALS['_INC_PUBLIC'] = 0; |
|
| 3418 | + } |
|
| 3419 | + |
|
| 3420 | + $GLOBALS['_INC_PUBLIC']++; |
|
| 3421 | + |
|
| 3422 | + // fix #4235 |
|
| 3423 | + $cache_utilise_session_appelant = ($GLOBALS['cache_utilise_session'] ?? null); |
|
| 3424 | + |
|
| 3425 | + |
|
| 3426 | + foreach (is_array($fond) ? $fond : [$fond] as $f) { |
|
| 3427 | + unset($GLOBALS['cache_utilise_session']); // fix #4235 |
|
| 3428 | + |
|
| 3429 | + $page = evaluer_fond($f, $contexte, $connect); |
|
| 3430 | + if ($page === '') { |
|
| 3431 | + $c = $options['compil'] ?? ''; |
|
| 3432 | + $a = ['fichier' => $f]; |
|
| 3433 | + $erreur = _T('info_erreur_squelette2', $a); // squelette introuvable |
|
| 3434 | + erreur_squelette($erreur, $c); |
|
| 3435 | + // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 |
|
| 3436 | + $page = ['texte' => '', 'erreur' => $erreur]; |
|
| 3437 | + } |
|
| 3438 | + |
|
| 3439 | + $page = pipeline('recuperer_fond', [ |
|
| 3440 | + 'args' => ['fond' => $f, 'contexte' => $contexte, 'options' => $options, 'connect' => $connect], |
|
| 3441 | + 'data' => $page |
|
| 3442 | + ]); |
|
| 3443 | + if (isset($options['ajax']) and $options['ajax']) { |
|
| 3444 | + if (!function_exists('encoder_contexte_ajax')) { |
|
| 3445 | + include_spip('inc/filtres'); |
|
| 3446 | + } |
|
| 3447 | + $page['texte'] = encoder_contexte_ajax( |
|
| 3448 | + array_merge( |
|
| 3449 | + $contexte, |
|
| 3450 | + ['fond' => $f], |
|
| 3451 | + ($connect ? ['connect' => $connect] : []) |
|
| 3452 | + ), |
|
| 3453 | + '', |
|
| 3454 | + $page['texte'], |
|
| 3455 | + $options['ajax'] |
|
| 3456 | + ); |
|
| 3457 | + } |
|
| 3458 | + |
|
| 3459 | + if (isset($options['raw']) and $options['raw']) { |
|
| 3460 | + $pages[] = $page; |
|
| 3461 | + } else { |
|
| 3462 | + $texte .= $options['trim'] ? rtrim($page['texte'] ?? '') : $page['texte']; |
|
| 3463 | + } |
|
| 3464 | + |
|
| 3465 | + // contamination de la session appelante, pour les inclusions statiques |
|
| 3466 | + if (isset($page['invalideurs']['session'])) { |
|
| 3467 | + $cache_utilise_session_appelant = $page['invalideurs']['session']; |
|
| 3468 | + } |
|
| 3469 | + } |
|
| 3470 | + |
|
| 3471 | + // restaurer le sessionnement du contexte appelant, |
|
| 3472 | + // éventuellement contaminé si on vient de récupérer une inclusion statique sessionnée |
|
| 3473 | + if (isset($cache_utilise_session_appelant)) { |
|
| 3474 | + $GLOBALS['cache_utilise_session'] = $cache_utilise_session_appelant; |
|
| 3475 | + } |
|
| 3476 | + |
|
| 3477 | + $GLOBALS['_INC_PUBLIC']--; |
|
| 3478 | + |
|
| 3479 | + if ($lang_select) { |
|
| 3480 | + lang_select(); |
|
| 3481 | + } |
|
| 3482 | + if (isset($options['raw']) and $options['raw']) { |
|
| 3483 | + return is_array($fond) ? $pages : reset($pages); |
|
| 3484 | + } else { |
|
| 3485 | + return $options['trim'] ? ltrim($texte) : $texte; |
|
| 3486 | + } |
|
| 3488 | 3487 | } |
| 3489 | 3488 | |
| 3490 | 3489 | /** |
@@ -3494,7 +3493,7 @@ discard block |
||
| 3494 | 3493 | * @return string |
| 3495 | 3494 | */ |
| 3496 | 3495 | function trouve_modele($nom) { |
| 3497 | - return trouver_fond($nom, 'modeles/'); |
|
| 3496 | + return trouver_fond($nom, 'modeles/'); |
|
| 3498 | 3497 | } |
| 3499 | 3498 | |
| 3500 | 3499 | /** |
@@ -3510,21 +3509,21 @@ discard block |
||
| 3510 | 3509 | * @return array|string |
| 3511 | 3510 | */ |
| 3512 | 3511 | function trouver_fond($nom, $dir = '', $pathinfo = false) { |
| 3513 | - $f = find_in_path($nom . '.' . _EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/') . '/' : ''); |
|
| 3514 | - if (!$pathinfo) { |
|
| 3515 | - return $f; |
|
| 3516 | - } |
|
| 3517 | - // renvoyer un tableau detaille si $pathinfo==true |
|
| 3518 | - $p = pathinfo($f); |
|
| 3519 | - if (!isset($p['extension']) or !$p['extension']) { |
|
| 3520 | - $p['extension'] = _EXTENSION_SQUELETTES; |
|
| 3521 | - } |
|
| 3522 | - if (!isset($p['extension']) or !$p['filename']) { |
|
| 3523 | - $p['filename'] = ($p['basename'] ? substr($p['basename'], 0, -strlen($p['extension']) - 1) : ''); |
|
| 3524 | - } |
|
| 3525 | - $p['fond'] = ($f ? substr($f, 0, -strlen($p['extension']) - 1) : ''); |
|
| 3512 | + $f = find_in_path($nom . '.' . _EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/') . '/' : ''); |
|
| 3513 | + if (!$pathinfo) { |
|
| 3514 | + return $f; |
|
| 3515 | + } |
|
| 3516 | + // renvoyer un tableau detaille si $pathinfo==true |
|
| 3517 | + $p = pathinfo($f); |
|
| 3518 | + if (!isset($p['extension']) or !$p['extension']) { |
|
| 3519 | + $p['extension'] = _EXTENSION_SQUELETTES; |
|
| 3520 | + } |
|
| 3521 | + if (!isset($p['extension']) or !$p['filename']) { |
|
| 3522 | + $p['filename'] = ($p['basename'] ? substr($p['basename'], 0, -strlen($p['extension']) - 1) : ''); |
|
| 3523 | + } |
|
| 3524 | + $p['fond'] = ($f ? substr($f, 0, -strlen($p['extension']) - 1) : ''); |
|
| 3526 | 3525 | |
| 3527 | - return $p; |
|
| 3526 | + return $p; |
|
| 3528 | 3527 | } |
| 3529 | 3528 | |
| 3530 | 3529 | /** |
@@ -3544,21 +3543,21 @@ discard block |
||
| 3544 | 3543 | * Nom de l'exec, sinon chaîne vide. |
| 3545 | 3544 | **/ |
| 3546 | 3545 | function tester_url_ecrire($nom) { |
| 3547 | - static $exec = []; |
|
| 3548 | - if (isset($exec[$nom])) { |
|
| 3549 | - return $exec[$nom]; |
|
| 3550 | - } |
|
| 3551 | - // tester si c'est une page en squelette |
|
| 3552 | - if (trouver_fond($nom, 'prive/squelettes/contenu/')) { |
|
| 3553 | - return $exec[$nom] = 'fond'; |
|
| 3554 | - } // echafaudage d'un fond ! |
|
| 3555 | - elseif (include_spip('public/styliser_par_z') and z_echafaudable($nom)) { |
|
| 3556 | - return $exec[$nom] = 'fond'; |
|
| 3557 | - } |
|
| 3558 | - // attention, il ne faut pas inclure l'exec ici |
|
| 3559 | - // car sinon #URL_ECRIRE provoque des inclusions |
|
| 3560 | - // et des define intrusifs potentiels |
|
| 3561 | - return $exec[$nom] = ((find_in_path("{$nom}.php", 'exec/') or charger_fonction($nom, 'exec', true)) ? $nom : ''); |
|
| 3546 | + static $exec = []; |
|
| 3547 | + if (isset($exec[$nom])) { |
|
| 3548 | + return $exec[$nom]; |
|
| 3549 | + } |
|
| 3550 | + // tester si c'est une page en squelette |
|
| 3551 | + if (trouver_fond($nom, 'prive/squelettes/contenu/')) { |
|
| 3552 | + return $exec[$nom] = 'fond'; |
|
| 3553 | + } // echafaudage d'un fond ! |
|
| 3554 | + elseif (include_spip('public/styliser_par_z') and z_echafaudable($nom)) { |
|
| 3555 | + return $exec[$nom] = 'fond'; |
|
| 3556 | + } |
|
| 3557 | + // attention, il ne faut pas inclure l'exec ici |
|
| 3558 | + // car sinon #URL_ECRIRE provoque des inclusions |
|
| 3559 | + // et des define intrusifs potentiels |
|
| 3560 | + return $exec[$nom] = ((find_in_path("{$nom}.php", 'exec/') or charger_fonction($nom, 'exec', true)) ? $nom : ''); |
|
| 3562 | 3561 | } |
| 3563 | 3562 | |
| 3564 | 3563 | /** |
@@ -3568,8 +3567,8 @@ discard block |
||
| 3568 | 3567 | * true si la constante _VERSION_HTML n'est pas définie ou égale à html5 |
| 3569 | 3568 | **/ |
| 3570 | 3569 | function html5_permis() { |
| 3571 | - return (!defined('_VERSION_HTML') |
|
| 3572 | - or _VERSION_HTML !== 'html4'); |
|
| 3570 | + return (!defined('_VERSION_HTML') |
|
| 3571 | + or _VERSION_HTML !== 'html4'); |
|
| 3573 | 3572 | } |
| 3574 | 3573 | |
| 3575 | 3574 | /** |
@@ -3579,30 +3578,30 @@ discard block |
||
| 3579 | 3578 | * @return array |
| 3580 | 3579 | */ |
| 3581 | 3580 | function formats_image_acceptables($gd = null, $svg_allowed = true) { |
| 3582 | - $formats = null; |
|
| 3583 | - if (!is_null($gd)) { |
|
| 3584 | - $config = ($gd ? 'gd_formats' : 'formats_graphiques'); |
|
| 3585 | - if (isset($GLOBALS['meta'][$config])) { |
|
| 3586 | - $formats = $GLOBALS['meta'][$config]; |
|
| 3587 | - $formats = explode(',', $formats); |
|
| 3588 | - $formats = array_filter($formats); |
|
| 3589 | - $formats = array_map('trim', $formats); |
|
| 3590 | - } |
|
| 3591 | - } |
|
| 3592 | - if (is_null($formats)) { |
|
| 3593 | - include_spip('inc/filtres_images_lib_mini'); |
|
| 3594 | - $formats = _image_extensions_acceptees_en_entree(); |
|
| 3595 | - } |
|
| 3596 | - |
|
| 3597 | - if ($svg_allowed) { |
|
| 3598 | - if (!in_array('svg', $formats)) { |
|
| 3599 | - $formats[] = 'svg'; |
|
| 3600 | - } |
|
| 3601 | - } |
|
| 3602 | - else { |
|
| 3603 | - $formats = array_diff($formats, ['svg']); |
|
| 3604 | - } |
|
| 3605 | - return $formats; |
|
| 3581 | + $formats = null; |
|
| 3582 | + if (!is_null($gd)) { |
|
| 3583 | + $config = ($gd ? 'gd_formats' : 'formats_graphiques'); |
|
| 3584 | + if (isset($GLOBALS['meta'][$config])) { |
|
| 3585 | + $formats = $GLOBALS['meta'][$config]; |
|
| 3586 | + $formats = explode(',', $formats); |
|
| 3587 | + $formats = array_filter($formats); |
|
| 3588 | + $formats = array_map('trim', $formats); |
|
| 3589 | + } |
|
| 3590 | + } |
|
| 3591 | + if (is_null($formats)) { |
|
| 3592 | + include_spip('inc/filtres_images_lib_mini'); |
|
| 3593 | + $formats = _image_extensions_acceptees_en_entree(); |
|
| 3594 | + } |
|
| 3595 | + |
|
| 3596 | + if ($svg_allowed) { |
|
| 3597 | + if (!in_array('svg', $formats)) { |
|
| 3598 | + $formats[] = 'svg'; |
|
| 3599 | + } |
|
| 3600 | + } |
|
| 3601 | + else { |
|
| 3602 | + $formats = array_diff($formats, ['svg']); |
|
| 3603 | + } |
|
| 3604 | + return $formats; |
|
| 3606 | 3605 | } |
| 3607 | 3606 | |
| 3608 | 3607 | /** |
@@ -3611,20 +3610,20 @@ discard block |
||
| 3611 | 3610 | * @return array|bool |
| 3612 | 3611 | */ |
| 3613 | 3612 | function spip_getimagesize($fichier) { |
| 3614 | - if (!$imagesize = @getimagesize($fichier)) { |
|
| 3615 | - include_spip('inc/svg'); |
|
| 3616 | - if ($attrs = svg_lire_attributs($fichier)) { |
|
| 3617 | - [$width, $height, $viewbox] = svg_getimagesize_from_attr($attrs); |
|
| 3618 | - $imagesize = [ |
|
| 3619 | - $width, |
|
| 3620 | - $height, |
|
| 3621 | - IMAGETYPE_SVG, |
|
| 3622 | - "width=\"{$width}\" height=\"{$height}\"", |
|
| 3623 | - 'mime' => 'image/svg+xml' |
|
| 3624 | - ]; |
|
| 3625 | - } |
|
| 3626 | - } |
|
| 3627 | - return $imagesize; |
|
| 3613 | + if (!$imagesize = @getimagesize($fichier)) { |
|
| 3614 | + include_spip('inc/svg'); |
|
| 3615 | + if ($attrs = svg_lire_attributs($fichier)) { |
|
| 3616 | + [$width, $height, $viewbox] = svg_getimagesize_from_attr($attrs); |
|
| 3617 | + $imagesize = [ |
|
| 3618 | + $width, |
|
| 3619 | + $height, |
|
| 3620 | + IMAGETYPE_SVG, |
|
| 3621 | + "width=\"{$width}\" height=\"{$height}\"", |
|
| 3622 | + 'mime' => 'image/svg+xml' |
|
| 3623 | + ]; |
|
| 3624 | + } |
|
| 3625 | + } |
|
| 3626 | + return $imagesize; |
|
| 3628 | 3627 | } |
| 3629 | 3628 | |
| 3630 | 3629 | /** |
@@ -3638,19 +3637,19 @@ discard block |
||
| 3638 | 3637 | * @param string $statut |
| 3639 | 3638 | */ |
| 3640 | 3639 | function avertir_auteurs($nom, $message, $statut = '') { |
| 3641 | - $alertes = $GLOBALS['meta']['message_alertes_auteurs']; |
|
| 3642 | - if ( |
|
| 3643 | - !$alertes |
|
| 3644 | - or !is_array($alertes = unserialize($alertes)) |
|
| 3645 | - ) { |
|
| 3646 | - $alertes = []; |
|
| 3647 | - } |
|
| 3640 | + $alertes = $GLOBALS['meta']['message_alertes_auteurs']; |
|
| 3641 | + if ( |
|
| 3642 | + !$alertes |
|
| 3643 | + or !is_array($alertes = unserialize($alertes)) |
|
| 3644 | + ) { |
|
| 3645 | + $alertes = []; |
|
| 3646 | + } |
|
| 3648 | 3647 | |
| 3649 | - if (!isset($alertes[$statut])) { |
|
| 3650 | - $alertes[$statut] = []; |
|
| 3651 | - } |
|
| 3652 | - $alertes[$statut][$nom] = $message; |
|
| 3653 | - ecrire_meta('message_alertes_auteurs', serialize($alertes)); |
|
| 3648 | + if (!isset($alertes[$statut])) { |
|
| 3649 | + $alertes[$statut] = []; |
|
| 3650 | + } |
|
| 3651 | + $alertes[$statut][$nom] = $message; |
|
| 3652 | + ecrire_meta('message_alertes_auteurs', serialize($alertes)); |
|
| 3654 | 3653 | } |
| 3655 | 3654 | |
| 3656 | 3655 | /** |
@@ -3664,10 +3663,10 @@ discard block |
||
| 3664 | 3663 | * @return string|string[] |
| 3665 | 3664 | */ |
| 3666 | 3665 | function spip_sanitize_classname($classes) { |
| 3667 | - if (is_array($classes)) { |
|
| 3668 | - return array_map('spip_sanitize_classname', $classes); |
|
| 3669 | - } |
|
| 3670 | - return preg_replace('/[^ 0-9a-z_\-+@]/i', '', $classes); |
|
| 3666 | + if (is_array($classes)) { |
|
| 3667 | + return array_map('spip_sanitize_classname', $classes); |
|
| 3668 | + } |
|
| 3669 | + return preg_replace('/[^ 0-9a-z_\-+@]/i', '', $classes); |
|
| 3671 | 3670 | } |
| 3672 | 3671 | |
| 3673 | 3672 | |
@@ -3692,32 +3691,32 @@ discard block |
||
| 3692 | 3691 | * Avec operateur : bool. |
| 3693 | 3692 | **/ |
| 3694 | 3693 | function spip_version_compare($v1, $v2, $op = null) { |
| 3695 | - $v1 = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v1)); |
|
| 3696 | - $v2 = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v2)); |
|
| 3697 | - $v1 = str_replace('rc', 'RC', $v1); // certaines versions de PHP ne comprennent RC qu'en majuscule |
|
| 3698 | - $v2 = str_replace('rc', 'RC', $v2); // certaines versions de PHP ne comprennent RC qu'en majuscule |
|
| 3699 | - |
|
| 3700 | - $v1 = explode('.', $v1); |
|
| 3701 | - $v2 = explode('.', $v2); |
|
| 3702 | - // $v1 est toujours une version, donc sans etoile |
|
| 3703 | - while (count($v1) < count($v2)) { |
|
| 3704 | - $v1[] = '0'; |
|
| 3705 | - } |
|
| 3706 | - |
|
| 3707 | - // $v2 peut etre une borne, donc accepte l'etoile |
|
| 3708 | - $etoile = false; |
|
| 3709 | - foreach ($v1 as $k => $v) { |
|
| 3710 | - if (!isset($v2[$k])) { |
|
| 3711 | - $v2[] = ($etoile and (is_numeric($v) or $v == 'pl' or $v == 'p')) ? $v : '0'; |
|
| 3712 | - } else { |
|
| 3713 | - if ($v2[$k] == '*') { |
|
| 3714 | - $etoile = true; |
|
| 3715 | - $v2[$k] = $v; |
|
| 3716 | - } |
|
| 3717 | - } |
|
| 3718 | - } |
|
| 3719 | - $v1 = implode('.', $v1); |
|
| 3720 | - $v2 = implode('.', $v2); |
|
| 3721 | - |
|
| 3722 | - return $op ? version_compare($v1, $v2, $op) : version_compare($v1, $v2); |
|
| 3694 | + $v1 = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v1)); |
|
| 3695 | + $v2 = strtolower(preg_replace(',([0-9])[\s.-]?(dev|alpha|a|beta|b|rc|pl|p),i', '\\1.\\2', $v2)); |
|
| 3696 | + $v1 = str_replace('rc', 'RC', $v1); // certaines versions de PHP ne comprennent RC qu'en majuscule |
|
| 3697 | + $v2 = str_replace('rc', 'RC', $v2); // certaines versions de PHP ne comprennent RC qu'en majuscule |
|
| 3698 | + |
|
| 3699 | + $v1 = explode('.', $v1); |
|
| 3700 | + $v2 = explode('.', $v2); |
|
| 3701 | + // $v1 est toujours une version, donc sans etoile |
|
| 3702 | + while (count($v1) < count($v2)) { |
|
| 3703 | + $v1[] = '0'; |
|
| 3704 | + } |
|
| 3705 | + |
|
| 3706 | + // $v2 peut etre une borne, donc accepte l'etoile |
|
| 3707 | + $etoile = false; |
|
| 3708 | + foreach ($v1 as $k => $v) { |
|
| 3709 | + if (!isset($v2[$k])) { |
|
| 3710 | + $v2[] = ($etoile and (is_numeric($v) or $v == 'pl' or $v == 'p')) ? $v : '0'; |
|
| 3711 | + } else { |
|
| 3712 | + if ($v2[$k] == '*') { |
|
| 3713 | + $etoile = true; |
|
| 3714 | + $v2[$k] = $v; |
|
| 3715 | + } |
|
| 3716 | + } |
|
| 3717 | + } |
|
| 3718 | + $v1 = implode('.', $v1); |
|
| 3719 | + $v2 = implode('.', $v2); |
|
| 3720 | + |
|
| 3721 | + return $op ? version_compare($v1, $v2, $op) : version_compare($v1, $v2); |
|
| 3723 | 3722 | } |
@@ -53,12 +53,12 @@ discard block |
||
| 53 | 53 | if (strlen($dossier) and substr($dossier, -1) != '/') { |
| 54 | 54 | $dossier .= '/'; |
| 55 | 55 | } |
| 56 | - $f = str_replace('/', '_', $dossier) . $nom; |
|
| 56 | + $f = str_replace('/', '_', $dossier).$nom; |
|
| 57 | 57 | |
| 58 | 58 | if (function_exists($f)) { |
| 59 | 59 | return $f; |
| 60 | 60 | } |
| 61 | - if (function_exists($g = $f . '_dist')) { |
|
| 61 | + if (function_exists($g = $f.'_dist')) { |
|
| 62 | 62 | return $g; |
| 63 | 63 | } |
| 64 | 64 | |
@@ -79,7 +79,7 @@ discard block |
||
| 79 | 79 | // passer en minuscules (cf les balises de formulaires) |
| 80 | 80 | // et inclure le fichier |
| 81 | 81 | if ( |
| 82 | - !$inc = include_spip($dossier . ($d = strtolower($nom))) |
|
| 82 | + !$inc = include_spip($dossier.($d = strtolower($nom))) |
|
| 83 | 83 | // si le fichier truc/machin/nom.php n'existe pas, |
| 84 | 84 | // la fonction peut etre definie dans truc/machin.php qui regroupe plusieurs petites fonctions |
| 85 | 85 | and strlen(dirname($dossier)) and dirname($dossier) != '.' |
@@ -98,19 +98,19 @@ discard block |
||
| 98 | 98 | } |
| 99 | 99 | |
| 100 | 100 | // Echec : message d'erreur |
| 101 | - spip_log("fonction $nom ($f ou $g) indisponible" . |
|
| 101 | + spip_log("fonction $nom ($f ou $g) indisponible". |
|
| 102 | 102 | ($inc ? '' : " (fichier $d absent de $dossier)")); |
| 103 | 103 | |
| 104 | 104 | include_spip('inc/minipres'); |
| 105 | 105 | echo minipres( |
| 106 | 106 | _T('forum_titre_erreur'), |
| 107 | 107 | $inc ? |
| 108 | - _T('fonction_introuvable', ['fonction' => '<code>' . spip_htmlentities($f) . '</code>']) |
|
| 108 | + _T('fonction_introuvable', ['fonction' => '<code>'.spip_htmlentities($f).'</code>']) |
|
| 109 | 109 | . '<br />' |
| 110 | - . _T('fonction_introuvable', ['fonction' => '<code>' . spip_htmlentities($g) . '</code>']) |
|
| 110 | + . _T('fonction_introuvable', ['fonction' => '<code>'.spip_htmlentities($g).'</code>']) |
|
| 111 | 111 | : |
| 112 | - _T('fichier_introuvable', ['fichier' => '<code>' . spip_htmlentities($d) . '</code>']), |
|
| 113 | - ['all_inline' => true,'status' => 404] |
|
| 112 | + _T('fichier_introuvable', ['fichier' => '<code>'.spip_htmlentities($d).'</code>']), |
|
| 113 | + ['all_inline' => true, 'status' => 404] |
|
| 114 | 114 | ); |
| 115 | 115 | exit; |
| 116 | 116 | } |
@@ -156,7 +156,7 @@ discard block |
||
| 156 | 156 | * - string : chemin du fichier trouvé |
| 157 | 157 | **/ |
| 158 | 158 | function include_spip($f, $include = true) { |
| 159 | - return find_in_path($f . '.php', '', $include); |
|
| 159 | + return find_in_path($f.'.php', '', $include); |
|
| 160 | 160 | } |
| 161 | 161 | |
| 162 | 162 | /** |
@@ -176,7 +176,7 @@ discard block |
||
| 176 | 176 | * - string : chemin du fichier trouvé |
| 177 | 177 | **/ |
| 178 | 178 | function require_spip($f) { |
| 179 | - return find_in_path($f . '.php', '', 'required'); |
|
| 179 | + return find_in_path($f.'.php', '', 'required'); |
|
| 180 | 180 | } |
| 181 | 181 | |
| 182 | 182 | |
@@ -193,7 +193,7 @@ discard block |
||
| 193 | 193 | // donc il faut l'inclure "en globals" |
| 194 | 194 | if ($f = find_in_path('mes_fonctions.php')) { |
| 195 | 195 | global $dossier_squelettes; |
| 196 | - include_once(_ROOT_CWD . $f); |
|
| 196 | + include_once(_ROOT_CWD.$f); |
|
| 197 | 197 | } |
| 198 | 198 | |
| 199 | 199 | if (@is_readable(_CACHE_PLUGINS_FCT)) { |
@@ -298,7 +298,7 @@ discard block |
||
| 298 | 298 | } |
| 299 | 299 | |
| 300 | 300 | // appliquer notre fonction si elle existe |
| 301 | - $fonc = 'execute_pipeline_' . strtolower($action); |
|
| 301 | + $fonc = 'execute_pipeline_'.strtolower($action); |
|
| 302 | 302 | if (function_exists($fonc)) { |
| 303 | 303 | $val = $fonc($val); |
| 304 | 304 | } // plantage ? |
@@ -363,7 +363,7 @@ discard block |
||
| 363 | 363 | function spip_log($message = null, $name = null) { |
| 364 | 364 | static $pre = []; |
| 365 | 365 | static $log; |
| 366 | - preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string)$name, $regs); |
|
| 366 | + preg_match('/^([a-z_]*)\.?(\d)?$/iS', (string) $name, $regs); |
|
| 367 | 367 | if (!isset($regs[1]) or !$logname = $regs[1]) { |
| 368 | 368 | $logname = null; |
| 369 | 369 | } |
@@ -391,7 +391,7 @@ discard block |
||
| 391 | 391 | if (!is_string($message)) { |
| 392 | 392 | $message = print_r($message, true); |
| 393 | 393 | } |
| 394 | - $log($pre[$niveau] . ' ' . $message, $logname); |
|
| 394 | + $log($pre[$niveau].' '.$message, $logname); |
|
| 395 | 395 | } |
| 396 | 396 | } |
| 397 | 397 | |
@@ -592,7 +592,7 @@ discard block |
||
| 592 | 592 | $a = './'; |
| 593 | 593 | } |
| 594 | 594 | |
| 595 | - $regexp = ',^(' . str_replace('[]', '\[\]', $c) . '[[]?[]]?)(=.*)?$,'; |
|
| 595 | + $regexp = ',^('.str_replace('[]', '\[\]', $c).'[[]?[]]?)(=.*)?$,'; |
|
| 596 | 596 | $ajouts = array_flip(explode('|', $c)); |
| 597 | 597 | $u = is_array($v) ? $v : rawurlencode((string) $v); |
| 598 | 598 | $testv = (is_array($v) ? count($v) : strlen((string) $v)); |
@@ -619,7 +619,7 @@ discard block |
||
| 619 | 619 | // Ajout. Pour une variable, remplacer au meme endroit, |
| 620 | 620 | // pour un tableau ce sera fait dans la prochaine boucle |
| 621 | 621 | elseif (substr($r[1], -2) != '[]') { |
| 622 | - $url[$n] = $r[1] . '=' . $u; |
|
| 622 | + $url[$n] = $r[1].'='.$u; |
|
| 623 | 623 | unset($ajouts[$r[1]]); |
| 624 | 624 | } |
| 625 | 625 | // Pour les tableaux on laisse tomber les valeurs de |
@@ -640,11 +640,11 @@ discard block |
||
| 640 | 640 | } elseif ($testv) { |
| 641 | 641 | foreach ($ajouts as $k => $n) { |
| 642 | 642 | if (!is_array($v)) { |
| 643 | - $url[] = $k . '=' . $u; |
|
| 643 | + $url[] = $k.'='.$u; |
|
| 644 | 644 | } else { |
| 645 | - $id = (substr($k, -2) == '[]') ? $k : ($k . '[]'); |
|
| 645 | + $id = (substr($k, -2) == '[]') ? $k : ($k.'[]'); |
|
| 646 | 646 | foreach ($v as $w) { |
| 647 | - $url[] = $id . '=' . (is_array($w) ? 'Array' : rawurlencode($w)); |
|
| 647 | + $url[] = $id.'='.(is_array($w) ? 'Array' : rawurlencode($w)); |
|
| 648 | 648 | } |
| 649 | 649 | } |
| 650 | 650 | } |
@@ -655,10 +655,10 @@ discard block |
||
| 655 | 655 | |
| 656 | 656 | // recomposer l'adresse |
| 657 | 657 | if ($url) { |
| 658 | - $a .= '?' . join($sep, $url); |
|
| 658 | + $a .= '?'.join($sep, $url); |
|
| 659 | 659 | } |
| 660 | 660 | |
| 661 | - return $a . $ancre; |
|
| 661 | + return $a.$ancre; |
|
| 662 | 662 | } |
| 663 | 663 | |
| 664 | 664 | /** |
@@ -690,7 +690,7 @@ discard block |
||
| 690 | 690 | translitteration($ancre) |
| 691 | 691 | ); |
| 692 | 692 | } |
| 693 | - return $url . (strlen($ancre) ? '#' . $ancre : ''); |
|
| 693 | + return $url.(strlen($ancre) ? '#'.$ancre : ''); |
|
| 694 | 694 | } |
| 695 | 695 | |
| 696 | 696 | /** |
@@ -806,7 +806,7 @@ discard block |
||
| 806 | 806 | * @return bool |
| 807 | 807 | */ |
| 808 | 808 | function test_plugin_actif($plugin) { |
| 809 | - return ($plugin and defined('_DIR_PLUGIN_' . strtoupper($plugin))) ? true : false; |
|
| 809 | + return ($plugin and defined('_DIR_PLUGIN_'.strtoupper($plugin))) ? true : false; |
|
| 810 | 810 | } |
| 811 | 811 | |
| 812 | 812 | /** |
@@ -938,7 +938,7 @@ discard block |
||
| 938 | 938 | $value = interdire_scripts($value, -1); |
| 939 | 939 | } |
| 940 | 940 | if (!empty($options['class'])) { |
| 941 | - $value = "<span class='" . $options['class'] . "'>$value</span>"; |
|
| 941 | + $value = "<span class='".$options['class']."'>$value</span>"; |
|
| 942 | 942 | } |
| 943 | 943 | $text = str_replace("@$name@", $value, $text); |
| 944 | 944 | unset($args[$name]); |
@@ -947,7 +947,7 @@ discard block |
||
| 947 | 947 | // Si des variables n'ont pas ete inserees, le signaler |
| 948 | 948 | // (chaines de langues pas a jour) |
| 949 | 949 | if ($args) { |
| 950 | - spip_log("$f: variables inutilisees " . join(', ', array_keys($args)), _LOG_DEBUG); |
|
| 950 | + spip_log("$f: variables inutilisees ".join(', ', array_keys($args)), _LOG_DEBUG); |
|
| 951 | 951 | } |
| 952 | 952 | } |
| 953 | 953 | |
@@ -971,7 +971,7 @@ discard block |
||
| 971 | 971 | function joli_repertoire($rep) { |
| 972 | 972 | $a = substr($rep, 0, 1); |
| 973 | 973 | if ($a <> '.' and $a <> '/') { |
| 974 | - $rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS) . $rep; |
|
| 974 | + $rep = (_DIR_RESTREINT ? '' : _DIR_RESTREINT_ABS).$rep; |
|
| 975 | 975 | } |
| 976 | 976 | $rep = preg_replace(',(^\.\.\/),', '', $rep); |
| 977 | 977 | |
@@ -1025,7 +1025,7 @@ discard block |
||
| 1025 | 1025 | $p -= ($x * 1000); |
| 1026 | 1026 | } |
| 1027 | 1027 | |
| 1028 | - return $s . sprintf($s ? '%07.3f ms' : '%.3f ms', $p); |
|
| 1028 | + return $s.sprintf($s ? '%07.3f ms' : '%.3f ms', $p); |
|
| 1029 | 1029 | } |
| 1030 | 1030 | } |
| 1031 | 1031 | |
@@ -1092,7 +1092,7 @@ discard block |
||
| 1092 | 1092 | if ($taches and count($taches) and !spip_connect()) { |
| 1093 | 1093 | return false; |
| 1094 | 1094 | } |
| 1095 | - spip_log('cron !', 'jq' . _LOG_DEBUG); |
|
| 1095 | + spip_log('cron !', 'jq'._LOG_DEBUG); |
|
| 1096 | 1096 | if ($genie = charger_fonction('genie', 'inc', true)) { |
| 1097 | 1097 | return $genie($taches); |
| 1098 | 1098 | } |
@@ -1196,7 +1196,7 @@ discard block |
||
| 1196 | 1196 | |
| 1197 | 1197 | if ($queue_next_job_time == -1) { |
| 1198 | 1198 | if (!defined('_JQ_NEXT_JOB_TIME_FILENAME')) { |
| 1199 | - define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP . 'job_queue_next.txt'); |
|
| 1199 | + define('_JQ_NEXT_JOB_TIME_FILENAME', _DIR_TMP.'job_queue_next.txt'); |
|
| 1200 | 1200 | } |
| 1201 | 1201 | // utiliser un cache memoire si dispo |
| 1202 | 1202 | if (function_exists('cache_get') and defined('_MEMOIZE_MEMORY') and _MEMOIZE_MEMORY) { |
@@ -1265,8 +1265,8 @@ discard block |
||
| 1265 | 1265 | $src = ''; |
| 1266 | 1266 | } |
| 1267 | 1267 | if ($script) { |
| 1268 | - $script = ("/*<![CDATA[*/\n" . |
|
| 1269 | - preg_replace(',</([^>]*)>,', '<\/\1>', $script) . |
|
| 1268 | + $script = ("/*<![CDATA[*/\n". |
|
| 1269 | + preg_replace(',</([^>]*)>,', '<\/\1>', $script). |
|
| 1270 | 1270 | '/*]]>*/'); |
| 1271 | 1271 | } |
| 1272 | 1272 | if ($noscript) { |
@@ -1352,13 +1352,13 @@ discard block |
||
| 1352 | 1352 | if ($path_base == null) { |
| 1353 | 1353 | // Chemin standard depuis l'espace public |
| 1354 | 1354 | $path = defined('_SPIP_PATH') ? _SPIP_PATH : |
| 1355 | - _DIR_RACINE . ':' . |
|
| 1356 | - _DIR_RACINE . 'squelettes-dist/:' . |
|
| 1357 | - _DIR_RACINE . 'prive/:' . |
|
| 1355 | + _DIR_RACINE.':'. |
|
| 1356 | + _DIR_RACINE.'squelettes-dist/:'. |
|
| 1357 | + _DIR_RACINE.'prive/:'. |
|
| 1358 | 1358 | _DIR_RESTREINT; |
| 1359 | 1359 | // Ajouter squelettes/ |
| 1360 | - if (@is_dir(_DIR_RACINE . 'squelettes')) { |
|
| 1361 | - $path = _DIR_RACINE . 'squelettes/:' . $path; |
|
| 1360 | + if (@is_dir(_DIR_RACINE.'squelettes')) { |
|
| 1361 | + $path = _DIR_RACINE.'squelettes/:'.$path; |
|
| 1362 | 1362 | } |
| 1363 | 1363 | foreach (explode(':', $path) as $dir) { |
| 1364 | 1364 | if (strlen($dir) and substr($dir, -1) != '/') { |
@@ -1370,7 +1370,7 @@ discard block |
||
| 1370 | 1370 | // Et le(s) dossier(s) des squelettes nommes |
| 1371 | 1371 | if (strlen($GLOBALS['dossier_squelettes'])) { |
| 1372 | 1372 | foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) { |
| 1373 | - array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE) . $d . '/'); |
|
| 1373 | + array_unshift($path_full, ($d[0] == '/' ? '' : _DIR_RACINE).$d.'/'); |
|
| 1374 | 1374 | } |
| 1375 | 1375 | } |
| 1376 | 1376 | $GLOBALS['path_sig'] = md5(serialize($path_full)); |
@@ -1381,7 +1381,7 @@ discard block |
||
| 1381 | 1381 | |
| 1382 | 1382 | if (is_array($dir_path) or strlen($dir_path)) { |
| 1383 | 1383 | $tete = ''; |
| 1384 | - if (reset($path_base) == _DIR_RACINE . 'squelettes/') { |
|
| 1384 | + if (reset($path_base) == _DIR_RACINE.'squelettes/') { |
|
| 1385 | 1385 | $tete = array_shift($path_base); |
| 1386 | 1386 | } |
| 1387 | 1387 | $dirs = (is_array($dir_path) ? $dir_path : explode(':', $dir_path)); |
@@ -1402,7 +1402,7 @@ discard block |
||
| 1402 | 1402 | // Et le(s) dossier(s) des squelettes nommes |
| 1403 | 1403 | if (strlen($GLOBALS['dossier_squelettes'])) { |
| 1404 | 1404 | foreach (array_reverse(explode(':', $GLOBALS['dossier_squelettes'])) as $d) { |
| 1405 | - array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE) . $d . '/'); |
|
| 1405 | + array_unshift($path_full, ((isset($d[0]) and $d[0] == '/') ? '' : _DIR_RACINE).$d.'/'); |
|
| 1406 | 1406 | } |
| 1407 | 1407 | } |
| 1408 | 1408 | |
@@ -1473,14 +1473,14 @@ discard block |
||
| 1473 | 1473 | // si il y a un .svg a la bonne taille (-16.svg) a cote, on l'utilise en remplacement du -16.png |
| 1474 | 1474 | if ( |
| 1475 | 1475 | preg_match(',-(\d+)[.](png|gif|svg)$,', $file, $m) |
| 1476 | - and $file_svg_generique = substr($file, 0, -strlen($m[0])) . '-xx.svg' |
|
| 1476 | + and $file_svg_generique = substr($file, 0, -strlen($m[0])).'-xx.svg' |
|
| 1477 | 1477 | and $f = find_in_theme("$file_svg_generique") |
| 1478 | 1478 | ) { |
| 1479 | - if ($fsize = substr($f, 0, -6) . $m[1] . '.svg' and file_exists($fsize)) { |
|
| 1479 | + if ($fsize = substr($f, 0, -6).$m[1].'.svg' and file_exists($fsize)) { |
|
| 1480 | 1480 | return $themefiles["$subdir$file"] = $fsize; |
| 1481 | 1481 | } |
| 1482 | 1482 | else { |
| 1483 | - return $themefiles["$subdir$file"] = "$f?" . $m[1] . 'px'; |
|
| 1483 | + return $themefiles["$subdir$file"] = "$f?".$m[1].'px'; |
|
| 1484 | 1484 | } |
| 1485 | 1485 | } |
| 1486 | 1486 | |
@@ -1490,7 +1490,7 @@ discard block |
||
| 1490 | 1490 | return $themefiles["$subdir$file"] = $f; |
| 1491 | 1491 | } |
| 1492 | 1492 | } |
| 1493 | - spip_log("$file introuvable dans le theme prive " . reset($themes), 'theme'); |
|
| 1493 | + spip_log("$file introuvable dans le theme prive ".reset($themes), 'theme'); |
|
| 1494 | 1494 | |
| 1495 | 1495 | return $themefiles["$subdir$file"] = ''; |
| 1496 | 1496 | } |
@@ -1598,8 +1598,8 @@ discard block |
||
| 1598 | 1598 | return false; |
| 1599 | 1599 | } |
| 1600 | 1600 | if ($include and !isset($inc[$dirname][$file])) { |
| 1601 | - include_once _ROOT_CWD . $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]; |
|
| 1602 | - $inc[$dirname][$file] = $inc[''][$dirname . $file] = true; |
|
| 1601 | + include_once _ROOT_CWD.$GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]; |
|
| 1602 | + $inc[$dirname][$file] = $inc[''][$dirname.$file] = true; |
|
| 1603 | 1603 | } |
| 1604 | 1604 | |
| 1605 | 1605 | return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file]; |
@@ -1612,14 +1612,14 @@ discard block |
||
| 1612 | 1612 | } |
| 1613 | 1613 | |
| 1614 | 1614 | foreach (creer_chemin() as $dir) { |
| 1615 | - if (!isset($dirs[$a = $dir . $dirname])) { |
|
| 1616 | - $dirs[$a] = (is_dir(_ROOT_CWD . $a) || !$a); |
|
| 1615 | + if (!isset($dirs[$a = $dir.$dirname])) { |
|
| 1616 | + $dirs[$a] = (is_dir(_ROOT_CWD.$a) || !$a); |
|
| 1617 | 1617 | } |
| 1618 | 1618 | if ($dirs[$a]) { |
| 1619 | - if (file_exists(_ROOT_CWD . ($a .= $file))) { |
|
| 1619 | + if (file_exists(_ROOT_CWD.($a .= $file))) { |
|
| 1620 | 1620 | if ($include and !isset($inc[$dirname][$file])) { |
| 1621 | - include_once _ROOT_CWD . $a; |
|
| 1622 | - $inc[$dirname][$file] = $inc[''][$dirname . $file] = true; |
|
| 1621 | + include_once _ROOT_CWD.$a; |
|
| 1622 | + $inc[$dirname][$file] = $inc[''][$dirname.$file] = true; |
|
| 1623 | 1623 | } |
| 1624 | 1624 | if (!defined('_SAUVER_CHEMIN')) { |
| 1625 | 1625 | // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher |
@@ -1629,7 +1629,7 @@ discard block |
||
| 1629 | 1629 | define('_SAUVER_CHEMIN', true); |
| 1630 | 1630 | } |
| 1631 | 1631 | |
| 1632 | - return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a; |
|
| 1632 | + return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname.$file] = $a; |
|
| 1633 | 1633 | } |
| 1634 | 1634 | } |
| 1635 | 1635 | } |
@@ -1655,7 +1655,7 @@ discard block |
||
| 1655 | 1655 | define('_SAUVER_CHEMIN', true); |
| 1656 | 1656 | } |
| 1657 | 1657 | |
| 1658 | - return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false; |
|
| 1658 | + return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname.$file] = false; |
|
| 1659 | 1659 | } |
| 1660 | 1660 | |
| 1661 | 1661 | function clear_path_cache() { |
@@ -1725,12 +1725,12 @@ discard block |
||
| 1725 | 1725 | // cas borderline si dans mes_options on appelle redirige_par_entete qui utilise _T et charge un fichier de langue |
| 1726 | 1726 | // on a pas encore inclus flock.php |
| 1727 | 1727 | if (!function_exists('preg_files')) { |
| 1728 | - include_once _ROOT_RESTREINT . 'inc/flock.php'; |
|
| 1728 | + include_once _ROOT_RESTREINT.'inc/flock.php'; |
|
| 1729 | 1729 | } |
| 1730 | 1730 | |
| 1731 | 1731 | // Parcourir le chemin |
| 1732 | 1732 | foreach (creer_chemin() as $d) { |
| 1733 | - $f = $d . $dir; |
|
| 1733 | + $f = $d.$dir; |
|
| 1734 | 1734 | if (@is_dir($f)) { |
| 1735 | 1735 | $liste = preg_files($f, $pattern, $maxfiles - count($liste_fichiers), $recurs === true ? [] : $recurs); |
| 1736 | 1736 | foreach ($liste as $chemin) { |
@@ -1780,9 +1780,9 @@ discard block |
||
| 1780 | 1780 | if ($type === 'defaut') { |
| 1781 | 1781 | $objet = objet_type($quoi); |
| 1782 | 1782 | if ( |
| 1783 | - $f = charger_fonction('generer_' . $objet . '_url', 'urls', true) |
|
| 1783 | + $f = charger_fonction('generer_'.$objet.'_url', 'urls', true) |
|
| 1784 | 1784 | // deprecated |
| 1785 | - or $f = charger_fonction('generer_url_' . $objet, 'urls', true) |
|
| 1785 | + or $f = charger_fonction('generer_url_'.$objet, 'urls', true) |
|
| 1786 | 1786 | ) { |
| 1787 | 1787 | return $f; |
| 1788 | 1788 | } |
@@ -1795,7 +1795,7 @@ discard block |
||
| 1795 | 1795 | } |
| 1796 | 1796 | |
| 1797 | 1797 | // inclure le module d'url |
| 1798 | - include_spip('urls/' . $url_type); |
|
| 1798 | + include_spip('urls/'.$url_type); |
|
| 1799 | 1799 | |
| 1800 | 1800 | switch ($quoi) { |
| 1801 | 1801 | case 'page': |
@@ -1826,7 +1826,7 @@ discard block |
||
| 1826 | 1826 | return $f; |
| 1827 | 1827 | } |
| 1828 | 1828 | // sinon on se rabat sur les urls page si ce n'est pas un type demande explicitement |
| 1829 | - if (!$type and $url_type !== 'page'){ |
|
| 1829 | + if (!$type and $url_type !== 'page') { |
|
| 1830 | 1830 | return charger_fonction_url($quoi, 'page'); |
| 1831 | 1831 | } |
| 1832 | 1832 | return ''; |
@@ -1951,8 +1951,8 @@ discard block |
||
| 1951 | 1951 | include_spip('base/connect_sql'); |
| 1952 | 1952 | $id_type = id_table_objet($entite, $public); |
| 1953 | 1953 | |
| 1954 | - return _DIR_RACINE . get_spip_script('./') |
|
| 1955 | - . '?' . _SPIP_PAGE . "=$entite&$id_type=$i&connect=$public" |
|
| 1954 | + return _DIR_RACINE.get_spip_script('./') |
|
| 1955 | + . '?'._SPIP_PAGE."=$entite&$id_type=$i&connect=$public" |
|
| 1956 | 1956 | . (!$args ? '' : "&$args") |
| 1957 | 1957 | . (!$ancre ? '' : "#$ancre"); |
| 1958 | 1958 | } |
@@ -2123,7 +2123,7 @@ discard block |
||
| 2123 | 2123 | !empty($_SERVER['QUERY_STRING']) |
| 2124 | 2124 | and !strpos($_SERVER['REQUEST_URI'], '?') |
| 2125 | 2125 | ) { |
| 2126 | - $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; |
|
| 2126 | + $GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING']; |
|
| 2127 | 2127 | } |
| 2128 | 2128 | } |
| 2129 | 2129 | } |
@@ -2158,9 +2158,9 @@ discard block |
||
| 2158 | 2158 | array_shift($myself); |
| 2159 | 2159 | $myself = implode('/', $myself); |
| 2160 | 2160 | } |
| 2161 | - $url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)) . '/'; |
|
| 2161 | + $url = join('/', array_slice(explode('/', $myself), 0, -1 - $prof)).'/'; |
|
| 2162 | 2162 | |
| 2163 | - $url = $http . '://' . rtrim($host, '/') . '/' . ltrim($url, '/'); |
|
| 2163 | + $url = $http.'://'.rtrim($host, '/').'/'.ltrim($url, '/'); |
|
| 2164 | 2164 | |
| 2165 | 2165 | return $url; |
| 2166 | 2166 | } |
@@ -2199,16 +2199,16 @@ discard block |
||
| 2199 | 2199 | function generer_url_ecrire(?string $script = '', $args = '', $no_entities = false, $rel = false) { |
| 2200 | 2200 | $script ??= ''; |
| 2201 | 2201 | if (!$rel) { |
| 2202 | - $rel = url_de_base() . _DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT; |
|
| 2202 | + $rel = url_de_base()._DIR_RESTREINT_ABS._SPIP_ECRIRE_SCRIPT; |
|
| 2203 | 2203 | } else { |
| 2204 | 2204 | if (!is_string($rel)) { |
| 2205 | - $rel = _DIR_RESTREINT ?: './' . _SPIP_ECRIRE_SCRIPT; |
|
| 2205 | + $rel = _DIR_RESTREINT ?: './'._SPIP_ECRIRE_SCRIPT; |
|
| 2206 | 2206 | } |
| 2207 | 2207 | } |
| 2208 | 2208 | |
| 2209 | 2209 | [$script, $ancre] = array_pad(explode('#', $script), 2, null); |
| 2210 | 2210 | if ($script and ($script <> 'accueil' or $rel)) { |
| 2211 | - $args = "?exec=$script" . (!$args ? '' : "&$args"); |
|
| 2211 | + $args = "?exec=$script".(!$args ? '' : "&$args"); |
|
| 2212 | 2212 | } elseif ($args) { |
| 2213 | 2213 | $args = "?$args"; |
| 2214 | 2214 | } |
@@ -2216,7 +2216,7 @@ discard block |
||
| 2216 | 2216 | $args .= "#$ancre"; |
| 2217 | 2217 | } |
| 2218 | 2218 | |
| 2219 | - return $rel . ($no_entities ? $args : str_replace('&', '&', $args)); |
|
| 2219 | + return $rel.($no_entities ? $args : str_replace('&', '&', $args)); |
|
| 2220 | 2220 | } |
| 2221 | 2221 | |
| 2222 | 2222 | // |
@@ -2298,10 +2298,10 @@ discard block |
||
| 2298 | 2298 | $action = parametre_url($action, _SPIP_PAGE, $script, '&'); |
| 2299 | 2299 | } |
| 2300 | 2300 | if ($args) { |
| 2301 | - $action .= (strpos($action, '?') !== false ? '&' : '?') . $args; |
|
| 2301 | + $action .= (strpos($action, '?') !== false ? '&' : '?').$args; |
|
| 2302 | 2302 | } |
| 2303 | 2303 | // ne pas generer une url avec /./?page= en cas d'url absolue et de _SPIP_SCRIPT vide |
| 2304 | - $url = ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/') . preg_replace(',^/[.]/,', '/', "/$action")); |
|
| 2304 | + $url = ($rel ? _DIR_RACINE . $action : rtrim(url_de_base(), '/').preg_replace(',^/[.]/,', '/', "/$action")); |
|
| 2305 | 2305 | } |
| 2306 | 2306 | |
| 2307 | 2307 | if (!$no_entities) { |
@@ -2313,7 +2313,7 @@ discard block |
||
| 2313 | 2313 | |
| 2314 | 2314 | function generer_url_prive($script, $args = '', $no_entities = false) { |
| 2315 | 2315 | |
| 2316 | - return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS . 'prive.php'); |
|
| 2316 | + return generer_url_public($script, $args, $no_entities, false, _DIR_RESTREINT_ABS.'prive.php'); |
|
| 2317 | 2317 | } |
| 2318 | 2318 | |
| 2319 | 2319 | // Pour les formulaires en methode POST, |
@@ -2348,8 +2348,7 @@ discard block |
||
| 2348 | 2348 | . "><div>\n" |
| 2349 | 2349 | . "<input type='hidden' name='exec' value='$script1' />" |
| 2350 | 2350 | . $corps |
| 2351 | - . (!$submit ? '' : |
|
| 2352 | - ("<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><input class='fondo submit btn' type='submit' value=\"" . entites_html($submit) . '" /></div>')) |
|
| 2351 | + . (!$submit ? '' : ("<div style='text-align: ".$GLOBALS['spip_lang_right']."'><input class='fondo submit btn' type='submit' value=\"".entites_html($submit).'" /></div>')) |
|
| 2353 | 2352 | . "</div></form>\n"; |
| 2354 | 2353 | } |
| 2355 | 2354 | |
@@ -2374,14 +2373,14 @@ discard block |
||
| 2374 | 2373 | ? generer_url_ecrire(_request('exec')) |
| 2375 | 2374 | : generer_url_public(); |
| 2376 | 2375 | |
| 2377 | - return "\n<form action='" . |
|
| 2378 | - $h . |
|
| 2379 | - "'" . |
|
| 2380 | - $atts . |
|
| 2381 | - ">\n" . |
|
| 2382 | - '<div>' . |
|
| 2383 | - "\n<input type='hidden' name='action' value='$script' />" . |
|
| 2384 | - $corps . |
|
| 2376 | + return "\n<form action='". |
|
| 2377 | + $h. |
|
| 2378 | + "'". |
|
| 2379 | + $atts. |
|
| 2380 | + ">\n". |
|
| 2381 | + '<div>'. |
|
| 2382 | + "\n<input type='hidden' name='action' value='$script' />". |
|
| 2383 | + $corps. |
|
| 2385 | 2384 | '</div></form>'; |
| 2386 | 2385 | } |
| 2387 | 2386 | |
@@ -2409,7 +2408,7 @@ discard block |
||
| 2409 | 2408 | : generer_url_public('', '', false, false); |
| 2410 | 2409 | $url = parametre_url($url, 'action', $script); |
| 2411 | 2410 | if ($args) { |
| 2412 | - $url .= quote_amp('&' . $args); |
|
| 2411 | + $url .= quote_amp('&'.$args); |
|
| 2413 | 2412 | } |
| 2414 | 2413 | |
| 2415 | 2414 | if ($no_entities) { |
@@ -2443,9 +2442,9 @@ discard block |
||
| 2443 | 2442 | } |
| 2444 | 2443 | $url = |
| 2445 | 2444 | (($public ? _DIR_RACINE : _DIR_RESTREINT) ?: './') |
| 2446 | - . $script . '/' |
|
| 2445 | + . $script.'/' |
|
| 2447 | 2446 | . ($path ? trim($path, '/') : '') |
| 2448 | - . ($args ? '?' . quote_amp($args) : ''); |
|
| 2447 | + . ($args ? '?'.quote_amp($args) : ''); |
|
| 2449 | 2448 | |
| 2450 | 2449 | if ($no_entities) { |
| 2451 | 2450 | $url = str_replace('&', '&', $url); |
@@ -2494,17 +2493,17 @@ discard block |
||
| 2494 | 2493 | |
| 2495 | 2494 | // le nom du repertoire plugins/ activables/desactivables |
| 2496 | 2495 | if (!defined('_DIR_PLUGINS')) { |
| 2497 | - define('_DIR_PLUGINS', _DIR_RACINE . 'plugins/'); |
|
| 2496 | + define('_DIR_PLUGINS', _DIR_RACINE.'plugins/'); |
|
| 2498 | 2497 | } |
| 2499 | 2498 | |
| 2500 | 2499 | // le nom du repertoire des extensions/ permanentes du core, toujours actives |
| 2501 | 2500 | if (!defined('_DIR_PLUGINS_DIST')) { |
| 2502 | - define('_DIR_PLUGINS_DIST', _DIR_RACINE . 'plugins-dist/'); |
|
| 2501 | + define('_DIR_PLUGINS_DIST', _DIR_RACINE.'plugins-dist/'); |
|
| 2503 | 2502 | } |
| 2504 | 2503 | |
| 2505 | 2504 | // le nom du repertoire des librairies |
| 2506 | 2505 | if (!defined('_DIR_LIB')) { |
| 2507 | - define('_DIR_LIB', _DIR_RACINE . 'lib/'); |
|
| 2506 | + define('_DIR_LIB', _DIR_RACINE.'lib/'); |
|
| 2508 | 2507 | } |
| 2509 | 2508 | |
| 2510 | 2509 | if (!defined('_DIR_IMG')) { |
@@ -2514,29 +2513,29 @@ discard block |
||
| 2514 | 2513 | define('_DIR_LOGOS', $pa); |
| 2515 | 2514 | } |
| 2516 | 2515 | if (!defined('_DIR_IMG_ICONES')) { |
| 2517 | - define('_DIR_IMG_ICONES', _DIR_LOGOS . 'icones/'); |
|
| 2516 | + define('_DIR_IMG_ICONES', _DIR_LOGOS.'icones/'); |
|
| 2518 | 2517 | } |
| 2519 | 2518 | |
| 2520 | 2519 | if (!defined('_DIR_DUMP')) { |
| 2521 | - define('_DIR_DUMP', $ti . 'dump/'); |
|
| 2520 | + define('_DIR_DUMP', $ti.'dump/'); |
|
| 2522 | 2521 | } |
| 2523 | 2522 | if (!defined('_DIR_SESSIONS')) { |
| 2524 | - define('_DIR_SESSIONS', $ti . 'sessions/'); |
|
| 2523 | + define('_DIR_SESSIONS', $ti.'sessions/'); |
|
| 2525 | 2524 | } |
| 2526 | 2525 | if (!defined('_DIR_TRANSFERT')) { |
| 2527 | - define('_DIR_TRANSFERT', $ti . 'upload/'); |
|
| 2526 | + define('_DIR_TRANSFERT', $ti.'upload/'); |
|
| 2528 | 2527 | } |
| 2529 | 2528 | if (!defined('_DIR_CACHE')) { |
| 2530 | - define('_DIR_CACHE', $ti . 'cache/'); |
|
| 2529 | + define('_DIR_CACHE', $ti.'cache/'); |
|
| 2531 | 2530 | } |
| 2532 | 2531 | if (!defined('_DIR_CACHE_XML')) { |
| 2533 | - define('_DIR_CACHE_XML', _DIR_CACHE . 'xml/'); |
|
| 2532 | + define('_DIR_CACHE_XML', _DIR_CACHE.'xml/'); |
|
| 2534 | 2533 | } |
| 2535 | 2534 | if (!defined('_DIR_SKELS')) { |
| 2536 | - define('_DIR_SKELS', _DIR_CACHE . 'skel/'); |
|
| 2535 | + define('_DIR_SKELS', _DIR_CACHE.'skel/'); |
|
| 2537 | 2536 | } |
| 2538 | 2537 | if (!defined('_DIR_AIDE')) { |
| 2539 | - define('_DIR_AIDE', _DIR_CACHE . 'aide/'); |
|
| 2538 | + define('_DIR_AIDE', _DIR_CACHE.'aide/'); |
|
| 2540 | 2539 | } |
| 2541 | 2540 | if (!defined('_DIR_TMP')) { |
| 2542 | 2541 | define('_DIR_TMP', $ti); |
@@ -2565,27 +2564,27 @@ discard block |
||
| 2565 | 2564 | // Declaration des fichiers |
| 2566 | 2565 | |
| 2567 | 2566 | if (!defined('_CACHE_PLUGINS_PATH')) { |
| 2568 | - define('_CACHE_PLUGINS_PATH', _DIR_CACHE . 'charger_plugins_chemins.php'); |
|
| 2567 | + define('_CACHE_PLUGINS_PATH', _DIR_CACHE.'charger_plugins_chemins.php'); |
|
| 2569 | 2568 | } |
| 2570 | 2569 | if (!defined('_CACHE_PLUGINS_OPT')) { |
| 2571 | - define('_CACHE_PLUGINS_OPT', _DIR_CACHE . 'charger_plugins_options.php'); |
|
| 2570 | + define('_CACHE_PLUGINS_OPT', _DIR_CACHE.'charger_plugins_options.php'); |
|
| 2572 | 2571 | } |
| 2573 | 2572 | if (!defined('_CACHE_PLUGINS_FCT')) { |
| 2574 | - define('_CACHE_PLUGINS_FCT', _DIR_CACHE . 'charger_plugins_fonctions.php'); |
|
| 2573 | + define('_CACHE_PLUGINS_FCT', _DIR_CACHE.'charger_plugins_fonctions.php'); |
|
| 2575 | 2574 | } |
| 2576 | 2575 | if (!defined('_CACHE_PIPELINES')) { |
| 2577 | - define('_CACHE_PIPELINES', _DIR_CACHE . 'charger_pipelines.php'); |
|
| 2576 | + define('_CACHE_PIPELINES', _DIR_CACHE.'charger_pipelines.php'); |
|
| 2578 | 2577 | } |
| 2579 | 2578 | if (!defined('_CACHE_CHEMIN')) { |
| 2580 | - define('_CACHE_CHEMIN', _DIR_CACHE . 'chemin.txt'); |
|
| 2579 | + define('_CACHE_CHEMIN', _DIR_CACHE.'chemin.txt'); |
|
| 2581 | 2580 | } |
| 2582 | 2581 | |
| 2583 | 2582 | # attention .php obligatoire pour ecrire_fichier_securise |
| 2584 | 2583 | if (!defined('_FILE_META')) { |
| 2585 | - define('_FILE_META', $ti . 'meta_cache.php'); |
|
| 2584 | + define('_FILE_META', $ti.'meta_cache.php'); |
|
| 2586 | 2585 | } |
| 2587 | 2586 | if (!defined('_DIR_LOG')) { |
| 2588 | - define('_DIR_LOG', _DIR_TMP . 'log/'); |
|
| 2587 | + define('_DIR_LOG', _DIR_TMP.'log/'); |
|
| 2589 | 2588 | } |
| 2590 | 2589 | if (!defined('_FILE_LOG')) { |
| 2591 | 2590 | define('_FILE_LOG', 'spip'); |
@@ -2602,8 +2601,8 @@ discard block |
||
| 2602 | 2601 | if (!defined('_FILE_CONNECT')) { |
| 2603 | 2602 | define( |
| 2604 | 2603 | '_FILE_CONNECT', |
| 2605 | - (@is_readable($f = _DIR_CONNECT . _FILE_CONNECT_INS . '.php') ? $f |
|
| 2606 | - : (@is_readable($f = _DIR_RESTREINT . 'inc_connect.php') ? $f |
|
| 2604 | + (@is_readable($f = _DIR_CONNECT._FILE_CONNECT_INS.'.php') ? $f |
|
| 2605 | + : (@is_readable($f = _DIR_RESTREINT.'inc_connect.php') ? $f |
|
| 2607 | 2606 | : false)) |
| 2608 | 2607 | ); |
| 2609 | 2608 | } |
@@ -2615,7 +2614,7 @@ discard block |
||
| 2615 | 2614 | if (!defined('_FILE_CHMOD')) { |
| 2616 | 2615 | define( |
| 2617 | 2616 | '_FILE_CHMOD', |
| 2618 | - (@is_readable($f = _DIR_CHMOD . _FILE_CHMOD_INS . '.php') ? $f |
|
| 2617 | + (@is_readable($f = _DIR_CHMOD._FILE_CHMOD_INS.'.php') ? $f |
|
| 2619 | 2618 | : false) |
| 2620 | 2619 | ); |
| 2621 | 2620 | } |
@@ -2628,10 +2627,10 @@ discard block |
||
| 2628 | 2627 | define('_FILE_TMP_SUFFIX', '.tmp.php'); |
| 2629 | 2628 | } |
| 2630 | 2629 | if (!defined('_FILE_CONNECT_TMP')) { |
| 2631 | - define('_FILE_CONNECT_TMP', _DIR_CONNECT . _FILE_CONNECT_INS . _FILE_TMP_SUFFIX); |
|
| 2630 | + define('_FILE_CONNECT_TMP', _DIR_CONNECT._FILE_CONNECT_INS._FILE_TMP_SUFFIX); |
|
| 2632 | 2631 | } |
| 2633 | 2632 | if (!defined('_FILE_CHMOD_TMP')) { |
| 2634 | - define('_FILE_CHMOD_TMP', _DIR_CHMOD . _FILE_CHMOD_INS . _FILE_TMP_SUFFIX); |
|
| 2633 | + define('_FILE_CHMOD_TMP', _DIR_CHMOD._FILE_CHMOD_INS._FILE_TMP_SUFFIX); |
|
| 2635 | 2634 | } |
| 2636 | 2635 | |
| 2637 | 2636 | // Definition des droits d'acces en ecriture |
@@ -2649,13 +2648,13 @@ discard block |
||
| 2649 | 2648 | define('_DEFAULT_CHARSET', 'utf-8'); |
| 2650 | 2649 | } |
| 2651 | 2650 | if (!defined('_ROOT_PLUGINS')) { |
| 2652 | - define('_ROOT_PLUGINS', _ROOT_RACINE . 'plugins/'); |
|
| 2651 | + define('_ROOT_PLUGINS', _ROOT_RACINE.'plugins/'); |
|
| 2653 | 2652 | } |
| 2654 | 2653 | if (!defined('_ROOT_PLUGINS_DIST')) { |
| 2655 | - define('_ROOT_PLUGINS_DIST', _ROOT_RACINE . 'plugins-dist/'); |
|
| 2654 | + define('_ROOT_PLUGINS_DIST', _ROOT_RACINE.'plugins-dist/'); |
|
| 2656 | 2655 | } |
| 2657 | 2656 | if (!defined('_ROOT_PLUGINS_SUPPL') && defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL) { |
| 2658 | - define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE . str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL)); |
|
| 2657 | + define('_ROOT_PLUGINS_SUPPL', _ROOT_RACINE.str_replace(_DIR_RACINE, '', _DIR_PLUGINS_SUPPL)); |
|
| 2659 | 2658 | } |
| 2660 | 2659 | |
| 2661 | 2660 | // La taille des Log |
@@ -2692,7 +2691,7 @@ discard block |
||
| 2692 | 2691 | // (non surchargeable en l'etat ; attention si on utilise include_spip() |
| 2693 | 2692 | // pour le rendre surchargeable, on va provoquer un reecriture |
| 2694 | 2693 | // systematique du noyau ou une baisse de perfs => a etudier) |
| 2695 | - include_once _ROOT_RESTREINT . 'inc/flock.php'; |
|
| 2694 | + include_once _ROOT_RESTREINT.'inc/flock.php'; |
|
| 2696 | 2695 | |
| 2697 | 2696 | // charger tout de suite le path et son cache |
| 2698 | 2697 | load_path_cache(); |
@@ -2740,7 +2739,7 @@ discard block |
||
| 2740 | 2739 | !empty($_SERVER['QUERY_STRING']) |
| 2741 | 2740 | and !strpos($_SERVER['REQUEST_URI'], '?') |
| 2742 | 2741 | ) { |
| 2743 | - $GLOBALS['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; |
|
| 2742 | + $GLOBALS['REQUEST_URI'] .= '?'.$_SERVER['QUERY_STRING']; |
|
| 2744 | 2743 | } |
| 2745 | 2744 | } |
| 2746 | 2745 | |
@@ -2776,7 +2775,7 @@ discard block |
||
| 2776 | 2775 | ) { |
| 2777 | 2776 | if (isset($GLOBALS['meta']['adresse_site'])) { |
| 2778 | 2777 | $uri_ref = parse_url($GLOBALS['meta']['adresse_site']); |
| 2779 | - $uri_ref = ($uri_ref['path'] ?? '') . '/'; |
|
| 2778 | + $uri_ref = ($uri_ref['path'] ?? '').'/'; |
|
| 2780 | 2779 | } else { |
| 2781 | 2780 | $uri_ref = ''; |
| 2782 | 2781 | } |
@@ -2870,7 +2869,7 @@ discard block |
||
| 2870 | 2869 | } |
| 2871 | 2870 | if (!defined('_CACHE_RUBRIQUES')) { |
| 2872 | 2871 | /** Fichier cache pour le navigateur de rubrique du bandeau */ |
| 2873 | - define('_CACHE_RUBRIQUES', _DIR_TMP . 'menu-rubriques-cache.txt'); |
|
| 2872 | + define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt'); |
|
| 2874 | 2873 | } |
| 2875 | 2874 | if (!defined('_CACHE_RUBRIQUES_MAX')) { |
| 2876 | 2875 | /** Nombre maxi de rubriques enfants affichées pour chaque rubrique du navigateur de rubrique du bandeau */ |
@@ -3092,7 +3091,7 @@ discard block |
||
| 3092 | 3091 | } |
| 3093 | 3092 | if (isset($GLOBALS['visiteur_session']['nom'])) { |
| 3094 | 3093 | spip_log($GLOBALS['visiteur_session']['nom'] |
| 3095 | - . ' ' . _VAR_MODE); |
|
| 3094 | + . ' '._VAR_MODE); |
|
| 3096 | 3095 | } |
| 3097 | 3096 | } // pas autorise ? |
| 3098 | 3097 | else { |
@@ -3107,7 +3106,7 @@ discard block |
||
| 3107 | 3106 | if (strpos($self, 'page=login') === false) { |
| 3108 | 3107 | include_spip('inc/headers'); |
| 3109 | 3108 | $redirect = parametre_url(self('&', true), 'var_mode', $_GET['var_mode'], '&'); |
| 3110 | - redirige_par_entete(generer_url_public('login', 'url=' . rawurlencode($redirect), true)); |
|
| 3109 | + redirige_par_entete(generer_url_public('login', 'url='.rawurlencode($redirect), true)); |
|
| 3111 | 3110 | } |
| 3112 | 3111 | } |
| 3113 | 3112 | // sinon tant pis |
@@ -3149,10 +3148,10 @@ discard block |
||
| 3149 | 3148 | // mais on risque de perturber des plugins en initialisant trop tot |
| 3150 | 3149 | // certaines constantes |
| 3151 | 3150 | @spip_initialisation_core( |
| 3152 | - (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES), |
|
| 3153 | - (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES), |
|
| 3154 | - (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES), |
|
| 3155 | - (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) |
|
| 3151 | + (_DIR_RACINE._NOM_PERMANENTS_INACCESSIBLES), |
|
| 3152 | + (_DIR_RACINE._NOM_PERMANENTS_ACCESSIBLES), |
|
| 3153 | + (_DIR_RACINE._NOM_TEMPORAIRES_INACCESSIBLES), |
|
| 3154 | + (_DIR_RACINE._NOM_TEMPORAIRES_ACCESSIBLES) |
|
| 3156 | 3155 | ); |
| 3157 | 3156 | |
| 3158 | 3157 | // Demarrer une session NON AUTHENTIFIEE si on donne son nom |
@@ -3185,7 +3184,7 @@ discard block |
||
| 3185 | 3184 | } |
| 3186 | 3185 | |
| 3187 | 3186 | $h = (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http']); |
| 3188 | - if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'] . '_session'])) { |
|
| 3187 | + if ($h or isset($_COOKIE['spip_session']) or isset($_COOKIE[$GLOBALS['cookie_prefix'].'_session'])) { |
|
| 3189 | 3188 | $session = charger_fonction('session', 'inc'); |
| 3190 | 3189 | if ($session()) { |
| 3191 | 3190 | return $GLOBALS['visiteur_session']['statut']; |
@@ -3265,7 +3264,7 @@ discard block |
||
| 3265 | 3264 | 'definir_session', |
| 3266 | 3265 | $GLOBALS['visiteur_session'] |
| 3267 | 3266 | ? serialize($GLOBALS['visiteur_session']) |
| 3268 | - . '_' . @$_COOKIE['spip_session'] |
|
| 3267 | + . '_'.@$_COOKIE['spip_session'] |
|
| 3269 | 3268 | : '' |
| 3270 | 3269 | ); |
| 3271 | 3270 | $session = $s ? substr(md5($s), 0, 8) : ''; |
@@ -3421,11 +3420,11 @@ discard block |
||
| 3421 | 3420 | $GLOBALS['_INC_PUBLIC']++; |
| 3422 | 3421 | |
| 3423 | 3422 | // fix #4235 |
| 3424 | - $cache_utilise_session_appelant = ($GLOBALS['cache_utilise_session'] ?? null); |
|
| 3423 | + $cache_utilise_session_appelant = ($GLOBALS['cache_utilise_session'] ?? null); |
|
| 3425 | 3424 | |
| 3426 | 3425 | |
| 3427 | 3426 | foreach (is_array($fond) ? $fond : [$fond] as $f) { |
| 3428 | - unset($GLOBALS['cache_utilise_session']); // fix #4235 |
|
| 3427 | + unset($GLOBALS['cache_utilise_session']); // fix #4235 |
|
| 3429 | 3428 | |
| 3430 | 3429 | $page = evaluer_fond($f, $contexte, $connect); |
| 3431 | 3430 | if ($page === '') { |
@@ -3510,7 +3509,7 @@ discard block |
||
| 3510 | 3509 | * @return array|string |
| 3511 | 3510 | */ |
| 3512 | 3511 | function trouver_fond($nom, $dir = '', $pathinfo = false) { |
| 3513 | - $f = find_in_path($nom . '.' . _EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/') . '/' : ''); |
|
| 3512 | + $f = find_in_path($nom.'.'._EXTENSION_SQUELETTES, $dir ? rtrim($dir, '/').'/' : ''); |
|
| 3514 | 3513 | if (!$pathinfo) { |
| 3515 | 3514 | return $f; |
| 3516 | 3515 | } |
@@ -11,7 +11,7 @@ |
||
| 11 | 11 | * \***************************************************************************/ |
| 12 | 12 | |
| 13 | 13 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 14 | - return; |
|
| 14 | + return; |
|
| 15 | 15 | } |
| 16 | 16 | |
| 17 | 17 | include_spip('src/Chiffrer/Chiffrement'); |
@@ -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 | /** |
@@ -32,11 +32,11 @@ discard block |
||
| 32 | 32 | * @return void |
| 33 | 33 | **/ |
| 34 | 34 | function array_set_merge(&$table, $index, $valeur) { |
| 35 | - if (!isset($table[$index])) { |
|
| 36 | - $table[$index] = $valeur; |
|
| 37 | - } else { |
|
| 38 | - $table[$index] = array_merge($table[$index], $valeur); |
|
| 39 | - } |
|
| 35 | + if (!isset($table[$index])) { |
|
| 36 | + $table[$index] = $valeur; |
|
| 37 | + } else { |
|
| 38 | + $table[$index] = array_merge($table[$index], $valeur); |
|
| 39 | + } |
|
| 40 | 40 | } |
| 41 | 41 | |
| 42 | 42 | /** |
@@ -55,441 +55,441 @@ discard block |
||
| 55 | 55 | * - string (interne) si table '::md5' retourne un hash |
| 56 | 56 | */ |
| 57 | 57 | function lister_tables_objets_sql(?string $table_sql = null, $desc = []) { |
| 58 | - static $deja_la = false; |
|
| 59 | - static $infos_tables = null; |
|
| 60 | - static $md5 = null; |
|
| 61 | - static $plugin_hash = null; |
|
| 62 | - |
|
| 63 | - // plugins hash connu ? non si _CACHE_PLUGINS_OPT est pas encore chargé. |
|
| 64 | - $_PLUGINS_HASH = defined('_PLUGINS_HASH') ? _PLUGINS_HASH : '!_CACHE_PLUGINS_OPT'; |
|
| 65 | - |
|
| 66 | - // prealablement recuperer les tables_principales |
|
| 67 | - if (is_null($infos_tables) or $plugin_hash !== $_PLUGINS_HASH) { |
|
| 68 | - // pas de reentrance (cas base/serial) |
|
| 69 | - if ($deja_la) { |
|
| 70 | - spip_log('Re-entrance anormale sur lister_tables_objets_sql : ' |
|
| 71 | - . var_export(debug_backtrace(), true), _LOG_CRITIQUE); |
|
| 72 | - |
|
| 73 | - return ($table_sql === '::md5' ? $md5 : []); |
|
| 74 | - } |
|
| 75 | - $deja_la = true; |
|
| 76 | - $plugin_hash = $_PLUGINS_HASH; // avant de lancer les pipelines |
|
| 77 | - |
|
| 78 | - // recuperer les declarations explicites ancienne mode |
|
| 79 | - // qui servent a completer declarer_tables_objets_sql |
|
| 80 | - base_serial($GLOBALS['tables_principales']); |
|
| 81 | - base_auxiliaires($GLOBALS['tables_auxiliaires']); |
|
| 82 | - $infos_tables = [ |
|
| 83 | - 'spip_articles' => [ |
|
| 84 | - 'page' => 'article', |
|
| 85 | - 'texte_retour' => 'icone_retour_article', |
|
| 86 | - 'texte_modifier' => 'icone_modifier_article', |
|
| 87 | - 'texte_creer' => 'icone_ecrire_article', |
|
| 88 | - 'texte_objets' => 'public:articles', |
|
| 89 | - 'texte_objet' => 'public:article', |
|
| 90 | - 'texte_signale_edition' => 'texte_travail_article', |
|
| 91 | - 'info_aucun_objet' => 'info_aucun_article', |
|
| 92 | - 'info_1_objet' => 'info_1_article', |
|
| 93 | - 'info_nb_objets' => 'info_nb_articles', |
|
| 94 | - 'texte_logo_objet' => 'logo_article', |
|
| 95 | - 'texte_langue_objet' => 'titre_langue_article', |
|
| 96 | - 'texte_definir_comme_traduction_objet' => 'trad_lier', |
|
| 97 | - 'titre' => 'titre, lang', |
|
| 98 | - 'date' => 'date', |
|
| 99 | - 'principale' => 'oui', |
|
| 100 | - 'introduction_longueur' => '500', |
|
| 101 | - 'champs_editables' => [ |
|
| 102 | - 'surtitre', |
|
| 103 | - 'titre', |
|
| 104 | - 'soustitre', |
|
| 105 | - 'descriptif', |
|
| 106 | - 'nom_site', |
|
| 107 | - 'url_site', |
|
| 108 | - 'chapo', |
|
| 109 | - 'texte', |
|
| 110 | - 'ps', |
|
| 111 | - 'virtuel' |
|
| 112 | - ], |
|
| 113 | - 'champs_versionnes' => [ |
|
| 114 | - 'id_rubrique', |
|
| 115 | - 'surtitre', |
|
| 116 | - 'titre', |
|
| 117 | - 'soustitre', |
|
| 118 | - 'jointure_auteurs', |
|
| 119 | - 'descriptif', |
|
| 120 | - 'nom_site', |
|
| 121 | - 'url_site', |
|
| 122 | - 'chapo', |
|
| 123 | - 'texte', |
|
| 124 | - 'ps' |
|
| 125 | - ], |
|
| 126 | - 'field' => [ |
|
| 127 | - 'id_article' => 'bigint(21) NOT NULL', |
|
| 128 | - 'surtitre' => "text DEFAULT '' NOT NULL", |
|
| 129 | - 'titre' => "text DEFAULT '' NOT NULL", |
|
| 130 | - 'soustitre' => "text DEFAULT '' NOT NULL", |
|
| 131 | - 'id_rubrique' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 132 | - 'descriptif' => "text DEFAULT '' NOT NULL", |
|
| 133 | - 'chapo' => "mediumtext DEFAULT '' NOT NULL", |
|
| 134 | - 'texte' => "longtext DEFAULT '' NOT NULL", |
|
| 135 | - 'ps' => "mediumtext DEFAULT '' NOT NULL", |
|
| 136 | - 'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 137 | - 'statut' => "varchar(10) DEFAULT '0' NOT NULL", |
|
| 138 | - 'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 139 | - 'maj' => 'TIMESTAMP', |
|
| 140 | - 'export' => "VARCHAR(10) DEFAULT 'oui'", |
|
| 141 | - 'date_redac' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 142 | - 'visites' => "integer DEFAULT '0' NOT NULL", |
|
| 143 | - 'referers' => "integer DEFAULT '0' NOT NULL", |
|
| 144 | - 'popularite' => "DOUBLE DEFAULT '0' NOT NULL", |
|
| 145 | - 'accepter_forum' => "CHAR(3) DEFAULT '' NOT NULL", |
|
| 146 | - 'date_modif' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 147 | - 'lang' => "VARCHAR(10) DEFAULT '' NOT NULL", |
|
| 148 | - 'langue_choisie' => "VARCHAR(3) DEFAULT 'non'", |
|
| 149 | - 'id_trad' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 150 | - 'nom_site' => "tinytext DEFAULT '' NOT NULL", |
|
| 151 | - 'url_site' => "text DEFAULT '' NOT NULL", |
|
| 152 | - 'virtuel' => "text DEFAULT '' NOT NULL", |
|
| 153 | - ], |
|
| 154 | - 'key' => [ |
|
| 155 | - 'PRIMARY KEY' => 'id_article', |
|
| 156 | - 'KEY id_rubrique' => 'id_rubrique', |
|
| 157 | - 'KEY id_secteur' => 'id_secteur', |
|
| 158 | - 'KEY id_trad' => 'id_trad', |
|
| 159 | - 'KEY lang' => 'lang', |
|
| 160 | - 'KEY statut' => 'statut, date', |
|
| 161 | - ], |
|
| 162 | - 'join' => [ |
|
| 163 | - 'id_article' => 'id_article', |
|
| 164 | - 'id_rubrique' => 'id_rubrique' |
|
| 165 | - ], |
|
| 166 | - 'parent' => [ |
|
| 167 | - ['type' => 'rubrique', 'champ' => 'id_rubrique'] |
|
| 168 | - ], |
|
| 169 | - 'rechercher_champs' => [ |
|
| 170 | - 'surtitre' => 5, |
|
| 171 | - 'titre' => 8, |
|
| 172 | - 'soustitre' => 5, |
|
| 173 | - 'chapo' => 3, |
|
| 174 | - 'texte' => 1, |
|
| 175 | - 'ps' => 1, |
|
| 176 | - 'nom_site' => 1, |
|
| 177 | - 'url_site' => 1, |
|
| 178 | - 'descriptif' => 4 |
|
| 179 | - ], |
|
| 180 | - 'rechercher_jointures' => [ |
|
| 181 | - 'auteur' => ['nom' => 10], |
|
| 182 | - ], |
|
| 183 | - 'statut' => [ |
|
| 184 | - [ |
|
| 185 | - 'champ' => 'statut', |
|
| 186 | - 'publie' => 'publie', |
|
| 187 | - 'previsu' => 'publie,prop,prepa/auteur', |
|
| 188 | - 'post_date' => 'date', |
|
| 189 | - 'exception' => ['statut', 'tout'] |
|
| 190 | - ] |
|
| 191 | - ], |
|
| 192 | - 'statut_titres' => [ |
|
| 193 | - 'prepa' => 'info_article_redaction', |
|
| 194 | - 'prop' => 'info_article_propose', |
|
| 195 | - 'publie' => 'info_article_publie', |
|
| 196 | - 'refuse' => 'info_article_refuse', |
|
| 197 | - 'poubelle' => 'info_article_supprime' |
|
| 198 | - ], |
|
| 199 | - 'statut_textes_instituer' => [ |
|
| 200 | - 'prepa' => 'texte_statut_en_cours_redaction', |
|
| 201 | - 'prop' => 'texte_statut_propose_evaluation', |
|
| 202 | - 'publie' => 'texte_statut_publie', |
|
| 203 | - 'refuse' => 'texte_statut_refuse', |
|
| 204 | - 'poubelle' => 'texte_statut_poubelle', |
|
| 205 | - ], |
|
| 206 | - 'texte_changer_statut' => 'texte_article_statut', |
|
| 207 | - 'aide_changer_statut' => 'artstatut', |
|
| 208 | - 'tables_jointures' => [ |
|
| 209 | - 'profondeur' => 'rubriques', |
|
| 210 | - #'id_auteur' => 'auteurs_liens' // declaration generique plus bas |
|
| 211 | - ], |
|
| 212 | - ], |
|
| 213 | - 'spip_auteurs' => [ |
|
| 214 | - 'page' => 'auteur', |
|
| 215 | - 'texte_retour' => 'icone_retour', |
|
| 216 | - 'texte_ajouter' => 'titre_ajouter_un_auteur', |
|
| 217 | - 'texte_modifier' => 'admin_modifier_auteur', |
|
| 218 | - 'texte_objets' => 'icone_auteurs', |
|
| 219 | - 'texte_objet' => 'public:auteur', |
|
| 220 | - 'info_aucun_objet' => 'info_aucun_auteur', |
|
| 221 | - 'info_1_objet' => 'info_1_auteur', |
|
| 222 | - 'info_nb_objets' => 'info_nb_auteurs', |
|
| 223 | - 'texte_logo_objet' => 'logo_auteur', |
|
| 224 | - 'texte_creer_associer' => 'creer_et_associer_un_auteur', |
|
| 225 | - 'titre' => "nom AS titre, '' AS lang", |
|
| 226 | - 'date' => 'date', |
|
| 227 | - 'principale' => 'oui', |
|
| 228 | - 'champs_editables' => ['nom', 'email', 'bio', 'nom_site', 'url_site', 'imessage', 'pgp'], |
|
| 229 | - 'champs_versionnes' => ['nom', 'bio', 'email', 'nom_site', 'url_site', 'login'], |
|
| 230 | - 'field' => [ |
|
| 231 | - 'id_auteur' => 'bigint(21) NOT NULL', |
|
| 232 | - 'nom' => "text DEFAULT '' NOT NULL", |
|
| 233 | - 'bio' => "text DEFAULT '' NOT NULL", |
|
| 234 | - 'email' => "tinytext DEFAULT '' NOT NULL", |
|
| 235 | - 'nom_site' => "tinytext DEFAULT '' NOT NULL", |
|
| 236 | - 'url_site' => "text DEFAULT '' NOT NULL", |
|
| 237 | - 'login' => 'VARCHAR(255) BINARY', |
|
| 238 | - 'pass' => "tinytext DEFAULT '' NOT NULL", |
|
| 239 | - 'low_sec' => "tinytext DEFAULT '' NOT NULL", |
|
| 240 | - 'statut' => "varchar(255) DEFAULT '0' NOT NULL", |
|
| 241 | - 'webmestre' => "varchar(3) DEFAULT 'non' NOT NULL", |
|
| 242 | - 'maj' => 'TIMESTAMP', |
|
| 243 | - 'pgp' => "TEXT DEFAULT '' NOT NULL", |
|
| 244 | - 'htpass' => "tinytext DEFAULT '' NOT NULL", |
|
| 245 | - 'en_ligne' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 246 | - 'alea_actuel' => 'tinytext', |
|
| 247 | - 'alea_futur' => 'tinytext', |
|
| 248 | - 'prefs' => 'text', |
|
| 249 | - 'cookie_oubli' => 'tinytext', |
|
| 250 | - 'source' => "VARCHAR(10) DEFAULT 'spip' NOT NULL", |
|
| 251 | - 'lang' => "VARCHAR(10) DEFAULT '' NOT NULL", |
|
| 252 | - 'imessage' => "VARCHAR(3) DEFAULT '' NOT NULL", |
|
| 253 | - 'backup_cles' => "mediumtext DEFAULT '' NOT NULL", |
|
| 254 | - ], |
|
| 255 | - 'key' => [ |
|
| 256 | - 'PRIMARY KEY' => 'id_auteur', |
|
| 257 | - 'KEY login' => 'login', |
|
| 258 | - 'KEY statut' => 'statut', |
|
| 259 | - 'KEY en_ligne' => 'en_ligne', |
|
| 260 | - ], |
|
| 261 | - 'join' => [ |
|
| 262 | - 'id_auteur' => 'id_auteur', |
|
| 263 | - 'login' => 'login' |
|
| 264 | - ], |
|
| 265 | - 'rechercher_champs' => [ |
|
| 266 | - 'nom' => 5, |
|
| 267 | - 'bio' => 1, |
|
| 268 | - 'email' => 1, |
|
| 269 | - 'nom_site' => 1, |
|
| 270 | - 'url_site' => 1, |
|
| 271 | - 'login' => 1 |
|
| 272 | - ], |
|
| 273 | - // 2 conditions pour les auteurs : statut!=poubelle, |
|
| 274 | - // et avoir des articles publies |
|
| 275 | - 'statut' => [ |
|
| 276 | - [ |
|
| 277 | - 'champ' => 'statut', |
|
| 278 | - 'publie' => '!5poubelle', |
|
| 279 | - 'previsu' => '!5poubelle', |
|
| 280 | - 'exception' => 'statut' |
|
| 281 | - ], |
|
| 282 | - [ |
|
| 283 | - 'champ' => [ |
|
| 284 | - ['spip_auteurs_liens', 'id_auteur'], |
|
| 285 | - [ |
|
| 286 | - 'spip_articles', |
|
| 287 | - ['id_objet', 'id_article', 'objet', 'article'] |
|
| 288 | - ], |
|
| 289 | - 'statut' |
|
| 290 | - ], |
|
| 291 | - 'publie' => 'publie', |
|
| 292 | - 'previsu' => '!', |
|
| 293 | - 'post_date' => 'date', |
|
| 294 | - 'exception' => ['statut', 'lien', 'tout'] |
|
| 295 | - ], |
|
| 296 | - ], |
|
| 297 | - 'statut_images' => [ |
|
| 298 | - 'auteur-6forum-16.png', |
|
| 299 | - '0minirezo' => 'auteur-0minirezo-16.png', |
|
| 300 | - '1comite' => 'auteur-1comite-16.png', |
|
| 301 | - '6forum' => 'auteur-6forum-16.png', |
|
| 302 | - '5poubelle' => 'auteur-5poubelle-16.png', |
|
| 303 | - 'nouveau' => '' |
|
| 304 | - ], |
|
| 305 | - 'statut_titres' => [ |
|
| 306 | - 'titre_image_visiteur', |
|
| 307 | - '0minirezo' => 'titre_image_administrateur', |
|
| 308 | - '1comite' => 'titre_image_redacteur_02', |
|
| 309 | - '6forum' => 'titre_image_visiteur', |
|
| 310 | - '5poubelle' => 'titre_image_auteur_supprime', |
|
| 311 | - ], |
|
| 312 | - 'tables_jointures' => [#'auteurs_liens' // declaration generique plus bas |
|
| 313 | - ], |
|
| 314 | - ], |
|
| 315 | - 'spip_rubriques' => [ |
|
| 316 | - 'page' => 'rubrique', |
|
| 317 | - 'url_voir' => 'rubrique', |
|
| 318 | - 'url_edit' => 'rubrique_edit', |
|
| 319 | - 'texte_retour' => 'icone_retour', |
|
| 320 | - 'texte_objets' => 'public:rubriques', |
|
| 321 | - 'texte_objet' => 'public:rubrique', |
|
| 322 | - 'texte_modifier' => 'icone_modifier_rubrique', |
|
| 323 | - 'texte_creer' => 'icone_creer_rubrique', |
|
| 324 | - 'texte_ajouter' => 'titre_ajouter_une_rubrique', |
|
| 325 | - 'texte_creer_associer' => 'creer_et_associer_une_rubrique', |
|
| 326 | - 'info_aucun_objet' => 'info_aucun_rubrique', |
|
| 327 | - 'info_1_objet' => 'info_1_rubrique', |
|
| 328 | - 'info_nb_objets' => 'info_nb_rubriques', |
|
| 329 | - 'texte_logo_objet' => 'logo_rubrique', |
|
| 330 | - 'texte_langue_objet' => 'titre_langue_rubrique', |
|
| 331 | - 'texte_definir_comme_traduction_objet' => 'texte_definir_comme_traduction_rubrique', |
|
| 332 | - 'titre' => 'titre, lang', |
|
| 333 | - 'date' => 'date', |
|
| 334 | - 'principale' => 'oui', |
|
| 335 | - 'introduction_longueur' => '600', |
|
| 336 | - 'champs_editables' => ['titre', 'texte', 'descriptif', 'extra'], |
|
| 337 | - 'champs_versionnes' => ['titre', 'descriptif', 'texte'], |
|
| 338 | - 'field' => [ |
|
| 339 | - 'id_rubrique' => 'bigint(21) NOT NULL', |
|
| 340 | - 'id_parent' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 341 | - 'titre' => "text DEFAULT '' NOT NULL", |
|
| 342 | - 'descriptif' => "text DEFAULT '' NOT NULL", |
|
| 343 | - 'texte' => "longtext DEFAULT '' NOT NULL", |
|
| 344 | - 'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 345 | - 'maj' => 'TIMESTAMP', |
|
| 346 | - 'statut' => "varchar(10) DEFAULT '0' NOT NULL", |
|
| 347 | - 'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 348 | - 'lang' => "VARCHAR(10) DEFAULT '' NOT NULL", |
|
| 349 | - 'langue_choisie' => "VARCHAR(3) DEFAULT 'non'", |
|
| 350 | - 'statut_tmp' => "varchar(10) DEFAULT '0' NOT NULL", |
|
| 351 | - 'date_tmp' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 352 | - 'profondeur' => "smallint(5) DEFAULT '0' NOT NULL" |
|
| 353 | - ], |
|
| 354 | - 'key' => [ |
|
| 355 | - 'PRIMARY KEY' => 'id_rubrique', |
|
| 356 | - 'KEY lang' => 'lang', |
|
| 357 | - 'KEY id_parent' => 'id_parent', |
|
| 358 | - ], |
|
| 359 | - 'parent' => [ |
|
| 360 | - ['type' => 'rubrique', 'champ' => 'id_parent'] |
|
| 361 | - ], |
|
| 362 | - 'rechercher_champs' => [ |
|
| 363 | - 'titre' => 8, |
|
| 364 | - 'descriptif' => 5, |
|
| 365 | - 'texte' => 1 |
|
| 366 | - ], |
|
| 367 | - 'statut' => [ |
|
| 368 | - [ |
|
| 369 | - 'champ' => 'statut', |
|
| 370 | - 'publie' => 'publie', |
|
| 371 | - 'previsu' => '!', |
|
| 372 | - 'exception' => ['statut', 'tout'] |
|
| 373 | - ], |
|
| 374 | - ], |
|
| 375 | - 'tables_jointures' => [#'id_auteur' => 'auteurs_liens' // declaration generique plus bas |
|
| 376 | - ], |
|
| 377 | - ], |
|
| 378 | - // toutes les tables ont le droit a une jointure sur les auteurs |
|
| 379 | - ['tables_jointures' => ['id_auteur' => 'auteurs_liens']] |
|
| 380 | - ]; |
|
| 381 | - |
|
| 382 | - // avant d'appeller les pipeline qui peuvent generer une reentrance a l'install |
|
| 383 | - // initialiser la signature |
|
| 384 | - $md5 = md5(serialize($infos_tables)); |
|
| 385 | - |
|
| 386 | - $GLOBALS['tables_principales'] = pipeline('declarer_tables_principales', $GLOBALS['tables_principales']); |
|
| 387 | - $GLOBALS['tables_auxiliaires'] = pipeline('declarer_tables_auxiliaires', $GLOBALS['tables_auxiliaires']); |
|
| 388 | - $infos_tables = pipeline('declarer_tables_objets_sql', $infos_tables); |
|
| 389 | - |
|
| 390 | - // completer les informations manquantes ou implicites |
|
| 391 | - $all = []; |
|
| 392 | - foreach (array_keys($infos_tables) as $t) { |
|
| 393 | - // les cles numeriques servent a declarer |
|
| 394 | - // les proprietes applicables a tous les objets |
|
| 395 | - // on les mets de cote |
|
| 396 | - if (is_numeric($t)) { |
|
| 397 | - $all = array_merge_recursive($all, $infos_tables[$t]); |
|
| 398 | - unset($infos_tables[$t]); |
|
| 399 | - } else { |
|
| 400 | - $infos_tables[$t] = renseigner_table_objet_sql($t, $infos_tables[$t]); |
|
| 401 | - } |
|
| 402 | - } |
|
| 403 | - |
|
| 404 | - // repercuter les proprietes generales communes a tous les objets |
|
| 405 | - foreach (array_keys($infos_tables) as $t) { |
|
| 406 | - foreach ($all as $i => $v) { |
|
| 407 | - if (in_array($i, ['tables_jointures', 'champs_versionnes'])) { |
|
| 408 | - $add = $all[$i]; |
|
| 409 | - // eviter les doublons de declaration de table jointure (ex des mots sur auteurs) |
|
| 410 | - // pour les declarations generiques avec cles numeriques |
|
| 411 | - if ($i == 'tables_jointures' and isset($infos_tables[$t][$i]) and is_countable($infos_tables[$t][$i]) ? count($infos_tables[$t][$i]) : 0) { |
|
| 412 | - $doublons = array_intersect($infos_tables[$t][$i], $add); |
|
| 413 | - foreach ($doublons as $d) { |
|
| 414 | - if ( |
|
| 415 | - is_numeric(array_search($d, $infos_tables[$t][$i])) |
|
| 416 | - and is_numeric($k = array_search($d, $add)) |
|
| 417 | - ) { |
|
| 418 | - unset($add[$k]); |
|
| 419 | - } |
|
| 420 | - } |
|
| 421 | - } |
|
| 422 | - $infos_tables[$t][$i] = array_merge($infos_tables[$t][$i] ?? [], $add); |
|
| 423 | - } else { |
|
| 424 | - $infos_tables[$t][$i] = array_merge_recursive( |
|
| 425 | - $infos_tables[$t][$i] ?? [], |
|
| 426 | - $all[$i] |
|
| 427 | - ); |
|
| 428 | - } |
|
| 429 | - } |
|
| 430 | - } |
|
| 431 | - |
|
| 432 | - // completer les tables principales et auxiliaires |
|
| 433 | - // avec celles declarees uniquement dans declarer_table_objets_sql |
|
| 434 | - // pour assurer la compat en transition |
|
| 435 | - foreach ($infos_tables as $table => $infos) { |
|
| 436 | - $principale_ou_auxiliaire = ($infos['principale'] ? 'tables_principales' : 'tables_auxiliaires'); |
|
| 437 | - // memoriser des champs eventuels declares par des plugins dans le pipeline tables_xxx |
|
| 438 | - // qui a ete appelle avant |
|
| 439 | - $mem = ($GLOBALS[$principale_ou_auxiliaire][$table] ?? []); |
|
| 440 | - // l'ajouter au tableau |
|
| 441 | - $GLOBALS[$principale_ou_auxiliaire][$table] = []; |
|
| 442 | - if (isset($infos['field']) and isset($infos['key'])) { |
|
| 443 | - foreach (['field', 'key', 'join'] as $k) { |
|
| 444 | - if (isset($infos_tables[$table][$k])) { |
|
| 445 | - $GLOBALS[$principale_ou_auxiliaire][$table][$k] = &$infos_tables[$table][$k]; |
|
| 446 | - } |
|
| 447 | - } |
|
| 448 | - } else { |
|
| 449 | - // ici on ne renvoie que les declarations, donc RIEN |
|
| 450 | - // pour avoir la vrai description en base, il faut passer par trouver_table |
|
| 451 | - $GLOBALS[$principale_ou_auxiliaire][$table] = []; |
|
| 452 | - } |
|
| 453 | - if (is_countable($mem) ? count($mem) : 0) { |
|
| 454 | - foreach (array_keys($mem) as $k) { |
|
| 455 | - if (isset($GLOBALS[$principale_ou_auxiliaire][$table][$k])) { |
|
| 456 | - $GLOBALS[$principale_ou_auxiliaire][$table][$k] = array_merge( |
|
| 457 | - $GLOBALS[$principale_ou_auxiliaire][$table][$k], |
|
| 458 | - $mem[$k] |
|
| 459 | - ); |
|
| 460 | - } else { |
|
| 461 | - $GLOBALS[$principale_ou_auxiliaire][$table][$k] = $mem[$k]; |
|
| 462 | - } |
|
| 463 | - } |
|
| 464 | - } |
|
| 465 | - } |
|
| 466 | - |
|
| 467 | - // recuperer les interfaces (table_titre, table_date) |
|
| 468 | - // on ne le fait que dans un second temps pour que table_objet soit fonctionnel |
|
| 469 | - // dans le pipeline de declarer_tables_interfaces |
|
| 470 | - include_spip('public/interfaces'); |
|
| 471 | - foreach (array_keys($infos_tables) as $t) { |
|
| 472 | - $infos_tables[$t] = renseigner_table_objet_interfaces($t, $infos_tables[$t]); |
|
| 473 | - } |
|
| 474 | - |
|
| 475 | - $deja_la = false; |
|
| 476 | - // signature |
|
| 477 | - $md5 = md5(serialize($infos_tables)); |
|
| 478 | - } |
|
| 479 | - if ($table_sql === '::md5') { |
|
| 480 | - return $md5; |
|
| 481 | - } |
|
| 482 | - if ($table_sql and !isset($infos_tables[$table_sql])) { |
|
| 483 | - #$desc = renseigner_table_objet_sql($table_sql,$desc); |
|
| 484 | - $desc = renseigner_table_objet_interfaces($table_sql, $desc); |
|
| 485 | - |
|
| 486 | - return $desc; |
|
| 487 | - } |
|
| 488 | - if ($table_sql) { |
|
| 489 | - return $infos_tables[$table_sql] ?? []; |
|
| 490 | - } |
|
| 491 | - |
|
| 492 | - return $infos_tables; |
|
| 58 | + static $deja_la = false; |
|
| 59 | + static $infos_tables = null; |
|
| 60 | + static $md5 = null; |
|
| 61 | + static $plugin_hash = null; |
|
| 62 | + |
|
| 63 | + // plugins hash connu ? non si _CACHE_PLUGINS_OPT est pas encore chargé. |
|
| 64 | + $_PLUGINS_HASH = defined('_PLUGINS_HASH') ? _PLUGINS_HASH : '!_CACHE_PLUGINS_OPT'; |
|
| 65 | + |
|
| 66 | + // prealablement recuperer les tables_principales |
|
| 67 | + if (is_null($infos_tables) or $plugin_hash !== $_PLUGINS_HASH) { |
|
| 68 | + // pas de reentrance (cas base/serial) |
|
| 69 | + if ($deja_la) { |
|
| 70 | + spip_log('Re-entrance anormale sur lister_tables_objets_sql : ' |
|
| 71 | + . var_export(debug_backtrace(), true), _LOG_CRITIQUE); |
|
| 72 | + |
|
| 73 | + return ($table_sql === '::md5' ? $md5 : []); |
|
| 74 | + } |
|
| 75 | + $deja_la = true; |
|
| 76 | + $plugin_hash = $_PLUGINS_HASH; // avant de lancer les pipelines |
|
| 77 | + |
|
| 78 | + // recuperer les declarations explicites ancienne mode |
|
| 79 | + // qui servent a completer declarer_tables_objets_sql |
|
| 80 | + base_serial($GLOBALS['tables_principales']); |
|
| 81 | + base_auxiliaires($GLOBALS['tables_auxiliaires']); |
|
| 82 | + $infos_tables = [ |
|
| 83 | + 'spip_articles' => [ |
|
| 84 | + 'page' => 'article', |
|
| 85 | + 'texte_retour' => 'icone_retour_article', |
|
| 86 | + 'texte_modifier' => 'icone_modifier_article', |
|
| 87 | + 'texte_creer' => 'icone_ecrire_article', |
|
| 88 | + 'texte_objets' => 'public:articles', |
|
| 89 | + 'texte_objet' => 'public:article', |
|
| 90 | + 'texte_signale_edition' => 'texte_travail_article', |
|
| 91 | + 'info_aucun_objet' => 'info_aucun_article', |
|
| 92 | + 'info_1_objet' => 'info_1_article', |
|
| 93 | + 'info_nb_objets' => 'info_nb_articles', |
|
| 94 | + 'texte_logo_objet' => 'logo_article', |
|
| 95 | + 'texte_langue_objet' => 'titre_langue_article', |
|
| 96 | + 'texte_definir_comme_traduction_objet' => 'trad_lier', |
|
| 97 | + 'titre' => 'titre, lang', |
|
| 98 | + 'date' => 'date', |
|
| 99 | + 'principale' => 'oui', |
|
| 100 | + 'introduction_longueur' => '500', |
|
| 101 | + 'champs_editables' => [ |
|
| 102 | + 'surtitre', |
|
| 103 | + 'titre', |
|
| 104 | + 'soustitre', |
|
| 105 | + 'descriptif', |
|
| 106 | + 'nom_site', |
|
| 107 | + 'url_site', |
|
| 108 | + 'chapo', |
|
| 109 | + 'texte', |
|
| 110 | + 'ps', |
|
| 111 | + 'virtuel' |
|
| 112 | + ], |
|
| 113 | + 'champs_versionnes' => [ |
|
| 114 | + 'id_rubrique', |
|
| 115 | + 'surtitre', |
|
| 116 | + 'titre', |
|
| 117 | + 'soustitre', |
|
| 118 | + 'jointure_auteurs', |
|
| 119 | + 'descriptif', |
|
| 120 | + 'nom_site', |
|
| 121 | + 'url_site', |
|
| 122 | + 'chapo', |
|
| 123 | + 'texte', |
|
| 124 | + 'ps' |
|
| 125 | + ], |
|
| 126 | + 'field' => [ |
|
| 127 | + 'id_article' => 'bigint(21) NOT NULL', |
|
| 128 | + 'surtitre' => "text DEFAULT '' NOT NULL", |
|
| 129 | + 'titre' => "text DEFAULT '' NOT NULL", |
|
| 130 | + 'soustitre' => "text DEFAULT '' NOT NULL", |
|
| 131 | + 'id_rubrique' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 132 | + 'descriptif' => "text DEFAULT '' NOT NULL", |
|
| 133 | + 'chapo' => "mediumtext DEFAULT '' NOT NULL", |
|
| 134 | + 'texte' => "longtext DEFAULT '' NOT NULL", |
|
| 135 | + 'ps' => "mediumtext DEFAULT '' NOT NULL", |
|
| 136 | + 'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 137 | + 'statut' => "varchar(10) DEFAULT '0' NOT NULL", |
|
| 138 | + 'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 139 | + 'maj' => 'TIMESTAMP', |
|
| 140 | + 'export' => "VARCHAR(10) DEFAULT 'oui'", |
|
| 141 | + 'date_redac' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 142 | + 'visites' => "integer DEFAULT '0' NOT NULL", |
|
| 143 | + 'referers' => "integer DEFAULT '0' NOT NULL", |
|
| 144 | + 'popularite' => "DOUBLE DEFAULT '0' NOT NULL", |
|
| 145 | + 'accepter_forum' => "CHAR(3) DEFAULT '' NOT NULL", |
|
| 146 | + 'date_modif' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 147 | + 'lang' => "VARCHAR(10) DEFAULT '' NOT NULL", |
|
| 148 | + 'langue_choisie' => "VARCHAR(3) DEFAULT 'non'", |
|
| 149 | + 'id_trad' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 150 | + 'nom_site' => "tinytext DEFAULT '' NOT NULL", |
|
| 151 | + 'url_site' => "text DEFAULT '' NOT NULL", |
|
| 152 | + 'virtuel' => "text DEFAULT '' NOT NULL", |
|
| 153 | + ], |
|
| 154 | + 'key' => [ |
|
| 155 | + 'PRIMARY KEY' => 'id_article', |
|
| 156 | + 'KEY id_rubrique' => 'id_rubrique', |
|
| 157 | + 'KEY id_secteur' => 'id_secteur', |
|
| 158 | + 'KEY id_trad' => 'id_trad', |
|
| 159 | + 'KEY lang' => 'lang', |
|
| 160 | + 'KEY statut' => 'statut, date', |
|
| 161 | + ], |
|
| 162 | + 'join' => [ |
|
| 163 | + 'id_article' => 'id_article', |
|
| 164 | + 'id_rubrique' => 'id_rubrique' |
|
| 165 | + ], |
|
| 166 | + 'parent' => [ |
|
| 167 | + ['type' => 'rubrique', 'champ' => 'id_rubrique'] |
|
| 168 | + ], |
|
| 169 | + 'rechercher_champs' => [ |
|
| 170 | + 'surtitre' => 5, |
|
| 171 | + 'titre' => 8, |
|
| 172 | + 'soustitre' => 5, |
|
| 173 | + 'chapo' => 3, |
|
| 174 | + 'texte' => 1, |
|
| 175 | + 'ps' => 1, |
|
| 176 | + 'nom_site' => 1, |
|
| 177 | + 'url_site' => 1, |
|
| 178 | + 'descriptif' => 4 |
|
| 179 | + ], |
|
| 180 | + 'rechercher_jointures' => [ |
|
| 181 | + 'auteur' => ['nom' => 10], |
|
| 182 | + ], |
|
| 183 | + 'statut' => [ |
|
| 184 | + [ |
|
| 185 | + 'champ' => 'statut', |
|
| 186 | + 'publie' => 'publie', |
|
| 187 | + 'previsu' => 'publie,prop,prepa/auteur', |
|
| 188 | + 'post_date' => 'date', |
|
| 189 | + 'exception' => ['statut', 'tout'] |
|
| 190 | + ] |
|
| 191 | + ], |
|
| 192 | + 'statut_titres' => [ |
|
| 193 | + 'prepa' => 'info_article_redaction', |
|
| 194 | + 'prop' => 'info_article_propose', |
|
| 195 | + 'publie' => 'info_article_publie', |
|
| 196 | + 'refuse' => 'info_article_refuse', |
|
| 197 | + 'poubelle' => 'info_article_supprime' |
|
| 198 | + ], |
|
| 199 | + 'statut_textes_instituer' => [ |
|
| 200 | + 'prepa' => 'texte_statut_en_cours_redaction', |
|
| 201 | + 'prop' => 'texte_statut_propose_evaluation', |
|
| 202 | + 'publie' => 'texte_statut_publie', |
|
| 203 | + 'refuse' => 'texte_statut_refuse', |
|
| 204 | + 'poubelle' => 'texte_statut_poubelle', |
|
| 205 | + ], |
|
| 206 | + 'texte_changer_statut' => 'texte_article_statut', |
|
| 207 | + 'aide_changer_statut' => 'artstatut', |
|
| 208 | + 'tables_jointures' => [ |
|
| 209 | + 'profondeur' => 'rubriques', |
|
| 210 | + #'id_auteur' => 'auteurs_liens' // declaration generique plus bas |
|
| 211 | + ], |
|
| 212 | + ], |
|
| 213 | + 'spip_auteurs' => [ |
|
| 214 | + 'page' => 'auteur', |
|
| 215 | + 'texte_retour' => 'icone_retour', |
|
| 216 | + 'texte_ajouter' => 'titre_ajouter_un_auteur', |
|
| 217 | + 'texte_modifier' => 'admin_modifier_auteur', |
|
| 218 | + 'texte_objets' => 'icone_auteurs', |
|
| 219 | + 'texte_objet' => 'public:auteur', |
|
| 220 | + 'info_aucun_objet' => 'info_aucun_auteur', |
|
| 221 | + 'info_1_objet' => 'info_1_auteur', |
|
| 222 | + 'info_nb_objets' => 'info_nb_auteurs', |
|
| 223 | + 'texte_logo_objet' => 'logo_auteur', |
|
| 224 | + 'texte_creer_associer' => 'creer_et_associer_un_auteur', |
|
| 225 | + 'titre' => "nom AS titre, '' AS lang", |
|
| 226 | + 'date' => 'date', |
|
| 227 | + 'principale' => 'oui', |
|
| 228 | + 'champs_editables' => ['nom', 'email', 'bio', 'nom_site', 'url_site', 'imessage', 'pgp'], |
|
| 229 | + 'champs_versionnes' => ['nom', 'bio', 'email', 'nom_site', 'url_site', 'login'], |
|
| 230 | + 'field' => [ |
|
| 231 | + 'id_auteur' => 'bigint(21) NOT NULL', |
|
| 232 | + 'nom' => "text DEFAULT '' NOT NULL", |
|
| 233 | + 'bio' => "text DEFAULT '' NOT NULL", |
|
| 234 | + 'email' => "tinytext DEFAULT '' NOT NULL", |
|
| 235 | + 'nom_site' => "tinytext DEFAULT '' NOT NULL", |
|
| 236 | + 'url_site' => "text DEFAULT '' NOT NULL", |
|
| 237 | + 'login' => 'VARCHAR(255) BINARY', |
|
| 238 | + 'pass' => "tinytext DEFAULT '' NOT NULL", |
|
| 239 | + 'low_sec' => "tinytext DEFAULT '' NOT NULL", |
|
| 240 | + 'statut' => "varchar(255) DEFAULT '0' NOT NULL", |
|
| 241 | + 'webmestre' => "varchar(3) DEFAULT 'non' NOT NULL", |
|
| 242 | + 'maj' => 'TIMESTAMP', |
|
| 243 | + 'pgp' => "TEXT DEFAULT '' NOT NULL", |
|
| 244 | + 'htpass' => "tinytext DEFAULT '' NOT NULL", |
|
| 245 | + 'en_ligne' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 246 | + 'alea_actuel' => 'tinytext', |
|
| 247 | + 'alea_futur' => 'tinytext', |
|
| 248 | + 'prefs' => 'text', |
|
| 249 | + 'cookie_oubli' => 'tinytext', |
|
| 250 | + 'source' => "VARCHAR(10) DEFAULT 'spip' NOT NULL", |
|
| 251 | + 'lang' => "VARCHAR(10) DEFAULT '' NOT NULL", |
|
| 252 | + 'imessage' => "VARCHAR(3) DEFAULT '' NOT NULL", |
|
| 253 | + 'backup_cles' => "mediumtext DEFAULT '' NOT NULL", |
|
| 254 | + ], |
|
| 255 | + 'key' => [ |
|
| 256 | + 'PRIMARY KEY' => 'id_auteur', |
|
| 257 | + 'KEY login' => 'login', |
|
| 258 | + 'KEY statut' => 'statut', |
|
| 259 | + 'KEY en_ligne' => 'en_ligne', |
|
| 260 | + ], |
|
| 261 | + 'join' => [ |
|
| 262 | + 'id_auteur' => 'id_auteur', |
|
| 263 | + 'login' => 'login' |
|
| 264 | + ], |
|
| 265 | + 'rechercher_champs' => [ |
|
| 266 | + 'nom' => 5, |
|
| 267 | + 'bio' => 1, |
|
| 268 | + 'email' => 1, |
|
| 269 | + 'nom_site' => 1, |
|
| 270 | + 'url_site' => 1, |
|
| 271 | + 'login' => 1 |
|
| 272 | + ], |
|
| 273 | + // 2 conditions pour les auteurs : statut!=poubelle, |
|
| 274 | + // et avoir des articles publies |
|
| 275 | + 'statut' => [ |
|
| 276 | + [ |
|
| 277 | + 'champ' => 'statut', |
|
| 278 | + 'publie' => '!5poubelle', |
|
| 279 | + 'previsu' => '!5poubelle', |
|
| 280 | + 'exception' => 'statut' |
|
| 281 | + ], |
|
| 282 | + [ |
|
| 283 | + 'champ' => [ |
|
| 284 | + ['spip_auteurs_liens', 'id_auteur'], |
|
| 285 | + [ |
|
| 286 | + 'spip_articles', |
|
| 287 | + ['id_objet', 'id_article', 'objet', 'article'] |
|
| 288 | + ], |
|
| 289 | + 'statut' |
|
| 290 | + ], |
|
| 291 | + 'publie' => 'publie', |
|
| 292 | + 'previsu' => '!', |
|
| 293 | + 'post_date' => 'date', |
|
| 294 | + 'exception' => ['statut', 'lien', 'tout'] |
|
| 295 | + ], |
|
| 296 | + ], |
|
| 297 | + 'statut_images' => [ |
|
| 298 | + 'auteur-6forum-16.png', |
|
| 299 | + '0minirezo' => 'auteur-0minirezo-16.png', |
|
| 300 | + '1comite' => 'auteur-1comite-16.png', |
|
| 301 | + '6forum' => 'auteur-6forum-16.png', |
|
| 302 | + '5poubelle' => 'auteur-5poubelle-16.png', |
|
| 303 | + 'nouveau' => '' |
|
| 304 | + ], |
|
| 305 | + 'statut_titres' => [ |
|
| 306 | + 'titre_image_visiteur', |
|
| 307 | + '0minirezo' => 'titre_image_administrateur', |
|
| 308 | + '1comite' => 'titre_image_redacteur_02', |
|
| 309 | + '6forum' => 'titre_image_visiteur', |
|
| 310 | + '5poubelle' => 'titre_image_auteur_supprime', |
|
| 311 | + ], |
|
| 312 | + 'tables_jointures' => [#'auteurs_liens' // declaration generique plus bas |
|
| 313 | + ], |
|
| 314 | + ], |
|
| 315 | + 'spip_rubriques' => [ |
|
| 316 | + 'page' => 'rubrique', |
|
| 317 | + 'url_voir' => 'rubrique', |
|
| 318 | + 'url_edit' => 'rubrique_edit', |
|
| 319 | + 'texte_retour' => 'icone_retour', |
|
| 320 | + 'texte_objets' => 'public:rubriques', |
|
| 321 | + 'texte_objet' => 'public:rubrique', |
|
| 322 | + 'texte_modifier' => 'icone_modifier_rubrique', |
|
| 323 | + 'texte_creer' => 'icone_creer_rubrique', |
|
| 324 | + 'texte_ajouter' => 'titre_ajouter_une_rubrique', |
|
| 325 | + 'texte_creer_associer' => 'creer_et_associer_une_rubrique', |
|
| 326 | + 'info_aucun_objet' => 'info_aucun_rubrique', |
|
| 327 | + 'info_1_objet' => 'info_1_rubrique', |
|
| 328 | + 'info_nb_objets' => 'info_nb_rubriques', |
|
| 329 | + 'texte_logo_objet' => 'logo_rubrique', |
|
| 330 | + 'texte_langue_objet' => 'titre_langue_rubrique', |
|
| 331 | + 'texte_definir_comme_traduction_objet' => 'texte_definir_comme_traduction_rubrique', |
|
| 332 | + 'titre' => 'titre, lang', |
|
| 333 | + 'date' => 'date', |
|
| 334 | + 'principale' => 'oui', |
|
| 335 | + 'introduction_longueur' => '600', |
|
| 336 | + 'champs_editables' => ['titre', 'texte', 'descriptif', 'extra'], |
|
| 337 | + 'champs_versionnes' => ['titre', 'descriptif', 'texte'], |
|
| 338 | + 'field' => [ |
|
| 339 | + 'id_rubrique' => 'bigint(21) NOT NULL', |
|
| 340 | + 'id_parent' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 341 | + 'titre' => "text DEFAULT '' NOT NULL", |
|
| 342 | + 'descriptif' => "text DEFAULT '' NOT NULL", |
|
| 343 | + 'texte' => "longtext DEFAULT '' NOT NULL", |
|
| 344 | + 'id_secteur' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 345 | + 'maj' => 'TIMESTAMP', |
|
| 346 | + 'statut' => "varchar(10) DEFAULT '0' NOT NULL", |
|
| 347 | + 'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 348 | + 'lang' => "VARCHAR(10) DEFAULT '' NOT NULL", |
|
| 349 | + 'langue_choisie' => "VARCHAR(3) DEFAULT 'non'", |
|
| 350 | + 'statut_tmp' => "varchar(10) DEFAULT '0' NOT NULL", |
|
| 351 | + 'date_tmp' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", |
|
| 352 | + 'profondeur' => "smallint(5) DEFAULT '0' NOT NULL" |
|
| 353 | + ], |
|
| 354 | + 'key' => [ |
|
| 355 | + 'PRIMARY KEY' => 'id_rubrique', |
|
| 356 | + 'KEY lang' => 'lang', |
|
| 357 | + 'KEY id_parent' => 'id_parent', |
|
| 358 | + ], |
|
| 359 | + 'parent' => [ |
|
| 360 | + ['type' => 'rubrique', 'champ' => 'id_parent'] |
|
| 361 | + ], |
|
| 362 | + 'rechercher_champs' => [ |
|
| 363 | + 'titre' => 8, |
|
| 364 | + 'descriptif' => 5, |
|
| 365 | + 'texte' => 1 |
|
| 366 | + ], |
|
| 367 | + 'statut' => [ |
|
| 368 | + [ |
|
| 369 | + 'champ' => 'statut', |
|
| 370 | + 'publie' => 'publie', |
|
| 371 | + 'previsu' => '!', |
|
| 372 | + 'exception' => ['statut', 'tout'] |
|
| 373 | + ], |
|
| 374 | + ], |
|
| 375 | + 'tables_jointures' => [#'id_auteur' => 'auteurs_liens' // declaration generique plus bas |
|
| 376 | + ], |
|
| 377 | + ], |
|
| 378 | + // toutes les tables ont le droit a une jointure sur les auteurs |
|
| 379 | + ['tables_jointures' => ['id_auteur' => 'auteurs_liens']] |
|
| 380 | + ]; |
|
| 381 | + |
|
| 382 | + // avant d'appeller les pipeline qui peuvent generer une reentrance a l'install |
|
| 383 | + // initialiser la signature |
|
| 384 | + $md5 = md5(serialize($infos_tables)); |
|
| 385 | + |
|
| 386 | + $GLOBALS['tables_principales'] = pipeline('declarer_tables_principales', $GLOBALS['tables_principales']); |
|
| 387 | + $GLOBALS['tables_auxiliaires'] = pipeline('declarer_tables_auxiliaires', $GLOBALS['tables_auxiliaires']); |
|
| 388 | + $infos_tables = pipeline('declarer_tables_objets_sql', $infos_tables); |
|
| 389 | + |
|
| 390 | + // completer les informations manquantes ou implicites |
|
| 391 | + $all = []; |
|
| 392 | + foreach (array_keys($infos_tables) as $t) { |
|
| 393 | + // les cles numeriques servent a declarer |
|
| 394 | + // les proprietes applicables a tous les objets |
|
| 395 | + // on les mets de cote |
|
| 396 | + if (is_numeric($t)) { |
|
| 397 | + $all = array_merge_recursive($all, $infos_tables[$t]); |
|
| 398 | + unset($infos_tables[$t]); |
|
| 399 | + } else { |
|
| 400 | + $infos_tables[$t] = renseigner_table_objet_sql($t, $infos_tables[$t]); |
|
| 401 | + } |
|
| 402 | + } |
|
| 403 | + |
|
| 404 | + // repercuter les proprietes generales communes a tous les objets |
|
| 405 | + foreach (array_keys($infos_tables) as $t) { |
|
| 406 | + foreach ($all as $i => $v) { |
|
| 407 | + if (in_array($i, ['tables_jointures', 'champs_versionnes'])) { |
|
| 408 | + $add = $all[$i]; |
|
| 409 | + // eviter les doublons de declaration de table jointure (ex des mots sur auteurs) |
|
| 410 | + // pour les declarations generiques avec cles numeriques |
|
| 411 | + if ($i == 'tables_jointures' and isset($infos_tables[$t][$i]) and is_countable($infos_tables[$t][$i]) ? count($infos_tables[$t][$i]) : 0) { |
|
| 412 | + $doublons = array_intersect($infos_tables[$t][$i], $add); |
|
| 413 | + foreach ($doublons as $d) { |
|
| 414 | + if ( |
|
| 415 | + is_numeric(array_search($d, $infos_tables[$t][$i])) |
|
| 416 | + and is_numeric($k = array_search($d, $add)) |
|
| 417 | + ) { |
|
| 418 | + unset($add[$k]); |
|
| 419 | + } |
|
| 420 | + } |
|
| 421 | + } |
|
| 422 | + $infos_tables[$t][$i] = array_merge($infos_tables[$t][$i] ?? [], $add); |
|
| 423 | + } else { |
|
| 424 | + $infos_tables[$t][$i] = array_merge_recursive( |
|
| 425 | + $infos_tables[$t][$i] ?? [], |
|
| 426 | + $all[$i] |
|
| 427 | + ); |
|
| 428 | + } |
|
| 429 | + } |
|
| 430 | + } |
|
| 431 | + |
|
| 432 | + // completer les tables principales et auxiliaires |
|
| 433 | + // avec celles declarees uniquement dans declarer_table_objets_sql |
|
| 434 | + // pour assurer la compat en transition |
|
| 435 | + foreach ($infos_tables as $table => $infos) { |
|
| 436 | + $principale_ou_auxiliaire = ($infos['principale'] ? 'tables_principales' : 'tables_auxiliaires'); |
|
| 437 | + // memoriser des champs eventuels declares par des plugins dans le pipeline tables_xxx |
|
| 438 | + // qui a ete appelle avant |
|
| 439 | + $mem = ($GLOBALS[$principale_ou_auxiliaire][$table] ?? []); |
|
| 440 | + // l'ajouter au tableau |
|
| 441 | + $GLOBALS[$principale_ou_auxiliaire][$table] = []; |
|
| 442 | + if (isset($infos['field']) and isset($infos['key'])) { |
|
| 443 | + foreach (['field', 'key', 'join'] as $k) { |
|
| 444 | + if (isset($infos_tables[$table][$k])) { |
|
| 445 | + $GLOBALS[$principale_ou_auxiliaire][$table][$k] = &$infos_tables[$table][$k]; |
|
| 446 | + } |
|
| 447 | + } |
|
| 448 | + } else { |
|
| 449 | + // ici on ne renvoie que les declarations, donc RIEN |
|
| 450 | + // pour avoir la vrai description en base, il faut passer par trouver_table |
|
| 451 | + $GLOBALS[$principale_ou_auxiliaire][$table] = []; |
|
| 452 | + } |
|
| 453 | + if (is_countable($mem) ? count($mem) : 0) { |
|
| 454 | + foreach (array_keys($mem) as $k) { |
|
| 455 | + if (isset($GLOBALS[$principale_ou_auxiliaire][$table][$k])) { |
|
| 456 | + $GLOBALS[$principale_ou_auxiliaire][$table][$k] = array_merge( |
|
| 457 | + $GLOBALS[$principale_ou_auxiliaire][$table][$k], |
|
| 458 | + $mem[$k] |
|
| 459 | + ); |
|
| 460 | + } else { |
|
| 461 | + $GLOBALS[$principale_ou_auxiliaire][$table][$k] = $mem[$k]; |
|
| 462 | + } |
|
| 463 | + } |
|
| 464 | + } |
|
| 465 | + } |
|
| 466 | + |
|
| 467 | + // recuperer les interfaces (table_titre, table_date) |
|
| 468 | + // on ne le fait que dans un second temps pour que table_objet soit fonctionnel |
|
| 469 | + // dans le pipeline de declarer_tables_interfaces |
|
| 470 | + include_spip('public/interfaces'); |
|
| 471 | + foreach (array_keys($infos_tables) as $t) { |
|
| 472 | + $infos_tables[$t] = renseigner_table_objet_interfaces($t, $infos_tables[$t]); |
|
| 473 | + } |
|
| 474 | + |
|
| 475 | + $deja_la = false; |
|
| 476 | + // signature |
|
| 477 | + $md5 = md5(serialize($infos_tables)); |
|
| 478 | + } |
|
| 479 | + if ($table_sql === '::md5') { |
|
| 480 | + return $md5; |
|
| 481 | + } |
|
| 482 | + if ($table_sql and !isset($infos_tables[$table_sql])) { |
|
| 483 | + #$desc = renseigner_table_objet_sql($table_sql,$desc); |
|
| 484 | + $desc = renseigner_table_objet_interfaces($table_sql, $desc); |
|
| 485 | + |
|
| 486 | + return $desc; |
|
| 487 | + } |
|
| 488 | + if ($table_sql) { |
|
| 489 | + return $infos_tables[$table_sql] ?? []; |
|
| 490 | + } |
|
| 491 | + |
|
| 492 | + return $infos_tables; |
|
| 493 | 493 | } |
| 494 | 494 | |
| 495 | 495 | |
@@ -504,27 +504,27 @@ discard block |
||
| 504 | 504 | **/ |
| 505 | 505 | function base_serial(&$tables_principales) { |
| 506 | 506 | |
| 507 | - $spip_jobs = [ |
|
| 508 | - 'id_job' => 'bigint(21) NOT NULL', |
|
| 509 | - 'descriptif' => "text DEFAULT '' NOT NULL", |
|
| 510 | - 'fonction' => 'varchar(255) NOT NULL', //nom de la fonction |
|
| 511 | - 'args' => "longblob DEFAULT '' NOT NULL", // arguments |
|
| 512 | - 'md5args' => "char(32) NOT NULL default ''", // signature des arguments |
|
| 513 | - 'inclure' => 'varchar(255) NOT NULL', // fichier a inclure ou path/ pour charger_fonction |
|
| 514 | - 'priorite' => 'smallint(6) NOT NULL default 0', |
|
| 515 | - 'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // date au plus tot |
|
| 516 | - 'status' => 'tinyint NOT NULL default 1', |
|
| 517 | - ]; |
|
| 518 | - |
|
| 519 | - $spip_jobs_key = [ |
|
| 520 | - 'PRIMARY KEY' => 'id_job', |
|
| 521 | - 'KEY date' => 'date', |
|
| 522 | - 'KEY status' => 'status', |
|
| 523 | - ]; |
|
| 524 | - |
|
| 525 | - /// Attention: mes_fonctions peut avoir deja defini cette variable |
|
| 526 | - /// il faut donc rajouter, mais pas reinitialiser |
|
| 527 | - $tables_principales['spip_jobs'] = ['field' => &$spip_jobs, 'key' => &$spip_jobs_key]; |
|
| 507 | + $spip_jobs = [ |
|
| 508 | + 'id_job' => 'bigint(21) NOT NULL', |
|
| 509 | + 'descriptif' => "text DEFAULT '' NOT NULL", |
|
| 510 | + 'fonction' => 'varchar(255) NOT NULL', //nom de la fonction |
|
| 511 | + 'args' => "longblob DEFAULT '' NOT NULL", // arguments |
|
| 512 | + 'md5args' => "char(32) NOT NULL default ''", // signature des arguments |
|
| 513 | + 'inclure' => 'varchar(255) NOT NULL', // fichier a inclure ou path/ pour charger_fonction |
|
| 514 | + 'priorite' => 'smallint(6) NOT NULL default 0', |
|
| 515 | + 'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // date au plus tot |
|
| 516 | + 'status' => 'tinyint NOT NULL default 1', |
|
| 517 | + ]; |
|
| 518 | + |
|
| 519 | + $spip_jobs_key = [ |
|
| 520 | + 'PRIMARY KEY' => 'id_job', |
|
| 521 | + 'KEY date' => 'date', |
|
| 522 | + 'KEY status' => 'status', |
|
| 523 | + ]; |
|
| 524 | + |
|
| 525 | + /// Attention: mes_fonctions peut avoir deja defini cette variable |
|
| 526 | + /// il faut donc rajouter, mais pas reinitialiser |
|
| 527 | + $tables_principales['spip_jobs'] = ['field' => &$spip_jobs, 'key' => &$spip_jobs_key]; |
|
| 528 | 528 | } |
| 529 | 529 | |
| 530 | 530 | |
@@ -536,71 +536,71 @@ discard block |
||
| 536 | 536 | * @return void |
| 537 | 537 | **/ |
| 538 | 538 | function base_auxiliaires(&$tables_auxiliaires) { |
| 539 | - $spip_resultats = [ |
|
| 540 | - 'recherche' => "char(16) DEFAULT '' NOT NULL", |
|
| 541 | - 'id' => 'INT UNSIGNED NOT NULL', |
|
| 542 | - 'points' => "INT UNSIGNED DEFAULT '0' NOT NULL", |
|
| 543 | - 'table_objet' => "varchar(30) DEFAULT '' NOT NULL", |
|
| 544 | - 'serveur' => "char(16) DEFAULT '' NOT NULL", // hash md5 partiel du serveur de base ('' pour le serveur principal) |
|
| 545 | - 'maj' => 'TIMESTAMP' |
|
| 546 | - ]; |
|
| 547 | - |
|
| 548 | - $spip_resultats_key = [// pas de cle ni index, ca fait des insertions plus rapides et les requetes jointes utilisees en recheche ne sont pas plus lentes ... |
|
| 549 | - ]; |
|
| 550 | - |
|
| 551 | - $spip_auteurs_liens = [ |
|
| 552 | - 'id_auteur' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 553 | - 'id_objet' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 554 | - 'objet' => "VARCHAR (25) DEFAULT '' NOT NULL", |
|
| 555 | - 'vu' => "VARCHAR(6) DEFAULT 'non' NOT NULL" |
|
| 556 | - ]; |
|
| 557 | - |
|
| 558 | - $spip_auteurs_liens_key = [ |
|
| 559 | - 'PRIMARY KEY' => 'id_auteur,id_objet,objet', |
|
| 560 | - 'KEY id_auteur' => 'id_auteur', |
|
| 561 | - 'KEY id_objet' => 'id_objet', |
|
| 562 | - 'KEY objet' => 'objet', |
|
| 563 | - ]; |
|
| 564 | - |
|
| 565 | - $spip_meta = [ |
|
| 566 | - 'nom' => 'VARCHAR (255) NOT NULL', |
|
| 567 | - 'valeur' => "text DEFAULT ''", |
|
| 568 | - 'impt' => "ENUM('non', 'oui') DEFAULT 'oui' NOT NULL", |
|
| 569 | - 'maj' => 'TIMESTAMP' |
|
| 570 | - ]; |
|
| 571 | - |
|
| 572 | - $spip_meta_key = [ |
|
| 573 | - 'PRIMARY KEY' => 'nom' |
|
| 574 | - ]; |
|
| 575 | - |
|
| 576 | - $spip_jobs_liens = [ |
|
| 577 | - 'id_job' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 578 | - 'id_objet' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 579 | - 'objet' => "VARCHAR (25) DEFAULT '' NOT NULL", |
|
| 580 | - ]; |
|
| 581 | - |
|
| 582 | - $spip_jobs_liens_key = [ |
|
| 583 | - 'PRIMARY KEY' => 'id_job,id_objet,objet', |
|
| 584 | - 'KEY id_job' => 'id_job' |
|
| 585 | - ]; |
|
| 586 | - |
|
| 587 | - $tables_auxiliaires['spip_auteurs_liens'] = [ |
|
| 588 | - 'field' => &$spip_auteurs_liens, |
|
| 589 | - 'key' => &$spip_auteurs_liens_key |
|
| 590 | - ]; |
|
| 591 | - |
|
| 592 | - $tables_auxiliaires['spip_meta'] = [ |
|
| 593 | - 'field' => &$spip_meta, |
|
| 594 | - 'key' => &$spip_meta_key |
|
| 595 | - ]; |
|
| 596 | - $tables_auxiliaires['spip_resultats'] = [ |
|
| 597 | - 'field' => &$spip_resultats, |
|
| 598 | - 'key' => &$spip_resultats_key |
|
| 599 | - ]; |
|
| 600 | - $tables_auxiliaires['spip_jobs_liens'] = [ |
|
| 601 | - 'field' => &$spip_jobs_liens, |
|
| 602 | - 'key' => &$spip_jobs_liens_key |
|
| 603 | - ]; |
|
| 539 | + $spip_resultats = [ |
|
| 540 | + 'recherche' => "char(16) DEFAULT '' NOT NULL", |
|
| 541 | + 'id' => 'INT UNSIGNED NOT NULL', |
|
| 542 | + 'points' => "INT UNSIGNED DEFAULT '0' NOT NULL", |
|
| 543 | + 'table_objet' => "varchar(30) DEFAULT '' NOT NULL", |
|
| 544 | + 'serveur' => "char(16) DEFAULT '' NOT NULL", // hash md5 partiel du serveur de base ('' pour le serveur principal) |
|
| 545 | + 'maj' => 'TIMESTAMP' |
|
| 546 | + ]; |
|
| 547 | + |
|
| 548 | + $spip_resultats_key = [// pas de cle ni index, ca fait des insertions plus rapides et les requetes jointes utilisees en recheche ne sont pas plus lentes ... |
|
| 549 | + ]; |
|
| 550 | + |
|
| 551 | + $spip_auteurs_liens = [ |
|
| 552 | + 'id_auteur' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 553 | + 'id_objet' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 554 | + 'objet' => "VARCHAR (25) DEFAULT '' NOT NULL", |
|
| 555 | + 'vu' => "VARCHAR(6) DEFAULT 'non' NOT NULL" |
|
| 556 | + ]; |
|
| 557 | + |
|
| 558 | + $spip_auteurs_liens_key = [ |
|
| 559 | + 'PRIMARY KEY' => 'id_auteur,id_objet,objet', |
|
| 560 | + 'KEY id_auteur' => 'id_auteur', |
|
| 561 | + 'KEY id_objet' => 'id_objet', |
|
| 562 | + 'KEY objet' => 'objet', |
|
| 563 | + ]; |
|
| 564 | + |
|
| 565 | + $spip_meta = [ |
|
| 566 | + 'nom' => 'VARCHAR (255) NOT NULL', |
|
| 567 | + 'valeur' => "text DEFAULT ''", |
|
| 568 | + 'impt' => "ENUM('non', 'oui') DEFAULT 'oui' NOT NULL", |
|
| 569 | + 'maj' => 'TIMESTAMP' |
|
| 570 | + ]; |
|
| 571 | + |
|
| 572 | + $spip_meta_key = [ |
|
| 573 | + 'PRIMARY KEY' => 'nom' |
|
| 574 | + ]; |
|
| 575 | + |
|
| 576 | + $spip_jobs_liens = [ |
|
| 577 | + 'id_job' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 578 | + 'id_objet' => "bigint(21) DEFAULT '0' NOT NULL", |
|
| 579 | + 'objet' => "VARCHAR (25) DEFAULT '' NOT NULL", |
|
| 580 | + ]; |
|
| 581 | + |
|
| 582 | + $spip_jobs_liens_key = [ |
|
| 583 | + 'PRIMARY KEY' => 'id_job,id_objet,objet', |
|
| 584 | + 'KEY id_job' => 'id_job' |
|
| 585 | + ]; |
|
| 586 | + |
|
| 587 | + $tables_auxiliaires['spip_auteurs_liens'] = [ |
|
| 588 | + 'field' => &$spip_auteurs_liens, |
|
| 589 | + 'key' => &$spip_auteurs_liens_key |
|
| 590 | + ]; |
|
| 591 | + |
|
| 592 | + $tables_auxiliaires['spip_meta'] = [ |
|
| 593 | + 'field' => &$spip_meta, |
|
| 594 | + 'key' => &$spip_meta_key |
|
| 595 | + ]; |
|
| 596 | + $tables_auxiliaires['spip_resultats'] = [ |
|
| 597 | + 'field' => &$spip_resultats, |
|
| 598 | + 'key' => &$spip_resultats_key |
|
| 599 | + ]; |
|
| 600 | + $tables_auxiliaires['spip_jobs_liens'] = [ |
|
| 601 | + 'field' => &$spip_jobs_liens, |
|
| 602 | + 'key' => &$spip_jobs_liens_key |
|
| 603 | + ]; |
|
| 604 | 604 | } |
| 605 | 605 | |
| 606 | 606 | |
@@ -657,129 +657,129 @@ discard block |
||
| 657 | 657 | * @return array |
| 658 | 658 | */ |
| 659 | 659 | function renseigner_table_objet_sql($table_sql, &$infos) { |
| 660 | - if (!isset($infos['type'])) { |
|
| 661 | - // si on arrive de base/trouver_table, on a la cle primaire : |
|
| 662 | - // s'en servir pour extrapoler le type |
|
| 663 | - if (isset($infos['key']['PRIMARY KEY'])) { |
|
| 664 | - $primary = $infos['key']['PRIMARY KEY']; |
|
| 665 | - $primary = explode(',', $primary); |
|
| 666 | - $primary = reset($primary); |
|
| 667 | - $infos['type'] = preg_replace(',^spip_|^id_|s$,', '', $primary); |
|
| 668 | - } else { |
|
| 669 | - $infos['type'] = preg_replace(',^spip_|s$,', '', $table_sql); |
|
| 670 | - } |
|
| 671 | - } |
|
| 672 | - if (!isset($infos['type_surnoms'])) { |
|
| 673 | - $infos['type_surnoms'] = []; |
|
| 674 | - } |
|
| 675 | - |
|
| 676 | - if (!isset($infos['table_objet'])) { |
|
| 677 | - $infos['table_objet'] = preg_replace(',^spip_,', '', $table_sql); |
|
| 678 | - } |
|
| 679 | - if (!isset($infos['table_objet_surnoms'])) { |
|
| 680 | - $infos['table_objet_surnoms'] = []; |
|
| 681 | - } |
|
| 682 | - |
|
| 683 | - if (!isset($infos['principale'])) { |
|
| 684 | - $infos['principale'] = (isset($GLOBALS['tables_principales'][$table_sql]) ? 'oui' : false); |
|
| 685 | - } |
|
| 686 | - |
|
| 687 | - // normaliser pour pouvoir tester en php $infos['principale']? |
|
| 688 | - // et dans une boucle {principale=oui} |
|
| 689 | - $infos['principale'] = (($infos['principale'] and $infos['principale'] != 'non') ? 'oui' : false); |
|
| 690 | - |
|
| 691 | - // declarer et normaliser pour pouvoir tester en php $infos['editable']? |
|
| 692 | - // et dans une boucle {editable=oui} |
|
| 693 | - if (!isset($infos['editable'])) { |
|
| 694 | - $infos['editable'] = 'oui'; |
|
| 695 | - } |
|
| 696 | - |
|
| 697 | - $infos['editable'] = (($infos['editable'] and $infos['editable'] != 'non') ? 'oui' : false); |
|
| 698 | - |
|
| 699 | - // les urls publiques sont par defaut page=type pour les tables principales, et rien pour les autres |
|
| 700 | - // seules les exceptions sont donc a declarer |
|
| 701 | - if (!isset($infos['page'])) { |
|
| 702 | - $infos['page'] = ($infos['principale'] ? $infos['type'] : ''); |
|
| 703 | - } |
|
| 704 | - |
|
| 705 | - if (!isset($infos['url_voir'])) { |
|
| 706 | - $infos['url_voir'] = $infos['type']; |
|
| 707 | - } |
|
| 708 | - if (!isset($infos['url_edit'])) { |
|
| 709 | - $infos['url_edit'] = $infos['url_voir'] . ($infos['editable'] ? '_edit' : ''); |
|
| 710 | - } |
|
| 711 | - if (!isset($infos['icone_objet'])) { |
|
| 712 | - $infos['icone_objet'] = $infos['type']; |
|
| 713 | - } |
|
| 714 | - |
|
| 715 | - // chaines de langue |
|
| 716 | - // par defaut : objet:icone_xxx_objet |
|
| 717 | - if (!isset($infos['texte_retour'])) { |
|
| 718 | - $infos['texte_retour'] = 'icone_retour'; |
|
| 719 | - } |
|
| 720 | - if (!isset($infos['texte_modifier'])) { |
|
| 721 | - $infos['texte_modifier'] = $infos['type'] . ':' . 'icone_modifier_' . $infos['type']; |
|
| 722 | - } |
|
| 723 | - if (!isset($infos['texte_creer'])) { |
|
| 724 | - $infos['texte_creer'] = $infos['type'] . ':' . 'icone_creer_' . $infos['type']; |
|
| 725 | - } |
|
| 726 | - if (!isset($infos['texte_creer_associer'])) { |
|
| 727 | - $infos['texte_creer_associer'] = $infos['type'] . ':' . 'texte_creer_associer_' . $infos['type']; |
|
| 728 | - } |
|
| 729 | - if (!isset($infos['texte_ajouter'])) { |
|
| 730 | - // Ajouter un X |
|
| 731 | - $infos['texte_ajouter'] = $infos['type'] . ':' . 'texte_ajouter_' . $infos['type']; |
|
| 732 | - } |
|
| 733 | - if (!isset($infos['texte_objets'])) { |
|
| 734 | - $infos['texte_objets'] = $infos['type'] . ':' . 'titre_' . $infos['table_objet']; |
|
| 735 | - } |
|
| 736 | - if (!isset($infos['texte_objet'])) { |
|
| 737 | - $infos['texte_objet'] = $infos['type'] . ':' . 'titre_' . $infos['type']; |
|
| 738 | - } |
|
| 739 | - if (!isset($infos['texte_logo_objet'])) { |
|
| 740 | - // objet:titre_logo_objet "Logo de ce X" |
|
| 741 | - $infos['texte_logo_objet'] = $infos['type'] . ':' . 'titre_logo_' . $infos['type']; |
|
| 742 | - } |
|
| 743 | - if (!isset($infos['texte_langue_objet'])) { |
|
| 744 | - // objet:texte_langue_objet "Langue de ce X" |
|
| 745 | - $infos['texte_langue_objet'] = $infos['type'] . ':' . 'titre_langue_' . $infos['type']; |
|
| 746 | - } |
|
| 747 | - if (!isset($infos['texte_definir_comme_traduction_objet'])) { |
|
| 748 | - // "Ce X est une traduction du X numéro :" |
|
| 749 | - $infos['texte_definir_comme_traduction_objet'] = $infos['type'] . ':' . 'texte_definir_comme_traduction_' . $infos['type']; |
|
| 750 | - } |
|
| 751 | - |
|
| 752 | - // objet:info_aucun_objet |
|
| 753 | - if (!isset($infos['info_aucun_objet'])) { |
|
| 754 | - $infos['info_aucun_objet'] = $infos['type'] . ':' . 'info_aucun_' . $infos['type']; |
|
| 755 | - } |
|
| 756 | - // objet:info_1_objet |
|
| 757 | - if (!isset($infos['info_1_objet'])) { |
|
| 758 | - $infos['info_1_objet'] = $infos['type'] . ':' . 'info_1_' . $infos['type']; |
|
| 759 | - } |
|
| 760 | - // objet:info_nb_objets |
|
| 761 | - if (!isset($infos['info_nb_objets'])) { |
|
| 762 | - $infos['info_nb_objets'] = $infos['type'] . ':' . 'info_nb_' . $infos['table_objet']; |
|
| 763 | - } |
|
| 764 | - |
|
| 765 | - if (!isset($infos['champs_editables'])) { |
|
| 766 | - $infos['champs_editables'] = []; |
|
| 767 | - } |
|
| 768 | - if (!isset($infos['champs_versionnes'])) { |
|
| 769 | - $infos['champs_versionnes'] = []; |
|
| 770 | - } |
|
| 771 | - if (!isset($infos['rechercher_champs'])) { |
|
| 772 | - $infos['rechercher_champs'] = []; |
|
| 773 | - } |
|
| 774 | - if (!isset($infos['rechercher_jointures'])) { |
|
| 775 | - $infos['rechercher_jointures'] = []; |
|
| 776 | - } |
|
| 777 | - |
|
| 778 | - if (!isset($infos['modeles'])) { |
|
| 779 | - $infos['modeles'] = [$infos['type']]; |
|
| 780 | - } |
|
| 781 | - |
|
| 782 | - return $infos; |
|
| 660 | + if (!isset($infos['type'])) { |
|
| 661 | + // si on arrive de base/trouver_table, on a la cle primaire : |
|
| 662 | + // s'en servir pour extrapoler le type |
|
| 663 | + if (isset($infos['key']['PRIMARY KEY'])) { |
|
| 664 | + $primary = $infos['key']['PRIMARY KEY']; |
|
| 665 | + $primary = explode(',', $primary); |
|
| 666 | + $primary = reset($primary); |
|
| 667 | + $infos['type'] = preg_replace(',^spip_|^id_|s$,', '', $primary); |
|
| 668 | + } else { |
|
| 669 | + $infos['type'] = preg_replace(',^spip_|s$,', '', $table_sql); |
|
| 670 | + } |
|
| 671 | + } |
|
| 672 | + if (!isset($infos['type_surnoms'])) { |
|
| 673 | + $infos['type_surnoms'] = []; |
|
| 674 | + } |
|
| 675 | + |
|
| 676 | + if (!isset($infos['table_objet'])) { |
|
| 677 | + $infos['table_objet'] = preg_replace(',^spip_,', '', $table_sql); |
|
| 678 | + } |
|
| 679 | + if (!isset($infos['table_objet_surnoms'])) { |
|
| 680 | + $infos['table_objet_surnoms'] = []; |
|
| 681 | + } |
|
| 682 | + |
|
| 683 | + if (!isset($infos['principale'])) { |
|
| 684 | + $infos['principale'] = (isset($GLOBALS['tables_principales'][$table_sql]) ? 'oui' : false); |
|
| 685 | + } |
|
| 686 | + |
|
| 687 | + // normaliser pour pouvoir tester en php $infos['principale']? |
|
| 688 | + // et dans une boucle {principale=oui} |
|
| 689 | + $infos['principale'] = (($infos['principale'] and $infos['principale'] != 'non') ? 'oui' : false); |
|
| 690 | + |
|
| 691 | + // declarer et normaliser pour pouvoir tester en php $infos['editable']? |
|
| 692 | + // et dans une boucle {editable=oui} |
|
| 693 | + if (!isset($infos['editable'])) { |
|
| 694 | + $infos['editable'] = 'oui'; |
|
| 695 | + } |
|
| 696 | + |
|
| 697 | + $infos['editable'] = (($infos['editable'] and $infos['editable'] != 'non') ? 'oui' : false); |
|
| 698 | + |
|
| 699 | + // les urls publiques sont par defaut page=type pour les tables principales, et rien pour les autres |
|
| 700 | + // seules les exceptions sont donc a declarer |
|
| 701 | + if (!isset($infos['page'])) { |
|
| 702 | + $infos['page'] = ($infos['principale'] ? $infos['type'] : ''); |
|
| 703 | + } |
|
| 704 | + |
|
| 705 | + if (!isset($infos['url_voir'])) { |
|
| 706 | + $infos['url_voir'] = $infos['type']; |
|
| 707 | + } |
|
| 708 | + if (!isset($infos['url_edit'])) { |
|
| 709 | + $infos['url_edit'] = $infos['url_voir'] . ($infos['editable'] ? '_edit' : ''); |
|
| 710 | + } |
|
| 711 | + if (!isset($infos['icone_objet'])) { |
|
| 712 | + $infos['icone_objet'] = $infos['type']; |
|
| 713 | + } |
|
| 714 | + |
|
| 715 | + // chaines de langue |
|
| 716 | + // par defaut : objet:icone_xxx_objet |
|
| 717 | + if (!isset($infos['texte_retour'])) { |
|
| 718 | + $infos['texte_retour'] = 'icone_retour'; |
|
| 719 | + } |
|
| 720 | + if (!isset($infos['texte_modifier'])) { |
|
| 721 | + $infos['texte_modifier'] = $infos['type'] . ':' . 'icone_modifier_' . $infos['type']; |
|
| 722 | + } |
|
| 723 | + if (!isset($infos['texte_creer'])) { |
|
| 724 | + $infos['texte_creer'] = $infos['type'] . ':' . 'icone_creer_' . $infos['type']; |
|
| 725 | + } |
|
| 726 | + if (!isset($infos['texte_creer_associer'])) { |
|
| 727 | + $infos['texte_creer_associer'] = $infos['type'] . ':' . 'texte_creer_associer_' . $infos['type']; |
|
| 728 | + } |
|
| 729 | + if (!isset($infos['texte_ajouter'])) { |
|
| 730 | + // Ajouter un X |
|
| 731 | + $infos['texte_ajouter'] = $infos['type'] . ':' . 'texte_ajouter_' . $infos['type']; |
|
| 732 | + } |
|
| 733 | + if (!isset($infos['texte_objets'])) { |
|
| 734 | + $infos['texte_objets'] = $infos['type'] . ':' . 'titre_' . $infos['table_objet']; |
|
| 735 | + } |
|
| 736 | + if (!isset($infos['texte_objet'])) { |
|
| 737 | + $infos['texte_objet'] = $infos['type'] . ':' . 'titre_' . $infos['type']; |
|
| 738 | + } |
|
| 739 | + if (!isset($infos['texte_logo_objet'])) { |
|
| 740 | + // objet:titre_logo_objet "Logo de ce X" |
|
| 741 | + $infos['texte_logo_objet'] = $infos['type'] . ':' . 'titre_logo_' . $infos['type']; |
|
| 742 | + } |
|
| 743 | + if (!isset($infos['texte_langue_objet'])) { |
|
| 744 | + // objet:texte_langue_objet "Langue de ce X" |
|
| 745 | + $infos['texte_langue_objet'] = $infos['type'] . ':' . 'titre_langue_' . $infos['type']; |
|
| 746 | + } |
|
| 747 | + if (!isset($infos['texte_definir_comme_traduction_objet'])) { |
|
| 748 | + // "Ce X est une traduction du X numéro :" |
|
| 749 | + $infos['texte_definir_comme_traduction_objet'] = $infos['type'] . ':' . 'texte_definir_comme_traduction_' . $infos['type']; |
|
| 750 | + } |
|
| 751 | + |
|
| 752 | + // objet:info_aucun_objet |
|
| 753 | + if (!isset($infos['info_aucun_objet'])) { |
|
| 754 | + $infos['info_aucun_objet'] = $infos['type'] . ':' . 'info_aucun_' . $infos['type']; |
|
| 755 | + } |
|
| 756 | + // objet:info_1_objet |
|
| 757 | + if (!isset($infos['info_1_objet'])) { |
|
| 758 | + $infos['info_1_objet'] = $infos['type'] . ':' . 'info_1_' . $infos['type']; |
|
| 759 | + } |
|
| 760 | + // objet:info_nb_objets |
|
| 761 | + if (!isset($infos['info_nb_objets'])) { |
|
| 762 | + $infos['info_nb_objets'] = $infos['type'] . ':' . 'info_nb_' . $infos['table_objet']; |
|
| 763 | + } |
|
| 764 | + |
|
| 765 | + if (!isset($infos['champs_editables'])) { |
|
| 766 | + $infos['champs_editables'] = []; |
|
| 767 | + } |
|
| 768 | + if (!isset($infos['champs_versionnes'])) { |
|
| 769 | + $infos['champs_versionnes'] = []; |
|
| 770 | + } |
|
| 771 | + if (!isset($infos['rechercher_champs'])) { |
|
| 772 | + $infos['rechercher_champs'] = []; |
|
| 773 | + } |
|
| 774 | + if (!isset($infos['rechercher_jointures'])) { |
|
| 775 | + $infos['rechercher_jointures'] = []; |
|
| 776 | + } |
|
| 777 | + |
|
| 778 | + if (!isset($infos['modeles'])) { |
|
| 779 | + $infos['modeles'] = [$infos['type']]; |
|
| 780 | + } |
|
| 781 | + |
|
| 782 | + return $infos; |
|
| 783 | 783 | } |
| 784 | 784 | |
| 785 | 785 | /** |
@@ -796,30 +796,30 @@ discard block |
||
| 796 | 796 | * @return array |
| 797 | 797 | */ |
| 798 | 798 | function renseigner_table_objet_interfaces($table_sql, &$infos) { |
| 799 | - if (!isset($infos['titre'])) { |
|
| 800 | - if (isset($infos['table_objet']) and isset($GLOBALS['table_titre'][$infos['table_objet']])) { |
|
| 801 | - $infos['titre'] = $GLOBALS['table_titre'][$infos['table_objet']]; |
|
| 802 | - } else { |
|
| 803 | - $infos['titre'] = ((isset($infos['field']['titre'])) ? 'titre,' : "'' as titre,"); |
|
| 804 | - $infos['titre'] .= ((isset($infos['field']['lang'])) ? 'lang' : "'' as lang"); |
|
| 805 | - } |
|
| 806 | - } |
|
| 807 | - if (!isset($infos['date'])) { |
|
| 808 | - if (isset($infos['table_objet']) and isset($GLOBALS['table_date'][$infos['table_objet']])) { |
|
| 809 | - $infos['date'] = $GLOBALS['table_date'][$infos['table_objet']]; |
|
| 810 | - } else { |
|
| 811 | - $infos['date'] = ((isset($infos['field']['date'])) ? 'date' : ''); |
|
| 812 | - } |
|
| 813 | - } |
|
| 814 | - |
|
| 815 | - $infos['statut'] ??= $GLOBALS['table_statut'][$table_sql] ?? ''; |
|
| 816 | - $infos['tables_jointures'] ??= []; |
|
| 817 | - |
|
| 818 | - if (isset($GLOBALS['tables_jointures'][$table_sql])) { |
|
| 819 | - $infos['tables_jointures'] = array_merge($infos['tables_jointures'], $GLOBALS['tables_jointures'][$table_sql]); |
|
| 820 | - } |
|
| 821 | - |
|
| 822 | - return $infos; |
|
| 799 | + if (!isset($infos['titre'])) { |
|
| 800 | + if (isset($infos['table_objet']) and isset($GLOBALS['table_titre'][$infos['table_objet']])) { |
|
| 801 | + $infos['titre'] = $GLOBALS['table_titre'][$infos['table_objet']]; |
|
| 802 | + } else { |
|
| 803 | + $infos['titre'] = ((isset($infos['field']['titre'])) ? 'titre,' : "'' as titre,"); |
|
| 804 | + $infos['titre'] .= ((isset($infos['field']['lang'])) ? 'lang' : "'' as lang"); |
|
| 805 | + } |
|
| 806 | + } |
|
| 807 | + if (!isset($infos['date'])) { |
|
| 808 | + if (isset($infos['table_objet']) and isset($GLOBALS['table_date'][$infos['table_objet']])) { |
|
| 809 | + $infos['date'] = $GLOBALS['table_date'][$infos['table_objet']]; |
|
| 810 | + } else { |
|
| 811 | + $infos['date'] = ((isset($infos['field']['date'])) ? 'date' : ''); |
|
| 812 | + } |
|
| 813 | + } |
|
| 814 | + |
|
| 815 | + $infos['statut'] ??= $GLOBALS['table_statut'][$table_sql] ?? ''; |
|
| 816 | + $infos['tables_jointures'] ??= []; |
|
| 817 | + |
|
| 818 | + if (isset($GLOBALS['tables_jointures'][$table_sql])) { |
|
| 819 | + $infos['tables_jointures'] = array_merge($infos['tables_jointures'], $GLOBALS['tables_jointures'][$table_sql]); |
|
| 820 | + } |
|
| 821 | + |
|
| 822 | + return $infos; |
|
| 823 | 823 | } |
| 824 | 824 | |
| 825 | 825 | /** |
@@ -830,13 +830,13 @@ discard block |
||
| 830 | 830 | * Liste et descriptions des tables principales |
| 831 | 831 | **/ |
| 832 | 832 | function lister_tables_principales() { |
| 833 | - static $done = false; |
|
| 834 | - if (!$done or !(is_countable($GLOBALS['tables_principales']) ? count($GLOBALS['tables_principales']) : 0)) { |
|
| 835 | - lister_tables_objets_sql(); |
|
| 836 | - $done = true; |
|
| 837 | - } |
|
| 833 | + static $done = false; |
|
| 834 | + if (!$done or !(is_countable($GLOBALS['tables_principales']) ? count($GLOBALS['tables_principales']) : 0)) { |
|
| 835 | + lister_tables_objets_sql(); |
|
| 836 | + $done = true; |
|
| 837 | + } |
|
| 838 | 838 | |
| 839 | - return $GLOBALS['tables_principales']; |
|
| 839 | + return $GLOBALS['tables_principales']; |
|
| 840 | 840 | } |
| 841 | 841 | |
| 842 | 842 | /** |
@@ -847,13 +847,13 @@ discard block |
||
| 847 | 847 | * Liste et descriptions des tables auxiliaires |
| 848 | 848 | **/ |
| 849 | 849 | function lister_tables_auxiliaires() { |
| 850 | - static $done = false; |
|
| 851 | - if (!$done or !(is_countable($GLOBALS['tables_auxiliaires']) ? count($GLOBALS['tables_auxiliaires']) : 0)) { |
|
| 852 | - lister_tables_objets_sql(); |
|
| 853 | - $done = true; |
|
| 854 | - } |
|
| 850 | + static $done = false; |
|
| 851 | + if (!$done or !(is_countable($GLOBALS['tables_auxiliaires']) ? count($GLOBALS['tables_auxiliaires']) : 0)) { |
|
| 852 | + lister_tables_objets_sql(); |
|
| 853 | + $done = true; |
|
| 854 | + } |
|
| 855 | 855 | |
| 856 | - return $GLOBALS['tables_auxiliaires']; |
|
| 856 | + return $GLOBALS['tables_auxiliaires']; |
|
| 857 | 857 | } |
| 858 | 858 | |
| 859 | 859 | /** |
@@ -862,45 +862,45 @@ discard block |
||
| 862 | 862 | * @return array |
| 863 | 863 | */ |
| 864 | 864 | function lister_tables_objets_surnoms() { |
| 865 | - static $surnoms = null; |
|
| 866 | - static $md5 = null; |
|
| 867 | - if ( |
|
| 868 | - !$surnoms |
|
| 869 | - or $md5 != lister_tables_objets_sql('::md5') |
|
| 870 | - ) { |
|
| 871 | - // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions |
|
| 872 | - // pour compatibilite, car il faut dorenavent utiliser |
|
| 873 | - // declarer_table_objets_sql |
|
| 874 | - $surnoms = pipeline( |
|
| 875 | - 'declarer_tables_objets_surnoms', |
|
| 876 | - [ |
|
| 877 | - # pour les modeles |
|
| 878 | - # a enlever ? |
|
| 879 | - 'doc' => 'documents', |
|
| 880 | - 'img' => 'documents', |
|
| 881 | - 'emb' => 'documents', |
|
| 882 | - ] |
|
| 883 | - ); |
|
| 884 | - $infos_tables = lister_tables_objets_sql(); |
|
| 885 | - foreach ($infos_tables as $t => $infos) { |
|
| 886 | - // cas de base type=>table |
|
| 887 | - // et preg_replace(',^spip_|^id_|s$,',table)=>table |
|
| 888 | - if ($infos['table_objet']) { // securite, si la fonction est appelee trop tot, c'est vide |
|
| 889 | - // optimisations pour table_objet |
|
| 890 | - //$surnoms[$infos['type']] = $infos['table_objet']; |
|
| 891 | - $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['table_objet']; |
|
| 892 | - $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['table_objet']; |
|
| 893 | - if (is_array($infos['table_objet_surnoms']) and count($infos['table_objet_surnoms'])) { |
|
| 894 | - foreach ($infos['table_objet_surnoms'] as $surnom) { |
|
| 895 | - $surnoms[$surnom] = $infos['table_objet']; |
|
| 896 | - } |
|
| 897 | - } |
|
| 898 | - } |
|
| 899 | - } |
|
| 900 | - $md5 = lister_tables_objets_sql('::md5'); |
|
| 901 | - } |
|
| 902 | - |
|
| 903 | - return $surnoms; |
|
| 865 | + static $surnoms = null; |
|
| 866 | + static $md5 = null; |
|
| 867 | + if ( |
|
| 868 | + !$surnoms |
|
| 869 | + or $md5 != lister_tables_objets_sql('::md5') |
|
| 870 | + ) { |
|
| 871 | + // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions |
|
| 872 | + // pour compatibilite, car il faut dorenavent utiliser |
|
| 873 | + // declarer_table_objets_sql |
|
| 874 | + $surnoms = pipeline( |
|
| 875 | + 'declarer_tables_objets_surnoms', |
|
| 876 | + [ |
|
| 877 | + # pour les modeles |
|
| 878 | + # a enlever ? |
|
| 879 | + 'doc' => 'documents', |
|
| 880 | + 'img' => 'documents', |
|
| 881 | + 'emb' => 'documents', |
|
| 882 | + ] |
|
| 883 | + ); |
|
| 884 | + $infos_tables = lister_tables_objets_sql(); |
|
| 885 | + foreach ($infos_tables as $t => $infos) { |
|
| 886 | + // cas de base type=>table |
|
| 887 | + // et preg_replace(',^spip_|^id_|s$,',table)=>table |
|
| 888 | + if ($infos['table_objet']) { // securite, si la fonction est appelee trop tot, c'est vide |
|
| 889 | + // optimisations pour table_objet |
|
| 890 | + //$surnoms[$infos['type']] = $infos['table_objet']; |
|
| 891 | + $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['table_objet']; |
|
| 892 | + $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['table_objet']; |
|
| 893 | + if (is_array($infos['table_objet_surnoms']) and count($infos['table_objet_surnoms'])) { |
|
| 894 | + foreach ($infos['table_objet_surnoms'] as $surnom) { |
|
| 895 | + $surnoms[$surnom] = $infos['table_objet']; |
|
| 896 | + } |
|
| 897 | + } |
|
| 898 | + } |
|
| 899 | + } |
|
| 900 | + $md5 = lister_tables_objets_sql('::md5'); |
|
| 901 | + } |
|
| 902 | + |
|
| 903 | + return $surnoms; |
|
| 904 | 904 | } |
| 905 | 905 | |
| 906 | 906 | /** |
@@ -909,35 +909,35 @@ discard block |
||
| 909 | 909 | * @return array |
| 910 | 910 | */ |
| 911 | 911 | function lister_types_surnoms() { |
| 912 | - static $surnoms = null; |
|
| 913 | - static $md5 = null; |
|
| 914 | - if ( |
|
| 915 | - !$surnoms |
|
| 916 | - or $md5 != lister_tables_objets_sql('::md5') |
|
| 917 | - ) { |
|
| 918 | - // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions |
|
| 919 | - // pour compatibilite, car il faut dorenavent utiliser |
|
| 920 | - // declarer_table_objets_sql |
|
| 921 | - $surnoms = pipeline('declarer_type_surnoms', ['racine-site' => 'site']); |
|
| 922 | - $infos_tables = lister_tables_objets_sql(); |
|
| 923 | - foreach ($infos_tables as $t => $infos) { |
|
| 924 | - if ($infos['type']) { // securite, si la fonction est appelee trop tot, c'est vide |
|
| 925 | - // optimisations pour objet_type |
|
| 926 | - //$surnoms[$infos['type']] = $infos['type']; |
|
| 927 | - $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['type']; |
|
| 928 | - $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['type']; |
|
| 929 | - // surnoms declares |
|
| 930 | - if (is_array($infos['type_surnoms']) and count($infos['type_surnoms'])) { |
|
| 931 | - foreach ($infos['type_surnoms'] as $surnom) { |
|
| 932 | - $surnoms[$surnom] = $infos['type']; |
|
| 933 | - } |
|
| 934 | - } |
|
| 935 | - } |
|
| 936 | - } |
|
| 937 | - $md5 = lister_tables_objets_sql('::md5'); |
|
| 938 | - } |
|
| 939 | - |
|
| 940 | - return $surnoms; |
|
| 912 | + static $surnoms = null; |
|
| 913 | + static $md5 = null; |
|
| 914 | + if ( |
|
| 915 | + !$surnoms |
|
| 916 | + or $md5 != lister_tables_objets_sql('::md5') |
|
| 917 | + ) { |
|
| 918 | + // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions |
|
| 919 | + // pour compatibilite, car il faut dorenavent utiliser |
|
| 920 | + // declarer_table_objets_sql |
|
| 921 | + $surnoms = pipeline('declarer_type_surnoms', ['racine-site' => 'site']); |
|
| 922 | + $infos_tables = lister_tables_objets_sql(); |
|
| 923 | + foreach ($infos_tables as $t => $infos) { |
|
| 924 | + if ($infos['type']) { // securite, si la fonction est appelee trop tot, c'est vide |
|
| 925 | + // optimisations pour objet_type |
|
| 926 | + //$surnoms[$infos['type']] = $infos['type']; |
|
| 927 | + $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['table_objet'])] = $infos['type']; |
|
| 928 | + $surnoms[preg_replace(',^spip_|^id_|s$,', '', $infos['type'])] = $infos['type']; |
|
| 929 | + // surnoms declares |
|
| 930 | + if (is_array($infos['type_surnoms']) and count($infos['type_surnoms'])) { |
|
| 931 | + foreach ($infos['type_surnoms'] as $surnom) { |
|
| 932 | + $surnoms[$surnom] = $infos['type']; |
|
| 933 | + } |
|
| 934 | + } |
|
| 935 | + } |
|
| 936 | + } |
|
| 937 | + $md5 = lister_tables_objets_sql('::md5'); |
|
| 938 | + } |
|
| 939 | + |
|
| 940 | + return $surnoms; |
|
| 941 | 941 | } |
| 942 | 942 | |
| 943 | 943 | /** |
@@ -951,22 +951,22 @@ discard block |
||
| 951 | 951 | * Couples (nom de la table SQL => même nom, sans 'spip_' devant) |
| 952 | 952 | **/ |
| 953 | 953 | function lister_tables_spip($serveur = '') { |
| 954 | - static $tables = []; |
|
| 955 | - if (!isset($tables[$serveur])) { |
|
| 956 | - $tables[$serveur] = []; |
|
| 957 | - if (!function_exists('sql_alltable')) { |
|
| 958 | - include_spip('base/abstract_sql'); |
|
| 959 | - } |
|
| 960 | - $ts = sql_alltable(null, $serveur); // toutes les tables "spip_" (ou prefixe perso) |
|
| 961 | - $connexion = $GLOBALS['connexions'][$serveur ?: 0]; |
|
| 962 | - $spip = $connexion['prefixe'] . '_'; |
|
| 963 | - foreach ($ts as $t) { |
|
| 964 | - $t = substr($t, strlen($spip)); |
|
| 965 | - $tables[$serveur]["spip_$t"] = $t; |
|
| 966 | - } |
|
| 967 | - } |
|
| 968 | - |
|
| 969 | - return $tables[$serveur]; |
|
| 954 | + static $tables = []; |
|
| 955 | + if (!isset($tables[$serveur])) { |
|
| 956 | + $tables[$serveur] = []; |
|
| 957 | + if (!function_exists('sql_alltable')) { |
|
| 958 | + include_spip('base/abstract_sql'); |
|
| 959 | + } |
|
| 960 | + $ts = sql_alltable(null, $serveur); // toutes les tables "spip_" (ou prefixe perso) |
|
| 961 | + $connexion = $GLOBALS['connexions'][$serveur ?: 0]; |
|
| 962 | + $spip = $connexion['prefixe'] . '_'; |
|
| 963 | + foreach ($ts as $t) { |
|
| 964 | + $t = substr($t, strlen($spip)); |
|
| 965 | + $tables[$serveur]["spip_$t"] = $t; |
|
| 966 | + } |
|
| 967 | + } |
|
| 968 | + |
|
| 969 | + return $tables[$serveur]; |
|
| 970 | 970 | } |
| 971 | 971 | |
| 972 | 972 | |
@@ -981,18 +981,18 @@ discard block |
||
| 981 | 981 | * Couples (nom de la table SQL => même nom) |
| 982 | 982 | **/ |
| 983 | 983 | function lister_toutes_tables($serveur) { |
| 984 | - static $tables = []; |
|
| 985 | - if (!isset($tables[$serveur])) { |
|
| 986 | - $tables[$serveur] = []; |
|
| 987 | - if (!function_exists('sql_alltable')) { |
|
| 988 | - include_spip('base/abstract_sql'); |
|
| 989 | - } |
|
| 990 | - $ts = sql_alltable('%', $serveur); // toutes les tables |
|
| 991 | - foreach ($ts as $t) { |
|
| 992 | - $tables[$serveur][$t] = $t; |
|
| 993 | - } |
|
| 994 | - } |
|
| 995 | - return $tables[$serveur]; |
|
| 984 | + static $tables = []; |
|
| 985 | + if (!isset($tables[$serveur])) { |
|
| 986 | + $tables[$serveur] = []; |
|
| 987 | + if (!function_exists('sql_alltable')) { |
|
| 988 | + include_spip('base/abstract_sql'); |
|
| 989 | + } |
|
| 990 | + $ts = sql_alltable('%', $serveur); // toutes les tables |
|
| 991 | + foreach ($ts as $t) { |
|
| 992 | + $tables[$serveur][$t] = $t; |
|
| 993 | + } |
|
| 994 | + } |
|
| 995 | + return $tables[$serveur]; |
|
| 996 | 996 | } |
| 997 | 997 | |
| 998 | 998 | /** |
@@ -1013,39 +1013,39 @@ discard block |
||
| 1013 | 1013 | **/ |
| 1014 | 1014 | function table_objet(string $type, string $serveur = ''): string { |
| 1015 | 1015 | |
| 1016 | - if ($type) { |
|
| 1017 | - $type = preg_replace(',^spip_|^id_|s$,', '', $type); |
|
| 1018 | - } |
|
| 1019 | - if (!strlen($type)) { |
|
| 1020 | - return ''; |
|
| 1021 | - } |
|
| 1022 | - |
|
| 1023 | - $surnoms = lister_tables_objets_surnoms(); |
|
| 1024 | - if (isset($surnoms[$type])) { |
|
| 1025 | - return $surnoms[$type]; |
|
| 1026 | - } |
|
| 1027 | - |
|
| 1028 | - if ($serveur !== false) { |
|
| 1029 | - $t = lister_tables_spip($serveur); |
|
| 1030 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1031 | - $typetrim = rtrim($type, 's') . 's'; |
|
| 1032 | - if ( |
|
| 1033 | - (isset($t[$typetrim]) or in_array($typetrim, $t)) |
|
| 1034 | - and ($desc = $trouver_table(rtrim($type, 's') . 's', $serveur)) |
|
| 1035 | - ) { |
|
| 1036 | - return $desc['id_table']; |
|
| 1037 | - } elseif ( |
|
| 1038 | - (isset($t[$type]) or in_array($type, $t)) |
|
| 1039 | - and ($desc = $trouver_table($type, $serveur)) |
|
| 1040 | - ) { |
|
| 1041 | - return $desc['id_table']; |
|
| 1042 | - } |
|
| 1043 | - |
|
| 1044 | - spip_log('table_objet(' . $type . ') calculee sans verification'); |
|
| 1045 | - #spip_log(debug_backtrace(),'db'); |
|
| 1046 | - } |
|
| 1047 | - |
|
| 1048 | - return rtrim($type, 's') . 's'; # cas historique ne devant plus servir, sauf si $serveur=false |
|
| 1016 | + if ($type) { |
|
| 1017 | + $type = preg_replace(',^spip_|^id_|s$,', '', $type); |
|
| 1018 | + } |
|
| 1019 | + if (!strlen($type)) { |
|
| 1020 | + return ''; |
|
| 1021 | + } |
|
| 1022 | + |
|
| 1023 | + $surnoms = lister_tables_objets_surnoms(); |
|
| 1024 | + if (isset($surnoms[$type])) { |
|
| 1025 | + return $surnoms[$type]; |
|
| 1026 | + } |
|
| 1027 | + |
|
| 1028 | + if ($serveur !== false) { |
|
| 1029 | + $t = lister_tables_spip($serveur); |
|
| 1030 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1031 | + $typetrim = rtrim($type, 's') . 's'; |
|
| 1032 | + if ( |
|
| 1033 | + (isset($t[$typetrim]) or in_array($typetrim, $t)) |
|
| 1034 | + and ($desc = $trouver_table(rtrim($type, 's') . 's', $serveur)) |
|
| 1035 | + ) { |
|
| 1036 | + return $desc['id_table']; |
|
| 1037 | + } elseif ( |
|
| 1038 | + (isset($t[$type]) or in_array($type, $t)) |
|
| 1039 | + and ($desc = $trouver_table($type, $serveur)) |
|
| 1040 | + ) { |
|
| 1041 | + return $desc['id_table']; |
|
| 1042 | + } |
|
| 1043 | + |
|
| 1044 | + spip_log('table_objet(' . $type . ') calculee sans verification'); |
|
| 1045 | + #spip_log(debug_backtrace(),'db'); |
|
| 1046 | + } |
|
| 1047 | + |
|
| 1048 | + return rtrim($type, 's') . 's'; # cas historique ne devant plus servir, sauf si $serveur=false |
|
| 1049 | 1049 | } |
| 1050 | 1050 | |
| 1051 | 1051 | /** |
@@ -1066,33 +1066,33 @@ discard block |
||
| 1066 | 1066 | **/ |
| 1067 | 1067 | function table_objet_sql(string $type, string $serveur = ''): string { |
| 1068 | 1068 | |
| 1069 | - $nom = table_objet($type, $serveur); |
|
| 1070 | - if (!strlen($nom)) { |
|
| 1071 | - return ''; |
|
| 1072 | - } |
|
| 1073 | - if (!isset($GLOBALS['table_des_tables']['articles'])) { |
|
| 1074 | - // eviter de multiples inclusions |
|
| 1075 | - include_spip('public/interfaces'); |
|
| 1076 | - } |
|
| 1077 | - if (isset($GLOBALS['table_des_tables'][$nom])) { |
|
| 1078 | - $nom = $GLOBALS['table_des_tables'][$nom]; |
|
| 1079 | - $nom = "spip_$nom"; |
|
| 1080 | - } else { |
|
| 1081 | - $infos_tables = lister_tables_objets_sql(); |
|
| 1082 | - if (isset($infos_tables["spip_$nom"])) { |
|
| 1083 | - $nom = "spip_$nom"; |
|
| 1084 | - } elseif ($serveur !== false) { |
|
| 1085 | - $t = lister_tables_spip($serveur); |
|
| 1086 | - if (isset($t[$nom]) or in_array($nom, $t)) { |
|
| 1087 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1088 | - if ($desc = $trouver_table($nom, $serveur)) { |
|
| 1089 | - return $desc['table_sql']; |
|
| 1090 | - } |
|
| 1091 | - } |
|
| 1092 | - } |
|
| 1093 | - } |
|
| 1094 | - |
|
| 1095 | - return $nom; |
|
| 1069 | + $nom = table_objet($type, $serveur); |
|
| 1070 | + if (!strlen($nom)) { |
|
| 1071 | + return ''; |
|
| 1072 | + } |
|
| 1073 | + if (!isset($GLOBALS['table_des_tables']['articles'])) { |
|
| 1074 | + // eviter de multiples inclusions |
|
| 1075 | + include_spip('public/interfaces'); |
|
| 1076 | + } |
|
| 1077 | + if (isset($GLOBALS['table_des_tables'][$nom])) { |
|
| 1078 | + $nom = $GLOBALS['table_des_tables'][$nom]; |
|
| 1079 | + $nom = "spip_$nom"; |
|
| 1080 | + } else { |
|
| 1081 | + $infos_tables = lister_tables_objets_sql(); |
|
| 1082 | + if (isset($infos_tables["spip_$nom"])) { |
|
| 1083 | + $nom = "spip_$nom"; |
|
| 1084 | + } elseif ($serveur !== false) { |
|
| 1085 | + $t = lister_tables_spip($serveur); |
|
| 1086 | + if (isset($t[$nom]) or in_array($nom, $t)) { |
|
| 1087 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1088 | + if ($desc = $trouver_table($nom, $serveur)) { |
|
| 1089 | + return $desc['table_sql']; |
|
| 1090 | + } |
|
| 1091 | + } |
|
| 1092 | + } |
|
| 1093 | + } |
|
| 1094 | + |
|
| 1095 | + return $nom; |
|
| 1096 | 1096 | } |
| 1097 | 1097 | |
| 1098 | 1098 | /** |
@@ -1111,35 +1111,35 @@ discard block |
||
| 1111 | 1111 | * Nom de la clé primaire |
| 1112 | 1112 | **/ |
| 1113 | 1113 | function id_table_objet($type, $serveur = '') { |
| 1114 | - static $trouver_table = null; |
|
| 1115 | - $type = objet_type($type, $serveur); |
|
| 1116 | - if (!$type) { |
|
| 1117 | - return null; |
|
| 1118 | - } |
|
| 1119 | - $t = table_objet($type); |
|
| 1120 | - if (!$trouver_table) { |
|
| 1121 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1122 | - } |
|
| 1123 | - |
|
| 1124 | - $ts = lister_tables_spip($serveur); |
|
| 1125 | - if ( |
|
| 1126 | - in_array($t, $ts) |
|
| 1127 | - or in_array($t, lister_toutes_tables($serveur)) |
|
| 1128 | - ) { |
|
| 1129 | - $desc = $trouver_table($t, $serveur); |
|
| 1130 | - if (isset($desc['key']['PRIMARY KEY'])) { |
|
| 1131 | - return $desc['key']['PRIMARY KEY']; |
|
| 1132 | - } |
|
| 1133 | - if (!$desc or isset($desc['field']["id_$type"])) { |
|
| 1134 | - return "id_$type"; |
|
| 1135 | - } |
|
| 1136 | - // sinon renvoyer le premier champ de la table... |
|
| 1137 | - $keys = array_keys($desc['field']); |
|
| 1138 | - |
|
| 1139 | - return array_shift($keys); |
|
| 1140 | - } |
|
| 1141 | - |
|
| 1142 | - return "id_$type"; |
|
| 1114 | + static $trouver_table = null; |
|
| 1115 | + $type = objet_type($type, $serveur); |
|
| 1116 | + if (!$type) { |
|
| 1117 | + return null; |
|
| 1118 | + } |
|
| 1119 | + $t = table_objet($type); |
|
| 1120 | + if (!$trouver_table) { |
|
| 1121 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1122 | + } |
|
| 1123 | + |
|
| 1124 | + $ts = lister_tables_spip($serveur); |
|
| 1125 | + if ( |
|
| 1126 | + in_array($t, $ts) |
|
| 1127 | + or in_array($t, lister_toutes_tables($serveur)) |
|
| 1128 | + ) { |
|
| 1129 | + $desc = $trouver_table($t, $serveur); |
|
| 1130 | + if (isset($desc['key']['PRIMARY KEY'])) { |
|
| 1131 | + return $desc['key']['PRIMARY KEY']; |
|
| 1132 | + } |
|
| 1133 | + if (!$desc or isset($desc['field']["id_$type"])) { |
|
| 1134 | + return "id_$type"; |
|
| 1135 | + } |
|
| 1136 | + // sinon renvoyer le premier champ de la table... |
|
| 1137 | + $keys = array_keys($desc['field']); |
|
| 1138 | + |
|
| 1139 | + return array_shift($keys); |
|
| 1140 | + } |
|
| 1141 | + |
|
| 1142 | + return "id_$type"; |
|
| 1143 | 1143 | } |
| 1144 | 1144 | |
| 1145 | 1145 | /** |
@@ -1158,60 +1158,60 @@ discard block |
||
| 1158 | 1158 | * Type de l'objet |
| 1159 | 1159 | **/ |
| 1160 | 1160 | function objet_type(string $table_objet, string $serveur = ''): ?string { |
| 1161 | - if (!$table_objet) { |
|
| 1162 | - return null; |
|
| 1163 | - } |
|
| 1164 | - $surnoms = lister_types_surnoms(); |
|
| 1165 | - |
|
| 1166 | - // scenario de base |
|
| 1167 | - // le type est decline a partir du nom de la table en enlevant le prefixe eventuel |
|
| 1168 | - // et la marque du pluriel |
|
| 1169 | - // on accepte id_xx en entree aussi |
|
| 1170 | - $type = preg_replace(',^spip_|^id_|s$,', '', $table_objet); |
|
| 1171 | - if (isset($surnoms[$type])) { |
|
| 1172 | - return $surnoms[$type]; |
|
| 1173 | - } |
|
| 1174 | - |
|
| 1175 | - // securite : eliminer les caracteres non \w |
|
| 1176 | - $type = preg_replace(',[^\w-],', '', $type); |
|
| 1177 | - |
|
| 1178 | - // si le type redonne bien la table c'est bon |
|
| 1179 | - // oui si table_objet ressemblait deja a un type |
|
| 1180 | - if ( |
|
| 1181 | - $type == $table_objet |
|
| 1182 | - or (table_objet($type, $serveur) == $table_objet) |
|
| 1183 | - or (table_objet_sql($type, $serveur) == $table_objet) |
|
| 1184 | - ) { |
|
| 1185 | - return $type; |
|
| 1186 | - } |
|
| 1187 | - |
|
| 1188 | - // si on ne veut pas chercher en base |
|
| 1189 | - if ($serveur === false) { |
|
| 1190 | - return $type; |
|
| 1191 | - } |
|
| 1192 | - |
|
| 1193 | - // sinon on passe par la cle primaire id_xx pour trouver le type |
|
| 1194 | - // car le s a la fin est incertain |
|
| 1195 | - // notamment en cas de pluriel derogatoire |
|
| 1196 | - // id_jeu/spip_jeux id_journal/spip_journaux qui necessitent tout deux |
|
| 1197 | - // une declaration jeu => jeux, journal => journaux |
|
| 1198 | - // dans le pipeline declarer_tables_objets_surnoms |
|
| 1199 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1200 | - $ts = lister_tables_spip($serveur); |
|
| 1201 | - $desc = false; |
|
| 1202 | - if (in_array($table_objet, $ts)) { |
|
| 1203 | - $desc = $trouver_table($table_objet); |
|
| 1204 | - } |
|
| 1205 | - if (!$desc and in_array($table_objet = table_objet($type, $serveur), $ts)) { |
|
| 1206 | - $desc = $trouver_table($table_objet, $serveur); |
|
| 1207 | - } |
|
| 1208 | - // si le type est declare : bingo ! |
|
| 1209 | - if ($desc and isset($desc['type'])) { |
|
| 1210 | - return $desc['type']; |
|
| 1211 | - } |
|
| 1212 | - |
|
| 1213 | - // on a fait ce qu'on a pu |
|
| 1214 | - return $type; |
|
| 1161 | + if (!$table_objet) { |
|
| 1162 | + return null; |
|
| 1163 | + } |
|
| 1164 | + $surnoms = lister_types_surnoms(); |
|
| 1165 | + |
|
| 1166 | + // scenario de base |
|
| 1167 | + // le type est decline a partir du nom de la table en enlevant le prefixe eventuel |
|
| 1168 | + // et la marque du pluriel |
|
| 1169 | + // on accepte id_xx en entree aussi |
|
| 1170 | + $type = preg_replace(',^spip_|^id_|s$,', '', $table_objet); |
|
| 1171 | + if (isset($surnoms[$type])) { |
|
| 1172 | + return $surnoms[$type]; |
|
| 1173 | + } |
|
| 1174 | + |
|
| 1175 | + // securite : eliminer les caracteres non \w |
|
| 1176 | + $type = preg_replace(',[^\w-],', '', $type); |
|
| 1177 | + |
|
| 1178 | + // si le type redonne bien la table c'est bon |
|
| 1179 | + // oui si table_objet ressemblait deja a un type |
|
| 1180 | + if ( |
|
| 1181 | + $type == $table_objet |
|
| 1182 | + or (table_objet($type, $serveur) == $table_objet) |
|
| 1183 | + or (table_objet_sql($type, $serveur) == $table_objet) |
|
| 1184 | + ) { |
|
| 1185 | + return $type; |
|
| 1186 | + } |
|
| 1187 | + |
|
| 1188 | + // si on ne veut pas chercher en base |
|
| 1189 | + if ($serveur === false) { |
|
| 1190 | + return $type; |
|
| 1191 | + } |
|
| 1192 | + |
|
| 1193 | + // sinon on passe par la cle primaire id_xx pour trouver le type |
|
| 1194 | + // car le s a la fin est incertain |
|
| 1195 | + // notamment en cas de pluriel derogatoire |
|
| 1196 | + // id_jeu/spip_jeux id_journal/spip_journaux qui necessitent tout deux |
|
| 1197 | + // une declaration jeu => jeux, journal => journaux |
|
| 1198 | + // dans le pipeline declarer_tables_objets_surnoms |
|
| 1199 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1200 | + $ts = lister_tables_spip($serveur); |
|
| 1201 | + $desc = false; |
|
| 1202 | + if (in_array($table_objet, $ts)) { |
|
| 1203 | + $desc = $trouver_table($table_objet); |
|
| 1204 | + } |
|
| 1205 | + if (!$desc and in_array($table_objet = table_objet($type, $serveur), $ts)) { |
|
| 1206 | + $desc = $trouver_table($table_objet, $serveur); |
|
| 1207 | + } |
|
| 1208 | + // si le type est declare : bingo ! |
|
| 1209 | + if ($desc and isset($desc['type'])) { |
|
| 1210 | + return $desc['type']; |
|
| 1211 | + } |
|
| 1212 | + |
|
| 1213 | + // on a fait ce qu'on a pu |
|
| 1214 | + return $type; |
|
| 1215 | 1215 | } |
| 1216 | 1216 | |
| 1217 | 1217 | /** |
@@ -1227,62 +1227,62 @@ discard block |
||
| 1227 | 1227 | * @return bool |
| 1228 | 1228 | */ |
| 1229 | 1229 | function objet_test_si_publie($objet, $id_objet, $serveur = '') { |
| 1230 | - // voir si une fonction est definie pour faire le boulot |
|
| 1231 | - // elle a la priorite dans ce cas |
|
| 1232 | - if ($f = charger_fonction($objet . '_test_si_publie', 'base', true)) { |
|
| 1233 | - return $f($objet, $id_objet, $serveur); |
|
| 1234 | - } |
|
| 1235 | - |
|
| 1236 | - // sinon on se fie a la declaration de l'objet si presente |
|
| 1237 | - $id_table = $table_objet = table_objet($objet); |
|
| 1238 | - $id_table_objet = id_table_objet($objet, $serveur); |
|
| 1239 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1240 | - if ( |
|
| 1241 | - $desc = $trouver_table($table_objet, $serveur) |
|
| 1242 | - and isset($desc['statut']) |
|
| 1243 | - and $desc['statut'] |
|
| 1244 | - ) { |
|
| 1245 | - $boucle = new Boucle(); |
|
| 1246 | - $boucle->show = $desc; |
|
| 1247 | - $boucle->nom = 'objet_test_si_publie'; |
|
| 1248 | - $boucle->id_boucle = $id_table; |
|
| 1249 | - $boucle->id_table = $id_table; |
|
| 1250 | - $boucle->primary = $desc['key']['PRIMARY KEY'] ?? ''; |
|
| 1251 | - $boucle->sql_serveur = $serveur; |
|
| 1252 | - $boucle->select[] = $id_table_objet; |
|
| 1253 | - $boucle->from[$table_objet] = table_objet_sql($objet, $serveur); |
|
| 1254 | - $boucle->where[] = $id_table . '.' . $id_table_objet . '=' . intval($id_objet); |
|
| 1255 | - |
|
| 1256 | - $boucle->descr['nom'] = 'objet_test_si_publie'; // eviter notice php |
|
| 1257 | - $boucle->descr['sourcefile'] = 'internal'; |
|
| 1258 | - $boucle->descr['gram'] = 'html'; |
|
| 1259 | - |
|
| 1260 | - include_spip('public/compiler'); |
|
| 1261 | - include_spip('public/composer'); |
|
| 1262 | - instituer_boucle($boucle, false, true); |
|
| 1263 | - $res = calculer_select( |
|
| 1264 | - $boucle->select, |
|
| 1265 | - $boucle->from, |
|
| 1266 | - $boucle->from_type, |
|
| 1267 | - $boucle->where, |
|
| 1268 | - $boucle->join, |
|
| 1269 | - $boucle->group, |
|
| 1270 | - $boucle->order, |
|
| 1271 | - $boucle->limit, |
|
| 1272 | - $boucle->having, |
|
| 1273 | - $table_objet, |
|
| 1274 | - $id_table, |
|
| 1275 | - $serveur |
|
| 1276 | - ); |
|
| 1277 | - if (sql_fetch($res)) { |
|
| 1278 | - return true; |
|
| 1279 | - } |
|
| 1280 | - |
|
| 1281 | - return false; |
|
| 1282 | - } |
|
| 1283 | - |
|
| 1284 | - // si pas d'info statut ni de fonction : l'objet est publie |
|
| 1285 | - return true; |
|
| 1230 | + // voir si une fonction est definie pour faire le boulot |
|
| 1231 | + // elle a la priorite dans ce cas |
|
| 1232 | + if ($f = charger_fonction($objet . '_test_si_publie', 'base', true)) { |
|
| 1233 | + return $f($objet, $id_objet, $serveur); |
|
| 1234 | + } |
|
| 1235 | + |
|
| 1236 | + // sinon on se fie a la declaration de l'objet si presente |
|
| 1237 | + $id_table = $table_objet = table_objet($objet); |
|
| 1238 | + $id_table_objet = id_table_objet($objet, $serveur); |
|
| 1239 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1240 | + if ( |
|
| 1241 | + $desc = $trouver_table($table_objet, $serveur) |
|
| 1242 | + and isset($desc['statut']) |
|
| 1243 | + and $desc['statut'] |
|
| 1244 | + ) { |
|
| 1245 | + $boucle = new Boucle(); |
|
| 1246 | + $boucle->show = $desc; |
|
| 1247 | + $boucle->nom = 'objet_test_si_publie'; |
|
| 1248 | + $boucle->id_boucle = $id_table; |
|
| 1249 | + $boucle->id_table = $id_table; |
|
| 1250 | + $boucle->primary = $desc['key']['PRIMARY KEY'] ?? ''; |
|
| 1251 | + $boucle->sql_serveur = $serveur; |
|
| 1252 | + $boucle->select[] = $id_table_objet; |
|
| 1253 | + $boucle->from[$table_objet] = table_objet_sql($objet, $serveur); |
|
| 1254 | + $boucle->where[] = $id_table . '.' . $id_table_objet . '=' . intval($id_objet); |
|
| 1255 | + |
|
| 1256 | + $boucle->descr['nom'] = 'objet_test_si_publie'; // eviter notice php |
|
| 1257 | + $boucle->descr['sourcefile'] = 'internal'; |
|
| 1258 | + $boucle->descr['gram'] = 'html'; |
|
| 1259 | + |
|
| 1260 | + include_spip('public/compiler'); |
|
| 1261 | + include_spip('public/composer'); |
|
| 1262 | + instituer_boucle($boucle, false, true); |
|
| 1263 | + $res = calculer_select( |
|
| 1264 | + $boucle->select, |
|
| 1265 | + $boucle->from, |
|
| 1266 | + $boucle->from_type, |
|
| 1267 | + $boucle->where, |
|
| 1268 | + $boucle->join, |
|
| 1269 | + $boucle->group, |
|
| 1270 | + $boucle->order, |
|
| 1271 | + $boucle->limit, |
|
| 1272 | + $boucle->having, |
|
| 1273 | + $table_objet, |
|
| 1274 | + $id_table, |
|
| 1275 | + $serveur |
|
| 1276 | + ); |
|
| 1277 | + if (sql_fetch($res)) { |
|
| 1278 | + return true; |
|
| 1279 | + } |
|
| 1280 | + |
|
| 1281 | + return false; |
|
| 1282 | + } |
|
| 1283 | + |
|
| 1284 | + // si pas d'info statut ni de fonction : l'objet est publie |
|
| 1285 | + return true; |
|
| 1286 | 1286 | } |
| 1287 | 1287 | |
| 1288 | 1288 | |
@@ -1317,124 +1317,124 @@ discard block |
||
| 1317 | 1317 | * Retourne un tableau décrivant les parents trouvés |
| 1318 | 1318 | */ |
| 1319 | 1319 | function objet_lister_parents($objet, $id_objet, $parent_direct_seulement = false) { |
| 1320 | - $parents = []; |
|
| 1321 | - |
|
| 1322 | - // Si on trouve une ou des méthodes de parent |
|
| 1323 | - if ($parent_methodes = objet_type_decrire_infos_parents($objet)) { |
|
| 1324 | - // On identifie les informations sur l'objet source dont on cherche le parent. |
|
| 1325 | - include_spip('base/abstract_sql'); |
|
| 1326 | - $table_objet = table_objet_sql($objet); |
|
| 1327 | - $cle_objet = id_table_objet($objet); |
|
| 1328 | - $id_objet = intval($id_objet); |
|
| 1329 | - |
|
| 1330 | - // On teste chacun méthode dans l'ordre, et dès qu'on a trouvé un parent on s'arrête |
|
| 1331 | - foreach ($parent_methodes as $parent_methode) { |
|
| 1332 | - // Champ identifiant le parent (id et éventuellement le type) |
|
| 1333 | - // -- cette identification ne dépend pas du fait que le parent soit stocké dans une table de différente |
|
| 1334 | - // de celle de l'objet source |
|
| 1335 | - $select = []; |
|
| 1336 | - if (isset($parent_methode['champ'])) { |
|
| 1337 | - $select[] = $parent_methode['champ']; |
|
| 1338 | - } |
|
| 1339 | - if (isset($parent_methode['champ_type'])) { |
|
| 1340 | - $select[] = $parent_methode['champ_type']; |
|
| 1341 | - } |
|
| 1342 | - |
|
| 1343 | - // Détermination de la table du parent et des conditions sur l'objet source et le parent. |
|
| 1344 | - $condition_objet_invalide = false; |
|
| 1345 | - $where = []; |
|
| 1346 | - if (!isset($parent_methode['table'])) { |
|
| 1347 | - // Le parent est stocké dans la même table que l'objet source : |
|
| 1348 | - // -- toutes les conditions s'appliquent à la table source. |
|
| 1349 | - $table = $table_objet; |
|
| 1350 | - $where = ["$cle_objet = $id_objet"]; |
|
| 1351 | - // -- Condition supplémentaire sur la détection du parent |
|
| 1352 | - if (isset($parent_methode['condition'])) { |
|
| 1353 | - $where[] = $parent_methode['condition']; |
|
| 1354 | - } |
|
| 1355 | - } elseif (!$parent_direct_seulement) { |
|
| 1356 | - // Le parent est stocké dans une table différente de l'objet source. |
|
| 1357 | - // -- on vérifie d'emblée si il y a une condition sur l'objet source et si celle-ci est vérifiée |
|
| 1358 | - // Si non, on peut arrêter le traitement. |
|
| 1359 | - if (isset($parent_methode['condition'])) { |
|
| 1360 | - $where = [ |
|
| 1361 | - "$cle_objet = $id_objet", |
|
| 1362 | - $parent_methode['condition'] |
|
| 1363 | - ]; |
|
| 1364 | - if (!sql_countsel($table_objet, $where)) { |
|
| 1365 | - $condition_objet_invalide = true; |
|
| 1366 | - } |
|
| 1367 | - } |
|
| 1368 | - |
|
| 1369 | - // Si pas de condition sur l'objet source ou que la condition est vérifiée, on peut construire |
|
| 1370 | - // la requête sur la table qui accueille le parent. |
|
| 1371 | - if (!$condition_objet_invalide) { |
|
| 1372 | - $table = $parent_methode['table']; |
|
| 1373 | - // On construit les conditions en fonction de l'identification de l'objet source |
|
| 1374 | - $where = []; |
|
| 1375 | - // -- si le champ_source de l'id n'est pas précisé c'est qu'il est déjà connu et donc que c'est |
|
| 1376 | - // le même que celui de l'objet source. |
|
| 1377 | - $where[] = isset($parent_methode['source_champ']) |
|
| 1378 | - ? "{$parent_methode['source_champ']} = $id_objet" |
|
| 1379 | - : "${cle_objet} = $id_objet"; |
|
| 1380 | - if (isset($parent_methode['source_champ_type'])) { |
|
| 1381 | - $where[] = "{$parent_methode['source_champ_type']} = " . sql_quote($objet); |
|
| 1382 | - } |
|
| 1383 | - // -- Condition supplémentaire sur la détection du parent |
|
| 1384 | - if (isset($parent_methode['table_condition'])) { |
|
| 1385 | - $where[] = $parent_methode['table_condition']; |
|
| 1386 | - } |
|
| 1387 | - } |
|
| 1388 | - } |
|
| 1389 | - |
|
| 1390 | - // On lance la requête de récupération du parent |
|
| 1391 | - $is_table_lien = (strpos($table, '_liens') !== false and substr($table, -6) === '_liens'); |
|
| 1392 | - if ( |
|
| 1393 | - !$condition_objet_invalide |
|
| 1394 | - and $where |
|
| 1395 | - and ($lignes = sql_allfetsel($is_table_lien ? '*' : $select, $table, $where)) |
|
| 1396 | - ) { |
|
| 1397 | - foreach ($lignes as $ligne) { |
|
| 1398 | - // Si le type est fixe |
|
| 1399 | - if (isset($parent_methode['type'])) { |
|
| 1400 | - $parent = [ |
|
| 1401 | - 'objet' => $parent_methode['type'], |
|
| 1402 | - 'id_objet' => intval($ligne[$parent_methode['champ']]), |
|
| 1403 | - 'champ' => $parent_methode['champ'], |
|
| 1404 | - 'table' => $table, |
|
| 1405 | - ]; |
|
| 1406 | - } |
|
| 1407 | - elseif (isset($parent_methode['champ_type'])) { |
|
| 1408 | - $parent = [ |
|
| 1409 | - 'objet' => $ligne[$parent_methode['champ_type']], |
|
| 1410 | - 'id_objet' => intval($ligne[$parent_methode['champ']]), |
|
| 1411 | - 'champ' => $parent_methode['champ'], |
|
| 1412 | - 'champ_type' => $parent_methode['champ_type'], |
|
| 1413 | - 'table' => $table, |
|
| 1414 | - ]; |
|
| 1415 | - } |
|
| 1416 | - if ($is_table_lien) { |
|
| 1417 | - $parent['lien'] = $ligne; |
|
| 1418 | - } |
|
| 1419 | - $parents[] = $parent; |
|
| 1420 | - } |
|
| 1421 | - } |
|
| 1422 | - } |
|
| 1423 | - } |
|
| 1424 | - |
|
| 1425 | - // On passe par un pipeline avant de retourner |
|
| 1426 | - $parents = pipeline( |
|
| 1427 | - 'objet_lister_parents', |
|
| 1428 | - [ |
|
| 1429 | - 'args' => [ |
|
| 1430 | - 'objet' => $objet, |
|
| 1431 | - 'id_objet' => $id_objet, |
|
| 1432 | - ], |
|
| 1433 | - 'data' => $parents, |
|
| 1434 | - ] |
|
| 1435 | - ); |
|
| 1436 | - |
|
| 1437 | - return $parents; |
|
| 1320 | + $parents = []; |
|
| 1321 | + |
|
| 1322 | + // Si on trouve une ou des méthodes de parent |
|
| 1323 | + if ($parent_methodes = objet_type_decrire_infos_parents($objet)) { |
|
| 1324 | + // On identifie les informations sur l'objet source dont on cherche le parent. |
|
| 1325 | + include_spip('base/abstract_sql'); |
|
| 1326 | + $table_objet = table_objet_sql($objet); |
|
| 1327 | + $cle_objet = id_table_objet($objet); |
|
| 1328 | + $id_objet = intval($id_objet); |
|
| 1329 | + |
|
| 1330 | + // On teste chacun méthode dans l'ordre, et dès qu'on a trouvé un parent on s'arrête |
|
| 1331 | + foreach ($parent_methodes as $parent_methode) { |
|
| 1332 | + // Champ identifiant le parent (id et éventuellement le type) |
|
| 1333 | + // -- cette identification ne dépend pas du fait que le parent soit stocké dans une table de différente |
|
| 1334 | + // de celle de l'objet source |
|
| 1335 | + $select = []; |
|
| 1336 | + if (isset($parent_methode['champ'])) { |
|
| 1337 | + $select[] = $parent_methode['champ']; |
|
| 1338 | + } |
|
| 1339 | + if (isset($parent_methode['champ_type'])) { |
|
| 1340 | + $select[] = $parent_methode['champ_type']; |
|
| 1341 | + } |
|
| 1342 | + |
|
| 1343 | + // Détermination de la table du parent et des conditions sur l'objet source et le parent. |
|
| 1344 | + $condition_objet_invalide = false; |
|
| 1345 | + $where = []; |
|
| 1346 | + if (!isset($parent_methode['table'])) { |
|
| 1347 | + // Le parent est stocké dans la même table que l'objet source : |
|
| 1348 | + // -- toutes les conditions s'appliquent à la table source. |
|
| 1349 | + $table = $table_objet; |
|
| 1350 | + $where = ["$cle_objet = $id_objet"]; |
|
| 1351 | + // -- Condition supplémentaire sur la détection du parent |
|
| 1352 | + if (isset($parent_methode['condition'])) { |
|
| 1353 | + $where[] = $parent_methode['condition']; |
|
| 1354 | + } |
|
| 1355 | + } elseif (!$parent_direct_seulement) { |
|
| 1356 | + // Le parent est stocké dans une table différente de l'objet source. |
|
| 1357 | + // -- on vérifie d'emblée si il y a une condition sur l'objet source et si celle-ci est vérifiée |
|
| 1358 | + // Si non, on peut arrêter le traitement. |
|
| 1359 | + if (isset($parent_methode['condition'])) { |
|
| 1360 | + $where = [ |
|
| 1361 | + "$cle_objet = $id_objet", |
|
| 1362 | + $parent_methode['condition'] |
|
| 1363 | + ]; |
|
| 1364 | + if (!sql_countsel($table_objet, $where)) { |
|
| 1365 | + $condition_objet_invalide = true; |
|
| 1366 | + } |
|
| 1367 | + } |
|
| 1368 | + |
|
| 1369 | + // Si pas de condition sur l'objet source ou que la condition est vérifiée, on peut construire |
|
| 1370 | + // la requête sur la table qui accueille le parent. |
|
| 1371 | + if (!$condition_objet_invalide) { |
|
| 1372 | + $table = $parent_methode['table']; |
|
| 1373 | + // On construit les conditions en fonction de l'identification de l'objet source |
|
| 1374 | + $where = []; |
|
| 1375 | + // -- si le champ_source de l'id n'est pas précisé c'est qu'il est déjà connu et donc que c'est |
|
| 1376 | + // le même que celui de l'objet source. |
|
| 1377 | + $where[] = isset($parent_methode['source_champ']) |
|
| 1378 | + ? "{$parent_methode['source_champ']} = $id_objet" |
|
| 1379 | + : "${cle_objet} = $id_objet"; |
|
| 1380 | + if (isset($parent_methode['source_champ_type'])) { |
|
| 1381 | + $where[] = "{$parent_methode['source_champ_type']} = " . sql_quote($objet); |
|
| 1382 | + } |
|
| 1383 | + // -- Condition supplémentaire sur la détection du parent |
|
| 1384 | + if (isset($parent_methode['table_condition'])) { |
|
| 1385 | + $where[] = $parent_methode['table_condition']; |
|
| 1386 | + } |
|
| 1387 | + } |
|
| 1388 | + } |
|
| 1389 | + |
|
| 1390 | + // On lance la requête de récupération du parent |
|
| 1391 | + $is_table_lien = (strpos($table, '_liens') !== false and substr($table, -6) === '_liens'); |
|
| 1392 | + if ( |
|
| 1393 | + !$condition_objet_invalide |
|
| 1394 | + and $where |
|
| 1395 | + and ($lignes = sql_allfetsel($is_table_lien ? '*' : $select, $table, $where)) |
|
| 1396 | + ) { |
|
| 1397 | + foreach ($lignes as $ligne) { |
|
| 1398 | + // Si le type est fixe |
|
| 1399 | + if (isset($parent_methode['type'])) { |
|
| 1400 | + $parent = [ |
|
| 1401 | + 'objet' => $parent_methode['type'], |
|
| 1402 | + 'id_objet' => intval($ligne[$parent_methode['champ']]), |
|
| 1403 | + 'champ' => $parent_methode['champ'], |
|
| 1404 | + 'table' => $table, |
|
| 1405 | + ]; |
|
| 1406 | + } |
|
| 1407 | + elseif (isset($parent_methode['champ_type'])) { |
|
| 1408 | + $parent = [ |
|
| 1409 | + 'objet' => $ligne[$parent_methode['champ_type']], |
|
| 1410 | + 'id_objet' => intval($ligne[$parent_methode['champ']]), |
|
| 1411 | + 'champ' => $parent_methode['champ'], |
|
| 1412 | + 'champ_type' => $parent_methode['champ_type'], |
|
| 1413 | + 'table' => $table, |
|
| 1414 | + ]; |
|
| 1415 | + } |
|
| 1416 | + if ($is_table_lien) { |
|
| 1417 | + $parent['lien'] = $ligne; |
|
| 1418 | + } |
|
| 1419 | + $parents[] = $parent; |
|
| 1420 | + } |
|
| 1421 | + } |
|
| 1422 | + } |
|
| 1423 | + } |
|
| 1424 | + |
|
| 1425 | + // On passe par un pipeline avant de retourner |
|
| 1426 | + $parents = pipeline( |
|
| 1427 | + 'objet_lister_parents', |
|
| 1428 | + [ |
|
| 1429 | + 'args' => [ |
|
| 1430 | + 'objet' => $objet, |
|
| 1431 | + 'id_objet' => $id_objet, |
|
| 1432 | + ], |
|
| 1433 | + 'data' => $parents, |
|
| 1434 | + ] |
|
| 1435 | + ); |
|
| 1436 | + |
|
| 1437 | + return $parents; |
|
| 1438 | 1438 | } |
| 1439 | 1439 | |
| 1440 | 1440 | /** |
@@ -1446,17 +1446,17 @@ discard block |
||
| 1446 | 1446 | * @return array |
| 1447 | 1447 | */ |
| 1448 | 1448 | function objet_lister_parents_par_type($objet, $id_objet) { |
| 1449 | - $parents = objet_lister_parents($objet, $id_objet); |
|
| 1449 | + $parents = objet_lister_parents($objet, $id_objet); |
|
| 1450 | 1450 | |
| 1451 | - $parents_par_type = []; |
|
| 1452 | - foreach ($parents as $parent) { |
|
| 1453 | - if (!isset($parents_par_type[$parent['objet']])) { |
|
| 1454 | - $parents_par_type[$parent['objet']] = []; |
|
| 1455 | - } |
|
| 1456 | - $parents_par_type[$parent['objet']][] = $parent['id_objet']; |
|
| 1457 | - } |
|
| 1451 | + $parents_par_type = []; |
|
| 1452 | + foreach ($parents as $parent) { |
|
| 1453 | + if (!isset($parents_par_type[$parent['objet']])) { |
|
| 1454 | + $parents_par_type[$parent['objet']] = []; |
|
| 1455 | + } |
|
| 1456 | + $parents_par_type[$parent['objet']][] = $parent['id_objet']; |
|
| 1457 | + } |
|
| 1458 | 1458 | |
| 1459 | - return $parents_par_type; |
|
| 1459 | + return $parents_par_type; |
|
| 1460 | 1460 | } |
| 1461 | 1461 | |
| 1462 | 1462 | |
@@ -1489,85 +1489,85 @@ discard block |
||
| 1489 | 1489 | * Retourne un tableau de tableaux, avec comme clés les types des objets, et dans chacun un tableau des identifiants trouvés |
| 1490 | 1490 | */ |
| 1491 | 1491 | function objet_lister_enfants($objet, $id_objet) { |
| 1492 | - $enfants = []; |
|
| 1493 | - |
|
| 1494 | - // Si on trouve des types d'enfants et leurs méthodes |
|
| 1495 | - if ($enfants_methodes = objet_type_decrire_infos_enfants($objet)) { |
|
| 1496 | - include_spip('base/abstract_sql'); |
|
| 1497 | - $id_objet = intval($id_objet); |
|
| 1498 | - |
|
| 1499 | - // On parcourt tous les types d'enfants trouvés |
|
| 1500 | - foreach ($enfants_methodes as $objet_enfant => $_methode_parent) { |
|
| 1501 | - // On construit les conditions d'identification du parent |
|
| 1502 | - $where = []; |
|
| 1503 | - // -- L'identifiant du parent |
|
| 1504 | - if (isset($_methode_parent['champ'])) { |
|
| 1505 | - $where[] = $_methode_parent['champ'] . ' = ' . $id_objet; |
|
| 1506 | - } |
|
| 1507 | - // -- Si le parent est variable |
|
| 1508 | - if (isset($_methode_parent['champ_type'])) { |
|
| 1509 | - $where[] = $_methode_parent['champ_type'] . ' = ' . sql_quote($objet); |
|
| 1510 | - } |
|
| 1511 | - |
|
| 1512 | - // On détermine la table, le champ id des enfants et on complète éventuellement les conditions |
|
| 1513 | - if (!isset($_methode_parent['table'])) { |
|
| 1514 | - // Les enfants sont stockés dans la même table que l'objet parent : |
|
| 1515 | - $table_enfant = table_objet_sql($objet_enfant); |
|
| 1516 | - $cle_objet_enfant = id_table_objet($objet_enfant); |
|
| 1517 | - |
|
| 1518 | - // S'il y a une condition supplémentaire |
|
| 1519 | - if (isset($_methode_parent['condition'])) { |
|
| 1520 | - $where[] = $_methode_parent['condition']; |
|
| 1521 | - } |
|
| 1522 | - } else { |
|
| 1523 | - // Les enfants sont stockés dans une table différente de l'objet parent. |
|
| 1524 | - $table_enfant = $_methode_parent['table']; |
|
| 1525 | - $cle_objet_enfant = $_methode_parent['source_champ'] ?? id_table_objet($objet_enfant); |
|
| 1526 | - |
|
| 1527 | - // S'il y a une condition supplémentaire |
|
| 1528 | - if (isset($_methode_parent['table_condition'])) { |
|
| 1529 | - $where[] = $_methode_parent['table_condition']; |
|
| 1530 | - } |
|
| 1531 | - } |
|
| 1532 | - |
|
| 1533 | - // On lance la requête |
|
| 1534 | - $is_table_lien = (strpos($table_enfant, '_liens') !== false and substr($table_enfant, -6) === '_liens'); |
|
| 1535 | - if ($rows = sql_allfetsel($is_table_lien ? '*' : $cle_objet_enfant, $table_enfant, $where)) { |
|
| 1536 | - $enfant = [ |
|
| 1537 | - 'objet' => $objet_enfant, |
|
| 1538 | - 'id_objet' => 0, |
|
| 1539 | - 'table' => $table_enfant |
|
| 1540 | - ]; |
|
| 1541 | - if (isset($_methode_parent['champ'])) { |
|
| 1542 | - $enfant['champ'] = $_methode_parent['champ']; |
|
| 1543 | - } |
|
| 1544 | - if (isset($_methode_parent['champ_type'])) { |
|
| 1545 | - $enfant['champ_type'] = $_methode_parent['champ_type']; |
|
| 1546 | - } |
|
| 1547 | - foreach ($rows as $row) { |
|
| 1548 | - $enfant['id_objet'] = intval($row[$cle_objet_enfant]); |
|
| 1549 | - if ($is_table_lien) { |
|
| 1550 | - $enfant['lien'] = $row; |
|
| 1551 | - } |
|
| 1552 | - $enfants[] = $enfant; |
|
| 1553 | - } |
|
| 1554 | - } |
|
| 1555 | - } |
|
| 1556 | - } |
|
| 1557 | - |
|
| 1558 | - // On passe par un pipeline avant de retourner |
|
| 1559 | - $enfants = pipeline( |
|
| 1560 | - 'objet_lister_enfants', |
|
| 1561 | - [ |
|
| 1562 | - 'args' => [ |
|
| 1563 | - 'objet' => $objet, |
|
| 1564 | - 'id_objet' => $id_objet, |
|
| 1565 | - ], |
|
| 1566 | - 'data' => $enfants, |
|
| 1567 | - ] |
|
| 1568 | - ); |
|
| 1569 | - |
|
| 1570 | - return $enfants; |
|
| 1492 | + $enfants = []; |
|
| 1493 | + |
|
| 1494 | + // Si on trouve des types d'enfants et leurs méthodes |
|
| 1495 | + if ($enfants_methodes = objet_type_decrire_infos_enfants($objet)) { |
|
| 1496 | + include_spip('base/abstract_sql'); |
|
| 1497 | + $id_objet = intval($id_objet); |
|
| 1498 | + |
|
| 1499 | + // On parcourt tous les types d'enfants trouvés |
|
| 1500 | + foreach ($enfants_methodes as $objet_enfant => $_methode_parent) { |
|
| 1501 | + // On construit les conditions d'identification du parent |
|
| 1502 | + $where = []; |
|
| 1503 | + // -- L'identifiant du parent |
|
| 1504 | + if (isset($_methode_parent['champ'])) { |
|
| 1505 | + $where[] = $_methode_parent['champ'] . ' = ' . $id_objet; |
|
| 1506 | + } |
|
| 1507 | + // -- Si le parent est variable |
|
| 1508 | + if (isset($_methode_parent['champ_type'])) { |
|
| 1509 | + $where[] = $_methode_parent['champ_type'] . ' = ' . sql_quote($objet); |
|
| 1510 | + } |
|
| 1511 | + |
|
| 1512 | + // On détermine la table, le champ id des enfants et on complète éventuellement les conditions |
|
| 1513 | + if (!isset($_methode_parent['table'])) { |
|
| 1514 | + // Les enfants sont stockés dans la même table que l'objet parent : |
|
| 1515 | + $table_enfant = table_objet_sql($objet_enfant); |
|
| 1516 | + $cle_objet_enfant = id_table_objet($objet_enfant); |
|
| 1517 | + |
|
| 1518 | + // S'il y a une condition supplémentaire |
|
| 1519 | + if (isset($_methode_parent['condition'])) { |
|
| 1520 | + $where[] = $_methode_parent['condition']; |
|
| 1521 | + } |
|
| 1522 | + } else { |
|
| 1523 | + // Les enfants sont stockés dans une table différente de l'objet parent. |
|
| 1524 | + $table_enfant = $_methode_parent['table']; |
|
| 1525 | + $cle_objet_enfant = $_methode_parent['source_champ'] ?? id_table_objet($objet_enfant); |
|
| 1526 | + |
|
| 1527 | + // S'il y a une condition supplémentaire |
|
| 1528 | + if (isset($_methode_parent['table_condition'])) { |
|
| 1529 | + $where[] = $_methode_parent['table_condition']; |
|
| 1530 | + } |
|
| 1531 | + } |
|
| 1532 | + |
|
| 1533 | + // On lance la requête |
|
| 1534 | + $is_table_lien = (strpos($table_enfant, '_liens') !== false and substr($table_enfant, -6) === '_liens'); |
|
| 1535 | + if ($rows = sql_allfetsel($is_table_lien ? '*' : $cle_objet_enfant, $table_enfant, $where)) { |
|
| 1536 | + $enfant = [ |
|
| 1537 | + 'objet' => $objet_enfant, |
|
| 1538 | + 'id_objet' => 0, |
|
| 1539 | + 'table' => $table_enfant |
|
| 1540 | + ]; |
|
| 1541 | + if (isset($_methode_parent['champ'])) { |
|
| 1542 | + $enfant['champ'] = $_methode_parent['champ']; |
|
| 1543 | + } |
|
| 1544 | + if (isset($_methode_parent['champ_type'])) { |
|
| 1545 | + $enfant['champ_type'] = $_methode_parent['champ_type']; |
|
| 1546 | + } |
|
| 1547 | + foreach ($rows as $row) { |
|
| 1548 | + $enfant['id_objet'] = intval($row[$cle_objet_enfant]); |
|
| 1549 | + if ($is_table_lien) { |
|
| 1550 | + $enfant['lien'] = $row; |
|
| 1551 | + } |
|
| 1552 | + $enfants[] = $enfant; |
|
| 1553 | + } |
|
| 1554 | + } |
|
| 1555 | + } |
|
| 1556 | + } |
|
| 1557 | + |
|
| 1558 | + // On passe par un pipeline avant de retourner |
|
| 1559 | + $enfants = pipeline( |
|
| 1560 | + 'objet_lister_enfants', |
|
| 1561 | + [ |
|
| 1562 | + 'args' => [ |
|
| 1563 | + 'objet' => $objet, |
|
| 1564 | + 'id_objet' => $id_objet, |
|
| 1565 | + ], |
|
| 1566 | + 'data' => $enfants, |
|
| 1567 | + ] |
|
| 1568 | + ); |
|
| 1569 | + |
|
| 1570 | + return $enfants; |
|
| 1571 | 1571 | } |
| 1572 | 1572 | |
| 1573 | 1573 | /** |
@@ -1579,17 +1579,17 @@ discard block |
||
| 1579 | 1579 | * @return array |
| 1580 | 1580 | */ |
| 1581 | 1581 | function objet_lister_enfants_par_type($objet, $id_objet) { |
| 1582 | - $enfants = objet_lister_enfants($objet, $id_objet); |
|
| 1582 | + $enfants = objet_lister_enfants($objet, $id_objet); |
|
| 1583 | 1583 | |
| 1584 | - $enfants_par_type = []; |
|
| 1585 | - foreach ($enfants as $enfant) { |
|
| 1586 | - if (!isset($enfants_par_type[$enfant['objet']])) { |
|
| 1587 | - $enfants_par_type[$enfant['objet']] = []; |
|
| 1588 | - } |
|
| 1589 | - $enfants_par_type[$enfant['objet']][] = $enfant['id_objet']; |
|
| 1590 | - } |
|
| 1584 | + $enfants_par_type = []; |
|
| 1585 | + foreach ($enfants as $enfant) { |
|
| 1586 | + if (!isset($enfants_par_type[$enfant['objet']])) { |
|
| 1587 | + $enfants_par_type[$enfant['objet']] = []; |
|
| 1588 | + } |
|
| 1589 | + $enfants_par_type[$enfant['objet']][] = $enfant['id_objet']; |
|
| 1590 | + } |
|
| 1591 | 1591 | |
| 1592 | - return $enfants_par_type; |
|
| 1592 | + return $enfants_par_type; |
|
| 1593 | 1593 | } |
| 1594 | 1594 | |
| 1595 | 1595 | /** |
@@ -1601,35 +1601,35 @@ discard block |
||
| 1601 | 1601 | * Retourne un tableau de tableau contenant les informations de type et de champ pour trouver le parent ou false sinon |
| 1602 | 1602 | */ |
| 1603 | 1603 | function objet_type_decrire_infos_parents($objet) { |
| 1604 | - static $parents = []; |
|
| 1605 | - |
|
| 1606 | - // Si on ne l'a pas encore cherché pour cet objet |
|
| 1607 | - if (!isset($parents[$objet])) { |
|
| 1608 | - $parents[$objet] = false; |
|
| 1609 | - $table = table_objet_sql($objet); |
|
| 1610 | - |
|
| 1611 | - // Si on trouve bien la description de cet objet |
|
| 1612 | - if ($infos = lister_tables_objets_sql($table)) { |
|
| 1613 | - if (isset($infos['parent']) and is_array($infos['parent'])) { |
|
| 1614 | - // S'il y a une description explicite de parent, c'est prioritaire |
|
| 1615 | - // -- on traite les cas où il y a une ou plusieurs description mais on renvoie toujours un tableau |
|
| 1616 | - // de description |
|
| 1617 | - if (!isset($infos['parent'][0])) { |
|
| 1618 | - $parents[$objet] = [$infos['parent']]; |
|
| 1619 | - } else { |
|
| 1620 | - $parents[$objet] = $infos['parent']; |
|
| 1621 | - } |
|
| 1622 | - } elseif (isset($infos['field']['id_rubrique'])) { |
|
| 1623 | - // Sinon on cherche des cas courants connus magiquement, à commencer par id_rubrique |
|
| 1624 | - $parents[$objet] = [['type' => 'rubrique', 'champ' => 'id_rubrique']]; |
|
| 1625 | - } elseif (isset($infos['field']['id_parent'])) { |
|
| 1626 | - // Sinon on cherche un champ id_parent, ce qui signifie que l'objet est parent de lui-même |
|
| 1627 | - $parents[$objet] = [['type' => $objet, 'champ' => 'id_parent']]; |
|
| 1628 | - } |
|
| 1629 | - } |
|
| 1630 | - } |
|
| 1631 | - |
|
| 1632 | - return $parents[$objet]; |
|
| 1604 | + static $parents = []; |
|
| 1605 | + |
|
| 1606 | + // Si on ne l'a pas encore cherché pour cet objet |
|
| 1607 | + if (!isset($parents[$objet])) { |
|
| 1608 | + $parents[$objet] = false; |
|
| 1609 | + $table = table_objet_sql($objet); |
|
| 1610 | + |
|
| 1611 | + // Si on trouve bien la description de cet objet |
|
| 1612 | + if ($infos = lister_tables_objets_sql($table)) { |
|
| 1613 | + if (isset($infos['parent']) and is_array($infos['parent'])) { |
|
| 1614 | + // S'il y a une description explicite de parent, c'est prioritaire |
|
| 1615 | + // -- on traite les cas où il y a une ou plusieurs description mais on renvoie toujours un tableau |
|
| 1616 | + // de description |
|
| 1617 | + if (!isset($infos['parent'][0])) { |
|
| 1618 | + $parents[$objet] = [$infos['parent']]; |
|
| 1619 | + } else { |
|
| 1620 | + $parents[$objet] = $infos['parent']; |
|
| 1621 | + } |
|
| 1622 | + } elseif (isset($infos['field']['id_rubrique'])) { |
|
| 1623 | + // Sinon on cherche des cas courants connus magiquement, à commencer par id_rubrique |
|
| 1624 | + $parents[$objet] = [['type' => 'rubrique', 'champ' => 'id_rubrique']]; |
|
| 1625 | + } elseif (isset($infos['field']['id_parent'])) { |
|
| 1626 | + // Sinon on cherche un champ id_parent, ce qui signifie que l'objet est parent de lui-même |
|
| 1627 | + $parents[$objet] = [['type' => $objet, 'champ' => 'id_parent']]; |
|
| 1628 | + } |
|
| 1629 | + } |
|
| 1630 | + } |
|
| 1631 | + |
|
| 1632 | + return $parents[$objet]; |
|
| 1633 | 1633 | } |
| 1634 | 1634 | |
| 1635 | 1635 | /** |
@@ -1641,36 +1641,36 @@ discard block |
||
| 1641 | 1641 | * Retourne un tableau de tableaux contenant chacun les informations d'un type d'enfant |
| 1642 | 1642 | */ |
| 1643 | 1643 | function objet_type_decrire_infos_enfants($objet) { |
| 1644 | - static $enfants = []; |
|
| 1645 | - |
|
| 1646 | - // Si on a déjà fait la recherche pour ce type d'objet |
|
| 1647 | - if (!isset($enfants[$objet])) { |
|
| 1648 | - $enfants[$objet] = []; |
|
| 1649 | - $tables = lister_tables_objets_sql(); |
|
| 1650 | - |
|
| 1651 | - // On parcourt toutes les tables d'objet, et on cherche si chacune peut être enfant |
|
| 1652 | - foreach ($tables as $table => $infos) { |
|
| 1653 | - $objet_enfant = objet_type($table); |
|
| 1654 | - |
|
| 1655 | - // On ne va pas refaire les tests des différents cas, on réutilise |
|
| 1656 | - if ($parent_methodes = objet_type_decrire_infos_parents($objet_enfant)) { |
|
| 1657 | - // On parcourt les différents cas possible, si certains peuvent concerner l'objet demandé |
|
| 1658 | - foreach ($parent_methodes as $parent_methode) { |
|
| 1659 | - // Si la méthode qu'on teste n'exclut pas le parent demandé |
|
| 1660 | - if (!isset($parent_methode['exclus']) or !in_array($objet, $parent_methode['exclus'])) { |
|
| 1661 | - // Si le type du parent est fixe et directement l'objet demandé |
|
| 1662 | - if (isset($parent_methode['type']) and isset($parent_methode['champ']) and $parent_methode['type'] == $objet) { |
|
| 1663 | - $enfants[$objet][$objet_enfant] = $parent_methode; |
|
| 1664 | - } |
|
| 1665 | - // Si le type est variable, alors l'objet demandé peut forcément être parent |
|
| 1666 | - elseif (isset($parent_methode['champ_type']) and isset($parent_methode['champ'])) { |
|
| 1667 | - $enfants[$objet][$objet_enfant] = $parent_methode; |
|
| 1668 | - } |
|
| 1669 | - } |
|
| 1670 | - } |
|
| 1671 | - } |
|
| 1672 | - } |
|
| 1673 | - } |
|
| 1674 | - |
|
| 1675 | - return $enfants[$objet]; |
|
| 1644 | + static $enfants = []; |
|
| 1645 | + |
|
| 1646 | + // Si on a déjà fait la recherche pour ce type d'objet |
|
| 1647 | + if (!isset($enfants[$objet])) { |
|
| 1648 | + $enfants[$objet] = []; |
|
| 1649 | + $tables = lister_tables_objets_sql(); |
|
| 1650 | + |
|
| 1651 | + // On parcourt toutes les tables d'objet, et on cherche si chacune peut être enfant |
|
| 1652 | + foreach ($tables as $table => $infos) { |
|
| 1653 | + $objet_enfant = objet_type($table); |
|
| 1654 | + |
|
| 1655 | + // On ne va pas refaire les tests des différents cas, on réutilise |
|
| 1656 | + if ($parent_methodes = objet_type_decrire_infos_parents($objet_enfant)) { |
|
| 1657 | + // On parcourt les différents cas possible, si certains peuvent concerner l'objet demandé |
|
| 1658 | + foreach ($parent_methodes as $parent_methode) { |
|
| 1659 | + // Si la méthode qu'on teste n'exclut pas le parent demandé |
|
| 1660 | + if (!isset($parent_methode['exclus']) or !in_array($objet, $parent_methode['exclus'])) { |
|
| 1661 | + // Si le type du parent est fixe et directement l'objet demandé |
|
| 1662 | + if (isset($parent_methode['type']) and isset($parent_methode['champ']) and $parent_methode['type'] == $objet) { |
|
| 1663 | + $enfants[$objet][$objet_enfant] = $parent_methode; |
|
| 1664 | + } |
|
| 1665 | + // Si le type est variable, alors l'objet demandé peut forcément être parent |
|
| 1666 | + elseif (isset($parent_methode['champ_type']) and isset($parent_methode['champ'])) { |
|
| 1667 | + $enfants[$objet][$objet_enfant] = $parent_methode; |
|
| 1668 | + } |
|
| 1669 | + } |
|
| 1670 | + } |
|
| 1671 | + } |
|
| 1672 | + } |
|
| 1673 | + } |
|
| 1674 | + |
|
| 1675 | + return $enfants[$objet]; |
|
| 1676 | 1676 | } |