Completed
Push — master ( a15233...457c22 )
by cam
01:25
created
ecrire/inc/modifier.php 1 patch
Indentation   +280 added lines, -280 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -39,28 +39,28 @@  discard block
 block discarded – undo
39 39
  *     Tableau des champs et valeurs collectées
40 40
  */
41 41
 function collecter_requests($include_list, $exclude_list = [], $set = null, $tous = false) {
42
-	$c = $set;
43
-	if (!$c) {
44
-		$c = [];
45
-		foreach ($include_list as $champ) {
46
-			// on ne collecte que les champs reellement envoyes par defaut.
47
-			// le cas d'un envoi de valeur NULL peut du coup poser probleme.
48
-			$val = _request($champ);
49
-			if ($tous or $val !== null) {
50
-				$c[$champ] = $val;
51
-			}
52
-		}
53
-		// on ajoute toujours la lang en saisie possible
54
-		// meme si pas prevu au depart pour l'objet concerne
55
-		if ($l = _request('changer_lang')) {
56
-			$c['lang'] = $l;
57
-		}
58
-	}
59
-	foreach ($exclude_list as $champ) {
60
-		unset($c[$champ]);
61
-	}
62
-
63
-	return $c;
42
+    $c = $set;
43
+    if (!$c) {
44
+        $c = [];
45
+        foreach ($include_list as $champ) {
46
+            // on ne collecte que les champs reellement envoyes par defaut.
47
+            // le cas d'un envoi de valeur NULL peut du coup poser probleme.
48
+            $val = _request($champ);
49
+            if ($tous or $val !== null) {
50
+                $c[$champ] = $val;
51
+            }
52
+        }
53
+        // on ajoute toujours la lang en saisie possible
54
+        // meme si pas prevu au depart pour l'objet concerne
55
+        if ($l = _request('changer_lang')) {
56
+            $c['lang'] = $l;
57
+        }
58
+    }
59
+    foreach ($exclude_list as $champ) {
60
+        unset($c[$champ]);
61
+    }
62
+
63
+    return $c;
64 64
 }
65 65
 
66 66
 /**
@@ -97,262 +97,262 @@  discard block
 block discarded – undo
97 97
  *     - chaîne : texte d'un message d'erreur
98 98
  */
99 99
 function objet_modifier_champs($objet, $id_objet, $options, $c = null, $serveur = '') {
100
-	if (!$id_objet = intval($id_objet)) {
101
-		spip_log('Erreur $id_objet non defini', 'warn');
102
-
103
-		return _T('erreur_technique_enregistrement_impossible');
104
-	}
105
-
106
-	include_spip('inc/filtres');
107
-
108
-	$table_objet = table_objet($objet, $serveur);
109
-	$spip_table_objet = table_objet_sql($objet, $serveur);
110
-	$id_table_objet = id_table_objet($objet, $serveur);
111
-	$trouver_table = charger_fonction('trouver_table', 'base');
112
-	$desc = $trouver_table($spip_table_objet, $serveur);
113
-
114
-	// Appels incomplets (sans $c)
115
-	if (!is_array($c)) {
116
-		spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c');
117
-
118
-		return _T('erreur_technique_enregistrement_impossible');
119
-	}
120
-
121
-	// Securite : certaines variables ne sont jamais acceptees ici
122
-	// car elles ne relevent pas de autoriser(xxx, modifier) ;
123
-	// il faut passer par instituer_XX()
124
-	// TODO: faut-il passer ces variables interdites
125
-	// dans un fichier de description separe ?
126
-	unset($c['statut']);
127
-	unset($c['id_parent']);
128
-	unset($c['id_rubrique']);
129
-	unset($c['id_secteur']);
130
-
131
-	// Gerer les champs non vides
132
-	if (isset($options['nonvide']) and is_array($options['nonvide'])) {
133
-		foreach ($options['nonvide'] as $champ => $sinon) {
134
-			if (isset($c[$champ]) and $c[$champ] === '') {
135
-				$c[$champ] = $sinon;
136
-			}
137
-		}
138
-	}
139
-
140
-	// N'accepter que les champs qui existent dans la table
141
-	$champs = array_intersect_key($c, $desc['field']);
142
-	// et dont la valeur n'est pas null
143
-	$champs = array_filter($champs, static function ($var) {
144
-		return $var !== null;
145
-	});
146
-	// TODO: ici aussi on peut valider les contenus
147
-	// en fonction du type
148
-
149
-	// Nettoyer les valeurs
150
-	$champs = array_map('corriger_caracteres', $champs);
151
-
152
-	// On récupère l'état avant toute modification
153
-	$row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet);
154
-
155
-	// Envoyer aux plugins
156
-	$champs = pipeline(
157
-		'pre_edition',
158
-		[
159
-			'args' => [
160
-				'table' => $spip_table_objet, // compatibilite
161
-				'table_objet' => $table_objet,
162
-				'spip_table_objet' => $spip_table_objet,
163
-				'desc' => $desc,
164
-				'type' => $objet,
165
-				'id_objet' => $id_objet,
166
-				'data' => $options['data'] ?? null,
167
-				'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
168
-				'champs_anciens' => $row, // état du contenu avant modif
169
-				'serveur' => $serveur,
170
-				'action' => $options['action'] ?? 'modifier'
171
-			],
172
-			'data' => $champs
173
-		]
174
-	);
175
-
176
-	if (!$champs) {
177
-		return false;
178
-	}
179
-
180
-
181
-	// marquer le fait que l'objet est travaille par toto a telle date
182
-	include_spip('inc/config');
183
-	if (lire_config('articles_modif', 'non') !== 'non') {
184
-		include_spip('inc/drapeau_edition');
185
-		signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet);
186
-	}
187
-
188
-	// Verifier si les mises a jour sont pertinentes, datees, en conflit etc
189
-	include_spip('inc/editer');
190
-	if (!isset($options['data']) or is_null($options['data'])) {
191
-		$options['data'] = &$_POST;
192
-	}
193
-	$conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur);
194
-	// cas hypothetique : normalement inc/editer verifie en amont le conflit edition
195
-	// et gere l'interface
196
-	// ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme
197
-	if ($conflits) {
198
-		return _T('titre_conflit_edition');
199
-	}
200
-
201
-	if ($champs) {
202
-		// cas particulier de la langue : passer par instituer_langue_objet
203
-		if (isset($champs['lang'])) {
204
-			if ($changer_lang = $champs['lang']) {
205
-				$id_rubrique = 0;
206
-				if (isset($desc['field']['id_rubrique'])) {
207
-					$parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique';
208
-					$id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet));
209
-				}
210
-				$instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
211
-				$champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur);
212
-			}
213
-			// on laisse 'lang' dans $champs,
214
-			// ca permet de passer dans le pipeline post_edition et de journaliser
215
-			// et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir
216
-			// deja pris en compte
217
-		}
218
-
219
-		// la modif peut avoir lieu
220
-
221
-		// faut-il ajouter date_modif ?
222
-		if (
223
-			!empty($options['date_modif'])
224
-			and !isset($champs[$options['date_modif']])
225
-		) {
226
-			$champs[$options['date_modif']] = date('Y-m-d H:i:s');
227
-		}
228
-
229
-		// allez on commit la modif
230
-		sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), [], $serveur);
231
-
232
-		// on verifie si elle est bien passee
233
-		$moof = sql_fetsel(
234
-			array_keys($champs),
235
-			$spip_table_objet,
236
-			"$id_table_objet=" . intval($id_objet),
237
-			[],
238
-			[],
239
-			'',
240
-			[],
241
-			$serveur
242
-		);
243
-		// si difference entre les champs, reperer les champs mal enregistres
244
-		if ($moof != $champs) {
245
-			$liste = [];
246
-			foreach ($moof as $k => $v) {
247
-				if (
248
-					$v !== $champs[$k]
249
-					// ne pas alerter si le champ est numerique est que les valeurs sont equivalentes
250
-					and (!is_numeric($v) or intval($v) !== intval($champs[$k]))
251
-					// ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle
252
-					and (strlen($champs[$k]) or !in_array($v, ['0000-00-00 00:00:00', '0000-00-00']))
253
-				) {
254
-					$liste[] = $k;
255
-					$conflits[$k]['post'] = $champs[$k];
256
-					$conflits[$k]['save'] = $v;
257
-
258
-					// cas specifique MySQL+emoji : si l'un est la
259
-					// conversion utf8_noplanes de l'autre alors c'est OK
260
-					if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) {
261
-						include_spip('inc/charsets');
262
-						if ($v == utf8_noplanes($champs[$k])) {
263
-							array_pop($liste);
264
-						}
265
-					}
266
-				}
267
-			}
268
-			// si un champ n'a pas ete correctement enregistre, loger et retourner une erreur
269
-			// c'est un cas exceptionnel
270
-			if (count($liste)) {
271
-				spip_log(
272
-					"Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true),
273
-					'modifier.' . _LOG_CRITIQUE
274
-				);
275
-
276
-				return _T(
277
-					'erreur_technique_enregistrement_champs',
278
-					['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"]
279
-				);
280
-			}
281
-		}
282
-
283
-		// Invalider les caches
284
-		if (isset($options['invalideur']) and $options['invalideur']) {
285
-			include_spip('inc/invalideur');
286
-			if (is_array($options['invalideur'])) {
287
-				array_map('suivre_invalideur', $options['invalideur']);
288
-			} else {
289
-				suivre_invalideur($options['invalideur']);
290
-			}
291
-		}
292
-
293
-		// Notifications, gestion des revisions...
294
-		// en standard, appelle |nouvelle_revision ci-dessous
295
-		pipeline(
296
-			'post_edition',
297
-			[
298
-				'args' => [
299
-					'table' => $spip_table_objet,
300
-					'table_objet' => $table_objet,
301
-					'spip_table_objet' => $spip_table_objet,
302
-					'desc' => $desc,
303
-					'type' => $objet,
304
-					'id_objet' => $id_objet,
305
-					'champs' => $options['champs'] ?? [], // [doc] kesako ?
306
-					'champs_anciens' => $row, // état du contenu avant modif
307
-					'serveur' => $serveur,
308
-					'action' => $options['action'] ?? 'modifier'
309
-				],
310
-				'data' => $champs
311
-			]
312
-		);
313
-	}
100
+    if (!$id_objet = intval($id_objet)) {
101
+        spip_log('Erreur $id_objet non defini', 'warn');
102
+
103
+        return _T('erreur_technique_enregistrement_impossible');
104
+    }
105
+
106
+    include_spip('inc/filtres');
107
+
108
+    $table_objet = table_objet($objet, $serveur);
109
+    $spip_table_objet = table_objet_sql($objet, $serveur);
110
+    $id_table_objet = id_table_objet($objet, $serveur);
111
+    $trouver_table = charger_fonction('trouver_table', 'base');
112
+    $desc = $trouver_table($spip_table_objet, $serveur);
113
+
114
+    // Appels incomplets (sans $c)
115
+    if (!is_array($c)) {
116
+        spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c');
117
+
118
+        return _T('erreur_technique_enregistrement_impossible');
119
+    }
120
+
121
+    // Securite : certaines variables ne sont jamais acceptees ici
122
+    // car elles ne relevent pas de autoriser(xxx, modifier) ;
123
+    // il faut passer par instituer_XX()
124
+    // TODO: faut-il passer ces variables interdites
125
+    // dans un fichier de description separe ?
126
+    unset($c['statut']);
127
+    unset($c['id_parent']);
128
+    unset($c['id_rubrique']);
129
+    unset($c['id_secteur']);
130
+
131
+    // Gerer les champs non vides
132
+    if (isset($options['nonvide']) and is_array($options['nonvide'])) {
133
+        foreach ($options['nonvide'] as $champ => $sinon) {
134
+            if (isset($c[$champ]) and $c[$champ] === '') {
135
+                $c[$champ] = $sinon;
136
+            }
137
+        }
138
+    }
139
+
140
+    // N'accepter que les champs qui existent dans la table
141
+    $champs = array_intersect_key($c, $desc['field']);
142
+    // et dont la valeur n'est pas null
143
+    $champs = array_filter($champs, static function ($var) {
144
+        return $var !== null;
145
+    });
146
+    // TODO: ici aussi on peut valider les contenus
147
+    // en fonction du type
148
+
149
+    // Nettoyer les valeurs
150
+    $champs = array_map('corriger_caracteres', $champs);
151
+
152
+    // On récupère l'état avant toute modification
153
+    $row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet);
154
+
155
+    // Envoyer aux plugins
156
+    $champs = pipeline(
157
+        'pre_edition',
158
+        [
159
+            'args' => [
160
+                'table' => $spip_table_objet, // compatibilite
161
+                'table_objet' => $table_objet,
162
+                'spip_table_objet' => $spip_table_objet,
163
+                'desc' => $desc,
164
+                'type' => $objet,
165
+                'id_objet' => $id_objet,
166
+                'data' => $options['data'] ?? null,
167
+                'champs' => $options['champs'] ?? [], // [doc] c'est quoi ?
168
+                'champs_anciens' => $row, // état du contenu avant modif
169
+                'serveur' => $serveur,
170
+                'action' => $options['action'] ?? 'modifier'
171
+            ],
172
+            'data' => $champs
173
+        ]
174
+    );
175
+
176
+    if (!$champs) {
177
+        return false;
178
+    }
179
+
180
+
181
+    // marquer le fait que l'objet est travaille par toto a telle date
182
+    include_spip('inc/config');
183
+    if (lire_config('articles_modif', 'non') !== 'non') {
184
+        include_spip('inc/drapeau_edition');
185
+        signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet);
186
+    }
187
+
188
+    // Verifier si les mises a jour sont pertinentes, datees, en conflit etc
189
+    include_spip('inc/editer');
190
+    if (!isset($options['data']) or is_null($options['data'])) {
191
+        $options['data'] = &$_POST;
192
+    }
193
+    $conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur);
194
+    // cas hypothetique : normalement inc/editer verifie en amont le conflit edition
195
+    // et gere l'interface
196
+    // ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme
197
+    if ($conflits) {
198
+        return _T('titre_conflit_edition');
199
+    }
200
+
201
+    if ($champs) {
202
+        // cas particulier de la langue : passer par instituer_langue_objet
203
+        if (isset($champs['lang'])) {
204
+            if ($changer_lang = $champs['lang']) {
205
+                $id_rubrique = 0;
206
+                if (isset($desc['field']['id_rubrique'])) {
207
+                    $parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique';
208
+                    $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet));
209
+                }
210
+                $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
211
+                $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur);
212
+            }
213
+            // on laisse 'lang' dans $champs,
214
+            // ca permet de passer dans le pipeline post_edition et de journaliser
215
+            // et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir
216
+            // deja pris en compte
217
+        }
218
+
219
+        // la modif peut avoir lieu
220
+
221
+        // faut-il ajouter date_modif ?
222
+        if (
223
+            !empty($options['date_modif'])
224
+            and !isset($champs[$options['date_modif']])
225
+        ) {
226
+            $champs[$options['date_modif']] = date('Y-m-d H:i:s');
227
+        }
228
+
229
+        // allez on commit la modif
230
+        sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), [], $serveur);
231
+
232
+        // on verifie si elle est bien passee
233
+        $moof = sql_fetsel(
234
+            array_keys($champs),
235
+            $spip_table_objet,
236
+            "$id_table_objet=" . intval($id_objet),
237
+            [],
238
+            [],
239
+            '',
240
+            [],
241
+            $serveur
242
+        );
243
+        // si difference entre les champs, reperer les champs mal enregistres
244
+        if ($moof != $champs) {
245
+            $liste = [];
246
+            foreach ($moof as $k => $v) {
247
+                if (
248
+                    $v !== $champs[$k]
249
+                    // ne pas alerter si le champ est numerique est que les valeurs sont equivalentes
250
+                    and (!is_numeric($v) or intval($v) !== intval($champs[$k]))
251
+                    // ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle
252
+                    and (strlen($champs[$k]) or !in_array($v, ['0000-00-00 00:00:00', '0000-00-00']))
253
+                ) {
254
+                    $liste[] = $k;
255
+                    $conflits[$k]['post'] = $champs[$k];
256
+                    $conflits[$k]['save'] = $v;
257
+
258
+                    // cas specifique MySQL+emoji : si l'un est la
259
+                    // conversion utf8_noplanes de l'autre alors c'est OK
260
+                    if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) {
261
+                        include_spip('inc/charsets');
262
+                        if ($v == utf8_noplanes($champs[$k])) {
263
+                            array_pop($liste);
264
+                        }
265
+                    }
266
+                }
267
+            }
268
+            // si un champ n'a pas ete correctement enregistre, loger et retourner une erreur
269
+            // c'est un cas exceptionnel
270
+            if (count($liste)) {
271
+                spip_log(
272
+                    "Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true),
273
+                    'modifier.' . _LOG_CRITIQUE
274
+                );
275
+
276
+                return _T(
277
+                    'erreur_technique_enregistrement_champs',
278
+                    ['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"]
279
+                );
280
+            }
281
+        }
282
+
283
+        // Invalider les caches
284
+        if (isset($options['invalideur']) and $options['invalideur']) {
285
+            include_spip('inc/invalideur');
286
+            if (is_array($options['invalideur'])) {
287
+                array_map('suivre_invalideur', $options['invalideur']);
288
+            } else {
289
+                suivre_invalideur($options['invalideur']);
290
+            }
291
+        }
292
+
293
+        // Notifications, gestion des revisions...
294
+        // en standard, appelle |nouvelle_revision ci-dessous
295
+        pipeline(
296
+            'post_edition',
297
+            [
298
+                'args' => [
299
+                    'table' => $spip_table_objet,
300
+                    'table_objet' => $table_objet,
301
+                    'spip_table_objet' => $spip_table_objet,
302
+                    'desc' => $desc,
303
+                    'type' => $objet,
304
+                    'id_objet' => $id_objet,
305
+                    'champs' => $options['champs'] ?? [], // [doc] kesako ?
306
+                    'champs_anciens' => $row, // état du contenu avant modif
307
+                    'serveur' => $serveur,
308
+                    'action' => $options['action'] ?? 'modifier'
309
+                ],
310
+                'data' => $champs
311
+            ]
312
+        );
313
+    }
314 314
 	
315
-	// Appeler une notification
316
-	if ($notifications = charger_fonction('notifications', 'inc')) {
317
-		$notifications(
318
-			"{$objet}_modifier",
319
-			$id_objet,
320
-			[
321
-				'champs' => $champs,
322
-			]
323
-		);
324
-		$notifications(
325
-			'objet_modifier',
326
-			$id_objet,
327
-			[
328
-				'objet' => $objet,
329
-				'id_objet' => $id_objet,
330
-				'champs' => $champs,
331
-			]
332
-		);
333
-	}
334
-
335
-	// journaliser l'affaire
336
-	// message a affiner :-)
337
-	include_spip('inc/filtres_mini');
338
-	$qui = '';
339
-	if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
340
-		$qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#';
341
-	}
342
-	if (!empty($GLOBALS['visiteur_session']['nom'])) {
343
-		$qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#';
344
-	}
345
-	if ($qui == '') {
346
-		$qui = '#ip:' . $GLOBALS['ip'] . '#';
347
-	}
348
-	journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join(
349
-		'+',
350
-		array_diff(array_keys($champs), ['date_modif'])
351
-	) . ')'), [
352
-		'faire' => 'modifier',
353
-		'quoi' => $objet,
354
-		'id' => $id_objet
355
-	]);
356
-
357
-	return '';
315
+    // Appeler une notification
316
+    if ($notifications = charger_fonction('notifications', 'inc')) {
317
+        $notifications(
318
+            "{$objet}_modifier",
319
+            $id_objet,
320
+            [
321
+                'champs' => $champs,
322
+            ]
323
+        );
324
+        $notifications(
325
+            'objet_modifier',
326
+            $id_objet,
327
+            [
328
+                'objet' => $objet,
329
+                'id_objet' => $id_objet,
330
+                'champs' => $champs,
331
+            ]
332
+        );
333
+    }
334
+
335
+    // journaliser l'affaire
336
+    // message a affiner :-)
337
+    include_spip('inc/filtres_mini');
338
+    $qui = '';
339
+    if (!empty($GLOBALS['visiteur_session']['id_auteur'])) {
340
+        $qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#';
341
+    }
342
+    if (!empty($GLOBALS['visiteur_session']['nom'])) {
343
+        $qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#';
344
+    }
345
+    if ($qui == '') {
346
+        $qui = '#ip:' . $GLOBALS['ip'] . '#';
347
+    }
348
+    journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join(
349
+        '+',
350
+        array_diff(array_keys($champs), ['date_modif'])
351
+    ) . ')'), [
352
+        'faire' => 'modifier',
353
+        'quoi' => $objet,
354
+        'id' => $id_objet
355
+    ]);
356
+
357
+    return '';
358 358
 }
Please login to merge, or discard this patch.
ecrire/lang/spip_fr_tu.php 1 patch
Indentation   +673 added lines, -673 removed lines patch added patch discarded remove patch
@@ -4,248 +4,248 @@  discard block
 block discarded – undo
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
 block discarded – undo
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,150 +604,150 @@  discard block
 block discarded – undo
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_go_bi' => '@taille@ Gio',
637
-	'taille_ko' => '@taille@ ko',
638
-	'taille_ko_bi' => '@taille@ kio',
639
-	'taille_mo' => '@taille@ Mo',
640
-	'taille_mo_bi' => '@taille@ Mio',
641
-	'taille_octets' => '@taille@ octets',
642
-	'taille_octets_bi' => '@taille@ octets',
643
-	'texte_actualite_site_1' => 'Quand tu seras familiarisé(e) avec l’interface, tu pourras cliquer sur « ',
644
-	'texte_actualite_site_2' => 'interface complète',
645
-	'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.',
646
-	'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.',
647
-	'texte_documents_associes' => 'Les documents suivants sont associés à l’article,
634
+    // T
635
+    'taille_go' => '@taille@ Go',
636
+    'taille_go_bi' => '@taille@ Gio',
637
+    'taille_ko' => '@taille@ ko',
638
+    'taille_ko_bi' => '@taille@ kio',
639
+    'taille_mo' => '@taille@ Mo',
640
+    'taille_mo_bi' => '@taille@ Mio',
641
+    'taille_octets' => '@taille@ octets',
642
+    'taille_octets_bi' => '@taille@ octets',
643
+    'texte_actualite_site_1' => 'Quand tu seras familiarisé(e) avec l’interface, tu pourras cliquer sur « ',
644
+    'texte_actualite_site_2' => 'interface complète',
645
+    'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.',
646
+    '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.',
647
+    'texte_documents_associes' => 'Les documents suivants sont associés à l’article,
648 648
 				mais ils n’y ont pas été directement
649 649
 				insérés. Selon la mise en page du site public,
650 650
 				ils pourront apparaître sous forme de documents joints.',
651
-	'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau.
651
+    'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau.
652 652
   L’image <b>@fichier@</b> n’est pas passée (article @id_article@).
653 653
   Note bien cette référence, réessaye la mise à
654 654
   niveau, et enfin vérifie que les images apparaissent
655 655
   toujours dans les articles.',
656
-	'texte_erreur_visiteur' => 'Tu as tenté d’accéder à l’espace privé avec un login qui ne le permet pas.',
657
-	'texte_inc_auth_1' => 'Tu es identifié sous le
656
+    'texte_erreur_visiteur' => 'Tu as tenté d’accéder à l’espace privé avec un login qui ne le permet pas.',
657
+    'texte_inc_auth_1' => 'Tu es identifié sous le
658 658
   login <b>@auth_login@</b>, mais celui-ci n’existe pas/plus dans la base.
659 659
   Essaye de te',
660
-	'texte_inc_auth_2' => 'reconnecter',
661
-	'texte_inc_auth_3' => ', après avoir éventuellement quitté puis
660
+    'texte_inc_auth_2' => 'reconnecter',
661
+    'texte_inc_auth_3' => ', après avoir éventuellement quitté puis
662 662
 		redémarré ton navigateur.',
663
-	'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le
663
+    'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le
664 664
  fonctionnement de ton site. Nous te recommandons de ne pas y intervenir tant que tu n’es pas
665 665
  familier du fonctionnement du système SPIP. <br /><br /><b>Plus
666 666
  généralement, il est fortement conseillé
667 667
  de laisser la charge de ces pages au webmestre principal de ton site.</b>',
668
-	'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,',
669
-	'texte_inc_meta_2' => 'vérifie les droits d’ecriture',
670
-	'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.',
671
-	'texte_statut_en_cours_redaction' => 'en cours de rédaction',
672
-	'texte_statut_poubelle' => 'à la poubelle',
673
-	'texte_statut_propose_evaluation' => 'proposé à l’évaluation',
674
-	'texte_statut_publie' => 'publié en ligne',
675
-	'texte_statut_refuse' => 'refusé',
676
-	'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :',
677
-	'titre_cadre_raccourcis' => 'RACCOURCIS :',
678
-	'titre_changer_couleur_interface' => 'Changer la couleur de l’interface',
679
-	'titre_image_admin_article' => 'Tu peux administrer cet article',
680
-	'titre_image_administrateur' => 'Administrateur',
681
-	'titre_image_aide' => 'De l’aide sur cet élément',
682
-	'titre_image_auteur_supprime' => 'Auteur supprimé',
683
-	'titre_image_redacteur' => 'Rédacteur sans accès',
684
-	'titre_image_redacteur_02' => 'Rédacteur',
685
-	'titre_image_selecteur' => 'Afficher la liste',
686
-	'titre_image_visiteur' => 'Visiteur',
687
-	'titre_joindre_document' => 'JOINDRE UN DOCUMENT',
688
-	'titre_mots_cles' => 'MOTS-CLÉS',
689
-	'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de ta compréhension.',
690
-	'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE',
691
-	'titre_signatures_attente' => 'Signatures en attente de validation',
692
-	'titre_signatures_confirmees' => 'Signatures confirmées',
693
-	'titre_statistiques' => 'Statistiques du site',
694
-	'titre_titre_document' => 'Titre du document :',
695
-	'todo' => 'à venir',
696
-	'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions',
697
-	'trad_reference' => '(référence des traductions)',
668
+    '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,',
669
+    'texte_inc_meta_2' => 'vérifie les droits d’ecriture',
670
+    'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.',
671
+    'texte_statut_en_cours_redaction' => 'en cours de rédaction',
672
+    'texte_statut_poubelle' => 'à la poubelle',
673
+    'texte_statut_propose_evaluation' => 'proposé à l’évaluation',
674
+    'texte_statut_publie' => 'publié en ligne',
675
+    'texte_statut_refuse' => 'refusé',
676
+    'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :',
677
+    'titre_cadre_raccourcis' => 'RACCOURCIS :',
678
+    'titre_changer_couleur_interface' => 'Changer la couleur de l’interface',
679
+    'titre_image_admin_article' => 'Tu peux administrer cet article',
680
+    'titre_image_administrateur' => 'Administrateur',
681
+    'titre_image_aide' => 'De l’aide sur cet élément',
682
+    'titre_image_auteur_supprime' => 'Auteur supprimé',
683
+    'titre_image_redacteur' => 'Rédacteur sans accès',
684
+    'titre_image_redacteur_02' => 'Rédacteur',
685
+    'titre_image_selecteur' => 'Afficher la liste',
686
+    'titre_image_visiteur' => 'Visiteur',
687
+    'titre_joindre_document' => 'JOINDRE UN DOCUMENT',
688
+    'titre_mots_cles' => 'MOTS-CLÉS',
689
+    'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de ta compréhension.',
690
+    'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE',
691
+    'titre_signatures_attente' => 'Signatures en attente de validation',
692
+    'titre_signatures_confirmees' => 'Signatures confirmées',
693
+    'titre_statistiques' => 'Statistiques du site',
694
+    'titre_titre_document' => 'Titre du document :',
695
+    'todo' => 'à venir',
696
+    'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions',
697
+    'trad_reference' => '(référence des traductions)',
698 698
 
699
-	// U
700
-	'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.',
699
+    // U
700
+    'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.',
701 701
 
702
-	// Z
703
-	'zbug_balise_b_aval' => ' : balise B en aval',
704
-	'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@',
705
-	'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@',
706
-	'zbug_boucle' => 'boucle',
707
-	'zbug_boucle_recursive_undef' => 'boucle récursive non définie',
708
-	'zbug_calcul' => 'calcul',
709
-	'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle',
710
-	'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@',
711
-	'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@',
712
-	'zbug_code' => 'code',
713
-	'zbug_critere_inconnu' => 'critère inconnu @critere@',
714
-	'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique',
715
-	'zbug_distant_interdit' => 'externe interdit',
716
-	'zbug_doublon_table_sans_cle_primaire' => 'doublons sur une table sans clef primaire atomique',
717
-	'zbug_doublon_table_sans_index' => 'doublons sur une table sans index',
718
-	'zbug_erreur_boucle_double' => 'BOUCLE@id@ : double définition',
719
-	'zbug_erreur_boucle_fermant' => 'BOUCLE@id@ : tag fermant manquant',
720
-	'zbug_erreur_boucle_syntaxe' => 'Syntaxe boucle incorrecte',
721
-	'zbug_erreur_compilation' => 'Erreur de compilation',
722
-	'zbug_erreur_execution_page' => 'erreur d’exécution de la page',
723
-	'zbug_erreur_filtre' => 'Erreur : filtre <b>« @filtre@ »</b> non défini',
724
-	'zbug_erreur_filtre_nbarg_min' => 'Filtre @filtre@ : il manque @nb@ argument(s)',
725
-	'zbug_erreur_meme_parent' => '{meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)',
726
-	'zbug_erreur_squelette' => 'Erreur(s) dans le squelette',
727
-	'zbug_hors_compilation' => 'Hors Compilation',
728
-	'zbug_info_erreur_squelette' => 'Erreur sur le site',
729
-	'zbug_inversion_ordre_inexistant' => 'inversion d’un ordre inexistant',
730
-	'zbug_pagination_sans_critere' => '#PAGINATION sans critère {pagination} ou employé dans une boucle récursive',
731
-	'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@',
732
-	'zbug_profile' => 'Temps de calcul : @time@',
733
-	'zbug_resultat' => 'résultat',
734
-	'zbug_serveur_indefini' => 'serveur SQL indéfini',
735
-	'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée',
736
-	'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue',
737
-	'zxml_connus_attributs' => 'attributs connus',
738
-	'zxml_de' => 'de',
739
-	'zxml_inconnu_attribut' => 'attribut inconnu',
740
-	'zxml_inconnu_balise' => 'balise inconnue',
741
-	'zxml_inconnu_entite' => 'entité inconnue',
742
-	'zxml_inconnu_id' => 'ID inconnu',
743
-	'zxml_mais_de' => 'mais de',
744
-	'zxml_non_conforme' => 'n’est pas conforme au motif',
745
-	'zxml_non_fils' => 'n’est pas un fils de',
746
-	'zxml_nonvide_balise' => 'balise non vide',
747
-	'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans',
748
-	'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte',
749
-	'zxml_survoler' => 'survoler pour voir les corrects',
750
-	'zxml_valeur_attribut' => 'valeur de l’attribut',
751
-	'zxml_vide_balise' => 'balise vide',
752
-	'zxml_vu' => 'vu auparavant'
702
+    // Z
703
+    'zbug_balise_b_aval' => ' : balise B en aval',
704
+    'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@',
705
+    'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@',
706
+    'zbug_boucle' => 'boucle',
707
+    'zbug_boucle_recursive_undef' => 'boucle récursive non définie',
708
+    'zbug_calcul' => 'calcul',
709
+    'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle',
710
+    'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@',
711
+    'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@',
712
+    'zbug_code' => 'code',
713
+    'zbug_critere_inconnu' => 'critère inconnu @critere@',
714
+    'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique',
715
+    'zbug_distant_interdit' => 'externe interdit',
716
+    'zbug_doublon_table_sans_cle_primaire' => 'doublons sur une table sans clef primaire atomique',
717
+    'zbug_doublon_table_sans_index' => 'doublons sur une table sans index',
718
+    'zbug_erreur_boucle_double' => 'BOUCLE@id@ : double définition',
719
+    'zbug_erreur_boucle_fermant' => 'BOUCLE@id@ : tag fermant manquant',
720
+    'zbug_erreur_boucle_syntaxe' => 'Syntaxe boucle incorrecte',
721
+    'zbug_erreur_compilation' => 'Erreur de compilation',
722
+    'zbug_erreur_execution_page' => 'erreur d’exécution de la page',
723
+    'zbug_erreur_filtre' => 'Erreur : filtre <b>« @filtre@ »</b> non défini',
724
+    'zbug_erreur_filtre_nbarg_min' => 'Filtre @filtre@ : il manque @nb@ argument(s)',
725
+    'zbug_erreur_meme_parent' => '{meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)',
726
+    'zbug_erreur_squelette' => 'Erreur(s) dans le squelette',
727
+    'zbug_hors_compilation' => 'Hors Compilation',
728
+    'zbug_info_erreur_squelette' => 'Erreur sur le site',
729
+    'zbug_inversion_ordre_inexistant' => 'inversion d’un ordre inexistant',
730
+    'zbug_pagination_sans_critere' => '#PAGINATION sans critère {pagination} ou employé dans une boucle récursive',
731
+    'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@',
732
+    'zbug_profile' => 'Temps de calcul : @time@',
733
+    'zbug_resultat' => 'résultat',
734
+    'zbug_serveur_indefini' => 'serveur SQL indéfini',
735
+    'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée',
736
+    'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue',
737
+    'zxml_connus_attributs' => 'attributs connus',
738
+    'zxml_de' => 'de',
739
+    'zxml_inconnu_attribut' => 'attribut inconnu',
740
+    'zxml_inconnu_balise' => 'balise inconnue',
741
+    'zxml_inconnu_entite' => 'entité inconnue',
742
+    'zxml_inconnu_id' => 'ID inconnu',
743
+    'zxml_mais_de' => 'mais de',
744
+    'zxml_non_conforme' => 'n’est pas conforme au motif',
745
+    'zxml_non_fils' => 'n’est pas un fils de',
746
+    'zxml_nonvide_balise' => 'balise non vide',
747
+    'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans',
748
+    'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte',
749
+    'zxml_survoler' => 'survoler pour voir les corrects',
750
+    'zxml_valeur_attribut' => 'valeur de l’attribut',
751
+    'zxml_vide_balise' => 'balise vide',
752
+    'zxml_vu' => 'vu auparavant'
753 753
 );
Please login to merge, or discard this patch.
ecrire/inc/documents.php 1 patch
Indentation   +227 added lines, -227 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -30,12 +30,12 @@  discard block
 block discarded – undo
30 30
  * @return string
31 31
  */
32 32
 function set_spip_doc(?string $fichier): string {
33
-	if ($fichier and strpos($fichier, (string) _DIR_IMG) === 0) {
34
-		return substr($fichier, strlen(_DIR_IMG));
35
-	} else {
36
-		// ex: fichier distant
37
-		return $fichier ?? '';
38
-	}
33
+    if ($fichier and strpos($fichier, (string) _DIR_IMG) === 0) {
34
+        return substr($fichier, strlen(_DIR_IMG));
35
+    } else {
36
+        // ex: fichier distant
37
+        return $fichier ?? '';
38
+    }
39 39
 }
40 40
 
41 41
 /**
@@ -47,26 +47,26 @@  discard block
 block discarded – undo
47 47
  * @return bool|string
48 48
  */
49 49
 function get_spip_doc(?string $fichier) {
50
-	if ($fichier === null) {
51
-		return false;
52
-	}
53
-
54
-	// fichier distant
55
-	if (tester_url_absolue($fichier)) {
56
-		return $fichier;
57
-	}
58
-
59
-	// gestion d'erreurs, fichier=''
60
-	if (!strlen($fichier)) {
61
-		return false;
62
-	}
63
-
64
-	if (strncmp($fichier, _DIR_IMG, strlen(_DIR_IMG)) !== 0) {
65
-		$fichier = _DIR_IMG . $fichier;
66
-	}
67
-
68
-	// fichier normal
69
-	return $fichier;
50
+    if ($fichier === null) {
51
+        return false;
52
+    }
53
+
54
+    // fichier distant
55
+    if (tester_url_absolue($fichier)) {
56
+        return $fichier;
57
+    }
58
+
59
+    // gestion d'erreurs, fichier=''
60
+    if (!strlen($fichier)) {
61
+        return false;
62
+    }
63
+
64
+    if (strncmp($fichier, _DIR_IMG, strlen(_DIR_IMG)) !== 0) {
65
+        $fichier = _DIR_IMG . $fichier;
66
+    }
67
+
68
+    // fichier normal
69
+    return $fichier;
70 70
 }
71 71
 
72 72
 /**
@@ -80,26 +80,26 @@  discard block
 block discarded – undo
80 80
  * @return string
81 81
  */
82 82
 function creer_repertoire_documents($ext) {
83
-	$rep = sous_repertoire(_DIR_IMG, $ext);
84
-
85
-	if (!$ext or !$rep) {
86
-		spip_log("creer_repertoire_documents '$rep' interdit");
87
-		exit;
88
-	}
89
-
90
-	// Cette variable de configuration peut etre posee par un plugin
91
-	// par exemple acces_restreint
92
-	// sauf pour logo/ utilise pour stocker les logoon et logooff
93
-	if (
94
-		isset($GLOBALS['meta']['creer_htaccess'])
95
-		and $GLOBALS['meta']['creer_htaccess'] == 'oui'
96
-		and $ext !== 'logo'
97
-	) {
98
-		include_spip('inc/acces');
99
-		verifier_htaccess($rep);
100
-	}
101
-
102
-	return $rep;
83
+    $rep = sous_repertoire(_DIR_IMG, $ext);
84
+
85
+    if (!$ext or !$rep) {
86
+        spip_log("creer_repertoire_documents '$rep' interdit");
87
+        exit;
88
+    }
89
+
90
+    // Cette variable de configuration peut etre posee par un plugin
91
+    // par exemple acces_restreint
92
+    // sauf pour logo/ utilise pour stocker les logoon et logooff
93
+    if (
94
+        isset($GLOBALS['meta']['creer_htaccess'])
95
+        and $GLOBALS['meta']['creer_htaccess'] == 'oui'
96
+        and $ext !== 'logo'
97
+    ) {
98
+        include_spip('inc/acces');
99
+        verifier_htaccess($rep);
100
+    }
101
+
102
+    return $rep;
103 103
 }
104 104
 
105 105
 /**
@@ -108,22 +108,22 @@  discard block
 block discarded – undo
108 108
  * @param string $nom
109 109
  */
110 110
 function effacer_repertoire_temporaire($nom) {
111
-	if ($d = opendir($nom)) {
112
-		while (($f = readdir($d)) !== false) {
113
-			if (is_file("$nom/$f")) {
114
-				spip_unlink("$nom/$f");
115
-			} else {
116
-				if (
117
-					$f <> '.' and $f <> '..'
118
-					and is_dir("$nom/$f")
119
-				) {
120
-					effacer_repertoire_temporaire("$nom/$f");
121
-				}
122
-			}
123
-		}
124
-	}
125
-	closedir($d);
126
-	@rmdir($nom);
111
+    if ($d = opendir($nom)) {
112
+        while (($f = readdir($d)) !== false) {
113
+            if (is_file("$nom/$f")) {
114
+                spip_unlink("$nom/$f");
115
+            } else {
116
+                if (
117
+                    $f <> '.' and $f <> '..'
118
+                    and is_dir("$nom/$f")
119
+                ) {
120
+                    effacer_repertoire_temporaire("$nom/$f");
121
+                }
122
+            }
123
+        }
124
+    }
125
+    closedir($d);
126
+    @rmdir($nom);
127 127
 }
128 128
 
129 129
 //
@@ -140,45 +140,45 @@  discard block
 block discarded – undo
140 140
  */
141 141
 function copier_document($ext, $orig, $source, $subdir = null) {
142 142
 
143
-	$orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
144
-	$dir = creer_repertoire_documents($subdir ?: $ext);
145
-
146
-	$dest = preg_replace('/<[^>]*>/', '', basename($orig));
147
-	$dest = preg_replace('/\.([^.]+)$/', '', $dest);
148
-	$dest = translitteration($dest);
149
-	$dest = preg_replace('/[^.=\w-]+/', '_', $dest);
150
-
151
-	// ne pas accepter de noms de la forme -r90.jpg qui sont reserves
152
-	// pour les images transformees par rotation (action/documenter)
153
-	$dest = preg_replace(',-r(90|180|270)$,', '', $dest);
154
-
155
-	while (preg_match(',\.(\w+)$,', $dest, $m)) {
156
-		if (
157
-			!function_exists('verifier_upload_autorise')
158
-			or !$r = verifier_upload_autorise($dest)
159
-			or (!empty($r['autozip']))
160
-		) {
161
-			$dest = substr($dest, 0, -strlen($m[0])) . '_' . $m[1];
162
-			break;
163
-		}
164
-		else {
165
-			$dest = substr($dest, 0, -strlen($m[0]));
166
-			$ext = $m[1] . '.' . $ext;
167
-		}
168
-	}
169
-
170
-	// Si le document "source" est deja au bon endroit, ne rien faire
171
-	if ($source == ($dir . $dest . '.' . $ext)) {
172
-		return $source;
173
-	}
174
-
175
-	// sinon tourner jusqu'a trouver un numero correct
176
-	$n = 0;
177
-	while (@file_exists($newFile = $dir . $dest . ($n++ ? ('-' . $n) : '') . '.' . $ext)) {
178
-		;
179
-	}
180
-
181
-	return deplacer_fichier_upload($source, $newFile);
143
+    $orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
144
+    $dir = creer_repertoire_documents($subdir ?: $ext);
145
+
146
+    $dest = preg_replace('/<[^>]*>/', '', basename($orig));
147
+    $dest = preg_replace('/\.([^.]+)$/', '', $dest);
148
+    $dest = translitteration($dest);
149
+    $dest = preg_replace('/[^.=\w-]+/', '_', $dest);
150
+
151
+    // ne pas accepter de noms de la forme -r90.jpg qui sont reserves
152
+    // pour les images transformees par rotation (action/documenter)
153
+    $dest = preg_replace(',-r(90|180|270)$,', '', $dest);
154
+
155
+    while (preg_match(',\.(\w+)$,', $dest, $m)) {
156
+        if (
157
+            !function_exists('verifier_upload_autorise')
158
+            or !$r = verifier_upload_autorise($dest)
159
+            or (!empty($r['autozip']))
160
+        ) {
161
+            $dest = substr($dest, 0, -strlen($m[0])) . '_' . $m[1];
162
+            break;
163
+        }
164
+        else {
165
+            $dest = substr($dest, 0, -strlen($m[0]));
166
+            $ext = $m[1] . '.' . $ext;
167
+        }
168
+    }
169
+
170
+    // Si le document "source" est deja au bon endroit, ne rien faire
171
+    if ($source == ($dir . $dest . '.' . $ext)) {
172
+        return $source;
173
+    }
174
+
175
+    // sinon tourner jusqu'a trouver un numero correct
176
+    $n = 0;
177
+    while (@file_exists($newFile = $dir . $dest . ($n++ ? ('-' . $n) : '') . '.' . $ext)) {
178
+        ;
179
+    }
180
+
181
+    return deplacer_fichier_upload($source, $newFile);
182 182
 }
183 183
 
184 184
 /**
@@ -193,28 +193,28 @@  discard block
 block discarded – undo
193 193
  * @return bool|string
194 194
  */
195 195
 function determine_upload($type = '') {
196
-	if (!function_exists('autoriser')) {
197
-		include_spip('inc/autoriser');
198
-	}
199
-
200
-	if (
201
-		!autoriser('chargerftp')
202
-		or $type == 'logos'
203
-	) { # on ne le permet pas pour les logos
204
-	return false;
205
-	}
206
-
207
-	$repertoire = _DIR_TRANSFERT;
208
-	if (!@is_dir($repertoire)) {
209
-		$repertoire = str_replace(_DIR_TMP, '', $repertoire);
210
-		$repertoire = sous_repertoire(_DIR_TMP, $repertoire);
211
-	}
212
-
213
-	if (!$GLOBALS['visiteur_session']['restreint']) {
214
-		return $repertoire;
215
-	} else {
216
-		return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']);
217
-	}
196
+    if (!function_exists('autoriser')) {
197
+        include_spip('inc/autoriser');
198
+    }
199
+
200
+    if (
201
+        !autoriser('chargerftp')
202
+        or $type == 'logos'
203
+    ) { # on ne le permet pas pour les logos
204
+    return false;
205
+    }
206
+
207
+    $repertoire = _DIR_TRANSFERT;
208
+    if (!@is_dir($repertoire)) {
209
+        $repertoire = str_replace(_DIR_TMP, '', $repertoire);
210
+        $repertoire = sous_repertoire(_DIR_TMP, $repertoire);
211
+    }
212
+
213
+    if (!$GLOBALS['visiteur_session']['restreint']) {
214
+        return $repertoire;
215
+    } else {
216
+        return sous_repertoire($repertoire, $GLOBALS['visiteur_session']['login']);
217
+    }
218 218
 }
219 219
 
220 220
 /**
@@ -233,35 +233,35 @@  discard block
 block discarded – undo
233 233
  * @return bool|mixed|string
234 234
  */
235 235
 function deplacer_fichier_upload($source, $dest, $move = false) {
236
-	// Securite
237
-	if (substr($dest, 0, strlen(_DIR_RACINE)) == _DIR_RACINE) {
238
-		$dest = _DIR_RACINE . preg_replace(',\.\.+,', '.', substr($dest, strlen(_DIR_RACINE)));
239
-	} else {
240
-		$dest = preg_replace(',\.\.+,', '.', $dest);
241
-	}
242
-
243
-	if ($move) {
244
-		$ok = @rename($source, $dest);
245
-	} else {
246
-		$ok = @copy($source, $dest);
247
-	}
248
-	if (!$ok) {
249
-		$ok = @move_uploaded_file($source, $dest);
250
-	}
251
-	if ($ok) {
252
-		@chmod($dest, _SPIP_CHMOD & ~0111);
253
-	} else {
254
-		$f = @fopen($dest, 'w');
255
-		if ($f) {
256
-			fclose($f);
257
-		} else {
258
-			include_spip('inc/flock');
259
-			raler_fichier($dest);
260
-		}
261
-		spip_unlink($dest);
262
-	}
263
-
264
-	return $ok ? $dest : false;
236
+    // Securite
237
+    if (substr($dest, 0, strlen(_DIR_RACINE)) == _DIR_RACINE) {
238
+        $dest = _DIR_RACINE . preg_replace(',\.\.+,', '.', substr($dest, strlen(_DIR_RACINE)));
239
+    } else {
240
+        $dest = preg_replace(',\.\.+,', '.', $dest);
241
+    }
242
+
243
+    if ($move) {
244
+        $ok = @rename($source, $dest);
245
+    } else {
246
+        $ok = @copy($source, $dest);
247
+    }
248
+    if (!$ok) {
249
+        $ok = @move_uploaded_file($source, $dest);
250
+    }
251
+    if ($ok) {
252
+        @chmod($dest, _SPIP_CHMOD & ~0111);
253
+    } else {
254
+        $f = @fopen($dest, 'w');
255
+        if ($f) {
256
+            fclose($f);
257
+        } else {
258
+            include_spip('inc/flock');
259
+            raler_fichier($dest);
260
+        }
261
+        spip_unlink($dest);
262
+    }
263
+
264
+    return $ok ? $dest : false;
265 265
 }
266 266
 
267 267
 
@@ -285,60 +285,60 @@  discard block
 block discarded – undo
285 285
  */
286 286
 function check_upload_error($error, $msg = '', $return = false) {
287 287
 
288
-	if (!$error) {
289
-		return false;
290
-	}
291
-
292
-	spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php");
293
-
294
-	switch ($error) {
295
-		case 4: /* UPLOAD_ERR_NO_FILE */
296
-			return true;
297
-
298
-		# on peut affiner les differents messages d'erreur
299
-		case 1: /* UPLOAD_ERR_INI_SIZE */
300
-			$msg = _T(
301
-				'upload_limit',
302
-				['max' => ini_get('upload_max_filesize')]
303
-			);
304
-			break;
305
-		case 2: /* UPLOAD_ERR_FORM_SIZE */
306
-			$msg = _T(
307
-				'upload_limit',
308
-				['max' => ini_get('upload_max_filesize')]
309
-			);
310
-			break;
311
-		case 3: /* UPLOAD_ERR_PARTIAL  */
312
-			$msg = _T(
313
-				'upload_limit',
314
-				['max' => ini_get('upload_max_filesize')]
315
-			);
316
-			break;
317
-
318
-		default: /* autre */
319
-			if (!$msg) {
320
-				$msg = _T('pass_erreur') . ' ' . $error
321
-					. '<br />' . propre('[->http://php.net/manual/fr/features.file-upload.errors.php]');
322
-			}
323
-			break;
324
-	}
325
-
326
-	spip_log("erreur upload $error");
327
-	if ($return) {
328
-		return $msg;
329
-	}
330
-
331
-	if (_request('iframe') == 'iframe') {
332
-		echo "<div class='upload_answer upload_error'>$msg</div>";
333
-		exit;
334
-	}
335
-
336
-	include_spip('inc/minipres');
337
-	echo minipres(
338
-		$msg,
339
-		"<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><a href='" . rawurldecode($GLOBALS['redirect']) . "'><button type='button'>" . _T('ecrire:bouton_suivant') . '</button></a></div>'
340
-	);
341
-	exit;
288
+    if (!$error) {
289
+        return false;
290
+    }
291
+
292
+    spip_log("Erreur upload $error -- cf. http://php.net/manual/fr/features.file-upload.errors.php");
293
+
294
+    switch ($error) {
295
+        case 4: /* UPLOAD_ERR_NO_FILE */
296
+            return true;
297
+
298
+        # on peut affiner les differents messages d'erreur
299
+        case 1: /* UPLOAD_ERR_INI_SIZE */
300
+            $msg = _T(
301
+                'upload_limit',
302
+                ['max' => ini_get('upload_max_filesize')]
303
+            );
304
+            break;
305
+        case 2: /* UPLOAD_ERR_FORM_SIZE */
306
+            $msg = _T(
307
+                'upload_limit',
308
+                ['max' => ini_get('upload_max_filesize')]
309
+            );
310
+            break;
311
+        case 3: /* UPLOAD_ERR_PARTIAL  */
312
+            $msg = _T(
313
+                'upload_limit',
314
+                ['max' => ini_get('upload_max_filesize')]
315
+            );
316
+            break;
317
+
318
+        default: /* autre */
319
+            if (!$msg) {
320
+                $msg = _T('pass_erreur') . ' ' . $error
321
+                    . '<br />' . propre('[->http://php.net/manual/fr/features.file-upload.errors.php]');
322
+            }
323
+            break;
324
+    }
325
+
326
+    spip_log("erreur upload $error");
327
+    if ($return) {
328
+        return $msg;
329
+    }
330
+
331
+    if (_request('iframe') == 'iframe') {
332
+        echo "<div class='upload_answer upload_error'>$msg</div>";
333
+        exit;
334
+    }
335
+
336
+    include_spip('inc/minipres');
337
+    echo minipres(
338
+        $msg,
339
+        "<div style='text-align: " . $GLOBALS['spip_lang_right'] . "'><a href='" . rawurldecode($GLOBALS['redirect']) . "'><button type='button'>" . _T('ecrire:bouton_suivant') . '</button></a></div>'
340
+    );
341
+    exit;
342 342
 }
343 343
 
344 344
 /**
@@ -355,24 +355,24 @@  discard block
 block discarded – undo
355 355
  * @return string
356 356
  */
357 357
 function corriger_extension($ext) {
358
-	$ext = preg_replace(',[^a-z0-9],i', '', $ext);
359
-	switch ($ext) {
360
-		case 'htm':
361
-			$ext = 'html';
362
-			break;
363
-		case 'jpeg':
364
-			$ext = 'jpg';
365
-			break;
366
-		case 'tiff':
367
-			$ext = 'tif';
368
-			break;
369
-		case 'aif':
370
-			$ext = 'aiff';
371
-			break;
372
-		case 'mpeg':
373
-			$ext = 'mpg';
374
-			break;
375
-	}
376
-
377
-	return $ext;
358
+    $ext = preg_replace(',[^a-z0-9],i', '', $ext);
359
+    switch ($ext) {
360
+        case 'htm':
361
+            $ext = 'html';
362
+            break;
363
+        case 'jpeg':
364
+            $ext = 'jpg';
365
+            break;
366
+        case 'tiff':
367
+            $ext = 'tif';
368
+            break;
369
+        case 'aif':
370
+            $ext = 'aiff';
371
+            break;
372
+        case 'mpeg':
373
+            $ext = 'mpg';
374
+            break;
375
+    }
376
+
377
+    return $ext;
378 378
 }
Please login to merge, or discard this patch.
ecrire/genie/optimiser.php 1 patch
Indentation   +111 added lines, -111 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('base/abstract_sql');
@@ -35,26 +35,26 @@  discard block
 block discarded – undo
35 35
  **/
36 36
 function genie_optimiser_dist($t) {
37 37
 
38
-	optimiser_base_une_table();
39
-	optimiser_base();
40
-	optimiser_caches_contextes();
38
+    optimiser_base_une_table();
39
+    optimiser_base();
40
+    optimiser_caches_contextes();
41 41
 
42
-	// la date souhaitee pour le tour suivant = apres-demain a 4h du mat ;
43
-	// sachant qu'on a un delai de 48h, on renvoie aujourd'hui a 4h du mat
44
-	// avec une periode de flou entre 2h et 6h pour ne pas saturer un hebergeur
45
-	// qui aurait beaucoup de sites SPIP
46
-	return -(mktime(2, 0, 0) + random_int(0, 3600 * 4));
42
+    // la date souhaitee pour le tour suivant = apres-demain a 4h du mat ;
43
+    // sachant qu'on a un delai de 48h, on renvoie aujourd'hui a 4h du mat
44
+    // avec une periode de flou entre 2h et 6h pour ne pas saturer un hebergeur
45
+    // qui aurait beaucoup de sites SPIP
46
+    return -(mktime(2, 0, 0) + random_int(0, 3600 * 4));
47 47
 }
48 48
 
49 49
 /**
50 50
  * Vider les contextes ajax de plus de 48h
51 51
  */
52 52
 function optimiser_caches_contextes() {
53
-	sous_repertoire(_DIR_CACHE, 'contextes');
54
-	if (is_dir($d = _DIR_CACHE . 'contextes')) {
55
-		include_spip('inc/invalideur');
56
-		purger_repertoire($d, ['mtime' => time() - 48 * 3600, 'limit' => 10000]);
57
-	}
53
+    sous_repertoire(_DIR_CACHE, 'contextes');
54
+    if (is_dir($d = _DIR_CACHE . 'contextes')) {
55
+        include_spip('inc/invalideur');
56
+        purger_repertoire($d, ['mtime' => time() - 48 * 3600, 'limit' => 10000]);
57
+    }
58 58
 }
59 59
 
60 60
 /**
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
  * @return void
70 70
  **/
71 71
 function optimiser_base($attente = 86400) {
72
-	optimiser_base_disparus($attente);
72
+    optimiser_base_disparus($attente);
73 73
 }
74 74
 
75 75
 
@@ -86,28 +86,28 @@  discard block
 block discarded – undo
86 86
  **/
87 87
 function optimiser_base_une_table() {
88 88
 
89
-	$tables = [];
90
-	$result = sql_showbase();
91
-
92
-	// on n'optimise qu'une seule table a chaque fois,
93
-	// pour ne pas vautrer le systeme
94
-	// lire http://dev.mysql.com/doc/refman/5.0/fr/optimize-table.html
95
-	while ($row = sql_fetch($result)) {
96
-		$tables[] = array_shift($row);
97
-	}
98
-
99
-	spip_log('optimiser_base_une_table ' . json_encode($tables, JSON_THROW_ON_ERROR), 'genie' . _LOG_DEBUG);
100
-	if ($tables) {
101
-		$table_op = intval(lire_config('optimiser_table', 0) + 1) % sizeof($tables);
102
-		ecrire_config('optimiser_table', $table_op);
103
-		$q = $tables[$table_op];
104
-		spip_log("optimiser_base_une_table : debut d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
105
-		if (sql_optimize($q)) {
106
-			spip_log("optimiser_base_une_table : fin d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
107
-		} else {
108
-			spip_log("optimiser_base_une_table : Pas d'optimiseur necessaire", 'genie' . _LOG_DEBUG);
109
-		}
110
-	}
89
+    $tables = [];
90
+    $result = sql_showbase();
91
+
92
+    // on n'optimise qu'une seule table a chaque fois,
93
+    // pour ne pas vautrer le systeme
94
+    // lire http://dev.mysql.com/doc/refman/5.0/fr/optimize-table.html
95
+    while ($row = sql_fetch($result)) {
96
+        $tables[] = array_shift($row);
97
+    }
98
+
99
+    spip_log('optimiser_base_une_table ' . json_encode($tables, JSON_THROW_ON_ERROR), 'genie' . _LOG_DEBUG);
100
+    if ($tables) {
101
+        $table_op = intval(lire_config('optimiser_table', 0) + 1) % sizeof($tables);
102
+        ecrire_config('optimiser_table', $table_op);
103
+        $q = $tables[$table_op];
104
+        spip_log("optimiser_base_une_table : debut d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
105
+        if (sql_optimize($q)) {
106
+            spip_log("optimiser_base_une_table : fin d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
107
+        } else {
108
+            spip_log("optimiser_base_une_table : Pas d'optimiseur necessaire", 'genie' . _LOG_DEBUG);
109
+        }
110
+    }
111 111
 }
112 112
 
113 113
 
@@ -133,18 +133,18 @@  discard block
 block discarded – undo
133 133
  *     Nombre de suppressions
134 134
  **/
135 135
 function optimiser_sansref($table, $id, $sel, $and = '') {
136
-	$in = [];
137
-	while ($row = sql_fetch($sel)) {
138
-		$in[$row['id']] = true;
139
-	}
140
-	sql_free($sel);
141
-
142
-	if ($in) {
143
-		sql_delete($table, sql_in($id, array_keys($in)) . ($and ? " AND $and" : ''));
144
-		spip_log("optimiser_sansref: Numeros des entrees $id supprimees dans la table $table: " . implode(', ', array_keys($in)), 'genie' . _LOG_DEBUG);
145
-	}
146
-
147
-	return count($in);
136
+    $in = [];
137
+    while ($row = sql_fetch($sel)) {
138
+        $in[$row['id']] = true;
139
+    }
140
+    sql_free($sel);
141
+
142
+    if ($in) {
143
+        sql_delete($table, sql_in($id, array_keys($in)) . ($and ? " AND $and" : ''));
144
+        spip_log("optimiser_sansref: Numeros des entrees $id supprimees dans la table $table: " . implode(', ', array_keys($in)), 'genie' . _LOG_DEBUG);
145
+    }
146
+
147
+    return count($in);
148 148
 }
149 149
 
150 150
 
@@ -166,81 +166,81 @@  discard block
 block discarded – undo
166 166
  **/
167 167
 function optimiser_base_disparus($attente = 86400) {
168 168
 
169
-	# format = 20060610110141, si on veut forcer une optimisation tout de suite
170
-	$mydate = date('Y-m-d H:i:s', time() - $attente);
171
-	$mydate_quote = sql_quote($mydate);
169
+    # format = 20060610110141, si on veut forcer une optimisation tout de suite
170
+    $mydate = date('Y-m-d H:i:s', time() - $attente);
171
+    $mydate_quote = sql_quote($mydate);
172 172
 
173
-	$n = 0;
173
+    $n = 0;
174 174
 
175
-	//
176
-	// Rubriques
177
-	//
175
+    //
176
+    // Rubriques
177
+    //
178 178
 
179
-	# les articles qui sont dans une id_rubrique inexistante
180
-	# attention on controle id_rubrique>0 pour ne pas tuer les articles
181
-	# specialement affectes a une rubrique non-existante (plugin,
182
-	# cf. https://core.spip.net/issues/1549 )
183
-	$res = sql_select(
184
-		'A.id_article AS id',
185
-		'spip_articles AS A
179
+    # les articles qui sont dans une id_rubrique inexistante
180
+    # attention on controle id_rubrique>0 pour ne pas tuer les articles
181
+    # specialement affectes a une rubrique non-existante (plugin,
182
+    # cf. https://core.spip.net/issues/1549 )
183
+    $res = sql_select(
184
+        'A.id_article AS id',
185
+        'spip_articles AS A
186 186
 		        LEFT JOIN spip_rubriques AS R
187 187
 		          ON A.id_rubrique=R.id_rubrique',
188
-		"A.id_rubrique > 0
188
+        "A.id_rubrique > 0
189 189
 			 AND R.id_rubrique IS NULL
190 190
 		         AND A.maj < $mydate_quote"
191
-	);
191
+    );
192 192
 
193
-	$n += optimiser_sansref('spip_articles', 'id_article', $res);
193
+    $n += optimiser_sansref('spip_articles', 'id_article', $res);
194 194
 
195
-	// les articles a la poubelle
196
-	sql_delete('spip_articles', "statut='poubelle' AND maj < $mydate_quote");
195
+    // les articles a la poubelle
196
+    sql_delete('spip_articles', "statut='poubelle' AND maj < $mydate_quote");
197 197
 
198
-	//
199
-	// Auteurs
200
-	//
198
+    //
199
+    // Auteurs
200
+    //
201 201
 
202
-	include_spip('action/editer_liens');
203
-	// optimiser les liens de tous les auteurs vers des objets effaces
204
-	// et depuis des auteurs effaces
205
-	$n += objet_optimiser_liens(['auteur' => '*'], '*');
202
+    include_spip('action/editer_liens');
203
+    // optimiser les liens de tous les auteurs vers des objets effaces
204
+    // et depuis des auteurs effaces
205
+    $n += objet_optimiser_liens(['auteur' => '*'], '*');
206 206
 
207
-	# effacer les auteurs poubelle qui ne sont lies a rien
208
-	$res = sql_select(
209
-		'A.id_auteur AS id',
210
-		'spip_auteurs AS A
207
+    # effacer les auteurs poubelle qui ne sont lies a rien
208
+    $res = sql_select(
209
+        'A.id_auteur AS id',
210
+        'spip_auteurs AS A
211 211
 		      	LEFT JOIN spip_auteurs_liens AS L
212 212
 		          ON L.id_auteur=A.id_auteur',
213
-		"L.id_auteur IS NULL
213
+        "L.id_auteur IS NULL
214 214
 		       	AND A.statut='5poubelle' AND A.maj < $mydate_quote"
215
-	);
216
-
217
-	$n += optimiser_sansref('spip_auteurs', 'id_auteur', $res);
218
-
219
-	# supprimer les auteurs 'nouveau' qui n'ont jamais donne suite
220
-	# au mail de confirmation (45 jours pour repondre, ca devrait suffire)
221
-	if (!defined('_AUTEURS_DELAI_REJET_NOUVEAU')) {
222
-		define('_AUTEURS_DELAI_REJET_NOUVEAU', 45 * 24 * 3600);
223
-	}
224
-	sql_delete('spip_auteurs', "statut='nouveau' AND maj < " . sql_quote(date('Y-m-d', time() - intval(_AUTEURS_DELAI_REJET_NOUVEAU))));
225
-
226
-	/**
227
-	 * Permet aux plugins de compléter l'optimisation suite aux éléments disparus
228
-	 *
229
-	 * L'index 'data' est un entier indiquant le nombre d'optimisations
230
-	 * qui ont été réalisées (par exemple le nombre de suppressions faites)
231
-	 * et qui doit être incrémenté par les fonctions
232
-	 * utilisant ce pipeline si elles suppriment des éléments.
233
-	 *
234
-	 * @pipeline_appel optimiser_base_disparus
235
-	 */
236
-	$n = pipeline('optimiser_base_disparus', [
237
-		'args' => [
238
-			'attente' => $attente,
239
-			'date' => $mydate
240
-		],
241
-		'data' => $n
242
-	]);
243
-
244
-
245
-	spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie' . _LOG_DEBUG);
215
+    );
216
+
217
+    $n += optimiser_sansref('spip_auteurs', 'id_auteur', $res);
218
+
219
+    # supprimer les auteurs 'nouveau' qui n'ont jamais donne suite
220
+    # au mail de confirmation (45 jours pour repondre, ca devrait suffire)
221
+    if (!defined('_AUTEURS_DELAI_REJET_NOUVEAU')) {
222
+        define('_AUTEURS_DELAI_REJET_NOUVEAU', 45 * 24 * 3600);
223
+    }
224
+    sql_delete('spip_auteurs', "statut='nouveau' AND maj < " . sql_quote(date('Y-m-d', time() - intval(_AUTEURS_DELAI_REJET_NOUVEAU))));
225
+
226
+    /**
227
+     * Permet aux plugins de compléter l'optimisation suite aux éléments disparus
228
+     *
229
+     * L'index 'data' est un entier indiquant le nombre d'optimisations
230
+     * qui ont été réalisées (par exemple le nombre de suppressions faites)
231
+     * et qui doit être incrémenté par les fonctions
232
+     * utilisant ce pipeline si elles suppriment des éléments.
233
+     *
234
+     * @pipeline_appel optimiser_base_disparus
235
+     */
236
+    $n = pipeline('optimiser_base_disparus', [
237
+        'args' => [
238
+            'attente' => $attente,
239
+            'date' => $mydate
240
+        ],
241
+        'data' => $n
242
+    ]);
243
+
244
+
245
+    spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie' . _LOG_DEBUG);
246 246
 }
Please login to merge, or discard this patch.
prive/formulaires/editer_logo.php 1 patch
Indentation   +161 added lines, -161 removed lines patch added patch discarded remove patch
@@ -30,7 +30,7 @@  discard block
 block discarded – undo
30 30
  **/
31 31
 
32 32
 if (!defined('_ECRIRE_INC_VERSION')) {
33
-	return;
33
+    return;
34 34
 }
35 35
 
36 36
 // utilise pour le logo du site, donc doit rester ici
@@ -48,92 +48,92 @@  discard block
 block discarded – undo
48 48
  * @return array|false Variables d'environnement pour le fond
49 49
  */
50 50
 function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = []) {
51
-	// pas dans une boucle ? formulaire pour le logo du site
52
-	// dans ce cas, il faut chercher un 'siteon0.ext'
53
-	if (!$objet) {
54
-		$objet = 'site';
55
-	}
51
+    // pas dans une boucle ? formulaire pour le logo du site
52
+    // dans ce cas, il faut chercher un 'siteon0.ext'
53
+    if (!$objet) {
54
+        $objet = 'site';
55
+    }
56 56
 
57
-	$objet = objet_type($objet);
58
-	$_id_objet = id_table_objet($objet);
57
+    $objet = objet_type($objet);
58
+    $_id_objet = id_table_objet($objet);
59 59
 
60
-	if (!is_array($options)) {
61
-		$options = unserialize($options);
62
-	}
63
-	$options = spip_sanitize_from_request($options, '*');
60
+    if (!is_array($options)) {
61
+        $options = unserialize($options);
62
+    }
63
+    $options = spip_sanitize_from_request($options, '*');
64 64
 
65
-	if (!isset($options['titre'])) {
66
-		$balise_img = chercher_filtre('balise_img');
67
-		$img = $balise_img(chemin_image('image-24.png'), '', 'cadre-icone');
68
-		$libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']);
69
-		$libelle = (($id_objet or $objet != 'rubrique') ? $objet : 'racine');
70
-		if (isset($libelles[$libelle])) {
71
-			$libelle = $libelles[$libelle];
72
-		} elseif ($libelle = objet_info($objet, 'texte_logo_objet')) {
73
-			$libelle = _T($libelle);
74
-		} else {
75
-			$libelle = _L('Logo');
76
-		}
77
-		switch ($objet) {
78
-			case 'article':
79
-				$libelle .= ' ' . aider('logoart');
80
-				break;
81
-			case 'breve':
82
-				$libelle .= ' ' . aider('breveslogo');
83
-				break;
84
-			case 'rubrique':
85
-				$libelle .= ' ' . aider('rublogo');
86
-				break;
87
-			default:
88
-				break;
89
-		}
65
+    if (!isset($options['titre'])) {
66
+        $balise_img = chercher_filtre('balise_img');
67
+        $img = $balise_img(chemin_image('image-24.png'), '', 'cadre-icone');
68
+        $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']);
69
+        $libelle = (($id_objet or $objet != 'rubrique') ? $objet : 'racine');
70
+        if (isset($libelles[$libelle])) {
71
+            $libelle = $libelles[$libelle];
72
+        } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) {
73
+            $libelle = _T($libelle);
74
+        } else {
75
+            $libelle = _L('Logo');
76
+        }
77
+        switch ($objet) {
78
+            case 'article':
79
+                $libelle .= ' ' . aider('logoart');
80
+                break;
81
+            case 'breve':
82
+                $libelle .= ' ' . aider('breveslogo');
83
+                break;
84
+            case 'rubrique':
85
+                $libelle .= ' ' . aider('rublogo');
86
+                break;
87
+            default:
88
+                break;
89
+        }
90 90
 
91
-		$options['titre'] = $img . $libelle;
92
-	}
93
-	if (!isset($options['editable'])) {
94
-		include_spip('inc/autoriser');
95
-		$options['editable'] = autoriser('iconifier', $objet, $id_objet);
96
-	}
91
+        $options['titre'] = $img . $libelle;
92
+    }
93
+    if (!isset($options['editable'])) {
94
+        include_spip('inc/autoriser');
95
+        $options['editable'] = autoriser('iconifier', $objet, $id_objet);
96
+    }
97 97
 
98
-	$res = [
99
-		'editable' => ($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '') && (!isset($options['editable']) or $options['editable']),
100
-		'logo_survol' => ($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''),
101
-		'objet' => $objet,
102
-		'id_objet' => $id_objet,
103
-		'_options' => $options,
104
-		'_show_upload_off' => '',
105
-	];
98
+    $res = [
99
+        'editable' => ($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '') && (!isset($options['editable']) or $options['editable']),
100
+        'logo_survol' => ($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''),
101
+        'objet' => $objet,
102
+        'id_objet' => $id_objet,
103
+        '_options' => $options,
104
+        '_show_upload_off' => '',
105
+    ];
106 106
 
107
-	// rechercher le logo de l'objet
108
-	// la fonction prend un parametre '_id_objet' etrange :
109
-	// le nom de la cle primaire (et non le nom de la table)
110
-	// ou directement le nom du raccourcis a chercher
111
-	$chercher_logo = charger_fonction('chercher_logo', 'inc');
112
-	$etats = $res['logo_survol'] ? ['on', 'off'] : ['on'];
113
-	foreach ($etats as $etat) {
114
-		$logo = $chercher_logo($id_objet, $_id_objet, $etat);
115
-		if ($logo) {
116
-			$res['logo_' . $etat] = $logo[0];
117
-			$res['logo_id_' . $etat] = $logo[5]['id_document'] ?? '';
118
-		}
119
-	}
120
-	// pas de logo_on -> pas de formulaire pour le survol
121
-	if (!isset($res['logo_on'])) {
122
-		$res['logo_survol'] = '';
123
-	} elseif (!isset($res['logo_off']) and _request('logo_up')) {
124
-		$res['_show_upload_off'] = ' ';
125
-	}
107
+    // rechercher le logo de l'objet
108
+    // la fonction prend un parametre '_id_objet' etrange :
109
+    // le nom de la cle primaire (et non le nom de la table)
110
+    // ou directement le nom du raccourcis a chercher
111
+    $chercher_logo = charger_fonction('chercher_logo', 'inc');
112
+    $etats = $res['logo_survol'] ? ['on', 'off'] : ['on'];
113
+    foreach ($etats as $etat) {
114
+        $logo = $chercher_logo($id_objet, $_id_objet, $etat);
115
+        if ($logo) {
116
+            $res['logo_' . $etat] = $logo[0];
117
+            $res['logo_id_' . $etat] = $logo[5]['id_document'] ?? '';
118
+        }
119
+    }
120
+    // pas de logo_on -> pas de formulaire pour le survol
121
+    if (!isset($res['logo_on'])) {
122
+        $res['logo_survol'] = '';
123
+    } elseif (!isset($res['logo_off']) and _request('logo_up')) {
124
+        $res['_show_upload_off'] = ' ';
125
+    }
126 126
 
127
-	// si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire
128
-	if (
129
-		!$res['editable']
130
-		and !isset($res['logo_off'])
131
-		and !isset($res['logo_on'])
132
-	) {
133
-		return false;
134
-	}
127
+    // si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire
128
+    if (
129
+        !$res['editable']
130
+        and !isset($res['logo_off'])
131
+        and !isset($res['logo_on'])
132
+    ) {
133
+        return false;
134
+    }
135 135
 
136
-	return $res;
136
+    return $res;
137 137
 }
138 138
 
139 139
 /**
@@ -147,7 +147,7 @@  discard block
 block discarded – undo
147 147
  * @return string              Hash du formulaire
148 148
  */
149 149
 function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour = '', $options = []) {
150
-	return serialize([$objet, $id_objet]);
150
+    return serialize([$objet, $id_objet]);
151 151
 }
152 152
 
153 153
 /**
@@ -163,31 +163,31 @@  discard block
 block discarded – undo
163 163
  * @return array               Erreurs du formulaire
164 164
  */
165 165
 function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour = '', $options = []) {
166
-	$erreurs = [];
167
-	// verifier les extensions
168
-	$sources = formulaire_editer_logo_get_sources();
169
-	include_spip('action/editer_logo');
170
-	$extensions_possibles = $GLOBALS['formats_logos'];
171
-	if (in_array('jpg', $extensions_possibles)) {
172
-		$extensions_possibles[] = 'jpeg';
173
-	}
174
-	foreach ($sources as $etat => $file) {
175
-		// seulement si une reception correcte a eu lieu
176
-		if ($file and $file['error'] == 0) {
177
-			if (
178
-				!in_array(
179
-					strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)),
180
-					$extensions_possibles
181
-				)
182
-			) {
183
-				$erreurs['logo_' . $etat] = _L('Extension non reconnue');
184
-			}
185
-		} elseif ($file and $file['error'] != 0 and isset($file['msg'])) {
186
-			$erreurs['message_erreur'] = $file['msg'];
187
-		}
188
-	}
166
+    $erreurs = [];
167
+    // verifier les extensions
168
+    $sources = formulaire_editer_logo_get_sources();
169
+    include_spip('action/editer_logo');
170
+    $extensions_possibles = $GLOBALS['formats_logos'];
171
+    if (in_array('jpg', $extensions_possibles)) {
172
+        $extensions_possibles[] = 'jpeg';
173
+    }
174
+    foreach ($sources as $etat => $file) {
175
+        // seulement si une reception correcte a eu lieu
176
+        if ($file and $file['error'] == 0) {
177
+            if (
178
+                !in_array(
179
+                    strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)),
180
+                    $extensions_possibles
181
+                )
182
+            ) {
183
+                $erreurs['logo_' . $etat] = _L('Extension non reconnue');
184
+            }
185
+        } elseif ($file and $file['error'] != 0 and isset($file['msg'])) {
186
+            $erreurs['message_erreur'] = $file['msg'];
187
+        }
188
+    }
189 189
 
190
-	return $erreurs;
190
+    return $erreurs;
191 191
 }
192 192
 
193 193
 /**
@@ -203,47 +203,47 @@  discard block
 block discarded – undo
203 203
  * @return array               Retour des traitements
204 204
  */
205 205
 function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $options = []) {
206
-	$res = ['editable' => ' '];
206
+    $res = ['editable' => ' '];
207 207
 
208
-	// pas dans une boucle ? formulaire pour le logo du site
209
-	// dans ce cas, il faut chercher un 'siteon0.ext'
210
-	if (!$objet) {
211
-		$objet = 'site';
212
-	}
208
+    // pas dans une boucle ? formulaire pour le logo du site
209
+    // dans ce cas, il faut chercher un 'siteon0.ext'
210
+    if (!$objet) {
211
+        $objet = 'site';
212
+    }
213 213
 
214
-	include_spip('action/editer_logo');
214
+    include_spip('action/editer_logo');
215 215
 
216
-	// effectuer la suppression si demandee d'un logo
217
-	$on = _request('supprimer_logo_on');
218
-	if ($on or _request('supprimer_logo_off')) {
219
-		logo_supprimer($objet, $id_objet, $on ? 'on' : 'off');
220
-		$res['message_ok'] = ''; // pas besoin de message : la validation est visuelle
221
-		set_request('logo_up', ' ');
222
-	} // sinon supprimer ancien logo puis copier le nouveau
223
-	else {
224
-		$sources = formulaire_editer_logo_get_sources();
225
-		foreach ($sources as $etat => $file) {
226
-			if ($file and $file['error'] == 0) {
227
-				if ($err = logo_modifier($objet, $id_objet, $etat, $file)) {
228
-					$res['message_erreur'] = $err;
229
-				} else {
230
-					$res['message_ok'] = '';
231
-				} // pas besoin de message : la validation est visuelle
232
-				set_request('logo_up', ' ');
233
-			}
234
-		}
235
-	}
216
+    // effectuer la suppression si demandee d'un logo
217
+    $on = _request('supprimer_logo_on');
218
+    if ($on or _request('supprimer_logo_off')) {
219
+        logo_supprimer($objet, $id_objet, $on ? 'on' : 'off');
220
+        $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle
221
+        set_request('logo_up', ' ');
222
+    } // sinon supprimer ancien logo puis copier le nouveau
223
+    else {
224
+        $sources = formulaire_editer_logo_get_sources();
225
+        foreach ($sources as $etat => $file) {
226
+            if ($file and $file['error'] == 0) {
227
+                if ($err = logo_modifier($objet, $id_objet, $etat, $file)) {
228
+                    $res['message_erreur'] = $err;
229
+                } else {
230
+                    $res['message_ok'] = '';
231
+                } // pas besoin de message : la validation est visuelle
232
+                set_request('logo_up', ' ');
233
+            }
234
+        }
235
+    }
236 236
 
237
-	// Invalider les caches de l'objet
238
-	include_spip('inc/invalideur');
239
-	suivre_invalideur("id='$objet/$id_objet'");
237
+    // Invalider les caches de l'objet
238
+    include_spip('inc/invalideur');
239
+    suivre_invalideur("id='$objet/$id_objet'");
240 240
 
241 241
 
242
-	if ($retour) {
243
-		$res['redirect'] = $retour;
244
-	}
242
+    if ($retour) {
243
+        $res['redirect'] = $retour;
244
+    }
245 245
 
246
-	return $res;
246
+    return $res;
247 247
 }
248 248
 
249 249
 
@@ -255,29 +255,29 @@  discard block
 block discarded – undo
255 255
  *     Sources des fichiers dans les clés `on` ou `off`
256 256
  */
257 257
 function formulaire_editer_logo_get_sources() {
258
-	if (!$_FILES) {
259
-		$_FILES = $GLOBALS['HTTP_POST_FILES'] ?? [];
260
-	}
261
-	if (!is_array($_FILES)) {
262
-		return [];
263
-	}
258
+    if (!$_FILES) {
259
+        $_FILES = $GLOBALS['HTTP_POST_FILES'] ?? [];
260
+    }
261
+    if (!is_array($_FILES)) {
262
+        return [];
263
+    }
264 264
 
265
-	include_spip('inc/documents');
266
-	$sources = [];
267
-	foreach (['on', 'off'] as $etat) {
268
-		$logo = 'logo_' . $etat;
269
-		if (isset($_FILES[$logo])) {
270
-			if ($_FILES[$logo]['error'] == 0) {
271
-				$sources[$etat] = $_FILES[$logo];
272
-			} elseif ($_FILES[$logo]['error'] != 0) {
273
-				$msg = check_upload_error($_FILES[$logo]['error'], false, true);
274
-				if ($msg and is_string($msg)) {
275
-					$sources[$etat] = $_FILES[$logo];
276
-					$sources[$etat]['msg'] = $msg;
277
-				}
278
-			}
279
-		}
280
-	}
265
+    include_spip('inc/documents');
266
+    $sources = [];
267
+    foreach (['on', 'off'] as $etat) {
268
+        $logo = 'logo_' . $etat;
269
+        if (isset($_FILES[$logo])) {
270
+            if ($_FILES[$logo]['error'] == 0) {
271
+                $sources[$etat] = $_FILES[$logo];
272
+            } elseif ($_FILES[$logo]['error'] != 0) {
273
+                $msg = check_upload_error($_FILES[$logo]['error'], false, true);
274
+                if ($msg and is_string($msg)) {
275
+                    $sources[$etat] = $_FILES[$logo];
276
+                    $sources[$etat]['msg'] = $msg;
277
+                }
278
+            }
279
+        }
280
+    }
281 281
 
282
-	return $sources;
282
+    return $sources;
283 283
 }
Please login to merge, or discard this patch.
ecrire/public/quete.php 1 patch
Indentation   +431 added lines, -431 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
  **/
20 20
 
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	return;
22
+    return;
23 23
 }
24 24
 
25 25
 
@@ -33,16 +33,16 @@  discard block
 block discarded – undo
33 33
  * @return array|bool|null
34 34
  */
35 35
 function quete_virtuel($id_article, $connect) {
36
-	return sql_getfetsel(
37
-		'virtuel',
38
-		'spip_articles',
39
-		['id_article=' . intval($id_article), "statut='publie'"],
40
-		'',
41
-		'',
42
-		'',
43
-		'',
44
-		$connect
45
-	);
36
+    return sql_getfetsel(
37
+        'virtuel',
38
+        'spip_articles',
39
+        ['id_article=' . intval($id_article), "statut='publie'"],
40
+        '',
41
+        '',
42
+        '',
43
+        '',
44
+        $connect
45
+    );
46 46
 }
47 47
 
48 48
 /**
@@ -57,41 +57,41 @@  discard block
 block discarded – undo
57 57
  * @return array
58 58
  */
59 59
 function quete_parent_lang($table, $id, string $connect = '') {
60
-	static $cache_quete = [];
61
-
62
-	if (!isset($cache_quete[$connect][$table][$id])) {
63
-		if (!isset($cache_quete[$connect][$table]['_select'])) {
64
-			$trouver_table = charger_fonction('trouver_table', 'base');
65
-			if (
66
-				!$desc = $trouver_table(
67
-					$table,
68
-					$connect
69
-				) or !isset($desc['field']['id_rubrique'])
70
-			) {
71
-				// pas de parent rubrique, on passe
72
-				$cache_quete[$connect][$table]['_select'] = false;
73
-			} else {
74
-				$select = ($table == 'spip_rubriques' ? 'id_parent' : 'id_rubrique');
75
-				$select .= isset($desc['field']['lang']) ? ', lang' : '';
76
-				$cache_quete[$connect][$table]['_select'] = $select;
77
-				$cache_quete[$connect][$table]['_id'] = id_table_objet(objet_type($table));
78
-			}
79
-		}
80
-		if ($cache_quete[$connect][$table]['_select']) {
81
-			$cache_quete[$connect][$table][$id] = sql_fetsel(
82
-				$cache_quete[$connect][$table]['_select'],
83
-				$table,
84
-				$cache_quete[$connect][$table]['_id'] . '=' . intval($id),
85
-				'',
86
-				'',
87
-				'',
88
-				'',
89
-				$connect
90
-			);
91
-		}
92
-	}
93
-
94
-	return $cache_quete[$connect][$table][$id] ?? null;
60
+    static $cache_quete = [];
61
+
62
+    if (!isset($cache_quete[$connect][$table][$id])) {
63
+        if (!isset($cache_quete[$connect][$table]['_select'])) {
64
+            $trouver_table = charger_fonction('trouver_table', 'base');
65
+            if (
66
+                !$desc = $trouver_table(
67
+                    $table,
68
+                    $connect
69
+                ) or !isset($desc['field']['id_rubrique'])
70
+            ) {
71
+                // pas de parent rubrique, on passe
72
+                $cache_quete[$connect][$table]['_select'] = false;
73
+            } else {
74
+                $select = ($table == 'spip_rubriques' ? 'id_parent' : 'id_rubrique');
75
+                $select .= isset($desc['field']['lang']) ? ', lang' : '';
76
+                $cache_quete[$connect][$table]['_select'] = $select;
77
+                $cache_quete[$connect][$table]['_id'] = id_table_objet(objet_type($table));
78
+            }
79
+        }
80
+        if ($cache_quete[$connect][$table]['_select']) {
81
+            $cache_quete[$connect][$table][$id] = sql_fetsel(
82
+                $cache_quete[$connect][$table]['_select'],
83
+                $table,
84
+                $cache_quete[$connect][$table]['_id'] . '=' . intval($id),
85
+                '',
86
+                '',
87
+                '',
88
+                '',
89
+                $connect
90
+            );
91
+        }
92
+    }
93
+
94
+    return $cache_quete[$connect][$table][$id] ?? null;
95 95
 }
96 96
 
97 97
 
@@ -108,11 +108,11 @@  discard block
 block discarded – undo
108 108
  * @return int
109 109
  */
110 110
 function quete_parent($id_rubrique, string $connect = '') {
111
-	if (!$id_rubrique = intval($id_rubrique)) {
112
-		return 0;
113
-	}
114
-	$id_parent = quete_parent_lang('spip_rubriques', $id_rubrique, $connect);
115
-	return $id_parent ? $id_parent['id_parent'] : 0;
111
+    if (!$id_rubrique = intval($id_rubrique)) {
112
+        return 0;
113
+    }
114
+    $id_parent = quete_parent_lang('spip_rubriques', $id_rubrique, $connect);
115
+    return $id_parent ? $id_parent['id_parent'] : 0;
116 116
 }
117 117
 
118 118
 /**
@@ -128,9 +128,9 @@  discard block
 block discarded – undo
128 128
  * @return int
129 129
  */
130 130
 function quete_rubrique($id_article, $serveur) {
131
-	$id_parent = quete_parent_lang('spip_articles', $id_article, $serveur);
131
+    $id_parent = quete_parent_lang('spip_articles', $id_article, $serveur);
132 132
 
133
-	return $id_parent['id_rubrique'];
133
+    return $id_parent['id_rubrique'];
134 134
 }
135 135
 
136 136
 
@@ -144,13 +144,13 @@  discard block
 block discarded – undo
144 144
  * @return int
145 145
  */
146 146
 function quete_profondeur($id, string $connect = '') {
147
-	$n = 0;
148
-	while ($id) {
149
-		$n++;
150
-		$id = quete_parent($id, $connect);
151
-	}
147
+    $n = 0;
148
+    while ($id) {
149
+        $n++;
150
+        $id = quete_parent($id, $connect);
151
+    }
152 152
 
153
-	return $n;
153
+    return $n;
154 154
 }
155 155
 
156 156
 
@@ -166,15 +166,15 @@  discard block
 block discarded – undo
166 166
  *     Morceau de la requête SQL testant la date
167 167
  */
168 168
 function quete_condition_postdates($champ_date, $serveur = '', $ignore_previsu = false) {
169
-	if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
170
-		return '1=1';
171
-	}
172
-
173
-	return
174
-		(isset($GLOBALS['meta']['date_prochain_postdate'])
175
-			and $GLOBALS['meta']['date_prochain_postdate'] > time())
176
-			? "$champ_date<" . sql_quote(date('Y-m-d H:i:s', $GLOBALS['meta']['date_prochain_postdate']), $serveur)
177
-			: '1=1';
169
+    if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
170
+        return '1=1';
171
+    }
172
+
173
+    return
174
+        (isset($GLOBALS['meta']['date_prochain_postdate'])
175
+            and $GLOBALS['meta']['date_prochain_postdate'] > time())
176
+            ? "$champ_date<" . sql_quote(date('Y-m-d H:i:s', $GLOBALS['meta']['date_prochain_postdate']), $serveur)
177
+            : '1=1';
178 178
 }
179 179
 
180 180
 
@@ -194,101 +194,101 @@  discard block
 block discarded – undo
194 194
  * @return array|string
195 195
  */
196 196
 function quete_condition_statut($mstatut, $previsu, $publie, $serveur = '', $ignore_previsu = false) {
197
-	static $cond = [];
198
-	$key = func_get_args();
199
-	$key = implode('-', $key);
200
-	if (isset($cond[$key])) {
201
-		return $cond[$key];
202
-	}
203
-
204
-	$liste_statuts = $publie;
205
-	if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
206
-		$liste_statuts = $previsu;
207
-	}
208
-	$not = false;
209
-	if (strncmp($liste_statuts, '!', 1) == 0) {
210
-		$not = true;
211
-		$liste_statuts = substr($liste_statuts, 1);
212
-	}
213
-	// '' => ne rien afficher, '!'=> ne rien filtrer
214
-	if (!strlen($liste_statuts)) {
215
-		return $cond[$key] = ($not ? '1=1' : '0=1');
216
-	}
217
-
218
-	$liste_statuts = explode(',', $liste_statuts);
219
-	$where = [];
220
-	foreach ($liste_statuts as $k => $v) {
221
-		// filtrage /auteur pour limiter les objets d'un statut (prepa en general)
222
-		// a ceux de l'auteur identifie
223
-		if (strpos($v, '/') !== false) {
224
-			$v = explode('/', $v);
225
-			$filtre = end($v);
226
-			$v = reset($v);
227
-			$v = preg_replace(',\W,', '', $v);
228
-			if (
229
-				$filtre == 'auteur'
230
-				and (strpos($mstatut, '.') !== false)
231
-				and $objet = explode('.', $mstatut)
232
-				and $id_table = reset($objet)
233
-				and $objet = objet_type($id_table)
234
-			) {
235
-				$w = "$mstatut<>" . sql_quote($v);
236
-
237
-				// retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
238
-				// sinon l’auteur en session
239
-				include_spip('inc/securiser_action');
240
-				if ($desc = decrire_token_previsu()) {
241
-					$id_auteur = $desc['id_auteur'];
242
-				} elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
243
-					$id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
244
-				} else {
245
-					$id_auteur = null;
246
-				}
247
-
248
-				// dans ce cas (admin en general), pas de filtrage sur ce statut
249
-				if (!autoriser('previsualiser' . $v, $objet, '', $id_auteur)) {
250
-					// si pas d'auteur identifie pas de sous-requete car pas d'article qui matche
251
-					if (!$id_auteur) {
252
-						$where[] = $w;
253
-					} else {
254
-						$primary = id_table_objet($objet);
255
-						$where[] = "($w OR $id_table.$primary IN (" . sql_get_select(
256
-							'ssss.id_objet',
257
-							'spip_auteurs_liens AS ssss',
258
-							'ssss.objet=' . sql_quote($objet) . ' AND ssss.id_auteur=' . intval($id_auteur),
259
-							'',
260
-							'',
261
-							'',
262
-							'',
263
-							$serveur
264
-						) . '))';
265
-					}
266
-				}
267
-			} // ignorer ce statut si on ne sait pas comment le filtrer
268
-			else {
269
-				$v = '';
270
-			}
271
-		}
272
-		// securite
273
-		$liste_statuts[$k] = preg_replace(',\W,', '', $v);
274
-	}
275
-	$liste_statuts = array_filter($liste_statuts);
276
-	if (count($liste_statuts) == 1) {
277
-		$where[] = ['=', $mstatut, sql_quote(reset($liste_statuts), $serveur)];
278
-	} else {
279
-		$where[] = sql_in($mstatut, $liste_statuts, $not, $serveur);
280
-	}
281
-
282
-	while (count($where) > 1) {
283
-		$and = ['AND', array_pop($where), array_pop($where)];
284
-		$where[] = $and;
285
-	}
286
-	$cond[$key] = reset($where);
287
-	if ($not) {
288
-		$cond[$key] = ['NOT', $cond[$key]];
289
-	}
290
-
291
-	return $cond[$key];
197
+    static $cond = [];
198
+    $key = func_get_args();
199
+    $key = implode('-', $key);
200
+    if (isset($cond[$key])) {
201
+        return $cond[$key];
202
+    }
203
+
204
+    $liste_statuts = $publie;
205
+    if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
206
+        $liste_statuts = $previsu;
207
+    }
208
+    $not = false;
209
+    if (strncmp($liste_statuts, '!', 1) == 0) {
210
+        $not = true;
211
+        $liste_statuts = substr($liste_statuts, 1);
212
+    }
213
+    // '' => ne rien afficher, '!'=> ne rien filtrer
214
+    if (!strlen($liste_statuts)) {
215
+        return $cond[$key] = ($not ? '1=1' : '0=1');
216
+    }
217
+
218
+    $liste_statuts = explode(',', $liste_statuts);
219
+    $where = [];
220
+    foreach ($liste_statuts as $k => $v) {
221
+        // filtrage /auteur pour limiter les objets d'un statut (prepa en general)
222
+        // a ceux de l'auteur identifie
223
+        if (strpos($v, '/') !== false) {
224
+            $v = explode('/', $v);
225
+            $filtre = end($v);
226
+            $v = reset($v);
227
+            $v = preg_replace(',\W,', '', $v);
228
+            if (
229
+                $filtre == 'auteur'
230
+                and (strpos($mstatut, '.') !== false)
231
+                and $objet = explode('.', $mstatut)
232
+                and $id_table = reset($objet)
233
+                and $objet = objet_type($id_table)
234
+            ) {
235
+                $w = "$mstatut<>" . sql_quote($v);
236
+
237
+                // retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
238
+                // sinon l’auteur en session
239
+                include_spip('inc/securiser_action');
240
+                if ($desc = decrire_token_previsu()) {
241
+                    $id_auteur = $desc['id_auteur'];
242
+                } elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
243
+                    $id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
244
+                } else {
245
+                    $id_auteur = null;
246
+                }
247
+
248
+                // dans ce cas (admin en general), pas de filtrage sur ce statut
249
+                if (!autoriser('previsualiser' . $v, $objet, '', $id_auteur)) {
250
+                    // si pas d'auteur identifie pas de sous-requete car pas d'article qui matche
251
+                    if (!$id_auteur) {
252
+                        $where[] = $w;
253
+                    } else {
254
+                        $primary = id_table_objet($objet);
255
+                        $where[] = "($w OR $id_table.$primary IN (" . sql_get_select(
256
+                            'ssss.id_objet',
257
+                            'spip_auteurs_liens AS ssss',
258
+                            'ssss.objet=' . sql_quote($objet) . ' AND ssss.id_auteur=' . intval($id_auteur),
259
+                            '',
260
+                            '',
261
+                            '',
262
+                            '',
263
+                            $serveur
264
+                        ) . '))';
265
+                    }
266
+                }
267
+            } // ignorer ce statut si on ne sait pas comment le filtrer
268
+            else {
269
+                $v = '';
270
+            }
271
+        }
272
+        // securite
273
+        $liste_statuts[$k] = preg_replace(',\W,', '', $v);
274
+    }
275
+    $liste_statuts = array_filter($liste_statuts);
276
+    if (count($liste_statuts) == 1) {
277
+        $where[] = ['=', $mstatut, sql_quote(reset($liste_statuts), $serveur)];
278
+    } else {
279
+        $where[] = sql_in($mstatut, $liste_statuts, $not, $serveur);
280
+    }
281
+
282
+    while (count($where) > 1) {
283
+        $and = ['AND', array_pop($where), array_pop($where)];
284
+        $where[] = $and;
285
+    }
286
+    $cond[$key] = reset($where);
287
+    if ($not) {
288
+        $cond[$key] = ['NOT', $cond[$key]];
289
+    }
290
+
291
+    return $cond[$key];
292 292
 }
293 293
 
294 294
 /**
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
  * @return array|bool|null
300 300
  */
301 301
 function quete_fichier($id_document, $serveur = '') {
302
-	return sql_getfetsel('fichier', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
302
+    return sql_getfetsel('fichier', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
303 303
 }
304 304
 
305 305
 /**
@@ -310,7 +310,7 @@  discard block
 block discarded – undo
310 310
  * @return array|bool
311 311
  */
312 312
 function quete_document($id_document, $serveur = '') {
313
-	return sql_fetsel('*', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
313
+    return sql_fetsel('*', 'spip_documents', ('id_document=' . intval($id_document)), '', [], '', '', $serveur);
314 314
 }
315 315
 
316 316
 /**
@@ -321,7 +321,7 @@  discard block
 block discarded – undo
321 321
  * @return array|bool|null
322 322
  */
323 323
 function quete_meta($nom, $serveur) {
324
-	return sql_getfetsel('valeur', 'spip_meta', 'nom=' . sql_quote($nom), '', '', '', '', $serveur);
324
+    return sql_getfetsel('valeur', 'spip_meta', 'nom=' . sql_quote($nom), '', '', '', '', $serveur);
325 325
 }
326 326
 
327 327
 /**
@@ -347,72 +347,72 @@  discard block
 block discarded – undo
347 347
  *     Retourne soit un tableau, soit le chemin du fichier.
348 348
  */
349 349
 function quete_logo($cle_objet, $onoff, $id, $id_rubrique, $flag = false) {
350
-	include_spip('base/objets');
351
-	$nom = strtolower($onoff);
352
-
353
-	$cle_objet = id_table_objet($cle_objet);
354
-
355
-	while (1) {
356
-		$objet = objet_type($cle_objet);
357
-
358
-		$on = quete_logo_objet($id, $objet, $nom);
359
-
360
-		if ($on) {
361
-			if ($flag) {
362
-				return $on['fichier'];
363
-			} else {
364
-				$taille = @spip_getimagesize($on['chemin']);
365
-
366
-				// Si on a déjà demandé un survol directement ($onoff = off)
367
-				// ou qu'on a demandé uniquement le normal ($onoff = on)
368
-				// alors on ne cherche pas du tout le survol ici
369
-				if ($onoff != 'ON') {
370
-					$off = '';
371
-				} else {
372
-					// Sinon, c'est qu'on demande normal ET survol à la fois, donc on cherche maintenant le survol
373
-					$off = quete_logo_objet($id, $objet, 'off');
374
-				}
375
-
376
-				// on retourne une url du type IMG/artonXX?timestamp
377
-				// qui permet de distinguer le changement de logo
378
-				// et placer un expire sur le dossier IMG/
379
-				$res = [
380
-					$on['chemin'] . ($on['timestamp'] ? "?{$on['timestamp']}" : ''),
381
-					($off ? $off['chemin'] . ($off['timestamp'] ? "?{$off['timestamp']}" : '') : ''),
382
-					(!$taille ? '' : (' ' . $taille[3]))
383
-				];
384
-				$res['src'] = $res[0];
385
-				$res['logo_on'] = $res[0];
386
-				$res['logo_off'] = $res[1];
387
-				$res['width'] = ($taille ? $taille[0] : '');
388
-				$res['height'] = ($taille ? $taille[1] : '');
389
-				$res['fichier'] = $on['fichier'];
390
-				$res['titre'] = ($on['titre'] ?? '');
391
-				$res['descriptif'] = ($on['descriptif'] ?? '');
392
-				$res['credits'] = ($on['credits'] ?? '');
393
-				$res['alt'] = ($on['alt'] ?? '');
394
-				$res['id'] = ($on['id_document'] ?? 0);
395
-
396
-				return $res;
397
-			}
398
-		} else {
399
-			if (defined('_LOGO_RUBRIQUE_DESACTIVER_HERITAGE')) {
400
-				return '';
401
-			} else {
402
-				if ($id_rubrique) {
403
-					$cle_objet = 'id_rubrique';
404
-					$id = $id_rubrique;
405
-					$id_rubrique = 0;
406
-				} else {
407
-					if ($id and $cle_objet == 'id_rubrique') {
408
-						$id = quete_parent($id);
409
-					} else {
410
-						return '';
411
-					}
412
-				}
413
-			}
414
-		}
415
-	}
350
+    include_spip('base/objets');
351
+    $nom = strtolower($onoff);
352
+
353
+    $cle_objet = id_table_objet($cle_objet);
354
+
355
+    while (1) {
356
+        $objet = objet_type($cle_objet);
357
+
358
+        $on = quete_logo_objet($id, $objet, $nom);
359
+
360
+        if ($on) {
361
+            if ($flag) {
362
+                return $on['fichier'];
363
+            } else {
364
+                $taille = @spip_getimagesize($on['chemin']);
365
+
366
+                // Si on a déjà demandé un survol directement ($onoff = off)
367
+                // ou qu'on a demandé uniquement le normal ($onoff = on)
368
+                // alors on ne cherche pas du tout le survol ici
369
+                if ($onoff != 'ON') {
370
+                    $off = '';
371
+                } else {
372
+                    // Sinon, c'est qu'on demande normal ET survol à la fois, donc on cherche maintenant le survol
373
+                    $off = quete_logo_objet($id, $objet, 'off');
374
+                }
375
+
376
+                // on retourne une url du type IMG/artonXX?timestamp
377
+                // qui permet de distinguer le changement de logo
378
+                // et placer un expire sur le dossier IMG/
379
+                $res = [
380
+                    $on['chemin'] . ($on['timestamp'] ? "?{$on['timestamp']}" : ''),
381
+                    ($off ? $off['chemin'] . ($off['timestamp'] ? "?{$off['timestamp']}" : '') : ''),
382
+                    (!$taille ? '' : (' ' . $taille[3]))
383
+                ];
384
+                $res['src'] = $res[0];
385
+                $res['logo_on'] = $res[0];
386
+                $res['logo_off'] = $res[1];
387
+                $res['width'] = ($taille ? $taille[0] : '');
388
+                $res['height'] = ($taille ? $taille[1] : '');
389
+                $res['fichier'] = $on['fichier'];
390
+                $res['titre'] = ($on['titre'] ?? '');
391
+                $res['descriptif'] = ($on['descriptif'] ?? '');
392
+                $res['credits'] = ($on['credits'] ?? '');
393
+                $res['alt'] = ($on['alt'] ?? '');
394
+                $res['id'] = ($on['id_document'] ?? 0);
395
+
396
+                return $res;
397
+            }
398
+        } else {
399
+            if (defined('_LOGO_RUBRIQUE_DESACTIVER_HERITAGE')) {
400
+                return '';
401
+            } else {
402
+                if ($id_rubrique) {
403
+                    $cle_objet = 'id_rubrique';
404
+                    $id = $id_rubrique;
405
+                    $id_rubrique = 0;
406
+                } else {
407
+                    if ($id and $cle_objet == 'id_rubrique') {
408
+                        $id = quete_parent($id);
409
+                    } else {
410
+                        return '';
411
+                    }
412
+                }
413
+            }
414
+        }
415
+    }
416 416
 }
417 417
 
418 418
 /**
@@ -427,43 +427,43 @@  discard block
 block discarded – undo
427 427
  * @return bool|array
428 428
  **/
429 429
 function quete_logo_objet($id_objet, $objet, $mode) {
430
-	static $chercher_logo;
431
-	if (is_null($chercher_logo)) {
432
-		$chercher_logo = charger_fonction('chercher_logo', 'inc');
433
-	}
434
-	$cle_objet = id_table_objet($objet);
435
-
436
-	// On cherche pas la méthode classique
437
-	$infos_logo = $chercher_logo($id_objet, $cle_objet, $mode);
438
-
439
-	// Si la méthode classique a trouvé quelque chose, on utilise le nouveau format
440
-	if (!empty($infos_logo)) {
441
-		$infos = [
442
-			'chemin' => $infos_logo[0],
443
-			'timestamp' => $infos_logo[4],
444
-			'id_document' => ($infos_logo[5]['id_document'] ?? ''),
445
-		];
446
-		foreach (['fichier', 'titre', 'descriptif', 'credits', 'alt'] as $champ) {
447
-			$infos[$champ] = ($infos_logo[5][$champ] ?? '');
448
-		}
449
-		$infos_logo = $infos;
450
-	}
451
-
452
-	// On passe cette recherche de logo dans un pipeline
453
-	$infos_logo = pipeline(
454
-		'quete_logo_objet',
455
-		[
456
-			'args' => [
457
-				'id_objet' => $id_objet,
458
-				'objet' => $objet,
459
-				'cle_objet' => $cle_objet,
460
-				'mode' => $mode,
461
-			],
462
-			'data' => $infos_logo,
463
-		]
464
-	);
465
-
466
-	return $infos_logo;
430
+    static $chercher_logo;
431
+    if (is_null($chercher_logo)) {
432
+        $chercher_logo = charger_fonction('chercher_logo', 'inc');
433
+    }
434
+    $cle_objet = id_table_objet($objet);
435
+
436
+    // On cherche pas la méthode classique
437
+    $infos_logo = $chercher_logo($id_objet, $cle_objet, $mode);
438
+
439
+    // Si la méthode classique a trouvé quelque chose, on utilise le nouveau format
440
+    if (!empty($infos_logo)) {
441
+        $infos = [
442
+            'chemin' => $infos_logo[0],
443
+            'timestamp' => $infos_logo[4],
444
+            'id_document' => ($infos_logo[5]['id_document'] ?? ''),
445
+        ];
446
+        foreach (['fichier', 'titre', 'descriptif', 'credits', 'alt'] as $champ) {
447
+            $infos[$champ] = ($infos_logo[5][$champ] ?? '');
448
+        }
449
+        $infos_logo = $infos;
450
+    }
451
+
452
+    // On passe cette recherche de logo dans un pipeline
453
+    $infos_logo = pipeline(
454
+        'quete_logo_objet',
455
+        [
456
+            'args' => [
457
+                'id_objet' => $id_objet,
458
+                'objet' => $objet,
459
+                'cle_objet' => $cle_objet,
460
+                'mode' => $mode,
461
+            ],
462
+            'data' => $infos_logo,
463
+        ]
464
+    );
465
+
466
+    return $infos_logo;
467 467
 }
468 468
 
469 469
 /**
@@ -476,25 +476,25 @@  discard block
 block discarded – undo
476 476
  * @return bool|string
477 477
  */
478 478
 function quete_logo_file($row, $connect = null) {
479
-	include_spip('inc/documents');
480
-	$logo = vignette_logo_document($row, $connect);
481
-	if (!$logo) {
482
-		$logo = image_du_document($row, $connect);
483
-	}
484
-	if (!$logo) {
485
-		$f = charger_fonction('vignette', 'inc');
486
-		$logo = $f($row['extension'], false);
487
-	}
488
-	// si c'est une vignette type doc, la renvoyer direct
489
-	if (
490
-		strcmp($logo, _DIR_PLUGINS) == 0
491
-		or strcmp($logo, _DIR_PLUGINS_DIST) == 0
492
-		or strcmp($logo, _DIR_RACINE . 'prive/') == 0
493
-	) {
494
-		return $logo;
495
-	}
496
-
497
-	return get_spip_doc($logo);
479
+    include_spip('inc/documents');
480
+    $logo = vignette_logo_document($row, $connect);
481
+    if (!$logo) {
482
+        $logo = image_du_document($row, $connect);
483
+    }
484
+    if (!$logo) {
485
+        $f = charger_fonction('vignette', 'inc');
486
+        $logo = $f($row['extension'], false);
487
+    }
488
+    // si c'est une vignette type doc, la renvoyer direct
489
+    if (
490
+        strcmp($logo, _DIR_PLUGINS) == 0
491
+        or strcmp($logo, _DIR_PLUGINS_DIST) == 0
492
+        or strcmp($logo, _DIR_RACINE . 'prive/') == 0
493
+    ) {
494
+        return $logo;
495
+    }
496
+
497
+    return get_spip_doc($logo);
498 498
 }
499 499
 
500 500
 /**
@@ -522,20 +522,20 @@  discard block
 block discarded – undo
522 522
  */
523 523
 function quete_logo_document($row, $lien, $align, $mode_logo, $x, $y, string $connect = '') {
524 524
 
525
-	include_spip('inc/documents');
526
-	$logo = '';
527
-	if (!in_array($mode_logo, ['icone', 'apercu'])) {
528
-		$logo = vignette_logo_document($row, $connect);
529
-	}
530
-	// si on veut explicitement la vignette, ne rien renvoyer si il n'y en a pas
531
-	if ($mode_logo == 'vignette' and !$logo) {
532
-		return '';
533
-	}
534
-	if ($mode_logo == 'icone') {
535
-		$row['fichier'] = '';
536
-	}
537
-
538
-	return vignette_automatique($logo, $row, $lien, $x, $y, $align, null, $connect);
525
+    include_spip('inc/documents');
526
+    $logo = '';
527
+    if (!in_array($mode_logo, ['icone', 'apercu'])) {
528
+        $logo = vignette_logo_document($row, $connect);
529
+    }
530
+    // si on veut explicitement la vignette, ne rien renvoyer si il n'y en a pas
531
+    if ($mode_logo == 'vignette' and !$logo) {
532
+        return '';
533
+    }
534
+    if ($mode_logo == 'icone') {
535
+        $row['fichier'] = '';
536
+    }
537
+
538
+    return vignette_automatique($logo, $row, $lien, $x, $y, $align, null, $connect);
539 539
 }
540 540
 
541 541
 /**
@@ -547,26 +547,26 @@  discard block
 block discarded – undo
547 547
  */
548 548
 function quete_html_logo($logo, $align, $lien) {
549 549
 
550
-	if (!is_array($logo)) {
551
-		return '';
552
-	}
553
-
554
-	$contexte = [];
555
-	foreach ($logo as $k => $v) {
556
-		if (!is_numeric($k)) {
557
-			$contexte[$k] = $v;
558
-		}
559
-	}
560
-
561
-	foreach (['titre', 'descriptif', 'credits', 'alt'] as $champ) {
562
-		if (!empty($contexte[$champ])) {
563
-			$contexte[$champ] = appliquer_traitement_champ($contexte[$champ] , $champ, 'document');
564
-		}
565
-	}
566
-
567
-	$contexte['align'] = $align;
568
-	$contexte['lien'] = $lien;
569
-	return recuperer_fond('modeles/logo', $contexte);
550
+    if (!is_array($logo)) {
551
+        return '';
552
+    }
553
+
554
+    $contexte = [];
555
+    foreach ($logo as $k => $v) {
556
+        if (!is_numeric($k)) {
557
+            $contexte[$k] = $v;
558
+        }
559
+    }
560
+
561
+    foreach (['titre', 'descriptif', 'credits', 'alt'] as $champ) {
562
+        if (!empty($contexte[$champ])) {
563
+            $contexte[$champ] = appliquer_traitement_champ($contexte[$champ] , $champ, 'document');
564
+        }
565
+    }
566
+
567
+    $contexte['align'] = $align;
568
+    $contexte['lien'] = $lien;
569
+    return recuperer_fond('modeles/logo', $contexte);
570 570
 }
571 571
 
572 572
 /**
@@ -580,14 +580,14 @@  discard block
 block discarded – undo
580 580
  * @return string|false
581 581
  */
582 582
 function document_spip_externe($fichier, $connect) {
583
-	if ($connect) {
584
-		$site = quete_meta('adresse_site', $connect);
585
-		if ($site) {
586
-			$dir = quete_meta('dir_img', $connect);
587
-			return "$site/$dir$fichier";
588
-		}
589
-	}
590
-	return false;
583
+    if ($connect) {
584
+        $site = quete_meta('adresse_site', $connect);
585
+        if ($site) {
586
+            $dir = quete_meta('dir_img', $connect);
587
+            return "$site/$dir$fichier";
588
+        }
589
+    }
590
+    return false;
591 591
 }
592 592
 
593 593
 /**
@@ -601,23 +601,23 @@  discard block
 block discarded – undo
601 601
  */
602 602
 function vignette_logo_document($row, string $connect = '') {
603 603
 
604
-	if (!$row or empty($row['id_vignette'])) {
605
-		return '';
606
-	}
607
-	$fichier = quete_fichier($row['id_vignette'], $connect);
608
-	if ($url = document_spip_externe($fichier, $connect)) {
609
-		return $url;
610
-	}
611
-
612
-	$f = get_spip_doc($fichier);
613
-	if ($f and @file_exists($f)) {
614
-		return $f;
615
-	}
616
-	if ($row['mode'] !== 'vignette') {
617
-		return '';
618
-	}
619
-
620
-	return generer_objet_url($row['id_document'], 'document', '', '', null, '', $connect);
604
+    if (!$row or empty($row['id_vignette'])) {
605
+        return '';
606
+    }
607
+    $fichier = quete_fichier($row['id_vignette'], $connect);
608
+    if ($url = document_spip_externe($fichier, $connect)) {
609
+        return $url;
610
+    }
611
+
612
+    $f = get_spip_doc($fichier);
613
+    if ($f and @file_exists($f)) {
614
+        return $f;
615
+    }
616
+    if ($row['mode'] !== 'vignette') {
617
+        return '';
618
+    }
619
+
620
+    return generer_objet_url($row['id_document'], 'document', '', '', null, '', $connect);
621 621
 }
622 622
 
623 623
 /**
@@ -633,66 +633,66 @@  discard block
 block discarded – undo
633 633
  * @return bool|string
634 634
  */
635 635
 function calcul_exposer($id, $prim, $reference, $parent, $type, string $connect = '') {
636
-	static $exposer = [];
637
-
638
-	// Que faut-il exposer ? Tous les elements de $reference
639
-	// ainsi que leur hierarchie ; on ne fait donc ce calcul
640
-	// qu'une fois (par squelette) et on conserve le resultat
641
-	// en static.
642
-	if (!isset($exposer[$m = md5(serialize($reference))][$prim])) {
643
-		$principal = $reference[$type] ?? $reference["@$type"] ?? '';
644
-		// le parent fournit en argument est le parent de $id, pas celui de $principal
645
-		// il n'est donc pas utile
646
-		$parent = 0;
647
-		if (!$principal) { // regarder si un enfant est dans le contexte, auquel cas il expose peut etre le parent courant
648
-			$enfants = ['id_rubrique' => ['id_article'], 'id_groupe' => ['id_mot']];
649
-			if (isset($enfants[$type])) {
650
-				foreach ($enfants[$type] as $t) {
651
-					if (
652
-						isset($reference[$t])
653
-						// cas de la reference donnee dynamiquement par la pagination
654
-						or isset($reference["@$t"])
655
-					) {
656
-						$type = $t;
657
-						$principal = $reference[$type] ?? $reference["@$type"];
658
-						continue;
659
-					}
660
-				}
661
-			}
662
-		}
663
-		$exposer[$m][$type] = [];
664
-		if ($principal) {
665
-			$principaux = is_array($principal) ? $principal : [$principal];
666
-			foreach ($principaux as $principal) {
667
-				$exposer[$m][$type][$principal] = true;
668
-				if ($type == 'id_mot') {
669
-					if (!$parent) {
670
-						$parent = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($principal), '', '', '', '', $connect);
671
-					}
672
-					if ($parent) {
673
-						$exposer[$m]['id_groupe'][$parent] = true;
674
-					}
675
-				} else {
676
-					if ($type != 'id_groupe') {
677
-						if (!$parent) {
678
-							if ($type == 'id_rubrique') {
679
-								$parent = $principal;
680
-							}
681
-							if ($type == 'id_article') {
682
-								$parent = quete_rubrique($principal, $connect);
683
-							}
684
-						}
685
-						do {
686
-							$exposer[$m]['id_rubrique'][$parent] = true;
687
-						} while ($parent = quete_parent($parent, $connect));
688
-					}
689
-				}
690
-			}
691
-		}
692
-	}
693
-
694
-	// And the winner is...
695
-	return isset($exposer[$m][$prim]) ? isset($exposer[$m][$prim][$id]) : '';
636
+    static $exposer = [];
637
+
638
+    // Que faut-il exposer ? Tous les elements de $reference
639
+    // ainsi que leur hierarchie ; on ne fait donc ce calcul
640
+    // qu'une fois (par squelette) et on conserve le resultat
641
+    // en static.
642
+    if (!isset($exposer[$m = md5(serialize($reference))][$prim])) {
643
+        $principal = $reference[$type] ?? $reference["@$type"] ?? '';
644
+        // le parent fournit en argument est le parent de $id, pas celui de $principal
645
+        // il n'est donc pas utile
646
+        $parent = 0;
647
+        if (!$principal) { // regarder si un enfant est dans le contexte, auquel cas il expose peut etre le parent courant
648
+            $enfants = ['id_rubrique' => ['id_article'], 'id_groupe' => ['id_mot']];
649
+            if (isset($enfants[$type])) {
650
+                foreach ($enfants[$type] as $t) {
651
+                    if (
652
+                        isset($reference[$t])
653
+                        // cas de la reference donnee dynamiquement par la pagination
654
+                        or isset($reference["@$t"])
655
+                    ) {
656
+                        $type = $t;
657
+                        $principal = $reference[$type] ?? $reference["@$type"];
658
+                        continue;
659
+                    }
660
+                }
661
+            }
662
+        }
663
+        $exposer[$m][$type] = [];
664
+        if ($principal) {
665
+            $principaux = is_array($principal) ? $principal : [$principal];
666
+            foreach ($principaux as $principal) {
667
+                $exposer[$m][$type][$principal] = true;
668
+                if ($type == 'id_mot') {
669
+                    if (!$parent) {
670
+                        $parent = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($principal), '', '', '', '', $connect);
671
+                    }
672
+                    if ($parent) {
673
+                        $exposer[$m]['id_groupe'][$parent] = true;
674
+                    }
675
+                } else {
676
+                    if ($type != 'id_groupe') {
677
+                        if (!$parent) {
678
+                            if ($type == 'id_rubrique') {
679
+                                $parent = $principal;
680
+                            }
681
+                            if ($type == 'id_article') {
682
+                                $parent = quete_rubrique($principal, $connect);
683
+                            }
684
+                        }
685
+                        do {
686
+                            $exposer[$m]['id_rubrique'][$parent] = true;
687
+                        } while ($parent = quete_parent($parent, $connect));
688
+                    }
689
+                }
690
+            }
691
+        }
692
+    }
693
+
694
+    // And the winner is...
695
+    return isset($exposer[$m][$prim]) ? isset($exposer[$m][$prim][$id]) : '';
696 696
 }
697 697
 
698 698
 /**
@@ -707,23 +707,23 @@  discard block
 block discarded – undo
707 707
  * @return int
708 708
  */
709 709
 function quete_debut_pagination($primary, $valeur, $pas, $iter) {
710
-	// on ne devrait pas arriver ici si la cle primaire est inexistante
711
-	// ou composee, mais verifions
712
-	if (!$primary or preg_match('/[,\s]/', $primary)) {
713
-		return 0;
714
-	}
715
-
716
-	$pos = 0;
717
-	while ($row = $iter->fetch() and $row[$primary] != $valeur) {
718
-		$pos++;
719
-	}
720
-	// si on a pas trouve
721
-	if (!$row or $row[$primary] != $valeur) {
722
-		return 0;
723
-	}
724
-
725
-	// sinon, calculer le bon numero de page
726
-	return floor($pos / $pas) * $pas;
710
+    // on ne devrait pas arriver ici si la cle primaire est inexistante
711
+    // ou composee, mais verifions
712
+    if (!$primary or preg_match('/[,\s]/', $primary)) {
713
+        return 0;
714
+    }
715
+
716
+    $pos = 0;
717
+    while ($row = $iter->fetch() and $row[$primary] != $valeur) {
718
+        $pos++;
719
+    }
720
+    // si on a pas trouve
721
+    if (!$row or $row[$primary] != $valeur) {
722
+        return 0;
723
+    }
724
+
725
+    // sinon, calculer le bon numero de page
726
+    return floor($pos / $pas) * $pas;
727 727
 }
728 728
 
729 729
 /**
@@ -734,11 +734,11 @@  discard block
 block discarded – undo
734 734
  * @return boolean
735 735
  */
736 736
 function is_whereable($value): bool {
737
-	if (is_array($value) && count($value)) {
738
-		return true;
739
-	}
740
-	if (is_scalar($value) && strlen($value)) {
741
-		return true;
742
-	}
743
-	return false;
737
+    if (is_array($value) && count($value)) {
738
+        return true;
739
+    }
740
+    if (is_scalar($value) && strlen($value)) {
741
+        return true;
742
+    }
743
+    return false;
744 744
 }
Please login to merge, or discard this patch.
ecrire/balise/id_logo_.php 1 patch
Indentation   +51 added lines, -51 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -49,38 +49,38 @@  discard block
 block discarded – undo
49 49
  */
50 50
 function balise_ID_LOGO__dist($p) {
51 51
 
52
-	preg_match(',^ID_LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i', $p->nom_champ, $regs);
53
-	$type = strtolower($regs[1]);
54
-	$suite_logo = $regs[2];
55
-
56
-	// cas de #ID_LOGO_SITE_SPIP
57
-	if ($type == 'site_spip') {
58
-		$type = 'site';
59
-		$_id_objet = "\"'0'\"";
60
-	}
61
-
62
-	$id_objet = id_table_objet($type);
63
-	if (!isset($_id_objet)) {
64
-		$_id_objet = champ_sql($id_objet, $p);
65
-	}
66
-
67
-	$connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : '';
68
-	if ($type == 'document') {
69
-		$qconnect = _q($connect);
70
-		$doc = "quete_document($_id_objet, $qconnect)";
71
-		$code = "table_valeur($doc, 'id_vignette')";
72
-	} elseif ($connect) {
73
-		$code = "''";
74
-		spip_log('Les logos distants ne sont pas prevus');
75
-	} else {
76
-		$champ_logo = 'id';
77
-		$code = generer_code_logo($id_objet, $_id_objet, $type, '', "''", $p, $suite_logo, $champ_logo);
78
-	}
79
-
80
-	$p->code = $code;
81
-	$p->interdire_scripts = false;
82
-
83
-	return $p;
52
+    preg_match(',^ID_LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i', $p->nom_champ, $regs);
53
+    $type = strtolower($regs[1]);
54
+    $suite_logo = $regs[2];
55
+
56
+    // cas de #ID_LOGO_SITE_SPIP
57
+    if ($type == 'site_spip') {
58
+        $type = 'site';
59
+        $_id_objet = "\"'0'\"";
60
+    }
61
+
62
+    $id_objet = id_table_objet($type);
63
+    if (!isset($_id_objet)) {
64
+        $_id_objet = champ_sql($id_objet, $p);
65
+    }
66
+
67
+    $connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : '';
68
+    if ($type == 'document') {
69
+        $qconnect = _q($connect);
70
+        $doc = "quete_document($_id_objet, $qconnect)";
71
+        $code = "table_valeur($doc, 'id_vignette')";
72
+    } elseif ($connect) {
73
+        $code = "''";
74
+        spip_log('Les logos distants ne sont pas prevus');
75
+    } else {
76
+        $champ_logo = 'id';
77
+        $code = generer_code_logo($id_objet, $_id_objet, $type, '', "''", $p, $suite_logo, $champ_logo);
78
+    }
79
+
80
+    $p->code = $code;
81
+    $p->interdire_scripts = false;
82
+
83
+    return $p;
84 84
 }
85 85
 
86 86
 /**
@@ -109,28 +109,28 @@  discard block
 block discarded – undo
109 109
  *     Code compilé retournant le chemin du logo ou le code HTML du logo.
110 110
  **/
111 111
 function generer_code_logo($id_objet, $_id_objet, $type, $align, $_lien, $p, $suite, string $champ = ''): string {
112
-	$onoff = 'ON';
113
-	$_id_rubrique = "''";
112
+    $onoff = 'ON';
113
+    $_id_rubrique = "''";
114 114
 
115
-	if ($type === 'rubrique') {
116
-		$_id_rubrique = "quete_parent($_id_objet)";
117
-	}
115
+    if ($type === 'rubrique') {
116
+        $_id_rubrique = "quete_parent($_id_objet)";
117
+    }
118 118
 
119
-	if ($suite === '_SURVOL') {
120
-		$onoff = 'off';
121
-	} elseif ($suite === '_NORMAL') {
122
-		$onoff = 'on';
123
-	} elseif ($suite === '_RUBRIQUE') {
124
-		$_id_rubrique = champ_sql('id_rubrique', $p);
125
-	}
119
+    if ($suite === '_SURVOL') {
120
+        $onoff = 'off';
121
+    } elseif ($suite === '_NORMAL') {
122
+        $onoff = 'on';
123
+    } elseif ($suite === '_RUBRIQUE') {
124
+        $_id_rubrique = champ_sql('id_rubrique', $p);
125
+    }
126 126
 
127
-	$code = "quete_logo('$id_objet', '$onoff', $_id_objet, $_id_rubrique)";
127
+    $code = "quete_logo('$id_objet', '$onoff', $_id_objet, $_id_rubrique)";
128 128
 
129
-	if ($champ) {
130
-		return "table_valeur($code, '".addslashes($champ)."')";
131
-	}
129
+    if ($champ) {
130
+        return "table_valeur($code, '".addslashes($champ)."')";
131
+    }
132 132
 
133
-	$align = preg_replace(',\W,', '', $align);
133
+    $align = preg_replace(',\W,', '', $align);
134 134
 
135
-	return "quete_html_logo($code, '$align', " . ($_lien ?: "''") . ')';
135
+    return "quete_html_logo($code, '$align', " . ($_lien ?: "''") . ')';
136 136
 }
Please login to merge, or discard this patch.
ecrire/balise/logo_.php 1 patch
Indentation   +85 added lines, -85 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -56,88 +56,88 @@  discard block
 block discarded – undo
56 56
  */
57 57
 function balise_LOGO__dist($p) {
58 58
 
59
-	preg_match(',^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i', $p->nom_champ, $regs);
60
-	$type = strtolower($regs[1]);
61
-	$suite_logo = $regs[2];
62
-
63
-	// cas de #LOGO_SITE_SPIP
64
-	if ($type == 'site_spip') {
65
-		$type = 'site';
66
-		$_id_objet = "\"'0'\"";
67
-	}
68
-
69
-	$id_objet = id_table_objet($type);
70
-	if (!isset($_id_objet)) {
71
-		$_id_objet = champ_sql($id_objet, $p);
72
-	}
73
-
74
-	$fichier = ($p->etoile === '**') ? -1 : 0;
75
-	$coord = [];
76
-	$align = $lien = '';
77
-	$mode_logo = '';
78
-
79
-	if ($p->param and !$p->param[0][0]) {
80
-		$params = $p->param[0];
81
-		array_shift($params);
82
-		foreach ($params as $a) {
83
-			if ($a[0]->type === 'texte') {
84
-				$n = $a[0]->texte;
85
-				if (is_numeric($n)) {
86
-					$coord[] = $n;
87
-				} elseif (in_array($n, ['top', 'left', 'right', 'center', 'bottom'])) {
88
-					$align = $n;
89
-				} elseif (in_array($n, ['auto', 'icone', 'apercu', 'vignette'])) {
90
-					$mode_logo = $n;
91
-				}
92
-			} else {
93
-				$lien = calculer_liste($a, $p->descr, $p->boucles, $p->id_boucle);
94
-			}
95
-		}
96
-	}
97
-
98
-	$coord_x = !$coord ? 0 : intval(array_shift($coord));
99
-	$coord_y = !$coord ? 0 : intval(array_shift($coord));
100
-
101
-	if ($p->etoile === '*') {
102
-		include_spip('balise/url_');
103
-		$lien = generer_generer_url_arg($type, $p, $_id_objet);
104
-	}
105
-
106
-	$connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : '';
107
-	if ($type == 'document') {
108
-		$qconnect = _q($connect);
109
-		$doc = "quete_document($_id_objet, $qconnect)";
110
-		if ($fichier) {
111
-			$code = "quete_logo_file($doc, $qconnect)";
112
-		} else {
113
-			$code = "quete_logo_document($doc, " . ($lien ?: "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";
114
-		}
115
-		// (x=non-faux ? y : '') pour affecter x en retournant y
116
-		if ($p->descr['documents']) {
117
-			$code = '(($doublons["documents"] .= ",". '
118
-				. $_id_objet
119
-				. ") ? $code : '')";
120
-		}
121
-	} elseif ($connect) {
122
-		$code = "''";
123
-		spip_log('Les logos distants ne sont pas prevus');
124
-	} else {
125
-		// pour generer_code_logo
126
-		include_spip('balise/id_logo_');
127
-		$champ_logo = '';
128
-		if ($fichier) {
129
-			$champ_logo = 'fichier';
130
-		}
131
-		$code = generer_code_logo($id_objet, $_id_objet, $type, $align, $lien, $p, $suite_logo, $champ_logo);
132
-	}
133
-
134
-	// demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}
135
-	if ($coord_x or $coord_y) {
136
-		$code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))";
137
-	}
138
-
139
-	$p->code = $code;
140
-	$p->interdire_scripts = false;
141
-
142
-	return $p;
59
+    preg_match(',^LOGO_([A-Z_]+?)(|_NORMAL|_SURVOL|_RUBRIQUE)$,i', $p->nom_champ, $regs);
60
+    $type = strtolower($regs[1]);
61
+    $suite_logo = $regs[2];
62
+
63
+    // cas de #LOGO_SITE_SPIP
64
+    if ($type == 'site_spip') {
65
+        $type = 'site';
66
+        $_id_objet = "\"'0'\"";
67
+    }
68
+
69
+    $id_objet = id_table_objet($type);
70
+    if (!isset($_id_objet)) {
71
+        $_id_objet = champ_sql($id_objet, $p);
72
+    }
73
+
74
+    $fichier = ($p->etoile === '**') ? -1 : 0;
75
+    $coord = [];
76
+    $align = $lien = '';
77
+    $mode_logo = '';
78
+
79
+    if ($p->param and !$p->param[0][0]) {
80
+        $params = $p->param[0];
81
+        array_shift($params);
82
+        foreach ($params as $a) {
83
+            if ($a[0]->type === 'texte') {
84
+                $n = $a[0]->texte;
85
+                if (is_numeric($n)) {
86
+                    $coord[] = $n;
87
+                } elseif (in_array($n, ['top', 'left', 'right', 'center', 'bottom'])) {
88
+                    $align = $n;
89
+                } elseif (in_array($n, ['auto', 'icone', 'apercu', 'vignette'])) {
90
+                    $mode_logo = $n;
91
+                }
92
+            } else {
93
+                $lien = calculer_liste($a, $p->descr, $p->boucles, $p->id_boucle);
94
+            }
95
+        }
96
+    }
97
+
98
+    $coord_x = !$coord ? 0 : intval(array_shift($coord));
99
+    $coord_y = !$coord ? 0 : intval(array_shift($coord));
100
+
101
+    if ($p->etoile === '*') {
102
+        include_spip('balise/url_');
103
+        $lien = generer_generer_url_arg($type, $p, $_id_objet);
104
+    }
105
+
106
+    $connect = $p->id_boucle ? $p->boucles[$p->id_boucle]->sql_serveur : '';
107
+    if ($type == 'document') {
108
+        $qconnect = _q($connect);
109
+        $doc = "quete_document($_id_objet, $qconnect)";
110
+        if ($fichier) {
111
+            $code = "quete_logo_file($doc, $qconnect)";
112
+        } else {
113
+            $code = "quete_logo_document($doc, " . ($lien ?: "''") . ", '$align', '$mode_logo', $coord_x, $coord_y, $qconnect)";
114
+        }
115
+        // (x=non-faux ? y : '') pour affecter x en retournant y
116
+        if ($p->descr['documents']) {
117
+            $code = '(($doublons["documents"] .= ",". '
118
+                . $_id_objet
119
+                . ") ? $code : '')";
120
+        }
121
+    } elseif ($connect) {
122
+        $code = "''";
123
+        spip_log('Les logos distants ne sont pas prevus');
124
+    } else {
125
+        // pour generer_code_logo
126
+        include_spip('balise/id_logo_');
127
+        $champ_logo = '';
128
+        if ($fichier) {
129
+            $champ_logo = 'fichier';
130
+        }
131
+        $code = generer_code_logo($id_objet, $_id_objet, $type, $align, $lien, $p, $suite_logo, $champ_logo);
132
+    }
133
+
134
+    // demande de reduction sur logo avec ecriture spip 2.1 : #LOGO_xxx{200, 0}
135
+    if ($coord_x or $coord_y) {
136
+        $code = "filtrer('image_graver',filtrer('image_reduire'," . $code . ", '$coord_x', '$coord_y'))";
137
+    }
138
+
139
+    $p->code = $code;
140
+    $p->interdire_scripts = false;
141
+
142
+    return $p;
143 143
 }
Please login to merge, or discard this patch.
ecrire/inc/livrer_fichier.php 1 patch
Indentation   +132 added lines, -132 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Fichier
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 /**
@@ -36,28 +36,28 @@  discard block
 block discarded – undo
36 36
  */
37 37
 function spip_livrer_fichier($fichier, $content_type = 'application/octet-stream', $options = []) {
38 38
 
39
-	$defaut = [
40
-		'attachment' => false,
41
-		'expires' => 3600,
42
-		'range' => null
43
-	];
44
-	$options = array_merge($defaut, $options);
45
-	if (is_numeric($options['expires']) and $options['expires'] > 0) {
46
-		$options['expires'] = gmdate('D, d M Y H:i:s', time() + $options['expires']) . ' GMT';
47
-	}
48
-
49
-	if (is_null($options) and isset($_SERVER['HTTP_RANGE'])) {
50
-		$options['range'] = $_SERVER['HTTP_RANGE'];
51
-	}
52
-
53
-	spip_livrer_fichier_entetes($fichier, $content_type, $options['attachment'] && !$options['range'], $options['expires']);
54
-
55
-	if (!is_null($options['range'])) {
56
-		spip_livrer_fichier_partie($fichier, $options['range']);
57
-	}
58
-	else {
59
-		spip_livrer_fichier_entier($fichier);
60
-	}
39
+    $defaut = [
40
+        'attachment' => false,
41
+        'expires' => 3600,
42
+        'range' => null
43
+    ];
44
+    $options = array_merge($defaut, $options);
45
+    if (is_numeric($options['expires']) and $options['expires'] > 0) {
46
+        $options['expires'] = gmdate('D, d M Y H:i:s', time() + $options['expires']) . ' GMT';
47
+    }
48
+
49
+    if (is_null($options) and isset($_SERVER['HTTP_RANGE'])) {
50
+        $options['range'] = $_SERVER['HTTP_RANGE'];
51
+    }
52
+
53
+    spip_livrer_fichier_entetes($fichier, $content_type, $options['attachment'] && !$options['range'], $options['expires']);
54
+
55
+    if (!is_null($options['range'])) {
56
+        spip_livrer_fichier_partie($fichier, $options['range']);
57
+    }
58
+    else {
59
+        spip_livrer_fichier_entier($fichier);
60
+    }
61 61
 }
62 62
 
63 63
 /**
@@ -70,35 +70,35 @@  discard block
 block discarded – undo
70 70
  * @param int|string $expires
71 71
  */
72 72
 function spip_livrer_fichier_entetes($fichier, $content_type = 'application/octet-stream', $attachment = false, $expires = 0) {
73
-	// toujours envoyer un content type, meme vide !
74
-	header('Accept-Ranges: bytes');
75
-	header('Content-Type: ' . $content_type);
76
-
77
-	if ($fs = stat($fichier)
78
-	  and !empty($fs['size'])
79
-	  and !empty($fs['mtime'])) {
80
-		header("Last-Modified: " . gmdate("D, d M Y H:i:s", $fs['mtime']) . " GMT");
81
-		header(sprintf('Etag: "%x-%x"', $fs['size'], str_pad($fs['mtime'], 16, "0")));
82
-	}
83
-
84
-	if ($attachment) {
85
-		$f = basename($fichier);
86
-		// ce content-type est necessaire pour eviter des corruptions de zip dans ie6
87
-		header('Content-Type: application/octet-stream');
88
-
89
-		header("Content-Disposition: attachment; filename=\"$f\";");
90
-		header('Content-Transfer-Encoding: binary');
91
-
92
-		// fix for IE caching or PHP bug issue
93
-		header('Expires: 0'); // set expiration time
94
-		header('Pragma: public');
95
-		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
96
-	}
97
-	else {
98
-		$f = basename($fichier);
99
-		header("Content-Disposition: inline; filename=\"$f\";");
100
-		header('Expires: ' . $expires); // set expiration time
101
-	}
73
+    // toujours envoyer un content type, meme vide !
74
+    header('Accept-Ranges: bytes');
75
+    header('Content-Type: ' . $content_type);
76
+
77
+    if ($fs = stat($fichier)
78
+      and !empty($fs['size'])
79
+      and !empty($fs['mtime'])) {
80
+        header("Last-Modified: " . gmdate("D, d M Y H:i:s", $fs['mtime']) . " GMT");
81
+        header(sprintf('Etag: "%x-%x"', $fs['size'], str_pad($fs['mtime'], 16, "0")));
82
+    }
83
+
84
+    if ($attachment) {
85
+        $f = basename($fichier);
86
+        // ce content-type est necessaire pour eviter des corruptions de zip dans ie6
87
+        header('Content-Type: application/octet-stream');
88
+
89
+        header("Content-Disposition: attachment; filename=\"$f\";");
90
+        header('Content-Transfer-Encoding: binary');
91
+
92
+        // fix for IE caching or PHP bug issue
93
+        header('Expires: 0'); // set expiration time
94
+        header('Pragma: public');
95
+        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
96
+    }
97
+    else {
98
+        $f = basename($fichier);
99
+        header("Content-Disposition: inline; filename=\"$f\";");
100
+        header('Expires: ' . $expires); // set expiration time
101
+    }
102 102
 }
103 103
 
104 104
 /**
@@ -106,20 +106,20 @@  discard block
 block discarded – undo
106 106
  * @param string $fichier
107 107
  */
108 108
 function spip_livrer_fichier_entier($fichier) {
109
-	if (!file_exists($fichier)) {
110
-		throw new \Exception(sprintf('File not found: %s', $fichier));
111
-	}
109
+    if (!file_exists($fichier)) {
110
+        throw new \Exception(sprintf('File not found: %s', $fichier));
111
+    }
112 112
 
113
-	if (!is_readable($fichier)) {
114
-		throw new \Exception(sprintf('File not readable: %s', $fichier));
115
-	}
113
+    if (!is_readable($fichier)) {
114
+        throw new \Exception(sprintf('File not readable: %s', $fichier));
115
+    }
116 116
 
117
-	if ($size = filesize($fichier)) {
118
-		header(sprintf('Content-Length: %d', $size));
119
-	}
117
+    if ($size = filesize($fichier)) {
118
+        header(sprintf('Content-Length: %d', $size));
119
+    }
120 120
 
121
-	readfile($fichier);
122
-	exit();
121
+    readfile($fichier);
122
+    exit();
123 123
 }
124 124
 
125 125
 /**
@@ -132,98 +132,98 @@  discard block
 block discarded – undo
132 132
  * @throws Exception
133 133
  */
134 134
 function spip_livrer_fichier_partie($fichier, $range = null) {
135
-	if (!file_exists($fichier)) {
136
-		throw new \Exception(sprintf('File not found: %s', $fichier));
137
-	}
135
+    if (!file_exists($fichier)) {
136
+        throw new \Exception(sprintf('File not found: %s', $fichier));
137
+    }
138 138
 
139
-	if (!is_readable($fichier)) {
140
-		throw new \Exception(sprintf('File not readable: %s', $fichier));
141
-	}
139
+    if (!is_readable($fichier)) {
140
+        throw new \Exception(sprintf('File not readable: %s', $fichier));
141
+    }
142 142
 
143 143
 
144
-	// Par defaut on envoie tout
145
-	$byteOffset = 0;
146
-	$byteLength = $fileSize = filesize($fichier);
144
+    // Par defaut on envoie tout
145
+    $byteOffset = 0;
146
+    $byteLength = $fileSize = filesize($fichier);
147 147
 
148 148
 
149
-	// Parse Content-Range header for byte offsets, looks like "bytes=11525-" OR "bytes=11525-12451"
150
-	if ($range and preg_match('%bytes=(\d+)-(\d+)?%i', $range, $match)) {
151
-		### Offset signifies where we should begin to read the file
152
-		$byteOffset = (int)$match[1];
149
+    // Parse Content-Range header for byte offsets, looks like "bytes=11525-" OR "bytes=11525-12451"
150
+    if ($range and preg_match('%bytes=(\d+)-(\d+)?%i', $range, $match)) {
151
+        ### Offset signifies where we should begin to read the file
152
+        $byteOffset = (int)$match[1];
153 153
 
154 154
 
155
-		### Length is for how long we should read the file according to the browser, and can never go beyond the file size
156
-		if (isset($match[2])) {
157
-			$finishBytes = (int)$match[2];
158
-			$byteLength = $finishBytes + 1;
159
-		} else {
160
-			$finishBytes = $fileSize - 1;
161
-		}
155
+        ### Length is for how long we should read the file according to the browser, and can never go beyond the file size
156
+        if (isset($match[2])) {
157
+            $finishBytes = (int)$match[2];
158
+            $byteLength = $finishBytes + 1;
159
+        } else {
160
+            $finishBytes = $fileSize - 1;
161
+        }
162 162
 
163
-		$cr_header = sprintf('Content-Range: bytes %d-%d/%d', $byteOffset, $finishBytes, $fileSize);
164
-	}
165
-	else {
166
-		// si pas de range valide, on delegue a la methode d'envoi complet
167
-		spip_livrer_fichier_entier($fichier);
168
-		// redondant, mais facilite la comprehension du code
169
-		exit();
170
-	}
163
+        $cr_header = sprintf('Content-Range: bytes %d-%d/%d', $byteOffset, $finishBytes, $fileSize);
164
+    }
165
+    else {
166
+        // si pas de range valide, on delegue a la methode d'envoi complet
167
+        spip_livrer_fichier_entier($fichier);
168
+        // redondant, mais facilite la comprehension du code
169
+        exit();
170
+    }
171 171
 
172
-	// Remove headers that might unnecessarily clutter up the output
173
-	header_remove('Cache-Control');
174
-	header_remove('Pragma');
172
+    // Remove headers that might unnecessarily clutter up the output
173
+    header_remove('Cache-Control');
174
+    header_remove('Pragma');
175 175
 
176
-	// partial content
177
-	header('HTTP/1.1 206 Partial content');
178
-	header($cr_header);  ### Decrease by 1 on byte-length since this definition is zero-based index of bytes being sent
176
+    // partial content
177
+    header('HTTP/1.1 206 Partial content');
178
+    header($cr_header);  ### Decrease by 1 on byte-length since this definition is zero-based index of bytes being sent
179 179
 
180 180
 
181
-	$byteRange = $byteLength - $byteOffset;
181
+    $byteRange = $byteLength - $byteOffset;
182 182
 
183
-	header(sprintf('Content-Length: %d', $byteRange));
183
+    header(sprintf('Content-Length: %d', $byteRange));
184 184
 
185
-	// Variable containing the buffer
186
-	$buffer = '';
187
-	// Just a reasonable buffer size
188
-	$bufferSize = 512 * 16;
189
-	// Contains how much is left to read of the byteRange
190
-	$bytePool = $byteRange;
185
+    // Variable containing the buffer
186
+    $buffer = '';
187
+    // Just a reasonable buffer size
188
+    $bufferSize = 512 * 16;
189
+    // Contains how much is left to read of the byteRange
190
+    $bytePool = $byteRange;
191 191
 
192
-	if (!$handle = fopen($fichier, 'r')) {
193
-		throw new \Exception(sprintf('Could not get handle for file %s', $fichier));
194
-	}
192
+    if (!$handle = fopen($fichier, 'r')) {
193
+        throw new \Exception(sprintf('Could not get handle for file %s', $fichier));
194
+    }
195 195
 
196
-	if (fseek($handle, $byteOffset, SEEK_SET) == -1) {
197
-		throw new \Exception(sprintf('Could not seek to byte offset %d', $byteOffset));
198
-	}
196
+    if (fseek($handle, $byteOffset, SEEK_SET) == -1) {
197
+        throw new \Exception(sprintf('Could not seek to byte offset %d', $byteOffset));
198
+    }
199 199
 
200 200
 
201
-	while ($bytePool > 0) {
202
-		// How many bytes we request on this iteration
203
-		$chunkSizeRequested = min($bufferSize, $bytePool);
201
+    while ($bytePool > 0) {
202
+        // How many bytes we request on this iteration
203
+        $chunkSizeRequested = min($bufferSize, $bytePool);
204 204
 
205
-		// Try readin $chunkSizeRequested bytes from $handle and put data in $buffer
206
-		$buffer = fread($handle, $chunkSizeRequested);
205
+        // Try readin $chunkSizeRequested bytes from $handle and put data in $buffer
206
+        $buffer = fread($handle, $chunkSizeRequested);
207 207
 
208
-		// Store how many bytes were actually read
209
-		$chunkSizeActual = strlen($buffer);
208
+        // Store how many bytes were actually read
209
+        $chunkSizeActual = strlen($buffer);
210 210
 
211
-		// If we didn't get any bytes that means something unexpected has happened since $bytePool should be zero already
212
-		if ($chunkSizeActual == 0) {
213
-			// For production servers this should go in your php error log, since it will break the output
214
-			trigger_error('Chunksize became 0', E_USER_WARNING);
215
-			break;
216
-		}
211
+        // If we didn't get any bytes that means something unexpected has happened since $bytePool should be zero already
212
+        if ($chunkSizeActual == 0) {
213
+            // For production servers this should go in your php error log, since it will break the output
214
+            trigger_error('Chunksize became 0', E_USER_WARNING);
215
+            break;
216
+        }
217 217
 
218
-		// Decrease byte pool with amount of bytes that were read during this iteration
219
-		$bytePool -= $chunkSizeActual;
218
+        // Decrease byte pool with amount of bytes that were read during this iteration
219
+        $bytePool -= $chunkSizeActual;
220 220
 
221
-		// Write the buffer to output
222
-		print $buffer;
221
+        // Write the buffer to output
222
+        print $buffer;
223 223
 
224
-		// Try to output the data to the client immediately
225
-		flush();
226
-	}
224
+        // Try to output the data to the client immediately
225
+        flush();
226
+    }
227 227
 
228
-	exit();
228
+    exit();
229 229
 }
Please login to merge, or discard this patch.