@@ -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,170 +34,170 @@ 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 | - $hash = null; |
|
| 76 | - switch (strlen($row['pass'])) { |
|
| 77 | - // legacy = md5 ou sha256 |
|
| 78 | - case 32: |
|
| 79 | - // tres anciens mots de passe encodes en md5(alea.pass) |
|
| 80 | - $hash = md5($row['alea_actuel'] . $pass); |
|
| 81 | - $methode = 'md5'; |
|
| 82 | - case 64: |
|
| 83 | - if (empty($hash)) { |
|
| 84 | - // anciens mots de passe encodes en sha256(alea.pass) |
|
| 85 | - include_spip('auth/sha256.inc'); |
|
| 86 | - $hash = spip_sha256($row['alea_actuel'] . $pass); |
|
| 87 | - $methode = 'sha256'; |
|
| 88 | - } |
|
| 89 | - if ($row['pass'] === $hash) { |
|
| 90 | - spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via $methode", 'auth' . _LOG_DEBUG); |
|
| 91 | - // ce n'est pas cense arriver, mais si jamais c'est un backup inutilisable, il faut le nettoyer pour ne pas bloquer la creation d'une nouvelle cle d'auth |
|
| 92 | - if (!empty($row['backup_cles'])) { |
|
| 93 | - sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 94 | - } |
|
| 95 | - break; |
|
| 96 | - } |
|
| 97 | - |
|
| 98 | - // on teste la methode par defaut, au cas ou ce serait un pass moderne qui a la malchance d'etre en 64char de long |
|
| 99 | - |
|
| 100 | - case 60: |
|
| 101 | - case 98: |
|
| 102 | - default: |
|
| 103 | - // doit-on restaurer un backup des cles ? |
|
| 104 | - // si on a le bon pass on peut decoder le backup, retrouver la cle, et du coup valider le pass |
|
| 105 | - if ( |
|
| 106 | - !$secret |
|
| 107 | - and $auteur_peut_sauver_cles |
|
| 108 | - and !empty($row['backup_cles']) |
|
| 109 | - ) { |
|
| 110 | - if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) { |
|
| 111 | - spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 112 | - if ($cles->save()) { |
|
| 113 | - $secret = $cles->getSecretAuth(); |
|
| 114 | - } |
|
| 115 | - else { |
|
| 116 | - spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR); |
|
| 117 | - // et on echoue car on ne veut pas que la situation reste telle quelle |
|
| 118 | - raler_fichier(_DIR_ETC . 'cles.php'); |
|
| 119 | - } |
|
| 120 | - } |
|
| 121 | - else { |
|
| 122 | - 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); |
|
| 123 | - sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 124 | - } |
|
| 125 | - } |
|
| 126 | - |
|
| 127 | - if (!$secret or !Password::verifier($pass, $row['pass'], $secret)) { |
|
| 128 | - unset($row); |
|
| 129 | - } |
|
| 130 | - else { |
|
| 131 | - spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG); |
|
| 132 | - } |
|
| 133 | - break; |
|
| 134 | - } |
|
| 135 | - |
|
| 136 | - // Migration depuis ancienne version : si on a pas encore de cle |
|
| 137 | - // ET si c'est le login d'un auteur qui peut sauver la cle |
|
| 138 | - // créer la clé (en s'assurant bien que personne n'a de backup d'un precedent fichier cle.php) |
|
| 139 | - // 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 |
|
| 140 | - if (!$secret and $auteur_peut_sauver_cles) { |
|
| 141 | - if (auth_spip_initialiser_secret()) { |
|
| 142 | - $secret = $cles->getSecretAuth(); |
|
| 143 | - } |
|
| 144 | - } |
|
| 145 | - |
|
| 146 | - // login/mot de passe incorrect |
|
| 147 | - if (empty($row)) { |
|
| 148 | - return []; |
|
| 149 | - } |
|
| 150 | - |
|
| 151 | - // fait tourner le codage du pass dans la base |
|
| 152 | - // sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action() |
|
| 153 | - if (!$phpauth and $secret) { |
|
| 154 | - include_spip('inc/acces'); // pour creer_uniqid et verifier_htaccess |
|
| 155 | - $pass_hash_next = Password::hacher($pass, $secret); |
|
| 156 | - if ($pass_hash_next) { |
|
| 157 | - $set = [ |
|
| 158 | - 'alea_actuel' => 'alea_futur', // @deprecated 4.1 |
|
| 159 | - 'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text'), // @deprecated 4.1 |
|
| 160 | - 'pass' => sql_quote($pass_hash_next, $serveur, 'text'), |
|
| 161 | - ]; |
|
| 162 | - |
|
| 163 | - // regenerer un htpass si on a active/desactive le plugin htpasswd |
|
| 164 | - // et/ou que l'algo a change - pour etre certain de toujours utiliser le bon algo |
|
| 165 | - $htpass = generer_htpass($pass); |
|
| 166 | - if (strlen($htpass) !== strlen($row['htpass'])) { |
|
| 167 | - $set['htpass'] = sql_quote($htpass, $serveur, 'text'); |
|
| 168 | - } |
|
| 169 | - |
|
| 170 | - // a chaque login de webmestre : sauvegarde chiffree des clés du site (avec les pass du webmestre) |
|
| 171 | - if ($auteur_peut_sauver_cles) { |
|
| 172 | - $set['backup_cles'] = sql_quote($cles->backup($pass), $serveur, 'text'); |
|
| 173 | - } |
|
| 174 | - |
|
| 175 | - @sql_update( |
|
| 176 | - 'spip_auteurs', |
|
| 177 | - $set, |
|
| 178 | - 'id_auteur=' . intval($row['id_auteur']) . ' AND pass=' . sql_quote( |
|
| 179 | - $row['pass'], |
|
| 180 | - $serveur, |
|
| 181 | - 'text' |
|
| 182 | - ), |
|
| 183 | - [], |
|
| 184 | - $serveur |
|
| 185 | - ); |
|
| 186 | - |
|
| 187 | - // si on a change le htpass car changement d'algo, regenerer les fichiers htpasswd |
|
| 188 | - if (isset($set['htpass'])) { |
|
| 189 | - ecrire_acces(); |
|
| 190 | - } |
|
| 191 | - } |
|
| 192 | - |
|
| 193 | - // En profiter pour verifier la securite de tmp/ |
|
| 194 | - // Si elle ne fonctionne pas a l'installation, prevenir |
|
| 195 | - if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) { |
|
| 196 | - return false; |
|
| 197 | - } |
|
| 198 | - } |
|
| 199 | - |
|
| 200 | - 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 | + $hash = null; |
|
| 76 | + switch (strlen($row['pass'])) { |
|
| 77 | + // legacy = md5 ou sha256 |
|
| 78 | + case 32: |
|
| 79 | + // tres anciens mots de passe encodes en md5(alea.pass) |
|
| 80 | + $hash = md5($row['alea_actuel'] . $pass); |
|
| 81 | + $methode = 'md5'; |
|
| 82 | + case 64: |
|
| 83 | + if (empty($hash)) { |
|
| 84 | + // anciens mots de passe encodes en sha256(alea.pass) |
|
| 85 | + include_spip('auth/sha256.inc'); |
|
| 86 | + $hash = spip_sha256($row['alea_actuel'] . $pass); |
|
| 87 | + $methode = 'sha256'; |
|
| 88 | + } |
|
| 89 | + if ($row['pass'] === $hash) { |
|
| 90 | + spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via $methode", 'auth' . _LOG_DEBUG); |
|
| 91 | + // ce n'est pas cense arriver, mais si jamais c'est un backup inutilisable, il faut le nettoyer pour ne pas bloquer la creation d'une nouvelle cle d'auth |
|
| 92 | + if (!empty($row['backup_cles'])) { |
|
| 93 | + sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 94 | + } |
|
| 95 | + break; |
|
| 96 | + } |
|
| 97 | + |
|
| 98 | + // on teste la methode par defaut, au cas ou ce serait un pass moderne qui a la malchance d'etre en 64char de long |
|
| 99 | + |
|
| 100 | + case 60: |
|
| 101 | + case 98: |
|
| 102 | + default: |
|
| 103 | + // doit-on restaurer un backup des cles ? |
|
| 104 | + // si on a le bon pass on peut decoder le backup, retrouver la cle, et du coup valider le pass |
|
| 105 | + if ( |
|
| 106 | + !$secret |
|
| 107 | + and $auteur_peut_sauver_cles |
|
| 108 | + and !empty($row['backup_cles']) |
|
| 109 | + ) { |
|
| 110 | + if ($cles->restore($row['backup_cles'], $pass, $row['pass'], $row['id_auteur'])) { |
|
| 111 | + spip_log('Les cles secretes ont ete restaurées avec le backup du webmestre #' . $row['id_auteur'], 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 112 | + if ($cles->save()) { |
|
| 113 | + $secret = $cles->getSecretAuth(); |
|
| 114 | + } |
|
| 115 | + else { |
|
| 116 | + spip_log("Echec restauration des cles : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR); |
|
| 117 | + // et on echoue car on ne veut pas que la situation reste telle quelle |
|
| 118 | + raler_fichier(_DIR_ETC . 'cles.php'); |
|
| 119 | + } |
|
| 120 | + } |
|
| 121 | + else { |
|
| 122 | + 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); |
|
| 123 | + sql_updateq('spip_auteurs', ['backup_cles' => ''], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 124 | + } |
|
| 125 | + } |
|
| 126 | + |
|
| 127 | + if (!$secret or !Password::verifier($pass, $row['pass'], $secret)) { |
|
| 128 | + unset($row); |
|
| 129 | + } |
|
| 130 | + else { |
|
| 131 | + spip_log("validation du mot de passe pour l'auteur #" . $row['id_auteur'] . " $login via Password::verifier", 'auth' . _LOG_DEBUG); |
|
| 132 | + } |
|
| 133 | + break; |
|
| 134 | + } |
|
| 135 | + |
|
| 136 | + // Migration depuis ancienne version : si on a pas encore de cle |
|
| 137 | + // ET si c'est le login d'un auteur qui peut sauver la cle |
|
| 138 | + // créer la clé (en s'assurant bien que personne n'a de backup d'un precedent fichier cle.php) |
|
| 139 | + // 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 |
|
| 140 | + if (!$secret and $auteur_peut_sauver_cles) { |
|
| 141 | + if (auth_spip_initialiser_secret()) { |
|
| 142 | + $secret = $cles->getSecretAuth(); |
|
| 143 | + } |
|
| 144 | + } |
|
| 145 | + |
|
| 146 | + // login/mot de passe incorrect |
|
| 147 | + if (empty($row)) { |
|
| 148 | + return []; |
|
| 149 | + } |
|
| 150 | + |
|
| 151 | + // fait tourner le codage du pass dans la base |
|
| 152 | + // sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action() |
|
| 153 | + if (!$phpauth and $secret) { |
|
| 154 | + include_spip('inc/acces'); // pour creer_uniqid et verifier_htaccess |
|
| 155 | + $pass_hash_next = Password::hacher($pass, $secret); |
|
| 156 | + if ($pass_hash_next) { |
|
| 157 | + $set = [ |
|
| 158 | + 'alea_actuel' => 'alea_futur', // @deprecated 4.1 |
|
| 159 | + 'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text'), // @deprecated 4.1 |
|
| 160 | + 'pass' => sql_quote($pass_hash_next, $serveur, 'text'), |
|
| 161 | + ]; |
|
| 162 | + |
|
| 163 | + // regenerer un htpass si on a active/desactive le plugin htpasswd |
|
| 164 | + // et/ou que l'algo a change - pour etre certain de toujours utiliser le bon algo |
|
| 165 | + $htpass = generer_htpass($pass); |
|
| 166 | + if (strlen($htpass) !== strlen($row['htpass'])) { |
|
| 167 | + $set['htpass'] = sql_quote($htpass, $serveur, 'text'); |
|
| 168 | + } |
|
| 169 | + |
|
| 170 | + // a chaque login de webmestre : sauvegarde chiffree des clés du site (avec les pass du webmestre) |
|
| 171 | + if ($auteur_peut_sauver_cles) { |
|
| 172 | + $set['backup_cles'] = sql_quote($cles->backup($pass), $serveur, 'text'); |
|
| 173 | + } |
|
| 174 | + |
|
| 175 | + @sql_update( |
|
| 176 | + 'spip_auteurs', |
|
| 177 | + $set, |
|
| 178 | + 'id_auteur=' . intval($row['id_auteur']) . ' AND pass=' . sql_quote( |
|
| 179 | + $row['pass'], |
|
| 180 | + $serveur, |
|
| 181 | + 'text' |
|
| 182 | + ), |
|
| 183 | + [], |
|
| 184 | + $serveur |
|
| 185 | + ); |
|
| 186 | + |
|
| 187 | + // si on a change le htpass car changement d'algo, regenerer les fichiers htpasswd |
|
| 188 | + if (isset($set['htpass'])) { |
|
| 189 | + ecrire_acces(); |
|
| 190 | + } |
|
| 191 | + } |
|
| 192 | + |
|
| 193 | + // En profiter pour verifier la securite de tmp/ |
|
| 194 | + // Si elle ne fonctionne pas a l'installation, prevenir |
|
| 195 | + if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) { |
|
| 196 | + return false; |
|
| 197 | + } |
|
| 198 | + } |
|
| 199 | + |
|
| 200 | + return $row; |
|
| 201 | 201 | } |
| 202 | 202 | |
| 203 | 203 | /** |
@@ -212,37 +212,37 @@ discard block |
||
| 212 | 212 | * @return bool |
| 213 | 213 | */ |
| 214 | 214 | function auth_spip_initialiser_secret(bool $force = false): bool { |
| 215 | - include_spip('inc/chiffrer'); |
|
| 216 | - $cles = SpipCles::instance(); |
|
| 217 | - $secret = $cles->getSecretAuth(); |
|
| 218 | - |
|
| 219 | - // on ne fait rien si on a un secret dispo |
|
| 220 | - if ($secret) { |
|
| 221 | - return false; |
|
| 222 | - } |
|
| 223 | - |
|
| 224 | - // si force, on ne verifie pas la presence d'un backup chez un webmestre |
|
| 225 | - if ($force) { |
|
| 226 | - spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 227 | - $secret = $cles->getSecretAuth(true); |
|
| 228 | - return true; |
|
| 229 | - } |
|
| 230 | - |
|
| 231 | - $has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''"); |
|
| 232 | - $has_backup = array_column($has_backup, 'id_auteur'); |
|
| 233 | - if (empty($has_backup)) { |
|
| 234 | - 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); |
|
| 235 | - if ($secret = $cles->getSecretAuth(true)) { |
|
| 236 | - return true; |
|
| 237 | - } |
|
| 238 | - spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR); |
|
| 239 | - // et on echoue car on ne veut pas que la situation reste telle quelle |
|
| 240 | - raler_fichier(_DIR_ETC . 'cles.php'); |
|
| 241 | - } |
|
| 242 | - else { |
|
| 243 | - 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); |
|
| 244 | - } |
|
| 245 | - return false; |
|
| 215 | + include_spip('inc/chiffrer'); |
|
| 216 | + $cles = SpipCles::instance(); |
|
| 217 | + $secret = $cles->getSecretAuth(); |
|
| 218 | + |
|
| 219 | + // on ne fait rien si on a un secret dispo |
|
| 220 | + if ($secret) { |
|
| 221 | + return false; |
|
| 222 | + } |
|
| 223 | + |
|
| 224 | + // si force, on ne verifie pas la presence d'un backup chez un webmestre |
|
| 225 | + if ($force) { |
|
| 226 | + spip_log('Pas de cle secrete disponible, on regenere une nouvelle cle forcee - tous les mots de passe sont invalides', 'auth' . _LOG_INFO_IMPORTANTE); |
|
| 227 | + $secret = $cles->getSecretAuth(true); |
|
| 228 | + return true; |
|
| 229 | + } |
|
| 230 | + |
|
| 231 | + $has_backup = sql_allfetsel('id_auteur', 'spip_auteurs', 'statut=' . sql_quote('0minirezo') . ' AND webmestre=' . sql_quote('oui') . " AND backup_cles!=''"); |
|
| 232 | + $has_backup = array_column($has_backup, 'id_auteur'); |
|
| 233 | + if (empty($has_backup)) { |
|
| 234 | + 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); |
|
| 235 | + if ($secret = $cles->getSecretAuth(true)) { |
|
| 236 | + return true; |
|
| 237 | + } |
|
| 238 | + spip_log("Echec generation d'une nouvelle cle : verifier les droits d'ecriture ?", 'auth' . _LOG_ERREUR); |
|
| 239 | + // et on echoue car on ne veut pas que la situation reste telle quelle |
|
| 240 | + raler_fichier(_DIR_ETC . 'cles.php'); |
|
| 241 | + } |
|
| 242 | + else { |
|
| 243 | + 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); |
|
| 244 | + } |
|
| 245 | + return false; |
|
| 246 | 246 | } |
| 247 | 247 | |
| 248 | 248 | /** |
@@ -252,19 +252,19 @@ discard block |
||
| 252 | 252 | * @return array |
| 253 | 253 | */ |
| 254 | 254 | function auth_spip_formulaire_login($flux) { |
| 255 | - // javascript qui gere la securite du login en evitant de faire circuler le pass en clair |
|
| 256 | - $js = file_get_contents(find_in_path('prive/javascript/login.js')); |
|
| 257 | - $flux['data'] .= |
|
| 258 | - '<script type="text/javascript">/*<![CDATA[*/' |
|
| 259 | - . "$js\n" |
|
| 260 | - . "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "'," |
|
| 261 | - . "'page_auteur': '" . generer_url_public('informer_auteur') . "'," |
|
| 262 | - . "'informe_auteur_en_cours':false," |
|
| 263 | - . "'attente_informe':0};" |
|
| 264 | - . "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});" |
|
| 265 | - . '/*]]>*/</script>'; |
|
| 266 | - |
|
| 267 | - return $flux; |
|
| 255 | + // javascript qui gere la securite du login en evitant de faire circuler le pass en clair |
|
| 256 | + $js = file_get_contents(find_in_path('prive/javascript/login.js')); |
|
| 257 | + $flux['data'] .= |
|
| 258 | + '<script type="text/javascript">/*<![CDATA[*/' |
|
| 259 | + . "$js\n" |
|
| 260 | + . "var login_info={'login':'" . $flux['args']['contexte']['var_login'] . "'," |
|
| 261 | + . "'page_auteur': '" . generer_url_public('informer_auteur') . "'," |
|
| 262 | + . "'informe_auteur_en_cours':false," |
|
| 263 | + . "'attente_informe':0};" |
|
| 264 | + . "jQuery(function(){jQuery('#var_login').change(actualise_auteur);});" |
|
| 265 | + . '/*]]>*/</script>'; |
|
| 266 | + |
|
| 267 | + return $flux; |
|
| 268 | 268 | } |
| 269 | 269 | |
| 270 | 270 | |
@@ -276,11 +276,11 @@ discard block |
||
| 276 | 276 | * toujours true pour un auteur cree dans SPIP |
| 277 | 277 | */ |
| 278 | 278 | function auth_spip_autoriser_modifier_login(string $serveur = ''): bool { |
| 279 | - // les fonctions d'ecriture sur base distante sont encore incompletes |
|
| 280 | - if (strlen($serveur)) { |
|
| 281 | - return false; |
|
| 282 | - } |
|
| 283 | - return true; |
|
| 279 | + // les fonctions d'ecriture sur base distante sont encore incompletes |
|
| 280 | + if (strlen($serveur)) { |
|
| 281 | + return false; |
|
| 282 | + } |
|
| 283 | + return true; |
|
| 284 | 284 | } |
| 285 | 285 | |
| 286 | 286 | /** |
@@ -294,25 +294,25 @@ discard block |
||
| 294 | 294 | * message d'erreur si login non valide, chaine vide sinon |
| 295 | 295 | */ |
| 296 | 296 | function auth_spip_verifier_login($new_login, $id_auteur = 0, $serveur = '') { |
| 297 | - // login et mot de passe |
|
| 298 | - if (strlen($new_login)) { |
|
| 299 | - if (strlen($new_login) < _LOGIN_TROP_COURT) { |
|
| 300 | - return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]); |
|
| 301 | - } else { |
|
| 302 | - $n = sql_countsel( |
|
| 303 | - 'spip_auteurs', |
|
| 304 | - 'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'", |
|
| 305 | - '', |
|
| 306 | - '', |
|
| 307 | - $serveur |
|
| 308 | - ); |
|
| 309 | - if ($n) { |
|
| 310 | - return _T('info_login_existant'); |
|
| 311 | - } |
|
| 312 | - } |
|
| 313 | - } |
|
| 314 | - |
|
| 315 | - return ''; |
|
| 297 | + // login et mot de passe |
|
| 298 | + if (strlen($new_login)) { |
|
| 299 | + if (strlen($new_login) < _LOGIN_TROP_COURT) { |
|
| 300 | + return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]); |
|
| 301 | + } else { |
|
| 302 | + $n = sql_countsel( |
|
| 303 | + 'spip_auteurs', |
|
| 304 | + 'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'", |
|
| 305 | + '', |
|
| 306 | + '', |
|
| 307 | + $serveur |
|
| 308 | + ); |
|
| 309 | + if ($n) { |
|
| 310 | + return _T('info_login_existant'); |
|
| 311 | + } |
|
| 312 | + } |
|
| 313 | + } |
|
| 314 | + |
|
| 315 | + return ''; |
|
| 316 | 316 | } |
| 317 | 317 | |
| 318 | 318 | /** |
@@ -324,41 +324,41 @@ discard block |
||
| 324 | 324 | * @return bool |
| 325 | 325 | */ |
| 326 | 326 | function auth_spip_modifier_login($new_login, $id_auteur, $serveur = '') { |
| 327 | - if (is_null($new_login) or auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') { |
|
| 328 | - return false; |
|
| 329 | - } |
|
| 330 | - if ( |
|
| 331 | - !$id_auteur = intval($id_auteur) |
|
| 332 | - or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 333 | - ) { |
|
| 334 | - return false; |
|
| 335 | - } |
|
| 336 | - if ($new_login == $auteur['login']) { |
|
| 337 | - return true; |
|
| 338 | - } // on a rien fait mais c'est bon ! |
|
| 339 | - |
|
| 340 | - include_spip('action/editer_auteur'); |
|
| 341 | - |
|
| 342 | - // vider le login des auteurs a la poubelle qui avaient ce meme login |
|
| 343 | - if (strlen($new_login)) { |
|
| 344 | - $anciens = sql_allfetsel( |
|
| 345 | - 'id_auteur', |
|
| 346 | - 'spip_auteurs', |
|
| 347 | - 'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'", |
|
| 348 | - '', |
|
| 349 | - '', |
|
| 350 | - '', |
|
| 351 | - '', |
|
| 352 | - $serveur |
|
| 353 | - ); |
|
| 354 | - while ($row = array_pop($anciens)) { |
|
| 355 | - auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur |
|
| 356 | - } |
|
| 357 | - } |
|
| 358 | - |
|
| 359 | - auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur |
|
| 360 | - |
|
| 361 | - return true; |
|
| 327 | + if (is_null($new_login) or auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') { |
|
| 328 | + return false; |
|
| 329 | + } |
|
| 330 | + if ( |
|
| 331 | + !$id_auteur = intval($id_auteur) |
|
| 332 | + or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 333 | + ) { |
|
| 334 | + return false; |
|
| 335 | + } |
|
| 336 | + if ($new_login == $auteur['login']) { |
|
| 337 | + return true; |
|
| 338 | + } // on a rien fait mais c'est bon ! |
|
| 339 | + |
|
| 340 | + include_spip('action/editer_auteur'); |
|
| 341 | + |
|
| 342 | + // vider le login des auteurs a la poubelle qui avaient ce meme login |
|
| 343 | + if (strlen($new_login)) { |
|
| 344 | + $anciens = sql_allfetsel( |
|
| 345 | + 'id_auteur', |
|
| 346 | + 'spip_auteurs', |
|
| 347 | + 'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'", |
|
| 348 | + '', |
|
| 349 | + '', |
|
| 350 | + '', |
|
| 351 | + '', |
|
| 352 | + $serveur |
|
| 353 | + ); |
|
| 354 | + while ($row = array_pop($anciens)) { |
|
| 355 | + auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur |
|
| 356 | + } |
|
| 357 | + } |
|
| 358 | + |
|
| 359 | + auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur |
|
| 360 | + |
|
| 361 | + return true; |
|
| 362 | 362 | } |
| 363 | 363 | |
| 364 | 364 | /** |
@@ -370,44 +370,44 @@ discard block |
||
| 370 | 370 | * @return string |
| 371 | 371 | */ |
| 372 | 372 | function auth_spip_retrouver_login($login, $serveur = '') { |
| 373 | - if (!strlen($login)) { |
|
| 374 | - return null; |
|
| 375 | - } // pas la peine de requeter |
|
| 376 | - $l = sql_quote($login, $serveur, 'text'); |
|
| 377 | - if ( |
|
| 378 | - $r = sql_getfetsel( |
|
| 379 | - 'login', |
|
| 380 | - 'spip_auteurs', |
|
| 381 | - "statut<>'5poubelle'" . |
|
| 382 | - ' AND (length(pass)>0)' . |
|
| 383 | - " AND (login=$l)", |
|
| 384 | - '', |
|
| 385 | - '', |
|
| 386 | - '', |
|
| 387 | - '', |
|
| 388 | - $serveur |
|
| 389 | - ) |
|
| 390 | - ) { |
|
| 391 | - return $r; |
|
| 392 | - } |
|
| 393 | - // Si pas d'auteur avec ce login |
|
| 394 | - // regarder s'il a saisi son nom ou son mail. |
|
| 395 | - // Ne pas fusionner avec la requete precedente |
|
| 396 | - // car un nom peut etre homonyme d'un autre login |
|
| 397 | - else { |
|
| 398 | - return sql_getfetsel( |
|
| 399 | - 'login', |
|
| 400 | - 'spip_auteurs', |
|
| 401 | - "statut<>'5poubelle'" . |
|
| 402 | - ' AND (length(pass)>0)' . |
|
| 403 | - " AND (login<>'' AND (nom=$l OR email=$l))", |
|
| 404 | - '', |
|
| 405 | - '', |
|
| 406 | - '', |
|
| 407 | - '', |
|
| 408 | - $serveur |
|
| 409 | - ); |
|
| 410 | - } |
|
| 373 | + if (!strlen($login)) { |
|
| 374 | + return null; |
|
| 375 | + } // pas la peine de requeter |
|
| 376 | + $l = sql_quote($login, $serveur, 'text'); |
|
| 377 | + if ( |
|
| 378 | + $r = sql_getfetsel( |
|
| 379 | + 'login', |
|
| 380 | + 'spip_auteurs', |
|
| 381 | + "statut<>'5poubelle'" . |
|
| 382 | + ' AND (length(pass)>0)' . |
|
| 383 | + " AND (login=$l)", |
|
| 384 | + '', |
|
| 385 | + '', |
|
| 386 | + '', |
|
| 387 | + '', |
|
| 388 | + $serveur |
|
| 389 | + ) |
|
| 390 | + ) { |
|
| 391 | + return $r; |
|
| 392 | + } |
|
| 393 | + // Si pas d'auteur avec ce login |
|
| 394 | + // regarder s'il a saisi son nom ou son mail. |
|
| 395 | + // Ne pas fusionner avec la requete precedente |
|
| 396 | + // car un nom peut etre homonyme d'un autre login |
|
| 397 | + else { |
|
| 398 | + return sql_getfetsel( |
|
| 399 | + 'login', |
|
| 400 | + 'spip_auteurs', |
|
| 401 | + "statut<>'5poubelle'" . |
|
| 402 | + ' AND (length(pass)>0)' . |
|
| 403 | + " AND (login<>'' AND (nom=$l OR email=$l))", |
|
| 404 | + '', |
|
| 405 | + '', |
|
| 406 | + '', |
|
| 407 | + '', |
|
| 408 | + $serveur |
|
| 409 | + ); |
|
| 410 | + } |
|
| 411 | 411 | } |
| 412 | 412 | |
| 413 | 413 | /** |
@@ -418,11 +418,11 @@ discard block |
||
| 418 | 418 | * toujours true pour un auteur cree dans SPIP |
| 419 | 419 | */ |
| 420 | 420 | function auth_spip_autoriser_modifier_pass(string $serveur = ''): bool { |
| 421 | - // les fonctions d'ecriture sur base distante sont encore incompletes |
|
| 422 | - if (strlen($serveur)) { |
|
| 423 | - return false; |
|
| 424 | - } |
|
| 425 | - return true; |
|
| 421 | + // les fonctions d'ecriture sur base distante sont encore incompletes |
|
| 422 | + if (strlen($serveur)) { |
|
| 423 | + return false; |
|
| 424 | + } |
|
| 425 | + return true; |
|
| 426 | 426 | } |
| 427 | 427 | |
| 428 | 428 | |
@@ -443,12 +443,12 @@ discard block |
||
| 443 | 443 | * message d'erreur si login non valide, chaine vide sinon |
| 444 | 444 | */ |
| 445 | 445 | function auth_spip_verifier_pass($login, $new_pass, $id_auteur = 0, $serveur = '') { |
| 446 | - // login et mot de passe |
|
| 447 | - if (strlen($new_pass) < _PASS_LONGUEUR_MINI) { |
|
| 448 | - return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]); |
|
| 449 | - } |
|
| 446 | + // login et mot de passe |
|
| 447 | + if (strlen($new_pass) < _PASS_LONGUEUR_MINI) { |
|
| 448 | + return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]); |
|
| 449 | + } |
|
| 450 | 450 | |
| 451 | - return ''; |
|
| 451 | + return ''; |
|
| 452 | 452 | } |
| 453 | 453 | |
| 454 | 454 | /** |
@@ -462,48 +462,48 @@ discard block |
||
| 462 | 462 | * @return bool |
| 463 | 463 | */ |
| 464 | 464 | function auth_spip_modifier_pass($login, $new_pass, $id_auteur, $serveur = '') { |
| 465 | - if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') { |
|
| 466 | - return false; |
|
| 467 | - } |
|
| 468 | - |
|
| 469 | - if ( |
|
| 470 | - !$id_auteur = intval($id_auteur) |
|
| 471 | - or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 472 | - ) { |
|
| 473 | - return false; |
|
| 474 | - } |
|
| 475 | - |
|
| 476 | - include_spip('inc/chiffrer'); |
|
| 477 | - $cles = SpipCles::instance(); |
|
| 478 | - $secret = $cles->getSecretAuth(); |
|
| 479 | - if (!$secret) { |
|
| 480 | - if (auth_spip_initialiser_secret()) { |
|
| 481 | - $secret = $cles->getSecretAuth(); |
|
| 482 | - } |
|
| 483 | - else { |
|
| 484 | - return false; |
|
| 485 | - } |
|
| 486 | - } |
|
| 487 | - |
|
| 488 | - |
|
| 489 | - include_spip('inc/acces'); |
|
| 490 | - $set = [ |
|
| 491 | - 'pass' => Password::hacher($new_pass, $secret), |
|
| 492 | - 'htpass' => generer_htpass($new_pass), |
|
| 493 | - 'alea_actuel' => creer_uniqid(), // @deprecated 4.1 |
|
| 494 | - 'alea_futur' => creer_uniqid(), // @deprecated 4.1 |
|
| 495 | - 'low_sec' => '', |
|
| 496 | - ]; |
|
| 497 | - |
|
| 498 | - // si c'est un webmestre, on met a jour son backup des cles |
|
| 499 | - if ($auteur['statut'] === '0minirezo' and $auteur['webmestre'] === 'oui') { |
|
| 500 | - $set['backup_cles'] = $cles->backup($new_pass); |
|
| 501 | - } |
|
| 502 | - |
|
| 503 | - include_spip('action/editer_auteur'); |
|
| 504 | - auteur_modifier($id_auteur, $set, true); // manque la gestion de $serveur |
|
| 505 | - |
|
| 506 | - return true; // on a bien modifie le pass |
|
| 465 | + if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') { |
|
| 466 | + return false; |
|
| 467 | + } |
|
| 468 | + |
|
| 469 | + if ( |
|
| 470 | + !$id_auteur = intval($id_auteur) |
|
| 471 | + or !$auteur = sql_fetsel('login, statut, webmestre', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur) |
|
| 472 | + ) { |
|
| 473 | + return false; |
|
| 474 | + } |
|
| 475 | + |
|
| 476 | + include_spip('inc/chiffrer'); |
|
| 477 | + $cles = SpipCles::instance(); |
|
| 478 | + $secret = $cles->getSecretAuth(); |
|
| 479 | + if (!$secret) { |
|
| 480 | + if (auth_spip_initialiser_secret()) { |
|
| 481 | + $secret = $cles->getSecretAuth(); |
|
| 482 | + } |
|
| 483 | + else { |
|
| 484 | + return false; |
|
| 485 | + } |
|
| 486 | + } |
|
| 487 | + |
|
| 488 | + |
|
| 489 | + include_spip('inc/acces'); |
|
| 490 | + $set = [ |
|
| 491 | + 'pass' => Password::hacher($new_pass, $secret), |
|
| 492 | + 'htpass' => generer_htpass($new_pass), |
|
| 493 | + 'alea_actuel' => creer_uniqid(), // @deprecated 4.1 |
|
| 494 | + 'alea_futur' => creer_uniqid(), // @deprecated 4.1 |
|
| 495 | + 'low_sec' => '', |
|
| 496 | + ]; |
|
| 497 | + |
|
| 498 | + // si c'est un webmestre, on met a jour son backup des cles |
|
| 499 | + if ($auteur['statut'] === '0minirezo' and $auteur['webmestre'] === 'oui') { |
|
| 500 | + $set['backup_cles'] = $cles->backup($new_pass); |
|
| 501 | + } |
|
| 502 | + |
|
| 503 | + include_spip('action/editer_auteur'); |
|
| 504 | + auteur_modifier($id_auteur, $set, true); // manque la gestion de $serveur |
|
| 505 | + |
|
| 506 | + return true; // on a bien modifie le pass |
|
| 507 | 507 | } |
| 508 | 508 | |
| 509 | 509 | /** |
@@ -517,58 +517,58 @@ discard block |
||
| 517 | 517 | * @return void |
| 518 | 518 | */ |
| 519 | 519 | function auth_spip_synchroniser_distant($id_auteur, $champs, $options = [], string $serveur = ''): void { |
| 520 | - // ne rien faire pour une base distante : on ne sait pas regenerer les htaccess |
|
| 521 | - if (strlen($serveur)) { |
|
| 522 | - return; |
|
| 523 | - } |
|
| 524 | - // si un login, pass ou statut a ete modifie |
|
| 525 | - // regenerer les fichier htpass |
|
| 526 | - if ( |
|
| 527 | - isset($champs['login']) |
|
| 528 | - or isset($champs['pass']) |
|
| 529 | - or isset($champs['statut']) |
|
| 530 | - or (isset($options['all']) and $options['all']) |
|
| 531 | - ) { |
|
| 532 | - $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME; |
|
| 533 | - $htpasswd = _DIR_TMP . _AUTH_USER_FILE; |
|
| 534 | - |
|
| 535 | - // Cette variable de configuration peut etre posee par un plugin |
|
| 536 | - // par exemple acces_restreint ; |
|
| 537 | - // si .htaccess existe, outrepasser spip_meta |
|
| 538 | - if ( |
|
| 539 | - (!isset($GLOBALS['meta']['creer_htpasswd']) or ($GLOBALS['meta']['creer_htpasswd'] != 'oui')) |
|
| 540 | - and !@file_exists($htaccess) |
|
| 541 | - ) { |
|
| 542 | - spip_unlink($htpasswd); |
|
| 543 | - spip_unlink($htpasswd . '-admin'); |
|
| 544 | - |
|
| 545 | - return; |
|
| 546 | - } |
|
| 547 | - |
|
| 548 | - # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre |
|
| 549 | - # de devenir redacteur le cas echeant (auth http)... a nettoyer |
|
| 550 | - // attention, il faut au prealable se connecter a la base (necessaire car utilise par install) |
|
| 551 | - |
|
| 552 | - $p1 = ''; // login:htpass pour tous |
|
| 553 | - $p2 = ''; // login:htpass pour les admins |
|
| 554 | - $s = sql_select( |
|
| 555 | - 'login, htpass, statut', |
|
| 556 | - 'spip_auteurs', |
|
| 557 | - sql_in('statut', ['1comite', '0minirezo', 'nouveau']) |
|
| 558 | - ); |
|
| 559 | - while ($t = sql_fetch($s)) { |
|
| 560 | - if (strlen($t['login']) and strlen($t['htpass'])) { |
|
| 561 | - $p1 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 562 | - if ($t['statut'] == '0minirezo') { |
|
| 563 | - $p2 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 564 | - } |
|
| 565 | - } |
|
| 566 | - } |
|
| 567 | - sql_free($s); |
|
| 568 | - if ($p1) { |
|
| 569 | - ecrire_fichier($htpasswd, $p1); |
|
| 570 | - ecrire_fichier($htpasswd . '-admin', $p2); |
|
| 571 | - spip_log("Ecriture de $htpasswd et $htpasswd-admin"); |
|
| 572 | - } |
|
| 573 | - } |
|
| 520 | + // ne rien faire pour une base distante : on ne sait pas regenerer les htaccess |
|
| 521 | + if (strlen($serveur)) { |
|
| 522 | + return; |
|
| 523 | + } |
|
| 524 | + // si un login, pass ou statut a ete modifie |
|
| 525 | + // regenerer les fichier htpass |
|
| 526 | + if ( |
|
| 527 | + isset($champs['login']) |
|
| 528 | + or isset($champs['pass']) |
|
| 529 | + or isset($champs['statut']) |
|
| 530 | + or (isset($options['all']) and $options['all']) |
|
| 531 | + ) { |
|
| 532 | + $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME; |
|
| 533 | + $htpasswd = _DIR_TMP . _AUTH_USER_FILE; |
|
| 534 | + |
|
| 535 | + // Cette variable de configuration peut etre posee par un plugin |
|
| 536 | + // par exemple acces_restreint ; |
|
| 537 | + // si .htaccess existe, outrepasser spip_meta |
|
| 538 | + if ( |
|
| 539 | + (!isset($GLOBALS['meta']['creer_htpasswd']) or ($GLOBALS['meta']['creer_htpasswd'] != 'oui')) |
|
| 540 | + and !@file_exists($htaccess) |
|
| 541 | + ) { |
|
| 542 | + spip_unlink($htpasswd); |
|
| 543 | + spip_unlink($htpasswd . '-admin'); |
|
| 544 | + |
|
| 545 | + return; |
|
| 546 | + } |
|
| 547 | + |
|
| 548 | + # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre |
|
| 549 | + # de devenir redacteur le cas echeant (auth http)... a nettoyer |
|
| 550 | + // attention, il faut au prealable se connecter a la base (necessaire car utilise par install) |
|
| 551 | + |
|
| 552 | + $p1 = ''; // login:htpass pour tous |
|
| 553 | + $p2 = ''; // login:htpass pour les admins |
|
| 554 | + $s = sql_select( |
|
| 555 | + 'login, htpass, statut', |
|
| 556 | + 'spip_auteurs', |
|
| 557 | + sql_in('statut', ['1comite', '0minirezo', 'nouveau']) |
|
| 558 | + ); |
|
| 559 | + while ($t = sql_fetch($s)) { |
|
| 560 | + if (strlen($t['login']) and strlen($t['htpass'])) { |
|
| 561 | + $p1 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 562 | + if ($t['statut'] == '0minirezo') { |
|
| 563 | + $p2 .= $t['login'] . ':' . $t['htpass'] . "\n"; |
|
| 564 | + } |
|
| 565 | + } |
|
| 566 | + } |
|
| 567 | + sql_free($s); |
|
| 568 | + if ($p1) { |
|
| 569 | + ecrire_fichier($htpasswd, $p1); |
|
| 570 | + ecrire_fichier($htpasswd . '-admin', $p2); |
|
| 571 | + spip_log("Ecriture de $htpasswd et $htpasswd-admin"); |
|
| 572 | + } |
|
| 573 | + } |
|
| 574 | 574 | } |
@@ -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 | /** |
@@ -31,27 +31,27 @@ discard block |
||
| 31 | 31 | * Environnement du formulaire |
| 32 | 32 | **/ |
| 33 | 33 | function formulaires_configurer_preferences_charger_dist() { |
| 34 | - // travailler sur des meta fraiches |
|
| 35 | - include_spip('inc/meta'); |
|
| 36 | - lire_metas(); |
|
| 34 | + // travailler sur des meta fraiches |
|
| 35 | + include_spip('inc/meta'); |
|
| 36 | + lire_metas(); |
|
| 37 | 37 | |
| 38 | - $valeurs = []; |
|
| 39 | - $valeurs['display_navigation'] = $GLOBALS['visiteur_session']['prefs']['display_navigation'] ?? 'navigation_avec_icones'; |
|
| 40 | - $valeurs['display'] = (isset($GLOBALS['visiteur_session']['prefs']['display']) and $GLOBALS['visiteur_session']['prefs']['display'] > 0) ? $GLOBALS['visiteur_session']['prefs']['display'] : 2; |
|
| 41 | - $valeurs['couleur'] = (isset($GLOBALS['visiteur_session']['prefs']['couleur']) and $GLOBALS['visiteur_session']['prefs']['couleur'] > 0) ? $GLOBALS['visiteur_session']['prefs']['couleur'] : 1; |
|
| 38 | + $valeurs = []; |
|
| 39 | + $valeurs['display_navigation'] = $GLOBALS['visiteur_session']['prefs']['display_navigation'] ?? 'navigation_avec_icones'; |
|
| 40 | + $valeurs['display'] = (isset($GLOBALS['visiteur_session']['prefs']['display']) and $GLOBALS['visiteur_session']['prefs']['display'] > 0) ? $GLOBALS['visiteur_session']['prefs']['display'] : 2; |
|
| 41 | + $valeurs['couleur'] = (isset($GLOBALS['visiteur_session']['prefs']['couleur']) and $GLOBALS['visiteur_session']['prefs']['couleur'] > 0) ? $GLOBALS['visiteur_session']['prefs']['couleur'] : 1; |
|
| 42 | 42 | |
| 43 | - $couleurs = charger_fonction('couleurs', 'inc'); |
|
| 44 | - $les_couleurs = $couleurs(); |
|
| 45 | - foreach ($les_couleurs as $k => $c) { |
|
| 46 | - $valeurs['_couleurs_url'][$k] = generer_url_public('style_prive.css', 'ltr=' |
|
| 47 | - . $GLOBALS['spip_lang_left'] . '&' |
|
| 48 | - . $couleurs($k)); |
|
| 49 | - $valeurs['couleurs'][$k] = $c; |
|
| 50 | - } |
|
| 43 | + $couleurs = charger_fonction('couleurs', 'inc'); |
|
| 44 | + $les_couleurs = $couleurs(); |
|
| 45 | + foreach ($les_couleurs as $k => $c) { |
|
| 46 | + $valeurs['_couleurs_url'][$k] = generer_url_public('style_prive.css', 'ltr=' |
|
| 47 | + . $GLOBALS['spip_lang_left'] . '&' |
|
| 48 | + . $couleurs($k)); |
|
| 49 | + $valeurs['couleurs'][$k] = $c; |
|
| 50 | + } |
|
| 51 | 51 | |
| 52 | - $valeurs['imessage'] = $GLOBALS['visiteur_session']['imessage']; |
|
| 52 | + $valeurs['imessage'] = $GLOBALS['visiteur_session']['imessage']; |
|
| 53 | 53 | |
| 54 | - return $valeurs; |
|
| 54 | + return $valeurs; |
|
| 55 | 55 | } |
| 56 | 56 | |
| 57 | 57 | /** |
@@ -62,33 +62,33 @@ discard block |
||
| 62 | 62 | **/ |
| 63 | 63 | function formulaires_configurer_preferences_traiter_dist() { |
| 64 | 64 | |
| 65 | - if ($couleur = _request('couleur')) { |
|
| 66 | - $couleurs = charger_fonction('couleurs', 'inc'); |
|
| 67 | - $les_couleurs = $couleurs([], true); |
|
| 68 | - if (isset($les_couleurs[$couleur])) { |
|
| 69 | - $GLOBALS['visiteur_session']['prefs']['couleur'] = $couleur; |
|
| 70 | - } |
|
| 71 | - } |
|
| 72 | - if ($display = intval(_request('display'))) { |
|
| 73 | - $GLOBALS['visiteur_session']['prefs']['display'] = $display; |
|
| 74 | - } |
|
| 75 | - if ( |
|
| 76 | - $display_navigation = _request('display_navigation') |
|
| 77 | - and in_array($display_navigation, ['navigation_sans_icone', 'navigation_avec_icones']) |
|
| 78 | - ) { |
|
| 79 | - $GLOBALS['visiteur_session']['prefs']['display_navigation'] = $display_navigation; |
|
| 80 | - } |
|
| 65 | + if ($couleur = _request('couleur')) { |
|
| 66 | + $couleurs = charger_fonction('couleurs', 'inc'); |
|
| 67 | + $les_couleurs = $couleurs([], true); |
|
| 68 | + if (isset($les_couleurs[$couleur])) { |
|
| 69 | + $GLOBALS['visiteur_session']['prefs']['couleur'] = $couleur; |
|
| 70 | + } |
|
| 71 | + } |
|
| 72 | + if ($display = intval(_request('display'))) { |
|
| 73 | + $GLOBALS['visiteur_session']['prefs']['display'] = $display; |
|
| 74 | + } |
|
| 75 | + if ( |
|
| 76 | + $display_navigation = _request('display_navigation') |
|
| 77 | + and in_array($display_navigation, ['navigation_sans_icone', 'navigation_avec_icones']) |
|
| 78 | + ) { |
|
| 79 | + $GLOBALS['visiteur_session']['prefs']['display_navigation'] = $display_navigation; |
|
| 80 | + } |
|
| 81 | 81 | |
| 82 | - if (intval($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 83 | - include_spip('action/editer_auteur'); |
|
| 84 | - $c = ['prefs' => serialize($GLOBALS['visiteur_session']['prefs'])]; |
|
| 82 | + if (intval($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 83 | + include_spip('action/editer_auteur'); |
|
| 84 | + $c = ['prefs' => serialize($GLOBALS['visiteur_session']['prefs'])]; |
|
| 85 | 85 | |
| 86 | - if ($imessage = _request('imessage') and in_array($imessage, ['oui', 'non'])) { |
|
| 87 | - $c['imessage'] = $imessage; |
|
| 88 | - } |
|
| 86 | + if ($imessage = _request('imessage') and in_array($imessage, ['oui', 'non'])) { |
|
| 87 | + $c['imessage'] = $imessage; |
|
| 88 | + } |
|
| 89 | 89 | |
| 90 | - auteur_modifier($GLOBALS['visiteur_session']['id_auteur'], $c); |
|
| 91 | - } |
|
| 90 | + auteur_modifier($GLOBALS['visiteur_session']['id_auteur'], $c); |
|
| 91 | + } |
|
| 92 | 92 | |
| 93 | - return ['message_ok' => _T('config_info_enregistree'), 'editable' => true]; |
|
| 93 | + return ['message_ok' => _T('config_info_enregistree'), 'editable' => true]; |
|
| 94 | 94 | } |
@@ -11,77 +11,77 @@ |
||
| 11 | 11 | \***************************************************************************/ |
| 12 | 12 | |
| 13 | 13 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 14 | - return; |
|
| 14 | + return; |
|
| 15 | 15 | } |
| 16 | 16 | |
| 17 | 17 | # Les information d'une rubrique selectionnee dans le mini navigateur |
| 18 | 18 | |
| 19 | 19 | function inc_informer_dist($id, $col, $exclus, $rac, $type, $do = 'aff') { |
| 20 | - include_spip('inc/texte'); |
|
| 21 | - $titre = $descriptif = ''; |
|
| 22 | - if ($type === 'rubrique') { |
|
| 23 | - $row = sql_fetsel('titre, descriptif', 'spip_rubriques', 'id_rubrique = ' . intval($id)); |
|
| 24 | - if ($row) { |
|
| 25 | - $titre = typo($row['titre']); |
|
| 26 | - $descriptif = propre($row['descriptif']); |
|
| 27 | - } else { |
|
| 28 | - $titre = _T('info_racine_site'); |
|
| 29 | - } |
|
| 30 | - } |
|
| 20 | + include_spip('inc/texte'); |
|
| 21 | + $titre = $descriptif = ''; |
|
| 22 | + if ($type === 'rubrique') { |
|
| 23 | + $row = sql_fetsel('titre, descriptif', 'spip_rubriques', 'id_rubrique = ' . intval($id)); |
|
| 24 | + if ($row) { |
|
| 25 | + $titre = typo($row['titre']); |
|
| 26 | + $descriptif = propre($row['descriptif']); |
|
| 27 | + } else { |
|
| 28 | + $titre = _T('info_racine_site'); |
|
| 29 | + } |
|
| 30 | + } |
|
| 31 | 31 | |
| 32 | - $res = ''; |
|
| 33 | - if ( |
|
| 34 | - $type === 'rubrique' |
|
| 35 | - and intval($GLOBALS['visiteur_session']['prefs']['display'] ?? 0) !== 1 |
|
| 36 | - and isset($GLOBALS['meta']['image_process']) |
|
| 37 | - ) { |
|
| 38 | - if ($GLOBALS['meta']['image_process'] !== 'non') { |
|
| 39 | - $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 40 | - if ($res = $chercher_logo($id, 'id_rubrique', 'on')) { |
|
| 41 | - [$fid, $dir, $nom, $format] = $res; |
|
| 42 | - include_spip('inc/filtres_images_mini'); |
|
| 43 | - $res = image_reduire("<img src='$fid' alt='' />", 100, 48); |
|
| 44 | - if ($res) { |
|
| 45 | - $res = "<div class='informer__media' style='float: " . $GLOBALS['spip_lang_right'] . '; margin-' . $GLOBALS['spip_lang_right'] . ": -5px; margin-top: -5px;'>$res</div>"; |
|
| 46 | - } |
|
| 47 | - } |
|
| 48 | - } |
|
| 49 | - } |
|
| 32 | + $res = ''; |
|
| 33 | + if ( |
|
| 34 | + $type === 'rubrique' |
|
| 35 | + and intval($GLOBALS['visiteur_session']['prefs']['display'] ?? 0) !== 1 |
|
| 36 | + and isset($GLOBALS['meta']['image_process']) |
|
| 37 | + ) { |
|
| 38 | + if ($GLOBALS['meta']['image_process'] !== 'non') { |
|
| 39 | + $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 40 | + if ($res = $chercher_logo($id, 'id_rubrique', 'on')) { |
|
| 41 | + [$fid, $dir, $nom, $format] = $res; |
|
| 42 | + include_spip('inc/filtres_images_mini'); |
|
| 43 | + $res = image_reduire("<img src='$fid' alt='' />", 100, 48); |
|
| 44 | + if ($res) { |
|
| 45 | + $res = "<div class='informer__media' style='float: " . $GLOBALS['spip_lang_right'] . '; margin-' . $GLOBALS['spip_lang_right'] . ": -5px; margin-top: -5px;'>$res</div>"; |
|
| 46 | + } |
|
| 47 | + } |
|
| 48 | + } |
|
| 49 | + } |
|
| 50 | 50 | |
| 51 | - $rac = spip_htmlentities($rac, ENT_QUOTES); |
|
| 52 | - $do = spip_htmlentities($do, ENT_QUOTES); |
|
| 53 | - $id = intval($id); |
|
| 51 | + $rac = spip_htmlentities($rac, ENT_QUOTES); |
|
| 52 | + $do = spip_htmlentities($do, ENT_QUOTES); |
|
| 53 | + $id = intval($id); |
|
| 54 | 54 | |
| 55 | 55 | # ce lien provoque la selection (directe) de la rubrique cliquee |
| 56 | 56 | # et l'affichage de son titre dans le bandeau |
| 57 | - $titre = strtr( |
|
| 58 | - str_replace( |
|
| 59 | - "'", |
|
| 60 | - '’', |
|
| 61 | - str_replace('"', '"', textebrut($titre)) |
|
| 62 | - ), |
|
| 63 | - "\n\r", |
|
| 64 | - ' ' |
|
| 65 | - ); |
|
| 57 | + $titre = strtr( |
|
| 58 | + str_replace( |
|
| 59 | + "'", |
|
| 60 | + '’', |
|
| 61 | + str_replace('"', '"', textebrut($titre)) |
|
| 62 | + ), |
|
| 63 | + "\n\r", |
|
| 64 | + ' ' |
|
| 65 | + ); |
|
| 66 | 66 | |
| 67 | - $js_func = $do . '_selection_titre'; |
|
| 67 | + $js_func = $do . '_selection_titre'; |
|
| 68 | 68 | |
| 69 | - return "<div style='display: none;'>" |
|
| 70 | - . "<input type='text' id='" . $rac . "_sel' value='$id' />" |
|
| 71 | - . "<input type='text' id='" . $rac . "_sel2' value=\"" |
|
| 72 | - . entites_html($titre) |
|
| 73 | - . '" />' |
|
| 74 | - . '</div>' |
|
| 75 | - . "<div class='informer' style='padding: 5px; border-top: 0px;'>" |
|
| 76 | - . '<div class="informer__item">' |
|
| 77 | - . (!$res ? '' : $res) |
|
| 78 | - . "<p class='informer__titre'><b>" . safehtml($titre) . '</b></p>' |
|
| 79 | - . (!$descriptif ? '' : "<div class='informer__descriptif'>" . safehtml($descriptif) . '</div>') |
|
| 80 | - . '</div>' |
|
| 81 | - . "<div class='informer__action' style='clear:both; text-align: " . $GLOBALS['spip_lang_right'] . ";'>" |
|
| 82 | - . "<input type='submit' class='fondo btn submit' value='" |
|
| 83 | - . _T('bouton_choisir') |
|
| 84 | - . "'\nonclick=\"$js_func('$titre',$id,'selection_rubrique','id_parent'); return false;\" />" |
|
| 85 | - . '</div>' |
|
| 86 | - . '</div>'; |
|
| 69 | + return "<div style='display: none;'>" |
|
| 70 | + . "<input type='text' id='" . $rac . "_sel' value='$id' />" |
|
| 71 | + . "<input type='text' id='" . $rac . "_sel2' value=\"" |
|
| 72 | + . entites_html($titre) |
|
| 73 | + . '" />' |
|
| 74 | + . '</div>' |
|
| 75 | + . "<div class='informer' style='padding: 5px; border-top: 0px;'>" |
|
| 76 | + . '<div class="informer__item">' |
|
| 77 | + . (!$res ? '' : $res) |
|
| 78 | + . "<p class='informer__titre'><b>" . safehtml($titre) . '</b></p>' |
|
| 79 | + . (!$descriptif ? '' : "<div class='informer__descriptif'>" . safehtml($descriptif) . '</div>') |
|
| 80 | + . '</div>' |
|
| 81 | + . "<div class='informer__action' style='clear:both; text-align: " . $GLOBALS['spip_lang_right'] . ";'>" |
|
| 82 | + . "<input type='submit' class='fondo btn submit' value='" |
|
| 83 | + . _T('bouton_choisir') |
|
| 84 | + . "'\nonclick=\"$js_func('$titre',$id,'selection_rubrique','id_parent'); return false;\" />" |
|
| 85 | + . '</div>' |
|
| 86 | + . '</div>'; |
|
| 87 | 87 | } |
@@ -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 | /** |
@@ -43,25 +43,25 @@ discard block |
||
| 43 | 43 | * @return string Code HTML |
| 44 | 44 | **/ |
| 45 | 45 | function inc_commencer_page_dist( |
| 46 | - $titre = '', |
|
| 47 | - $rubrique = 'accueil', |
|
| 48 | - $sous_rubrique = 'accueil', |
|
| 49 | - $id_rubrique = '', |
|
| 50 | - $menu = true, |
|
| 51 | - $minipres = false, |
|
| 52 | - $alertes = true |
|
| 46 | + $titre = '', |
|
| 47 | + $rubrique = 'accueil', |
|
| 48 | + $sous_rubrique = 'accueil', |
|
| 49 | + $id_rubrique = '', |
|
| 50 | + $menu = true, |
|
| 51 | + $minipres = false, |
|
| 52 | + $alertes = true |
|
| 53 | 53 | ) { |
| 54 | 54 | |
| 55 | - include_spip('inc/headers'); |
|
| 55 | + include_spip('inc/headers'); |
|
| 56 | 56 | |
| 57 | - http_no_cache(); |
|
| 57 | + http_no_cache(); |
|
| 58 | 58 | |
| 59 | - return init_entete($titre, $id_rubrique, $minipres) |
|
| 60 | - . init_body($rubrique, $sous_rubrique, $id_rubrique, $menu) |
|
| 61 | - . "<div id='page'>" |
|
| 62 | - . auteurs_recemment_connectes($GLOBALS['connect_id_auteur']) |
|
| 63 | - . ($alertes ? alertes_auteur($GLOBALS['connect_id_auteur']) : '') |
|
| 64 | - . '<div class="largeur">'; |
|
| 59 | + return init_entete($titre, $id_rubrique, $minipres) |
|
| 60 | + . init_body($rubrique, $sous_rubrique, $id_rubrique, $menu) |
|
| 61 | + . "<div id='page'>" |
|
| 62 | + . auteurs_recemment_connectes($GLOBALS['connect_id_auteur']) |
|
| 63 | + . ($alertes ? alertes_auteur($GLOBALS['connect_id_auteur']) : '') |
|
| 64 | + . '<div class="largeur">'; |
|
| 65 | 65 | } |
| 66 | 66 | |
| 67 | 67 | /** |
@@ -82,21 +82,21 @@ discard block |
||
| 82 | 82 | * Entête du fichier HTML avec le DOCTYPE |
| 83 | 83 | */ |
| 84 | 84 | function init_entete($titre = '', $dummy = 0, $minipres = false) { |
| 85 | - include_spip('inc/texte'); |
|
| 86 | - if (!$nom_site_spip = textebrut(typo($GLOBALS['meta']['nom_site']))) { |
|
| 87 | - $nom_site_spip = _T('info_mon_site_spip'); |
|
| 88 | - } |
|
| 89 | - |
|
| 90 | - $titre = '[' |
|
| 91 | - . $nom_site_spip |
|
| 92 | - . ']' |
|
| 93 | - . ($titre ? ' ' . textebrut(typo($titre)) : ''); |
|
| 94 | - |
|
| 95 | - return _DOCTYPE_ECRIRE |
|
| 96 | - . html_lang_attributes() |
|
| 97 | - . "<head>\n" |
|
| 98 | - . init_head($titre, $dummy, $minipres) |
|
| 99 | - . "</head>\n"; |
|
| 85 | + include_spip('inc/texte'); |
|
| 86 | + if (!$nom_site_spip = textebrut(typo($GLOBALS['meta']['nom_site']))) { |
|
| 87 | + $nom_site_spip = _T('info_mon_site_spip'); |
|
| 88 | + } |
|
| 89 | + |
|
| 90 | + $titre = '[' |
|
| 91 | + . $nom_site_spip |
|
| 92 | + . ']' |
|
| 93 | + . ($titre ? ' ' . textebrut(typo($titre)) : ''); |
|
| 94 | + |
|
| 95 | + return _DOCTYPE_ECRIRE |
|
| 96 | + . html_lang_attributes() |
|
| 97 | + . "<head>\n" |
|
| 98 | + . init_head($titre, $dummy, $minipres) |
|
| 99 | + . "</head>\n"; |
|
| 100 | 100 | } |
| 101 | 101 | |
| 102 | 102 | /** |
@@ -110,7 +110,7 @@ discard block |
||
| 110 | 110 | * @return string |
| 111 | 111 | */ |
| 112 | 112 | function init_head($titre = '', $dummy = 0, $minipres = false) { |
| 113 | - return recuperer_fond('prive/squelettes/head/dist', ['titre' => $titre, 'minipres' => $minipres ? ' ' : '']); |
|
| 113 | + return recuperer_fond('prive/squelettes/head/dist', ['titre' => $titre, 'minipres' => $minipres ? ' ' : '']); |
|
| 114 | 114 | } |
| 115 | 115 | |
| 116 | 116 | /** |
@@ -132,20 +132,20 @@ discard block |
||
| 132 | 132 | */ |
| 133 | 133 | function init_body($rubrique = 'accueil', $sous_rubrique = 'accueil', $id_rubrique = '', $menu = true) { |
| 134 | 134 | |
| 135 | - $res = pipeline('body_prive', "<body class='" |
|
| 136 | - . init_body_class() . ' ' . _request('exec') . "'" |
|
| 137 | - . ($GLOBALS['spip_lang_rtl'] ? " dir='rtl'" : '') |
|
| 138 | - . '>'); |
|
| 135 | + $res = pipeline('body_prive', "<body class='" |
|
| 136 | + . init_body_class() . ' ' . _request('exec') . "'" |
|
| 137 | + . ($GLOBALS['spip_lang_rtl'] ? " dir='rtl'" : '') |
|
| 138 | + . '>'); |
|
| 139 | 139 | |
| 140 | - if (!$menu) { |
|
| 141 | - return $res; |
|
| 142 | - } |
|
| 140 | + if (!$menu) { |
|
| 141 | + return $res; |
|
| 142 | + } |
|
| 143 | 143 | |
| 144 | 144 | |
| 145 | - $bandeau = charger_fonction('bandeau', 'inc'); |
|
| 145 | + $bandeau = charger_fonction('bandeau', 'inc'); |
|
| 146 | 146 | |
| 147 | - return $res |
|
| 148 | - . $bandeau(); |
|
| 147 | + return $res |
|
| 148 | + . $bandeau(); |
|
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | /** |
@@ -157,23 +157,23 @@ discard block |
||
| 157 | 157 | * @return string Classes CSS (séparées par des espaces) |
| 158 | 158 | */ |
| 159 | 159 | function init_body_class() { |
| 160 | - $display_modes = [ |
|
| 161 | - 0 => 'icones_img_texte' // défaut. |
|
| 162 | - /*init*/, |
|
| 163 | - 1 => 'icones_texte', |
|
| 164 | - 2 => 'icones_img_texte', |
|
| 165 | - 3 => 'icones_img' |
|
| 166 | - ]; |
|
| 160 | + $display_modes = [ |
|
| 161 | + 0 => 'icones_img_texte' // défaut. |
|
| 162 | + /*init*/, |
|
| 163 | + 1 => 'icones_texte', |
|
| 164 | + 2 => 'icones_img_texte', |
|
| 165 | + 3 => 'icones_img' |
|
| 166 | + ]; |
|
| 167 | 167 | |
| 168 | - $prefs = $GLOBALS['visiteur_session']['prefs'] ?? []; |
|
| 168 | + $prefs = $GLOBALS['visiteur_session']['prefs'] ?? []; |
|
| 169 | 169 | |
| 170 | - $display_mode = $display_modes[intval($prefs['display'] ?? 0)] ?? $display_modes[0]; |
|
| 171 | - $spip_display_navigation = isset($prefs['display_navigation']) ? spip_sanitize_classname($prefs['display_navigation']) : 'navigation_avec_icones'; |
|
| 170 | + $display_mode = $display_modes[intval($prefs['display'] ?? 0)] ?? $display_modes[0]; |
|
| 171 | + $spip_display_navigation = isset($prefs['display_navigation']) ? spip_sanitize_classname($prefs['display_navigation']) : 'navigation_avec_icones'; |
|
| 172 | 172 | |
| 173 | - $couleur = intval($prefs['couleur'] ?? 2); |
|
| 173 | + $couleur = intval($prefs['couleur'] ?? 2); |
|
| 174 | 174 | |
| 175 | - $classes = "spip-theme-colors-$couleur $spip_display_navigation $display_mode"; |
|
| 176 | - return spip_sanitize_classname($classes); |
|
| 175 | + $classes = "spip-theme-colors-$couleur $spip_display_navigation $display_mode"; |
|
| 176 | + return spip_sanitize_classname($classes); |
|
| 177 | 177 | } |
| 178 | 178 | |
| 179 | 179 | |
@@ -184,5 +184,5 @@ discard block |
||
| 184 | 184 | * @return string |
| 185 | 185 | */ |
| 186 | 186 | function auteurs_recemment_connectes($id_auteur) { |
| 187 | - return recuperer_fond('prive/objets/liste/auteurs_enligne'); |
|
| 187 | + return recuperer_fond('prive/objets/liste/auteurs_enligne'); |
|
| 188 | 188 | } |
@@ -19,7 +19,7 @@ discard block |
||
| 19 | 19 | /** Drapeau indiquant que l'on est dans l'espace privé */ |
| 20 | 20 | define('_ESPACE_PRIVE', true); |
| 21 | 21 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 22 | - include 'inc_version.php'; |
|
| 22 | + include 'inc_version.php'; |
|
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | include_spip('inc/cookie'); |
@@ -35,18 +35,18 @@ discard block |
||
| 35 | 35 | // alors il faut blinder les variables d'URL |
| 36 | 36 | // |
| 37 | 37 | if (autoriser_sans_cookie($exec, false)) { |
| 38 | - if (!isset($reinstall)) { |
|
| 39 | - $reinstall = 'non'; |
|
| 40 | - } |
|
| 41 | - $var_auth = true; |
|
| 38 | + if (!isset($reinstall)) { |
|
| 39 | + $reinstall = 'non'; |
|
| 40 | + } |
|
| 41 | + $var_auth = true; |
|
| 42 | 42 | } else { |
| 43 | - // Authentification, redefinissable |
|
| 44 | - $auth = charger_fonction('auth', 'inc'); |
|
| 45 | - $var_auth = $auth(); |
|
| 46 | - if ($var_auth) { |
|
| 47 | - echo auth_echec($var_auth); |
|
| 48 | - exit; |
|
| 49 | - } |
|
| 43 | + // Authentification, redefinissable |
|
| 44 | + $auth = charger_fonction('auth', 'inc'); |
|
| 45 | + $var_auth = $auth(); |
|
| 46 | + if ($var_auth) { |
|
| 47 | + echo auth_echec($var_auth); |
|
| 48 | + exit; |
|
| 49 | + } |
|
| 50 | 50 | } |
| 51 | 51 | |
| 52 | 52 | // initialiser a la langue par defaut |
@@ -57,29 +57,29 @@ discard block |
||
| 57 | 57 | |
| 58 | 58 | |
| 59 | 59 | if (_request('action') or _request('var_ajax') or _request('formulaire_action')) { |
| 60 | - if (!autoriser_sans_cookie($exec)) { |
|
| 61 | - // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires |
|
| 62 | - include_spip('public/aiguiller'); |
|
| 63 | - if ( |
|
| 64 | - // cas des appels actions ?action=xxx |
|
| 65 | - traiter_appels_actions() |
|
| 66 | - or |
|
| 67 | - // cas des hits ajax sur les inclusions ajax |
|
| 68 | - traiter_appels_inclusions_ajax() |
|
| 69 | - or |
|
| 70 | - // cas des formulaires charger/verifier/traiter |
|
| 71 | - traiter_formulaires_dynamiques() |
|
| 72 | - ) { |
|
| 73 | - exit; |
|
| 74 | - } // le hit est fini ! |
|
| 75 | - } |
|
| 60 | + if (!autoriser_sans_cookie($exec)) { |
|
| 61 | + // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires |
|
| 62 | + include_spip('public/aiguiller'); |
|
| 63 | + if ( |
|
| 64 | + // cas des appels actions ?action=xxx |
|
| 65 | + traiter_appels_actions() |
|
| 66 | + or |
|
| 67 | + // cas des hits ajax sur les inclusions ajax |
|
| 68 | + traiter_appels_inclusions_ajax() |
|
| 69 | + or |
|
| 70 | + // cas des formulaires charger/verifier/traiter |
|
| 71 | + traiter_formulaires_dynamiques() |
|
| 72 | + ) { |
|
| 73 | + exit; |
|
| 74 | + } // le hit est fini ! |
|
| 75 | + } |
|
| 76 | 76 | } |
| 77 | 77 | // securiser les redirect du back-office |
| 78 | 78 | if (_request('redirect')) { |
| 79 | - if (!function_exists('securiser_redirect_action')) { |
|
| 80 | - include_spip('public/aiguiller'); |
|
| 81 | - } |
|
| 82 | - set_request('redirect', securiser_redirect_action(_request('redirect'))); |
|
| 79 | + if (!function_exists('securiser_redirect_action')) { |
|
| 80 | + include_spip('public/aiguiller'); |
|
| 81 | + } |
|
| 82 | + set_request('redirect', securiser_redirect_action(_request('redirect'))); |
|
| 83 | 83 | } |
| 84 | 84 | |
| 85 | 85 | |
@@ -89,12 +89,12 @@ discard block |
||
| 89 | 89 | |
| 90 | 90 | // Controle de la version, sauf si on est deja en train de s'en occuper |
| 91 | 91 | if ( |
| 92 | - !$reinstall == 'oui' |
|
| 93 | - and !_AJAX |
|
| 94 | - and isset($GLOBALS['meta']['version_installee']) |
|
| 95 | - and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee']))) |
|
| 92 | + !$reinstall == 'oui' |
|
| 93 | + and !_AJAX |
|
| 94 | + and isset($GLOBALS['meta']['version_installee']) |
|
| 95 | + and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee']))) |
|
| 96 | 96 | ) { |
| 97 | - $exec = 'demande_mise_a_jour'; |
|
| 97 | + $exec = 'demande_mise_a_jour'; |
|
| 98 | 98 | } |
| 99 | 99 | |
| 100 | 100 | // Quand une action d'administration est en cours (meta "admin"), |
@@ -104,39 +104,39 @@ discard block |
||
| 104 | 104 | // sinon c'est qu'elle a ete interrompue et il faut la reprendre |
| 105 | 105 | |
| 106 | 106 | elseif (isset($GLOBALS['meta']['admin'])) { |
| 107 | - if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']['admin'], $l)) { |
|
| 108 | - [, $var_f, $n] = $l; |
|
| 109 | - } |
|
| 110 | - if ( |
|
| 111 | - _AJAX |
|
| 112 | - or !( |
|
| 113 | - isset($_COOKIE['spip_admin']) |
|
| 114 | - or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo') |
|
| 115 | - ) |
|
| 116 | - ) { |
|
| 117 | - spip_log('Quand la meta admin vaut ' . |
|
| 118 | - $GLOBALS['meta']['admin'] . |
|
| 119 | - ' seul un admin peut se connecter et sans AJAX.' . |
|
| 120 | - ' En cas de probleme, detruire cette meta.'); |
|
| 121 | - die(_T('info_travaux_texte')); |
|
| 122 | - } |
|
| 123 | - if ($n) { |
|
| 124 | - [, $var_f, $n] = $l; |
|
| 125 | - if (tester_url_ecrire("base_$var_f")) { |
|
| 126 | - $var_f = "base_$var_f"; |
|
| 127 | - } |
|
| 128 | - if ($var_f != $exec) { |
|
| 129 | - spip_log("Le script $var_f lance par auteur$n se substitue a l'exec $exec"); |
|
| 130 | - $exec = $var_f; |
|
| 131 | - set_request('exec', $exec); |
|
| 132 | - } |
|
| 133 | - } |
|
| 107 | + if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']['admin'], $l)) { |
|
| 108 | + [, $var_f, $n] = $l; |
|
| 109 | + } |
|
| 110 | + if ( |
|
| 111 | + _AJAX |
|
| 112 | + or !( |
|
| 113 | + isset($_COOKIE['spip_admin']) |
|
| 114 | + or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo') |
|
| 115 | + ) |
|
| 116 | + ) { |
|
| 117 | + spip_log('Quand la meta admin vaut ' . |
|
| 118 | + $GLOBALS['meta']['admin'] . |
|
| 119 | + ' seul un admin peut se connecter et sans AJAX.' . |
|
| 120 | + ' En cas de probleme, detruire cette meta.'); |
|
| 121 | + die(_T('info_travaux_texte')); |
|
| 122 | + } |
|
| 123 | + if ($n) { |
|
| 124 | + [, $var_f, $n] = $l; |
|
| 125 | + if (tester_url_ecrire("base_$var_f")) { |
|
| 126 | + $var_f = "base_$var_f"; |
|
| 127 | + } |
|
| 128 | + if ($var_f != $exec) { |
|
| 129 | + spip_log("Le script $var_f lance par auteur$n se substitue a l'exec $exec"); |
|
| 130 | + $exec = $var_f; |
|
| 131 | + set_request('exec', $exec); |
|
| 132 | + } |
|
| 133 | + } |
|
| 134 | 134 | } |
| 135 | 135 | // si nom pas plausible, prendre le script par defaut |
| 136 | 136 | // attention aux deux cas 404/403 qui commencent par un 4 ! |
| 137 | 137 | elseif (!preg_match(',^[a-z4_][0-9a-z_-]*$,i', $exec)) { |
| 138 | - $exec = 'accueil'; |
|
| 139 | - set_request('exec', $exec); |
|
| 138 | + $exec = 'accueil'; |
|
| 139 | + set_request('exec', $exec); |
|
| 140 | 140 | } |
| 141 | 141 | |
| 142 | 142 | // si la langue est specifiee par cookie et ne correspond pas |
@@ -144,19 +144,19 @@ discard block |
||
| 144 | 144 | // on appelle directement la fonction, car un appel d'action peut conduire a une boucle infinie |
| 145 | 145 | // si le cookie n'est pas pose correctement dans l'action |
| 146 | 146 | if ( |
| 147 | - !$var_auth and isset($_COOKIE['spip_lang_ecrire']) |
|
| 148 | - and $_COOKIE['spip_lang_ecrire'] <> $GLOBALS['visiteur_session']['lang'] |
|
| 147 | + !$var_auth and isset($_COOKIE['spip_lang_ecrire']) |
|
| 148 | + and $_COOKIE['spip_lang_ecrire'] <> $GLOBALS['visiteur_session']['lang'] |
|
| 149 | 149 | ) { |
| 150 | - include_spip('action/converser'); |
|
| 151 | - action_converser_post($GLOBALS['visiteur_session']['lang'], true); |
|
| 150 | + include_spip('action/converser'); |
|
| 151 | + action_converser_post($GLOBALS['visiteur_session']['lang'], true); |
|
| 152 | 152 | } |
| 153 | 153 | |
| 154 | 154 | if ($var_f = tester_url_ecrire($exec)) { |
| 155 | - $var_f = charger_fonction($var_f); |
|
| 156 | - $var_f(); // at last |
|
| 155 | + $var_f = charger_fonction($var_f); |
|
| 156 | + $var_f(); // at last |
|
| 157 | 157 | } else { |
| 158 | - // Rien de connu: rerouter vers exec=404 au lieu d'echouer |
|
| 159 | - // ce qui permet de laisser la main a un plugin |
|
| 160 | - $var_f = charger_fonction('404'); |
|
| 161 | - $var_f($exec); |
|
| 158 | + // Rien de connu: rerouter vers exec=404 au lieu d'echouer |
|
| 159 | + // ce qui permet de laisser la main a un plugin |
|
| 160 | + $var_f = charger_fonction('404'); |
|
| 161 | + $var_f($exec); |
|
| 162 | 162 | } |
@@ -4,248 +4,248 @@ discard block |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'access_interface_graphique' => 'Retour à l’interface graphique complète', |
|
| 14 | - 'access_mode_texte' => 'Afficher l’interface textuelle simplifiée', |
|
| 15 | - 'admin_debug' => 'debug', |
|
| 16 | - 'admin_modifier_article' => 'Modifier cet article', |
|
| 17 | - 'admin_modifier_auteur' => 'Modifier cet auteur', |
|
| 18 | - 'admin_modifier_breve' => 'Modifier cette brève', |
|
| 19 | - 'admin_modifier_mot' => 'Modifier ce mot-clé', |
|
| 20 | - 'admin_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 21 | - 'admin_recalculer' => 'Recalculer cette page', |
|
| 22 | - 'afficher_calendrier' => 'Afficher le calendrier', |
|
| 23 | - 'afficher_trad' => 'afficher les traductions', |
|
| 24 | - 'alerte_maj_impossible' => '<b>Alerte !</b> La mise à jour de la base SQL vers la version @version@ est impossible, peut-être à cause d’un problème de droit de modification sur la base de données. Contacte ton hébergeur.', |
|
| 25 | - 'alerte_modif_info_concourante' => 'ATTENTION : Cette information a été modifiée par ailleurs. La valeur actuelle est :', |
|
| 26 | - 'analyse_xml' => 'Analyse XML', |
|
| 27 | - 'annuler' => 'Annuler', |
|
| 28 | - 'antispam_champ_vide' => 'Laisse ce champ vide :', |
|
| 29 | - 'articles_recents' => 'Articles les plus récents', |
|
| 30 | - 'attention_champ_mini_nb_caractères' => 'Attention ! @nb@ caractères au minimum', |
|
| 31 | - 'avis_1_erreur_saisie' => 'Il y a 1 erreur dans dans ta saisie, vérifie les informations.', |
|
| 32 | - 'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP', |
|
| 33 | - 'avis_archive_invalide' => 'le fichier archive n’est pas valide', |
|
| 34 | - 'avis_attention' => 'ATTENTION !', |
|
| 35 | - 'avis_champ_incorrect_type_objet' => 'Nom de champ incorrect @name@ pour objet de type @type@', |
|
| 36 | - 'avis_colonne_inexistante' => 'La colonne @col@ n’existe pas', |
|
| 37 | - 'avis_erreur' => 'Erreur : voir ci-dessous', |
|
| 38 | - 'avis_erreur_connexion' => 'Erreur de connexion', |
|
| 39 | - 'avis_erreur_cookie' => 'problème de cookie', |
|
| 40 | - 'avis_erreur_fonction_contexte' => 'Erreur de programmation. Cette fonction ne doit pas être appelée dans ce contexte.', |
|
| 41 | - 'avis_erreur_mysql' => 'Erreur SQL', |
|
| 42 | - 'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !', |
|
| 43 | - 'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé', |
|
| 44 | - 'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans ta saisie, vérifie les informations.', |
|
| 12 | + // A |
|
| 13 | + 'access_interface_graphique' => 'Retour à l’interface graphique complète', |
|
| 14 | + 'access_mode_texte' => 'Afficher l’interface textuelle simplifiée', |
|
| 15 | + 'admin_debug' => 'debug', |
|
| 16 | + 'admin_modifier_article' => 'Modifier cet article', |
|
| 17 | + 'admin_modifier_auteur' => 'Modifier cet auteur', |
|
| 18 | + 'admin_modifier_breve' => 'Modifier cette brève', |
|
| 19 | + 'admin_modifier_mot' => 'Modifier ce mot-clé', |
|
| 20 | + 'admin_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 21 | + 'admin_recalculer' => 'Recalculer cette page', |
|
| 22 | + 'afficher_calendrier' => 'Afficher le calendrier', |
|
| 23 | + 'afficher_trad' => 'afficher les traductions', |
|
| 24 | + 'alerte_maj_impossible' => '<b>Alerte !</b> La mise à jour de la base SQL vers la version @version@ est impossible, peut-être à cause d’un problème de droit de modification sur la base de données. Contacte ton hébergeur.', |
|
| 25 | + 'alerte_modif_info_concourante' => 'ATTENTION : Cette information a été modifiée par ailleurs. La valeur actuelle est :', |
|
| 26 | + 'analyse_xml' => 'Analyse XML', |
|
| 27 | + 'annuler' => 'Annuler', |
|
| 28 | + 'antispam_champ_vide' => 'Laisse ce champ vide :', |
|
| 29 | + 'articles_recents' => 'Articles les plus récents', |
|
| 30 | + 'attention_champ_mini_nb_caractères' => 'Attention ! @nb@ caractères au minimum', |
|
| 31 | + 'avis_1_erreur_saisie' => 'Il y a 1 erreur dans dans ta saisie, vérifie les informations.', |
|
| 32 | + 'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP', |
|
| 33 | + 'avis_archive_invalide' => 'le fichier archive n’est pas valide', |
|
| 34 | + 'avis_attention' => 'ATTENTION !', |
|
| 35 | + 'avis_champ_incorrect_type_objet' => 'Nom de champ incorrect @name@ pour objet de type @type@', |
|
| 36 | + 'avis_colonne_inexistante' => 'La colonne @col@ n’existe pas', |
|
| 37 | + 'avis_erreur' => 'Erreur : voir ci-dessous', |
|
| 38 | + 'avis_erreur_connexion' => 'Erreur de connexion', |
|
| 39 | + 'avis_erreur_cookie' => 'problème de cookie', |
|
| 40 | + 'avis_erreur_fonction_contexte' => 'Erreur de programmation. Cette fonction ne doit pas être appelée dans ce contexte.', |
|
| 41 | + 'avis_erreur_mysql' => 'Erreur SQL', |
|
| 42 | + 'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !', |
|
| 43 | + 'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé', |
|
| 44 | + 'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans ta saisie, vérifie les informations.', |
|
| 45 | 45 | |
| 46 | - // B |
|
| 47 | - 'barre_a_accent_grave' => 'Insérer un A accent grave majuscule', |
|
| 48 | - 'barre_aide' => 'Utilise les raccourcis typographiques pour enrichir ta mise en page', |
|
| 49 | - 'barre_e_accent_aigu' => 'Insérer un E accent aigu majuscule', |
|
| 50 | - 'barre_eo' => 'Insérer un E dans l’O', |
|
| 51 | - 'barre_eo_maj' => 'Insérer un E dans l’O majuscule', |
|
| 52 | - 'barre_euro' => 'Insérer le symbole ?', |
|
| 53 | - 'barre_gras' => 'Mettre en {{gras}}', |
|
| 54 | - 'barre_guillemets' => 'Entourer de « guillemets français »', |
|
| 55 | - 'barre_guillemets_simples' => 'Entourer de ?guillemets de second niveau ?', |
|
| 56 | - 'barre_intertitre' => 'Transformer en {{{intertitre}}}', |
|
| 57 | - 'barre_italic' => 'Mettre en {italique}', |
|
| 58 | - 'barre_lien' => 'Transformer en [lien hypertexte->http://...]', |
|
| 59 | - 'barre_lien_input' => 'Indiquer l’adresse de ton lien (tu peux indiquer une adresse Web sous la forme http://www.monsite/com ou simplement indiquer le numéro d’un article de ce site.', |
|
| 60 | - 'barre_note' => 'Transformer en [[Note de bas de page]]', |
|
| 61 | - 'barre_paragraphe' => 'Crée un paragraphe', |
|
| 62 | - 'barre_quote' => '<quote>Citer un message</quote>', |
|
| 63 | - 'bouton_changer' => 'Changer', |
|
| 64 | - 'bouton_chercher' => 'Chercher', |
|
| 65 | - 'bouton_choisir' => 'Choisir', |
|
| 66 | - 'bouton_deplacer' => 'Déplacer', |
|
| 67 | - 'bouton_download' => 'Télécharger', |
|
| 68 | - 'bouton_enregistrer' => 'Enregistrer', |
|
| 69 | - 'bouton_radio_desactiver_messagerie_interne' => 'Désactiver la messagerie interne', |
|
| 70 | - 'bouton_radio_envoi_annonces' => 'Envoyer les annonces éditoriales', |
|
| 71 | - 'bouton_radio_non_envoi_annonces' => 'Ne pas envoyer d’annonces', |
|
| 72 | - 'bouton_radio_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 73 | - 'bouton_recharger_page' => 'recharger cette page', |
|
| 74 | - 'bouton_telecharger' => 'Télécharger', |
|
| 75 | - 'bouton_upload' => 'Téléverser', |
|
| 76 | - 'bouton_valider' => 'Valider', |
|
| 46 | + // B |
|
| 47 | + 'barre_a_accent_grave' => 'Insérer un A accent grave majuscule', |
|
| 48 | + 'barre_aide' => 'Utilise les raccourcis typographiques pour enrichir ta mise en page', |
|
| 49 | + 'barre_e_accent_aigu' => 'Insérer un E accent aigu majuscule', |
|
| 50 | + 'barre_eo' => 'Insérer un E dans l’O', |
|
| 51 | + 'barre_eo_maj' => 'Insérer un E dans l’O majuscule', |
|
| 52 | + 'barre_euro' => 'Insérer le symbole ?', |
|
| 53 | + 'barre_gras' => 'Mettre en {{gras}}', |
|
| 54 | + 'barre_guillemets' => 'Entourer de « guillemets français »', |
|
| 55 | + 'barre_guillemets_simples' => 'Entourer de ?guillemets de second niveau ?', |
|
| 56 | + 'barre_intertitre' => 'Transformer en {{{intertitre}}}', |
|
| 57 | + 'barre_italic' => 'Mettre en {italique}', |
|
| 58 | + 'barre_lien' => 'Transformer en [lien hypertexte->http://...]', |
|
| 59 | + 'barre_lien_input' => 'Indiquer l’adresse de ton lien (tu peux indiquer une adresse Web sous la forme http://www.monsite/com ou simplement indiquer le numéro d’un article de ce site.', |
|
| 60 | + 'barre_note' => 'Transformer en [[Note de bas de page]]', |
|
| 61 | + 'barre_paragraphe' => 'Crée un paragraphe', |
|
| 62 | + 'barre_quote' => '<quote>Citer un message</quote>', |
|
| 63 | + 'bouton_changer' => 'Changer', |
|
| 64 | + 'bouton_chercher' => 'Chercher', |
|
| 65 | + 'bouton_choisir' => 'Choisir', |
|
| 66 | + 'bouton_deplacer' => 'Déplacer', |
|
| 67 | + 'bouton_download' => 'Télécharger', |
|
| 68 | + 'bouton_enregistrer' => 'Enregistrer', |
|
| 69 | + 'bouton_radio_desactiver_messagerie_interne' => 'Désactiver la messagerie interne', |
|
| 70 | + 'bouton_radio_envoi_annonces' => 'Envoyer les annonces éditoriales', |
|
| 71 | + 'bouton_radio_non_envoi_annonces' => 'Ne pas envoyer d’annonces', |
|
| 72 | + 'bouton_radio_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 73 | + 'bouton_recharger_page' => 'recharger cette page', |
|
| 74 | + 'bouton_telecharger' => 'Télécharger', |
|
| 75 | + 'bouton_upload' => 'Téléverser', |
|
| 76 | + 'bouton_valider' => 'Valider', |
|
| 77 | 77 | |
| 78 | - // C |
|
| 79 | - 'cal_apresmidi' => 'après-midi', |
|
| 80 | - 'cal_jour_entier' => 'jour entier', |
|
| 81 | - 'cal_matin' => 'matin', |
|
| 82 | - 'cal_par_jour' => 'calendrier par jour', |
|
| 83 | - 'cal_par_mois' => 'calendrier par mois', |
|
| 84 | - 'cal_par_semaine' => 'calendrier par semaine', |
|
| 85 | - 'choix_couleur_interface' => 'couleur ', |
|
| 86 | - 'choix_interface' => 'choix de l’interface', |
|
| 87 | - 'colonne' => 'Colonne', |
|
| 88 | - 'confirm_changer_statut' => 'Attention, tu as demandé à changer le statut de cet élément. Souhaites-tu continuer ?', |
|
| 89 | - 'correcte' => 'correcte', |
|
| 78 | + // C |
|
| 79 | + 'cal_apresmidi' => 'après-midi', |
|
| 80 | + 'cal_jour_entier' => 'jour entier', |
|
| 81 | + 'cal_matin' => 'matin', |
|
| 82 | + 'cal_par_jour' => 'calendrier par jour', |
|
| 83 | + 'cal_par_mois' => 'calendrier par mois', |
|
| 84 | + 'cal_par_semaine' => 'calendrier par semaine', |
|
| 85 | + 'choix_couleur_interface' => 'couleur ', |
|
| 86 | + 'choix_interface' => 'choix de l’interface', |
|
| 87 | + 'colonne' => 'Colonne', |
|
| 88 | + 'confirm_changer_statut' => 'Attention, tu as demandé à changer le statut de cet élément. Souhaites-tu continuer ?', |
|
| 89 | + 'correcte' => 'correcte', |
|
| 90 | 90 | |
| 91 | - // D |
|
| 92 | - 'date_aujourdhui' => 'aujourd’hui', |
|
| 93 | - 'date_avant_jc' => 'av. J.C.', |
|
| 94 | - 'date_dans' => 'dans @delai@', |
|
| 95 | - 'date_de_mois_1' => '@j@ @nommois@', |
|
| 96 | - 'date_de_mois_10' => '@j@ @nommois@', |
|
| 97 | - 'date_de_mois_11' => '@j@ @nommois@', |
|
| 98 | - 'date_de_mois_12' => '@j@ @nommois@', |
|
| 99 | - 'date_de_mois_2' => '@j@ @nommois@', |
|
| 100 | - 'date_de_mois_3' => '@j@ @nommois@', |
|
| 101 | - 'date_de_mois_4' => '@j@ @nommois@', |
|
| 102 | - 'date_de_mois_5' => '@j@ @nommois@', |
|
| 103 | - 'date_de_mois_6' => '@j@ @nommois@', |
|
| 104 | - 'date_de_mois_7' => '@j@ @nommois@', |
|
| 105 | - 'date_de_mois_8' => '@j@ @nommois@', |
|
| 106 | - 'date_de_mois_9' => '@j@ @nommois@', |
|
| 107 | - 'date_demain' => 'demain', |
|
| 108 | - 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 109 | - 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | - 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | - 'date_fmt_jour_heure' => '@jour@ à @heure@', |
|
| 112 | - 'date_fmt_jour_heure_debut_fin' => 'le @jour@ de @heure_debut@ à @heure_fin@', |
|
| 113 | - 'date_fmt_jour_heure_debut_fin_abbr' => 'le @dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtstart@@heure_fin@@dtend@', |
|
| 114 | - 'date_fmt_jour_mois' => '@jour@ @nommois@', |
|
| 115 | - 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', |
|
| 116 | - 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 117 | - 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | - 'date_fmt_nomjour_date' => 'le @nomjour@ @date@', |
|
| 119 | - 'date_fmt_periode' => 'Du @date_debut@ au @date_fin@', |
|
| 120 | - 'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@', |
|
| 121 | - 'date_fmt_periode_from' => 'Du', |
|
| 122 | - 'date_fmt_periode_to' => 'au', |
|
| 123 | - 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | - 'date_heures' => 'heures', |
|
| 125 | - 'date_hier' => 'hier', |
|
| 126 | - 'date_il_y_a' => 'il y a @delai@', |
|
| 127 | - 'date_jnum1' => '1er', |
|
| 128 | - 'date_jnum10' => '10', |
|
| 129 | - 'date_jnum11' => '11', |
|
| 130 | - 'date_jnum12' => '12', |
|
| 131 | - 'date_jnum13' => '13', |
|
| 132 | - 'date_jnum14' => '14', |
|
| 133 | - 'date_jnum15' => '15', |
|
| 134 | - 'date_jnum16' => '16', |
|
| 135 | - 'date_jnum17' => '17', |
|
| 136 | - 'date_jnum18' => '18', |
|
| 137 | - 'date_jnum19' => '19', |
|
| 138 | - 'date_jnum2' => '2', |
|
| 139 | - 'date_jnum20' => '20', |
|
| 140 | - 'date_jnum21' => '21', |
|
| 141 | - 'date_jnum22' => '22', |
|
| 142 | - 'date_jnum23' => '23', |
|
| 143 | - 'date_jnum24' => '24', |
|
| 144 | - 'date_jnum25' => '25', |
|
| 145 | - 'date_jnum26' => '26', |
|
| 146 | - 'date_jnum27' => '27', |
|
| 147 | - 'date_jnum28' => '28', |
|
| 148 | - 'date_jnum29' => '29', |
|
| 149 | - 'date_jnum3' => '3', |
|
| 150 | - 'date_jnum30' => '30', |
|
| 151 | - 'date_jnum31' => '31', |
|
| 152 | - 'date_jnum4' => '4', |
|
| 153 | - 'date_jnum5' => '5', |
|
| 154 | - 'date_jnum6' => '6', |
|
| 155 | - 'date_jnum7' => '7', |
|
| 156 | - 'date_jnum8' => '8', |
|
| 157 | - 'date_jnum9' => '9', |
|
| 158 | - 'date_jour_1' => 'dimanche', |
|
| 159 | - 'date_jour_1_abbr' => 'dim.', |
|
| 160 | - 'date_jour_1_initiale' => 'd.', |
|
| 161 | - 'date_jour_2' => 'lundi', |
|
| 162 | - 'date_jour_2_abbr' => 'lun.', |
|
| 163 | - 'date_jour_2_initiale' => 'l.', |
|
| 164 | - 'date_jour_3' => 'mardi', |
|
| 165 | - 'date_jour_3_abbr' => 'mar.', |
|
| 166 | - 'date_jour_3_initiale' => 'm.', |
|
| 167 | - 'date_jour_4' => 'mercredi', |
|
| 168 | - 'date_jour_4_abbr' => 'mer.', |
|
| 169 | - 'date_jour_4_initiale' => 'm.', |
|
| 170 | - 'date_jour_5' => 'jeudi', |
|
| 171 | - 'date_jour_5_abbr' => 'jeu.', |
|
| 172 | - 'date_jour_5_initiale' => 'j.', |
|
| 173 | - 'date_jour_6' => 'vendredi', |
|
| 174 | - 'date_jour_6_abbr' => 'ven.', |
|
| 175 | - 'date_jour_6_initiale' => 'v.', |
|
| 176 | - 'date_jour_7' => 'samedi', |
|
| 177 | - 'date_jour_7_abbr' => 'sam.', |
|
| 178 | - 'date_jour_7_initiale' => 's.', |
|
| 179 | - 'date_jours' => 'jours', |
|
| 180 | - 'date_minutes' => 'minutes', |
|
| 181 | - 'date_mois' => 'mois', |
|
| 182 | - 'date_mois_1' => 'janvier', |
|
| 183 | - 'date_mois_10' => 'octobre', |
|
| 184 | - 'date_mois_10_abbr' => 'oct.', |
|
| 185 | - 'date_mois_11' => 'novembre', |
|
| 186 | - 'date_mois_11_abbr' => 'nov.', |
|
| 187 | - 'date_mois_12' => 'décembre', |
|
| 188 | - 'date_mois_12_abbr' => 'déc.', |
|
| 189 | - 'date_mois_1_abbr' => 'janv.', |
|
| 190 | - 'date_mois_2' => 'février', |
|
| 191 | - 'date_mois_2_abbr' => 'févr.', |
|
| 192 | - 'date_mois_3' => 'mars', |
|
| 193 | - 'date_mois_3_abbr' => 'mars', |
|
| 194 | - 'date_mois_4' => 'avril', |
|
| 195 | - 'date_mois_4_abbr' => 'avr.', |
|
| 196 | - 'date_mois_5' => 'mai', |
|
| 197 | - 'date_mois_5_abbr' => 'mai', |
|
| 198 | - 'date_mois_6' => 'juin', |
|
| 199 | - 'date_mois_6_abbr' => 'juin', |
|
| 200 | - 'date_mois_7' => 'juillet', |
|
| 201 | - 'date_mois_7_abbr' => 'juil.', |
|
| 202 | - 'date_mois_8' => 'août', |
|
| 203 | - 'date_mois_8_abbr' => 'août', |
|
| 204 | - 'date_mois_9' => 'septembre', |
|
| 205 | - 'date_mois_9_abbr' => 'sept.', |
|
| 206 | - 'date_saison_1' => 'hiver', |
|
| 207 | - 'date_saison_2' => 'printemps', |
|
| 208 | - 'date_saison_3' => 'été', |
|
| 209 | - 'date_saison_4' => 'automne', |
|
| 210 | - 'date_secondes' => 'secondes', |
|
| 211 | - 'date_semaines' => 'semaines', |
|
| 212 | - 'date_un_mois' => 'mois', |
|
| 213 | - 'date_une_heure' => 'heure', |
|
| 214 | - 'date_une_minute' => 'minute', |
|
| 215 | - 'date_une_seconde' => 'seconde', |
|
| 216 | - 'date_une_semaine' => 'semaine', |
|
| 217 | - 'dirs_commencer' => ' afin de commencer réellement l’installation', |
|
| 218 | - 'dirs_preliminaire' => 'Préliminaire : <b>Régler les droits d’accès</b>', |
|
| 219 | - 'dirs_probleme_droits' => 'Problème de droits d’accès', |
|
| 220 | - 'dirs_repertoires_absents' => '<p><b>Les répertoires suivants n’ont pas été trouvés :</b></p><ul>@bad_dirs@.</ul> |
|
| 91 | + // D |
|
| 92 | + 'date_aujourdhui' => 'aujourd’hui', |
|
| 93 | + 'date_avant_jc' => 'av. J.C.', |
|
| 94 | + 'date_dans' => 'dans @delai@', |
|
| 95 | + 'date_de_mois_1' => '@j@ @nommois@', |
|
| 96 | + 'date_de_mois_10' => '@j@ @nommois@', |
|
| 97 | + 'date_de_mois_11' => '@j@ @nommois@', |
|
| 98 | + 'date_de_mois_12' => '@j@ @nommois@', |
|
| 99 | + 'date_de_mois_2' => '@j@ @nommois@', |
|
| 100 | + 'date_de_mois_3' => '@j@ @nommois@', |
|
| 101 | + 'date_de_mois_4' => '@j@ @nommois@', |
|
| 102 | + 'date_de_mois_5' => '@j@ @nommois@', |
|
| 103 | + 'date_de_mois_6' => '@j@ @nommois@', |
|
| 104 | + 'date_de_mois_7' => '@j@ @nommois@', |
|
| 105 | + 'date_de_mois_8' => '@j@ @nommois@', |
|
| 106 | + 'date_de_mois_9' => '@j@ @nommois@', |
|
| 107 | + 'date_demain' => 'demain', |
|
| 108 | + 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 109 | + 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | + 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | + 'date_fmt_jour_heure' => '@jour@ à @heure@', |
|
| 112 | + 'date_fmt_jour_heure_debut_fin' => 'le @jour@ de @heure_debut@ à @heure_fin@', |
|
| 113 | + 'date_fmt_jour_heure_debut_fin_abbr' => 'le @dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtstart@@heure_fin@@dtend@', |
|
| 114 | + 'date_fmt_jour_mois' => '@jour@ @nommois@', |
|
| 115 | + 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', |
|
| 116 | + 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 117 | + 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | + 'date_fmt_nomjour_date' => 'le @nomjour@ @date@', |
|
| 119 | + 'date_fmt_periode' => 'Du @date_debut@ au @date_fin@', |
|
| 120 | + 'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@', |
|
| 121 | + 'date_fmt_periode_from' => 'Du', |
|
| 122 | + 'date_fmt_periode_to' => 'au', |
|
| 123 | + 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | + 'date_heures' => 'heures', |
|
| 125 | + 'date_hier' => 'hier', |
|
| 126 | + 'date_il_y_a' => 'il y a @delai@', |
|
| 127 | + 'date_jnum1' => '1er', |
|
| 128 | + 'date_jnum10' => '10', |
|
| 129 | + 'date_jnum11' => '11', |
|
| 130 | + 'date_jnum12' => '12', |
|
| 131 | + 'date_jnum13' => '13', |
|
| 132 | + 'date_jnum14' => '14', |
|
| 133 | + 'date_jnum15' => '15', |
|
| 134 | + 'date_jnum16' => '16', |
|
| 135 | + 'date_jnum17' => '17', |
|
| 136 | + 'date_jnum18' => '18', |
|
| 137 | + 'date_jnum19' => '19', |
|
| 138 | + 'date_jnum2' => '2', |
|
| 139 | + 'date_jnum20' => '20', |
|
| 140 | + 'date_jnum21' => '21', |
|
| 141 | + 'date_jnum22' => '22', |
|
| 142 | + 'date_jnum23' => '23', |
|
| 143 | + 'date_jnum24' => '24', |
|
| 144 | + 'date_jnum25' => '25', |
|
| 145 | + 'date_jnum26' => '26', |
|
| 146 | + 'date_jnum27' => '27', |
|
| 147 | + 'date_jnum28' => '28', |
|
| 148 | + 'date_jnum29' => '29', |
|
| 149 | + 'date_jnum3' => '3', |
|
| 150 | + 'date_jnum30' => '30', |
|
| 151 | + 'date_jnum31' => '31', |
|
| 152 | + 'date_jnum4' => '4', |
|
| 153 | + 'date_jnum5' => '5', |
|
| 154 | + 'date_jnum6' => '6', |
|
| 155 | + 'date_jnum7' => '7', |
|
| 156 | + 'date_jnum8' => '8', |
|
| 157 | + 'date_jnum9' => '9', |
|
| 158 | + 'date_jour_1' => 'dimanche', |
|
| 159 | + 'date_jour_1_abbr' => 'dim.', |
|
| 160 | + 'date_jour_1_initiale' => 'd.', |
|
| 161 | + 'date_jour_2' => 'lundi', |
|
| 162 | + 'date_jour_2_abbr' => 'lun.', |
|
| 163 | + 'date_jour_2_initiale' => 'l.', |
|
| 164 | + 'date_jour_3' => 'mardi', |
|
| 165 | + 'date_jour_3_abbr' => 'mar.', |
|
| 166 | + 'date_jour_3_initiale' => 'm.', |
|
| 167 | + 'date_jour_4' => 'mercredi', |
|
| 168 | + 'date_jour_4_abbr' => 'mer.', |
|
| 169 | + 'date_jour_4_initiale' => 'm.', |
|
| 170 | + 'date_jour_5' => 'jeudi', |
|
| 171 | + 'date_jour_5_abbr' => 'jeu.', |
|
| 172 | + 'date_jour_5_initiale' => 'j.', |
|
| 173 | + 'date_jour_6' => 'vendredi', |
|
| 174 | + 'date_jour_6_abbr' => 'ven.', |
|
| 175 | + 'date_jour_6_initiale' => 'v.', |
|
| 176 | + 'date_jour_7' => 'samedi', |
|
| 177 | + 'date_jour_7_abbr' => 'sam.', |
|
| 178 | + 'date_jour_7_initiale' => 's.', |
|
| 179 | + 'date_jours' => 'jours', |
|
| 180 | + 'date_minutes' => 'minutes', |
|
| 181 | + 'date_mois' => 'mois', |
|
| 182 | + 'date_mois_1' => 'janvier', |
|
| 183 | + 'date_mois_10' => 'octobre', |
|
| 184 | + 'date_mois_10_abbr' => 'oct.', |
|
| 185 | + 'date_mois_11' => 'novembre', |
|
| 186 | + 'date_mois_11_abbr' => 'nov.', |
|
| 187 | + 'date_mois_12' => 'décembre', |
|
| 188 | + 'date_mois_12_abbr' => 'déc.', |
|
| 189 | + 'date_mois_1_abbr' => 'janv.', |
|
| 190 | + 'date_mois_2' => 'février', |
|
| 191 | + 'date_mois_2_abbr' => 'févr.', |
|
| 192 | + 'date_mois_3' => 'mars', |
|
| 193 | + 'date_mois_3_abbr' => 'mars', |
|
| 194 | + 'date_mois_4' => 'avril', |
|
| 195 | + 'date_mois_4_abbr' => 'avr.', |
|
| 196 | + 'date_mois_5' => 'mai', |
|
| 197 | + 'date_mois_5_abbr' => 'mai', |
|
| 198 | + 'date_mois_6' => 'juin', |
|
| 199 | + 'date_mois_6_abbr' => 'juin', |
|
| 200 | + 'date_mois_7' => 'juillet', |
|
| 201 | + 'date_mois_7_abbr' => 'juil.', |
|
| 202 | + 'date_mois_8' => 'août', |
|
| 203 | + 'date_mois_8_abbr' => 'août', |
|
| 204 | + 'date_mois_9' => 'septembre', |
|
| 205 | + 'date_mois_9_abbr' => 'sept.', |
|
| 206 | + 'date_saison_1' => 'hiver', |
|
| 207 | + 'date_saison_2' => 'printemps', |
|
| 208 | + 'date_saison_3' => 'été', |
|
| 209 | + 'date_saison_4' => 'automne', |
|
| 210 | + 'date_secondes' => 'secondes', |
|
| 211 | + 'date_semaines' => 'semaines', |
|
| 212 | + 'date_un_mois' => 'mois', |
|
| 213 | + 'date_une_heure' => 'heure', |
|
| 214 | + 'date_une_minute' => 'minute', |
|
| 215 | + 'date_une_seconde' => 'seconde', |
|
| 216 | + 'date_une_semaine' => 'semaine', |
|
| 217 | + 'dirs_commencer' => ' afin de commencer réellement l’installation', |
|
| 218 | + 'dirs_preliminaire' => 'Préliminaire : <b>Régler les droits d’accès</b>', |
|
| 219 | + 'dirs_probleme_droits' => 'Problème de droits d’accès', |
|
| 220 | + 'dirs_repertoires_absents' => '<p><b>Les répertoires suivants n’ont pas été trouvés :</b></p><ul>@bad_dirs@.</ul> |
|
| 221 | 221 | <p>Il est probable que cela soit dû à un problème de mauvaise mise en majuscules ou minuscules. |
| 222 | 222 | Vérifie que les minuscules et majuscules de ces répertoires concordent bien avec ce qui est affiché |
| 223 | 223 | ci-dessus ; si ce n’est pas le cas, renomme les répertoires avec ton logiciel FTP de façon à corriger l’erreur.</p> |
| 224 | 224 | <p>Une fois cette manipulation effectuée, tu pourras ', |
| 225 | - 'dirs_repertoires_suivants' => '<p><b>Les répertoires suivants ne sont pas accessibles en écriture :</b></p> <ul>@bad_dirs@</ul> |
|
| 225 | + 'dirs_repertoires_suivants' => '<p><b>Les répertoires suivants ne sont pas accessibles en écriture :</b></p> <ul>@bad_dirs@</ul> |
|
| 226 | 226 | <p>Pour y remédier, utilise ton client FTP afin de régler les droits d’accès de chacun |
| 227 | 227 | de ces répertoires. La procédure est expliquée en détail dans le guide d’installation.</p> |
| 228 | 228 | <p>Une fois cette manipulation effectuée, tu pourras ', |
| 229 | - 'double_occurrence' => 'Double occurrence de @balise@', |
|
| 229 | + 'double_occurrence' => 'Double occurrence de @balise@', |
|
| 230 | 230 | |
| 231 | - // E |
|
| 232 | - 'en_cours' => 'en cours', |
|
| 233 | - 'envoi_via_le_site' => 'Envoi via le site', |
|
| 234 | - 'erreur' => 'Erreur', |
|
| 235 | - 'erreur_balise_non_fermee' => 'dernière balise non refermée :', |
|
| 236 | - 'erreur_technique_ajaxform' => 'Ooops. Une erreur innatendue a empêché de soumettre le formulaire. Tu peux essayer à nouveau.', |
|
| 237 | - 'erreur_technique_enregistrement_champs' => 'Une erreur technique a empêché l’enregistrement correct du champ @champs@.', |
|
| 238 | - 'erreur_technique_enregistrement_impossible' => 'Une erreur technique a empêché l’enregistrement.', |
|
| 239 | - 'erreur_texte' => 'erreur(s)', |
|
| 240 | - 'etape' => 'Étape', |
|
| 231 | + // E |
|
| 232 | + 'en_cours' => 'en cours', |
|
| 233 | + 'envoi_via_le_site' => 'Envoi via le site', |
|
| 234 | + 'erreur' => 'Erreur', |
|
| 235 | + 'erreur_balise_non_fermee' => 'dernière balise non refermée :', |
|
| 236 | + 'erreur_technique_ajaxform' => 'Ooops. Une erreur innatendue a empêché de soumettre le formulaire. Tu peux essayer à nouveau.', |
|
| 237 | + 'erreur_technique_enregistrement_champs' => 'Une erreur technique a empêché l’enregistrement correct du champ @champs@.', |
|
| 238 | + 'erreur_technique_enregistrement_impossible' => 'Une erreur technique a empêché l’enregistrement.', |
|
| 239 | + 'erreur_texte' => 'erreur(s)', |
|
| 240 | + 'etape' => 'Étape', |
|
| 241 | 241 | |
| 242 | - // F |
|
| 243 | - 'fichier_introuvable' => 'Fichier @fichier@ introuvable.', |
|
| 244 | - 'fonction_introuvable' => 'Fonction @fonction@() introuvable.', |
|
| 245 | - 'form_auteur_confirmation' => 'Confirme ton adresse email', |
|
| 246 | - 'form_auteur_email_modifie' => 'Ton adresse email a été modifiée.', |
|
| 247 | - 'form_auteur_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d’être envoyé à @email@. Visite l’adresse Web mentionnée dans ce courrier pour valider ton adresse mail.', |
|
| 248 | - 'form_auteur_mail_confirmation' => 'Salut, |
|
| 242 | + // F |
|
| 243 | + 'fichier_introuvable' => 'Fichier @fichier@ introuvable.', |
|
| 244 | + 'fonction_introuvable' => 'Fonction @fonction@() introuvable.', |
|
| 245 | + 'form_auteur_confirmation' => 'Confirme ton adresse email', |
|
| 246 | + 'form_auteur_email_modifie' => 'Ton adresse email a été modifiée.', |
|
| 247 | + 'form_auteur_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d’être envoyé à @email@. Visite l’adresse Web mentionnée dans ce courrier pour valider ton adresse mail.', |
|
| 248 | + 'form_auteur_mail_confirmation' => 'Salut, |
|
| 249 | 249 | |
| 250 | 250 | Tu as demandé à changer ton adresse email. |
| 251 | 251 | Pour confirmer ta nouvelle adresse, il suffit de te connecter à |
@@ -254,346 +254,346 @@ discard block |
||
| 254 | 254 | |
| 255 | 255 | @url@ |
| 256 | 256 | ', |
| 257 | - 'form_deja_inscrit' => 'Tu es déjà inscrit.', |
|
| 258 | - 'form_email_non_valide' => 'Ton adresse email n’est pas valide.', |
|
| 259 | - 'form_forum_access_refuse' => 'Tu n’as plus accès à ce site.', |
|
| 260 | - 'form_forum_bonjour' => 'Salut @nom@,', |
|
| 261 | - 'form_forum_confirmer_email' => 'Pour confirmer ton adresse email, va à cette adresse : @url_confirm@', |
|
| 262 | - 'form_forum_email_deja_enregistre' => 'Cette adresse email est déjà enregistrée, tu peux donc utiliser ton mot de passe habituel.', |
|
| 263 | - 'form_forum_identifiant_mail' => 'Ton nouvel identifiant vient de t’être envoyé par email.', |
|
| 264 | - 'form_forum_identifiants' => 'Identifiants personnels', |
|
| 265 | - 'form_forum_indiquer_nom_email' => 'Indique ici ton nom et ton adresse email. Ton identifiant personnel te parviendra rapidement, par courrier électronique.', |
|
| 266 | - 'form_forum_login' => 'login :', |
|
| 267 | - 'form_forum_message_auto' => '(ceci est un message automatique)', |
|
| 268 | - 'form_forum_pass' => 'mot de passe :', |
|
| 269 | - 'form_forum_probleme_mail' => 'Problème de mail : l’identifiant ne peut pas être envoyé.', |
|
| 270 | - 'form_forum_voici1' => 'Voici tes identifiants pour pouvoir participer à la vie du site "@nom_site_spip@" (@adresse_site@) :', |
|
| 271 | - 'form_forum_voici2' => 'Voici tes identifiants pour proposer des articles sur |
|
| 257 | + 'form_deja_inscrit' => 'Tu es déjà inscrit.', |
|
| 258 | + 'form_email_non_valide' => 'Ton adresse email n’est pas valide.', |
|
| 259 | + 'form_forum_access_refuse' => 'Tu n’as plus accès à ce site.', |
|
| 260 | + 'form_forum_bonjour' => 'Salut @nom@,', |
|
| 261 | + 'form_forum_confirmer_email' => 'Pour confirmer ton adresse email, va à cette adresse : @url_confirm@', |
|
| 262 | + 'form_forum_email_deja_enregistre' => 'Cette adresse email est déjà enregistrée, tu peux donc utiliser ton mot de passe habituel.', |
|
| 263 | + 'form_forum_identifiant_mail' => 'Ton nouvel identifiant vient de t’être envoyé par email.', |
|
| 264 | + 'form_forum_identifiants' => 'Identifiants personnels', |
|
| 265 | + 'form_forum_indiquer_nom_email' => 'Indique ici ton nom et ton adresse email. Ton identifiant personnel te parviendra rapidement, par courrier électronique.', |
|
| 266 | + 'form_forum_login' => 'login :', |
|
| 267 | + 'form_forum_message_auto' => '(ceci est un message automatique)', |
|
| 268 | + 'form_forum_pass' => 'mot de passe :', |
|
| 269 | + 'form_forum_probleme_mail' => 'Problème de mail : l’identifiant ne peut pas être envoyé.', |
|
| 270 | + 'form_forum_voici1' => 'Voici tes identifiants pour pouvoir participer à la vie du site "@nom_site_spip@" (@adresse_site@) :', |
|
| 271 | + 'form_forum_voici2' => 'Voici tes identifiants pour proposer des articles sur |
|
| 272 | 272 | le site "@nom_site_spip@" (@adresse_login@) :', |
| 273 | - 'form_indiquer_email' => 'Indique ton adresse email.', |
|
| 274 | - 'form_indiquer_nom' => 'Indique ton nom.', |
|
| 275 | - 'form_indiquer_nom_site' => 'Indique le nom de ton site.', |
|
| 276 | - 'form_pet_deja_enregistre' => 'Ce site est déjà enregistré', |
|
| 277 | - 'form_pet_signature_pasprise' => 'Ta signature n’est pas prise en compte.', |
|
| 278 | - 'form_prop_confirmer_envoi' => 'Confirmer l’envoi', |
|
| 279 | - 'form_prop_description' => 'Description/commentaire', |
|
| 280 | - 'form_prop_enregistre' => 'Ta proposition est enregistrée, elle apparaîtra en ligne après validation par les responsables de ce site.', |
|
| 281 | - 'form_prop_envoyer' => 'Envoyer un message', |
|
| 282 | - 'form_prop_indiquer_email' => 'Indiquer une adresse email valide', |
|
| 283 | - 'form_prop_indiquer_nom_site' => 'Indiquer le nom du site.', |
|
| 284 | - 'form_prop_indiquer_sujet' => 'Indiquer un sujet', |
|
| 285 | - 'form_prop_message_envoye' => 'Message envoyé', |
|
| 286 | - 'form_prop_non_enregistre' => 'Ta proposition n’a pas été enregistrée.', |
|
| 287 | - 'form_prop_sujet' => 'Sujet', |
|
| 288 | - 'form_prop_url_site' => 'Adresse URL du site', |
|
| 289 | - 'format_date_attendu' => 'Saisir une date au format jj/mm/aaaa.', |
|
| 290 | - 'format_date_incorrecte' => 'La date ou son format est incorrect', |
|
| 291 | - 'format_heure_attendu' => 'Saisir une heure au format hh:mm.', |
|
| 292 | - 'format_heure_incorrecte' => 'L’heure ou son format est incorrect', |
|
| 293 | - 'forum_non_inscrit' => 'Tu n’es pas inscrit, ou l’adresse ou le mot de passe sont erronés.', |
|
| 294 | - 'forum_par_auteur' => 'par @auteur@', |
|
| 295 | - 'forum_titre_erreur' => 'Erreur...', |
|
| 273 | + 'form_indiquer_email' => 'Indique ton adresse email.', |
|
| 274 | + 'form_indiquer_nom' => 'Indique ton nom.', |
|
| 275 | + 'form_indiquer_nom_site' => 'Indique le nom de ton site.', |
|
| 276 | + 'form_pet_deja_enregistre' => 'Ce site est déjà enregistré', |
|
| 277 | + 'form_pet_signature_pasprise' => 'Ta signature n’est pas prise en compte.', |
|
| 278 | + 'form_prop_confirmer_envoi' => 'Confirmer l’envoi', |
|
| 279 | + 'form_prop_description' => 'Description/commentaire', |
|
| 280 | + 'form_prop_enregistre' => 'Ta proposition est enregistrée, elle apparaîtra en ligne après validation par les responsables de ce site.', |
|
| 281 | + 'form_prop_envoyer' => 'Envoyer un message', |
|
| 282 | + 'form_prop_indiquer_email' => 'Indiquer une adresse email valide', |
|
| 283 | + 'form_prop_indiquer_nom_site' => 'Indiquer le nom du site.', |
|
| 284 | + 'form_prop_indiquer_sujet' => 'Indiquer un sujet', |
|
| 285 | + 'form_prop_message_envoye' => 'Message envoyé', |
|
| 286 | + 'form_prop_non_enregistre' => 'Ta proposition n’a pas été enregistrée.', |
|
| 287 | + 'form_prop_sujet' => 'Sujet', |
|
| 288 | + 'form_prop_url_site' => 'Adresse URL du site', |
|
| 289 | + 'format_date_attendu' => 'Saisir une date au format jj/mm/aaaa.', |
|
| 290 | + 'format_date_incorrecte' => 'La date ou son format est incorrect', |
|
| 291 | + 'format_heure_attendu' => 'Saisir une heure au format hh:mm.', |
|
| 292 | + 'format_heure_incorrecte' => 'L’heure ou son format est incorrect', |
|
| 293 | + 'forum_non_inscrit' => 'Tu n’es pas inscrit, ou l’adresse ou le mot de passe sont erronés.', |
|
| 294 | + 'forum_par_auteur' => 'par @auteur@', |
|
| 295 | + 'forum_titre_erreur' => 'Erreur...', |
|
| 296 | 296 | |
| 297 | - // I |
|
| 298 | - 'ical_texte_rss_articles' => 'Le fichier « backend » des articles de ce site se trouve à l’adresse :', |
|
| 299 | - 'ical_texte_rss_articles2' => 'Tu peux également obtenir des fichiers « backend » pour les articles de chaque rubrique du site :', |
|
| 300 | - 'ical_texte_rss_breves' => 'Il existe de plus un fichier contenant les brèves du site. En précisant un numéro de rubrique, tu obtiendras uniquement les brèves de cette rubrique.', |
|
| 301 | - 'icone_a_suivre' => 'À suivre', |
|
| 302 | - 'icone_admin_site' => 'Administration du site', |
|
| 303 | - 'icone_agenda' => 'Agenda', |
|
| 304 | - 'icone_aide_ligne' => 'Aide', |
|
| 305 | - 'icone_articles' => 'Articles', |
|
| 306 | - 'icone_auteurs' => 'Auteurs', |
|
| 307 | - 'icone_brouteur' => 'Navigation rapide', |
|
| 308 | - 'icone_configuration_site' => 'Configuration', |
|
| 309 | - 'icone_configurer_site' => 'Configurer ton site', |
|
| 310 | - 'icone_creer_nouvel_auteur' => 'Créer un nouvel auteur', |
|
| 311 | - 'icone_creer_rubrique' => 'Créer une rubrique', |
|
| 312 | - 'icone_creer_sous_rubrique' => 'Créer une sous-rubrique', |
|
| 313 | - 'icone_deconnecter' => 'Se déconnecter', |
|
| 314 | - 'icone_discussions' => 'Discussions', |
|
| 315 | - 'icone_doc_rubrique' => 'Documents des rubriques', |
|
| 316 | - 'icone_ecrire_article' => 'Écrire un nouvel article', |
|
| 317 | - 'icone_edition_site' => 'Édition', |
|
| 318 | - 'icone_gestion_langues' => 'Gestion des langues', |
|
| 319 | - 'icone_informations_personnelles' => 'Informations personnelles', |
|
| 320 | - 'icone_interface_complet' => 'interface complète', |
|
| 321 | - 'icone_interface_simple' => 'Interface simplifiée', |
|
| 322 | - 'icone_maintenance_site' => 'Maintenance du site', |
|
| 323 | - 'icone_messagerie_personnelle' => 'Messagerie personnelle', |
|
| 324 | - 'icone_repartition_debut' => 'Afficher la répartition depuis le début', |
|
| 325 | - 'icone_rubriques' => 'Rubriques', |
|
| 326 | - 'icone_sauver_site' => 'Sauvegarde du site', |
|
| 327 | - 'icone_site_entier' => 'Tout le site', |
|
| 328 | - 'icone_sites_references' => 'Sites référencés', |
|
| 329 | - 'icone_statistiques' => 'Statistiques du site', |
|
| 330 | - 'icone_suivi_activite' => 'Suivre la vie du site', |
|
| 331 | - 'icone_suivi_actualite' => 'Évolution du site', |
|
| 332 | - 'icone_suivi_pettions' => 'Suivre/gérer les pétitions', |
|
| 333 | - 'icone_suivi_revisions' => 'Modifications des articles', |
|
| 334 | - 'icone_supprimer_document' => 'Supprimer ce document', |
|
| 335 | - 'icone_supprimer_image' => 'Supprimer cette image', |
|
| 336 | - 'icone_tous_articles' => 'Tous tes articles', |
|
| 337 | - 'icone_tous_auteur' => 'Tous les auteurs', |
|
| 338 | - 'icone_tous_visiteur' => 'Tous les visiteurs', |
|
| 339 | - 'icone_visiter_site' => 'Voir le site public', |
|
| 340 | - 'icone_voir_en_ligne' => 'Voir en ligne', |
|
| 341 | - 'img_indisponible' => 'image indisponible', |
|
| 342 | - 'impossible' => 'impossible', |
|
| 343 | - 'info_a_suivre' => 'À SUIVRE »', |
|
| 344 | - 'info_acces_interdit' => 'Accès interdit', |
|
| 345 | - 'info_acces_refuse' => 'Accès refusé', |
|
| 346 | - 'info_action' => 'Action : @action@', |
|
| 347 | - 'info_administrer_rubriques' => 'Tu peux administrer cette rubrique et ses sous-rubriques', |
|
| 348 | - 'info_adresse_non_indiquee' => 'Tu n’as pas indiqué d’adresse à tester !', |
|
| 349 | - 'info_aide' => 'AIDE :', |
|
| 350 | - 'info_ajouter_mot' => 'Ajouter ce mot', |
|
| 351 | - 'info_annonce' => 'ANNONCE', |
|
| 352 | - 'info_annonces_generales' => 'Annonces générales :', |
|
| 353 | - 'info_article_propose' => 'Article proposé', |
|
| 354 | - 'info_article_publie' => 'Article publié', |
|
| 355 | - 'info_article_redaction' => 'Article en cours de rédaction', |
|
| 356 | - 'info_article_refuse' => 'Article refusé', |
|
| 357 | - 'info_article_supprime' => 'Article supprimé', |
|
| 358 | - 'info_articles' => 'Articles', |
|
| 359 | - 'info_articles_a_valider' => 'Les articles à valider', |
|
| 360 | - 'info_articles_nb' => '@nb@ articles', |
|
| 361 | - 'info_articles_proposes' => 'Articles proposés', |
|
| 362 | - 'info_articles_un' => '1 article', |
|
| 363 | - 'info_auteurs_nombre' => 'auteur(s) :', |
|
| 364 | - 'info_authentification_ftp' => 'Authentification (par FTP).', |
|
| 365 | - 'info_breves_2' => 'brèves', |
|
| 366 | - 'info_breves_nb' => '@nb@ brèves', |
|
| 367 | - 'info_breves_un' => '1 brève', |
|
| 368 | - 'info_connexion_refusee' => 'Connexion refusée', |
|
| 369 | - 'info_contact_developpeur' => 'Contacte un développeur.', |
|
| 370 | - 'info_contenance' => 'Ce site contient :', |
|
| 371 | - 'info_contribution' => 'contributions', |
|
| 372 | - 'info_copyright' => '@spip@ est un logiciel libre distribué @lien_gpl@.', |
|
| 373 | - 'info_copyright_doc' => 'Pour plus d’informations, voir le site <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 374 | - 'info_copyright_gpl' => 'sous licence GPL', |
|
| 375 | - 'info_cours_edition' => 'En cours de modification', |
|
| 376 | - 'info_creer_repertoire' => 'Crée un fichier ou un répertoire nommé :', |
|
| 377 | - 'info_creer_repertoire_2' => 'à l’intérieur du sous-répertoire <b>@repertoire@</b>, puis :', |
|
| 378 | - 'info_creer_vignette' => 'création automatique de la vignette', |
|
| 379 | - 'info_creerdansrubrique_non_autorise' => 'Tu n’as pas de droits suffisants pour créer un contenu dans cette rubrique', |
|
| 380 | - 'info_deplier' => 'Déplier', |
|
| 381 | - 'info_descriptif_nombre' => 'descriptif(s) :', |
|
| 382 | - 'info_description' => 'Description :', |
|
| 383 | - 'info_description_2' => 'Description :', |
|
| 384 | - 'info_dimension' => 'Dimensions :', |
|
| 385 | - 'info_documents_nb' => '@nb@ documents', |
|
| 386 | - 'info_documents_un' => '1 document', |
|
| 387 | - 'info_ecire_message_prive' => 'Écrire un message privé', |
|
| 388 | - 'info_email_invalide' => 'Adresse email invalide.', |
|
| 389 | - 'info_en_cours_validation' => 'Tes articles en cours de rédaction', |
|
| 390 | - 'info_en_ligne' => 'Actuellement en ligne :', |
|
| 391 | - 'info_envoyer_message_prive' => 'Envoyer un message privé à cet auteur', |
|
| 392 | - 'info_erreur_requete' => 'Erreur dans la requête :', |
|
| 393 | - 'info_erreur_squelette2' => 'Aucun squelette <b>@fichier@</b> n’est disponible...', |
|
| 394 | - 'info_erreur_systeme' => 'Erreur système (errno @errsys@)', |
|
| 395 | - 'info_erreur_systeme2' => 'Le disque dur est peut-être plein, ou la base de données endommagée.<br /> |
|
| 297 | + // I |
|
| 298 | + 'ical_texte_rss_articles' => 'Le fichier « backend » des articles de ce site se trouve à l’adresse :', |
|
| 299 | + 'ical_texte_rss_articles2' => 'Tu peux également obtenir des fichiers « backend » pour les articles de chaque rubrique du site :', |
|
| 300 | + 'ical_texte_rss_breves' => 'Il existe de plus un fichier contenant les brèves du site. En précisant un numéro de rubrique, tu obtiendras uniquement les brèves de cette rubrique.', |
|
| 301 | + 'icone_a_suivre' => 'À suivre', |
|
| 302 | + 'icone_admin_site' => 'Administration du site', |
|
| 303 | + 'icone_agenda' => 'Agenda', |
|
| 304 | + 'icone_aide_ligne' => 'Aide', |
|
| 305 | + 'icone_articles' => 'Articles', |
|
| 306 | + 'icone_auteurs' => 'Auteurs', |
|
| 307 | + 'icone_brouteur' => 'Navigation rapide', |
|
| 308 | + 'icone_configuration_site' => 'Configuration', |
|
| 309 | + 'icone_configurer_site' => 'Configurer ton site', |
|
| 310 | + 'icone_creer_nouvel_auteur' => 'Créer un nouvel auteur', |
|
| 311 | + 'icone_creer_rubrique' => 'Créer une rubrique', |
|
| 312 | + 'icone_creer_sous_rubrique' => 'Créer une sous-rubrique', |
|
| 313 | + 'icone_deconnecter' => 'Se déconnecter', |
|
| 314 | + 'icone_discussions' => 'Discussions', |
|
| 315 | + 'icone_doc_rubrique' => 'Documents des rubriques', |
|
| 316 | + 'icone_ecrire_article' => 'Écrire un nouvel article', |
|
| 317 | + 'icone_edition_site' => 'Édition', |
|
| 318 | + 'icone_gestion_langues' => 'Gestion des langues', |
|
| 319 | + 'icone_informations_personnelles' => 'Informations personnelles', |
|
| 320 | + 'icone_interface_complet' => 'interface complète', |
|
| 321 | + 'icone_interface_simple' => 'Interface simplifiée', |
|
| 322 | + 'icone_maintenance_site' => 'Maintenance du site', |
|
| 323 | + 'icone_messagerie_personnelle' => 'Messagerie personnelle', |
|
| 324 | + 'icone_repartition_debut' => 'Afficher la répartition depuis le début', |
|
| 325 | + 'icone_rubriques' => 'Rubriques', |
|
| 326 | + 'icone_sauver_site' => 'Sauvegarde du site', |
|
| 327 | + 'icone_site_entier' => 'Tout le site', |
|
| 328 | + 'icone_sites_references' => 'Sites référencés', |
|
| 329 | + 'icone_statistiques' => 'Statistiques du site', |
|
| 330 | + 'icone_suivi_activite' => 'Suivre la vie du site', |
|
| 331 | + 'icone_suivi_actualite' => 'Évolution du site', |
|
| 332 | + 'icone_suivi_pettions' => 'Suivre/gérer les pétitions', |
|
| 333 | + 'icone_suivi_revisions' => 'Modifications des articles', |
|
| 334 | + 'icone_supprimer_document' => 'Supprimer ce document', |
|
| 335 | + 'icone_supprimer_image' => 'Supprimer cette image', |
|
| 336 | + 'icone_tous_articles' => 'Tous tes articles', |
|
| 337 | + 'icone_tous_auteur' => 'Tous les auteurs', |
|
| 338 | + 'icone_tous_visiteur' => 'Tous les visiteurs', |
|
| 339 | + 'icone_visiter_site' => 'Voir le site public', |
|
| 340 | + 'icone_voir_en_ligne' => 'Voir en ligne', |
|
| 341 | + 'img_indisponible' => 'image indisponible', |
|
| 342 | + 'impossible' => 'impossible', |
|
| 343 | + 'info_a_suivre' => 'À SUIVRE »', |
|
| 344 | + 'info_acces_interdit' => 'Accès interdit', |
|
| 345 | + 'info_acces_refuse' => 'Accès refusé', |
|
| 346 | + 'info_action' => 'Action : @action@', |
|
| 347 | + 'info_administrer_rubriques' => 'Tu peux administrer cette rubrique et ses sous-rubriques', |
|
| 348 | + 'info_adresse_non_indiquee' => 'Tu n’as pas indiqué d’adresse à tester !', |
|
| 349 | + 'info_aide' => 'AIDE :', |
|
| 350 | + 'info_ajouter_mot' => 'Ajouter ce mot', |
|
| 351 | + 'info_annonce' => 'ANNONCE', |
|
| 352 | + 'info_annonces_generales' => 'Annonces générales :', |
|
| 353 | + 'info_article_propose' => 'Article proposé', |
|
| 354 | + 'info_article_publie' => 'Article publié', |
|
| 355 | + 'info_article_redaction' => 'Article en cours de rédaction', |
|
| 356 | + 'info_article_refuse' => 'Article refusé', |
|
| 357 | + 'info_article_supprime' => 'Article supprimé', |
|
| 358 | + 'info_articles' => 'Articles', |
|
| 359 | + 'info_articles_a_valider' => 'Les articles à valider', |
|
| 360 | + 'info_articles_nb' => '@nb@ articles', |
|
| 361 | + 'info_articles_proposes' => 'Articles proposés', |
|
| 362 | + 'info_articles_un' => '1 article', |
|
| 363 | + 'info_auteurs_nombre' => 'auteur(s) :', |
|
| 364 | + 'info_authentification_ftp' => 'Authentification (par FTP).', |
|
| 365 | + 'info_breves_2' => 'brèves', |
|
| 366 | + 'info_breves_nb' => '@nb@ brèves', |
|
| 367 | + 'info_breves_un' => '1 brève', |
|
| 368 | + 'info_connexion_refusee' => 'Connexion refusée', |
|
| 369 | + 'info_contact_developpeur' => 'Contacte un développeur.', |
|
| 370 | + 'info_contenance' => 'Ce site contient :', |
|
| 371 | + 'info_contribution' => 'contributions', |
|
| 372 | + 'info_copyright' => '@spip@ est un logiciel libre distribué @lien_gpl@.', |
|
| 373 | + 'info_copyright_doc' => 'Pour plus d’informations, voir le site <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 374 | + 'info_copyright_gpl' => 'sous licence GPL', |
|
| 375 | + 'info_cours_edition' => 'En cours de modification', |
|
| 376 | + 'info_creer_repertoire' => 'Crée un fichier ou un répertoire nommé :', |
|
| 377 | + 'info_creer_repertoire_2' => 'à l’intérieur du sous-répertoire <b>@repertoire@</b>, puis :', |
|
| 378 | + 'info_creer_vignette' => 'création automatique de la vignette', |
|
| 379 | + 'info_creerdansrubrique_non_autorise' => 'Tu n’as pas de droits suffisants pour créer un contenu dans cette rubrique', |
|
| 380 | + 'info_deplier' => 'Déplier', |
|
| 381 | + 'info_descriptif_nombre' => 'descriptif(s) :', |
|
| 382 | + 'info_description' => 'Description :', |
|
| 383 | + 'info_description_2' => 'Description :', |
|
| 384 | + 'info_dimension' => 'Dimensions :', |
|
| 385 | + 'info_documents_nb' => '@nb@ documents', |
|
| 386 | + 'info_documents_un' => '1 document', |
|
| 387 | + 'info_ecire_message_prive' => 'Écrire un message privé', |
|
| 388 | + 'info_email_invalide' => 'Adresse email invalide.', |
|
| 389 | + 'info_en_cours_validation' => 'Tes articles en cours de rédaction', |
|
| 390 | + 'info_en_ligne' => 'Actuellement en ligne :', |
|
| 391 | + 'info_envoyer_message_prive' => 'Envoyer un message privé à cet auteur', |
|
| 392 | + 'info_erreur_requete' => 'Erreur dans la requête :', |
|
| 393 | + 'info_erreur_squelette2' => 'Aucun squelette <b>@fichier@</b> n’est disponible...', |
|
| 394 | + 'info_erreur_systeme' => 'Erreur système (errno @errsys@)', |
|
| 395 | + 'info_erreur_systeme2' => 'Le disque dur est peut-être plein, ou la base de données endommagée.<br /> |
|
| 396 | 396 | <span style="color:red;">Essaie de <a href=\'@script@\'>réparer la base</a>, ou contacte ton hébergeur.</span>', |
| 397 | - 'info_fini' => 'C’est fini !', |
|
| 398 | - 'info_format_image' => 'Formats d’images pouvant être utilisées pour créer des vignettes : @gd_formats@.', |
|
| 399 | - 'info_format_non_defini' => 'format non défini', |
|
| 400 | - 'info_grand_ecran' => 'Grand écran', |
|
| 401 | - 'info_image_aide' => 'AIDE', |
|
| 402 | - 'info_image_process_titre' => 'Comment faire de nouveaux signets', |
|
| 403 | - 'info_impossible_lire_page' => '<b>Erreur !</b> Impossible de lire la page <tt><html>@test_proxy@</html></tt> à travers le proxy ', |
|
| 404 | - 'info_installation_systeme_publication' => 'Installation du système de publication...', |
|
| 405 | - 'info_installer_documents' => 'Tu peux installer automatiquement tous les documents contenus dans le dossier @upload@.', |
|
| 406 | - 'info_installer_ftp' => 'En tant qu’administrateur, tu peux installer (par FTP) des fichiers dans le dossier @upload@ pour ensuite les sélectionner directement ici.', |
|
| 407 | - 'info_installer_images' => 'Tu peux installer des images aux formats JPEG, GIF et PNG.', |
|
| 408 | - 'info_installer_images_dossier' => 'Installer des images dans le dossier @upload@ pour pouvoir les sélectionner ici.', |
|
| 409 | - 'info_interface_complete' => 'interface complète', |
|
| 410 | - 'info_interface_simple' => 'Interface simplifiée', |
|
| 411 | - 'info_joindre_document_article' => 'Tu peux joindre à cet article des documents de type', |
|
| 412 | - 'info_joindre_document_rubrique' => 'Tu peux ajouter dans cette rubrique des documents de type', |
|
| 413 | - 'info_joindre_documents_article' => 'Tu peux joindre à ton article des documents de type :', |
|
| 414 | - 'info_l_article' => 'l’article', |
|
| 415 | - 'info_la_breve' => 'la brève', |
|
| 416 | - 'info_la_rubrique' => 'la rubrique', |
|
| 417 | - 'info_langue_principale' => 'Langue principale du site', |
|
| 418 | - 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels', |
|
| 419 | - 'info_les_auteurs_1' => 'par @les_auteurs@', |
|
| 420 | - 'info_logo_format_interdit' => 'Seuls les logos aux formats @formats@ sont autorisés.', |
|
| 421 | - 'info_logo_max_poids' => 'Les logos doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).', |
|
| 422 | - 'info_mail_fournisseur' => '[email protected]', |
|
| 423 | - 'info_message_2' => 'MESSAGE', |
|
| 424 | - 'info_message_supprime' => 'MESSAGE SUPPRIMÉ', |
|
| 425 | - 'info_messages_nb' => '@nb@ messages', |
|
| 426 | - 'info_messages_un' => '1 message', |
|
| 427 | - 'info_mise_en_ligne' => 'Date de mise en ligne :', |
|
| 428 | - 'info_modification_parametres_securite' => 'modifications des paramètres de sécurité', |
|
| 429 | - 'info_mois_courant' => 'Dans le courant du mois :', |
|
| 430 | - 'info_mot_cle_ajoute' => 'Le mot-clé suivant a été ajouté à', |
|
| 431 | - 'info_multi_herit' => 'Langue par défaut', |
|
| 432 | - 'info_multi_langues_soulignees' => 'Les <u>langues soulignées</u> bénéficient d’une traduction totale ou partielle des textes de l’interface. Si tu sélectionnes ces langues, de nombreux éléments du site public (dates, formulaires) seront automatiquement traduits. Pour les langues non soulignées, ces éléments apparaîtront dans la langue principale du site.', |
|
| 433 | - 'info_multilinguisme' => 'Multilinguisme', |
|
| 434 | - 'info_nom_non_utilisateurs_connectes' => 'Ton nom n’apparaît pas dans la liste des utilisateurs connectés.', |
|
| 435 | - 'info_nom_utilisateurs_connectes' => 'Ton nom apparaît dans la liste des utilisateurs connectés.', |
|
| 436 | - 'info_nombre_en_ligne' => 'Actuellement en ligne :', |
|
| 437 | - 'info_non_resultat' => 'Aucun résultat pour "@cherche_mot@"', |
|
| 438 | - 'info_non_utilisation_messagerie' => 'Tu n’utilise pas la messagerie interne de ce site.', |
|
| 439 | - 'info_nouveau_message' => 'TU AS UN NOUVEAU MESSAGE', |
|
| 440 | - 'info_nouveaux_messages' => 'TU AS @total_messages@ NOUVEAUX MESSAGES', |
|
| 441 | - 'info_numero_abbreviation' => 'N° ', |
|
| 442 | - 'info_obligatoire' => 'Cette information est obligatoire', |
|
| 443 | - 'info_page_actuelle' => 'Page actuelle', |
|
| 444 | - 'info_pense_bete' => 'PENSE-BÊTE', |
|
| 445 | - 'info_petit_ecran' => 'Petit écran', |
|
| 446 | - 'info_petition_close' => 'Pétition close', |
|
| 447 | - 'info_pixels' => 'pixels', |
|
| 448 | - 'info_plusieurs_mots_trouves' => 'Plusieurs mots-clés trouvés pour "@cherche_mot@" :', |
|
| 449 | - 'info_portfolio_automatique' => 'Portfolio automatique :', |
|
| 450 | - 'info_premier_resultat' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 451 | - 'info_premier_resultat_sur' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 452 | - 'info_propose_1' => '[@nom_site_spip@] Propose : @titre@', |
|
| 453 | - 'info_propose_2' => 'Article proposé |
|
| 397 | + 'info_fini' => 'C’est fini !', |
|
| 398 | + 'info_format_image' => 'Formats d’images pouvant être utilisées pour créer des vignettes : @gd_formats@.', |
|
| 399 | + 'info_format_non_defini' => 'format non défini', |
|
| 400 | + 'info_grand_ecran' => 'Grand écran', |
|
| 401 | + 'info_image_aide' => 'AIDE', |
|
| 402 | + 'info_image_process_titre' => 'Comment faire de nouveaux signets', |
|
| 403 | + 'info_impossible_lire_page' => '<b>Erreur !</b> Impossible de lire la page <tt><html>@test_proxy@</html></tt> à travers le proxy ', |
|
| 404 | + 'info_installation_systeme_publication' => 'Installation du système de publication...', |
|
| 405 | + 'info_installer_documents' => 'Tu peux installer automatiquement tous les documents contenus dans le dossier @upload@.', |
|
| 406 | + 'info_installer_ftp' => 'En tant qu’administrateur, tu peux installer (par FTP) des fichiers dans le dossier @upload@ pour ensuite les sélectionner directement ici.', |
|
| 407 | + 'info_installer_images' => 'Tu peux installer des images aux formats JPEG, GIF et PNG.', |
|
| 408 | + 'info_installer_images_dossier' => 'Installer des images dans le dossier @upload@ pour pouvoir les sélectionner ici.', |
|
| 409 | + 'info_interface_complete' => 'interface complète', |
|
| 410 | + 'info_interface_simple' => 'Interface simplifiée', |
|
| 411 | + 'info_joindre_document_article' => 'Tu peux joindre à cet article des documents de type', |
|
| 412 | + 'info_joindre_document_rubrique' => 'Tu peux ajouter dans cette rubrique des documents de type', |
|
| 413 | + 'info_joindre_documents_article' => 'Tu peux joindre à ton article des documents de type :', |
|
| 414 | + 'info_l_article' => 'l’article', |
|
| 415 | + 'info_la_breve' => 'la brève', |
|
| 416 | + 'info_la_rubrique' => 'la rubrique', |
|
| 417 | + 'info_langue_principale' => 'Langue principale du site', |
|
| 418 | + 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels', |
|
| 419 | + 'info_les_auteurs_1' => 'par @les_auteurs@', |
|
| 420 | + 'info_logo_format_interdit' => 'Seuls les logos aux formats @formats@ sont autorisés.', |
|
| 421 | + 'info_logo_max_poids' => 'Les logos doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).', |
|
| 422 | + 'info_mail_fournisseur' => '[email protected]', |
|
| 423 | + 'info_message_2' => 'MESSAGE', |
|
| 424 | + 'info_message_supprime' => 'MESSAGE SUPPRIMÉ', |
|
| 425 | + 'info_messages_nb' => '@nb@ messages', |
|
| 426 | + 'info_messages_un' => '1 message', |
|
| 427 | + 'info_mise_en_ligne' => 'Date de mise en ligne :', |
|
| 428 | + 'info_modification_parametres_securite' => 'modifications des paramètres de sécurité', |
|
| 429 | + 'info_mois_courant' => 'Dans le courant du mois :', |
|
| 430 | + 'info_mot_cle_ajoute' => 'Le mot-clé suivant a été ajouté à', |
|
| 431 | + 'info_multi_herit' => 'Langue par défaut', |
|
| 432 | + 'info_multi_langues_soulignees' => 'Les <u>langues soulignées</u> bénéficient d’une traduction totale ou partielle des textes de l’interface. Si tu sélectionnes ces langues, de nombreux éléments du site public (dates, formulaires) seront automatiquement traduits. Pour les langues non soulignées, ces éléments apparaîtront dans la langue principale du site.', |
|
| 433 | + 'info_multilinguisme' => 'Multilinguisme', |
|
| 434 | + 'info_nom_non_utilisateurs_connectes' => 'Ton nom n’apparaît pas dans la liste des utilisateurs connectés.', |
|
| 435 | + 'info_nom_utilisateurs_connectes' => 'Ton nom apparaît dans la liste des utilisateurs connectés.', |
|
| 436 | + 'info_nombre_en_ligne' => 'Actuellement en ligne :', |
|
| 437 | + 'info_non_resultat' => 'Aucun résultat pour "@cherche_mot@"', |
|
| 438 | + 'info_non_utilisation_messagerie' => 'Tu n’utilise pas la messagerie interne de ce site.', |
|
| 439 | + 'info_nouveau_message' => 'TU AS UN NOUVEAU MESSAGE', |
|
| 440 | + 'info_nouveaux_messages' => 'TU AS @total_messages@ NOUVEAUX MESSAGES', |
|
| 441 | + 'info_numero_abbreviation' => 'N° ', |
|
| 442 | + 'info_obligatoire' => 'Cette information est obligatoire', |
|
| 443 | + 'info_page_actuelle' => 'Page actuelle', |
|
| 444 | + 'info_pense_bete' => 'PENSE-BÊTE', |
|
| 445 | + 'info_petit_ecran' => 'Petit écran', |
|
| 446 | + 'info_petition_close' => 'Pétition close', |
|
| 447 | + 'info_pixels' => 'pixels', |
|
| 448 | + 'info_plusieurs_mots_trouves' => 'Plusieurs mots-clés trouvés pour "@cherche_mot@" :', |
|
| 449 | + 'info_portfolio_automatique' => 'Portfolio automatique :', |
|
| 450 | + 'info_premier_resultat' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 451 | + 'info_premier_resultat_sur' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 452 | + 'info_propose_1' => '[@nom_site_spip@] Propose : @titre@', |
|
| 453 | + 'info_propose_2' => 'Article proposé |
|
| 454 | 454 | ---------------', |
| 455 | - 'info_propose_3' => 'L’article "@titre@" est proposé à la publication.', |
|
| 456 | - 'info_propose_4' => 'Tu es invité à venir le consulter et à donner ton opinion', |
|
| 457 | - 'info_propose_5' => 'dans le forum qui lui est attaché. Il est disponible à l’adresse :', |
|
| 458 | - 'info_publie_01' => 'L’article "@titre@" a été validé par @connect_nom@.', |
|
| 459 | - 'info_publie_1' => '[@nom_site_spip@] PUBLIE : @titre@', |
|
| 460 | - 'info_publie_2' => 'Article publié |
|
| 455 | + 'info_propose_3' => 'L’article "@titre@" est proposé à la publication.', |
|
| 456 | + 'info_propose_4' => 'Tu es invité à venir le consulter et à donner ton opinion', |
|
| 457 | + 'info_propose_5' => 'dans le forum qui lui est attaché. Il est disponible à l’adresse :', |
|
| 458 | + 'info_publie_01' => 'L’article "@titre@" a été validé par @connect_nom@.', |
|
| 459 | + 'info_publie_1' => '[@nom_site_spip@] PUBLIE : @titre@', |
|
| 460 | + 'info_publie_2' => 'Article publié |
|
| 461 | 461 | --------------', |
| 462 | - 'info_rechercher' => 'Rechercher', |
|
| 463 | - 'info_rechercher_02' => 'Rechercher :', |
|
| 464 | - 'info_remplacer_vignette' => 'Remplacer la vignette par défaut par un logo personnalisé :', |
|
| 465 | - 'info_rubriques_nb' => '@nb@ rubriques', |
|
| 466 | - 'info_rubriques_un' => '1 rubrique', |
|
| 467 | - 'info_sans_titre_2' => 'sans titre', |
|
| 468 | - 'info_selectionner_fichier' => 'Tu peux sélectionner un fichier du dossier @upload@', |
|
| 469 | - 'info_selectionner_fichier_2' => 'Sélectionner un fichier :', |
|
| 470 | - 'info_sites_nb' => '@nb@ sites', |
|
| 471 | - 'info_sites_un' => '1 site', |
|
| 472 | - 'info_supprimer_vignette' => 'supprimer la vignette', |
|
| 473 | - 'info_symbole_bleu' => 'Le symbole <b>bleu</b> indique un <b>pense-bête</b> : c’est-à-dire un message à ton usage personnel.', |
|
| 474 | - 'info_symbole_jaune' => 'Le symbole <b>jaune</b> indique une <b>annonce à tous les rédacteurs</b> : modifiable par tous les administrateurs, et visible par tous les rédacteurs.', |
|
| 475 | - 'info_symbole_vert' => 'Le symbole <b>vert</b> indique les <b>messages échangés avec d’autres utilisateurs</b> du site.', |
|
| 476 | - 'info_telecharger_nouveau_logo' => 'Télécharger un nouveau logo :', |
|
| 477 | - 'info_telecharger_ordinateur' => 'Télécharger depuis ton ordinateur :', |
|
| 478 | - 'info_tous_resultats_enregistres' => '[tous les résultats sont enregistrés]', |
|
| 479 | - 'info_tout_afficher' => 'Tout afficher', |
|
| 480 | - 'info_travaux_texte' => 'Ce site n’est pas encore configuré. Reviens plus tard...', |
|
| 481 | - 'info_travaux_titre' => 'Site en travaux', |
|
| 482 | - 'info_trop_resultat' => 'Trop de résultats pour "@cherche_mot@" ; affine la recherche.', |
|
| 483 | - 'info_utilisation_messagerie_interne' => 'Tu utilises la messagerie interne de ce site.', |
|
| 484 | - 'info_valider_lien' => 'valider ce lien', |
|
| 485 | - 'info_verifier_image' => ', vérifie que tes images ont été transférées correctement.', |
|
| 486 | - 'info_vignette_defaut' => 'Vignette par défaut', |
|
| 487 | - 'info_vignette_personnalisee' => 'Vignette personnalisée', |
|
| 488 | - 'info_visite' => 'visite :', |
|
| 489 | - 'info_vos_rendez_vous' => 'Tes rendez-vous à venir', |
|
| 490 | - 'infos_vos_pense_bete' => 'Tes pense-bêtes', |
|
| 462 | + 'info_rechercher' => 'Rechercher', |
|
| 463 | + 'info_rechercher_02' => 'Rechercher :', |
|
| 464 | + 'info_remplacer_vignette' => 'Remplacer la vignette par défaut par un logo personnalisé :', |
|
| 465 | + 'info_rubriques_nb' => '@nb@ rubriques', |
|
| 466 | + 'info_rubriques_un' => '1 rubrique', |
|
| 467 | + 'info_sans_titre_2' => 'sans titre', |
|
| 468 | + 'info_selectionner_fichier' => 'Tu peux sélectionner un fichier du dossier @upload@', |
|
| 469 | + 'info_selectionner_fichier_2' => 'Sélectionner un fichier :', |
|
| 470 | + 'info_sites_nb' => '@nb@ sites', |
|
| 471 | + 'info_sites_un' => '1 site', |
|
| 472 | + 'info_supprimer_vignette' => 'supprimer la vignette', |
|
| 473 | + 'info_symbole_bleu' => 'Le symbole <b>bleu</b> indique un <b>pense-bête</b> : c’est-à-dire un message à ton usage personnel.', |
|
| 474 | + 'info_symbole_jaune' => 'Le symbole <b>jaune</b> indique une <b>annonce à tous les rédacteurs</b> : modifiable par tous les administrateurs, et visible par tous les rédacteurs.', |
|
| 475 | + 'info_symbole_vert' => 'Le symbole <b>vert</b> indique les <b>messages échangés avec d’autres utilisateurs</b> du site.', |
|
| 476 | + 'info_telecharger_nouveau_logo' => 'Télécharger un nouveau logo :', |
|
| 477 | + 'info_telecharger_ordinateur' => 'Télécharger depuis ton ordinateur :', |
|
| 478 | + 'info_tous_resultats_enregistres' => '[tous les résultats sont enregistrés]', |
|
| 479 | + 'info_tout_afficher' => 'Tout afficher', |
|
| 480 | + 'info_travaux_texte' => 'Ce site n’est pas encore configuré. Reviens plus tard...', |
|
| 481 | + 'info_travaux_titre' => 'Site en travaux', |
|
| 482 | + 'info_trop_resultat' => 'Trop de résultats pour "@cherche_mot@" ; affine la recherche.', |
|
| 483 | + 'info_utilisation_messagerie_interne' => 'Tu utilises la messagerie interne de ce site.', |
|
| 484 | + 'info_valider_lien' => 'valider ce lien', |
|
| 485 | + 'info_verifier_image' => ', vérifie que tes images ont été transférées correctement.', |
|
| 486 | + 'info_vignette_defaut' => 'Vignette par défaut', |
|
| 487 | + 'info_vignette_personnalisee' => 'Vignette personnalisée', |
|
| 488 | + 'info_visite' => 'visite :', |
|
| 489 | + 'info_vos_rendez_vous' => 'Tes rendez-vous à venir', |
|
| 490 | + 'infos_vos_pense_bete' => 'Tes pense-bêtes', |
|
| 491 | 491 | |
| 492 | - // L |
|
| 493 | - 'label_ajout_id_rapide' => 'Ajout rapide', |
|
| 494 | - 'label_poids_fichier' => 'Taille', |
|
| 495 | - 'label_ponctuer' => '@label@ :', |
|
| 496 | - 'lien_afficher_icones_seuls' => 'Afficher uniquement les icones', |
|
| 497 | - 'lien_afficher_texte_icones' => 'Afficher les icones et le texte', |
|
| 498 | - 'lien_afficher_texte_seul' => 'Afficher uniquement le texte', |
|
| 499 | - 'lien_aller_a_la_derniere_page' => 'Aller à la dernière page', |
|
| 500 | - 'lien_aller_a_la_page_nb' => 'Aller à la page @nb@', |
|
| 501 | - 'lien_aller_a_la_page_precedente' => 'Aller à la page précédente', |
|
| 502 | - 'lien_aller_a_la_page_suivante' => 'Aller à la page suivante', |
|
| 503 | - 'lien_aller_a_la_premiere_page' => 'Aller à la première page', |
|
| 504 | - 'lien_liberer' => 'libérer', |
|
| 505 | - 'lien_liberer_tous' => 'Tout libérer', |
|
| 506 | - 'lien_nouvea_pense_bete' => 'NOUVEAU PENSE-BÊTE', |
|
| 507 | - 'lien_nouveau_message' => 'NOUVEAU MESSAGE', |
|
| 508 | - 'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE', |
|
| 509 | - 'lien_petitions' => 'PÉTITION', |
|
| 510 | - 'lien_popularite' => 'popularité : @popularite@%', |
|
| 511 | - 'lien_racine_site' => 'RACINE DU SITE', |
|
| 512 | - 'lien_reessayer' => 'réessayer', |
|
| 513 | - 'lien_repondre_message' => 'Répondre à ce message', |
|
| 514 | - 'lien_supprimer' => 'supprimer', |
|
| 515 | - 'lien_tout_afficher' => 'Tout afficher', |
|
| 516 | - 'lien_visite_site' => 'visiter ce site', |
|
| 517 | - 'lien_visites' => '@visites@ visites', |
|
| 518 | - 'lien_voir_auteur' => 'Voir cet auteur', |
|
| 519 | - 'ligne' => 'Ligne', |
|
| 520 | - 'login' => 'Connexion', |
|
| 521 | - 'login_acces_prive' => 'accès à l’espace privé', |
|
| 522 | - 'login_autre_identifiant' => 'se connecter sous un autre identifiant', |
|
| 523 | - 'login_cookie_accepte' => 'Régle ton navigateur pour qu’il les accepte (au moins pour ce site).', |
|
| 524 | - 'login_cookie_oblige' => 'Pour t’identifier de façon sûre sur ce site, tu dois accepter les cookies.', |
|
| 525 | - 'login_deconnexion_ok' => 'Déconnexion effectuée.', |
|
| 526 | - 'login_erreur_pass' => 'Erreur de mot de passe.', |
|
| 527 | - 'login_espace_prive' => 'espace privé', |
|
| 528 | - 'login_identifiant_inconnu' => 'L’identifiant « @login@ » est inconnu.', |
|
| 529 | - 'login_login' => 'Login :', |
|
| 530 | - 'login_login2' => 'Login ou adresse email@circ@ :', |
|
| 531 | - 'login_login_pass_incorrect' => '(Login ou mot de passe incorrect.)', |
|
| 532 | - 'login_motpasseoublie' => 'mot de passe oublié ?', |
|
| 533 | - 'login_non_securise' => 'Attention, ce formulaire n’est pas sécurisé. |
|
| 492 | + // L |
|
| 493 | + 'label_ajout_id_rapide' => 'Ajout rapide', |
|
| 494 | + 'label_poids_fichier' => 'Taille', |
|
| 495 | + 'label_ponctuer' => '@label@ :', |
|
| 496 | + 'lien_afficher_icones_seuls' => 'Afficher uniquement les icones', |
|
| 497 | + 'lien_afficher_texte_icones' => 'Afficher les icones et le texte', |
|
| 498 | + 'lien_afficher_texte_seul' => 'Afficher uniquement le texte', |
|
| 499 | + 'lien_aller_a_la_derniere_page' => 'Aller à la dernière page', |
|
| 500 | + 'lien_aller_a_la_page_nb' => 'Aller à la page @nb@', |
|
| 501 | + 'lien_aller_a_la_page_precedente' => 'Aller à la page précédente', |
|
| 502 | + 'lien_aller_a_la_page_suivante' => 'Aller à la page suivante', |
|
| 503 | + 'lien_aller_a_la_premiere_page' => 'Aller à la première page', |
|
| 504 | + 'lien_liberer' => 'libérer', |
|
| 505 | + 'lien_liberer_tous' => 'Tout libérer', |
|
| 506 | + 'lien_nouvea_pense_bete' => 'NOUVEAU PENSE-BÊTE', |
|
| 507 | + 'lien_nouveau_message' => 'NOUVEAU MESSAGE', |
|
| 508 | + 'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE', |
|
| 509 | + 'lien_petitions' => 'PÉTITION', |
|
| 510 | + 'lien_popularite' => 'popularité : @popularite@%', |
|
| 511 | + 'lien_racine_site' => 'RACINE DU SITE', |
|
| 512 | + 'lien_reessayer' => 'réessayer', |
|
| 513 | + 'lien_repondre_message' => 'Répondre à ce message', |
|
| 514 | + 'lien_supprimer' => 'supprimer', |
|
| 515 | + 'lien_tout_afficher' => 'Tout afficher', |
|
| 516 | + 'lien_visite_site' => 'visiter ce site', |
|
| 517 | + 'lien_visites' => '@visites@ visites', |
|
| 518 | + 'lien_voir_auteur' => 'Voir cet auteur', |
|
| 519 | + 'ligne' => 'Ligne', |
|
| 520 | + 'login' => 'Connexion', |
|
| 521 | + 'login_acces_prive' => 'accès à l’espace privé', |
|
| 522 | + 'login_autre_identifiant' => 'se connecter sous un autre identifiant', |
|
| 523 | + 'login_cookie_accepte' => 'Régle ton navigateur pour qu’il les accepte (au moins pour ce site).', |
|
| 524 | + 'login_cookie_oblige' => 'Pour t’identifier de façon sûre sur ce site, tu dois accepter les cookies.', |
|
| 525 | + 'login_deconnexion_ok' => 'Déconnexion effectuée.', |
|
| 526 | + 'login_erreur_pass' => 'Erreur de mot de passe.', |
|
| 527 | + 'login_espace_prive' => 'espace privé', |
|
| 528 | + 'login_identifiant_inconnu' => 'L’identifiant « @login@ » est inconnu.', |
|
| 529 | + 'login_login' => 'Login :', |
|
| 530 | + 'login_login2' => 'Login ou adresse email@circ@ :', |
|
| 531 | + 'login_login_pass_incorrect' => '(Login ou mot de passe incorrect.)', |
|
| 532 | + 'login_motpasseoublie' => 'mot de passe oublié ?', |
|
| 533 | + 'login_non_securise' => 'Attention, ce formulaire n’est pas sécurisé. |
|
| 534 | 534 | Si tu ne veux pas que ton mot de passe puisse être |
| 535 | 535 | intercepté sur le réseau, active Javascript |
| 536 | 536 | dans ton navigateur et', |
| 537 | - 'login_nouvelle_tentative' => 'Nouvelle tentative', |
|
| 538 | - 'login_par_ici' => 'Tu es enregistré... par ici...', |
|
| 539 | - 'login_pass2' => 'Mot de passe :', |
|
| 540 | - 'login_preferez_refuser' => '<b>Si tu préfére refuser les cookies</b>, une autre méthode de connexion (moins sécurisée) est à ta disposition :', |
|
| 541 | - 'login_recharger' => 'recharger cette page', |
|
| 542 | - 'login_rester_identifie' => 'Se souvenir de moi', |
|
| 543 | - 'login_retour_public' => 'Retour au site public', |
|
| 544 | - 'login_retour_site' => 'Retour au site public', |
|
| 545 | - 'login_retoursitepublic' => 'retour au site public', |
|
| 546 | - 'login_sans_cookie' => 'Identification sans cookie', |
|
| 547 | - 'login_securise' => 'Login sécurisé', |
|
| 548 | - 'login_sinscrire' => 's’inscrire', |
|
| 549 | - 'login_test_navigateur' => 'test navigateur/reconnexion', |
|
| 550 | - 'login_verifiez_navigateur' => '(Vérifie toutefois que ton navigateur n’a pas mémorisé ton mot de passe...)', |
|
| 537 | + 'login_nouvelle_tentative' => 'Nouvelle tentative', |
|
| 538 | + 'login_par_ici' => 'Tu es enregistré... par ici...', |
|
| 539 | + 'login_pass2' => 'Mot de passe :', |
|
| 540 | + 'login_preferez_refuser' => '<b>Si tu préfére refuser les cookies</b>, une autre méthode de connexion (moins sécurisée) est à ta disposition :', |
|
| 541 | + 'login_recharger' => 'recharger cette page', |
|
| 542 | + 'login_rester_identifie' => 'Se souvenir de moi', |
|
| 543 | + 'login_retour_public' => 'Retour au site public', |
|
| 544 | + 'login_retour_site' => 'Retour au site public', |
|
| 545 | + 'login_retoursitepublic' => 'retour au site public', |
|
| 546 | + 'login_sans_cookie' => 'Identification sans cookie', |
|
| 547 | + 'login_securise' => 'Login sécurisé', |
|
| 548 | + 'login_sinscrire' => 's’inscrire', |
|
| 549 | + 'login_test_navigateur' => 'test navigateur/reconnexion', |
|
| 550 | + 'login_verifiez_navigateur' => '(Vérifie toutefois que ton navigateur n’a pas mémorisé ton mot de passe...)', |
|
| 551 | 551 | |
| 552 | - // M |
|
| 553 | - 'masquer_colonne' => 'Masquer cette colonne', |
|
| 554 | - 'masquer_trad' => 'masquer les traductions', |
|
| 555 | - 'message_nouveaux_identifiants_echec' => 'Impossible de générer de nouveaux identifiants.', |
|
| 556 | - 'message_nouveaux_identifiants_echec_envoi' => 'Les nouveaux identifiants de connexion n’ont pas pu être envoyés.', |
|
| 557 | - 'message_nouveaux_identifiants_ok' => 'Les nouveaux identifiants de connexion ont été envoyés à @email@.', |
|
| 558 | - 'module_fichiers_langues' => 'Fichiers de langue', |
|
| 552 | + // M |
|
| 553 | + 'masquer_colonne' => 'Masquer cette colonne', |
|
| 554 | + 'masquer_trad' => 'masquer les traductions', |
|
| 555 | + 'message_nouveaux_identifiants_echec' => 'Impossible de générer de nouveaux identifiants.', |
|
| 556 | + 'message_nouveaux_identifiants_echec_envoi' => 'Les nouveaux identifiants de connexion n’ont pas pu être envoyés.', |
|
| 557 | + 'message_nouveaux_identifiants_ok' => 'Les nouveaux identifiants de connexion ont été envoyés à @email@.', |
|
| 558 | + 'module_fichiers_langues' => 'Fichiers de langue', |
|
| 559 | 559 | |
| 560 | - // N |
|
| 561 | - 'navigateur_pas_redirige' => 'Si votre navigateur n’est pas redirigé, cliquez ici pour continuer.', |
|
| 562 | - 'numero' => 'Numéro', |
|
| 560 | + // N |
|
| 561 | + 'navigateur_pas_redirige' => 'Si votre navigateur n’est pas redirigé, cliquez ici pour continuer.', |
|
| 562 | + 'numero' => 'Numéro', |
|
| 563 | 563 | |
| 564 | - // O |
|
| 565 | - 'occurence' => 'Occurence', |
|
| 566 | - 'onglet_affacer_base' => 'Effacer la base', |
|
| 567 | - 'onglet_auteur' => 'L’auteur', |
|
| 568 | - 'onglet_contenu_site' => 'Contenu du site', |
|
| 569 | - 'onglet_evolution_visite_mod' => 'Évolution', |
|
| 570 | - 'onglet_fonctions_avances' => 'Fonctions avancées', |
|
| 571 | - 'onglet_informations_personnelles' => 'Informations personnelles', |
|
| 572 | - 'onglet_interactivite' => 'Interactivité', |
|
| 573 | - 'onglet_messagerie' => 'Messagerie', |
|
| 574 | - 'onglet_repartition_rubrique' => 'Répartition par rubriques', |
|
| 575 | - 'onglet_save_restaur_base' => 'Sauvegarder/restaurer la base', |
|
| 576 | - 'onglet_vider_cache' => 'Vider le cache', |
|
| 564 | + // O |
|
| 565 | + 'occurence' => 'Occurence', |
|
| 566 | + 'onglet_affacer_base' => 'Effacer la base', |
|
| 567 | + 'onglet_auteur' => 'L’auteur', |
|
| 568 | + 'onglet_contenu_site' => 'Contenu du site', |
|
| 569 | + 'onglet_evolution_visite_mod' => 'Évolution', |
|
| 570 | + 'onglet_fonctions_avances' => 'Fonctions avancées', |
|
| 571 | + 'onglet_informations_personnelles' => 'Informations personnelles', |
|
| 572 | + 'onglet_interactivite' => 'Interactivité', |
|
| 573 | + 'onglet_messagerie' => 'Messagerie', |
|
| 574 | + 'onglet_repartition_rubrique' => 'Répartition par rubriques', |
|
| 575 | + 'onglet_save_restaur_base' => 'Sauvegarder/restaurer la base', |
|
| 576 | + 'onglet_vider_cache' => 'Vider le cache', |
|
| 577 | 577 | |
| 578 | - // P |
|
| 579 | - 'pass_choix_pass' => 'Choisis ton nouveau mot de passe :', |
|
| 580 | - 'pass_erreur' => 'Erreur', |
|
| 581 | - 'pass_erreur_acces_refuse' => '<b>Erreur :</b> tu n’as plus accès à ce site.', |
|
| 582 | - 'pass_erreur_code_inconnu' => '<b>Erreur :</b> ce code ne correspond à aucun des visiteurs ayant accès à ce site.', |
|
| 583 | - 'pass_erreur_non_enregistre' => '<b>Erreur :</b> l’adresse <tt>@email_oubli@</tt> n’est pas enregistrée sur ce site.', |
|
| 584 | - 'pass_erreur_non_valide' => '<b>Erreur :</b> cet email <tt>@email_oubli@</tt> n’est pas valide !', |
|
| 585 | - 'pass_erreur_probleme_technique' => '<b>Erreur :</b> à cause d’un problème technique, l’email ne peut pas être envoyé.', |
|
| 586 | - 'pass_espace_prive_bla' => 'L’espace privé de ce site est ouvert aux |
|
| 578 | + // P |
|
| 579 | + 'pass_choix_pass' => 'Choisis ton nouveau mot de passe :', |
|
| 580 | + 'pass_erreur' => 'Erreur', |
|
| 581 | + 'pass_erreur_acces_refuse' => '<b>Erreur :</b> tu n’as plus accès à ce site.', |
|
| 582 | + 'pass_erreur_code_inconnu' => '<b>Erreur :</b> ce code ne correspond à aucun des visiteurs ayant accès à ce site.', |
|
| 583 | + 'pass_erreur_non_enregistre' => '<b>Erreur :</b> l’adresse <tt>@email_oubli@</tt> n’est pas enregistrée sur ce site.', |
|
| 584 | + 'pass_erreur_non_valide' => '<b>Erreur :</b> cet email <tt>@email_oubli@</tt> n’est pas valide !', |
|
| 585 | + 'pass_erreur_probleme_technique' => '<b>Erreur :</b> à cause d’un problème technique, l’email ne peut pas être envoyé.', |
|
| 586 | + 'pass_espace_prive_bla' => 'L’espace privé de ce site est ouvert aux |
|
| 587 | 587 | visiteurs, après inscription. Une fois enregistré, |
| 588 | 588 | tu pourras consulter les articles en cours de rédaction, |
| 589 | 589 | proposer des articles et participer à tous les forums.', |
| 590 | - 'pass_forum_bla' => 'Tu as demandé à intervenir sur un forum |
|
| 590 | + 'pass_forum_bla' => 'Tu as demandé à intervenir sur un forum |
|
| 591 | 591 | réservé aux visiteurs enregistrés.', |
| 592 | - 'pass_indiquez_cidessous' => 'Indique ci-dessous l’adresse email sous laquelle tu |
|
| 592 | + 'pass_indiquez_cidessous' => 'Indique ci-dessous l’adresse email sous laquelle tu |
|
| 593 | 593 | t’es précédemment enregistré. Tu |
| 594 | 594 | recevras un email t’indiquant la marche à suivre pour |
| 595 | 595 | récupérer ton accès.', |
| 596 | - 'pass_mail_passcookie' => '(ceci est un message automatique) |
|
| 596 | + 'pass_mail_passcookie' => '(ceci est un message automatique) |
|
| 597 | 597 | Pour retrouver ton accès au site |
| 598 | 598 | @nom_site_spip@ (@adresse_site@) |
| 599 | 599 | Rends toi à l’adresse suivante : |
@@ -604,146 +604,146 @@ discard block |
||
| 604 | 604 | et te reconnecter au site. |
| 605 | 605 | |
| 606 | 606 | ', |
| 607 | - 'pass_mot_oublie' => 'Mot de passe oublié', |
|
| 608 | - 'pass_nouveau_enregistre' => 'Ton nouveau mot de passe a été enregistré.', |
|
| 609 | - 'pass_nouveau_pass' => 'Nouveau mot de passe', |
|
| 610 | - 'pass_ok' => 'OK', |
|
| 611 | - 'pass_oubli_mot' => 'Oubli du mot de passe', |
|
| 612 | - 'pass_procedure_changer' => 'Pour changer ton mot de passe, merci d’indiquer l’adresse email associée à ton compte.', |
|
| 613 | - 'pass_quitter_fenetre' => 'Quitter cette fenêtre', |
|
| 614 | - 'pass_rappel_login' => 'Rappel : ton identifiant (login) est « @login@ ».', |
|
| 615 | - 'pass_recevoir_mail' => 'Un lien de réinitialisation de ton mot de passe t’a été envoyé sur ton adresse email (si celle-ci est valide).', |
|
| 616 | - 'pass_retour_public' => 'Retour sur le site public', |
|
| 617 | - 'pass_rien_a_faire_ici' => 'Rien à faire ici.', |
|
| 618 | - 'pass_vousinscrire' => 'T’inscrire sur ce site', |
|
| 619 | - 'precedent' => 'précédent', |
|
| 620 | - 'previsualisation' => 'Prévisualisation', |
|
| 621 | - 'previsualiser' => 'Prévisualiser', |
|
| 607 | + 'pass_mot_oublie' => 'Mot de passe oublié', |
|
| 608 | + 'pass_nouveau_enregistre' => 'Ton nouveau mot de passe a été enregistré.', |
|
| 609 | + 'pass_nouveau_pass' => 'Nouveau mot de passe', |
|
| 610 | + 'pass_ok' => 'OK', |
|
| 611 | + 'pass_oubli_mot' => 'Oubli du mot de passe', |
|
| 612 | + 'pass_procedure_changer' => 'Pour changer ton mot de passe, merci d’indiquer l’adresse email associée à ton compte.', |
|
| 613 | + 'pass_quitter_fenetre' => 'Quitter cette fenêtre', |
|
| 614 | + 'pass_rappel_login' => 'Rappel : ton identifiant (login) est « @login@ ».', |
|
| 615 | + 'pass_recevoir_mail' => 'Un lien de réinitialisation de ton mot de passe t’a été envoyé sur ton adresse email (si celle-ci est valide).', |
|
| 616 | + 'pass_retour_public' => 'Retour sur le site public', |
|
| 617 | + 'pass_rien_a_faire_ici' => 'Rien à faire ici.', |
|
| 618 | + 'pass_vousinscrire' => 'T’inscrire sur ce site', |
|
| 619 | + 'precedent' => 'précédent', |
|
| 620 | + 'previsualisation' => 'Prévisualisation', |
|
| 621 | + 'previsualiser' => 'Prévisualiser', |
|
| 622 | 622 | |
| 623 | - // R |
|
| 624 | - 'retour' => 'Retour', |
|
| 623 | + // R |
|
| 624 | + 'retour' => 'Retour', |
|
| 625 | 625 | |
| 626 | - // S |
|
| 627 | - 'spip_conforme_dtd' => 'SPIP considère ce document comme conforme à son DOCTYPE :', |
|
| 628 | - 'squelette' => 'squelette', |
|
| 629 | - 'squelette_inclus_ligne' => 'squelette inclus, ligne', |
|
| 630 | - 'squelette_ligne' => 'squelette, ligne', |
|
| 631 | - 'stats_visites_et_popularite' => '@visites@ visites ; popularité : @popularite@', |
|
| 632 | - 'suivant' => 'suivant', |
|
| 626 | + // S |
|
| 627 | + 'spip_conforme_dtd' => 'SPIP considère ce document comme conforme à son DOCTYPE :', |
|
| 628 | + 'squelette' => 'squelette', |
|
| 629 | + 'squelette_inclus_ligne' => 'squelette inclus, ligne', |
|
| 630 | + 'squelette_ligne' => 'squelette, ligne', |
|
| 631 | + 'stats_visites_et_popularite' => '@visites@ visites ; popularité : @popularite@', |
|
| 632 | + 'suivant' => 'suivant', |
|
| 633 | 633 | |
| 634 | - // T |
|
| 635 | - 'taille_go' => '@taille@ Go', |
|
| 636 | - 'taille_ko' => '@taille@ ko', |
|
| 637 | - 'taille_mo' => '@taille@ Mo', |
|
| 638 | - 'taille_octets' => '@taille@ octets', |
|
| 639 | - 'texte_actualite_site_1' => 'Quand tu seras familiarisé(e) avec l’interface, tu pourras cliquer sur « ', |
|
| 640 | - 'texte_actualite_site_2' => 'interface complète', |
|
| 641 | - 'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.', |
|
| 642 | - 'texte_creation_automatique_vignette' => 'La création automatique de vignettes de prévisualisation est activée sur ce site. Si tu installe à partir de ce formulaire des images au(x) format(s) @gd_formats@, elles seront accompagnées d’une vignette d’une taille maximale de @taille_preview@ pixels.', |
|
| 643 | - 'texte_documents_associes' => 'Les documents suivants sont associés à l’article, |
|
| 634 | + // T |
|
| 635 | + 'taille_go' => '@taille@ Go', |
|
| 636 | + 'taille_ko' => '@taille@ ko', |
|
| 637 | + 'taille_mo' => '@taille@ Mo', |
|
| 638 | + 'taille_octets' => '@taille@ octets', |
|
| 639 | + 'texte_actualite_site_1' => 'Quand tu seras familiarisé(e) avec l’interface, tu pourras cliquer sur « ', |
|
| 640 | + 'texte_actualite_site_2' => 'interface complète', |
|
| 641 | + 'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.', |
|
| 642 | + 'texte_creation_automatique_vignette' => 'La création automatique de vignettes de prévisualisation est activée sur ce site. Si tu installe à partir de ce formulaire des images au(x) format(s) @gd_formats@, elles seront accompagnées d’une vignette d’une taille maximale de @taille_preview@ pixels.', |
|
| 643 | + 'texte_documents_associes' => 'Les documents suivants sont associés à l’article, |
|
| 644 | 644 | mais ils n’y ont pas été directement |
| 645 | 645 | insérés. Selon la mise en page du site public, |
| 646 | 646 | ils pourront apparaître sous forme de documents joints.', |
| 647 | - 'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau. |
|
| 647 | + 'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau. |
|
| 648 | 648 | L’image <b>@fichier@</b> n’est pas passée (article @id_article@). |
| 649 | 649 | Note bien cette référence, réessaye la mise à |
| 650 | 650 | niveau, et enfin vérifie que les images apparaissent |
| 651 | 651 | toujours dans les articles.', |
| 652 | - 'texte_erreur_visiteur' => 'Tu as tenté d’accéder à l’espace privé avec un login qui ne le permet pas.', |
|
| 653 | - 'texte_inc_auth_1' => 'Tu es identifié sous le |
|
| 652 | + 'texte_erreur_visiteur' => 'Tu as tenté d’accéder à l’espace privé avec un login qui ne le permet pas.', |
|
| 653 | + 'texte_inc_auth_1' => 'Tu es identifié sous le |
|
| 654 | 654 | login <b>@auth_login@</b>, mais celui-ci n’existe pas/plus dans la base. |
| 655 | 655 | Essaye de te', |
| 656 | - 'texte_inc_auth_2' => 'reconnecter', |
|
| 657 | - 'texte_inc_auth_3' => ', après avoir éventuellement quitté puis |
|
| 656 | + 'texte_inc_auth_2' => 'reconnecter', |
|
| 657 | + 'texte_inc_auth_3' => ', après avoir éventuellement quitté puis |
|
| 658 | 658 | redémarré ton navigateur.', |
| 659 | - 'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le |
|
| 659 | + 'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le |
|
| 660 | 660 | fonctionnement de ton site. Nous te recommandons de ne pas y intervenir tant que tu n’es pas |
| 661 | 661 | familier du fonctionnement du système SPIP. <br /><br /><b>Plus |
| 662 | 662 | généralement, il est fortement conseillé |
| 663 | 663 | de laisser la charge de ces pages au webmestre principal de ton site.</b>', |
| 664 | - 'texte_inc_meta_1' => 'Le système a rencontré une erreur lors de l’écriture du fichier <code>@fichier@</code>. En tant qu’administrateur du site,', |
|
| 665 | - 'texte_inc_meta_2' => 'vérifie les droits d’ecriture', |
|
| 666 | - 'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.', |
|
| 667 | - 'texte_statut_en_cours_redaction' => 'en cours de rédaction', |
|
| 668 | - 'texte_statut_poubelle' => 'à la poubelle', |
|
| 669 | - 'texte_statut_propose_evaluation' => 'proposé à l’évaluation', |
|
| 670 | - 'texte_statut_publie' => 'publié en ligne', |
|
| 671 | - 'texte_statut_refuse' => 'refusé', |
|
| 672 | - 'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :', |
|
| 673 | - 'titre_cadre_raccourcis' => 'RACCOURCIS :', |
|
| 674 | - 'titre_changer_couleur_interface' => 'Changer la couleur de l’interface', |
|
| 675 | - 'titre_image_admin_article' => 'Tu peux administrer cet article', |
|
| 676 | - 'titre_image_administrateur' => 'Administrateur', |
|
| 677 | - 'titre_image_aide' => 'De l’aide sur cet élément', |
|
| 678 | - 'titre_image_auteur_supprime' => 'Auteur supprimé', |
|
| 679 | - 'titre_image_redacteur' => 'Rédacteur sans accès', |
|
| 680 | - 'titre_image_redacteur_02' => 'Rédacteur', |
|
| 681 | - 'titre_image_selecteur' => 'Afficher la liste', |
|
| 682 | - 'titre_image_visiteur' => 'Visiteur', |
|
| 683 | - 'titre_joindre_document' => 'JOINDRE UN DOCUMENT', |
|
| 684 | - 'titre_mots_cles' => 'MOTS-CLÉS', |
|
| 685 | - 'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de ta compréhension.', |
|
| 686 | - 'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE', |
|
| 687 | - 'titre_signatures_attente' => 'Signatures en attente de validation', |
|
| 688 | - 'titre_signatures_confirmees' => 'Signatures confirmées', |
|
| 689 | - 'titre_statistiques' => 'Statistiques du site', |
|
| 690 | - 'titre_titre_document' => 'Titre du document :', |
|
| 691 | - 'todo' => 'à venir', |
|
| 692 | - 'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions', |
|
| 693 | - 'trad_reference' => '(référence des traductions)', |
|
| 664 | + 'texte_inc_meta_1' => 'Le système a rencontré une erreur lors de l’écriture du fichier <code>@fichier@</code>. En tant qu’administrateur du site,', |
|
| 665 | + 'texte_inc_meta_2' => 'vérifie les droits d’ecriture', |
|
| 666 | + 'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.', |
|
| 667 | + 'texte_statut_en_cours_redaction' => 'en cours de rédaction', |
|
| 668 | + 'texte_statut_poubelle' => 'à la poubelle', |
|
| 669 | + 'texte_statut_propose_evaluation' => 'proposé à l’évaluation', |
|
| 670 | + 'texte_statut_publie' => 'publié en ligne', |
|
| 671 | + 'texte_statut_refuse' => 'refusé', |
|
| 672 | + 'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :', |
|
| 673 | + 'titre_cadre_raccourcis' => 'RACCOURCIS :', |
|
| 674 | + 'titre_changer_couleur_interface' => 'Changer la couleur de l’interface', |
|
| 675 | + 'titre_image_admin_article' => 'Tu peux administrer cet article', |
|
| 676 | + 'titre_image_administrateur' => 'Administrateur', |
|
| 677 | + 'titre_image_aide' => 'De l’aide sur cet élément', |
|
| 678 | + 'titre_image_auteur_supprime' => 'Auteur supprimé', |
|
| 679 | + 'titre_image_redacteur' => 'Rédacteur sans accès', |
|
| 680 | + 'titre_image_redacteur_02' => 'Rédacteur', |
|
| 681 | + 'titre_image_selecteur' => 'Afficher la liste', |
|
| 682 | + 'titre_image_visiteur' => 'Visiteur', |
|
| 683 | + 'titre_joindre_document' => 'JOINDRE UN DOCUMENT', |
|
| 684 | + 'titre_mots_cles' => 'MOTS-CLÉS', |
|
| 685 | + 'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de ta compréhension.', |
|
| 686 | + 'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE', |
|
| 687 | + 'titre_signatures_attente' => 'Signatures en attente de validation', |
|
| 688 | + 'titre_signatures_confirmees' => 'Signatures confirmées', |
|
| 689 | + 'titre_statistiques' => 'Statistiques du site', |
|
| 690 | + 'titre_titre_document' => 'Titre du document :', |
|
| 691 | + 'todo' => 'à venir', |
|
| 692 | + 'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions', |
|
| 693 | + 'trad_reference' => '(référence des traductions)', |
|
| 694 | 694 | |
| 695 | - // U |
|
| 696 | - 'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.', |
|
| 695 | + // U |
|
| 696 | + 'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.', |
|
| 697 | 697 | |
| 698 | - // Z |
|
| 699 | - 'zbug_balise_b_aval' => ' : balise B en aval', |
|
| 700 | - 'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@', |
|
| 701 | - 'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@', |
|
| 702 | - 'zbug_boucle' => 'boucle', |
|
| 703 | - 'zbug_boucle_recursive_undef' => 'boucle récursive non définie', |
|
| 704 | - 'zbug_calcul' => 'calcul', |
|
| 705 | - 'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle', |
|
| 706 | - 'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@', |
|
| 707 | - 'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@', |
|
| 708 | - 'zbug_code' => 'code', |
|
| 709 | - 'zbug_critere_inconnu' => 'critère inconnu @critere@', |
|
| 710 | - 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique', |
|
| 711 | - 'zbug_distant_interdit' => 'externe interdit', |
|
| 712 | - 'zbug_doublon_table_sans_cle_primaire' => 'doublons sur une table sans clef primaire atomique', |
|
| 713 | - 'zbug_doublon_table_sans_index' => 'doublons sur une table sans index', |
|
| 714 | - 'zbug_erreur_boucle_double' => 'BOUCLE@id@ : double définition', |
|
| 715 | - 'zbug_erreur_boucle_fermant' => 'BOUCLE@id@ : tag fermant manquant', |
|
| 716 | - 'zbug_erreur_boucle_syntaxe' => 'Syntaxe boucle incorrecte', |
|
| 717 | - 'zbug_erreur_compilation' => 'Erreur de compilation', |
|
| 718 | - 'zbug_erreur_execution_page' => 'erreur d’exécution de la page', |
|
| 719 | - 'zbug_erreur_filtre' => 'Erreur : filtre <b>« @filtre@ »</b> non défini', |
|
| 720 | - 'zbug_erreur_filtre_nbarg_min' => 'Filtre @filtre@ : il manque @nb@ argument(s)', |
|
| 721 | - 'zbug_erreur_meme_parent' => '{meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)', |
|
| 722 | - 'zbug_erreur_squelette' => 'Erreur(s) dans le squelette', |
|
| 723 | - 'zbug_hors_compilation' => 'Hors Compilation', |
|
| 724 | - 'zbug_info_erreur_squelette' => 'Erreur sur le site', |
|
| 725 | - 'zbug_inversion_ordre_inexistant' => 'inversion d’un ordre inexistant', |
|
| 726 | - 'zbug_pagination_sans_critere' => '#PAGINATION sans critère {pagination} ou employé dans une boucle récursive', |
|
| 727 | - 'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@', |
|
| 728 | - 'zbug_profile' => 'Temps de calcul : @time@', |
|
| 729 | - 'zbug_resultat' => 'résultat', |
|
| 730 | - 'zbug_serveur_indefini' => 'serveur SQL indéfini', |
|
| 731 | - 'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée', |
|
| 732 | - 'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue', |
|
| 733 | - 'zxml_connus_attributs' => 'attributs connus', |
|
| 734 | - 'zxml_de' => 'de', |
|
| 735 | - 'zxml_inconnu_attribut' => 'attribut inconnu', |
|
| 736 | - 'zxml_inconnu_balise' => 'balise inconnue', |
|
| 737 | - 'zxml_inconnu_entite' => 'entité inconnue', |
|
| 738 | - 'zxml_inconnu_id' => 'ID inconnu', |
|
| 739 | - 'zxml_mais_de' => 'mais de', |
|
| 740 | - 'zxml_non_conforme' => 'n’est pas conforme au motif', |
|
| 741 | - 'zxml_non_fils' => 'n’est pas un fils de', |
|
| 742 | - 'zxml_nonvide_balise' => 'balise non vide', |
|
| 743 | - 'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans', |
|
| 744 | - 'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte', |
|
| 745 | - 'zxml_survoler' => 'survoler pour voir les corrects', |
|
| 746 | - 'zxml_valeur_attribut' => 'valeur de l’attribut', |
|
| 747 | - 'zxml_vide_balise' => 'balise vide', |
|
| 748 | - 'zxml_vu' => 'vu auparavant' |
|
| 698 | + // Z |
|
| 699 | + 'zbug_balise_b_aval' => ' : balise B en aval', |
|
| 700 | + 'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@', |
|
| 701 | + 'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@', |
|
| 702 | + 'zbug_boucle' => 'boucle', |
|
| 703 | + 'zbug_boucle_recursive_undef' => 'boucle récursive non définie', |
|
| 704 | + 'zbug_calcul' => 'calcul', |
|
| 705 | + 'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle', |
|
| 706 | + 'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@', |
|
| 707 | + 'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@', |
|
| 708 | + 'zbug_code' => 'code', |
|
| 709 | + 'zbug_critere_inconnu' => 'critère inconnu @critere@', |
|
| 710 | + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique', |
|
| 711 | + 'zbug_distant_interdit' => 'externe interdit', |
|
| 712 | + 'zbug_doublon_table_sans_cle_primaire' => 'doublons sur une table sans clef primaire atomique', |
|
| 713 | + 'zbug_doublon_table_sans_index' => 'doublons sur une table sans index', |
|
| 714 | + 'zbug_erreur_boucle_double' => 'BOUCLE@id@ : double définition', |
|
| 715 | + 'zbug_erreur_boucle_fermant' => 'BOUCLE@id@ : tag fermant manquant', |
|
| 716 | + 'zbug_erreur_boucle_syntaxe' => 'Syntaxe boucle incorrecte', |
|
| 717 | + 'zbug_erreur_compilation' => 'Erreur de compilation', |
|
| 718 | + 'zbug_erreur_execution_page' => 'erreur d’exécution de la page', |
|
| 719 | + 'zbug_erreur_filtre' => 'Erreur : filtre <b>« @filtre@ »</b> non défini', |
|
| 720 | + 'zbug_erreur_filtre_nbarg_min' => 'Filtre @filtre@ : il manque @nb@ argument(s)', |
|
| 721 | + 'zbug_erreur_meme_parent' => '{meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)', |
|
| 722 | + 'zbug_erreur_squelette' => 'Erreur(s) dans le squelette', |
|
| 723 | + 'zbug_hors_compilation' => 'Hors Compilation', |
|
| 724 | + 'zbug_info_erreur_squelette' => 'Erreur sur le site', |
|
| 725 | + 'zbug_inversion_ordre_inexistant' => 'inversion d’un ordre inexistant', |
|
| 726 | + 'zbug_pagination_sans_critere' => '#PAGINATION sans critère {pagination} ou employé dans une boucle récursive', |
|
| 727 | + 'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@', |
|
| 728 | + 'zbug_profile' => 'Temps de calcul : @time@', |
|
| 729 | + 'zbug_resultat' => 'résultat', |
|
| 730 | + 'zbug_serveur_indefini' => 'serveur SQL indéfini', |
|
| 731 | + 'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée', |
|
| 732 | + 'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue', |
|
| 733 | + 'zxml_connus_attributs' => 'attributs connus', |
|
| 734 | + 'zxml_de' => 'de', |
|
| 735 | + 'zxml_inconnu_attribut' => 'attribut inconnu', |
|
| 736 | + 'zxml_inconnu_balise' => 'balise inconnue', |
|
| 737 | + 'zxml_inconnu_entite' => 'entité inconnue', |
|
| 738 | + 'zxml_inconnu_id' => 'ID inconnu', |
|
| 739 | + 'zxml_mais_de' => 'mais de', |
|
| 740 | + 'zxml_non_conforme' => 'n’est pas conforme au motif', |
|
| 741 | + 'zxml_non_fils' => 'n’est pas un fils de', |
|
| 742 | + 'zxml_nonvide_balise' => 'balise non vide', |
|
| 743 | + 'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans', |
|
| 744 | + 'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte', |
|
| 745 | + 'zxml_survoler' => 'survoler pour voir les corrects', |
|
| 746 | + 'zxml_valeur_attribut' => 'valeur de l’attribut', |
|
| 747 | + 'zxml_vide_balise' => 'balise vide', |
|
| 748 | + 'zxml_vu' => 'vu auparavant' |
|
| 749 | 749 | ); |
@@ -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 | /** |
@@ -37,15 +37,15 @@ discard block |
||
| 37 | 37 | define('_PHP_MAX', '8.2.99'); |
| 38 | 38 | |
| 39 | 39 | if (!defined('_DIR_RESTREINT_ABS')) { |
| 40 | - /** le nom du repertoire ecrire/ */ |
|
| 41 | - define('_DIR_RESTREINT_ABS', 'ecrire/'); |
|
| 40 | + /** le nom du repertoire ecrire/ */ |
|
| 41 | + define('_DIR_RESTREINT_ABS', 'ecrire/'); |
|
| 42 | 42 | } |
| 43 | 43 | |
| 44 | 44 | /** Chemin relatif pour aller dans ecrire |
| 45 | 45 | * vide si on est dans ecrire, 'ecrire/' sinon */ |
| 46 | 46 | define( |
| 47 | - '_DIR_RESTREINT', |
|
| 48 | - (!is_dir(_DIR_RESTREINT_ABS) ? '' : _DIR_RESTREINT_ABS) |
|
| 47 | + '_DIR_RESTREINT', |
|
| 48 | + (!is_dir(_DIR_RESTREINT_ABS) ? '' : _DIR_RESTREINT_ABS) |
|
| 49 | 49 | ); |
| 50 | 50 | |
| 51 | 51 | /** Chemin relatif pour aller à la racine */ |
@@ -60,8 +60,8 @@ discard block |
||
| 60 | 60 | |
| 61 | 61 | // Icones |
| 62 | 62 | if (!defined('_NOM_IMG_PACK')) { |
| 63 | - /** Nom du dossier images */ |
|
| 64 | - define('_NOM_IMG_PACK', 'images/'); |
|
| 63 | + /** Nom du dossier images */ |
|
| 64 | + define('_NOM_IMG_PACK', 'images/'); |
|
| 65 | 65 | } |
| 66 | 66 | /** le chemin http (relatif) vers les images standard */ |
| 67 | 67 | define('_DIR_IMG_PACK', (_DIR_RACINE . 'prive/' . _NOM_IMG_PACK)); |
@@ -70,8 +70,8 @@ discard block |
||
| 70 | 70 | define('_ROOT_IMG_PACK', dirname(__DIR__) . '/prive/' . _NOM_IMG_PACK); |
| 71 | 71 | |
| 72 | 72 | if (!defined('_JAVASCRIPT')) { |
| 73 | - /** Nom du repertoire des bibliotheques JavaScript */ |
|
| 74 | - define('_JAVASCRIPT', 'javascript/'); |
|
| 73 | + /** Nom du repertoire des bibliotheques JavaScript */ |
|
| 74 | + define('_JAVASCRIPT', 'javascript/'); |
|
| 75 | 75 | } // utilisable avec #CHEMIN et find_in_path |
| 76 | 76 | /** le nom du repertoire des bibliotheques JavaScript du prive */ |
| 77 | 77 | define('_DIR_JAVASCRIPT', (_DIR_RACINE . 'prive/' . _JAVASCRIPT)); |
@@ -81,47 +81,47 @@ discard block |
||
| 81 | 81 | # mais on peut les mettre ailleurs et changer completement les noms |
| 82 | 82 | |
| 83 | 83 | if (!defined('_NOM_TEMPORAIRES_INACCESSIBLES')) { |
| 84 | - /** Nom du repertoire des fichiers Temporaires Inaccessibles par http:// */ |
|
| 85 | - define('_NOM_TEMPORAIRES_INACCESSIBLES', 'tmp/'); |
|
| 84 | + /** Nom du repertoire des fichiers Temporaires Inaccessibles par http:// */ |
|
| 85 | + define('_NOM_TEMPORAIRES_INACCESSIBLES', 'tmp/'); |
|
| 86 | 86 | } |
| 87 | 87 | if (!defined('_NOM_TEMPORAIRES_ACCESSIBLES')) { |
| 88 | - /** Nom du repertoire des fichiers Temporaires Accessibles par http:// */ |
|
| 89 | - define('_NOM_TEMPORAIRES_ACCESSIBLES', 'local/'); |
|
| 88 | + /** Nom du repertoire des fichiers Temporaires Accessibles par http:// */ |
|
| 89 | + define('_NOM_TEMPORAIRES_ACCESSIBLES', 'local/'); |
|
| 90 | 90 | } |
| 91 | 91 | if (!defined('_NOM_PERMANENTS_INACCESSIBLES')) { |
| 92 | - /** Nom du repertoire des fichiers Permanents Inaccessibles par http:// */ |
|
| 93 | - define('_NOM_PERMANENTS_INACCESSIBLES', 'config/'); |
|
| 92 | + /** Nom du repertoire des fichiers Permanents Inaccessibles par http:// */ |
|
| 93 | + define('_NOM_PERMANENTS_INACCESSIBLES', 'config/'); |
|
| 94 | 94 | } |
| 95 | 95 | if (!defined('_NOM_PERMANENTS_ACCESSIBLES')) { |
| 96 | - /** Nom du repertoire des fichiers Permanents Accessibles par http:// */ |
|
| 97 | - define('_NOM_PERMANENTS_ACCESSIBLES', 'IMG/'); |
|
| 96 | + /** Nom du repertoire des fichiers Permanents Accessibles par http:// */ |
|
| 97 | + define('_NOM_PERMANENTS_ACCESSIBLES', 'IMG/'); |
|
| 98 | 98 | } |
| 99 | 99 | |
| 100 | 100 | |
| 101 | 101 | /** Le nom du fichier de personnalisation */ |
| 102 | 102 | if (!defined('_NOM_CONFIG')) { |
| 103 | - define('_NOM_CONFIG', 'mes_options'); |
|
| 103 | + define('_NOM_CONFIG', 'mes_options'); |
|
| 104 | 104 | } |
| 105 | 105 | |
| 106 | 106 | // Son emplacement absolu si on le trouve |
| 107 | 107 | if ( |
| 108 | - @file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php') |
|
| 109 | - or (@file_exists($f = _ROOT_RESTREINT . _NOM_CONFIG . '.php')) |
|
| 108 | + @file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php') |
|
| 109 | + or (@file_exists($f = _ROOT_RESTREINT . _NOM_CONFIG . '.php')) |
|
| 110 | 110 | ) { |
| 111 | - /** Emplacement absolu du fichier d'option */ |
|
| 112 | - define('_FILE_OPTIONS', $f); |
|
| 111 | + /** Emplacement absolu du fichier d'option */ |
|
| 112 | + define('_FILE_OPTIONS', $f); |
|
| 113 | 113 | } else { |
| 114 | - define('_FILE_OPTIONS', ''); |
|
| 114 | + define('_FILE_OPTIONS', ''); |
|
| 115 | 115 | } |
| 116 | 116 | |
| 117 | 117 | if (!defined('MODULES_IDIOMES')) { |
| 118 | - /** |
|
| 119 | - * Modules par défaut pour la traduction. |
|
| 120 | - * |
|
| 121 | - * Constante utilisée par le compilateur et le décompilateur |
|
| 122 | - * sa valeur etant traitée par inc_traduire_dist |
|
| 123 | - */ |
|
| 124 | - define('MODULES_IDIOMES', 'public|spip|ecrire'); |
|
| 118 | + /** |
|
| 119 | + * Modules par défaut pour la traduction. |
|
| 120 | + * |
|
| 121 | + * Constante utilisée par le compilateur et le décompilateur |
|
| 122 | + * sa valeur etant traitée par inc_traduire_dist |
|
| 123 | + */ |
|
| 124 | + define('MODULES_IDIOMES', 'public|spip|ecrire'); |
|
| 125 | 125 | } |
| 126 | 126 | |
| 127 | 127 | // *** Fin des define *** // |
@@ -129,10 +129,10 @@ discard block |
||
| 129 | 129 | |
| 130 | 130 | // Inclure l'ecran de securite |
| 131 | 131 | if ( |
| 132 | - !defined('_ECRAN_SECURITE') |
|
| 133 | - and @file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . 'ecran_securite.php') |
|
| 132 | + !defined('_ECRAN_SECURITE') |
|
| 133 | + and @file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . 'ecran_securite.php') |
|
| 134 | 134 | ) { |
| 135 | - include $f; |
|
| 135 | + include $f; |
|
| 136 | 136 | } |
| 137 | 137 | |
| 138 | 138 | |
@@ -140,30 +140,30 @@ discard block |
||
| 140 | 140 | * Détecteur de robot d'indexation |
| 141 | 141 | */ |
| 142 | 142 | if (!defined('_IS_BOT')) { |
| 143 | - define( |
|
| 144 | - '_IS_BOT', |
|
| 145 | - isset($_SERVER['HTTP_USER_AGENT']) |
|
| 146 | - and preg_match( |
|
| 147 | - // mots generiques |
|
| 148 | - ',bot|slurp|crawler|spider|webvac|yandex|' |
|
| 149 | - // MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot |
|
| 150 | - . 'MSIE 6\.0|' |
|
| 151 | - // UA plus cibles |
|
| 152 | - . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|facebook|flipboard|hootsuite|FunWebProducts|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|MetaURI|Moreover|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti' |
|
| 153 | - . ',i', |
|
| 154 | - (string)$_SERVER['HTTP_USER_AGENT'] |
|
| 155 | - ) |
|
| 156 | - ); |
|
| 143 | + define( |
|
| 144 | + '_IS_BOT', |
|
| 145 | + isset($_SERVER['HTTP_USER_AGENT']) |
|
| 146 | + and preg_match( |
|
| 147 | + // mots generiques |
|
| 148 | + ',bot|slurp|crawler|spider|webvac|yandex|' |
|
| 149 | + // MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot |
|
| 150 | + . 'MSIE 6\.0|' |
|
| 151 | + // UA plus cibles |
|
| 152 | + . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|facebook|flipboard|hootsuite|FunWebProducts|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|MetaURI|Moreover|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti' |
|
| 153 | + . ',i', |
|
| 154 | + (string)$_SERVER['HTTP_USER_AGENT'] |
|
| 155 | + ) |
|
| 156 | + ); |
|
| 157 | 157 | } |
| 158 | 158 | |
| 159 | 159 | if (!defined('_IS_CLI')) { |
| 160 | - define( |
|
| 161 | - '_IS_CLI', |
|
| 162 | - !isset($_SERVER['HTTP_HOST']) |
|
| 163 | - and !strlen($_SERVER['DOCUMENT_ROOT']) |
|
| 164 | - and !empty($_SERVER['argv']) |
|
| 165 | - and empty($_SERVER['REQUEST_METHOD']) |
|
| 166 | - ); |
|
| 160 | + define( |
|
| 161 | + '_IS_CLI', |
|
| 162 | + !isset($_SERVER['HTTP_HOST']) |
|
| 163 | + and !strlen($_SERVER['DOCUMENT_ROOT']) |
|
| 164 | + and !empty($_SERVER['argv']) |
|
| 165 | + and empty($_SERVER['REQUEST_METHOD']) |
|
| 166 | + ); |
|
| 167 | 167 | } |
| 168 | 168 | |
| 169 | 169 | // *** Parametrage par defaut de SPIP *** |
@@ -175,61 +175,61 @@ discard block |
||
| 175 | 175 | // Ne pas les rendre indefinies. |
| 176 | 176 | |
| 177 | 177 | global |
| 178 | - $nombre_de_logs, |
|
| 179 | - $taille_des_logs, |
|
| 180 | - $table_prefix, |
|
| 181 | - $cookie_prefix, |
|
| 182 | - $dossier_squelettes, |
|
| 183 | - $filtrer_javascript, |
|
| 184 | - $type_urls, |
|
| 185 | - $debut_date_publication, |
|
| 186 | - $ip, |
|
| 187 | - $mysql_rappel_connexion, |
|
| 188 | - $mysql_rappel_nom_base, |
|
| 189 | - $test_i18n, |
|
| 190 | - $ignore_auth_http, |
|
| 191 | - $ignore_remote_user, |
|
| 192 | - $derniere_modif_invalide, |
|
| 193 | - $home_server, |
|
| 194 | - $help_server, |
|
| 195 | - $url_glossaire_externe, |
|
| 196 | - $tex_server, |
|
| 197 | - $traiter_math, |
|
| 198 | - $xhtml, |
|
| 199 | - $xml_indent, |
|
| 200 | - $source_vignettes, |
|
| 201 | - $formats_logos, |
|
| 202 | - $controler_dates_rss, |
|
| 203 | - $spip_pipeline, |
|
| 204 | - $spip_matrice, |
|
| 205 | - $plugins, |
|
| 206 | - $surcharges, |
|
| 207 | - $exceptions_des_tables, |
|
| 208 | - $tables_principales, |
|
| 209 | - $table_des_tables, |
|
| 210 | - $tables_auxiliaires, |
|
| 211 | - $table_primary, |
|
| 212 | - $table_date, |
|
| 213 | - $table_titre, |
|
| 214 | - $tables_jointures, |
|
| 215 | - $liste_des_statuts, |
|
| 216 | - $liste_des_etats, |
|
| 217 | - $liste_des_authentifications, |
|
| 218 | - $spip_version_branche, |
|
| 219 | - $spip_version_code, |
|
| 220 | - $spip_version_base, |
|
| 221 | - $spip_sql_version, |
|
| 222 | - $spip_version_affichee, |
|
| 223 | - $visiteur_session, |
|
| 224 | - $auteur_session, |
|
| 225 | - $connect_statut, |
|
| 226 | - $connect_toutes_rubriques, |
|
| 227 | - $hash_recherche, |
|
| 228 | - $hash_recherche_strict, |
|
| 229 | - $ldap_present, |
|
| 230 | - $meta, |
|
| 231 | - $connect_id_rubrique, |
|
| 232 | - $puce; |
|
| 178 | + $nombre_de_logs, |
|
| 179 | + $taille_des_logs, |
|
| 180 | + $table_prefix, |
|
| 181 | + $cookie_prefix, |
|
| 182 | + $dossier_squelettes, |
|
| 183 | + $filtrer_javascript, |
|
| 184 | + $type_urls, |
|
| 185 | + $debut_date_publication, |
|
| 186 | + $ip, |
|
| 187 | + $mysql_rappel_connexion, |
|
| 188 | + $mysql_rappel_nom_base, |
|
| 189 | + $test_i18n, |
|
| 190 | + $ignore_auth_http, |
|
| 191 | + $ignore_remote_user, |
|
| 192 | + $derniere_modif_invalide, |
|
| 193 | + $home_server, |
|
| 194 | + $help_server, |
|
| 195 | + $url_glossaire_externe, |
|
| 196 | + $tex_server, |
|
| 197 | + $traiter_math, |
|
| 198 | + $xhtml, |
|
| 199 | + $xml_indent, |
|
| 200 | + $source_vignettes, |
|
| 201 | + $formats_logos, |
|
| 202 | + $controler_dates_rss, |
|
| 203 | + $spip_pipeline, |
|
| 204 | + $spip_matrice, |
|
| 205 | + $plugins, |
|
| 206 | + $surcharges, |
|
| 207 | + $exceptions_des_tables, |
|
| 208 | + $tables_principales, |
|
| 209 | + $table_des_tables, |
|
| 210 | + $tables_auxiliaires, |
|
| 211 | + $table_primary, |
|
| 212 | + $table_date, |
|
| 213 | + $table_titre, |
|
| 214 | + $tables_jointures, |
|
| 215 | + $liste_des_statuts, |
|
| 216 | + $liste_des_etats, |
|
| 217 | + $liste_des_authentifications, |
|
| 218 | + $spip_version_branche, |
|
| 219 | + $spip_version_code, |
|
| 220 | + $spip_version_base, |
|
| 221 | + $spip_sql_version, |
|
| 222 | + $spip_version_affichee, |
|
| 223 | + $visiteur_session, |
|
| 224 | + $auteur_session, |
|
| 225 | + $connect_statut, |
|
| 226 | + $connect_toutes_rubriques, |
|
| 227 | + $hash_recherche, |
|
| 228 | + $hash_recherche_strict, |
|
| 229 | + $ldap_present, |
|
| 230 | + $meta, |
|
| 231 | + $connect_id_rubrique, |
|
| 232 | + $puce; |
|
| 233 | 233 | |
| 234 | 234 | # comment on logge, defaut 4 tmp/spip.log de 100k, 0 ou 0 suppriment le log |
| 235 | 235 | $nombre_de_logs = 4; |
@@ -284,48 +284,48 @@ discard block |
||
| 284 | 284 | // Prendre en compte les entetes HTTP_X_FORWARDED_XX |
| 285 | 285 | // |
| 286 | 286 | if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { |
| 287 | - if (empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { |
|
| 288 | - $_SERVER['HTTP_X_FORWARDED_HOST'] = $_SERVER['HTTP_HOST']; |
|
| 289 | - } |
|
| 290 | - if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) { |
|
| 291 | - $_SERVER['HTTP_X_FORWARDED_PORT'] = 443; |
|
| 292 | - } |
|
| 287 | + if (empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { |
|
| 288 | + $_SERVER['HTTP_X_FORWARDED_HOST'] = $_SERVER['HTTP_HOST']; |
|
| 289 | + } |
|
| 290 | + if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) { |
|
| 291 | + $_SERVER['HTTP_X_FORWARDED_PORT'] = 443; |
|
| 292 | + } |
|
| 293 | 293 | } |
| 294 | 294 | if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { |
| 295 | - if (isset($_SERVER['HTTP_X_FORWARDED_PORT']) and is_numeric($_SERVER['HTTP_X_FORWARDED_PORT'])) { |
|
| 296 | - $_SERVER['SERVER_PORT'] = $_SERVER['HTTP_X_FORWARDED_PORT']; |
|
| 297 | - if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { |
|
| 298 | - $_SERVER['HTTPS'] = 'on'; |
|
| 299 | - if (isset($_SERVER['REQUEST_SCHEME'])) { |
|
| 300 | - $_SERVER['REQUEST_SCHEME'] = 'https'; |
|
| 301 | - } |
|
| 302 | - } |
|
| 303 | - } |
|
| 304 | - $host = $_SERVER['HTTP_X_FORWARDED_HOST']; |
|
| 305 | - if (strpos($host, ',') !== false) { |
|
| 306 | - $h = explode(',', $host); |
|
| 307 | - $host = trim(reset($h)); |
|
| 308 | - } |
|
| 309 | - // securite sur le contenu de l'entete |
|
| 310 | - $host = strtr($host, "<>?\"\{\}\$'` \r\n", '____________'); |
|
| 311 | - $_SERVER['HTTP_HOST'] = $host; |
|
| 295 | + if (isset($_SERVER['HTTP_X_FORWARDED_PORT']) and is_numeric($_SERVER['HTTP_X_FORWARDED_PORT'])) { |
|
| 296 | + $_SERVER['SERVER_PORT'] = $_SERVER['HTTP_X_FORWARDED_PORT']; |
|
| 297 | + if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) and $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { |
|
| 298 | + $_SERVER['HTTPS'] = 'on'; |
|
| 299 | + if (isset($_SERVER['REQUEST_SCHEME'])) { |
|
| 300 | + $_SERVER['REQUEST_SCHEME'] = 'https'; |
|
| 301 | + } |
|
| 302 | + } |
|
| 303 | + } |
|
| 304 | + $host = $_SERVER['HTTP_X_FORWARDED_HOST']; |
|
| 305 | + if (strpos($host, ',') !== false) { |
|
| 306 | + $h = explode(',', $host); |
|
| 307 | + $host = trim(reset($h)); |
|
| 308 | + } |
|
| 309 | + // securite sur le contenu de l'entete |
|
| 310 | + $host = strtr($host, "<>?\"\{\}\$'` \r\n", '____________'); |
|
| 311 | + $_SERVER['HTTP_HOST'] = $host; |
|
| 312 | 312 | } |
| 313 | 313 | // |
| 314 | 314 | // On note le numero IP du client dans la variable $ip |
| 315 | 315 | // |
| 316 | 316 | if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { |
| 317 | - $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; |
|
| 318 | - if (strpos($ip, ',') !== false) { |
|
| 319 | - $ip = explode(',', $ip); |
|
| 320 | - $ip = reset($ip); |
|
| 321 | - } |
|
| 322 | - // ecraser $_SERVER['REMOTE_ADDR'] si elle est en localhost |
|
| 323 | - if (isset($_SERVER['REMOTE_ADDR']) and $_SERVER['REMOTE_ADDR'] === '127.0.0.1') { |
|
| 324 | - $_SERVER['REMOTE_ADDR'] = $ip; |
|
| 325 | - } |
|
| 317 | + $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; |
|
| 318 | + if (strpos($ip, ',') !== false) { |
|
| 319 | + $ip = explode(',', $ip); |
|
| 320 | + $ip = reset($ip); |
|
| 321 | + } |
|
| 322 | + // ecraser $_SERVER['REMOTE_ADDR'] si elle est en localhost |
|
| 323 | + if (isset($_SERVER['REMOTE_ADDR']) and $_SERVER['REMOTE_ADDR'] === '127.0.0.1') { |
|
| 324 | + $_SERVER['REMOTE_ADDR'] = $ip; |
|
| 325 | + } |
|
| 326 | 326 | } |
| 327 | 327 | if (isset($_SERVER['REMOTE_ADDR'])) { |
| 328 | - $ip = $_SERVER['REMOTE_ADDR']; |
|
| 328 | + $ip = $_SERVER['REMOTE_ADDR']; |
|
| 329 | 329 | } |
| 330 | 330 | |
| 331 | 331 | // Pour renforcer la privacy, decommentez la ligne ci-dessous (ou recopiez-la |
@@ -410,24 +410,24 @@ discard block |
||
| 410 | 410 | |
| 411 | 411 | // Liste des statuts. |
| 412 | 412 | $liste_des_statuts = [ |
| 413 | - 'info_administrateurs' => '0minirezo', |
|
| 414 | - 'info_redacteurs' => '1comite', |
|
| 415 | - 'info_visiteurs' => '6forum', |
|
| 416 | - 'texte_statut_poubelle' => '5poubelle' |
|
| 413 | + 'info_administrateurs' => '0minirezo', |
|
| 414 | + 'info_redacteurs' => '1comite', |
|
| 415 | + 'info_visiteurs' => '6forum', |
|
| 416 | + 'texte_statut_poubelle' => '5poubelle' |
|
| 417 | 417 | ]; |
| 418 | 418 | |
| 419 | 419 | $liste_des_etats = [ |
| 420 | - 'texte_statut_en_cours_redaction' => 'prepa', |
|
| 421 | - 'texte_statut_propose_evaluation' => 'prop', |
|
| 422 | - 'texte_statut_publie' => 'publie', |
|
| 423 | - 'texte_statut_poubelle' => 'poubelle', |
|
| 424 | - 'texte_statut_refuse' => 'refuse' |
|
| 420 | + 'texte_statut_en_cours_redaction' => 'prepa', |
|
| 421 | + 'texte_statut_propose_evaluation' => 'prop', |
|
| 422 | + 'texte_statut_publie' => 'publie', |
|
| 423 | + 'texte_statut_poubelle' => 'poubelle', |
|
| 424 | + 'texte_statut_refuse' => 'refuse' |
|
| 425 | 425 | ]; |
| 426 | 426 | |
| 427 | 427 | // liste des methodes d'authentifications |
| 428 | 428 | $liste_des_authentifications = [ |
| 429 | - 'spip' => 'spip', |
|
| 430 | - 'ldap' => 'ldap' |
|
| 429 | + 'spip' => 'spip', |
|
| 430 | + 'ldap' => 'ldap' |
|
| 431 | 431 | ]; |
| 432 | 432 | |
| 433 | 433 | // Experimental : pour supprimer systematiquement l'affichage des numeros |
@@ -477,12 +477,12 @@ discard block |
||
| 477 | 477 | // Definition personnelles eventuelles |
| 478 | 478 | |
| 479 | 479 | if (_FILE_OPTIONS) { |
| 480 | - include_once _FILE_OPTIONS; |
|
| 480 | + include_once _FILE_OPTIONS; |
|
| 481 | 481 | } |
| 482 | 482 | |
| 483 | 483 | if (!defined('SPIP_ERREUR_REPORT')) { |
| 484 | - /** Masquer les warning */ |
|
| 485 | - define('SPIP_ERREUR_REPORT', E_ALL ^ E_NOTICE ^ E_DEPRECATED); |
|
| 484 | + /** Masquer les warning */ |
|
| 485 | + define('SPIP_ERREUR_REPORT', E_ALL ^ E_NOTICE ^ E_DEPRECATED); |
|
| 486 | 486 | } |
| 487 | 487 | error_reporting(SPIP_ERREUR_REPORT); |
| 488 | 488 | |
@@ -495,10 +495,10 @@ discard block |
||
| 495 | 495 | // ===> on execute en neutralisant les messages d'erreur |
| 496 | 496 | |
| 497 | 497 | spip_initialisation_core( |
| 498 | - (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES), |
|
| 499 | - (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES), |
|
| 500 | - (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES), |
|
| 501 | - (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) |
|
| 498 | + (_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES), |
|
| 499 | + (_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES), |
|
| 500 | + (_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES), |
|
| 501 | + (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) |
|
| 502 | 502 | ); |
| 503 | 503 | |
| 504 | 504 | |
@@ -508,70 +508,70 @@ discard block |
||
| 508 | 508 | // donc il faut avoir tout fini ici avant de charger les plugins |
| 509 | 509 | |
| 510 | 510 | if (@is_readable(_CACHE_PLUGINS_OPT) and @is_readable(_CACHE_PLUGINS_PATH)) { |
| 511 | - // chargement optimise precompile |
|
| 512 | - include_once(_CACHE_PLUGINS_OPT); |
|
| 511 | + // chargement optimise precompile |
|
| 512 | + include_once(_CACHE_PLUGINS_OPT); |
|
| 513 | 513 | } else { |
| 514 | - spip_initialisation_suite(); |
|
| 515 | - include_spip('inc/plugin'); |
|
| 516 | - // generer les fichiers php precompiles |
|
| 517 | - // de chargement des plugins et des pipelines |
|
| 518 | - actualise_plugins_actifs(); |
|
| 514 | + spip_initialisation_suite(); |
|
| 515 | + include_spip('inc/plugin'); |
|
| 516 | + // generer les fichiers php precompiles |
|
| 517 | + // de chargement des plugins et des pipelines |
|
| 518 | + actualise_plugins_actifs(); |
|
| 519 | 519 | } |
| 520 | 520 | |
| 521 | 521 | // Initialisations non critiques surchargeables par les plugins |
| 522 | 522 | spip_initialisation_suite(); |
| 523 | 523 | |
| 524 | 524 | if (!defined('_LOG_FILTRE_GRAVITE')) { |
| 525 | - /** niveau maxi d'enregistrement des logs */ |
|
| 526 | - define('_LOG_FILTRE_GRAVITE', _LOG_INFO_IMPORTANTE); |
|
| 525 | + /** niveau maxi d'enregistrement des logs */ |
|
| 526 | + define('_LOG_FILTRE_GRAVITE', _LOG_INFO_IMPORTANTE); |
|
| 527 | 527 | } |
| 528 | 528 | |
| 529 | 529 | if (!defined('_OUTILS_DEVELOPPEURS')) { |
| 530 | - /** Activer des outils pour développeurs ? */ |
|
| 531 | - define('_OUTILS_DEVELOPPEURS', false); |
|
| 530 | + /** Activer des outils pour développeurs ? */ |
|
| 531 | + define('_OUTILS_DEVELOPPEURS', false); |
|
| 532 | 532 | } |
| 533 | 533 | |
| 534 | 534 | // charger systematiquement inc/autoriser dans l'espace restreint |
| 535 | 535 | if (test_espace_prive()) { |
| 536 | - include_spip('inc/autoriser'); |
|
| 536 | + include_spip('inc/autoriser'); |
|
| 537 | 537 | } |
| 538 | 538 | // |
| 539 | 539 | // Installer Spip si pas installe... sauf si justement on est en train |
| 540 | 540 | // |
| 541 | 541 | if ( |
| 542 | - !(_FILE_CONNECT |
|
| 543 | - or autoriser_sans_cookie(_request('exec')) |
|
| 544 | - or _request('action') == 'cookie' |
|
| 545 | - or _request('action') == 'converser' |
|
| 546 | - or _request('action') == 'test_dirs') |
|
| 542 | + !(_FILE_CONNECT |
|
| 543 | + or autoriser_sans_cookie(_request('exec')) |
|
| 544 | + or _request('action') == 'cookie' |
|
| 545 | + or _request('action') == 'converser' |
|
| 546 | + or _request('action') == 'test_dirs') |
|
| 547 | 547 | ) { |
| 548 | - // Si on peut installer, on lance illico |
|
| 549 | - if (test_espace_prive()) { |
|
| 550 | - include_spip('inc/headers'); |
|
| 551 | - redirige_url_ecrire('install'); |
|
| 552 | - } else { |
|
| 553 | - // Si on est dans le site public, dire que qq s'en occupe |
|
| 554 | - include_spip('inc/minipres'); |
|
| 555 | - utiliser_langue_visiteur(); |
|
| 556 | - echo minipres(_T('info_travaux_titre'), "<p style='text-align: center;'>" . _T('info_travaux_texte') . '</p>', ['status' => 503]); |
|
| 557 | - exit; |
|
| 558 | - } |
|
| 559 | - // autrement c'est une install ad hoc (spikini...), on sait pas faire |
|
| 548 | + // Si on peut installer, on lance illico |
|
| 549 | + if (test_espace_prive()) { |
|
| 550 | + include_spip('inc/headers'); |
|
| 551 | + redirige_url_ecrire('install'); |
|
| 552 | + } else { |
|
| 553 | + // Si on est dans le site public, dire que qq s'en occupe |
|
| 554 | + include_spip('inc/minipres'); |
|
| 555 | + utiliser_langue_visiteur(); |
|
| 556 | + echo minipres(_T('info_travaux_titre'), "<p style='text-align: center;'>" . _T('info_travaux_texte') . '</p>', ['status' => 503]); |
|
| 557 | + exit; |
|
| 558 | + } |
|
| 559 | + // autrement c'est une install ad hoc (spikini...), on sait pas faire |
|
| 560 | 560 | } |
| 561 | 561 | |
| 562 | 562 | // memoriser un tri sessionne eventuel |
| 563 | 563 | if ( |
| 564 | - isset($_REQUEST['var_memotri']) |
|
| 565 | - and $t = $_REQUEST['var_memotri'] |
|
| 566 | - and (strncmp($t, 'trisession', 10) == 0 or strncmp($t, 'senssession', 11) == 0) |
|
| 564 | + isset($_REQUEST['var_memotri']) |
|
| 565 | + and $t = $_REQUEST['var_memotri'] |
|
| 566 | + and (strncmp($t, 'trisession', 10) == 0 or strncmp($t, 'senssession', 11) == 0) |
|
| 567 | 567 | ) { |
| 568 | - if (!function_exists('session_set')) { |
|
| 569 | - include_spip('inc/session'); |
|
| 570 | - } |
|
| 571 | - $t = preg_replace(',\W,', '_', $t); |
|
| 572 | - if ($v = _request($t)) { |
|
| 573 | - session_set($t, $v); |
|
| 574 | - } |
|
| 568 | + if (!function_exists('session_set')) { |
|
| 569 | + include_spip('inc/session'); |
|
| 570 | + } |
|
| 571 | + $t = preg_replace(',\W,', '_', $t); |
|
| 572 | + if ($v = _request($t)) { |
|
| 573 | + session_set($t, $v); |
|
| 574 | + } |
|
| 575 | 575 | } |
| 576 | 576 | |
| 577 | 577 | /** |
@@ -581,22 +581,22 @@ discard block |
||
| 581 | 581 | * La globale $spip_header_silencieux permet de rendre le header minimal pour raisons de securite |
| 582 | 582 | */ |
| 583 | 583 | if (!defined('_HEADER_COMPOSED_BY')) { |
| 584 | - define('_HEADER_COMPOSED_BY', 'Composed-By: SPIP'); |
|
| 584 | + define('_HEADER_COMPOSED_BY', 'Composed-By: SPIP'); |
|
| 585 | 585 | } |
| 586 | 586 | if (!headers_sent() and _HEADER_COMPOSED_BY) { |
| 587 | - if (!defined('_HEADER_VARY')) { |
|
| 588 | - define('_HEADER_VARY', 'Vary: Cookie, Accept-Encoding'); |
|
| 589 | - } |
|
| 590 | - if (_HEADER_VARY) { |
|
| 591 | - header(_HEADER_VARY); |
|
| 592 | - } |
|
| 593 | - if (!isset($GLOBALS['spip_header_silencieux']) or !$GLOBALS['spip_header_silencieux']) { |
|
| 594 | - include_spip('inc/filtres_mini'); |
|
| 595 | - header(_HEADER_COMPOSED_BY . " $spip_version_affichee @ www.spip.net + " . url_absolue(_DIR_VAR . 'config.txt')); |
|
| 596 | - } else { |
|
| 597 | - // header minimal |
|
| 598 | - header(_HEADER_COMPOSED_BY . ' @ www.spip.net'); |
|
| 599 | - } |
|
| 587 | + if (!defined('_HEADER_VARY')) { |
|
| 588 | + define('_HEADER_VARY', 'Vary: Cookie, Accept-Encoding'); |
|
| 589 | + } |
|
| 590 | + if (_HEADER_VARY) { |
|
| 591 | + header(_HEADER_VARY); |
|
| 592 | + } |
|
| 593 | + if (!isset($GLOBALS['spip_header_silencieux']) or !$GLOBALS['spip_header_silencieux']) { |
|
| 594 | + include_spip('inc/filtres_mini'); |
|
| 595 | + header(_HEADER_COMPOSED_BY . " $spip_version_affichee @ www.spip.net + " . url_absolue(_DIR_VAR . 'config.txt')); |
|
| 596 | + } else { |
|
| 597 | + // header minimal |
|
| 598 | + header(_HEADER_COMPOSED_BY . ' @ www.spip.net'); |
|
| 599 | + } |
|
| 600 | 600 | } |
| 601 | 601 | |
| 602 | 602 | $methode = ($_SERVER['REQUEST_METHOD'] ?? ((php_sapi_name() == 'cli') ? 'cli' : '')); |
@@ -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 | /** |
@@ -33,36 +33,36 @@ discard block |
||
| 33 | 33 | */ |
| 34 | 34 | function action_editer_objet_dist($id = null, $objet = null, $set = null) { |
| 35 | 35 | |
| 36 | - // appel direct depuis une url avec arg = "objet/id" |
|
| 37 | - if (is_null($id) or is_null($objet)) { |
|
| 38 | - $securiser_action = charger_fonction('securiser_action', 'inc'); |
|
| 39 | - $arg = $securiser_action(); |
|
| 40 | - [$objet, $id] = array_pad(explode('/', $arg, 2), 2, null); |
|
| 41 | - } |
|
| 42 | - |
|
| 43 | - // appel incorrect ou depuis une url erronnée interdit |
|
| 44 | - if (is_null($id) or is_null($objet)) { |
|
| 45 | - include_spip('inc/minipres'); |
|
| 46 | - echo minipres(_T('info_acces_interdit')); |
|
| 47 | - die(); |
|
| 48 | - } |
|
| 49 | - |
|
| 50 | - // si id n'est pas un nombre, c'est une creation |
|
| 51 | - // mais on verifie qu'on a toutes les donnees qu'il faut. |
|
| 52 | - if (!$id = intval($id)) { |
|
| 53 | - // on ne sait pas si un parent existe mais on essaye |
|
| 54 | - $id_parent = _request('id_parent'); |
|
| 55 | - $id = objet_inserer($objet, $id_parent); |
|
| 56 | - } |
|
| 57 | - |
|
| 58 | - if (!($id = intval($id)) > 0) { |
|
| 59 | - return [$id, _L('echec enregistrement en base')]; |
|
| 60 | - } |
|
| 61 | - |
|
| 62 | - // Enregistre l'envoi dans la BD |
|
| 63 | - $err = objet_modifier($objet, $id, $set); |
|
| 64 | - |
|
| 65 | - return [$id, $err]; |
|
| 36 | + // appel direct depuis une url avec arg = "objet/id" |
|
| 37 | + if (is_null($id) or is_null($objet)) { |
|
| 38 | + $securiser_action = charger_fonction('securiser_action', 'inc'); |
|
| 39 | + $arg = $securiser_action(); |
|
| 40 | + [$objet, $id] = array_pad(explode('/', $arg, 2), 2, null); |
|
| 41 | + } |
|
| 42 | + |
|
| 43 | + // appel incorrect ou depuis une url erronnée interdit |
|
| 44 | + if (is_null($id) or is_null($objet)) { |
|
| 45 | + include_spip('inc/minipres'); |
|
| 46 | + echo minipres(_T('info_acces_interdit')); |
|
| 47 | + die(); |
|
| 48 | + } |
|
| 49 | + |
|
| 50 | + // si id n'est pas un nombre, c'est une creation |
|
| 51 | + // mais on verifie qu'on a toutes les donnees qu'il faut. |
|
| 52 | + if (!$id = intval($id)) { |
|
| 53 | + // on ne sait pas si un parent existe mais on essaye |
|
| 54 | + $id_parent = _request('id_parent'); |
|
| 55 | + $id = objet_inserer($objet, $id_parent); |
|
| 56 | + } |
|
| 57 | + |
|
| 58 | + if (!($id = intval($id)) > 0) { |
|
| 59 | + return [$id, _L('echec enregistrement en base')]; |
|
| 60 | + } |
|
| 61 | + |
|
| 62 | + // Enregistre l'envoi dans la BD |
|
| 63 | + $err = objet_modifier($objet, $id, $set); |
|
| 64 | + |
|
| 65 | + return [$id, $err]; |
|
| 66 | 66 | } |
| 67 | 67 | |
| 68 | 68 | /** |
@@ -75,85 +75,85 @@ discard block |
||
| 75 | 75 | * @return mixed|string |
| 76 | 76 | */ |
| 77 | 77 | function objet_modifier($objet, $id, $set = null) { |
| 78 | - if (($t = objet_type($objet)) !== $objet) { |
|
| 79 | - spip_log("objet_modifier: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 80 | - $objet = $t; |
|
| 81 | - } |
|
| 82 | - if ( |
|
| 83 | - include_spip('action/editer_' . $objet) |
|
| 84 | - and function_exists($modifier = $objet . '_modifier') |
|
| 85 | - ) { |
|
| 86 | - return $modifier($id, $set); |
|
| 87 | - } |
|
| 88 | - |
|
| 89 | - $table_sql = table_objet_sql($objet); |
|
| 90 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 91 | - $desc = $trouver_table($table_sql); |
|
| 92 | - if (!$desc or !isset($desc['field'])) { |
|
| 93 | - spip_log("Objet $objet inconnu dans objet_modifier", 'editer' . _LOG_ERREUR); |
|
| 94 | - |
|
| 95 | - return _L("Erreur objet $objet inconnu"); |
|
| 96 | - } |
|
| 97 | - include_spip('inc/modifier'); |
|
| 98 | - |
|
| 99 | - $champ_date = ''; |
|
| 100 | - if (isset($desc['date']) and $desc['date']) { |
|
| 101 | - $champ_date = $desc['date']; |
|
| 102 | - } elseif (isset($desc['field']['date'])) { |
|
| 103 | - $champ_date = 'date'; |
|
| 104 | - } |
|
| 105 | - |
|
| 106 | - $include_list = array_keys($desc['field']); |
|
| 107 | - // on ne traite pas la cle primaire par defaut, notamment car |
|
| 108 | - // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base |
|
| 109 | - $include_list = array_diff($include_list, [$desc['key']['PRIMARY KEY']]); |
|
| 110 | - |
|
| 111 | - if (isset($desc['champs_editables']) and is_array($desc['champs_editables'])) { |
|
| 112 | - $include_list = $desc['champs_editables']; |
|
| 113 | - } |
|
| 114 | - $c = collecter_requests( |
|
| 115 | - // include list |
|
| 116 | - $include_list, |
|
| 117 | - // exclude list |
|
| 118 | - [$champ_date, 'statut', 'id_parent', 'id_secteur'], |
|
| 119 | - // donnees eventuellement fournies |
|
| 120 | - $set |
|
| 121 | - ); |
|
| 122 | - |
|
| 123 | - // Si l'objet est publie, invalider les caches et demander sa reindexation |
|
| 124 | - if (objet_test_si_publie($objet, $id)) { |
|
| 125 | - $invalideur = "id='$objet/$id'"; |
|
| 126 | - $indexation = true; |
|
| 127 | - } else { |
|
| 128 | - $invalideur = ''; |
|
| 129 | - $indexation = false; |
|
| 130 | - } |
|
| 131 | - |
|
| 132 | - if ( |
|
| 133 | - $err = objet_modifier_champs( |
|
| 134 | - $objet, |
|
| 135 | - $id, |
|
| 136 | - [ |
|
| 137 | - 'data' => $set, |
|
| 138 | - 'nonvide' => '', |
|
| 139 | - 'invalideur' => $invalideur, |
|
| 140 | - 'indexation' => $indexation, |
|
| 141 | - // champ a mettre a date('Y-m-d H:i:s') s'il y a modif |
|
| 142 | - 'date_modif' => (isset($desc['field']['date_modif']) ? 'date_modif' : '') |
|
| 143 | - ], |
|
| 144 | - $c |
|
| 145 | - ) |
|
| 146 | - ) { |
|
| 147 | - return $err; |
|
| 148 | - } |
|
| 149 | - |
|
| 150 | - // Modification de statut, changement de rubrique ? |
|
| 151 | - // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout |
|
| 152 | - // le tableau $set hors liste d’exclusion, mais du coup on a possiblement des champs en trop. |
|
| 153 | - $c = collecter_requests([$champ_date, 'statut', 'id_parent'], [], $set); |
|
| 154 | - $err = objet_instituer($objet, $id, $c); |
|
| 155 | - |
|
| 156 | - return $err; |
|
| 78 | + if (($t = objet_type($objet)) !== $objet) { |
|
| 79 | + spip_log("objet_modifier: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 80 | + $objet = $t; |
|
| 81 | + } |
|
| 82 | + if ( |
|
| 83 | + include_spip('action/editer_' . $objet) |
|
| 84 | + and function_exists($modifier = $objet . '_modifier') |
|
| 85 | + ) { |
|
| 86 | + return $modifier($id, $set); |
|
| 87 | + } |
|
| 88 | + |
|
| 89 | + $table_sql = table_objet_sql($objet); |
|
| 90 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 91 | + $desc = $trouver_table($table_sql); |
|
| 92 | + if (!$desc or !isset($desc['field'])) { |
|
| 93 | + spip_log("Objet $objet inconnu dans objet_modifier", 'editer' . _LOG_ERREUR); |
|
| 94 | + |
|
| 95 | + return _L("Erreur objet $objet inconnu"); |
|
| 96 | + } |
|
| 97 | + include_spip('inc/modifier'); |
|
| 98 | + |
|
| 99 | + $champ_date = ''; |
|
| 100 | + if (isset($desc['date']) and $desc['date']) { |
|
| 101 | + $champ_date = $desc['date']; |
|
| 102 | + } elseif (isset($desc['field']['date'])) { |
|
| 103 | + $champ_date = 'date'; |
|
| 104 | + } |
|
| 105 | + |
|
| 106 | + $include_list = array_keys($desc['field']); |
|
| 107 | + // on ne traite pas la cle primaire par defaut, notamment car |
|
| 108 | + // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base |
|
| 109 | + $include_list = array_diff($include_list, [$desc['key']['PRIMARY KEY']]); |
|
| 110 | + |
|
| 111 | + if (isset($desc['champs_editables']) and is_array($desc['champs_editables'])) { |
|
| 112 | + $include_list = $desc['champs_editables']; |
|
| 113 | + } |
|
| 114 | + $c = collecter_requests( |
|
| 115 | + // include list |
|
| 116 | + $include_list, |
|
| 117 | + // exclude list |
|
| 118 | + [$champ_date, 'statut', 'id_parent', 'id_secteur'], |
|
| 119 | + // donnees eventuellement fournies |
|
| 120 | + $set |
|
| 121 | + ); |
|
| 122 | + |
|
| 123 | + // Si l'objet est publie, invalider les caches et demander sa reindexation |
|
| 124 | + if (objet_test_si_publie($objet, $id)) { |
|
| 125 | + $invalideur = "id='$objet/$id'"; |
|
| 126 | + $indexation = true; |
|
| 127 | + } else { |
|
| 128 | + $invalideur = ''; |
|
| 129 | + $indexation = false; |
|
| 130 | + } |
|
| 131 | + |
|
| 132 | + if ( |
|
| 133 | + $err = objet_modifier_champs( |
|
| 134 | + $objet, |
|
| 135 | + $id, |
|
| 136 | + [ |
|
| 137 | + 'data' => $set, |
|
| 138 | + 'nonvide' => '', |
|
| 139 | + 'invalideur' => $invalideur, |
|
| 140 | + 'indexation' => $indexation, |
|
| 141 | + // champ a mettre a date('Y-m-d H:i:s') s'il y a modif |
|
| 142 | + 'date_modif' => (isset($desc['field']['date_modif']) ? 'date_modif' : '') |
|
| 143 | + ], |
|
| 144 | + $c |
|
| 145 | + ) |
|
| 146 | + ) { |
|
| 147 | + return $err; |
|
| 148 | + } |
|
| 149 | + |
|
| 150 | + // Modification de statut, changement de rubrique ? |
|
| 151 | + // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout |
|
| 152 | + // le tableau $set hors liste d’exclusion, mais du coup on a possiblement des champs en trop. |
|
| 153 | + $c = collecter_requests([$champ_date, 'statut', 'id_parent'], [], $set); |
|
| 154 | + $err = objet_instituer($objet, $id, $c); |
|
| 155 | + |
|
| 156 | + return $err; |
|
| 157 | 157 | } |
| 158 | 158 | |
| 159 | 159 | /** |
@@ -168,135 +168,135 @@ discard block |
||
| 168 | 168 | * @return bool|int |
| 169 | 169 | */ |
| 170 | 170 | function objet_inserer($objet, $id_parent = null, $set = null) { |
| 171 | - $d = null; |
|
| 172 | - if (($t = objet_type($objet)) !== $objet) { |
|
| 173 | - spip_log("objet_inserer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 174 | - $objet = $t; |
|
| 175 | - } |
|
| 176 | - if ( |
|
| 177 | - include_spip('action/editer_' . $objet) |
|
| 178 | - and function_exists($inserer = $objet . '_inserer') |
|
| 179 | - ) { |
|
| 180 | - return $inserer($id_parent, $set); |
|
| 181 | - } |
|
| 182 | - |
|
| 183 | - $table_sql = table_objet_sql($objet); |
|
| 184 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 185 | - $desc = $trouver_table($table_sql); |
|
| 186 | - if (!$desc or !isset($desc['field'])) { |
|
| 187 | - return 0; |
|
| 188 | - } |
|
| 189 | - |
|
| 190 | - $lang_rub = ''; |
|
| 191 | - $champs = []; |
|
| 192 | - if (isset($desc['field']['id_rubrique'])) { |
|
| 193 | - // Si id_rubrique vaut 0 ou n'est pas definie, creer l'objet |
|
| 194 | - // dans la premiere rubrique racine |
|
| 195 | - if (!$id_rubrique = intval($id_parent)) { |
|
| 196 | - $row = sql_fetsel('id_rubrique, id_secteur, lang', 'spip_rubriques', 'id_parent=0', '', '0+titre,titre', '1'); |
|
| 197 | - $id_rubrique = $row['id_rubrique']; |
|
| 198 | - } else { |
|
| 199 | - $row = sql_fetsel('lang, id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 200 | - } |
|
| 201 | - |
|
| 202 | - $champs['id_rubrique'] = $id_rubrique; |
|
| 203 | - if (isset($desc['field']['id_secteur'])) { |
|
| 204 | - $champs['id_secteur'] = $row['id_secteur']; |
|
| 205 | - } |
|
| 206 | - $lang_rub = $row['lang']; |
|
| 207 | - } |
|
| 208 | - |
|
| 209 | - // La langue a la creation : si les liens de traduction sont autorises |
|
| 210 | - // dans les rubriques, on essaie avec la langue de l'auteur, |
|
| 211 | - // ou a defaut celle de la rubrique |
|
| 212 | - // Sinon c'est la langue de la rubrique qui est choisie + heritee |
|
| 213 | - if ( |
|
| 214 | - isset($desc['field']['lang']) and !empty($GLOBALS['meta']['multi_objets']) and in_array( |
|
| 215 | - $table_sql, |
|
| 216 | - explode(',', $GLOBALS['meta']['multi_objets']) |
|
| 217 | - ) |
|
| 218 | - ) { |
|
| 219 | - lang_select($GLOBALS['visiteur_session']['lang']); |
|
| 220 | - if ( |
|
| 221 | - in_array( |
|
| 222 | - $GLOBALS['spip_lang'], |
|
| 223 | - explode(',', $GLOBALS['meta']['langues_multilingue']) |
|
| 224 | - ) |
|
| 225 | - ) { |
|
| 226 | - $champs['lang'] = $GLOBALS['spip_lang']; |
|
| 227 | - if (isset($desc['field']['langue_choisie'])) { |
|
| 228 | - $champs['langue_choisie'] = 'oui'; |
|
| 229 | - } |
|
| 230 | - } |
|
| 231 | - } elseif (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) { |
|
| 232 | - $champs['lang'] = ($lang_rub ?: $GLOBALS['meta']['langue_site']); |
|
| 233 | - $champs['langue_choisie'] = 'non'; |
|
| 234 | - } |
|
| 235 | - |
|
| 236 | - if (isset($desc['field']['statut'])) { |
|
| 237 | - if (isset($desc['statut_textes_instituer'])) { |
|
| 238 | - $cles_statut = array_keys($desc['statut_textes_instituer']); |
|
| 239 | - $champs['statut'] = reset($cles_statut); |
|
| 240 | - } else { |
|
| 241 | - $champs['statut'] = 'prepa'; |
|
| 242 | - } |
|
| 243 | - } |
|
| 244 | - |
|
| 245 | - |
|
| 246 | - if ((isset($desc['date']) and $d = $desc['date']) or isset($desc['field'][$d = 'date'])) { |
|
| 247 | - $champs[$d] = date('Y-m-d H:i:s'); |
|
| 248 | - } |
|
| 249 | - |
|
| 250 | - if ($set) { |
|
| 251 | - $champs = array_merge($champs, $set); |
|
| 252 | - } |
|
| 253 | - |
|
| 254 | - // Envoyer aux plugins |
|
| 255 | - $champs = pipeline( |
|
| 256 | - 'pre_insertion', |
|
| 257 | - [ |
|
| 258 | - 'args' => [ |
|
| 259 | - 'table' => $table_sql, |
|
| 260 | - 'id_parent' => $id_parent, |
|
| 261 | - ], |
|
| 262 | - 'data' => $champs |
|
| 263 | - ] |
|
| 264 | - ); |
|
| 265 | - |
|
| 266 | - $id = sql_insertq($table_sql, $champs); |
|
| 267 | - |
|
| 268 | - if ($id) { |
|
| 269 | - // controler si le serveur n'a pas renvoye une erreur |
|
| 270 | - // et associer l'auteur sinon |
|
| 271 | - // si la table n'a pas deja un champ id_auteur |
|
| 272 | - // et si le form n'a pas poste un id_auteur (meme vide, ce qui sert a annuler cette auto association) |
|
| 273 | - if ( |
|
| 274 | - $id > 0 |
|
| 275 | - and !isset($desc['field']['id_auteur']) |
|
| 276 | - ) { |
|
| 277 | - $id_auteur = ((is_null(_request('id_auteur')) and isset($GLOBALS['visiteur_session']['id_auteur'])) ? |
|
| 278 | - $GLOBALS['visiteur_session']['id_auteur'] |
|
| 279 | - : _request('id_auteur')); |
|
| 280 | - if ($id_auteur) { |
|
| 281 | - include_spip('action/editer_auteur'); |
|
| 282 | - auteur_associer($id_auteur, [$objet => $id]); |
|
| 283 | - } |
|
| 284 | - } |
|
| 285 | - |
|
| 286 | - pipeline( |
|
| 287 | - 'post_insertion', |
|
| 288 | - [ |
|
| 289 | - 'args' => [ |
|
| 290 | - 'table' => $table_sql, |
|
| 291 | - 'id_parent' => $id_parent, |
|
| 292 | - 'id_objet' => $id, |
|
| 293 | - ], |
|
| 294 | - 'data' => $champs |
|
| 295 | - ] |
|
| 296 | - ); |
|
| 297 | - } |
|
| 298 | - |
|
| 299 | - return $id; |
|
| 171 | + $d = null; |
|
| 172 | + if (($t = objet_type($objet)) !== $objet) { |
|
| 173 | + spip_log("objet_inserer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 174 | + $objet = $t; |
|
| 175 | + } |
|
| 176 | + if ( |
|
| 177 | + include_spip('action/editer_' . $objet) |
|
| 178 | + and function_exists($inserer = $objet . '_inserer') |
|
| 179 | + ) { |
|
| 180 | + return $inserer($id_parent, $set); |
|
| 181 | + } |
|
| 182 | + |
|
| 183 | + $table_sql = table_objet_sql($objet); |
|
| 184 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 185 | + $desc = $trouver_table($table_sql); |
|
| 186 | + if (!$desc or !isset($desc['field'])) { |
|
| 187 | + return 0; |
|
| 188 | + } |
|
| 189 | + |
|
| 190 | + $lang_rub = ''; |
|
| 191 | + $champs = []; |
|
| 192 | + if (isset($desc['field']['id_rubrique'])) { |
|
| 193 | + // Si id_rubrique vaut 0 ou n'est pas definie, creer l'objet |
|
| 194 | + // dans la premiere rubrique racine |
|
| 195 | + if (!$id_rubrique = intval($id_parent)) { |
|
| 196 | + $row = sql_fetsel('id_rubrique, id_secteur, lang', 'spip_rubriques', 'id_parent=0', '', '0+titre,titre', '1'); |
|
| 197 | + $id_rubrique = $row['id_rubrique']; |
|
| 198 | + } else { |
|
| 199 | + $row = sql_fetsel('lang, id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 200 | + } |
|
| 201 | + |
|
| 202 | + $champs['id_rubrique'] = $id_rubrique; |
|
| 203 | + if (isset($desc['field']['id_secteur'])) { |
|
| 204 | + $champs['id_secteur'] = $row['id_secteur']; |
|
| 205 | + } |
|
| 206 | + $lang_rub = $row['lang']; |
|
| 207 | + } |
|
| 208 | + |
|
| 209 | + // La langue a la creation : si les liens de traduction sont autorises |
|
| 210 | + // dans les rubriques, on essaie avec la langue de l'auteur, |
|
| 211 | + // ou a defaut celle de la rubrique |
|
| 212 | + // Sinon c'est la langue de la rubrique qui est choisie + heritee |
|
| 213 | + if ( |
|
| 214 | + isset($desc['field']['lang']) and !empty($GLOBALS['meta']['multi_objets']) and in_array( |
|
| 215 | + $table_sql, |
|
| 216 | + explode(',', $GLOBALS['meta']['multi_objets']) |
|
| 217 | + ) |
|
| 218 | + ) { |
|
| 219 | + lang_select($GLOBALS['visiteur_session']['lang']); |
|
| 220 | + if ( |
|
| 221 | + in_array( |
|
| 222 | + $GLOBALS['spip_lang'], |
|
| 223 | + explode(',', $GLOBALS['meta']['langues_multilingue']) |
|
| 224 | + ) |
|
| 225 | + ) { |
|
| 226 | + $champs['lang'] = $GLOBALS['spip_lang']; |
|
| 227 | + if (isset($desc['field']['langue_choisie'])) { |
|
| 228 | + $champs['langue_choisie'] = 'oui'; |
|
| 229 | + } |
|
| 230 | + } |
|
| 231 | + } elseif (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) { |
|
| 232 | + $champs['lang'] = ($lang_rub ?: $GLOBALS['meta']['langue_site']); |
|
| 233 | + $champs['langue_choisie'] = 'non'; |
|
| 234 | + } |
|
| 235 | + |
|
| 236 | + if (isset($desc['field']['statut'])) { |
|
| 237 | + if (isset($desc['statut_textes_instituer'])) { |
|
| 238 | + $cles_statut = array_keys($desc['statut_textes_instituer']); |
|
| 239 | + $champs['statut'] = reset($cles_statut); |
|
| 240 | + } else { |
|
| 241 | + $champs['statut'] = 'prepa'; |
|
| 242 | + } |
|
| 243 | + } |
|
| 244 | + |
|
| 245 | + |
|
| 246 | + if ((isset($desc['date']) and $d = $desc['date']) or isset($desc['field'][$d = 'date'])) { |
|
| 247 | + $champs[$d] = date('Y-m-d H:i:s'); |
|
| 248 | + } |
|
| 249 | + |
|
| 250 | + if ($set) { |
|
| 251 | + $champs = array_merge($champs, $set); |
|
| 252 | + } |
|
| 253 | + |
|
| 254 | + // Envoyer aux plugins |
|
| 255 | + $champs = pipeline( |
|
| 256 | + 'pre_insertion', |
|
| 257 | + [ |
|
| 258 | + 'args' => [ |
|
| 259 | + 'table' => $table_sql, |
|
| 260 | + 'id_parent' => $id_parent, |
|
| 261 | + ], |
|
| 262 | + 'data' => $champs |
|
| 263 | + ] |
|
| 264 | + ); |
|
| 265 | + |
|
| 266 | + $id = sql_insertq($table_sql, $champs); |
|
| 267 | + |
|
| 268 | + if ($id) { |
|
| 269 | + // controler si le serveur n'a pas renvoye une erreur |
|
| 270 | + // et associer l'auteur sinon |
|
| 271 | + // si la table n'a pas deja un champ id_auteur |
|
| 272 | + // et si le form n'a pas poste un id_auteur (meme vide, ce qui sert a annuler cette auto association) |
|
| 273 | + if ( |
|
| 274 | + $id > 0 |
|
| 275 | + and !isset($desc['field']['id_auteur']) |
|
| 276 | + ) { |
|
| 277 | + $id_auteur = ((is_null(_request('id_auteur')) and isset($GLOBALS['visiteur_session']['id_auteur'])) ? |
|
| 278 | + $GLOBALS['visiteur_session']['id_auteur'] |
|
| 279 | + : _request('id_auteur')); |
|
| 280 | + if ($id_auteur) { |
|
| 281 | + include_spip('action/editer_auteur'); |
|
| 282 | + auteur_associer($id_auteur, [$objet => $id]); |
|
| 283 | + } |
|
| 284 | + } |
|
| 285 | + |
|
| 286 | + pipeline( |
|
| 287 | + 'post_insertion', |
|
| 288 | + [ |
|
| 289 | + 'args' => [ |
|
| 290 | + 'table' => $table_sql, |
|
| 291 | + 'id_parent' => $id_parent, |
|
| 292 | + 'id_objet' => $id, |
|
| 293 | + ], |
|
| 294 | + 'data' => $champs |
|
| 295 | + ] |
|
| 296 | + ); |
|
| 297 | + } |
|
| 298 | + |
|
| 299 | + return $id; |
|
| 300 | 300 | } |
| 301 | 301 | |
| 302 | 302 | |
@@ -313,138 +313,138 @@ discard block |
||
| 313 | 313 | * @return string |
| 314 | 314 | */ |
| 315 | 315 | function objet_instituer($objet, $id, $c, $calcul_rub = true) { |
| 316 | - if (($t = objet_type($objet)) !== $objet) { |
|
| 317 | - spip_log("objet_instituer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 318 | - $objet = $t; |
|
| 319 | - } |
|
| 320 | - if ( |
|
| 321 | - include_spip('action/editer_' . $objet) |
|
| 322 | - and function_exists($instituer = $objet . '_instituer') |
|
| 323 | - ) { |
|
| 324 | - return $instituer($id, $c, $calcul_rub); |
|
| 325 | - } |
|
| 326 | - |
|
| 327 | - $table_sql = table_objet_sql($objet); |
|
| 328 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 329 | - $desc = $trouver_table($table_sql); |
|
| 330 | - if (!$desc or !isset($desc['field'])) { |
|
| 331 | - return _L("Impossible d'instituer $objet : non connu en base"); |
|
| 332 | - } |
|
| 333 | - |
|
| 334 | - include_spip('inc/autoriser'); |
|
| 335 | - include_spip('inc/rubriques'); |
|
| 336 | - include_spip('inc/modifier'); |
|
| 337 | - |
|
| 338 | - $sel = []; |
|
| 339 | - $sel[] = (isset($desc['field']['statut']) ? 'statut' : "'' as statut"); |
|
| 340 | - |
|
| 341 | - $champ_date = ''; |
|
| 342 | - if (isset($desc['date']) and $desc['date']) { |
|
| 343 | - $champ_date = $desc['date']; |
|
| 344 | - } elseif (isset($desc['field']['date'])) { |
|
| 345 | - $champ_date = 'date'; |
|
| 346 | - } |
|
| 347 | - |
|
| 348 | - $sel[] = ($champ_date ? "$champ_date as date" : "'' as date"); |
|
| 349 | - $sel[] = (isset($desc['field']['id_rubrique']) ? 'id_rubrique' : '0 as id_rubrique'); |
|
| 350 | - |
|
| 351 | - $row = sql_fetsel($sel, $table_sql, id_table_objet($objet) . '=' . intval($id)); |
|
| 352 | - |
|
| 353 | - $id_rubrique = $row['id_rubrique']; |
|
| 354 | - $statut_ancien = $statut = $row['statut']; |
|
| 355 | - $date_ancienne = $date = $row['date']; |
|
| 356 | - $champs = []; |
|
| 357 | - |
|
| 358 | - $d = ($date and isset($c[$champ_date])) ? $c[$champ_date] : null; |
|
| 359 | - $s = (isset($desc['field']['statut']) and isset($c['statut'])) ? $c['statut'] : $statut; |
|
| 360 | - |
|
| 361 | - // cf autorisations dans inc/instituer_objet |
|
| 362 | - if ($s != $statut or ($d and $d != $date)) { |
|
| 363 | - if ( |
|
| 364 | - $id_rubrique ? |
|
| 365 | - autoriser('publierdans', 'rubrique', $id_rubrique) |
|
| 366 | - : |
|
| 367 | - autoriser('instituer', $objet, $id, null, ['statut' => $s]) |
|
| 368 | - ) { |
|
| 369 | - $statut = $champs['statut'] = $s; |
|
| 370 | - } else { |
|
| 371 | - if ($s != 'publie' and autoriser('modifier', $objet, $id)) { |
|
| 372 | - $statut = $champs['statut'] = $s; |
|
| 373 | - } else { |
|
| 374 | - spip_log("editer_objet $objet #$id refus " . json_encode($c, JSON_THROW_ON_ERROR), 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 375 | - } |
|
| 376 | - } |
|
| 377 | - |
|
| 378 | - // En cas de publication, fixer la date a "maintenant" |
|
| 379 | - // sauf si $c commande autre chose |
|
| 380 | - // ou si l'objet est deja date dans le futur |
|
| 381 | - // En cas de proposition d'un objet (mais pas depublication), idem |
|
| 382 | - if ($champ_date) { |
|
| 383 | - if ( |
|
| 384 | - $champs['statut'] == 'publie' |
|
| 385 | - or ($champs['statut'] == 'prop' and !in_array($statut_ancien, ['publie', 'prop'])) |
|
| 386 | - or $d |
|
| 387 | - ) { |
|
| 388 | - if ($d or strtotime($d = $date) > time()) { |
|
| 389 | - $champs[$champ_date] = $date = $d; |
|
| 390 | - } else { |
|
| 391 | - $champs[$champ_date] = $date = date('Y-m-d H:i:s'); |
|
| 392 | - } |
|
| 393 | - } |
|
| 394 | - } |
|
| 395 | - } |
|
| 396 | - |
|
| 397 | - // Verifier que la rubrique demandee existe et est differente |
|
| 398 | - // de la rubrique actuelle |
|
| 399 | - if ( |
|
| 400 | - $id_rubrique |
|
| 401 | - and isset($c['id_parent']) |
|
| 402 | - and $id_parent = $c['id_parent'] |
|
| 403 | - and $id_parent != $id_rubrique |
|
| 404 | - and (sql_fetsel('1', 'spip_rubriques', 'id_rubrique=' . intval($id_parent))) |
|
| 405 | - ) { |
|
| 406 | - $champs['id_rubrique'] = $id_parent; |
|
| 407 | - |
|
| 408 | - // si l'objet etait publie |
|
| 409 | - // et que le demandeur n'est pas admin de la rubrique |
|
| 410 | - // repasser l'objet en statut 'propose'. |
|
| 411 | - if ( |
|
| 412 | - $statut == 'publie' |
|
| 413 | - and !autoriser('publierdans', 'rubrique', $id_rubrique) |
|
| 414 | - ) { |
|
| 415 | - $champs['statut'] = 'prop'; |
|
| 416 | - } |
|
| 417 | - } |
|
| 418 | - |
|
| 419 | - |
|
| 420 | - // Envoyer aux plugins |
|
| 421 | - $champs = pipeline( |
|
| 422 | - 'pre_edition', |
|
| 423 | - [ |
|
| 424 | - 'args' => [ |
|
| 425 | - 'table' => $table_sql, |
|
| 426 | - 'id_objet' => $id, |
|
| 427 | - 'action' => 'instituer', |
|
| 428 | - 'statut_ancien' => $statut_ancien, |
|
| 429 | - 'date_ancienne' => $date_ancienne, |
|
| 430 | - 'id_parent_ancien' => $id_rubrique, |
|
| 431 | - ], |
|
| 432 | - 'data' => $champs |
|
| 433 | - ] |
|
| 434 | - ); |
|
| 435 | - |
|
| 436 | - if (!(is_countable($champs) ? count($champs) : 0)) { |
|
| 437 | - return ''; |
|
| 438 | - } |
|
| 439 | - |
|
| 440 | - // Envoyer les modifs. |
|
| 441 | - objet_editer_heritage($objet, $id, $id_rubrique, $statut_ancien, $champs, $calcul_rub); |
|
| 442 | - |
|
| 443 | - // Invalider les caches |
|
| 444 | - include_spip('inc/invalideur'); |
|
| 445 | - suivre_invalideur("id='$objet/$id'"); |
|
| 446 | - |
|
| 447 | - /* |
|
| 316 | + if (($t = objet_type($objet)) !== $objet) { |
|
| 317 | + spip_log("objet_instituer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 318 | + $objet = $t; |
|
| 319 | + } |
|
| 320 | + if ( |
|
| 321 | + include_spip('action/editer_' . $objet) |
|
| 322 | + and function_exists($instituer = $objet . '_instituer') |
|
| 323 | + ) { |
|
| 324 | + return $instituer($id, $c, $calcul_rub); |
|
| 325 | + } |
|
| 326 | + |
|
| 327 | + $table_sql = table_objet_sql($objet); |
|
| 328 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 329 | + $desc = $trouver_table($table_sql); |
|
| 330 | + if (!$desc or !isset($desc['field'])) { |
|
| 331 | + return _L("Impossible d'instituer $objet : non connu en base"); |
|
| 332 | + } |
|
| 333 | + |
|
| 334 | + include_spip('inc/autoriser'); |
|
| 335 | + include_spip('inc/rubriques'); |
|
| 336 | + include_spip('inc/modifier'); |
|
| 337 | + |
|
| 338 | + $sel = []; |
|
| 339 | + $sel[] = (isset($desc['field']['statut']) ? 'statut' : "'' as statut"); |
|
| 340 | + |
|
| 341 | + $champ_date = ''; |
|
| 342 | + if (isset($desc['date']) and $desc['date']) { |
|
| 343 | + $champ_date = $desc['date']; |
|
| 344 | + } elseif (isset($desc['field']['date'])) { |
|
| 345 | + $champ_date = 'date'; |
|
| 346 | + } |
|
| 347 | + |
|
| 348 | + $sel[] = ($champ_date ? "$champ_date as date" : "'' as date"); |
|
| 349 | + $sel[] = (isset($desc['field']['id_rubrique']) ? 'id_rubrique' : '0 as id_rubrique'); |
|
| 350 | + |
|
| 351 | + $row = sql_fetsel($sel, $table_sql, id_table_objet($objet) . '=' . intval($id)); |
|
| 352 | + |
|
| 353 | + $id_rubrique = $row['id_rubrique']; |
|
| 354 | + $statut_ancien = $statut = $row['statut']; |
|
| 355 | + $date_ancienne = $date = $row['date']; |
|
| 356 | + $champs = []; |
|
| 357 | + |
|
| 358 | + $d = ($date and isset($c[$champ_date])) ? $c[$champ_date] : null; |
|
| 359 | + $s = (isset($desc['field']['statut']) and isset($c['statut'])) ? $c['statut'] : $statut; |
|
| 360 | + |
|
| 361 | + // cf autorisations dans inc/instituer_objet |
|
| 362 | + if ($s != $statut or ($d and $d != $date)) { |
|
| 363 | + if ( |
|
| 364 | + $id_rubrique ? |
|
| 365 | + autoriser('publierdans', 'rubrique', $id_rubrique) |
|
| 366 | + : |
|
| 367 | + autoriser('instituer', $objet, $id, null, ['statut' => $s]) |
|
| 368 | + ) { |
|
| 369 | + $statut = $champs['statut'] = $s; |
|
| 370 | + } else { |
|
| 371 | + if ($s != 'publie' and autoriser('modifier', $objet, $id)) { |
|
| 372 | + $statut = $champs['statut'] = $s; |
|
| 373 | + } else { |
|
| 374 | + spip_log("editer_objet $objet #$id refus " . json_encode($c, JSON_THROW_ON_ERROR), 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 375 | + } |
|
| 376 | + } |
|
| 377 | + |
|
| 378 | + // En cas de publication, fixer la date a "maintenant" |
|
| 379 | + // sauf si $c commande autre chose |
|
| 380 | + // ou si l'objet est deja date dans le futur |
|
| 381 | + // En cas de proposition d'un objet (mais pas depublication), idem |
|
| 382 | + if ($champ_date) { |
|
| 383 | + if ( |
|
| 384 | + $champs['statut'] == 'publie' |
|
| 385 | + or ($champs['statut'] == 'prop' and !in_array($statut_ancien, ['publie', 'prop'])) |
|
| 386 | + or $d |
|
| 387 | + ) { |
|
| 388 | + if ($d or strtotime($d = $date) > time()) { |
|
| 389 | + $champs[$champ_date] = $date = $d; |
|
| 390 | + } else { |
|
| 391 | + $champs[$champ_date] = $date = date('Y-m-d H:i:s'); |
|
| 392 | + } |
|
| 393 | + } |
|
| 394 | + } |
|
| 395 | + } |
|
| 396 | + |
|
| 397 | + // Verifier que la rubrique demandee existe et est differente |
|
| 398 | + // de la rubrique actuelle |
|
| 399 | + if ( |
|
| 400 | + $id_rubrique |
|
| 401 | + and isset($c['id_parent']) |
|
| 402 | + and $id_parent = $c['id_parent'] |
|
| 403 | + and $id_parent != $id_rubrique |
|
| 404 | + and (sql_fetsel('1', 'spip_rubriques', 'id_rubrique=' . intval($id_parent))) |
|
| 405 | + ) { |
|
| 406 | + $champs['id_rubrique'] = $id_parent; |
|
| 407 | + |
|
| 408 | + // si l'objet etait publie |
|
| 409 | + // et que le demandeur n'est pas admin de la rubrique |
|
| 410 | + // repasser l'objet en statut 'propose'. |
|
| 411 | + if ( |
|
| 412 | + $statut == 'publie' |
|
| 413 | + and !autoriser('publierdans', 'rubrique', $id_rubrique) |
|
| 414 | + ) { |
|
| 415 | + $champs['statut'] = 'prop'; |
|
| 416 | + } |
|
| 417 | + } |
|
| 418 | + |
|
| 419 | + |
|
| 420 | + // Envoyer aux plugins |
|
| 421 | + $champs = pipeline( |
|
| 422 | + 'pre_edition', |
|
| 423 | + [ |
|
| 424 | + 'args' => [ |
|
| 425 | + 'table' => $table_sql, |
|
| 426 | + 'id_objet' => $id, |
|
| 427 | + 'action' => 'instituer', |
|
| 428 | + 'statut_ancien' => $statut_ancien, |
|
| 429 | + 'date_ancienne' => $date_ancienne, |
|
| 430 | + 'id_parent_ancien' => $id_rubrique, |
|
| 431 | + ], |
|
| 432 | + 'data' => $champs |
|
| 433 | + ] |
|
| 434 | + ); |
|
| 435 | + |
|
| 436 | + if (!(is_countable($champs) ? count($champs) : 0)) { |
|
| 437 | + return ''; |
|
| 438 | + } |
|
| 439 | + |
|
| 440 | + // Envoyer les modifs. |
|
| 441 | + objet_editer_heritage($objet, $id, $id_rubrique, $statut_ancien, $champs, $calcul_rub); |
|
| 442 | + |
|
| 443 | + // Invalider les caches |
|
| 444 | + include_spip('inc/invalideur'); |
|
| 445 | + suivre_invalideur("id='$objet/$id'"); |
|
| 446 | + |
|
| 447 | + /* |
|
| 448 | 448 | if ($date) { |
| 449 | 449 | $t = strtotime($date); |
| 450 | 450 | $p = @$GLOBALS['meta']['date_prochain_postdate']; |
@@ -453,32 +453,32 @@ discard block |
||
| 453 | 453 | } |
| 454 | 454 | }*/ |
| 455 | 455 | |
| 456 | - // Pipeline |
|
| 457 | - pipeline( |
|
| 458 | - 'post_edition', |
|
| 459 | - [ |
|
| 460 | - 'args' => [ |
|
| 461 | - 'table' => $table_sql, |
|
| 462 | - 'id_objet' => $id, |
|
| 463 | - 'action' => 'instituer', |
|
| 464 | - 'statut_ancien' => $statut_ancien, |
|
| 465 | - 'date_ancienne' => $date_ancienne, |
|
| 466 | - 'id_parent_ancien' => $id_rubrique, |
|
| 467 | - ], |
|
| 468 | - 'data' => $champs |
|
| 469 | - ] |
|
| 470 | - ); |
|
| 471 | - |
|
| 472 | - // Notifications |
|
| 473 | - if ($notifications = charger_fonction('notifications', 'inc')) { |
|
| 474 | - $notifications( |
|
| 475 | - "instituer$objet", |
|
| 476 | - $id, |
|
| 477 | - ['statut' => $statut, 'statut_ancien' => $statut_ancien, 'date' => $date, 'date_ancienne' => $date_ancienne] |
|
| 478 | - ); |
|
| 479 | - } |
|
| 480 | - |
|
| 481 | - return ''; // pas d'erreur |
|
| 456 | + // Pipeline |
|
| 457 | + pipeline( |
|
| 458 | + 'post_edition', |
|
| 459 | + [ |
|
| 460 | + 'args' => [ |
|
| 461 | + 'table' => $table_sql, |
|
| 462 | + 'id_objet' => $id, |
|
| 463 | + 'action' => 'instituer', |
|
| 464 | + 'statut_ancien' => $statut_ancien, |
|
| 465 | + 'date_ancienne' => $date_ancienne, |
|
| 466 | + 'id_parent_ancien' => $id_rubrique, |
|
| 467 | + ], |
|
| 468 | + 'data' => $champs |
|
| 469 | + ] |
|
| 470 | + ); |
|
| 471 | + |
|
| 472 | + // Notifications |
|
| 473 | + if ($notifications = charger_fonction('notifications', 'inc')) { |
|
| 474 | + $notifications( |
|
| 475 | + "instituer$objet", |
|
| 476 | + $id, |
|
| 477 | + ['statut' => $statut, 'statut_ancien' => $statut_ancien, 'date' => $date, 'date_ancienne' => $date_ancienne] |
|
| 478 | + ); |
|
| 479 | + } |
|
| 480 | + |
|
| 481 | + return ''; // pas d'erreur |
|
| 482 | 482 | } |
| 483 | 483 | |
| 484 | 484 | /** |
@@ -493,51 +493,51 @@ discard block |
||
| 493 | 493 | * @return void |
| 494 | 494 | */ |
| 495 | 495 | function objet_editer_heritage($objet, $id, $id_rubrique, $statut, $champs, $cond = true) { |
| 496 | - $table_sql = table_objet_sql($objet); |
|
| 497 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 498 | - $desc = $trouver_table($table_sql); |
|
| 499 | - |
|
| 500 | - // Si on deplace l'objet |
|
| 501 | - // changer aussi son secteur et sa langue (si heritee) |
|
| 502 | - if (isset($champs['id_rubrique'])) { |
|
| 503 | - $row_rub = sql_fetsel('id_secteur, lang', 'spip_rubriques', 'id_rubrique=' . sql_quote($champs['id_rubrique'])); |
|
| 504 | - $langue = $row_rub['lang']; |
|
| 505 | - |
|
| 506 | - if (isset($desc['field']['id_secteur'])) { |
|
| 507 | - $champs['id_secteur'] = $row_rub['id_secteur']; |
|
| 508 | - } |
|
| 509 | - |
|
| 510 | - if (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) { |
|
| 511 | - if ( |
|
| 512 | - sql_fetsel( |
|
| 513 | - '1', |
|
| 514 | - $table_sql, |
|
| 515 | - id_table_objet($objet) . '=' . intval($id) . " AND langue_choisie<>'oui' AND lang<>" . sql_quote($langue) |
|
| 516 | - ) |
|
| 517 | - ) { |
|
| 518 | - $champs['lang'] = $langue; |
|
| 519 | - } |
|
| 520 | - } |
|
| 521 | - } |
|
| 522 | - |
|
| 523 | - if (!$champs) { |
|
| 524 | - return; |
|
| 525 | - } |
|
| 526 | - sql_updateq($table_sql, $champs, id_table_objet($objet) . '=' . intval($id)); |
|
| 527 | - |
|
| 528 | - // Changer le statut des rubriques concernees |
|
| 529 | - if ($cond) { |
|
| 530 | - include_spip('inc/rubriques'); |
|
| 531 | - //$postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false; |
|
| 532 | - $postdate = false; |
|
| 533 | - // On rajoute les infos de l'objet |
|
| 534 | - $infos = [ |
|
| 535 | - 'objet' => $objet, |
|
| 536 | - 'id_objet' => $id, |
|
| 537 | - 'statut_ancien' => $statut, |
|
| 538 | - ]; |
|
| 539 | - calculer_rubriques_if($id_rubrique, $champs, $infos, $postdate); |
|
| 540 | - } |
|
| 496 | + $table_sql = table_objet_sql($objet); |
|
| 497 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 498 | + $desc = $trouver_table($table_sql); |
|
| 499 | + |
|
| 500 | + // Si on deplace l'objet |
|
| 501 | + // changer aussi son secteur et sa langue (si heritee) |
|
| 502 | + if (isset($champs['id_rubrique'])) { |
|
| 503 | + $row_rub = sql_fetsel('id_secteur, lang', 'spip_rubriques', 'id_rubrique=' . sql_quote($champs['id_rubrique'])); |
|
| 504 | + $langue = $row_rub['lang']; |
|
| 505 | + |
|
| 506 | + if (isset($desc['field']['id_secteur'])) { |
|
| 507 | + $champs['id_secteur'] = $row_rub['id_secteur']; |
|
| 508 | + } |
|
| 509 | + |
|
| 510 | + if (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) { |
|
| 511 | + if ( |
|
| 512 | + sql_fetsel( |
|
| 513 | + '1', |
|
| 514 | + $table_sql, |
|
| 515 | + id_table_objet($objet) . '=' . intval($id) . " AND langue_choisie<>'oui' AND lang<>" . sql_quote($langue) |
|
| 516 | + ) |
|
| 517 | + ) { |
|
| 518 | + $champs['lang'] = $langue; |
|
| 519 | + } |
|
| 520 | + } |
|
| 521 | + } |
|
| 522 | + |
|
| 523 | + if (!$champs) { |
|
| 524 | + return; |
|
| 525 | + } |
|
| 526 | + sql_updateq($table_sql, $champs, id_table_objet($objet) . '=' . intval($id)); |
|
| 527 | + |
|
| 528 | + // Changer le statut des rubriques concernees |
|
| 529 | + if ($cond) { |
|
| 530 | + include_spip('inc/rubriques'); |
|
| 531 | + //$postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false; |
|
| 532 | + $postdate = false; |
|
| 533 | + // On rajoute les infos de l'objet |
|
| 534 | + $infos = [ |
|
| 535 | + 'objet' => $objet, |
|
| 536 | + 'id_objet' => $id, |
|
| 537 | + 'statut_ancien' => $statut, |
|
| 538 | + ]; |
|
| 539 | + calculer_rubriques_if($id_rubrique, $champs, $infos, $postdate); |
|
| 540 | + } |
|
| 541 | 541 | } |
| 542 | 542 | |
| 543 | 543 | |
@@ -566,75 +566,75 @@ discard block |
||
| 566 | 566 | * string|int : valeur du champ demande pour l'objet demande |
| 567 | 567 | */ |
| 568 | 568 | function objet_lire($objet, $valeur_id, $options = []) { |
| 569 | - if (($t = objet_type($objet)) !== $objet) { |
|
| 570 | - spip_log("objet_lire: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 571 | - $objet = $t; |
|
| 572 | - } |
|
| 573 | - |
|
| 574 | - // tableau du cache des descriptions et des id d'objet (au sens id_xxx). |
|
| 575 | - // Les tableaux sont toujours indexés par le trio [objet][cle][valeur_cle] |
|
| 576 | - static $descriptions = []; |
|
| 577 | - |
|
| 578 | - // On détermine le nom du champ id de la table. |
|
| 579 | - include_spip('base/objets'); |
|
| 580 | - $primary = id_table_objet($objet); |
|
| 581 | - |
|
| 582 | - // On détermine l'id à utiliser. |
|
| 583 | - $champ_id = (!empty($options['champ_id']) ? $options['champ_id'] : $primary); |
|
| 584 | - |
|
| 585 | - // Si l'objet n'a pas encore été stocké, il faut récupérer sa description complète. |
|
| 586 | - if ( |
|
| 587 | - !isset($descriptions[$objet][$champ_id][$valeur_id]) |
|
| 588 | - or (isset($options['force']) and $options['force']) |
|
| 589 | - ) { |
|
| 590 | - // Il est possible pour un type d'objet de fournir une fonction de lecture de tous les champs d'un objet. |
|
| 591 | - if ( |
|
| 592 | - include_spip('action/editer_' . $objet) |
|
| 593 | - and function_exists($lire = "{$objet}_lire_champs") |
|
| 594 | - ) { |
|
| 595 | - $valeurs = $lire($objet, $valeur_id, $champ_id); |
|
| 596 | - } else { |
|
| 597 | - // On récupère la table SQL à partir du type d'objet. |
|
| 598 | - $table = table_objet_sql($objet); |
|
| 599 | - |
|
| 600 | - // La condition est appliquée sur le champ désigné par l'utilisateur. |
|
| 601 | - $where = [ |
|
| 602 | - $champ_id . '=' . sql_quote($valeur_id) |
|
| 603 | - ]; |
|
| 604 | - |
|
| 605 | - // Acquisition de tous les champs de l'objet : si l'accès SQL retourne une erreur on renvoie un tableau vide. |
|
| 606 | - $valeurs = sql_fetsel('*', $table, $where); |
|
| 607 | - } |
|
| 608 | - |
|
| 609 | - if (!$valeurs) { |
|
| 610 | - $valeurs = false; |
|
| 611 | - } |
|
| 612 | - |
|
| 613 | - $descriptions[$objet][$champ_id][$valeur_id] = $valeurs; |
|
| 614 | - |
|
| 615 | - if ($champ_id !== $primary and isset($valeurs[$primary])) { |
|
| 616 | - $descriptions[$objet][$primary][$valeurs[$primary]] = $valeurs; |
|
| 617 | - $descriptions[$objet][$champ_id][$valeur_id] = &$descriptions[$objet][$primary][$valeurs[$primary]]; |
|
| 618 | - } |
|
| 619 | - } |
|
| 620 | - |
|
| 621 | - $retour = $descriptions[$objet][$champ_id][$valeur_id]; |
|
| 622 | - |
|
| 623 | - // On ne retourne maintenant que les champs demandés. |
|
| 624 | - // - on détermine les informations à renvoyer. |
|
| 625 | - if ($retour and !empty($options['champs'])) { |
|
| 626 | - $champs = $options['champs']; |
|
| 627 | - // Extraction des seules informations demandées. |
|
| 628 | - // -- si on demande une information unique on renvoie la valeur simple, sinon on renvoie un tableau. |
|
| 629 | - // -- si une information n'est pas un champ valide elle n'est pas renvoyée sans renvoyer d'erreur. |
|
| 630 | - if (is_array($champs)) { |
|
| 631 | - // Tableau des informations valides |
|
| 632 | - $retour = array_intersect_key($retour, array_flip($champs)); |
|
| 633 | - } else { |
|
| 634 | - // Valeur unique demandée. |
|
| 635 | - $retour = ($retour[$champs] ?? false); |
|
| 636 | - } |
|
| 637 | - } |
|
| 638 | - |
|
| 639 | - return $retour; |
|
| 569 | + if (($t = objet_type($objet)) !== $objet) { |
|
| 570 | + spip_log("objet_lire: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE); |
|
| 571 | + $objet = $t; |
|
| 572 | + } |
|
| 573 | + |
|
| 574 | + // tableau du cache des descriptions et des id d'objet (au sens id_xxx). |
|
| 575 | + // Les tableaux sont toujours indexés par le trio [objet][cle][valeur_cle] |
|
| 576 | + static $descriptions = []; |
|
| 577 | + |
|
| 578 | + // On détermine le nom du champ id de la table. |
|
| 579 | + include_spip('base/objets'); |
|
| 580 | + $primary = id_table_objet($objet); |
|
| 581 | + |
|
| 582 | + // On détermine l'id à utiliser. |
|
| 583 | + $champ_id = (!empty($options['champ_id']) ? $options['champ_id'] : $primary); |
|
| 584 | + |
|
| 585 | + // Si l'objet n'a pas encore été stocké, il faut récupérer sa description complète. |
|
| 586 | + if ( |
|
| 587 | + !isset($descriptions[$objet][$champ_id][$valeur_id]) |
|
| 588 | + or (isset($options['force']) and $options['force']) |
|
| 589 | + ) { |
|
| 590 | + // Il est possible pour un type d'objet de fournir une fonction de lecture de tous les champs d'un objet. |
|
| 591 | + if ( |
|
| 592 | + include_spip('action/editer_' . $objet) |
|
| 593 | + and function_exists($lire = "{$objet}_lire_champs") |
|
| 594 | + ) { |
|
| 595 | + $valeurs = $lire($objet, $valeur_id, $champ_id); |
|
| 596 | + } else { |
|
| 597 | + // On récupère la table SQL à partir du type d'objet. |
|
| 598 | + $table = table_objet_sql($objet); |
|
| 599 | + |
|
| 600 | + // La condition est appliquée sur le champ désigné par l'utilisateur. |
|
| 601 | + $where = [ |
|
| 602 | + $champ_id . '=' . sql_quote($valeur_id) |
|
| 603 | + ]; |
|
| 604 | + |
|
| 605 | + // Acquisition de tous les champs de l'objet : si l'accès SQL retourne une erreur on renvoie un tableau vide. |
|
| 606 | + $valeurs = sql_fetsel('*', $table, $where); |
|
| 607 | + } |
|
| 608 | + |
|
| 609 | + if (!$valeurs) { |
|
| 610 | + $valeurs = false; |
|
| 611 | + } |
|
| 612 | + |
|
| 613 | + $descriptions[$objet][$champ_id][$valeur_id] = $valeurs; |
|
| 614 | + |
|
| 615 | + if ($champ_id !== $primary and isset($valeurs[$primary])) { |
|
| 616 | + $descriptions[$objet][$primary][$valeurs[$primary]] = $valeurs; |
|
| 617 | + $descriptions[$objet][$champ_id][$valeur_id] = &$descriptions[$objet][$primary][$valeurs[$primary]]; |
|
| 618 | + } |
|
| 619 | + } |
|
| 620 | + |
|
| 621 | + $retour = $descriptions[$objet][$champ_id][$valeur_id]; |
|
| 622 | + |
|
| 623 | + // On ne retourne maintenant que les champs demandés. |
|
| 624 | + // - on détermine les informations à renvoyer. |
|
| 625 | + if ($retour and !empty($options['champs'])) { |
|
| 626 | + $champs = $options['champs']; |
|
| 627 | + // Extraction des seules informations demandées. |
|
| 628 | + // -- si on demande une information unique on renvoie la valeur simple, sinon on renvoie un tableau. |
|
| 629 | + // -- si une information n'est pas un champ valide elle n'est pas renvoyée sans renvoyer d'erreur. |
|
| 630 | + if (is_array($champs)) { |
|
| 631 | + // Tableau des informations valides |
|
| 632 | + $retour = array_intersect_key($retour, array_flip($champs)); |
|
| 633 | + } else { |
|
| 634 | + // Valeur unique demandée. |
|
| 635 | + $retour = ($retour[$champs] ?? false); |
|
| 636 | + } |
|
| 637 | + } |
|
| 638 | + |
|
| 639 | + return $retour; |
|
| 640 | 640 | } |
@@ -17,12 +17,12 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | if (!defined('_TEST_FILE_EXISTS')) { |
| 24 | - /** Permettre d'éviter des tests file_exists sur certains hébergeurs */ |
|
| 25 | - define('_TEST_FILE_EXISTS', preg_match(',(online|free)[.]fr$,', $_ENV['HTTP_HOST'] ?? '')); |
|
| 24 | + /** Permettre d'éviter des tests file_exists sur certains hébergeurs */ |
|
| 25 | + define('_TEST_FILE_EXISTS', preg_match(',(online|free)[.]fr$,', $_ENV['HTTP_HOST'] ?? '')); |
|
| 26 | 26 | } |
| 27 | 27 | |
| 28 | 28 | #define('_SPIP_LOCK_MODE',0); // ne pas utiliser de lock (deconseille) |
@@ -30,7 +30,7 @@ discard block |
||
| 30 | 30 | #define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip |
| 31 | 31 | |
| 32 | 32 | if (_SPIP_LOCK_MODE == 2) { |
| 33 | - include_spip('inc/nfslock'); |
|
| 33 | + include_spip('inc/nfslock'); |
|
| 34 | 34 | } |
| 35 | 35 | |
| 36 | 36 | $GLOBALS['liste_verrous'] = []; |
@@ -53,24 +53,24 @@ discard block |
||
| 53 | 53 | * Ressource sur le fichier ouvert, sinon false. |
| 54 | 54 | **/ |
| 55 | 55 | function spip_fopen_lock($fichier, $mode, $verrou) { |
| 56 | - if (_SPIP_LOCK_MODE == 1) { |
|
| 57 | - if ($fl = @fopen($fichier, $mode)) { |
|
| 58 | - // verrou |
|
| 59 | - @flock($fl, $verrou); |
|
| 60 | - } |
|
| 61 | - |
|
| 62 | - return $fl; |
|
| 63 | - } elseif (_SPIP_LOCK_MODE == 2) { |
|
| 64 | - if (($verrou = spip_nfslock($fichier)) && ($fl = @fopen($fichier, $mode))) { |
|
| 65 | - $GLOBALS['liste_verrous'][$fl] = [$fichier, $verrou]; |
|
| 66 | - |
|
| 67 | - return $fl; |
|
| 68 | - } else { |
|
| 69 | - return false; |
|
| 70 | - } |
|
| 71 | - } |
|
| 72 | - |
|
| 73 | - return @fopen($fichier, $mode); |
|
| 56 | + if (_SPIP_LOCK_MODE == 1) { |
|
| 57 | + if ($fl = @fopen($fichier, $mode)) { |
|
| 58 | + // verrou |
|
| 59 | + @flock($fl, $verrou); |
|
| 60 | + } |
|
| 61 | + |
|
| 62 | + return $fl; |
|
| 63 | + } elseif (_SPIP_LOCK_MODE == 2) { |
|
| 64 | + if (($verrou = spip_nfslock($fichier)) && ($fl = @fopen($fichier, $mode))) { |
|
| 65 | + $GLOBALS['liste_verrous'][$fl] = [$fichier, $verrou]; |
|
| 66 | + |
|
| 67 | + return $fl; |
|
| 68 | + } else { |
|
| 69 | + return false; |
|
| 70 | + } |
|
| 71 | + } |
|
| 72 | + |
|
| 73 | + return @fopen($fichier, $mode); |
|
| 74 | 74 | } |
| 75 | 75 | |
| 76 | 76 | /** |
@@ -85,14 +85,14 @@ discard block |
||
| 85 | 85 | * true si succès, false sinon. |
| 86 | 86 | **/ |
| 87 | 87 | function spip_fclose_unlock($handle) { |
| 88 | - if (_SPIP_LOCK_MODE == 1) { |
|
| 89 | - @flock($handle, LOCK_UN); |
|
| 90 | - } elseif (_SPIP_LOCK_MODE == 2) { |
|
| 91 | - spip_nfsunlock(reset($GLOBALS['liste_verrous'][$handle]), end($GLOBALS['liste_verrous'][$handle])); |
|
| 92 | - unset($GLOBALS['liste_verrous'][$handle]); |
|
| 93 | - } |
|
| 94 | - |
|
| 95 | - return @fclose($handle); |
|
| 88 | + if (_SPIP_LOCK_MODE == 1) { |
|
| 89 | + @flock($handle, LOCK_UN); |
|
| 90 | + } elseif (_SPIP_LOCK_MODE == 2) { |
|
| 91 | + spip_nfsunlock(reset($GLOBALS['liste_verrous'][$handle]), end($GLOBALS['liste_verrous'][$handle])); |
|
| 92 | + unset($GLOBALS['liste_verrous'][$handle]); |
|
| 93 | + } |
|
| 94 | + |
|
| 95 | + return @fclose($handle); |
|
| 96 | 96 | } |
| 97 | 97 | |
| 98 | 98 | |
@@ -106,23 +106,23 @@ discard block |
||
| 106 | 106 | * Contenu du fichier |
| 107 | 107 | **/ |
| 108 | 108 | function spip_file_get_contents($fichier) { |
| 109 | - if (substr($fichier, -3) != '.gz') { |
|
| 110 | - if (function_exists('file_get_contents')) { |
|
| 111 | - // quand on est sous windows on ne sait pas si file_get_contents marche |
|
| 112 | - // on essaye : si ca retourne du contenu alors c'est bon |
|
| 113 | - // sinon on fait un file() pour avoir le coeur net |
|
| 114 | - $contenu = @file_get_contents($fichier); |
|
| 115 | - if (!$contenu and _OS_SERVEUR == 'windows') { |
|
| 116 | - $contenu = @file($fichier); |
|
| 117 | - } |
|
| 118 | - } else { |
|
| 119 | - $contenu = @file($fichier); |
|
| 120 | - } |
|
| 121 | - } else { |
|
| 122 | - $contenu = @gzfile($fichier); |
|
| 123 | - } |
|
| 124 | - |
|
| 125 | - return is_array($contenu) ? join('', $contenu) : (string)$contenu; |
|
| 109 | + if (substr($fichier, -3) != '.gz') { |
|
| 110 | + if (function_exists('file_get_contents')) { |
|
| 111 | + // quand on est sous windows on ne sait pas si file_get_contents marche |
|
| 112 | + // on essaye : si ca retourne du contenu alors c'est bon |
|
| 113 | + // sinon on fait un file() pour avoir le coeur net |
|
| 114 | + $contenu = @file_get_contents($fichier); |
|
| 115 | + if (!$contenu and _OS_SERVEUR == 'windows') { |
|
| 116 | + $contenu = @file($fichier); |
|
| 117 | + } |
|
| 118 | + } else { |
|
| 119 | + $contenu = @file($fichier); |
|
| 120 | + } |
|
| 121 | + } else { |
|
| 122 | + $contenu = @gzfile($fichier); |
|
| 123 | + } |
|
| 124 | + |
|
| 125 | + return is_array($contenu) ? join('', $contenu) : (string)$contenu; |
|
| 126 | 126 | } |
| 127 | 127 | |
| 128 | 128 | |
@@ -147,48 +147,48 @@ discard block |
||
| 147 | 147 | * true si l'opération a réussie, false sinon. |
| 148 | 148 | **/ |
| 149 | 149 | function lire_fichier($fichier, &$contenu, $options = []) { |
| 150 | - $contenu = ''; |
|
| 151 | - // inutile car si le fichier n'existe pas, le lock va renvoyer false juste apres |
|
| 152 | - // economisons donc les acces disque, sauf chez free qui rale pour un rien |
|
| 153 | - if (_TEST_FILE_EXISTS and !@file_exists($fichier)) { |
|
| 154 | - return false; |
|
| 155 | - } |
|
| 156 | - |
|
| 157 | - #spip_timer('lire_fichier'); |
|
| 158 | - |
|
| 159 | - // pas de @ sur spip_fopen_lock qui est silencieux de toute facon |
|
| 160 | - if ($fl = spip_fopen_lock($fichier, 'r', LOCK_SH)) { |
|
| 161 | - // lire le fichier avant tout |
|
| 162 | - $contenu = spip_file_get_contents($fichier); |
|
| 163 | - |
|
| 164 | - // le fichier a-t-il ete supprime par le locker ? |
|
| 165 | - // on ne verifie que si la tentative de lecture a echoue |
|
| 166 | - // pour discriminer un contenu vide d'un fichier absent |
|
| 167 | - // et eviter un acces disque |
|
| 168 | - if (!$contenu and !@file_exists($fichier)) { |
|
| 169 | - spip_fclose_unlock($fl); |
|
| 170 | - |
|
| 171 | - return false; |
|
| 172 | - } |
|
| 173 | - |
|
| 174 | - // liberer le verrou |
|
| 175 | - spip_fclose_unlock($fl); |
|
| 176 | - |
|
| 177 | - // Verifications |
|
| 178 | - $ok = true; |
|
| 179 | - if (isset($options['phpcheck']) and $options['phpcheck'] == 'oui') { |
|
| 180 | - $ok &= (preg_match(",[?]>\n?$,", $contenu)); |
|
| 181 | - } |
|
| 182 | - |
|
| 183 | - #spip_log("$fread $fichier ".spip_timer('lire_fichier')); |
|
| 184 | - if (!$ok) { |
|
| 185 | - spip_log("echec lecture $fichier"); |
|
| 186 | - } |
|
| 187 | - |
|
| 188 | - return $ok; |
|
| 189 | - } |
|
| 190 | - |
|
| 191 | - return false; |
|
| 150 | + $contenu = ''; |
|
| 151 | + // inutile car si le fichier n'existe pas, le lock va renvoyer false juste apres |
|
| 152 | + // economisons donc les acces disque, sauf chez free qui rale pour un rien |
|
| 153 | + if (_TEST_FILE_EXISTS and !@file_exists($fichier)) { |
|
| 154 | + return false; |
|
| 155 | + } |
|
| 156 | + |
|
| 157 | + #spip_timer('lire_fichier'); |
|
| 158 | + |
|
| 159 | + // pas de @ sur spip_fopen_lock qui est silencieux de toute facon |
|
| 160 | + if ($fl = spip_fopen_lock($fichier, 'r', LOCK_SH)) { |
|
| 161 | + // lire le fichier avant tout |
|
| 162 | + $contenu = spip_file_get_contents($fichier); |
|
| 163 | + |
|
| 164 | + // le fichier a-t-il ete supprime par le locker ? |
|
| 165 | + // on ne verifie que si la tentative de lecture a echoue |
|
| 166 | + // pour discriminer un contenu vide d'un fichier absent |
|
| 167 | + // et eviter un acces disque |
|
| 168 | + if (!$contenu and !@file_exists($fichier)) { |
|
| 169 | + spip_fclose_unlock($fl); |
|
| 170 | + |
|
| 171 | + return false; |
|
| 172 | + } |
|
| 173 | + |
|
| 174 | + // liberer le verrou |
|
| 175 | + spip_fclose_unlock($fl); |
|
| 176 | + |
|
| 177 | + // Verifications |
|
| 178 | + $ok = true; |
|
| 179 | + if (isset($options['phpcheck']) and $options['phpcheck'] == 'oui') { |
|
| 180 | + $ok &= (preg_match(",[?]>\n?$,", $contenu)); |
|
| 181 | + } |
|
| 182 | + |
|
| 183 | + #spip_log("$fread $fichier ".spip_timer('lire_fichier')); |
|
| 184 | + if (!$ok) { |
|
| 185 | + spip_log("echec lecture $fichier"); |
|
| 186 | + } |
|
| 187 | + |
|
| 188 | + return $ok; |
|
| 189 | + } |
|
| 190 | + |
|
| 191 | + return false; |
|
| 192 | 192 | } |
| 193 | 193 | |
| 194 | 194 | |
@@ -216,85 +216,85 @@ discard block |
||
| 216 | 216 | **/ |
| 217 | 217 | function ecrire_fichier($fichier, $contenu, $ignorer_echec = false, $truncate = true) { |
| 218 | 218 | |
| 219 | - #spip_timer('ecrire_fichier'); |
|
| 220 | - |
|
| 221 | - // verrouiller le fichier destination |
|
| 222 | - if ($fp = spip_fopen_lock($fichier, 'a', LOCK_EX)) { |
|
| 223 | - // ecrire les donnees, compressees le cas echeant |
|
| 224 | - // (on ouvre un nouveau pointeur sur le fichier, ce qui a l'avantage |
|
| 225 | - // de le recreer si le locker qui nous precede l'avait supprime...) |
|
| 226 | - if (substr($fichier, -3) == '.gz') { |
|
| 227 | - $contenu = gzencode($contenu); |
|
| 228 | - } |
|
| 229 | - // si c'est une ecriture avec troncation , on fait plutot une ecriture complete a cote suivie unlink+rename |
|
| 230 | - // pour etre sur d'avoir une operation atomique |
|
| 231 | - // y compris en NFS : http://www.ietf.org/rfc/rfc1094.txt |
|
| 232 | - // sauf sous wintruc ou ca ne marche pas |
|
| 233 | - $ok = false; |
|
| 234 | - if ($truncate and _OS_SERVEUR != 'windows') { |
|
| 235 | - if (!function_exists('creer_uniqid')) { |
|
| 236 | - include_spip('inc/acces'); |
|
| 237 | - } |
|
| 238 | - $id = creer_uniqid(); |
|
| 239 | - // on ouvre un pointeur sur un fichier temporaire en ecriture +raz |
|
| 240 | - if ($fp2 = spip_fopen_lock("$fichier.$id", 'w', LOCK_EX)) { |
|
| 241 | - $s = @fputs($fp2, $contenu, $a = strlen($contenu)); |
|
| 242 | - $ok = ($s == $a); |
|
| 243 | - spip_fclose_unlock($fp2); |
|
| 244 | - spip_fclose_unlock($fp); |
|
| 245 | - // unlink direct et pas spip_unlink car on avait deja le verrou |
|
| 246 | - // a priori pas besoin car rename ecrase la cible |
|
| 247 | - // @unlink($fichier); |
|
| 248 | - // le rename aussitot, atomique quand on est pas sous windows |
|
| 249 | - // au pire on arrive en second en cas de concourance, et le rename echoue |
|
| 250 | - // --> on a la version de l'autre process qui doit etre identique |
|
| 251 | - @rename("$fichier.$id", $fichier); |
|
| 252 | - // precaution en cas d'echec du rename |
|
| 253 | - if (!_TEST_FILE_EXISTS or @file_exists("$fichier.$id")) { |
|
| 254 | - @unlink("$fichier.$id"); |
|
| 255 | - } |
|
| 256 | - if ($ok) { |
|
| 257 | - $ok = file_exists($fichier); |
|
| 258 | - } |
|
| 259 | - } else // echec mais penser a fermer .. |
|
| 260 | - { |
|
| 261 | - spip_fclose_unlock($fp); |
|
| 262 | - } |
|
| 263 | - } |
|
| 264 | - // sinon ou si methode precedente a echoueee |
|
| 265 | - // on se rabat sur la methode ancienne |
|
| 266 | - if (!$ok) { |
|
| 267 | - // ici on est en ajout ou sous windows, cas desespere |
|
| 268 | - if ($truncate) { |
|
| 269 | - @ftruncate($fp, 0); |
|
| 270 | - } |
|
| 271 | - $s = @fputs($fp, $contenu, $a = strlen($contenu)); |
|
| 272 | - |
|
| 273 | - $ok = ($s == $a); |
|
| 274 | - spip_fclose_unlock($fp); |
|
| 275 | - } |
|
| 276 | - |
|
| 277 | - // liberer le verrou et fermer le fichier |
|
| 278 | - @chmod($fichier, _SPIP_CHMOD & 0666); |
|
| 279 | - if ($ok) { |
|
| 280 | - if (strpos($fichier, '.php') !== false) { |
|
| 281 | - spip_clear_opcode_cache(realpath($fichier)); |
|
| 282 | - } |
|
| 283 | - |
|
| 284 | - return $ok; |
|
| 285 | - } |
|
| 286 | - } |
|
| 287 | - |
|
| 288 | - if (!$ignorer_echec) { |
|
| 289 | - include_spip('inc/autoriser'); |
|
| 290 | - if (autoriser('chargerftp')) { |
|
| 291 | - raler_fichier($fichier); |
|
| 292 | - } |
|
| 293 | - spip_unlink($fichier); |
|
| 294 | - } |
|
| 295 | - spip_log("Ecriture fichier $fichier impossible", _LOG_INFO_IMPORTANTE); |
|
| 296 | - |
|
| 297 | - return false; |
|
| 219 | + #spip_timer('ecrire_fichier'); |
|
| 220 | + |
|
| 221 | + // verrouiller le fichier destination |
|
| 222 | + if ($fp = spip_fopen_lock($fichier, 'a', LOCK_EX)) { |
|
| 223 | + // ecrire les donnees, compressees le cas echeant |
|
| 224 | + // (on ouvre un nouveau pointeur sur le fichier, ce qui a l'avantage |
|
| 225 | + // de le recreer si le locker qui nous precede l'avait supprime...) |
|
| 226 | + if (substr($fichier, -3) == '.gz') { |
|
| 227 | + $contenu = gzencode($contenu); |
|
| 228 | + } |
|
| 229 | + // si c'est une ecriture avec troncation , on fait plutot une ecriture complete a cote suivie unlink+rename |
|
| 230 | + // pour etre sur d'avoir une operation atomique |
|
| 231 | + // y compris en NFS : http://www.ietf.org/rfc/rfc1094.txt |
|
| 232 | + // sauf sous wintruc ou ca ne marche pas |
|
| 233 | + $ok = false; |
|
| 234 | + if ($truncate and _OS_SERVEUR != 'windows') { |
|
| 235 | + if (!function_exists('creer_uniqid')) { |
|
| 236 | + include_spip('inc/acces'); |
|
| 237 | + } |
|
| 238 | + $id = creer_uniqid(); |
|
| 239 | + // on ouvre un pointeur sur un fichier temporaire en ecriture +raz |
|
| 240 | + if ($fp2 = spip_fopen_lock("$fichier.$id", 'w', LOCK_EX)) { |
|
| 241 | + $s = @fputs($fp2, $contenu, $a = strlen($contenu)); |
|
| 242 | + $ok = ($s == $a); |
|
| 243 | + spip_fclose_unlock($fp2); |
|
| 244 | + spip_fclose_unlock($fp); |
|
| 245 | + // unlink direct et pas spip_unlink car on avait deja le verrou |
|
| 246 | + // a priori pas besoin car rename ecrase la cible |
|
| 247 | + // @unlink($fichier); |
|
| 248 | + // le rename aussitot, atomique quand on est pas sous windows |
|
| 249 | + // au pire on arrive en second en cas de concourance, et le rename echoue |
|
| 250 | + // --> on a la version de l'autre process qui doit etre identique |
|
| 251 | + @rename("$fichier.$id", $fichier); |
|
| 252 | + // precaution en cas d'echec du rename |
|
| 253 | + if (!_TEST_FILE_EXISTS or @file_exists("$fichier.$id")) { |
|
| 254 | + @unlink("$fichier.$id"); |
|
| 255 | + } |
|
| 256 | + if ($ok) { |
|
| 257 | + $ok = file_exists($fichier); |
|
| 258 | + } |
|
| 259 | + } else // echec mais penser a fermer .. |
|
| 260 | + { |
|
| 261 | + spip_fclose_unlock($fp); |
|
| 262 | + } |
|
| 263 | + } |
|
| 264 | + // sinon ou si methode precedente a echoueee |
|
| 265 | + // on se rabat sur la methode ancienne |
|
| 266 | + if (!$ok) { |
|
| 267 | + // ici on est en ajout ou sous windows, cas desespere |
|
| 268 | + if ($truncate) { |
|
| 269 | + @ftruncate($fp, 0); |
|
| 270 | + } |
|
| 271 | + $s = @fputs($fp, $contenu, $a = strlen($contenu)); |
|
| 272 | + |
|
| 273 | + $ok = ($s == $a); |
|
| 274 | + spip_fclose_unlock($fp); |
|
| 275 | + } |
|
| 276 | + |
|
| 277 | + // liberer le verrou et fermer le fichier |
|
| 278 | + @chmod($fichier, _SPIP_CHMOD & 0666); |
|
| 279 | + if ($ok) { |
|
| 280 | + if (strpos($fichier, '.php') !== false) { |
|
| 281 | + spip_clear_opcode_cache(realpath($fichier)); |
|
| 282 | + } |
|
| 283 | + |
|
| 284 | + return $ok; |
|
| 285 | + } |
|
| 286 | + } |
|
| 287 | + |
|
| 288 | + if (!$ignorer_echec) { |
|
| 289 | + include_spip('inc/autoriser'); |
|
| 290 | + if (autoriser('chargerftp')) { |
|
| 291 | + raler_fichier($fichier); |
|
| 292 | + } |
|
| 293 | + spip_unlink($fichier); |
|
| 294 | + } |
|
| 295 | + spip_log("Ecriture fichier $fichier impossible", _LOG_INFO_IMPORTANTE); |
|
| 296 | + |
|
| 297 | + return false; |
|
| 298 | 298 | } |
| 299 | 299 | |
| 300 | 300 | /** |
@@ -314,12 +314,12 @@ discard block |
||
| 314 | 314 | * Écriture avec troncation ? |
| 315 | 315 | */ |
| 316 | 316 | function ecrire_fichier_securise($fichier, $contenu, $ecrire_quand_meme = false, $truncate = true) { |
| 317 | - if (substr($fichier, -4) !== '.php') { |
|
| 318 | - spip_log('Erreur de programmation: ' . $fichier . ' doit finir par .php'); |
|
| 319 | - } |
|
| 320 | - $contenu = '<' . "?php die ('Acces interdit'); ?" . ">\n" . $contenu; |
|
| 317 | + if (substr($fichier, -4) !== '.php') { |
|
| 318 | + spip_log('Erreur de programmation: ' . $fichier . ' doit finir par .php'); |
|
| 319 | + } |
|
| 320 | + $contenu = '<' . "?php die ('Acces interdit'); ?" . ">\n" . $contenu; |
|
| 321 | 321 | |
| 322 | - return ecrire_fichier($fichier, $contenu, $ecrire_quand_meme, $truncate); |
|
| 322 | + return ecrire_fichier($fichier, $contenu, $ecrire_quand_meme, $truncate); |
|
| 323 | 323 | } |
| 324 | 324 | |
| 325 | 325 | |
@@ -330,25 +330,25 @@ discard block |
||
| 330 | 330 | * @return bool |
| 331 | 331 | */ |
| 332 | 332 | function ecrire_fichier_calcule_si_modifie($fichier, $contenu, $force = false, $use_copy = false) { |
| 333 | - $fichier_tmp = $fichier . '.last'; |
|
| 334 | - if (!ecrire_fichier($fichier_tmp, $contenu, true)) { |
|
| 335 | - return false; |
|
| 336 | - } |
|
| 337 | - if ( |
|
| 338 | - $force |
|
| 339 | - or !file_exists($fichier) |
|
| 340 | - or md5_file($fichier) != md5_file($fichier_tmp) |
|
| 341 | - ) { |
|
| 342 | - if ($use_copy) { |
|
| 343 | - @copy($fichier_tmp, $fichier); |
|
| 344 | - } |
|
| 345 | - else { |
|
| 346 | - @rename($fichier_tmp, $fichier); |
|
| 347 | - } |
|
| 348 | - // eviter que PHP ne reserve le vieux timestamp |
|
| 349 | - clearstatcache(true, $fichier); |
|
| 350 | - } |
|
| 351 | - return true; |
|
| 333 | + $fichier_tmp = $fichier . '.last'; |
|
| 334 | + if (!ecrire_fichier($fichier_tmp, $contenu, true)) { |
|
| 335 | + return false; |
|
| 336 | + } |
|
| 337 | + if ( |
|
| 338 | + $force |
|
| 339 | + or !file_exists($fichier) |
|
| 340 | + or md5_file($fichier) != md5_file($fichier_tmp) |
|
| 341 | + ) { |
|
| 342 | + if ($use_copy) { |
|
| 343 | + @copy($fichier_tmp, $fichier); |
|
| 344 | + } |
|
| 345 | + else { |
|
| 346 | + @rename($fichier_tmp, $fichier); |
|
| 347 | + } |
|
| 348 | + // eviter que PHP ne reserve le vieux timestamp |
|
| 349 | + clearstatcache(true, $fichier); |
|
| 350 | + } |
|
| 351 | + return true; |
|
| 352 | 352 | } |
| 353 | 353 | |
| 354 | 354 | |
@@ -369,11 +369,11 @@ discard block |
||
| 369 | 369 | * true si l'opération a réussie, false sinon. |
| 370 | 370 | */ |
| 371 | 371 | function lire_fichier_securise($fichier, &$contenu, $options = []) { |
| 372 | - if ($res = lire_fichier($fichier, $contenu, $options)) { |
|
| 373 | - $contenu = substr($contenu, strlen('<' . "?php die ('Acces interdit'); ?" . ">\n")); |
|
| 374 | - } |
|
| 372 | + if ($res = lire_fichier($fichier, $contenu, $options)) { |
|
| 373 | + $contenu = substr($contenu, strlen('<' . "?php die ('Acces interdit'); ?" . ">\n")); |
|
| 374 | + } |
|
| 375 | 375 | |
| 376 | - return $res; |
|
| 376 | + return $res; |
|
| 377 | 377 | } |
| 378 | 378 | |
| 379 | 379 | /** |
@@ -388,25 +388,25 @@ discard block |
||
| 388 | 388 | * Chemin du fichier |
| 389 | 389 | **/ |
| 390 | 390 | function raler_fichier($fichier) { |
| 391 | - if (!defined('_SPIP_ECRIRE_SCRIPT')) { |
|
| 392 | - spip_initialisation_suite(); |
|
| 393 | - } |
|
| 394 | - include_spip('inc/minipres'); |
|
| 395 | - $dir = dirname($fichier); |
|
| 396 | - http_response_code(401); |
|
| 397 | - echo minipres(_T('texte_inc_meta_2'), "<h4 style='color: red'>" |
|
| 398 | - . _T('texte_inc_meta_1', ['fichier' => $fichier]) |
|
| 399 | - . " <a href='" |
|
| 400 | - . generer_url_ecrire('install', "etape=chmod&test_dir=$dir") |
|
| 401 | - . "'>" |
|
| 402 | - . _T('texte_inc_meta_2') |
|
| 403 | - . '</a> ' |
|
| 404 | - . _T( |
|
| 405 | - 'texte_inc_meta_3', |
|
| 406 | - ['repertoire' => joli_repertoire($dir)] |
|
| 407 | - ) |
|
| 408 | - . "</h4>\n"); |
|
| 409 | - exit; |
|
| 391 | + if (!defined('_SPIP_ECRIRE_SCRIPT')) { |
|
| 392 | + spip_initialisation_suite(); |
|
| 393 | + } |
|
| 394 | + include_spip('inc/minipres'); |
|
| 395 | + $dir = dirname($fichier); |
|
| 396 | + http_response_code(401); |
|
| 397 | + echo minipres(_T('texte_inc_meta_2'), "<h4 style='color: red'>" |
|
| 398 | + . _T('texte_inc_meta_1', ['fichier' => $fichier]) |
|
| 399 | + . " <a href='" |
|
| 400 | + . generer_url_ecrire('install', "etape=chmod&test_dir=$dir") |
|
| 401 | + . "'>" |
|
| 402 | + . _T('texte_inc_meta_2') |
|
| 403 | + . '</a> ' |
|
| 404 | + . _T( |
|
| 405 | + 'texte_inc_meta_3', |
|
| 406 | + ['repertoire' => joli_repertoire($dir)] |
|
| 407 | + ) |
|
| 408 | + . "</h4>\n"); |
|
| 409 | + exit; |
|
| 410 | 410 | } |
| 411 | 411 | |
| 412 | 412 | |
@@ -421,14 +421,14 @@ discard block |
||
| 421 | 421 | * - true si récent, false sinon |
| 422 | 422 | */ |
| 423 | 423 | function jeune_fichier($fichier, $n) { |
| 424 | - if (!file_exists($fichier)) { |
|
| 425 | - return false; |
|
| 426 | - } |
|
| 427 | - if (!$c = @filemtime($fichier)) { |
|
| 428 | - return false; |
|
| 429 | - } |
|
| 430 | - |
|
| 431 | - return (time() - $n <= $c); |
|
| 424 | + if (!file_exists($fichier)) { |
|
| 425 | + return false; |
|
| 426 | + } |
|
| 427 | + if (!$c = @filemtime($fichier)) { |
|
| 428 | + return false; |
|
| 429 | + } |
|
| 430 | + |
|
| 431 | + return (time() - $n <= $c); |
|
| 432 | 432 | } |
| 433 | 433 | |
| 434 | 434 | /** |
@@ -443,22 +443,22 @@ discard block |
||
| 443 | 443 | * - false si on n'arrive pas poser le verrou ou si la suppression échoue |
| 444 | 444 | */ |
| 445 | 445 | function supprimer_fichier($fichier, $lock = true) { |
| 446 | - if (!@file_exists($fichier)) { |
|
| 447 | - return true; |
|
| 448 | - } |
|
| 449 | - |
|
| 450 | - if ($lock) { |
|
| 451 | - // verrouiller le fichier destination |
|
| 452 | - if (!$fp = spip_fopen_lock($fichier, 'a', LOCK_EX)) { |
|
| 453 | - return false; |
|
| 454 | - } |
|
| 455 | - |
|
| 456 | - // liberer le verrou |
|
| 457 | - spip_fclose_unlock($fp); |
|
| 458 | - } |
|
| 459 | - |
|
| 460 | - // supprimer |
|
| 461 | - return @unlink($fichier); |
|
| 446 | + if (!@file_exists($fichier)) { |
|
| 447 | + return true; |
|
| 448 | + } |
|
| 449 | + |
|
| 450 | + if ($lock) { |
|
| 451 | + // verrouiller le fichier destination |
|
| 452 | + if (!$fp = spip_fopen_lock($fichier, 'a', LOCK_EX)) { |
|
| 453 | + return false; |
|
| 454 | + } |
|
| 455 | + |
|
| 456 | + // liberer le verrou |
|
| 457 | + spip_fclose_unlock($fp); |
|
| 458 | + } |
|
| 459 | + |
|
| 460 | + // supprimer |
|
| 461 | + return @unlink($fichier); |
|
| 462 | 462 | } |
| 463 | 463 | |
| 464 | 464 | /** |
@@ -468,12 +468,12 @@ discard block |
||
| 468 | 468 | * Chemin du fichier |
| 469 | 469 | */ |
| 470 | 470 | function spip_unlink($f) { |
| 471 | - if (!is_dir($f)) { |
|
| 472 | - supprimer_fichier($f, false); |
|
| 473 | - } else { |
|
| 474 | - @unlink("$f/.ok"); |
|
| 475 | - @rmdir($f); |
|
| 476 | - } |
|
| 471 | + if (!is_dir($f)) { |
|
| 472 | + supprimer_fichier($f, false); |
|
| 473 | + } else { |
|
| 474 | + @unlink("$f/.ok"); |
|
| 475 | + @rmdir($f); |
|
| 476 | + } |
|
| 477 | 477 | } |
| 478 | 478 | |
| 479 | 479 | /** |
@@ -487,26 +487,26 @@ discard block |
||
| 487 | 487 | * The absolute path of the PHP file to invalidate. |
| 488 | 488 | */ |
| 489 | 489 | function spip_clear_opcode_cache($filepath) { |
| 490 | - clearstatcache(true, $filepath); |
|
| 491 | - |
|
| 492 | - // Zend OPcache |
|
| 493 | - if (function_exists('opcache_invalidate')) { |
|
| 494 | - $invalidate = @opcache_invalidate($filepath, true); |
|
| 495 | - // si l'invalidation a echoue lever un flag |
|
| 496 | - if (!$invalidate and !defined('_spip_attend_invalidation_opcode_cache')) { |
|
| 497 | - define('_spip_attend_invalidation_opcode_cache', true); |
|
| 498 | - } |
|
| 499 | - } elseif (!defined('_spip_attend_invalidation_opcode_cache')) { |
|
| 500 | - // n'agira que si opcache est effectivement actif (il semble qu'on a pas toujours la fonction opcache_invalidate) |
|
| 501 | - define('_spip_attend_invalidation_opcode_cache', true); |
|
| 502 | - } |
|
| 503 | - // APC. |
|
| 504 | - if (function_exists('apc_delete_file')) { |
|
| 505 | - // apc_delete_file() throws a PHP warning in case the specified file was |
|
| 506 | - // not compiled yet. |
|
| 507 | - // @see http://php.net/apc-delete-file |
|
| 508 | - @apc_delete_file($filepath); |
|
| 509 | - } |
|
| 490 | + clearstatcache(true, $filepath); |
|
| 491 | + |
|
| 492 | + // Zend OPcache |
|
| 493 | + if (function_exists('opcache_invalidate')) { |
|
| 494 | + $invalidate = @opcache_invalidate($filepath, true); |
|
| 495 | + // si l'invalidation a echoue lever un flag |
|
| 496 | + if (!$invalidate and !defined('_spip_attend_invalidation_opcode_cache')) { |
|
| 497 | + define('_spip_attend_invalidation_opcode_cache', true); |
|
| 498 | + } |
|
| 499 | + } elseif (!defined('_spip_attend_invalidation_opcode_cache')) { |
|
| 500 | + // n'agira que si opcache est effectivement actif (il semble qu'on a pas toujours la fonction opcache_invalidate) |
|
| 501 | + define('_spip_attend_invalidation_opcode_cache', true); |
|
| 502 | + } |
|
| 503 | + // APC. |
|
| 504 | + if (function_exists('apc_delete_file')) { |
|
| 505 | + // apc_delete_file() throws a PHP warning in case the specified file was |
|
| 506 | + // not compiled yet. |
|
| 507 | + // @see http://php.net/apc-delete-file |
|
| 508 | + @apc_delete_file($filepath); |
|
| 509 | + } |
|
| 510 | 510 | } |
| 511 | 511 | |
| 512 | 512 | /** |
@@ -529,25 +529,25 @@ discard block |
||
| 529 | 529 | * |
| 530 | 530 | */ |
| 531 | 531 | function spip_attend_invalidation_opcode_cache($timestamp = null) { |
| 532 | - if ( |
|
| 533 | - function_exists('opcache_get_configuration') |
|
| 534 | - and @ini_get('opcache.enable') |
|
| 535 | - and @ini_get('opcache.validate_timestamps') |
|
| 536 | - and ($duree = intval(@ini_get('opcache.revalidate_freq')) or $duree = 2) |
|
| 537 | - and defined('_spip_attend_invalidation_opcode_cache') // des invalidations ont echouees |
|
| 538 | - ) { |
|
| 539 | - $wait = $duree + 1; |
|
| 540 | - if ($timestamp) { |
|
| 541 | - $wait -= (time() - $timestamp); |
|
| 542 | - if ($wait < 0) { |
|
| 543 | - $wait = 0; |
|
| 544 | - } |
|
| 545 | - } |
|
| 546 | - spip_log('Probleme de configuration opcache.revalidate_freq ' . $duree . 's : on attend ' . $wait . 's', _LOG_INFO_IMPORTANTE); |
|
| 547 | - if ($wait) { |
|
| 548 | - sleep($duree + 1); |
|
| 549 | - } |
|
| 550 | - } |
|
| 532 | + if ( |
|
| 533 | + function_exists('opcache_get_configuration') |
|
| 534 | + and @ini_get('opcache.enable') |
|
| 535 | + and @ini_get('opcache.validate_timestamps') |
|
| 536 | + and ($duree = intval(@ini_get('opcache.revalidate_freq')) or $duree = 2) |
|
| 537 | + and defined('_spip_attend_invalidation_opcode_cache') // des invalidations ont echouees |
|
| 538 | + ) { |
|
| 539 | + $wait = $duree + 1; |
|
| 540 | + if ($timestamp) { |
|
| 541 | + $wait -= (time() - $timestamp); |
|
| 542 | + if ($wait < 0) { |
|
| 543 | + $wait = 0; |
|
| 544 | + } |
|
| 545 | + } |
|
| 546 | + spip_log('Probleme de configuration opcache.revalidate_freq ' . $duree . 's : on attend ' . $wait . 's', _LOG_INFO_IMPORTANTE); |
|
| 547 | + if ($wait) { |
|
| 548 | + sleep($duree + 1); |
|
| 549 | + } |
|
| 550 | + } |
|
| 551 | 551 | } |
| 552 | 552 | |
| 553 | 553 | |
@@ -560,26 +560,26 @@ discard block |
||
| 560 | 560 | * @return bool Suppression reussie. |
| 561 | 561 | */ |
| 562 | 562 | function supprimer_repertoire($dir) { |
| 563 | - if (!file_exists($dir)) { |
|
| 564 | - return true; |
|
| 565 | - } |
|
| 566 | - if (!is_dir($dir) || is_link($dir)) { |
|
| 567 | - return @unlink($dir); |
|
| 568 | - } |
|
| 569 | - |
|
| 570 | - foreach (scandir($dir) as $item) { |
|
| 571 | - if ($item == '.' || $item == '..') { |
|
| 572 | - continue; |
|
| 573 | - } |
|
| 574 | - if (!supprimer_repertoire($dir . '/' . $item)) { |
|
| 575 | - @chmod($dir . '/' . $item, 0777); |
|
| 576 | - if (!supprimer_repertoire($dir . '/' . $item)) { |
|
| 577 | - return false; |
|
| 578 | - } |
|
| 579 | - }; |
|
| 580 | - } |
|
| 581 | - |
|
| 582 | - return @rmdir($dir); |
|
| 563 | + if (!file_exists($dir)) { |
|
| 564 | + return true; |
|
| 565 | + } |
|
| 566 | + if (!is_dir($dir) || is_link($dir)) { |
|
| 567 | + return @unlink($dir); |
|
| 568 | + } |
|
| 569 | + |
|
| 570 | + foreach (scandir($dir) as $item) { |
|
| 571 | + if ($item == '.' || $item == '..') { |
|
| 572 | + continue; |
|
| 573 | + } |
|
| 574 | + if (!supprimer_repertoire($dir . '/' . $item)) { |
|
| 575 | + @chmod($dir . '/' . $item, 0777); |
|
| 576 | + if (!supprimer_repertoire($dir . '/' . $item)) { |
|
| 577 | + return false; |
|
| 578 | + } |
|
| 579 | + }; |
|
| 580 | + } |
|
| 581 | + |
|
| 582 | + return @rmdir($dir); |
|
| 583 | 583 | } |
| 584 | 584 | |
| 585 | 585 | |
@@ -608,57 +608,57 @@ discard block |
||
| 608 | 608 | * Chemin du répertoire créé. |
| 609 | 609 | **/ |
| 610 | 610 | function sous_repertoire($base, $subdir = '', $nobase = false, $tantpis = false) { |
| 611 | - static $dirs = []; |
|
| 612 | - |
|
| 613 | - $base = str_replace('//', '/', $base); |
|
| 614 | - |
|
| 615 | - # suppr le dernier caractere si c'est un / |
|
| 616 | - $base = rtrim($base, '/'); |
|
| 617 | - |
|
| 618 | - if (!strlen($subdir)) { |
|
| 619 | - $n = strrpos($base, '/'); |
|
| 620 | - if ($n === false) { |
|
| 621 | - return $nobase ? '' : ($base . '/'); |
|
| 622 | - } |
|
| 623 | - $subdir = substr($base, $n + 1); |
|
| 624 | - $base = substr($base, 0, $n + 1); |
|
| 625 | - } else { |
|
| 626 | - $base .= '/'; |
|
| 627 | - $subdir = str_replace('/', '', $subdir); |
|
| 628 | - } |
|
| 629 | - |
|
| 630 | - $baseaff = $nobase ? '' : $base; |
|
| 631 | - if (isset($dirs[$base . $subdir])) { |
|
| 632 | - return $baseaff . $dirs[$base . $subdir]; |
|
| 633 | - } |
|
| 634 | - |
|
| 635 | - $path = $base . $subdir; # $path = 'IMG/distant/pdf' ou 'IMG/distant_pdf' |
|
| 636 | - |
|
| 637 | - if (file_exists("$path/.ok")) { |
|
| 638 | - return $baseaff . ($dirs[$base . $subdir] = "$subdir/"); |
|
| 639 | - } |
|
| 640 | - |
|
| 641 | - @mkdir($path, _SPIP_CHMOD); |
|
| 642 | - @chmod($path, _SPIP_CHMOD); |
|
| 643 | - |
|
| 644 | - if (is_dir($path) && is_writable($path)) { |
|
| 645 | - @touch("$path/.ok"); |
|
| 646 | - spip_log("creation $base$subdir/"); |
|
| 647 | - |
|
| 648 | - return $baseaff . ($dirs[$base . $subdir] = "$subdir/"); |
|
| 649 | - } |
|
| 650 | - |
|
| 651 | - // en cas d'echec c'est peut etre tout simplement que le disque est plein : |
|
| 652 | - // l'inode du fichier dir_test existe, mais impossible d'y mettre du contenu |
|
| 653 | - spip_log("echec creation $base{$subdir}"); |
|
| 654 | - if ($tantpis) { |
|
| 655 | - return ''; |
|
| 656 | - } |
|
| 657 | - if (!_DIR_RESTREINT) { |
|
| 658 | - $base = preg_replace(',^' . _DIR_RACINE . ',', '', $base); |
|
| 659 | - } |
|
| 660 | - $base .= $subdir; |
|
| 661 | - raler_fichier($base . '/.ok'); |
|
| 611 | + static $dirs = []; |
|
| 612 | + |
|
| 613 | + $base = str_replace('//', '/', $base); |
|
| 614 | + |
|
| 615 | + # suppr le dernier caractere si c'est un / |
|
| 616 | + $base = rtrim($base, '/'); |
|
| 617 | + |
|
| 618 | + if (!strlen($subdir)) { |
|
| 619 | + $n = strrpos($base, '/'); |
|
| 620 | + if ($n === false) { |
|
| 621 | + return $nobase ? '' : ($base . '/'); |
|
| 622 | + } |
|
| 623 | + $subdir = substr($base, $n + 1); |
|
| 624 | + $base = substr($base, 0, $n + 1); |
|
| 625 | + } else { |
|
| 626 | + $base .= '/'; |
|
| 627 | + $subdir = str_replace('/', '', $subdir); |
|
| 628 | + } |
|
| 629 | + |
|
| 630 | + $baseaff = $nobase ? '' : $base; |
|
| 631 | + if (isset($dirs[$base . $subdir])) { |
|
| 632 | + return $baseaff . $dirs[$base . $subdir]; |
|
| 633 | + } |
|
| 634 | + |
|
| 635 | + $path = $base . $subdir; # $path = 'IMG/distant/pdf' ou 'IMG/distant_pdf' |
|
| 636 | + |
|
| 637 | + if (file_exists("$path/.ok")) { |
|
| 638 | + return $baseaff . ($dirs[$base . $subdir] = "$subdir/"); |
|
| 639 | + } |
|
| 640 | + |
|
| 641 | + @mkdir($path, _SPIP_CHMOD); |
|
| 642 | + @chmod($path, _SPIP_CHMOD); |
|
| 643 | + |
|
| 644 | + if (is_dir($path) && is_writable($path)) { |
|
| 645 | + @touch("$path/.ok"); |
|
| 646 | + spip_log("creation $base$subdir/"); |
|
| 647 | + |
|
| 648 | + return $baseaff . ($dirs[$base . $subdir] = "$subdir/"); |
|
| 649 | + } |
|
| 650 | + |
|
| 651 | + // en cas d'echec c'est peut etre tout simplement que le disque est plein : |
|
| 652 | + // l'inode du fichier dir_test existe, mais impossible d'y mettre du contenu |
|
| 653 | + spip_log("echec creation $base{$subdir}"); |
|
| 654 | + if ($tantpis) { |
|
| 655 | + return ''; |
|
| 656 | + } |
|
| 657 | + if (!_DIR_RESTREINT) { |
|
| 658 | + $base = preg_replace(',^' . _DIR_RACINE . ',', '', $base); |
|
| 659 | + } |
|
| 660 | + $base .= $subdir; |
|
| 661 | + raler_fichier($base . '/.ok'); |
|
| 662 | 662 | } |
| 663 | 663 | |
| 664 | 664 | |
@@ -691,56 +691,56 @@ discard block |
||
| 691 | 691 | * Chemins des fichiers trouvés. |
| 692 | 692 | **/ |
| 693 | 693 | function preg_files($dir, $pattern = -1 /* AUTO */, $maxfiles = 10000, $recurs = []) { |
| 694 | - $nbfiles = 0; |
|
| 695 | - if ($pattern == -1) { |
|
| 696 | - $pattern = ''; |
|
| 697 | - } |
|
| 698 | - $fichiers = []; |
|
| 699 | - // revenir au repertoire racine si on a recu dossier/truc |
|
| 700 | - // pour regarder dossier/truc/ ne pas oublier le / final |
|
| 701 | - $dir = preg_replace(',/[^/]*$,', '', $dir); |
|
| 702 | - if ($dir == '') { |
|
| 703 | - $dir = '.'; |
|
| 704 | - } |
|
| 705 | - |
|
| 706 | - if (@is_dir($dir) and is_readable($dir) and $d = opendir($dir)) { |
|
| 707 | - while (($f = readdir($d)) !== false && ($nbfiles < $maxfiles)) { |
|
| 708 | - if ( |
|
| 709 | - $f[0] != '.' # ignorer . .. .svn etc |
|
| 710 | - and $f != 'CVS' |
|
| 711 | - and $f != 'remove.txt' |
|
| 712 | - and is_readable($f = "$dir/$f") |
|
| 713 | - ) { |
|
| 714 | - if (is_file($f)) { |
|
| 715 | - if (!$pattern or preg_match(";$pattern;iS", $f)) { |
|
| 716 | - $fichiers[] = $f; |
|
| 717 | - $nbfiles++; |
|
| 718 | - } |
|
| 719 | - } else { |
|
| 720 | - if (is_dir($f) and is_array($recurs)) { |
|
| 721 | - $rp = @realpath($f); |
|
| 722 | - if (!is_string($rp) or !strlen($rp)) { |
|
| 723 | - $rp = $f; |
|
| 724 | - } # realpath n'est peut etre pas autorise |
|
| 725 | - if (!isset($recurs[$rp])) { |
|
| 726 | - $recurs[$rp] = true; |
|
| 727 | - $beginning = $fichiers; |
|
| 728 | - $end = preg_files( |
|
| 729 | - "$f/", |
|
| 730 | - $pattern, |
|
| 731 | - $maxfiles - $nbfiles, |
|
| 732 | - $recurs |
|
| 733 | - ); |
|
| 734 | - $fichiers = array_merge((array)$beginning, (array)$end); |
|
| 735 | - $nbfiles = count($fichiers); |
|
| 736 | - } |
|
| 737 | - } |
|
| 738 | - } |
|
| 739 | - } |
|
| 740 | - } |
|
| 741 | - closedir($d); |
|
| 742 | - } |
|
| 743 | - sort($fichiers); |
|
| 744 | - |
|
| 745 | - return $fichiers; |
|
| 694 | + $nbfiles = 0; |
|
| 695 | + if ($pattern == -1) { |
|
| 696 | + $pattern = ''; |
|
| 697 | + } |
|
| 698 | + $fichiers = []; |
|
| 699 | + // revenir au repertoire racine si on a recu dossier/truc |
|
| 700 | + // pour regarder dossier/truc/ ne pas oublier le / final |
|
| 701 | + $dir = preg_replace(',/[^/]*$,', '', $dir); |
|
| 702 | + if ($dir == '') { |
|
| 703 | + $dir = '.'; |
|
| 704 | + } |
|
| 705 | + |
|
| 706 | + if (@is_dir($dir) and is_readable($dir) and $d = opendir($dir)) { |
|
| 707 | + while (($f = readdir($d)) !== false && ($nbfiles < $maxfiles)) { |
|
| 708 | + if ( |
|
| 709 | + $f[0] != '.' # ignorer . .. .svn etc |
|
| 710 | + and $f != 'CVS' |
|
| 711 | + and $f != 'remove.txt' |
|
| 712 | + and is_readable($f = "$dir/$f") |
|
| 713 | + ) { |
|
| 714 | + if (is_file($f)) { |
|
| 715 | + if (!$pattern or preg_match(";$pattern;iS", $f)) { |
|
| 716 | + $fichiers[] = $f; |
|
| 717 | + $nbfiles++; |
|
| 718 | + } |
|
| 719 | + } else { |
|
| 720 | + if (is_dir($f) and is_array($recurs)) { |
|
| 721 | + $rp = @realpath($f); |
|
| 722 | + if (!is_string($rp) or !strlen($rp)) { |
|
| 723 | + $rp = $f; |
|
| 724 | + } # realpath n'est peut etre pas autorise |
|
| 725 | + if (!isset($recurs[$rp])) { |
|
| 726 | + $recurs[$rp] = true; |
|
| 727 | + $beginning = $fichiers; |
|
| 728 | + $end = preg_files( |
|
| 729 | + "$f/", |
|
| 730 | + $pattern, |
|
| 731 | + $maxfiles - $nbfiles, |
|
| 732 | + $recurs |
|
| 733 | + ); |
|
| 734 | + $fichiers = array_merge((array)$beginning, (array)$end); |
|
| 735 | + $nbfiles = count($fichiers); |
|
| 736 | + } |
|
| 737 | + } |
|
| 738 | + } |
|
| 739 | + } |
|
| 740 | + } |
|
| 741 | + closedir($d); |
|
| 742 | + } |
|
| 743 | + sort($fichiers); |
|
| 744 | + |
|
| 745 | + return $fichiers; |
|
| 746 | 746 | } |