Completed
Push — master ( fb0017...92433c )
by cam
01:14
created
ecrire/index.php 2 patches
Indentation   +76 added lines, -76 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
 /** Drapeau indiquant que l'on est dans l'espace privé */
20 20
 define('_ESPACE_PRIVE', true);
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	include 'inc_version.php';
22
+    include 'inc_version.php';
23 23
 }
24 24
 
25 25
 include_spip('inc/cookie');
@@ -35,18 +35,18 @@  discard block
 block discarded – undo
35 35
 // alors il faut blinder les variables d'URL
36 36
 //
37 37
 if (autoriser_sans_cookie($exec, false)) {
38
-	if (!isset($reinstall)) {
39
-		$reinstall = 'non';
40
-	}
41
-	$var_auth = true;
38
+    if (!isset($reinstall)) {
39
+        $reinstall = 'non';
40
+    }
41
+    $var_auth = true;
42 42
 } else {
43
-	// Authentification, redefinissable
44
-	$auth = charger_fonction('auth', 'inc');
45
-	$var_auth = $auth();
46
-	if ($var_auth) {
47
-		echo auth_echec($var_auth);
48
-		exit;
49
-	}
43
+    // Authentification, redefinissable
44
+    $auth = charger_fonction('auth', 'inc');
45
+    $var_auth = $auth();
46
+    if ($var_auth) {
47
+        echo auth_echec($var_auth);
48
+        exit;
49
+    }
50 50
 }
51 51
 
52 52
 // initialiser a la langue par defaut
@@ -57,29 +57,29 @@  discard block
 block discarded – undo
57 57
 
58 58
 
59 59
 if (_request('action') or _request('var_ajax') or _request('formulaire_action')) {
60
-	if (!autoriser_sans_cookie($exec)) {
61
-		// Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires
62
-		include_spip('public/aiguiller');
63
-		if (
64
-			// cas des appels actions ?action=xxx
65
-			traiter_appels_actions()
66
-			or
67
-			// cas des hits ajax sur les inclusions ajax
68
-			traiter_appels_inclusions_ajax()
69
-			or
70
-			// cas des formulaires charger/verifier/traiter
71
-			traiter_formulaires_dynamiques()
72
-		) {
73
-			exit;
74
-		} // le hit est fini !
75
-	}
60
+    if (!autoriser_sans_cookie($exec)) {
61
+        // Charger l'aiguilleur qui va mettre sur la bonne voie les traitements derogatoires
62
+        include_spip('public/aiguiller');
63
+        if (
64
+            // cas des appels actions ?action=xxx
65
+            traiter_appels_actions()
66
+            or
67
+            // cas des hits ajax sur les inclusions ajax
68
+            traiter_appels_inclusions_ajax()
69
+            or
70
+            // cas des formulaires charger/verifier/traiter
71
+            traiter_formulaires_dynamiques()
72
+        ) {
73
+            exit;
74
+        } // le hit est fini !
75
+    }
76 76
 }
77 77
 // securiser les redirect du back-office
78 78
 if (_request('redirect')) {
79
-	if (!function_exists('securiser_redirect_action')) {
80
-		include_spip('public/aiguiller');
81
-	}
82
-	set_request('redirect', securiser_redirect_action(_request('redirect')));
79
+    if (!function_exists('securiser_redirect_action')) {
80
+        include_spip('public/aiguiller');
81
+    }
82
+    set_request('redirect', securiser_redirect_action(_request('redirect')));
83 83
 }
84 84
 
85 85
 
@@ -89,12 +89,12 @@  discard block
 block discarded – undo
89 89
 
90 90
 // Controle de la version, sauf si on est deja en train de s'en occuper
91 91
 if (
92
-	!$reinstall == 'oui'
93
-	and !_AJAX
94
-	and isset($GLOBALS['meta']['version_installee'])
95
-	and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
92
+    !$reinstall == 'oui'
93
+    and !_AJAX
94
+    and isset($GLOBALS['meta']['version_installee'])
95
+    and ($GLOBALS['spip_version_base'] != (str_replace(',', '.', $GLOBALS['meta']['version_installee'])))
96 96
 ) {
97
-	$exec = 'demande_mise_a_jour';
97
+    $exec = 'demande_mise_a_jour';
98 98
 }
99 99
 
100 100
 // Quand une action d'administration est en cours (meta "admin"),
@@ -104,39 +104,39 @@  discard block
 block discarded – undo
104 104
 // sinon c'est qu'elle a ete interrompue et il faut la reprendre
105 105
 
106 106
 elseif (isset($GLOBALS['meta']['admin'])) {
107
-	if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']['admin'], $l)) {
108
-		[, $var_f, $n] = $l;
109
-	}
110
-	if (
111
-		_AJAX
112
-		or !(
113
-			isset($_COOKIE['spip_admin'])
114
-			or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo')
115
-		)
116
-	) {
117
-		spip_log('Quand la meta admin vaut ' .
118
-			$GLOBALS['meta']['admin'] .
119
-			' seul un admin peut se connecter et sans AJAX.' .
120
-			' En cas de probleme, detruire cette meta.');
121
-		die(_T('info_travaux_texte'));
122
-	}
123
-	if ($n) {
124
-		[, $var_f, $n] = $l;
125
-		if (tester_url_ecrire("base_$var_f")) {
126
-			$var_f = "base_$var_f";
127
-		}
128
-		if ($var_f != $exec) {
129
-			spip_log("Le script $var_f lance par auteur$n se substitue a l'exec $exec");
130
-			$exec = $var_f;
131
-			set_request('exec', $exec);
132
-		}
133
-	}
107
+    if (preg_match('/^(.*)_(\d+)_/', $GLOBALS['meta']['admin'], $l)) {
108
+        [, $var_f, $n] = $l;
109
+    }
110
+    if (
111
+        _AJAX
112
+        or !(
113
+            isset($_COOKIE['spip_admin'])
114
+            or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo')
115
+        )
116
+    ) {
117
+        spip_log('Quand la meta admin vaut ' .
118
+            $GLOBALS['meta']['admin'] .
119
+            ' seul un admin peut se connecter et sans AJAX.' .
120
+            ' En cas de probleme, detruire cette meta.');
121
+        die(_T('info_travaux_texte'));
122
+    }
123
+    if ($n) {
124
+        [, $var_f, $n] = $l;
125
+        if (tester_url_ecrire("base_$var_f")) {
126
+            $var_f = "base_$var_f";
127
+        }
128
+        if ($var_f != $exec) {
129
+            spip_log("Le script $var_f lance par auteur$n se substitue a l'exec $exec");
130
+            $exec = $var_f;
131
+            set_request('exec', $exec);
132
+        }
133
+    }
134 134
 }
135 135
 // si nom pas plausible, prendre le script par defaut
136 136
 // attention aux deux cas 404/403 qui commencent par un 4 !
137 137
 elseif (!preg_match(',^[a-z4_][0-9a-z_-]*$,i', $exec)) {
138
-	$exec = 'accueil';
139
-	set_request('exec', $exec);
138
+    $exec = 'accueil';
139
+    set_request('exec', $exec);
140 140
 }
141 141
 
142 142
 //  si la langue est specifiee par cookie et ne correspond pas
@@ -144,19 +144,19 @@  discard block
 block discarded – undo
144 144
 // on appelle directement la fonction, car un appel d'action peut conduire a une boucle infinie
145 145
 // si le cookie n'est pas pose correctement dans l'action
146 146
 if (
147
-	!$var_auth and isset($_COOKIE['spip_lang_ecrire'])
148
-	and $_COOKIE['spip_lang_ecrire'] <> $GLOBALS['visiteur_session']['lang']
147
+    !$var_auth and isset($_COOKIE['spip_lang_ecrire'])
148
+    and $_COOKIE['spip_lang_ecrire'] <> $GLOBALS['visiteur_session']['lang']
149 149
 ) {
150
-	include_spip('action/converser');
151
-	action_converser_post($GLOBALS['visiteur_session']['lang'], true);
150
+    include_spip('action/converser');
151
+    action_converser_post($GLOBALS['visiteur_session']['lang'], true);
152 152
 }
153 153
 
154 154
 if ($var_f = tester_url_ecrire($exec)) {
155
-	$var_f = charger_fonction($var_f);
156
-	$var_f(); // at last
155
+    $var_f = charger_fonction($var_f);
156
+    $var_f(); // at last
157 157
 } else {
158
-	// Rien de connu: rerouter vers exec=404 au lieu d'echouer
159
-	// ce qui permet de laisser la main a un plugin
160
-	$var_f = charger_fonction('404');
161
-	$var_f($exec);
158
+    // Rien de connu: rerouter vers exec=404 au lieu d'echouer
159
+    // ce qui permet de laisser la main a un plugin
160
+    $var_f = charger_fonction('404');
161
+    $var_f($exec);
162 162
 }
Please login to merge, or discard this patch.
Spacing   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@  discard block
 block discarded – undo
9 9
  *  Ce programme est un logiciel libre distribué sous licence GNU/GPL.     *
10 10
 \***************************************************************************/
11 11
 
12
-require_once __DIR__ . '/../vendor/autoload.php';
12
+require_once __DIR__.'/../vendor/autoload.php';
13 13
 
14 14
 /**
15 15
  * Fichier d'exécution de l'interface privée
@@ -29,7 +29,7 @@  discard block
 block discarded – undo
29 29
 // Determiner l'action demandee
30 30
 //
31 31
 
32
-$exec = (string)_request('exec');
32
+$exec = (string) _request('exec');
33 33
 $reinstall = (!is_null(_request('reinstall'))) ? _request('reinstall') : ($exec == 'install' ? 'oui' : null);
34 34
 //
35 35
 // Les scripts d'insallation n'authentifient pas, forcement,
@@ -115,9 +115,9 @@  discard block
 block discarded – undo
115 115
 			or (isset($GLOBALS['visiteur_session']) and $GLOBALS['visiteur_session']['statut'] == '0minirezo')
116 116
 		)
117 117
 	) {
118
-		spip_log('Quand la meta admin vaut ' .
119
-			$GLOBALS['meta']['admin'] .
120
-			' seul un admin peut se connecter et sans AJAX.' .
118
+		spip_log('Quand la meta admin vaut '.
119
+			$GLOBALS['meta']['admin'].
120
+			' seul un admin peut se connecter et sans AJAX.'.
121 121
 			' En cas de probleme, detruire cette meta.');
122 122
 		die(_T('info_travaux_texte'));
123 123
 	}
Please login to merge, or discard this patch.
ecrire/action/editer_objet.php 2 patches
Spacing   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -76,12 +76,12 @@  discard block
 block discarded – undo
76 76
  */
77 77
 function objet_modifier($objet, $id, $set = null) {
78 78
 	if (($t = objet_type($objet)) !== $objet) {
79
-		spip_log("objet_modifier: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
79
+		spip_log("objet_modifier: appel avec type $objet invalide au lieu de $t", 'editer'._LOG_INFO_IMPORTANTE);
80 80
 		$objet = $t;
81 81
 	}
82 82
 	if (
83
-		include_spip('action/editer_' . $objet)
84
-		and function_exists($modifier = $objet . '_modifier')
83
+		include_spip('action/editer_'.$objet)
84
+		and function_exists($modifier = $objet.'_modifier')
85 85
 	) {
86 86
 		return $modifier($id, $set);
87 87
 	}
@@ -90,7 +90,7 @@  discard block
 block discarded – undo
90 90
 	$trouver_table = charger_fonction('trouver_table', 'base');
91 91
 	$desc = $trouver_table($table_sql);
92 92
 	if (!$desc or !isset($desc['field'])) {
93
-		spip_log("Objet $objet inconnu dans objet_modifier", 'editer' . _LOG_ERREUR);
93
+		spip_log("Objet $objet inconnu dans objet_modifier", 'editer'._LOG_ERREUR);
94 94
 
95 95
 		return _L("Erreur objet $objet inconnu");
96 96
 	}
@@ -170,12 +170,12 @@  discard block
 block discarded – undo
170 170
 function objet_inserer($objet, $id_parent = null, $set = null) {
171 171
 	$d = null;
172 172
 	if (($t = objet_type($objet)) !== $objet) {
173
-		spip_log("objet_inserer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
173
+		spip_log("objet_inserer: appel avec type $objet invalide au lieu de $t", 'editer'._LOG_INFO_IMPORTANTE);
174 174
 		$objet = $t;
175 175
 	}
176 176
 	if (
177
-		include_spip('action/editer_' . $objet)
178
-		and function_exists($inserer = $objet . '_inserer')
177
+		include_spip('action/editer_'.$objet)
178
+		and function_exists($inserer = $objet.'_inserer')
179 179
 	) {
180 180
 		return $inserer($id_parent, $set);
181 181
 	}
@@ -196,7 +196,7 @@  discard block
 block discarded – undo
196 196
 			$row = sql_fetsel('id_rubrique, id_secteur, lang', 'spip_rubriques', 'id_parent=0', '', '0+titre,titre', '1');
197 197
 			$id_rubrique = $row['id_rubrique'];
198 198
 		} else {
199
-			$row = sql_fetsel('lang, id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
199
+			$row = sql_fetsel('lang, id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
200 200
 		}
201 201
 
202 202
 		$champs['id_rubrique'] = $id_rubrique;
@@ -314,12 +314,12 @@  discard block
 block discarded – undo
314 314
  */
315 315
 function objet_instituer($objet, $id, $c, $calcul_rub = true) {
316 316
 	if (($t = objet_type($objet)) !== $objet) {
317
-		spip_log("objet_instituer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
317
+		spip_log("objet_instituer: appel avec type $objet invalide au lieu de $t", 'editer'._LOG_INFO_IMPORTANTE);
318 318
 		$objet = $t;
319 319
 	}
320 320
 	if (
321
-		include_spip('action/editer_' . $objet)
322
-		and function_exists($instituer = $objet . '_instituer')
321
+		include_spip('action/editer_'.$objet)
322
+		and function_exists($instituer = $objet.'_instituer')
323 323
 	) {
324 324
 		return $instituer($id, $c, $calcul_rub);
325 325
 	}
@@ -348,7 +348,7 @@  discard block
 block discarded – undo
348 348
 	$sel[] = ($champ_date ? "$champ_date as date" : "'' as date");
349 349
 	$sel[] = (isset($desc['field']['id_rubrique']) ? 'id_rubrique' : '0 as id_rubrique');
350 350
 
351
-	$row = sql_fetsel($sel, $table_sql, id_table_objet($objet) . '=' . intval($id));
351
+	$row = sql_fetsel($sel, $table_sql, id_table_objet($objet).'='.intval($id));
352 352
 
353 353
 	$id_rubrique = $row['id_rubrique'];
354 354
 	$statut_ancien = $statut = $row['statut'];
@@ -371,7 +371,7 @@  discard block
 block discarded – undo
371 371
 			if ($s != 'publie' and autoriser('modifier', $objet, $id)) {
372 372
 				$statut = $champs['statut'] = $s;
373 373
 			} else {
374
-				spip_log("editer_objet $objet #$id refus " . json_encode($c, JSON_THROW_ON_ERROR), 'editer' . _LOG_INFO_IMPORTANTE);
374
+				spip_log("editer_objet $objet #$id refus ".json_encode($c, JSON_THROW_ON_ERROR), 'editer'._LOG_INFO_IMPORTANTE);
375 375
 			}
376 376
 		}
377 377
 
@@ -401,7 +401,7 @@  discard block
 block discarded – undo
401 401
 		and isset($c['id_parent'])
402 402
 		and $id_parent = $c['id_parent']
403 403
 		and $id_parent != $id_rubrique
404
-		and (sql_fetsel('1', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)))
404
+		and (sql_fetsel('1', 'spip_rubriques', 'id_rubrique='.intval($id_parent)))
405 405
 	) {
406 406
 		$champs['id_rubrique'] = $id_parent;
407 407
 
@@ -500,7 +500,7 @@  discard block
 block discarded – undo
500 500
 	// Si on deplace l'objet
501 501
 	// changer aussi son secteur et sa langue (si heritee)
502 502
 	if (isset($champs['id_rubrique'])) {
503
-		$row_rub = sql_fetsel('id_secteur, lang', 'spip_rubriques', 'id_rubrique=' . sql_quote($champs['id_rubrique']));
503
+		$row_rub = sql_fetsel('id_secteur, lang', 'spip_rubriques', 'id_rubrique='.sql_quote($champs['id_rubrique']));
504 504
 		$langue = $row_rub['lang'];
505 505
 
506 506
 		if (isset($desc['field']['id_secteur'])) {
@@ -512,7 +512,7 @@  discard block
 block discarded – undo
512 512
 				sql_fetsel(
513 513
 					'1',
514 514
 					$table_sql,
515
-					id_table_objet($objet) . '=' . intval($id) . " AND langue_choisie<>'oui' AND lang<>" . sql_quote($langue)
515
+					id_table_objet($objet).'='.intval($id)." AND langue_choisie<>'oui' AND lang<>".sql_quote($langue)
516 516
 				)
517 517
 			) {
518 518
 				$champs['lang'] = $langue;
@@ -523,7 +523,7 @@  discard block
 block discarded – undo
523 523
 	if (!$champs) {
524 524
 		return;
525 525
 	}
526
-	sql_updateq($table_sql, $champs, id_table_objet($objet) . '=' . intval($id));
526
+	sql_updateq($table_sql, $champs, id_table_objet($objet).'='.intval($id));
527 527
 
528 528
 	// Changer le statut des rubriques concernees
529 529
 	if ($cond) {
@@ -567,7 +567,7 @@  discard block
 block discarded – undo
567 567
  */
568 568
 function objet_lire($objet, $valeur_id, $options = []) {
569 569
 	if (($t = objet_type($objet)) !== $objet) {
570
-		spip_log("objet_lire: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
570
+		spip_log("objet_lire: appel avec type $objet invalide au lieu de $t", 'editer'._LOG_INFO_IMPORTANTE);
571 571
 		$objet = $t;
572 572
 	}
573 573
 
@@ -589,7 +589,7 @@  discard block
 block discarded – undo
589 589
 	) {
590 590
 		// Il est possible pour un type d'objet de fournir une fonction de lecture de tous les champs d'un objet.
591 591
 		if (
592
-			include_spip('action/editer_' . $objet)
592
+			include_spip('action/editer_'.$objet)
593 593
 			and function_exists($lire = "{$objet}_lire_champs")
594 594
 		) {
595 595
 			$valeurs = $lire($objet, $valeur_id, $champ_id);
@@ -599,7 +599,7 @@  discard block
 block discarded – undo
599 599
 
600 600
 			// La condition est appliquée sur le champ désigné par l'utilisateur.
601 601
 			$where = [
602
-				$champ_id . '=' . sql_quote($valeur_id)
602
+				$champ_id.'='.sql_quote($valeur_id)
603 603
 			];
604 604
 
605 605
 			// Acquisition de tous les champs de l'objet : si l'accès SQL retourne une erreur on renvoie un tableau vide.
Please login to merge, or discard this patch.
Indentation   +561 added lines, -561 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
 /**
@@ -33,36 +33,36 @@  discard block
 block discarded – undo
33 33
  */
34 34
 function action_editer_objet_dist($id = null, $objet = null, $set = null) {
35 35
 
36
-	// appel direct depuis une url avec arg = "objet/id"
37
-	if (is_null($id) or is_null($objet)) {
38
-		$securiser_action = charger_fonction('securiser_action', 'inc');
39
-		$arg = $securiser_action();
40
-		[$objet, $id] = array_pad(explode('/', $arg, 2), 2, null);
41
-	}
42
-
43
-	// appel incorrect ou depuis une url erronnée interdit
44
-	if (is_null($id) or is_null($objet)) {
45
-		include_spip('inc/minipres');
46
-		echo minipres(_T('info_acces_interdit'));
47
-		die();
48
-	}
49
-
50
-	// si id n'est pas un nombre, c'est une creation
51
-	// mais on verifie qu'on a toutes les donnees qu'il faut.
52
-	if (!$id = intval($id)) {
53
-		// on ne sait pas si un parent existe mais on essaye
54
-		$id_parent = _request('id_parent');
55
-		$id = objet_inserer($objet, $id_parent);
56
-	}
57
-
58
-	if (!($id = intval($id)) > 0) {
59
-		return [$id, _L('echec enregistrement en base')];
60
-	}
61
-
62
-	// Enregistre l'envoi dans la BD
63
-	$err = objet_modifier($objet, $id, $set);
64
-
65
-	return [$id, $err];
36
+    // appel direct depuis une url avec arg = "objet/id"
37
+    if (is_null($id) or is_null($objet)) {
38
+        $securiser_action = charger_fonction('securiser_action', 'inc');
39
+        $arg = $securiser_action();
40
+        [$objet, $id] = array_pad(explode('/', $arg, 2), 2, null);
41
+    }
42
+
43
+    // appel incorrect ou depuis une url erronnée interdit
44
+    if (is_null($id) or is_null($objet)) {
45
+        include_spip('inc/minipres');
46
+        echo minipres(_T('info_acces_interdit'));
47
+        die();
48
+    }
49
+
50
+    // si id n'est pas un nombre, c'est une creation
51
+    // mais on verifie qu'on a toutes les donnees qu'il faut.
52
+    if (!$id = intval($id)) {
53
+        // on ne sait pas si un parent existe mais on essaye
54
+        $id_parent = _request('id_parent');
55
+        $id = objet_inserer($objet, $id_parent);
56
+    }
57
+
58
+    if (!($id = intval($id)) > 0) {
59
+        return [$id, _L('echec enregistrement en base')];
60
+    }
61
+
62
+    // Enregistre l'envoi dans la BD
63
+    $err = objet_modifier($objet, $id, $set);
64
+
65
+    return [$id, $err];
66 66
 }
67 67
 
68 68
 /**
@@ -75,85 +75,85 @@  discard block
 block discarded – undo
75 75
  * @return mixed|string
76 76
  */
77 77
 function objet_modifier($objet, $id, $set = null) {
78
-	if (($t = objet_type($objet)) !== $objet) {
79
-		spip_log("objet_modifier: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
80
-		$objet = $t;
81
-	}
82
-	if (
83
-		include_spip('action/editer_' . $objet)
84
-		and function_exists($modifier = $objet . '_modifier')
85
-	) {
86
-		return $modifier($id, $set);
87
-	}
88
-
89
-	$table_sql = table_objet_sql($objet);
90
-	$trouver_table = charger_fonction('trouver_table', 'base');
91
-	$desc = $trouver_table($table_sql);
92
-	if (!$desc or !isset($desc['field'])) {
93
-		spip_log("Objet $objet inconnu dans objet_modifier", 'editer' . _LOG_ERREUR);
94
-
95
-		return _L("Erreur objet $objet inconnu");
96
-	}
97
-	include_spip('inc/modifier');
98
-
99
-	$champ_date = '';
100
-	if (isset($desc['date']) and $desc['date']) {
101
-		$champ_date = $desc['date'];
102
-	} elseif (isset($desc['field']['date'])) {
103
-		$champ_date = 'date';
104
-	}
105
-
106
-	$include_list = array_keys($desc['field']);
107
-	// on ne traite pas la cle primaire par defaut, notamment car
108
-	// sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
109
-	$include_list = array_diff($include_list, [$desc['key']['PRIMARY KEY']]);
110
-
111
-	if (isset($desc['champs_editables']) and is_array($desc['champs_editables'])) {
112
-		$include_list = $desc['champs_editables'];
113
-	}
114
-	$c = collecter_requests(
115
-		// include list
116
-		$include_list,
117
-		// exclude list
118
-		[$champ_date, 'statut', 'id_parent', 'id_secteur'],
119
-		// donnees eventuellement fournies
120
-		$set
121
-	);
122
-
123
-	// Si l'objet est publie, invalider les caches et demander sa reindexation
124
-	if (objet_test_si_publie($objet, $id)) {
125
-		$invalideur = "id='$objet/$id'";
126
-		$indexation = true;
127
-	} else {
128
-		$invalideur = '';
129
-		$indexation = false;
130
-	}
131
-
132
-	if (
133
-		$err = objet_modifier_champs(
134
-			$objet,
135
-			$id,
136
-			[
137
-			'data' => $set,
138
-			'nonvide' => '',
139
-			'invalideur' => $invalideur,
140
-			'indexation' => $indexation,
141
-			// champ a mettre a date('Y-m-d H:i:s') s'il y a modif
142
-			'date_modif' => (isset($desc['field']['date_modif']) ? 'date_modif' : '')
143
-			],
144
-			$c
145
-		)
146
-	) {
147
-		return $err;
148
-	}
149
-
150
-	// Modification de statut, changement de rubrique ?
151
-	// FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout
152
-	//         le tableau $set hors liste d’exclusion, mais du coup on a possiblement des champs en trop.
153
-	$c = collecter_requests([$champ_date, 'statut', 'id_parent'], [], $set);
154
-	$err = objet_instituer($objet, $id, $c);
155
-
156
-	return $err;
78
+    if (($t = objet_type($objet)) !== $objet) {
79
+        spip_log("objet_modifier: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
80
+        $objet = $t;
81
+    }
82
+    if (
83
+        include_spip('action/editer_' . $objet)
84
+        and function_exists($modifier = $objet . '_modifier')
85
+    ) {
86
+        return $modifier($id, $set);
87
+    }
88
+
89
+    $table_sql = table_objet_sql($objet);
90
+    $trouver_table = charger_fonction('trouver_table', 'base');
91
+    $desc = $trouver_table($table_sql);
92
+    if (!$desc or !isset($desc['field'])) {
93
+        spip_log("Objet $objet inconnu dans objet_modifier", 'editer' . _LOG_ERREUR);
94
+
95
+        return _L("Erreur objet $objet inconnu");
96
+    }
97
+    include_spip('inc/modifier');
98
+
99
+    $champ_date = '';
100
+    if (isset($desc['date']) and $desc['date']) {
101
+        $champ_date = $desc['date'];
102
+    } elseif (isset($desc['field']['date'])) {
103
+        $champ_date = 'date';
104
+    }
105
+
106
+    $include_list = array_keys($desc['field']);
107
+    // on ne traite pas la cle primaire par defaut, notamment car
108
+    // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base
109
+    $include_list = array_diff($include_list, [$desc['key']['PRIMARY KEY']]);
110
+
111
+    if (isset($desc['champs_editables']) and is_array($desc['champs_editables'])) {
112
+        $include_list = $desc['champs_editables'];
113
+    }
114
+    $c = collecter_requests(
115
+        // include list
116
+        $include_list,
117
+        // exclude list
118
+        [$champ_date, 'statut', 'id_parent', 'id_secteur'],
119
+        // donnees eventuellement fournies
120
+        $set
121
+    );
122
+
123
+    // Si l'objet est publie, invalider les caches et demander sa reindexation
124
+    if (objet_test_si_publie($objet, $id)) {
125
+        $invalideur = "id='$objet/$id'";
126
+        $indexation = true;
127
+    } else {
128
+        $invalideur = '';
129
+        $indexation = false;
130
+    }
131
+
132
+    if (
133
+        $err = objet_modifier_champs(
134
+            $objet,
135
+            $id,
136
+            [
137
+            'data' => $set,
138
+            'nonvide' => '',
139
+            'invalideur' => $invalideur,
140
+            'indexation' => $indexation,
141
+            // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
142
+            'date_modif' => (isset($desc['field']['date_modif']) ? 'date_modif' : '')
143
+            ],
144
+            $c
145
+        )
146
+    ) {
147
+        return $err;
148
+    }
149
+
150
+    // Modification de statut, changement de rubrique ?
151
+    // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout
152
+    //         le tableau $set hors liste d’exclusion, mais du coup on a possiblement des champs en trop.
153
+    $c = collecter_requests([$champ_date, 'statut', 'id_parent'], [], $set);
154
+    $err = objet_instituer($objet, $id, $c);
155
+
156
+    return $err;
157 157
 }
158 158
 
159 159
 /**
@@ -168,157 +168,157 @@  discard block
 block discarded – undo
168 168
  * @return bool|int
169 169
  */
170 170
 function objet_inserer($objet, $id_parent = null, $set = null) {
171
-	$d = null;
172
-	if (($t = objet_type($objet)) !== $objet) {
173
-		spip_log("objet_inserer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
174
-		$objet = $t;
175
-	}
176
-	if (
177
-		include_spip('action/editer_' . $objet)
178
-		and function_exists($inserer = $objet . '_inserer')
179
-	) {
180
-		return $inserer($id_parent, $set);
181
-	}
182
-
183
-	$table_sql = table_objet_sql($objet);
184
-	$trouver_table = charger_fonction('trouver_table', 'base');
185
-	$desc = $trouver_table($table_sql);
186
-	if (!$desc or !isset($desc['field'])) {
187
-		return 0;
188
-	}
189
-
190
-	$lang_rub = '';
191
-	$champs = [];
192
-	if (isset($desc['field']['id_rubrique'])) {
193
-		// Si id_rubrique vaut 0 ou n'est pas definie, creer l'objet
194
-		// dans la premiere rubrique racine
195
-		if (!$id_rubrique = intval($id_parent)) {
196
-			$row = sql_fetsel('id_rubrique, id_secteur, lang', 'spip_rubriques', 'id_parent=0', '', '0+titre,titre', '1');
197
-			$id_rubrique = $row['id_rubrique'];
198
-		} else {
199
-			$row = sql_fetsel('lang, id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
200
-		}
201
-
202
-		$champs['id_rubrique'] = $id_rubrique;
203
-		if (isset($desc['field']['id_secteur'])) {
204
-			$champs['id_secteur'] = $row['id_secteur'];
205
-		}
206
-		$lang_rub = $row['lang'];
207
-	}
208
-
209
-	// La langue a la creation : si les liens de traduction sont autorises
210
-	// dans les rubriques, on essaie avec la langue de l'auteur,
211
-	// ou a defaut celle de la rubrique
212
-	// Sinon c'est la langue de la rubrique qui est choisie + heritee
213
-	if (
214
-		isset($desc['field']['lang']) and !empty($GLOBALS['meta']['multi_objets']) and in_array(
215
-			$table_sql,
216
-			explode(',', $GLOBALS['meta']['multi_objets'])
217
-		)
218
-	) {
219
-		lang_select($GLOBALS['visiteur_session']['lang']);
220
-		if (
221
-			in_array(
222
-				$GLOBALS['spip_lang'],
223
-				explode(',', $GLOBALS['meta']['langues_multilingue'])
224
-			)
225
-		) {
226
-			$champs['lang'] = $GLOBALS['spip_lang'];
227
-			if (isset($desc['field']['langue_choisie'])) {
228
-				$champs['langue_choisie'] = 'oui';
229
-			}
230
-		}
231
-	} elseif (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) {
232
-		$champs['lang'] = ($lang_rub ?: $GLOBALS['meta']['langue_site']);
233
-		$champs['langue_choisie'] = 'non';
234
-	}
235
-
236
-	if (isset($desc['field']['statut'])) {
237
-		if (isset($desc['statut_textes_instituer'])) {
238
-			$cles_statut = array_keys($desc['statut_textes_instituer']);
239
-			$champs['statut'] = reset($cles_statut);
240
-		} else {
241
-			$champs['statut'] = 'prepa';
242
-		}
243
-	}
244
-
245
-
246
-	if ((isset($desc['date']) and $d = $desc['date']) or isset($desc['field'][$d = 'date'])) {
247
-		$champs[$d] = date('Y-m-d H:i:s');
248
-	}
249
-
250
-	if ($set) {
251
-		$champs = array_merge($champs, $set);
252
-	}
253
-
254
-	// Envoyer aux plugins
255
-	$champs = pipeline(
256
-		'pre_insertion',
257
-		[
258
-			'args' => [
259
-				'table' => $table_sql,
260
-				'id_parent' => $id_parent,
261
-			],
262
-			'data' => $champs
263
-		]
264
-	);
265
-
266
-	$id = sql_insertq($table_sql, $champs);
267
-
268
-	if ($id) {
269
-		// controler si le serveur n'a pas renvoye une erreur
270
-		// et associer l'auteur sinon
271
-		// si la table n'a pas deja un champ id_auteur
272
-		// et si le form n'a pas poste un id_auteur (meme vide, ce qui sert a annuler cette auto association)
273
-		if (
274
-			$id > 0
275
-			and !isset($desc['field']['id_auteur'])
276
-		) {
277
-			$id_auteur = ((is_null(_request('id_auteur')) and isset($GLOBALS['visiteur_session']['id_auteur'])) ?
278
-				$GLOBALS['visiteur_session']['id_auteur']
279
-				: _request('id_auteur'));
280
-			if ($id_auteur) {
281
-				include_spip('action/editer_auteur');
282
-				auteur_associer($id_auteur, [$objet => $id]);
283
-			}
284
-		}
285
-
286
-		pipeline(
287
-			'post_insertion',
288
-			[
289
-				'args' => [
290
-					'table' => $table_sql,
291
-					'id_parent' => $id_parent,
292
-					'id_objet' => $id,
293
-				],
294
-				'data' => $champs
295
-			]
296
-		);
297
-	}
171
+    $d = null;
172
+    if (($t = objet_type($objet)) !== $objet) {
173
+        spip_log("objet_inserer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
174
+        $objet = $t;
175
+    }
176
+    if (
177
+        include_spip('action/editer_' . $objet)
178
+        and function_exists($inserer = $objet . '_inserer')
179
+    ) {
180
+        return $inserer($id_parent, $set);
181
+    }
182
+
183
+    $table_sql = table_objet_sql($objet);
184
+    $trouver_table = charger_fonction('trouver_table', 'base');
185
+    $desc = $trouver_table($table_sql);
186
+    if (!$desc or !isset($desc['field'])) {
187
+        return 0;
188
+    }
189
+
190
+    $lang_rub = '';
191
+    $champs = [];
192
+    if (isset($desc['field']['id_rubrique'])) {
193
+        // Si id_rubrique vaut 0 ou n'est pas definie, creer l'objet
194
+        // dans la premiere rubrique racine
195
+        if (!$id_rubrique = intval($id_parent)) {
196
+            $row = sql_fetsel('id_rubrique, id_secteur, lang', 'spip_rubriques', 'id_parent=0', '', '0+titre,titre', '1');
197
+            $id_rubrique = $row['id_rubrique'];
198
+        } else {
199
+            $row = sql_fetsel('lang, id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
200
+        }
201
+
202
+        $champs['id_rubrique'] = $id_rubrique;
203
+        if (isset($desc['field']['id_secteur'])) {
204
+            $champs['id_secteur'] = $row['id_secteur'];
205
+        }
206
+        $lang_rub = $row['lang'];
207
+    }
208
+
209
+    // La langue a la creation : si les liens de traduction sont autorises
210
+    // dans les rubriques, on essaie avec la langue de l'auteur,
211
+    // ou a defaut celle de la rubrique
212
+    // Sinon c'est la langue de la rubrique qui est choisie + heritee
213
+    if (
214
+        isset($desc['field']['lang']) and !empty($GLOBALS['meta']['multi_objets']) and in_array(
215
+            $table_sql,
216
+            explode(',', $GLOBALS['meta']['multi_objets'])
217
+        )
218
+    ) {
219
+        lang_select($GLOBALS['visiteur_session']['lang']);
220
+        if (
221
+            in_array(
222
+                $GLOBALS['spip_lang'],
223
+                explode(',', $GLOBALS['meta']['langues_multilingue'])
224
+            )
225
+        ) {
226
+            $champs['lang'] = $GLOBALS['spip_lang'];
227
+            if (isset($desc['field']['langue_choisie'])) {
228
+                $champs['langue_choisie'] = 'oui';
229
+            }
230
+        }
231
+    } elseif (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) {
232
+        $champs['lang'] = ($lang_rub ?: $GLOBALS['meta']['langue_site']);
233
+        $champs['langue_choisie'] = 'non';
234
+    }
235
+
236
+    if (isset($desc['field']['statut'])) {
237
+        if (isset($desc['statut_textes_instituer'])) {
238
+            $cles_statut = array_keys($desc['statut_textes_instituer']);
239
+            $champs['statut'] = reset($cles_statut);
240
+        } else {
241
+            $champs['statut'] = 'prepa';
242
+        }
243
+    }
244
+
245
+
246
+    if ((isset($desc['date']) and $d = $desc['date']) or isset($desc['field'][$d = 'date'])) {
247
+        $champs[$d] = date('Y-m-d H:i:s');
248
+    }
249
+
250
+    if ($set) {
251
+        $champs = array_merge($champs, $set);
252
+    }
253
+
254
+    // Envoyer aux plugins
255
+    $champs = pipeline(
256
+        'pre_insertion',
257
+        [
258
+            'args' => [
259
+                'table' => $table_sql,
260
+                'id_parent' => $id_parent,
261
+            ],
262
+            'data' => $champs
263
+        ]
264
+    );
265
+
266
+    $id = sql_insertq($table_sql, $champs);
267
+
268
+    if ($id) {
269
+        // controler si le serveur n'a pas renvoye une erreur
270
+        // et associer l'auteur sinon
271
+        // si la table n'a pas deja un champ id_auteur
272
+        // et si le form n'a pas poste un id_auteur (meme vide, ce qui sert a annuler cette auto association)
273
+        if (
274
+            $id > 0
275
+            and !isset($desc['field']['id_auteur'])
276
+        ) {
277
+            $id_auteur = ((is_null(_request('id_auteur')) and isset($GLOBALS['visiteur_session']['id_auteur'])) ?
278
+                $GLOBALS['visiteur_session']['id_auteur']
279
+                : _request('id_auteur'));
280
+            if ($id_auteur) {
281
+                include_spip('action/editer_auteur');
282
+                auteur_associer($id_auteur, [$objet => $id]);
283
+            }
284
+        }
285
+
286
+        pipeline(
287
+            'post_insertion',
288
+            [
289
+                'args' => [
290
+                    'table' => $table_sql,
291
+                    'id_parent' => $id_parent,
292
+                    'id_objet' => $id,
293
+                ],
294
+                'data' => $champs
295
+            ]
296
+        );
297
+    }
298 298
 	
299
-	// Appeler une notification
300
-	if ($notifications = charger_fonction('notifications', 'inc')) {
301
-		$notifications(
302
-			"{$objet}_inserer",
303
-			$id,
304
-			[
305
-				'id_parent' => $id_parent,
306
-				'champs' => $champs,
307
-			]
308
-		);
309
-		$notifications(
310
-			'objet_inserer',
311
-			$id,
312
-			[
313
-				'objet' => $objet,
314
-				'id_objet' => $id,
315
-				'id_parent' => $id_parent,
316
-				'champs' => $champs,
317
-			]
318
-		);
319
-	}
320
-
321
-	return $id;
299
+    // Appeler une notification
300
+    if ($notifications = charger_fonction('notifications', 'inc')) {
301
+        $notifications(
302
+            "{$objet}_inserer",
303
+            $id,
304
+            [
305
+                'id_parent' => $id_parent,
306
+                'champs' => $champs,
307
+            ]
308
+        );
309
+        $notifications(
310
+            'objet_inserer',
311
+            $id,
312
+            [
313
+                'objet' => $objet,
314
+                'id_objet' => $id,
315
+                'id_parent' => $id_parent,
316
+                'champs' => $champs,
317
+            ]
318
+        );
319
+    }
320
+
321
+    return $id;
322 322
 }
323 323
 
324 324
 
@@ -335,138 +335,138 @@  discard block
 block discarded – undo
335 335
  * @return string
336 336
  */
337 337
 function objet_instituer($objet, $id, $c, $calcul_rub = true) {
338
-	if (($t = objet_type($objet)) !== $objet) {
339
-		spip_log("objet_instituer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
340
-		$objet = $t;
341
-	}
342
-	if (
343
-		include_spip('action/editer_' . $objet)
344
-		and function_exists($instituer = $objet . '_instituer')
345
-	) {
346
-		return $instituer($id, $c, $calcul_rub);
347
-	}
348
-
349
-	$table_sql = table_objet_sql($objet);
350
-	$trouver_table = charger_fonction('trouver_table', 'base');
351
-	$desc = $trouver_table($table_sql);
352
-	if (!$desc or !isset($desc['field'])) {
353
-		return _L("Impossible d'instituer $objet : non connu en base");
354
-	}
355
-
356
-	include_spip('inc/autoriser');
357
-	include_spip('inc/rubriques');
358
-	include_spip('inc/modifier');
359
-
360
-	$sel = [];
361
-	$sel[] = (isset($desc['field']['statut']) ? 'statut' : "'' as statut");
362
-
363
-	$champ_date = '';
364
-	if (isset($desc['date']) and $desc['date']) {
365
-		$champ_date = $desc['date'];
366
-	} elseif (isset($desc['field']['date'])) {
367
-		$champ_date = 'date';
368
-	}
369
-
370
-	$sel[] = ($champ_date ? "$champ_date as date" : "'' as date");
371
-	$sel[] = (isset($desc['field']['id_rubrique']) ? 'id_rubrique' : '0 as id_rubrique');
372
-
373
-	$row = sql_fetsel($sel, $table_sql, id_table_objet($objet) . '=' . intval($id));
374
-
375
-	$id_rubrique = $row['id_rubrique'];
376
-	$statut_ancien = $statut = $row['statut'];
377
-	$date_ancienne = $date = $row['date'];
378
-	$champs = [];
379
-
380
-	$d = ($date and isset($c[$champ_date])) ? $c[$champ_date] : null;
381
-	$s = (isset($desc['field']['statut']) and isset($c['statut'])) ? $c['statut'] : $statut;
382
-
383
-	// cf autorisations dans inc/instituer_objet
384
-	if ($s != $statut or ($d and $d != $date)) {
385
-		if (
386
-			$id_rubrique ?
387
-			autoriser('publierdans', 'rubrique', $id_rubrique)
388
-			:
389
-			autoriser('instituer', $objet, $id, null, ['statut' => $s])
390
-		) {
391
-			$statut = $champs['statut'] = $s;
392
-		} else {
393
-			if ($s != 'publie' and autoriser('modifier', $objet, $id)) {
394
-				$statut = $champs['statut'] = $s;
395
-			} else {
396
-				spip_log("editer_objet $objet #$id refus " . json_encode($c, JSON_THROW_ON_ERROR), 'editer' . _LOG_INFO_IMPORTANTE);
397
-			}
398
-		}
399
-
400
-		// En cas de publication, fixer la date a "maintenant"
401
-		// sauf si $c commande autre chose
402
-		// ou si l'objet est deja date dans le futur
403
-		// En cas de proposition d'un objet (mais pas depublication), idem
404
-		if ($champ_date) {
405
-			if (
406
-				$champs['statut'] == 'publie'
407
-				or ($champs['statut'] == 'prop' and !in_array($statut_ancien, ['publie', 'prop']))
408
-				or $d
409
-			) {
410
-				if ($d or strtotime($d = $date) > time()) {
411
-					$champs[$champ_date] = $date = $d;
412
-				} else {
413
-					$champs[$champ_date] = $date = date('Y-m-d H:i:s');
414
-				}
415
-			}
416
-		}
417
-	}
418
-
419
-	// Verifier que la rubrique demandee existe et est differente
420
-	// de la rubrique actuelle
421
-	if (
422
-		$id_rubrique
423
-		and isset($c['id_parent'])
424
-		and $id_parent = $c['id_parent']
425
-		and $id_parent != $id_rubrique
426
-		and (sql_fetsel('1', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)))
427
-	) {
428
-		$champs['id_rubrique'] = $id_parent;
429
-
430
-		// si l'objet etait publie
431
-		// et que le demandeur n'est pas admin de la rubrique
432
-		// repasser l'objet en statut 'propose'.
433
-		if (
434
-			$statut == 'publie'
435
-			and !autoriser('publierdans', 'rubrique', $id_rubrique)
436
-		) {
437
-			$champs['statut'] = 'prop';
438
-		}
439
-	}
440
-
441
-
442
-	// Envoyer aux plugins
443
-	$champs = pipeline(
444
-		'pre_edition',
445
-		[
446
-			'args' => [
447
-				'table' => $table_sql,
448
-				'id_objet' => $id,
449
-				'action' => 'instituer',
450
-				'statut_ancien' => $statut_ancien,
451
-				'date_ancienne' => $date_ancienne,
452
-				'id_parent_ancien' => $id_rubrique,
453
-			],
454
-			'data' => $champs
455
-		]
456
-	);
457
-
458
-	if (!(is_countable($champs) ? count($champs) : 0)) {
459
-		return '';
460
-	}
461
-
462
-	// Envoyer les modifs.
463
-	objet_editer_heritage($objet, $id, $id_rubrique, $statut_ancien, $champs, $calcul_rub);
464
-
465
-	// Invalider les caches
466
-	include_spip('inc/invalideur');
467
-	suivre_invalideur("id='$objet/$id'");
468
-
469
-	/*
338
+    if (($t = objet_type($objet)) !== $objet) {
339
+        spip_log("objet_instituer: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
340
+        $objet = $t;
341
+    }
342
+    if (
343
+        include_spip('action/editer_' . $objet)
344
+        and function_exists($instituer = $objet . '_instituer')
345
+    ) {
346
+        return $instituer($id, $c, $calcul_rub);
347
+    }
348
+
349
+    $table_sql = table_objet_sql($objet);
350
+    $trouver_table = charger_fonction('trouver_table', 'base');
351
+    $desc = $trouver_table($table_sql);
352
+    if (!$desc or !isset($desc['field'])) {
353
+        return _L("Impossible d'instituer $objet : non connu en base");
354
+    }
355
+
356
+    include_spip('inc/autoriser');
357
+    include_spip('inc/rubriques');
358
+    include_spip('inc/modifier');
359
+
360
+    $sel = [];
361
+    $sel[] = (isset($desc['field']['statut']) ? 'statut' : "'' as statut");
362
+
363
+    $champ_date = '';
364
+    if (isset($desc['date']) and $desc['date']) {
365
+        $champ_date = $desc['date'];
366
+    } elseif (isset($desc['field']['date'])) {
367
+        $champ_date = 'date';
368
+    }
369
+
370
+    $sel[] = ($champ_date ? "$champ_date as date" : "'' as date");
371
+    $sel[] = (isset($desc['field']['id_rubrique']) ? 'id_rubrique' : '0 as id_rubrique');
372
+
373
+    $row = sql_fetsel($sel, $table_sql, id_table_objet($objet) . '=' . intval($id));
374
+
375
+    $id_rubrique = $row['id_rubrique'];
376
+    $statut_ancien = $statut = $row['statut'];
377
+    $date_ancienne = $date = $row['date'];
378
+    $champs = [];
379
+
380
+    $d = ($date and isset($c[$champ_date])) ? $c[$champ_date] : null;
381
+    $s = (isset($desc['field']['statut']) and isset($c['statut'])) ? $c['statut'] : $statut;
382
+
383
+    // cf autorisations dans inc/instituer_objet
384
+    if ($s != $statut or ($d and $d != $date)) {
385
+        if (
386
+            $id_rubrique ?
387
+            autoriser('publierdans', 'rubrique', $id_rubrique)
388
+            :
389
+            autoriser('instituer', $objet, $id, null, ['statut' => $s])
390
+        ) {
391
+            $statut = $champs['statut'] = $s;
392
+        } else {
393
+            if ($s != 'publie' and autoriser('modifier', $objet, $id)) {
394
+                $statut = $champs['statut'] = $s;
395
+            } else {
396
+                spip_log("editer_objet $objet #$id refus " . json_encode($c, JSON_THROW_ON_ERROR), 'editer' . _LOG_INFO_IMPORTANTE);
397
+            }
398
+        }
399
+
400
+        // En cas de publication, fixer la date a "maintenant"
401
+        // sauf si $c commande autre chose
402
+        // ou si l'objet est deja date dans le futur
403
+        // En cas de proposition d'un objet (mais pas depublication), idem
404
+        if ($champ_date) {
405
+            if (
406
+                $champs['statut'] == 'publie'
407
+                or ($champs['statut'] == 'prop' and !in_array($statut_ancien, ['publie', 'prop']))
408
+                or $d
409
+            ) {
410
+                if ($d or strtotime($d = $date) > time()) {
411
+                    $champs[$champ_date] = $date = $d;
412
+                } else {
413
+                    $champs[$champ_date] = $date = date('Y-m-d H:i:s');
414
+                }
415
+            }
416
+        }
417
+    }
418
+
419
+    // Verifier que la rubrique demandee existe et est differente
420
+    // de la rubrique actuelle
421
+    if (
422
+        $id_rubrique
423
+        and isset($c['id_parent'])
424
+        and $id_parent = $c['id_parent']
425
+        and $id_parent != $id_rubrique
426
+        and (sql_fetsel('1', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)))
427
+    ) {
428
+        $champs['id_rubrique'] = $id_parent;
429
+
430
+        // si l'objet etait publie
431
+        // et que le demandeur n'est pas admin de la rubrique
432
+        // repasser l'objet en statut 'propose'.
433
+        if (
434
+            $statut == 'publie'
435
+            and !autoriser('publierdans', 'rubrique', $id_rubrique)
436
+        ) {
437
+            $champs['statut'] = 'prop';
438
+        }
439
+    }
440
+
441
+
442
+    // Envoyer aux plugins
443
+    $champs = pipeline(
444
+        'pre_edition',
445
+        [
446
+            'args' => [
447
+                'table' => $table_sql,
448
+                'id_objet' => $id,
449
+                'action' => 'instituer',
450
+                'statut_ancien' => $statut_ancien,
451
+                'date_ancienne' => $date_ancienne,
452
+                'id_parent_ancien' => $id_rubrique,
453
+            ],
454
+            'data' => $champs
455
+        ]
456
+    );
457
+
458
+    if (!(is_countable($champs) ? count($champs) : 0)) {
459
+        return '';
460
+    }
461
+
462
+    // Envoyer les modifs.
463
+    objet_editer_heritage($objet, $id, $id_rubrique, $statut_ancien, $champs, $calcul_rub);
464
+
465
+    // Invalider les caches
466
+    include_spip('inc/invalideur');
467
+    suivre_invalideur("id='$objet/$id'");
468
+
469
+    /*
470 470
 	if ($date) {
471 471
 		$t = strtotime($date);
472 472
 		$p = @$GLOBALS['meta']['date_prochain_postdate'];
@@ -475,60 +475,60 @@  discard block
 block discarded – undo
475 475
 		}
476 476
 	}*/
477 477
 
478
-	// Pipeline
479
-	pipeline(
480
-		'post_edition',
481
-		[
482
-			'args' => [
483
-				'table' => $table_sql,
484
-				'id_objet' => $id,
485
-				'action' => 'instituer',
486
-				'statut_ancien' => $statut_ancien,
487
-				'date_ancienne' => $date_ancienne,
488
-				'id_parent_ancien' => $id_rubrique,
489
-			],
490
-			'data' => $champs
491
-		]
492
-	);
493
-
494
-	// Notifications
495
-	if ($notifications = charger_fonction('notifications', 'inc')) {
496
-		$notifications(
497
-			"{$objet}_instituer",
498
-			$id,
499
-			[
500
-				'statut' => $statut,
501
-				'statut_ancien' => $statut_ancien,
502
-				'date' => $date,
503
-				'date_ancienne' => $date_ancienne,
504
-				'id_parent_ancien' => $id_rubrique,
505
-				'champs' => $champs,
506
-			]
507
-		);
508
-		$notifications(
509
-			'objet_instituer',
510
-			$id,
511
-			[
512
-				'objet' => $objet,
513
-				'id_objet' => $id,
514
-				'statut' => $statut,
515
-				'statut_ancien' => $statut_ancien,
516
-				'date' => $date,
517
-				'date_ancienne' => $date_ancienne,
518
-				'id_parent_ancien' => $id_rubrique,
519
-				'champs' => $champs,
520
-			]
521
-		);
478
+    // Pipeline
479
+    pipeline(
480
+        'post_edition',
481
+        [
482
+            'args' => [
483
+                'table' => $table_sql,
484
+                'id_objet' => $id,
485
+                'action' => 'instituer',
486
+                'statut_ancien' => $statut_ancien,
487
+                'date_ancienne' => $date_ancienne,
488
+                'id_parent_ancien' => $id_rubrique,
489
+            ],
490
+            'data' => $champs
491
+        ]
492
+    );
493
+
494
+    // Notifications
495
+    if ($notifications = charger_fonction('notifications', 'inc')) {
496
+        $notifications(
497
+            "{$objet}_instituer",
498
+            $id,
499
+            [
500
+                'statut' => $statut,
501
+                'statut_ancien' => $statut_ancien,
502
+                'date' => $date,
503
+                'date_ancienne' => $date_ancienne,
504
+                'id_parent_ancien' => $id_rubrique,
505
+                'champs' => $champs,
506
+            ]
507
+        );
508
+        $notifications(
509
+            'objet_instituer',
510
+            $id,
511
+            [
512
+                'objet' => $objet,
513
+                'id_objet' => $id,
514
+                'statut' => $statut,
515
+                'statut_ancien' => $statut_ancien,
516
+                'date' => $date,
517
+                'date_ancienne' => $date_ancienne,
518
+                'id_parent_ancien' => $id_rubrique,
519
+                'champs' => $champs,
520
+            ]
521
+        );
522 522
 		
523
-		// Rétro-compat
524
-		$notifications(
525
-			"instituer$objet",
526
-			$id,
527
-			['statut' => $statut, 'statut_ancien' => $statut_ancien, 'date' => $date, 'date_ancienne' => $date_ancienne]
528
-		);
529
-	}
530
-
531
-	return ''; // pas d'erreur
523
+        // Rétro-compat
524
+        $notifications(
525
+            "instituer$objet",
526
+            $id,
527
+            ['statut' => $statut, 'statut_ancien' => $statut_ancien, 'date' => $date, 'date_ancienne' => $date_ancienne]
528
+        );
529
+    }
530
+
531
+    return ''; // pas d'erreur
532 532
 }
533 533
 
534 534
 /**
@@ -543,51 +543,51 @@  discard block
 block discarded – undo
543 543
  * @return void
544 544
  */
545 545
 function objet_editer_heritage($objet, $id, $id_rubrique, $statut, $champs, $cond = true) {
546
-	$table_sql = table_objet_sql($objet);
547
-	$trouver_table = charger_fonction('trouver_table', 'base');
548
-	$desc = $trouver_table($table_sql);
549
-
550
-	// Si on deplace l'objet
551
-	// changer aussi son secteur et sa langue (si heritee)
552
-	if (isset($champs['id_rubrique'])) {
553
-		$row_rub = sql_fetsel('id_secteur, lang', 'spip_rubriques', 'id_rubrique=' . sql_quote($champs['id_rubrique']));
554
-		$langue = $row_rub['lang'];
555
-
556
-		if (isset($desc['field']['id_secteur'])) {
557
-			$champs['id_secteur'] = $row_rub['id_secteur'];
558
-		}
559
-
560
-		if (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) {
561
-			if (
562
-				sql_fetsel(
563
-					'1',
564
-					$table_sql,
565
-					id_table_objet($objet) . '=' . intval($id) . " AND langue_choisie<>'oui' AND lang<>" . sql_quote($langue)
566
-				)
567
-			) {
568
-				$champs['lang'] = $langue;
569
-			}
570
-		}
571
-	}
572
-
573
-	if (!$champs) {
574
-		return;
575
-	}
576
-	sql_updateq($table_sql, $champs, id_table_objet($objet) . '=' . intval($id));
577
-
578
-	// Changer le statut des rubriques concernees
579
-	if ($cond) {
580
-		include_spip('inc/rubriques');
581
-		//$postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false;
582
-		$postdate = false;
583
-		// On rajoute les infos de l'objet
584
-		$infos = [
585
-			'objet' => $objet,
586
-			'id_objet' => $id,
587
-			'statut_ancien' => $statut,
588
-		];
589
-		calculer_rubriques_if($id_rubrique, $champs, $infos, $postdate);
590
-	}
546
+    $table_sql = table_objet_sql($objet);
547
+    $trouver_table = charger_fonction('trouver_table', 'base');
548
+    $desc = $trouver_table($table_sql);
549
+
550
+    // Si on deplace l'objet
551
+    // changer aussi son secteur et sa langue (si heritee)
552
+    if (isset($champs['id_rubrique'])) {
553
+        $row_rub = sql_fetsel('id_secteur, lang', 'spip_rubriques', 'id_rubrique=' . sql_quote($champs['id_rubrique']));
554
+        $langue = $row_rub['lang'];
555
+
556
+        if (isset($desc['field']['id_secteur'])) {
557
+            $champs['id_secteur'] = $row_rub['id_secteur'];
558
+        }
559
+
560
+        if (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) {
561
+            if (
562
+                sql_fetsel(
563
+                    '1',
564
+                    $table_sql,
565
+                    id_table_objet($objet) . '=' . intval($id) . " AND langue_choisie<>'oui' AND lang<>" . sql_quote($langue)
566
+                )
567
+            ) {
568
+                $champs['lang'] = $langue;
569
+            }
570
+        }
571
+    }
572
+
573
+    if (!$champs) {
574
+        return;
575
+    }
576
+    sql_updateq($table_sql, $champs, id_table_objet($objet) . '=' . intval($id));
577
+
578
+    // Changer le statut des rubriques concernees
579
+    if ($cond) {
580
+        include_spip('inc/rubriques');
581
+        //$postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false;
582
+        $postdate = false;
583
+        // On rajoute les infos de l'objet
584
+        $infos = [
585
+            'objet' => $objet,
586
+            'id_objet' => $id,
587
+            'statut_ancien' => $statut,
588
+        ];
589
+        calculer_rubriques_if($id_rubrique, $champs, $infos, $postdate);
590
+    }
591 591
 }
592 592
 
593 593
 
@@ -616,75 +616,75 @@  discard block
 block discarded – undo
616 616
  *     string|int : valeur du champ demande pour l'objet demande
617 617
  */
618 618
 function objet_lire($objet, $valeur_id, $options = []) {
619
-	if (($t = objet_type($objet)) !== $objet) {
620
-		spip_log("objet_lire: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
621
-		$objet = $t;
622
-	}
623
-
624
-	// tableau du cache des descriptions et des id d'objet (au sens id_xxx).
625
-	// Les tableaux sont toujours indexés par le trio [objet][cle][valeur_cle]
626
-	static $descriptions = [];
627
-
628
-	// On détermine le nom du champ id de la table.
629
-	include_spip('base/objets');
630
-	$primary = id_table_objet($objet);
631
-
632
-	// On détermine l'id à utiliser.
633
-	$champ_id = (!empty($options['champ_id']) ? $options['champ_id'] : $primary);
634
-
635
-	// Si l'objet n'a pas encore été stocké, il faut récupérer sa description complète.
636
-	if (
637
-		!isset($descriptions[$objet][$champ_id][$valeur_id])
638
-		or (isset($options['force']) and $options['force'])
639
-	) {
640
-		// Il est possible pour un type d'objet de fournir une fonction de lecture de tous les champs d'un objet.
641
-		if (
642
-			include_spip('action/editer_' . $objet)
643
-			and function_exists($lire = "{$objet}_lire_champs")
644
-		) {
645
-			$valeurs = $lire($objet, $valeur_id, $champ_id);
646
-		} else {
647
-			// On récupère la table SQL à partir du type d'objet.
648
-			$table = table_objet_sql($objet);
649
-
650
-			// La condition est appliquée sur le champ désigné par l'utilisateur.
651
-			$where = [
652
-				$champ_id . '=' . sql_quote($valeur_id)
653
-			];
654
-
655
-			// Acquisition de tous les champs de l'objet : si l'accès SQL retourne une erreur on renvoie un tableau vide.
656
-			$valeurs = sql_fetsel('*', $table, $where);
657
-		}
658
-
659
-		if (!$valeurs) {
660
-			$valeurs = false;
661
-		}
662
-
663
-		$descriptions[$objet][$champ_id][$valeur_id] = $valeurs;
664
-
665
-		if ($champ_id !== $primary and isset($valeurs[$primary])) {
666
-			$descriptions[$objet][$primary][$valeurs[$primary]] = $valeurs;
667
-			$descriptions[$objet][$champ_id][$valeur_id] = &$descriptions[$objet][$primary][$valeurs[$primary]];
668
-		}
669
-	}
670
-
671
-	$retour = $descriptions[$objet][$champ_id][$valeur_id];
672
-
673
-	// On ne retourne maintenant que les champs demandés.
674
-	// - on détermine les informations à renvoyer.
675
-	if ($retour and !empty($options['champs'])) {
676
-		$champs = $options['champs'];
677
-		// Extraction des seules informations demandées.
678
-		// -- si on demande une information unique on renvoie la valeur simple, sinon on renvoie un tableau.
679
-		// -- si une information n'est pas un champ valide elle n'est pas renvoyée sans renvoyer d'erreur.
680
-		if (is_array($champs)) {
681
-			// Tableau des informations valides
682
-			$retour = array_intersect_key($retour, array_flip($champs));
683
-		} else {
684
-			// Valeur unique demandée.
685
-			$retour = ($retour[$champs] ?? false);
686
-		}
687
-	}
688
-
689
-	return $retour;
619
+    if (($t = objet_type($objet)) !== $objet) {
620
+        spip_log("objet_lire: appel avec type $objet invalide au lieu de $t", 'editer' . _LOG_INFO_IMPORTANTE);
621
+        $objet = $t;
622
+    }
623
+
624
+    // tableau du cache des descriptions et des id d'objet (au sens id_xxx).
625
+    // Les tableaux sont toujours indexés par le trio [objet][cle][valeur_cle]
626
+    static $descriptions = [];
627
+
628
+    // On détermine le nom du champ id de la table.
629
+    include_spip('base/objets');
630
+    $primary = id_table_objet($objet);
631
+
632
+    // On détermine l'id à utiliser.
633
+    $champ_id = (!empty($options['champ_id']) ? $options['champ_id'] : $primary);
634
+
635
+    // Si l'objet n'a pas encore été stocké, il faut récupérer sa description complète.
636
+    if (
637
+        !isset($descriptions[$objet][$champ_id][$valeur_id])
638
+        or (isset($options['force']) and $options['force'])
639
+    ) {
640
+        // Il est possible pour un type d'objet de fournir une fonction de lecture de tous les champs d'un objet.
641
+        if (
642
+            include_spip('action/editer_' . $objet)
643
+            and function_exists($lire = "{$objet}_lire_champs")
644
+        ) {
645
+            $valeurs = $lire($objet, $valeur_id, $champ_id);
646
+        } else {
647
+            // On récupère la table SQL à partir du type d'objet.
648
+            $table = table_objet_sql($objet);
649
+
650
+            // La condition est appliquée sur le champ désigné par l'utilisateur.
651
+            $where = [
652
+                $champ_id . '=' . sql_quote($valeur_id)
653
+            ];
654
+
655
+            // Acquisition de tous les champs de l'objet : si l'accès SQL retourne une erreur on renvoie un tableau vide.
656
+            $valeurs = sql_fetsel('*', $table, $where);
657
+        }
658
+
659
+        if (!$valeurs) {
660
+            $valeurs = false;
661
+        }
662
+
663
+        $descriptions[$objet][$champ_id][$valeur_id] = $valeurs;
664
+
665
+        if ($champ_id !== $primary and isset($valeurs[$primary])) {
666
+            $descriptions[$objet][$primary][$valeurs[$primary]] = $valeurs;
667
+            $descriptions[$objet][$champ_id][$valeur_id] = &$descriptions[$objet][$primary][$valeurs[$primary]];
668
+        }
669
+    }
670
+
671
+    $retour = $descriptions[$objet][$champ_id][$valeur_id];
672
+
673
+    // On ne retourne maintenant que les champs demandés.
674
+    // - on détermine les informations à renvoyer.
675
+    if ($retour and !empty($options['champs'])) {
676
+        $champs = $options['champs'];
677
+        // Extraction des seules informations demandées.
678
+        // -- si on demande une information unique on renvoie la valeur simple, sinon on renvoie un tableau.
679
+        // -- si une information n'est pas un champ valide elle n'est pas renvoyée sans renvoyer d'erreur.
680
+        if (is_array($champs)) {
681
+            // Tableau des informations valides
682
+            $retour = array_intersect_key($retour, array_flip($champs));
683
+        } else {
684
+            // Valeur unique demandée.
685
+            $retour = ($retour[$champs] ?? false);
686
+        }
687
+    }
688
+
689
+    return $retour;
690 690
 }
Please login to merge, or discard this patch.
ecrire/inc/bandeau.php 2 patches
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
 			$_id = $e['id_table_objet'];
51 51
 			if (isset($contexte[$_id]) and $id = intval($contexte[$_id])) {
52 52
 				$table = $e['table_objet_sql'];
53
-				$row = sql_fetsel('*', $table, "$_id=" . intval($id));
53
+				$row = sql_fetsel('*', $table, "$_id=".intval($id));
54 54
 				if (isset($row['id_rubrique'])) {
55 55
 					$contexte['id_rubrique'] = $row['id_rubrique'];
56 56
 					if (isset($row['id_secteur'])) {
@@ -114,8 +114,8 @@  discard block
 block discarded – undo
114 114
 				$boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position)
115 115
 					+ [
116 116
 						$id => new Bouton(
117
-							($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '',  // icone
118
-							$infos['titre'],  // titre
117
+							($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '', // icone
118
+							$infos['titre'], // titre
119 119
 							(isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
120 120
 							(isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
121 121
 						)
@@ -132,8 +132,8 @@  discard block
 block discarded – undo
132 132
 				$boutons_admin = array_slice($boutons_admin, 0, $position)
133 133
 					+ [
134 134
 						$id => new Bouton(
135
-							($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '',  // icone
136
-							$infos['titre'],  // titre
135
+							($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '', // icone
136
+							$infos['titre'], // titre
137 137
 							(isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
138 138
 							(isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
139 139
 						)
@@ -220,7 +220,7 @@  discard block
 block discarded – undo
220 220
 		$url = str_replace('&amp;', '&', $url);
221 221
 		while (preg_match(',[&?]([a-z_]+)=@([a-z_]+)@,i', $url, $matches)) {
222 222
 			if ($matches[2] == 'id_secteur' and !isset($contexte['id_secteur']) and isset($contexte['id_rubrique'])) {
223
-				$contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($contexte['id_rubrique']));
223
+				$contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.intval($contexte['id_rubrique']));
224 224
 			}
225 225
 			$val = _request($matches[2], $contexte);
226 226
 			$url = parametre_url($url, $matches[1], $val ?: '', '&');
Please login to merge, or discard this patch.
Indentation   +149 added lines, -149 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
 include_spip('inc/boutons');
@@ -39,33 +39,33 @@  discard block
 block discarded – undo
39 39
  *     contexte
40 40
  **/
41 41
 function definir_barre_contexte($contexte = null) {
42
-	if (is_null($contexte)) {
43
-		$contexte = $_GET;
44
-	} elseif (is_string($contexte)) {
45
-		$contexte = unserialize($contexte);
46
-	}
47
-	if (!isset($contexte['id_rubrique']) and isset($contexte['exec'])) {
48
-		if (!function_exists('trouver_objet_exec')) {
49
-			include_spip('inc/pipelines_ecrire');
50
-		}
51
-		if ($e = trouver_objet_exec($contexte['exec'])) {
52
-			$_id = $e['id_table_objet'];
53
-			if (isset($contexte[$_id]) and $id = intval($contexte[$_id])) {
54
-				$table = $e['table_objet_sql'];
55
-				$row = sql_fetsel('*', $table, "$_id=" . intval($id));
56
-				if (isset($row['id_rubrique'])) {
57
-					$contexte['id_rubrique'] = $row['id_rubrique'];
58
-					if (isset($row['id_secteur'])) {
59
-						$contexte['id_secteur'] = $row['id_secteur'];
60
-					}
61
-				} elseif (isset($row['id_groupe'])) {
62
-					// TODO supprimer ce bloc quand https://core.spip.net/issues/3844 sera réalisé
63
-					$contexte['id_groupe'] = $row['id_groupe'];
64
-				}
65
-			}
66
-		}
67
-	}
68
-	return $contexte;
42
+    if (is_null($contexte)) {
43
+        $contexte = $_GET;
44
+    } elseif (is_string($contexte)) {
45
+        $contexte = unserialize($contexte);
46
+    }
47
+    if (!isset($contexte['id_rubrique']) and isset($contexte['exec'])) {
48
+        if (!function_exists('trouver_objet_exec')) {
49
+            include_spip('inc/pipelines_ecrire');
50
+        }
51
+        if ($e = trouver_objet_exec($contexte['exec'])) {
52
+            $_id = $e['id_table_objet'];
53
+            if (isset($contexte[$_id]) and $id = intval($contexte[$_id])) {
54
+                $table = $e['table_objet_sql'];
55
+                $row = sql_fetsel('*', $table, "$_id=" . intval($id));
56
+                if (isset($row['id_rubrique'])) {
57
+                    $contexte['id_rubrique'] = $row['id_rubrique'];
58
+                    if (isset($row['id_secteur'])) {
59
+                        $contexte['id_secteur'] = $row['id_secteur'];
60
+                    }
61
+                } elseif (isset($row['id_groupe'])) {
62
+                    // TODO supprimer ce bloc quand https://core.spip.net/issues/3844 sera réalisé
63
+                    $contexte['id_groupe'] = $row['id_groupe'];
64
+                }
65
+            }
66
+        }
67
+    }
68
+    return $contexte;
69 69
 }
70 70
 
71 71
 /**
@@ -81,89 +81,89 @@  discard block
 block discarded – undo
81 81
  * @return array
82 82
  */
83 83
 function definir_barre_boutons($contexte = [], $icones = true, $autorise = true) {
84
-	include_spip('inc/autoriser');
85
-	$boutons_admin = [];
84
+    include_spip('inc/autoriser');
85
+    $boutons_admin = [];
86 86
 
87
-	// les boutons du core, issus de ecrire/paquet.xml
88
-	$liste_boutons = [];
87
+    // les boutons du core, issus de ecrire/paquet.xml
88
+    $liste_boutons = [];
89 89
 
90
-	// ajouter les boutons issus des plugin via paquet.xml
91
-	if (
92
-		function_exists('boutons_plugins')
93
-		and is_array($liste_boutons_plugins = boutons_plugins())
94
-	) {
95
-		$liste_boutons = &$liste_boutons_plugins;
96
-	}
90
+    // ajouter les boutons issus des plugin via paquet.xml
91
+    if (
92
+        function_exists('boutons_plugins')
93
+        and is_array($liste_boutons_plugins = boutons_plugins())
94
+    ) {
95
+        $liste_boutons = &$liste_boutons_plugins;
96
+    }
97 97
 
98
-	foreach ($liste_boutons as $id => $infos) {
99
-		$parent = '';
100
-		// les boutons principaux ne sont pas soumis a autorisation
101
-		if (
102
-			!isset($infos['parent'])
103
-			or !($parent = $infos['parent'])
104
-			or !$autorise
105
-			or autoriser('menu', "_$id", 0, null, ['contexte' => $contexte])
106
-		) {
107
-			if (
108
-				$parent
109
-				and $parent = preg_replace(',^bando_,', 'menu_', $parent)
110
-				and isset($boutons_admin[$parent])
111
-			) {
112
-				$position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
113
-				if ($position < 0) {
114
-					$position = count($boutons_admin[$parent]->sousmenu) + 1 + $position;
115
-				}
116
-				$boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position)
117
-					+ [
118
-						$id => new Bouton(
119
-							($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '',  // icone
120
-							$infos['titre'],  // titre
121
-							(isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
122
-							(isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
123
-						)
124
-					]
125
-					+ array_slice($boutons_admin[$parent]->sousmenu, $position, 100);
126
-			}
127
-			if (
128
-				!$parent
129
-				// provisoire, eviter les vieux boutons
130
-				and (!in_array($id, ['forum', 'statistiques_visites']))
131
-				and (!$autorise or autoriser('menugrandeentree', "_$id", 0, null, ['contexte' => $contexte]))
132
-			) {
133
-				$position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin);
134
-				$boutons_admin = array_slice($boutons_admin, 0, $position)
135
-					+ [
136
-						$id => new Bouton(
137
-							($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '',  // icone
138
-							$infos['titre'],  // titre
139
-							(isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
140
-							(isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
141
-						)
142
-					]
143
-					+ array_slice($boutons_admin, $position, 100);
144
-			}
145
-		}
146
-	}
147
-	$boutons_admin = pipeline('ajouter_menus', $boutons_admin);
98
+    foreach ($liste_boutons as $id => $infos) {
99
+        $parent = '';
100
+        // les boutons principaux ne sont pas soumis a autorisation
101
+        if (
102
+            !isset($infos['parent'])
103
+            or !($parent = $infos['parent'])
104
+            or !$autorise
105
+            or autoriser('menu', "_$id", 0, null, ['contexte' => $contexte])
106
+        ) {
107
+            if (
108
+                $parent
109
+                and $parent = preg_replace(',^bando_,', 'menu_', $parent)
110
+                and isset($boutons_admin[$parent])
111
+            ) {
112
+                $position = (isset($infos['position']) and strlen($infos['position'])) ? intval($infos['position']) : count($boutons_admin[$parent]->sousmenu);
113
+                if ($position < 0) {
114
+                    $position = count($boutons_admin[$parent]->sousmenu) + 1 + $position;
115
+                }
116
+                $boutons_admin[$parent]->sousmenu = array_slice($boutons_admin[$parent]->sousmenu, 0, $position)
117
+                    + [
118
+                        $id => new Bouton(
119
+                            ($icones and !empty($infos['icone'])) ? find_in_theme($infos['icone']) : '',  // icone
120
+                            $infos['titre'],  // titre
121
+                            (isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
122
+                            (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
123
+                        )
124
+                    ]
125
+                    + array_slice($boutons_admin[$parent]->sousmenu, $position, 100);
126
+            }
127
+            if (
128
+                !$parent
129
+                // provisoire, eviter les vieux boutons
130
+                and (!in_array($id, ['forum', 'statistiques_visites']))
131
+                and (!$autorise or autoriser('menugrandeentree', "_$id", 0, null, ['contexte' => $contexte]))
132
+            ) {
133
+                $position = (isset($infos['position']) and $infos['position']) ? $infos['position'] : count($boutons_admin);
134
+                $boutons_admin = array_slice($boutons_admin, 0, $position)
135
+                    + [
136
+                        $id => new Bouton(
137
+                            ($icones and isset($infos['icone']) and $infos['icone']) ? find_in_theme($infos['icone']) : '',  // icone
138
+                            $infos['titre'],  // titre
139
+                            (isset($infos['action']) and $infos['action']) ? $infos['action'] : null,
140
+                            (isset($infos['parametres']) and $infos['parametres']) ? $infos['parametres'] : null
141
+                        )
142
+                    ]
143
+                    + array_slice($boutons_admin, $position, 100);
144
+            }
145
+        }
146
+    }
147
+    $boutons_admin = pipeline('ajouter_menus', $boutons_admin);
148 148
 
149
-	// définir les favoris et positions d’origine
150
-	if ($boutons_admin) {
151
-		$menus_favoris = obtenir_menus_favoris();
152
-		$i = 1;
153
-		foreach ($boutons_admin as $key => $menu) {
154
-			$menu->favori = (int) table_valeur($menus_favoris, $key, false);
155
-			$menu->position = $i++;
156
-			if ($menu->sousmenu) {
157
-				$j = 1;
158
-				foreach ($menu->sousmenu as $key => $bouton) {
159
-					$bouton->favori = (int) table_valeur($menus_favoris, $key, false);
160
-					$bouton->position = $j++;
161
-				}
162
-			}
163
-		}
164
-	}
149
+    // définir les favoris et positions d’origine
150
+    if ($boutons_admin) {
151
+        $menus_favoris = obtenir_menus_favoris();
152
+        $i = 1;
153
+        foreach ($boutons_admin as $key => $menu) {
154
+            $menu->favori = (int) table_valeur($menus_favoris, $key, false);
155
+            $menu->position = $i++;
156
+            if ($menu->sousmenu) {
157
+                $j = 1;
158
+                foreach ($menu->sousmenu as $key => $bouton) {
159
+                    $bouton->favori = (int) table_valeur($menus_favoris, $key, false);
160
+                    $bouton->position = $j++;
161
+                }
162
+            }
163
+        }
164
+    }
165 165
 
166
-	return $boutons_admin;
166
+    return $boutons_admin;
167 167
 }
168 168
 
169 169
 /**
@@ -175,22 +175,22 @@  discard block
 block discarded – undo
175 175
  * @return Bouton[]
176 176
  */
177 177
 function trier_boutons_enfants_par_alpha($menus, $avec_favoris = false) {
178
-	foreach ($menus as $menu) {
179
-		if ($menu->sousmenu) {
180
-			$libelles = $isfavoris = $favoris = [];
181
-			foreach ($menu->sousmenu as $key => $item) {
182
-				$libelles[$key] = strtolower(translitteration(_T($item->libelle)));
183
-				$isfavoris[$key] = (bool) $item->favori;
184
-				$favoris[$key] = $item->favori;
185
-			}
186
-			if ($avec_favoris) {
187
-				array_multisort($isfavoris, SORT_DESC, $favoris, SORT_ASC, $libelles, SORT_ASC, $menu->sousmenu);
188
-			} else {
189
-				array_multisort($libelles, SORT_ASC, $menu->sousmenu);
190
-			}
191
-		}
192
-	}
193
-	return $menus;
178
+    foreach ($menus as $menu) {
179
+        if ($menu->sousmenu) {
180
+            $libelles = $isfavoris = $favoris = [];
181
+            foreach ($menu->sousmenu as $key => $item) {
182
+                $libelles[$key] = strtolower(translitteration(_T($item->libelle)));
183
+                $isfavoris[$key] = (bool) $item->favori;
184
+                $favoris[$key] = $item->favori;
185
+            }
186
+            if ($avec_favoris) {
187
+                array_multisort($isfavoris, SORT_DESC, $favoris, SORT_ASC, $libelles, SORT_ASC, $menu->sousmenu);
188
+            } else {
189
+                array_multisort($libelles, SORT_ASC, $menu->sousmenu);
190
+            }
191
+        }
192
+    }
193
+    return $menus;
194 194
 }
195 195
 
196 196
 /**
@@ -201,7 +201,7 @@  discard block
 block discarded – undo
201 201
  * @return Bouton[]
202 202
  */
203 203
 function trier_boutons_enfants_par_favoris_alpha($menus) {
204
-	return trier_boutons_enfants_par_alpha($menus, true);
204
+    return trier_boutons_enfants_par_alpha($menus, true);
205 205
 }
206 206
 
207 207
 
@@ -214,23 +214,23 @@  discard block
 block discarded – undo
214 214
  * @return string
215 215
  */
216 216
 function bandeau_creer_url($url, $args = '', $contexte = null) {
217
-	if (!preg_match(',[\/\?],', $url)) {
218
-		$url = generer_url_ecrire($url, $args, true);
219
-		// recuperer les parametres du contexte demande par l'url sous la forme
220
-		// &truc=@machin@
221
-		// @machin@ etant remplace par _request('machin')
222
-		$url = str_replace('&amp;', '&', $url);
223
-		while (preg_match(',[&?]([a-z_]+)=@([a-z_]+)@,i', $url, $matches)) {
224
-			if ($matches[2] == 'id_secteur' and !isset($contexte['id_secteur']) and isset($contexte['id_rubrique'])) {
225
-				$contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($contexte['id_rubrique']));
226
-			}
227
-			$val = _request($matches[2], $contexte);
228
-			$url = parametre_url($url, $matches[1], $val ?: '', '&');
229
-		}
230
-		$url = str_replace('&', '&amp;', $url);
231
-	}
217
+    if (!preg_match(',[\/\?],', $url)) {
218
+        $url = generer_url_ecrire($url, $args, true);
219
+        // recuperer les parametres du contexte demande par l'url sous la forme
220
+        // &truc=@machin@
221
+        // @machin@ etant remplace par _request('machin')
222
+        $url = str_replace('&amp;', '&', $url);
223
+        while (preg_match(',[&?]([a-z_]+)=@([a-z_]+)@,i', $url, $matches)) {
224
+            if ($matches[2] == 'id_secteur' and !isset($contexte['id_secteur']) and isset($contexte['id_rubrique'])) {
225
+                $contexte['id_secteur'] = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($contexte['id_rubrique']));
226
+            }
227
+            $val = _request($matches[2], $contexte);
228
+            $url = parametre_url($url, $matches[1], $val ?: '', '&');
229
+        }
230
+        $url = str_replace('&', '&amp;', $url);
231
+    }
232 232
 
233
-	return $url;
233
+    return $url;
234 234
 }
235 235
 
236 236
 /**
@@ -240,7 +240,7 @@  discard block
 block discarded – undo
240 240
  *     Code HTML du bandeau
241 241
  */
242 242
 function inc_bandeau_dist() {
243
-	return recuperer_fond('prive/squelettes/inclure/barre-nav', $_GET);
243
+    return recuperer_fond('prive/squelettes/inclure/barre-nav', $_GET);
244 244
 }
245 245
 
246 246
 
@@ -249,13 +249,13 @@  discard block
 block discarded – undo
249 249
  * @return array
250 250
  */
251 251
 function obtenir_menus_favoris() {
252
-	if (
253
-		isset($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
254
-		and is_array($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
255
-		and $GLOBALS['visiteur_session']['prefs']['menus_favoris']
256
-	) {
257
-		return $GLOBALS['visiteur_session']['prefs']['menus_favoris'];
258
-	}
259
-	$definir_menus_favoris = charger_fonction('definir_menus_favoris', 'inc');
260
-	return $definir_menus_favoris();
252
+    if (
253
+        isset($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
254
+        and is_array($GLOBALS['visiteur_session']['prefs']['menus_favoris'])
255
+        and $GLOBALS['visiteur_session']['prefs']['menus_favoris']
256
+    ) {
257
+        return $GLOBALS['visiteur_session']['prefs']['menus_favoris'];
258
+    }
259
+    $definir_menus_favoris = charger_fonction('definir_menus_favoris', 'inc');
260
+    return $definir_menus_favoris();
261 261
 }
Please login to merge, or discard this patch.
ecrire/inc/lang.php 2 patches
Spacing   +10 added lines, -12 removed lines patch added patch discarded remove patch
@@ -40,13 +40,13 @@  discard block
 block discarded – undo
40 40
 function changer_langue($lang, $liste_langues = null) {
41 41
 
42 42
 	if (is_null($liste_langues)) {
43
-		$liste_langues = ($GLOBALS['meta']['langues_proposees'] ?? '') . ',' . ($GLOBALS['meta']['langues_multilingue'] ?? '');
43
+		$liste_langues = ($GLOBALS['meta']['langues_proposees'] ?? '').','.($GLOBALS['meta']['langues_multilingue'] ?? '');
44 44
 	} else {
45 45
 		if (is_array($liste_langues)) {
46 46
 			$liste_langues = implode(',', $liste_langues);
47 47
 		}
48 48
 	}
49
-	$liste_langues = ',' . $liste_langues . ',';
49
+	$liste_langues = ','.$liste_langues.',';
50 50
 
51 51
 	// Si la langue demandee n'existe pas, on essaie d'autres variantes
52 52
 	// Exemple : 'pt-br' => 'pt_br' => 'pt'
@@ -192,7 +192,7 @@  discard block
 block discarded – undo
192 192
 	}
193 193
 	foreach ($langues as $l) {
194 194
 		$selected = ($l == $default) ? ' selected=\'selected\'' : '';
195
-		$ret .= "<option value='$l'$selected>[" . $l . '] ' . traduire_nom_langue($l) . "</option>\n";
195
+		$ret .= "<option value='$l'$selected>[".$l.'] '.traduire_nom_langue($l)."</option>\n";
196 196
 	}
197 197
 
198 198
 	if (!test_espace_prive()) {
@@ -210,23 +210,21 @@  discard block
 block discarded – undo
210 210
 		$base,
211 211
 		$cible,
212 212
 		(select_langues($nom_select, $change, $ret)
213
-			. "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
213
+			. "<noscript><div style='display:inline'><input type='submit' class='fondo' value='"._T('bouton_changer')."' /></div></noscript>"),
214 214
 		" method='post'"
215 215
 	);
216 216
 }
217 217
 
218 218
 function select_langues($nom_select, $change, $options, $label = '') {
219 219
 	static $cpt = 0;
220
-	$id = 'menu_langues' . $cpt++;
220
+	$id = 'menu_langues'.$cpt++;
221 221
 
222 222
 	return
223
-		"<label for='$id'>" . ($label ?: _T('info_langues')) . '</label> ' .
223
+		"<label for='$id'>".($label ?: _T('info_langues')).'</label> '.
224 224
 		"<select name='$nom_select' id='$id' "
225 225
 		. ((!test_espace_prive()) ?
226
-			("class='forml menu_langues'") :
227
-			(($nom_select == 'var_lang_ecrire') ?
228
-				("class='lang_ecrire'") :
229
-				"class='fondl'"))
226
+			("class='forml menu_langues'") : (($nom_select == 'var_lang_ecrire') ?
227
+				("class='lang_ecrire'") : "class='fondl'"))
230 228
 		. $change
231 229
 		. ">\n"
232 230
 		. $options
@@ -352,7 +350,7 @@  discard block
 block discarded – undo
352 350
 		and (!isset($GLOBALS['spip_lang'])
353 351
 			or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
354 352
 	) {
355
-		return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
353
+		return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues); //@:install
356 354
 	}
357 355
 	// en theorie là, la globale est définie, sinon c'est un problème.
358 356
 	if (!isset($GLOBALS['spip_lang'])) {
@@ -455,7 +453,7 @@  discard block
 block discarded – undo
455 453
 	if (!isset($GLOBALS['meta']['langue_site'])) {
456 454
 		// Initialisation : le francais si dispo, sinon la premiere langue trouvee
457 455
 		$GLOBALS['meta']['langue_site'] = $tout =
458
-			(!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', (string) ",$all_langs,") !== false))
456
+			(!$all_langs or (strpos(','._LANGUE_PAR_DEFAUT.',', (string) ",$all_langs,") !== false))
459 457
 				? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
460 458
 		ecrire_meta('langue_site', $tout);
461 459
 	}
Please login to merge, or discard this patch.
Indentation   +256 added lines, -256 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@  discard block
 block discarded – undo
15 15
  * @package SPIP\Core\Langue
16 16
  **/
17 17
 if (!defined('_ECRIRE_INC_VERSION')) {
18
-	return;
18
+    return;
19 19
 }
20 20
 
21 21
 
@@ -38,35 +38,35 @@  discard block
 block discarded – undo
38 38
  **/
39 39
 function changer_langue($lang, $liste_langues = null) {
40 40
 
41
-	if (is_null($liste_langues)) {
42
-		$liste_langues = ($GLOBALS['meta']['langues_proposees'] ?? '') . ',' . ($GLOBALS['meta']['langues_multilingue'] ?? '');
43
-	} else {
44
-		if (is_array($liste_langues)) {
45
-			$liste_langues = implode(',', $liste_langues);
46
-		}
47
-	}
48
-	$liste_langues = ',' . $liste_langues . ',';
49
-
50
-	// Si la langue demandee n'existe pas, on essaie d'autres variantes
51
-	// Exemple : 'pt-br' => 'pt_br' => 'pt'
52
-	$lang = str_replace('-', '_', trim($lang));
53
-	if (!$lang) {
54
-		return false;
55
-	}
56
-
57
-	if (
58
-		strpos($liste_langues, (string) ",$lang,") !== false
59
-		or ($lang = preg_replace(',_.*,', '', $lang)
60
-			and str_contains($liste_langues, (string) ",$lang,"))
61
-	) {
62
-		$GLOBALS['spip_lang_rtl'] = lang_dir($lang, '', '_rtl');
63
-		$GLOBALS['spip_lang_right'] = $GLOBALS['spip_lang_rtl'] ? 'left' : 'right';
64
-		$GLOBALS['spip_lang_left'] = $GLOBALS['spip_lang_rtl'] ? 'right' : 'left';
65
-
66
-		return $GLOBALS['spip_lang'] = $lang;
67
-	} else {
68
-		return false;
69
-	}
41
+    if (is_null($liste_langues)) {
42
+        $liste_langues = ($GLOBALS['meta']['langues_proposees'] ?? '') . ',' . ($GLOBALS['meta']['langues_multilingue'] ?? '');
43
+    } else {
44
+        if (is_array($liste_langues)) {
45
+            $liste_langues = implode(',', $liste_langues);
46
+        }
47
+    }
48
+    $liste_langues = ',' . $liste_langues . ',';
49
+
50
+    // Si la langue demandee n'existe pas, on essaie d'autres variantes
51
+    // Exemple : 'pt-br' => 'pt_br' => 'pt'
52
+    $lang = str_replace('-', '_', trim($lang));
53
+    if (!$lang) {
54
+        return false;
55
+    }
56
+
57
+    if (
58
+        strpos($liste_langues, (string) ",$lang,") !== false
59
+        or ($lang = preg_replace(',_.*,', '', $lang)
60
+            and str_contains($liste_langues, (string) ",$lang,"))
61
+    ) {
62
+        $GLOBALS['spip_lang_rtl'] = lang_dir($lang, '', '_rtl');
63
+        $GLOBALS['spip_lang_right'] = $GLOBALS['spip_lang_rtl'] ? 'left' : 'right';
64
+        $GLOBALS['spip_lang_left'] = $GLOBALS['spip_lang_rtl'] ? 'right' : 'left';
65
+
66
+        return $GLOBALS['spip_lang'] = $lang;
67
+    } else {
68
+        return false;
69
+    }
70 70
 }
71 71
 
72 72
 //
@@ -79,9 +79,9 @@  discard block
 block discarded – undo
79 79
 // par exemple le francais pour l'espagnol, l'anglais pour l'allemand, etc.
80 80
 
81 81
 function choisir_traduction($trads, $lang = '') {
82
-	$k = approcher_langue($trads, $lang);
82
+    $k = approcher_langue($trads, $lang);
83 83
 
84
-	return $k ? $trads[$k] : array_shift($trads);
84
+    return $k ? $trads[$k] : array_shift($trads);
85 85
 }
86 86
 
87 87
 // retourne son 2e argument si c'est un index du premier
@@ -89,21 +89,21 @@  discard block
 block discarded – undo
89 89
 // la langue X etant consideree comme une approche de X_Y
90 90
 function approcher_langue($trads, $lang = '') {
91 91
 
92
-	if (!$lang) {
93
-		$lang = $GLOBALS['spip_lang'];
94
-	}
95
-
96
-	if (isset($trads[$lang])) {
97
-		return $lang;
98
-	} // cas des langues xx_yy
99
-	else {
100
-		$r = explode('_', $lang);
101
-		if (isset($trads[$r[0]])) {
102
-			return $r[0];
103
-		}
104
-	}
105
-
106
-	return '';
92
+    if (!$lang) {
93
+        $lang = $GLOBALS['spip_lang'];
94
+    }
95
+
96
+    if (isset($trads[$lang])) {
97
+        return $lang;
98
+    } // cas des langues xx_yy
99
+    else {
100
+        $r = explode('_', $lang);
101
+        if (isset($trads[$r[0]])) {
102
+            return $r[0];
103
+        }
104
+    }
105
+
106
+    return '';
107 107
 }
108 108
 
109 109
 /**
@@ -118,10 +118,10 @@  discard block
 block discarded – undo
118 118
  *     Nom de la langue, sinon son code.
119 119
  **/
120 120
 function traduire_nom_langue($lang) {
121
-	include_spip('inc/lang_liste');
122
-	include_spip('inc/charsets');
121
+    include_spip('inc/lang_liste');
122
+    include_spip('inc/charsets');
123 123
 
124
-	return html2unicode($GLOBALS['codes_langues'][$lang] ?? $lang);
124
+    return html2unicode($GLOBALS['codes_langues'][$lang] ?? $lang);
125 125
 }
126 126
 
127 127
 //
@@ -134,10 +134,10 @@  discard block
 block discarded – undo
134 134
 // hebreu a priori), 'droitier' sinon.
135 135
 // C'est utilise par #LANG_DIR, #LANG_LEFT, #LANG_RIGHT.
136 136
 function lang_dir($lang = '', $droitier = 'ltr', $gaucher = 'rtl') {
137
-	static $lang_rtl = ['ar', 'fa', 'ku', 'prs', 'ps', 'ur', 'he', 'heb', 'hbo', 'yi'];
137
+    static $lang_rtl = ['ar', 'fa', 'ku', 'prs', 'ps', 'ur', 'he', 'heb', 'hbo', 'yi'];
138 138
 
139
-	return in_array(($lang ?: $GLOBALS['spip_lang']), $lang_rtl) ?
140
-		$gaucher : $droitier;
139
+    return in_array(($lang ?: $GLOBALS['spip_lang']), $lang_rtl) ?
140
+        $gaucher : $droitier;
141 141
 }
142 142
 
143 143
 // typo francaise ou anglaise ?
@@ -146,29 +146,29 @@  discard block
 block discarded – undo
146 146
 // sinon determiner la typo en fonction de la langue courante
147 147
 
148 148
 function lang_typo($lang = '') {
149
-	if (!$lang) {
150
-		$lang = $GLOBALS['lang_objet'] ?? $GLOBALS['spip_lang'];
151
-	}
152
-	if (
153
-		$lang == 'eo'
154
-		or $lang == 'fr'
155
-		or strncmp($lang, 'fr_', 3) == 0
156
-		or $lang == 'cpf'
157
-	) {
158
-		return 'fr';
159
-	} else {
160
-		return 'en';
161
-	}
149
+    if (!$lang) {
150
+        $lang = $GLOBALS['lang_objet'] ?? $GLOBALS['spip_lang'];
151
+    }
152
+    if (
153
+        $lang == 'eo'
154
+        or $lang == 'fr'
155
+        or strncmp($lang, 'fr_', 3) == 0
156
+        or $lang == 'cpf'
157
+    ) {
158
+        return 'fr';
159
+    } else {
160
+        return 'en';
161
+    }
162 162
 }
163 163
 
164 164
 // gestion de la globale $lang_objet pour que les textes soient affiches
165 165
 // avec les memes typo et direction dans l'espace prive que dans le public
166 166
 function changer_typo($lang = '') {
167
-	if ($lang) {
168
-		$GLOBALS['lang_objet'] = $lang;
169
-	} else {
170
-		unset($GLOBALS['lang_objet']);
171
-	}
167
+    if ($lang) {
168
+        $GLOBALS['lang_objet'] = $lang;
169
+    } else {
170
+        unset($GLOBALS['lang_objet']);
171
+    }
172 172
 }
173 173
 
174 174
 //
@@ -178,58 +178,58 @@  discard block
 block discarded – undo
178 178
 // pour 'changer_lang' (langue de l'article, espace prive), c'est en Ajax
179 179
 //
180 180
 function menu_langues($nom_select, $default = '') {
181
-	include_spip('inc/actions');
182
-
183
-	$langues = liste_options_langues($nom_select);
184
-	$ret = '';
185
-	if (!count($langues)) {
186
-		return '';
187
-	}
188
-
189
-	if (!$default) {
190
-		$default = $GLOBALS['spip_lang'];
191
-	}
192
-	foreach ($langues as $l) {
193
-		$selected = ($l == $default) ? ' selected=\'selected\'' : '';
194
-		$ret .= "<option value='$l'$selected>[" . $l . '] ' . traduire_nom_langue($l) . "</option>\n";
195
-	}
196
-
197
-	if (!test_espace_prive()) {
198
-		$cible = self();
199
-		$base = '';
200
-	} else {
201
-		$cible = self();
202
-		$base = spip_connect() ? 'base' : '';
203
-	}
204
-
205
-	$change = ' onchange="this.parentNode.parentNode.submit()"';
206
-
207
-	return generer_action_auteur(
208
-		'converser',
209
-		$base,
210
-		$cible,
211
-		(select_langues($nom_select, $change, $ret)
212
-			. "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
213
-		" method='post'"
214
-	);
181
+    include_spip('inc/actions');
182
+
183
+    $langues = liste_options_langues($nom_select);
184
+    $ret = '';
185
+    if (!count($langues)) {
186
+        return '';
187
+    }
188
+
189
+    if (!$default) {
190
+        $default = $GLOBALS['spip_lang'];
191
+    }
192
+    foreach ($langues as $l) {
193
+        $selected = ($l == $default) ? ' selected=\'selected\'' : '';
194
+        $ret .= "<option value='$l'$selected>[" . $l . '] ' . traduire_nom_langue($l) . "</option>\n";
195
+    }
196
+
197
+    if (!test_espace_prive()) {
198
+        $cible = self();
199
+        $base = '';
200
+    } else {
201
+        $cible = self();
202
+        $base = spip_connect() ? 'base' : '';
203
+    }
204
+
205
+    $change = ' onchange="this.parentNode.parentNode.submit()"';
206
+
207
+    return generer_action_auteur(
208
+        'converser',
209
+        $base,
210
+        $cible,
211
+        (select_langues($nom_select, $change, $ret)
212
+            . "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
213
+        " method='post'"
214
+    );
215 215
 }
216 216
 
217 217
 function select_langues($nom_select, $change, $options, $label = '') {
218
-	static $cpt = 0;
219
-	$id = 'menu_langues' . $cpt++;
220
-
221
-	return
222
-		"<label for='$id'>" . ($label ?: _T('info_langues')) . '</label> ' .
223
-		"<select name='$nom_select' id='$id' "
224
-		. ((!test_espace_prive()) ?
225
-			("class='forml menu_langues'") :
226
-			(($nom_select == 'var_lang_ecrire') ?
227
-				("class='lang_ecrire'") :
228
-				"class='fondl'"))
229
-		. $change
230
-		. ">\n"
231
-		. $options
232
-		. '</select>';
218
+    static $cpt = 0;
219
+    $id = 'menu_langues' . $cpt++;
220
+
221
+    return
222
+        "<label for='$id'>" . ($label ?: _T('info_langues')) . '</label> ' .
223
+        "<select name='$nom_select' id='$id' "
224
+        . ((!test_espace_prive()) ?
225
+            ("class='forml menu_langues'") :
226
+            (($nom_select == 'var_lang_ecrire') ?
227
+                ("class='lang_ecrire'") :
228
+                "class='fondl'"))
229
+        . $change
230
+        . ">\n"
231
+        . $options
232
+        . '</select>';
233 233
 }
234 234
 
235 235
 /**
@@ -251,34 +251,34 @@  discard block
 block discarded – undo
251 251
  */
252 252
 function liste_options_langues($nom_select) {
253 253
 
254
-	switch ($nom_select) {
255
-		# #MENU_LANG
256
-		case 'var_lang':
257
-			# menu de changement de la langue d'un article
258
-			# les langues selectionnees dans la configuration "multilinguisme"
259
-		case 'changer_lang':
260
-			$langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
261
-			break;
262
-		# menu de l'interface (privee, installation et panneau de login)
263
-		# les langues presentes sous forme de fichiers de langue
264
-		# on force la relecture du repertoire des langues pour etre synchrone.
265
-		case 'var_lang_ecrire':
266
-		default:
267
-			$GLOBALS['meta']['langues_proposees'] = '';
268
-			init_langues();
269
-			$langues = explode(',', $GLOBALS['meta']['langues_proposees']);
270
-			break;
254
+    switch ($nom_select) {
255
+        # #MENU_LANG
256
+        case 'var_lang':
257
+            # menu de changement de la langue d'un article
258
+            # les langues selectionnees dans la configuration "multilinguisme"
259
+        case 'changer_lang':
260
+            $langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
261
+            break;
262
+        # menu de l'interface (privee, installation et panneau de login)
263
+        # les langues presentes sous forme de fichiers de langue
264
+        # on force la relecture du repertoire des langues pour etre synchrone.
265
+        case 'var_lang_ecrire':
266
+        default:
267
+            $GLOBALS['meta']['langues_proposees'] = '';
268
+            init_langues();
269
+            $langues = explode(',', $GLOBALS['meta']['langues_proposees']);
270
+            break;
271 271
 
272 272
 # dernier choix possible : toutes les langues = langues_proposees
273 273
 # + langues_multilingues ; mais, ne sert pas
274 274
 #			$langues = explode(',', $GLOBALS['all_langs']);
275
-	}
276
-	if (count($langues) <= 1) {
277
-		return [];
278
-	}
279
-	sort($langues);
275
+    }
276
+    if (count($langues) <= 1) {
277
+        return [];
278
+    }
279
+    sort($langues);
280 280
 
281
-	return $langues;
281
+    return $langues;
282 282
 }
283 283
 
284 284
 
@@ -293,39 +293,39 @@  discard block
 block discarded – undo
293 293
  **/
294 294
 function verifier_lang_url() {
295 295
 
296
-	// quelle langue est demandee ?
297
-	$lang_demandee = (test_espace_prive() ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']);
298
-	if (isset($_COOKIE['spip_lang_ecrire'])) {
299
-		$lang_demandee = $_COOKIE['spip_lang_ecrire'];
300
-	}
301
-	if (!test_espace_prive() and isset($_COOKIE['spip_lang'])) {
302
-		$lang_demandee = $_COOKIE['spip_lang'];
303
-	}
304
-	if (isset($_GET['lang'])) {
305
-		$lang_demandee = $_GET['lang'];
306
-	}
307
-
308
-	// Renvoyer si besoin (et si la langue demandee existe)
309
-	if (
310
-		$GLOBALS['spip_lang'] != $lang_demandee
311
-		and changer_langue($lang_demandee)
312
-		and $lang_demandee != @$_GET['lang']
313
-	) {
314
-		$destination = parametre_url(self(), 'lang', $lang_demandee, '&');
315
-		// ici on a besoin des var_truc
316
-		foreach ($_GET as $var => $val) {
317
-			if (!strncmp('var_', $var, 4)) {
318
-				$destination = parametre_url($destination, $var, $val, '&');
319
-			}
320
-		}
321
-		include_spip('inc/headers');
322
-		redirige_par_entete($destination);
323
-	}
324
-
325
-	// Subtilite : si la langue demandee par cookie est la bonne
326
-	// alors on fait comme si $lang etait passee dans l'URL
327
-	// (pour criteres {lang}).
328
-	$GLOBALS['lang'] = $_GET['lang'] = $GLOBALS['spip_lang'];
296
+    // quelle langue est demandee ?
297
+    $lang_demandee = (test_espace_prive() ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']);
298
+    if (isset($_COOKIE['spip_lang_ecrire'])) {
299
+        $lang_demandee = $_COOKIE['spip_lang_ecrire'];
300
+    }
301
+    if (!test_espace_prive() and isset($_COOKIE['spip_lang'])) {
302
+        $lang_demandee = $_COOKIE['spip_lang'];
303
+    }
304
+    if (isset($_GET['lang'])) {
305
+        $lang_demandee = $_GET['lang'];
306
+    }
307
+
308
+    // Renvoyer si besoin (et si la langue demandee existe)
309
+    if (
310
+        $GLOBALS['spip_lang'] != $lang_demandee
311
+        and changer_langue($lang_demandee)
312
+        and $lang_demandee != @$_GET['lang']
313
+    ) {
314
+        $destination = parametre_url(self(), 'lang', $lang_demandee, '&');
315
+        // ici on a besoin des var_truc
316
+        foreach ($_GET as $var => $val) {
317
+            if (!strncmp('var_', $var, 4)) {
318
+                $destination = parametre_url($destination, $var, $val, '&');
319
+            }
320
+        }
321
+        include_spip('inc/headers');
322
+        redirige_par_entete($destination);
323
+    }
324
+
325
+    // Subtilite : si la langue demandee par cookie est la bonne
326
+    // alors on fait comme si $lang etait passee dans l'URL
327
+    // (pour criteres {lang}).
328
+    $GLOBALS['lang'] = $_GET['lang'] = $GLOBALS['spip_lang'];
329 329
 }
330 330
 
331 331
 
@@ -343,22 +343,22 @@  discard block
 block discarded – undo
343 343
  *     La langue sélectionnée
344 344
  **/
345 345
 function utiliser_langue_site($liste_langues = null) {
346
-	// s'il existe une langue du site (en gros tout le temps en théorie)
347
-	if (
348
-		isset($GLOBALS['meta']['langue_site'])
349
-		// et si spip_langue est pas encore définie (ce que va faire changer_langue())
350
-		// ou qu'elle n'est pas identique à la langue du site
351
-		and (!isset($GLOBALS['spip_lang'])
352
-			or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
353
-	) {
354
-		return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
355
-	}
356
-	// en theorie là, la globale est définie, sinon c'est un problème.
357
-	if (!isset($GLOBALS['spip_lang'])) {
358
-		spip_log('La globale spip_lang est indéfinie dans utiliser_langue_site() !', _LOG_ERREUR);
359
-	}
360
-
361
-	return $GLOBALS['spip_lang'];
346
+    // s'il existe une langue du site (en gros tout le temps en théorie)
347
+    if (
348
+        isset($GLOBALS['meta']['langue_site'])
349
+        // et si spip_langue est pas encore définie (ce que va faire changer_langue())
350
+        // ou qu'elle n'est pas identique à la langue du site
351
+        and (!isset($GLOBALS['spip_lang'])
352
+            or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
353
+    ) {
354
+        return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
355
+    }
356
+    // en theorie là, la globale est définie, sinon c'est un problème.
357
+    if (!isset($GLOBALS['spip_lang'])) {
358
+        spip_log('La globale spip_lang est indéfinie dans utiliser_langue_site() !', _LOG_ERREUR);
359
+    }
360
+
361
+    return $GLOBALS['spip_lang'];
362 362
 }
363 363
 
364 364
 /**
@@ -377,35 +377,35 @@  discard block
 block discarded – undo
377 377
  **/
378 378
 function utiliser_langue_visiteur($liste_langues = null) {
379 379
 
380
-	// si on est dans l'espace public et pas de $liste_langues : se limiter a la config langues_multilingue si définie
381
-	if (is_null($liste_langues) and !test_espace_prive() and !empty($GLOBALS['meta']['langues_multilingue'])) {
382
-		$liste_langues = $GLOBALS['meta']['langues_multilingue'];
383
-	}
384
-
385
-	$l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire');
386
-	if (isset($_COOKIE[$l])) {
387
-		if (changer_langue($l = $_COOKIE[$l], $liste_langues)) {
388
-			return $l;
389
-		}
390
-	}
391
-
392
-	if (isset($GLOBALS['visiteur_session']['lang'])) {
393
-		if (changer_langue($l = $GLOBALS['visiteur_session']['lang'], $liste_langues)) {
394
-			return $l;
395
-		}
396
-	}
397
-
398
-	if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
399
-		foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) {
400
-			if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) {
401
-				if (changer_langue($l = strtolower($r[1]), $liste_langues)) {
402
-					return $l;
403
-				}
404
-			}
405
-		}
406
-	}
407
-
408
-	return utiliser_langue_site($liste_langues);
380
+    // si on est dans l'espace public et pas de $liste_langues : se limiter a la config langues_multilingue si définie
381
+    if (is_null($liste_langues) and !test_espace_prive() and !empty($GLOBALS['meta']['langues_multilingue'])) {
382
+        $liste_langues = $GLOBALS['meta']['langues_multilingue'];
383
+    }
384
+
385
+    $l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire');
386
+    if (isset($_COOKIE[$l])) {
387
+        if (changer_langue($l = $_COOKIE[$l], $liste_langues)) {
388
+            return $l;
389
+        }
390
+    }
391
+
392
+    if (isset($GLOBALS['visiteur_session']['lang'])) {
393
+        if (changer_langue($l = $GLOBALS['visiteur_session']['lang'], $liste_langues)) {
394
+            return $l;
395
+        }
396
+    }
397
+
398
+    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
399
+        foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) {
400
+            if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) {
401
+                if (changer_langue($l = strtolower($r[1]), $liste_langues)) {
402
+                    return $l;
403
+                }
404
+            }
405
+        }
406
+    }
407
+
408
+    return utiliser_langue_site($liste_langues);
409 409
 }
410 410
 
411 411
 
@@ -415,7 +415,7 @@  discard block
 block discarded – undo
415 415
  * @return int
416 416
  */
417 417
 function match_langue($chaine) {
418
-	return preg_match('/^[a-z]{2,3}(_[a-z]{2,3}){0,2}$/', $chaine);
418
+    return preg_match('/^[a-z]{2,3}(_[a-z]{2,3}){0,2}$/', $chaine);
419 419
 }
420 420
 
421 421
 /**
@@ -433,36 +433,36 @@  discard block
 block discarded – undo
433 433
  **/
434 434
 function init_langues() {
435 435
 
436
-	// liste des langues dans les meta, sauf a l'install
437
-	$all_langs = $GLOBALS['meta']['langues_proposees'] ?? '';
438
-
439
-	$tout = [];
440
-	if (!$all_langs) {
441
-		// trouver tous les modules lang/spip_xx.php
442
-		$modules = find_all_in_path('lang/', '/spip_([a-z_]+)\.php$');
443
-		foreach ($modules as $name => $path) {
444
-			if (preg_match(',^spip_([a-z_]+)\.php$,', $name, $regs)) {
445
-				if (match_langue($regs[1])) {
446
-					$tout[] = $regs[1];
447
-				}
448
-			}
449
-		}
450
-		sort($tout);
451
-		$tout = join(',', $tout);
452
-		// Si les langues n'ont pas change, ne rien faire
453
-		if ($tout != $all_langs) {
454
-			$GLOBALS['meta']['langues_proposees'] = $tout;
455
-			include_spip('inc/meta');
456
-			ecrire_meta('langues_proposees', $tout);
457
-		}
458
-	}
459
-	if (!isset($GLOBALS['meta']['langue_site'])) {
460
-		// Initialisation : le francais si dispo, sinon la premiere langue trouvee
461
-		$GLOBALS['meta']['langue_site'] = $tout =
462
-			(!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', (string) ",$all_langs,") !== false))
463
-				? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
464
-		ecrire_meta('langue_site', $tout);
465
-	}
436
+    // liste des langues dans les meta, sauf a l'install
437
+    $all_langs = $GLOBALS['meta']['langues_proposees'] ?? '';
438
+
439
+    $tout = [];
440
+    if (!$all_langs) {
441
+        // trouver tous les modules lang/spip_xx.php
442
+        $modules = find_all_in_path('lang/', '/spip_([a-z_]+)\.php$');
443
+        foreach ($modules as $name => $path) {
444
+            if (preg_match(',^spip_([a-z_]+)\.php$,', $name, $regs)) {
445
+                if (match_langue($regs[1])) {
446
+                    $tout[] = $regs[1];
447
+                }
448
+            }
449
+        }
450
+        sort($tout);
451
+        $tout = join(',', $tout);
452
+        // Si les langues n'ont pas change, ne rien faire
453
+        if ($tout != $all_langs) {
454
+            $GLOBALS['meta']['langues_proposees'] = $tout;
455
+            include_spip('inc/meta');
456
+            ecrire_meta('langues_proposees', $tout);
457
+        }
458
+    }
459
+    if (!isset($GLOBALS['meta']['langue_site'])) {
460
+        // Initialisation : le francais si dispo, sinon la premiere langue trouvee
461
+        $GLOBALS['meta']['langue_site'] = $tout =
462
+            (!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', (string) ",$all_langs,") !== false))
463
+                ? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
464
+        ecrire_meta('langue_site', $tout);
465
+    }
466 466
 }
467 467
 
468 468
 /**
@@ -476,10 +476,10 @@  discard block
 block discarded – undo
476 476
  *     Code html de la balise <html>
477 477
  **/
478 478
 function html_lang_attributes() {
479
-	$lang = $GLOBALS['spip_lang'];
480
-	$dir = lang_dir($lang);
479
+    $lang = $GLOBALS['spip_lang'];
480
+    $dir = lang_dir($lang);
481 481
 
482
-	return "<html class='$dir $lang no-js' xmlns='http://www.w3.org/1999/xhtml' lang='$lang' dir='$dir'>\n";
482
+    return "<html class='$dir $lang no-js' xmlns='http://www.w3.org/1999/xhtml' lang='$lang' dir='$dir'>\n";
483 483
 }
484 484
 
485 485
 
@@ -493,7 +493,7 @@  discard block
 block discarded – undo
493 493
  * @return string
494 494
  */
495 495
 function aide_lang_dir($spip_lang, $spip_lang_rtl) {
496
-	return ($spip_lang <> 'he') ? $spip_lang_rtl : '';
496
+    return ($spip_lang <> 'he') ? $spip_lang_rtl : '';
497 497
 }
498 498
 
499 499
 
Please login to merge, or discard this patch.
ecrire/public/composer.php 3 patches
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -381,8 +381,7 @@
 block discarded – undo
381 381
 function executer_balise_dynamique_dans_un_modele(...$args) {
382 382
 	if (test_espace_prive()) {
383 383
 		return executer_balise_dynamique(...$args);
384
-	}
385
-	else {
384
+	} else {
386 385
 		$str_args = base64_encode(serialize($args));
387 386
 		return "<?" . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
388 387
 	}
Please login to merge, or discard this patch.
Indentation   +768 added lines, -768 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  **/
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 include_spip('inc/texte');
@@ -41,234 +41,234 @@  discard block
 block discarded – undo
41 41
 
42 42
 function public_composer_dist($squelette, $mime_type, $gram, $source, string $connect = '') {
43 43
 
44
-	$skel = null;
45
-	$boucle = null;
46
-	$nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
47
-
48
-	//  si deja en memoire (INCLURE  a repetition) c'est bon.
49
-	if (function_exists($nom)) {
50
-		return $nom;
51
-	}
52
-
53
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
54
-		$GLOBALS['debug_objets']['courant'] = $nom;
55
-	}
56
-
57
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
58
-
59
-	// si squelette est deja compile et perenne, le charger
60
-	if (!squelette_obsolete($phpfile, $source)) {
61
-		include_once $phpfile;
62
-		#if (!squelette_obsolete($phpfile, $source)
63
-		#  AND lire_fichier ($phpfile, $skel_code,
64
-		#  array('critique' => 'oui', 'phpcheck' => 'oui'))){
65
-		## eval('?'.'>'.$skel_code);
66
-		#	 spip_log($skel_code, 'comp')
67
-		#}
68
-	}
69
-
70
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
71
-		include_once $lib;
72
-	}
73
-
74
-	// tester si le eval ci-dessus a mis le squelette en memoire
75
-
76
-	if (function_exists($nom)) {
77
-		return $nom;
78
-	}
79
-
80
-	// charger le source, si possible, et compiler
81
-	$skel_code = '';
82
-	if (lire_fichier($source, $skel)) {
83
-		$compiler = charger_fonction('compiler', 'public');
84
-		$skel_code = $compiler($skel, $nom, $gram, $source, $connect);
85
-	}
86
-
87
-	// Ne plus rien faire si le compilateur n'a pas pu operer.
88
-	if (!$skel_code) {
89
-		return false;
90
-	}
91
-
92
-	foreach ($skel_code as $id => $boucle) {
93
-		$f = $boucle->return;
94
-		try {
95
-			eval("return true; $f ;");
96
-		} catch (\ParseError $e) {
97
-			// Code syntaxiquement faux (critere etc mal programme')
98
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
99
-			erreur_squelette($msg, $boucle);
100
-			// continuer pour trouver d'autres fautes eventuelles
101
-			// mais prevenir que c'est mort
102
-			$nom = '';
103
-		}
104
-
105
-		// contexte de compil inutile a present
106
-		// (mais la derniere valeur de $boucle est utilisee ci-dessous)
107
-		$skel_code[$id] = $f;
108
-	}
109
-
110
-	$code = '';
111
-	if ($nom) {
112
-		// Si le code est bon, concatener et mettre en cache
113
-		if (function_exists($nom)) {
114
-			$code = squelette_traduit($skel, $source, $phpfile, $skel_code);
115
-		} else {
116
-			// code semantiquement faux: bug du compilateur
117
-			// $boucle est en fait ici la fct principale du squelette
118
-			$msg = _T('zbug_erreur_compilation');
119
-			erreur_squelette($msg, $boucle);
120
-			$nom = '';
121
-		}
122
-	}
123
-
124
-	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
125
-		// Tracer ce qui vient d'etre compile
126
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
127
-
128
-		// si c'est ce que demande le debusqueur, lui passer la main
129
-		if (
130
-			$GLOBALS['debug_objets']['sourcefile']
131
-			and (_request('var_mode_objet') == $nom)
132
-			and (_request('var_mode_affiche') == 'code')
133
-		) {
134
-			erreur_squelette();
135
-		}
136
-	}
137
-
138
-	return $nom ?: false;
44
+    $skel = null;
45
+    $boucle = null;
46
+    $nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect);
47
+
48
+    //  si deja en memoire (INCLURE  a repetition) c'est bon.
49
+    if (function_exists($nom)) {
50
+        return $nom;
51
+    }
52
+
53
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
54
+        $GLOBALS['debug_objets']['courant'] = $nom;
55
+    }
56
+
57
+    $phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
58
+
59
+    // si squelette est deja compile et perenne, le charger
60
+    if (!squelette_obsolete($phpfile, $source)) {
61
+        include_once $phpfile;
62
+        #if (!squelette_obsolete($phpfile, $source)
63
+        #  AND lire_fichier ($phpfile, $skel_code,
64
+        #  array('critique' => 'oui', 'phpcheck' => 'oui'))){
65
+        ## eval('?'.'>'.$skel_code);
66
+        #	 spip_log($skel_code, 'comp')
67
+        #}
68
+    }
69
+
70
+    if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
71
+        include_once $lib;
72
+    }
73
+
74
+    // tester si le eval ci-dessus a mis le squelette en memoire
75
+
76
+    if (function_exists($nom)) {
77
+        return $nom;
78
+    }
79
+
80
+    // charger le source, si possible, et compiler
81
+    $skel_code = '';
82
+    if (lire_fichier($source, $skel)) {
83
+        $compiler = charger_fonction('compiler', 'public');
84
+        $skel_code = $compiler($skel, $nom, $gram, $source, $connect);
85
+    }
86
+
87
+    // Ne plus rien faire si le compilateur n'a pas pu operer.
88
+    if (!$skel_code) {
89
+        return false;
90
+    }
91
+
92
+    foreach ($skel_code as $id => $boucle) {
93
+        $f = $boucle->return;
94
+        try {
95
+            eval("return true; $f ;");
96
+        } catch (\ParseError $e) {
97
+            // Code syntaxiquement faux (critere etc mal programme')
98
+            $msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
99
+            erreur_squelette($msg, $boucle);
100
+            // continuer pour trouver d'autres fautes eventuelles
101
+            // mais prevenir que c'est mort
102
+            $nom = '';
103
+        }
104
+
105
+        // contexte de compil inutile a present
106
+        // (mais la derniere valeur de $boucle est utilisee ci-dessous)
107
+        $skel_code[$id] = $f;
108
+    }
109
+
110
+    $code = '';
111
+    if ($nom) {
112
+        // Si le code est bon, concatener et mettre en cache
113
+        if (function_exists($nom)) {
114
+            $code = squelette_traduit($skel, $source, $phpfile, $skel_code);
115
+        } else {
116
+            // code semantiquement faux: bug du compilateur
117
+            // $boucle est en fait ici la fct principale du squelette
118
+            $msg = _T('zbug_erreur_compilation');
119
+            erreur_squelette($msg, $boucle);
120
+            $nom = '';
121
+        }
122
+    }
123
+
124
+    if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
125
+        // Tracer ce qui vient d'etre compile
126
+        $GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
127
+
128
+        // si c'est ce que demande le debusqueur, lui passer la main
129
+        if (
130
+            $GLOBALS['debug_objets']['sourcefile']
131
+            and (_request('var_mode_objet') == $nom)
132
+            and (_request('var_mode_affiche') == 'code')
133
+        ) {
134
+            erreur_squelette();
135
+        }
136
+    }
137
+
138
+    return $nom ?: false;
139 139
 }
140 140
 
141 141
 function squelette_traduit($squelette, $sourcefile, $phpfile, $boucles) {
142 142
 
143
-	$code = null;
144
-	// Le dernier index est '' (fonction principale)
145
-	$noms = substr(join(', ', array_keys($boucles)), 0, -2);
146
-	if (CODE_COMMENTE) {
147
-		$code = "
143
+    $code = null;
144
+    // Le dernier index est '' (fonction principale)
145
+    $noms = substr(join(', ', array_keys($boucles)), 0, -2);
146
+    if (CODE_COMMENTE) {
147
+        $code = "
148 148
 /*
149 149
  * Squelette : $sourcefile
150 150
  * Date :      " . gmdate('D, d M Y H:i:s', @filemtime($sourcefile)) . ' GMT
151 151
  * Compile :   ' . gmdate('D, d M Y H:i:s', time()) . ' GMT
152 152
  * ' . (!$boucles ? 'Pas de boucle' : ('Boucles :   ' . $noms)) . '
153 153
  */ ';
154
-	}
154
+    }
155 155
 
156
-	$code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
157
-	if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
158
-		ecrire_fichier($phpfile, $code);
159
-	}
156
+    $code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
157
+    if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
158
+        ecrire_fichier($phpfile, $code);
159
+    }
160 160
 
161
-	return $code;
161
+    return $code;
162 162
 }
163 163
 
164 164
 // Le squelette compile est-il trop vieux ?
165 165
 function squelette_obsolete($skel, $squelette) {
166
-	static $date_change = null;
167
-	// ne verifier la date de mes_fonctions et mes_options qu'une seule fois
168
-	// par hit
169
-	if (is_null($date_change)) {
170
-		if (@file_exists($fonc = 'mes_fonctions.php')) {
171
-			$date_change = @filemtime($fonc);
172
-		} # compatibilite
173
-		if (defined('_FILE_OPTIONS')) {
174
-			$date_change = max($date_change, @filemtime(_FILE_OPTIONS));
175
-		}
176
-	}
177
-
178
-	return (
179
-		(defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug']))
180
-		or !@file_exists($skel)
181
-		or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
182
-			> ($date = @filemtime($skel)))
183
-		or ($date_change > $date)
184
-	);
166
+    static $date_change = null;
167
+    // ne verifier la date de mes_fonctions et mes_options qu'une seule fois
168
+    // par hit
169
+    if (is_null($date_change)) {
170
+        if (@file_exists($fonc = 'mes_fonctions.php')) {
171
+            $date_change = @filemtime($fonc);
172
+        } # compatibilite
173
+        if (defined('_FILE_OPTIONS')) {
174
+            $date_change = max($date_change, @filemtime(_FILE_OPTIONS));
175
+        }
176
+    }
177
+
178
+    return (
179
+        (defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug']))
180
+        or !@file_exists($skel)
181
+        or ((@file_exists($squelette) ? @filemtime($squelette) : 0)
182
+            > ($date = @filemtime($skel)))
183
+        or ($date_change > $date)
184
+    );
185 185
 }
186 186
 
187 187
 // Activer l'invalideur de session
188 188
 function invalideur_session(&$Cache, $code = null) {
189
-	$Cache['session'] = spip_session();
189
+    $Cache['session'] = spip_session();
190 190
 
191
-	return $code;
191
+    return $code;
192 192
 }
193 193
 
194 194
 
195 195
 function analyse_resultat_skel($nom, $cache, $corps, $source = '') {
196
-	static $filtres = [];
197
-	$headers = [];
198
-	$corps ??= '';
199
-
200
-	// Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
201
-	// note: on essaie d'attrapper aussi certains de ces entetes codes
202
-	// "a la main" dans les squelettes, mais evidemment sans exhaustivite
203
-	if (
204
-		stripos($corps, 'header') !== false
205
-		and preg_match_all(
206
-			'/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
207
-			$corps,
208
-			$regs,
209
-			PREG_SET_ORDER
210
-		)
211
-	) {
212
-		foreach ($regs as $r) {
213
-			$corps = str_replace($r[0], '', $corps);
214
-			# $j = Content-Type, et pas content-TYPE.
215
-			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
216
-
217
-			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
218
-				$headers[$j] .= '|' . $r[3];
219
-			} else {
220
-				$headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
221
-			}
222
-		}
223
-	}
224
-	// S'agit-il d'un resultat constant ou contenant du code php
225
-	$process_ins = (
226
-		strpos($corps, '<' . '?') === false
227
-		or
228
-		(strpos($corps, '<' . '?xml') !== false and
229
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
230
-	)
231
-		? 'html'
232
-		: 'php';
233
-
234
-	$skel = [
235
-		'squelette' => $nom,
236
-		'source' => $source,
237
-		'process_ins' => $process_ins,
238
-		'invalideurs' => $cache,
239
-		'entetes' => $headers,
240
-		'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
241
-	];
242
-
243
-	// traiter #FILTRE{} et filtres
244
-	if (!isset($filtres[$nom])) {
245
-		$filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
246
-	}
247
-	$filtres_headers = [];
248
-	if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
249
-		$filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
250
-		unset($headers['X-Spip-Filtre']);
251
-	}
252
-	if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) {
253
-		include_spip('public/sandbox');
254
-		$corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
255
-
256
-		if ($process_ins == 'html') {
257
-			$skel['process_ins'] = (
258
-				strpos($corps, '<' . '?') === false
259
-				or
260
-				(strpos($corps, '<' . '?xml') !== false and
261
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
262
-			)
263
-				? 'html'
264
-				: 'php';
265
-		}
266
-	}
267
-
268
-	$skel['entetes'] = $headers;
269
-	$skel['texte'] = $corps;
270
-
271
-	return $skel;
196
+    static $filtres = [];
197
+    $headers = [];
198
+    $corps ??= '';
199
+
200
+    // Recupere les < ?php header('Xx: y'); ? > pour $page['headers']
201
+    // note: on essaie d'attrapper aussi certains de ces entetes codes
202
+    // "a la main" dans les squelettes, mais evidemment sans exhaustivite
203
+    if (
204
+        stripos($corps, 'header') !== false
205
+        and preg_match_all(
206
+            '/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
207
+            $corps,
208
+            $regs,
209
+            PREG_SET_ORDER
210
+        )
211
+    ) {
212
+        foreach ($regs as $r) {
213
+            $corps = str_replace($r[0], '', $corps);
214
+            # $j = Content-Type, et pas content-TYPE.
215
+            $j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
216
+
217
+            if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
218
+                $headers[$j] .= '|' . $r[3];
219
+            } else {
220
+                $headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
221
+            }
222
+        }
223
+    }
224
+    // S'agit-il d'un resultat constant ou contenant du code php
225
+    $process_ins = (
226
+        strpos($corps, '<' . '?') === false
227
+        or
228
+        (strpos($corps, '<' . '?xml') !== false and
229
+            strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
230
+    )
231
+        ? 'html'
232
+        : 'php';
233
+
234
+    $skel = [
235
+        'squelette' => $nom,
236
+        'source' => $source,
237
+        'process_ins' => $process_ins,
238
+        'invalideurs' => $cache,
239
+        'entetes' => $headers,
240
+        'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0
241
+    ];
242
+
243
+    // traiter #FILTRE{} et filtres
244
+    if (!isset($filtres[$nom])) {
245
+        $filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]);
246
+    }
247
+    $filtres_headers = [];
248
+    if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) {
249
+        $filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre']));
250
+        unset($headers['X-Spip-Filtre']);
251
+    }
252
+    if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) {
253
+        include_spip('public/sandbox');
254
+        $corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]);
255
+
256
+        if ($process_ins == 'html') {
257
+            $skel['process_ins'] = (
258
+                strpos($corps, '<' . '?') === false
259
+                or
260
+                (strpos($corps, '<' . '?xml') !== false and
261
+                    strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
262
+            )
263
+                ? 'html'
264
+                : 'php';
265
+        }
266
+    }
267
+
268
+    $skel['entetes'] = $headers;
269
+    $skel['texte'] = $corps;
270
+
271
+    return $skel;
272 272
 }
273 273
 
274 274
 //
@@ -282,7 +282,7 @@  discard block
 block discarded – undo
282 282
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
283 283
 if ($lang_select) lang_select();
284 284
 ?'
285
-	. '>');
285
+    . '>');
286 286
 
287 287
 /**
288 288
  * Synthétise une balise dynamique : crée l'appel à l'inclusion
@@ -302,35 +302,35 @@  discard block
 block discarded – undo
302 302
  *     Code PHP pour inclure le squelette de la balise dynamique
303 303
  **/
304 304
 function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) {
305
-	if (
306
-		strncmp($file, '/', 1) !== 0
307
-		// pas de lien symbolique sous Windows
308
-		and !(stristr(PHP_OS, 'WIN') and str_contains($file, ':'))
309
-	) {
310
-		$file = './" . _DIR_RACINE . "' . $file;
311
-	}
312
-
313
-	$lang = $context_compil[4];
314
-	if (preg_match(',\W,', $lang)) {
315
-		$lang = '';
316
-	}
317
-
318
-	$args = array_map('argumenter_squelette', $args);
319
-	if (!empty($context_compil['appel_php_depuis_modele'])) {
320
-		$args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
321
-	}
322
-	$args = join(', ', $args);
323
-
324
-	$r = sprintf(
325
-		CODE_INCLURE_BALISE,
326
-		$file,
327
-		$lang,
328
-		$nom,
329
-		$args,
330
-		join(', ', array_map('_q', $context_compil))
331
-	);
332
-
333
-	return $r;
305
+    if (
306
+        strncmp($file, '/', 1) !== 0
307
+        // pas de lien symbolique sous Windows
308
+        and !(stristr(PHP_OS, 'WIN') and str_contains($file, ':'))
309
+    ) {
310
+        $file = './" . _DIR_RACINE . "' . $file;
311
+    }
312
+
313
+    $lang = $context_compil[4];
314
+    if (preg_match(',\W,', $lang)) {
315
+        $lang = '';
316
+    }
317
+
318
+    $args = array_map('argumenter_squelette', $args);
319
+    if (!empty($context_compil['appel_php_depuis_modele'])) {
320
+        $args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
321
+    }
322
+    $args = join(', ', $args);
323
+
324
+    $r = sprintf(
325
+        CODE_INCLURE_BALISE,
326
+        $file,
327
+        $lang,
328
+        $nom,
329
+        $args,
330
+        join(', ', array_map('_q', $context_compil))
331
+    );
332
+
333
+    return $r;
334 334
 }
335 335
 
336 336
 /**
@@ -348,18 +348,18 @@  discard block
 block discarded – undo
348 348
  **/
349 349
 function argumenter_squelette($v) {
350 350
 
351
-	if (is_object($v)) {
352
-		return var_export($v, true);
353
-	} elseif (!is_array($v)) {
354
-		return "'" . texte_script((string) $v) . "'";
355
-	} else {
356
-		$out = [];
357
-		foreach ($v as $k => $val) {
358
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
359
-		}
360
-
361
-		return 'array(' . join(', ', $out) . ')';
362
-	}
351
+    if (is_object($v)) {
352
+        return var_export($v, true);
353
+    } elseif (!is_array($v)) {
354
+        return "'" . texte_script((string) $v) . "'";
355
+    } else {
356
+        $out = [];
357
+        foreach ($v as $k => $val) {
358
+            $out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
359
+        }
360
+
361
+        return 'array(' . join(', ', $out) . ')';
362
+    }
363 363
 }
364 364
 
365 365
 /**
@@ -378,13 +378,13 @@  discard block
 block discarded – undo
378 378
  * @return string
379 379
  */
380 380
 function executer_balise_dynamique_dans_un_modele(...$args) {
381
-	if (test_espace_prive()) {
382
-		return executer_balise_dynamique(...$args);
383
-	}
384
-	else {
385
-		$str_args = base64_encode(serialize($args));
386
-		return "<?" . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
387
-	}
381
+    if (test_espace_prive()) {
382
+        return executer_balise_dynamique(...$args);
383
+    }
384
+    else {
385
+        $str_args = base64_encode(serialize($args));
386
+        return "<?" . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
387
+    }
388 388
 }
389 389
 
390 390
 
@@ -415,87 +415,87 @@  discard block
 block discarded – undo
415 415
  *     Code PHP d'exécutant l'inclusion du squelette (ou texte) de la balise dynamique
416 416
  **/
417 417
 function executer_balise_dynamique($nom, $args, $context_compil) {
418
-	/** @var string Nom de la balise à charger (balise demandée ou balise générique) */
419
-	$nom_balise = $nom;
420
-	/** @var string Nom de la balise générique (si utilisée) */
421
-	$nom_balise_generique = '';
422
-
423
-	$appel_php_depuis_modele = false;
424
-	if (
425
-		is_array($context_compil)
426
-		and !is_numeric($context_compil[3])
427
-		and empty($context_compil[0])
428
-		and empty($context_compil[1])
429
-		and empty($context_compil[2])
430
-		and empty($context_compil[3])
431
-	) {
432
-		$appel_php_depuis_modele = true;
433
-	}
434
-
435
-	if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
436
-		// Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
437
-		if ($balise_generique = chercher_balise_generique($nom)) {
438
-			// injecter en premier arg le nom de la balise
439
-			array_unshift($args, $nom);
440
-			$nom_balise_generique = $balise_generique['nom_generique'];
441
-			$fonction_balise = $balise_generique['fonction_generique'];
442
-			$nom_balise = $nom_balise_generique;
443
-		}
444
-		unset($balise_generique);
445
-	}
446
-
447
-	if (!$fonction_balise) {
448
-		$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
449
-		erreur_squelette($msg, $context_compil);
450
-
451
-		return '';
452
-	}
453
-
454
-	// retrouver le fichier qui a déclaré la fonction
455
-	// même si la fonction dynamique est déclarée dans un fichier de fonctions.
456
-	// Attention sous windows, getFileName() retourne un antislash.
457
-	$reflector = new ReflectionFunction($fonction_balise);
458
-	$file = str_replace('\\', '/', $reflector->getFileName());
459
-	if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
460
-		$file = substr($file, strlen(_ROOT_RACINE));
461
-	}
462
-
463
-	// Y a-t-il une fonction de traitement des arguments ?
464
-	$f = 'balise_' . $nom_balise . '_stat';
465
-
466
-	$r = !function_exists($f) ? $args : $f($args, $context_compil);
467
-
468
-	if (!is_array($r)) {
469
-		return $r;
470
-	}
471
-
472
-	// verifier que la fonction dyn est la,
473
-	// sinon se replier sur la generique si elle existe
474
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
475
-		if (
476
-			$balise_generique = chercher_balise_generique($nom)
477
-			and $nom_balise_generique = $balise_generique['nom_generique']
478
-			and $file = include_spip('balise/' . strtolower($nom_balise_generique))
479
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
480
-		) {
481
-			// et lui injecter en premier arg le nom de la balise
482
-			array_unshift($r, $nom);
483
-			$nom_balise = $nom_balise_generique;
484
-			if (!_DIR_RESTREINT) {
485
-				$file = _DIR_RESTREINT_ABS . $file;
486
-			}
487
-		} else {
488
-			$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
489
-			erreur_squelette($msg, $context_compil);
490
-
491
-			return '';
492
-		}
493
-	}
494
-
495
-	if ($appel_php_depuis_modele) {
496
-		$context_compil['appel_php_depuis_modele'] = true;
497
-	}
498
-	return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
418
+    /** @var string Nom de la balise à charger (balise demandée ou balise générique) */
419
+    $nom_balise = $nom;
420
+    /** @var string Nom de la balise générique (si utilisée) */
421
+    $nom_balise_generique = '';
422
+
423
+    $appel_php_depuis_modele = false;
424
+    if (
425
+        is_array($context_compil)
426
+        and !is_numeric($context_compil[3])
427
+        and empty($context_compil[0])
428
+        and empty($context_compil[1])
429
+        and empty($context_compil[2])
430
+        and empty($context_compil[3])
431
+    ) {
432
+        $appel_php_depuis_modele = true;
433
+    }
434
+
435
+    if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) {
436
+        // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article')
437
+        if ($balise_generique = chercher_balise_generique($nom)) {
438
+            // injecter en premier arg le nom de la balise
439
+            array_unshift($args, $nom);
440
+            $nom_balise_generique = $balise_generique['nom_generique'];
441
+            $fonction_balise = $balise_generique['fonction_generique'];
442
+            $nom_balise = $nom_balise_generique;
443
+        }
444
+        unset($balise_generique);
445
+    }
446
+
447
+    if (!$fonction_balise) {
448
+        $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
449
+        erreur_squelette($msg, $context_compil);
450
+
451
+        return '';
452
+    }
453
+
454
+    // retrouver le fichier qui a déclaré la fonction
455
+    // même si la fonction dynamique est déclarée dans un fichier de fonctions.
456
+    // Attention sous windows, getFileName() retourne un antislash.
457
+    $reflector = new ReflectionFunction($fonction_balise);
458
+    $file = str_replace('\\', '/', $reflector->getFileName());
459
+    if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) {
460
+        $file = substr($file, strlen(_ROOT_RACINE));
461
+    }
462
+
463
+    // Y a-t-il une fonction de traitement des arguments ?
464
+    $f = 'balise_' . $nom_balise . '_stat';
465
+
466
+    $r = !function_exists($f) ? $args : $f($args, $context_compil);
467
+
468
+    if (!is_array($r)) {
469
+        return $r;
470
+    }
471
+
472
+    // verifier que la fonction dyn est la,
473
+    // sinon se replier sur la generique si elle existe
474
+    if (!function_exists('balise_' . $nom_balise . '_dyn')) {
475
+        if (
476
+            $balise_generique = chercher_balise_generique($nom)
477
+            and $nom_balise_generique = $balise_generique['nom_generique']
478
+            and $file = include_spip('balise/' . strtolower($nom_balise_generique))
479
+            and function_exists('balise_' . $nom_balise_generique . '_dyn')
480
+        ) {
481
+            // et lui injecter en premier arg le nom de la balise
482
+            array_unshift($r, $nom);
483
+            $nom_balise = $nom_balise_generique;
484
+            if (!_DIR_RESTREINT) {
485
+                $file = _DIR_RESTREINT_ABS . $file;
486
+            }
487
+        } else {
488
+            $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
489
+            erreur_squelette($msg, $context_compil);
490
+
491
+            return '';
492
+        }
493
+    }
494
+
495
+    if ($appel_php_depuis_modele) {
496
+        $context_compil['appel_php_depuis_modele'] = true;
497
+    }
498
+    return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil);
499 499
 }
500 500
 
501 501
 /**
@@ -510,23 +510,23 @@  discard block
 block discarded – undo
510 510
  * @return array|null
511 511
  */
512 512
 function chercher_balise_generique($nom) {
513
-	if (!str_contains($nom, '_')) {
514
-		return null;
515
-	}
516
-	$nom_generique = $nom;
517
-	while (false !== ($p = strrpos($nom_generique, '_'))) {
518
-		$nom_generique = substr($nom_generique, 0, $p + 1);
519
-		$fonction_generique = charger_fonction($nom_generique, 'balise', true);
520
-		if ($fonction_generique) {
521
-			return [
522
-				'nom' => $nom,
523
-				'nom_generique' => $nom_generique,
524
-				'fonction_generique' => $fonction_generique,
525
-			];
526
-		}
527
-		$nom_generique = substr($nom_generique, 0, -1);
528
-	}
529
-	return null;
513
+    if (!str_contains($nom, '_')) {
514
+        return null;
515
+    }
516
+    $nom_generique = $nom;
517
+    while (false !== ($p = strrpos($nom_generique, '_'))) {
518
+        $nom_generique = substr($nom_generique, 0, $p + 1);
519
+        $fonction_generique = charger_fonction($nom_generique, 'balise', true);
520
+        if ($fonction_generique) {
521
+            return [
522
+                'nom' => $nom,
523
+                'nom_generique' => $nom_generique,
524
+                'fonction_generique' => $fonction_generique,
525
+            ];
526
+        }
527
+        $nom_generique = substr($nom_generique, 0, -1);
528
+    }
529
+    return null;
530 530
 }
531 531
 
532 532
 
@@ -550,50 +550,50 @@  discard block
 block discarded – undo
550 550
  * @return null;
551 551
  **/
552 552
 function lang_select_public($lang, $lang_select, $titre = null) {
553
-	// Cas 1. forcer_lang = true et pas de critere {lang_select}
554
-	if (
555
-		isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
556
-		and $lang_select !== 'oui'
557
-	) {
558
-		$lang = $GLOBALS['spip_lang'];
559
-	} // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
560
-	elseif (!strlen($lang)) {
561
-		$lang = $GLOBALS['spip_lang'];
562
-	} // Cas 3. l'objet est multilingue !
563
-	elseif (
564
-		$lang_select !== 'oui'
565
-		and strlen($titre) > 10
566
-		and str_contains($titre, '<multi>')
567
-		and str_contains(echappe_html($titre), '<multi>')
568
-	) {
569
-		$lang = $GLOBALS['spip_lang'];
570
-	}
571
-
572
-	// faire un lang_select() eventuellement sur la langue inchangee
573
-	lang_select($lang);
574
-
575
-	return;
553
+    // Cas 1. forcer_lang = true et pas de critere {lang_select}
554
+    if (
555
+        isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang']
556
+        and $lang_select !== 'oui'
557
+    ) {
558
+        $lang = $GLOBALS['spip_lang'];
559
+    } // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
560
+    elseif (!strlen($lang)) {
561
+        $lang = $GLOBALS['spip_lang'];
562
+    } // Cas 3. l'objet est multilingue !
563
+    elseif (
564
+        $lang_select !== 'oui'
565
+        and strlen($titre) > 10
566
+        and str_contains($titre, '<multi>')
567
+        and str_contains(echappe_html($titre), '<multi>')
568
+    ) {
569
+        $lang = $GLOBALS['spip_lang'];
570
+    }
571
+
572
+    // faire un lang_select() eventuellement sur la langue inchangee
573
+    lang_select($lang);
574
+
575
+    return;
576 576
 }
577 577
 
578 578
 
579 579
 // Si un tableau &doublons[articles] est passe en parametre,
580 580
 // il faut le nettoyer car il pourrait etre injecte en SQL
581 581
 function nettoyer_env_doublons($envd) {
582
-	foreach ($envd as $table => $liste) {
583
-		$n = '';
584
-		foreach (explode(',', $liste) as $val) {
585
-			if ($a = intval($val) and $val === strval($a)) {
586
-				$n .= ',' . $val;
587
-			}
588
-		}
589
-		if (strlen($n)) {
590
-			$envd[$table] = $n;
591
-		} else {
592
-			unset($envd[$table]);
593
-		}
594
-	}
595
-
596
-	return $envd;
582
+    foreach ($envd as $table => $liste) {
583
+        $n = '';
584
+        foreach (explode(',', $liste) as $val) {
585
+            if ($a = intval($val) and $val === strval($a)) {
586
+                $n .= ',' . $val;
587
+            }
588
+        }
589
+        if (strlen($n)) {
590
+            $envd[$table] = $n;
591
+        } else {
592
+            unset($envd[$table]);
593
+        }
594
+    }
595
+
596
+    return $envd;
597 597
 }
598 598
 
599 599
 /**
@@ -612,21 +612,21 @@  discard block
 block discarded – undo
612 612
  *     Opérateur trouvé (SELF ou SUBSELECT) sinon false.
613 613
  **/
614 614
 function match_self($w) {
615
-	if (is_string($w)) {
616
-		return false;
617
-	}
618
-	if (is_array($w)) {
619
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
620
-			return $w;
621
-		}
622
-		foreach (array_filter($w, 'is_array') as $sw) {
623
-			if ($m = match_self($sw)) {
624
-				return $m;
625
-			}
626
-		}
627
-	}
628
-
629
-	return false;
615
+    if (is_string($w)) {
616
+        return false;
617
+    }
618
+    if (is_array($w)) {
619
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
620
+            return $w;
621
+        }
622
+        foreach (array_filter($w, 'is_array') as $sw) {
623
+            if ($m = match_self($sw)) {
624
+                return $m;
625
+            }
626
+        }
627
+    }
628
+
629
+    return false;
630 630
 }
631 631
 
632 632
 /**
@@ -642,16 +642,16 @@  discard block
 block discarded – undo
642 642
  *     est remplacée par son code.
643 643
  **/
644 644
 function remplace_sous_requete($w, $sousrequete) {
645
-	if (is_array($w)) {
646
-		if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
647
-			return $sousrequete;
648
-		}
649
-		foreach ($w as $k => $sw) {
650
-			$w[$k] = remplace_sous_requete($sw, $sousrequete);
651
-		}
652
-	}
653
-
654
-	return $w;
645
+    if (is_array($w)) {
646
+        if (in_array(reset($w), ['SELF', 'SUBSELECT'])) {
647
+            return $sousrequete;
648
+        }
649
+        foreach ($w as $k => $sw) {
650
+            $w[$k] = remplace_sous_requete($sw, $sousrequete);
651
+        }
652
+    }
653
+
654
+    return $w;
655 655
 }
656 656
 
657 657
 /**
@@ -665,17 +665,17 @@  discard block
 block discarded – undo
665 665
  *     - Conditions avec des sous requêtes
666 666
  **/
667 667
 function trouver_sous_requetes($where) {
668
-	$where_simples = [];
669
-	$where_sous = [];
670
-	foreach ($where as $k => $w) {
671
-		if (match_self($w)) {
672
-			$where_sous[$k] = $w;
673
-		} else {
674
-			$where_simples[$k] = $w;
675
-		}
676
-	}
677
-
678
-	return [$where_simples, $where_sous];
668
+    $where_simples = [];
669
+    $where_sous = [];
670
+    foreach ($where as $k => $w) {
671
+        if (match_self($w)) {
672
+            $where_sous[$k] = $w;
673
+        } else {
674
+            $where_simples[$k] = $w;
675
+        }
676
+    }
677
+
678
+    return [$where_simples, $where_sous];
679 679
 }
680 680
 
681 681
 
@@ -701,292 +701,292 @@  discard block
 block discarded – undo
701 701
  * @return resource
702 702
  */
703 703
 function calculer_select(
704
-	$select = [],
705
-	$from = [],
706
-	$from_type = [],
707
-	$where = [],
708
-	$join = [],
709
-	$groupby = [],
710
-	$orderby = [],
711
-	$limit = '',
712
-	$having = [],
713
-	$table = '',
714
-	$id = '',
715
-	$serveur = '',
716
-	$requeter = true
704
+    $select = [],
705
+    $from = [],
706
+    $from_type = [],
707
+    $where = [],
708
+    $join = [],
709
+    $groupby = [],
710
+    $orderby = [],
711
+    $limit = '',
712
+    $having = [],
713
+    $table = '',
714
+    $id = '',
715
+    $serveur = '',
716
+    $requeter = true
717 717
 ) {
718 718
 
719
-	// retirer les criteres vides:
720
-	// {X ?} avec X absent de l'URL
721
-	// {par #ENV{X}} avec X absent de l'URL
722
-	// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
723
-	$menage = false;
724
-	foreach ($where as $k => $v) {
725
-		if (is_array($v) and count($v)) {
726
-			if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
727
-				$op = false;
728
-			} elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
729
-				$op = false;
730
-			} else {
731
-				$op = $v[0] ?: $v;
732
-			}
733
-		} else {
734
-			$op = $v;
735
-		}
736
-		if ((!$op) or ($op == 1) or ($op == '0=0')) {
737
-			unset($where[$k]);
738
-			$menage = true;
739
-		}
740
-	}
741
-
742
-	// evacuer les eventuels groupby vide issus d'un calcul dynamique
743
-	$groupby = array_diff($groupby, ['']);
744
-
745
-	// remplacer les sous requetes recursives au calcul
746
-	[$where_simples, $where_sous] = trouver_sous_requetes($where);
747
-	foreach ($where_sous as $k => $w) {
748
-		$menage = true;
749
-		// on recupere la sous requete
750
-		$sous = match_self($w);
751
-		if ($sous[0] == 'SELF') {
752
-			// c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
753
-			array_push($where_simples, $sous[2]);
754
-			$wheresub = [
755
-				$sous[2],
756
-				'0=0'
757
-			]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
758
-			$jsub = $join;
759
-			// trouver les jointures utiles a
760
-			// reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
761
-			// ie L1.objet='article'
762
-			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
763
-			$i = 0;
764
-			do {
765
-				$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
766
-					[$sous[1] . ' AS id'],
767
-					$from,
768
-					$from_type,
769
-					$wheresub,
770
-					$jsub,
771
-					[],
772
-					[],
773
-					'',
774
-					$having,
775
-					$table,
776
-					$id,
777
-					$serveur,
778
-					false
779
-				) . ')');
780
-				if (!$i) {
781
-					$i = 1;
782
-					$wherestring = calculer_where_to_string($where[$k]);
783
-					foreach ($join as $cle => $wj) {
784
-						if (
785
-							(is_countable($wj) ? count($wj) : 0) == 4
786
-							and str_contains($wherestring, (string) "{$cle}.")
787
-						) {
788
-							$i = 0;
789
-							$wheresub[] = $wj[3];
790
-							unset($jsub[$cle][3]);
791
-						}
792
-					}
793
-				}
794
-			} while ($i++ < 1);
795
-		}
796
-		if ($sous[0] == 'SUBSELECT') {
797
-			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
798
-			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
799
-			$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
800
-				$sous[1], # select
801
-				$sous[2], #from
802
-				[], #from_type
803
-				$sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
804
-				#where, qui peut etre de la forme string comme dans sql_select
805
-					[], #join
806
-				$sous[4] ?: [], #groupby
807
-				$sous[5] ?: [], #orderby
808
-				$sous[6], #limit
809
-				$sous[7] ?: [], #having
810
-				$table,
811
-				$id,
812
-				$serveur,
813
-				false
814
-			) . ')');
815
-		}
816
-		array_pop($where_simples);
817
-	}
818
-
819
-	foreach ($having as $k => $v) {
820
-		if ((!$v) or ($v == 1) or ($v == '0=0')) {
821
-			unset($having[$k]);
822
-		}
823
-	}
824
-
825
-	// Installer les jointures.
826
-	// Retirer celles seulement utiles aux criteres finalement absents mais
827
-	// parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
828
-	// si elle est seulement utile a Ln+1 elle meme inutile
829
-
830
-	$afrom = [];
831
-	$equiv = [];
832
-	$k = count($join);
833
-	foreach (array_reverse($join, true) as $cledef => $j) {
834
-		$cle = $cledef;
835
-		// le format de join est :
836
-		// array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
837
-		$join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
838
-		if (count($join[$cle]) == 2) {
839
-			$join[$cle][] = $join[$cle][1];
840
-		}
841
-		if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) {
842
-			$join[$cle][] = '';
843
-		}
844
-		[$t, $c, $carr, $and] = $join[$cle];
845
-		// si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
846
-		// pour compat avec ancienne convention
847
-		if (is_numeric($cle)) {
848
-			$cle = "L$k";
849
-		}
850
-		$cle_where_lie = "JOIN-$cle";
851
-		if (
852
-			!$menage
853
-			or isset($afrom[$cle])
854
-			or calculer_jointnul($cle, $select)
855
-			or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
856
-			or calculer_jointnul($cle, $having)
857
-			or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
858
-		) {
859
-			// corriger les references non explicites dans select
860
-			// ou groupby
861
-			foreach ($select as $i => $s) {
862
-				if ($s == $c) {
863
-					$select[$i] = "$cle.$c AS $c";
864
-					break;
865
-				}
866
-			}
867
-			foreach ($groupby as $i => $g) {
868
-				if ($g == $c) {
869
-					$groupby[$i] = "$cle.$c";
870
-					break;
871
-				}
872
-			}
873
-			// on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
874
-			// sans recours a preg_match
875
-			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
876
-			$afrom[$t][$cle] = [
877
-				"\n" .
878
-				($from_type[$cle] ?? 'INNER') . ' JOIN',
879
-				$from[$cle],
880
-				"AS $cle",
881
-				'ON (',
882
-				"$cle.$c",
883
-				'=',
884
-				"$t.$carr",
885
-				($and ? 'AND ' . $and : '') .
886
-				')'
887
-			];
888
-			if (isset($afrom[$cle])) {
889
-				$afrom[$t] = $afrom[$t] + $afrom[$cle];
890
-				unset($afrom[$cle]);
891
-			}
892
-			$equiv[] = $carr;
893
-		} else {
894
-			unset($join[$cledef]);
895
-			if (isset($where_simples[$cle_where_lie])) {
896
-				unset($where_simples[$cle_where_lie]);
897
-				unset($where[$cle_where_lie]);
898
-			}
899
-		}
900
-		unset($from[$cle]);
901
-		$k--;
902
-	}
903
-
904
-	if (count($afrom)) {
905
-		// Regarder si la table principale ne sert finalement a rien comme dans
906
-		//<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
907
-		//<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
908
-		//<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
909
-		// ou dans
910
-		//<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
911
-		// qui comporte plusieurs jointures
912
-		// ou dans
913
-		// <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
914
-		// <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
915
-		// penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
916
-		// <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
917
-		// penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
918
-		// <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
919
-
920
-		$t = key($from);
921
-		$c = current($from);
922
-		reset($from);
923
-		$e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
924
-		if (
925
-			!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
926
-				calculer_jointnul($t, $select, $e) or
927
-				calculer_jointnul($t, $join, $e) or
928
-				calculer_jointnul($t, $where, $e) or
929
-				calculer_jointnul($t, $orderby, $e) or
930
-				calculer_jointnul($t, $groupby, $e) or
931
-				calculer_jointnul($t, $having, $e))
932
-			&& count($afrom[$t])
933
-		) {
934
-			$nfrom = reset($afrom[$t]);
935
-			$nt = array_key_first($afrom[$t]);
936
-			unset($from[$t]);
937
-			$from[$nt] = $nfrom[1];
938
-			unset($afrom[$t][$nt]);
939
-			$afrom[$nt] = $afrom[$t];
940
-			unset($afrom[$t]);
941
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
942
-			$t = $nfrom[4];
943
-			$alias = '';
944
-			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
945
-			$oldcle = explode('.', $nfrom[6]);
946
-			$oldcle = end($oldcle);
947
-			$newcle = explode('.', $nfrom[4]);
948
-			$newcle = end($newcle);
949
-			if ($newcle != $oldcle) {
950
-				// si l'ancienne cle etait deja dans le select avec un AS
951
-				// reprendre simplement ce AS
952
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
953
-				if (preg_match($as, implode(',', $select), $m)) {
954
-					$alias = '';
955
-				} else {
956
-					$alias = ', ' . $nfrom[4] . " AS $oldcle";
957
-				}
958
-			}
959
-			$select = remplacer_jointnul($t . $alias, $select, $e);
960
-			$join = remplacer_jointnul($t, $join, $e);
961
-			$where = remplacer_jointnul($t, $where, $e);
962
-			$having = remplacer_jointnul($t, $having, $e);
963
-			$groupby = remplacer_jointnul($t, $groupby, $e);
964
-			$orderby = remplacer_jointnul($t, $orderby, $e);
965
-		}
966
-		$from = reinjecte_joint($afrom, $from);
967
-	}
968
-	if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
969
-		$wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
970
-		$GLOBALS['debug'] = [];
971
-		if ($wasdebug) {
972
-			$GLOBALS['debug']['debug'] = true;
973
-		}
974
-	}
975
-	$GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
976
-	$r = sql_select(
977
-		$select,
978
-		$from,
979
-		$where,
980
-		$groupby,
981
-		array_filter($orderby),
982
-		$limit,
983
-		$having,
984
-		$serveur,
985
-		$requeter
986
-	);
987
-	unset($GLOBALS['debug']['aucasou']);
988
-
989
-	return $r;
719
+    // retirer les criteres vides:
720
+    // {X ?} avec X absent de l'URL
721
+    // {par #ENV{X}} avec X absent de l'URL
722
+    // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
723
+    $menage = false;
724
+    foreach ($where as $k => $v) {
725
+        if (is_array($v) and count($v)) {
726
+            if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
727
+                $op = false;
728
+            } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
729
+                $op = false;
730
+            } else {
731
+                $op = $v[0] ?: $v;
732
+            }
733
+        } else {
734
+            $op = $v;
735
+        }
736
+        if ((!$op) or ($op == 1) or ($op == '0=0')) {
737
+            unset($where[$k]);
738
+            $menage = true;
739
+        }
740
+    }
741
+
742
+    // evacuer les eventuels groupby vide issus d'un calcul dynamique
743
+    $groupby = array_diff($groupby, ['']);
744
+
745
+    // remplacer les sous requetes recursives au calcul
746
+    [$where_simples, $where_sous] = trouver_sous_requetes($where);
747
+    foreach ($where_sous as $k => $w) {
748
+        $menage = true;
749
+        // on recupere la sous requete
750
+        $sous = match_self($w);
751
+        if ($sous[0] == 'SELF') {
752
+            // c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where)
753
+            array_push($where_simples, $sous[2]);
754
+            $wheresub = [
755
+                $sous[2],
756
+                '0=0'
757
+            ]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where
758
+            $jsub = $join;
759
+            // trouver les jointures utiles a
760
+            // reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees
761
+            // ie L1.objet='article'
762
+            // on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
763
+            $i = 0;
764
+            do {
765
+                $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
766
+                    [$sous[1] . ' AS id'],
767
+                    $from,
768
+                    $from_type,
769
+                    $wheresub,
770
+                    $jsub,
771
+                    [],
772
+                    [],
773
+                    '',
774
+                    $having,
775
+                    $table,
776
+                    $id,
777
+                    $serveur,
778
+                    false
779
+                ) . ')');
780
+                if (!$i) {
781
+                    $i = 1;
782
+                    $wherestring = calculer_where_to_string($where[$k]);
783
+                    foreach ($join as $cle => $wj) {
784
+                        if (
785
+                            (is_countable($wj) ? count($wj) : 0) == 4
786
+                            and str_contains($wherestring, (string) "{$cle}.")
787
+                        ) {
788
+                            $i = 0;
789
+                            $wheresub[] = $wj[3];
790
+                            unset($jsub[$cle][3]);
791
+                        }
792
+                    }
793
+                }
794
+            } while ($i++ < 1);
795
+        }
796
+        if ($sous[0] == 'SUBSELECT') {
797
+            // c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
798
+            array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
799
+            $where[$k] = remplace_sous_requete($w, '(' . calculer_select(
800
+                $sous[1], # select
801
+                $sous[2], #from
802
+                [], #from_type
803
+                $sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [],
804
+                #where, qui peut etre de la forme string comme dans sql_select
805
+                    [], #join
806
+                $sous[4] ?: [], #groupby
807
+                $sous[5] ?: [], #orderby
808
+                $sous[6], #limit
809
+                $sous[7] ?: [], #having
810
+                $table,
811
+                $id,
812
+                $serveur,
813
+                false
814
+            ) . ')');
815
+        }
816
+        array_pop($where_simples);
817
+    }
818
+
819
+    foreach ($having as $k => $v) {
820
+        if ((!$v) or ($v == 1) or ($v == '0=0')) {
821
+            unset($having[$k]);
822
+        }
823
+    }
824
+
825
+    // Installer les jointures.
826
+    // Retirer celles seulement utiles aux criteres finalement absents mais
827
+    // parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
828
+    // si elle est seulement utile a Ln+1 elle meme inutile
829
+
830
+    $afrom = [];
831
+    $equiv = [];
832
+    $k = count($join);
833
+    foreach (array_reverse($join, true) as $cledef => $j) {
834
+        $cle = $cledef;
835
+        // le format de join est :
836
+        // array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]])
837
+        $join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber
838
+        if (count($join[$cle]) == 2) {
839
+            $join[$cle][] = $join[$cle][1];
840
+        }
841
+        if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) {
842
+            $join[$cle][] = '';
843
+        }
844
+        [$t, $c, $carr, $and] = $join[$cle];
845
+        // si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste
846
+        // pour compat avec ancienne convention
847
+        if (is_numeric($cle)) {
848
+            $cle = "L$k";
849
+        }
850
+        $cle_where_lie = "JOIN-$cle";
851
+        if (
852
+            !$menage
853
+            or isset($afrom[$cle])
854
+            or calculer_jointnul($cle, $select)
855
+            or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]]))
856
+            or calculer_jointnul($cle, $having)
857
+            or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => '']))
858
+        ) {
859
+            // corriger les references non explicites dans select
860
+            // ou groupby
861
+            foreach ($select as $i => $s) {
862
+                if ($s == $c) {
863
+                    $select[$i] = "$cle.$c AS $c";
864
+                    break;
865
+                }
866
+            }
867
+            foreach ($groupby as $i => $g) {
868
+                if ($g == $c) {
869
+                    $groupby[$i] = "$cle.$c";
870
+                    break;
871
+                }
872
+            }
873
+            // on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin
874
+            // sans recours a preg_match
875
+            // un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
876
+            $afrom[$t][$cle] = [
877
+                "\n" .
878
+                ($from_type[$cle] ?? 'INNER') . ' JOIN',
879
+                $from[$cle],
880
+                "AS $cle",
881
+                'ON (',
882
+                "$cle.$c",
883
+                '=',
884
+                "$t.$carr",
885
+                ($and ? 'AND ' . $and : '') .
886
+                ')'
887
+            ];
888
+            if (isset($afrom[$cle])) {
889
+                $afrom[$t] = $afrom[$t] + $afrom[$cle];
890
+                unset($afrom[$cle]);
891
+            }
892
+            $equiv[] = $carr;
893
+        } else {
894
+            unset($join[$cledef]);
895
+            if (isset($where_simples[$cle_where_lie])) {
896
+                unset($where_simples[$cle_where_lie]);
897
+                unset($where[$cle_where_lie]);
898
+            }
899
+        }
900
+        unset($from[$cle]);
901
+        $k--;
902
+    }
903
+
904
+    if (count($afrom)) {
905
+        // Regarder si la table principale ne sert finalement a rien comme dans
906
+        //<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3>
907
+        //<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2>
908
+        //<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5>
909
+        // ou dans
910
+        //<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8>
911
+        // qui comporte plusieurs jointures
912
+        // ou dans
913
+        // <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6>
914
+        // <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7>
915
+        // penser a regarder aussi la clause orderby pour ne pas simplifier abusivement
916
+        // <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9>
917
+        // penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement
918
+        // <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10>
919
+
920
+        $t = key($from);
921
+        $c = current($from);
922
+        reset($from);
923
+        $e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
924
+        if (
925
+            !(strpos($t, ' ') or // jointure des le depart cf boucle_doc
926
+                calculer_jointnul($t, $select, $e) or
927
+                calculer_jointnul($t, $join, $e) or
928
+                calculer_jointnul($t, $where, $e) or
929
+                calculer_jointnul($t, $orderby, $e) or
930
+                calculer_jointnul($t, $groupby, $e) or
931
+                calculer_jointnul($t, $having, $e))
932
+            && count($afrom[$t])
933
+        ) {
934
+            $nfrom = reset($afrom[$t]);
935
+            $nt = array_key_first($afrom[$t]);
936
+            unset($from[$t]);
937
+            $from[$nt] = $nfrom[1];
938
+            unset($afrom[$t][$nt]);
939
+            $afrom[$nt] = $afrom[$t];
940
+            unset($afrom[$t]);
941
+            $e = '/\b' . preg_quote($nfrom[6]) . '\b/';
942
+            $t = $nfrom[4];
943
+            $alias = '';
944
+            // verifier que les deux cles sont homonymes, sinon installer un alias dans le select
945
+            $oldcle = explode('.', $nfrom[6]);
946
+            $oldcle = end($oldcle);
947
+            $newcle = explode('.', $nfrom[4]);
948
+            $newcle = end($newcle);
949
+            if ($newcle != $oldcle) {
950
+                // si l'ancienne cle etait deja dans le select avec un AS
951
+                // reprendre simplement ce AS
952
+                $as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
953
+                if (preg_match($as, implode(',', $select), $m)) {
954
+                    $alias = '';
955
+                } else {
956
+                    $alias = ', ' . $nfrom[4] . " AS $oldcle";
957
+                }
958
+            }
959
+            $select = remplacer_jointnul($t . $alias, $select, $e);
960
+            $join = remplacer_jointnul($t, $join, $e);
961
+            $where = remplacer_jointnul($t, $where, $e);
962
+            $having = remplacer_jointnul($t, $having, $e);
963
+            $groupby = remplacer_jointnul($t, $groupby, $e);
964
+            $orderby = remplacer_jointnul($t, $orderby, $e);
965
+        }
966
+        $from = reinjecte_joint($afrom, $from);
967
+    }
968
+    if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) {
969
+        $wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug'];
970
+        $GLOBALS['debug'] = [];
971
+        if ($wasdebug) {
972
+            $GLOBALS['debug']['debug'] = true;
973
+        }
974
+    }
975
+    $GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter];
976
+    $r = sql_select(
977
+        $select,
978
+        $from,
979
+        $where,
980
+        $groupby,
981
+        array_filter($orderby),
982
+        $limit,
983
+        $having,
984
+        $serveur,
985
+        $requeter
986
+    );
987
+    unset($GLOBALS['debug']['aucasou']);
988
+
989
+    return $r;
990 990
 }
991 991
 
992 992
 /**
@@ -997,79 +997,79 @@  discard block
 block discarded – undo
997 997
  * @return string
998 998
  */
999 999
 function calculer_where_to_string($v, $join = 'AND') {
1000
-	if (empty($v)) {
1001
-		return '';
1002
-	}
1003
-
1004
-	if (!is_array($v)) {
1005
-		return $v;
1006
-	} else {
1007
-		$exp = '';
1008
-		if (strtoupper($join) === 'AND') {
1009
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1010
-		} else {
1011
-			return $exp . join($join, $v);
1012
-		}
1013
-	}
1000
+    if (empty($v)) {
1001
+        return '';
1002
+    }
1003
+
1004
+    if (!is_array($v)) {
1005
+        return $v;
1006
+    } else {
1007
+        $exp = '';
1008
+        if (strtoupper($join) === 'AND') {
1009
+            return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1010
+        } else {
1011
+            return $exp . join($join, $v);
1012
+        }
1013
+    }
1014 1014
 }
1015 1015
 
1016 1016
 
1017 1017
 //condition suffisante (mais non necessaire) pour qu'une table soit utile
1018 1018
 
1019 1019
 function calculer_jointnul($cle, $exp, $equiv = '') {
1020
-	if (!is_array($exp)) {
1021
-		if ($equiv) {
1022
-			$exp = preg_replace($equiv, '', $exp);
1023
-		}
1024
-
1025
-		return preg_match("/\\b$cle\\./", $exp);
1026
-	} else {
1027
-		foreach ($exp as $v) {
1028
-			if (calculer_jointnul($cle, $v, $equiv)) {
1029
-				return true;
1030
-			}
1031
-		}
1032
-
1033
-		return false;
1034
-	}
1020
+    if (!is_array($exp)) {
1021
+        if ($equiv) {
1022
+            $exp = preg_replace($equiv, '', $exp);
1023
+        }
1024
+
1025
+        return preg_match("/\\b$cle\\./", $exp);
1026
+    } else {
1027
+        foreach ($exp as $v) {
1028
+            if (calculer_jointnul($cle, $v, $equiv)) {
1029
+                return true;
1030
+            }
1031
+        }
1032
+
1033
+        return false;
1034
+    }
1035 1035
 }
1036 1036
 
1037 1037
 function reinjecte_joint($afrom, $from) {
1038
-	$from_synth = [];
1039
-	foreach ($from as $k => $v) {
1040
-		$from_synth[$k] = $from[$k];
1041
-		if (isset($afrom[$k])) {
1042
-			foreach ($afrom[$k] as $kk => $vv) {
1043
-				$afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1044
-			}
1045
-			$from_synth["$k@"] = implode(' ', $afrom[$k]);
1046
-			unset($afrom[$k]);
1047
-		}
1048
-	}
1049
-
1050
-	return $from_synth;
1038
+    $from_synth = [];
1039
+    foreach ($from as $k => $v) {
1040
+        $from_synth[$k] = $from[$k];
1041
+        if (isset($afrom[$k])) {
1042
+            foreach ($afrom[$k] as $kk => $vv) {
1043
+                $afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]);
1044
+            }
1045
+            $from_synth["$k@"] = implode(' ', $afrom[$k]);
1046
+            unset($afrom[$k]);
1047
+        }
1048
+    }
1049
+
1050
+    return $from_synth;
1051 1051
 }
1052 1052
 
1053 1053
 function remplacer_jointnul($cle, $exp, $equiv = '') {
1054
-	if (!is_array($exp)) {
1055
-		return preg_replace($equiv, $cle, $exp);
1056
-	} else {
1057
-		foreach ($exp as $k => $v) {
1058
-			$exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1059
-		}
1060
-
1061
-		return $exp;
1062
-	}
1054
+    if (!is_array($exp)) {
1055
+        return preg_replace($equiv, $cle, $exp);
1056
+    } else {
1057
+        foreach ($exp as $k => $v) {
1058
+            $exp[$k] = remplacer_jointnul($cle, $v, $equiv);
1059
+        }
1060
+
1061
+        return $exp;
1062
+    }
1063 1063
 }
1064 1064
 
1065 1065
 // calcul du nom du squelette
1066 1066
 function calculer_nom_fonction_squel($skel, $mime_type = 'html', string $connect = '') {
1067
-	// ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1068
-	if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1069
-		$skel = substr($skel, strlen(_DIR_RACINE));
1070
-	}
1071
-
1072
-	return $mime_type
1073
-	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1074
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1067
+    // ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine
1068
+    if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) {
1069
+        $skel = substr($skel, strlen(_DIR_RACINE));
1070
+    }
1071
+
1072
+    return $mime_type
1073
+    . (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1074
+    . md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1075 1075
 }
Please login to merge, or discard this patch.
Spacing   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -54,7 +54,7 @@  discard block
 block discarded – undo
54 54
 		$GLOBALS['debug_objets']['courant'] = $nom;
55 55
 	}
56 56
 
57
-	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php';
57
+	$phpfile = sous_repertoire(_DIR_SKELS, '', false, true).$nom.'.php';
58 58
 
59 59
 	// si squelette est deja compile et perenne, le charger
60 60
 	if (!squelette_obsolete($phpfile, $source)) {
@@ -67,7 +67,7 @@  discard block
 block discarded – undo
67 67
 		#}
68 68
 	}
69 69
 
70
-	if (file_exists($lib = $squelette . '_fonctions' . '.php')) {
70
+	if (file_exists($lib = $squelette.'_fonctions'.'.php')) {
71 71
 		include_once $lib;
72 72
 	}
73 73
 
@@ -95,7 +95,7 @@  discard block
 block discarded – undo
95 95
 			eval("return true; $f ;");
96 96
 		} catch (\ParseError $e) {
97 97
 			// Code syntaxiquement faux (critere etc mal programme')
98
-			$msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage();
98
+			$msg = _T('zbug_erreur_compilation').' | Line '.$e->getLine().' : '.$e->getMessage();
99 99
 			erreur_squelette($msg, $boucle);
100 100
 			// continuer pour trouver d'autres fautes eventuelles
101 101
 			// mais prevenir que c'est mort
@@ -123,7 +123,7 @@  discard block
 block discarded – undo
123 123
 
124 124
 	if (defined('_VAR_MODE') and _VAR_MODE == 'debug') {
125 125
 		// Tracer ce qui vient d'etre compile
126
-		$GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code;
126
+		$GLOBALS['debug_objets']['code'][$nom.'tout'] = $code;
127 127
 
128 128
 		// si c'est ce que demande le debusqueur, lui passer la main
129 129
 		if (
@@ -147,13 +147,13 @@  discard block
 block discarded – undo
147 147
 		$code = "
148 148
 /*
149 149
  * Squelette : $sourcefile
150
- * Date :      " . gmdate('D, d M Y H:i:s', @filemtime($sourcefile)) . ' GMT
151
- * Compile :   ' . gmdate('D, d M Y H:i:s', time()) . ' GMT
152
- * ' . (!$boucles ? 'Pas de boucle' : ('Boucles :   ' . $noms)) . '
150
+ * Date :      ".gmdate('D, d M Y H:i:s', @filemtime($sourcefile)).' GMT
151
+ * Compile :   ' . gmdate('D, d M Y H:i:s', time()).' GMT
152
+ * ' . (!$boucles ? 'Pas de boucle' : ('Boucles :   '.$noms)).'
153 153
  */ ';
154 154
 	}
155 155
 
156
-	$code = '<' . "?php\n" . $code . join('', $boucles) . "\n";
156
+	$code = '<'."?php\n".$code.join('', $boucles)."\n";
157 157
 	if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) {
158 158
 		ecrire_fichier($phpfile, $code);
159 159
 	}
@@ -215,18 +215,18 @@  discard block
 block discarded – undo
215 215
 			$j = join('-', array_map('ucwords', explode('-', strtolower($r[2]))));
216 216
 
217 217
 			if ($j == 'X-Spip-Filtre' and isset($headers[$j])) {
218
-				$headers[$j] .= '|' . $r[3];
218
+				$headers[$j] .= '|'.$r[3];
219 219
 			} else {
220
-				$headers[$j] = str_replace(['\\\\',"\\'",'\\"'], ['\\',"'",'"'], $r[3]);
220
+				$headers[$j] = str_replace(['\\\\', "\\'", '\\"'], ['\\', "'", '"'], $r[3]);
221 221
 			}
222 222
 		}
223 223
 	}
224 224
 	// S'agit-il d'un resultat constant ou contenant du code php
225 225
 	$process_ins = (
226
-		strpos($corps, '<' . '?') === false
226
+		strpos($corps, '<'.'?') === false
227 227
 		or
228
-		(strpos($corps, '<' . '?xml') !== false and
229
-			strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
228
+		(strpos($corps, '<'.'?xml') !== false and
229
+			strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
230 230
 	)
231 231
 		? 'html'
232 232
 		: 'php';
@@ -255,10 +255,10 @@  discard block
 block discarded – undo
255 255
 
256 256
 		if ($process_ins == 'html') {
257 257
 			$skel['process_ins'] = (
258
-				strpos($corps, '<' . '?') === false
258
+				strpos($corps, '<'.'?') === false
259 259
 				or
260
-				(strpos($corps, '<' . '?xml') !== false and
261
-					strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false)
260
+				(strpos($corps, '<'.'?xml') !== false and
261
+					strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false)
262 262
 			)
263 263
 				? 'html'
264 264
 				: 'php';
@@ -276,7 +276,7 @@  discard block
 block discarded – undo
276 276
 //
277 277
 
278 278
 /** Code PHP pour inclure une balise dynamique à l'exécution d'une page */
279
-define('CODE_INCLURE_BALISE', '<' . '?php
279
+define('CODE_INCLURE_BALISE', '<'.'?php
280 280
 include_once("%s");
281 281
 if ($lang_select = "%s") $lang_select = lang_select($lang_select);
282 282
 inserer_balise_dynamique(balise_%s_dyn(%s), array(%s));
@@ -307,7 +307,7 @@  discard block
 block discarded – undo
307 307
 		// pas de lien symbolique sous Windows
308 308
 		and !(stristr(PHP_OS, 'WIN') and str_contains($file, ':'))
309 309
 	) {
310
-		$file = './" . _DIR_RACINE . "' . $file;
310
+		$file = './" . _DIR_RACINE . "'.$file;
311 311
 	}
312 312
 
313 313
 	$lang = $context_compil[4];
@@ -317,7 +317,7 @@  discard block
 block discarded – undo
317 317
 
318 318
 	$args = array_map('argumenter_squelette', $args);
319 319
 	if (!empty($context_compil['appel_php_depuis_modele'])) {
320
-		$args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')';
320
+		$args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')';
321 321
 	}
322 322
 	$args = join(', ', $args);
323 323
 
@@ -351,14 +351,14 @@  discard block
 block discarded – undo
351 351
 	if (is_object($v)) {
352 352
 		return var_export($v, true);
353 353
 	} elseif (!is_array($v)) {
354
-		return "'" . texte_script((string) $v) . "'";
354
+		return "'".texte_script((string) $v)."'";
355 355
 	} else {
356 356
 		$out = [];
357 357
 		foreach ($v as $k => $val) {
358
-			$out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val);
358
+			$out [] = argumenter_squelette($k).'=>'.argumenter_squelette($val);
359 359
 		}
360 360
 
361
-		return 'array(' . join(', ', $out) . ')';
361
+		return 'array('.join(', ', $out).')';
362 362
 	}
363 363
 }
364 364
 
@@ -383,7 +383,7 @@  discard block
 block discarded – undo
383 383
 	}
384 384
 	else {
385 385
 		$str_args = base64_encode(serialize($args));
386
-		return "<?" . "php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
386
+		return "<?"."php \$_zargs=unserialize(base64_decode('$str_args'));echo executer_balise_dynamique(...\$_zargs); ?".">\n";
387 387
 	}
388 388
 }
389 389
 
@@ -461,7 +461,7 @@  discard block
 block discarded – undo
461 461
 	}
462 462
 
463 463
 	// Y a-t-il une fonction de traitement des arguments ?
464
-	$f = 'balise_' . $nom_balise . '_stat';
464
+	$f = 'balise_'.$nom_balise.'_stat';
465 465
 
466 466
 	$r = !function_exists($f) ? $args : $f($args, $context_compil);
467 467
 
@@ -471,18 +471,18 @@  discard block
 block discarded – undo
471 471
 
472 472
 	// verifier que la fonction dyn est la,
473 473
 	// sinon se replier sur la generique si elle existe
474
-	if (!function_exists('balise_' . $nom_balise . '_dyn')) {
474
+	if (!function_exists('balise_'.$nom_balise.'_dyn')) {
475 475
 		if (
476 476
 			$balise_generique = chercher_balise_generique($nom)
477 477
 			and $nom_balise_generique = $balise_generique['nom_generique']
478
-			and $file = include_spip('balise/' . strtolower($nom_balise_generique))
479
-			and function_exists('balise_' . $nom_balise_generique . '_dyn')
478
+			and $file = include_spip('balise/'.strtolower($nom_balise_generique))
479
+			and function_exists('balise_'.$nom_balise_generique.'_dyn')
480 480
 		) {
481 481
 			// et lui injecter en premier arg le nom de la balise
482 482
 			array_unshift($r, $nom);
483 483
 			$nom_balise = $nom_balise_generique;
484 484
 			if (!_DIR_RESTREINT) {
485
-				$file = _DIR_RESTREINT_ABS . $file;
485
+				$file = _DIR_RESTREINT_ABS.$file;
486 486
 			}
487 487
 		} else {
488 488
 			$msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]];
@@ -583,7 +583,7 @@  discard block
 block discarded – undo
583 583
 		$n = '';
584 584
 		foreach (explode(',', $liste) as $val) {
585 585
 			if ($a = intval($val) and $val === strval($a)) {
586
-				$n .= ',' . $val;
586
+				$n .= ','.$val;
587 587
 			}
588 588
 		}
589 589
 		if (strlen($n)) {
@@ -762,8 +762,8 @@  discard block
 block discarded – undo
762 762
 			// on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction
763 763
 			$i = 0;
764 764
 			do {
765
-				$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
766
-					[$sous[1] . ' AS id'],
765
+				$where[$k] = remplace_sous_requete($w, '('.calculer_select(
766
+					[$sous[1].' AS id'],
767 767
 					$from,
768 768
 					$from_type,
769 769
 					$wheresub,
@@ -776,7 +776,7 @@  discard block
 block discarded – undo
776 776
 					$id,
777 777
 					$serveur,
778 778
 					false
779
-				) . ')');
779
+				).')');
780 780
 				if (!$i) {
781 781
 					$i = 1;
782 782
 					$wherestring = calculer_where_to_string($where[$k]);
@@ -796,7 +796,7 @@  discard block
 block discarded – undo
796 796
 		if ($sous[0] == 'SUBSELECT') {
797 797
 			// c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having)
798 798
 			array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ?
799
-			$where[$k] = remplace_sous_requete($w, '(' . calculer_select(
799
+			$where[$k] = remplace_sous_requete($w, '('.calculer_select(
800 800
 				$sous[1], # select
801 801
 				$sous[2], #from
802 802
 				[], #from_type
@@ -811,7 +811,7 @@  discard block
 block discarded – undo
811 811
 				$id,
812 812
 				$serveur,
813 813
 				false
814
-			) . ')');
814
+			).')');
815 815
 		}
816 816
 		array_pop($where_simples);
817 817
 	}
@@ -874,15 +874,15 @@  discard block
 block discarded – undo
874 874
 			// sans recours a preg_match
875 875
 			// un implode(' ',..) est fait dans reinjecte_joint un peu plus bas
876 876
 			$afrom[$t][$cle] = [
877
-				"\n" .
878
-				($from_type[$cle] ?? 'INNER') . ' JOIN',
877
+				"\n".
878
+				($from_type[$cle] ?? 'INNER').' JOIN',
879 879
 				$from[$cle],
880 880
 				"AS $cle",
881 881
 				'ON (',
882 882
 				"$cle.$c",
883 883
 				'=',
884 884
 				"$t.$carr",
885
-				($and ? 'AND ' . $and : '') .
885
+				($and ? 'AND '.$and : '').
886 886
 				')'
887 887
 			];
888 888
 			if (isset($afrom[$cle])) {
@@ -920,7 +920,7 @@  discard block
 block discarded – undo
920 920
 		$t = key($from);
921 921
 		$c = current($from);
922 922
 		reset($from);
923
-		$e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/';
923
+		$e = '/\b('."$t\\.".join('|'.$t.'\.', $equiv).')\b/';
924 924
 		if (
925 925
 			!(strpos($t, ' ') or // jointure des le depart cf boucle_doc
926 926
 				calculer_jointnul($t, $select, $e) or
@@ -938,7 +938,7 @@  discard block
 block discarded – undo
938 938
 			unset($afrom[$t][$nt]);
939 939
 			$afrom[$nt] = $afrom[$t];
940 940
 			unset($afrom[$t]);
941
-			$e = '/\b' . preg_quote($nfrom[6]) . '\b/';
941
+			$e = '/\b'.preg_quote($nfrom[6]).'\b/';
942 942
 			$t = $nfrom[4];
943 943
 			$alias = '';
944 944
 			// verifier que les deux cles sont homonymes, sinon installer un alias dans le select
@@ -949,14 +949,14 @@  discard block
 block discarded – undo
949 949
 			if ($newcle != $oldcle) {
950 950
 				// si l'ancienne cle etait deja dans le select avec un AS
951 951
 				// reprendre simplement ce AS
952
-				$as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/';
952
+				$as = '/\b'.preg_quote($nfrom[6]).'\s+(AS\s+\w+)\b/';
953 953
 				if (preg_match($as, implode(',', $select), $m)) {
954 954
 					$alias = '';
955 955
 				} else {
956
-					$alias = ', ' . $nfrom[4] . " AS $oldcle";
956
+					$alias = ', '.$nfrom[4]." AS $oldcle";
957 957
 				}
958 958
 			}
959
-			$select = remplacer_jointnul($t . $alias, $select, $e);
959
+			$select = remplacer_jointnul($t.$alias, $select, $e);
960 960
 			$join = remplacer_jointnul($t, $join, $e);
961 961
 			$where = remplacer_jointnul($t, $where, $e);
962 962
 			$having = remplacer_jointnul($t, $having, $e);
@@ -1006,9 +1006,9 @@  discard block
 block discarded – undo
1006 1006
 	} else {
1007 1007
 		$exp = '';
1008 1008
 		if (strtoupper($join) === 'AND') {
1009
-			return $exp . join(" $join ", array_map('calculer_where_to_string', $v));
1009
+			return $exp.join(" $join ", array_map('calculer_where_to_string', $v));
1010 1010
 		} else {
1011
-			return $exp . join($join, $v);
1011
+			return $exp.join($join, $v);
1012 1012
 		}
1013 1013
 	}
1014 1014
 }
@@ -1070,6 +1070,6 @@  discard block
 block discarded – undo
1070 1070
 	}
1071 1071
 
1072 1072
 	return $mime_type
1073
-	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_'
1074
-	. md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : ''));
1073
+	. (!$connect ? '' : preg_replace('/\W/', '_', $connect)).'_'
1074
+	. md5($GLOBALS['spip_version_code'].' * '.$skel.(isset($GLOBALS['marqueur_skel']) ? '*'.$GLOBALS['marqueur_skel'] : ''));
1075 1075
 }
Please login to merge, or discard this patch.
ecrire/public/debusquer.php 2 patches
Spacing   +87 added lines, -90 removed lines patch added patch discarded remove patch
@@ -147,7 +147,7 @@  discard block
 block discarded – undo
147 147
 		if (!$fonc) {
148 148
 			$fonc = $GLOBALS['debug_objets']['principal'];
149 149
 		}
150
-		$titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
150
+		$titre = !$mode ? $fonc : ($mode.(isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' '.$GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
151 151
 	}
152 152
 	if ($message === false) {
153 153
 		lang_select();
@@ -176,7 +176,7 @@  discard block
 block discarded – undo
176 176
 	$fond = $GLOBALS['fond'] ?? '';
177 177
 	// une erreur critique sort $message en array
178 178
 	$debug = is_array($msg) ? $msg[1] : $msg;
179
-	spip_log('Debug: ' . $debug . ' (' . $fond . ')');
179
+	spip_log('Debug: '.$debug.' ('.$fond.')');
180 180
 
181 181
 	return $msg;
182 182
 }
@@ -184,7 +184,7 @@  discard block
 block discarded – undo
184 184
 function debusquer_bandeau($erreurs) {
185 185
 
186 186
 	if (!empty($erreurs)) {
187
-		$n = [(is_countable($erreurs) ? count($erreurs) : 0) . ' ' . _T('zbug_erreur_squelette')];
187
+		$n = [(is_countable($erreurs) ? count($erreurs) : 0).' '._T('zbug_erreur_squelette')];
188 188
 
189 189
 		return debusquer_navigation($erreurs, $n);
190 190
 	} elseif (!empty($GLOBALS['tableau_des_temps'])) {
@@ -217,25 +217,25 @@  discard block
 block discarded – undo
217 217
 			$valeur_simple = [];
218 218
 			foreach ($valeur as $v) {
219 219
 				if (is_array($v)) {
220
-					$valeur_simple[] = 'array:' . count($v);
220
+					$valeur_simple[] = 'array:'.count($v);
221 221
 				} elseif (is_object($v)) {
222 222
 					$valeur_simple[] = get_class($v);
223 223
 				} elseif (is_string($v)) {
224
-					$valeur_simple[] = "'" . $v . "'";
224
+					$valeur_simple[] = "'".$v."'";
225 225
 				} else {
226 226
 					$valeur_simple[] = $v;
227 227
 				}
228 228
 			}
229 229
 			$n = count($valeur);
230
-			$valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
231
-			$valeur .= '[' . join(', ', $valeur_simple) . ']';
230
+			$valeur = (($n > 3) ? 'array:'.$n.' ' : '');
231
+			$valeur .= '['.join(', ', $valeur_simple).']';
232 232
 		} elseif (is_object($valeur)) {
233 233
 			$valeur = get_class($valeur);
234 234
 		} elseif (is_string($valeur)) {
235
-			$valeur = "'" . $valeur . "'";
235
+			$valeur = "'".$valeur."'";
236 236
 		}
237
-		$res .= "\n<tr><td><strong>" . nl2br((string) entites_html($nom))
238
-			. '</strong></td><td>:&nbsp;' . nl2br((string) entites_html($valeur))
237
+		$res .= "\n<tr><td><strong>".nl2br((string) entites_html($nom))
238
+			. '</strong></td><td>:&nbsp;'.nl2br((string) entites_html($valeur))
239 239
 			. "</td></tr>\n";
240 240
 	}
241 241
 
@@ -260,7 +260,7 @@  discard block
 block discarded – undo
260 260
 	if ($ligne) {
261 261
 		$msg .= " L$ligne";
262 262
 	}
263
-	spip_log($msg, "debusquer" . _LOG_ERREUR);
263
+	spip_log($msg, "debusquer"._LOG_ERREUR);
264 264
 }
265 265
 
266 266
 
@@ -285,10 +285,10 @@  discard block
 block discarded – undo
285 285
 				$nom_code = $lieu->descr['nom'];
286 286
 				$skel = $lieu->descr['sourcefile'];
287 287
 				$h2 = parametre_url($href, 'var_mode_objet', $nom_code);
288
-				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
288
+				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette').'#L'.$ligne;
289 289
 				$skel = "<a href='$h3'><b>$skel</b></a>";
290 290
 				if ($boucle) {
291
-					$h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
291
+					$h3 = parametre_url($h2.$boucle, 'var_mode_affiche', 'boucle');
292 292
 					$boucle = "<a href='$h3'><b>$boucle</b></a>";
293 293
 				}
294 294
 			}
@@ -377,7 +377,7 @@  discard block
 block discarded – undo
377 377
 	}
378 378
 
379 379
 	// Requete erronee
380
-	$err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
380
+	$err = '<b>'._T('avis_erreur_mysql')." $errno</b><br /><tt>\n"
381 381
 		. spip_htmlspecialchars($msg)
382 382
 		. "\n<br /><span style='color: red'><b>"
383 383
 		. spip_htmlspecialchars($query)
@@ -391,7 +391,7 @@  discard block
 block discarded – undo
391 391
 
392 392
 function trouve_boucle_debug($n, $nom, $debut = 0, $boucle = '') {
393 393
 
394
-	$id = $nom . $boucle;
394
+	$id = $nom.$boucle;
395 395
 	if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
396 396
 		foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
397 397
 			if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
@@ -437,7 +437,7 @@  discard block
 block discarded – undo
437 437
 		}
438 438
 	}
439 439
 	}
440
-	$incl = ',' . $reg[1] . '[.]\w$,';
440
+	$incl = ','.$reg[1].'[.]\w$,';
441 441
 
442 442
 	foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
443 443
 		if (preg_match($incl, $v)) {
@@ -452,16 +452,13 @@  discard block
 block discarded – undo
452 452
 	[$skel, $boucle, $ligne] = trouve_boucle_debug($n, $nom);
453 453
 
454 454
 	if (!$boucle) {
455
-		return !$ligne ? '' :
456
-			(' (' .
457
-				(($nom != $skel) ? _T('squelette_inclus_ligne') :
458
-					_T('squelette_ligne')) .
455
+		return !$ligne ? '' : (' ('.
456
+				(($nom != $skel) ? _T('squelette_inclus_ligne') : _T('squelette_ligne')).
459 457
 				" <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
460 458
 	} else {
461 459
 		$self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
462 460
 
463
-		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
464
-			" (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
461
+		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" : " (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
465 462
 	}
466 463
 }
467 464
 
@@ -483,14 +480,14 @@  discard block
 block discarded – undo
483 480
 
484 481
 	$s = preg_replace(
485 482
 		',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
486
-		'<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
483
+		'<\1>\2</\1><br />'."\n".'<\1>\3</\1>',
487 484
 		$s
488 485
 	);
489 486
 
490 487
 
491 488
 	$tableau = explode('<br />', $s);
492 489
 
493
-	$format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: " . ($nocpt ? 'hidden' : 'visible') . ";%s' href='#T%s' title=\"%s\">%0" . strval(@strlen(count($tableau))) . "d</a></span> %s<br />\n";
490
+	$format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: ".($nocpt ? 'hidden' : 'visible').";%s' href='#T%s' title=\"%s\">%0".strval(@strlen(count($tableau)))."d</a></span> %s<br />\n";
494 491
 
495 492
 	$format10 = str_replace('white', 'lightgrey', $format);
496 493
 	$formaterr = 'color: red;';
@@ -534,7 +531,7 @@  discard block
 block discarded – undo
534 531
 	. '" style="cursor: pointer;">'
535 532
 	. ($nocpt ? '' : _T('info_numero_abbreviation'))
536 533
 	. '</div>
537
-	' . $res . "</div>\n";
534
+	' . $res."</div>\n";
538 535
 }
539 536
 
540 537
 // l'environnement graphique du debuggueur
@@ -556,14 +553,14 @@  discard block
 block discarded – undo
556 553
 			if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
557 554
 				[$legend, $texte, $res2] = debusquer_source($fonc, $mode);
558 555
 				$texte .= $res2;
559
-			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
560
-				$legend = _T('zbug_' . $mode);
561
-				$texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
556
+			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc.'tout'])) {
557
+				$legend = _T('zbug_'.$mode);
558
+				$texte = $GLOBALS['debug_objets'][$mode][$fonc.'tout'];
562 559
 				$texte = ancre_texte($texte, ['', '']);
563 560
 			}
564 561
 		} else {
565 562
 			if (strlen(trim($res))) {
566
-				return "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
563
+				return "<img src='".chemin_image('debug-xx.svg')."' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
567 564
 			} else {
568 565
 				// cas de l'appel sur erreur: montre la page
569 566
 				return $GLOBALS['debug_objets']['resultat']['tout'] ?? '';
@@ -571,7 +568,7 @@  discard block
 block discarded – undo
571 568
 		}
572 569
 	} else {
573 570
 		$valider = charger_fonction('valider', 'xml');
574
-		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
571
+		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc.'tout']);
575 572
 		// Si erreur, signaler leur nombre dans le formulaire admin
576 573
 		$GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
577 574
 		[$texte, $err] = emboite_texte($val, $fonc, $self);
@@ -582,14 +579,14 @@  discard block
 block discarded – undo
582 579
 		} else {
583 580
 			$err = ": $err";
584 581
 		}
585
-		$legend = _T('validation') . ' ' . $err;
582
+		$legend = _T('validation').' '.$err;
586 583
 		$res = $id = '';
587 584
 	}
588 585
 
589 586
 	return !trim($texte) ? '' : (
590
-		"<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
587
+		"<img src='".chemin_image('debug-xx.svg')."' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
591 588
 		. "<div id='debug_boucle'><fieldset$id><legend>"
592
-		. "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
589
+		. "<a href='".$self.'#f_'.substr($fonc, 0, 37)."'> &#8593; "
593 590
 		. ($legend ?: $mode)
594 591
 		. '</a></legend>'
595 592
 		. $texte
@@ -600,7 +597,7 @@  discard block
 block discarded – undo
600 597
 
601 598
 function emboite_texte($res, $fonc = '', $self = '') {
602 599
 	$errs = $res->err;
603
-	$texte = $res->entete . ($errs ? '' : $res->page);
600
+	$texte = $res->entete.($errs ? '' : $res->page);
604 601
 
605 602
 	if (!$texte and !$errs) {
606 603
 		return [ancre_texte('', ['', '']), false];
@@ -656,7 +653,7 @@  discard block
 block discarded – undo
656 653
 		$err = "<h2 style='text-align: center'>"
657 654
 			. $i
658 655
 			. "<a href='#fin_err'>"
659
-			. ' ' . _T('erreur_texte')
656
+			. ' '._T('erreur_texte')
660 657
 			. "</a></h2><table id='debut_err' style='width: 100%'>"
661 658
 			. $err
662 659
 			. " </table><a id='fin_err'></a>";
@@ -666,9 +663,9 @@  discard block
 block discarded – undo
666 663
 		[$msg, $fermant, $ouvrant] = $errs[0];
667 664
 		$rf = reference_boucle_debug($fermant, $fonc, $self);
668 665
 		$ro = reference_boucle_debug($ouvrant, $fonc, $self);
669
-		$err = $msg .
670
-			"<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
671
-			"<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
666
+		$err = $msg.
667
+			"<a href='#L".$fermant."'>$fermant</a>$rf<br />".
668
+			"<a href='#L".$ouvrant."'>$ouvrant</a>$ro";
672 669
 
673 670
 		return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
674 671
 	}
@@ -701,7 +698,7 @@  discard block
 block discarded – undo
701 698
 			['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
702 699
 		);
703 700
 
704
-		$res .= "<fieldset id='f_" . $nom . "'><legend>"
701
+		$res .= "<fieldset id='f_".$nom."'><legend>"
705 702
 			. $t_skel
706 703
 			. ' '
707 704
 			. $sourcefile
@@ -716,7 +713,7 @@  discard block
 block discarded – undo
716 713
 			. "'>"
717 714
 			. _T('zbug_calcul')
718 715
 			. '</a></legend>'
719
-			. (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
716
+			. (!$temps ? '' : ("\n<span style='display:block;float:".$GLOBALS['spip_lang_right']."'>$temps</span><br />"))
720 717
 			. debusquer_contexte($contexte[$sourcefile])
721 718
 		. (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
722 719
 		. "</fieldset>\n";
@@ -737,33 +734,33 @@  discard block
 block discarded – undo
737 734
 			$nom = $boucle->id_boucle;
738 735
 			$req = $boucle->type_requete;
739 736
 			$crit = public_decompiler($boucle, $gram, 0, 'criteres');
740
-			$self2 = $self . '&amp;var_mode_objet=' . $objet;
741
-
742
-			$res .= "\n<tr style='background-color: " .
743
-				($i % 2 ? '#e0e0f0' : '#f8f8ff') .
744
-				"'><td  align='right'>$i</td><td>\n" .
745
-				"<a  class='debug_link_boucle' href='" .
746
-				$self2 .
747
-				"&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
748
-				_T('zbug_boucle') .
749
-				"</a></td><td>\n<a class='debug_link_boucle' href='" .
750
-				$self2 .
751
-				"&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
752
-				_T('zbug_resultat') .
753
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
754
-				$self2 .
755
-				"&amp;var_mode_affiche=code#f_$nom_skel'>" .
756
-				_T('zbug_code') .
757
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
758
-				str_replace('var_mode=', 'var_profile=', $self2) .
759
-				"'>" .
760
-				_T('zbug_calcul') .
761
-				"</a></td><td>\n" .
762
-				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
763
-				"</td><td>\n" .
764
-				$req .
765
-				"</td><td>\n" .
766
-				spip_htmlspecialchars($crit) .
737
+			$self2 = $self.'&amp;var_mode_objet='.$objet;
738
+
739
+			$res .= "\n<tr style='background-color: ".
740
+				($i % 2 ? '#e0e0f0' : '#f8f8ff').
741
+				"'><td  align='right'>$i</td><td>\n".
742
+				"<a  class='debug_link_boucle' href='".
743
+				$self2.
744
+				"&amp;var_mode_affiche=boucle#f_$nom_skel'>".
745
+				_T('zbug_boucle').
746
+				"</a></td><td>\n<a class='debug_link_boucle' href='".
747
+				$self2.
748
+				"&amp;var_mode_affiche=resultat#f_$nom_skel'>".
749
+				_T('zbug_resultat').
750
+				"</a></td><td>\n<a class='debug_link_resultat' href='".
751
+				$self2.
752
+				"&amp;var_mode_affiche=code#f_$nom_skel'>".
753
+				_T('zbug_code').
754
+				"</a></td><td>\n<a class='debug_link_resultat' href='".
755
+				str_replace('var_mode=', 'var_profile=', $self2).
756
+				"'>".
757
+				_T('zbug_calcul').
758
+				"</a></td><td>\n".
759
+				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom).
760
+				"</td><td>\n".
761
+				$req.
762
+				"</td><td>\n".
763
+				spip_htmlspecialchars($crit).
767 764
 				'</td></tr>';
768 765
 		}
769 766
 	}
@@ -790,7 +787,7 @@  discard block
 block discarded – undo
790 787
 		}
791 788
 		//  permettre le copier/coller facile
792 789
 		// $res = ancre_texte($req, array(), true);
793
-		$res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
790
+		$res = "<div id='T".md5($req)."'>\n<pre>\n".$req."</pre>\n</div>\n";
794 791
 		//  formatage et affichage des resultats bruts de la requete
795 792
 		$ress_req = spip_query($req);
796 793
 		$brut_sql = '';
@@ -800,10 +797,10 @@  discard block
 block discarded – undo
800 797
 		$max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
801 798
 		while ($retours_sql = sql_fetch($ress_req)) {
802 799
 			if ($num <= $max_aff) {
803
-				$brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
800
+				$brut_sql .= '<h3>'.($num == 1 ? $num.' sur '.sql_count($ress_req) : $num).'</h3>';
804 801
 				$brut_sql .= '<p>';
805 802
 				foreach ($retours_sql as $key => $val) {
806
-					$brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
803
+					$brut_sql .= '<strong>'.$key.'</strong> => '.spip_htmlspecialchars(couper($val, 150))."<br />\n";
807 804
 				}
808 805
 				$brut_sql .= '</p>';
809 806
 			}
@@ -814,14 +811,14 @@  discard block
 block discarded – undo
814 811
 			//  ne pas afficher les $contexte_inclus
815 812
 			$view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
816 813
 			if ($view) {
817
-				$res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
814
+				$res2 .= "\n<br /><fieldset>".interdire_scripts($view).'</fieldset>';
818 815
 			}
819 816
 		}
820 817
 	} elseif ($affiche == 'code') {
821 818
 		$legend = $nom;
822
-		$res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
819
+		$res = ancre_texte('<'."?php\n".$quoi."\n?".'>');
823 820
 	} elseif ($affiche == 'boucle') {
824
-		$legend = _T('zbug_boucle') . ' ' . $nom;
821
+		$legend = _T('zbug_boucle').' '.$nom;
825 822
 		// Le compilateur prefixe le nom des boucles par l'extension du fichier source.
826 823
 		$gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
827 824
 		$res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
@@ -839,23 +836,23 @@  discard block
 block discarded – undo
839 836
 	include_spip('public/assembler'); // pour inclure_balise_dynamique
840 837
 	include_spip('inc/texte'); // pour corriger_typo
841 838
 
842
-	return _DOCTYPE_ECRIRE .
843
-	html_lang_attributes() .
844
-	"<head>\n<title>" .
845
-	('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
846
-		_T('admin_debug') . ' ' . spip_htmlspecialchars($titre) . ' (' .
847
-		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
848
-	")</title>\n" .
849
-	"<meta http-equiv='Content-Type' content='text/html" .
850
-	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
851
-	"' />\n" .
839
+	return _DOCTYPE_ECRIRE.
840
+	html_lang_attributes().
841
+	"<head>\n<title>".
842
+	('SPIP '.$GLOBALS['spip_version_affichee'].' '.
843
+		_T('admin_debug').' '.spip_htmlspecialchars($titre).' ('.
844
+		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))).
845
+	")</title>\n".
846
+	"<meta http-equiv='Content-Type' content='text/html".
847
+	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '').
848
+	"' />\n".
852 849
 	http_script('', 'jquery.js')
853
-	. "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
854
-	. "' type='text/css' />" .
855
-	"</head>\n" .
856
-	"<body style='margin:0 10px;'>\n" .
857
-	"<div id='spip-debug-header'>" .
858
-	$corps .
859
-	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
850
+	. "<link rel='stylesheet' href='".url_absolue(find_in_path('spip_admin.css'))
851
+	. "' type='text/css' />".
852
+	"</head>\n".
853
+	"<body style='margin:0 10px;'>\n".
854
+	"<div id='spip-debug-header'>".
855
+	$corps.
856
+	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false).
860 857
 	'</div></body></html>';
861 858
 }
Please login to merge, or discard this patch.
Indentation   +695 added lines, -695 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('public/decompiler');
@@ -68,133 +68,133 @@  discard block
 block discarded – undo
68 68
  *     - true si $opt 'erreurs' = 'reset'
69 69
  **/
70 70
 function public_debusquer_dist($message = '', $lieu = '', $opt = []) {
71
-	static $should_log;
72
-	static $tableau_des_erreurs = [];
73
-
74
-	// Pour des tests unitaires, pouvoir récupérer les erreurs générées
75
-	if (isset($opt['erreurs'])) {
76
-		if ($opt['erreurs'] == 'get') {
77
-			return $tableau_des_erreurs;
78
-		}
79
-		if ($opt['erreurs'] == 'reset') {
80
-			$tableau_des_erreurs = [];
81
-
82
-			return true;
83
-		}
84
-	}
85
-
86
-	if (is_null($should_log)) {
87
-		$should_log = (empty($GLOBALS['visiteur_session']) || !include_spip('inc/autoriser') || !autoriser('debug'));
88
-	}
89
-
90
-	// Erreur ou appel final ?
91
-	if ($message) {
92
-		$message = debusquer_compose_message($message);
93
-		$tableau_des_erreurs[] = [$message, $lieu];
94
-		set_request('var_mode', 'debug');
95
-		$GLOBALS['bouton_admin_debug'] = true;
96
-		// Permettre a la compil de continuer
97
-		if (is_object($lieu) and (!isset($lieu->code) or !$lieu->code)) {
98
-			$lieu->code = "''";
99
-		}
100
-		// loger si personne ne verra l'erreur
101
-		if ($should_log) {
102
-			debusquer_loger_erreur($message, $lieu);
103
-		}
104
-		// forcer l'appel au debusqueur en cas de boucles infernales
105
-		$urgence = (_DEBUG_MAX_SQUELETTE_ERREURS and (is_countable($tableau_des_erreurs) ? count($tableau_des_erreurs) : 0) > _DEBUG_MAX_SQUELETTE_ERREURS);
106
-		if (!$urgence) {
107
-			return;
108
-		}
109
-	}
110
-	if (empty($GLOBALS['debug_objets']['principal'])) {
111
-		// espace public ?
112
-		if (isset($GLOBALS['fond'])) {
113
-			$GLOBALS['debug_objets']['principal'] = $GLOBALS['fond'];
114
-		}
115
-	}
116
-
117
-	include_spip('inc/autoriser');
118
-	if (!autoriser('debug')) {
119
-		return;
120
-	}
121
-	include_spip('inc/headers');
122
-	include_spip('inc/filtres');
123
-
124
-	lang_select($GLOBALS['visiteur_session']['lang'] ?? null);
125
-	$fonc = preg_replace(',\W,', '_', _request('var_mode_objet') ?? '');
126
-	$mode = preg_replace(',\W,', '_', _request('var_mode_affiche') ?? '');
127
-
128
-	$self = str_replace("\\'", '&#39;', self());
129
-	$self = parametre_url($self, 'var_mode', 'debug');
130
-
131
-	$res = debusquer_bandeau($tableau_des_erreurs)
132
-		. '<br />'
133
-		. debusquer_squelette($fonc, $mode, $self);
134
-
135
-	if (!_DIR_RESTREINT or headers_sent()) {
136
-		return $res;
137
-	}
138
-	if ($tableau_des_erreurs) {
139
-		http_response_code(503);
140
-	}
141
-
142
-	http_no_cache();
143
-	if (isset($_GET['var_profile'])) {
144
-		$titre = parametre_url($GLOBALS['REQUEST_URI'], 'var_profile', '');
145
-		$titre = parametre_url($titre, 'var_mode', '');
146
-	} else {
147
-		if (!$fonc) {
148
-			$fonc = $GLOBALS['debug_objets']['principal'];
149
-		}
150
-		$titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
151
-	}
152
-	if ($message === false) {
153
-		lang_select();
154
-
155
-		return debusquer_entete($titre, $res);
156
-	} else {
157
-		echo debusquer_entete($titre, $res);
158
-	}
159
-	exit;
71
+    static $should_log;
72
+    static $tableau_des_erreurs = [];
73
+
74
+    // Pour des tests unitaires, pouvoir récupérer les erreurs générées
75
+    if (isset($opt['erreurs'])) {
76
+        if ($opt['erreurs'] == 'get') {
77
+            return $tableau_des_erreurs;
78
+        }
79
+        if ($opt['erreurs'] == 'reset') {
80
+            $tableau_des_erreurs = [];
81
+
82
+            return true;
83
+        }
84
+    }
85
+
86
+    if (is_null($should_log)) {
87
+        $should_log = (empty($GLOBALS['visiteur_session']) || !include_spip('inc/autoriser') || !autoriser('debug'));
88
+    }
89
+
90
+    // Erreur ou appel final ?
91
+    if ($message) {
92
+        $message = debusquer_compose_message($message);
93
+        $tableau_des_erreurs[] = [$message, $lieu];
94
+        set_request('var_mode', 'debug');
95
+        $GLOBALS['bouton_admin_debug'] = true;
96
+        // Permettre a la compil de continuer
97
+        if (is_object($lieu) and (!isset($lieu->code) or !$lieu->code)) {
98
+            $lieu->code = "''";
99
+        }
100
+        // loger si personne ne verra l'erreur
101
+        if ($should_log) {
102
+            debusquer_loger_erreur($message, $lieu);
103
+        }
104
+        // forcer l'appel au debusqueur en cas de boucles infernales
105
+        $urgence = (_DEBUG_MAX_SQUELETTE_ERREURS and (is_countable($tableau_des_erreurs) ? count($tableau_des_erreurs) : 0) > _DEBUG_MAX_SQUELETTE_ERREURS);
106
+        if (!$urgence) {
107
+            return;
108
+        }
109
+    }
110
+    if (empty($GLOBALS['debug_objets']['principal'])) {
111
+        // espace public ?
112
+        if (isset($GLOBALS['fond'])) {
113
+            $GLOBALS['debug_objets']['principal'] = $GLOBALS['fond'];
114
+        }
115
+    }
116
+
117
+    include_spip('inc/autoriser');
118
+    if (!autoriser('debug')) {
119
+        return;
120
+    }
121
+    include_spip('inc/headers');
122
+    include_spip('inc/filtres');
123
+
124
+    lang_select($GLOBALS['visiteur_session']['lang'] ?? null);
125
+    $fonc = preg_replace(',\W,', '_', _request('var_mode_objet') ?? '');
126
+    $mode = preg_replace(',\W,', '_', _request('var_mode_affiche') ?? '');
127
+
128
+    $self = str_replace("\\'", '&#39;', self());
129
+    $self = parametre_url($self, 'var_mode', 'debug');
130
+
131
+    $res = debusquer_bandeau($tableau_des_erreurs)
132
+        . '<br />'
133
+        . debusquer_squelette($fonc, $mode, $self);
134
+
135
+    if (!_DIR_RESTREINT or headers_sent()) {
136
+        return $res;
137
+    }
138
+    if ($tableau_des_erreurs) {
139
+        http_response_code(503);
140
+    }
141
+
142
+    http_no_cache();
143
+    if (isset($_GET['var_profile'])) {
144
+        $titre = parametre_url($GLOBALS['REQUEST_URI'], 'var_profile', '');
145
+        $titre = parametre_url($titre, 'var_mode', '');
146
+    } else {
147
+        if (!$fonc) {
148
+            $fonc = $GLOBALS['debug_objets']['principal'];
149
+        }
150
+        $titre = !$mode ? $fonc : ($mode . (isset($GLOBALS['debug_objets']['sourcefile'][$fonc]) ? ' ' . $GLOBALS['debug_objets']['sourcefile'][$fonc] : ''));
151
+    }
152
+    if ($message === false) {
153
+        lang_select();
154
+
155
+        return debusquer_entete($titre, $res);
156
+    } else {
157
+        echo debusquer_entete($titre, $res);
158
+    }
159
+    exit;
160 160
 }
161 161
 
162 162
 function debusquer_compose_message($msg) {
163
-	if (is_array($msg)) {
164
-		// si c'est un texte, c'est une traduction a faire, mais
165
-		// sqlite renvoit aussi des erreurs alpha num (mais avec 3 arguments)
166
-		if (!is_numeric($msg[0]) and count($msg) == 2) {
167
-			// message avec argument: instancier
168
-			$msg = _T($msg[0], $msg[1], 'spip-debug-arg');
169
-		} else {
170
-			// message SQL: interpreter
171
-			$msg = debusquer_requete($msg);
172
-		}
173
-	}
174
-	// FIXME: le fond n'est pas la si on n'est pas dans un squelette
175
-	// cela dit, ca serait bien d'indiquer tout de meme d'ou vient l'erreur
176
-	$fond = $GLOBALS['fond'] ?? '';
177
-	// une erreur critique sort $message en array
178
-	$debug = is_array($msg) ? $msg[1] : $msg;
179
-	spip_log('Debug: ' . $debug . ' (' . $fond . ')');
180
-
181
-	return $msg;
163
+    if (is_array($msg)) {
164
+        // si c'est un texte, c'est une traduction a faire, mais
165
+        // sqlite renvoit aussi des erreurs alpha num (mais avec 3 arguments)
166
+        if (!is_numeric($msg[0]) and count($msg) == 2) {
167
+            // message avec argument: instancier
168
+            $msg = _T($msg[0], $msg[1], 'spip-debug-arg');
169
+        } else {
170
+            // message SQL: interpreter
171
+            $msg = debusquer_requete($msg);
172
+        }
173
+    }
174
+    // FIXME: le fond n'est pas la si on n'est pas dans un squelette
175
+    // cela dit, ca serait bien d'indiquer tout de meme d'ou vient l'erreur
176
+    $fond = $GLOBALS['fond'] ?? '';
177
+    // une erreur critique sort $message en array
178
+    $debug = is_array($msg) ? $msg[1] : $msg;
179
+    spip_log('Debug: ' . $debug . ' (' . $fond . ')');
180
+
181
+    return $msg;
182 182
 }
183 183
 
184 184
 function debusquer_bandeau($erreurs) {
185 185
 
186
-	if (!empty($erreurs)) {
187
-		$n = [(is_countable($erreurs) ? count($erreurs) : 0) . ' ' . _T('zbug_erreur_squelette')];
186
+    if (!empty($erreurs)) {
187
+        $n = [(is_countable($erreurs) ? count($erreurs) : 0) . ' ' . _T('zbug_erreur_squelette')];
188 188
 
189
-		return debusquer_navigation($erreurs, $n);
190
-	} elseif (!empty($GLOBALS['tableau_des_temps'])) {
191
-		include_spip('public/tracer');
192
-		[$temps, $nav] = chrono_requete($GLOBALS['tableau_des_temps']);
189
+        return debusquer_navigation($erreurs, $n);
190
+    } elseif (!empty($GLOBALS['tableau_des_temps'])) {
191
+        include_spip('public/tracer');
192
+        [$temps, $nav] = chrono_requete($GLOBALS['tableau_des_temps']);
193 193
 
194
-		return debusquer_navigation($temps, $nav, 'debug-profile');
195
-	} else {
196
-		return '';
197
-	}
194
+        return debusquer_navigation($temps, $nav, 'debug-profile');
195
+    } else {
196
+        return '';
197
+    }
198 198
 }
199 199
 
200 200
 /**
@@ -204,63 +204,63 @@  discard block
 block discarded – undo
204 204
  * @return string Code HTML
205 205
  **/
206 206
 function debusquer_contexte($env) {
207
-	if (is_string($env) and is_array($env_tab = @unserialize($env))) {
208
-		$env = $env_tab;
209
-	}
210
-
211
-	if (!$env) {
212
-		return '';
213
-	}
214
-	$res = '';
215
-	foreach ($env as $nom => $valeur) {
216
-		if (is_array($valeur)) {
217
-			$valeur_simple = [];
218
-			foreach ($valeur as $v) {
219
-				if (is_array($v)) {
220
-					$valeur_simple[] = 'array:' . count($v);
221
-				} elseif (is_object($v)) {
222
-					$valeur_simple[] = get_class($v);
223
-				} elseif (is_string($v)) {
224
-					$valeur_simple[] = "'" . $v . "'";
225
-				} else {
226
-					$valeur_simple[] = $v;
227
-				}
228
-			}
229
-			$n = count($valeur);
230
-			$valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
231
-			$valeur .= '[' . join(', ', $valeur_simple) . ']';
232
-		} elseif (is_object($valeur)) {
233
-			$valeur = get_class($valeur);
234
-		} elseif (is_string($valeur)) {
235
-			$valeur = "'" . $valeur . "'";
236
-		}
237
-		$res .= "\n<tr><td><strong>" . nl2br((string) entites_html($nom))
238
-			. '</strong></td><td>:&nbsp;' . nl2br((string) entites_html($valeur))
239
-			. "</td></tr>\n";
240
-	}
241
-
242
-	return "<div class='spip-env'><fieldset><legend onclick=\"this.parentElement.classList.toggle('expanded');\">#ENV</legend>\n<div><table>$res</table></div></fieldset></div>\n";
207
+    if (is_string($env) and is_array($env_tab = @unserialize($env))) {
208
+        $env = $env_tab;
209
+    }
210
+
211
+    if (!$env) {
212
+        return '';
213
+    }
214
+    $res = '';
215
+    foreach ($env as $nom => $valeur) {
216
+        if (is_array($valeur)) {
217
+            $valeur_simple = [];
218
+            foreach ($valeur as $v) {
219
+                if (is_array($v)) {
220
+                    $valeur_simple[] = 'array:' . count($v);
221
+                } elseif (is_object($v)) {
222
+                    $valeur_simple[] = get_class($v);
223
+                } elseif (is_string($v)) {
224
+                    $valeur_simple[] = "'" . $v . "'";
225
+                } else {
226
+                    $valeur_simple[] = $v;
227
+                }
228
+            }
229
+            $n = count($valeur);
230
+            $valeur = (($n > 3) ? 'array:' . $n . ' ' : '');
231
+            $valeur .= '[' . join(', ', $valeur_simple) . ']';
232
+        } elseif (is_object($valeur)) {
233
+            $valeur = get_class($valeur);
234
+        } elseif (is_string($valeur)) {
235
+            $valeur = "'" . $valeur . "'";
236
+        }
237
+        $res .= "\n<tr><td><strong>" . nl2br((string) entites_html($nom))
238
+            . '</strong></td><td>:&nbsp;' . nl2br((string) entites_html($valeur))
239
+            . "</td></tr>\n";
240
+    }
241
+
242
+    return "<div class='spip-env'><fieldset><legend onclick=\"this.parentElement.classList.toggle('expanded');\">#ENV</legend>\n<div><table>$res</table></div></fieldset></div>\n";
243 243
 }
244 244
 
245 245
 
246 246
 function debusquer_loger_erreur($msg, $lieu) {
247
-	$boucle = $ligne = $skel = '';
248
-	if (is_object($lieu)) {
249
-		$ligne = ($lieu->ligne ?? '');
250
-		$boucle = ($lieu->id_boucle ?? '');
251
-		$skel = ($lieu->descr['sourcefile'] ?? '');
252
-	}
253
-	$msg = (is_array($msg) ? implode('', $msg) : $msg);
254
-	if ($skel) {
255
-		$msg .= " Squelette $skel";
256
-	}
257
-	if ($boucle) {
258
-		$msg .= " Boucle $boucle";
259
-	}
260
-	if ($ligne) {
261
-		$msg .= " L$ligne";
262
-	}
263
-	spip_log($msg, "debusquer" . _LOG_ERREUR);
247
+    $boucle = $ligne = $skel = '';
248
+    if (is_object($lieu)) {
249
+        $ligne = ($lieu->ligne ?? '');
250
+        $boucle = ($lieu->id_boucle ?? '');
251
+        $skel = ($lieu->descr['sourcefile'] ?? '');
252
+    }
253
+    $msg = (is_array($msg) ? implode('', $msg) : $msg);
254
+    if ($skel) {
255
+        $msg .= " Squelette $skel";
256
+    }
257
+    if ($boucle) {
258
+        $msg .= " Boucle $boucle";
259
+    }
260
+    if ($ligne) {
261
+        $msg .= " L$ligne";
262
+    }
263
+    spip_log($msg, "debusquer" . _LOG_ERREUR);
264 264
 }
265 265
 
266 266
 
@@ -269,66 +269,66 @@  discard block
 block discarded – undo
269 269
 
270 270
 function debusquer_navigation($tableau, $caption = [], $id = 'debug-nav') {
271 271
 
272
-	if (_request('exec') == 'valider_xml') {
273
-		return '';
274
-	}
275
-	$GLOBALS['bouton_admin_debug'] = true;
276
-	$res = '';
277
-	$href = quote_amp(parametre_url($GLOBALS['REQUEST_URI'], 'var_mode', 'debug'));
278
-	foreach ($tableau as $i => $err) {
279
-		$boucle = $ligne = $skel = '';
280
-		[$msg, $lieu] = $err;
281
-		if (is_object($lieu)) {
282
-			$ligne = $lieu->ligne;
283
-			$boucle = !empty($lieu->id_boucle) ? $lieu->id_boucle : '';
284
-			if (isset($lieu->descr['nom'])) {
285
-				$nom_code = $lieu->descr['nom'];
286
-				$skel = $lieu->descr['sourcefile'];
287
-				$h2 = parametre_url($href, 'var_mode_objet', $nom_code);
288
-				$h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
289
-				$skel = "<a href='$h3'><b>$skel</b></a>";
290
-				if ($boucle) {
291
-					$h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
292
-					$boucle = "<a href='$h3'><b>$boucle</b></a>";
293
-				}
294
-			}
295
-		}
296
-
297
-		$j = ($i + 1);
298
-		$res .= "<tr id='req$j'><td style='text-align: right'>"
299
-			. $j
300
-			. "&nbsp;</td><td style='text-align: left'>"
301
-			. (is_array($msg) ? implode('', $msg) : $msg)
302
-			. "</td><td style='text-align: left'>"
303
-			. ($skel ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
304
-			. "</td><td class='spip-debug-arg' style='text-align: left'>"
305
-			. ($boucle ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
306
-			. "</td><td style='text-align: right'>"
307
-			. $ligne
308
-			. "</td></tr>\n";
309
-	}
310
-
311
-	return "\n<table id='$id'>"
312
-	. "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
313
-	. $caption[0]
272
+    if (_request('exec') == 'valider_xml') {
273
+        return '';
274
+    }
275
+    $GLOBALS['bouton_admin_debug'] = true;
276
+    $res = '';
277
+    $href = quote_amp(parametre_url($GLOBALS['REQUEST_URI'], 'var_mode', 'debug'));
278
+    foreach ($tableau as $i => $err) {
279
+        $boucle = $ligne = $skel = '';
280
+        [$msg, $lieu] = $err;
281
+        if (is_object($lieu)) {
282
+            $ligne = $lieu->ligne;
283
+            $boucle = !empty($lieu->id_boucle) ? $lieu->id_boucle : '';
284
+            if (isset($lieu->descr['nom'])) {
285
+                $nom_code = $lieu->descr['nom'];
286
+                $skel = $lieu->descr['sourcefile'];
287
+                $h2 = parametre_url($href, 'var_mode_objet', $nom_code);
288
+                $h3 = parametre_url($h2, 'var_mode_affiche', 'squelette') . '#L' . $ligne;
289
+                $skel = "<a href='$h3'><b>$skel</b></a>";
290
+                if ($boucle) {
291
+                    $h3 = parametre_url($h2 . $boucle, 'var_mode_affiche', 'boucle');
292
+                    $boucle = "<a href='$h3'><b>$boucle</b></a>";
293
+                }
294
+            }
295
+        }
296
+
297
+        $j = ($i + 1);
298
+        $res .= "<tr id='req$j'><td style='text-align: right'>"
299
+            . $j
300
+            . "&nbsp;</td><td style='text-align: left'>"
301
+            . (is_array($msg) ? implode('', $msg) : $msg)
302
+            . "</td><td style='text-align: left'>"
303
+            . ($skel ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
304
+            . "</td><td class='spip-debug-arg' style='text-align: left'>"
305
+            . ($boucle ?: '&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;')
306
+            . "</td><td style='text-align: right'>"
307
+            . $ligne
308
+            . "</td></tr>\n";
309
+    }
310
+
311
+    return "\n<table id='$id'>"
312
+    . "<caption onclick=\"x = document.getElementById('$id'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\">"
313
+    . $caption[0]
314 314
 ## aide locale courte a ecrire, avec lien vers une grosse page de documentation
315 315
 #		aider('erreur_compilation'),
316
-	. '</caption>'
317
-	//  fausse caption du chrono (mais vraie nav)
318
-	. (!empty($caption[1]) ? $caption[1] : '')
319
-	. '<tr><th>'
320
-	. _T('numero')
321
-	. '</th><th>'
322
-	. _T('public:message')
323
-	. '</th><th>'
324
-	. _T('squelette')
325
-	. '</th><th>'
326
-	. _T('zbug_boucle')
327
-	. '</th><th>'
328
-	. _T('ligne')
329
-	. '</th></tr>'
330
-	. $res
331
-	. '</table>';
316
+    . '</caption>'
317
+    //  fausse caption du chrono (mais vraie nav)
318
+    . (!empty($caption[1]) ? $caption[1] : '')
319
+    . '<tr><th>'
320
+    . _T('numero')
321
+    . '</th><th>'
322
+    . _T('public:message')
323
+    . '</th><th>'
324
+    . _T('squelette')
325
+    . '</th><th>'
326
+    . _T('zbug_boucle')
327
+    . '</th><th>'
328
+    . _T('ligne')
329
+    . '</th></tr>'
330
+    . $res
331
+    . '</table>';
332 332
 }
333 333
 
334 334
 
@@ -348,514 +348,514 @@  discard block
 block discarded – undo
348 348
  *    ou un tableau si l'erreur est critique
349 349
  **/
350 350
 function debusquer_requete($message) {
351
-	[$errno, $msg, $query] = $message;
352
-
353
-	// FIXME: ces écritures mélangent divers syntaxe des moteurs SQL
354
-	// il serait plus prudent certainement d'avoir une fonction d'analyse par moteur
355
-	if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)) {
356
-		$errno = $regs[2];
357
-	} elseif (
358
-		is_numeric($errno) and ($errno == 1030 or $errno <= 1026)
359
-		and preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
360
-	) {
361
-		$errno = $regs[1];
362
-	}
363
-
364
-	// Erreur systeme
365
-	if (is_numeric($errno) and $errno > 0 and $errno < 200) {
366
-		$retour = '<tt><br /><br /><blink>'
367
-			. _T('info_erreur_systeme', ['errsys' => $errno])
368
-			. "</blink><br />\n<b>"
369
-			. _T(
370
-				'info_erreur_systeme2',
371
-				['script' => generer_url_ecrire('base_repair')]
372
-			)
373
-			. '</b><br />';
374
-		spip_log("Erreur systeme $errno");
375
-
376
-		return [$retour, ''];
377
-	}
378
-
379
-	// Requete erronee
380
-	$err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
381
-		. spip_htmlspecialchars($msg)
382
-		. "\n<br /><span style='color: red'><b>"
383
-		. spip_htmlspecialchars($query)
384
-		. '</b></span></tt><br />';
385
-
386
-	//. aider('erreur_mysql');
387
-
388
-	return $err;
351
+    [$errno, $msg, $query] = $message;
352
+
353
+    // FIXME: ces écritures mélangent divers syntaxe des moteurs SQL
354
+    // il serait plus prudent certainement d'avoir une fonction d'analyse par moteur
355
+    if (preg_match(',err(no|code):?[[:space:]]*([0-9]+),i', $msg, $regs)) {
356
+        $errno = $regs[2];
357
+    } elseif (
358
+        is_numeric($errno) and ($errno == 1030 or $errno <= 1026)
359
+        and preg_match(',[^[:alnum:]]([0-9]+)[^[:alnum:]],', $msg, $regs)
360
+    ) {
361
+        $errno = $regs[1];
362
+    }
363
+
364
+    // Erreur systeme
365
+    if (is_numeric($errno) and $errno > 0 and $errno < 200) {
366
+        $retour = '<tt><br /><br /><blink>'
367
+            . _T('info_erreur_systeme', ['errsys' => $errno])
368
+            . "</blink><br />\n<b>"
369
+            . _T(
370
+                'info_erreur_systeme2',
371
+                ['script' => generer_url_ecrire('base_repair')]
372
+            )
373
+            . '</b><br />';
374
+        spip_log("Erreur systeme $errno");
375
+
376
+        return [$retour, ''];
377
+    }
378
+
379
+    // Requete erronee
380
+    $err = '<b>' . _T('avis_erreur_mysql') . " $errno</b><br /><tt>\n"
381
+        . spip_htmlspecialchars($msg)
382
+        . "\n<br /><span style='color: red'><b>"
383
+        . spip_htmlspecialchars($query)
384
+        . '</b></span></tt><br />';
385
+
386
+    //. aider('erreur_mysql');
387
+
388
+    return $err;
389 389
 }
390 390
 
391 391
 
392 392
 function trouve_boucle_debug($n, $nom, $debut = 0, $boucle = '') {
393 393
 
394
-	$id = $nom . $boucle;
395
-	if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
396
-		foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
397
-			if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
398
-				$y = substr_count($v[0], "\n");
399
-			} else {
400
-				if ($v[1][0] == '#') { // balise dynamique
401
-				$incl = $GLOBALS['debug_objets']['resultat'][$v[2]];
402
-				} else // inclusion
403
-				{
404
-					$incl = $GLOBALS['debug_objets']['squelette'][trouve_squelette_inclus($v[0])];
405
-				}
406
-				$y = substr_count($incl, "\n")
407
-					+ substr_count($r[1], "\n")
408
-					+ substr_count($r[3], "\n");
409
-			}
410
-			if ($n <= ($y + $debut)) {
411
-				if ($v[1][0] == '?') {
412
-					return trouve_boucle_debug($n, $nom, $debut, substr($v[1], 1));
413
-				} elseif ($v[1][0] == '!') {
414
-					if ($incl = trouve_squelette_inclus($v[1])) {
415
-						return trouve_boucle_debug($n, $incl, $debut);
416
-					}
417
-				}
418
-
419
-				return [$nom, $boucle, $v[2] - 1 + $n - $debut];
420
-			}
421
-			$debut += $y;
422
-		}
423
-	}
424
-
425
-	return [$nom, $boucle, $n - $debut];
394
+    $id = $nom . $boucle;
395
+    if (is_array($GLOBALS['debug_objets']['sequence'][$id])) {
396
+        foreach ($GLOBALS['debug_objets']['sequence'][$id] as $v) {
397
+            if (!preg_match('/^(.*)(<\?.*\?>)(.*)$/s', $v[0], $r)) {
398
+                $y = substr_count($v[0], "\n");
399
+            } else {
400
+                if ($v[1][0] == '#') { // balise dynamique
401
+                $incl = $GLOBALS['debug_objets']['resultat'][$v[2]];
402
+                } else // inclusion
403
+                {
404
+                    $incl = $GLOBALS['debug_objets']['squelette'][trouve_squelette_inclus($v[0])];
405
+                }
406
+                $y = substr_count($incl, "\n")
407
+                    + substr_count($r[1], "\n")
408
+                    + substr_count($r[3], "\n");
409
+            }
410
+            if ($n <= ($y + $debut)) {
411
+                if ($v[1][0] == '?') {
412
+                    return trouve_boucle_debug($n, $nom, $debut, substr($v[1], 1));
413
+                } elseif ($v[1][0] == '!') {
414
+                    if ($incl = trouve_squelette_inclus($v[1])) {
415
+                        return trouve_boucle_debug($n, $incl, $debut);
416
+                    }
417
+                }
418
+
419
+                return [$nom, $boucle, $v[2] - 1 + $n - $debut];
420
+            }
421
+            $debut += $y;
422
+        }
423
+    }
424
+
425
+    return [$nom, $boucle, $n - $debut];
426 426
 }
427 427
 
428 428
 function trouve_squelette_inclus($script) {
429 429
 
430
-	preg_match('/include\(.(.*).php3?.\);/', $script, $reg);
431
-	// si le script X.php n'est pas ecrire/public.php
432
-	// on suppose qu'il prend le squelette X.html (pas sur, mais y a pas mieux)
433
-	if ($reg[1] == 'ecrire/public') { // si c'est bien ecrire/public on cherche le param 'fond'
434
-	if (!preg_match("/'fond' => '([^']*)'/", $script, $reg)) { // a defaut on cherche le param 'page'
435
-		if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) {
436
-				$reg[1] = 'inconnu';
437
-		}
438
-	}
439
-	}
440
-	$incl = ',' . $reg[1] . '[.]\w$,';
441
-
442
-	foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
443
-		if (preg_match($incl, $v)) {
444
-			return $k;
445
-		}
446
-	}
447
-
448
-	return '';
430
+    preg_match('/include\(.(.*).php3?.\);/', $script, $reg);
431
+    // si le script X.php n'est pas ecrire/public.php
432
+    // on suppose qu'il prend le squelette X.html (pas sur, mais y a pas mieux)
433
+    if ($reg[1] == 'ecrire/public') { // si c'est bien ecrire/public on cherche le param 'fond'
434
+    if (!preg_match("/'fond' => '([^']*)'/", $script, $reg)) { // a defaut on cherche le param 'page'
435
+        if (!preg_match("/'param' => '([^']*)'/", $script, $reg)) {
436
+                $reg[1] = 'inconnu';
437
+        }
438
+    }
439
+    }
440
+    $incl = ',' . $reg[1] . '[.]\w$,';
441
+
442
+    foreach ($GLOBALS['debug_objets']['sourcefile'] as $k => $v) {
443
+        if (preg_match($incl, $v)) {
444
+            return $k;
445
+        }
446
+    }
447
+
448
+    return '';
449 449
 }
450 450
 
451 451
 function reference_boucle_debug($n, $nom, $self) {
452
-	[$skel, $boucle, $ligne] = trouve_boucle_debug($n, $nom);
453
-
454
-	if (!$boucle) {
455
-		return !$ligne ? '' :
456
-			(' (' .
457
-				(($nom != $skel) ? _T('squelette_inclus_ligne') :
458
-					_T('squelette_ligne')) .
459
-				" <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
460
-	} else {
461
-		$self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
462
-
463
-		return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
464
-			" (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
465
-	}
452
+    [$skel, $boucle, $ligne] = trouve_boucle_debug($n, $nom);
453
+
454
+    if (!$boucle) {
455
+        return !$ligne ? '' :
456
+            (' (' .
457
+                (($nom != $skel) ? _T('squelette_inclus_ligne') :
458
+                    _T('squelette_ligne')) .
459
+                " <a href='$self&amp;var_mode_objet=$skel&amp;var_mode_affiche=squelette&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)");
460
+    } else {
461
+        $self .= "&amp;var_mode_objet=$skel$boucle&amp;var_mode_affiche=boucle";
462
+
463
+        return !$ligne ? " (boucle\n<a href='$self#$skel$boucle'>$boucle</a>)" :
464
+            " (boucle $boucle ligne\n<a href='$self&amp;var_mode_ligne=$ligne#L$ligne'>$ligne</a>)";
465
+    }
466 466
 }
467 467
 
468 468
 // affiche un texte avec numero de ligne et ancre.
469 469
 
470 470
 function ancre_texte($texte, $fautifs = [], $nocpt = false) {
471 471
 
472
-	$var_mode_ligne = _request('var_mode_ligne');
473
-	if ($var_mode_ligne) {
474
-		$fautifs[] = [$var_mode_ligne];
475
-	}
476
-	$res = '';
477
-
478
-	$s = highlight_string($texte, true);
479
-	if (substr($s, 0, 6) == '<code>') {
480
-		$s = substr($s, 6);
481
-		$res = '<code>';
482
-	}
483
-
484
-	$s = preg_replace(
485
-		',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
486
-		'<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
487
-		$s
488
-	);
489
-
490
-
491
-	$tableau = explode('<br />', $s);
492
-
493
-	$format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: " . ($nocpt ? 'hidden' : 'visible') . ";%s' href='#T%s' title=\"%s\">%0" . strval(@strlen(count($tableau))) . "d</a></span> %s<br />\n";
494
-
495
-	$format10 = str_replace('white', 'lightgrey', $format);
496
-	$formaterr = 'color: red;';
497
-	$i = 1;
498
-	$flignes = [];
499
-	$loc = [0, 0];
500
-	foreach ($fautifs as $lc) {
501
-		if (is_array($lc)) {
502
-			$l = array_shift($lc);
503
-			$flignes[$l] = $lc;
504
-		} else {
505
-			$flignes[$lc] = $loc;
506
-		}
507
-	}
508
-
509
-	$ancre = md5($texte);
510
-	foreach ($tableau as $ligne) {
511
-		if (isset($flignes[$i])) {
512
-			$ligne = str_replace('&nbsp;', ' ', $ligne);
513
-			$indexmesg = $flignes[$i][1];
514
-			$err = textebrut($flignes[$i][2]);
515
-			// tentative de pointer sur la colonne fautive;
516
-			// marche pas car highlight_string rajoute des entites. A revoir.
517
-			// $m = $flignes[$i][0];
518
-			// $ligne = substr($ligne, 0, $m-1) .
519
-			// sprintf($formaterr, substr($ligne,$m));
520
-			$bg = $formaterr;
521
-		} else {
522
-			$indexmesg = $ancre;
523
-			$err = $bg = '';
524
-		}
525
-		$res .= sprintf((($i % 10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
526
-		$i++;
527
-	}
528
-
529
-	return "<div id='T$ancre'>"
530
-	. '<div onclick="'
531
-	. "jQuery(this).parent().find('a').toggle();"
532
-	. '" title="'
533
-	. _T('masquer_colonne')
534
-	. '" style="cursor: pointer;">'
535
-	. ($nocpt ? '' : _T('info_numero_abbreviation'))
536
-	. '</div>
472
+    $var_mode_ligne = _request('var_mode_ligne');
473
+    if ($var_mode_ligne) {
474
+        $fautifs[] = [$var_mode_ligne];
475
+    }
476
+    $res = '';
477
+
478
+    $s = highlight_string($texte, true);
479
+    if (substr($s, 0, 6) == '<code>') {
480
+        $s = substr($s, 6);
481
+        $res = '<code>';
482
+    }
483
+
484
+    $s = preg_replace(
485
+        ',<(\w[^<>]*)>([^<]*)<br />([^<]*)</\1>,',
486
+        '<\1>\2</\1><br />' . "\n" . '<\1>\3</\1>',
487
+        $s
488
+    );
489
+
490
+
491
+    $tableau = explode('<br />', $s);
492
+
493
+    $format = "<span style='float:left;display:block;width:50px;height:1px'><a id='L%d' style='background-color: white; visibility: " . ($nocpt ? 'hidden' : 'visible') . ";%s' href='#T%s' title=\"%s\">%0" . strval(@strlen(count($tableau))) . "d</a></span> %s<br />\n";
494
+
495
+    $format10 = str_replace('white', 'lightgrey', $format);
496
+    $formaterr = 'color: red;';
497
+    $i = 1;
498
+    $flignes = [];
499
+    $loc = [0, 0];
500
+    foreach ($fautifs as $lc) {
501
+        if (is_array($lc)) {
502
+            $l = array_shift($lc);
503
+            $flignes[$l] = $lc;
504
+        } else {
505
+            $flignes[$lc] = $loc;
506
+        }
507
+    }
508
+
509
+    $ancre = md5($texte);
510
+    foreach ($tableau as $ligne) {
511
+        if (isset($flignes[$i])) {
512
+            $ligne = str_replace('&nbsp;', ' ', $ligne);
513
+            $indexmesg = $flignes[$i][1];
514
+            $err = textebrut($flignes[$i][2]);
515
+            // tentative de pointer sur la colonne fautive;
516
+            // marche pas car highlight_string rajoute des entites. A revoir.
517
+            // $m = $flignes[$i][0];
518
+            // $ligne = substr($ligne, 0, $m-1) .
519
+            // sprintf($formaterr, substr($ligne,$m));
520
+            $bg = $formaterr;
521
+        } else {
522
+            $indexmesg = $ancre;
523
+            $err = $bg = '';
524
+        }
525
+        $res .= sprintf((($i % 10) ? $format : $format10), $i, $bg, $indexmesg, $err, $i, $ligne);
526
+        $i++;
527
+    }
528
+
529
+    return "<div id='T$ancre'>"
530
+    . '<div onclick="'
531
+    . "jQuery(this).parent().find('a').toggle();"
532
+    . '" title="'
533
+    . _T('masquer_colonne')
534
+    . '" style="cursor: pointer;">'
535
+    . ($nocpt ? '' : _T('info_numero_abbreviation'))
536
+    . '</div>
537 537
 	' . $res . "</div>\n";
538 538
 }
539 539
 
540 540
 // l'environnement graphique du debuggueur
541 541
 
542 542
 function debusquer_squelette($fonc, $mode, $self) {
543
-	$legend = null;
544
-	$texte = '';
545
-
546
-	if ($mode !== 'validation') {
547
-		if (isset($GLOBALS['debug_objets']['sourcefile']) and $GLOBALS['debug_objets']['sourcefile']) {
548
-			$res = "<div id='spip-boucles'>\n"
549
-				. debusquer_navigation_squelettes($self)
550
-				. '</div>';
551
-		} else {
552
-			$res = '';
553
-		}
554
-		if ($fonc) {
555
-			$id = " id='$fonc'";
556
-			if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
557
-				[$legend, $texte, $res2] = debusquer_source($fonc, $mode);
558
-				$texte .= $res2;
559
-			} elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
560
-				$legend = _T('zbug_' . $mode);
561
-				$texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
562
-				$texte = ancre_texte($texte, ['', '']);
563
-			}
564
-		} else {
565
-			if (strlen(trim($res))) {
566
-				return "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
567
-			} else {
568
-				// cas de l'appel sur erreur: montre la page
569
-				return $GLOBALS['debug_objets']['resultat']['tout'] ?? '';
570
-			}
571
-		}
572
-	} else {
573
-		$valider = charger_fonction('valider', 'xml');
574
-		$val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
575
-		// Si erreur, signaler leur nombre dans le formulaire admin
576
-		$GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
577
-		[$texte, $err] = emboite_texte($val, $fonc, $self);
578
-		if ($err === false) {
579
-			$err = _T('impossible');
580
-		} elseif ($err === true) {
581
-			$err = _T('correcte');
582
-		} else {
583
-			$err = ": $err";
584
-		}
585
-		$legend = _T('validation') . ' ' . $err;
586
-		$res = $id = '';
587
-	}
588
-
589
-	return !trim($texte) ? '' : (
590
-		"<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
591
-		. "<div id='debug_boucle'><fieldset$id><legend>"
592
-		. "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
593
-		. ($legend ?: $mode)
594
-		. '</a></legend>'
595
-		. $texte
596
-		. '</fieldset></div>'
597
-		. '</div>');
543
+    $legend = null;
544
+    $texte = '';
545
+
546
+    if ($mode !== 'validation') {
547
+        if (isset($GLOBALS['debug_objets']['sourcefile']) and $GLOBALS['debug_objets']['sourcefile']) {
548
+            $res = "<div id='spip-boucles'>\n"
549
+                . debusquer_navigation_squelettes($self)
550
+                . '</div>';
551
+        } else {
552
+            $res = '';
553
+        }
554
+        if ($fonc) {
555
+            $id = " id='$fonc'";
556
+            if (!empty($GLOBALS['debug_objets'][$mode][$fonc])) {
557
+                [$legend, $texte, $res2] = debusquer_source($fonc, $mode);
558
+                $texte .= $res2;
559
+            } elseif (!empty($GLOBALS['debug_objets'][$mode][$fonc . 'tout'])) {
560
+                $legend = _T('zbug_' . $mode);
561
+                $texte = $GLOBALS['debug_objets'][$mode][$fonc . 'tout'];
562
+                $texte = ancre_texte($texte, ['', '']);
563
+            }
564
+        } else {
565
+            if (strlen(trim($res))) {
566
+                return "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res</div>";
567
+            } else {
568
+                // cas de l'appel sur erreur: montre la page
569
+                return $GLOBALS['debug_objets']['resultat']['tout'] ?? '';
570
+            }
571
+        }
572
+    } else {
573
+        $valider = charger_fonction('valider', 'xml');
574
+        $val = $valider($GLOBALS['debug_objets']['validation'][$fonc . 'tout']);
575
+        // Si erreur, signaler leur nombre dans le formulaire admin
576
+        $GLOBALS['debug_objets']['validation'] = $val->err ? count($val->err) : '';
577
+        [$texte, $err] = emboite_texte($val, $fonc, $self);
578
+        if ($err === false) {
579
+            $err = _T('impossible');
580
+        } elseif ($err === true) {
581
+            $err = _T('correcte');
582
+        } else {
583
+            $err = ": $err";
584
+        }
585
+        $legend = _T('validation') . ' ' . $err;
586
+        $res = $id = '';
587
+    }
588
+
589
+    return !trim($texte) ? '' : (
590
+        "<img src='" . chemin_image('debug-xx.svg') . "' alt='afficher-masquer le debug' id='spip-debug-toggle' onclick=\"var x = document.getElementById('spip-debug'); (x.style.display == '' ? x.style.display = 'none' : x.style.display = '');\" /><div id='spip-debug'>$res"
591
+        . "<div id='debug_boucle'><fieldset$id><legend>"
592
+        . "<a href='" . $self . '#f_' . substr($fonc, 0, 37) . "'> &#8593; "
593
+        . ($legend ?: $mode)
594
+        . '</a></legend>'
595
+        . $texte
596
+        . '</fieldset></div>'
597
+        . '</div>');
598 598
 }
599 599
 
600 600
 
601 601
 function emboite_texte($res, $fonc = '', $self = '') {
602
-	$errs = $res->err;
603
-	$texte = $res->entete . ($errs ? '' : $res->page);
604
-
605
-	if (!$texte and !$errs) {
606
-		return [ancre_texte('', ['', '']), false];
607
-	}
608
-	if (!$errs) {
609
-		return [ancre_texte($texte, ['', '']), true];
610
-	}
611
-
612
-	if (!isset($GLOBALS['debug_objets'])) {
613
-		$colors = ['#e0e0f0', '#f8f8ff'];
614
-		$encore = count_occ($errs);
615
-		$encore2 = [];
616
-		$fautifs = [];
617
-
618
-		$err = '<tr><th>'
619
-			. _T('numero')
620
-			. '</th><th>'
621
-			. _T('occurence')
622
-			. '</th><th>'
623
-			. _T('ligne')
624
-			. '</th><th>'
625
-			. _T('colonne')
626
-			. '</th><th>'
627
-			. _T('erreur')
628
-			. '</th></tr>';
629
-
630
-		$i = 0;
631
-		$style = "style='text-align: right; padding-right: 5px'";
632
-		foreach ($errs as $r) {
633
-			$i++;
634
-			[$msg, $ligne, $col] = $r;
635
-			#spip_log("$r = list($msg, $ligne, $col");
636
-			if (isset($encore2[$msg])) {
637
-				$ref = ++$encore2[$msg];
638
-			} else {
639
-				$encore2[$msg] = $ref = 1;
640
-			}
641
-			$err .= "<tr  style='background-color: "
642
-				. $colors[$i % 2]
643
-				. "'><td $style><a href='#debut_err'>"
644
-				. $i
645
-				. "</a></td><td $style>"
646
-				. "$ref/$encore[$msg]</td>"
647
-				. "<td $style><a href='#L"
648
-				. $ligne
649
-				. "' id='T$i'>"
650
-				. $ligne
651
-				. "</a></td><td $style>"
652
-				. $col
653
-				. "</td><td>$msg</td></tr>\n";
654
-			$fautifs[] = [$ligne, $col, $i, $msg];
655
-		}
656
-		$err = "<h2 style='text-align: center'>"
657
-			. $i
658
-			. "<a href='#fin_err'>"
659
-			. ' ' . _T('erreur_texte')
660
-			. "</a></h2><table id='debut_err' style='width: 100%'>"
661
-			. $err
662
-			. " </table><a id='fin_err'></a>";
663
-
664
-		return [ancre_texte($texte, $fautifs), $err];
665
-	} else {
666
-		[$msg, $fermant, $ouvrant] = $errs[0];
667
-		$rf = reference_boucle_debug($fermant, $fonc, $self);
668
-		$ro = reference_boucle_debug($ouvrant, $fonc, $self);
669
-		$err = $msg .
670
-			"<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
671
-			"<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
672
-
673
-		return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
674
-	}
602
+    $errs = $res->err;
603
+    $texte = $res->entete . ($errs ? '' : $res->page);
604
+
605
+    if (!$texte and !$errs) {
606
+        return [ancre_texte('', ['', '']), false];
607
+    }
608
+    if (!$errs) {
609
+        return [ancre_texte($texte, ['', '']), true];
610
+    }
611
+
612
+    if (!isset($GLOBALS['debug_objets'])) {
613
+        $colors = ['#e0e0f0', '#f8f8ff'];
614
+        $encore = count_occ($errs);
615
+        $encore2 = [];
616
+        $fautifs = [];
617
+
618
+        $err = '<tr><th>'
619
+            . _T('numero')
620
+            . '</th><th>'
621
+            . _T('occurence')
622
+            . '</th><th>'
623
+            . _T('ligne')
624
+            . '</th><th>'
625
+            . _T('colonne')
626
+            . '</th><th>'
627
+            . _T('erreur')
628
+            . '</th></tr>';
629
+
630
+        $i = 0;
631
+        $style = "style='text-align: right; padding-right: 5px'";
632
+        foreach ($errs as $r) {
633
+            $i++;
634
+            [$msg, $ligne, $col] = $r;
635
+            #spip_log("$r = list($msg, $ligne, $col");
636
+            if (isset($encore2[$msg])) {
637
+                $ref = ++$encore2[$msg];
638
+            } else {
639
+                $encore2[$msg] = $ref = 1;
640
+            }
641
+            $err .= "<tr  style='background-color: "
642
+                . $colors[$i % 2]
643
+                . "'><td $style><a href='#debut_err'>"
644
+                . $i
645
+                . "</a></td><td $style>"
646
+                . "$ref/$encore[$msg]</td>"
647
+                . "<td $style><a href='#L"
648
+                . $ligne
649
+                . "' id='T$i'>"
650
+                . $ligne
651
+                . "</a></td><td $style>"
652
+                . $col
653
+                . "</td><td>$msg</td></tr>\n";
654
+            $fautifs[] = [$ligne, $col, $i, $msg];
655
+        }
656
+        $err = "<h2 style='text-align: center'>"
657
+            . $i
658
+            . "<a href='#fin_err'>"
659
+            . ' ' . _T('erreur_texte')
660
+            . "</a></h2><table id='debut_err' style='width: 100%'>"
661
+            . $err
662
+            . " </table><a id='fin_err'></a>";
663
+
664
+        return [ancre_texte($texte, $fautifs), $err];
665
+    } else {
666
+        [$msg, $fermant, $ouvrant] = $errs[0];
667
+        $rf = reference_boucle_debug($fermant, $fonc, $self);
668
+        $ro = reference_boucle_debug($ouvrant, $fonc, $self);
669
+        $err = $msg .
670
+            "<a href='#L" . $fermant . "'>$fermant</a>$rf<br />" .
671
+            "<a href='#L" . $ouvrant . "'>$ouvrant</a>$ro";
672
+
673
+        return [ancre_texte($texte, [[$ouvrant], [$fermant]]), $err];
674
+    }
675 675
 }
676 676
 
677 677
 function count_occ($regs) {
678
-	$encore = [];
679
-	foreach ($regs as $r) {
680
-		if (isset($encore[$r[0]])) {
681
-			$encore[$r[0]]++;
682
-		} else {
683
-			$encore[$r[0]] = 1;
684
-		}
685
-	}
686
-
687
-	return $encore;
678
+    $encore = [];
679
+    foreach ($regs as $r) {
680
+        if (isset($encore[$r[0]])) {
681
+            $encore[$r[0]]++;
682
+        } else {
683
+            $encore[$r[0]] = 1;
684
+        }
685
+    }
686
+
687
+    return $encore;
688 688
 }
689 689
 
690 690
 function debusquer_navigation_squelettes($self) {
691 691
 
692
-	$res = '';
693
-	$boucles = !empty($GLOBALS['debug_objets']['boucle']) ? $GLOBALS['debug_objets']['boucle'] : '';
694
-	$contexte = $GLOBALS['debug_objets']['contexte'];
695
-	$t_skel = _T('squelette');
696
-	foreach ($GLOBALS['debug_objets']['sourcefile'] as $nom => $sourcefile) {
697
-		$self2 = parametre_url($self, 'var_mode_objet', $nom);
698
-		$nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
699
-		$temps = !isset($GLOBALS['debug_objets']['profile'][$sourcefile]) ? '' : _T(
700
-			'zbug_profile',
701
-			['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
702
-		);
703
-
704
-		$res .= "<fieldset id='f_" . $nom . "'><legend>"
705
-			. $t_skel
706
-			. ' '
707
-			. $sourcefile
708
-			. "&nbsp;:\n<a href='$self2&amp;var_mode_affiche=squelette#f_$nom'>"
709
-			. $t_skel
710
-			. "</a>\n<a href='$self2&amp;var_mode_affiche=resultat#f_$nom'>"
711
-			. _T('zbug_resultat')
712
-			. "</a>\n<a href='$self2&amp;var_mode_affiche=code#f_$nom'>"
713
-			. _T('zbug_code')
714
-			. "</a>\n<a href='"
715
-			. str_replace('var_mode=debug', 'var_profile=1&amp;var_mode=recalcul', $self)
716
-			. "'>"
717
-			. _T('zbug_calcul')
718
-			. '</a></legend>'
719
-			. (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
720
-			. debusquer_contexte($contexte[$sourcefile])
721
-		. (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
722
-		. "</fieldset>\n";
723
-	}
724
-
725
-	return $res;
692
+    $res = '';
693
+    $boucles = !empty($GLOBALS['debug_objets']['boucle']) ? $GLOBALS['debug_objets']['boucle'] : '';
694
+    $contexte = $GLOBALS['debug_objets']['contexte'];
695
+    $t_skel = _T('squelette');
696
+    foreach ($GLOBALS['debug_objets']['sourcefile'] as $nom => $sourcefile) {
697
+        $self2 = parametre_url($self, 'var_mode_objet', $nom);
698
+        $nav = !$boucles ? '' : debusquer_navigation_boucles($boucles, $nom, $self, $sourcefile);
699
+        $temps = !isset($GLOBALS['debug_objets']['profile'][$sourcefile]) ? '' : _T(
700
+            'zbug_profile',
701
+            ['time' => $GLOBALS['debug_objets']['profile'][$sourcefile]]
702
+        );
703
+
704
+        $res .= "<fieldset id='f_" . $nom . "'><legend>"
705
+            . $t_skel
706
+            . ' '
707
+            . $sourcefile
708
+            . "&nbsp;:\n<a href='$self2&amp;var_mode_affiche=squelette#f_$nom'>"
709
+            . $t_skel
710
+            . "</a>\n<a href='$self2&amp;var_mode_affiche=resultat#f_$nom'>"
711
+            . _T('zbug_resultat')
712
+            . "</a>\n<a href='$self2&amp;var_mode_affiche=code#f_$nom'>"
713
+            . _T('zbug_code')
714
+            . "</a>\n<a href='"
715
+            . str_replace('var_mode=debug', 'var_profile=1&amp;var_mode=recalcul', $self)
716
+            . "'>"
717
+            . _T('zbug_calcul')
718
+            . '</a></legend>'
719
+            . (!$temps ? '' : ("\n<span style='display:block;float:" . $GLOBALS['spip_lang_right'] . "'>$temps</span><br />"))
720
+            . debusquer_contexte($contexte[$sourcefile])
721
+        . (!$nav ? '' : ("<table width='100%'>\n$nav</table>\n"))
722
+        . "</fieldset>\n";
723
+    }
724
+
725
+    return $res;
726 726
 }
727 727
 
728 728
 function debusquer_navigation_boucles($boucles, $nom_skel, $self, $nom_source) {
729
-	$i = 0;
730
-	$res = '';
731
-	$var_mode_objet = _request('var_mode_objet');
732
-	$gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
733
-
734
-	foreach ($boucles as $objet => $boucle) {
735
-		if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
736
-			$i++;
737
-			$nom = $boucle->id_boucle;
738
-			$req = $boucle->type_requete;
739
-			$crit = public_decompiler($boucle, $gram, 0, 'criteres');
740
-			$self2 = $self . '&amp;var_mode_objet=' . $objet;
741
-
742
-			$res .= "\n<tr style='background-color: " .
743
-				($i % 2 ? '#e0e0f0' : '#f8f8ff') .
744
-				"'><td  align='right'>$i</td><td>\n" .
745
-				"<a  class='debug_link_boucle' href='" .
746
-				$self2 .
747
-				"&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
748
-				_T('zbug_boucle') .
749
-				"</a></td><td>\n<a class='debug_link_boucle' href='" .
750
-				$self2 .
751
-				"&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
752
-				_T('zbug_resultat') .
753
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
754
-				$self2 .
755
-				"&amp;var_mode_affiche=code#f_$nom_skel'>" .
756
-				_T('zbug_code') .
757
-				"</a></td><td>\n<a class='debug_link_resultat' href='" .
758
-				str_replace('var_mode=', 'var_profile=', $self2) .
759
-				"'>" .
760
-				_T('zbug_calcul') .
761
-				"</a></td><td>\n" .
762
-				(($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
763
-				"</td><td>\n" .
764
-				$req .
765
-				"</td><td>\n" .
766
-				spip_htmlspecialchars($crit) .
767
-				'</td></tr>';
768
-		}
769
-	}
770
-
771
-	return $res;
729
+    $i = 0;
730
+    $res = '';
731
+    $var_mode_objet = _request('var_mode_objet');
732
+    $gram = preg_match('/[.](\w+)$/', $nom_source, $r) ? $r[1] : '';
733
+
734
+    foreach ($boucles as $objet => $boucle) {
735
+        if (substr($objet, 0, strlen($nom_skel)) == $nom_skel) {
736
+            $i++;
737
+            $nom = $boucle->id_boucle;
738
+            $req = $boucle->type_requete;
739
+            $crit = public_decompiler($boucle, $gram, 0, 'criteres');
740
+            $self2 = $self . '&amp;var_mode_objet=' . $objet;
741
+
742
+            $res .= "\n<tr style='background-color: " .
743
+                ($i % 2 ? '#e0e0f0' : '#f8f8ff') .
744
+                "'><td  align='right'>$i</td><td>\n" .
745
+                "<a  class='debug_link_boucle' href='" .
746
+                $self2 .
747
+                "&amp;var_mode_affiche=boucle#f_$nom_skel'>" .
748
+                _T('zbug_boucle') .
749
+                "</a></td><td>\n<a class='debug_link_boucle' href='" .
750
+                $self2 .
751
+                "&amp;var_mode_affiche=resultat#f_$nom_skel'>" .
752
+                _T('zbug_resultat') .
753
+                "</a></td><td>\n<a class='debug_link_resultat' href='" .
754
+                $self2 .
755
+                "&amp;var_mode_affiche=code#f_$nom_skel'>" .
756
+                _T('zbug_code') .
757
+                "</a></td><td>\n<a class='debug_link_resultat' href='" .
758
+                str_replace('var_mode=', 'var_profile=', $self2) .
759
+                "'>" .
760
+                _T('zbug_calcul') .
761
+                "</a></td><td>\n" .
762
+                (($var_mode_objet == $objet) ? "<b>$nom</b>" : $nom) .
763
+                "</td><td>\n" .
764
+                $req .
765
+                "</td><td>\n" .
766
+                spip_htmlspecialchars($crit) .
767
+                '</td></tr>';
768
+        }
769
+    }
770
+
771
+    return $res;
772 772
 }
773 773
 
774 774
 function debusquer_source($objet, $affiche) {
775
-	$quoi = $GLOBALS['debug_objets'][$affiche][$objet];
776
-	if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
777
-		$nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
778
-	} else {
779
-		$nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
780
-	}
781
-	$res2 = '';
782
-
783
-	if ($affiche == 'resultat') {
784
-		$legend = $nom;
785
-		$req = $GLOBALS['debug_objets']['requete'][$objet];
786
-		if (function_exists('_mysql_traite_query')) {
787
-			$c = strtolower(_request('connect') ?? '');
788
-			$c = $GLOBALS['connexions'][$c ?: 0]['prefixe'];
789
-			$req = _mysql_traite_query($req, '', $c);
790
-		}
791
-		//  permettre le copier/coller facile
792
-		// $res = ancre_texte($req, array(), true);
793
-		$res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
794
-		//  formatage et affichage des resultats bruts de la requete
795
-		$ress_req = spip_query($req);
796
-		$brut_sql = '';
797
-		$num = 1;
798
-		//  eviter l'affichage de milliers de lignes
799
-		//  personnalisation possible dans mes_options
800
-		$max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
801
-		while ($retours_sql = sql_fetch($ress_req)) {
802
-			if ($num <= $max_aff) {
803
-				$brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
804
-				$brut_sql .= '<p>';
805
-				foreach ($retours_sql as $key => $val) {
806
-					$brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
807
-				}
808
-				$brut_sql .= '</p>';
809
-			}
810
-			$num++;
811
-		}
812
-		$res2 = interdire_scripts($brut_sql);
813
-		foreach ($quoi as $view) {
814
-			//  ne pas afficher les $contexte_inclus
815
-			$view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
816
-			if ($view) {
817
-				$res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
818
-			}
819
-		}
820
-	} elseif ($affiche == 'code') {
821
-		$legend = $nom;
822
-		$res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
823
-	} elseif ($affiche == 'boucle') {
824
-		$legend = _T('zbug_boucle') . ' ' . $nom;
825
-		// Le compilateur prefixe le nom des boucles par l'extension du fichier source.
826
-		$gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
827
-		$res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
828
-	} elseif ($affiche == 'squelette') {
829
-		$legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
830
-		$res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
831
-	}
832
-
833
-	return [$legend, $res, $res2];
775
+    $quoi = $GLOBALS['debug_objets'][$affiche][$objet];
776
+    if (!empty($GLOBALS['debug_objets']['boucle'][$objet]->id_boucle)) {
777
+        $nom = $GLOBALS['debug_objets']['boucle'][$objet]->id_boucle;
778
+    } else {
779
+        $nom = $GLOBALS['debug_objets']['sourcefile'][$objet];
780
+    }
781
+    $res2 = '';
782
+
783
+    if ($affiche == 'resultat') {
784
+        $legend = $nom;
785
+        $req = $GLOBALS['debug_objets']['requete'][$objet];
786
+        if (function_exists('_mysql_traite_query')) {
787
+            $c = strtolower(_request('connect') ?? '');
788
+            $c = $GLOBALS['connexions'][$c ?: 0]['prefixe'];
789
+            $req = _mysql_traite_query($req, '', $c);
790
+        }
791
+        //  permettre le copier/coller facile
792
+        // $res = ancre_texte($req, array(), true);
793
+        $res = "<div id='T" . md5($req) . "'>\n<pre>\n" . $req . "</pre>\n</div>\n";
794
+        //  formatage et affichage des resultats bruts de la requete
795
+        $ress_req = spip_query($req);
796
+        $brut_sql = '';
797
+        $num = 1;
798
+        //  eviter l'affichage de milliers de lignes
799
+        //  personnalisation possible dans mes_options
800
+        $max_aff = defined('_MAX_DEBUG_AFF') ? _MAX_DEBUG_AFF : 50;
801
+        while ($retours_sql = sql_fetch($ress_req)) {
802
+            if ($num <= $max_aff) {
803
+                $brut_sql .= '<h3>' . ($num == 1 ? $num . ' sur ' . sql_count($ress_req) : $num) . '</h3>';
804
+                $brut_sql .= '<p>';
805
+                foreach ($retours_sql as $key => $val) {
806
+                    $brut_sql .= '<strong>' . $key . '</strong> => ' . spip_htmlspecialchars(couper($val, 150)) . "<br />\n";
807
+                }
808
+                $brut_sql .= '</p>';
809
+            }
810
+            $num++;
811
+        }
812
+        $res2 = interdire_scripts($brut_sql);
813
+        foreach ($quoi as $view) {
814
+            //  ne pas afficher les $contexte_inclus
815
+            $view = preg_replace(',<\?php.+\?[>],Uims', '', $view);
816
+            if ($view) {
817
+                $res2 .= "\n<br /><fieldset>" . interdire_scripts($view) . '</fieldset>';
818
+            }
819
+        }
820
+    } elseif ($affiche == 'code') {
821
+        $legend = $nom;
822
+        $res = ancre_texte('<' . "?php\n" . $quoi . "\n?" . '>');
823
+    } elseif ($affiche == 'boucle') {
824
+        $legend = _T('zbug_boucle') . ' ' . $nom;
825
+        // Le compilateur prefixe le nom des boucles par l'extension du fichier source.
826
+        $gram = preg_match('/^([^_]+)_/', $objet, $r) ? $r[1] : '';
827
+        $res = ancre_texte(public_decompiler($quoi, $gram, 0, 'boucle'));
828
+    } elseif ($affiche == 'squelette') {
829
+        $legend = $GLOBALS['debug_objets']['sourcefile'][$objet];
830
+        $res = ancre_texte($GLOBALS['debug_objets']['squelette'][$objet]);
831
+    }
832
+
833
+    return [$legend, $res, $res2];
834 834
 }
835 835
 
836 836
 function debusquer_entete($titre, $corps) {
837 837
 
838
-	include_spip('balise/formulaire_admin');
839
-	include_spip('public/assembler'); // pour inclure_balise_dynamique
840
-	include_spip('inc/texte'); // pour corriger_typo
841
-
842
-	return _DOCTYPE_ECRIRE .
843
-	html_lang_attributes() .
844
-	"<head>\n<title>" .
845
-	('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
846
-		_T('admin_debug') . ' ' . spip_htmlspecialchars($titre) . ' (' .
847
-		supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
848
-	")</title>\n" .
849
-	"<meta http-equiv='Content-Type' content='text/html" .
850
-	(($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
851
-	"' />\n" .
852
-	http_script('', 'jquery.js')
853
-	. "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
854
-	. "' type='text/css' />" .
855
-	"</head>\n" .
856
-	"<body style='margin:0 10px;'>\n" .
857
-	"<div id='spip-debug-header'>" .
858
-	$corps .
859
-	inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
860
-	'</div></body></html>';
838
+    include_spip('balise/formulaire_admin');
839
+    include_spip('public/assembler'); // pour inclure_balise_dynamique
840
+    include_spip('inc/texte'); // pour corriger_typo
841
+
842
+    return _DOCTYPE_ECRIRE .
843
+    html_lang_attributes() .
844
+    "<head>\n<title>" .
845
+    ('SPIP ' . $GLOBALS['spip_version_affichee'] . ' ' .
846
+        _T('admin_debug') . ' ' . spip_htmlspecialchars($titre) . ' (' .
847
+        supprimer_tags(corriger_typo($GLOBALS['meta']['nom_site']))) .
848
+    ")</title>\n" .
849
+    "<meta http-equiv='Content-Type' content='text/html" .
850
+    (($c = $GLOBALS['meta']['charset']) ? "; charset=$c" : '') .
851
+    "' />\n" .
852
+    http_script('', 'jquery.js')
853
+    . "<link rel='stylesheet' href='" . url_absolue(find_in_path('spip_admin.css'))
854
+    . "' type='text/css' />" .
855
+    "</head>\n" .
856
+    "<body style='margin:0 10px;'>\n" .
857
+    "<div id='spip-debug-header'>" .
858
+    $corps .
859
+    inclure_balise_dynamique(balise_FORMULAIRE_ADMIN_dyn('spip-admin-float', $GLOBALS['debug_objets']), false) .
860
+    '</div></body></html>';
861 861
 }
Please login to merge, or discard this patch.
ecrire/lang/ecrire_sv.php 1 patch
Indentation   +539 added lines, -539 removed lines patch added patch discarded remove patch
@@ -4,585 +4,585 @@
 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
-	'activer_plugin' => 'Aktivera insticksmodulen',
14
-	'affichage' => 'Visa',
15
-	'aide_non_disponible' => 'Den här delen av direkthjälpen finns inte i det aktuella språket',
16
-	'auteur' => 'Redaktör',
17
-	'avis_acces_interdit' => 'Tillträde förbjudet.',
18
-	'avis_article_modifie' => 'Varning, @nom_auteur_modif@ har arbetat på den här artikeln för @date_diff@ minuter sen',
19
-	'avis_aucun_resultat' => 'Hittade inga resultat',
20
-	'avis_chemin_invalide_1' => 'Sökvägen du har angett',
21
-	'avis_chemin_invalide_2' => 'är ogiltig. Återgå till den föregående sidan och kontrollera den angivna informationen',
22
-	'avis_connexion_echec_1' => 'Anslutningen till SQL-servern misslyckades.',
23
-	'avis_connexion_echec_2' => 'Återgå till den föregående sidan och kontrollera informationen du angivit.',
24
-	'avis_connexion_echec_3' => '<b>OBS</b> På många servrar måste du  <b>begära</b> aktivering av din databas innan du kan använda den. Om du inte lyckas med uppkopplingen, se till att den är aktiverad.',
25
-	'avis_connexion_ldap_echec_1' => 'Anslutning till LDAP-server misslyckades.',
26
-	'avis_connexion_ldap_echec_2' => 'Återgå till den föregående sidan och kontrollera informationen du angivit.',
27
-	'avis_connexion_ldap_echec_3' => 'Alternativt kan du välja att inte använda LDAP stöd för att importera användare.',
28
-	'avis_deplacement_rubrique' => 'Varning! Den här avdelningen innehåller @contient_breves@ notiser@scb@: om du flyttar den, markera i kryssrutan för att bekräfta.',
29
-	'avis_erreur_connexion_mysql' => 'Fel på SQL-förbindelsen',
30
-	'avis_espace_interdit' => '<b>Förbjudet område</b><p>SPIP är redan installerat.', # MODIF
31
-	'avis_lecture_noms_bases_1' => 'Installerings-scriptet kunde inte läsa namnen på de installerade databaserna.',
32
-	'avis_lecture_noms_bases_2' => 'Antingen finns det ingen tillgänglig databas eller så är funktionen som listar
12
+    // A
13
+    'activer_plugin' => 'Aktivera insticksmodulen',
14
+    'affichage' => 'Visa',
15
+    'aide_non_disponible' => 'Den här delen av direkthjälpen finns inte i det aktuella språket',
16
+    'auteur' => 'Redaktör',
17
+    'avis_acces_interdit' => 'Tillträde förbjudet.',
18
+    'avis_article_modifie' => 'Varning, @nom_auteur_modif@ har arbetat på den här artikeln för @date_diff@ minuter sen',
19
+    'avis_aucun_resultat' => 'Hittade inga resultat',
20
+    'avis_chemin_invalide_1' => 'Sökvägen du har angett',
21
+    'avis_chemin_invalide_2' => 'är ogiltig. Återgå till den föregående sidan och kontrollera den angivna informationen',
22
+    'avis_connexion_echec_1' => 'Anslutningen till SQL-servern misslyckades.',
23
+    'avis_connexion_echec_2' => 'Återgå till den föregående sidan och kontrollera informationen du angivit.',
24
+    'avis_connexion_echec_3' => '<b>OBS</b> På många servrar måste du  <b>begära</b> aktivering av din databas innan du kan använda den. Om du inte lyckas med uppkopplingen, se till att den är aktiverad.',
25
+    'avis_connexion_ldap_echec_1' => 'Anslutning till LDAP-server misslyckades.',
26
+    'avis_connexion_ldap_echec_2' => 'Återgå till den föregående sidan och kontrollera informationen du angivit.',
27
+    'avis_connexion_ldap_echec_3' => 'Alternativt kan du välja att inte använda LDAP stöd för att importera användare.',
28
+    'avis_deplacement_rubrique' => 'Varning! Den här avdelningen innehåller @contient_breves@ notiser@scb@: om du flyttar den, markera i kryssrutan för att bekräfta.',
29
+    'avis_erreur_connexion_mysql' => 'Fel på SQL-förbindelsen',
30
+    'avis_espace_interdit' => '<b>Förbjudet område</b><p>SPIP är redan installerat.', # MODIF
31
+    'avis_lecture_noms_bases_1' => 'Installerings-scriptet kunde inte läsa namnen på de installerade databaserna.',
32
+    'avis_lecture_noms_bases_2' => 'Antingen finns det ingen tillgänglig databas eller så är funktionen som listar
33 33
  databaser inaktiverad av säkerhetsskäl (det är fallet hos många webbvärdar).',
34
-	'avis_lecture_noms_bases_3' => 'I fråga om det andra alternativet är det möjligt att en databas med ditt användarnamn kan användas:',
35
-	'avis_non_acces_page' => 'Du har inte tillgång till den här sidan.',
36
-	'avis_operation_echec' => 'Operationen misslyckades.',
37
-	'avis_operation_impossible' => 'Operationen omöjlig att genomföra',
38
-	'avis_suppression_base' => 'OBS! Radering av data är permanent och kan inte göras ogjord.',
34
+    'avis_lecture_noms_bases_3' => 'I fråga om det andra alternativet är det möjligt att en databas med ditt användarnamn kan användas:',
35
+    'avis_non_acces_page' => 'Du har inte tillgång till den här sidan.',
36
+    'avis_operation_echec' => 'Operationen misslyckades.',
37
+    'avis_operation_impossible' => 'Operationen omöjlig att genomföra',
38
+    'avis_suppression_base' => 'OBS! Radering av data är permanent och kan inte göras ogjord.',
39 39
 
40
-	// B
41
-	'bouton_acces_ldap' => 'Lägg till en LDAP-katalog >>',
42
-	'bouton_ajouter' => 'Lägg till',
43
-	'bouton_annuler' => 'Avbryt',
44
-	'bouton_demande_publication' => 'Begär att den här artikeln ska publiceras',
45
-	'bouton_desactive_tout' => 'Avaktivera alla',
46
-	'bouton_desinstaller' => 'Avinstallera',
47
-	'bouton_effacer_tout' => 'Radera ALLA',
48
-	'bouton_envoyer_message' => 'Färdigt meddelande: skicka',
49
-	'bouton_modifier' => 'Ändra',
50
-	'bouton_radio_afficher' => 'Visa',
51
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Synas i listan över anslutna redaktörere',
52
-	'bouton_radio_envoi_annonces_adresse' => 'Skicka meddelanden till adressen:',
53
-	'bouton_radio_envoi_liste_nouveautes' => 'Skicka lista över senaste notiser',
54
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Inte synas i listan över anslutna redaktörere',
55
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Skicka inga redaktionella meddelanden',
56
-	'bouton_redirection' => 'OMPEKA',
57
-	'bouton_relancer_installation' => 'Kör installationen igen',
58
-	'bouton_suivant' => 'Nästa',
59
-	'bouton_tenter_recuperation' => 'Försök till reparation',
60
-	'bouton_test_proxy' => 'Testa proxyn',
61
-	'bouton_vider_cache' => 'Töm cachen',
40
+    // B
41
+    'bouton_acces_ldap' => 'Lägg till en LDAP-katalog >>',
42
+    'bouton_ajouter' => 'Lägg till',
43
+    'bouton_annuler' => 'Avbryt',
44
+    'bouton_demande_publication' => 'Begär att den här artikeln ska publiceras',
45
+    'bouton_desactive_tout' => 'Avaktivera alla',
46
+    'bouton_desinstaller' => 'Avinstallera',
47
+    'bouton_effacer_tout' => 'Radera ALLA',
48
+    'bouton_envoyer_message' => 'Färdigt meddelande: skicka',
49
+    'bouton_modifier' => 'Ändra',
50
+    'bouton_radio_afficher' => 'Visa',
51
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Synas i listan över anslutna redaktörere',
52
+    'bouton_radio_envoi_annonces_adresse' => 'Skicka meddelanden till adressen:',
53
+    'bouton_radio_envoi_liste_nouveautes' => 'Skicka lista över senaste notiser',
54
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Inte synas i listan över anslutna redaktörere',
55
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Skicka inga redaktionella meddelanden',
56
+    'bouton_redirection' => 'OMPEKA',
57
+    'bouton_relancer_installation' => 'Kör installationen igen',
58
+    'bouton_suivant' => 'Nästa',
59
+    'bouton_tenter_recuperation' => 'Försök till reparation',
60
+    'bouton_test_proxy' => 'Testa proxyn',
61
+    'bouton_vider_cache' => 'Töm cachen',
62 62
 
63
-	// C
64
-	'cache_modifiable_webmestre' => 'Den här parametern kan ändras av den webbansvariga.',
65
-	'calendrier_synchro' => 'Om du använder ett kalenderprogram som är kompatibelt med <b>iCal</b> kan du synkronisera det med informationen på den här webbplatsen.',
66
-	'config_activer_champs' => 'Aktivera följande fält',
67
-	'config_choix_base_sup' => 'Ge namnet på en databas på servern',
68
-	'config_erreur_base_sup' => 'SPIP har inte tillgång till de existerande databaserna',
69
-	'config_info_base_sup_disponibles' => 'Ytterligare databaser dit databasfrågor kan skickas:',
70
-	'config_info_logos' => 'Alla objekt på sajten kan kan ha sin egen logotype och dessutom en "mouseover" logotype',
71
-	'config_info_logos_utiliser' => 'Använd logotyper',
72
-	'config_info_logos_utiliser_non' => 'Använd inte logotyper',
73
-	'config_info_logos_utiliser_survol' => 'Använd "mouseover" logotyper',
74
-	'config_info_logos_utiliser_survol_non' => 'Använd inte "mouseover" logotyper',
75
-	'config_info_redirection' => 'Genom att aktivera det här valet kan du skapa virtuella artiklar, som enbart är länkar till artiklar som publicerats på andra sajter oavsett om det är SPIP-sajter eller ej.',
76
-	'config_redirection' => 'Virtuella artiklar',
77
-	'config_titre_base_sup' => 'Konfigurera ytterligare en databas',
78
-	'config_titre_base_sup_choix' => 'Välj ytterligare en databas',
79
-	'connexion_ldap' => 'ldapuppkoppling:',
63
+    // C
64
+    'cache_modifiable_webmestre' => 'Den här parametern kan ändras av den webbansvariga.',
65
+    'calendrier_synchro' => 'Om du använder ett kalenderprogram som är kompatibelt med <b>iCal</b> kan du synkronisera det med informationen på den här webbplatsen.',
66
+    'config_activer_champs' => 'Aktivera följande fält',
67
+    'config_choix_base_sup' => 'Ge namnet på en databas på servern',
68
+    'config_erreur_base_sup' => 'SPIP har inte tillgång till de existerande databaserna',
69
+    'config_info_base_sup_disponibles' => 'Ytterligare databaser dit databasfrågor kan skickas:',
70
+    'config_info_logos' => 'Alla objekt på sajten kan kan ha sin egen logotype och dessutom en "mouseover" logotype',
71
+    'config_info_logos_utiliser' => 'Använd logotyper',
72
+    'config_info_logos_utiliser_non' => 'Använd inte logotyper',
73
+    'config_info_logos_utiliser_survol' => 'Använd "mouseover" logotyper',
74
+    'config_info_logos_utiliser_survol_non' => 'Använd inte "mouseover" logotyper',
75
+    'config_info_redirection' => 'Genom att aktivera det här valet kan du skapa virtuella artiklar, som enbart är länkar till artiklar som publicerats på andra sajter oavsett om det är SPIP-sajter eller ej.',
76
+    'config_redirection' => 'Virtuella artiklar',
77
+    'config_titre_base_sup' => 'Konfigurera ytterligare en databas',
78
+    'config_titre_base_sup_choix' => 'Välj ytterligare en databas',
79
+    'connexion_ldap' => 'ldapuppkoppling:',
80 80
 
81
-	// D
82
-	'date_mot_heures' => 'h',
81
+    // D
82
+    'date_mot_heures' => 'h',
83 83
 
84
-	// E
85
-	'email' => 'e-post',
86
-	'email_2' => 'e-post:',
87
-	'entree_adresse_annuaire' => 'Katalogens adress',
88
-	'entree_adresse_email' => 'Din e-postadress',
89
-	'entree_base_donnee_1' => 'Adress till databasen',
90
-	'entree_base_donnee_2' => '(Ofta är det samma adress som till din webbplats, ibland är det "localhost" och ibland lämnas det helt tomt.)',
91
-	'entree_biographie' => 'Kort biografi med några få ord.',
92
-	'entree_chemin_acces' => '<b>Fyll i</b> sökvägen:',
93
-	'entree_cle_pgp' => 'Din PGP-nyckel',
94
-	'entree_contenu_rubrique' => '(Några få ord som beskriver innehållet i avdelningen)',
95
-	'entree_identifiants_connexion' => 'Dina anslutningsuppgifter',
96
-	'entree_informations_connexion_ldap' => 'Fyll i det här formuläret med uppgifter om din anslutning till LDAP. Din system eller nätverks administratör kan ge dig dessa.',
97
-	'entree_infos_perso' => 'Vem är du?',
98
-	'entree_interieur_rubrique' => 'I avdelning:',
99
-	'entree_liens_sites' => '<b>Hyperlänk</b> (referens, sajt att besöka...)',
100
-	'entree_login' => 'Dina användaruppgifter',
101
-	'entree_login_connexion_1' => 'Användarupgifter för anslutningen',
102
-	'entree_login_connexion_2' => '(Är ibland samma som lösenordet för FTP-åtkomst och ibland kan det lämnas tomt)',
103
-	'entree_mot_passe' => 'Ditt lösenord',
104
-	'entree_mot_passe_1' => 'Lösenord för anslutningen',
105
-	'entree_mot_passe_2' => '(Är ibland samma som lösenordet för FTP-åtkomst och ibland kan det lämnas tomt)',
106
-	'entree_nom_fichier' => 'Skriv in filnamnet @texte_compresse@',
107
-	'entree_nom_pseudo' => 'Ditt namn eller alias',
108
-	'entree_nom_pseudo_1' => '(Ditt namn eller alias)',
109
-	'entree_nom_site' => 'Din webbplats namn',
110
-	'entree_nouveau_passe' => 'Nytt lösenord',
111
-	'entree_passe_ldap' => 'Lösenord',
112
-	'entree_port_annuaire' => 'Katalogens portnummer',
113
-	'entree_signature' => 'Signatur',
114
-	'entree_titre_obligatoire' => '<b>Title</b> [Krävs]<br />',
115
-	'entree_url' => 'Din webbplats URL',
116
-	'erreur_plugin_fichier_absent' => 'Filen saknas',
117
-	'erreur_plugin_fichier_def_absent' => 'Definitionsfilen saknas',
118
-	'erreur_plugin_nom_fonction_interdit' => 'Förbjudet namn för funktionen',
119
-	'erreur_plugin_nom_manquant' => 'plugin-namnet saknas',
120
-	'erreur_plugin_prefix_manquant' => 'Pluginens prefix odefinierad',
121
-	'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; saknas i definitionsfilen',
122
-	'erreur_plugin_version_manquant' => 'Denna plugin saknar version.',
84
+    // E
85
+    'email' => 'e-post',
86
+    'email_2' => 'e-post:',
87
+    'entree_adresse_annuaire' => 'Katalogens adress',
88
+    'entree_adresse_email' => 'Din e-postadress',
89
+    'entree_base_donnee_1' => 'Adress till databasen',
90
+    'entree_base_donnee_2' => '(Ofta är det samma adress som till din webbplats, ibland är det "localhost" och ibland lämnas det helt tomt.)',
91
+    'entree_biographie' => 'Kort biografi med några få ord.',
92
+    'entree_chemin_acces' => '<b>Fyll i</b> sökvägen:',
93
+    'entree_cle_pgp' => 'Din PGP-nyckel',
94
+    'entree_contenu_rubrique' => '(Några få ord som beskriver innehållet i avdelningen)',
95
+    'entree_identifiants_connexion' => 'Dina anslutningsuppgifter',
96
+    'entree_informations_connexion_ldap' => 'Fyll i det här formuläret med uppgifter om din anslutning till LDAP. Din system eller nätverks administratör kan ge dig dessa.',
97
+    'entree_infos_perso' => 'Vem är du?',
98
+    'entree_interieur_rubrique' => 'I avdelning:',
99
+    'entree_liens_sites' => '<b>Hyperlänk</b> (referens, sajt att besöka...)',
100
+    'entree_login' => 'Dina användaruppgifter',
101
+    'entree_login_connexion_1' => 'Användarupgifter för anslutningen',
102
+    'entree_login_connexion_2' => '(Är ibland samma som lösenordet för FTP-åtkomst och ibland kan det lämnas tomt)',
103
+    'entree_mot_passe' => 'Ditt lösenord',
104
+    'entree_mot_passe_1' => 'Lösenord för anslutningen',
105
+    'entree_mot_passe_2' => '(Är ibland samma som lösenordet för FTP-åtkomst och ibland kan det lämnas tomt)',
106
+    'entree_nom_fichier' => 'Skriv in filnamnet @texte_compresse@',
107
+    'entree_nom_pseudo' => 'Ditt namn eller alias',
108
+    'entree_nom_pseudo_1' => '(Ditt namn eller alias)',
109
+    'entree_nom_site' => 'Din webbplats namn',
110
+    'entree_nouveau_passe' => 'Nytt lösenord',
111
+    'entree_passe_ldap' => 'Lösenord',
112
+    'entree_port_annuaire' => 'Katalogens portnummer',
113
+    'entree_signature' => 'Signatur',
114
+    'entree_titre_obligatoire' => '<b>Title</b> [Krävs]<br />',
115
+    'entree_url' => 'Din webbplats URL',
116
+    'erreur_plugin_fichier_absent' => 'Filen saknas',
117
+    'erreur_plugin_fichier_def_absent' => 'Definitionsfilen saknas',
118
+    'erreur_plugin_nom_fonction_interdit' => 'Förbjudet namn för funktionen',
119
+    'erreur_plugin_nom_manquant' => 'plugin-namnet saknas',
120
+    'erreur_plugin_prefix_manquant' => 'Pluginens prefix odefinierad',
121
+    'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; saknas i definitionsfilen',
122
+    'erreur_plugin_version_manquant' => 'Denna plugin saknar version.',
123 123
 
124
-	// I
125
-	'ical_info1' => 'Denna sida visar flera metoder att hålla dig informerad om aktiviteter på sajten.',
126
-	'ical_info2' => 'För mer information, tveka inte om att besöka <a href="@spipnet@">SPIP’s dokumentation</a>.', # MODIF
127
-	'ical_info_calendrier' => 'Du kan använda två kalendrar. En är en sajtkarta med alla publicerade artiklar. Den andra innehåller redaktionella meddelanden och dina senaste privata meddelanden: Den är personlig, tack vare en genererad nyckel som du kan förändra när som helst genom att byta lösenord.',
128
-	'ical_methode_http' => 'Nerladdning',
129
-	'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF
130
-	'ical_texte_prive' => 'Den här kalendern som är personlig, innnehåller dina egna redaktionella händelser på den här sajten (uppgifter, egna möten, inlämnade artiklar och nyheter...).',
131
-	'ical_texte_public' => 'Den här kalendern låter dig följa den publika aktiviteten på sajten (publicerade artiklar och nyheter).',
132
-	'ical_texte_rss' => 'Du kan syndikerar de senaste nyheterna på den är sajten i vilken XML/RSS-läsare som helst. Det är samma format som gör det möjligt att läsa de senaste nyheterna på andra sajter som använder ett kompatibelt format. (syndikerade sajter).',
133
-	'ical_titre_js' => 'Javascript',
134
-	'ical_titre_mailing' => 'E-postlista',
135
-	'ical_titre_rss' => 'Syndikeringsfiler',
136
-	'icone_activer_cookie' => 'Sätt en cookie',
137
-	'icone_admin_plugin' => 'Hantera plugin’s',
138
-	'icone_afficher_auteurs' => 'Visa redaktörer',
139
-	'icone_afficher_visiteurs' => 'Visa besökare',
140
-	'icone_arret_discussion' => 'Avsluta diskussionen',
141
-	'icone_calendrier' => 'Kalender',
142
-	'icone_creer_auteur' => 'Skapa en ny redaktör och koppla honom (henne) till den här artikeln',
143
-	'icone_creer_mot_cle' => 'Skapa ett nytt nyckelord och länka det till artikeln',
144
-	'icone_creer_rubrique_2' => 'Skapa en ny avdelning',
145
-	'icone_modifier_article' => 'Editera artikeln',
146
-	'icone_modifier_rubrique' => 'Editera avdelningen',
147
-	'icone_relancer_signataire' => 'Kontakta personen igen',
148
-	'icone_retour' => 'Tillbaka',
149
-	'icone_retour_article' => 'Tillbaka till artikeln',
150
-	'icone_supprimer_cookie' => 'Radera cookien',
151
-	'icone_supprimer_rubrique' => 'Radera den här avdelningen',
152
-	'icone_supprimer_signature' => 'Radera den här signaturen',
153
-	'icone_valider_signature' => 'Validera signaturen',
154
-	'image_administrer_rubrique' => 'Du kan hantera den här avdelningen',
155
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
156
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
157
-	'info_1_article' => '1 artikel',
158
-	'info_activer_cookie' => 'Du kan aktivera en <b>administrationscookie</b>, som tillåter dig
124
+    // I
125
+    'ical_info1' => 'Denna sida visar flera metoder att hålla dig informerad om aktiviteter på sajten.',
126
+    'ical_info2' => 'För mer information, tveka inte om att besöka <a href="@spipnet@">SPIP’s dokumentation</a>.', # MODIF
127
+    'ical_info_calendrier' => 'Du kan använda två kalendrar. En är en sajtkarta med alla publicerade artiklar. Den andra innehåller redaktionella meddelanden och dina senaste privata meddelanden: Den är personlig, tack vare en genererad nyckel som du kan förändra när som helst genom att byta lösenord.',
128
+    'ical_methode_http' => 'Nerladdning',
129
+    'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF
130
+    'ical_texte_prive' => 'Den här kalendern som är personlig, innnehåller dina egna redaktionella händelser på den här sajten (uppgifter, egna möten, inlämnade artiklar och nyheter...).',
131
+    'ical_texte_public' => 'Den här kalendern låter dig följa den publika aktiviteten på sajten (publicerade artiklar och nyheter).',
132
+    'ical_texte_rss' => 'Du kan syndikerar de senaste nyheterna på den är sajten i vilken XML/RSS-läsare som helst. Det är samma format som gör det möjligt att läsa de senaste nyheterna på andra sajter som använder ett kompatibelt format. (syndikerade sajter).',
133
+    'ical_titre_js' => 'Javascript',
134
+    'ical_titre_mailing' => 'E-postlista',
135
+    'ical_titre_rss' => 'Syndikeringsfiler',
136
+    'icone_activer_cookie' => 'Sätt en cookie',
137
+    'icone_admin_plugin' => 'Hantera plugin’s',
138
+    'icone_afficher_auteurs' => 'Visa redaktörer',
139
+    'icone_afficher_visiteurs' => 'Visa besökare',
140
+    'icone_arret_discussion' => 'Avsluta diskussionen',
141
+    'icone_calendrier' => 'Kalender',
142
+    'icone_creer_auteur' => 'Skapa en ny redaktör och koppla honom (henne) till den här artikeln',
143
+    'icone_creer_mot_cle' => 'Skapa ett nytt nyckelord och länka det till artikeln',
144
+    'icone_creer_rubrique_2' => 'Skapa en ny avdelning',
145
+    'icone_modifier_article' => 'Editera artikeln',
146
+    'icone_modifier_rubrique' => 'Editera avdelningen',
147
+    'icone_relancer_signataire' => 'Kontakta personen igen',
148
+    'icone_retour' => 'Tillbaka',
149
+    'icone_retour_article' => 'Tillbaka till artikeln',
150
+    'icone_supprimer_cookie' => 'Radera cookien',
151
+    'icone_supprimer_rubrique' => 'Radera den här avdelningen',
152
+    'icone_supprimer_signature' => 'Radera den här signaturen',
153
+    'icone_valider_signature' => 'Validera signaturen',
154
+    'image_administrer_rubrique' => 'Du kan hantera den här avdelningen',
155
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
156
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
157
+    'info_1_article' => '1 artikel',
158
+    'info_activer_cookie' => 'Du kan aktivera en <b>administrationscookie</b>, som tillåter dig
159 159
  att enkelt växla mellan den publika och den privata delen.',
160
-	'info_administrateur' => 'Administratör',
161
-	'info_administrateur_1' => 'Administratör',
162
-	'info_administrateur_2' => 'på sajten (<i>använd med försiktighet</i>)',
163
-	'info_administrateur_site_01' => 'Om du är en sajt-administratör, var vänlig',
164
-	'info_administrateur_site_02' => 'klicka på den här länken',
165
-	'info_administrateurs' => 'Administratörer',
166
-	'info_administrer_rubrique' => 'Du kan hantera den här avdelningen',
167
-	'info_adresse' => 'till adressen:',
168
-	'info_adresse_url' => 'Din sajts publika URL',
169
-	'info_aide_en_ligne' => 'SPIP Online Hjälp',
170
-	'info_ajout_image' => 'När du lägget till filer som bifogade dokument till en artikel,
160
+    'info_administrateur' => 'Administratör',
161
+    'info_administrateur_1' => 'Administratör',
162
+    'info_administrateur_2' => 'på sajten (<i>använd med försiktighet</i>)',
163
+    'info_administrateur_site_01' => 'Om du är en sajt-administratör, var vänlig',
164
+    'info_administrateur_site_02' => 'klicka på den här länken',
165
+    'info_administrateurs' => 'Administratörer',
166
+    'info_administrer_rubrique' => 'Du kan hantera den här avdelningen',
167
+    'info_adresse' => 'till adressen:',
168
+    'info_adresse_url' => 'Din sajts publika URL',
169
+    'info_aide_en_ligne' => 'SPIP Online Hjälp',
170
+    'info_ajout_image' => 'När du lägget till filer som bifogade dokument till en artikel,
171 171
   kan SPIP automatiskt skapa miniatyrer av de
172 172
   inlagda bilderna. Det tillåter till exempel
173 173
   att man automatiskt skapar ett galleri eller en portfolio.',
174
-	'info_ajouter_rubrique' => 'lägg till en annan avdelning:',
175
-	'info_annonce_nouveautes' => 'Senaste nyheterna',
176
-	'info_article' => 'artikel',
177
-	'info_article_2' => 'artiklar',
178
-	'info_article_a_paraitre' => 'Fördaterade artiklar som kommer att publiceras',
179
-	'info_articles_02' => 'artiklar',
180
-	'info_articles_2' => 'Artiklar',
181
-	'info_articles_auteur' => 'Den här redaktörens artiklar',
182
-	'info_articles_trouves' => 'Artiklar hittade',
183
-	'info_attente_validation' => 'Dina artiklar som väntar på validering',
184
-	'info_aujourdhui' => 'idag:',
185
-	'info_auteurs' => 'Redaktörer',
186
-	'info_auteurs_par_tri' => 'Redaktörer@partri@',
187
-	'info_auteurs_trouves' => 'Redaktörer funna',
188
-	'info_authentification_externe' => 'Extern autentifiering',
189
-	'info_avertissement' => 'Varning',
190
-	'info_barre_outils' => 'med dess verktygsfält?',
191
-	'info_base_installee' => 'Databasen är skapad',
192
-	'info_chapeau' => 'Ingress',
193
-	'info_chapeau_2' => 'Introduktion:',
194
-	'info_chemin_acces_1' => 'inställningar: <b>sökväg i katalogen</b>',
195
-	'info_chemin_acces_2' => 'Från och med nu måste du konfigurera sökvägen till katalogen information. Det är nödvändigt för att kunna läsa användarprofilerna som är sparade i katalogen.',
196
-	'info_chemin_acces_annuaire' => 'Inställningar: <b>Sökväg i katalogen</b>',
197
-	'info_choix_base' => 'Tredje steget:',
198
-	'info_code_acces' => 'Glöm inte ditt eget lösenord!',
199
-	'info_config_suivi' => 'Om den här adressen är en mailing lista, kan du under adressen visa var man kan registrera sig. Det kan vara en URL (till exempel en webbsida där man kan registrera sig), eller en e-postadress med en speciell ärenderad (till exempel: <tt>@adresse_suivi@?subject=subscribe</tt>):',
200
-	'info_config_suivi_explication' => 'Du kan anmäla dig till sajtens nyhetsbrev. Du kommer då att automatiskt få meddelanden om artiklar och nyheter som laddats upp för publicering.',
201
-	'info_confirmer_passe' => 'Bekräfta ditt nya lösenord:',
202
-	'info_connexion_base' => 'Försöker att ansluta till databasen',
203
-	'info_connexion_ldap_ok' => 'Din förbindelse till LDAP-servern lyckades.</b><p> Du kan gå vidare till nästa steg.</p>', # MODIF
204
-	'info_connexion_mysql' => 'Din databasförbindelse',
205
-	'info_connexion_ok' => 'Förbindelsen lyckades.',
206
-	'info_contact' => 'Kontakt',
207
-	'info_contenu_articles' => 'Innehåll i artiklarna',
208
-	'info_creation_paragraphe' => '(För att skapa stycken, räcker det att lämna tomma rader.)', # MODIF
209
-	'info_creation_rubrique' => 'Innan du kan skriva artiklar,<br /> måste du skapa åtminstone en avdelning.<br />',
210
-	'info_creation_tables' => 'Skapar databastabeller',
211
-	'info_creer_base' => '<b>Skapa</b> en ny databas:',
212
-	'info_dans_rubrique' => 'I avdelningen:',
213
-	'info_date_publication_anterieure' => 'Datum för tidigare publicering:',
214
-	'info_date_referencement' => 'DATUM DÅ SAJTEN LÄNKADES:',
215
-	'info_derniere_etape' => 'Klart!',
216
-	'info_descriptif' => 'Beskrivning:',
217
-	'info_desinstaller_plugin' => 'raderar data och avaktiverar tillägget',
218
-	'info_discussion_cours' => 'Pågående diskussion',
219
-	'info_ecrire_article' => 'Innan du kan skriva artiklar, ymåste du skapa minst en avdelning.',
220
-	'info_email_envoi' => 'Avsändaren mailadress (frivilligt)',
221
-	'info_email_envoi_txt' => 'Skriv in avsändarens e-postadress som används när man sänder mejlen (som default används mottagarens adress som avsändaradress) :',
222
-	'info_email_webmestre' => 'Webmasterns mejladress (frivillig)', # MODIF
223
-	'info_envoi_email_automatique' => 'Automatisk e-post',
224
-	'info_envoyer_maintenant' => 'Skicka nu',
225
-	'info_etape_suivante' => 'Gå till nästa steg',
226
-	'info_etape_suivante_1' => 'Du kan fortsätta till nästa steg.',
227
-	'info_etape_suivante_2' => 'Du kan fortsätta till nästa steg.',
228
-	'info_exportation_base' => 'Exportera databasen till @archive@',
229
-	'info_facilite_suivi_activite' => 'För att underlätta att följa de redaktionella;
174
+    'info_ajouter_rubrique' => 'lägg till en annan avdelning:',
175
+    'info_annonce_nouveautes' => 'Senaste nyheterna',
176
+    'info_article' => 'artikel',
177
+    'info_article_2' => 'artiklar',
178
+    'info_article_a_paraitre' => 'Fördaterade artiklar som kommer att publiceras',
179
+    'info_articles_02' => 'artiklar',
180
+    'info_articles_2' => 'Artiklar',
181
+    'info_articles_auteur' => 'Den här redaktörens artiklar',
182
+    'info_articles_trouves' => 'Artiklar hittade',
183
+    'info_attente_validation' => 'Dina artiklar som väntar på validering',
184
+    'info_aujourdhui' => 'idag:',
185
+    'info_auteurs' => 'Redaktörer',
186
+    'info_auteurs_par_tri' => 'Redaktörer@partri@',
187
+    'info_auteurs_trouves' => 'Redaktörer funna',
188
+    'info_authentification_externe' => 'Extern autentifiering',
189
+    'info_avertissement' => 'Varning',
190
+    'info_barre_outils' => 'med dess verktygsfält?',
191
+    'info_base_installee' => 'Databasen är skapad',
192
+    'info_chapeau' => 'Ingress',
193
+    'info_chapeau_2' => 'Introduktion:',
194
+    'info_chemin_acces_1' => 'inställningar: <b>sökväg i katalogen</b>',
195
+    'info_chemin_acces_2' => 'Från och med nu måste du konfigurera sökvägen till katalogen information. Det är nödvändigt för att kunna läsa användarprofilerna som är sparade i katalogen.',
196
+    'info_chemin_acces_annuaire' => 'Inställningar: <b>Sökväg i katalogen</b>',
197
+    'info_choix_base' => 'Tredje steget:',
198
+    'info_code_acces' => 'Glöm inte ditt eget lösenord!',
199
+    'info_config_suivi' => 'Om den här adressen är en mailing lista, kan du under adressen visa var man kan registrera sig. Det kan vara en URL (till exempel en webbsida där man kan registrera sig), eller en e-postadress med en speciell ärenderad (till exempel: <tt>@adresse_suivi@?subject=subscribe</tt>):',
200
+    'info_config_suivi_explication' => 'Du kan anmäla dig till sajtens nyhetsbrev. Du kommer då att automatiskt få meddelanden om artiklar och nyheter som laddats upp för publicering.',
201
+    'info_confirmer_passe' => 'Bekräfta ditt nya lösenord:',
202
+    'info_connexion_base' => 'Försöker att ansluta till databasen',
203
+    'info_connexion_ldap_ok' => 'Din förbindelse till LDAP-servern lyckades.</b><p> Du kan gå vidare till nästa steg.</p>', # MODIF
204
+    'info_connexion_mysql' => 'Din databasförbindelse',
205
+    'info_connexion_ok' => 'Förbindelsen lyckades.',
206
+    'info_contact' => 'Kontakt',
207
+    'info_contenu_articles' => 'Innehåll i artiklarna',
208
+    'info_creation_paragraphe' => '(För att skapa stycken, räcker det att lämna tomma rader.)', # MODIF
209
+    'info_creation_rubrique' => 'Innan du kan skriva artiklar,<br /> måste du skapa åtminstone en avdelning.<br />',
210
+    'info_creation_tables' => 'Skapar databastabeller',
211
+    'info_creer_base' => '<b>Skapa</b> en ny databas:',
212
+    'info_dans_rubrique' => 'I avdelningen:',
213
+    'info_date_publication_anterieure' => 'Datum för tidigare publicering:',
214
+    'info_date_referencement' => 'DATUM DÅ SAJTEN LÄNKADES:',
215
+    'info_derniere_etape' => 'Klart!',
216
+    'info_descriptif' => 'Beskrivning:',
217
+    'info_desinstaller_plugin' => 'raderar data och avaktiverar tillägget',
218
+    'info_discussion_cours' => 'Pågående diskussion',
219
+    'info_ecrire_article' => 'Innan du kan skriva artiklar, ymåste du skapa minst en avdelning.',
220
+    'info_email_envoi' => 'Avsändaren mailadress (frivilligt)',
221
+    'info_email_envoi_txt' => 'Skriv in avsändarens e-postadress som används när man sänder mejlen (som default används mottagarens adress som avsändaradress) :',
222
+    'info_email_webmestre' => 'Webmasterns mejladress (frivillig)', # MODIF
223
+    'info_envoi_email_automatique' => 'Automatisk e-post',
224
+    'info_envoyer_maintenant' => 'Skicka nu',
225
+    'info_etape_suivante' => 'Gå till nästa steg',
226
+    'info_etape_suivante_1' => 'Du kan fortsätta till nästa steg.',
227
+    'info_etape_suivante_2' => 'Du kan fortsätta till nästa steg.',
228
+    'info_exportation_base' => 'Exportera databasen till @archive@',
229
+    'info_facilite_suivi_activite' => 'För att underlätta att följa de redaktionella;
230 230
   aktiviteterna, kan SPIP skicka medddelanden via e-post, exempelvis till en maillista för redaktörer,
231 231
   angående publiceringar och godkännanden.', # MODIF
232
-	'info_fichiers_authent' => 'Lösenordsfil ".htpasswd"',
233
-	'info_gauche_auteurs' => 'Här hittar du alla redaktörer på sajten.
232
+    'info_fichiers_authent' => 'Lösenordsfil ".htpasswd"',
233
+    'info_gauche_auteurs' => 'Här hittar du alla redaktörer på sajten.
234 234
  Status på var och en av dem visas av färgen på ikonen (administratör = grön; redaktör = gul).',
235
-	'info_gauche_auteurs_exterieurs' => 'Externa redaktörer utan behörighet på sajten, visas med en blå ikon; raderade redaktörer med en soptunna.', # MODIF
236
-	'info_generation_miniatures_images' => 'Skapande av tumnagelbilder.',
237
-	'info_hebergeur_desactiver_envoi_email' => 'Vissa webhotell avaktiverar automatisk mejl
235
+    'info_gauche_auteurs_exterieurs' => 'Externa redaktörer utan behörighet på sajten, visas med en blå ikon; raderade redaktörer med en soptunna.', # MODIF
236
+    'info_generation_miniatures_images' => 'Skapande av tumnagelbilder.',
237
+    'info_hebergeur_desactiver_envoi_email' => 'Vissa webhotell avaktiverar automatisk mejl
238 238
 på deras servrar. Om så är fallet kan följande
239 239
 funktioner hos SPIP inte användas.',
240
-	'info_hier' => 'I går:',
241
-	'info_identification_publique' => 'Din publika identitet...',
242
-	'info_image_process' => 'Välj den bästa metoden för att skapa miniatyrer genom att klicka på motsvarande bild.',
243
-	'info_image_process2' => '<b>OBS!.</b> <i>Om du inte kan se någon bild, så är din server inte konfigurerad för att använda sådana verktyg. Om du vill använda dessa finesser så kontakta din leverantörs tekniska support och be dem installera utökningarna för «GD» eller «Imagick».</i>', # MODIF
244
-	'info_informations_personnelles' => 'Personlig information',
245
-	'info_inscription_automatique' => 'Automatisk registreing av nya redaktörer',
246
-	'info_jeu_caractere' => 'Sajtens teckenuppsättning',
247
-	'info_jours' => 'dagar',
248
-	'info_laisser_champs_vides' => 'Lämna dessa fält tomma)',
249
-	'info_langues' => 'Sajtens språk',
250
-	'info_lien_hypertexte' => 'Hyperlänk:',
251
-	'info_liste_redacteurs_connectes' => 'Inlogggade redaktörer',
252
-	'info_login_existant' => 'Användarnamnet finns redan.',
253
-	'info_login_trop_court' => 'Användarnamnet är för kort.',
254
-	'info_logos' => 'Logotyperna',
255
-	'info_maximum' => 'maximum:',
256
-	'info_meme_rubrique' => 'I samma avdelning',
257
-	'info_message_en_redaction' => 'utkorg',
258
-	'info_message_technique' => 'Tekniskt meddelande:',
259
-	'info_messagerie_interne' => 'Internmeddelande',
260
-	'info_mise_a_niveau_base' => 'SQL database upgradering',
261
-	'info_mise_a_niveau_base_2' => '{{Warning!}} Du har installerat {äldre} 
240
+    'info_hier' => 'I går:',
241
+    'info_identification_publique' => 'Din publika identitet...',
242
+    'info_image_process' => 'Välj den bästa metoden för att skapa miniatyrer genom att klicka på motsvarande bild.',
243
+    'info_image_process2' => '<b>OBS!.</b> <i>Om du inte kan se någon bild, så är din server inte konfigurerad för att använda sådana verktyg. Om du vill använda dessa finesser så kontakta din leverantörs tekniska support och be dem installera utökningarna för «GD» eller «Imagick».</i>', # MODIF
244
+    'info_informations_personnelles' => 'Personlig information',
245
+    'info_inscription_automatique' => 'Automatisk registreing av nya redaktörer',
246
+    'info_jeu_caractere' => 'Sajtens teckenuppsättning',
247
+    'info_jours' => 'dagar',
248
+    'info_laisser_champs_vides' => 'Lämna dessa fält tomma)',
249
+    'info_langues' => 'Sajtens språk',
250
+    'info_lien_hypertexte' => 'Hyperlänk:',
251
+    'info_liste_redacteurs_connectes' => 'Inlogggade redaktörer',
252
+    'info_login_existant' => 'Användarnamnet finns redan.',
253
+    'info_login_trop_court' => 'Användarnamnet är för kort.',
254
+    'info_logos' => 'Logotyperna',
255
+    'info_maximum' => 'maximum:',
256
+    'info_meme_rubrique' => 'I samma avdelning',
257
+    'info_message_en_redaction' => 'utkorg',
258
+    'info_message_technique' => 'Tekniskt meddelande:',
259
+    'info_messagerie_interne' => 'Internmeddelande',
260
+    'info_mise_a_niveau_base' => 'SQL database upgradering',
261
+    'info_mise_a_niveau_base_2' => '{{Warning!}} Du har installerat {äldre} 
262 262
   SPIP filer än de som redan
263 263
   varit installerade på sajten: Du riskerar att förlora databasen
264 264
   och ha en sajt som inte längre fungerar.<br />{{återinstallera
265 265
   SPIP filerna.}}',
266
-	'info_modifier_auteur' => 'Editera detaljer för redaktören:',
267
-	'info_modifier_rubrique' => 'Editera avdelningen:',
268
-	'info_modifier_titre' => 'Editera: @titre@',
269
-	'info_mon_site_spip' => 'Min SPIP-sajt',
270
-	'info_moyenne' => 'genomsnitt:',
271
-	'info_multi_cet_article' => 'Den här artikelns språk:',
272
-	'info_multi_langues_choisies' => 'Var vänlig, välj tillgängliga språk för redaktörerna bland språken nedan.
266
+    'info_modifier_auteur' => 'Editera detaljer för redaktören:',
267
+    'info_modifier_rubrique' => 'Editera avdelningen:',
268
+    'info_modifier_titre' => 'Editera: @titre@',
269
+    'info_mon_site_spip' => 'Min SPIP-sajt',
270
+    'info_moyenne' => 'genomsnitt:',
271
+    'info_multi_cet_article' => 'Den här artikelns språk:',
272
+    'info_multi_langues_choisies' => 'Var vänlig, välj tillgängliga språk för redaktörerna bland språken nedan.
273 273
   Språk som redan används på din sajt (högst upp på listan) kan inte avaktiveras.',
274
-	'info_multi_secteurs' => '... bara för avdelningarna i roten?',
275
-	'info_nom' => 'Namn',
276
-	'info_nom_destinataire' => 'Mottagarens namn',
277
-	'info_nom_site' => 'Din sajts namn',
278
-	'info_nombre_articles' => '@nb_articles@ artiklar,',
279
-	'info_nombre_rubriques' => '@nb_rubriques@ avdelningar,',
280
-	'info_nombre_sites' => '@nb_sites@ sajter,',
281
-	'info_non_deplacer' => 'Flytta inte...',
282
-	'info_non_envoi_liste_nouveautes' => 'Skicka inte listan med senaste nyheterna',
283
-	'info_non_modifiable' => 'kan inte förändras',
284
-	'info_non_suppression_mot_cle' => 'Jag vill inte radera nyckelordet.',
285
-	'info_notes' => 'Fotnoter',
286
-	'info_nouvel_article' => 'Ny artikel',
287
-	'info_nouvelle_traduction' => 'Ny översättning:',
288
-	'info_numero_article' => 'ARTIKEL NUMMER:',
289
-	'info_obligatoire_02' => '[Krävs]', # MODIF
290
-	'info_option_accepter_visiteurs' => 'Tillåt besökare registrera sig på den publika delen',
291
-	'info_option_ne_pas_accepter_visiteurs' => 'Avvisa besökarregistrering',
292
-	'info_options_avancees' => 'AVANCERADE INSTÄLLNINGAR',
293
-	'info_ou' => 'eller...',
294
-	'info_page_interdite' => 'Förbjuden sida',
295
-	'info_par_nom' => 'efter namn',
296
-	'info_par_nombre_article' => 'efter antal artiklar',
297
-	'info_par_statut' => 'efter status',
298
-	'info_par_tri' => '’(efter @tri@)’',
299
-	'info_passe_trop_court' => 'lösenordet är för kort.',
300
-	'info_passes_identiques' => 'De två lösenorden är inte identiska.',
301
-	'info_plus_cinq_car' => 'mer än 5 tecken',
302
-	'info_plus_cinq_car_2' => '(Mer än 5 tecken)',
303
-	'info_plus_trois_car' => '(Mer än 3 tecken)',
304
-	'info_popularite' => 'popularitet: @popularite@; besök: @visites@',
305
-	'info_post_scriptum' => 'Postscript',
306
-	'info_post_scriptum_2' => 'PS:',
307
-	'info_pour' => 'för',
308
-	'info_procedez_par_etape' => 'Var vänlig, fortsätt steg för steg',
309
-	'info_procedure_maj_version' => 'Uppdateringsproceduren skall köras för att
274
+    'info_multi_secteurs' => '... bara för avdelningarna i roten?',
275
+    'info_nom' => 'Namn',
276
+    'info_nom_destinataire' => 'Mottagarens namn',
277
+    'info_nom_site' => 'Din sajts namn',
278
+    'info_nombre_articles' => '@nb_articles@ artiklar,',
279
+    'info_nombre_rubriques' => '@nb_rubriques@ avdelningar,',
280
+    'info_nombre_sites' => '@nb_sites@ sajter,',
281
+    'info_non_deplacer' => 'Flytta inte...',
282
+    'info_non_envoi_liste_nouveautes' => 'Skicka inte listan med senaste nyheterna',
283
+    'info_non_modifiable' => 'kan inte förändras',
284
+    'info_non_suppression_mot_cle' => 'Jag vill inte radera nyckelordet.',
285
+    'info_notes' => 'Fotnoter',
286
+    'info_nouvel_article' => 'Ny artikel',
287
+    'info_nouvelle_traduction' => 'Ny översättning:',
288
+    'info_numero_article' => 'ARTIKEL NUMMER:',
289
+    'info_obligatoire_02' => '[Krävs]', # MODIF
290
+    'info_option_accepter_visiteurs' => 'Tillåt besökare registrera sig på den publika delen',
291
+    'info_option_ne_pas_accepter_visiteurs' => 'Avvisa besökarregistrering',
292
+    'info_options_avancees' => 'AVANCERADE INSTÄLLNINGAR',
293
+    'info_ou' => 'eller...',
294
+    'info_page_interdite' => 'Förbjuden sida',
295
+    'info_par_nom' => 'efter namn',
296
+    'info_par_nombre_article' => 'efter antal artiklar',
297
+    'info_par_statut' => 'efter status',
298
+    'info_par_tri' => '’(efter @tri@)’',
299
+    'info_passe_trop_court' => 'lösenordet är för kort.',
300
+    'info_passes_identiques' => 'De två lösenorden är inte identiska.',
301
+    'info_plus_cinq_car' => 'mer än 5 tecken',
302
+    'info_plus_cinq_car_2' => '(Mer än 5 tecken)',
303
+    'info_plus_trois_car' => '(Mer än 3 tecken)',
304
+    'info_popularite' => 'popularitet: @popularite@; besök: @visites@',
305
+    'info_post_scriptum' => 'Postscript',
306
+    'info_post_scriptum_2' => 'PS:',
307
+    'info_pour' => 'för',
308
+    'info_procedez_par_etape' => 'Var vänlig, fortsätt steg för steg',
309
+    'info_procedure_maj_version' => 'Uppdateringsproceduren skall köras för att
310 310
  anpassa databasen till den nya versionen av SPIP.',
311
-	'info_proxy_ok' => 'Testen av proxy lyckades.',
312
-	'info_ps' => 'P.S.',
313
-	'info_publier' => 'publicera',
314
-	'info_publies' => 'Dina onlinepublicerade artiklar',
315
-	'info_question_accepter_visiteurs' => 'Om sajtens template tillåter besökare att registrera sig utan att gå in i den privata delen, var vänlig och aktivera följande option:',
316
-	'info_racine_site' => 'Sajtens bas',
317
-	'info_recharger_page' => 'Var vänlig och uppdatera sidan om en liten stund.',
318
-	'info_recherche_auteur_zero' => 'Inga resultat hittades för "@cherche_auteur@".',
319
-	'info_recommencer' => 'Var vänlig och försök igen.',
320
-	'info_redacteur_1' => 'Redaktör',
321
-	'info_redacteur_2' => 'för tillgång till den privata delen (<i>rekommenderas</i>)',
322
-	'info_redacteurs' => 'Redaktörer',
323
-	'info_redaction_en_cours' => 'UNDER ARBETE',
324
-	'info_redirection' => 'Ompekning',
325
-	'info_refuses' => 'Refuserade artiklar',
326
-	'info_reglage_ldap' => 'inställningar: <b>anpassar LDAP import</b>',
327
-	'info_renvoi_article' => '<b>Ompekning.</b> Den här artikeln pekar om till:',
328
-	'info_reserve_admin' => 'Enbart administratörer kan förändra adressen.',
329
-	'info_restreindre_rubrique' => 'Begränsa administrationen till avdelningen:',
330
-	'info_resultat_recherche' => 'Sökresultat:',
331
-	'info_rubriques' => 'Avdelningar',
332
-	'info_rubriques_02' => 'avdelningar',
333
-	'info_rubriques_trouvees' => 'Hittade avdelningar',
334
-	'info_sans_titre' => 'Utan titel',
335
-	'info_selection_chemin_acces' => '<b>Välj</b> åtkomstväg i katalogen:',
336
-	'info_signatures' => 'underskrifter',
337
-	'info_site' => 'Sajt',
338
-	'info_site_2' => 'sajt:',
339
-	'info_site_min' => 'sajt',
340
-	'info_site_reference_2' => 'Länkad sajt',
341
-	'info_site_web' => 'WEBBSAJT:', # MODIF
342
-	'info_sites' => 'sajter',
343
-	'info_sites_lies_mot' => 'Länkade sajter knutna till detta nyckelord',
344
-	'info_sites_proxy' => 'Använder en proxy',
345
-	'info_sites_trouves' => 'Hittade sajter',
346
-	'info_sous_titre' => 'Undertitel:',
347
-	'info_statut_administrateur' => 'Administratör',
348
-	'info_statut_auteur' => 'Redaktörens status:', # MODIF
349
-	'info_statut_auteur_a_confirmer' => 'Registreringar som skall godkännas',
350
-	'info_statut_auteur_autre' => 'Annan status:',
351
-	'info_statut_redacteur' => 'Redaktör',
352
-	'info_statut_utilisateurs_1' => 'Startinställningar för importerade användare',
353
-	'info_suivi_activite' => 'Följ upp aktiviteten på sajten',
354
-	'info_surtitre' => 'Övertitel:',
355
-	'info_syndication_integrale_1' => 'Din sajt publiceras RSS-filer för syndikering (Se “<a href="@url@">@titre@</a>”).',
356
-	'info_syndication_integrale_2' => 'Vill du skicka hela artiklar eller bara en sammanfattning på ett par hundra tecken?',
357
-	'info_table_prefix' => 'Det är möjligt att byta prefix i databastabellernas namn. (Du behöver göra det om di installerar flera sajter i samma databas). Prefixet måste skrivas utan accenter, med versaler utan mellanslag.',
358
-	'info_taille_maximale_vignette' => 'Maximal storlek på miniatyrer som skapats av systemet:',
359
-	'info_terminer_installation' => 'Du kan nu avsluta installationsprocessen.',
360
-	'info_texte' => 'Text',
361
-	'info_texte_explicatif' => 'Förklarande text',
362
-	'info_texte_long' => '(Texten är lång: Den kommer att synas i flera delar som sedan sammanfogas efter validering.)',
363
-	'info_texte_message' => 'Texten i ditt meddelande:', # MODIF
364
-	'info_texte_message_02' => 'Texten i ditt meddelande',
365
-	'info_titre' => 'Titel:',
366
-	'info_total' => 'total:',
367
-	'info_tous_articles_en_redaction' => 'Alla artiklar under arbete',
368
-	'info_tous_articles_presents' => 'Alla artiklar som publicerats i den här avdelningen',
369
-	'info_tous_les' => 'alla:',
370
-	'info_tout_site' => 'Hela sajten',
371
-	'info_tout_site2' => 'Artikeln har inte blivit översatt till det här språket.',
372
-	'info_tout_site3' => 'Artikeln har blivit översatt till det hör språket men vissa förändringar har gjorts senare i orginalartikeln. Översättningen behöver uppdateras.',
373
-	'info_tout_site4' => 'Artikeln har blivit översatt till det här språket och översättningen är aktuell.',
374
-	'info_tout_site5' => 'Orginalartikeln.',
375
-	'info_tout_site6' => '<b>OBS:</b> bara orginalartiklarna visas.
311
+    'info_proxy_ok' => 'Testen av proxy lyckades.',
312
+    'info_ps' => 'P.S.',
313
+    'info_publier' => 'publicera',
314
+    'info_publies' => 'Dina onlinepublicerade artiklar',
315
+    'info_question_accepter_visiteurs' => 'Om sajtens template tillåter besökare att registrera sig utan att gå in i den privata delen, var vänlig och aktivera följande option:',
316
+    'info_racine_site' => 'Sajtens bas',
317
+    'info_recharger_page' => 'Var vänlig och uppdatera sidan om en liten stund.',
318
+    'info_recherche_auteur_zero' => 'Inga resultat hittades för "@cherche_auteur@".',
319
+    'info_recommencer' => 'Var vänlig och försök igen.',
320
+    'info_redacteur_1' => 'Redaktör',
321
+    'info_redacteur_2' => 'för tillgång till den privata delen (<i>rekommenderas</i>)',
322
+    'info_redacteurs' => 'Redaktörer',
323
+    'info_redaction_en_cours' => 'UNDER ARBETE',
324
+    'info_redirection' => 'Ompekning',
325
+    'info_refuses' => 'Refuserade artiklar',
326
+    'info_reglage_ldap' => 'inställningar: <b>anpassar LDAP import</b>',
327
+    'info_renvoi_article' => '<b>Ompekning.</b> Den här artikeln pekar om till:',
328
+    'info_reserve_admin' => 'Enbart administratörer kan förändra adressen.',
329
+    'info_restreindre_rubrique' => 'Begränsa administrationen till avdelningen:',
330
+    'info_resultat_recherche' => 'Sökresultat:',
331
+    'info_rubriques' => 'Avdelningar',
332
+    'info_rubriques_02' => 'avdelningar',
333
+    'info_rubriques_trouvees' => 'Hittade avdelningar',
334
+    'info_sans_titre' => 'Utan titel',
335
+    'info_selection_chemin_acces' => '<b>Välj</b> åtkomstväg i katalogen:',
336
+    'info_signatures' => 'underskrifter',
337
+    'info_site' => 'Sajt',
338
+    'info_site_2' => 'sajt:',
339
+    'info_site_min' => 'sajt',
340
+    'info_site_reference_2' => 'Länkad sajt',
341
+    'info_site_web' => 'WEBBSAJT:', # MODIF
342
+    'info_sites' => 'sajter',
343
+    'info_sites_lies_mot' => 'Länkade sajter knutna till detta nyckelord',
344
+    'info_sites_proxy' => 'Använder en proxy',
345
+    'info_sites_trouves' => 'Hittade sajter',
346
+    'info_sous_titre' => 'Undertitel:',
347
+    'info_statut_administrateur' => 'Administratör',
348
+    'info_statut_auteur' => 'Redaktörens status:', # MODIF
349
+    'info_statut_auteur_a_confirmer' => 'Registreringar som skall godkännas',
350
+    'info_statut_auteur_autre' => 'Annan status:',
351
+    'info_statut_redacteur' => 'Redaktör',
352
+    'info_statut_utilisateurs_1' => 'Startinställningar för importerade användare',
353
+    'info_suivi_activite' => 'Följ upp aktiviteten på sajten',
354
+    'info_surtitre' => 'Övertitel:',
355
+    'info_syndication_integrale_1' => 'Din sajt publiceras RSS-filer för syndikering (Se “<a href="@url@">@titre@</a>”).',
356
+    'info_syndication_integrale_2' => 'Vill du skicka hela artiklar eller bara en sammanfattning på ett par hundra tecken?',
357
+    'info_table_prefix' => 'Det är möjligt att byta prefix i databastabellernas namn. (Du behöver göra det om di installerar flera sajter i samma databas). Prefixet måste skrivas utan accenter, med versaler utan mellanslag.',
358
+    'info_taille_maximale_vignette' => 'Maximal storlek på miniatyrer som skapats av systemet:',
359
+    'info_terminer_installation' => 'Du kan nu avsluta installationsprocessen.',
360
+    'info_texte' => 'Text',
361
+    'info_texte_explicatif' => 'Förklarande text',
362
+    'info_texte_long' => '(Texten är lång: Den kommer att synas i flera delar som sedan sammanfogas efter validering.)',
363
+    'info_texte_message' => 'Texten i ditt meddelande:', # MODIF
364
+    'info_texte_message_02' => 'Texten i ditt meddelande',
365
+    'info_titre' => 'Titel:',
366
+    'info_total' => 'total:',
367
+    'info_tous_articles_en_redaction' => 'Alla artiklar under arbete',
368
+    'info_tous_articles_presents' => 'Alla artiklar som publicerats i den här avdelningen',
369
+    'info_tous_les' => 'alla:',
370
+    'info_tout_site' => 'Hela sajten',
371
+    'info_tout_site2' => 'Artikeln har inte blivit översatt till det här språket.',
372
+    'info_tout_site3' => 'Artikeln har blivit översatt till det hör språket men vissa förändringar har gjorts senare i orginalartikeln. Översättningen behöver uppdateras.',
373
+    'info_tout_site4' => 'Artikeln har blivit översatt till det här språket och översättningen är aktuell.',
374
+    'info_tout_site5' => 'Orginalartikeln.',
375
+    'info_tout_site6' => '<b>OBS:</b> bara orginalartiklarna visas.
376 376
 Översättningarna är länkade till orginalet
377 377
 med en färg som visar deras status:',
378
-	'info_travail_colaboratif' => 'Gemensamt arbete på artiklar',
379
-	'info_un_article' => 'en artikel,',
380
-	'info_un_site' => 'En sajt,',
381
-	'info_une_rubrique' => 'en avdelning,',
382
-	'info_une_rubrique_02' => '1 avdelning',
383
-	'info_url' => 'URL:',
384
-	'info_urlref' => 'Hyperlänk:',
385
-	'info_utilisation_spip' => 'SPIP är nu färdig att användas..',
386
-	'info_visites_par_mois' => 'Besökare per månad:',
387
-	'info_visiteur_1' => 'Besökare',
388
-	'info_visiteur_2' => 'på den publika delen',
389
-	'info_visiteurs' => 'Besökare',
390
-	'info_visiteurs_02' => 'Beökare på den publika delen',
391
-	'install_adresse_base_hebergeur' => 'Databasadress tillhandahållen av webbhotellet',
392
-	'install_echec_annonce' => 'Den här installationen kommer förmodligen inte att fungera, alternativt resulterar den i en sajt med reducerad funktionalitet ...',
393
-	'install_extension_mbstring' => 'SPIP fungerar inte med:',
394
-	'install_extension_php_obligatoire' => 'SPIP kräver ett tillägg till php:',
395
-	'install_login_base_hebergeur' => 'Login tilldelat av leverantören',
396
-	'install_nom_base_hebergeur' => 'Databasnamn tilldelat av leverantören:',
397
-	'install_pas_table' => 'Databasen har inga tabeller',
398
-	'install_pass_base_hebergeur' => 'Lösenord till databasen tilldelat av leverantören',
399
-	'install_php_version' => 'Versionen av PHP, @version@ är för gammal (minimum = @minimum@)',
400
-	'install_select_langue' => 'Välj ett språk, klicka sedan på knappen "fortsätt" för att starta installationen.',
401
-	'install_select_type_db' => 'Välj typ av databas :',
402
-	'install_select_type_mysql' => 'MySQL',
403
-	'install_select_type_sqlite2' => 'SQLite 2',
404
-	'install_select_type_sqlite3' => 'SQLite 3',
405
-	'install_tables_base' => 'Databasens tabeller',
406
-	'intem_redacteur' => 'redaktör',
407
-	'intitule_licence' => 'Licens',
408
-	'item_accepter_inscriptions' => 'Tillåt registreringar',
409
-	'item_activer_messages_avertissement' => 'Aktivera varningsmeddelanden',
410
-	'item_administrateur_2' => 'administratör',
411
-	'item_afficher_calendrier' => 'Visa i kalendern',
412
-	'item_autoriser_syndication_integrale' => 'Inkludera hela artiklar i syndikeringsfilerna',
413
-	'item_choix_administrateurs' => 'administratörer',
414
-	'item_choix_generation_miniature' => 'Generera miniatyrer automatiskt.',
415
-	'item_choix_non_generation_miniature' => 'Generera inte miniatyrer.',
416
-	'item_choix_redacteurs' => 'redaktörer',
417
-	'item_choix_visiteurs' => 'besökare till den publika delen',
418
-	'item_creer_fichiers_authent' => 'Skapa .htpasswd filer',
419
-	'item_login' => 'Login',
420
-	'item_messagerie_agenda' => 'Aktivera meddelandesystemet och kalendern',
421
-	'item_mots_cles_association_articles' => 'artiklar',
422
-	'item_mots_cles_association_rubriques' => 'avdelningar',
423
-	'item_mots_cles_association_sites' => 'länkade eller syndikerade sajter.',
424
-	'item_non' => 'Nej',
425
-	'item_non_accepter_inscriptions' => 'Tillåt inte registreringar',
426
-	'item_non_activer_messages_avertissement' => 'Inga varningsmeddelanden',
427
-	'item_non_afficher_calendrier' => 'Visa inte i kalendern',
428
-	'item_non_autoriser_syndication_integrale' => 'Skicka bara en sammanfattning',
429
-	'item_non_creer_fichiers_authent' => 'Skapa inte dessa filer',
430
-	'item_non_messagerie_agenda' => 'Avaktivera meddelandesystemet och kalendern',
431
-	'item_non_publier_articles' => 'Publicera inte artiklar innan deras publiceringsdatum.',
432
-	'item_nouvel_auteur' => 'Ny redaktör',
433
-	'item_nouvelle_rubrique' => 'Ny avdelning',
434
-	'item_oui' => 'Ja',
435
-	'item_publier_articles' => 'Publicera artiklarna utan att ta hänsyn till publiceringsdatum.',
436
-	'item_reponse_article' => 'Svara på artikeln',
437
-	'item_visiteur' => 'besökare',
378
+    'info_travail_colaboratif' => 'Gemensamt arbete på artiklar',
379
+    'info_un_article' => 'en artikel,',
380
+    'info_un_site' => 'En sajt,',
381
+    'info_une_rubrique' => 'en avdelning,',
382
+    'info_une_rubrique_02' => '1 avdelning',
383
+    'info_url' => 'URL:',
384
+    'info_urlref' => 'Hyperlänk:',
385
+    'info_utilisation_spip' => 'SPIP är nu färdig att användas..',
386
+    'info_visites_par_mois' => 'Besökare per månad:',
387
+    'info_visiteur_1' => 'Besökare',
388
+    'info_visiteur_2' => 'på den publika delen',
389
+    'info_visiteurs' => 'Besökare',
390
+    'info_visiteurs_02' => 'Beökare på den publika delen',
391
+    'install_adresse_base_hebergeur' => 'Databasadress tillhandahållen av webbhotellet',
392
+    'install_echec_annonce' => 'Den här installationen kommer förmodligen inte att fungera, alternativt resulterar den i en sajt med reducerad funktionalitet ...',
393
+    'install_extension_mbstring' => 'SPIP fungerar inte med:',
394
+    'install_extension_php_obligatoire' => 'SPIP kräver ett tillägg till php:',
395
+    'install_login_base_hebergeur' => 'Login tilldelat av leverantören',
396
+    'install_nom_base_hebergeur' => 'Databasnamn tilldelat av leverantören:',
397
+    'install_pas_table' => 'Databasen har inga tabeller',
398
+    'install_pass_base_hebergeur' => 'Lösenord till databasen tilldelat av leverantören',
399
+    'install_php_version' => 'Versionen av PHP, @version@ är för gammal (minimum = @minimum@)',
400
+    'install_select_langue' => 'Välj ett språk, klicka sedan på knappen "fortsätt" för att starta installationen.',
401
+    'install_select_type_db' => 'Välj typ av databas :',
402
+    'install_select_type_mysql' => 'MySQL',
403
+    'install_select_type_sqlite2' => 'SQLite 2',
404
+    'install_select_type_sqlite3' => 'SQLite 3',
405
+    'install_tables_base' => 'Databasens tabeller',
406
+    'intem_redacteur' => 'redaktör',
407
+    'intitule_licence' => 'Licens',
408
+    'item_accepter_inscriptions' => 'Tillåt registreringar',
409
+    'item_activer_messages_avertissement' => 'Aktivera varningsmeddelanden',
410
+    'item_administrateur_2' => 'administratör',
411
+    'item_afficher_calendrier' => 'Visa i kalendern',
412
+    'item_autoriser_syndication_integrale' => 'Inkludera hela artiklar i syndikeringsfilerna',
413
+    'item_choix_administrateurs' => 'administratörer',
414
+    'item_choix_generation_miniature' => 'Generera miniatyrer automatiskt.',
415
+    'item_choix_non_generation_miniature' => 'Generera inte miniatyrer.',
416
+    'item_choix_redacteurs' => 'redaktörer',
417
+    'item_choix_visiteurs' => 'besökare till den publika delen',
418
+    'item_creer_fichiers_authent' => 'Skapa .htpasswd filer',
419
+    'item_login' => 'Login',
420
+    'item_messagerie_agenda' => 'Aktivera meddelandesystemet och kalendern',
421
+    'item_mots_cles_association_articles' => 'artiklar',
422
+    'item_mots_cles_association_rubriques' => 'avdelningar',
423
+    'item_mots_cles_association_sites' => 'länkade eller syndikerade sajter.',
424
+    'item_non' => 'Nej',
425
+    'item_non_accepter_inscriptions' => 'Tillåt inte registreringar',
426
+    'item_non_activer_messages_avertissement' => 'Inga varningsmeddelanden',
427
+    'item_non_afficher_calendrier' => 'Visa inte i kalendern',
428
+    'item_non_autoriser_syndication_integrale' => 'Skicka bara en sammanfattning',
429
+    'item_non_creer_fichiers_authent' => 'Skapa inte dessa filer',
430
+    'item_non_messagerie_agenda' => 'Avaktivera meddelandesystemet och kalendern',
431
+    'item_non_publier_articles' => 'Publicera inte artiklar innan deras publiceringsdatum.',
432
+    'item_nouvel_auteur' => 'Ny redaktör',
433
+    'item_nouvelle_rubrique' => 'Ny avdelning',
434
+    'item_oui' => 'Ja',
435
+    'item_publier_articles' => 'Publicera artiklarna utan att ta hänsyn till publiceringsdatum.',
436
+    'item_reponse_article' => 'Svara på artikeln',
437
+    'item_visiteur' => 'besökare',
438 438
 
439
-	// J
440
-	'jour_non_connu_nc' => 'okänd',
439
+    // J
440
+    'jour_non_connu_nc' => 'okänd',
441 441
 
442
-	// L
443
-	'lien_ajouter_auteur' => 'Lätt till redaktören',
444
-	'lien_email' => 'e-post',
445
-	'lien_nom_site' => 'SAJTENS NAMN:',
446
-	'lien_retirer_auteur' => 'Ta bort redaktören',
447
-	'lien_site' => 'sajt',
448
-	'lien_tout_deplier' => 'Expandera alla',
449
-	'lien_tout_replier' => 'Kollapsa alla',
450
-	'lien_tout_supprimer' => 'Radera alla',
451
-	'lien_trier_nom' => 'Sortera efter namn',
452
-	'lien_trier_nombre_articles' => 'Sortera efter artikelnummer',
453
-	'lien_trier_statut' => 'Sortera efter status',
454
-	'lien_voir_en_ligne' => 'SE ONLINE:',
455
-	'logo_article' => 'ARTIKELNS LOGOTYPE', # MODIF
456
-	'logo_auteur' => 'REDAKTÖRENS LOGOTYPE', # MODIF
457
-	'logo_rubrique' => 'Avdelningens logotype', # MODIF
458
-	'logo_site' => 'SAJTENS LOGOTYPE', # MODIF
459
-	'logo_standard_rubrique' => 'STANDARDLOGOTYPE FÖR AVDELNINGAR', # MODIF
460
-	'logo_survol' => 'LOGOTYPE FÖR MUS-ÖVER', # MODIF
442
+    // L
443
+    'lien_ajouter_auteur' => 'Lätt till redaktören',
444
+    'lien_email' => 'e-post',
445
+    'lien_nom_site' => 'SAJTENS NAMN:',
446
+    'lien_retirer_auteur' => 'Ta bort redaktören',
447
+    'lien_site' => 'sajt',
448
+    'lien_tout_deplier' => 'Expandera alla',
449
+    'lien_tout_replier' => 'Kollapsa alla',
450
+    'lien_tout_supprimer' => 'Radera alla',
451
+    'lien_trier_nom' => 'Sortera efter namn',
452
+    'lien_trier_nombre_articles' => 'Sortera efter artikelnummer',
453
+    'lien_trier_statut' => 'Sortera efter status',
454
+    'lien_voir_en_ligne' => 'SE ONLINE:',
455
+    'logo_article' => 'ARTIKELNS LOGOTYPE', # MODIF
456
+    'logo_auteur' => 'REDAKTÖRENS LOGOTYPE', # MODIF
457
+    'logo_rubrique' => 'Avdelningens logotype', # MODIF
458
+    'logo_site' => 'SAJTENS LOGOTYPE', # MODIF
459
+    'logo_standard_rubrique' => 'STANDARDLOGOTYPE FÖR AVDELNINGAR', # MODIF
460
+    'logo_survol' => 'LOGOTYPE FÖR MUS-ÖVER', # MODIF
461 461
 
462
-	// M
463
-	'menu_aide_installation_choix_base' => 'Välj din databas',
464
-	'module_fichier_langue' => 'Språkfiler',
465
-	'module_raccourci' => 'Genväg',
466
-	'module_texte_affiche' => 'Visad text',
467
-	'module_texte_traduction' => 'Språkfilen « @module@ » finns i:',
462
+    // M
463
+    'menu_aide_installation_choix_base' => 'Välj din databas',
464
+    'module_fichier_langue' => 'Språkfiler',
465
+    'module_raccourci' => 'Genväg',
466
+    'module_texte_affiche' => 'Visad text',
467
+    'module_texte_traduction' => 'Språkfilen « @module@ » finns i:',
468 468
 
469
-	// O
470
-	'onglet_contenu' => 'Innehåll',
471
-	'onglet_declarer_une_autre_base' => 'Ange en annan databas',
472
-	'onglet_discuter' => 'Diskutera',
473
-	'onglet_interactivite' => 'Interaktivitet',
474
-	'onglet_proprietes' => 'Egenskaper',
475
-	'onglet_repartition_actuelle' => 'nu',
469
+    // O
470
+    'onglet_contenu' => 'Innehåll',
471
+    'onglet_declarer_une_autre_base' => 'Ange en annan databas',
472
+    'onglet_discuter' => 'Diskutera',
473
+    'onglet_interactivite' => 'Interaktivitet',
474
+    'onglet_proprietes' => 'Egenskaper',
475
+    'onglet_repartition_actuelle' => 'nu',
476 476
 
477
-	// P
478
-	'plugin_etat_developpement' => 'Under utveckling',
479
-	'plugin_etat_experimental' => 'exprimentell',
480
-	'plugin_etat_stable' => 'Stabil',
481
-	'plugin_etat_test' => 'under test',
482
-	'plugin_impossible_activer' => 'Omöjligt att aktivera pluginen @plugin@',
483
-	'plugin_necessite_plugin' => 'Version @version@ eller nyare av pluginen @plugin@ krävs.', # MODIF
484
-	'plugin_zip_active' => 'Fortsätt för att aktivera',
485
-	'plugin_zip_installe_finie' => 'Filen @zip@ har packats upp och installerats.',
486
-	'plugin_zip_installe_rep_finie' => 'Filen @zip@ har packats upp och installerats i katalogen @rep@',
487
-	'plugin_zip_installer' => 'Du kan installera nu.',
488
-	'plugins_actifs' => '@count@ aktiva plugins.',
489
-	'plugins_compte' => '@count@ plugins',
490
-	'plugins_disponibles' => '@count@ tillgängliga plugins.',
491
-	'plugins_erreur' => 'Fel i följande plugin: @plugins@',
492
-	'plugins_liste' => 'Lista över plugins',
477
+    // P
478
+    'plugin_etat_developpement' => 'Under utveckling',
479
+    'plugin_etat_experimental' => 'exprimentell',
480
+    'plugin_etat_stable' => 'Stabil',
481
+    'plugin_etat_test' => 'under test',
482
+    'plugin_impossible_activer' => 'Omöjligt att aktivera pluginen @plugin@',
483
+    'plugin_necessite_plugin' => 'Version @version@ eller nyare av pluginen @plugin@ krävs.', # MODIF
484
+    'plugin_zip_active' => 'Fortsätt för att aktivera',
485
+    'plugin_zip_installe_finie' => 'Filen @zip@ har packats upp och installerats.',
486
+    'plugin_zip_installe_rep_finie' => 'Filen @zip@ har packats upp och installerats i katalogen @rep@',
487
+    'plugin_zip_installer' => 'Du kan installera nu.',
488
+    'plugins_actifs' => '@count@ aktiva plugins.',
489
+    'plugins_compte' => '@count@ plugins',
490
+    'plugins_disponibles' => '@count@ tillgängliga plugins.',
491
+    'plugins_erreur' => 'Fel i följande plugin: @plugins@',
492
+    'plugins_liste' => 'Lista över plugins',
493 493
 
494
-	// R
495
-	'required' => '[Krävs]', # MODIF
494
+    // R
495
+    'required' => '[Krävs]', # MODIF
496 496
 
497
-	// T
498
-	'taille_cache_vide' => 'Cachen är tom.',
499
-	'text_article_propose_publication' => 'Artikel inlämnad för publicering. tveka inte att säga din mening i forumet längst ned på sidan.', # MODIF
500
-	'texte_admin_effacer_01' => 'Detta kommando raderar <i>all</i> information i databasen,
497
+    // T
498
+    'taille_cache_vide' => 'Cachen är tom.',
499
+    'text_article_propose_publication' => 'Artikel inlämnad för publicering. tveka inte att säga din mening i forumet längst ned på sidan.', # MODIF
500
+    'texte_admin_effacer_01' => 'Detta kommando raderar <i>all</i> information i databasen,
501 501
 inklusive <i>alla</i> uppgifter om användare. Efter att du använt det, måste du 
502 502
 installera om SPIP för att skapa en ny databas och den första administratören.',
503
-	'texte_adresse_annuaire_1' => '( Om din katalog är installerad på samma dator som din websajt, är det troligen «localhost».)',
504
-	'texte_ajout_auteur' => 'Följande redaktör lades till artikeln:',
505
-	'texte_annuaire_ldap_1' => 'Om du har tillgång till en LDAP-katalog kan du använda den för att importera användare till SPIP.',
506
-	'texte_article_statut' => 'Artikelns status:',
507
-	'texte_article_virtuel' => 'Virtuell artikel',
508
-	'texte_article_virtuel_reference' => '<b>Virtuell Artikel:</b> länkad artikel i din SPIP site, men ompekad till en annan URL. För att ta bort ompekningen, radera denna URL.',
509
-	'texte_aucun_resultat_auteur' => 'Inga resultat för "@cherche_auteur@".',
510
-	'texte_auteurs' => 'REDAKTÖRERNA',
511
-	'texte_choix_base_1' => 'Välj din databas:',
512
-	'texte_choix_base_2' => 'Databasservern innehåller flera databaser.',
513
-	'texte_choix_base_3' => '<b>Välj</b> den som din leverantör har gett dig:',
514
-	'texte_choix_table_prefix' => 'Prefix för tabeller:',
515
-	'texte_compte_element' => '@count@ objekt',
516
-	'texte_compte_elements' => '@count@ element',
517
-	'texte_jeu_caractere_3' => 'Din sajt använder följande teckenuppsättning:',
518
-	'texte_mise_a_niveau_base_1' => 'Du har just uppdaterat filerna i SPIP.
503
+    'texte_adresse_annuaire_1' => '( Om din katalog är installerad på samma dator som din websajt, är det troligen «localhost».)',
504
+    'texte_ajout_auteur' => 'Följande redaktör lades till artikeln:',
505
+    'texte_annuaire_ldap_1' => 'Om du har tillgång till en LDAP-katalog kan du använda den för att importera användare till SPIP.',
506
+    'texte_article_statut' => 'Artikelns status:',
507
+    'texte_article_virtuel' => 'Virtuell artikel',
508
+    'texte_article_virtuel_reference' => '<b>Virtuell Artikel:</b> länkad artikel i din SPIP site, men ompekad till en annan URL. För att ta bort ompekningen, radera denna URL.',
509
+    'texte_aucun_resultat_auteur' => 'Inga resultat för "@cherche_auteur@".',
510
+    'texte_auteurs' => 'REDAKTÖRERNA',
511
+    'texte_choix_base_1' => 'Välj din databas:',
512
+    'texte_choix_base_2' => 'Databasservern innehåller flera databaser.',
513
+    'texte_choix_base_3' => '<b>Välj</b> den som din leverantör har gett dig:',
514
+    'texte_choix_table_prefix' => 'Prefix för tabeller:',
515
+    'texte_compte_element' => '@count@ objekt',
516
+    'texte_compte_elements' => '@count@ element',
517
+    'texte_jeu_caractere_3' => 'Din sajt använder följande teckenuppsättning:',
518
+    'texte_mise_a_niveau_base_1' => 'Du har just uppdaterat filerna i SPIP.
519 519
  Nu måste du uppgradera sajtens databas.',
520
-	'texte_modifier_article' => 'Redigera artikeln:',
521
-	'texte_multilinguisme' => 'Om du vill hantera artiklar på flera språk, med en avancerad navigering, kan du lägga till en option för språkval i artiklar och avdelningar, i enlighet med sajtens struktur.', # MODIF
522
-	'texte_multilinguisme_trad' => 'Dessutom kan du aktivera ett system för länkhantering av de olika översättningarna av en artikel.', # MODIF
523
-	'texte_non_compresse' => '<i>okomprimerad</i> (din server stöder inte denna funktion)',
524
-	'texte_nouvelle_version_spip_1' => 'Du har installerat en ny version av SPIP.',
525
-	'texte_plus_trois_car' => 'mer än tre tecken',
526
-	'texte_plusieurs_articles' => 'Flera redaktörer hittades för  "@cherche_auteur@":',
527
-	'texte_recalcul_page' => 'Om du vill uppdatera
520
+    'texte_modifier_article' => 'Redigera artikeln:',
521
+    'texte_multilinguisme' => 'Om du vill hantera artiklar på flera språk, med en avancerad navigering, kan du lägga till en option för språkval i artiklar och avdelningar, i enlighet med sajtens struktur.', # MODIF
522
+    'texte_multilinguisme_trad' => 'Dessutom kan du aktivera ett system för länkhantering av de olika översättningarna av en artikel.', # MODIF
523
+    'texte_non_compresse' => '<i>okomprimerad</i> (din server stöder inte denna funktion)',
524
+    'texte_nouvelle_version_spip_1' => 'Du har installerat en ny version av SPIP.',
525
+    'texte_plus_trois_car' => 'mer än tre tecken',
526
+    'texte_plusieurs_articles' => 'Flera redaktörer hittades för  "@cherche_auteur@":',
527
+    'texte_recalcul_page' => 'Om du vill uppdatera
528 528
 enbart en sida, är det bäst att göra det från den publika delen genom att klicka på « Ladda om sidan ».',
529
-	'texte_recuperer_base' => 'Reparera databasen',
530
-	'texte_sous_titre' => 'Undertitel',
531
-	'texte_statistiques_visites' => '(mörka staplar:  Söndag / mörk linje: genomsnittlig nivå)',
532
-	'texte_statut_attente_validation' => 'väntar på godkännande',
533
-	'texte_statut_publies' => 'publicerad online',
534
-	'texte_statut_refuses' => 'avvisad',
535
-	'texte_suppression_fichiers' => 'Använd detta kommando för att radera alla filer
529
+    'texte_recuperer_base' => 'Reparera databasen',
530
+    'texte_sous_titre' => 'Undertitel',
531
+    'texte_statistiques_visites' => '(mörka staplar:  Söndag / mörk linje: genomsnittlig nivå)',
532
+    'texte_statut_attente_validation' => 'väntar på godkännande',
533
+    'texte_statut_publies' => 'publicerad online',
534
+    'texte_statut_refuses' => 'avvisad',
535
+    'texte_suppression_fichiers' => 'Använd detta kommando för att radera alla filer
536 536
 i SPIP’s cache. Det gör det möjligt att tvinga fram en uppdatering av alla sidor om du
537 537
 gjort viktiga förändringar i sajtens utseende eller struktur.',
538
-	'texte_sur_titre' => 'Övertitel',
539
-	'texte_table_ok' => ': den här tabellen är OK.',
540
-	'texte_tentative_recuperation' => 'Reparationsförsök',
541
-	'texte_tenter_reparation' => 'Försök att reparera databasen',
542
-	'texte_titre_02' => 'Ärenderad:',
543
-	'texte_titre_obligatoire' => '<b>Titel</b> [Krävs]',
544
-	'texte_travail_article' => '@nom_auteur_modif@ arbetade med den här artikeln för @date_diff@ minuter sedan',
545
-	'texte_vide' => 'tom',
546
-	'texte_vider_cache' => 'töm cachen',
547
-	'titre_admin_tech' => 'Tekniskt underhåll',
548
-	'titre_admin_vider' => 'Tekniskt underhåll',
549
-	'titre_cadre_afficher_article' => 'Visa artiklarna:',
550
-	'titre_cadre_afficher_traductions' => 'Visa status för översättningen för följande språk:',
551
-	'titre_cadre_ajouter_auteur' => 'LÄGG TILL EN REDAKTÖR:',
552
-	'titre_cadre_interieur_rubrique' => 'I Avdelningen',
553
-	'titre_cadre_numero_auteur' => 'Redaktör nummer',
554
-	'titre_cadre_signature_obligatoire' => '<b>Signatur</b> [krävs]<br />',
555
-	'titre_config_fonctions' => 'Sajtens konfiguration',
556
-	'titre_configuration' => 'Sajtens konfiguration',
557
-	'titre_connexion_ldap' => 'Optioner: <b>Din LDAP koppling</b>',
558
-	'titre_groupe_mots' => 'NYCKELORDSGRUPP:',
559
-	'titre_langue_article' => 'ARTIKELNS SPRÅK', # MODIF
560
-	'titre_langue_rubrique' => 'AVDELNINGENS SPRÅK', # MODIF
561
-	'titre_langue_trad_article' => 'ARTIKESPRÅK OCH ÖVERSÄTTNINGAR',
562
-	'titre_les_articles' => 'ARTIKLAR',
563
-	'titre_naviguer_dans_le_site' => 'Navigera i sajten...',
564
-	'titre_nouvelle_rubrique' => 'Ny avdelning',
565
-	'titre_numero_rubrique' => 'AVDELNING NUMMER:',
566
-	'titre_page_articles_edit' => 'Editera: @titre@',
567
-	'titre_page_articles_page' => 'Artiklar',
568
-	'titre_page_articles_tous' => 'Hela sajten',
569
-	'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
570
-	'titre_page_config_contenu' => 'Sajtens inställningar',
571
-	'titre_page_delete_all' => 'total och oåterkallelig radering',
572
-	'titre_page_recherche' => 'Sökresultat @recherche@',
573
-	'titre_page_statistiques_referers' => 'Statistik (inkommande länkar)',
574
-	'titre_page_upgrade' => 'Uppgradera SPIP',
575
-	'titre_publication_articles_post_dates' => 'Tidsstyrd publicering av artiklar',
576
-	'titre_reparation' => 'Reparera',
577
-	'titre_suivi_petition' => 'Uppföljning av namninasamlingar',
578
-	'trad_article_traduction' => 'Alla versioner av den här artikeln:',
579
-	'trad_delier' => 'Sluta länka den här artikeln till dess översättningar', # MODIF
580
-	'trad_lier' => 'Den här artikeln är en översättning av artikel nummer:',
581
-	'trad_new' => 'Skriv en ny översättning av den här artikeln', # MODIF
538
+    'texte_sur_titre' => 'Övertitel',
539
+    'texte_table_ok' => ': den här tabellen är OK.',
540
+    'texte_tentative_recuperation' => 'Reparationsförsök',
541
+    'texte_tenter_reparation' => 'Försök att reparera databasen',
542
+    'texte_titre_02' => 'Ärenderad:',
543
+    'texte_titre_obligatoire' => '<b>Titel</b> [Krävs]',
544
+    'texte_travail_article' => '@nom_auteur_modif@ arbetade med den här artikeln för @date_diff@ minuter sedan',
545
+    'texte_vide' => 'tom',
546
+    'texte_vider_cache' => 'töm cachen',
547
+    'titre_admin_tech' => 'Tekniskt underhåll',
548
+    'titre_admin_vider' => 'Tekniskt underhåll',
549
+    'titre_cadre_afficher_article' => 'Visa artiklarna:',
550
+    'titre_cadre_afficher_traductions' => 'Visa status för översättningen för följande språk:',
551
+    'titre_cadre_ajouter_auteur' => 'LÄGG TILL EN REDAKTÖR:',
552
+    'titre_cadre_interieur_rubrique' => 'I Avdelningen',
553
+    'titre_cadre_numero_auteur' => 'Redaktör nummer',
554
+    'titre_cadre_signature_obligatoire' => '<b>Signatur</b> [krävs]<br />',
555
+    'titre_config_fonctions' => 'Sajtens konfiguration',
556
+    'titre_configuration' => 'Sajtens konfiguration',
557
+    'titre_connexion_ldap' => 'Optioner: <b>Din LDAP koppling</b>',
558
+    'titre_groupe_mots' => 'NYCKELORDSGRUPP:',
559
+    'titre_langue_article' => 'ARTIKELNS SPRÅK', # MODIF
560
+    'titre_langue_rubrique' => 'AVDELNINGENS SPRÅK', # MODIF
561
+    'titre_langue_trad_article' => 'ARTIKESPRÅK OCH ÖVERSÄTTNINGAR',
562
+    'titre_les_articles' => 'ARTIKLAR',
563
+    'titre_naviguer_dans_le_site' => 'Navigera i sajten...',
564
+    'titre_nouvelle_rubrique' => 'Ny avdelning',
565
+    'titre_numero_rubrique' => 'AVDELNING NUMMER:',
566
+    'titre_page_articles_edit' => 'Editera: @titre@',
567
+    'titre_page_articles_page' => 'Artiklar',
568
+    'titre_page_articles_tous' => 'Hela sajten',
569
+    'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
570
+    'titre_page_config_contenu' => 'Sajtens inställningar',
571
+    'titre_page_delete_all' => 'total och oåterkallelig radering',
572
+    'titre_page_recherche' => 'Sökresultat @recherche@',
573
+    'titre_page_statistiques_referers' => 'Statistik (inkommande länkar)',
574
+    'titre_page_upgrade' => 'Uppgradera SPIP',
575
+    'titre_publication_articles_post_dates' => 'Tidsstyrd publicering av artiklar',
576
+    'titre_reparation' => 'Reparera',
577
+    'titre_suivi_petition' => 'Uppföljning av namninasamlingar',
578
+    'trad_article_traduction' => 'Alla versioner av den här artikeln:',
579
+    'trad_delier' => 'Sluta länka den här artikeln till dess översättningar', # MODIF
580
+    'trad_lier' => 'Den här artikeln är en översättning av artikel nummer:',
581
+    'trad_new' => 'Skriv en ny översättning av den här artikeln', # MODIF
582 582
 
583
-	// U
584
-	'utf8_convert_erreur_orig' => 'Fel: teckenkodningen @charset@ stöds inte.',
583
+    // U
584
+    'utf8_convert_erreur_orig' => 'Fel: teckenkodningen @charset@ stöds inte.',
585 585
 
586
-	// V
587
-	'version' => 'Version:'
586
+    // V
587
+    'version' => 'Version:'
588 588
 );
Please login to merge, or discard this patch.
ecrire/lang/ecrire_da.php 1 patch
Indentation   +492 added lines, -492 removed lines patch added patch discarded remove patch
@@ -4,496 +4,496 @@  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
-	'aide_non_disponible' => 'Denne del af online-hjælpen er endnu ikke tilgængelig på dansk.',
14
-	'avis_acces_interdit' => 'Ingen adgang',
15
-	'avis_article_modifie' => 'Advarsel, @nom_auteur_modif@ har arbejdet på denne artikel for @date_diff@ minutter siden',
16
-	'avis_aucun_resultat' => 'Ingen resultater fundet.',
17
-	'avis_chemin_invalide_1' => 'Den sti som du har valgt',
18
-	'avis_chemin_invalide_2' => 'ser ikke ud til at være gyldig. Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet.',
19
-	'avis_connexion_echec_1' => 'Ingen forbindelse til SQL-serveren', # MODIF
20
-	'avis_connexion_echec_2' => 'Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet',
21
-	'avis_connexion_echec_3' => '<b>NB:</b> På mange servere skal du <b>anmode om</b> at få åbnet adgang til en SQL-database, før du kan bruge den. Hvis du ikke kan etablere en forbindelse, så kontroller venligst at du har indgivet denne anmodning.', # MODIF
22
-	'avis_connexion_ldap_echec_1' => 'Ingen forbindelse til LDAP-serveren',
23
-	'avis_connexion_ldap_echec_2' => 'Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet.',
24
-	'avis_connexion_ldap_echec_3' => 'Alternativt kan du vælge ikke at benytte LDAP til at importere brugere.',
25
-	'avis_deplacement_rubrique' => 'Advarsel! Dette afsnit indeholder @contient_breves@ nyheder@scb@: Hvis du vil flytte den, så afkryds venligst her for at bekræfte.',
26
-	'avis_erreur_connexion_mysql' => 'Fejl i forbindelse til SQL',
27
-	'avis_espace_interdit' => '<b>Forbudt område</b><p>SPIP er allerede installeret.', # MODIF
28
-	'avis_lecture_noms_bases_1' => 'Installationsprogrammet kunne ikke læse navnene på de installerede databaser.',
29
-	'avis_lecture_noms_bases_2' => 'Enten er databasen ikke tilgængelig, eller også er funktionen, som giver oversigt
12
+    // A
13
+    'aide_non_disponible' => 'Denne del af online-hjælpen er endnu ikke tilgængelig på dansk.',
14
+    'avis_acces_interdit' => 'Ingen adgang',
15
+    'avis_article_modifie' => 'Advarsel, @nom_auteur_modif@ har arbejdet på denne artikel for @date_diff@ minutter siden',
16
+    'avis_aucun_resultat' => 'Ingen resultater fundet.',
17
+    'avis_chemin_invalide_1' => 'Den sti som du har valgt',
18
+    'avis_chemin_invalide_2' => 'ser ikke ud til at være gyldig. Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet.',
19
+    'avis_connexion_echec_1' => 'Ingen forbindelse til SQL-serveren', # MODIF
20
+    'avis_connexion_echec_2' => 'Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet',
21
+    'avis_connexion_echec_3' => '<b>NB:</b> På mange servere skal du <b>anmode om</b> at få åbnet adgang til en SQL-database, før du kan bruge den. Hvis du ikke kan etablere en forbindelse, så kontroller venligst at du har indgivet denne anmodning.', # MODIF
22
+    'avis_connexion_ldap_echec_1' => 'Ingen forbindelse til LDAP-serveren',
23
+    'avis_connexion_ldap_echec_2' => 'Gå tilbage til sidste side og kontroller de oplysninger, du har indtastet.',
24
+    'avis_connexion_ldap_echec_3' => 'Alternativt kan du vælge ikke at benytte LDAP til at importere brugere.',
25
+    'avis_deplacement_rubrique' => 'Advarsel! Dette afsnit indeholder @contient_breves@ nyheder@scb@: Hvis du vil flytte den, så afkryds venligst her for at bekræfte.',
26
+    'avis_erreur_connexion_mysql' => 'Fejl i forbindelse til SQL',
27
+    'avis_espace_interdit' => '<b>Forbudt område</b><p>SPIP er allerede installeret.', # MODIF
28
+    'avis_lecture_noms_bases_1' => 'Installationsprogrammet kunne ikke læse navnene på de installerede databaser.',
29
+    'avis_lecture_noms_bases_2' => 'Enten er databasen ikke tilgængelig, eller også er funktionen, som giver oversigt
30 30
 		over databaser, sat ud af kraft af sikkerhedsårsager (hvilket er tilfældet på mange servere).',
31
-	'avis_lecture_noms_bases_3' => 'Hvis det sidstnævnte er tilfældet, er det muligt at en database, som er navngivet efter dit login, kan anvendes:',
32
-	'avis_non_acces_page' => 'Du har ikke adgang til denne side.',
33
-	'avis_operation_echec' => 'Opgaven mislykkedes.',
34
-	'avis_suppression_base' => 'ADVARSEL, sletning kan ikke omgøres',
31
+    'avis_lecture_noms_bases_3' => 'Hvis det sidstnævnte er tilfældet, er det muligt at en database, som er navngivet efter dit login, kan anvendes:',
32
+    'avis_non_acces_page' => 'Du har ikke adgang til denne side.',
33
+    'avis_operation_echec' => 'Opgaven mislykkedes.',
34
+    'avis_suppression_base' => 'ADVARSEL, sletning kan ikke omgøres',
35 35
 
36
-	// B
37
-	'bouton_acces_ldap' => 'Tilføj adgang til LDAP >>',
38
-	'bouton_ajouter' => 'Tilføj',
39
-	'bouton_demande_publication' => 'Anmod om at få offentliggjort denne artikel',
40
-	'bouton_effacer_tout' => 'Slet alt',
41
-	'bouton_envoyer_message' => 'Send færdig meddelelse',
42
-	'bouton_modifier' => 'Ret',
43
-	'bouton_radio_afficher' => 'Vis',
44
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Medtag i listen over tilknyttede redaktører',
45
-	'bouton_radio_envoi_annonces_adresse' => 'Send nyheder til adressen:',
46
-	'bouton_radio_envoi_liste_nouveautes' => 'Send seneste nyhedsliste',
47
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Medtag ikke i listen over tilknyttede redaktører',
48
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Send ingen redaktionelle nyheder',
49
-	'bouton_redirection' => 'VIDERESTIL',
50
-	'bouton_relancer_installation' => 'Gentag installationen',
51
-	'bouton_suivant' => 'Næste',
52
-	'bouton_tenter_recuperation' => 'Reparationsforsøg',
53
-	'bouton_test_proxy' => 'Test proxy',
54
-	'bouton_vider_cache' => 'Tøm cache',
36
+    // B
37
+    'bouton_acces_ldap' => 'Tilføj adgang til LDAP >>',
38
+    'bouton_ajouter' => 'Tilføj',
39
+    'bouton_demande_publication' => 'Anmod om at få offentliggjort denne artikel',
40
+    'bouton_effacer_tout' => 'Slet alt',
41
+    'bouton_envoyer_message' => 'Send færdig meddelelse',
42
+    'bouton_modifier' => 'Ret',
43
+    'bouton_radio_afficher' => 'Vis',
44
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Medtag i listen over tilknyttede redaktører',
45
+    'bouton_radio_envoi_annonces_adresse' => 'Send nyheder til adressen:',
46
+    'bouton_radio_envoi_liste_nouveautes' => 'Send seneste nyhedsliste',
47
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Medtag ikke i listen over tilknyttede redaktører',
48
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Send ingen redaktionelle nyheder',
49
+    'bouton_redirection' => 'VIDERESTIL',
50
+    'bouton_relancer_installation' => 'Gentag installationen',
51
+    'bouton_suivant' => 'Næste',
52
+    'bouton_tenter_recuperation' => 'Reparationsforsøg',
53
+    'bouton_test_proxy' => 'Test proxy',
54
+    'bouton_vider_cache' => 'Tøm cache',
55 55
 
56
-	// C
57
-	'calendrier_synchro' => 'Hvis du benytter en kalenderapplikation, der er kompatibel med <b>iCal</b>, kan du synkronisere med information på dette websted.',
56
+    // C
57
+    'calendrier_synchro' => 'Hvis du benytter en kalenderapplikation, der er kompatibel med <b>iCal</b>, kan du synkronisere med information på dette websted.',
58 58
 
59
-	// D
60
-	'date_mot_heures' => 'timer',
59
+    // D
60
+    'date_mot_heures' => 'timer',
61 61
 
62
-	// E
63
-	'email' => 'e-mail',
64
-	'email_2' => 'e-mail:',
65
-	'entree_adresse_annuaire' => 'Adresse på kataloget',
66
-	'entree_adresse_email' => 'Din e-mail-adresse',
67
-	'entree_base_donnee_1' => 'Adresse på database',
68
-	'entree_base_donnee_2' => '(Ofte svarer denne adresse til adressen på webstedet, undertiden er den navngivet «localhost», og undertiden skal den være blank.)',
69
-	'entree_biographie' => 'Kort præsentation.',
70
-	'entree_chemin_acces' => '<b>Angiv</b> stien:',
71
-	'entree_cle_pgp' => 'Din PGP nøgle',
72
-	'entree_contenu_rubrique' => '(Kort beskrivelse af afsnittets indhold.)',
73
-	'entree_identifiants_connexion' => 'Dine opkoblingsinformationer...',
74
-	'entree_informations_connexion_ldap' => 'Udfyld denne side med LDAP opkoblingsinformation. Du kan indhente oplysningerne hos din system- eller netværskadministrator.',
75
-	'entree_infos_perso' => 'Hvem er du?',
76
-	'entree_interieur_rubrique' => 'I afsnit:',
77
-	'entree_liens_sites' => '<b>Hypertekst link</b> (henvisning, websted...)',
78
-	'entree_login' => 'Dit login',
79
-	'entree_login_connexion_1' => 'Tilkoblingslogin',
80
-	'entree_login_connexion_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)',
81
-	'entree_mot_passe' => 'Din adgangskode',
82
-	'entree_mot_passe_1' => 'Tilkoblingsadgangskode',
83
-	'entree_mot_passe_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)',
84
-	'entree_nom_fichier' => 'Indtast filnavn @texte_compresse@:',
85
-	'entree_nom_pseudo' => 'Dit navn eller alias',
86
-	'entree_nom_pseudo_1' => '(navn eller kaldenavn)',
87
-	'entree_nom_site' => 'Dit websteds navn',
88
-	'entree_nouveau_passe' => 'Ny adgangskode',
89
-	'entree_passe_ldap' => 'Adgangskode',
90
-	'entree_port_annuaire' => 'Portnummer på kataloget',
91
-	'entree_signature' => 'Signatur',
92
-	'entree_titre_obligatoire' => '<b>Titel</b> [Skal oplyses]<br />',
93
-	'entree_url' => 'Dit websteds URL',
62
+    // E
63
+    'email' => 'e-mail',
64
+    'email_2' => 'e-mail:',
65
+    'entree_adresse_annuaire' => 'Adresse på kataloget',
66
+    'entree_adresse_email' => 'Din e-mail-adresse',
67
+    'entree_base_donnee_1' => 'Adresse på database',
68
+    'entree_base_donnee_2' => '(Ofte svarer denne adresse til adressen på webstedet, undertiden er den navngivet «localhost», og undertiden skal den være blank.)',
69
+    'entree_biographie' => 'Kort præsentation.',
70
+    'entree_chemin_acces' => '<b>Angiv</b> stien:',
71
+    'entree_cle_pgp' => 'Din PGP nøgle',
72
+    'entree_contenu_rubrique' => '(Kort beskrivelse af afsnittets indhold.)',
73
+    'entree_identifiants_connexion' => 'Dine opkoblingsinformationer...',
74
+    'entree_informations_connexion_ldap' => 'Udfyld denne side med LDAP opkoblingsinformation. Du kan indhente oplysningerne hos din system- eller netværskadministrator.',
75
+    'entree_infos_perso' => 'Hvem er du?',
76
+    'entree_interieur_rubrique' => 'I afsnit:',
77
+    'entree_liens_sites' => '<b>Hypertekst link</b> (henvisning, websted...)',
78
+    'entree_login' => 'Dit login',
79
+    'entree_login_connexion_1' => 'Tilkoblingslogin',
80
+    'entree_login_connexion_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)',
81
+    'entree_mot_passe' => 'Din adgangskode',
82
+    'entree_mot_passe_1' => 'Tilkoblingsadgangskode',
83
+    'entree_mot_passe_2' => '(Undertiden identisk med dit FTP-login, andre gange blank)',
84
+    'entree_nom_fichier' => 'Indtast filnavn @texte_compresse@:',
85
+    'entree_nom_pseudo' => 'Dit navn eller alias',
86
+    'entree_nom_pseudo_1' => '(navn eller kaldenavn)',
87
+    'entree_nom_site' => 'Dit websteds navn',
88
+    'entree_nouveau_passe' => 'Ny adgangskode',
89
+    'entree_passe_ldap' => 'Adgangskode',
90
+    'entree_port_annuaire' => 'Portnummer på kataloget',
91
+    'entree_signature' => 'Signatur',
92
+    'entree_titre_obligatoire' => '<b>Titel</b> [Skal oplyses]<br />',
93
+    'entree_url' => 'Dit websteds URL',
94 94
 
95
-	// I
96
-	'ical_info1' => 'Denne side viser flere måder til at følge med i aktiviteter på dette websted.',
97
-	'ical_info2' => 'For mere information, besøg <a href="@spipnet@">SPIP dokumentation</a>.', # MODIF
98
-	'ical_info_calendrier' => 'To kalendere står til rådighed. Den første er en oversigt over webstedet, der viser alle offentliggjorte artikler.Den anden indeholder både redaktionelle annonceringer og dine seneste private meddelelser. Den er forbeholdt dig i kraft af en personlig nøgle, som du kan ændre når som helst ved at forny din adgangskode.',
99
-	'ical_methode_http' => 'Filhentning',
100
-	'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF
101
-	'ical_texte_prive' => 'Denne strengt personlige kalender holder dig underrettet om private redaktionelle aktiviteter på webstedet (opgaver, personlige aftaler, indsendte artikler, nyheder ...).',
102
-	'ical_texte_public' => 'Med denne kalender kan du følge de offentlige aktiviteter på webstedet (offentliggjorte artikler og nyheder).',
103
-	'ical_texte_rss' => 'Du kan syndikere de seneste nyheder på dette websted i en hvilken som helst XML/RSS (Rich Site Summary) fillæser. Dette format tillader også SPIP at læse de seneste nyheder offenliggjort af andre websteder i et kompatibelt udvekslingsformat.',
104
-	'ical_titre_js' => 'Javascript',
105
-	'ical_titre_mailing' => 'Postliste',
106
-	'ical_titre_rss' => '«Backend» filer',
107
-	'icone_activer_cookie' => 'Opret administrationscookie',
108
-	'icone_afficher_auteurs' => 'Vis forfattere',
109
-	'icone_afficher_visiteurs' => 'Vis besøgende',
110
-	'icone_arret_discussion' => 'Stop deltagelse i denne diskussion',
111
-	'icone_calendrier' => 'Kalender',
112
-	'icone_creer_auteur' => 'Opret ny forfatter og tilknyt til denne artikel',
113
-	'icone_creer_mot_cle' => 'Opret nyt nøgleord og tilknyt til denne artikel',
114
-	'icone_creer_rubrique_2' => 'Opret nyt afsnit',
115
-	'icone_modifier_article' => 'Ret denne artikel',
116
-	'icone_modifier_rubrique' => 'Ret dette afsnit',
117
-	'icone_retour' => 'Tilbage',
118
-	'icone_retour_article' => 'Tilbage til artikel',
119
-	'icone_supprimer_cookie' => 'Slet cookier',
120
-	'icone_supprimer_rubrique' => 'Slet dette afsnit',
121
-	'icone_supprimer_signature' => 'Slet denne signatur',
122
-	'icone_valider_signature' => 'Godkend signatur',
123
-	'image_administrer_rubrique' => 'Du kan administrere dette afsnit',
124
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
125
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
126
-	'info_1_article' => '1 artikel',
127
-	'info_activer_cookie' => 'Du kan installere en <b>administrationscookie</b>, som tillader dig at skifte nemt mellem det offentlige websted og dit private afsnit.',
128
-	'info_administrateur' => 'Administrator',
129
-	'info_administrateur_1' => 'Administrator',
130
-	'info_administrateur_2' => 'af webstedet (<i>anvend med forsigtighed</i>)',
131
-	'info_administrateur_site_01' => 'Hvis du er webstedsadministrator, så',
132
-	'info_administrateur_site_02' => 'klik på dette link',
133
-	'info_administrateurs' => 'Administratorer',
134
-	'info_administrer_rubrique' => 'Du kan administrere dette afsnit',
135
-	'info_adresse' => 'til adressen:',
136
-	'info_adresse_url' => 'Dit offentlige websteds URL',
137
-	'info_aide_en_ligne' => 'SPIP online hjælp',
138
-	'info_ajout_image' => 'Når du vedhæfter billeder til en artikel, kan
95
+    // I
96
+    'ical_info1' => 'Denne side viser flere måder til at følge med i aktiviteter på dette websted.',
97
+    'ical_info2' => 'For mere information, besøg <a href="@spipnet@">SPIP dokumentation</a>.', # MODIF
98
+    'ical_info_calendrier' => 'To kalendere står til rådighed. Den første er en oversigt over webstedet, der viser alle offentliggjorte artikler.Den anden indeholder både redaktionelle annonceringer og dine seneste private meddelelser. Den er forbeholdt dig i kraft af en personlig nøgle, som du kan ændre når som helst ved at forny din adgangskode.',
99
+    'ical_methode_http' => 'Filhentning',
100
+    'ical_methode_webcal' => 'Synkronisering (webcal://)', # MODIF
101
+    'ical_texte_prive' => 'Denne strengt personlige kalender holder dig underrettet om private redaktionelle aktiviteter på webstedet (opgaver, personlige aftaler, indsendte artikler, nyheder ...).',
102
+    'ical_texte_public' => 'Med denne kalender kan du følge de offentlige aktiviteter på webstedet (offentliggjorte artikler og nyheder).',
103
+    'ical_texte_rss' => 'Du kan syndikere de seneste nyheder på dette websted i en hvilken som helst XML/RSS (Rich Site Summary) fillæser. Dette format tillader også SPIP at læse de seneste nyheder offenliggjort af andre websteder i et kompatibelt udvekslingsformat.',
104
+    'ical_titre_js' => 'Javascript',
105
+    'ical_titre_mailing' => 'Postliste',
106
+    'ical_titre_rss' => '«Backend» filer',
107
+    'icone_activer_cookie' => 'Opret administrationscookie',
108
+    'icone_afficher_auteurs' => 'Vis forfattere',
109
+    'icone_afficher_visiteurs' => 'Vis besøgende',
110
+    'icone_arret_discussion' => 'Stop deltagelse i denne diskussion',
111
+    'icone_calendrier' => 'Kalender',
112
+    'icone_creer_auteur' => 'Opret ny forfatter og tilknyt til denne artikel',
113
+    'icone_creer_mot_cle' => 'Opret nyt nøgleord og tilknyt til denne artikel',
114
+    'icone_creer_rubrique_2' => 'Opret nyt afsnit',
115
+    'icone_modifier_article' => 'Ret denne artikel',
116
+    'icone_modifier_rubrique' => 'Ret dette afsnit',
117
+    'icone_retour' => 'Tilbage',
118
+    'icone_retour_article' => 'Tilbage til artikel',
119
+    'icone_supprimer_cookie' => 'Slet cookier',
120
+    'icone_supprimer_rubrique' => 'Slet dette afsnit',
121
+    'icone_supprimer_signature' => 'Slet denne signatur',
122
+    'icone_valider_signature' => 'Godkend signatur',
123
+    'image_administrer_rubrique' => 'Du kan administrere dette afsnit',
124
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
125
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
126
+    'info_1_article' => '1 artikel',
127
+    'info_activer_cookie' => 'Du kan installere en <b>administrationscookie</b>, som tillader dig at skifte nemt mellem det offentlige websted og dit private afsnit.',
128
+    'info_administrateur' => 'Administrator',
129
+    'info_administrateur_1' => 'Administrator',
130
+    'info_administrateur_2' => 'af webstedet (<i>anvend med forsigtighed</i>)',
131
+    'info_administrateur_site_01' => 'Hvis du er webstedsadministrator, så',
132
+    'info_administrateur_site_02' => 'klik på dette link',
133
+    'info_administrateurs' => 'Administratorer',
134
+    'info_administrer_rubrique' => 'Du kan administrere dette afsnit',
135
+    'info_adresse' => 'til adressen:',
136
+    'info_adresse_url' => 'Dit offentlige websteds URL',
137
+    'info_aide_en_ligne' => 'SPIP online hjælp',
138
+    'info_ajout_image' => 'Når du vedhæfter billeder til en artikel, kan
139 139
 		SPIP automatisk lave miniatureudgaver af billederne.
140 140
 		Dette muliggør f.eks. automatisk oprettelse af et
141 141
 		galleri eller et album.',
142
-	'info_ajouter_rubrique' => 'Tilføj endnu et afsnit at administrere:',
143
-	'info_annonce_nouveautes' => 'Seneste annonceringer',
144
-	'info_article' => 'artikel',
145
-	'info_article_2' => 'artikler',
146
-	'info_article_a_paraitre' => 'Fremdaterede artikler der skal offentliggøres',
147
-	'info_articles_02' => 'artikler',
148
-	'info_articles_2' => 'Artikler',
149
-	'info_articles_auteur' => 'Denne forfatters artikler',
150
-	'info_articles_trouves' => 'Fundne artikler',
151
-	'info_attente_validation' => 'Dine artikler som afventer godkendelse',
152
-	'info_aujourdhui' => 'i dag:',
153
-	'info_auteurs' => 'Forfattere',
154
-	'info_auteurs_par_tri' => 'Forfattere@partri@',
155
-	'info_auteurs_trouves' => 'Forfattere fundet',
156
-	'info_authentification_externe' => 'Ekstern adgangskontrol',
157
-	'info_avertissement' => 'Advarsel',
158
-	'info_base_installee' => 'Din databasestruktur er installeret.',
159
-	'info_chapeau' => 'Hoved',
160
-	'info_chapeau_2' => 'Indledning:',
161
-	'info_chemin_acces_1' => 'Valgmuligheder: <b>Adgangsvej til katalog</b>',
162
-	'info_chemin_acces_2' => 'Du skal nu konfigurere adgangsvejen til kataloginformationen. Dette er vigtigt for at kunne læse de brugerprofiler, som ligger i kataloget.',
163
-	'info_chemin_acces_annuaire' => 'Valgmuligheder: <b>Adgangsvej til katalog</b>',
164
-	'info_choix_base' => 'Tredje skrift:',
165
-	'info_classement_1' => '<sup>.</sup> af @liste@',
166
-	'info_classement_2' => '<sup>.</sup> af @liste@',
167
-	'info_code_acces' => 'Glem ikke dine egne adgangsoplysninger!',
168
-	'info_config_suivi' => 'Hvis denne adresse svarer til en postliste, kan du nedefor angive, hvor webstedets besøgende kan lade sig registrere. Denne adresse kan være en  URL (f.eks. siden med tilmelding til listen via web), eller en e-mail adresse med et særligt emne tilknyttet (f.eks.: <tt>@adresse_suivi@?subject=abonner</tt>):',
169
-	'info_config_suivi_explication' => 'Du kan abonnere på dette websteds postliste. Du vil så via e-mail modtage annonceringer vedrørende artikler og nyheder, der er indsendt til offentliggørelse.',
170
-	'info_confirmer_passe' => 'Bekræft ny adgangskode:',
171
-	'info_connexion_base' => 'Andet skrift: <b>Forsøg på opkobling til databasen</b>',
172
-	'info_connexion_ldap_ok' => '<b>Din LDAP-opkobling lykkedes.</b><p> Du kan gå til næste skridt.', # MODIF
173
-	'info_connexion_mysql' => 'Første skridt: <b>Din SQL opkobling</b>',
174
-	'info_connexion_ok' => 'Opkoblingen lykkedes.',
175
-	'info_contact' => 'Kontakt',
176
-	'info_contenu_articles' => 'Artiklens bestanddele',
177
-	'info_creation_paragraphe' => '(For at lave afsnit skal du indsætte blanke linier.)', # MODIF
178
-	'info_creation_rubrique' => 'Før du kan skrive artikler<br /> skal du lave mindst et afsnit.<br />',
179
-	'info_creation_tables' => 'Fjerde skridt: <b>Oprettelse af databasetabeller</b>',
180
-	'info_creer_base' => '<b>Opret</b> en ny database:',
181
-	'info_dans_rubrique' => 'I afsnit:',
182
-	'info_date_publication_anterieure' => 'Dato for tidligere offentliggørelse:',
183
-	'info_date_referencement' => 'DATO FOR HENVISNING TIL DETTE WEBSTED:',
184
-	'info_derniere_etape' => 'Sidste skridt: <b>Det er overstået!',
185
-	'info_descriptif' => 'Beskrivelse:',
186
-	'info_discussion_cours' => 'Igangværende diskussioner',
187
-	'info_ecrire_article' => 'Før du kan lave artikler, skal du oprette mindst et afsnit.',
188
-	'info_email_envoi' => 'Afsenderens e-mail adresse (valgfri)',
189
-	'info_email_envoi_txt' => 'Indtast afsenderens e-mail adresse ved afsendelse af e-mails (som standard bruges modtagerens adresse som afsenderadresse) :',
190
-	'info_email_webmestre' => 'E-mail-adresse på webmaster (valgfrit)', # MODIF
191
-	'info_envoi_email_automatique' => 'Automatisk e-mail-forsendelse',
192
-	'info_envoyer_maintenant' => 'Send nu',
193
-	'info_etape_suivante' => 'Gå til næste trin',
194
-	'info_etape_suivante_1' => 'Du kan gå til næste trin.',
195
-	'info_etape_suivante_2' => 'Du kan gå til næste trin.',
196
-	'info_exportation_base' => 'eksporter database til @archive@',
197
-	'info_facilite_suivi_activite' => 'For at lette opfølgning på webstedets redaktionelle aktiviteter sender SPIP e-mails med anmodning om offentliggørelse og godkendelse til f.eks. redaktørens adresseliste.', # MODIF
198
-	'info_fichiers_authent' => 'Adgangskontrolfil ".htpasswd"',
199
-	'info_gauche_admin_tech' => '<b>Kun administratorer har adgang til denne side.</b><p> Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF
200
-	'info_gauche_admin_vider' => '<b>Kun administratorer har adgang til denne side.</b><p> Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF
201
-	'info_gauche_auteurs' => 'Her finder du alle webstedets forfattere. Status på hver enkelt fremgår af farven på ikonet (redaktør = grøn, administrator = gul).',
202
-	'info_gauche_auteurs_exterieurs' => 'Udenforstående forfattere uden adgang til webstedet vises med et blåt symbol; slettede forfattere repræsenteres af en papirkurv.', # MODIF
203
-	'info_gauche_messagerie' => 'Meddelelsessystemet giver mulighed for at udveksle meddelelser mellem redaktører, for at gemme huskesedler (til personlig brug) 
142
+    'info_ajouter_rubrique' => 'Tilføj endnu et afsnit at administrere:',
143
+    'info_annonce_nouveautes' => 'Seneste annonceringer',
144
+    'info_article' => 'artikel',
145
+    'info_article_2' => 'artikler',
146
+    'info_article_a_paraitre' => 'Fremdaterede artikler der skal offentliggøres',
147
+    'info_articles_02' => 'artikler',
148
+    'info_articles_2' => 'Artikler',
149
+    'info_articles_auteur' => 'Denne forfatters artikler',
150
+    'info_articles_trouves' => 'Fundne artikler',
151
+    'info_attente_validation' => 'Dine artikler som afventer godkendelse',
152
+    'info_aujourdhui' => 'i dag:',
153
+    'info_auteurs' => 'Forfattere',
154
+    'info_auteurs_par_tri' => 'Forfattere@partri@',
155
+    'info_auteurs_trouves' => 'Forfattere fundet',
156
+    'info_authentification_externe' => 'Ekstern adgangskontrol',
157
+    'info_avertissement' => 'Advarsel',
158
+    'info_base_installee' => 'Din databasestruktur er installeret.',
159
+    'info_chapeau' => 'Hoved',
160
+    'info_chapeau_2' => 'Indledning:',
161
+    'info_chemin_acces_1' => 'Valgmuligheder: <b>Adgangsvej til katalog</b>',
162
+    'info_chemin_acces_2' => 'Du skal nu konfigurere adgangsvejen til kataloginformationen. Dette er vigtigt for at kunne læse de brugerprofiler, som ligger i kataloget.',
163
+    'info_chemin_acces_annuaire' => 'Valgmuligheder: <b>Adgangsvej til katalog</b>',
164
+    'info_choix_base' => 'Tredje skrift:',
165
+    'info_classement_1' => '<sup>.</sup> af @liste@',
166
+    'info_classement_2' => '<sup>.</sup> af @liste@',
167
+    'info_code_acces' => 'Glem ikke dine egne adgangsoplysninger!',
168
+    'info_config_suivi' => 'Hvis denne adresse svarer til en postliste, kan du nedefor angive, hvor webstedets besøgende kan lade sig registrere. Denne adresse kan være en  URL (f.eks. siden med tilmelding til listen via web), eller en e-mail adresse med et særligt emne tilknyttet (f.eks.: <tt>@adresse_suivi@?subject=abonner</tt>):',
169
+    'info_config_suivi_explication' => 'Du kan abonnere på dette websteds postliste. Du vil så via e-mail modtage annonceringer vedrørende artikler og nyheder, der er indsendt til offentliggørelse.',
170
+    'info_confirmer_passe' => 'Bekræft ny adgangskode:',
171
+    'info_connexion_base' => 'Andet skrift: <b>Forsøg på opkobling til databasen</b>',
172
+    'info_connexion_ldap_ok' => '<b>Din LDAP-opkobling lykkedes.</b><p> Du kan gå til næste skridt.', # MODIF
173
+    'info_connexion_mysql' => 'Første skridt: <b>Din SQL opkobling</b>',
174
+    'info_connexion_ok' => 'Opkoblingen lykkedes.',
175
+    'info_contact' => 'Kontakt',
176
+    'info_contenu_articles' => 'Artiklens bestanddele',
177
+    'info_creation_paragraphe' => '(For at lave afsnit skal du indsætte blanke linier.)', # MODIF
178
+    'info_creation_rubrique' => 'Før du kan skrive artikler<br /> skal du lave mindst et afsnit.<br />',
179
+    'info_creation_tables' => 'Fjerde skridt: <b>Oprettelse af databasetabeller</b>',
180
+    'info_creer_base' => '<b>Opret</b> en ny database:',
181
+    'info_dans_rubrique' => 'I afsnit:',
182
+    'info_date_publication_anterieure' => 'Dato for tidligere offentliggørelse:',
183
+    'info_date_referencement' => 'DATO FOR HENVISNING TIL DETTE WEBSTED:',
184
+    'info_derniere_etape' => 'Sidste skridt: <b>Det er overstået!',
185
+    'info_descriptif' => 'Beskrivelse:',
186
+    'info_discussion_cours' => 'Igangværende diskussioner',
187
+    'info_ecrire_article' => 'Før du kan lave artikler, skal du oprette mindst et afsnit.',
188
+    'info_email_envoi' => 'Afsenderens e-mail adresse (valgfri)',
189
+    'info_email_envoi_txt' => 'Indtast afsenderens e-mail adresse ved afsendelse af e-mails (som standard bruges modtagerens adresse som afsenderadresse) :',
190
+    'info_email_webmestre' => 'E-mail-adresse på webmaster (valgfrit)', # MODIF
191
+    'info_envoi_email_automatique' => 'Automatisk e-mail-forsendelse',
192
+    'info_envoyer_maintenant' => 'Send nu',
193
+    'info_etape_suivante' => 'Gå til næste trin',
194
+    'info_etape_suivante_1' => 'Du kan gå til næste trin.',
195
+    'info_etape_suivante_2' => 'Du kan gå til næste trin.',
196
+    'info_exportation_base' => 'eksporter database til @archive@',
197
+    'info_facilite_suivi_activite' => 'For at lette opfølgning på webstedets redaktionelle aktiviteter sender SPIP e-mails med anmodning om offentliggørelse og godkendelse til f.eks. redaktørens adresseliste.', # MODIF
198
+    'info_fichiers_authent' => 'Adgangskontrolfil ".htpasswd"',
199
+    'info_gauche_admin_tech' => '<b>Kun administratorer har adgang til denne side.</b><p> Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF
200
+    'info_gauche_admin_vider' => '<b>Kun administratorer har adgang til denne side.</b><p> Den giver adgang til forskellige tekniske vedligeholdelsesopgaver. Nogle af dem giver anledning til en særlig adgangskontrol, der kræver FTP-adgang til siden.', # MODIF
201
+    'info_gauche_auteurs' => 'Her finder du alle webstedets forfattere. Status på hver enkelt fremgår af farven på ikonet (redaktør = grøn, administrator = gul).',
202
+    'info_gauche_auteurs_exterieurs' => 'Udenforstående forfattere uden adgang til webstedet vises med et blåt symbol; slettede forfattere repræsenteres af en papirkurv.', # MODIF
203
+    'info_gauche_messagerie' => 'Meddelelsessystemet giver mulighed for at udveksle meddelelser mellem redaktører, for at gemme huskesedler (til personlig brug) 
204 204
 	eller for at vise annonceringer i det private område (hvis du er administrator).',
205
-	'info_gauche_statistiques_referers' => 'Denne side viser en oversigt over <i>henvisende sider</i>, dvs. websteder der har linket til dit websted alene i dag. Faktisk nulstilles oversigten med 24 timers mellemrum.',
206
-	'info_gauche_visiteurs_enregistres' => 'Her finder du de besøgende, der er tilmeldt til webstedets offentlige afsnit (fora med tilmelding).',
207
-	'info_generation_miniatures_images' => 'Dannelse af piktogrammer',
208
-	'info_hebergeur_desactiver_envoi_email' => 'Nogle webhoteller tillader ikke automatisk udsendelse af e-mails. I så fald kan følgende funktioner i SPIP ikke benyttes.',
209
-	'info_hier' => 'i går:',
210
-	'info_identification_publique' => 'Din offentlige identitet...',
211
-	'info_image_process' => 'Vælg den bedste metode til at skabe miniaturebilleder ved at klikke på det korresponderende billede.',
212
-	'info_image_process2' => '<b>N.B.</b> <i>If you can’t see any image, then your server is not configured to use such tools. If you want to use these features, contact your provider’s technical support and ask for the «GD» or «Imagick» extensions to be installed.</i>', # MODIF
213
-	'info_informations_personnelles' => 'Femte trin: <b>Personlig information</b>',
214
-	'info_inscription_automatique' => 'Automatisk registrering af nye redaktører',
215
-	'info_jeu_caractere' => 'Webstedets tegnsæt',
216
-	'info_jours' => 'dage',
217
-	'info_laisser_champs_vides' => 'efterlad disse felter tomme)',
218
-	'info_langues' => 'Webstedets sprog',
219
-	'info_ldap_ok' => 'LDAP adgangskontrol er installeret.',
220
-	'info_lien_hypertexte' => 'Hypertekst link:',
221
-	'info_liste_redacteurs_connectes' => 'Oversigt over tilknyttede reaktører',
222
-	'info_login_existant' => 'Dette login findes allerede.',
223
-	'info_login_trop_court' => 'Login for kort.',
224
-	'info_maximum' => 'maksimum:',
225
-	'info_message_en_redaction' => 'Dine meddelelser under redaktion',
226
-	'info_message_technique' => 'Teknisk meddelelse:',
227
-	'info_messagerie_interne' => 'Interne meddelelser',
228
-	'info_mise_a_niveau_base' => 'SQL databaseopgradering',
229
-	'info_mise_a_niveau_base_2' => '{{Advarsel!}} Du har installeret en version af SPIP-filer, der er ældre end dem, der var på webstedet i forvejen. Du risikerer at miste databasen og webstedet vil ikke fungere ordentligt mere.<br />{{Geninstraller SPIP-filerne.}}',
230
-	'info_modifier_rubrique' => 'Ret afsnit:',
231
-	'info_modifier_titre' => 'Ret: @titre@',
232
-	'info_mon_site_spip' => 'Mit SPIP-websted',
233
-	'info_moyenne' => 'gennemsnit:',
234
-	'info_multi_cet_article' => 'Denne artikel er på:',
235
-	'info_multi_langues_choisies' => 'Vælg de sprog der skal være til rådighed for redaktører på webstedet.
205
+    'info_gauche_statistiques_referers' => 'Denne side viser en oversigt over <i>henvisende sider</i>, dvs. websteder der har linket til dit websted alene i dag. Faktisk nulstilles oversigten med 24 timers mellemrum.',
206
+    'info_gauche_visiteurs_enregistres' => 'Her finder du de besøgende, der er tilmeldt til webstedets offentlige afsnit (fora med tilmelding).',
207
+    'info_generation_miniatures_images' => 'Dannelse af piktogrammer',
208
+    'info_hebergeur_desactiver_envoi_email' => 'Nogle webhoteller tillader ikke automatisk udsendelse af e-mails. I så fald kan følgende funktioner i SPIP ikke benyttes.',
209
+    'info_hier' => 'i går:',
210
+    'info_identification_publique' => 'Din offentlige identitet...',
211
+    'info_image_process' => 'Vælg den bedste metode til at skabe miniaturebilleder ved at klikke på det korresponderende billede.',
212
+    'info_image_process2' => '<b>N.B.</b> <i>If you can’t see any image, then your server is not configured to use such tools. If you want to use these features, contact your provider’s technical support and ask for the «GD» or «Imagick» extensions to be installed.</i>', # MODIF
213
+    'info_informations_personnelles' => 'Femte trin: <b>Personlig information</b>',
214
+    'info_inscription_automatique' => 'Automatisk registrering af nye redaktører',
215
+    'info_jeu_caractere' => 'Webstedets tegnsæt',
216
+    'info_jours' => 'dage',
217
+    'info_laisser_champs_vides' => 'efterlad disse felter tomme)',
218
+    'info_langues' => 'Webstedets sprog',
219
+    'info_ldap_ok' => 'LDAP adgangskontrol er installeret.',
220
+    'info_lien_hypertexte' => 'Hypertekst link:',
221
+    'info_liste_redacteurs_connectes' => 'Oversigt over tilknyttede reaktører',
222
+    'info_login_existant' => 'Dette login findes allerede.',
223
+    'info_login_trop_court' => 'Login for kort.',
224
+    'info_maximum' => 'maksimum:',
225
+    'info_message_en_redaction' => 'Dine meddelelser under redaktion',
226
+    'info_message_technique' => 'Teknisk meddelelse:',
227
+    'info_messagerie_interne' => 'Interne meddelelser',
228
+    'info_mise_a_niveau_base' => 'SQL databaseopgradering',
229
+    'info_mise_a_niveau_base_2' => '{{Advarsel!}} Du har installeret en version af SPIP-filer, der er ældre end dem, der var på webstedet i forvejen. Du risikerer at miste databasen og webstedet vil ikke fungere ordentligt mere.<br />{{Geninstraller SPIP-filerne.}}',
230
+    'info_modifier_rubrique' => 'Ret afsnit:',
231
+    'info_modifier_titre' => 'Ret: @titre@',
232
+    'info_mon_site_spip' => 'Mit SPIP-websted',
233
+    'info_moyenne' => 'gennemsnit:',
234
+    'info_multi_cet_article' => 'Denne artikel er på:',
235
+    'info_multi_langues_choisies' => 'Vælg de sprog der skal være til rådighed for redaktører på webstedet.
236 236
   Sprog der allerede er i brug på webstedet (de øverste på listen) kan ikke fravælges.
237 237
  ',
238
-	'info_multi_secteurs' => 'Kun for afsnit placeret i roden ?',
239
-	'info_nom' => 'Navn',
240
-	'info_nom_destinataire' => 'Navn på modtager',
241
-	'info_nom_site' => 'Dit websteds navn',
242
-	'info_nombre_articles' => '@nb_articles@ artikler,',
243
-	'info_nombre_rubriques' => '@nb_rubriques@ afsnit',
244
-	'info_nombre_sites' => '@nb_sites@ websteder,',
245
-	'info_non_deplacer' => 'Flyt ikke...',
246
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP kan udsende webstedets seneste indlæg regelmæssigt.
238
+    'info_multi_secteurs' => 'Kun for afsnit placeret i roden ?',
239
+    'info_nom' => 'Navn',
240
+    'info_nom_destinataire' => 'Navn på modtager',
241
+    'info_nom_site' => 'Dit websteds navn',
242
+    'info_nombre_articles' => '@nb_articles@ artikler,',
243
+    'info_nombre_rubriques' => '@nb_rubriques@ afsnit',
244
+    'info_nombre_sites' => '@nb_sites@ websteder,',
245
+    'info_non_deplacer' => 'Flyt ikke...',
246
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP kan udsende webstedets seneste indlæg regelmæssigt.
247 247
 		(nyligt offentliggjorte artikler og nyheder).',
248
-	'info_non_envoi_liste_nouveautes' => 'Send ikke oversigt over seneste nyheder',
249
-	'info_non_modifiable' => 'kan ikke ændres',
250
-	'info_non_suppression_mot_cle' => 'Jeg ønsker ikke at slette dette nøgleord.',
251
-	'info_notes' => 'Fodnoter',
252
-	'info_nouvel_article' => 'Ny artikel',
253
-	'info_nouvelle_traduction' => 'Ny oversættelse:',
254
-	'info_numero_article' => 'ARTIKEL NUMMER:',
255
-	'info_obligatoire_02' => '[Skal udfyldes]', # MODIF
256
-	'info_options_avancees' => 'AVANCEREDE INDSTILLINGER',
257
-	'info_ou' => 'eller...',
258
-	'info_page_interdite' => 'Forbudt side',
259
-	'info_par_nombre_article' => '(efter antal artiker)',
260
-	'info_passe_trop_court' => 'Adgangskode for kort.',
261
-	'info_passes_identiques' => 'De to adgangskoder er ikke ens.',
262
-	'info_plus_cinq_car' => 'mere end 5 tegn',
263
-	'info_plus_cinq_car_2' => '(Mere end 5 tegn)',
264
-	'info_plus_trois_car' => '(Mere end 3 tegn)',
265
-	'info_popularite' => 'popularitet: @popularite@; besøg: @visites@',
266
-	'info_post_scriptum' => 'Efterskrift',
267
-	'info_post_scriptum_2' => 'Efterskrift:',
268
-	'info_pour' => 'til',
269
-	'info_procedez_par_etape' => 'gå frem skridt for skridt',
270
-	'info_procedure_maj_version' => 'opgraderingsprocdeduren bør følges for at tilpasse databasen til den nye version af SPIP.',
271
-	'info_ps' => 'P.S.',
272
-	'info_publies' => 'Dine offentliggjorte artikler',
273
-	'info_question_inscription_nouveaux_redacteurs' => 'Vil du tillade, at nye redaktører tilmelder sig
248
+    'info_non_envoi_liste_nouveautes' => 'Send ikke oversigt over seneste nyheder',
249
+    'info_non_modifiable' => 'kan ikke ændres',
250
+    'info_non_suppression_mot_cle' => 'Jeg ønsker ikke at slette dette nøgleord.',
251
+    'info_notes' => 'Fodnoter',
252
+    'info_nouvel_article' => 'Ny artikel',
253
+    'info_nouvelle_traduction' => 'Ny oversættelse:',
254
+    'info_numero_article' => 'ARTIKEL NUMMER:',
255
+    'info_obligatoire_02' => '[Skal udfyldes]', # MODIF
256
+    'info_options_avancees' => 'AVANCEREDE INDSTILLINGER',
257
+    'info_ou' => 'eller...',
258
+    'info_page_interdite' => 'Forbudt side',
259
+    'info_par_nombre_article' => '(efter antal artiker)',
260
+    'info_passe_trop_court' => 'Adgangskode for kort.',
261
+    'info_passes_identiques' => 'De to adgangskoder er ikke ens.',
262
+    'info_plus_cinq_car' => 'mere end 5 tegn',
263
+    'info_plus_cinq_car_2' => '(Mere end 5 tegn)',
264
+    'info_plus_trois_car' => '(Mere end 3 tegn)',
265
+    'info_popularite' => 'popularitet: @popularite@; besøg: @visites@',
266
+    'info_post_scriptum' => 'Efterskrift',
267
+    'info_post_scriptum_2' => 'Efterskrift:',
268
+    'info_pour' => 'til',
269
+    'info_procedez_par_etape' => 'gå frem skridt for skridt',
270
+    'info_procedure_maj_version' => 'opgraderingsprocdeduren bør følges for at tilpasse databasen til den nye version af SPIP.',
271
+    'info_ps' => 'P.S.',
272
+    'info_publies' => 'Dine offentliggjorte artikler',
273
+    'info_question_inscription_nouveaux_redacteurs' => 'Vil du tillade, at nye redaktører tilmelder sig
274 274
 		på det offentligt tilgængelige websted? Ja betyder, at besøgende kan tilmelde sig på en automatisk dannet formular,
275 275
 		og derefter få adgang til det private område, hvor de kan vedligeholde deres egne artikler.
276 276
 		<blockquote><i>Under tilmeldingen modtager brugerne en automatisk dannet e-mail med deres adgangskode til det
277 277
 		private websted. Nogle webhoteller tillader ikke at der sendes e-mails fra deres servere. I så fald kan automatisk
278 278
 		tilmelding ikke finde sted.', # MODIF
279
-	'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
280
-	'info_racine_site' => 'Top',
281
-	'info_recharger_page' => 'Vær venlig at genindlæse denne side om et øjeblik.',
282
-	'info_recherche_auteur_zero' => '<b>Ingen resultater fundet til "@cherche_auteur@".',
283
-	'info_recommencer' => 'Vær venlig at forsøge igen.',
284
-	'info_redacteur_1' => 'Redaktør',
285
-	'info_redacteur_2' => 'med adgang til det private område (<i>anbefalet</i>)',
286
-	'info_redacteurs' => 'Redaktører',
287
-	'info_redaction_en_cours' => 'REDIGERING ER IGANG',
288
-	'info_redirection' => 'Viderestilling',
289
-	'info_refuses' => 'Dine artikler er afvist',
290
-	'info_reglage_ldap' => 'Muligheder: <b>Konfigurere LDAP understøttelse</b>',
291
-	'info_renvoi_article' => '<b>Viderestilling.</b> Denne artikel henviser til siden:',
292
-	'info_reserve_admin' => 'Kun administratorer kan ændre denne adresse.',
293
-	'info_restreindre_rubrique' => 'Begræns administrationsrettigheder til dette afsnit:',
294
-	'info_resultat_recherche' => 'Søgeresultater:',
295
-	'info_rubriques' => 'Afsnit',
296
-	'info_rubriques_02' => 'afsnit',
297
-	'info_rubriques_trouvees' => 'Afsnit fundet',
298
-	'info_sans_titre' => 'Uden overskrift',
299
-	'info_selection_chemin_acces' => '<b>Vælg</b> nedenfor stien til kataloget:',
300
-	'info_signatures' => 'underskrifter',
301
-	'info_site' => 'Websted',
302
-	'info_site_2' => 'websted:',
303
-	'info_site_min' => 'websted',
304
-	'info_site_reference_2' => 'Henvisning',
305
-	'info_site_web' => 'WEBSTED:', # MODIF
306
-	'info_sites' => 'websteder',
307
-	'info_sites_lies_mot' => 'Links til websteder knyttet til dette nøgleord',
308
-	'info_sites_proxy' => 'Brug proxy',
309
-	'info_sites_trouves' => 'Websteder fundet',
310
-	'info_sous_titre' => 'Underrubrik:',
311
-	'info_statut_administrateur' => 'Administrator',
312
-	'info_statut_auteur' => 'Denne forfatters status:', # MODIF
313
-	'info_statut_redacteur' => 'Redaktør',
314
-	'info_statut_utilisateurs_1' => 'Importerede brugeres standardstatus',
315
-	'info_statut_utilisateurs_2' => 'Vælg den status som skal tildeles personerne i LDAP kataloget, når de logger ind første gang. Senere kan du ændre værdien for hver forfatter fra sag til sag.',
316
-	'info_suivi_activite' => 'Opfølgning på redaktionelle aktiviteter',
317
-	'info_surtitre' => 'Hovedoverskrift:',
318
-	'info_taille_maximale_vignette' => 'Max. størrelse på piktogram dannet af systemet:',
319
-	'info_terminer_installation' => 'Du kan nu afslutte standardinstallationen.',
320
-	'info_texte' => 'Tekst',
321
-	'info_texte_explicatif' => 'Forklarende tekst',
322
-	'info_texte_long' => '(teksten er for lang: den vil blive opdelt i flere dele, som vil blive sat sammen efter godkendelse.)',
323
-	'info_texte_message' => 'Meddelelsens tekst:', # MODIF
324
-	'info_texte_message_02' => 'Meddelelsens tekst',
325
-	'info_titre' => 'Overskrift:',
326
-	'info_total' => 'ialt:',
327
-	'info_tous_articles_en_redaction' => 'Alle artikler undervejs',
328
-	'info_tous_articles_presents' => 'Alle artikler offentliggjort i dette afsnit',
329
-	'info_tous_les' => 'for hver:',
330
-	'info_tout_site' => 'Hele webstedet',
331
-	'info_tout_site2' => 'Artiklen er ikke blevet oversat til dette sprog.',
332
-	'info_tout_site3' => 'Artiklen er blevet oversat til dette sprig, men nogle ændringer er senere blevet tilføjet til referenceartiklen. Oversættelsen skal opdateres.   ',
333
-	'info_tout_site4' => 'Artiklen er blevet oversat til dette sprog og oversættelsen er opdateret.',
334
-	'info_tout_site5' => 'Den oprindelige artikel.',
335
-	'info_tout_site6' => '<b>Advarsel:</b> kun de oprindelige artikler vises.
279
+    'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF
280
+    'info_racine_site' => 'Top',
281
+    'info_recharger_page' => 'Vær venlig at genindlæse denne side om et øjeblik.',
282
+    'info_recherche_auteur_zero' => '<b>Ingen resultater fundet til "@cherche_auteur@".',
283
+    'info_recommencer' => 'Vær venlig at forsøge igen.',
284
+    'info_redacteur_1' => 'Redaktør',
285
+    'info_redacteur_2' => 'med adgang til det private område (<i>anbefalet</i>)',
286
+    'info_redacteurs' => 'Redaktører',
287
+    'info_redaction_en_cours' => 'REDIGERING ER IGANG',
288
+    'info_redirection' => 'Viderestilling',
289
+    'info_refuses' => 'Dine artikler er afvist',
290
+    'info_reglage_ldap' => 'Muligheder: <b>Konfigurere LDAP understøttelse</b>',
291
+    'info_renvoi_article' => '<b>Viderestilling.</b> Denne artikel henviser til siden:',
292
+    'info_reserve_admin' => 'Kun administratorer kan ændre denne adresse.',
293
+    'info_restreindre_rubrique' => 'Begræns administrationsrettigheder til dette afsnit:',
294
+    'info_resultat_recherche' => 'Søgeresultater:',
295
+    'info_rubriques' => 'Afsnit',
296
+    'info_rubriques_02' => 'afsnit',
297
+    'info_rubriques_trouvees' => 'Afsnit fundet',
298
+    'info_sans_titre' => 'Uden overskrift',
299
+    'info_selection_chemin_acces' => '<b>Vælg</b> nedenfor stien til kataloget:',
300
+    'info_signatures' => 'underskrifter',
301
+    'info_site' => 'Websted',
302
+    'info_site_2' => 'websted:',
303
+    'info_site_min' => 'websted',
304
+    'info_site_reference_2' => 'Henvisning',
305
+    'info_site_web' => 'WEBSTED:', # MODIF
306
+    'info_sites' => 'websteder',
307
+    'info_sites_lies_mot' => 'Links til websteder knyttet til dette nøgleord',
308
+    'info_sites_proxy' => 'Brug proxy',
309
+    'info_sites_trouves' => 'Websteder fundet',
310
+    'info_sous_titre' => 'Underrubrik:',
311
+    'info_statut_administrateur' => 'Administrator',
312
+    'info_statut_auteur' => 'Denne forfatters status:', # MODIF
313
+    'info_statut_redacteur' => 'Redaktør',
314
+    'info_statut_utilisateurs_1' => 'Importerede brugeres standardstatus',
315
+    'info_statut_utilisateurs_2' => 'Vælg den status som skal tildeles personerne i LDAP kataloget, når de logger ind første gang. Senere kan du ændre værdien for hver forfatter fra sag til sag.',
316
+    'info_suivi_activite' => 'Opfølgning på redaktionelle aktiviteter',
317
+    'info_surtitre' => 'Hovedoverskrift:',
318
+    'info_taille_maximale_vignette' => 'Max. størrelse på piktogram dannet af systemet:',
319
+    'info_terminer_installation' => 'Du kan nu afslutte standardinstallationen.',
320
+    'info_texte' => 'Tekst',
321
+    'info_texte_explicatif' => 'Forklarende tekst',
322
+    'info_texte_long' => '(teksten er for lang: den vil blive opdelt i flere dele, som vil blive sat sammen efter godkendelse.)',
323
+    'info_texte_message' => 'Meddelelsens tekst:', # MODIF
324
+    'info_texte_message_02' => 'Meddelelsens tekst',
325
+    'info_titre' => 'Overskrift:',
326
+    'info_total' => 'ialt:',
327
+    'info_tous_articles_en_redaction' => 'Alle artikler undervejs',
328
+    'info_tous_articles_presents' => 'Alle artikler offentliggjort i dette afsnit',
329
+    'info_tous_les' => 'for hver:',
330
+    'info_tout_site' => 'Hele webstedet',
331
+    'info_tout_site2' => 'Artiklen er ikke blevet oversat til dette sprog.',
332
+    'info_tout_site3' => 'Artiklen er blevet oversat til dette sprig, men nogle ændringer er senere blevet tilføjet til referenceartiklen. Oversættelsen skal opdateres.   ',
333
+    'info_tout_site4' => 'Artiklen er blevet oversat til dette sprog og oversættelsen er opdateret.',
334
+    'info_tout_site5' => 'Den oprindelige artikel.',
335
+    'info_tout_site6' => '<b>Advarsel:</b> kun de oprindelige artikler vises.
336 336
 Oversættelserne er tilknyttet den oprindelige artikel 
337 337
 i en farve, der angiver deres status:',
338
-	'info_travail_colaboratif' => 'Samarbejde om artikler',
339
-	'info_un_article' => 'en artikel,',
340
-	'info_un_site' => 'et websted,',
341
-	'info_une_rubrique' => 'et afsnit,',
342
-	'info_une_rubrique_02' => '1 afsnit',
343
-	'info_url' => 'URL:',
344
-	'info_urlref' => 'Hyperlink:',
345
-	'info_utilisation_spip' => 'SPIP er nu klar til brug...',
346
-	'info_visites_par_mois' => 'Besøg pr. måned:',
347
-	'info_visiteur_1' => 'Besøgende',
348
-	'info_visiteur_2' => 'på den offentligt tilgængelige websted',
349
-	'info_visiteurs' => 'Besøgende',
350
-	'info_visiteurs_02' => 'Besøgende på offentligt websted',
351
-	'install_select_langue' => 'Vælg et sprog og klik derefter på knappen «næste» for at igangsætte installationen.',
352
-	'intem_redacteur' => 'redaktør',
353
-	'item_accepter_inscriptions' => 'Tillad tilmeldinger',
354
-	'item_activer_messages_avertissement' => 'Tillad advarselsmeddelelser',
355
-	'item_administrateur_2' => 'administrator',
356
-	'item_afficher_calendrier' => 'Vis i kalenderen',
357
-	'item_choix_administrateurs' => 'administratorer',
358
-	'item_choix_generation_miniature' => 'Dan miniaturepiktogrammer automatisk.',
359
-	'item_choix_non_generation_miniature' => 'Dan ikke miniaturebilleder.',
360
-	'item_choix_redacteurs' => 'redaktører',
361
-	'item_choix_visiteurs' => 'besøgende på den offentlige websted',
362
-	'item_creer_fichiers_authent' => 'Dan .htpasswd filer',
363
-	'item_login' => 'Login',
364
-	'item_mots_cles_association_articles' => 'artiklerne',
365
-	'item_mots_cles_association_rubriques' => 'afsnittene',
366
-	'item_mots_cles_association_sites' => 'de linkede eller syndikerede websteder.',
367
-	'item_non' => 'Nej',
368
-	'item_non_accepter_inscriptions' => 'Tillad ikke tilmelding',
369
-	'item_non_activer_messages_avertissement' => 'Ingen advarselsmeddelelser',
370
-	'item_non_afficher_calendrier' => 'Vis ikke i kalender',
371
-	'item_non_creer_fichiers_authent' => 'Dan ikke disse filer',
372
-	'item_non_publier_articles' => 'Vent med at offentliggøre artikler til deres publiceringsdato.',
373
-	'item_nouvel_auteur' => 'Ny forfatter',
374
-	'item_nouvelle_rubrique' => 'Nyt afsnit',
375
-	'item_oui' => 'Ja',
376
-	'item_publier_articles' => 'Offentliggør artikler uden hensyn til deres publiceringsdato.',
377
-	'item_reponse_article' => 'Kommenter artiklen',
378
-	'item_visiteur' => 'besøgende',
338
+    'info_travail_colaboratif' => 'Samarbejde om artikler',
339
+    'info_un_article' => 'en artikel,',
340
+    'info_un_site' => 'et websted,',
341
+    'info_une_rubrique' => 'et afsnit,',
342
+    'info_une_rubrique_02' => '1 afsnit',
343
+    'info_url' => 'URL:',
344
+    'info_urlref' => 'Hyperlink:',
345
+    'info_utilisation_spip' => 'SPIP er nu klar til brug...',
346
+    'info_visites_par_mois' => 'Besøg pr. måned:',
347
+    'info_visiteur_1' => 'Besøgende',
348
+    'info_visiteur_2' => 'på den offentligt tilgængelige websted',
349
+    'info_visiteurs' => 'Besøgende',
350
+    'info_visiteurs_02' => 'Besøgende på offentligt websted',
351
+    'install_select_langue' => 'Vælg et sprog og klik derefter på knappen «næste» for at igangsætte installationen.',
352
+    'intem_redacteur' => 'redaktør',
353
+    'item_accepter_inscriptions' => 'Tillad tilmeldinger',
354
+    'item_activer_messages_avertissement' => 'Tillad advarselsmeddelelser',
355
+    'item_administrateur_2' => 'administrator',
356
+    'item_afficher_calendrier' => 'Vis i kalenderen',
357
+    'item_choix_administrateurs' => 'administratorer',
358
+    'item_choix_generation_miniature' => 'Dan miniaturepiktogrammer automatisk.',
359
+    'item_choix_non_generation_miniature' => 'Dan ikke miniaturebilleder.',
360
+    'item_choix_redacteurs' => 'redaktører',
361
+    'item_choix_visiteurs' => 'besøgende på den offentlige websted',
362
+    'item_creer_fichiers_authent' => 'Dan .htpasswd filer',
363
+    'item_login' => 'Login',
364
+    'item_mots_cles_association_articles' => 'artiklerne',
365
+    'item_mots_cles_association_rubriques' => 'afsnittene',
366
+    'item_mots_cles_association_sites' => 'de linkede eller syndikerede websteder.',
367
+    'item_non' => 'Nej',
368
+    'item_non_accepter_inscriptions' => 'Tillad ikke tilmelding',
369
+    'item_non_activer_messages_avertissement' => 'Ingen advarselsmeddelelser',
370
+    'item_non_afficher_calendrier' => 'Vis ikke i kalender',
371
+    'item_non_creer_fichiers_authent' => 'Dan ikke disse filer',
372
+    'item_non_publier_articles' => 'Vent med at offentliggøre artikler til deres publiceringsdato.',
373
+    'item_nouvel_auteur' => 'Ny forfatter',
374
+    'item_nouvelle_rubrique' => 'Nyt afsnit',
375
+    'item_oui' => 'Ja',
376
+    'item_publier_articles' => 'Offentliggør artikler uden hensyn til deres publiceringsdato.',
377
+    'item_reponse_article' => 'Kommenter artiklen',
378
+    'item_visiteur' => 'besøgende',
379 379
 
380
-	// J
381
-	'jour_non_connu_nc' => ' ',
380
+    // J
381
+    'jour_non_connu_nc' => ' ',
382 382
 
383
-	// L
384
-	'lien_ajouter_auteur' => 'Tilføj denne forfatter',
385
-	'lien_email' => 'e-mail',
386
-	'lien_nom_site' => 'WEBSTEDETS NAVN:',
387
-	'lien_retirer_auteur' => 'Fjern forfatter',
388
-	'lien_site' => 'websted',
389
-	'lien_tout_deplier' => 'Udfold alle',
390
-	'lien_tout_replier' => 'Sammenfold alle',
391
-	'lien_trier_nom' => 'Sorter efter navn',
392
-	'lien_trier_nombre_articles' => 'Sorter efter antal artikler',
393
-	'lien_trier_statut' => 'Sorter efter status',
394
-	'lien_voir_en_ligne' => 'SE ONLINE:',
395
-	'logo_article' => 'LOGO TIL ARTIKLEN', # MODIF
396
-	'logo_auteur' => 'LOGO TIL FORFATTEREN', # MODIF
397
-	'logo_rubrique' => 'LOGO TIL AFSNITTETS', # MODIF
398
-	'logo_site' => 'LOGO TIL WEBSTEDETS', # MODIF
399
-	'logo_standard_rubrique' => 'STANDARDLOGO TIL AFSNIT', # MODIF
400
-	'logo_survol' => 'PEGEFØLSOMT LOGO', # MODIF
383
+    // L
384
+    'lien_ajouter_auteur' => 'Tilføj denne forfatter',
385
+    'lien_email' => 'e-mail',
386
+    'lien_nom_site' => 'WEBSTEDETS NAVN:',
387
+    'lien_retirer_auteur' => 'Fjern forfatter',
388
+    'lien_site' => 'websted',
389
+    'lien_tout_deplier' => 'Udfold alle',
390
+    'lien_tout_replier' => 'Sammenfold alle',
391
+    'lien_trier_nom' => 'Sorter efter navn',
392
+    'lien_trier_nombre_articles' => 'Sorter efter antal artikler',
393
+    'lien_trier_statut' => 'Sorter efter status',
394
+    'lien_voir_en_ligne' => 'SE ONLINE:',
395
+    'logo_article' => 'LOGO TIL ARTIKLEN', # MODIF
396
+    'logo_auteur' => 'LOGO TIL FORFATTEREN', # MODIF
397
+    'logo_rubrique' => 'LOGO TIL AFSNITTETS', # MODIF
398
+    'logo_site' => 'LOGO TIL WEBSTEDETS', # MODIF
399
+    'logo_standard_rubrique' => 'STANDARDLOGO TIL AFSNIT', # MODIF
400
+    'logo_survol' => 'PEGEFØLSOMT LOGO', # MODIF
401 401
 
402
-	// M
403
-	'menu_aide_installation_choix_base' => 'Valg af database',
404
-	'module_fichier_langue' => 'Sprogfil',
405
-	'module_raccourci' => 'Genvej',
406
-	'module_texte_affiche' => 'Vist tekst',
407
-	'module_texte_explicatif' => 'Du kan indsætte følgende genveje i dit websteds skabeloner. De vil automatisk blive oversat til de forskellige sprog, som der findes sprogfiler til.',
408
-	'module_texte_traduction' => 'Sprogfilen « @module@ » findes på:',
409
-	'mois_non_connu' => 'ukendt',
402
+    // M
403
+    'menu_aide_installation_choix_base' => 'Valg af database',
404
+    'module_fichier_langue' => 'Sprogfil',
405
+    'module_raccourci' => 'Genvej',
406
+    'module_texte_affiche' => 'Vist tekst',
407
+    'module_texte_explicatif' => 'Du kan indsætte følgende genveje i dit websteds skabeloner. De vil automatisk blive oversat til de forskellige sprog, som der findes sprogfiler til.',
408
+    'module_texte_traduction' => 'Sprogfilen « @module@ » findes på:',
409
+    'mois_non_connu' => 'ukendt',
410 410
 
411
-	// O
412
-	'onglet_repartition_actuelle' => 'nu',
411
+    // O
412
+    'onglet_repartition_actuelle' => 'nu',
413 413
 
414
-	// R
415
-	'required' => '[Skal udfyldes]', # MODIF
414
+    // R
415
+    'required' => '[Skal udfyldes]', # MODIF
416 416
 
417
-	// S
418
-	'statut_admin_restreint' => '(begrænset admin)', # MODIF
417
+    // S
418
+    'statut_admin_restreint' => '(begrænset admin)', # MODIF
419 419
 
420
-	// T
421
-	'text_article_propose_publication' => 'Artiklen er sendt til offentliggørelse. Hold dig ikke tilbage fra at give din mening til kende gennem det forum, der er tilknyttet artiklen (nederst på siden).', # MODIF
422
-	'texte_acces_ldap_anonyme_1' => 'Nogle LDAP-servere tillader ikke anonym adgang. I så fald må du angive en brugeridentifikation for senere at kunne søge efter information i kataloget. Men i de fleste tilfælde kan du lade de følgende felter stå tomme.',
423
-	'texte_admin_effacer_01' => 'Denne kommando sletter <i>hele</i> indholdet i databasen,
420
+    // T
421
+    'text_article_propose_publication' => 'Artiklen er sendt til offentliggørelse. Hold dig ikke tilbage fra at give din mening til kende gennem det forum, der er tilknyttet artiklen (nederst på siden).', # MODIF
422
+    'texte_acces_ldap_anonyme_1' => 'Nogle LDAP-servere tillader ikke anonym adgang. I så fald må du angive en brugeridentifikation for senere at kunne søge efter information i kataloget. Men i de fleste tilfælde kan du lade de følgende felter stå tomme.',
423
+    'texte_admin_effacer_01' => 'Denne kommando sletter <i>hele</i> indholdet i databasen,
424 424
 	herunder <i>hele</i> opsætningen for redaktører og administratorer. Når du har udført den, bør du 
425 425
 	geninstallere SPIP for at danne en ny database og åbne op for den første administratoradgang.',
426
-	'texte_adresse_annuaire_1' => '(Hvis dit katalog findes på samme server som webstedet, er det formentlig «localhost».)',
427
-	'texte_ajout_auteur' => 'Følgende forfatter har bidraget til artiklen:',
428
-	'texte_annuaire_ldap_1' => 'Hvis du har adgang til et LDAP-katalog, kan du anvende det til automatisk at importere brugere i SPIP.',
429
-	'texte_article_statut' => 'Denne artikel er:',
430
-	'texte_article_virtuel' => 'Virtuel artikel',
431
-	'texte_article_virtuel_reference' => '<b>Virtuel artikel:</b> fremstår som en artikel på dit websted, men viderestiller til en anden URL. Slet URL’en for at fjerne viderestillingen.',
432
-	'texte_aucun_resultat_auteur' => 'Ingen resultater til "@cherche_auteur@".',
433
-	'texte_auteur_messagerie' => 'Dette websted kan løbende holde øje med, hvilke redaktører der er logget ind. Dette muliggør realtidsudveksling af meddelelser (hvis udveksling af meddelser ovenfor er fravalgt, vedligeholdes oversigten over redaktører, der er online, heller ikke). Du kan vælge ikke at være synlig i oversigten (du er så «usynlig» for andre brugere).',
434
-	'texte_auteurs' => 'FORFATTERNE',
435
-	'texte_choix_base_1' => 'Vælg database:',
436
-	'texte_choix_base_2' => 'SQL server indeholder et antal databaser.',
437
-	'texte_choix_base_3' => '<b>Vælg</b> vælg nedenfor den database, som webhotellet har tildelt dig:',
438
-	'texte_compte_element' => '@count@ element',
439
-	'texte_compte_elements' => '@count@ elementer',
440
-	'texte_connexion_mysql' => 'Slå op i de oplysninger, som dit webhotel har stillet til rådighed: Hvis webhotellet understøtter SQL, bør det indeholde oplysninger om opkobling.', # MODIF
441
-	'texte_contenu_article' => '(Artiklens indhold med få ord.)',
442
-	'texte_contenu_articles' => 'Med udgangspunkt i det layout du har valgt til dit websted, kan du vælge at nogle artikelelementer ikke skal benyttes.
426
+    'texte_adresse_annuaire_1' => '(Hvis dit katalog findes på samme server som webstedet, er det formentlig «localhost».)',
427
+    'texte_ajout_auteur' => 'Følgende forfatter har bidraget til artiklen:',
428
+    'texte_annuaire_ldap_1' => 'Hvis du har adgang til et LDAP-katalog, kan du anvende det til automatisk at importere brugere i SPIP.',
429
+    'texte_article_statut' => 'Denne artikel er:',
430
+    'texte_article_virtuel' => 'Virtuel artikel',
431
+    'texte_article_virtuel_reference' => '<b>Virtuel artikel:</b> fremstår som en artikel på dit websted, men viderestiller til en anden URL. Slet URL’en for at fjerne viderestillingen.',
432
+    'texte_aucun_resultat_auteur' => 'Ingen resultater til "@cherche_auteur@".',
433
+    'texte_auteur_messagerie' => 'Dette websted kan løbende holde øje med, hvilke redaktører der er logget ind. Dette muliggør realtidsudveksling af meddelelser (hvis udveksling af meddelser ovenfor er fravalgt, vedligeholdes oversigten over redaktører, der er online, heller ikke). Du kan vælge ikke at være synlig i oversigten (du er så «usynlig» for andre brugere).',
434
+    'texte_auteurs' => 'FORFATTERNE',
435
+    'texte_choix_base_1' => 'Vælg database:',
436
+    'texte_choix_base_2' => 'SQL server indeholder et antal databaser.',
437
+    'texte_choix_base_3' => '<b>Vælg</b> vælg nedenfor den database, som webhotellet har tildelt dig:',
438
+    'texte_compte_element' => '@count@ element',
439
+    'texte_compte_elements' => '@count@ elementer',
440
+    'texte_connexion_mysql' => 'Slå op i de oplysninger, som dit webhotel har stillet til rådighed: Hvis webhotellet understøtter SQL, bør det indeholde oplysninger om opkobling.', # MODIF
441
+    'texte_contenu_article' => '(Artiklens indhold med få ord.)',
442
+    'texte_contenu_articles' => 'Med udgangspunkt i det layout du har valgt til dit websted, kan du vælge at nogle artikelelementer ikke skal benyttes.
443 443
 		Benyt følgende liste til at bestemme, hvilke elementer der skal være til rådighed.',
444
-	'texte_crash_base' => 'Hvis din database er brudt ned, kan du her forsøge en automatisk genopbygning.',
445
-	'texte_creer_rubrique' => 'Før du kan skrive artikler,<br /> skal du oprette et afsnit.',
446
-	'texte_date_creation_article' => 'DATO FOR OPRETTELSE AF ARTIKLEN:',
447
-	'texte_date_publication_anterieure' => 'DATO FOR TIDLIGERE OFFENTLIGGØRELSE',
448
-	'texte_date_publication_anterieure_nonaffichee' => 'Skjul dato for tidligere offentliggørelse.',
449
-	'texte_date_publication_article' => 'DATO FOR ONLINE OFFENTLIGGØRELSE:',
450
-	'texte_descriptif_rapide' => 'Kort beskrivelse',
451
-	'texte_effacer_base' => 'Slet SPIP databasen',
452
-	'texte_en_cours_validation' => 'Følgende artikler og nyheder er foreslået offentliggjort. Tøv ikke med at give din mening til kende via de fora, som er knyttet til artiklerne.', # MODIF
453
-	'texte_enrichir_mise_a_jour' => 'Du kan forbedre layoutet af teksten ved at benytte «typografiske koder».',
454
-	'texte_fichier_authent' => '<b>Skal SPIP oprette specielle <tt>.htpasswd</tt>
444
+    'texte_crash_base' => 'Hvis din database er brudt ned, kan du her forsøge en automatisk genopbygning.',
445
+    'texte_creer_rubrique' => 'Før du kan skrive artikler,<br /> skal du oprette et afsnit.',
446
+    'texte_date_creation_article' => 'DATO FOR OPRETTELSE AF ARTIKLEN:',
447
+    'texte_date_publication_anterieure' => 'DATO FOR TIDLIGERE OFFENTLIGGØRELSE',
448
+    'texte_date_publication_anterieure_nonaffichee' => 'Skjul dato for tidligere offentliggørelse.',
449
+    'texte_date_publication_article' => 'DATO FOR ONLINE OFFENTLIGGØRELSE:',
450
+    'texte_descriptif_rapide' => 'Kort beskrivelse',
451
+    'texte_effacer_base' => 'Slet SPIP databasen',
452
+    'texte_en_cours_validation' => 'Følgende artikler og nyheder er foreslået offentliggjort. Tøv ikke med at give din mening til kende via de fora, som er knyttet til artiklerne.', # MODIF
453
+    'texte_enrichir_mise_a_jour' => 'Du kan forbedre layoutet af teksten ved at benytte «typografiske koder».',
454
+    'texte_fichier_authent' => '<b>Skal SPIP oprette specielle <tt>.htpasswd</tt>
455 455
 		og <tt>.htpasswd-admin</tt> filer i kataloget @dossier@?</b><p>
456 456
 		Disse filer kan benyttes til at begrænse adgangen for forfattere og administratorer til andre dele af dit websted
457 457
 		(f.eks. et eksternt statistikprogram).<p>
458 458
 		Hvis du ikke har benyttet sådanne filer før, kan du vælge standardværdien (ingen filoprettelse).', # MODIF
459
-	'texte_informations_personnelles_1' => 'Systemet vil give dig en tilpasset adgang til webstedet.',
460
-	'texte_informations_personnelles_2' => '(Bemærk: hvis det er en geninstallation og din adgang stadig fungerer, kan du', # MODIF
461
-	'texte_introductif_article' => '(Introduktion til artiklen)',
462
-	'texte_jeu_caractere' => 'Denne indstilling er nyttig, hvis dit websted viser andre alfabeter end det latinske alfabet (dvs. det «vestlige») og dets afledninger. 
459
+    'texte_informations_personnelles_1' => 'Systemet vil give dig en tilpasset adgang til webstedet.',
460
+    'texte_informations_personnelles_2' => '(Bemærk: hvis det er en geninstallation og din adgang stadig fungerer, kan du', # MODIF
461
+    'texte_introductif_article' => '(Introduktion til artiklen)',
462
+    'texte_jeu_caractere' => 'Denne indstilling er nyttig, hvis dit websted viser andre alfabeter end det latinske alfabet (dvs. det «vestlige») og dets afledninger. 
463 463
  I så fald skal standardindstillingen ændres til et passende tegnsæt. Vi anbefaler dig at prøve med forskellige indstillinger for at finde den bedste løsning. Husk også at tilpasse webstedet tilsvarende (<tt>#CHARSET</tt> parameteren).',
464
-	'texte_login_ldap_1' => '(Efterlad tom for anonym adgang eller indtast en fuldstændig sti, f.eks. «<tt>uid=hansen, ou=brugere, dc=mit-domæne, dc=dk</tt>».)',
465
-	'texte_login_precaution' => 'Advarsel! Dette er den login, du er koblet på med nu.
464
+    'texte_login_ldap_1' => '(Efterlad tom for anonym adgang eller indtast en fuldstændig sti, f.eks. «<tt>uid=hansen, ou=brugere, dc=mit-domæne, dc=dk</tt>».)',
465
+    'texte_login_precaution' => 'Advarsel! Dette er den login, du er koblet på med nu.
466 466
 	Brug denne formular med forsigtighed ...',
467
-	'texte_mise_a_niveau_base_1' => 'Du har netop opdateret SPIP’s filer.
467
+    'texte_mise_a_niveau_base_1' => 'Du har netop opdateret SPIP’s filer.
468 468
 	Du skal nu opdatere webstedets database.',
469
-	'texte_modifier_article' => 'Ret artiklen:',
470
-	'texte_multilinguisme' => 'Hvis du ønsker at administrere artikler på flere sprog med den deraf følgende større kompleksitet, kan du forsyne afsnit og/eller artikler med en sprogvalgsmenu. Denne funktion er afhængig af strukturen på websiden.', # MODIF
471
-	'texte_multilinguisme_trad' => 'Du kan også vælge at have link mellem de forskellige sprogversioner af en artikel.', # MODIF
472
-	'texte_non_compresse' => '<i>ukomprimeret</i> (din server understøtter ikke denne funktion)',
473
-	'texte_nouvelle_version_spip_1' => 'Du har netop installeret en ny version af SPIP.',
474
-	'texte_nouvelle_version_spip_2' => 'Denne nye version kræver en mere omfattende opdatering end sædvanligt. Hvis du er webmaster på webstedet, så slet venligst filen <tt>inc_connect.php3</tt> i kataloget <tt>ecrire</tt> og genstart installationen for at opdatere dine opkoblingsparametre til databasen. <p>(NB.: hvis du har glemt dine opkoblingsparametre, så kast et blik på indholdet af filen <tt>inc_connect.php3</tt> før du sletter den...)', # MODIF
475
-	'texte_operation_echec' => 'Gå tilbage til forrige side og vælg en anden database eller opret en ny. Kontroller de oplysninger, dit webhotel har stillet til rådighed.',
476
-	'texte_plus_trois_car' => 'mere end 3 tegn',
477
-	'texte_plusieurs_articles' => 'Der er fundet flere forfattere til "@cherche_auteur@":',
478
-	'texte_port_annuaire' => '(Standardværdien passer for det meste.)',
479
-	'texte_proposer_publication' => 'Når din artikel er færdig,<br /> kan du indsende den til offentliggørelse.',
480
-	'texte_proxy' => 'I nogle tilfælde (intranet, beskyttede netværk...),
469
+    'texte_modifier_article' => 'Ret artiklen:',
470
+    'texte_multilinguisme' => 'Hvis du ønsker at administrere artikler på flere sprog med den deraf følgende større kompleksitet, kan du forsyne afsnit og/eller artikler med en sprogvalgsmenu. Denne funktion er afhængig af strukturen på websiden.', # MODIF
471
+    'texte_multilinguisme_trad' => 'Du kan også vælge at have link mellem de forskellige sprogversioner af en artikel.', # MODIF
472
+    'texte_non_compresse' => '<i>ukomprimeret</i> (din server understøtter ikke denne funktion)',
473
+    'texte_nouvelle_version_spip_1' => 'Du har netop installeret en ny version af SPIP.',
474
+    'texte_nouvelle_version_spip_2' => 'Denne nye version kræver en mere omfattende opdatering end sædvanligt. Hvis du er webmaster på webstedet, så slet venligst filen <tt>inc_connect.php3</tt> i kataloget <tt>ecrire</tt> og genstart installationen for at opdatere dine opkoblingsparametre til databasen. <p>(NB.: hvis du har glemt dine opkoblingsparametre, så kast et blik på indholdet af filen <tt>inc_connect.php3</tt> før du sletter den...)', # MODIF
475
+    'texte_operation_echec' => 'Gå tilbage til forrige side og vælg en anden database eller opret en ny. Kontroller de oplysninger, dit webhotel har stillet til rådighed.',
476
+    'texte_plus_trois_car' => 'mere end 3 tegn',
477
+    'texte_plusieurs_articles' => 'Der er fundet flere forfattere til "@cherche_auteur@":',
478
+    'texte_port_annuaire' => '(Standardværdien passer for det meste.)',
479
+    'texte_proposer_publication' => 'Når din artikel er færdig,<br /> kan du indsende den til offentliggørelse.',
480
+    'texte_proxy' => 'I nogle tilfælde (intranet, beskyttede netværk...),
481 481
 		er det nødvendigt at benytte en <i>proxy HTTP</i> for at komme i kontakt med syndikerede websteder.
482 482
 		Hvis der skal benyttes proxy, så indtast dens adresse her: 
483 483
 		<tt><html>http://proxy:8080</html></tt>. Almindeligvis skal feltet stå tomt.',
484
-	'texte_publication_articles_post_dates' => 'Hvad skal SPIP gøre med hensyn til artikler med en offentliggørelsesdato, der ligger ude i 
484
+    'texte_publication_articles_post_dates' => 'Hvad skal SPIP gøre med hensyn til artikler med en offentliggørelsesdato, der ligger ude i 
485 485
 		fremtiden?',
486
-	'texte_rappel_selection_champs' => '[Husk at vælge dette felt korrekt.]',
487
-	'texte_recalcul_page' => 'Hvis du kun ønsker at opdatere en side, bør du gøre det ved fra det offentlige område at benytte knappen « Opdater ».',
488
-	'texte_recuperer_base' => 'Reparer databasen',
489
-	'texte_reference_mais_redirige' => 'artikler der refereres til på dit SPIP websted, men som viderestiller til en anden URL.',
490
-	'texte_requetes_echouent' => '<b>Når nogle SQL forespørgsler systematisk og uden tilsyneladende grund går galt, er det muligt at fejlen ligger i selve databasen.</b>
486
+    'texte_rappel_selection_champs' => '[Husk at vælge dette felt korrekt.]',
487
+    'texte_recalcul_page' => 'Hvis du kun ønsker at opdatere en side, bør du gøre det ved fra det offentlige område at benytte knappen « Opdater ».',
488
+    'texte_recuperer_base' => 'Reparer databasen',
489
+    'texte_reference_mais_redirige' => 'artikler der refereres til på dit SPIP websted, men som viderestiller til en anden URL.',
490
+    'texte_requetes_echouent' => '<b>Når nogle SQL forespørgsler systematisk og uden tilsyneladende grund går galt, er det muligt at fejlen ligger i selve databasen.</b>
491 491
 		<p>SQL har en funktion, der reparerer dens tabeller, hvis de er blevet ødelagt ved et uheld. 
492 492
 		Her kan du forsøge at igangsætte denne reparationsfunktion; 
493 493
 		hvis den går galt, bør du beholde en kopi af skærmbilledet, 
494 494
 		som måske kan indeholde antydninger af, hvad der er galt....
495 495
 		<p>Hvis problemet fortsat består, så kontakt dit webhotel.', # MODIF
496
-	'texte_selection_langue_principale' => 'Du kan nedenfor vælge webstedets «hovedsprog». 
496
+    'texte_selection_langue_principale' => 'Du kan nedenfor vælge webstedets «hovedsprog». 
497 497
 		Heldigvis begrænser dette valg ikke dine artikler til at skulle skrives på det valgte sprog 
498 498
 		men gør det muligt at fastsætte, 
499 499
 		<ul><li> standardformatet for datoer i det offentlige område</li>
@@ -503,60 +503,60 @@  discard block
 block discarded – undo
503 503
 		<li> det sprog der anvendes i formularer på det offentlige websted</li>
504 504
 
505 505
 		<li> standardsproget i det private område.</li></ul>',
506
-	'texte_sous_titre' => 'Underrubrik',
507
-	'texte_statistiques_visites' => '(mørke bjælker:  Søndag / mørk kurve: gennemsnitsudvikling)',
508
-	'texte_statut_attente_validation' => 'afventer godkendelse',
509
-	'texte_statut_publies' => 'offentliggjort online',
510
-	'texte_statut_refuses' => 'afvist',
511
-	'texte_suppression_fichiers' => 'Brug denne kommando til at slette alle filer i SPIP’s cache.
506
+    'texte_sous_titre' => 'Underrubrik',
507
+    'texte_statistiques_visites' => '(mørke bjælker:  Søndag / mørk kurve: gennemsnitsudvikling)',
508
+    'texte_statut_attente_validation' => 'afventer godkendelse',
509
+    'texte_statut_publies' => 'offentliggjort online',
510
+    'texte_statut_refuses' => 'afvist',
511
+    'texte_suppression_fichiers' => 'Brug denne kommando til at slette alle filer i SPIP’s cache.
512 512
 		Dette giver dig bl.a. mulighed for at gennemtvinge opdatering af alle sider i tilfælde af 
513 513
 		at du har lavet væsentlige grafiske eller strukturelle ændringer på webstedet.',
514
-	'texte_sur_titre' => 'Hovedoverskrift',
515
-	'texte_table_ok' => ': denne tabel er OK.',
516
-	'texte_tentative_recuperation' => 'Reparationsforsøg',
517
-	'texte_tenter_reparation' => 'Forsøg på at reparere databasen',
518
-	'texte_test_proxy' => 'For at afprøve proxy’en, kan du indtaste adressen på et websted som du ønsker at teste.',
519
-	'texte_titre_02' => 'Emne:',
520
-	'texte_titre_obligatoire' => '<b>Overskrift</b> [Obligatorisk]',
521
-	'texte_travail_article' => '@nom_auteur_modif@ har arbejdet på denne artikel for @date_diff@ minutter siden',
522
-	'texte_travail_collaboratif' => 'Hvis det sker hyppigt at flere redaktører arbejder på samme artikel, kan systemet
514
+    'texte_sur_titre' => 'Hovedoverskrift',
515
+    'texte_table_ok' => ': denne tabel er OK.',
516
+    'texte_tentative_recuperation' => 'Reparationsforsøg',
517
+    'texte_tenter_reparation' => 'Forsøg på at reparere databasen',
518
+    'texte_test_proxy' => 'For at afprøve proxy’en, kan du indtaste adressen på et websted som du ønsker at teste.',
519
+    'texte_titre_02' => 'Emne:',
520
+    'texte_titre_obligatoire' => '<b>Overskrift</b> [Obligatorisk]',
521
+    'texte_travail_article' => '@nom_auteur_modif@ har arbejdet på denne artikel for @date_diff@ minutter siden',
522
+    'texte_travail_collaboratif' => 'Hvis det sker hyppigt at flere redaktører arbejder på samme artikel, kan systemet
523 523
 		vise «åbne» artikler for at undgå samtidige ændringer. Denne indstilling er som standard
524 524
 		slået fra for at undgå utidige advarselsmeddelelser.',
525
-	'texte_vide' => 'tom',
526
-	'texte_vider_cache' => 'Tøm cachen',
527
-	'titre_admin_tech' => 'Teknisk vedligeholdelse',
528
-	'titre_admin_vider' => 'Teknisk vedligeholdelse',
529
-	'titre_cadre_afficher_article' => 'Vis artikler som er',
530
-	'titre_cadre_afficher_traductions' => 'Vis oversættelsesstatus for følgende sprog:',
531
-	'titre_cadre_ajouter_auteur' => 'TILFØJ FORFATTER:',
532
-	'titre_cadre_interieur_rubrique' => 'I afsnit',
533
-	'titre_cadre_numero_auteur' => 'FORFATTER NUMMER',
534
-	'titre_cadre_signature_obligatoire' => '<b>Underskrift</b> [Obligatorisk]<br />',
535
-	'titre_config_fonctions' => 'Konfigurering af webstedet',
536
-	'titre_configuration' => 'Konfigurering af webstedet',
537
-	'titre_connexion_ldap' => 'Indstillinger: <b>Din LDAP forbindelse</b>',
538
-	'titre_groupe_mots' => 'NØGLEORDSGRUPPE:',
539
-	'titre_langue_article' => 'ARTIKLENS SPROG', # MODIF
540
-	'titre_langue_rubrique' => 'SPROGAFSNIT', # MODIF
541
-	'titre_langue_trad_article' => 'ARTIKLENS SPROG OG OVERSÆTTELSER',
542
-	'titre_les_articles' => 'ARTIKLER',
543
-	'titre_naviguer_dans_le_site' => 'Gennemse webstedet...',
544
-	'titre_nouvelle_rubrique' => 'Nyt afsnit',
545
-	'titre_numero_rubrique' => 'AFSNITSNUMMER:',
546
-	'titre_page_articles_edit' => 'Ret: @titre@',
547
-	'titre_page_articles_page' => 'Artikler',
548
-	'titre_page_articles_tous' => 'Hele webstedet',
549
-	'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
550
-	'titre_page_config_contenu' => 'Webstedskonfigurering',
551
-	'titre_page_delete_all' => 'total og uigenkaldelig sletning',
552
-	'titre_page_recherche' => 'Søgeresultater @recherche@',
553
-	'titre_page_statistiques_referers' => 'Statistik (indkommende links)',
554
-	'titre_page_upgrade' => 'SPIP opgradering',
555
-	'titre_publication_articles_post_dates' => 'Offentliggørelse af fremdaterede artikler',
556
-	'titre_reparation' => 'Reparer',
557
-	'titre_suivi_petition' => 'Opfølgning på appeller',
558
-	'trad_article_traduction' => 'Alle udgaver af denne artikel :',
559
-	'trad_delier' => 'Afbryd forbindelsen mellem denne artikel og oversættelserne', # MODIF
560
-	'trad_lier' => 'Denne artikel er en oversættelse af artikel nummer :',
561
-	'trad_new' => 'Lav en ny oversættelse af denne artikel' # MODIF
525
+    'texte_vide' => 'tom',
526
+    'texte_vider_cache' => 'Tøm cachen',
527
+    'titre_admin_tech' => 'Teknisk vedligeholdelse',
528
+    'titre_admin_vider' => 'Teknisk vedligeholdelse',
529
+    'titre_cadre_afficher_article' => 'Vis artikler som er',
530
+    'titre_cadre_afficher_traductions' => 'Vis oversættelsesstatus for følgende sprog:',
531
+    'titre_cadre_ajouter_auteur' => 'TILFØJ FORFATTER:',
532
+    'titre_cadre_interieur_rubrique' => 'I afsnit',
533
+    'titre_cadre_numero_auteur' => 'FORFATTER NUMMER',
534
+    'titre_cadre_signature_obligatoire' => '<b>Underskrift</b> [Obligatorisk]<br />',
535
+    'titre_config_fonctions' => 'Konfigurering af webstedet',
536
+    'titre_configuration' => 'Konfigurering af webstedet',
537
+    'titre_connexion_ldap' => 'Indstillinger: <b>Din LDAP forbindelse</b>',
538
+    'titre_groupe_mots' => 'NØGLEORDSGRUPPE:',
539
+    'titre_langue_article' => 'ARTIKLENS SPROG', # MODIF
540
+    'titre_langue_rubrique' => 'SPROGAFSNIT', # MODIF
541
+    'titre_langue_trad_article' => 'ARTIKLENS SPROG OG OVERSÆTTELSER',
542
+    'titre_les_articles' => 'ARTIKLER',
543
+    'titre_naviguer_dans_le_site' => 'Gennemse webstedet...',
544
+    'titre_nouvelle_rubrique' => 'Nyt afsnit',
545
+    'titre_numero_rubrique' => 'AFSNITSNUMMER:',
546
+    'titre_page_articles_edit' => 'Ret: @titre@',
547
+    'titre_page_articles_page' => 'Artikler',
548
+    'titre_page_articles_tous' => 'Hele webstedet',
549
+    'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
550
+    'titre_page_config_contenu' => 'Webstedskonfigurering',
551
+    'titre_page_delete_all' => 'total og uigenkaldelig sletning',
552
+    'titre_page_recherche' => 'Søgeresultater @recherche@',
553
+    'titre_page_statistiques_referers' => 'Statistik (indkommende links)',
554
+    'titre_page_upgrade' => 'SPIP opgradering',
555
+    'titre_publication_articles_post_dates' => 'Offentliggørelse af fremdaterede artikler',
556
+    'titre_reparation' => 'Reparer',
557
+    'titre_suivi_petition' => 'Opfølgning på appeller',
558
+    'trad_article_traduction' => 'Alle udgaver af denne artikel :',
559
+    'trad_delier' => 'Afbryd forbindelsen mellem denne artikel og oversættelserne', # MODIF
560
+    'trad_lier' => 'Denne artikel er en oversættelse af artikel nummer :',
561
+    'trad_new' => 'Lav en ny oversættelse af denne artikel' # MODIF
562 562
 );
Please login to merge, or discard this patch.
ecrire/lang/ecrire_ay.php 1 patch
Indentation   +190 added lines, -190 removed lines patch added patch discarded remove patch
@@ -4,211 +4,211 @@
 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
-	'activer_plugin' => 'Plugin uk naktayaña
12
+    // A
13
+    'activer_plugin' => 'Plugin uk naktayaña
14 14
 ',
15
-	'aide_non_disponible' => 'Aka yanapa naktatxa janiw aka arunx wakitakiti.',
16
-	'auteur' => 'Qillqiri:',
17
-	'avis_acces_interdit' => 'Mantawx jark’ata.',
18
-	'avis_article_modifie' => 'Amuyam @nom_auteur_modif@ aka qillqatax irnaqataw @date_diff@ ninkharata.',
19
-	'avis_aucun_resultat' => 'Janiw askichat utjkiti.
15
+    'aide_non_disponible' => 'Aka yanapa naktatxa janiw aka arunx wakitakiti.',
16
+    'auteur' => 'Qillqiri:',
17
+    'avis_acces_interdit' => 'Mantawx jark’ata.',
18
+    'avis_article_modifie' => 'Amuyam @nom_auteur_modif@ aka qillqatax irnaqataw @date_diff@ ninkharata.',
19
+    'avis_aucun_resultat' => 'Janiw askichat utjkiti.
20 20
 ',
21
-	'avis_chemin_invalide_1' => 'Thakhix ajllita',
22
-	'avis_chemin_invalide_2' => 'Jan jamakiw iyaw satakiti. Nayrt’ir laphi uñnaqar kutt’am ukatsti jikit yatiyawinak qhanstayam.',
23
-	'avis_connexion_echec_1' => 'Chinuwix jalanuqirirux janiw walt’kiti MySQL.',
24
-	'avis_connexion_echec_2' => 'Arkir laphi uñnaqar kutt’am ukatsti jikit yatiyawinaka mayamp uñjam.',
25
-	'avis_connexion_echec_3' => '&lt;b&gt;Amuyam:&lt;/b&gt; Walja jalanuqirinakana, munasiwa &lt;b&gt;mayiña&lt;/b&gt; mantawitx naktata yatqalltawiru MySQL janir apnaqasa. Janitix chinusiñ puyrktaxa mayampi uñjam lartax ukja.',
26
-	'avis_connexion_ldap_echec_1' => 'Jalanuqirirux chinuwi ukaxa LDAP janiw walt’kiti.',
27
-	'avis_connexion_ldap_echec_2' => 'Nayrir laphi uñnaqar kutt’am ukatsti jikit yatiyawinak qhanstayam.',
28
-	'avis_connexion_ldap_echec_3' => 'Mayakipawjam, askichir ukax jan apnaqamti LDAP apnaqirinak apayaniñataki.',
29
-	'avis_deplacement_rubrique' => '¡AMUYAM! Aka t’aqan utjiwa @contient_breves@ breve@scb@. Janitix yäqtaxa,  iyaw sat casilla uk naktayam.',
30
-	'avis_erreur_connexion_mysql' => 'Chinuw pantjata MySQL',
31
-	'avis_espace_interdit' => '<b>Ch’usawx jark’ata</b> <div>SPIP ukax uchantataxiwa</div>',
32
-	'avis_lecture_noms_bases_1' => 'Uchantat pirwa yatiyawinakatxa uchantir prugramaxa janiw liykiti.',
33
-	'avis_lecture_noms_bases_3' => 'Payir lurawinxa, inas mä pirwa apnaqiri sutimampi apnaqasispa:',
34
-	'avis_non_acces_page' => 'Aka laphi uñnaqarux janiw mantañaniktati.',
35
-	'avis_operation_echec' => 'Lurawix janiw walt’kiti.',
36
-	'avis_operation_impossible' => 'Lurawix janipuni',
37
-	'avis_suppression_base' => '¡AMUYAM, apaqat yatiyawinakax janiw askichaskaspati!',
21
+    'avis_chemin_invalide_1' => 'Thakhix ajllita',
22
+    'avis_chemin_invalide_2' => 'Jan jamakiw iyaw satakiti. Nayrt’ir laphi uñnaqar kutt’am ukatsti jikit yatiyawinak qhanstayam.',
23
+    'avis_connexion_echec_1' => 'Chinuwix jalanuqirirux janiw walt’kiti MySQL.',
24
+    'avis_connexion_echec_2' => 'Arkir laphi uñnaqar kutt’am ukatsti jikit yatiyawinaka mayamp uñjam.',
25
+    'avis_connexion_echec_3' => '&lt;b&gt;Amuyam:&lt;/b&gt; Walja jalanuqirinakana, munasiwa &lt;b&gt;mayiña&lt;/b&gt; mantawitx naktata yatqalltawiru MySQL janir apnaqasa. Janitix chinusiñ puyrktaxa mayampi uñjam lartax ukja.',
26
+    'avis_connexion_ldap_echec_1' => 'Jalanuqirirux chinuwi ukaxa LDAP janiw walt’kiti.',
27
+    'avis_connexion_ldap_echec_2' => 'Nayrir laphi uñnaqar kutt’am ukatsti jikit yatiyawinak qhanstayam.',
28
+    'avis_connexion_ldap_echec_3' => 'Mayakipawjam, askichir ukax jan apnaqamti LDAP apnaqirinak apayaniñataki.',
29
+    'avis_deplacement_rubrique' => '¡AMUYAM! Aka t’aqan utjiwa @contient_breves@ breve@scb@. Janitix yäqtaxa,  iyaw sat casilla uk naktayam.',
30
+    'avis_erreur_connexion_mysql' => 'Chinuw pantjata MySQL',
31
+    'avis_espace_interdit' => '<b>Ch’usawx jark’ata</b> <div>SPIP ukax uchantataxiwa</div>',
32
+    'avis_lecture_noms_bases_1' => 'Uchantat pirwa yatiyawinakatxa uchantir prugramaxa janiw liykiti.',
33
+    'avis_lecture_noms_bases_3' => 'Payir lurawinxa, inas mä pirwa apnaqiri sutimampi apnaqasispa:',
34
+    'avis_non_acces_page' => 'Aka laphi uñnaqarux janiw mantañaniktati.',
35
+    'avis_operation_echec' => 'Lurawix janiw walt’kiti.',
36
+    'avis_operation_impossible' => 'Lurawix janipuni',
37
+    'avis_suppression_base' => '¡AMUYAM, apaqat yatiyawinakax janiw askichaskaspati!',
38 38
 
39
-	// B
40
-	'bouton_acces_ldap' => 'Mä mantaw yapaña LDAP',
41
-	'bouton_ajouter' => 'Yapaña',
42
-	'bouton_annuler' => 'Jiwt’ayaña',
43
-	'bouton_demande_publication' => 'Aka qillqat yatiyañ mayiña',
44
-	'bouton_desactive_tout' => 'Taqpach jiwt’ayaña',
45
-	'bouton_effacer_tout' => '¡Taqpach chhaqhayaña!',
46
-	'bouton_envoyer_message' => 'Qhananchat yatiyaw: apayaña',
47
-	'bouton_modifier' => 'Mayjachaña',
48
-	'bouton_radio_afficher' => 'Uñachayaña',
49
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Chint’at tanta qillqirinakan uñstaña',
50
-	'bouton_radio_envoi_annonces_adresse' => 'Yatiyawinak utjawir apayaña:',
51
-	'bouton_radio_envoi_liste_nouveautes' => 'Machaq tanta yatiyawinak apayaña',
52
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Tanta qillqirinakan jan uñstaña',
53
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Yatiyawinak qhanstat jan apayaña',
54
-	'bouton_redirection' => 'Irpxatawi',
55
-	'bouton_relancer_installation' => 'Mayamp uchantaw yatiyaña',
56
-	'bouton_suivant' => 'Jutiri',
57
-	'bouton_tenter_recuperation' => 'Askichañ yant’aña',
58
-	'bouton_test_proxy' => 'proxy uk yant’aña',
59
-	'bouton_vider_cache' => 'caché uk ch’usachaña',
39
+    // B
40
+    'bouton_acces_ldap' => 'Mä mantaw yapaña LDAP',
41
+    'bouton_ajouter' => 'Yapaña',
42
+    'bouton_annuler' => 'Jiwt’ayaña',
43
+    'bouton_demande_publication' => 'Aka qillqat yatiyañ mayiña',
44
+    'bouton_desactive_tout' => 'Taqpach jiwt’ayaña',
45
+    'bouton_effacer_tout' => '¡Taqpach chhaqhayaña!',
46
+    'bouton_envoyer_message' => 'Qhananchat yatiyaw: apayaña',
47
+    'bouton_modifier' => 'Mayjachaña',
48
+    'bouton_radio_afficher' => 'Uñachayaña',
49
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Chint’at tanta qillqirinakan uñstaña',
50
+    'bouton_radio_envoi_annonces_adresse' => 'Yatiyawinak utjawir apayaña:',
51
+    'bouton_radio_envoi_liste_nouveautes' => 'Machaq tanta yatiyawinak apayaña',
52
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Tanta qillqirinakan jan uñstaña',
53
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Yatiyawinak qhanstat jan apayaña',
54
+    'bouton_redirection' => 'Irpxatawi',
55
+    'bouton_relancer_installation' => 'Mayamp uchantaw yatiyaña',
56
+    'bouton_suivant' => 'Jutiri',
57
+    'bouton_tenter_recuperation' => 'Askichañ yant’aña',
58
+    'bouton_test_proxy' => 'proxy uk yant’aña',
59
+    'bouton_vider_cache' => 'caché uk ch’usachaña',
60 60
 
61
-	// C
62
-	'cache_modifiable_webmestre' => 'Aka amuykipawix mayxt’ataspaw webmistress qamawit ukata.',
61
+    // C
62
+    'cache_modifiable_webmestre' => 'Aka amuykipawix mayxt’ataspaw webmistress qamawit ukata.',
63 63
 
64
-	// D
65
-	'date_mot_heures' => 'urasa
64
+    // D
65
+    'date_mot_heures' => 'urasa
66 66
 ',
67 67
 
68
-	// E
69
-	'email' => 'aruskipayiri',
70
-	'email_2' => 'aruskipayiri:
68
+    // E
69
+    'email' => 'aruskipayiri',
70
+    'email_2' => 'aruskipayiri:
71 71
 ',
72
-	'entree_adresse_annuaire' => 'Marpachat utjawi',
73
-	'entree_adresse_email' => 'Aruskipayirima',
74
-	'entree_base_donnee_1' => 'Pirwat yatiyawinakaxa utjawi',
75
-	'entree_biographie' => 'Mä juk’a jakawipat qillqa, juk’a arunakampi...',
76
-	'entree_chemin_acces' => '<b>Mantaña</b> mantañ thakhixa:',
77
-	'entree_cle_pgp' => 'Impt’atama PGP',
78
-	'entree_contenu_rubrique' => '(T’aqan utjawipa, qawqha arunakampi)',
79
-	'entree_identifiants_connexion' => 'Chinuw uñacht’ayirinakama...',
80
-	'entree_informations_connexion_ldap' => 'Aka phuqañ laphina yatiyawinak conexión ukata jach’a q’ipimaru LDAP. Uka yatiyawinakxa yatiyanitamwa apnaqir apnaqawita jan ukjax red ukata',
81
-	'entree_infos_perso' => '¿Khititasa?',
82
-	'entree_interieur_rubrique' => 'T’aqata maqhana...',
83
-	'entree_liens_sites' => '<b>Chinu jach’a sawu </b>(aytata, qamaw tumpañataki, ...)',
84
-	'entree_login' => 'Sutichatama',
85
-	'entree_login_connexion_1' => 'Chinu uñacht’ayirima',
86
-	'entree_mot_passe' => 'Imt’awima',
87
-	'entree_mot_passe_1' => 'Chinu imt’awima',
88
-	'entree_mot_passe_2' => '(Awisax FTP imt’atamar ukankiwa ukatsti awisax ch’usak jayti)',
89
-	'entree_nom_fichier' => 'K’ipit sutipa uk uchantaña @texte_compresse@:',
90
-	'entree_nom_pseudo' => 'Sutima jan ukax sutinchama',
91
-	'entree_nom_pseudo_1' => 'Sutima jan ukax sutinchama',
92
-	'entree_nom_site' => 'Qamawiman sutipa',
93
-	'entree_nouveau_passe' => 'Machaq imt’awima',
94
-	'entree_passe_ldap' => 'Imt’awima',
95
-	'entree_port_annuaire' => 'Marpachat thakhin jakhu',
96
-	'entree_signature' => 'Iyawsa',
97
-	'entree_titre_obligatoire' => '<b>Sutinchata</b> [Obligatorio]<br />',
98
-	'entree_url' => 'Utjawi(URL) qamawimata',
99
-	'erreur_plugin_fichier_absent' => 'Jan utjaw q’ipi
72
+    'entree_adresse_annuaire' => 'Marpachat utjawi',
73
+    'entree_adresse_email' => 'Aruskipayirima',
74
+    'entree_base_donnee_1' => 'Pirwat yatiyawinakaxa utjawi',
75
+    'entree_biographie' => 'Mä juk’a jakawipat qillqa, juk’a arunakampi...',
76
+    'entree_chemin_acces' => '<b>Mantaña</b> mantañ thakhixa:',
77
+    'entree_cle_pgp' => 'Impt’atama PGP',
78
+    'entree_contenu_rubrique' => '(T’aqan utjawipa, qawqha arunakampi)',
79
+    'entree_identifiants_connexion' => 'Chinuw uñacht’ayirinakama...',
80
+    'entree_informations_connexion_ldap' => 'Aka phuqañ laphina yatiyawinak conexión ukata jach’a q’ipimaru LDAP. Uka yatiyawinakxa yatiyanitamwa apnaqir apnaqawita jan ukjax red ukata',
81
+    'entree_infos_perso' => '¿Khititasa?',
82
+    'entree_interieur_rubrique' => 'T’aqata maqhana...',
83
+    'entree_liens_sites' => '<b>Chinu jach’a sawu </b>(aytata, qamaw tumpañataki, ...)',
84
+    'entree_login' => 'Sutichatama',
85
+    'entree_login_connexion_1' => 'Chinu uñacht’ayirima',
86
+    'entree_mot_passe' => 'Imt’awima',
87
+    'entree_mot_passe_1' => 'Chinu imt’awima',
88
+    'entree_mot_passe_2' => '(Awisax FTP imt’atamar ukankiwa ukatsti awisax ch’usak jayti)',
89
+    'entree_nom_fichier' => 'K’ipit sutipa uk uchantaña @texte_compresse@:',
90
+    'entree_nom_pseudo' => 'Sutima jan ukax sutinchama',
91
+    'entree_nom_pseudo_1' => 'Sutima jan ukax sutinchama',
92
+    'entree_nom_site' => 'Qamawiman sutipa',
93
+    'entree_nouveau_passe' => 'Machaq imt’awima',
94
+    'entree_passe_ldap' => 'Imt’awima',
95
+    'entree_port_annuaire' => 'Marpachat thakhin jakhu',
96
+    'entree_signature' => 'Iyawsa',
97
+    'entree_titre_obligatoire' => '<b>Sutinchata</b> [Obligatorio]<br />',
98
+    'entree_url' => 'Utjawi(URL) qamawimata',
99
+    'erreur_plugin_fichier_absent' => 'Jan utjaw q’ipi
100 100
 ',
101
-	'erreur_plugin_fichier_def_absent' => 'Qhanstayat q’ipix janiw utjkiti',
102
-	'erreur_plugin_nom_fonction_interdit' => 'Lurt’awit sutix jark’ata',
103
-	'erreur_plugin_nom_manquant' => 'Jan utjawi plugin ukan sutipa',
104
-	'erreur_plugin_prefix_manquant' => 'Sutinakat ch’usawj pluguin ukat jan qhanstata',
105
-	'erreur_plugin_tag_plugin_absent' => 'Janiw utjkiti &lt;plugin&gt; qhanstayawin q’ipita',
106
-	'erreur_plugin_version_manquant' => 'Pluguin ukat uñjata jan utjkiti',
101
+    'erreur_plugin_fichier_def_absent' => 'Qhanstayat q’ipix janiw utjkiti',
102
+    'erreur_plugin_nom_fonction_interdit' => 'Lurt’awit sutix jark’ata',
103
+    'erreur_plugin_nom_manquant' => 'Jan utjawi plugin ukan sutipa',
104
+    'erreur_plugin_prefix_manquant' => 'Sutinakat ch’usawj pluguin ukat jan qhanstata',
105
+    'erreur_plugin_tag_plugin_absent' => 'Janiw utjkiti &lt;plugin&gt; qhanstayawin q’ipita',
106
+    'erreur_plugin_version_manquant' => 'Pluguin ukat uñjata jan utjkiti',
107 107
 
108
-	// I
109
-	'ical_info1' => 'Aka qamawinxa kunayman lurawinak chinusiñataki utji qamaw utjawipampi',
110
-	'ical_info2' => 'Aka taqpach lurawinakxat juk’amp yatxatañatakix, yatxatañatakix jan pächasimti <a href="@spipnet@">illqanakawi</a>.', # MODIF
111
-	'ical_info_calendrier' => 'Pä pachachimpuw utjtam. Mayirix qamawit mä laphi uñnaqawa kunanti taqpach yatiyat qillqatank yatiyi: jumakiw uñjtax uka mä suti imt’awi ukata, ukatxa mayjt’ayasmaw kuna pachtix munktax ukja imt’awim mayjt’ayasa.',
112
-	'ical_methode_http' => 'Apaqaña',
113
-	'ical_methode_webcal' => 'Kikipawi (webcal://)', # MODIF
114
-	'ical_texte_prive' => 'Aka sapa maynit pacha chimpuxa, aka qamawit jark’ata lurawinak yatiytam (lurawinaka ukatsti sapa maynit aytatanaka, qillqatanaka ukatsti jisk’aptat amtanaka...)',
115
-	'ical_texte_public' => 'Aka pacha chimpux uñchukiytam qamawit lurawinaka (qillqatanak ukatsti jisk’aptatanak yatiyata).',
116
-	'ical_texte_rss' => 'Machaq yatiyawinak aka qamawitxa apxasismaw kawkir q’ipinak liyt’irimpi XML/RSS (Rich Site Summary) utt’ayataru. Ukhamaraki SPIP ukax liyt’aspaw machaq yatiyat yatiyawinaka yaqha qamawinakana kawkinti turkakipaw utt’ayatampi lurapxi (apxasit qamawinaka). ',
117
-	'ical_titre_js' => 'Javascript',
118
-	'ical_titre_mailing' => 'Aruskipayirit tanta',
119
-	'ical_titre_rss' => 'Apxasit q’ipinaka',
120
-	'icone_activer_cookie' => '“Cookie” uk naktayaña yatiyawinakata',
121
-	'icone_admin_plugin' => 'Pluguin ukanakat apnaqawi',
122
-	'icone_afficher_auteurs' => 'Qillqirinaka uñachayaña',
123
-	'icone_afficher_visiteurs' => 'Tumpirinaka uñachayaña',
124
-	'icone_arret_discussion' => 'Aka aruskipawin jan mayamp arst’añati',
125
-	'icone_calendrier' => 'Pachachimpu',
126
-	'icone_creer_auteur' => 'Mä machaq qillqiri uñstayaña ukatsti aka qillqatar mayacht’aña',
127
-	'icone_creer_rubrique_2' => 'Mä machaq t’aqa uñstayaña',
128
-	'icone_modifier_article' => 'Aka qillqata mayjt’ayaña',
129
-	'icone_modifier_rubrique' => 'Aka t’aqa mayjt’ayaña',
130
-	'icone_retour' => 'Kutiña',
131
-	'icone_retour_article' => 'Qillqatar kutiña',
132
-	'icone_supprimer_cookie' => '\\&quot;Cookie\\&quot; uk apaqaña yatiyawinakata ',
133
-	'icone_supprimer_rubrique' => 'Aka t’aqa a paqayaña',
134
-	'icone_supprimer_signature' => 'Aka iyawsa apaqaña',
135
-	'icone_valider_signature' => 'Aka iyaws iyaw saña',
136
-	'image_administrer_rubrique' => 'Aka t’aqa apnaqasmawa',
137
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
138
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
139
-	'info_1_article' => '1 qillqata',
140
-	'info_administrateur' => 'Apnaqiri',
141
-	'info_administrateur_1' => 'Apnaqiri',
142
-	'info_administrateur_2' => 'Qamawita (<i>amuyump luram</i>)',
143
-	'info_administrateur_site_02' => 'Aka chinunx limt’am',
144
-	'info_administrateurs' => 'Apnaqirinaka',
145
-	'info_administrer_rubrique' => 'Aka t’aqxa apnaqasmawa',
146
-	'info_adresse' => 'utjawiru:',
147
-	'info_adresse_url' => 'Utjawi (URL) jach’a qamaw utata',
148
-	'info_aide_en_ligne' => 'SPIP naktatat yanapa',
149
-	'info_ajouter_rubrique' => 'Apnaqañatakix yaqha t’aqa yapaña',
150
-	'info_annonce_nouveautes' => 'Machaq yatiyawinaka yatiyaña',
151
-	'info_article' => 'qillqata
108
+    // I
109
+    'ical_info1' => 'Aka qamawinxa kunayman lurawinak chinusiñataki utji qamaw utjawipampi',
110
+    'ical_info2' => 'Aka taqpach lurawinakxat juk’amp yatxatañatakix, yatxatañatakix jan pächasimti <a href="@spipnet@">illqanakawi</a>.', # MODIF
111
+    'ical_info_calendrier' => 'Pä pachachimpuw utjtam. Mayirix qamawit mä laphi uñnaqawa kunanti taqpach yatiyat qillqatank yatiyi: jumakiw uñjtax uka mä suti imt’awi ukata, ukatxa mayjt’ayasmaw kuna pachtix munktax ukja imt’awim mayjt’ayasa.',
112
+    'ical_methode_http' => 'Apaqaña',
113
+    'ical_methode_webcal' => 'Kikipawi (webcal://)', # MODIF
114
+    'ical_texte_prive' => 'Aka sapa maynit pacha chimpuxa, aka qamawit jark’ata lurawinak yatiytam (lurawinaka ukatsti sapa maynit aytatanaka, qillqatanaka ukatsti jisk’aptat amtanaka...)',
115
+    'ical_texte_public' => 'Aka pacha chimpux uñchukiytam qamawit lurawinaka (qillqatanak ukatsti jisk’aptatanak yatiyata).',
116
+    'ical_texte_rss' => 'Machaq yatiyawinak aka qamawitxa apxasismaw kawkir q’ipinak liyt’irimpi XML/RSS (Rich Site Summary) utt’ayataru. Ukhamaraki SPIP ukax liyt’aspaw machaq yatiyat yatiyawinaka yaqha qamawinakana kawkinti turkakipaw utt’ayatampi lurapxi (apxasit qamawinaka). ',
117
+    'ical_titre_js' => 'Javascript',
118
+    'ical_titre_mailing' => 'Aruskipayirit tanta',
119
+    'ical_titre_rss' => 'Apxasit q’ipinaka',
120
+    'icone_activer_cookie' => '“Cookie” uk naktayaña yatiyawinakata',
121
+    'icone_admin_plugin' => 'Pluguin ukanakat apnaqawi',
122
+    'icone_afficher_auteurs' => 'Qillqirinaka uñachayaña',
123
+    'icone_afficher_visiteurs' => 'Tumpirinaka uñachayaña',
124
+    'icone_arret_discussion' => 'Aka aruskipawin jan mayamp arst’añati',
125
+    'icone_calendrier' => 'Pachachimpu',
126
+    'icone_creer_auteur' => 'Mä machaq qillqiri uñstayaña ukatsti aka qillqatar mayacht’aña',
127
+    'icone_creer_rubrique_2' => 'Mä machaq t’aqa uñstayaña',
128
+    'icone_modifier_article' => 'Aka qillqata mayjt’ayaña',
129
+    'icone_modifier_rubrique' => 'Aka t’aqa mayjt’ayaña',
130
+    'icone_retour' => 'Kutiña',
131
+    'icone_retour_article' => 'Qillqatar kutiña',
132
+    'icone_supprimer_cookie' => '\\&quot;Cookie\\&quot; uk apaqaña yatiyawinakata ',
133
+    'icone_supprimer_rubrique' => 'Aka t’aqa a paqayaña',
134
+    'icone_supprimer_signature' => 'Aka iyawsa apaqaña',
135
+    'icone_valider_signature' => 'Aka iyaws iyaw saña',
136
+    'image_administrer_rubrique' => 'Aka t’aqa apnaqasmawa',
137
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
138
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
139
+    'info_1_article' => '1 qillqata',
140
+    'info_administrateur' => 'Apnaqiri',
141
+    'info_administrateur_1' => 'Apnaqiri',
142
+    'info_administrateur_2' => 'Qamawita (<i>amuyump luram</i>)',
143
+    'info_administrateur_site_02' => 'Aka chinunx limt’am',
144
+    'info_administrateurs' => 'Apnaqirinaka',
145
+    'info_administrer_rubrique' => 'Aka t’aqxa apnaqasmawa',
146
+    'info_adresse' => 'utjawiru:',
147
+    'info_adresse_url' => 'Utjawi (URL) jach’a qamaw utata',
148
+    'info_aide_en_ligne' => 'SPIP naktatat yanapa',
149
+    'info_ajouter_rubrique' => 'Apnaqañatakix yaqha t’aqa yapaña',
150
+    'info_annonce_nouveautes' => 'Machaq yatiyawinaka yatiyaña',
151
+    'info_article' => 'qillqata
152 152
 ',
153
-	'info_article_2' => 'qillqatanaka',
154
-	'info_article_a_paraitre' => 'Qillqatanak jutir urumpi yatiyataru',
155
-	'info_articles_02' => 'qillqatanaka',
156
-	'info_articles_2' => 'Qillqatanaka',
157
-	'info_articles_auteur' => 'Aka qillqirit qillqatanaka',
158
-	'info_articles_trouves' => 'Qillqatanak jikita',
159
-	'info_attente_validation' => 'Qillqatanakax iyaw sañataki suyaski',
160
-	'info_aujourdhui' => 'jichhüru:',
161
-	'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', # MODIF
162
-	'info_auteurs' => 'Qillqirinaka',
163
-	'info_auteurs_par_tri' => 'Qillqirinaka@partri@',
164
-	'info_auteurs_trouves' => 'Qillqirinaka jikita',
165
-	'info_authentification_externe' => 'Anqax chiqpach siriwi',
166
-	'info_avertissement' => 'Amuyam',
167
-	'info_base_installee' => 'Ch’akha ch’akha pirwa yatiyawinakamatxa uchantataxiwa',
168
-	'info_chapeau' => 'Qalltawi',
169
-	'info_chapeau_2' => 'Qalltawi:',
170
-	'info_chemin_acces_1' => 'Ajlliñatakiwa:  &lt;b&gt;&lt;/b&gt;mantañ thakhita jach’a q’ipina&lt;/b&gt;',
171
-	'info_chemin_acces_annuaire' => 'Ajllañatakiwa:  &lt;b&gt;Mantañ thakhi jach’a q’ipina&lt;/b&gt;',
172
-	'info_choix_base' => 'Kimsir sarawi:',
173
-	'info_classement_1' => '° ukjaru @liste@',
174
-	'info_classement_2' => '° ukjaru @liste@ 
153
+    'info_article_2' => 'qillqatanaka',
154
+    'info_article_a_paraitre' => 'Qillqatanak jutir urumpi yatiyataru',
155
+    'info_articles_02' => 'qillqatanaka',
156
+    'info_articles_2' => 'Qillqatanaka',
157
+    'info_articles_auteur' => 'Aka qillqirit qillqatanaka',
158
+    'info_articles_trouves' => 'Qillqatanak jikita',
159
+    'info_attente_validation' => 'Qillqatanakax iyaw sañataki suyaski',
160
+    'info_aujourdhui' => 'jichhüru:',
161
+    'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', # MODIF
162
+    'info_auteurs' => 'Qillqirinaka',
163
+    'info_auteurs_par_tri' => 'Qillqirinaka@partri@',
164
+    'info_auteurs_trouves' => 'Qillqirinaka jikita',
165
+    'info_authentification_externe' => 'Anqax chiqpach siriwi',
166
+    'info_avertissement' => 'Amuyam',
167
+    'info_base_installee' => 'Ch’akha ch’akha pirwa yatiyawinakamatxa uchantataxiwa',
168
+    'info_chapeau' => 'Qalltawi',
169
+    'info_chapeau_2' => 'Qalltawi:',
170
+    'info_chemin_acces_1' => 'Ajlliñatakiwa:  &lt;b&gt;&lt;/b&gt;mantañ thakhita jach’a q’ipina&lt;/b&gt;',
171
+    'info_chemin_acces_annuaire' => 'Ajllañatakiwa:  &lt;b&gt;Mantañ thakhi jach’a q’ipina&lt;/b&gt;',
172
+    'info_choix_base' => 'Kimsir sarawi:',
173
+    'info_classement_1' => '° ukjaru @liste@',
174
+    'info_classement_2' => '° ukjaru @liste@ 
175 175
 ',
176
-	'info_code_acces' => '¡Mantañ chimpunakam jan armasimti!',
177
-	'info_config_suivi_explication' => 'Tanta aruskipayiriru aka qamawitxa qillqayasismaw. Aruskipayiritxa qillqatanakat yatiyawinak qatuqata ukatsti jisk’aptat amtatanak yatiyatawiru.',
178
-	'info_confirmer_passe' => 'Machaq imt’aw iyaw saña: ',
179
-	'info_connexion_base' => 'Payir sarawi: &lt;b&gt;chinuñ yant’awi base ukaru&lt;/b&gt;',
180
-	'info_connexion_ldap_ok' => 'LDAP chinuwix lurt’xiwa.</b><p> jutir sarawir sarantasmawa.</p>', # MODIF
181
-	'info_connexion_mysql' => 'Mayir sarawi: <b> MySQL chinuwima</b>',
182
-	'info_connexion_ok' => 'Chinuwix lurt’xiwa.',
183
-	'info_contact' => 'Jikxatata',
184
-	'info_contenu_articles' => 'Qillqatanakat utjawi',
185
-	'info_creation_paragraphe' => ' (Tanta amuyunak uñstayañatakix, ch’usa siqinak jaytam)', # MODIF
186
-	'info_creation_rubrique' => 'Janir qillqatanak qillt’asinxa, &lt;br /&gt; mä t’aqa uñstayañama.&lt;br /&gt;',
187
-	'info_creation_tables' => 'Pusir sarawi: &lt;b&gt;base ukat uyu uyunakat uñstayawi&lt;/b&gt; ',
188
-	'info_creer_base' => '&lt;b&gt;uñstayaña&lt;/b&gt; mä machaq yatiyawinak pirwa: ',
189
-	'info_dans_rubrique' => 'T’aqanxa...',
190
-	'info_date_publication_anterieure' => 'Nayrt’ir uru aka qillqawita',
191
-	'info_date_referencement' => 'APXASIW URU AKA QAMAWITA:',
192
-	'info_derniere_etape' => 'Qhipa sarawi: ¡tukuytanwa!',
193
-	'info_descriptif' => 'Uñt’ayawi:',
194
-	'info_discussion_cours' => 'Amuyt’awinakax lurasiskiw',
195
-	'info_ecrire_article' => 'Janir qillqatanak qillqasinxa, mä t’aqa uñstayañamawa.',
196
-	'info_email_envoi' => 'Apaw aruskipayirit utjawipa (ajlliñatakiwa)',
197
-	'info_email_webmestre' => 'Aruskipayirit utjawipa webmaster ukata (ajlliñatakiwa)', # MODIF
198
-	'info_envoi_email_automatique' => 'Aruskipayirinakat justup apayawi',
199
-	'info_envoyer_maintenant' => 'Jichhaki apayaña',
200
-	'info_etape_suivante' => 'Arkir sarawir sarantaña',
201
-	'info_etape_suivante_1' => 'Arkir sarawir sarantasmawa',
202
-	'info_etape_suivante_2' => 'Arkir sarawir sarantasmawa',
203
-	'info_exportation_base' => 'base ukax apsusispaw @archive@ uka tuqiru',
204
-	'info_facilite_suivi_activite' => 'Qillqa lurawit uñch’ukiw jasachañatakix, SPIP ukax aruskipayirit apayaspa, mä tanta qillqirinakar ukhama yatiyatawinakataki yatiyawinaka ukatak mayiwinaka, ukhamarak qillqatanakat iyaw sawi.', # MODIF
205
-	'info_fichiers_authent' => 'Chiqpach sirit q’ipinaka «.htpasswd» ',
206
-	'info_forums_abo_invites' => 'Qamawimax aruskipañawinakaniw qullqimp qillqatanakatakikiwa; Aka jach’a uta qamawinxa tumpirinakaru qillqayasiñataki jawthapiyi.',
207
-	'info_gauche_auteurs' => 'Akanxa taqpach qamawit qillqirinakaw uñsti. Kunjamaskis ukxa jisk’a saltan kulurapampiw   uñacht’ayi (apnaqiri = ch’uxña, qillqiri = q’illu).',
208
-	'info_gauche_auteurs_exterieurs' => 'Anqajankir qillqirinakax, qamawir jan mantañaniwa, mä laram jisk’a saltampiw uñacht’ayataski; mä wayaqamp chhaqayatakis.', # MODIF
209
-	'info_gauche_messagerie' => 'Yatiyawirix yatiyasiwa, amtayirinak uñstyaña yatiyaw tantaru kuns apaniñapataki jan ukjax yatiyawinak yatiyaña ( apnaqir qutu ukar mayachatakis ukjax)
176
+    'info_code_acces' => '¡Mantañ chimpunakam jan armasimti!',
177
+    'info_config_suivi_explication' => 'Tanta aruskipayiriru aka qamawitxa qillqayasismaw. Aruskipayiritxa qillqatanakat yatiyawinak qatuqata ukatsti jisk’aptat amtatanak yatiyatawiru.',
178
+    'info_confirmer_passe' => 'Machaq imt’aw iyaw saña: ',
179
+    'info_connexion_base' => 'Payir sarawi: &lt;b&gt;chinuñ yant’awi base ukaru&lt;/b&gt;',
180
+    'info_connexion_ldap_ok' => 'LDAP chinuwix lurt’xiwa.</b><p> jutir sarawir sarantasmawa.</p>', # MODIF
181
+    'info_connexion_mysql' => 'Mayir sarawi: <b> MySQL chinuwima</b>',
182
+    'info_connexion_ok' => 'Chinuwix lurt’xiwa.',
183
+    'info_contact' => 'Jikxatata',
184
+    'info_contenu_articles' => 'Qillqatanakat utjawi',
185
+    'info_creation_paragraphe' => ' (Tanta amuyunak uñstayañatakix, ch’usa siqinak jaytam)', # MODIF
186
+    'info_creation_rubrique' => 'Janir qillqatanak qillt’asinxa, &lt;br /&gt; mä t’aqa uñstayañama.&lt;br /&gt;',
187
+    'info_creation_tables' => 'Pusir sarawi: &lt;b&gt;base ukat uyu uyunakat uñstayawi&lt;/b&gt; ',
188
+    'info_creer_base' => '&lt;b&gt;uñstayaña&lt;/b&gt; mä machaq yatiyawinak pirwa: ',
189
+    'info_dans_rubrique' => 'T’aqanxa...',
190
+    'info_date_publication_anterieure' => 'Nayrt’ir uru aka qillqawita',
191
+    'info_date_referencement' => 'APXASIW URU AKA QAMAWITA:',
192
+    'info_derniere_etape' => 'Qhipa sarawi: ¡tukuytanwa!',
193
+    'info_descriptif' => 'Uñt’ayawi:',
194
+    'info_discussion_cours' => 'Amuyt’awinakax lurasiskiw',
195
+    'info_ecrire_article' => 'Janir qillqatanak qillqasinxa, mä t’aqa uñstayañamawa.',
196
+    'info_email_envoi' => 'Apaw aruskipayirit utjawipa (ajlliñatakiwa)',
197
+    'info_email_webmestre' => 'Aruskipayirit utjawipa webmaster ukata (ajlliñatakiwa)', # MODIF
198
+    'info_envoi_email_automatique' => 'Aruskipayirinakat justup apayawi',
199
+    'info_envoyer_maintenant' => 'Jichhaki apayaña',
200
+    'info_etape_suivante' => 'Arkir sarawir sarantaña',
201
+    'info_etape_suivante_1' => 'Arkir sarawir sarantasmawa',
202
+    'info_etape_suivante_2' => 'Arkir sarawir sarantasmawa',
203
+    'info_exportation_base' => 'base ukax apsusispaw @archive@ uka tuqiru',
204
+    'info_facilite_suivi_activite' => 'Qillqa lurawit uñch’ukiw jasachañatakix, SPIP ukax aruskipayirit apayaspa, mä tanta qillqirinakar ukhama yatiyatawinakataki yatiyawinaka ukatak mayiwinaka, ukhamarak qillqatanakat iyaw sawi.', # MODIF
205
+    'info_fichiers_authent' => 'Chiqpach sirit q’ipinaka «.htpasswd» ',
206
+    'info_forums_abo_invites' => 'Qamawimax aruskipañawinakaniw qullqimp qillqatanakatakikiwa; Aka jach’a uta qamawinxa tumpirinakaru qillqayasiñataki jawthapiyi.',
207
+    'info_gauche_auteurs' => 'Akanxa taqpach qamawit qillqirinakaw uñsti. Kunjamaskis ukxa jisk’a saltan kulurapampiw   uñacht’ayi (apnaqiri = ch’uxña, qillqiri = q’illu).',
208
+    'info_gauche_auteurs_exterieurs' => 'Anqajankir qillqirinakax, qamawir jan mantañaniwa, mä laram jisk’a saltampiw uñacht’ayataski; mä wayaqamp chhaqayatakis.', # MODIF
209
+    'info_gauche_messagerie' => 'Yatiyawirix yatiyasiwa, amtayirinak uñstyaña yatiyaw tantaru kuns apaniñapataki jan ukjax yatiyawinak yatiyaña ( apnaqir qutu ukar mayachatakis ukjax)
210 210
 ',
211
-	'info_gauche_statistiques_referers' => 'Aka Web qamawix tantanak uñicht’ayi &lt;i&gt;referers&lt;/i&gt;, qamawinakan chinunak utjkis ukhamarak juman qamawimar apapxi, masurutakiki ukhamarak jichhurutakiki; aka tantaxa sapa pä tunka urasanaka ch’usaru uskuña.',
212
-	'info_gauche_visiteurs_enregistres' => 'Akanxa jach’a qamaw utan qillqatanakakiw jikxatasi (aruskipañawinak qillqayasiyampi)',
213
-	'info_identification_publique' => 'Uñacht’ayawima...'
211
+    'info_gauche_statistiques_referers' => 'Aka Web qamawix tantanak uñicht’ayi &lt;i&gt;referers&lt;/i&gt;, qamawinakan chinunak utjkis ukhamarak juman qamawimar apapxi, masurutakiki ukhamarak jichhurutakiki; aka tantaxa sapa pä tunka urasanaka ch’usaru uskuña.',
212
+    'info_gauche_visiteurs_enregistres' => 'Akanxa jach’a qamaw utan qillqatanakakiw jikxatasi (aruskipañawinak qillqayasiyampi)',
213
+    'info_identification_publique' => 'Uñacht’ayawima...'
214 214
 );
Please login to merge, or discard this patch.