Completed
Push — master ( 5d4b0b...2986c5 )
by cam
01:06
created
ecrire/action/redirect.php 1 patch
Indentation   +72 added lines, -72 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
 /**
@@ -36,56 +36,56 @@  discard block
 block discarded – undo
36 36
  *   ```
37 37
  **/
38 38
 function action_redirect_dist() {
39
-	$type = _request('type');
40
-	$id = intval(_request('id'));
41
-	$page = false;
39
+    $type = _request('type');
40
+    $id = intval(_request('id'));
41
+    $page = false;
42 42
 
43
-	// verifier le type ou page transmis
44
-	if (!preg_match('/^\w+$/', $type)) {
45
-		$page = _request('page');
46
-		if (!preg_match('/^\w+$/', $page)) {
47
-			return;
48
-		}
49
-	}
43
+    // verifier le type ou page transmis
44
+    if (!preg_match('/^\w+$/', $type)) {
45
+        $page = _request('page');
46
+        if (!preg_match('/^\w+$/', $page)) {
47
+            return;
48
+        }
49
+    }
50 50
 
51
-	if ($var_mode = _request('var_mode')) {
52
-		// forcer la mise a jour de l'url de cet objet !
53
-		if (!defined('_VAR_URLS')) {
54
-			define('_VAR_URLS', true);
55
-		}
56
-	}
51
+    if ($var_mode = _request('var_mode')) {
52
+        // forcer la mise a jour de l'url de cet objet !
53
+        if (!defined('_VAR_URLS')) {
54
+            define('_VAR_URLS', true);
55
+        }
56
+    }
57 57
 
58
-	if ($page) {
59
-		$url = generer_url_public($page, '', true);
60
-	} else {
61
-		$url = calculer_url_redirect_entite($type, $id, $var_mode);
62
-	}
58
+    if ($page) {
59
+        $url = generer_url_public($page, '', true);
60
+    } else {
61
+        $url = calculer_url_redirect_entite($type, $id, $var_mode);
62
+    }
63 63
 
64
-	$status = '302';
65
-	if ($url) {
66
-		if ($var_mode) {
67
-			$url = parametre_url($url, 'var_mode', $var_mode, '&');
68
-		}
64
+    $status = '302';
65
+    if ($url) {
66
+        if ($var_mode) {
67
+            $url = parametre_url($url, 'var_mode', $var_mode, '&');
68
+        }
69 69
 
70
-		if (
71
-			$var_mode == 'preview'
72
-			and defined('_PREVIEW_TOKEN')
73
-			and _PREVIEW_TOKEN
74
-			and autoriser('previsualiser')
75
-		) {
76
-			include_spip('inc/securiser_action');
77
-			$token = calculer_token_previsu($url);
78
-			$url = parametre_url($url, 'var_previewtoken', $token);
79
-		}
70
+        if (
71
+            $var_mode == 'preview'
72
+            and defined('_PREVIEW_TOKEN')
73
+            and _PREVIEW_TOKEN
74
+            and autoriser('previsualiser')
75
+        ) {
76
+            include_spip('inc/securiser_action');
77
+            $token = calculer_token_previsu($url);
78
+            $url = parametre_url($url, 'var_previewtoken', $token);
79
+        }
80 80
 
81
-		if (_request('status') and _request('status') == '301') {
82
-			$status = '301';
83
-		}
84
-	} else {
85
-		$url = generer_url_public('404', '', true);
86
-	}
81
+        if (_request('status') and _request('status') == '301') {
82
+            $status = '301';
83
+        }
84
+    } else {
85
+        $url = generer_url_public('404', '', true);
86
+    }
87 87
 
88
-	redirige_par_entete(str_replace('&', '&', $url), '', $status);
88
+    redirige_par_entete(str_replace('&', '&', $url), '', $status);
89 89
 }
90 90
 
91 91
 /**
@@ -100,35 +100,35 @@  discard block
 block discarded – undo
100 100
  * @return string|null
101 101
  */
102 102
 function calculer_url_redirect_entite($type, $id, $var_mode) {
103
-	$desc = null;
104
-	$publie = null;
105
-	$url = null;
106
-	// invalider le cache à chaque modif en bdd
107
-	$date = 0;
108
-	if (isset($GLOBALS['meta']['derniere_modif'])) {
109
-		$date = $GLOBALS['meta']['derniere_modif'];
110
-	}
111
-	$key = "url-$date-$type-$id";
103
+    $desc = null;
104
+    $publie = null;
105
+    $url = null;
106
+    // invalider le cache à chaque modif en bdd
107
+    $date = 0;
108
+    if (isset($GLOBALS['meta']['derniere_modif'])) {
109
+        $date = $GLOBALS['meta']['derniere_modif'];
110
+    }
111
+    $key = "url-$date-$type-$id";
112 112
 
113
-	// Obtenir l’url et si elle est publié du cache memoization
114
-	if (function_exists('cache_get') and $desc = cache_get($key)) {
115
-		[$url, $publie] = $desc;
116
-	}
117
-	// Si on ne l’a pas trouvé, ou si var mode, on calcule l’url et son état publie
118
-	if (empty($desc) or $var_mode) {
119
-		$publie = objet_test_si_publie($type, $id);
120
-		$url = generer_objet_url_absolue($id, $type, '', '', true);
121
-		if (function_exists('cache_set')) {
122
-			cache_set($key, [$url, $publie], 3600);
123
-		}
124
-	}
113
+    // Obtenir l’url et si elle est publié du cache memoization
114
+    if (function_exists('cache_get') and $desc = cache_get($key)) {
115
+        [$url, $publie] = $desc;
116
+    }
117
+    // Si on ne l’a pas trouvé, ou si var mode, on calcule l’url et son état publie
118
+    if (empty($desc) or $var_mode) {
119
+        $publie = objet_test_si_publie($type, $id);
120
+        $url = generer_objet_url_absolue($id, $type, '', '', true);
121
+        if (function_exists('cache_set')) {
122
+            cache_set($key, [$url, $publie], 3600);
123
+        }
124
+    }
125 125
 
126
-	// On valide l’url si elle est publiee ; sinon si preview on teste l’autorisation
127
-	if ($publie) {
128
-		return $url;
129
-	} elseif (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id)) {
130
-		return $url;
131
-	}
126
+    // On valide l’url si elle est publiee ; sinon si preview on teste l’autorisation
127
+    if ($publie) {
128
+        return $url;
129
+    } elseif (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id)) {
130
+        return $url;
131
+    }
132 132
 
133
-	return;
133
+    return;
134 134
 }
Please login to merge, or discard this patch.
ecrire/inc/urls.php 2 patches
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
 	) {
204 204
 		$r = nettoyer_url_page($url, $contexte);
205 205
 		if ($r) {
206
-			[$contexte, $type, , , $suite] = $r;
206
+			[$contexte, $type,,, $suite] = $r;
207 207
 			$_id = id_table_objet($type);
208 208
 			$id_objet = $contexte[$_id];
209 209
 			$url_propre = generer_objet_url($id_objet, $type);
@@ -274,9 +274,9 @@  discard block
 block discarded – undo
274 274
  */
275 275
 function nettoyer_url_page($url, $contexte = []) {
276 276
 	$url_objets = urls_liste_objets();
277
-	$raccourci_url_page_html = ',^(?:[^?]*/)?(' . $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,';
278
-	$raccourci_url_page_id = ',^(?:[^?]*/)?(' . $url_objets . ')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,';
279
-	$raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?](' . $url_objets . ')([0-9]+)=?(&.*)?$,';
277
+	$raccourci_url_page_html = ',^(?:[^?]*/)?('.$url_objets.')([0-9]+)(?:\.html)?([?&].*)?$,';
278
+	$raccourci_url_page_id = ',^(?:[^?]*/)?('.$url_objets.')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,';
279
+	$raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?]('.$url_objets.')([0-9]+)=?(&.*)?$,';
280 280
 
281 281
 	if (
282 282
 		preg_match($raccourci_url_page_html, $url, $regs)
@@ -314,11 +314,11 @@  discard block
 block discarded – undo
314 314
 	$id = intval($id);
315 315
 	if (!isset($furls[$objet])) {
316 316
 		if (
317
-			function_exists($f = 'generer_' . $objet . '_url_ecrire')
317
+			function_exists($f = 'generer_'.$objet.'_url_ecrire')
318 318
 			// ou definie par un plugin
319 319
 			or $f = charger_fonction($f, 'urls', true)
320 320
 			// deprecated
321
-			or function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true)
321
+			or function_exists($f = 'generer_url_ecrire_'.$objet) or $f = charger_fonction($f, 'urls', true)
322 322
 		) {
323 323
 			$furls[$objet] = $f;
324 324
 		} else {
@@ -336,12 +336,12 @@  discard block
 block discarded – undo
336 336
 	if ($public or $connect) {
337 337
 		return generer_objet_url_absolue($id, $objet, $args, $ancre, $public, '', $connect);
338 338
 	}
339
-	$a = id_table_objet($objet) . '=' . intval($id);
339
+	$a = id_table_objet($objet).'='.intval($id);
340 340
 	if (!function_exists('objet_info')) {
341 341
 		include_spip('inc/filtres');
342 342
 	}
343 343
 
344
-	return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&$args" : '')) . ($ancre ? "#$ancre" : '');
344
+	return generer_url_ecrire(objet_info($objet, 'url_voir'), $a.($args ? "&$args" : '')).($ancre ? "#$ancre" : '');
345 345
 }
346 346
 
347 347
 /**
Please login to merge, or discard this patch.
Indentation   +205 added lines, -205 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
 include_spip('base/objets');
23 23
 
@@ -57,106 +57,106 @@  discard block
 block discarded – undo
57 57
  *
58 58
  */
59 59
 function urls_decoder_url($url, $fond = '', $contexte = [], $assembler = false) {
60
-	static $current_base = null;
60
+    static $current_base = null;
61 61
 
62
-	// les anciennes fonctions modifient directement les globales
63
-	// on les sauve avant l'appel, et on les retablit apres !
64
-	$save = [
65
-		$GLOBALS['fond'] ?? null,
66
-		$GLOBALS['contexte'] ?? null,
67
-		$_SERVER['REDIRECT_url_propre'] ?? null,
68
-		$_ENV['url_propre'] ?? null,
69
-		$GLOBALS['profondeur_url']
70
-	];
62
+    // les anciennes fonctions modifient directement les globales
63
+    // on les sauve avant l'appel, et on les retablit apres !
64
+    $save = [
65
+        $GLOBALS['fond'] ?? null,
66
+        $GLOBALS['contexte'] ?? null,
67
+        $_SERVER['REDIRECT_url_propre'] ?? null,
68
+        $_ENV['url_propre'] ?? null,
69
+        $GLOBALS['profondeur_url']
70
+    ];
71 71
 
72
-	if (is_null($current_base)) {
73
-		include_spip('inc/filtres_mini');
74
-		// le decodage des urls se fait toujours par rapport au site public
75
-		$current_base = url_absolue(_DIR_RACINE ?: './');
76
-	}
77
-	if (strncmp($url, $current_base, strlen($current_base)) == 0) {
78
-		$url = substr($url, strlen($current_base));
79
-	}
72
+    if (is_null($current_base)) {
73
+        include_spip('inc/filtres_mini');
74
+        // le decodage des urls se fait toujours par rapport au site public
75
+        $current_base = url_absolue(_DIR_RACINE ?: './');
76
+    }
77
+    if (strncmp($url, $current_base, strlen($current_base)) == 0) {
78
+        $url = substr($url, strlen($current_base));
79
+    }
80 80
 
81
-	// si on est en train d'assembler la page principale,
82
-	// recuperer l'url depuis les globales url propres si fournies
83
-	// sinon extraire la bonne portion d'url
84
-	if ($assembler) {
85
-		if (isset($_SERVER['REDIRECT_url_propre'])) {
86
-			$url = $_SERVER['REDIRECT_url_propre'];
87
-		} elseif (isset($_ENV['url_propre'])) {
88
-			$url = $_ENV['url_propre'];
89
-		} else {
90
-			$qs = explode('?', $url);
91
-			// ne prendre que le segment d'url qui correspond, en fonction de la profondeur calculee
92
-			$url = ltrim($qs[0], '/');
93
-			$url = explode('/', $url);
94
-			while (count($url) > $GLOBALS['profondeur_url'] + 1) {
95
-				array_shift($url);
96
-			}
97
-			$qs[0] = implode('/', $url);
98
-			$url = implode('?', $qs);
99
-		}
100
-	}
81
+    // si on est en train d'assembler la page principale,
82
+    // recuperer l'url depuis les globales url propres si fournies
83
+    // sinon extraire la bonne portion d'url
84
+    if ($assembler) {
85
+        if (isset($_SERVER['REDIRECT_url_propre'])) {
86
+            $url = $_SERVER['REDIRECT_url_propre'];
87
+        } elseif (isset($_ENV['url_propre'])) {
88
+            $url = $_ENV['url_propre'];
89
+        } else {
90
+            $qs = explode('?', $url);
91
+            // ne prendre que le segment d'url qui correspond, en fonction de la profondeur calculee
92
+            $url = ltrim($qs[0], '/');
93
+            $url = explode('/', $url);
94
+            while (count($url) > $GLOBALS['profondeur_url'] + 1) {
95
+                array_shift($url);
96
+            }
97
+            $qs[0] = implode('/', $url);
98
+            $url = implode('?', $qs);
99
+        }
100
+    }
101 101
 
102
-	unset($_SERVER['REDIRECT_url_propre']);
103
-	unset($_ENV['url_propre']);
104
-	include_spip('inc/filtres_mini');
105
-	if (strpos($url, '://') === false) {
106
-		$GLOBALS['profondeur_url'] = substr_count(ltrim(resolve_path("/$url"), '/'), '/');
107
-	} else {
108
-		$GLOBALS['profondeur_url'] = max(0, substr_count($url, '/') - substr_count($current_base, '/'));
109
-	}
102
+    unset($_SERVER['REDIRECT_url_propre']);
103
+    unset($_ENV['url_propre']);
104
+    include_spip('inc/filtres_mini');
105
+    if (strpos($url, '://') === false) {
106
+        $GLOBALS['profondeur_url'] = substr_count(ltrim(resolve_path("/$url"), '/'), '/');
107
+    } else {
108
+        $GLOBALS['profondeur_url'] = max(0, substr_count($url, '/') - substr_count($current_base, '/'));
109
+    }
110 110
 
111
-	$url_redirect = '';
112
-	$decoder = charger_fonction_url('decoder');
113
-	if ($decoder) {
114
-		$a = $decoder($url, $fond, $contexte);
115
-		if (is_array($a)) {
116
-			[$ncontexte, $type, $url_redirect, $nfond] = array_pad($a, 4, null);
117
-			$url_redirect ??= '';
118
-			if ($url_redirect === $url) {
119
-				$url_redirect = '';
120
-			} // securite pour eviter une redirection infinie
121
-			if ($assembler and strlen($url_redirect)) {
122
-				spip_log("Redirige $url vers $url_redirect");
123
-				include_spip('inc/headers');
124
-				redirige_par_entete($url_redirect, '', 301);
125
-			}
126
-			if (isset($nfond)) {
127
-				$fond = $nfond;
128
-			} else {
129
-				if (
130
-					$fond == ''
131
-					or $fond == 'type_urls' /* compat avec htaccess 2.0.0 */
132
-				) {
133
-					$fond = $type;
134
-				}
135
-			}
136
-			if (isset($ncontexte)) {
137
-				$contexte = $ncontexte;
138
-			}
139
-			if (defined('_DEFINIR_CONTEXTE_TYPE') and _DEFINIR_CONTEXTE_TYPE) {
140
-				$contexte['type'] = $type;
141
-			}
142
-			if (!defined('_DEFINIR_CONTEXTE_TYPE_PAGE') or _DEFINIR_CONTEXTE_TYPE_PAGE) {
143
-				$contexte['type-page'] = $type;
144
-			}
145
-		}
146
-	}
111
+    $url_redirect = '';
112
+    $decoder = charger_fonction_url('decoder');
113
+    if ($decoder) {
114
+        $a = $decoder($url, $fond, $contexte);
115
+        if (is_array($a)) {
116
+            [$ncontexte, $type, $url_redirect, $nfond] = array_pad($a, 4, null);
117
+            $url_redirect ??= '';
118
+            if ($url_redirect === $url) {
119
+                $url_redirect = '';
120
+            } // securite pour eviter une redirection infinie
121
+            if ($assembler and strlen($url_redirect)) {
122
+                spip_log("Redirige $url vers $url_redirect");
123
+                include_spip('inc/headers');
124
+                redirige_par_entete($url_redirect, '', 301);
125
+            }
126
+            if (isset($nfond)) {
127
+                $fond = $nfond;
128
+            } else {
129
+                if (
130
+                    $fond == ''
131
+                    or $fond == 'type_urls' /* compat avec htaccess 2.0.0 */
132
+                ) {
133
+                    $fond = $type;
134
+                }
135
+            }
136
+            if (isset($ncontexte)) {
137
+                $contexte = $ncontexte;
138
+            }
139
+            if (defined('_DEFINIR_CONTEXTE_TYPE') and _DEFINIR_CONTEXTE_TYPE) {
140
+                $contexte['type'] = $type;
141
+            }
142
+            if (!defined('_DEFINIR_CONTEXTE_TYPE_PAGE') or _DEFINIR_CONTEXTE_TYPE_PAGE) {
143
+                $contexte['type-page'] = $type;
144
+            }
145
+        }
146
+    }
147 147
 
148
-	// retablir les globales
149
-	[$GLOBALS['fond'], $GLOBALS['contexte'], $_SERVER['REDIRECT_url_propre'], $_ENV['url_propre'], $GLOBALS['profondeur_url']] = $save;
148
+    // retablir les globales
149
+    [$GLOBALS['fond'], $GLOBALS['contexte'], $_SERVER['REDIRECT_url_propre'], $_ENV['url_propre'], $GLOBALS['profondeur_url']] = $save;
150 150
 
151
-	// vider les globales url propres qui ne doivent plus etre utilisees en cas
152
-	// d'inversion url => objet
153
-	// maintenir pour compat ?
154
-	#if ($assembler) {
155
-	#	unset($_SERVER['REDIRECT_url_propre']);
156
-	#	unset($_ENV['url_propre']);
157
-	#}
151
+    // vider les globales url propres qui ne doivent plus etre utilisees en cas
152
+    // d'inversion url => objet
153
+    // maintenir pour compat ?
154
+    #if ($assembler) {
155
+    #	unset($_SERVER['REDIRECT_url_propre']);
156
+    #	unset($_ENV['url_propre']);
157
+    #}
158 158
 
159
-	return [$fond, $contexte, $url_redirect];
159
+    return [$fond, $contexte, $url_redirect];
160 160
 }
161 161
 
162 162
 /**
@@ -169,20 +169,20 @@  discard block
 block discarded – undo
169 169
  * @return array|false|string
170 170
  */
171 171
 function urls_transition_retrouver_anciennes_url_propres(string $url_propre, string $entite, array $contexte = []): array {
172
-	if ($url_propre) {
173
-		if ($GLOBALS['profondeur_url'] <= 0) {
174
-			$urls_anciennes = charger_fonction_url('decoder', 'propres');
175
-		} else {
176
-			$urls_anciennes = charger_fonction_url('decoder', 'arbo');
177
-		}
172
+    if ($url_propre) {
173
+        if ($GLOBALS['profondeur_url'] <= 0) {
174
+            $urls_anciennes = charger_fonction_url('decoder', 'propres');
175
+        } else {
176
+            $urls_anciennes = charger_fonction_url('decoder', 'arbo');
177
+        }
178 178
 
179
-		if ($urls_anciennes) {
180
-			$urls_anciennes = $urls_anciennes($url_propre, $entite, $contexte);
181
-		}
182
-		return $urls_anciennes ?: [];
183
-	}
179
+        if ($urls_anciennes) {
180
+            $urls_anciennes = $urls_anciennes($url_propre, $entite, $contexte);
181
+        }
182
+        return $urls_anciennes ?: [];
183
+    }
184 184
 
185
-	return [];
185
+    return [];
186 186
 }
187 187
 
188 188
 /**
@@ -195,41 +195,41 @@  discard block
 block discarded – undo
195 195
  * @return array|false|string
196 196
  */
197 197
 function urls_transition_retrouver_anciennes_url_html(string $url, string $entite, array $contexte = []): array {
198
-	// Migration depuis anciennes URLs ?
199
-	// traiter les injections domain.tld/spip.php/n/importe/quoi/rubrique23
200
-	if (
201
-		$url
202
-		and $GLOBALS['profondeur_url'] <= 0
203
-	) {
204
-		$r = nettoyer_url_page($url, $contexte);
205
-		if ($r) {
206
-			[$contexte, $type, , , $suite] = $r;
207
-			$_id = id_table_objet($type);
208
-			$id_objet = $contexte[$_id];
209
-			$url_propre = generer_objet_url($id_objet, $type);
210
-			if (
211
-				strlen($url_propre)
212
-				and !strstr($url, (string) $url_propre)
213
-				and (
214
-					objet_test_si_publie($type, $id_objet)
215
-					or (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id_objet))
216
-				)
217
-			) {
218
-				[, $hash] = array_pad(explode('#', $url_propre), 2, '');
219
-				$args = [];
220
-				foreach (array_filter(explode('&', $suite)) as $fragment) {
221
-					if ($fragment != "$_id=$id_objet") {
222
-						$args[] = $fragment;
223
-					}
224
-				}
225
-				$url_redirect = generer_objet_url($id_objet, $type, join('&', array_filter($args)), $hash);
198
+    // Migration depuis anciennes URLs ?
199
+    // traiter les injections domain.tld/spip.php/n/importe/quoi/rubrique23
200
+    if (
201
+        $url
202
+        and $GLOBALS['profondeur_url'] <= 0
203
+    ) {
204
+        $r = nettoyer_url_page($url, $contexte);
205
+        if ($r) {
206
+            [$contexte, $type, , , $suite] = $r;
207
+            $_id = id_table_objet($type);
208
+            $id_objet = $contexte[$_id];
209
+            $url_propre = generer_objet_url($id_objet, $type);
210
+            if (
211
+                strlen($url_propre)
212
+                and !strstr($url, (string) $url_propre)
213
+                and (
214
+                    objet_test_si_publie($type, $id_objet)
215
+                    or (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id_objet))
216
+                )
217
+            ) {
218
+                [, $hash] = array_pad(explode('#', $url_propre), 2, '');
219
+                $args = [];
220
+                foreach (array_filter(explode('&', $suite)) as $fragment) {
221
+                    if ($fragment != "$_id=$id_objet") {
222
+                        $args[] = $fragment;
223
+                    }
224
+                }
225
+                $url_redirect = generer_objet_url($id_objet, $type, join('&', array_filter($args)), $hash);
226 226
 
227
-				return [$contexte, $type, $url_redirect, $type];
228
-			}
229
-		}
230
-	}
231
-	/* Fin compatibilite anciennes urls */
232
-	return [];
227
+                return [$contexte, $type, $url_redirect, $type];
228
+            }
229
+        }
230
+    }
231
+    /* Fin compatibilite anciennes urls */
232
+    return [];
233 233
 }
234 234
 
235 235
 /**
@@ -242,24 +242,24 @@  discard block
 block discarded – undo
242 242
  * @return string|array
243 243
  */
244 244
 function urls_liste_objets($preg = true) {
245
-	static $url_objets = null;
246
-	if (is_null($url_objets)) {
247
-		$url_objets = [];
248
-		// recuperer les tables_objets_sql declarees
249
-		$tables_objets = lister_tables_objets_sql();
250
-		foreach ($tables_objets as $t => $infos) {
251
-			if ($infos['page']) {
252
-				$url_objets[] = $infos['type'];
253
-				$url_objets = array_merge($url_objets, $infos['type_surnoms']);
254
-			}
255
-		}
256
-		$url_objets = pipeline('declarer_url_objets', $url_objets);
257
-	}
258
-	if (!$preg) {
259
-		return $url_objets;
260
-	}
245
+    static $url_objets = null;
246
+    if (is_null($url_objets)) {
247
+        $url_objets = [];
248
+        // recuperer les tables_objets_sql declarees
249
+        $tables_objets = lister_tables_objets_sql();
250
+        foreach ($tables_objets as $t => $infos) {
251
+            if ($infos['page']) {
252
+                $url_objets[] = $infos['type'];
253
+                $url_objets = array_merge($url_objets, $infos['type_surnoms']);
254
+            }
255
+        }
256
+        $url_objets = pipeline('declarer_url_objets', $url_objets);
257
+    }
258
+    if (!$preg) {
259
+        return $url_objets;
260
+    }
261 261
 
262
-	return implode('|', array_map('preg_quote', $url_objets));
262
+    return implode('|', array_map('preg_quote', $url_objets));
263 263
 }
264 264
 
265 265
 /**
@@ -273,26 +273,26 @@  discard block
 block discarded – undo
273 273
  * @return array
274 274
  */
275 275
 function nettoyer_url_page($url, $contexte = []) {
276
-	$url_objets = urls_liste_objets();
277
-	$raccourci_url_page_html = ',^(?:[^?]*/)?(' . $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,';
278
-	$raccourci_url_page_id = ',^(?:[^?]*/)?(' . $url_objets . ')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,';
279
-	$raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?](' . $url_objets . ')([0-9]+)=?(&.*)?$,';
276
+    $url_objets = urls_liste_objets();
277
+    $raccourci_url_page_html = ',^(?:[^?]*/)?(' . $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,';
278
+    $raccourci_url_page_id = ',^(?:[^?]*/)?(' . $url_objets . ')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,';
279
+    $raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?](' . $url_objets . ')([0-9]+)=?(&.*)?$,';
280 280
 
281
-	if (
282
-		preg_match($raccourci_url_page_html, $url, $regs)
283
-		or preg_match($raccourci_url_page_id, $url, $regs)
284
-		or preg_match($raccourci_url_page_spip, $url, $regs)
285
-	) {
286
-		$regs = array_pad($regs, 4, null);
287
-		$type = objet_type($regs[1]);
288
-		$_id = id_table_objet($type);
289
-		$contexte[$_id] = $regs[2];
290
-		$suite = $regs[3];
281
+    if (
282
+        preg_match($raccourci_url_page_html, $url, $regs)
283
+        or preg_match($raccourci_url_page_id, $url, $regs)
284
+        or preg_match($raccourci_url_page_spip, $url, $regs)
285
+    ) {
286
+        $regs = array_pad($regs, 4, null);
287
+        $type = objet_type($regs[1]);
288
+        $_id = id_table_objet($type);
289
+        $contexte[$_id] = $regs[2];
290
+        $suite = $regs[3];
291 291
 
292
-		return [$contexte, $type, null, $type, $suite];
293
-	}
292
+        return [$contexte, $type, null, $type, $suite];
293
+    }
294 294
 
295
-	return [];
295
+    return [];
296 296
 }
297 297
 
298 298
 /**
@@ -310,38 +310,38 @@  discard block
 block discarded – undo
310 310
  * @return string
311 311
  */
312 312
 function generer_objet_url_ecrire($id, string $objet, string $args = '', string $ancre = '', ?bool $public = null, string $connect = ''): string {
313
-	static $furls = [];
314
-	$id = intval($id);
315
-	if (!isset($furls[$objet])) {
316
-		if (
317
-			function_exists($f = 'generer_' . $objet . '_url_ecrire')
318
-			// ou definie par un plugin
319
-			or $f = charger_fonction($f, 'urls', true)
320
-			// deprecated
321
-			or function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true)
322
-		) {
323
-			$furls[$objet] = $f;
324
-		} else {
325
-			$furls[$objet] = '';
326
-		}
327
-	}
328
-	if ($furls[$objet]) {
329
-		return $furls[$objet]($id, $args, $ancre, $public, $connect);
330
-	}
331
-	// si pas de flag public fourni
332
-	// le calculer en fonction de la declaration de statut
333
-	if (is_null($public) and !$connect) {
334
-		$public = objet_test_si_publie($objet, $id, $connect);
335
-	}
336
-	if ($public or $connect) {
337
-		return generer_objet_url_absolue($id, $objet, $args, $ancre, $public, '', $connect);
338
-	}
339
-	$a = id_table_objet($objet) . '=' . intval($id);
340
-	if (!function_exists('objet_info')) {
341
-		include_spip('inc/filtres');
342
-	}
313
+    static $furls = [];
314
+    $id = intval($id);
315
+    if (!isset($furls[$objet])) {
316
+        if (
317
+            function_exists($f = 'generer_' . $objet . '_url_ecrire')
318
+            // ou definie par un plugin
319
+            or $f = charger_fonction($f, 'urls', true)
320
+            // deprecated
321
+            or function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true)
322
+        ) {
323
+            $furls[$objet] = $f;
324
+        } else {
325
+            $furls[$objet] = '';
326
+        }
327
+    }
328
+    if ($furls[$objet]) {
329
+        return $furls[$objet]($id, $args, $ancre, $public, $connect);
330
+    }
331
+    // si pas de flag public fourni
332
+    // le calculer en fonction de la declaration de statut
333
+    if (is_null($public) and !$connect) {
334
+        $public = objet_test_si_publie($objet, $id, $connect);
335
+    }
336
+    if ($public or $connect) {
337
+        return generer_objet_url_absolue($id, $objet, $args, $ancre, $public, '', $connect);
338
+    }
339
+    $a = id_table_objet($objet) . '=' . intval($id);
340
+    if (!function_exists('objet_info')) {
341
+        include_spip('inc/filtres');
342
+    }
343 343
 
344
-	return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&$args" : '')) . ($ancre ? "#$ancre" : '');
344
+    return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&$args" : '')) . ($ancre ? "#$ancre" : '');
345 345
 }
346 346
 
347 347
 /**
@@ -349,5 +349,5 @@  discard block
 block discarded – undo
349 349
  * @see generer_objet_url_ecrire
350 350
  */
351 351
 function generer_url_ecrire_objet($objet, $id, $args = '', $ancre = '', $public = null, string $connect = '') {
352
-	return generer_objet_url_ecrire($id, $objet, $args, $ancre, $public, $connect);
352
+    return generer_objet_url_ecrire($id, $objet, $args, $ancre, $public, $connect);
353 353
 }
Please login to merge, or discard this patch.
ecrire/plugins/afficher_liste.php 2 patches
Indentation   +75 added lines, -75 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
 include_spip('inc/charsets');
17 17
 
@@ -27,90 +27,90 @@  discard block
 block discarded – undo
27 27
  * @return string
28 28
  */
29 29
 function plugins_afficher_liste_dist(
30
-	$url_page,
31
-	$liste_plugins,
32
-	$liste_plugins_checked,
33
-	$liste_plugins_actifs,
34
-	$dir_plugins = _DIR_PLUGINS,
35
-	$afficher_un = 'afficher_plugin'
30
+    $url_page,
31
+    $liste_plugins,
32
+    $liste_plugins_checked,
33
+    $liste_plugins_actifs,
34
+    $dir_plugins = _DIR_PLUGINS,
35
+    $afficher_un = 'afficher_plugin'
36 36
 ) {
37
-	$get_infos = charger_fonction('get_infos', 'plugins');
38
-	$ligne_plug = charger_fonction($afficher_un, 'plugins');
37
+    $get_infos = charger_fonction('get_infos', 'plugins');
38
+    $ligne_plug = charger_fonction($afficher_un, 'plugins');
39 39
 
40
-	$all_infos = $get_infos($liste_plugins, false, $dir_plugins);
40
+    $all_infos = $get_infos($liste_plugins, false, $dir_plugins);
41 41
 
42
-	$all_infos = pipeline(
43
-		'filtrer_liste_plugins',
44
-		[
45
-			'args' => [
46
-				'liste_plugins' => $liste_plugins,
47
-				'liste_plugins_checked' => $liste_plugins_checked,
48
-				'liste_plugins_actifs' => $liste_plugins_actifs,
49
-				'dir_plugins' => $dir_plugins
50
-			],
51
-			'data' => $all_infos
52
-		]
53
-	);
42
+    $all_infos = pipeline(
43
+        'filtrer_liste_plugins',
44
+        [
45
+            'args' => [
46
+                'liste_plugins' => $liste_plugins,
47
+                'liste_plugins_checked' => $liste_plugins_checked,
48
+                'liste_plugins_actifs' => $liste_plugins_actifs,
49
+                'dir_plugins' => $dir_plugins
50
+            ],
51
+            'data' => $all_infos
52
+        ]
53
+    );
54 54
 
55
-	$liste_plugins = array_flip($liste_plugins);
56
-	foreach ($liste_plugins as $chemin => $v) {
57
-		// des plugins ont pu etre enleves de la liste par le pipeline. On en tient compte.
58
-		if (isset($all_infos[$chemin])) {
59
-			$liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($all_infos[$chemin]['nom']))))));
60
-		} else {
61
-			unset($liste_plugins[$chemin]);
62
-		}
63
-	}
64
-	asort($liste_plugins);
65
-	$exposed = urldecode(_request('plugin') ?? '');
55
+    $liste_plugins = array_flip($liste_plugins);
56
+    foreach ($liste_plugins as $chemin => $v) {
57
+        // des plugins ont pu etre enleves de la liste par le pipeline. On en tient compte.
58
+        if (isset($all_infos[$chemin])) {
59
+            $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($all_infos[$chemin]['nom']))))));
60
+        } else {
61
+            unset($liste_plugins[$chemin]);
62
+        }
63
+    }
64
+    asort($liste_plugins);
65
+    $exposed = urldecode(_request('plugin') ?? '');
66 66
 
67
-	$block_par_lettre = false;//count($liste_plugins)>10;
68
-	$fast_liste_plugins_actifs = [];
69
-	$fast_liste_plugins_checked = [];
70
-	if (is_array($liste_plugins_actifs)) {
71
-		$fast_liste_plugins_actifs = array_flip($liste_plugins_actifs);
72
-	}
73
-	if (is_array($liste_plugins_checked)) {
74
-		$fast_liste_plugins_checked = array_flip($liste_plugins_checked);
75
-	}
67
+    $block_par_lettre = false;//count($liste_plugins)>10;
68
+    $fast_liste_plugins_actifs = [];
69
+    $fast_liste_plugins_checked = [];
70
+    if (is_array($liste_plugins_actifs)) {
71
+        $fast_liste_plugins_actifs = array_flip($liste_plugins_actifs);
72
+    }
73
+    if (is_array($liste_plugins_checked)) {
74
+        $fast_liste_plugins_checked = array_flip($liste_plugins_checked);
75
+    }
76 76
 
77
-	$res = '';
78
-	$block = '';
79
-	$initiale = '';
80
-	$block_actif = false;
81
-	foreach ($liste_plugins as $plug => $nom) {
82
-		if (($i = substr($nom, 0, 1)) !== $initiale) {
83
-			$res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block;
84
-			$initiale = $i;
85
-			$block = '';
86
-			$block_actif = false;
87
-		}
88
-		// le rep suivant
89
-		$actif = isset($fast_liste_plugins_actifs[$plug]);
90
-		$checked = isset($fast_liste_plugins_checked[$plug]);
91
-		$block_actif = $block_actif | $actif;
92
-		$expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins . $plug or $exposed == substr(
93
-			$dir_plugins,
94
-			strlen(_DIR_RACINE)
95
-		) . $plug));
96
-		$block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, 'item', $dir_plugins) . "\n";
97
-	}
98
-	$res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block;
99
-	$class = basename($dir_plugins);
77
+    $res = '';
78
+    $block = '';
79
+    $initiale = '';
80
+    $block_actif = false;
81
+    foreach ($liste_plugins as $plug => $nom) {
82
+        if (($i = substr($nom, 0, 1)) !== $initiale) {
83
+            $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block;
84
+            $initiale = $i;
85
+            $block = '';
86
+            $block_actif = false;
87
+        }
88
+        // le rep suivant
89
+        $actif = isset($fast_liste_plugins_actifs[$plug]);
90
+        $checked = isset($fast_liste_plugins_checked[$plug]);
91
+        $block_actif = $block_actif | $actif;
92
+        $expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins . $plug or $exposed == substr(
93
+            $dir_plugins,
94
+            strlen(_DIR_RACINE)
95
+        ) . $plug));
96
+        $block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, 'item', $dir_plugins) . "\n";
97
+    }
98
+    $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block;
99
+    $class = basename($dir_plugins);
100 100
 
101
-	return $res ? "<ul class='liste-items plugins $class'>$res</ul>" : '';
101
+    return $res ? "<ul class='liste-items plugins $class'>$res</ul>" : '';
102 102
 }
103 103
 
104 104
 
105 105
 function affiche_block_initiale($initiale, $block, $block_actif) {
106
-	if (strlen($block)) {
107
-		return "<li class='item'>"
108
-		. bouton_block_depliable($initiale, $block_actif ? true : false)
109
-		. debut_block_depliable($block_actif)
110
-		. "<ul>$block</ul>"
111
-		. fin_block()
112
-		. '</li>';
113
-	}
106
+    if (strlen($block)) {
107
+        return "<li class='item'>"
108
+        . bouton_block_depliable($initiale, $block_actif ? true : false)
109
+        . debut_block_depliable($block_actif)
110
+        . "<ul>$block</ul>"
111
+        . fin_block()
112
+        . '</li>';
113
+    }
114 114
 
115
-	return '';
115
+    return '';
116 116
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -64,7 +64,7 @@  discard block
 block discarded – undo
64 64
 	asort($liste_plugins);
65 65
 	$exposed = urldecode(_request('plugin') ?? '');
66 66
 
67
-	$block_par_lettre = false;//count($liste_plugins)>10;
67
+	$block_par_lettre = false; //count($liste_plugins)>10;
68 68
 	$fast_liste_plugins_actifs = [];
69 69
 	$fast_liste_plugins_checked = [];
70 70
 	if (is_array($liste_plugins_actifs)) {
@@ -89,11 +89,11 @@  discard block
 block discarded – undo
89 89
 		$actif = isset($fast_liste_plugins_actifs[$plug]);
90 90
 		$checked = isset($fast_liste_plugins_checked[$plug]);
91 91
 		$block_actif = $block_actif | $actif;
92
-		$expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins . $plug or $exposed == substr(
92
+		$expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins.$plug or $exposed == substr(
93 93
 			$dir_plugins,
94 94
 			strlen(_DIR_RACINE)
95
-		) . $plug));
96
-		$block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, 'item', $dir_plugins) . "\n";
95
+		).$plug));
96
+		$block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, 'item', $dir_plugins)."\n";
97 97
 	}
98 98
 	$res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block;
99 99
 	$class = basename($dir_plugins);
Please login to merge, or discard this patch.
ecrire/lang/ecrire_uk.php 1 patch
Indentation   +836 added lines, -836 removed lines patch added patch discarded remove patch
@@ -4,868 +4,868 @@
 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' => 'Активувати плагін',
14
-	'affichage' => 'Показати',
15
-	'aide_non_disponible' => 'Цей розділ он-лайн допомоги ще не перекладено українською.',
16
-	'annuler_recherche' => 'Відмінити пошук',
17
-	'auteur' => 'Автор:',
18
-	'avis_acces_interdit' => 'Доступ заборонено.',
19
-	'avis_acces_interdit_prive' => 'У вас немає прав для перегляду сторінки <b>@exec@</b>.',
20
-	'avis_article_modifie' => 'Увага: @nom_auteur_modif@ вносив зміни в цю статтю @date_diff@ хвилин тому',
21
-	'avis_aucun_resultat' => 'Нічого не знайдено',
22
-	'avis_base_inaccessible' => 'Неможливо підключитися до бази @base@.',
23
-	'avis_chemin_invalide_1' => 'Шлях, що ви вибрали',
24
-	'avis_chemin_invalide_2' => 'схоже, що не вірно. Будь ласка, поверніться на попередню сторінку і перевірте надану інформацію.',
25
-	'avis_connexion_echec_1' => 'Не вдалося підключится до SQL серверу.',
26
-	'avis_connexion_echec_2' => 'Будь ласка, поверніться на попередню сторінку і перевірте внесену інформацію.',
27
-	'avis_connexion_echec_3' => '<b>N.B.</b> На багатьох серверах ви повинні зробити запит для включення вашого доступу до бази даних SQL перед тим, як використовувати її. Якщо ви не можете встановити з’єднання, упевніться, що цей запит дійсно було зроблено.',
28
-	'avis_connexion_erreur_creer_base' => 'База даних не може бути створена.',
29
-	'avis_connexion_erreur_nom_base' => 'Назва бази може складатися тільки з латинських букв, цифр і знаків нижнього підкреслювання.',
30
-	'avis_connexion_ldap_echec_1' => 'Не вдалося подключитися до LDAP.',
31
-	'avis_connexion_ldap_echec_2' => 'Поверніться на попередню сторінку і перевірте внесену вами інформацію.',
32
-	'avis_connexion_ldap_echec_3' => 'Крім того, не використовуйте підтримку LDAP для імпорту користувачів.',
33
-	'avis_deplacement_rubrique' => 'Увага! В цій рубриці знаходиться @contient_breves@ новин@scb@: якщо ви переміщуєте її, будь ласка, поставьте відмітку для підтвердження операції.',
34
-	'avis_erreur_connexion_mysql' => 'Помилка з’єднання з SQL ',
35
-	'avis_espace_interdit' => '<b>Заборонений простір</b> <div>SPIP вже встановлено.</div> ',
36
-	'avis_lecture_noms_bases_1' => 'Програма установки не змогла прочитати імена встановлених баз даних .',
37
-	'avis_lecture_noms_bases_2' => 'Жодна з баз даних не є доступною або функцію, що дозволяє вносити до списку бази даних, було вимкнено з метою безпеки (забагато послуг хостингу).',
38
-	'avis_lecture_noms_bases_3' => 'В другому випадку можливо, що база даних, названа за вашим логіном, может бути використана:',
39
-	'avis_non_acces_page' => 'У вас нема доступу до цієї сторінки.',
40
-	'avis_operation_echec' => 'Не вдалося виконати операцію.',
41
-	'avis_operation_impossible' => 'Неможливо виконати операцію',
42
-	'avis_suppression_base' => 'Увага: видалення даних неможливо відмінити',
12
+    // A
13
+    'activer_plugin' => 'Активувати плагін',
14
+    'affichage' => 'Показати',
15
+    'aide_non_disponible' => 'Цей розділ он-лайн допомоги ще не перекладено українською.',
16
+    'annuler_recherche' => 'Відмінити пошук',
17
+    'auteur' => 'Автор:',
18
+    'avis_acces_interdit' => 'Доступ заборонено.',
19
+    'avis_acces_interdit_prive' => 'У вас немає прав для перегляду сторінки <b>@exec@</b>.',
20
+    'avis_article_modifie' => 'Увага: @nom_auteur_modif@ вносив зміни в цю статтю @date_diff@ хвилин тому',
21
+    'avis_aucun_resultat' => 'Нічого не знайдено',
22
+    'avis_base_inaccessible' => 'Неможливо підключитися до бази @base@.',
23
+    'avis_chemin_invalide_1' => 'Шлях, що ви вибрали',
24
+    'avis_chemin_invalide_2' => 'схоже, що не вірно. Будь ласка, поверніться на попередню сторінку і перевірте надану інформацію.',
25
+    'avis_connexion_echec_1' => 'Не вдалося підключится до SQL серверу.',
26
+    'avis_connexion_echec_2' => 'Будь ласка, поверніться на попередню сторінку і перевірте внесену інформацію.',
27
+    'avis_connexion_echec_3' => '<b>N.B.</b> На багатьох серверах ви повинні зробити запит для включення вашого доступу до бази даних SQL перед тим, як використовувати її. Якщо ви не можете встановити з’єднання, упевніться, що цей запит дійсно було зроблено.',
28
+    'avis_connexion_erreur_creer_base' => 'База даних не може бути створена.',
29
+    'avis_connexion_erreur_nom_base' => 'Назва бази може складатися тільки з латинських букв, цифр і знаків нижнього підкреслювання.',
30
+    'avis_connexion_ldap_echec_1' => 'Не вдалося подключитися до LDAP.',
31
+    'avis_connexion_ldap_echec_2' => 'Поверніться на попередню сторінку і перевірте внесену вами інформацію.',
32
+    'avis_connexion_ldap_echec_3' => 'Крім того, не використовуйте підтримку LDAP для імпорту користувачів.',
33
+    'avis_deplacement_rubrique' => 'Увага! В цій рубриці знаходиться @contient_breves@ новин@scb@: якщо ви переміщуєте її, будь ласка, поставьте відмітку для підтвердження операції.',
34
+    'avis_erreur_connexion_mysql' => 'Помилка з’єднання з SQL ',
35
+    'avis_espace_interdit' => '<b>Заборонений простір</b> <div>SPIP вже встановлено.</div> ',
36
+    'avis_lecture_noms_bases_1' => 'Програма установки не змогла прочитати імена встановлених баз даних .',
37
+    'avis_lecture_noms_bases_2' => 'Жодна з баз даних не є доступною або функцію, що дозволяє вносити до списку бази даних, було вимкнено з метою безпеки (забагато послуг хостингу).',
38
+    'avis_lecture_noms_bases_3' => 'В другому випадку можливо, що база даних, названа за вашим логіном, может бути використана:',
39
+    'avis_non_acces_page' => 'У вас нема доступу до цієї сторінки.',
40
+    'avis_operation_echec' => 'Не вдалося виконати операцію.',
41
+    'avis_operation_impossible' => 'Неможливо виконати операцію',
42
+    'avis_suppression_base' => 'Увага: видалення даних неможливо відмінити',
43 43
 
44
-	// B
45
-	'bouton_acces_ldap' => 'Додати доступ до LDAP',
46
-	'bouton_ajouter' => 'Додати',
47
-	'bouton_annuler' => 'Відмінити',
48
-	'bouton_cache_activer' => 'Увімкнути кешування',
49
-	'bouton_cache_desactiver' => 'Виключити кешування',
50
-	'bouton_demande_publication' => 'Запитати публікацію цієї статті',
51
-	'bouton_desactive_tout' => 'Усе відключити',
52
-	'bouton_desinstaller' => 'Видалити',
53
-	'bouton_effacer_tout' => 'Видалити УСЕ',
54
-	'bouton_envoyer_message' => 'Заключне повідомлення: Надіслати',
55
-	'bouton_fermer' => 'Закрити',
56
-	'bouton_mettre_a_jour_base' => 'Оновити базу даних',
57
-	'bouton_modifier' => 'Змінити',
58
-	'bouton_radio_afficher' => 'Показати',
59
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Показувати у переліку авторів, що знаходяться на сайті',
60
-	'bouton_radio_envoi_annonces_adresse' => 'Відправити оголошення на адресу:',
61
-	'bouton_radio_envoi_liste_nouveautes' => 'Відправити список останніх новин',
62
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Не показувати у переліку авторів, що знаходяться на сайті',
63
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Не відправляти ніяких редакційних оголошень',
64
-	'bouton_redirection' => 'ПЕРЕНАПРАВЛЕННЯ',
65
-	'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Відновити початкові значення',
66
-	'bouton_relancer_inscription' => 'Перезапустити реєстрацію',
67
-	'bouton_relancer_inscriptions' => 'Перезапустити реєстрації',
68
-	'bouton_relancer_installation' => 'Перезапустити установку',
69
-	'bouton_reset_password' => 'Створити новий пароль і відправити по e-mail',
70
-	'bouton_suivant' => 'Наступний',
71
-	'bouton_tenter_recuperation' => 'Спробуємо відремонтувати базу',
72
-	'bouton_test_proxy' => 'Перевірити проксі',
73
-	'bouton_vider_cache' => 'Очистити кеш',
44
+    // B
45
+    'bouton_acces_ldap' => 'Додати доступ до LDAP',
46
+    'bouton_ajouter' => 'Додати',
47
+    'bouton_annuler' => 'Відмінити',
48
+    'bouton_cache_activer' => 'Увімкнути кешування',
49
+    'bouton_cache_desactiver' => 'Виключити кешування',
50
+    'bouton_demande_publication' => 'Запитати публікацію цієї статті',
51
+    'bouton_desactive_tout' => 'Усе відключити',
52
+    'bouton_desinstaller' => 'Видалити',
53
+    'bouton_effacer_tout' => 'Видалити УСЕ',
54
+    'bouton_envoyer_message' => 'Заключне повідомлення: Надіслати',
55
+    'bouton_fermer' => 'Закрити',
56
+    'bouton_mettre_a_jour_base' => 'Оновити базу даних',
57
+    'bouton_modifier' => 'Змінити',
58
+    'bouton_radio_afficher' => 'Показати',
59
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Показувати у переліку авторів, що знаходяться на сайті',
60
+    'bouton_radio_envoi_annonces_adresse' => 'Відправити оголошення на адресу:',
61
+    'bouton_radio_envoi_liste_nouveautes' => 'Відправити список останніх новин',
62
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Не показувати у переліку авторів, що знаходяться на сайті',
63
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Не відправляти ніяких редакційних оголошень',
64
+    'bouton_redirection' => 'ПЕРЕНАПРАВЛЕННЯ',
65
+    'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Відновити початкові значення',
66
+    'bouton_relancer_inscription' => 'Перезапустити реєстрацію',
67
+    'bouton_relancer_inscriptions' => 'Перезапустити реєстрації',
68
+    'bouton_relancer_installation' => 'Перезапустити установку',
69
+    'bouton_reset_password' => 'Створити новий пароль і відправити по e-mail',
70
+    'bouton_suivant' => 'Наступний',
71
+    'bouton_tenter_recuperation' => 'Спробуємо відремонтувати базу',
72
+    'bouton_test_proxy' => 'Перевірити проксі',
73
+    'bouton_vider_cache' => 'Очистити кеш',
74 74
 
75
-	// C
76
-	'cache_modifiable_webmestre' => 'Цей параметр може бути змінений тільки вебмастером.',
77
-	'calendrier_synchro' => 'Якщо ви використовуєте календар, сумісний з <b>iCal</b>, ви можете узгодити його з даними сайту.',
78
-	'config_activer_champs' => 'Увімкнути наступні поля',
79
-	'config_choix_base_sup' => 'Виберіть базу на цьому сервері',
80
-	'config_erreur_base_sup' => 'SPIP не може відобразити список доступних баз даних',
81
-	'config_info_base_sup' => 'Якщо вам потрібний запит інших баз даних, використовуючи SPIP, незалежно від того, чи знаходяться вони на тому ж SQL сервері або де-інде, використовуйте форму, що показана нижче для їх опису. Якщо ви залишите деякі поля пустими, то пов’язані деталі будуть використовуватися з основною базой даних.',
82
-	'config_info_base_sup_disponibles' => 'Додаткові бази даних, до яких можна відправити запити:',
83
-	'config_info_enregistree' => 'Нові налаштування збережено',
84
-	'config_info_logos' => 'Кожному елементу сайту можна встановити свій логотип і також логотип для відображення «при наведенні миші»',
85
-	'config_info_logos_utiliser' => 'Використовувати логотипи',
86
-	'config_info_logos_utiliser_non' => 'Не використовувати логотипи',
87
-	'config_info_logos_utiliser_survol' => 'Дозволити додавати логотип для відображення «при наведенні миші»',
88
-	'config_info_logos_utiliser_survol_non' => 'Заборонити додавати логотип для відображення «при наведенні миші»',
89
-	'config_info_redirection' => 'Віртуальна стаття - це можливість перенаправляти відвідувачів по довільному URL, як на іншу сторінку цього сайта, так і на будь-яке посилання в інтернеті.',
90
-	'config_redirection' => 'Віртуальні статті (редирект)',
91
-	'config_titre_base_sup' => 'Опис додаткової бази даних',
92
-	'config_titre_base_sup_choix' => 'Виберіть додаткову базу даних',
93
-	'connexion_ldap' => 'З’єднання:',
94
-	'creer_et_associer_un_auteur' => 'Створити і додати автора',
75
+    // C
76
+    'cache_modifiable_webmestre' => 'Цей параметр може бути змінений тільки вебмастером.',
77
+    'calendrier_synchro' => 'Якщо ви використовуєте календар, сумісний з <b>iCal</b>, ви можете узгодити його з даними сайту.',
78
+    'config_activer_champs' => 'Увімкнути наступні поля',
79
+    'config_choix_base_sup' => 'Виберіть базу на цьому сервері',
80
+    'config_erreur_base_sup' => 'SPIP не може відобразити список доступних баз даних',
81
+    'config_info_base_sup' => 'Якщо вам потрібний запит інших баз даних, використовуючи SPIP, незалежно від того, чи знаходяться вони на тому ж SQL сервері або де-інде, використовуйте форму, що показана нижче для їх опису. Якщо ви залишите деякі поля пустими, то пов’язані деталі будуть використовуватися з основною базой даних.',
82
+    'config_info_base_sup_disponibles' => 'Додаткові бази даних, до яких можна відправити запити:',
83
+    'config_info_enregistree' => 'Нові налаштування збережено',
84
+    'config_info_logos' => 'Кожному елементу сайту можна встановити свій логотип і також логотип для відображення «при наведенні миші»',
85
+    'config_info_logos_utiliser' => 'Використовувати логотипи',
86
+    'config_info_logos_utiliser_non' => 'Не використовувати логотипи',
87
+    'config_info_logos_utiliser_survol' => 'Дозволити додавати логотип для відображення «при наведенні миші»',
88
+    'config_info_logos_utiliser_survol_non' => 'Заборонити додавати логотип для відображення «при наведенні миші»',
89
+    'config_info_redirection' => 'Віртуальна стаття - це можливість перенаправляти відвідувачів по довільному URL, як на іншу сторінку цього сайта, так і на будь-яке посилання в інтернеті.',
90
+    'config_redirection' => 'Віртуальні статті (редирект)',
91
+    'config_titre_base_sup' => 'Опис додаткової бази даних',
92
+    'config_titre_base_sup_choix' => 'Виберіть додаткову базу даних',
93
+    'connexion_ldap' => 'З’єднання:',
94
+    'creer_et_associer_un_auteur' => 'Створити і додати автора',
95 95
 
96
-	// D
97
-	'date_mot_heures' => ':',
96
+    // D
97
+    'date_mot_heures' => ':',
98 98
 
99
-	// E
100
-	'ecran_connexion_couleur_principale' => 'Головний колір',
101
-	'ecran_connexion_image_fond' => 'Зображення на тло',
102
-	'ecran_connexion_image_fond_explication' => 'Використати зображення (JPEG, 1920x1080 пікселів)',
103
-	'ecran_connexion_image_revenir_couleur_defaut' => 'Повернути кольори за замовчуванням',
104
-	'ecran_connexion_titre' => 'Сторінка входу',
105
-	'ecran_securite' => ' + сервіс безпеки @version@',
106
-	'email' => 'email',
107
-	'email_2' => 'email:',
108
-	'en_savoir_plus' => 'Детальніше',
109
-	'entree_adresse_annuaire' => 'Довідник адрес',
110
-	'entree_adresse_email' => 'Ваша адреса електронної пошти',
111
-	'entree_adresse_email_2' => 'E-mail',
112
-	'entree_base_donnee_1' => 'Адреса серверу бази даних',
113
-	'entree_base_donnee_2' => '(Зазвичай це «localhost», але ви можете уточнити в налаштуваннях хостінгу)',
114
-	'entree_biographie' => 'Коротка біографія на декілька слів.',
115
-	'entree_chemin_acces' => 'Ввести шлях доступу:',
116
-	'entree_cle_pgp' => 'Ваш ключ  PGP',
117
-	'entree_cle_pgp_2' => 'Ключ PGP ',
118
-	'entree_contenu_rubrique' => '(Короткий зміст рубрики.)',
119
-	'entree_identifiants_connexion' => 'Логін і пароль',
120
-	'entree_identifiants_connexion_2' => 'Інформація про підключення',
121
-	'entree_informations_connexion_ldap' => 'Будь ласка, вкажіть параметри підключення до LDAP. Ви можете отримати цю інформацію у вашого системного адміністратора.',
122
-	'entree_infos_perso' => 'Хто ви?',
123
-	'entree_infos_perso_2' => 'Хто автор?',
124
-	'entree_interieur_rubrique' => 'В розділі:',
125
-	'entree_liens_sites' => '<b>Гіперпосилання</b> (посилання, сайт для відвідування...)',
126
-	'entree_login' => 'Ваш логін',
127
-	'entree_login_connexion_1' => 'Логін з’єднання',
128
-	'entree_login_connexion_2' => '(Іноді відповідає вашому логіну FTP доступу, а іноді залишається порожнім)',
129
-	'entree_mot_passe' => 'Ваш пароль',
130
-	'entree_mot_passe_1' => 'Пароль',
131
-	'entree_mot_passe_2' => '(Іноді відповідає вашому паролю FTP доступу, а іноді залишається порожнім)',
132
-	'entree_nom_fichier' => 'Будь ласка, виберіть файл з резервною копією @texte_compresse@:',
133
-	'entree_nom_pseudo' => 'Ваше ім’я або псевдонім',
134
-	'entree_nom_pseudo_1' => '(Ваше ім’я або псевдонім)',
135
-	'entree_nom_pseudo_2' => 'Ім’я або псевдонім',
136
-	'entree_nom_site' => 'Назва вашого сайту',
137
-	'entree_nom_site_2' => 'Назва сайту',
138
-	'entree_nouveau_passe' => 'Новий пароль',
139
-	'entree_passe_ldap' => 'Пароль',
140
-	'entree_port_annuaire' => 'Номер порту каталогу',
141
-	'entree_signature' => 'Підпис',
142
-	'entree_titre_obligatoire' => '<b>Заголовок</b> [обов’язково]<br />',
143
-	'entree_url' => 'Адреса (URL) вашого сайту',
144
-	'entree_url_2' => 'URL',
145
-	'erreur_connect_deja_existant' => 'Сервер з такою назвою вже існує',
146
-	'erreur_contenu_suspect' => 'Текст екрановано',
147
-	'erreur_email_deja_existant' => 'Ця адреса електронної пошти вже зареєстрована.',
148
-	'erreur_nom_connect_incorrect' => 'Неприпустиме ім’я серверу',
149
-	'erreur_plugin_attribut_balise_manquant' => 'Атрибут @attribut@ відсутній в тезі @balise@.',
150
-	'erreur_plugin_desinstalation_echouee' => 'Не вдалося видалити плагін, але ви можете відключити його.',
151
-	'erreur_plugin_fichier_absent' => 'Відсутній файл',
152
-	'erreur_plugin_fichier_def_absent' => 'Файл визначення  відсутній',
153
-	'erreur_plugin_nom_fonction_interdit' => 'Ім´я функції заборонено',
154
-	'erreur_plugin_nom_manquant' => 'Відсутня назва плагіну ',
155
-	'erreur_plugin_prefix_manquant' => 'Простір імен плагіна невизначений',
156
-	'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; відсутнє в файлі опису',
157
-	'erreur_plugin_version_manquant' => 'Відсутня версія плагіну',
158
-	'erreur_type_fichier' => 'Неконкретний тип файлу',
99
+    // E
100
+    'ecran_connexion_couleur_principale' => 'Головний колір',
101
+    'ecran_connexion_image_fond' => 'Зображення на тло',
102
+    'ecran_connexion_image_fond_explication' => 'Використати зображення (JPEG, 1920x1080 пікселів)',
103
+    'ecran_connexion_image_revenir_couleur_defaut' => 'Повернути кольори за замовчуванням',
104
+    'ecran_connexion_titre' => 'Сторінка входу',
105
+    'ecran_securite' => ' + сервіс безпеки @version@',
106
+    'email' => 'email',
107
+    'email_2' => 'email:',
108
+    'en_savoir_plus' => 'Детальніше',
109
+    'entree_adresse_annuaire' => 'Довідник адрес',
110
+    'entree_adresse_email' => 'Ваша адреса електронної пошти',
111
+    'entree_adresse_email_2' => 'E-mail',
112
+    'entree_base_donnee_1' => 'Адреса серверу бази даних',
113
+    'entree_base_donnee_2' => '(Зазвичай це «localhost», але ви можете уточнити в налаштуваннях хостінгу)',
114
+    'entree_biographie' => 'Коротка біографія на декілька слів.',
115
+    'entree_chemin_acces' => 'Ввести шлях доступу:',
116
+    'entree_cle_pgp' => 'Ваш ключ  PGP',
117
+    'entree_cle_pgp_2' => 'Ключ PGP ',
118
+    'entree_contenu_rubrique' => '(Короткий зміст рубрики.)',
119
+    'entree_identifiants_connexion' => 'Логін і пароль',
120
+    'entree_identifiants_connexion_2' => 'Інформація про підключення',
121
+    'entree_informations_connexion_ldap' => 'Будь ласка, вкажіть параметри підключення до LDAP. Ви можете отримати цю інформацію у вашого системного адміністратора.',
122
+    'entree_infos_perso' => 'Хто ви?',
123
+    'entree_infos_perso_2' => 'Хто автор?',
124
+    'entree_interieur_rubrique' => 'В розділі:',
125
+    'entree_liens_sites' => '<b>Гіперпосилання</b> (посилання, сайт для відвідування...)',
126
+    'entree_login' => 'Ваш логін',
127
+    'entree_login_connexion_1' => 'Логін з’єднання',
128
+    'entree_login_connexion_2' => '(Іноді відповідає вашому логіну FTP доступу, а іноді залишається порожнім)',
129
+    'entree_mot_passe' => 'Ваш пароль',
130
+    'entree_mot_passe_1' => 'Пароль',
131
+    'entree_mot_passe_2' => '(Іноді відповідає вашому паролю FTP доступу, а іноді залишається порожнім)',
132
+    'entree_nom_fichier' => 'Будь ласка, виберіть файл з резервною копією @texte_compresse@:',
133
+    'entree_nom_pseudo' => 'Ваше ім’я або псевдонім',
134
+    'entree_nom_pseudo_1' => '(Ваше ім’я або псевдонім)',
135
+    'entree_nom_pseudo_2' => 'Ім’я або псевдонім',
136
+    'entree_nom_site' => 'Назва вашого сайту',
137
+    'entree_nom_site_2' => 'Назва сайту',
138
+    'entree_nouveau_passe' => 'Новий пароль',
139
+    'entree_passe_ldap' => 'Пароль',
140
+    'entree_port_annuaire' => 'Номер порту каталогу',
141
+    'entree_signature' => 'Підпис',
142
+    'entree_titre_obligatoire' => '<b>Заголовок</b> [обов’язково]<br />',
143
+    'entree_url' => 'Адреса (URL) вашого сайту',
144
+    'entree_url_2' => 'URL',
145
+    'erreur_connect_deja_existant' => 'Сервер з такою назвою вже існує',
146
+    'erreur_contenu_suspect' => 'Текст екрановано',
147
+    'erreur_email_deja_existant' => 'Ця адреса електронної пошти вже зареєстрована.',
148
+    'erreur_nom_connect_incorrect' => 'Неприпустиме ім’я серверу',
149
+    'erreur_plugin_attribut_balise_manquant' => 'Атрибут @attribut@ відсутній в тезі @balise@.',
150
+    'erreur_plugin_desinstalation_echouee' => 'Не вдалося видалити плагін, але ви можете відключити його.',
151
+    'erreur_plugin_fichier_absent' => 'Відсутній файл',
152
+    'erreur_plugin_fichier_def_absent' => 'Файл визначення  відсутній',
153
+    'erreur_plugin_nom_fonction_interdit' => 'Ім´я функції заборонено',
154
+    'erreur_plugin_nom_manquant' => 'Відсутня назва плагіну ',
155
+    'erreur_plugin_prefix_manquant' => 'Простір імен плагіна невизначений',
156
+    'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; відсутнє в файлі опису',
157
+    'erreur_plugin_version_manquant' => 'Відсутня версія плагіну',
158
+    'erreur_type_fichier' => 'Неконкретний тип файлу',
159 159
 
160
-	// H
161
-	'htaccess_a_simuler' => 'Увага: в налаштуваннях веб-серверу відключено використання @htaccess@ файлів. Для забезпечення достатнього рівня безпеки внесіть зміни до налаштувань серверу самостійно або зверніться до технічної підтримки хостінгу. Ви також можете задати константи @constantes@ (в файлі mes_options.php) так, щоб ці Файли знаходились поза папкою @document_root@.',
162
-	'htaccess_inoperant' => 'htaccess не робочий',
160
+    // H
161
+    'htaccess_a_simuler' => 'Увага: в налаштуваннях веб-серверу відключено використання @htaccess@ файлів. Для забезпечення достатнього рівня безпеки внесіть зміни до налаштувань серверу самостійно або зверніться до технічної підтримки хостінгу. Ви також можете задати константи @constantes@ (в файлі mes_options.php) так, щоб ці Файли знаходились поза папкою @document_root@.',
162
+    'htaccess_inoperant' => 'htaccess не робочий',
163 163
 
164
-	// I
165
-	'ical_info1' => 'Ця сторінка надає вам декілька методів для підтримки зв’язку з діяльністю цього сайту',
166
-	'ical_info2' => 'Ви можете дізнатися більше в <a href="@spipnet@">документації про SPIP</a>.',
167
-	'ical_info_calendrier' => 'В вашему розпорядженні є два календарі. Перший - це карта сайту, що відображає всі опубліковані статті. Другий містить редакторські оголошення, а також ваші останні особисті повідомлення: його збережено для вас завдяки ключу, який ви можете змінити будь-коли, підтвердивши свій пароль.',
168
-	'ical_methode_http' => 'Завантаження',
169
-	'ical_methode_webcal' => 'Синхронізація (webcal://)',
170
-	'ical_texte_js' => 'Ви можете вставити цей javascript код на будь-який сайт, щоб відображати останні опубліковані статті і матеріали вашого сайту.',
171
-	'ical_texte_prive' => 'Цей календар є строго особистим, він інформує вас про роботу зі статтями на цьому сайті (завдання, персональні налаштування, відправлені статті і новини дня...).',
172
-	'ical_texte_public' => 'Цей календар дозволяє вам слідкувати за основною діяльністю цього сайту (публікація статтей і новин).',
173
-	'ical_texte_rss' => 'Ви можете експортувати останні поновлення на вашому сайті в форматі XML/RSS (Rich Site Summary). Також, завдяки цьому формату даних, ви можете імпортувати інформацію з інших сайтів в ІнтерНемаі.',
174
-	'ical_titre_js' => 'Javascript',
175
-	'ical_titre_mailing' => 'Список адресатів',
176
-	'ical_titre_rss' => 'Отримання статей і новин з інших сайтов по RSS',
177
-	'icone_accueil' => 'Головна',
178
-	'icone_activer_cookie' => 'Помістити cookie',
179
-	'icone_activite' => 'Зворотній зв’язок',
180
-	'icone_admin_plugin' => 'Плагіни',
181
-	'icone_administration' => 'Обслуговування',
182
-	'icone_afficher_auteurs' => 'Показати авторів',
183
-	'icone_afficher_visiteurs' => 'Показати відвідувачів',
184
-	'icone_arret_discussion' => 'Припинити участь в цьому обговоренні',
185
-	'icone_calendrier' => 'Календар',
186
-	'icone_configuration' => 'Конфігурація',
187
-	'icone_creer_auteur' => 'Створити автора і додати до статті',
188
-	'icone_creer_mot_cle' => 'Створити нове ключове слово і пов’язати його із цією статтею.',
189
-	'icone_creer_rubrique_2' => 'Створити нову рубрику',
190
-	'icone_developpement' => 'У розвитку',
191
-	'icone_edition' => 'Редагувати',
192
-	'icone_ma_langue' => 'Моя мова',
193
-	'icone_mes_infos' => 'Моя інформація',
194
-	'icone_mes_preferences' => 'Мої уподобання',
195
-	'icone_modifier_article' => 'Змінити статтю',
196
-	'icone_modifier_rubrique' => 'Змінити розділ',
197
-	'icone_publication' => 'Публікації',
198
-	'icone_relancer_signataire' => 'Відновити підпис',
199
-	'icone_retour' => 'Назад',
200
-	'icone_retour_article' => 'Назад до статті',
201
-	'icone_squelette' => 'Шаблони',
202
-	'icone_suivi_publication' => 'Моніторинг публікації',
203
-	'icone_supprimer_cookie' => 'Видалити cookie',
204
-	'icone_supprimer_rubrique' => 'Видалити розділ',
205
-	'icone_supprimer_signature' => 'Видалити підпис',
206
-	'icone_valider_signature' => 'Затвердити підпис',
207
-	'image_administrer_rubrique' => 'Ви можете керувати цим розділом',
208
-	'impossible_modifier_login_auteur' => 'Неможливо змінити логін.',
209
-	'impossible_modifier_pass_auteur' => 'Неможливо змінити пароль.',
210
-	'info_1_article' => '1 стаття',
211
-	'info_1_auteur' => '1 автор',
212
-	'info_1_message' => '1 повідомлення',
213
-	'info_1_mot_cle' => '1 ключове слово',
214
-	'info_1_rubrique' => '1 розділ',
215
-	'info_1_visiteur' => '1 відвідувач',
216
-	'info_activer_cookie' => 'Ви можете увімкнути <b>адміністративні cookie</b>, що дозволить вам легко перемикатися  між основною і адміністративною частиною сайту.',
217
-	'info_activer_menu_developpement' => 'Показати меню розвитку',
218
-	'info_admin_etre_webmestre' => 'Надати мені права вебмастера',
219
-	'info_admin_je_suis_webmestre' => 'Я <b>вебмастер</b>',
220
-	'info_admin_statuer_webmestre' => 'Надати цьому адміністратору права веб-майстра',
221
-	'info_admin_webmestre' => 'Адміністратор є <b>вебмастером</b>',
222
-	'info_administrateur' => 'Адміністратор',
223
-	'info_administrateur_1' => 'Адміністратор',
224
-	'info_administrateur_2' => 'на цьому сайті (<i>використовувати з пересторогою</i>)',
225
-	'info_administrateur_site_01' => 'Якщо ви адміністратор сайта, будь ласка',
226
-	'info_administrateur_site_02' => 'натисніть тут',
227
-	'info_administrateurs' => 'Адміністратори',
228
-	'info_administrer_rubrique' => 'Ви можете управляти цією рубрикою',
229
-	'info_adresse' => 'за адресою:',
230
-	'info_adresse_desinscription' => 'Адреса щоб відписатися:',
231
-	'info_adresse_url' => 'Адреса (URL) загального сайту',
232
-	'info_afficher_par_nb' => 'Показати',
233
-	'info_aide_en_ligne' => 'SPIP Oнлайн Допомога',
234
-	'info_ajout_image' => 'Коли ви додаєте зображення як прикріплені документи до статті, SPIP може автоматично створити зменшену копію цих зображень. Це дозволить, наприклад, автоматично створювати галерею чи портфоліо.',
235
-	'info_ajouter_rubrique' => 'Додати іншу рубрику для управління:',
236
-	'info_annonce_nouveautes' => 'Анонси останніх новин',
237
-	'info_article' => 'стаття',
238
-	'info_article_2' => 'статті',
239
-	'info_article_a_paraitre' => 'статті, які будуть опубліковані в майбутньому',
240
-	'info_articles_02' => 'статті',
241
-	'info_articles_2' => 'Статті',
242
-	'info_articles_auteur' => 'Статті автора',
243
-	'info_articles_miens' => 'Мої статті',
244
-	'info_articles_tous' => 'Усі статті',
245
-	'info_articles_trouves' => 'Знайдені статті',
246
-	'info_attente_validation' => 'Ваші статті на затвердженні',
247
-	'info_aucun_article' => 'Нема статтей',
248
-	'info_aucun_auteur' => 'Нема авторів',
249
-	'info_aucun_message' => 'Нема повідомлень',
250
-	'info_aucun_rubrique' => 'Нема розділів',
251
-	'info_aujourdhui' => 'сьогодні:',
252
-	'info_auteur_gere_rubriques' => 'Автор керує наступними розділами:',
253
-	'info_auteur_gere_toutes_rubriques' => 'Автор керує <b>всіма рубриками</b>',
254
-	'info_auteur_gere_toutes_rubriques_2' => 'Я керую <b>всіма розділами</b>',
255
-	'info_auteurs' => 'Автори',
256
-	'info_auteurs_par_tri' => 'Автори@partri@',
257
-	'info_auteurs_trouves' => 'Знайдені автори',
258
-	'info_authentification_externe' => 'Зовнішня аутентифікація',
259
-	'info_avertissement' => 'Попередження',
260
-	'info_barre_outils' => 'з панеллю інструментів?',
261
-	'info_base_installee' => 'Структуру вашої бази даних встановлено.',
262
-	'info_bio' => 'Біографія',
263
-	'info_cache_desactive' => 'Кешування вимкнено.',
264
-	'info_chapeau' => 'Вступ',
265
-	'info_chapeau_2' => 'Вступ:',
266
-	'info_chemin_acces_1' => 'Опції: <b>Шлях доступу до каталогу</b>',
267
-	'info_chemin_acces_2' => 'Тепер ви повинні налаштувати шлях доступу до інформації в  довіднику. Ця інформація необхідна для перегляду профілів користувачів, записаних в  довіднику.',
268
-	'info_chemin_acces_annuaire' => 'Опції: <b>Шлях доступу к каталогу</b>',
269
-	'info_choix_base' => 'Третій етап:',
270
-	'info_classement_1' => ' з @liste@',
271
-	'info_classement_2' => ' з @liste@',
272
-	'info_code_acces' => 'Не забудьте ваші власні коди доступу!',
273
-	'info_config_suivi' => 'Якщо ця адреса відповідає списку адресатів, ви можете вказати нижче адресу, за якою учасники сайту можуть зареєструватися. Цією адресою може бути адреса сайту (наприклад сторінка списка реєстрації через мережу) або адреса електронної пошти з певною темою (наприклад: <tt>@adresse_suivi@?subject=subscribe</tt>):',
274
-	'info_config_suivi_explication' => 'Ви можете підписатися на почтову розсилку цього сайту і отримувати на email інформацію про статті та новини, відправлені для публікації.',
275
-	'info_confirmer_passe' => 'Підтвердіть новий пароль:',
276
-	'info_conflit_edition_avis_non_sauvegarde' => 'Увага! Наступні поля були змінені. Ваші внесені зміни в цих полях не були враховані.',
277
-	'info_conflit_edition_differences' => 'Відмінності:',
278
-	'info_conflit_edition_version_enregistree' => 'Зареєстрована версія:',
279
-	'info_conflit_edition_votre_version' => 'Ваша версія:',
280
-	'info_connexion_base' => 'Спроба з’єднання з базою даних',
281
-	'info_connexion_base_donnee' => 'Підключення до бази даних',
282
-	'info_connexion_ldap_ok' => '<b>З’єднання з LDAP встановлено. </b> <p>Ви можете перейти до наступного кроку.</p>',
283
-	'info_connexion_mysql' => 'Ваше з’єднання з SQL',
284
-	'info_connexion_ok' => 'З’єднання встановлено.',
285
-	'info_contact' => 'Контакт',
286
-	'info_contenu_articles' => 'Зміст статтей',
287
-	'info_contributions' => 'Внески',
288
-	'info_creation_paragraphe' => '(Розділяйте абзаци порожніми строками)',
289
-	'info_creation_rubrique' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику. ',
290
-	'info_creation_tables' => 'Створення таблиць бази даних',
291
-	'info_creer_base' => '<b>Створити</b> нову базу даних:',
292
-	'info_dans_rubrique' => 'У рубриці :',
293
-	'info_date_publication_anterieure' => 'Дата попередньої редакції :',
294
-	'info_date_referencement' => 'ДАТА ПОСИЛАННЯ НА ЦЕЙ САЙТ:',
295
-	'info_derniere_etape' => 'Готово!',
296
-	'info_descriptif' => 'Опис:',
297
-	'info_desinstaller_plugin' => 'видаляє дані і відключає плагін',
298
-	'info_discussion_cours' => 'Поточні обговорення',
299
-	'info_ecrire_article' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику.',
300
-	'info_email_envoi' => ' Адреса електронної пошти (необов’язково)',
301
-	'info_email_envoi_txt' => 'Введіть e-mail адресу відправника, що використовується для відправлення електронних листів (зазвичай адреса користувача використовується як адреса відправника):',
302
-	'info_email_webmestre' => 'E-mail веб-мастера',
303
-	'info_envoi_email_automatique' => 'Автоматична відправка повідомлення електронної пошти ',
304
-	'info_envoyer_maintenant' => 'Відправити зараз',
305
-	'info_etape_suivante' => 'Перейти до наступного етапу',
306
-	'info_etape_suivante_1' => 'Ви можете перейти до наступного етапу.',
307
-	'info_etape_suivante_2' => 'Ви можете перейти до наступного етапу.',
308
-	'info_exceptions_proxy' => 'Винятки для проксі',
309
-	'info_exportation_base' => 'експортувати базу даних в @archive@',
310
-	'info_facilite_suivi_activite' => 'Для полегшення моніторингу діяльності   редакційних SPIP сайт може відправити його поштою, наприклад, на  список розсилки редакторів, бізнес-додатки публікації та перевірки статей.',
311
-	'info_fichiers_authent' => 'Файл аутентифікації «.htpasswd»',
312
-	'info_forums_abo_invites' => 'Ваш сайт має форуми за підпискою; відвідувачі можуть зареєструватися на них на основному сайті.',
313
-	'info_gauche_admin_tech' => '<b>Сторінка тільки для вебмастера сайта.</b> <p>Ви можете виконувати завдання щодо експлуатації сайту. Частина з них може потребувати FTP-доступу до сайту.</p>',
314
-	'info_gauche_admin_vider' => '<b>Тільки вебмастери мають доступ до цієї сторінки.</b> <p>Тут є можливість виконувати різні завдання по обслуговуванню сайта. Для виконання окремих завдань необхідний доступ до сайту по FTP.</p>',
315
-	'info_gauche_auteurs' => 'Перелік всіх авторів сайту. Статус автора позначений кольором (адміністратор = зелений; автор = жовтий).',
316
-	'info_gauche_auteurs_exterieurs' => 'Користувачі, що зареєструвалися, позначені синім кольором, а видалені користувачі - іконкою кошика.',
317
-	'info_gauche_messagerie' => 'Передача повідомлень дозволяє обмінюватися повідомленнями між редакторами, зберигати нотатки (для вашого особистого використання) або показувати оголошення на основній сторінці адміністративної частини (якщо ви - адміністратор).',
318
-	'info_gauche_statistiques_referers' => 'Ця сторінка показує список <i>посилань</i>, тобто ті сайти, які мають посилання на ваш сайт, тільки для вчора і сьогодні: фактично цей список поновлюється кожні 24 години.',
319
-	'info_gauche_visiteurs_enregistres' => 'Ви знайдете тут зареєстрованних відвідувачів основноі частини сайту (форуми за підпискою).',
320
-	'info_generation_miniatures_images' => 'Створення зменшених зображень',
321
-	'info_gerer_trad_objets' => '@objets@ : управління перекладами',
322
-	'info_hebergeur_desactiver_envoi_email' => 'Деякі хости відключають  автоматизовану відправку листів на своих серверах. В цьому випадку наступні можливості SPIP не можуть бути здійснені.',
323
-	'info_hier' => 'вчора:',
324
-	'info_identification_publique' => 'Ваша публична ідентифікація...',
325
-	'info_image_process' => 'Виберіть кращий метод для створення зменшеної копії, натиснувши на відповідну картинку.',
326
-	'info_image_process2' => 'Якщо картинки не відображаються, це значить, що ваш хостінг не підтримує розширения по роботі з зображеннями. Уточніть в технічній підтримці хостінгу про можливості використовувати бібліотеки «GD» або «Imagemagic».',
327
-	'info_images_auto' => 'Кеш файлів зображень',
328
-	'info_informations_personnelles' => 'Налаштування профиля',
329
-	'info_inscription' => 'Реєстрація',
330
-	'info_inscription_automatique' => 'Автоматична реєстрація нових авторів',
331
-	'info_jeu_caractere' => 'Кодування сайту',
332
-	'info_jours' => 'дні',
333
-	'info_laisser_champs_vides' => 'залиште ці поля порожніми)',
334
-	'info_langues' => 'Мови сайту',
335
-	'info_ldap_ok' => 'Встанослення справжності LDAP.',
336
-	'info_lien_hypertexte' => 'Гиперпосилання:',
337
-	'info_liste_nouveautes_envoyee' => 'Інформацію про останні оновлення відправлено',
338
-	'info_liste_redacteurs_connectes' => 'Автори онлайн',
339
-	'info_login_existant' => 'Цей логін вже використовується.',
340
-	'info_login_trop_court' => 'Занадто короткий логін.',
341
-	'info_login_trop_court_car_pluriel' => 'Логін повинен складатися мінімум з @nb@ символів.',
342
-	'info_logos' => 'Логотипи',
343
-	'info_maximum' => 'максимум:',
344
-	'info_meme_rubrique' => 'В розділі:',
345
-	'info_message_en_redaction' => 'Ваше повідомлення в роботі',
346
-	'info_message_technique' => 'Технічене повідомлення:',
347
-	'info_messagerie_interne' => 'Внутрішня передача повідомлень',
348
-	'info_mise_a_niveau_base' => 'оновлення бази даних SQL',
349
-	'info_mise_a_niveau_base_2' => '{{Попередження!}} Ви встановили версію SPIP файлів {старіше} ніж та, яку було попередньо встановлено на цьому сайті: ви ризикуєте втратити базу даних, і тоді ваш сайт не зможе працювати належним чином. <br /> {{Перевстановіть SPIP файли.}}',
350
-	'info_modification_enregistree' => 'Ваши зміни збережено',
351
-	'info_modifier_auteur' => 'Змінити автора:',
352
-	'info_modifier_rubrique' => 'Змінити розділ:',
353
-	'info_modifier_titre' => 'Змінити: @titre@',
354
-	'info_mon_site_spip' => 'Мій сайт ',
355
-	'info_moyenne' => 'в средньому:',
356
-	'info_multi_cet_article' => 'Мова статті:',
357
-	'info_multi_langues_choisies' => 'Виберіть мови для редагування матеріалів на сайті. Мови, які вже використовує ваш сайт (наверху списку) не можуть бути вимкнені.',
358
-	'info_multi_objets' => '@objets@ : увімкнути мовне меню',
359
-	'info_multi_secteurs' => '... тільки для розділів в корені сайту?',
360
-	'info_nb_articles' => '@nb@ статтей',
361
-	'info_nb_auteurs' => '@nb@ авторів',
362
-	'info_nb_messages' => '@nb@ повідомлень',
363
-	'info_nb_mots_cles' => '@nb@ ключових слів',
364
-	'info_nb_rubriques' => '@nb@ розділ(ів)',
365
-	'info_nb_visiteurs' => '@nb@ відвідувачів',
366
-	'info_nom' => 'Ім’я',
367
-	'info_nom_destinataire' => 'Ім’я користувача',
368
-	'info_nom_pas_conforme' => 'HTML теги не допускаються',
369
-	'info_nom_site' => 'Назва вашого сайта',
370
-	'info_nombre_articles' => '@nb_articles@ статті,',
371
-	'info_nombre_rubriques' => '@nb_rubriques@ рубрики,',
372
-	'info_nombre_sites' => '@nb_sites@ сайти,',
373
-	'info_non_deplacer' => 'Не переміщувати...',
374
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP может регулярно відправляти новини, оголошення сайта
164
+    // I
165
+    'ical_info1' => 'Ця сторінка надає вам декілька методів для підтримки зв’язку з діяльністю цього сайту',
166
+    'ical_info2' => 'Ви можете дізнатися більше в <a href="@spipnet@">документації про SPIP</a>.',
167
+    'ical_info_calendrier' => 'В вашему розпорядженні є два календарі. Перший - це карта сайту, що відображає всі опубліковані статті. Другий містить редакторські оголошення, а також ваші останні особисті повідомлення: його збережено для вас завдяки ключу, який ви можете змінити будь-коли, підтвердивши свій пароль.',
168
+    'ical_methode_http' => 'Завантаження',
169
+    'ical_methode_webcal' => 'Синхронізація (webcal://)',
170
+    'ical_texte_js' => 'Ви можете вставити цей javascript код на будь-який сайт, щоб відображати останні опубліковані статті і матеріали вашого сайту.',
171
+    'ical_texte_prive' => 'Цей календар є строго особистим, він інформує вас про роботу зі статтями на цьому сайті (завдання, персональні налаштування, відправлені статті і новини дня...).',
172
+    'ical_texte_public' => 'Цей календар дозволяє вам слідкувати за основною діяльністю цього сайту (публікація статтей і новин).',
173
+    'ical_texte_rss' => 'Ви можете експортувати останні поновлення на вашому сайті в форматі XML/RSS (Rich Site Summary). Також, завдяки цьому формату даних, ви можете імпортувати інформацію з інших сайтів в ІнтерНемаі.',
174
+    'ical_titre_js' => 'Javascript',
175
+    'ical_titre_mailing' => 'Список адресатів',
176
+    'ical_titre_rss' => 'Отримання статей і новин з інших сайтов по RSS',
177
+    'icone_accueil' => 'Головна',
178
+    'icone_activer_cookie' => 'Помістити cookie',
179
+    'icone_activite' => 'Зворотній зв’язок',
180
+    'icone_admin_plugin' => 'Плагіни',
181
+    'icone_administration' => 'Обслуговування',
182
+    'icone_afficher_auteurs' => 'Показати авторів',
183
+    'icone_afficher_visiteurs' => 'Показати відвідувачів',
184
+    'icone_arret_discussion' => 'Припинити участь в цьому обговоренні',
185
+    'icone_calendrier' => 'Календар',
186
+    'icone_configuration' => 'Конфігурація',
187
+    'icone_creer_auteur' => 'Створити автора і додати до статті',
188
+    'icone_creer_mot_cle' => 'Створити нове ключове слово і пов’язати його із цією статтею.',
189
+    'icone_creer_rubrique_2' => 'Створити нову рубрику',
190
+    'icone_developpement' => 'У розвитку',
191
+    'icone_edition' => 'Редагувати',
192
+    'icone_ma_langue' => 'Моя мова',
193
+    'icone_mes_infos' => 'Моя інформація',
194
+    'icone_mes_preferences' => 'Мої уподобання',
195
+    'icone_modifier_article' => 'Змінити статтю',
196
+    'icone_modifier_rubrique' => 'Змінити розділ',
197
+    'icone_publication' => 'Публікації',
198
+    'icone_relancer_signataire' => 'Відновити підпис',
199
+    'icone_retour' => 'Назад',
200
+    'icone_retour_article' => 'Назад до статті',
201
+    'icone_squelette' => 'Шаблони',
202
+    'icone_suivi_publication' => 'Моніторинг публікації',
203
+    'icone_supprimer_cookie' => 'Видалити cookie',
204
+    'icone_supprimer_rubrique' => 'Видалити розділ',
205
+    'icone_supprimer_signature' => 'Видалити підпис',
206
+    'icone_valider_signature' => 'Затвердити підпис',
207
+    'image_administrer_rubrique' => 'Ви можете керувати цим розділом',
208
+    'impossible_modifier_login_auteur' => 'Неможливо змінити логін.',
209
+    'impossible_modifier_pass_auteur' => 'Неможливо змінити пароль.',
210
+    'info_1_article' => '1 стаття',
211
+    'info_1_auteur' => '1 автор',
212
+    'info_1_message' => '1 повідомлення',
213
+    'info_1_mot_cle' => '1 ключове слово',
214
+    'info_1_rubrique' => '1 розділ',
215
+    'info_1_visiteur' => '1 відвідувач',
216
+    'info_activer_cookie' => 'Ви можете увімкнути <b>адміністративні cookie</b>, що дозволить вам легко перемикатися  між основною і адміністративною частиною сайту.',
217
+    'info_activer_menu_developpement' => 'Показати меню розвитку',
218
+    'info_admin_etre_webmestre' => 'Надати мені права вебмастера',
219
+    'info_admin_je_suis_webmestre' => 'Я <b>вебмастер</b>',
220
+    'info_admin_statuer_webmestre' => 'Надати цьому адміністратору права веб-майстра',
221
+    'info_admin_webmestre' => 'Адміністратор є <b>вебмастером</b>',
222
+    'info_administrateur' => 'Адміністратор',
223
+    'info_administrateur_1' => 'Адміністратор',
224
+    'info_administrateur_2' => 'на цьому сайті (<i>використовувати з пересторогою</i>)',
225
+    'info_administrateur_site_01' => 'Якщо ви адміністратор сайта, будь ласка',
226
+    'info_administrateur_site_02' => 'натисніть тут',
227
+    'info_administrateurs' => 'Адміністратори',
228
+    'info_administrer_rubrique' => 'Ви можете управляти цією рубрикою',
229
+    'info_adresse' => 'за адресою:',
230
+    'info_adresse_desinscription' => 'Адреса щоб відписатися:',
231
+    'info_adresse_url' => 'Адреса (URL) загального сайту',
232
+    'info_afficher_par_nb' => 'Показати',
233
+    'info_aide_en_ligne' => 'SPIP Oнлайн Допомога',
234
+    'info_ajout_image' => 'Коли ви додаєте зображення як прикріплені документи до статті, SPIP може автоматично створити зменшену копію цих зображень. Це дозволить, наприклад, автоматично створювати галерею чи портфоліо.',
235
+    'info_ajouter_rubrique' => 'Додати іншу рубрику для управління:',
236
+    'info_annonce_nouveautes' => 'Анонси останніх новин',
237
+    'info_article' => 'стаття',
238
+    'info_article_2' => 'статті',
239
+    'info_article_a_paraitre' => 'статті, які будуть опубліковані в майбутньому',
240
+    'info_articles_02' => 'статті',
241
+    'info_articles_2' => 'Статті',
242
+    'info_articles_auteur' => 'Статті автора',
243
+    'info_articles_miens' => 'Мої статті',
244
+    'info_articles_tous' => 'Усі статті',
245
+    'info_articles_trouves' => 'Знайдені статті',
246
+    'info_attente_validation' => 'Ваші статті на затвердженні',
247
+    'info_aucun_article' => 'Нема статтей',
248
+    'info_aucun_auteur' => 'Нема авторів',
249
+    'info_aucun_message' => 'Нема повідомлень',
250
+    'info_aucun_rubrique' => 'Нема розділів',
251
+    'info_aujourdhui' => 'сьогодні:',
252
+    'info_auteur_gere_rubriques' => 'Автор керує наступними розділами:',
253
+    'info_auteur_gere_toutes_rubriques' => 'Автор керує <b>всіма рубриками</b>',
254
+    'info_auteur_gere_toutes_rubriques_2' => 'Я керую <b>всіма розділами</b>',
255
+    'info_auteurs' => 'Автори',
256
+    'info_auteurs_par_tri' => 'Автори@partri@',
257
+    'info_auteurs_trouves' => 'Знайдені автори',
258
+    'info_authentification_externe' => 'Зовнішня аутентифікація',
259
+    'info_avertissement' => 'Попередження',
260
+    'info_barre_outils' => 'з панеллю інструментів?',
261
+    'info_base_installee' => 'Структуру вашої бази даних встановлено.',
262
+    'info_bio' => 'Біографія',
263
+    'info_cache_desactive' => 'Кешування вимкнено.',
264
+    'info_chapeau' => 'Вступ',
265
+    'info_chapeau_2' => 'Вступ:',
266
+    'info_chemin_acces_1' => 'Опції: <b>Шлях доступу до каталогу</b>',
267
+    'info_chemin_acces_2' => 'Тепер ви повинні налаштувати шлях доступу до інформації в  довіднику. Ця інформація необхідна для перегляду профілів користувачів, записаних в  довіднику.',
268
+    'info_chemin_acces_annuaire' => 'Опції: <b>Шлях доступу к каталогу</b>',
269
+    'info_choix_base' => 'Третій етап:',
270
+    'info_classement_1' => ' з @liste@',
271
+    'info_classement_2' => ' з @liste@',
272
+    'info_code_acces' => 'Не забудьте ваші власні коди доступу!',
273
+    'info_config_suivi' => 'Якщо ця адреса відповідає списку адресатів, ви можете вказати нижче адресу, за якою учасники сайту можуть зареєструватися. Цією адресою може бути адреса сайту (наприклад сторінка списка реєстрації через мережу) або адреса електронної пошти з певною темою (наприклад: <tt>@adresse_suivi@?subject=subscribe</tt>):',
274
+    'info_config_suivi_explication' => 'Ви можете підписатися на почтову розсилку цього сайту і отримувати на email інформацію про статті та новини, відправлені для публікації.',
275
+    'info_confirmer_passe' => 'Підтвердіть новий пароль:',
276
+    'info_conflit_edition_avis_non_sauvegarde' => 'Увага! Наступні поля були змінені. Ваші внесені зміни в цих полях не були враховані.',
277
+    'info_conflit_edition_differences' => 'Відмінності:',
278
+    'info_conflit_edition_version_enregistree' => 'Зареєстрована версія:',
279
+    'info_conflit_edition_votre_version' => 'Ваша версія:',
280
+    'info_connexion_base' => 'Спроба з’єднання з базою даних',
281
+    'info_connexion_base_donnee' => 'Підключення до бази даних',
282
+    'info_connexion_ldap_ok' => '<b>З’єднання з LDAP встановлено. </b> <p>Ви можете перейти до наступного кроку.</p>',
283
+    'info_connexion_mysql' => 'Ваше з’єднання з SQL',
284
+    'info_connexion_ok' => 'З’єднання встановлено.',
285
+    'info_contact' => 'Контакт',
286
+    'info_contenu_articles' => 'Зміст статтей',
287
+    'info_contributions' => 'Внески',
288
+    'info_creation_paragraphe' => '(Розділяйте абзаци порожніми строками)',
289
+    'info_creation_rubrique' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику. ',
290
+    'info_creation_tables' => 'Створення таблиць бази даних',
291
+    'info_creer_base' => '<b>Створити</b> нову базу даних:',
292
+    'info_dans_rubrique' => 'У рубриці :',
293
+    'info_date_publication_anterieure' => 'Дата попередньої редакції :',
294
+    'info_date_referencement' => 'ДАТА ПОСИЛАННЯ НА ЦЕЙ САЙТ:',
295
+    'info_derniere_etape' => 'Готово!',
296
+    'info_descriptif' => 'Опис:',
297
+    'info_desinstaller_plugin' => 'видаляє дані і відключає плагін',
298
+    'info_discussion_cours' => 'Поточні обговорення',
299
+    'info_ecrire_article' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику.',
300
+    'info_email_envoi' => ' Адреса електронної пошти (необов’язково)',
301
+    'info_email_envoi_txt' => 'Введіть e-mail адресу відправника, що використовується для відправлення електронних листів (зазвичай адреса користувача використовується як адреса відправника):',
302
+    'info_email_webmestre' => 'E-mail веб-мастера',
303
+    'info_envoi_email_automatique' => 'Автоматична відправка повідомлення електронної пошти ',
304
+    'info_envoyer_maintenant' => 'Відправити зараз',
305
+    'info_etape_suivante' => 'Перейти до наступного етапу',
306
+    'info_etape_suivante_1' => 'Ви можете перейти до наступного етапу.',
307
+    'info_etape_suivante_2' => 'Ви можете перейти до наступного етапу.',
308
+    'info_exceptions_proxy' => 'Винятки для проксі',
309
+    'info_exportation_base' => 'експортувати базу даних в @archive@',
310
+    'info_facilite_suivi_activite' => 'Для полегшення моніторингу діяльності   редакційних SPIP сайт може відправити його поштою, наприклад, на  список розсилки редакторів, бізнес-додатки публікації та перевірки статей.',
311
+    'info_fichiers_authent' => 'Файл аутентифікації «.htpasswd»',
312
+    'info_forums_abo_invites' => 'Ваш сайт має форуми за підпискою; відвідувачі можуть зареєструватися на них на основному сайті.',
313
+    'info_gauche_admin_tech' => '<b>Сторінка тільки для вебмастера сайта.</b> <p>Ви можете виконувати завдання щодо експлуатації сайту. Частина з них може потребувати FTP-доступу до сайту.</p>',
314
+    'info_gauche_admin_vider' => '<b>Тільки вебмастери мають доступ до цієї сторінки.</b> <p>Тут є можливість виконувати різні завдання по обслуговуванню сайта. Для виконання окремих завдань необхідний доступ до сайту по FTP.</p>',
315
+    'info_gauche_auteurs' => 'Перелік всіх авторів сайту. Статус автора позначений кольором (адміністратор = зелений; автор = жовтий).',
316
+    'info_gauche_auteurs_exterieurs' => 'Користувачі, що зареєструвалися, позначені синім кольором, а видалені користувачі - іконкою кошика.',
317
+    'info_gauche_messagerie' => 'Передача повідомлень дозволяє обмінюватися повідомленнями між редакторами, зберигати нотатки (для вашого особистого використання) або показувати оголошення на основній сторінці адміністративної частини (якщо ви - адміністратор).',
318
+    'info_gauche_statistiques_referers' => 'Ця сторінка показує список <i>посилань</i>, тобто ті сайти, які мають посилання на ваш сайт, тільки для вчора і сьогодні: фактично цей список поновлюється кожні 24 години.',
319
+    'info_gauche_visiteurs_enregistres' => 'Ви знайдете тут зареєстрованних відвідувачів основноі частини сайту (форуми за підпискою).',
320
+    'info_generation_miniatures_images' => 'Створення зменшених зображень',
321
+    'info_gerer_trad_objets' => '@objets@ : управління перекладами',
322
+    'info_hebergeur_desactiver_envoi_email' => 'Деякі хости відключають  автоматизовану відправку листів на своих серверах. В цьому випадку наступні можливості SPIP не можуть бути здійснені.',
323
+    'info_hier' => 'вчора:',
324
+    'info_identification_publique' => 'Ваша публична ідентифікація...',
325
+    'info_image_process' => 'Виберіть кращий метод для створення зменшеної копії, натиснувши на відповідну картинку.',
326
+    'info_image_process2' => 'Якщо картинки не відображаються, це значить, що ваш хостінг не підтримує розширения по роботі з зображеннями. Уточніть в технічній підтримці хостінгу про можливості використовувати бібліотеки «GD» або «Imagemagic».',
327
+    'info_images_auto' => 'Кеш файлів зображень',
328
+    'info_informations_personnelles' => 'Налаштування профиля',
329
+    'info_inscription' => 'Реєстрація',
330
+    'info_inscription_automatique' => 'Автоматична реєстрація нових авторів',
331
+    'info_jeu_caractere' => 'Кодування сайту',
332
+    'info_jours' => 'дні',
333
+    'info_laisser_champs_vides' => 'залиште ці поля порожніми)',
334
+    'info_langues' => 'Мови сайту',
335
+    'info_ldap_ok' => 'Встанослення справжності LDAP.',
336
+    'info_lien_hypertexte' => 'Гиперпосилання:',
337
+    'info_liste_nouveautes_envoyee' => 'Інформацію про останні оновлення відправлено',
338
+    'info_liste_redacteurs_connectes' => 'Автори онлайн',
339
+    'info_login_existant' => 'Цей логін вже використовується.',
340
+    'info_login_trop_court' => 'Занадто короткий логін.',
341
+    'info_login_trop_court_car_pluriel' => 'Логін повинен складатися мінімум з @nb@ символів.',
342
+    'info_logos' => 'Логотипи',
343
+    'info_maximum' => 'максимум:',
344
+    'info_meme_rubrique' => 'В розділі:',
345
+    'info_message_en_redaction' => 'Ваше повідомлення в роботі',
346
+    'info_message_technique' => 'Технічене повідомлення:',
347
+    'info_messagerie_interne' => 'Внутрішня передача повідомлень',
348
+    'info_mise_a_niveau_base' => 'оновлення бази даних SQL',
349
+    'info_mise_a_niveau_base_2' => '{{Попередження!}} Ви встановили версію SPIP файлів {старіше} ніж та, яку було попередньо встановлено на цьому сайті: ви ризикуєте втратити базу даних, і тоді ваш сайт не зможе працювати належним чином. <br /> {{Перевстановіть SPIP файли.}}',
350
+    'info_modification_enregistree' => 'Ваши зміни збережено',
351
+    'info_modifier_auteur' => 'Змінити автора:',
352
+    'info_modifier_rubrique' => 'Змінити розділ:',
353
+    'info_modifier_titre' => 'Змінити: @titre@',
354
+    'info_mon_site_spip' => 'Мій сайт ',
355
+    'info_moyenne' => 'в средньому:',
356
+    'info_multi_cet_article' => 'Мова статті:',
357
+    'info_multi_langues_choisies' => 'Виберіть мови для редагування матеріалів на сайті. Мови, які вже використовує ваш сайт (наверху списку) не можуть бути вимкнені.',
358
+    'info_multi_objets' => '@objets@ : увімкнути мовне меню',
359
+    'info_multi_secteurs' => '... тільки для розділів в корені сайту?',
360
+    'info_nb_articles' => '@nb@ статтей',
361
+    'info_nb_auteurs' => '@nb@ авторів',
362
+    'info_nb_messages' => '@nb@ повідомлень',
363
+    'info_nb_mots_cles' => '@nb@ ключових слів',
364
+    'info_nb_rubriques' => '@nb@ розділ(ів)',
365
+    'info_nb_visiteurs' => '@nb@ відвідувачів',
366
+    'info_nom' => 'Ім’я',
367
+    'info_nom_destinataire' => 'Ім’я користувача',
368
+    'info_nom_pas_conforme' => 'HTML теги не допускаються',
369
+    'info_nom_site' => 'Назва вашого сайта',
370
+    'info_nombre_articles' => '@nb_articles@ статті,',
371
+    'info_nombre_rubriques' => '@nb_rubriques@ рубрики,',
372
+    'info_nombre_sites' => '@nb_sites@ сайти,',
373
+    'info_non_deplacer' => 'Не переміщувати...',
374
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP может регулярно відправляти новини, оголошення сайта
375 375
   (недавно опубліковані статті і новини).',
376
-	'info_non_envoi_liste_nouveautes' => 'Не відправляти список останніх новин',
377
-	'info_non_modifiable' => 'не может бути змінено',
378
-	'info_non_suppression_mot_cle' => 'Я НЕ хочу видаляти це ключове слово.',
379
-	'info_notes' => 'Примітки',
380
-	'info_nouvel_article' => 'Новая стаття',
381
-	'info_nouvelle_traduction' => 'Новий переклад:',
382
-	'info_numero_article' => 'НОМЕР СТАТТІ:',
383
-	'info_obligatoire_02' => '(обов’язково)',
384
-	'info_option_accepter_visiteurs' => 'Увімкнути реєстрацію відвідувачів на сайті',
385
-	'info_option_ne_pas_accepter_visiteurs' => 'Відключити реєстрацію відвідувачів на сайті',
386
-	'info_options_avancees' => 'ДОДАТКОВІ НАЛАШТУВАННЯ',
387
-	'info_ou' => 'або...',
388
-	'info_page_interdite' => 'Заборонена сторінка',
389
-	'info_par_nom' => 'за назвою',
390
-	'info_par_nombre_article' => 'за номерами статтей',
391
-	'info_par_statut' => 'за статусом',
392
-	'info_par_tri' => '’(за @tri@)’',
393
-	'info_passe_trop_court' => 'Пароль надто короткий.',
394
-	'info_passe_trop_court_car_pluriel' => 'Пароль повинен мати мінімум @nb@ символів.',
395
-	'info_passes_identiques' => 'Два паролі не співпадають.',
396
-	'info_plus_cinq_car' => 'понад 5 символів',
397
-	'info_plus_cinq_car_2' => '(Понад 5 символів)',
398
-	'info_plus_trois_car' => '(Понад 3 символи)',
399
-	'info_popularite' => 'популярність: @popularite@; відвідання: @visites@',
400
-	'info_post_scriptum' => 'Постскриптум',
401
-	'info_post_scriptum_2' => 'Постскриптум: ',
402
-	'info_pour' => 'для',
403
-	'info_preview_texte' => 'Налаштування попереднього перегляду. Ви можете подивитися, як виглядають на сайті матеріали зі статусом «представлено». Увімкнути цю можливість для усіх авторів, тільки для адміністраторов або відключити взагалі?',
404
-	'info_procedez_par_etape' => 'Будь ласка, виконуйте покроково',
405
-	'info_procedure_maj_version' => 'необхідно запустити процедуру оновлення поточної бази даних для новоі версії SPIP.',
406
-	'info_proxy_ok' => 'Проксі сервер працює.',
407
-	'info_ps' => 'P.S.',
408
-	'info_publier' => 'опублікувати',
409
-	'info_publies' => 'Ваші статті, опубліковані на сайті:',
410
-	'info_question_accepter_visiteurs' => 'Якщо шаблони вашого сайту дозволяють відвідувачам реєструватися, не входячи в адміністративну частину, будь ласка, включіть наступну опцію:',
411
-	'info_question_inscription_nouveaux_redacteurs' => 'Ви хочете дозволити реєстрацію нових користувачів на сайті? Якщо так, то відвідувачі зможуть реєструватися самостійно, використовуючи стандартну форму. Також у них буде доступ в адміністративну частину сайту і можливість створювати нові матеріали.  <div class="notice">Пароль для доступу буде відправлено користувачу  email’ом автоматично. Якщо ваш хостінг не підтримує відправку листів, то ця опція буде марна.</div>',
412
-	'info_qui_edite' => '@nom_auteur_modif@ працював над цим матеріалом @date_diff@ хвилин назад',
413
-	'info_racine_site' => 'Корінь сайту',
414
-	'info_recharger_page' => 'Будь ласка перезавантажте цю сторінку через декілька хвилин.',
415
-	'info_recherche_auteur_zero' => 'Нічого не знайдено на запит          «@cherche_auteur@».',
416
-	'info_recommencer' => 'Будь ласка, спопробуйте ще раз.',
417
-	'info_redacteur_1' => 'Автор',
418
-	'info_redacteur_2' => 'маючи доступ до адміністративної частини (<i>рекомендував</i>), ',
419
-	'info_redacteurs' => 'Автори',
420
-	'info_redaction_en_cours' => 'РЕДАГУЄТЬСЯ',
421
-	'info_redirection' => 'Перенаправлення',
422
-	'info_redirection_activee' => 'Перенаправлення включено.',
423
-	'info_redirection_boucle' => 'Ви намагаєтеся перенаправити статтю саму на себе.',
424
-	'info_redirection_desactivee' => 'Перенаправлення видалено.',
425
-	'info_refuses' => 'Ваші відхилені статті',
426
-	'info_reglage_ldap' => 'Опції <b>налаштування імпорту LDAP</b>',
427
-	'info_renvoi_article' => 'Відвідувач будет перенаправлений за наступним посиланням',
428
-	'info_reserve_admin' => 'Тільки адміністратори можуть змінити цю адресу.',
429
-	'info_restreindre_rubrique' => 'Надати права управління розділами:',
430
-	'info_resultat_recherche' => 'Результати пошуку:',
431
-	'info_rubriques' => 'Розділи',
432
-	'info_rubriques_02' => 'розділи',
433
-	'info_rubriques_trouvees' => 'Знайдені розділи',
434
-	'info_sans_titre' => 'Без назви',
435
-	'info_selection_chemin_acces' => '<b>Виберіть</b> шлях доступу до каталогу:',
436
-	'info_signatures' => 'підписи',
437
-	'info_site' => 'Сайт',
438
-	'info_site_2' => 'Сайт:',
439
-	'info_site_min' => 'сайт',
440
-	'info_site_reference_2' => 'Сайт, що реферується (Referenced site)',
441
-	'info_site_web' => 'САЙТ:',
442
-	'info_sites' => 'сайти',
443
-	'info_sites_lies_mot' => 'Сайти з цим ключовим словом',
444
-	'info_sites_proxy' => 'Використовувати проксі',
445
-	'info_sites_trouves' => 'знайдені сайти',
446
-	'info_sous_titre' => 'Підзаголовок:',
447
-	'info_statut_administrateur' => 'Адміністратор',
448
-	'info_statut_auteur' => 'Статус автора:',
449
-	'info_statut_auteur_2' => 'Я',
450
-	'info_statut_auteur_a_confirmer' => 'Реєстрація буде підтверджена',
451
-	'info_statut_auteur_autre' => 'Інший статус:',
452
-	'info_statut_redacteur' => 'Автор',
453
-	'info_statut_utilisateurs_1' => 'Усталений (default) статус для імпортованих користувачів',
454
-	'info_statut_utilisateurs_2' => 'Виберіть статус, що буде використовуватися для людей з каталогу LDAP, коли вони підключаться вперше. Пізніше ви зможете змінити це значення для кожного автора індивідуально.',
455
-	'info_suivi_activite' => 'Відстежування роботи редакторів',
456
-	'info_surtitre' => 'Топ-заголовок:',
457
-	'info_syndication_integrale_1' => 'Ваш сайт пропонує об’єднані файли (див. «<a href="@url@">@titre@</a>»).',
458
-	'info_syndication_integrale_2' => 'Відправити статтю повністю чи тільки перші абзаци?',
459
-	'info_table_prefix' => 'Ви можете задати свій префікс для імен таблиць бази даних (завдяки цьому ви можете встановити декілька сайтів на одну базу даних). Для написання префіксу використовуйте лише маленькі латинські букви і цифри.',
460
-	'info_taille_maximale_images' => 'Максимальний розмір картинок, з якими може працювати SPIP (у мільйонах пікселів).<br />SPIP не зможет стискати картинки більшого розміру.',
461
-	'info_taille_maximale_vignette' => 'Максимальний розмір зображень, створенних системою:',
462
-	'info_terminer_installation' => 'Теперь ви можете закінчити стандартний процес встановлення.',
463
-	'info_texte' => 'Текст',
464
-	'info_texte_explicatif' => 'Пояснювальний текст',
465
-	'info_texte_long' => '(Довгий текст: він з’явиться в декількох частинах, які будуть повторно зібрані після затвердження.)',
466
-	'info_texte_message' => 'Текст повідомлення:',
467
-	'info_texte_message_02' => 'Текст повідомлення',
468
-	'info_titre' => 'Заголовок:',
469
-	'info_total' => 'всього:',
470
-	'info_tous_articles_en_redaction' => 'Усі статті, що редагуються',
471
-	'info_tous_articles_presents' => 'Усі статті в розділі',
472
-	'info_tous_articles_refuses' => 'Усі відхилені статті',
473
-	'info_tous_les' => 'кожен:',
474
-	'info_tout_site' => 'Весь сайт',
475
-	'info_tout_site2' => 'Статтю не було перекладено на цю мову.',
476
-	'info_tout_site3' => 'Статтю було перекладено на цю мову, але з того часу в оригінал внесено зміни. Необхідно поновити переклад.',
477
-	'info_tout_site4' => 'Статтю було перекладено на цю мову, і переклад актуальний.',
478
-	'info_tout_site5' => 'Вихідна стаття.',
479
-	'info_tout_site6' => '<b>Попередження:</b> відображаються лише вихідні статті. Переклади, пов’язані з оригіналом, - в кольорі, що вказує їхній статус:',
480
-	'info_traductions' => 'Переклади',
481
-	'info_travail_colaboratif' => 'Сумісна робота над статтями',
482
-	'info_un_article' => 'стаття,',
483
-	'info_un_site' => 'сайт,',
484
-	'info_une_rubrique' => 'розділ,',
485
-	'info_une_rubrique_02' => '1 розділ',
486
-	'info_url' => 'Адреса:',
487
-	'info_url_proxy' => 'URL проксі',
488
-	'info_url_proxy_pas_conforme' => 'Невірний URL проксі серверу.',
489
-	'info_url_site_pas_conforme' => 'URL сайту не є валідним.',
490
-	'info_url_test_proxy' => 'URL для перевірки',
491
-	'info_urlref' => 'Гиперпосилання:',
492
-	'info_utilisation_spip' => 'SPIP готовий до роботи',
493
-	'info_visites_par_mois' => 'Щомісячний показ:',
494
-	'info_visiteur_1' => 'Відвідувач',
495
-	'info_visiteur_2' => 'з основної частини сайту',
496
-	'info_visiteurs' => 'Відвідувачі',
497
-	'info_visiteurs_02' => 'Відвідувачі основної частини сайту',
498
-	'info_webmestre_forces' => 'Список вебмастерів міститься в <tt>@file_options@</tt>.',
499
-	'install_adresse_base_hebergeur' => 'Адресу серверу бази даних ви можете дізнатися у свого хостера',
500
-	'install_connect_ok' => 'Була оголошена нова база на сервері @connect@.',
501
-	'install_echec_annonce' => 'Ця інсталяция, напевне, не буде працювати або приведе до нестійкої роботи сайту...',
502
-	'install_extension_mbstring' => 'SPIP не пращює з:',
503
-	'install_extension_php_obligatoire' => 'SPIP вимагає php розширень:',
504
-	'install_login_base_hebergeur' => 'Логін визначається постачальником послуг',
505
-	'install_nom_base_hebergeur' => 'Ім’я бази даних визначається постачальником послуг:',
506
-	'install_pas_table' => 'В базе даних ще нема таблиць',
507
-	'install_pass_base_hebergeur' => 'Ви можете встановити пароль через контрольну панель хостінгу або запитати його в службі підтримки вашого хостінгу.',
508
-	'install_php_version' => 'Версія PHP @version@ надто стара (мінімум = @minimum@)',
509
-	'install_select_langue' => 'Виберіть мову, потім натисніть кнопку «далі», щоб начати процедуру встановлення.',
510
-	'install_select_type_db' => 'Вкажіть тип бази даних:',
511
-	'install_select_type_mysql' => 'MySQL',
512
-	'install_select_type_pg' => 'PostgreSQL',
513
-	'install_select_type_sqlite2' => 'SQLite 2',
514
-	'install_select_type_sqlite3' => 'SQLite 3',
515
-	'install_serveur_hebergeur' => 'Сервер бази даних визначається постачальником послуг',
516
-	'install_table_prefix_hebergeur' => 'Префікс таблиці бази даних:',
517
-	'install_tables_base' => 'Таблиці баз даних',
518
-	'install_types_db_connus' => 'SPIP працює з <b>MySQL</b> і <b>SQLite</b>.',
519
-	'install_types_db_connus_avertissement' => 'Підтримка PostgreSQL поки на експеріментальному рівні. ',
520
-	'instituer_erreur_statut_a_change' => 'Статус вже був змінений',
521
-	'instituer_erreur_statut_non_autorise' => 'Ви не можете вибрати цей статус',
522
-	'intem_redacteur' => 'редактор',
523
-	'intitule_licence' => 'Дозвіл',
524
-	'item_accepter_inscriptions' => 'Дозволити реєстрацію',
525
-	'item_activer_messages_avertissement' => 'Попереджати про сумісну роботу',
526
-	'item_administrateur_2' => 'адміністратор',
527
-	'item_afficher_calendrier' => 'показувати в календарі',
528
-	'item_autoriser_syndication_integrale' => 'Включати цілі статті в об’єднані файли ',
529
-	'item_choix_administrateurs' => 'адміністратори',
530
-	'item_choix_generation_miniature' => 'Створювати зменшені копії автоматично.',
531
-	'item_choix_non_generation_miniature' => 'Не створювати зменшені копії.',
532
-	'item_choix_redacteurs' => 'редактори',
533
-	'item_choix_visiteurs' => 'відвідувачі сайту',
534
-	'item_creer_fichiers_authent' => 'Створити .htpasswd файли',
535
-	'item_login' => 'Логін',
536
-	'item_messagerie_agenda' => 'Увімкнути систему обміну повідомленнями і календар',
537
-	'item_mots_cles_association_articles' => 'статті',
538
-	'item_mots_cles_association_rubriques' => 'розділи',
539
-	'item_mots_cles_association_sites' => 'зробити посилання або об’єднати сайти.',
540
-	'item_non' => 'Ні',
541
-	'item_non_accepter_inscriptions' => 'Не дозволяти реєстрацію',
542
-	'item_non_activer_messages_avertissement' => 'НЕ попереджати про сумісну роботу',
543
-	'item_non_afficher_calendrier' => 'Не показувати календар',
544
-	'item_non_autoriser_syndication_integrale' => 'Відправляти лише короткий виклад',
545
-	'item_non_creer_fichiers_authent' => 'Не створювати ці файли',
546
-	'item_non_messagerie_agenda' => 'Відключити систему обміну повідомленнями і календар',
547
-	'item_non_publier_articles' => 'Публікувати статті тільки після вказаної дати публікації.',
548
-	'item_nouvel_auteur' => 'Новий автор',
549
-	'item_nouvelle_rubrique' => 'Новий розділ',
550
-	'item_oui' => 'Так',
551
-	'item_publier_articles' => 'Негайно публіковати статті, не дивлячись на дату публікації',
552
-	'item_reponse_article' => 'Відповісти на статтю',
553
-	'item_visiteur' => 'відвідувач',
376
+    'info_non_envoi_liste_nouveautes' => 'Не відправляти список останніх новин',
377
+    'info_non_modifiable' => 'не может бути змінено',
378
+    'info_non_suppression_mot_cle' => 'Я НЕ хочу видаляти це ключове слово.',
379
+    'info_notes' => 'Примітки',
380
+    'info_nouvel_article' => 'Новая стаття',
381
+    'info_nouvelle_traduction' => 'Новий переклад:',
382
+    'info_numero_article' => 'НОМЕР СТАТТІ:',
383
+    'info_obligatoire_02' => '(обов’язково)',
384
+    'info_option_accepter_visiteurs' => 'Увімкнути реєстрацію відвідувачів на сайті',
385
+    'info_option_ne_pas_accepter_visiteurs' => 'Відключити реєстрацію відвідувачів на сайті',
386
+    'info_options_avancees' => 'ДОДАТКОВІ НАЛАШТУВАННЯ',
387
+    'info_ou' => 'або...',
388
+    'info_page_interdite' => 'Заборонена сторінка',
389
+    'info_par_nom' => 'за назвою',
390
+    'info_par_nombre_article' => 'за номерами статтей',
391
+    'info_par_statut' => 'за статусом',
392
+    'info_par_tri' => '’(за @tri@)’',
393
+    'info_passe_trop_court' => 'Пароль надто короткий.',
394
+    'info_passe_trop_court_car_pluriel' => 'Пароль повинен мати мінімум @nb@ символів.',
395
+    'info_passes_identiques' => 'Два паролі не співпадають.',
396
+    'info_plus_cinq_car' => 'понад 5 символів',
397
+    'info_plus_cinq_car_2' => '(Понад 5 символів)',
398
+    'info_plus_trois_car' => '(Понад 3 символи)',
399
+    'info_popularite' => 'популярність: @popularite@; відвідання: @visites@',
400
+    'info_post_scriptum' => 'Постскриптум',
401
+    'info_post_scriptum_2' => 'Постскриптум: ',
402
+    'info_pour' => 'для',
403
+    'info_preview_texte' => 'Налаштування попереднього перегляду. Ви можете подивитися, як виглядають на сайті матеріали зі статусом «представлено». Увімкнути цю можливість для усіх авторів, тільки для адміністраторов або відключити взагалі?',
404
+    'info_procedez_par_etape' => 'Будь ласка, виконуйте покроково',
405
+    'info_procedure_maj_version' => 'необхідно запустити процедуру оновлення поточної бази даних для новоі версії SPIP.',
406
+    'info_proxy_ok' => 'Проксі сервер працює.',
407
+    'info_ps' => 'P.S.',
408
+    'info_publier' => 'опублікувати',
409
+    'info_publies' => 'Ваші статті, опубліковані на сайті:',
410
+    'info_question_accepter_visiteurs' => 'Якщо шаблони вашого сайту дозволяють відвідувачам реєструватися, не входячи в адміністративну частину, будь ласка, включіть наступну опцію:',
411
+    'info_question_inscription_nouveaux_redacteurs' => 'Ви хочете дозволити реєстрацію нових користувачів на сайті? Якщо так, то відвідувачі зможуть реєструватися самостійно, використовуючи стандартну форму. Також у них буде доступ в адміністративну частину сайту і можливість створювати нові матеріали.  <div class="notice">Пароль для доступу буде відправлено користувачу  email’ом автоматично. Якщо ваш хостінг не підтримує відправку листів, то ця опція буде марна.</div>',
412
+    'info_qui_edite' => '@nom_auteur_modif@ працював над цим матеріалом @date_diff@ хвилин назад',
413
+    'info_racine_site' => 'Корінь сайту',
414
+    'info_recharger_page' => 'Будь ласка перезавантажте цю сторінку через декілька хвилин.',
415
+    'info_recherche_auteur_zero' => 'Нічого не знайдено на запит          «@cherche_auteur@».',
416
+    'info_recommencer' => 'Будь ласка, спопробуйте ще раз.',
417
+    'info_redacteur_1' => 'Автор',
418
+    'info_redacteur_2' => 'маючи доступ до адміністративної частини (<i>рекомендував</i>), ',
419
+    'info_redacteurs' => 'Автори',
420
+    'info_redaction_en_cours' => 'РЕДАГУЄТЬСЯ',
421
+    'info_redirection' => 'Перенаправлення',
422
+    'info_redirection_activee' => 'Перенаправлення включено.',
423
+    'info_redirection_boucle' => 'Ви намагаєтеся перенаправити статтю саму на себе.',
424
+    'info_redirection_desactivee' => 'Перенаправлення видалено.',
425
+    'info_refuses' => 'Ваші відхилені статті',
426
+    'info_reglage_ldap' => 'Опції <b>налаштування імпорту LDAP</b>',
427
+    'info_renvoi_article' => 'Відвідувач будет перенаправлений за наступним посиланням',
428
+    'info_reserve_admin' => 'Тільки адміністратори можуть змінити цю адресу.',
429
+    'info_restreindre_rubrique' => 'Надати права управління розділами:',
430
+    'info_resultat_recherche' => 'Результати пошуку:',
431
+    'info_rubriques' => 'Розділи',
432
+    'info_rubriques_02' => 'розділи',
433
+    'info_rubriques_trouvees' => 'Знайдені розділи',
434
+    'info_sans_titre' => 'Без назви',
435
+    'info_selection_chemin_acces' => '<b>Виберіть</b> шлях доступу до каталогу:',
436
+    'info_signatures' => 'підписи',
437
+    'info_site' => 'Сайт',
438
+    'info_site_2' => 'Сайт:',
439
+    'info_site_min' => 'сайт',
440
+    'info_site_reference_2' => 'Сайт, що реферується (Referenced site)',
441
+    'info_site_web' => 'САЙТ:',
442
+    'info_sites' => 'сайти',
443
+    'info_sites_lies_mot' => 'Сайти з цим ключовим словом',
444
+    'info_sites_proxy' => 'Використовувати проксі',
445
+    'info_sites_trouves' => 'знайдені сайти',
446
+    'info_sous_titre' => 'Підзаголовок:',
447
+    'info_statut_administrateur' => 'Адміністратор',
448
+    'info_statut_auteur' => 'Статус автора:',
449
+    'info_statut_auteur_2' => 'Я',
450
+    'info_statut_auteur_a_confirmer' => 'Реєстрація буде підтверджена',
451
+    'info_statut_auteur_autre' => 'Інший статус:',
452
+    'info_statut_redacteur' => 'Автор',
453
+    'info_statut_utilisateurs_1' => 'Усталений (default) статус для імпортованих користувачів',
454
+    'info_statut_utilisateurs_2' => 'Виберіть статус, що буде використовуватися для людей з каталогу LDAP, коли вони підключаться вперше. Пізніше ви зможете змінити це значення для кожного автора індивідуально.',
455
+    'info_suivi_activite' => 'Відстежування роботи редакторів',
456
+    'info_surtitre' => 'Топ-заголовок:',
457
+    'info_syndication_integrale_1' => 'Ваш сайт пропонує об’єднані файли (див. «<a href="@url@">@titre@</a>»).',
458
+    'info_syndication_integrale_2' => 'Відправити статтю повністю чи тільки перші абзаци?',
459
+    'info_table_prefix' => 'Ви можете задати свій префікс для імен таблиць бази даних (завдяки цьому ви можете встановити декілька сайтів на одну базу даних). Для написання префіксу використовуйте лише маленькі латинські букви і цифри.',
460
+    'info_taille_maximale_images' => 'Максимальний розмір картинок, з якими може працювати SPIP (у мільйонах пікселів).<br />SPIP не зможет стискати картинки більшого розміру.',
461
+    'info_taille_maximale_vignette' => 'Максимальний розмір зображень, створенних системою:',
462
+    'info_terminer_installation' => 'Теперь ви можете закінчити стандартний процес встановлення.',
463
+    'info_texte' => 'Текст',
464
+    'info_texte_explicatif' => 'Пояснювальний текст',
465
+    'info_texte_long' => '(Довгий текст: він з’явиться в декількох частинах, які будуть повторно зібрані після затвердження.)',
466
+    'info_texte_message' => 'Текст повідомлення:',
467
+    'info_texte_message_02' => 'Текст повідомлення',
468
+    'info_titre' => 'Заголовок:',
469
+    'info_total' => 'всього:',
470
+    'info_tous_articles_en_redaction' => 'Усі статті, що редагуються',
471
+    'info_tous_articles_presents' => 'Усі статті в розділі',
472
+    'info_tous_articles_refuses' => 'Усі відхилені статті',
473
+    'info_tous_les' => 'кожен:',
474
+    'info_tout_site' => 'Весь сайт',
475
+    'info_tout_site2' => 'Статтю не було перекладено на цю мову.',
476
+    'info_tout_site3' => 'Статтю було перекладено на цю мову, але з того часу в оригінал внесено зміни. Необхідно поновити переклад.',
477
+    'info_tout_site4' => 'Статтю було перекладено на цю мову, і переклад актуальний.',
478
+    'info_tout_site5' => 'Вихідна стаття.',
479
+    'info_tout_site6' => '<b>Попередження:</b> відображаються лише вихідні статті. Переклади, пов’язані з оригіналом, - в кольорі, що вказує їхній статус:',
480
+    'info_traductions' => 'Переклади',
481
+    'info_travail_colaboratif' => 'Сумісна робота над статтями',
482
+    'info_un_article' => 'стаття,',
483
+    'info_un_site' => 'сайт,',
484
+    'info_une_rubrique' => 'розділ,',
485
+    'info_une_rubrique_02' => '1 розділ',
486
+    'info_url' => 'Адреса:',
487
+    'info_url_proxy' => 'URL проксі',
488
+    'info_url_proxy_pas_conforme' => 'Невірний URL проксі серверу.',
489
+    'info_url_site_pas_conforme' => 'URL сайту не є валідним.',
490
+    'info_url_test_proxy' => 'URL для перевірки',
491
+    'info_urlref' => 'Гиперпосилання:',
492
+    'info_utilisation_spip' => 'SPIP готовий до роботи',
493
+    'info_visites_par_mois' => 'Щомісячний показ:',
494
+    'info_visiteur_1' => 'Відвідувач',
495
+    'info_visiteur_2' => 'з основної частини сайту',
496
+    'info_visiteurs' => 'Відвідувачі',
497
+    'info_visiteurs_02' => 'Відвідувачі основної частини сайту',
498
+    'info_webmestre_forces' => 'Список вебмастерів міститься в <tt>@file_options@</tt>.',
499
+    'install_adresse_base_hebergeur' => 'Адресу серверу бази даних ви можете дізнатися у свого хостера',
500
+    'install_connect_ok' => 'Була оголошена нова база на сервері @connect@.',
501
+    'install_echec_annonce' => 'Ця інсталяция, напевне, не буде працювати або приведе до нестійкої роботи сайту...',
502
+    'install_extension_mbstring' => 'SPIP не пращює з:',
503
+    'install_extension_php_obligatoire' => 'SPIP вимагає php розширень:',
504
+    'install_login_base_hebergeur' => 'Логін визначається постачальником послуг',
505
+    'install_nom_base_hebergeur' => 'Ім’я бази даних визначається постачальником послуг:',
506
+    'install_pas_table' => 'В базе даних ще нема таблиць',
507
+    'install_pass_base_hebergeur' => 'Ви можете встановити пароль через контрольну панель хостінгу або запитати його в службі підтримки вашого хостінгу.',
508
+    'install_php_version' => 'Версія PHP @version@ надто стара (мінімум = @minimum@)',
509
+    'install_select_langue' => 'Виберіть мову, потім натисніть кнопку «далі», щоб начати процедуру встановлення.',
510
+    'install_select_type_db' => 'Вкажіть тип бази даних:',
511
+    'install_select_type_mysql' => 'MySQL',
512
+    'install_select_type_pg' => 'PostgreSQL',
513
+    'install_select_type_sqlite2' => 'SQLite 2',
514
+    'install_select_type_sqlite3' => 'SQLite 3',
515
+    'install_serveur_hebergeur' => 'Сервер бази даних визначається постачальником послуг',
516
+    'install_table_prefix_hebergeur' => 'Префікс таблиці бази даних:',
517
+    'install_tables_base' => 'Таблиці баз даних',
518
+    'install_types_db_connus' => 'SPIP працює з <b>MySQL</b> і <b>SQLite</b>.',
519
+    'install_types_db_connus_avertissement' => 'Підтримка PostgreSQL поки на експеріментальному рівні. ',
520
+    'instituer_erreur_statut_a_change' => 'Статус вже був змінений',
521
+    'instituer_erreur_statut_non_autorise' => 'Ви не можете вибрати цей статус',
522
+    'intem_redacteur' => 'редактор',
523
+    'intitule_licence' => 'Дозвіл',
524
+    'item_accepter_inscriptions' => 'Дозволити реєстрацію',
525
+    'item_activer_messages_avertissement' => 'Попереджати про сумісну роботу',
526
+    'item_administrateur_2' => 'адміністратор',
527
+    'item_afficher_calendrier' => 'показувати в календарі',
528
+    'item_autoriser_syndication_integrale' => 'Включати цілі статті в об’єднані файли ',
529
+    'item_choix_administrateurs' => 'адміністратори',
530
+    'item_choix_generation_miniature' => 'Створювати зменшені копії автоматично.',
531
+    'item_choix_non_generation_miniature' => 'Не створювати зменшені копії.',
532
+    'item_choix_redacteurs' => 'редактори',
533
+    'item_choix_visiteurs' => 'відвідувачі сайту',
534
+    'item_creer_fichiers_authent' => 'Створити .htpasswd файли',
535
+    'item_login' => 'Логін',
536
+    'item_messagerie_agenda' => 'Увімкнути систему обміну повідомленнями і календар',
537
+    'item_mots_cles_association_articles' => 'статті',
538
+    'item_mots_cles_association_rubriques' => 'розділи',
539
+    'item_mots_cles_association_sites' => 'зробити посилання або об’єднати сайти.',
540
+    'item_non' => 'Ні',
541
+    'item_non_accepter_inscriptions' => 'Не дозволяти реєстрацію',
542
+    'item_non_activer_messages_avertissement' => 'НЕ попереджати про сумісну роботу',
543
+    'item_non_afficher_calendrier' => 'Не показувати календар',
544
+    'item_non_autoriser_syndication_integrale' => 'Відправляти лише короткий виклад',
545
+    'item_non_creer_fichiers_authent' => 'Не створювати ці файли',
546
+    'item_non_messagerie_agenda' => 'Відключити систему обміну повідомленнями і календар',
547
+    'item_non_publier_articles' => 'Публікувати статті тільки після вказаної дати публікації.',
548
+    'item_nouvel_auteur' => 'Новий автор',
549
+    'item_nouvelle_rubrique' => 'Новий розділ',
550
+    'item_oui' => 'Так',
551
+    'item_publier_articles' => 'Негайно публіковати статті, не дивлячись на дату публікації',
552
+    'item_reponse_article' => 'Відповісти на статтю',
553
+    'item_visiteur' => 'відвідувач',
554 554
 
555
-	// J
556
-	'jour_non_connu_nc' => 'невідомий',
555
+    // J
556
+    'jour_non_connu_nc' => 'невідомий',
557 557
 
558
-	// L
559
-	'label_bando_outils' => 'Панель інструментів',
560
-	'label_bando_outils_afficher' => 'Показати інструменти',
561
-	'label_bando_outils_masquer' => 'Сховати інструменти',
562
-	'label_choix_langue' => 'Мова інтерфейсу',
563
-	'label_nom_fichier_connect' => 'Відображати ім’я серверу',
564
-	'label_slogan_site' => 'Слоган сайту',
565
-	'label_taille_ecran' => 'Ширина робочої області',
566
-	'label_texte_et_icones_navigation' => 'Головне меню',
567
-	'label_texte_et_icones_page' => 'Відоображення сторінки',
568
-	'ldap_correspondance' => 'наслідувати поле @champ@',
569
-	'ldap_correspondance_1' => 'Наслідувати поля LDAP',
570
-	'ldap_correspondance_2' => 'Вкажіть відповідне LDAP поле для кожного з даних полей. Залиште їх порожніми, якщо ви не хочете, щоб вони заповнювались. Декілька LDAP полей розділяються пробілом або комою.',
571
-	'lien_ajouter_auteur' => 'Додати автора',
572
-	'lien_ajouter_une_rubrique' => 'Додати розділ',
573
-	'lien_email' => 'Електронна пошта',
574
-	'lien_nom_site' => 'НАЗВА САЙТУ:',
575
-	'lien_rapide_contenu' => 'Перейти до змісту',
576
-	'lien_rapide_navigation' => 'Перейти до навігації',
577
-	'lien_rapide_recherche' => 'Перейти до пошуку',
578
-	'lien_retirer_auteur' => 'Видалити автора',
579
-	'lien_retirer_rubrique' => 'Видалити розділ',
580
-	'lien_retirer_tous_auteurs' => 'Видалити усіх авторів',
581
-	'lien_retirer_toutes_rubriques' => 'Видалити всі розділи',
582
-	'lien_site' => 'сайт',
583
-	'lien_tout_decocher' => 'Зніміть',
584
-	'lien_tout_deplier' => 'Развернуть усі ',
585
-	'lien_tout_replier' => 'Згорнути усе',
586
-	'lien_tout_supprimer' => 'Видалити усе',
587
-	'lien_trier_nom' => 'Сортирувати за ім´ям',
588
-	'lien_trier_nombre_articles' => 'Сортирувати за номерами статтей',
589
-	'lien_trier_statut' => 'Сортирувати за статусом',
590
-	'lien_voir_en_ligne' => 'ПЕРЕГЛЯД ОНЛАЙН:',
591
-	'logo_article' => 'ЛОГОТИП СТАТТІ',
592
-	'logo_auteur' => 'ЛОГОТИП АВТОРА',
593
-	'logo_rubrique' => 'ЛОГОТИП РОЗДІЛУ',
594
-	'logo_site' => 'ЛОГОТИП САЙТУ',
595
-	'logo_standard_rubrique' => 'Стандартний логотип розділу',
596
-	'logo_survol' => 'При наведенні миші',
558
+    // L
559
+    'label_bando_outils' => 'Панель інструментів',
560
+    'label_bando_outils_afficher' => 'Показати інструменти',
561
+    'label_bando_outils_masquer' => 'Сховати інструменти',
562
+    'label_choix_langue' => 'Мова інтерфейсу',
563
+    'label_nom_fichier_connect' => 'Відображати ім’я серверу',
564
+    'label_slogan_site' => 'Слоган сайту',
565
+    'label_taille_ecran' => 'Ширина робочої області',
566
+    'label_texte_et_icones_navigation' => 'Головне меню',
567
+    'label_texte_et_icones_page' => 'Відоображення сторінки',
568
+    'ldap_correspondance' => 'наслідувати поле @champ@',
569
+    'ldap_correspondance_1' => 'Наслідувати поля LDAP',
570
+    'ldap_correspondance_2' => 'Вкажіть відповідне LDAP поле для кожного з даних полей. Залиште їх порожніми, якщо ви не хочете, щоб вони заповнювались. Декілька LDAP полей розділяються пробілом або комою.',
571
+    'lien_ajouter_auteur' => 'Додати автора',
572
+    'lien_ajouter_une_rubrique' => 'Додати розділ',
573
+    'lien_email' => 'Електронна пошта',
574
+    'lien_nom_site' => 'НАЗВА САЙТУ:',
575
+    'lien_rapide_contenu' => 'Перейти до змісту',
576
+    'lien_rapide_navigation' => 'Перейти до навігації',
577
+    'lien_rapide_recherche' => 'Перейти до пошуку',
578
+    'lien_retirer_auteur' => 'Видалити автора',
579
+    'lien_retirer_rubrique' => 'Видалити розділ',
580
+    'lien_retirer_tous_auteurs' => 'Видалити усіх авторів',
581
+    'lien_retirer_toutes_rubriques' => 'Видалити всі розділи',
582
+    'lien_site' => 'сайт',
583
+    'lien_tout_decocher' => 'Зніміть',
584
+    'lien_tout_deplier' => 'Развернуть усі ',
585
+    'lien_tout_replier' => 'Згорнути усе',
586
+    'lien_tout_supprimer' => 'Видалити усе',
587
+    'lien_trier_nom' => 'Сортирувати за ім´ям',
588
+    'lien_trier_nombre_articles' => 'Сортирувати за номерами статтей',
589
+    'lien_trier_statut' => 'Сортирувати за статусом',
590
+    'lien_voir_en_ligne' => 'ПЕРЕГЛЯД ОНЛАЙН:',
591
+    'logo_article' => 'ЛОГОТИП СТАТТІ',
592
+    'logo_auteur' => 'ЛОГОТИП АВТОРА',
593
+    'logo_rubrique' => 'ЛОГОТИП РОЗДІЛУ',
594
+    'logo_site' => 'ЛОГОТИП САЙТУ',
595
+    'logo_standard_rubrique' => 'Стандартний логотип розділу',
596
+    'logo_survol' => 'При наведенні миші',
597 597
 
598
-	// M
599
-	'menu_aide_installation_choix_base' => 'Виберіть вашу базу даних',
600
-	'module_fichier_langue' => 'Мовний файл',
601
-	'module_raccourci' => 'Ярлик',
602
-	'module_texte_affiche' => 'Показаний текст',
603
-	'module_texte_explicatif' => 'Ви можете вставити наступні ярлики в шаблон вашого сайту. Їх будє автоматично перекладено на різні мови, для яких існує мовний файл.',
604
-	'module_texte_traduction' => 'Мовний файл «@module@» є доступним в:',
605
-	'mois_non_connu' => 'невідомий',
598
+    // M
599
+    'menu_aide_installation_choix_base' => 'Виберіть вашу базу даних',
600
+    'module_fichier_langue' => 'Мовний файл',
601
+    'module_raccourci' => 'Ярлик',
602
+    'module_texte_affiche' => 'Показаний текст',
603
+    'module_texte_explicatif' => 'Ви можете вставити наступні ярлики в шаблон вашого сайту. Їх будє автоматично перекладено на різні мови, для яких існує мовний файл.',
604
+    'module_texte_traduction' => 'Мовний файл «@module@» є доступним в:',
605
+    'mois_non_connu' => 'невідомий',
606 606
 
607
-	// N
608
-	'nouvelle_version_spip' => 'Доступне оновлення версії SPIP @version@ ',
609
-	'nouvelle_version_spip_majeure' => 'Доступна нова версія SPIP @version@ ',
607
+    // N
608
+    'nouvelle_version_spip' => 'Доступне оновлення версії SPIP @version@ ',
609
+    'nouvelle_version_spip_majeure' => 'Доступна нова версія SPIP @version@ ',
610 610
 
611
-	// O
612
-	'onglet_contenu' => 'Зміст',
613
-	'onglet_declarer_une_autre_base' => 'Об´явити іншу базу даних',
614
-	'onglet_discuter' => 'Обговорити',
615
-	'onglet_interactivite' => 'Інтерактивність',
616
-	'onglet_proprietes' => 'Властивості',
617
-	'onglet_repartition_actuelle' => 'зараз',
618
-	'onglet_sous_rubriques' => 'Підрубрики',
611
+    // O
612
+    'onglet_contenu' => 'Зміст',
613
+    'onglet_declarer_une_autre_base' => 'Об´явити іншу базу даних',
614
+    'onglet_discuter' => 'Обговорити',
615
+    'onglet_interactivite' => 'Інтерактивність',
616
+    'onglet_proprietes' => 'Властивості',
617
+    'onglet_repartition_actuelle' => 'зараз',
618
+    'onglet_sous_rubriques' => 'Підрубрики',
619 619
 
620
-	// P
621
-	'page_pas_proxy' => 'Ця сторінка не повинна проходити через проксі',
622
-	'pas_de_proxy_pour' => 'Якщо необхідно, вкажіть для яких комп’ютерів або доменів не треба застосовувати проксі (наприклад: @exemple@) ',
623
-	'phpinfo' => 'Конфігурація PHP',
624
-	'plugin_charge_paquet' => 'Завантаження архиву файлу @name@',
625
-	'plugin_charger' => 'Завантажити',
626
-	'plugin_erreur_charger' => 'Помилка: неможливо завантажити @zip@',
627
-	'plugin_erreur_droit1' => 'Нема прав для запису в папку  <code>@dest@</code>.',
628
-	'plugin_erreur_droit2' => 'Будь ласка, перевірте права на запис для цієї папки (і за необхідності створіть її). Або перепишіть файли по FTP.',
629
-	'plugin_erreur_zip' => 'pclzip збій: помилка @status@',
630
-	'plugin_etat_developpement' => 'у розробці',
631
-	'plugin_etat_experimental' => 'експериментальний',
632
-	'plugin_etat_stable' => 'стабільний',
633
-	'plugin_etat_test' => 'тестується',
634
-	'plugin_impossible_activer' => 'Неможливо увімкнути плагін @plugin@',
635
-	'plugin_info_automatique1' => 'щоб дозволити автоматичну установку плагінів:',
636
-	'plugin_info_automatique1_lib' => 'Якщо ви хочете дозволити автоматичну установку цієї бібліотеки, то:',
637
-	'plugin_info_automatique2' => 'Створіть папку <code>@rep@</code> ;',
638
-	'plugin_info_automatique3' => 'Встановіть права доступу до каталогу (755 або 777).',
639
-	'plugin_info_automatique_creer' => 'для створення в корені вебсайту.',
640
-	'plugin_info_automatique_exemples' => 'Офіціальні RSS аркуші з плагінами:',
641
-	'plugin_info_automatique_ftp' => 'Ви можете встановити плагіни по FTP в каталог <tt>@rep@</tt> ',
642
-	'plugin_info_automatique_lib' => 'Деякі плагіни повинні мати можливість завантажувати файли в каталог <code>lib/</code>. Можливо, його необхідно створити самостійно.',
643
-	'plugin_info_automatique_liste' => 'Ваші плагіни:',
644
-	'plugin_info_automatique_liste_officielle' => 'офіційні плагіни',
645
-	'plugin_info_automatique_liste_update' => 'Поновити списки',
646
-	'plugin_info_automatique_ou' => 'або...',
647
-	'plugin_info_automatique_select' => 'виберіть плагін, SPIP завантажить і встановить його в каталог <code>@rep@</code>. Якщо плагін вже встановлений, його буде оновлено.',
648
-	'plugin_info_credit' => 'Авторська інформація',
649
-	'plugin_info_erreur_xml' => 'Неправильна декларація плагіна',
650
-	'plugin_info_install_ok' => 'Встановлення пройшло успішно',
651
-	'plugin_info_necessite' => 'Необхідно:',
652
-	'plugin_info_non_compatible_spip' => 'Плагін несумісний з поточною версією SPIP',
653
-	'plugin_info_plugins_dist_1' => 'Ці плагіни завантажені і встановлені в папці @plugins_dist@.',
654
-	'plugin_info_plugins_dist_2' => 'Їх не можна відключити.',
655
-	'plugin_info_telecharger' => 'завантажити с @url@ і встановити в @rep@',
656
-	'plugin_info_upgrade_ok' => 'Обновлення пройшло успішно',
657
-	'plugin_librairies_installees' => 'Встановлені бібліотеки',
658
-	'plugin_necessite_extension_php' => 'Необхідно PHP-розширення @plugin@ версії @version@.',
659
-	'plugin_necessite_extension_php_sans_version' => 'Необхідно PHP-розширення @plugin@',
660
-	'plugin_necessite_lib' => 'Для цього плагіна необхідна бібліотека  @lib@',
661
-	'plugin_necessite_php' => 'Необхідно @plugin@ версії @version@.',
662
-	'plugin_necessite_plugin' => 'Для цього плагіна необхідний @plugin@  @version@ або новіший.',
663
-	'plugin_necessite_plugin_sans_version' => 'Потрібний плагін @plugin@',
664
-	'plugin_necessite_spip' => 'Для цього плагіна потрібний SPIP @version@ або новіший.',
665
-	'plugin_source' => 'джерело: ',
666
-	'plugin_titre_automatique' => 'Автоматичне встановлення',
667
-	'plugin_titre_automatique_ajouter' => 'Додати плагін',
668
-	'plugin_titre_installation' => 'Встановити плагін @plugin@ ',
669
-	'plugin_titre_modifier' => 'Мої плагіни',
670
-	'plugin_utilise_extension_php' => 'Використовується PHP-розширення @plugin@ версії @version@.',
671
-	'plugin_utilise_php' => 'Використовується @plugin@ версії @version@.',
672
-	'plugin_utilise_plugin' => 'Використовуйте плагін @plugin@ en версії @version@.',
673
-	'plugin_zip_active' => 'Продовжити для активації',
674
-	'plugin_zip_adresse' => 'Вкажіть посилання на zip файла плагіна для завантаження або адресу RSS листа плагінів.',
675
-	'plugin_zip_adresse_champ' => 'URL плагіна (zip file) або RSS листа',
676
-	'plugin_zip_content' => 'Він містить наступні файли(@taille@),<br />готові до встановлення в каталозі <code>@rep@</code>',
677
-	'plugin_zip_installe_finie' => 'Файл @zip@ распакований і встановлений.',
678
-	'plugin_zip_installe_rep_finie' => 'Файл @zip@ распакований і встановлений в каталозі @rep@ ',
679
-	'plugin_zip_installer' => 'Теперь ви можете встановити.',
680
-	'plugin_zip_telecharge' => 'Файл @zip@ було завантажено',
681
-	'plugins_actif_aucun' => 'Нема вимкенених плагінів.',
682
-	'plugins_actif_un' => 'Включений один плагін',
683
-	'plugins_actifs' => '@count@ плагінів включено.',
684
-	'plugins_actifs_liste' => 'Включені ',
685
-	'plugins_compte' => '@count@ плагіни',
686
-	'plugins_disponible_un' => 'Доступний один плагін',
687
-	'plugins_disponibles' => 'доступно @count@ плагінів.',
688
-	'plugins_erreur' => 'Помилка в плагінах: @plugins@',
689
-	'plugins_liste' => 'Встановлені плагіни',
690
-	'plugins_liste_dist' => 'Захищені плагіни',
691
-	'plugins_recents' => 'останні плагіни',
692
-	'plugins_tous_liste' => 'Усі',
693
-	'plugins_vue_hierarchie' => 'Ієрархія',
694
-	'plugins_vue_liste' => 'Список',
695
-	'protocole_ldap' => 'Версія протоколу:',
620
+    // P
621
+    'page_pas_proxy' => 'Ця сторінка не повинна проходити через проксі',
622
+    'pas_de_proxy_pour' => 'Якщо необхідно, вкажіть для яких комп’ютерів або доменів не треба застосовувати проксі (наприклад: @exemple@) ',
623
+    'phpinfo' => 'Конфігурація PHP',
624
+    'plugin_charge_paquet' => 'Завантаження архиву файлу @name@',
625
+    'plugin_charger' => 'Завантажити',
626
+    'plugin_erreur_charger' => 'Помилка: неможливо завантажити @zip@',
627
+    'plugin_erreur_droit1' => 'Нема прав для запису в папку  <code>@dest@</code>.',
628
+    'plugin_erreur_droit2' => 'Будь ласка, перевірте права на запис для цієї папки (і за необхідності створіть її). Або перепишіть файли по FTP.',
629
+    'plugin_erreur_zip' => 'pclzip збій: помилка @status@',
630
+    'plugin_etat_developpement' => 'у розробці',
631
+    'plugin_etat_experimental' => 'експериментальний',
632
+    'plugin_etat_stable' => 'стабільний',
633
+    'plugin_etat_test' => 'тестується',
634
+    'plugin_impossible_activer' => 'Неможливо увімкнути плагін @plugin@',
635
+    'plugin_info_automatique1' => 'щоб дозволити автоматичну установку плагінів:',
636
+    'plugin_info_automatique1_lib' => 'Якщо ви хочете дозволити автоматичну установку цієї бібліотеки, то:',
637
+    'plugin_info_automatique2' => 'Створіть папку <code>@rep@</code> ;',
638
+    'plugin_info_automatique3' => 'Встановіть права доступу до каталогу (755 або 777).',
639
+    'plugin_info_automatique_creer' => 'для створення в корені вебсайту.',
640
+    'plugin_info_automatique_exemples' => 'Офіціальні RSS аркуші з плагінами:',
641
+    'plugin_info_automatique_ftp' => 'Ви можете встановити плагіни по FTP в каталог <tt>@rep@</tt> ',
642
+    'plugin_info_automatique_lib' => 'Деякі плагіни повинні мати можливість завантажувати файли в каталог <code>lib/</code>. Можливо, його необхідно створити самостійно.',
643
+    'plugin_info_automatique_liste' => 'Ваші плагіни:',
644
+    'plugin_info_automatique_liste_officielle' => 'офіційні плагіни',
645
+    'plugin_info_automatique_liste_update' => 'Поновити списки',
646
+    'plugin_info_automatique_ou' => 'або...',
647
+    'plugin_info_automatique_select' => 'виберіть плагін, SPIP завантажить і встановить його в каталог <code>@rep@</code>. Якщо плагін вже встановлений, його буде оновлено.',
648
+    'plugin_info_credit' => 'Авторська інформація',
649
+    'plugin_info_erreur_xml' => 'Неправильна декларація плагіна',
650
+    'plugin_info_install_ok' => 'Встановлення пройшло успішно',
651
+    'plugin_info_necessite' => 'Необхідно:',
652
+    'plugin_info_non_compatible_spip' => 'Плагін несумісний з поточною версією SPIP',
653
+    'plugin_info_plugins_dist_1' => 'Ці плагіни завантажені і встановлені в папці @plugins_dist@.',
654
+    'plugin_info_plugins_dist_2' => 'Їх не можна відключити.',
655
+    'plugin_info_telecharger' => 'завантажити с @url@ і встановити в @rep@',
656
+    'plugin_info_upgrade_ok' => 'Обновлення пройшло успішно',
657
+    'plugin_librairies_installees' => 'Встановлені бібліотеки',
658
+    'plugin_necessite_extension_php' => 'Необхідно PHP-розширення @plugin@ версії @version@.',
659
+    'plugin_necessite_extension_php_sans_version' => 'Необхідно PHP-розширення @plugin@',
660
+    'plugin_necessite_lib' => 'Для цього плагіна необхідна бібліотека  @lib@',
661
+    'plugin_necessite_php' => 'Необхідно @plugin@ версії @version@.',
662
+    'plugin_necessite_plugin' => 'Для цього плагіна необхідний @plugin@  @version@ або новіший.',
663
+    'plugin_necessite_plugin_sans_version' => 'Потрібний плагін @plugin@',
664
+    'plugin_necessite_spip' => 'Для цього плагіна потрібний SPIP @version@ або новіший.',
665
+    'plugin_source' => 'джерело: ',
666
+    'plugin_titre_automatique' => 'Автоматичне встановлення',
667
+    'plugin_titre_automatique_ajouter' => 'Додати плагін',
668
+    'plugin_titre_installation' => 'Встановити плагін @plugin@ ',
669
+    'plugin_titre_modifier' => 'Мої плагіни',
670
+    'plugin_utilise_extension_php' => 'Використовується PHP-розширення @plugin@ версії @version@.',
671
+    'plugin_utilise_php' => 'Використовується @plugin@ версії @version@.',
672
+    'plugin_utilise_plugin' => 'Використовуйте плагін @plugin@ en версії @version@.',
673
+    'plugin_zip_active' => 'Продовжити для активації',
674
+    'plugin_zip_adresse' => 'Вкажіть посилання на zip файла плагіна для завантаження або адресу RSS листа плагінів.',
675
+    'plugin_zip_adresse_champ' => 'URL плагіна (zip file) або RSS листа',
676
+    'plugin_zip_content' => 'Він містить наступні файли(@taille@),<br />готові до встановлення в каталозі <code>@rep@</code>',
677
+    'plugin_zip_installe_finie' => 'Файл @zip@ распакований і встановлений.',
678
+    'plugin_zip_installe_rep_finie' => 'Файл @zip@ распакований і встановлений в каталозі @rep@ ',
679
+    'plugin_zip_installer' => 'Теперь ви можете встановити.',
680
+    'plugin_zip_telecharge' => 'Файл @zip@ було завантажено',
681
+    'plugins_actif_aucun' => 'Нема вимкенених плагінів.',
682
+    'plugins_actif_un' => 'Включений один плагін',
683
+    'plugins_actifs' => '@count@ плагінів включено.',
684
+    'plugins_actifs_liste' => 'Включені ',
685
+    'plugins_compte' => '@count@ плагіни',
686
+    'plugins_disponible_un' => 'Доступний один плагін',
687
+    'plugins_disponibles' => 'доступно @count@ плагінів.',
688
+    'plugins_erreur' => 'Помилка в плагінах: @plugins@',
689
+    'plugins_liste' => 'Встановлені плагіни',
690
+    'plugins_liste_dist' => 'Захищені плагіни',
691
+    'plugins_recents' => 'останні плагіни',
692
+    'plugins_tous_liste' => 'Усі',
693
+    'plugins_vue_hierarchie' => 'Ієрархія',
694
+    'plugins_vue_liste' => 'Список',
695
+    'protocole_ldap' => 'Версія протоколу:',
696 696
 
697
-	// Q
698
-	'queue_executer_maintenant' => 'Запустити',
699
-	'queue_info_purger' => 'Ви можете видалити усі поточні завдання і очистити всю чергу завдань',
700
-	'queue_nb_jobs_in_queue' => 'В черзі @nb@ завдань',
701
-	'queue_next_job_in_nb_sec' => 'Наступне завдання через @nb@ s',
702
-	'queue_no_job_in_queue' => 'Список завдань пустий',
703
-	'queue_one_job_in_queue' => '1 завдання в черзі',
704
-	'queue_priorite_tache' => 'пріорітет',
705
-	'queue_purger_queue' => 'Очистити список завдань',
706
-	'queue_titre' => 'Список завдань',
697
+    // Q
698
+    'queue_executer_maintenant' => 'Запустити',
699
+    'queue_info_purger' => 'Ви можете видалити усі поточні завдання і очистити всю чергу завдань',
700
+    'queue_nb_jobs_in_queue' => 'В черзі @nb@ завдань',
701
+    'queue_next_job_in_nb_sec' => 'Наступне завдання через @nb@ s',
702
+    'queue_no_job_in_queue' => 'Список завдань пустий',
703
+    'queue_one_job_in_queue' => '1 завдання в черзі',
704
+    'queue_priorite_tache' => 'пріорітет',
705
+    'queue_purger_queue' => 'Очистити список завдань',
706
+    'queue_titre' => 'Список завдань',
707 707
 
708
-	// R
709
-	'repertoire_plugins' => 'Репозиторій:',
710
-	'required' => '(обов’язково)',
708
+    // R
709
+    'repertoire_plugins' => 'Репозиторій:',
710
+    'required' => '(обов’язково)',
711 711
 
712
-	// S
713
-	'sans_heure' => 'час невизначений',
714
-	'statut_admin_restreint' => '(обмежений адміністратор)',
715
-	'statut_webmestre' => 'веб-майстер',
712
+    // S
713
+    'sans_heure' => 'час невизначений',
714
+    'statut_admin_restreint' => '(обмежений адміністратор)',
715
+    'statut_webmestre' => 'веб-майстер',
716 716
 
717
-	// T
718
-	'tache_cron_asap' => 'Завдання CRON @function@ (ASAP)',
719
-	'tache_cron_secondes' => 'Завдання CRON @function@ (кожні @nb@ с)',
720
-	'taille_cache_image' => 'Кеш файлів зображень (автоматично стиснені картинки, зображення формул в форматі TeX і текст, трасформований в графіку) займає @taille@ в каталозі @dir@.',
721
-	'taille_cache_infinie' => 'На вашому сайті нема обмежень на розмір кеша.',
722
-	'taille_cache_maxi' => 'Заданий максимальний розмір файлів кеша складає приблизно <b> @octets@ </b>.',
723
-	'taille_cache_moins_de' => 'Розмір кеша менше @octets@.',
724
-	'taille_cache_octets' => 'Приблизний розмір кеша @octets@.',
725
-	'taille_cache_vide' => 'Кеш очищено.',
726
-	'taille_repertoire_cache' => 'Поточний розмір кеша',
727
-	'text_article_propose_publication' => 'Статтю представлено до публікації.',
728
-	'texte_acces_ldap_anonyme_1' => 'Деякі сервери LDAP не дозволяють анонімного доступу. В цьому випадку ви повинні вказати вихідний ідентифікатор доступу, щоб згодом мати можливість шукати інформацію в каталозі. Але в більшості випадків наступні поля можна залишити порожніми.',
729
-	'texte_admin_effacer_01' => 'Ця команда видаляє <i>увесь</i> вміст бази даних, включаючи <i>усі</i> параметри доступу для редакторів і адміністраторів. Після її виконання ви повинні перевстановити SPIP, щоб відновити нову базу даних і доступ першого адміністратора.',
730
-	'texte_adresse_annuaire_1' => '(Якщо ваш каталог установлено на тому ж самому комп’ютері, що і ваш вебсайт, це, напевно, - «localhost».)',
731
-	'texte_ajout_auteur' => 'Наступний автор був доданий до статті:',
732
-	'texte_annuaire_ldap_1' => 'Якщо ви маєте доступ до каталогу(LDAP), то можете використовувати його для автоматичного імпорту користувачів SPIP.',
733
-	'texte_article_statut' => 'Статус статті:',
734
-	'texte_article_virtuel' => 'Віртуальна стаття',
735
-	'texte_article_virtuel_reference' => '<b>Віртуальна стаття:</b> стаття, на яку є посилання на вашому SPIP сайті, але яка насправді знаходиться на іншому URL. Щоб видалити перенаправлення, видаліть адресу, яку наведено вище.',
736
-	'texte_aucun_resultat_auteur' => 'Нема результатів для «@cherche_auteur@».',
737
-	'texte_auteur_messagerie' => 'Цей сайт може постійнно контролювати список редакторів, які знаходяться он-лайн, що дозволяє вам обмінюватися повідомленнями в реальному часі. Ви можете вирішити не з’являтися в цьому списку (тоді вас «не побачать» інші користувачі).',
738
-	'texte_auteurs' => 'АВТОРИ',
739
-	'texte_choix_base_1' => 'Вибрати вашу базу даних:',
740
-	'texte_choix_base_2' => 'SQL сервер містить декілька баз даних.',
741
-	'texte_choix_base_3' => '<b>Виберіть</b> нижче ту, яку ваш інтернет провайдер може віднести до вас:',
742
-	'texte_choix_table_prefix' => 'Префікс для таблиць БД:',
743
-	'texte_compte_element' => '@count@ елемент',
744
-	'texte_compte_elements' => '@count@ елементи',
745
-	'texte_conflit_edition_correction' => 'Будь ласка, перевірте нижче різницю між двома версіями. Таким чином ви можете зкопіювати ваші зміни і почати спочатку.',
746
-	'texte_connexion_mysql' => 'Параметри доступу до бази даних задаются в контрольній панелі хостінга. Якщо у вас нема можливості управляти вашими базами даних, ви можете запитати про допомогу в службі підтримки хостінгу.',
747
-	'texte_contenu_article' => '(Короткий зміст статті.)',
748
-	'texte_contenu_articles' => 'Вибрати додаткові інформаційні поля для статтей. В залежності від того, як запрограмовано ваш сайт, вони можуть відображатися або не відображатися в загальному доступі. ',
749
-	'texte_crash_base' => 'Якщо ваша база даних пошкоджена, ви можете спробувати відновити її автоматично.',
750
-	'texte_creer_rubrique' => 'Створіть хоча б одну рубрику, <br />щоб писати статті.',
751
-	'texte_date_creation_article' => 'ДАТА створення статті:',
752
-	'texte_date_creation_objet' => 'Дата створення:', # on ajoute le ":"
753
-	'texte_date_publication_anterieure' => 'Додаткова дата:',
754
-	'texte_date_publication_anterieure_nonaffichee' => 'Приховати дату більш ранньої публікації.',
755
-	'texte_date_publication_article' => 'ДАТА ОНЛАЙН ПУБЛИКАЦІИ:',
756
-	'texte_date_publication_objet' => 'Дата публікації:',
757
-	'texte_definir_comme_traduction_rubrique' => 'Ця рубрика є перекладом рубрики за номером:',
758
-	'texte_descriptif_rapide' => 'Короткий опис',
759
-	'texte_effacer_base' => 'Видалити базу даних SPIP',
760
-	'texte_effacer_statistiques' => 'Видалити статистику',
761
-	'texte_en_cours_validation' => 'Матеріали, що потребують перевірки. ',
762
-	'texte_enrichir_mise_a_jour' => 'Ви можете покращити свій текст, користуючись «типографськими скороченнями»',
763
-	'texte_fichier_authent' => '<b>Чи повинен SPIP створювати <tt>.htpasswd</tt> і <tt>.htpasswd-admin</tt> файли у папці @dossier@?</b> <p>Ці файли використовуються для обмеження доступу авторів і адміністраторов до інших частин сайту (наприклад, до папки з серверною статистикою).</p> <p>Якщо у вас нема необхідності в таких діях, то залиште це значення як усталено (default).</p>',
764
-	'texte_informations_personnelles_1' => 'Теперь система створить ваш обліковий запис на сайті.',
765
-	'texte_informations_personnelles_2' => '(Примітка: Якщо ви перевстановлюєте SPIP і ваш старий логін і пароль як і раніше працюють, ви можете',
766
-	'texte_introductif_article' => '(Вступний текст до статті)',
767
-	'texte_jeu_caractere' => 'Рекомендуємо використовувати кодування (<tt>utf-8</tt>) на вашому сайті. Це дасть можливість відображати текст будь-якою мовою. ',
768
-	'texte_jeu_caractere_3' => 'Поточне кодування:',
769
-	'texte_jeu_caractere_4' => 'Якщо це не відповідає ситуації з вашими даними (наприклад, після відновлення бази даних з резервної копії), або якщо <em>ви створюєте цей сайт</em> і хочете використовувати різні набори символів, будь ласка, вкажіть набор символів тут:',
770
-	'texte_login_ldap_1' => '(Залиште порожнім для анонімного доступу або введіть повний шлях, наприклад «<tt>uid=smith, ou=users, dc=my-domain, dc=com </tt>».)',
771
-	'texte_login_precaution' => 'Увага! Це ваш поточний логін на сайті, міняйте вдумливо.',
772
-	'texte_messagerie_agenda' => 'Система відправлення повідомлень дозволяє авторам сайту спілкуватися безпосередньо в редакційній частині сайту. Вона пов’язана з календарем.',
773
-	'texte_mise_a_niveau_base_1' => 'Ви тільки но поновили файли SPIP. Теперь ви повинні поновити базу даних сайту.',
774
-	'texte_modifier_article' => 'Змінити статтю:',
775
-	'texte_multilinguisme' => 'Якщо на сайті будуть розміщуватися матеріали деякільками мовами, ви можете додати «меню вибору мови» для цих матеріалів.',
776
-	'texte_multilinguisme_trad' => 'Також ви можете дозволити об’єднувати різні переклади одного і того ж матеріалу. ',
777
-	'texte_non_compresse' => '<i>розпакувати</i> (ваш сервер не підтримує цю функцію)',
778
-	'texte_nouvelle_version_spip_1' => 'Ви встановили нову версію SPIP.',
779
-	'texte_nouvelle_version_spip_2' => 'Щоб поновити сайт до нової версії, якщо ви вебмастер цього сайту, будь ласка, видаліть файл @connect@ і повторно почніть установку, щоб поновити налаштування підключення до бази даних. <p>(PS: Якщо ви забули свої параметри з’єднання, то вони зберігаються в файлі @connect@ </p>',
780
-	'texte_operation_echec' => 'Поверніться до попередньої сторінки, виберіть іншу базу даних або створіть нову. Перевірте інформацію, надану вашим хостом.',
781
-	'texte_plus_trois_car' => 'понад 3 символи',
782
-	'texte_plusieurs_articles' => 'Декілька авторів було знайдено для «@cherche_auteur@»:',
783
-	'texte_port_annuaire' => '(Усталене (default) значення є підходящим.)',
784
-	'texte_presente_plugin' => 'На цій сторінці перелік плагінів, доступних на вашому сайті. Включіть плагін, відзначивши відповідний квадратик.',
785
-	'texte_proposer_publication' => 'Коли ви закінчите роботу над статтею, <br />ви можете представити її до публікації.',
786
-	'texte_proxy' => 'В деяких випадках (внутрішні або захищені мережі...) необхідно використовувати <i>proxy HTTP</i>, щоб дістатися віддалених сайтів (SPIP документація, сайти, що реферуються і т.д.). В такому разі введіть його адресу нижче в форму <tt><html> http://proxy:8080 </html></tt> (@proxy_en_cours@). В більшості випадків ви можете залишити це поле порожнім.',
787
-	'texte_publication_articles_post_dates' => 'Коли публікувати статті з датою публікації в майбутньому?',
788
-	'texte_rappel_selection_champs' => '[Не забудьте правильно обрати поле.]',
789
-	'texte_recalcul_page' => 'Якщо ви хочете поновити тільки одну сторінку, то можете зробити це в основній частині, використовуючи кнопку «Поновити сторінку».',
790
-	'texte_recuperer_base' => 'Відновити базу даних',
791
-	'texte_reference_mais_redirige' => 'посилання на статтю вашого SPIP сайту, але переадресоване на іншу адресу.',
792
-	'texte_requetes_echouent' => '<b>Якщо при виконанні SQL запитів часто з’являються повідомлення про помилки, цілком можливо, що пошкоджено саму базу даних.</b> <p>В SQL вбудовано функцію ремонту і відновлення пошкоджених таблиць. Ви можете спробувати виконати процедуру відновлення або ремонту зараз.</p>',
793
-	'texte_selection_langue_principale' => 'Ви можете вибрати «головну мову» сайту. Вона задає: 
717
+    // T
718
+    'tache_cron_asap' => 'Завдання CRON @function@ (ASAP)',
719
+    'tache_cron_secondes' => 'Завдання CRON @function@ (кожні @nb@ с)',
720
+    'taille_cache_image' => 'Кеш файлів зображень (автоматично стиснені картинки, зображення формул в форматі TeX і текст, трасформований в графіку) займає @taille@ в каталозі @dir@.',
721
+    'taille_cache_infinie' => 'На вашому сайті нема обмежень на розмір кеша.',
722
+    'taille_cache_maxi' => 'Заданий максимальний розмір файлів кеша складає приблизно <b> @octets@ </b>.',
723
+    'taille_cache_moins_de' => 'Розмір кеша менше @octets@.',
724
+    'taille_cache_octets' => 'Приблизний розмір кеша @octets@.',
725
+    'taille_cache_vide' => 'Кеш очищено.',
726
+    'taille_repertoire_cache' => 'Поточний розмір кеша',
727
+    'text_article_propose_publication' => 'Статтю представлено до публікації.',
728
+    'texte_acces_ldap_anonyme_1' => 'Деякі сервери LDAP не дозволяють анонімного доступу. В цьому випадку ви повинні вказати вихідний ідентифікатор доступу, щоб згодом мати можливість шукати інформацію в каталозі. Але в більшості випадків наступні поля можна залишити порожніми.',
729
+    'texte_admin_effacer_01' => 'Ця команда видаляє <i>увесь</i> вміст бази даних, включаючи <i>усі</i> параметри доступу для редакторів і адміністраторів. Після її виконання ви повинні перевстановити SPIP, щоб відновити нову базу даних і доступ першого адміністратора.',
730
+    'texte_adresse_annuaire_1' => '(Якщо ваш каталог установлено на тому ж самому комп’ютері, що і ваш вебсайт, це, напевно, - «localhost».)',
731
+    'texte_ajout_auteur' => 'Наступний автор був доданий до статті:',
732
+    'texte_annuaire_ldap_1' => 'Якщо ви маєте доступ до каталогу(LDAP), то можете використовувати його для автоматичного імпорту користувачів SPIP.',
733
+    'texte_article_statut' => 'Статус статті:',
734
+    'texte_article_virtuel' => 'Віртуальна стаття',
735
+    'texte_article_virtuel_reference' => '<b>Віртуальна стаття:</b> стаття, на яку є посилання на вашому SPIP сайті, але яка насправді знаходиться на іншому URL. Щоб видалити перенаправлення, видаліть адресу, яку наведено вище.',
736
+    'texte_aucun_resultat_auteur' => 'Нема результатів для «@cherche_auteur@».',
737
+    'texte_auteur_messagerie' => 'Цей сайт може постійнно контролювати список редакторів, які знаходяться он-лайн, що дозволяє вам обмінюватися повідомленнями в реальному часі. Ви можете вирішити не з’являтися в цьому списку (тоді вас «не побачать» інші користувачі).',
738
+    'texte_auteurs' => 'АВТОРИ',
739
+    'texte_choix_base_1' => 'Вибрати вашу базу даних:',
740
+    'texte_choix_base_2' => 'SQL сервер містить декілька баз даних.',
741
+    'texte_choix_base_3' => '<b>Виберіть</b> нижче ту, яку ваш інтернет провайдер може віднести до вас:',
742
+    'texte_choix_table_prefix' => 'Префікс для таблиць БД:',
743
+    'texte_compte_element' => '@count@ елемент',
744
+    'texte_compte_elements' => '@count@ елементи',
745
+    'texte_conflit_edition_correction' => 'Будь ласка, перевірте нижче різницю між двома версіями. Таким чином ви можете зкопіювати ваші зміни і почати спочатку.',
746
+    'texte_connexion_mysql' => 'Параметри доступу до бази даних задаются в контрольній панелі хостінга. Якщо у вас нема можливості управляти вашими базами даних, ви можете запитати про допомогу в службі підтримки хостінгу.',
747
+    'texte_contenu_article' => '(Короткий зміст статті.)',
748
+    'texte_contenu_articles' => 'Вибрати додаткові інформаційні поля для статтей. В залежності від того, як запрограмовано ваш сайт, вони можуть відображатися або не відображатися в загальному доступі. ',
749
+    'texte_crash_base' => 'Якщо ваша база даних пошкоджена, ви можете спробувати відновити її автоматично.',
750
+    'texte_creer_rubrique' => 'Створіть хоча б одну рубрику, <br />щоб писати статті.',
751
+    'texte_date_creation_article' => 'ДАТА створення статті:',
752
+    'texte_date_creation_objet' => 'Дата створення:', # on ajoute le ":"
753
+    'texte_date_publication_anterieure' => 'Додаткова дата:',
754
+    'texte_date_publication_anterieure_nonaffichee' => 'Приховати дату більш ранньої публікації.',
755
+    'texte_date_publication_article' => 'ДАТА ОНЛАЙН ПУБЛИКАЦІИ:',
756
+    'texte_date_publication_objet' => 'Дата публікації:',
757
+    'texte_definir_comme_traduction_rubrique' => 'Ця рубрика є перекладом рубрики за номером:',
758
+    'texte_descriptif_rapide' => 'Короткий опис',
759
+    'texte_effacer_base' => 'Видалити базу даних SPIP',
760
+    'texte_effacer_statistiques' => 'Видалити статистику',
761
+    'texte_en_cours_validation' => 'Матеріали, що потребують перевірки. ',
762
+    'texte_enrichir_mise_a_jour' => 'Ви можете покращити свій текст, користуючись «типографськими скороченнями»',
763
+    'texte_fichier_authent' => '<b>Чи повинен SPIP створювати <tt>.htpasswd</tt> і <tt>.htpasswd-admin</tt> файли у папці @dossier@?</b> <p>Ці файли використовуються для обмеження доступу авторів і адміністраторов до інших частин сайту (наприклад, до папки з серверною статистикою).</p> <p>Якщо у вас нема необхідності в таких діях, то залиште це значення як усталено (default).</p>',
764
+    'texte_informations_personnelles_1' => 'Теперь система створить ваш обліковий запис на сайті.',
765
+    'texte_informations_personnelles_2' => '(Примітка: Якщо ви перевстановлюєте SPIP і ваш старий логін і пароль як і раніше працюють, ви можете',
766
+    'texte_introductif_article' => '(Вступний текст до статті)',
767
+    'texte_jeu_caractere' => 'Рекомендуємо використовувати кодування (<tt>utf-8</tt>) на вашому сайті. Це дасть можливість відображати текст будь-якою мовою. ',
768
+    'texte_jeu_caractere_3' => 'Поточне кодування:',
769
+    'texte_jeu_caractere_4' => 'Якщо це не відповідає ситуації з вашими даними (наприклад, після відновлення бази даних з резервної копії), або якщо <em>ви створюєте цей сайт</em> і хочете використовувати різні набори символів, будь ласка, вкажіть набор символів тут:',
770
+    'texte_login_ldap_1' => '(Залиште порожнім для анонімного доступу або введіть повний шлях, наприклад «<tt>uid=smith, ou=users, dc=my-domain, dc=com </tt>».)',
771
+    'texte_login_precaution' => 'Увага! Це ваш поточний логін на сайті, міняйте вдумливо.',
772
+    'texte_messagerie_agenda' => 'Система відправлення повідомлень дозволяє авторам сайту спілкуватися безпосередньо в редакційній частині сайту. Вона пов’язана з календарем.',
773
+    'texte_mise_a_niveau_base_1' => 'Ви тільки но поновили файли SPIP. Теперь ви повинні поновити базу даних сайту.',
774
+    'texte_modifier_article' => 'Змінити статтю:',
775
+    'texte_multilinguisme' => 'Якщо на сайті будуть розміщуватися матеріали деякільками мовами, ви можете додати «меню вибору мови» для цих матеріалів.',
776
+    'texte_multilinguisme_trad' => 'Також ви можете дозволити об’єднувати різні переклади одного і того ж матеріалу. ',
777
+    'texte_non_compresse' => '<i>розпакувати</i> (ваш сервер не підтримує цю функцію)',
778
+    'texte_nouvelle_version_spip_1' => 'Ви встановили нову версію SPIP.',
779
+    'texte_nouvelle_version_spip_2' => 'Щоб поновити сайт до нової версії, якщо ви вебмастер цього сайту, будь ласка, видаліть файл @connect@ і повторно почніть установку, щоб поновити налаштування підключення до бази даних. <p>(PS: Якщо ви забули свої параметри з’єднання, то вони зберігаються в файлі @connect@ </p>',
780
+    'texte_operation_echec' => 'Поверніться до попередньої сторінки, виберіть іншу базу даних або створіть нову. Перевірте інформацію, надану вашим хостом.',
781
+    'texte_plus_trois_car' => 'понад 3 символи',
782
+    'texte_plusieurs_articles' => 'Декілька авторів було знайдено для «@cherche_auteur@»:',
783
+    'texte_port_annuaire' => '(Усталене (default) значення є підходящим.)',
784
+    'texte_presente_plugin' => 'На цій сторінці перелік плагінів, доступних на вашому сайті. Включіть плагін, відзначивши відповідний квадратик.',
785
+    'texte_proposer_publication' => 'Коли ви закінчите роботу над статтею, <br />ви можете представити її до публікації.',
786
+    'texte_proxy' => 'В деяких випадках (внутрішні або захищені мережі...) необхідно використовувати <i>proxy HTTP</i>, щоб дістатися віддалених сайтів (SPIP документація, сайти, що реферуються і т.д.). В такому разі введіть його адресу нижче в форму <tt><html> http://proxy:8080 </html></tt> (@proxy_en_cours@). В більшості випадків ви можете залишити це поле порожнім.',
787
+    'texte_publication_articles_post_dates' => 'Коли публікувати статті з датою публікації в майбутньому?',
788
+    'texte_rappel_selection_champs' => '[Не забудьте правильно обрати поле.]',
789
+    'texte_recalcul_page' => 'Якщо ви хочете поновити тільки одну сторінку, то можете зробити це в основній частині, використовуючи кнопку «Поновити сторінку».',
790
+    'texte_recuperer_base' => 'Відновити базу даних',
791
+    'texte_reference_mais_redirige' => 'посилання на статтю вашого SPIP сайту, але переадресоване на іншу адресу.',
792
+    'texte_requetes_echouent' => '<b>Якщо при виконанні SQL запитів часто з’являються повідомлення про помилки, цілком можливо, що пошкоджено саму базу даних.</b> <p>В SQL вбудовано функцію ремонту і відновлення пошкоджених таблиць. Ви можете спробувати виконати процедуру відновлення або ремонту зараз.</p>',
793
+    'texte_selection_langue_principale' => 'Ви можете вибрати «головну мову» сайту. Вона задає: 
794 794
 <ul>
795 795
 <li>усталений формат виведення дати</li> 
796 796
 <li>усталену мову для використання на сайті</li> 
797 797
 <li>усталену мову для адміністративной частини.</li>
798 798
 </ul>',
799
-	'texte_sous_titre' => 'Підзаголовок',
800
-	'texte_statistiques_visites' => '(темні штрихи: неділя / темна крива: середній рівень)',
801
-	'texte_statut_attente_validation' => 'очікує затвердження',
802
-	'texte_statut_publies' => 'опубліковані на сайті',
803
-	'texte_statut_refuses' => 'відхилено',
804
-	'texte_suppression_fichiers' => 'використовуйте команду для видалення усіх файлів з кеша SPIP. Це дозволить поновити усі сторінки сайту. Це дуже зручно, якщо ви змінили шаблони або поновили значну кількість інформації на сайті.',
805
-	'texte_sur_titre' => 'Топ-заголовок',
806
-	'texte_table_ok' => ':  таблиця ОК.',
807
-	'texte_tentative_recuperation' => 'Спроба відновлення ',
808
-	'texte_tenter_reparation' => 'Спроба відновлення бази даних',
809
-	'texte_test_proxy' => 'Щоб спробувати проксі, введіть тут адрес вебсайта, який ви хочете перевірити.',
810
-	'texte_titre_02' => 'Заголовок:',
811
-	'texte_titre_obligatoire' => '<b>Заголовок</b> [обов’язково]',
812
-	'texte_travail_article' => '@nom_auteur_modif@ роботав над цією статтею @date_diff@ хвилин тому',
813
-	'texte_travail_collaboratif' => 'Якщо декілька авторів редагують одну і ту ж саму статтю, то система позначає її як «в роботі» і обмежує доступ до неї, щоб уникнути втрат інформації внаслідок одночасного редагування матеріалу. Зазвичай цю можливість відключено.',
814
-	'texte_vide' => 'очистити',
815
-	'texte_vider_cache' => 'Очистити кеш',
816
-	'titre_admin_tech' => 'Технічне обслуговування',
817
-	'titre_admin_vider' => 'Технічне обслуговування',
818
-	'titre_ajouter_un_auteur' => 'Додати автора',
819
-	'titre_ajouter_un_mot' => 'Додати ключове слово',
820
-	'titre_cadre_afficher_article' => 'Показати статті:',
821
-	'titre_cadre_afficher_traductions' => 'Показати стан перекладу для наступних мов:',
822
-	'titre_cadre_ajouter_auteur' => 'ДОДАТИ АВТОРА:',
823
-	'titre_cadre_interieur_rubrique' => 'В розділі',
824
-	'titre_cadre_numero_auteur' => 'НОМЕР АВТОРА',
825
-	'titre_cadre_numero_objet' => '@objet@ НОМЕР:',
826
-	'titre_cadre_signature_obligatoire' => '<b>Підпис</b> [обов’язково]<br />',
827
-	'titre_config_contenu_notifications' => 'Повідомлення',
828
-	'titre_config_contenu_prive' => 'У редакційній частині',
829
-	'titre_config_contenu_public' => 'В публічній частині',
830
-	'titre_config_fonctions' => 'Налаштування сайту',
831
-	'titre_config_langage' => 'Вибір мови інтерфейсу',
832
-	'titre_configuration' => 'Налаштування сайту',
833
-	'titre_configurer_preferences' => 'Змінити налаштування',
834
-	'titre_configurer_preferences_menus' => 'Налаштування меню',
835
-	'titre_conflit_edition' => 'Протиріччя в процесі зміни',
836
-	'titre_connexion_ldap' => 'Опції: <b>ваше LDAP з’єднання</b>',
837
-	'titre_groupe_mots' => 'ГРУППА КЛЮЧОВИХ СЛІВ:',
838
-	'titre_identite_site' => 'Інформація про сайт',
839
-	'titre_langue_article' => 'Мова статті',
840
-	'titre_langue_rubrique' => 'МОВА РОЗДІЛУ',
841
-	'titre_langue_trad_article' => 'МОВА та ПЕРЕКЛАДИ СТАТТІ',
842
-	'titre_les_articles' => 'СТАТТІ',
843
-	'titre_messagerie_agenda' => 'Система обміну повідомленнями і календар',
844
-	'titre_naviguer_dans_le_site' => 'Перегляд сайту...',
845
-	'titre_nouvelle_rubrique' => 'Новий розділ',
846
-	'titre_numero_rubrique' => 'НОМЕР РОЗДІЛУ:',
847
-	'titre_page_articles_edit' => 'Змінити: @titre@',
848
-	'titre_page_articles_page' => 'Статті',
849
-	'titre_page_articles_tous' => 'Весь сайт',
850
-	'titre_page_calendrier' => 'Календар @nom_mois@ @annee@',
851
-	'titre_page_config_contenu' => 'Налаштування сайту',
852
-	'titre_page_delete_all' => 'повне і незворотне видалення ',
853
-	'titre_page_recherche' => 'Результати пошуку @recherche@',
854
-	'titre_page_statistiques_referers' => 'Статистика (вхідні посилання)',
855
-	'titre_page_upgrade' => 'SPIP оновлення',
856
-	'titre_preference_menus_favoris' => 'Обране меню',
857
-	'titre_publication_articles_post_dates' => 'Відкладена публікація статтей',
858
-	'titre_reparation' => 'Відновити',
859
-	'titre_suivi_petition' => 'Відстеження звернень (петицій)',
860
-	'tls_ldap' => 'Transport Layer Security :',
861
-	'trad_article_traduction' => 'Усі версії цієї статті:',
862
-	'trad_delier' => 'Видалити зв’язок з цим перекладом',
863
-	'trad_lier' => 'Ця стаття є перекладом статті за номером:',
864
-	'trad_new' => 'Додати новий переклад',
799
+    'texte_sous_titre' => 'Підзаголовок',
800
+    'texte_statistiques_visites' => '(темні штрихи: неділя / темна крива: середній рівень)',
801
+    'texte_statut_attente_validation' => 'очікує затвердження',
802
+    'texte_statut_publies' => 'опубліковані на сайті',
803
+    'texte_statut_refuses' => 'відхилено',
804
+    'texte_suppression_fichiers' => 'використовуйте команду для видалення усіх файлів з кеша SPIP. Це дозволить поновити усі сторінки сайту. Це дуже зручно, якщо ви змінили шаблони або поновили значну кількість інформації на сайті.',
805
+    'texte_sur_titre' => 'Топ-заголовок',
806
+    'texte_table_ok' => ':  таблиця ОК.',
807
+    'texte_tentative_recuperation' => 'Спроба відновлення ',
808
+    'texte_tenter_reparation' => 'Спроба відновлення бази даних',
809
+    'texte_test_proxy' => 'Щоб спробувати проксі, введіть тут адрес вебсайта, який ви хочете перевірити.',
810
+    'texte_titre_02' => 'Заголовок:',
811
+    'texte_titre_obligatoire' => '<b>Заголовок</b> [обов’язково]',
812
+    'texte_travail_article' => '@nom_auteur_modif@ роботав над цією статтею @date_diff@ хвилин тому',
813
+    'texte_travail_collaboratif' => 'Якщо декілька авторів редагують одну і ту ж саму статтю, то система позначає її як «в роботі» і обмежує доступ до неї, щоб уникнути втрат інформації внаслідок одночасного редагування матеріалу. Зазвичай цю можливість відключено.',
814
+    'texte_vide' => 'очистити',
815
+    'texte_vider_cache' => 'Очистити кеш',
816
+    'titre_admin_tech' => 'Технічне обслуговування',
817
+    'titre_admin_vider' => 'Технічне обслуговування',
818
+    'titre_ajouter_un_auteur' => 'Додати автора',
819
+    'titre_ajouter_un_mot' => 'Додати ключове слово',
820
+    'titre_cadre_afficher_article' => 'Показати статті:',
821
+    'titre_cadre_afficher_traductions' => 'Показати стан перекладу для наступних мов:',
822
+    'titre_cadre_ajouter_auteur' => 'ДОДАТИ АВТОРА:',
823
+    'titre_cadre_interieur_rubrique' => 'В розділі',
824
+    'titre_cadre_numero_auteur' => 'НОМЕР АВТОРА',
825
+    'titre_cadre_numero_objet' => '@objet@ НОМЕР:',
826
+    'titre_cadre_signature_obligatoire' => '<b>Підпис</b> [обов’язково]<br />',
827
+    'titre_config_contenu_notifications' => 'Повідомлення',
828
+    'titre_config_contenu_prive' => 'У редакційній частині',
829
+    'titre_config_contenu_public' => 'В публічній частині',
830
+    'titre_config_fonctions' => 'Налаштування сайту',
831
+    'titre_config_langage' => 'Вибір мови інтерфейсу',
832
+    'titre_configuration' => 'Налаштування сайту',
833
+    'titre_configurer_preferences' => 'Змінити налаштування',
834
+    'titre_configurer_preferences_menus' => 'Налаштування меню',
835
+    'titre_conflit_edition' => 'Протиріччя в процесі зміни',
836
+    'titre_connexion_ldap' => 'Опції: <b>ваше LDAP з’єднання</b>',
837
+    'titre_groupe_mots' => 'ГРУППА КЛЮЧОВИХ СЛІВ:',
838
+    'titre_identite_site' => 'Інформація про сайт',
839
+    'titre_langue_article' => 'Мова статті',
840
+    'titre_langue_rubrique' => 'МОВА РОЗДІЛУ',
841
+    'titre_langue_trad_article' => 'МОВА та ПЕРЕКЛАДИ СТАТТІ',
842
+    'titre_les_articles' => 'СТАТТІ',
843
+    'titre_messagerie_agenda' => 'Система обміну повідомленнями і календар',
844
+    'titre_naviguer_dans_le_site' => 'Перегляд сайту...',
845
+    'titre_nouvelle_rubrique' => 'Новий розділ',
846
+    'titre_numero_rubrique' => 'НОМЕР РОЗДІЛУ:',
847
+    'titre_page_articles_edit' => 'Змінити: @titre@',
848
+    'titre_page_articles_page' => 'Статті',
849
+    'titre_page_articles_tous' => 'Весь сайт',
850
+    'titre_page_calendrier' => 'Календар @nom_mois@ @annee@',
851
+    'titre_page_config_contenu' => 'Налаштування сайту',
852
+    'titre_page_delete_all' => 'повне і незворотне видалення ',
853
+    'titre_page_recherche' => 'Результати пошуку @recherche@',
854
+    'titre_page_statistiques_referers' => 'Статистика (вхідні посилання)',
855
+    'titre_page_upgrade' => 'SPIP оновлення',
856
+    'titre_preference_menus_favoris' => 'Обране меню',
857
+    'titre_publication_articles_post_dates' => 'Відкладена публікація статтей',
858
+    'titre_reparation' => 'Відновити',
859
+    'titre_suivi_petition' => 'Відстеження звернень (петицій)',
860
+    'tls_ldap' => 'Transport Layer Security :',
861
+    'trad_article_traduction' => 'Усі версії цієї статті:',
862
+    'trad_delier' => 'Видалити зв’язок з цим перекладом',
863
+    'trad_lier' => 'Ця стаття є перекладом статті за номером:',
864
+    'trad_new' => 'Додати новий переклад',
865 865
 
866
-	// U
867
-	'utf8_convert_erreur_orig' => 'Помилка: набір символів @charset@ не підтримується.',
866
+    // U
867
+    'utf8_convert_erreur_orig' => 'Помилка: набір символів @charset@ не підтримується.',
868 868
 
869
-	// V
870
-	'version' => 'Версія:'
869
+    // V
870
+    'version' => 'Версія:'
871 871
 );
Please login to merge, or discard this patch.
prive/formulaires/editer_auteur.php 3 patches
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -170,7 +170,7 @@  discard block
 block discarded – undo
170 170
 		unset($erreurs['new_login']);
171 171
 	}
172 172
 
173
-	$auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
173
+	$auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur='.intval($id_auteur));
174 174
 	$auth_methode = ($auth_methode ?: 'spip');
175 175
 	include_spip('inc/auth');
176 176
 
@@ -186,7 +186,7 @@  discard block
 block discarded – undo
186 186
 			!autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?'])
187 187
 			and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
188 188
 			and !strlen(trim($email))
189
-			and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)))
189
+			and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($id_auteur)))
190 190
 		) {
191 191
 			$erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email'));
192 192
 		} else {
@@ -201,7 +201,7 @@  discard block
 block discarded – undo
201 201
 			#Nouvel auteur
202 202
 			if (intval($id_auteur) == 0) {
203 203
 				#Un auteur existe deja avec cette adresse ?
204
-				if (sql_countsel('spip_auteurs', 'email=' . sql_quote($email)) > 0) {
204
+				if (sql_countsel('spip_auteurs', 'email='.sql_quote($email)) > 0) {
205 205
 					$erreurs['email'] = _T('erreur_email_deja_existant');
206 206
 				}
207 207
 			} else {
@@ -209,11 +209,11 @@  discard block
 block discarded – undo
209 209
 				if (
210 210
 					(sql_countsel(
211 211
 						'spip_auteurs',
212
-						'email=' . sql_quote($email)
212
+						'email='.sql_quote($email)
213 213
 					) > 0) and ($id_auteur != ($id_auteur_ancien = sql_getfetsel(
214 214
 						'id_auteur',
215 215
 						'spip_auteurs',
216
-						'email=' . sql_quote($email)
216
+						'email='.sql_quote($email)
217 217
 					)))
218 218
 				) {
219 219
 					$erreurs['email'] = _T('erreur_email_deja_existant');
@@ -231,7 +231,7 @@  discard block
 block discarded – undo
231 231
 	// corriger un cas si frequent : www.example.org sans le http:// qui precede
232 232
 	if ($url = _request('url_site') and !tester_url_absolue($url)) {
233 233
 		if (strpos($url, ':') === false and strncasecmp($url, 'www.', 4) === 0) {
234
-			$url = 'http://' . $url;
234
+			$url = 'http://'.$url;
235 235
 			set_request('url_site', $url);
236 236
 		}
237 237
 	}
@@ -248,11 +248,11 @@  discard block
 block discarded – undo
248 248
 	}
249 249
 	elseif (
250 250
 		($login = _request('new_login')) and
251
-		$login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))
251
+		$login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur='.intval($id_auteur))
252 252
 	) {
253 253
 		// on verifie la meme chose que dans auteurs_edit_config()
254 254
 		if (
255
-			! auth_autoriser_modifier_login($auth_methode)
255
+			!auth_autoriser_modifier_login($auth_methode)
256 256
 			or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['login' => true])
257 257
 			// legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email
258 258
 			or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['email' => true])
@@ -359,7 +359,7 @@  discard block
 block discarded – undo
359 359
 		if (
360 360
 			$GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
361 361
 			and $email_nouveau !=
362
-				($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)))
362
+				($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($id_auteur)))
363 363
 		) {
364 364
 			$envoyer_mail = charger_fonction('envoyer_mail', 'inc');
365 365
 			$texte = _T(
@@ -393,12 +393,12 @@  discard block
 block discarded – undo
393 393
 		if (isset($erreurs['message_ok'])) {
394 394
 			if (!isset($res['message_ok'])) { $res['message_ok'] = '';
395 395
 			}
396
-			$res['message_ok'] = trim($res['message_ok'] . ' ' . $erreurs['message_ok']);
396
+			$res['message_ok'] = trim($res['message_ok'].' '.$erreurs['message_ok']);
397 397
 		}
398 398
 		if (isset($erreurs['message_erreur']) and $erreurs['message_erreur']) {
399 399
 			if (!isset($res['message_erreur'])) { $res['message_erreur'] = '';
400 400
 			}
401
-			$res['message_erreur'] = trim($res['message_erreur'] . ' ' . $erreurs['message_erreur']);
401
+			$res['message_erreur'] = trim($res['message_erreur'].' '.$erreurs['message_erreur']);
402 402
 		}
403 403
 	}
404 404
 
@@ -425,7 +425,7 @@  discard block
 block discarded – undo
425 425
 
426 426
 
427 427
 function auteur_reset_password($id_auteur, $erreurs = []) {
428
-	$auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
428
+	$auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur='.intval($id_auteur));
429 429
 	$config = auteurs_edit_config($auteur);
430 430
 
431 431
 	if ($config['edit_pass']) {
@@ -460,7 +460,7 @@  discard block
 block discarded – undo
460 460
 		include_spip('action/editer_auteur');
461 461
 		auteur_modifier($id_auteur, $set);
462 462
 
463
-		$row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
463
+		$row = sql_fetsel('*', 'spip_auteurs', 'id_auteur='.intval($id_auteur));
464 464
 		include_spip('inc/filtres');
465 465
 		if (
466 466
 			$notifier
Please login to merge, or discard this patch.
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -245,8 +245,7 @@  discard block
 block discarded – undo
245 245
 	if (_request('login')) {
246 246
 		// on n'est jamais cense poster le name 'login'
247 247
 		$erreurs['login'] = _T('info_non_modifiable');
248
-	}
249
-	elseif (
248
+	} elseif (
250 249
 		($login = _request('new_login')) and
251 250
 		$login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))
252 251
 	) {
@@ -483,8 +482,7 @@  discard block
 block discarded – undo
483 482
 			if (!isset($contexte['lang']) or !$contexte['lang']) {
484 483
 				if (isset($row['lang']) and $row['lang']) {
485 484
 					$contexte['lang'] = $row['lang'];
486
-				}
487
-				else {
485
+				} else {
488 486
 					$contexte['lang'] = $GLOBALS['meta']['langue_site'];
489 487
 				}
490 488
 			}
Please login to merge, or discard this patch.
Indentation   +343 added lines, -343 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@  discard block
 block discarded – undo
7 7
  **/
8 8
 
9 9
 if (!defined('_ECRIRE_INC_VERSION')) {
10
-	return;
10
+    return;
11 11
 }
12 12
 
13 13
 include_spip('inc/actions');
@@ -37,21 +37,21 @@  discard block
 block discarded – undo
37 37
  *     Environnement du formulaire
38 38
  **/
39 39
 function formulaires_editer_auteur_charger_dist(
40
-	$id_auteur = 'new',
41
-	$retour = '',
42
-	$associer_objet = '',
43
-	$config_fonc = 'auteurs_edit_config',
44
-	$row = [],
45
-	$hidden = ''
40
+    $id_auteur = 'new',
41
+    $retour = '',
42
+    $associer_objet = '',
43
+    $config_fonc = 'auteurs_edit_config',
44
+    $row = [],
45
+    $hidden = ''
46 46
 ) {
47
-	$valeurs = formulaires_editer_objet_charger('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden);
48
-	$valeurs['new_login'] = $valeurs['login'];
47
+    $valeurs = formulaires_editer_objet_charger('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden);
48
+    $valeurs['new_login'] = $valeurs['login'];
49 49
 
50
-	if (!autoriser('modifier', 'auteur', intval($id_auteur))) {
51
-		$valeurs['editable'] = '';
52
-	}
50
+    if (!autoriser('modifier', 'auteur', intval($id_auteur))) {
51
+        $valeurs['editable'] = '';
52
+    }
53 53
 
54
-	return $valeurs;
54
+    return $valeurs;
55 55
 }
56 56
 
57 57
 /**
@@ -75,14 +75,14 @@  discard block
 block discarded – undo
75 75
  *     Hash du formulaire
76 76
  */
77 77
 function formulaires_editer_auteur_identifier_dist(
78
-	$id_auteur = 'new',
79
-	$retour = '',
80
-	$associer_objet = '',
81
-	$config_fonc = 'auteurs_edit_config',
82
-	$row = [],
83
-	$hidden = ''
78
+    $id_auteur = 'new',
79
+    $retour = '',
80
+    $associer_objet = '',
81
+    $config_fonc = 'auteurs_edit_config',
82
+    $row = [],
83
+    $hidden = ''
84 84
 ) {
85
-	return serialize([intval($id_auteur), $associer_objet]);
85
+    return serialize([intval($id_auteur), $associer_objet]);
86 86
 }
87 87
 
88 88
 
@@ -96,27 +96,27 @@  discard block
 block discarded – undo
96 96
  */
97 97
 function auteurs_edit_config(array $row): array {
98 98
 
99
-	$config = [];
100
-	$config['lignes'] = 8;
101
-	$config['langue'] = $GLOBALS['spip_lang'];
102
-
103
-	// pour instituer_auteur
104
-	$config['auteur'] = $row;
105
-
106
-	//$config['restreint'] = ($row['statut'] == 'publie');
107
-	$auth_methode = $row['source'];
108
-	include_spip('inc/auth');
109
-	$config['edit_login'] =
110
-		(auth_autoriser_modifier_login($auth_methode)
111
-			and autoriser('modifier', 'auteur', $row['id_auteur'], null, ['login' => true])
112
-			// legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email
113
-			and autoriser('modifier', 'auteur', $row['id_auteur'], null, ['email' => true])
114
-		);
115
-	$config['edit_pass'] =
116
-		(auth_autoriser_modifier_pass($auth_methode)
117
-			and autoriser('modifier', 'auteur', $row['id_auteur']));
118
-
119
-	return $config;
99
+    $config = [];
100
+    $config['lignes'] = 8;
101
+    $config['langue'] = $GLOBALS['spip_lang'];
102
+
103
+    // pour instituer_auteur
104
+    $config['auteur'] = $row;
105
+
106
+    //$config['restreint'] = ($row['statut'] == 'publie');
107
+    $auth_methode = $row['source'];
108
+    include_spip('inc/auth');
109
+    $config['edit_login'] =
110
+        (auth_autoriser_modifier_login($auth_methode)
111
+            and autoriser('modifier', 'auteur', $row['id_auteur'], null, ['login' => true])
112
+            // legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email
113
+            and autoriser('modifier', 'auteur', $row['id_auteur'], null, ['email' => true])
114
+        );
115
+    $config['edit_pass'] =
116
+        (auth_autoriser_modifier_pass($auth_methode)
117
+            and autoriser('modifier', 'auteur', $row['id_auteur']));
118
+
119
+    return $config;
120 120
 }
121 121
 
122 122
 /**
@@ -146,143 +146,143 @@  discard block
 block discarded – undo
146 146
  *     Erreurs des saisies
147 147
  **/
148 148
 function formulaires_editer_auteur_verifier_dist(
149
-	$id_auteur = 'new',
150
-	$retour = '',
151
-	$associer_objet = '',
152
-	$config_fonc = 'auteurs_edit_config',
153
-	$row = [],
154
-	$hidden = ''
149
+    $id_auteur = 'new',
150
+    $retour = '',
151
+    $associer_objet = '',
152
+    $config_fonc = 'auteurs_edit_config',
153
+    $row = [],
154
+    $hidden = ''
155 155
 ) {
156
-	// auto-renseigner le nom si il n'existe pas, sans couper
157
-	titre_automatique('nom', ['email', 'login'], 255);
158
-
159
-	$oblis = ['nom'];
160
-	// si on veut renvoyer des identifiants il faut un email et un login
161
-	if (_request('reset_password')) {
162
-		$oblis[] = 'email';
163
-		$oblis[] = 'new_login';
164
-	}
165
-	// mais il reste obligatoire si on a rien trouve
166
-	$erreurs = formulaires_editer_objet_verifier('auteur', $id_auteur, $oblis);
167
-	if (isset($erreurs['new_login'])) {
168
-		$erreurs['login'] = $erreurs['new_login'];
169
-		unset($erreurs['new_login']);
170
-	}
171
-
172
-	$auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
173
-	$auth_methode = ($auth_methode ?: 'spip');
174
-	include_spip('inc/auth');
175
-
176
-	if (!nom_acceptable(_request('nom'))) {
177
-		$erreurs['nom'] = _T('info_nom_pas_conforme');
178
-	}
179
-
180
-	if ($email = _request('email')) {
181
-		include_spip('inc/filtres');
182
-		include_spip('inc/autoriser');
183
-		// un redacteur qui modifie son email n'a pas le droit de le vider si il y en avait un
184
-		if (
185
-			!autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?'])
186
-			and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
187
-			and !strlen(trim($email))
188
-			and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)))
189
-		) {
190
-			$erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email'));
191
-		} else {
192
-			if (!email_valide($email)) {
193
-				$erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email'));
194
-			}
195
-		}
196
-		# Ne pas autoriser d'avoir deux auteurs avec le même email
197
-		# cette fonctionalité nécessite que la base soit clean à l'activation : pas de
198
-		# doublon sur la requête select email,count(*) from spip_auteurs group by email ;
199
-		if (defined('_INTERDIRE_AUTEUR_MEME_EMAIL')) {
200
-			#Nouvel auteur
201
-			if (intval($id_auteur) == 0) {
202
-				#Un auteur existe deja avec cette adresse ?
203
-				if (sql_countsel('spip_auteurs', 'email=' . sql_quote($email)) > 0) {
204
-					$erreurs['email'] = _T('erreur_email_deja_existant');
205
-				}
206
-			} else {
207
-				#Un auteur existe deja avec cette adresse ? et n'est pas le user courant.
208
-				if (
209
-					(sql_countsel(
210
-						'spip_auteurs',
211
-						'email=' . sql_quote($email)
212
-					) > 0) and ($id_auteur != ($id_auteur_ancien = sql_getfetsel(
213
-						'id_auteur',
214
-						'spip_auteurs',
215
-						'email=' . sql_quote($email)
216
-					)))
217
-				) {
218
-					$erreurs['email'] = _T('erreur_email_deja_existant');
219
-				}
220
-			}
221
-		}
222
-	}
223
-
224
-	// quand c'est un auteur existant on fait le reset password ici
225
-	if (!(is_countable($erreurs) ? count($erreurs) : 0) and _request('reset_password') and intval($id_auteur)) {
226
-		$erreurs = auteur_reset_password($id_auteur, $erreurs);
227
-		return $erreurs;
228
-	}
229
-
230
-	// corriger un cas si frequent : www.example.org sans le http:// qui precede
231
-	if ($url = _request('url_site') and !tester_url_absolue($url)) {
232
-		if (strpos($url, ':') === false and strncasecmp($url, 'www.', 4) === 0) {
233
-			$url = 'http://' . $url;
234
-			set_request('url_site', $url);
235
-		}
236
-	}
237
-	// traiter les liens implicites avant de tester l'url
238
-	include_spip('inc/lien');
239
-	if ($url = calculer_url(_request('url_site')) and !tester_url_absolue($url)) {
240
-		$erreurs['url_site'] = _T('info_url_site_pas_conforme');
241
-	}
242
-
243
-	$erreurs['message_erreur'] = '';
244
-	if (_request('login')) {
245
-		// on n'est jamais cense poster le name 'login'
246
-		$erreurs['login'] = _T('info_non_modifiable');
247
-	}
248
-	elseif (
249
-		($login = _request('new_login')) and
250
-		$login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))
251
-	) {
252
-		// on verifie la meme chose que dans auteurs_edit_config()
253
-		if (
254
-			! auth_autoriser_modifier_login($auth_methode)
255
-			or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['login' => true])
256
-			// legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email
257
-			or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['email' => true])
258
-		) {
259
-			$erreurs['login'] = _T('info_non_modifiable');
260
-		}
261
-	}
262
-
263
-	if (empty($erreurs['login'])) {
264
-		if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)) {
265
-			$erreurs['login'] = $err;
266
-			$erreurs['message_erreur'] .= $err;
267
-		} else {
268
-			// pass trop court ou confirmation non identique
269
-			if ($p = _request('new_pass')) {
270
-				if ($p != _request('new_pass2')) {
271
-					$erreurs['new_pass'] = _T('info_passes_identiques');
272
-					$erreurs['message_erreur'] .= _T('info_passes_identiques');
273
-				} elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) {
274
-					$erreurs['new_pass'] = $err;
275
-					$erreurs['message_erreur'] .= $err;
276
-				}
277
-			}
278
-		}
279
-	}
280
-
281
-	if (!$erreurs['message_erreur']) {
282
-		unset($erreurs['message_erreur']);
283
-	}
284
-
285
-	return $erreurs;
156
+    // auto-renseigner le nom si il n'existe pas, sans couper
157
+    titre_automatique('nom', ['email', 'login'], 255);
158
+
159
+    $oblis = ['nom'];
160
+    // si on veut renvoyer des identifiants il faut un email et un login
161
+    if (_request('reset_password')) {
162
+        $oblis[] = 'email';
163
+        $oblis[] = 'new_login';
164
+    }
165
+    // mais il reste obligatoire si on a rien trouve
166
+    $erreurs = formulaires_editer_objet_verifier('auteur', $id_auteur, $oblis);
167
+    if (isset($erreurs['new_login'])) {
168
+        $erreurs['login'] = $erreurs['new_login'];
169
+        unset($erreurs['new_login']);
170
+    }
171
+
172
+    $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
173
+    $auth_methode = ($auth_methode ?: 'spip');
174
+    include_spip('inc/auth');
175
+
176
+    if (!nom_acceptable(_request('nom'))) {
177
+        $erreurs['nom'] = _T('info_nom_pas_conforme');
178
+    }
179
+
180
+    if ($email = _request('email')) {
181
+        include_spip('inc/filtres');
182
+        include_spip('inc/autoriser');
183
+        // un redacteur qui modifie son email n'a pas le droit de le vider si il y en avait un
184
+        if (
185
+            !autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?'])
186
+            and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
187
+            and !strlen(trim($email))
188
+            and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)))
189
+        ) {
190
+            $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email'));
191
+        } else {
192
+            if (!email_valide($email)) {
193
+                $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email'));
194
+            }
195
+        }
196
+        # Ne pas autoriser d'avoir deux auteurs avec le même email
197
+        # cette fonctionalité nécessite que la base soit clean à l'activation : pas de
198
+        # doublon sur la requête select email,count(*) from spip_auteurs group by email ;
199
+        if (defined('_INTERDIRE_AUTEUR_MEME_EMAIL')) {
200
+            #Nouvel auteur
201
+            if (intval($id_auteur) == 0) {
202
+                #Un auteur existe deja avec cette adresse ?
203
+                if (sql_countsel('spip_auteurs', 'email=' . sql_quote($email)) > 0) {
204
+                    $erreurs['email'] = _T('erreur_email_deja_existant');
205
+                }
206
+            } else {
207
+                #Un auteur existe deja avec cette adresse ? et n'est pas le user courant.
208
+                if (
209
+                    (sql_countsel(
210
+                        'spip_auteurs',
211
+                        'email=' . sql_quote($email)
212
+                    ) > 0) and ($id_auteur != ($id_auteur_ancien = sql_getfetsel(
213
+                        'id_auteur',
214
+                        'spip_auteurs',
215
+                        'email=' . sql_quote($email)
216
+                    )))
217
+                ) {
218
+                    $erreurs['email'] = _T('erreur_email_deja_existant');
219
+                }
220
+            }
221
+        }
222
+    }
223
+
224
+    // quand c'est un auteur existant on fait le reset password ici
225
+    if (!(is_countable($erreurs) ? count($erreurs) : 0) and _request('reset_password') and intval($id_auteur)) {
226
+        $erreurs = auteur_reset_password($id_auteur, $erreurs);
227
+        return $erreurs;
228
+    }
229
+
230
+    // corriger un cas si frequent : www.example.org sans le http:// qui precede
231
+    if ($url = _request('url_site') and !tester_url_absolue($url)) {
232
+        if (strpos($url, ':') === false and strncasecmp($url, 'www.', 4) === 0) {
233
+            $url = 'http://' . $url;
234
+            set_request('url_site', $url);
235
+        }
236
+    }
237
+    // traiter les liens implicites avant de tester l'url
238
+    include_spip('inc/lien');
239
+    if ($url = calculer_url(_request('url_site')) and !tester_url_absolue($url)) {
240
+        $erreurs['url_site'] = _T('info_url_site_pas_conforme');
241
+    }
242
+
243
+    $erreurs['message_erreur'] = '';
244
+    if (_request('login')) {
245
+        // on n'est jamais cense poster le name 'login'
246
+        $erreurs['login'] = _T('info_non_modifiable');
247
+    }
248
+    elseif (
249
+        ($login = _request('new_login')) and
250
+        $login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))
251
+    ) {
252
+        // on verifie la meme chose que dans auteurs_edit_config()
253
+        if (
254
+            ! auth_autoriser_modifier_login($auth_methode)
255
+            or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['login' => true])
256
+            // legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email
257
+            or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['email' => true])
258
+        ) {
259
+            $erreurs['login'] = _T('info_non_modifiable');
260
+        }
261
+    }
262
+
263
+    if (empty($erreurs['login'])) {
264
+        if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)) {
265
+            $erreurs['login'] = $err;
266
+            $erreurs['message_erreur'] .= $err;
267
+        } else {
268
+            // pass trop court ou confirmation non identique
269
+            if ($p = _request('new_pass')) {
270
+                if ($p != _request('new_pass2')) {
271
+                    $erreurs['new_pass'] = _T('info_passes_identiques');
272
+                    $erreurs['message_erreur'] .= _T('info_passes_identiques');
273
+                } elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) {
274
+                    $erreurs['new_pass'] = $err;
275
+                    $erreurs['message_erreur'] .= $err;
276
+                }
277
+            }
278
+        }
279
+    }
280
+
281
+    if (!$erreurs['message_erreur']) {
282
+        unset($erreurs['message_erreur']);
283
+    }
284
+
285
+    return $erreurs;
286 286
 }
287 287
 
288 288
 
@@ -319,128 +319,128 @@  discard block
 block discarded – undo
319 319
  *     Retour des traitements
320 320
  **/
321 321
 function formulaires_editer_auteur_traiter_dist(
322
-	$id_auteur = 'new',
323
-	$retour = '',
324
-	$associer_objet = '',
325
-	$config_fonc = 'auteurs_edit_config',
326
-	$row = [],
327
-	$hidden = ''
322
+    $id_auteur = 'new',
323
+    $retour = '',
324
+    $associer_objet = '',
325
+    $config_fonc = 'auteurs_edit_config',
326
+    $row = [],
327
+    $hidden = ''
328 328
 ) {
329
-	$id_objet = null;
330
-	if (_request('saisie_webmestre') or _request('webmestre')) {
331
-		set_request('webmestre', _request('webmestre') ?: 'non');
332
-	}
333
-	$retour = parametre_url($retour, 'email_confirm', '');
334
-
335
-	if ($restreintes = _request('restreintes')) {
336
-		foreach ($restreintes as $k => $v) {
337
-			if (strpos($v, 'rubrique|') === 0) {
338
-				$restreintes[$k] = substr($v, 9);
339
-			}
340
-		}
341
-		set_request('restreintes', $restreintes);
342
-	}
343
-
344
-	set_request(
345
-		'email',
346
-		email_valide(_request('email'))
347
-	); // eviter d'enregistrer les cas qui sont acceptés par email_valide dans le verifier :
348
-	// "[email protected]  " ou encore "Marie Toto <[email protected]>"
349
-
350
-	include_spip('inc/autoriser');
351
-	if (!autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?'])) {
352
-		$email_nouveau = _request('email');
353
-		set_request('email'); // vider la saisie car l'auteur n'a pas le droit de modifier cet email
354
-		// mais si c'est son propre profil on lui envoie un email à l'adresse qu'il a indique
355
-		// pour qu'il confirme qu'il possede bien cette adresse
356
-		// son clic sur l'url du message permettre de confirmer le changement
357
-		// et de revenir sur son profil
358
-		if (
359
-			$GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
360
-			and $email_nouveau !=
361
-				($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)))
362
-		) {
363
-			$envoyer_mail = charger_fonction('envoyer_mail', 'inc');
364
-			$texte = _T(
365
-				'form_auteur_mail_confirmation',
366
-				[
367
-					'url' => generer_action_auteur(
368
-						'confirmer_email',
369
-						$email_nouveau,
370
-						parametre_url($retour, 'email_modif', 'ok')
371
-					)
372
-				]
373
-			);
374
-			$envoyer_mail($email_nouveau, _T('form_auteur_confirmation'), $texte);
375
-			set_request('email_confirm', $email_nouveau);
376
-			if ($email_ancien) {
377
-				$envoyer_mail(
378
-					$email_ancien,
379
-					_T('form_auteur_confirmation'),
380
-					_T('form_auteur_envoi_mail_confirmation', ['email' => $email_nouveau])
381
-				);
382
-			}
383
-			$retour = parametre_url($retour, 'email_confirm', $email_nouveau);
384
-		}
385
-	}
386
-
387
-	$res = formulaires_editer_objet_traiter('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden);
388
-
389
-	if (_request('reset_password') and !intval($id_auteur) and intval($res['id_auteur'])) {
390
-		$erreurs = [];
391
-		$erreurs = auteur_reset_password($res['id_auteur'], $erreurs);
392
-		if (isset($erreurs['message_ok'])) {
393
-			if (!isset($res['message_ok'])) { $res['message_ok'] = '';
394
-			}
395
-			$res['message_ok'] = trim($res['message_ok'] . ' ' . $erreurs['message_ok']);
396
-		}
397
-		if (isset($erreurs['message_erreur']) and $erreurs['message_erreur']) {
398
-			if (!isset($res['message_erreur'])) { $res['message_erreur'] = '';
399
-			}
400
-			$res['message_erreur'] = trim($res['message_erreur'] . ' ' . $erreurs['message_erreur']);
401
-		}
402
-	}
403
-
404
-	// Un lien auteur a prendre en compte ?
405
-	if ($associer_objet and $id_auteur = $res['id_auteur']) {
406
-		$objet = '';
407
-		if (intval($associer_objet)) {
408
-			$objet = 'article';
409
-			$id_objet = intval($associer_objet);
410
-		} elseif (preg_match(',^\w+\|[0-9]+$,', $associer_objet)) {
411
-			[$objet, $id_objet] = explode('|', $associer_objet);
412
-		}
413
-		if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) {
414
-			include_spip('action/editer_auteur');
415
-			auteur_associer($id_auteur, [$objet => $id_objet]);
416
-			if (isset($res['redirect'])) {
417
-				$res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_auteur, '&');
418
-			}
419
-		}
420
-	}
421
-
422
-	return $res;
329
+    $id_objet = null;
330
+    if (_request('saisie_webmestre') or _request('webmestre')) {
331
+        set_request('webmestre', _request('webmestre') ?: 'non');
332
+    }
333
+    $retour = parametre_url($retour, 'email_confirm', '');
334
+
335
+    if ($restreintes = _request('restreintes')) {
336
+        foreach ($restreintes as $k => $v) {
337
+            if (strpos($v, 'rubrique|') === 0) {
338
+                $restreintes[$k] = substr($v, 9);
339
+            }
340
+        }
341
+        set_request('restreintes', $restreintes);
342
+    }
343
+
344
+    set_request(
345
+        'email',
346
+        email_valide(_request('email'))
347
+    ); // eviter d'enregistrer les cas qui sont acceptés par email_valide dans le verifier :
348
+    // "[email protected]  " ou encore "Marie Toto <[email protected]>"
349
+
350
+    include_spip('inc/autoriser');
351
+    if (!autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?'])) {
352
+        $email_nouveau = _request('email');
353
+        set_request('email'); // vider la saisie car l'auteur n'a pas le droit de modifier cet email
354
+        // mais si c'est son propre profil on lui envoie un email à l'adresse qu'il a indique
355
+        // pour qu'il confirme qu'il possede bien cette adresse
356
+        // son clic sur l'url du message permettre de confirmer le changement
357
+        // et de revenir sur son profil
358
+        if (
359
+            $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur
360
+            and $email_nouveau !=
361
+                ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)))
362
+        ) {
363
+            $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
364
+            $texte = _T(
365
+                'form_auteur_mail_confirmation',
366
+                [
367
+                    'url' => generer_action_auteur(
368
+                        'confirmer_email',
369
+                        $email_nouveau,
370
+                        parametre_url($retour, 'email_modif', 'ok')
371
+                    )
372
+                ]
373
+            );
374
+            $envoyer_mail($email_nouveau, _T('form_auteur_confirmation'), $texte);
375
+            set_request('email_confirm', $email_nouveau);
376
+            if ($email_ancien) {
377
+                $envoyer_mail(
378
+                    $email_ancien,
379
+                    _T('form_auteur_confirmation'),
380
+                    _T('form_auteur_envoi_mail_confirmation', ['email' => $email_nouveau])
381
+                );
382
+            }
383
+            $retour = parametre_url($retour, 'email_confirm', $email_nouveau);
384
+        }
385
+    }
386
+
387
+    $res = formulaires_editer_objet_traiter('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden);
388
+
389
+    if (_request('reset_password') and !intval($id_auteur) and intval($res['id_auteur'])) {
390
+        $erreurs = [];
391
+        $erreurs = auteur_reset_password($res['id_auteur'], $erreurs);
392
+        if (isset($erreurs['message_ok'])) {
393
+            if (!isset($res['message_ok'])) { $res['message_ok'] = '';
394
+            }
395
+            $res['message_ok'] = trim($res['message_ok'] . ' ' . $erreurs['message_ok']);
396
+        }
397
+        if (isset($erreurs['message_erreur']) and $erreurs['message_erreur']) {
398
+            if (!isset($res['message_erreur'])) { $res['message_erreur'] = '';
399
+            }
400
+            $res['message_erreur'] = trim($res['message_erreur'] . ' ' . $erreurs['message_erreur']);
401
+        }
402
+    }
403
+
404
+    // Un lien auteur a prendre en compte ?
405
+    if ($associer_objet and $id_auteur = $res['id_auteur']) {
406
+        $objet = '';
407
+        if (intval($associer_objet)) {
408
+            $objet = 'article';
409
+            $id_objet = intval($associer_objet);
410
+        } elseif (preg_match(',^\w+\|[0-9]+$,', $associer_objet)) {
411
+            [$objet, $id_objet] = explode('|', $associer_objet);
412
+        }
413
+        if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) {
414
+            include_spip('action/editer_auteur');
415
+            auteur_associer($id_auteur, [$objet => $id_objet]);
416
+            if (isset($res['redirect'])) {
417
+                $res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_auteur, '&');
418
+            }
419
+        }
420
+    }
421
+
422
+    return $res;
423 423
 }
424 424
 
425 425
 
426 426
 function auteur_reset_password($id_auteur, $erreurs = []) {
427
-	$auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
428
-	$config = auteurs_edit_config($auteur);
429
-
430
-	if ($config['edit_pass']) {
431
-		if ($email = auteur_regenerer_identifiants($id_auteur)) {
432
-			$erreurs['message_ok'] = _T('message_nouveaux_identifiants_ok', ['email' => $email]);
433
-			$erreurs['message_erreur'] = '';
434
-		} elseif ($email === false) {
435
-			$erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec_envoi');
436
-		} else {
437
-			$erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec');
438
-		}
439
-	} else {
440
-		$erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec');
441
-	}
442
-
443
-	return $erreurs;
427
+    $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
428
+    $config = auteurs_edit_config($auteur);
429
+
430
+    if ($config['edit_pass']) {
431
+        if ($email = auteur_regenerer_identifiants($id_auteur)) {
432
+            $erreurs['message_ok'] = _T('message_nouveaux_identifiants_ok', ['email' => $email]);
433
+            $erreurs['message_erreur'] = '';
434
+        } elseif ($email === false) {
435
+            $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec_envoi');
436
+        } else {
437
+            $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec');
438
+        }
439
+    } else {
440
+        $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec');
441
+    }
442
+
443
+    return $erreurs;
444 444
 }
445 445
 
446 446
 /**
@@ -451,53 +451,53 @@  discard block
 block discarded – undo
451 451
  * @return string
452 452
  */
453 453
 function auteur_regenerer_identifiants($id_auteur, $notifier = true, $contexte = []) {
454
-	if ($id_auteur) {
455
-		$set = [];
456
-		include_spip('inc/access');
457
-		$set['pass'] = creer_pass_aleatoire(max(_PASS_LONGUEUR_MINI, 16));
458
-
459
-		include_spip('action/editer_auteur');
460
-		auteur_modifier($id_auteur, $set);
461
-
462
-		$row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
463
-		include_spip('inc/filtres');
464
-		if (
465
-			$notifier
466
-			and $row['email']
467
-			and email_valide($row['email'])
468
-			and trouver_fond($fond = 'modeles/mail_nouveaux_identifiants')
469
-		) {
470
-			// envoyer l'email avec login/pass
471
-			$c = [
472
-				'id_auteur' => $id_auteur,
473
-				'nom' => $row['nom'],
474
-				'mode' => $row['statut'],
475
-				'email' => $row['email'],
476
-				'pass' => $set['pass'],
477
-			];
478
-			// on merge avec les champs fournit en appel, qui sont passes au modele de notification donc
479
-			$contexte = array_merge($contexte, $c);
480
-			// si pas de langue explicitement demandee, prendre celle de l'auteur si on la connait, ou a defaut celle du site
481
-			// plutot que celle de l'admin qui vient de cliquer sur le bouton
482
-			if (!isset($contexte['lang']) or !$contexte['lang']) {
483
-				if (isset($row['lang']) and $row['lang']) {
484
-					$contexte['lang'] = $row['lang'];
485
-				}
486
-				else {
487
-					$contexte['lang'] = $GLOBALS['meta']['langue_site'];
488
-				}
489
-			}
490
-			lang_select($contexte['lang']);
491
-			$message = recuperer_fond($fond, $contexte);
492
-			include_spip('inc/notifications');
493
-			notifications_envoyer_mails($row['email'], $message);
494
-			lang_select();
495
-
496
-			return $row['email'];
497
-		}
498
-
499
-		return false;
500
-	}
501
-
502
-	return '';
454
+    if ($id_auteur) {
455
+        $set = [];
456
+        include_spip('inc/access');
457
+        $set['pass'] = creer_pass_aleatoire(max(_PASS_LONGUEUR_MINI, 16));
458
+
459
+        include_spip('action/editer_auteur');
460
+        auteur_modifier($id_auteur, $set);
461
+
462
+        $row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur));
463
+        include_spip('inc/filtres');
464
+        if (
465
+            $notifier
466
+            and $row['email']
467
+            and email_valide($row['email'])
468
+            and trouver_fond($fond = 'modeles/mail_nouveaux_identifiants')
469
+        ) {
470
+            // envoyer l'email avec login/pass
471
+            $c = [
472
+                'id_auteur' => $id_auteur,
473
+                'nom' => $row['nom'],
474
+                'mode' => $row['statut'],
475
+                'email' => $row['email'],
476
+                'pass' => $set['pass'],
477
+            ];
478
+            // on merge avec les champs fournit en appel, qui sont passes au modele de notification donc
479
+            $contexte = array_merge($contexte, $c);
480
+            // si pas de langue explicitement demandee, prendre celle de l'auteur si on la connait, ou a defaut celle du site
481
+            // plutot que celle de l'admin qui vient de cliquer sur le bouton
482
+            if (!isset($contexte['lang']) or !$contexte['lang']) {
483
+                if (isset($row['lang']) and $row['lang']) {
484
+                    $contexte['lang'] = $row['lang'];
485
+                }
486
+                else {
487
+                    $contexte['lang'] = $GLOBALS['meta']['langue_site'];
488
+                }
489
+            }
490
+            lang_select($contexte['lang']);
491
+            $message = recuperer_fond($fond, $contexte);
492
+            include_spip('inc/notifications');
493
+            notifications_envoyer_mails($row['email'], $message);
494
+            lang_select();
495
+
496
+            return $row['email'];
497
+        }
498
+
499
+        return false;
500
+    }
501
+
502
+    return '';
503 503
 }
Please login to merge, or discard this patch.
ecrire/inc/filtres_ecrire.php 2 patches
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -114,7 +114,7 @@  discard block
 block discarded – undo
114 114
 	if ($objet == 'rubrique') {
115 115
 		// si c'est une rubrique-secteur contenant des breves, demander la
116 116
 		// confirmation du deplacement
117
-		$contient_breves = sql_countsel('spip_breves', 'id_rubrique=' . intval($id_objet));
117
+		$contient_breves = sql_countsel('spip_breves', 'id_rubrique='.intval($id_objet));
118 118
 
119 119
 		if ($contient_breves > 0) {
120 120
 			$scb = ($contient_breves > 1 ? 's' : '');
@@ -127,7 +127,7 @@  discard block
 block discarded – undo
127 127
 			);
128 128
 			$confirm .= "\n<div class='confirmer_deplacement verdana2'>"
129 129
 				. "<div class='choix'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>"
130
-				. $scb .
130
+				. $scb.
131 131
 				"</label></div></div>\n";
132 132
 		} else {
133 133
 			$confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n";
@@ -136,11 +136,11 @@  discard block
 block discarded – undo
136 136
 	$form .= $confirm;
137 137
 	if ($actionable) {
138 138
 		if (strpos($form, '<select') !== false) {
139
-			$form .= "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>"
140
-				. '<input class="fondo submit btn" type="submit" value="' . _T('bouton_choisir') . '"/>'
139
+			$form .= "<div style='text-align: ".$GLOBALS['spip_lang_right'].";'>"
140
+				. '<input class="fondo submit btn" type="submit" value="'._T('bouton_choisir').'"/>'
141 141
 				. '</div>';
142 142
 		}
143
-		$form = "<input type='hidden' name='editer_$objet' value='oui' />\n" . $form;
143
+		$form = "<input type='hidden' name='editer_$objet' value='oui' />\n".$form;
144 144
 		if ($action = charger_fonction("editer_$objet", 'action', true)) {
145 145
 			$form = generer_action_auteur(
146 146
 				"editer_$objet",
@@ -166,7 +166,7 @@  discard block
 block discarded – undo
166 166
 
167 167
 	include_spip('inc/presentation');
168 168
 
169
-	return debut_cadre_couleur($logo, true, '', $titre) . $form . fin_cadre_couleur();
169
+	return debut_cadre_couleur($logo, true, '', $titre).$form.fin_cadre_couleur();
170 170
 }
171 171
 
172 172
 
@@ -242,7 +242,7 @@  discard block
 block discarded – undo
242 242
 	if ($statut == 'nouveau') {
243 243
 		if ($attente) {
244 244
 			$statut = $attente;
245
-			$plus = ' (' . _T('info_statut_auteur_a_confirmer') . ')';
245
+			$plus = ' ('._T('info_statut_auteur_a_confirmer').')';
246 246
 		} else {
247 247
 			return _T('info_statut_auteur_a_confirmer');
248 248
 		}
@@ -255,16 +255,16 @@  discard block
 block discarded – undo
255 255
 		'5poubelle' => _T('texte_statut_poubelle'), // bouh
256 256
 	];
257 257
 	if (isset($recom[$statut])) {
258
-		return $recom[$statut] . $plus;
258
+		return $recom[$statut].$plus;
259 259
 	}
260 260
 
261 261
 	// retrouver directement par le statut sinon
262 262
 	if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])) {
263 263
 		if (isset($recom[$t])) {
264
-			return $recom[$t] . $plus;
264
+			return $recom[$t].$plus;
265 265
 		}
266 266
 
267
-		return _T($t) . $plus;
267
+		return _T($t).$plus;
268 268
 	}
269 269
 
270 270
 	// si on a pas reussi a le traduire, retournons la chaine telle quelle
@@ -388,7 +388,7 @@  discard block
 block discarded – undo
388 388
 	if (!$id_rubrique and defined('_CHOIX_RUBRIQUE_PAR_DEFAUT') and _CHOIX_RUBRIQUE_PAR_DEFAUT) {
389 389
 		$in = !(is_countable($GLOBALS['connect_id_rubrique']) ? count($GLOBALS['connect_id_rubrique']) : 0)
390 390
 			? ''
391
-			: (' AND ' . sql_in('id_rubrique', $GLOBALS['connect_id_rubrique']));
391
+			: (' AND '.sql_in('id_rubrique', $GLOBALS['connect_id_rubrique']));
392 392
 
393 393
 		// on tente d'abord l'ecriture a la racine dans le cas des rubriques uniquement
394 394
 		if ($objet == 'rubrique') {
@@ -422,7 +422,7 @@  discard block
 block discarded – undo
422 422
 		return '';
423 423
 	}
424 424
 
425
-	return propre('[->' . $virtuel . ']');
425
+	return propre('[->'.$virtuel.']');
426 426
 }
427 427
 
428 428
 
@@ -449,7 +449,7 @@  discard block
 block discarded – undo
449 449
 	$clic = http_img_pack('rss-16.png', 'RSS', '', $title);
450 450
 
451 451
 	$url = generer_url_api_low_sec('transmettre', 'rss', $op, '', http_build_query($args), false, true);
452
-	return "<a style='float: " . $GLOBALS['spip_lang_right'] . ";' href='$url'>$clic</a>";
452
+	return "<a style='float: ".$GLOBALS['spip_lang_right'].";' href='$url'>$clic</a>";
453 453
 }
454 454
 
455 455
 
@@ -525,7 +525,7 @@  discard block
 block discarded – undo
525 525
 	);
526 526
 
527 527
 	if ($alertes = array_filter($alertes)) {
528
-		return "<div class='wrap-messages-alertes'><div class='messages-alertes'>" .
528
+		return "<div class='wrap-messages-alertes'><div class='messages-alertes'>".
529 529
 		join(' | ', $alertes)
530 530
 		. '</div></div>';
531 531
 	}
@@ -559,13 +559,13 @@  discard block
 block discarded – undo
559 559
  */
560 560
 function afficher_plus_info($lien, $titre = '+', $titre_lien = '') {
561 561
 	$titre = attribut_html($titre);
562
-	$icone = "\n<a href='$lien' title='$titre' class='plus_info'>" .
563
-		http_img_pack('information-16.png', $titre) . '</a>';
562
+	$icone = "\n<a href='$lien' title='$titre' class='plus_info'>".
563
+		http_img_pack('information-16.png', $titre).'</a>';
564 564
 
565 565
 	if (!$titre_lien) {
566 566
 		return $icone;
567 567
 	} else {
568
-		return $icone . "\n<a href='$lien'>$titre_lien</a>";
568
+		return $icone."\n<a href='$lien'>$titre_lien</a>";
569 569
 	}
570 570
 }
571 571
 
Please login to merge, or discard this patch.
Indentation   +360 added lines, -360 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Filtres
17 17
  */
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 include_spip('inc/filtres_boites');
@@ -41,25 +41,25 @@  discard block
 block discarded – undo
41 41
  */
42 42
 function parametres_css_prive() {
43 43
 
44
-	$args = [];
45
-	$args['v'] = $GLOBALS['spip_version_code'];
46
-	$args['p'] = substr(md5($GLOBALS['meta']['plugin']), 0, 4);
47
-	$args['themes'] = implode(',', lister_themes_prives());
48
-	$args['ltr'] = $GLOBALS['spip_lang_left'];
49
-	// un md5 des menus : si un menu change il faut maj la css
50
-	$args['md5b'] = (function_exists('md5_boutons_plugins') ? md5_boutons_plugins() : '');
44
+    $args = [];
45
+    $args['v'] = $GLOBALS['spip_version_code'];
46
+    $args['p'] = substr(md5($GLOBALS['meta']['plugin']), 0, 4);
47
+    $args['themes'] = implode(',', lister_themes_prives());
48
+    $args['ltr'] = $GLOBALS['spip_lang_left'];
49
+    // un md5 des menus : si un menu change il faut maj la css
50
+    $args['md5b'] = (function_exists('md5_boutons_plugins') ? md5_boutons_plugins() : '');
51 51
 
52
-	$c = $GLOBALS['visiteur_session']['prefs']['couleur'] ?? 2;
52
+    $c = $GLOBALS['visiteur_session']['prefs']['couleur'] ?? 2;
53 53
 
54
-	$couleurs = charger_fonction('couleurs', 'inc');
55
-	parse_str($couleurs($c), $c);
56
-	$args = array_merge($args, $c);
54
+    $couleurs = charger_fonction('couleurs', 'inc');
55
+    parse_str($couleurs($c), $c);
56
+    $args = array_merge($args, $c);
57 57
 
58
-	if (_request('var_mode') == 'recalcul' or (defined('_VAR_MODE') and _VAR_MODE == 'recalcul')) {
59
-		$args['var_mode'] = 'recalcul';
60
-	}
58
+    if (_request('var_mode') == 'recalcul' or (defined('_VAR_MODE') and _VAR_MODE == 'recalcul')) {
59
+        $args['var_mode'] = 'recalcul';
60
+    }
61 61
 
62
-	return http_build_query($args);
62
+    return http_build_query($args);
63 63
 }
64 64
 
65 65
 
@@ -82,91 +82,91 @@  discard block
 block discarded – undo
82 82
  * @return string
83 83
  */
84 84
 function chercher_rubrique(
85
-	$titre,
86
-	$id_objet,
87
-	$id_parent,
88
-	$objet,
89
-	$id_secteur,
90
-	$restreint,
91
-	$actionable = false,
92
-	$retour_sans_cadre = false
85
+    $titre,
86
+    $id_objet,
87
+    $id_parent,
88
+    $objet,
89
+    $id_secteur,
90
+    $restreint,
91
+    $actionable = false,
92
+    $retour_sans_cadre = false
93 93
 ) {
94 94
 
95
-	include_spip('inc/autoriser');
96
-	if (intval($id_objet) && !autoriser('modifier', $objet, $id_objet)) {
97
-		return '';
98
-	}
99
-	if (!sql_countsel('spip_rubriques')) {
100
-		return '';
101
-	}
102
-	$chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
103
-	$form = $chercher_rubrique($id_parent, $objet, $restreint, ($objet == 'rubrique') ? $id_objet : 0);
104
-
105
-	if ($id_parent == 0) {
106
-		$logo = 'racine-24.png';
107
-	} elseif ($id_secteur == $id_parent) {
108
-		$logo = 'secteur-24.png';
109
-	} else {
110
-		$logo = 'rubrique-24.png';
111
-	}
112
-
113
-	$confirm = '';
114
-	if ($objet == 'rubrique') {
115
-		// si c'est une rubrique-secteur contenant des breves, demander la
116
-		// confirmation du deplacement
117
-		$contient_breves = sql_countsel('spip_breves', 'id_rubrique=' . intval($id_objet));
118
-
119
-		if ($contient_breves > 0) {
120
-			$scb = ($contient_breves > 1 ? 's' : '');
121
-			$scb = _T(
122
-				'avis_deplacement_rubrique',
123
-				[
124
-					'contient_breves' => $contient_breves,
125
-					'scb' => $scb
126
-				]
127
-			);
128
-			$confirm .= "\n<div class='confirmer_deplacement verdana2'>"
129
-				. "<div class='choix'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>"
130
-				. $scb .
131
-				"</label></div></div>\n";
132
-		} else {
133
-			$confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n";
134
-		}
135
-	}
136
-	$form .= $confirm;
137
-	if ($actionable) {
138
-		if (strpos($form, '<select') !== false) {
139
-			$form .= "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>"
140
-				. '<input class="fondo submit btn" type="submit" value="' . _T('bouton_choisir') . '"/>'
141
-				. '</div>';
142
-		}
143
-		$form = "<input type='hidden' name='editer_$objet' value='oui' />\n" . $form;
144
-		if ($action = charger_fonction("editer_$objet", 'action', true)) {
145
-			$form = generer_action_auteur(
146
-				"editer_$objet",
147
-				$id_objet,
148
-				self(),
149
-				$form,
150
-				" method='post' class='submit_plongeur'"
151
-			);
152
-		} else {
153
-			$form = generer_action_auteur(
154
-				'editer_objet',
155
-				"$objet/$id_objet",
156
-				self(),
157
-				$form,
158
-				" method='post' class='submit_plongeur'"
159
-			);
160
-		}
161
-	}
162
-
163
-	if ($retour_sans_cadre) {
164
-		return $form;
165
-	}
166
-
167
-	include_spip('inc/presentation');
168
-
169
-	return debut_cadre_couleur($logo, true, '', $titre) . $form . fin_cadre_couleur();
95
+    include_spip('inc/autoriser');
96
+    if (intval($id_objet) && !autoriser('modifier', $objet, $id_objet)) {
97
+        return '';
98
+    }
99
+    if (!sql_countsel('spip_rubriques')) {
100
+        return '';
101
+    }
102
+    $chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
103
+    $form = $chercher_rubrique($id_parent, $objet, $restreint, ($objet == 'rubrique') ? $id_objet : 0);
104
+
105
+    if ($id_parent == 0) {
106
+        $logo = 'racine-24.png';
107
+    } elseif ($id_secteur == $id_parent) {
108
+        $logo = 'secteur-24.png';
109
+    } else {
110
+        $logo = 'rubrique-24.png';
111
+    }
112
+
113
+    $confirm = '';
114
+    if ($objet == 'rubrique') {
115
+        // si c'est une rubrique-secteur contenant des breves, demander la
116
+        // confirmation du deplacement
117
+        $contient_breves = sql_countsel('spip_breves', 'id_rubrique=' . intval($id_objet));
118
+
119
+        if ($contient_breves > 0) {
120
+            $scb = ($contient_breves > 1 ? 's' : '');
121
+            $scb = _T(
122
+                'avis_deplacement_rubrique',
123
+                [
124
+                    'contient_breves' => $contient_breves,
125
+                    'scb' => $scb
126
+                ]
127
+            );
128
+            $confirm .= "\n<div class='confirmer_deplacement verdana2'>"
129
+                . "<div class='choix'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>"
130
+                . $scb .
131
+                "</label></div></div>\n";
132
+        } else {
133
+            $confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n";
134
+        }
135
+    }
136
+    $form .= $confirm;
137
+    if ($actionable) {
138
+        if (strpos($form, '<select') !== false) {
139
+            $form .= "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>"
140
+                . '<input class="fondo submit btn" type="submit" value="' . _T('bouton_choisir') . '"/>'
141
+                . '</div>';
142
+        }
143
+        $form = "<input type='hidden' name='editer_$objet' value='oui' />\n" . $form;
144
+        if ($action = charger_fonction("editer_$objet", 'action', true)) {
145
+            $form = generer_action_auteur(
146
+                "editer_$objet",
147
+                $id_objet,
148
+                self(),
149
+                $form,
150
+                " method='post' class='submit_plongeur'"
151
+            );
152
+        } else {
153
+            $form = generer_action_auteur(
154
+                'editer_objet',
155
+                "$objet/$id_objet",
156
+                self(),
157
+                $form,
158
+                " method='post' class='submit_plongeur'"
159
+            );
160
+        }
161
+    }
162
+
163
+    if ($retour_sans_cadre) {
164
+        return $form;
165
+    }
166
+
167
+    include_spip('inc/presentation');
168
+
169
+    return debut_cadre_couleur($logo, true, '', $titre) . $form . fin_cadre_couleur();
170 170
 }
171 171
 
172 172
 
@@ -180,24 +180,24 @@  discard block
 block discarded – undo
180 180
  * @return bool
181 181
  */
182 182
 function avoir_visiteurs($past = false, $accepter = true) {
183
-	if ($GLOBALS['meta']['forums_publics'] == 'abo') {
184
-		return true;
185
-	}
186
-	if ($accepter and $GLOBALS['meta']['accepter_visiteurs'] <> 'non') {
187
-		return true;
188
-	}
189
-	if (sql_countsel('spip_articles', "accepter_forum='abo'")) {
190
-		return true;
191
-	}
192
-	if (!$past) {
193
-		return false;
194
-	}
195
-
196
-	return sql_countsel(
197
-		'spip_auteurs',
198
-		"statut NOT IN ('0minirezo','1comite', '5poubelle')
183
+    if ($GLOBALS['meta']['forums_publics'] == 'abo') {
184
+        return true;
185
+    }
186
+    if ($accepter and $GLOBALS['meta']['accepter_visiteurs'] <> 'non') {
187
+        return true;
188
+    }
189
+    if (sql_countsel('spip_articles', "accepter_forum='abo'")) {
190
+        return true;
191
+    }
192
+    if (!$past) {
193
+        return false;
194
+    }
195
+
196
+    return sql_countsel(
197
+        'spip_auteurs',
198
+        "statut NOT IN ('0minirezo','1comite', '5poubelle')
199 199
 	                    AND (statut<>'nouveau' OR prefs NOT IN ('0minirezo','1comite', '5poubelle'))"
200
-	);
200
+    );
201 201
 }
202 202
 
203 203
 /**
@@ -213,18 +213,18 @@  discard block
 block discarded – undo
213 213
  * @return array
214 214
  */
215 215
 function statuts_articles_visibles($statut_auteur) {
216
-	static $auth = [];
217
-	if (!isset($auth[$statut_auteur])) {
218
-		$auth[$statut_auteur] = [];
219
-		$statuts = array_column(sql_allfetsel('distinct statut', 'spip_articles'), 'statut');
220
-		foreach ($statuts as $s) {
221
-			if (autoriser('voir', 'article', 0, ['statut' => $statut_auteur], ['statut' => $s])) {
222
-				$auth[$statut_auteur][] = $s;
223
-			}
224
-		}
225
-	}
226
-
227
-	return $auth[$statut_auteur];
216
+    static $auth = [];
217
+    if (!isset($auth[$statut_auteur])) {
218
+        $auth[$statut_auteur] = [];
219
+        $statuts = array_column(sql_allfetsel('distinct statut', 'spip_articles'), 'statut');
220
+        foreach ($statuts as $s) {
221
+            if (autoriser('voir', 'article', 0, ['statut' => $statut_auteur], ['statut' => $s])) {
222
+                $auth[$statut_auteur][] = $s;
223
+            }
224
+        }
225
+    }
226
+
227
+    return $auth[$statut_auteur];
228 228
 }
229 229
 
230 230
 /**
@@ -238,38 +238,38 @@  discard block
 block discarded – undo
238 238
  * @return string
239 239
  */
240 240
 function traduire_statut_auteur($statut, $attente = '') {
241
-	$plus = '';
242
-	if ($statut == 'nouveau') {
243
-		if ($attente) {
244
-			$statut = $attente;
245
-			$plus = ' (' . _T('info_statut_auteur_a_confirmer') . ')';
246
-		} else {
247
-			return _T('info_statut_auteur_a_confirmer');
248
-		}
249
-	}
250
-
251
-	$recom = [
252
-		'info_administrateurs' => _T('item_administrateur_2'),
253
-		'info_redacteurs' => _T('intem_redacteur'),
254
-		'info_visiteurs' => _T('item_visiteur'),
255
-		'5poubelle' => _T('texte_statut_poubelle'), // bouh
256
-	];
257
-	if (isset($recom[$statut])) {
258
-		return $recom[$statut] . $plus;
259
-	}
260
-
261
-	// retrouver directement par le statut sinon
262
-	if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])) {
263
-		if (isset($recom[$t])) {
264
-			return $recom[$t] . $plus;
265
-		}
266
-
267
-		return _T($t) . $plus;
268
-	}
269
-
270
-	// si on a pas reussi a le traduire, retournons la chaine telle quelle
271
-	// c'est toujours plus informatif que rien du tout
272
-	return $statut;
241
+    $plus = '';
242
+    if ($statut == 'nouveau') {
243
+        if ($attente) {
244
+            $statut = $attente;
245
+            $plus = ' (' . _T('info_statut_auteur_a_confirmer') . ')';
246
+        } else {
247
+            return _T('info_statut_auteur_a_confirmer');
248
+        }
249
+    }
250
+
251
+    $recom = [
252
+        'info_administrateurs' => _T('item_administrateur_2'),
253
+        'info_redacteurs' => _T('intem_redacteur'),
254
+        'info_visiteurs' => _T('item_visiteur'),
255
+        '5poubelle' => _T('texte_statut_poubelle'), // bouh
256
+    ];
257
+    if (isset($recom[$statut])) {
258
+        return $recom[$statut] . $plus;
259
+    }
260
+
261
+    // retrouver directement par le statut sinon
262
+    if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])) {
263
+        if (isset($recom[$t])) {
264
+            return $recom[$t] . $plus;
265
+        }
266
+
267
+        return _T($t) . $plus;
268
+    }
269
+
270
+    // si on a pas reussi a le traduire, retournons la chaine telle quelle
271
+    // c'est toujours plus informatif que rien du tout
272
+    return $statut;
273 273
 }
274 274
 
275 275
 /**
@@ -280,29 +280,29 @@  discard block
 block discarded – undo
280 280
  * @return string
281 281
  */
282 282
 function afficher_qui_edite($id_objet, $objet): string {
283
-	static $qui = [];
284
-	if (isset($qui[$objet][$id_objet])) {
285
-		return $qui[$objet][$id_objet];
286
-	}
287
-
288
-	include_spip('inc/config');
289
-	if (lire_config('articles_modif', 'non') === 'non') {
290
-		return $qui[$objet][$id_objet] = '';
291
-	}
292
-
293
-	include_spip('inc/drapeau_edition');
294
-	$modif = mention_qui_edite($id_objet, $objet);
295
-	if (!$modif) {
296
-		return $qui[$objet][$id_objet] = '';
297
-	}
298
-
299
-	include_spip('base/objets');
300
-	$infos = lister_tables_objets_sql(table_objet_sql($objet));
301
-	if (isset($infos['texte_signale_edition'])) {
302
-		return $qui[$objet][$id_objet] = _T($infos['texte_signale_edition'], $modif);
303
-	}
304
-
305
-	return $qui[$objet][$id_objet] = _T('info_qui_edite', $modif);
283
+    static $qui = [];
284
+    if (isset($qui[$objet][$id_objet])) {
285
+        return $qui[$objet][$id_objet];
286
+    }
287
+
288
+    include_spip('inc/config');
289
+    if (lire_config('articles_modif', 'non') === 'non') {
290
+        return $qui[$objet][$id_objet] = '';
291
+    }
292
+
293
+    include_spip('inc/drapeau_edition');
294
+    $modif = mention_qui_edite($id_objet, $objet);
295
+    if (!$modif) {
296
+        return $qui[$objet][$id_objet] = '';
297
+    }
298
+
299
+    include_spip('base/objets');
300
+    $infos = lister_tables_objets_sql(table_objet_sql($objet));
301
+    if (isset($infos['texte_signale_edition'])) {
302
+        return $qui[$objet][$id_objet] = _T($infos['texte_signale_edition'], $modif);
303
+    }
304
+
305
+    return $qui[$objet][$id_objet] = _T('info_qui_edite', $modif);
306 306
 }
307 307
 
308 308
 /**
@@ -320,53 +320,53 @@  discard block
 block discarded – undo
320 320
  * @return array
321 321
  */
322 322
 function auteurs_lister_statuts($quoi = 'tous', $en_base = true): array {
323
-	if (!defined('AUTEURS_MIN_REDAC')) {
324
-		define('AUTEURS_MIN_REDAC', '0minirezo,1comite,5poubelle');
325
-	}
326
-
327
-	switch ($quoi) {
328
-		case 'redacteurs':
329
-			$statut = AUTEURS_MIN_REDAC;
330
-			$statut = explode(',', $statut);
331
-			if ($en_base) {
332
-				$check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut');
333
-				$retire = array_diff($statut, $check);
334
-				$statut = array_diff($statut, $retire);
335
-			}
336
-
337
-			return array_unique($statut);
338
-
339
-		case 'visiteurs':
340
-			$statut = [];
341
-			$exclus = AUTEURS_MIN_REDAC;
342
-			$exclus = explode(',', $exclus);
343
-			if (!$en_base) {
344
-				// prendre aussi les statuts de la table des status qui ne sont pas dans le define
345
-				$statut = array_diff(array_values($GLOBALS['liste_des_statuts']), $exclus);
346
-			}
347
-			$s_complement = array_column(
348
-				sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $exclus, 'NOT')),
349
-				'statut'
350
-			);
351
-
352
-			return array_unique(array_merge($statut, $s_complement));
353
-
354
-		default:
355
-		case 'tous':
356
-			$statut = array_values($GLOBALS['liste_des_statuts']);
357
-			$s_complement = array_column(
358
-				sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut, 'NOT')),
359
-				'statut'
360
-			);
361
-			$statut = array_merge($statut, $s_complement);
362
-			if ($en_base) {
363
-				$check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut');
364
-				$retire = array_diff($statut, $check);
365
-				$statut = array_diff($statut, $retire);
366
-			}
367
-
368
-			return array_unique($statut);
369
-	}
323
+    if (!defined('AUTEURS_MIN_REDAC')) {
324
+        define('AUTEURS_MIN_REDAC', '0minirezo,1comite,5poubelle');
325
+    }
326
+
327
+    switch ($quoi) {
328
+        case 'redacteurs':
329
+            $statut = AUTEURS_MIN_REDAC;
330
+            $statut = explode(',', $statut);
331
+            if ($en_base) {
332
+                $check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut');
333
+                $retire = array_diff($statut, $check);
334
+                $statut = array_diff($statut, $retire);
335
+            }
336
+
337
+            return array_unique($statut);
338
+
339
+        case 'visiteurs':
340
+            $statut = [];
341
+            $exclus = AUTEURS_MIN_REDAC;
342
+            $exclus = explode(',', $exclus);
343
+            if (!$en_base) {
344
+                // prendre aussi les statuts de la table des status qui ne sont pas dans le define
345
+                $statut = array_diff(array_values($GLOBALS['liste_des_statuts']), $exclus);
346
+            }
347
+            $s_complement = array_column(
348
+                sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $exclus, 'NOT')),
349
+                'statut'
350
+            );
351
+
352
+            return array_unique(array_merge($statut, $s_complement));
353
+
354
+        default:
355
+        case 'tous':
356
+            $statut = array_values($GLOBALS['liste_des_statuts']);
357
+            $s_complement = array_column(
358
+                sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut, 'NOT')),
359
+                'statut'
360
+            );
361
+            $statut = array_merge($statut, $s_complement);
362
+            if ($en_base) {
363
+                $check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut');
364
+                $retire = array_diff($statut, $check);
365
+                $statut = array_diff($statut, $retire);
366
+            }
367
+
368
+            return array_unique($statut);
369
+    }
370 370
 }
371 371
 
372 372
 /**
@@ -382,28 +382,28 @@  discard block
 block discarded – undo
382 382
  */
383 383
 function trouver_rubrique_creer_objet($id_rubrique, $objet) {
384 384
 
385
-	if (!$id_rubrique and defined('_CHOIX_RUBRIQUE_PAR_DEFAUT') and _CHOIX_RUBRIQUE_PAR_DEFAUT) {
386
-		$in = !(is_countable($GLOBALS['connect_id_rubrique']) ? count($GLOBALS['connect_id_rubrique']) : 0)
387
-			? ''
388
-			: (' AND ' . sql_in('id_rubrique', $GLOBALS['connect_id_rubrique']));
389
-
390
-		// on tente d'abord l'ecriture a la racine dans le cas des rubriques uniquement
391
-		if ($objet == 'rubrique') {
392
-			$id_rubrique = 0;
393
-		} else {
394
-			$id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', "id_parent=0$in", '', 'id_rubrique DESC', 1);
395
-		}
396
-
397
-		if (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique)) {
398
-			// manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
399
-			$res = sql_select('id_rubrique', 'spip_rubriques', 'id_parent=0');
400
-			while (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique) && $row_rub = sql_fetch($res)) {
401
-				$id_rubrique = $row_rub['id_rubrique'];
402
-			}
403
-		}
404
-	}
405
-
406
-	return $id_rubrique;
385
+    if (!$id_rubrique and defined('_CHOIX_RUBRIQUE_PAR_DEFAUT') and _CHOIX_RUBRIQUE_PAR_DEFAUT) {
386
+        $in = !(is_countable($GLOBALS['connect_id_rubrique']) ? count($GLOBALS['connect_id_rubrique']) : 0)
387
+            ? ''
388
+            : (' AND ' . sql_in('id_rubrique', $GLOBALS['connect_id_rubrique']));
389
+
390
+        // on tente d'abord l'ecriture a la racine dans le cas des rubriques uniquement
391
+        if ($objet == 'rubrique') {
392
+            $id_rubrique = 0;
393
+        } else {
394
+            $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', "id_parent=0$in", '', 'id_rubrique DESC', 1);
395
+        }
396
+
397
+        if (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique)) {
398
+            // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
399
+            $res = sql_select('id_rubrique', 'spip_rubriques', 'id_parent=0');
400
+            while (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique) && $row_rub = sql_fetch($res)) {
401
+                $id_rubrique = $row_rub['id_rubrique'];
402
+            }
403
+        }
404
+    }
405
+
406
+    return $id_rubrique;
407 407
 }
408 408
 
409 409
 /**
@@ -414,12 +414,12 @@  discard block
 block discarded – undo
414 414
  * @return string
415 415
  */
416 416
 function lien_article_virtuel($virtuel) {
417
-	include_spip('inc/lien');
418
-	if (!$virtuel = virtuel_redirige($virtuel)) {
419
-		return '';
420
-	}
417
+    include_spip('inc/lien');
418
+    if (!$virtuel = virtuel_redirige($virtuel)) {
419
+        return '';
420
+    }
421 421
 
422
-	return propre('[->' . $virtuel . ']');
422
+    return propre('[->' . $virtuel . ']');
423 423
 }
424 424
 
425 425
 
@@ -442,11 +442,11 @@  discard block
 block discarded – undo
442 442
  * @filtre
443 443
  */
444 444
 function bouton_spip_rss($op, $args = [], $lang = '', $title = 'RSS') {
445
-	include_spip('inc/acces');
446
-	$clic = http_img_pack('rss-16.png', 'RSS', '', $title);
445
+    include_spip('inc/acces');
446
+    $clic = http_img_pack('rss-16.png', 'RSS', '', $title);
447 447
 
448
-	$url = generer_url_api_low_sec('transmettre', 'rss', $op, '', http_build_query($args), false, true);
449
-	return "<a style='float: " . $GLOBALS['spip_lang_right'] . ";' href='$url'>$clic</a>";
448
+    $url = generer_url_api_low_sec('transmettre', 'rss', $op, '', http_build_query($args), false, true);
449
+    return "<a style='float: " . $GLOBALS['spip_lang_right'] . ";' href='$url'>$clic</a>";
450 450
 }
451 451
 
452 452
 
@@ -458,76 +458,76 @@  discard block
 block discarded – undo
458 458
  */
459 459
 function alertes_auteur($id_auteur): string {
460 460
 
461
-	$alertes = [];
462
-
463
-	if (
464
-		isset($GLOBALS['meta']['message_crash_tables'])
465
-		and autoriser('detruire', null, null, $id_auteur)
466
-	) {
467
-		include_spip('genie/maintenance');
468
-		if ($msg = message_crash_tables()) {
469
-			$alertes[] = $msg;
470
-		}
471
-	}
472
-
473
-	if (
474
-		isset($GLOBALS['meta']['message_crash_plugins'])
475
-		and $GLOBALS['meta']['message_crash_plugins']
476
-		and autoriser('configurer', '_plugins', null, $id_auteur)
477
-		and is_array($msg = unserialize($GLOBALS['meta']['message_crash_plugins']))
478
-	) {
479
-		$msg = implode(', ', array_map('joli_repertoire', array_keys($msg)));
480
-		$alertes[] = _T('plugins_erreur', ['plugins' => $msg]);
481
-	}
482
-
483
-	$a = $GLOBALS['meta']['message_alertes_auteurs'] ?? '';
484
-	if (
485
-		$a
486
-		and is_array($a = unserialize($a))
487
-		and count($a)
488
-	) {
489
-		$update = false;
490
-		if (isset($a[$GLOBALS['visiteur_session']['statut']])) {
491
-			$alertes = array_merge($alertes, $a[$GLOBALS['visiteur_session']['statut']]);
492
-			unset($a[$GLOBALS['visiteur_session']['statut']]);
493
-			$update = true;
494
-		}
495
-		if (isset($a[''])) {
496
-			$alertes = array_merge($alertes, $a['']);
497
-			unset($a['']);
498
-			$update = true;
499
-		}
500
-		if ($update) {
501
-			ecrire_meta('message_alertes_auteurs', serialize($a));
502
-		}
503
-	}
504
-
505
-	if (
506
-		isset($GLOBALS['meta']['plugin_erreur_activation'])
507
-		and autoriser('configurer', '_plugins', null, $id_auteur)
508
-	) {
509
-		include_spip('inc/plugin');
510
-		$alertes[] = plugin_donne_erreurs();
511
-	}
512
-
513
-	$alertes = pipeline(
514
-		'alertes_auteur',
515
-		[
516
-			'args' => [
517
-				'id_auteur' => $id_auteur,
518
-				'exec' => _request('exec'),
519
-			],
520
-			'data' => $alertes
521
-		]
522
-	);
523
-
524
-	if ($alertes = array_filter($alertes)) {
525
-		return "<div class='wrap-messages-alertes'><div class='messages-alertes'>" .
526
-		join(' | ', $alertes)
527
-		. '</div></div>';
528
-	}
529
-
530
-	return '';
461
+    $alertes = [];
462
+
463
+    if (
464
+        isset($GLOBALS['meta']['message_crash_tables'])
465
+        and autoriser('detruire', null, null, $id_auteur)
466
+    ) {
467
+        include_spip('genie/maintenance');
468
+        if ($msg = message_crash_tables()) {
469
+            $alertes[] = $msg;
470
+        }
471
+    }
472
+
473
+    if (
474
+        isset($GLOBALS['meta']['message_crash_plugins'])
475
+        and $GLOBALS['meta']['message_crash_plugins']
476
+        and autoriser('configurer', '_plugins', null, $id_auteur)
477
+        and is_array($msg = unserialize($GLOBALS['meta']['message_crash_plugins']))
478
+    ) {
479
+        $msg = implode(', ', array_map('joli_repertoire', array_keys($msg)));
480
+        $alertes[] = _T('plugins_erreur', ['plugins' => $msg]);
481
+    }
482
+
483
+    $a = $GLOBALS['meta']['message_alertes_auteurs'] ?? '';
484
+    if (
485
+        $a
486
+        and is_array($a = unserialize($a))
487
+        and count($a)
488
+    ) {
489
+        $update = false;
490
+        if (isset($a[$GLOBALS['visiteur_session']['statut']])) {
491
+            $alertes = array_merge($alertes, $a[$GLOBALS['visiteur_session']['statut']]);
492
+            unset($a[$GLOBALS['visiteur_session']['statut']]);
493
+            $update = true;
494
+        }
495
+        if (isset($a[''])) {
496
+            $alertes = array_merge($alertes, $a['']);
497
+            unset($a['']);
498
+            $update = true;
499
+        }
500
+        if ($update) {
501
+            ecrire_meta('message_alertes_auteurs', serialize($a));
502
+        }
503
+    }
504
+
505
+    if (
506
+        isset($GLOBALS['meta']['plugin_erreur_activation'])
507
+        and autoriser('configurer', '_plugins', null, $id_auteur)
508
+    ) {
509
+        include_spip('inc/plugin');
510
+        $alertes[] = plugin_donne_erreurs();
511
+    }
512
+
513
+    $alertes = pipeline(
514
+        'alertes_auteur',
515
+        [
516
+            'args' => [
517
+                'id_auteur' => $id_auteur,
518
+                'exec' => _request('exec'),
519
+            ],
520
+            'data' => $alertes
521
+        ]
522
+    );
523
+
524
+    if ($alertes = array_filter($alertes)) {
525
+        return "<div class='wrap-messages-alertes'><div class='messages-alertes'>" .
526
+        join(' | ', $alertes)
527
+        . '</div></div>';
528
+    }
529
+
530
+    return '';
531 531
 }
532 532
 
533 533
 /**
@@ -537,9 +537,9 @@  discard block
 block discarded – undo
537 537
  * @return string
538 538
  */
539 539
 function filtre_afficher_enfant_rub_dist($id_rubrique) {
540
-	include_spip('inc/presenter_enfants');
540
+    include_spip('inc/presenter_enfants');
541 541
 
542
-	return afficher_enfant_rub(intval($id_rubrique));
542
+    return afficher_enfant_rub(intval($id_rubrique));
543 543
 }
544 544
 
545 545
 /**
@@ -557,15 +557,15 @@  discard block
 block discarded – undo
557 557
  * @return string
558 558
  */
559 559
 function afficher_plus_info($lien, $titre = '+', $titre_lien = '') {
560
-	$titre = attribut_html($titre);
561
-	$icone = "\n<a href='$lien' title='$titre' class='plus_info'>" .
562
-		http_img_pack('information-16.png', $titre) . '</a>';
563
-
564
-	if (!$titre_lien) {
565
-		return $icone;
566
-	} else {
567
-		return $icone . "\n<a href='$lien'>$titre_lien</a>";
568
-	}
560
+    $titre = attribut_html($titre);
561
+    $icone = "\n<a href='$lien' title='$titre' class='plus_info'>" .
562
+        http_img_pack('information-16.png', $titre) . '</a>';
563
+
564
+    if (!$titre_lien) {
565
+        return $icone;
566
+    } else {
567
+        return $icone . "\n<a href='$lien'>$titre_lien</a>";
568
+    }
569 569
 }
570 570
 
571 571
 
@@ -584,22 +584,22 @@  discard block
 block discarded – undo
584 584
  * @return array
585 585
  */
586 586
 function lister_objets_lies($objet_source, $objet, $id_objet, $objet_lien) {
587
-	$res = lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien);
588
-	if (!(is_countable($res) ? count($res) : 0)) {
589
-		return [];
590
-	}
591
-	$r = reset($res);
592
-	if (isset($r['rang_lien'])) {
593
-		$l = array_column($res, 'rang_lien', $objet_source);
594
-		asort($l);
595
-		$l = array_keys($l);
596
-	} else {
597
-		// Si les liens qu'on cherche sont ceux de la table de lien, l'info est dans la clé de l'objet
598
-		// Sinon c'est dans "id_objet"
599
-		$l = array_column(
600
-			$res,
601
-			$objet_source == $objet_lien ? id_table_objet($objet_source) : 'id_objet'
602
-		);
603
-	}
604
-	return $l;
587
+    $res = lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien);
588
+    if (!(is_countable($res) ? count($res) : 0)) {
589
+        return [];
590
+    }
591
+    $r = reset($res);
592
+    if (isset($r['rang_lien'])) {
593
+        $l = array_column($res, 'rang_lien', $objet_source);
594
+        asort($l);
595
+        $l = array_keys($l);
596
+    } else {
597
+        // Si les liens qu'on cherche sont ceux de la table de lien, l'info est dans la clé de l'objet
598
+        // Sinon c'est dans "id_objet"
599
+        $l = array_column(
600
+            $res,
601
+            $objet_source == $objet_lien ? id_table_objet($objet_source) : 'id_objet'
602
+        );
603
+    }
604
+    return $l;
605 605
 }
Please login to merge, or discard this patch.
prive/transmettre/rss/a_suivre_fonctions.php 2 patches
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -1,22 +1,22 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if (!defined('_ECRIRE_INC_VERSION')) {
4
-	return;
4
+    return;
5 5
 }
6 6
 
7 7
 function trier_rss($texte) {
8
-	if (preg_match_all(',<item.*</item>\s*?,Uims', $texte, $matches, PREG_SET_ORDER)) {
9
-		$placeholder = '<!--REINSERT-->';
10
-		$items = [];
11
-		foreach ($matches as $match) {
12
-			if (preg_match(',<dc:date>(.*)</dc:date>,Uims', $match[0], $r)) {
13
-				$items[strtotime($r[1])] = trim($match[0]);
14
-				$texte = str_replace($match[0], unique($placeholder), $texte);
15
-			}
16
-		}
17
-		krsort($items);
18
-		$texte = str_replace($placeholder, implode("\n\t", $items) . "\n", $texte);
19
-	}
8
+    if (preg_match_all(',<item.*</item>\s*?,Uims', $texte, $matches, PREG_SET_ORDER)) {
9
+        $placeholder = '<!--REINSERT-->';
10
+        $items = [];
11
+        foreach ($matches as $match) {
12
+            if (preg_match(',<dc:date>(.*)</dc:date>,Uims', $match[0], $r)) {
13
+                $items[strtotime($r[1])] = trim($match[0]);
14
+                $texte = str_replace($match[0], unique($placeholder), $texte);
15
+            }
16
+        }
17
+        krsort($items);
18
+        $texte = str_replace($placeholder, implode("\n\t", $items) . "\n", $texte);
19
+    }
20 20
 
21
-	return $texte;
21
+    return $texte;
22 22
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -15,7 +15,7 @@
 block discarded – undo
15 15
 			}
16 16
 		}
17 17
 		krsort($items);
18
-		$texte = str_replace($placeholder, implode("\n\t", $items) . "\n", $texte);
18
+		$texte = str_replace($placeholder, implode("\n\t", $items)."\n", $texte);
19 19
 	}
20 20
 
21 21
 	return $texte;
Please login to merge, or discard this patch.
ecrire/action/instituer_langue_objet.php 2 patches
Indentation   +37 added lines, -37 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
 /**
@@ -31,43 +31,43 @@  discard block
 block discarded – undo
31 31
  * @return string
32 32
  */
33 33
 function action_instituer_langue_objet_dist($objet, $id, $id_rubrique, $changer_lang, $serveur = '') {
34
-	if ($changer_lang) {
35
-		$table_objet_sql = table_objet_sql($objet);
36
-		$id_table_objet = id_table_objet($objet);
37
-		$trouver_table = charger_fonction('trouver_table', 'base');
38
-		$desc = $trouver_table($table_objet_sql, $serveur);
34
+    if ($changer_lang) {
35
+        $table_objet_sql = table_objet_sql($objet);
36
+        $id_table_objet = id_table_objet($objet);
37
+        $trouver_table = charger_fonction('trouver_table', 'base');
38
+        $desc = $trouver_table($table_objet_sql, $serveur);
39 39
 
40
-		$set = [];
41
-		if (isset($desc['field']['langue_choisie'])) {
42
-			$set['langue_choisie'] = 'oui';
43
-		}
40
+        $set = [];
41
+        if (isset($desc['field']['langue_choisie'])) {
42
+            $set['langue_choisie'] = 'oui';
43
+        }
44 44
 
45
-		if ($changer_lang != 'herit') {
46
-			$set['lang'] = $changer_lang;
47
-			sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur);
48
-			include_spip('inc/rubriques'); // pour calculer_langues_rubriques et calculer_langues_utilisees
49
-			if ($table_objet_sql == 'spip_rubriques') {
50
-				calculer_langues_rubriques();
51
-			}
52
-			$langues = calculer_langues_utilisees($serveur);
53
-			ecrire_meta('langues_utilisees', $langues);
54
-		} else {
55
-			$langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
56
-			if (!$langue_parent) {
57
-				$langue_parent = $GLOBALS['meta']['langue_site'];
58
-			}
59
-			$changer_lang = $langue_parent;
60
-			$set['lang'] = $changer_lang;
61
-			if (isset($set['langue_choisie'])) {
62
-				$set['langue_choisie'] = 'non';
63
-			}
64
-			sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur);
65
-			if ($table_objet_sql == 'spip_rubriques') {
66
-				include_spip('inc/rubriques');
67
-				calculer_langues_rubriques();
68
-			}
69
-		}
70
-	}
45
+        if ($changer_lang != 'herit') {
46
+            $set['lang'] = $changer_lang;
47
+            sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur);
48
+            include_spip('inc/rubriques'); // pour calculer_langues_rubriques et calculer_langues_utilisees
49
+            if ($table_objet_sql == 'spip_rubriques') {
50
+                calculer_langues_rubriques();
51
+            }
52
+            $langues = calculer_langues_utilisees($serveur);
53
+            ecrire_meta('langues_utilisees', $langues);
54
+        } else {
55
+            $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
56
+            if (!$langue_parent) {
57
+                $langue_parent = $GLOBALS['meta']['langue_site'];
58
+            }
59
+            $changer_lang = $langue_parent;
60
+            $set['lang'] = $changer_lang;
61
+            if (isset($set['langue_choisie'])) {
62
+                $set['langue_choisie'] = 'non';
63
+            }
64
+            sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur);
65
+            if ($table_objet_sql == 'spip_rubriques') {
66
+                include_spip('inc/rubriques');
67
+                calculer_langues_rubriques();
68
+            }
69
+        }
70
+    }
71 71
 
72
-	return $changer_lang;
72
+    return $changer_lang;
73 73
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -44,7 +44,7 @@  discard block
 block discarded – undo
44 44
 
45 45
 		if ($changer_lang != 'herit') {
46 46
 			$set['lang'] = $changer_lang;
47
-			sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur);
47
+			sql_updateq($table_objet_sql, $set, "$id_table_objet=".intval($id), [], $serveur);
48 48
 			include_spip('inc/rubriques'); // pour calculer_langues_rubriques et calculer_langues_utilisees
49 49
 			if ($table_objet_sql == 'spip_rubriques') {
50 50
 				calculer_langues_rubriques();
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
 			$langues = calculer_langues_utilisees($serveur);
53 53
 			ecrire_meta('langues_utilisees', $langues);
54 54
 		} else {
55
-			$langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
55
+			$langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
56 56
 			if (!$langue_parent) {
57 57
 				$langue_parent = $GLOBALS['meta']['langue_site'];
58 58
 			}
@@ -61,7 +61,7 @@  discard block
 block discarded – undo
61 61
 			if (isset($set['langue_choisie'])) {
62 62
 				$set['langue_choisie'] = 'non';
63 63
 			}
64
-			sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur);
64
+			sql_updateq($table_objet_sql, $set, "$id_table_objet=".intval($id), [], $serveur);
65 65
 			if ($table_objet_sql == 'spip_rubriques') {
66 66
 				include_spip('inc/rubriques');
67 67
 				calculer_langues_rubriques();
Please login to merge, or discard this patch.
ecrire/base/upgrade.php 2 patches
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -56,7 +56,7 @@  discard block
 block discarded – undo
56 56
 	if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) {
57 57
 		if (!is_numeric(_request('reinstall'))) {
58 58
 			include_spip('base/create');
59
-			spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE);
59
+			spip_log('recree les tables eventuellement disparues', 'maj.'._LOG_INFO_IMPORTANTE);
60 60
 			creer_base();
61 61
 		}
62 62
 
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
 			exit;
70 70
 		}
71 71
 	}
72
-	spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE);
72
+	spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.'._LOG_INFO_IMPORTANTE);
73 73
 
74 74
 	// supprimer quelques fichiers temporaires qui peuvent se retrouver invalides
75 75
 	@spip_unlink(_CACHE_RUBRIQUES);
@@ -78,7 +78,7 @@  discard block
 block discarded – undo
78 78
 	@spip_unlink(_CACHE_PLUGINS_OPT);
79 79
 	@spip_unlink(_CACHE_PLUGINS_FCT);
80 80
 	@spip_unlink(_CACHE_CHEMIN);
81
-	@spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz');
81
+	@spip_unlink(_DIR_TMP.'plugin_xml_cache.gz');
82 82
 
83 83
 	include_spip('inc/auth');
84 84
 	auth_synchroniser_distant();
@@ -117,8 +117,8 @@  discard block
 block discarded – undo
117 117
 	$version_installee = $GLOBALS['meta']['version_installee'] ?? null;
118 118
 
119 119
 	spip_log(
120
-		"Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'],
121
-		'maj.' . _LOG_INFO_IMPORTANTE
120
+		"Version anterieure: $version_installee. Courante: ".$GLOBALS['spip_version_base'],
121
+		'maj.'._LOG_INFO_IMPORTANTE
122 122
 	);
123 123
 	if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) {
124 124
 		sql_replace(
@@ -151,9 +151,9 @@  discard block
 block discarded – undo
151 151
 	$res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page);
152 152
 	if ($res) {
153 153
 		if (!is_array($res)) {
154
-			spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
154
+			spip_log("Pb d'acces SQL a la mise a jour", 'maj.'._LOG_ERREUR);
155 155
 		} else {
156
-			echo _T('avis_operation_echec') . ' ' . join(' ', $res);
156
+			echo _T('avis_operation_echec').' '.join(' ', $res);
157 157
 			echo install_fin_html();
158 158
 		}
159 159
 	}
@@ -241,9 +241,9 @@  discard block
 block discarded – undo
241 241
 		$res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect);
242 242
 		if ($res) {
243 243
 			if (!is_array($res)) {
244
-				spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
244
+				spip_log("Pb d'acces SQL a la mise a jour", 'maj.'._LOG_ERREUR);
245 245
 			} else {
246
-				echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>';
246
+				echo '<p>'._T('avis_operation_echec').' '.join(' ', $res).'</p>';
247 247
 			}
248 248
 		}
249 249
 	}
@@ -299,7 +299,7 @@  discard block
 block discarded – undo
299 299
 	echo(install_debut_html($titre));
300 300
 	// script de rechargement auto sur timeout
301 301
 	$redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
302
-	echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')');
302
+	echo http_script("window.setTimeout('location.href=\"".$redirect."\";',".($timeout * 1000).')');
303 303
 	echo "<div style='text-align: left'>\n";
304 304
 	if (ob_get_level()) {
305 305
 		ob_flush();
@@ -388,7 +388,7 @@  discard block
 block discarded – undo
388 388
 				return [$v, $etape];
389 389
 			}
390 390
 			$n = time() - $time;
391
-			spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE);
391
+			spip_log("$table $meta: $v en $n secondes", 'maj.'._LOG_INFO_IMPORTANTE);
392 392
 			if ($meta) {
393 393
 				ecrire_meta($meta, $installee = $v, 'oui', $table);
394 394
 			}
@@ -404,7 +404,7 @@  discard block
 block discarded – undo
404 404
 	if ($meta) {
405 405
 		ecrire_meta($meta, $cible, 'oui', $table);
406 406
 	}
407
-	spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE);
407
+	spip_log("MAJ terminee. $meta: $installee", 'maj.'._LOG_INFO_IMPORTANTE);
408 408
 
409 409
 	return [];
410 410
 }
@@ -429,7 +429,7 @@  discard block
 block discarded – undo
429 429
  * @return int
430 430
  */
431 431
 function serie_alter($serie, $q = [], $meta = '', $table = 'meta', $redirect = '') {
432
-	$meta2 = $meta . '_maj_' . $serie;
432
+	$meta2 = $meta.'_maj_'.$serie;
433 433
 	$etape = 0;
434 434
 	if (isset($GLOBALS[$table][$meta2])) {
435 435
 		$etape = intval($GLOBALS[$table][$meta2]);
@@ -442,7 +442,7 @@  discard block
 block discarded – undo
442 442
 				and function_exists($f = array_shift($r))
443 443
 			) {
444 444
 				// note: $r (arguments de la fonction $f) peut avoir des données tabulaires
445
-				spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE);
445
+				spip_log("$msg: $f ".@join(',', $r), 'maj.'._LOG_INFO_IMPORTANTE);
446 446
 				// pour les fonctions atomiques sql_xx
447 447
 				// on enregistre le meta avant de lancer la fonction,
448 448
 				// de maniere a eviter de boucler sur timeout
@@ -460,12 +460,12 @@  discard block
 block discarded – undo
460 460
 					relance_maj($meta, $table, $redirect);
461 461
 				}
462 462
 				ecrire_meta($meta2, $i + 1, 'non', $table);
463
-				spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE);
463
+				spip_log("$meta2: ok", 'maj.'._LOG_INFO_IMPORTANTE);
464 464
 			} else {
465 465
 				if (!is_array($r)) {
466
-					spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR);
466
+					spip_log("maj $i format incorrect", 'maj.'._LOG_ERREUR);
467 467
 				} else {
468
-					spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR);
468
+					spip_log("maj $i fonction $f non definie", 'maj.'._LOG_ERREUR);
469 469
 				}
470 470
 				// en cas d'erreur serieuse, on s'arrete
471 471
 				// mais on permet de passer par dessus en rechargeant la page.
Please login to merge, or discard this patch.
Indentation   +284 added lines, -284 removed lines patch added patch discarded remove patch
@@ -17,17 +17,17 @@  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
 if (!defined('_UPGRADE_TIME_OUT')) {
24
-	/**
25
-	 * Durée en secondes pour relancer les scripts de mises à jour, x secondes
26
-	 * avant que la durée d'exécution du script provoque un timeout
27
-	 *
28
-	 * @var int
29
-	 **/
30
-	define('_UPGRADE_TIME_OUT', 20);
24
+    /**
25
+     * Durée en secondes pour relancer les scripts de mises à jour, x secondes
26
+     * avant que la durée d'exécution du script provoque un timeout
27
+     *
28
+     * @var int
29
+     **/
30
+    define('_UPGRADE_TIME_OUT', 20);
31 31
 }
32 32
 
33 33
 /**
@@ -50,40 +50,40 @@  discard block
 block discarded – undo
50 50
  * @return void
51 51
  */
52 52
 function base_upgrade_dist($titre = '', $reprise = '') {
53
-	if (!$titre) {
54
-		return;
55
-	} // anti-testeur automatique
56
-	if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) {
57
-		if (!is_numeric(_request('reinstall'))) {
58
-			include_spip('base/create');
59
-			spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE);
60
-			creer_base();
61
-		}
62
-
63
-		// quand on rentre par ici, c'est toujours une mise a jour de SPIP
64
-		// lancement de l'upgrade SPIP
65
-		$res = maj_base();
66
-
67
-		if ($res) {
68
-			// on arrete tout ici !
69
-			exit;
70
-		}
71
-	}
72
-	spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE);
73
-
74
-	// supprimer quelques fichiers temporaires qui peuvent se retrouver invalides
75
-	@spip_unlink(_CACHE_RUBRIQUES);
76
-	@spip_unlink(_CACHE_PIPELINES);
77
-	@spip_unlink(_CACHE_PLUGINS_PATH);
78
-	@spip_unlink(_CACHE_PLUGINS_OPT);
79
-	@spip_unlink(_CACHE_PLUGINS_FCT);
80
-	@spip_unlink(_CACHE_CHEMIN);
81
-	@spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz');
82
-
83
-	include_spip('inc/auth');
84
-	auth_synchroniser_distant();
85
-	$config = charger_fonction('config', 'inc');
86
-	$config();
53
+    if (!$titre) {
54
+        return;
55
+    } // anti-testeur automatique
56
+    if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) {
57
+        if (!is_numeric(_request('reinstall'))) {
58
+            include_spip('base/create');
59
+            spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE);
60
+            creer_base();
61
+        }
62
+
63
+        // quand on rentre par ici, c'est toujours une mise a jour de SPIP
64
+        // lancement de l'upgrade SPIP
65
+        $res = maj_base();
66
+
67
+        if ($res) {
68
+            // on arrete tout ici !
69
+            exit;
70
+        }
71
+    }
72
+    spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE);
73
+
74
+    // supprimer quelques fichiers temporaires qui peuvent se retrouver invalides
75
+    @spip_unlink(_CACHE_RUBRIQUES);
76
+    @spip_unlink(_CACHE_PIPELINES);
77
+    @spip_unlink(_CACHE_PLUGINS_PATH);
78
+    @spip_unlink(_CACHE_PLUGINS_OPT);
79
+    @spip_unlink(_CACHE_PLUGINS_FCT);
80
+    @spip_unlink(_CACHE_CHEMIN);
81
+    @spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz');
82
+
83
+    include_spip('inc/auth');
84
+    auth_synchroniser_distant();
85
+    $config = charger_fonction('config', 'inc');
86
+    $config();
87 87
 }
88 88
 
89 89
 /**
@@ -114,51 +114,51 @@  discard block
 block discarded – undo
114 114
  */
115 115
 function maj_base($version_cible = 0, $redirect = '', $debut_page = true) {
116 116
 
117
-	$version_installee = $GLOBALS['meta']['version_installee'] ?? null;
118
-
119
-	spip_log(
120
-		"Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'],
121
-		'maj.' . _LOG_INFO_IMPORTANTE
122
-	);
123
-	if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) {
124
-		sql_replace(
125
-			'spip_meta',
126
-			[
127
-				'nom' => 'version_installee',
128
-				'valeur' => $GLOBALS['spip_version_base'],
129
-				'impt' => 'non'
130
-			]
131
-		);
132
-		return false;
133
-	}
134
-	if (!upgrade_test()) {
135
-		return true;
136
-	}
137
-
138
-	$cible = ($version_cible ?: $GLOBALS['spip_version_base']);
139
-
140
-	if ($version_installee < 2021_01_01_00) {
141
-		include_spip('maj/legacy/v21');
142
-		include_spip('maj/legacy/v30');
143
-		include_spip('maj/legacy/v31');
144
-		include_spip('maj/legacy/v32');
145
-		include_spip('maj/legacy/v40');
146
-	}
147
-
148
-	include_spip('maj/2021');
149
-
150
-	ksort($GLOBALS['maj']);
151
-	$res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page);
152
-	if ($res) {
153
-		if (!is_array($res)) {
154
-			spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
155
-		} else {
156
-			echo _T('avis_operation_echec') . ' ' . join(' ', $res);
157
-			echo install_fin_html();
158
-		}
159
-	}
160
-
161
-	return $res;
117
+    $version_installee = $GLOBALS['meta']['version_installee'] ?? null;
118
+
119
+    spip_log(
120
+        "Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'],
121
+        'maj.' . _LOG_INFO_IMPORTANTE
122
+    );
123
+    if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) {
124
+        sql_replace(
125
+            'spip_meta',
126
+            [
127
+                'nom' => 'version_installee',
128
+                'valeur' => $GLOBALS['spip_version_base'],
129
+                'impt' => 'non'
130
+            ]
131
+        );
132
+        return false;
133
+    }
134
+    if (!upgrade_test()) {
135
+        return true;
136
+    }
137
+
138
+    $cible = ($version_cible ?: $GLOBALS['spip_version_base']);
139
+
140
+    if ($version_installee < 2021_01_01_00) {
141
+        include_spip('maj/legacy/v21');
142
+        include_spip('maj/legacy/v30');
143
+        include_spip('maj/legacy/v31');
144
+        include_spip('maj/legacy/v32');
145
+        include_spip('maj/legacy/v40');
146
+    }
147
+
148
+    include_spip('maj/2021');
149
+
150
+    ksort($GLOBALS['maj']);
151
+    $res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page);
152
+    if ($res) {
153
+        if (!is_array($res)) {
154
+            spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
155
+        } else {
156
+            echo _T('avis_operation_echec') . ' ' . join(' ', $res);
157
+            echo install_fin_html();
158
+        }
159
+    }
160
+
161
+    return $res;
162 162
 }
163 163
 
164 164
 /**
@@ -200,53 +200,53 @@  discard block
 block discarded – undo
200 200
  */
201 201
 function maj_plugin($nom_meta_base_version, $version_cible, $maj, $table_meta = 'meta') {
202 202
 
203
-	if ($table_meta !== 'meta') {
204
-		installer_table_meta($table_meta);
205
-	}
206
-
207
-	$current_version = null;
208
-
209
-	if (
210
-		(!isset($GLOBALS[$table_meta][$nom_meta_base_version]))
211
-		|| (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '='))
212
-	) {
213
-		// $maj['create'] contient les directives propres a la premiere creation de base
214
-		// c'est une operation derogatoire qui fait aboutir directement dans la version_cible
215
-		if (isset($maj['create'])) {
216
-			if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) {
217
-				// installation : on ne fait que l'operation create
218
-				$maj = ['init' => $maj['create']];
219
-				// et on lui ajoute un appel a inc/config
220
-				// pour creer les metas par defaut
221
-				$config = charger_fonction('config', 'inc');
222
-				$maj[$version_cible] = [[$config]];
223
-			}
224
-			// dans tous les cas enlever cet index du tableau
225
-			unset($maj['create']);
226
-		}
227
-		// si init, deja dans le bon ordre
228
-		if (!isset($maj['init'])) {
229
-			include_spip('inc/plugin'); // pour spip_version_compare
230
-			uksort($maj, 'spip_version_compare');
231
-		}
232
-
233
-		// la redirection se fait par defaut sur la page d'administration des plugins
234
-		// sauf lorsque nous sommes sur l'installation de SPIP
235
-		// ou define _REDIRECT_MAJ_PLUGIN
236
-		$redirect = (defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin'));
237
-		if (defined('_ECRIRE_INSTALL')) {
238
-			$redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape'));
239
-		}
240
-
241
-		$res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect);
242
-		if ($res) {
243
-			if (!is_array($res)) {
244
-				spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
245
-			} else {
246
-				echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>';
247
-			}
248
-		}
249
-	}
203
+    if ($table_meta !== 'meta') {
204
+        installer_table_meta($table_meta);
205
+    }
206
+
207
+    $current_version = null;
208
+
209
+    if (
210
+        (!isset($GLOBALS[$table_meta][$nom_meta_base_version]))
211
+        || (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '='))
212
+    ) {
213
+        // $maj['create'] contient les directives propres a la premiere creation de base
214
+        // c'est une operation derogatoire qui fait aboutir directement dans la version_cible
215
+        if (isset($maj['create'])) {
216
+            if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) {
217
+                // installation : on ne fait que l'operation create
218
+                $maj = ['init' => $maj['create']];
219
+                // et on lui ajoute un appel a inc/config
220
+                // pour creer les metas par defaut
221
+                $config = charger_fonction('config', 'inc');
222
+                $maj[$version_cible] = [[$config]];
223
+            }
224
+            // dans tous les cas enlever cet index du tableau
225
+            unset($maj['create']);
226
+        }
227
+        // si init, deja dans le bon ordre
228
+        if (!isset($maj['init'])) {
229
+            include_spip('inc/plugin'); // pour spip_version_compare
230
+            uksort($maj, 'spip_version_compare');
231
+        }
232
+
233
+        // la redirection se fait par defaut sur la page d'administration des plugins
234
+        // sauf lorsque nous sommes sur l'installation de SPIP
235
+        // ou define _REDIRECT_MAJ_PLUGIN
236
+        $redirect = (defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin'));
237
+        if (defined('_ECRIRE_INSTALL')) {
238
+            $redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape'));
239
+        }
240
+
241
+        $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect);
242
+        if ($res) {
243
+            if (!is_array($res)) {
244
+                spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR);
245
+            } else {
246
+                echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>';
247
+            }
248
+        }
249
+    }
250 250
 }
251 251
 
252 252
 /**
@@ -263,17 +263,17 @@  discard block
 block discarded – undo
263 263
  * @return void
264 264
  */
265 265
 function relance_maj($meta, $table, $redirect = '') {
266
-	include_spip('inc/headers');
267
-	if (!$redirect) {
268
-		// recuperer la valeur installee en cours
269
-		// on la tronque numeriquement, elle ne sert pas reellement
270
-		// sauf pour verifier que ce n'est pas oui ou non
271
-		// sinon is_numeric va echouer sur un numero de version 1.2.3
272
-		$installee = intval($GLOBALS[$table][$meta]);
273
-		$redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
274
-	}
275
-	echo redirige_formulaire($redirect);
276
-	exit();
266
+    include_spip('inc/headers');
267
+    if (!$redirect) {
268
+        // recuperer la valeur installee en cours
269
+        // on la tronque numeriquement, elle ne sert pas reellement
270
+        // sauf pour verifier que ce n'est pas oui ou non
271
+        // sinon is_numeric va echouer sur un numero de version 1.2.3
272
+        $installee = intval($GLOBALS[$table][$meta]);
273
+        $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
274
+    }
275
+    echo redirige_formulaire($redirect);
276
+    exit();
277 277
 }
278 278
 
279 279
 /**
@@ -286,28 +286,28 @@  discard block
 block discarded – undo
286 286
  * @return void
287 287
  */
288 288
 function maj_debut_page($installee, $meta, $table) {
289
-	static $done = false;
290
-	if ($done) {
291
-		return;
292
-	}
293
-	include_spip('inc/minipres');
294
-	if (function_exists('ini_set')) {
295
-		@ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
296
-	}
297
-	$timeout = _UPGRADE_TIME_OUT * 2;
298
-	$titre = _T('titre_page_upgrade');
299
-	$balise_img = charger_filtre('balise_img');
300
-	$titre .= $balise_img(chemin_image('loader.svg'), '', 'loader');
301
-	echo(install_debut_html($titre));
302
-	// script de rechargement auto sur timeout
303
-	$redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
304
-	echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')');
305
-	echo "<div style='text-align: left'>\n";
306
-	if (ob_get_level()) {
307
-		ob_flush();
308
-	}
309
-	flush();
310
-	$done = true;
289
+    static $done = false;
290
+    if ($done) {
291
+        return;
292
+    }
293
+    include_spip('inc/minipres');
294
+    if (function_exists('ini_set')) {
295
+        @ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
296
+    }
297
+    $timeout = _UPGRADE_TIME_OUT * 2;
298
+    $titre = _T('titre_page_upgrade');
299
+    $balise_img = charger_filtre('balise_img');
300
+    $titre .= $balise_img(chemin_image('loader.svg'), '', 'loader');
301
+    echo(install_debut_html($titre));
302
+    // script de rechargement auto sur timeout
303
+    $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
304
+    echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')');
305
+    echo "<div style='text-align: left'>\n";
306
+    if (ob_get_level()) {
307
+        ob_flush();
308
+    }
309
+    flush();
310
+    $done = true;
311 311
 }
312 312
 
313 313
 
@@ -351,64 +351,64 @@  discard block
 block discarded – undo
351 351
  *    - tableau vide sinon.
352 352
  */
353 353
 function maj_while($installee, $cible, $maj, $meta = '', $table = 'meta', $redirect = '', $debut_page = false) {
354
-	# inclusions pour que les procedures d'upgrade disposent des fonctions de base
355
-	include_spip('base/create');
356
-	include_spip('base/abstract_sql');
357
-	$trouver_table = charger_fonction('trouver_table', 'base');
358
-	include_spip('inc/plugin'); // pour spip_version_compare
359
-	$n = 0;
360
-	$time = time();
361
-
362
-	if (!defined('_TIME_OUT')) {
363
-		/**
364
-		 * Définir le timeout qui peut-être utilisé dans les fonctions
365
-		 * de mises à jour qui durent trop longtemps
366
-		 *
367
-		 * À utiliser tel que : `if (time() >= _TIME_OUT)`
368
-		 *
369
-		 * @var int
370
-		 */
371
-		define('_TIME_OUT', $time + _UPGRADE_TIME_OUT);
372
-	}
373
-
374
-	foreach ($maj as $v => $operations) {
375
-		// si une maj pour cette version
376
-		if (
377
-			$v == 'init' or
378
-			(spip_version_compare($v, $installee, '>')
379
-				and spip_version_compare($v, $cible, '<='))
380
-		) {
381
-			if ($debut_page) {
382
-				maj_debut_page($v, $meta, $table);
383
-			}
384
-			echo "MAJ $v";
385
-			$etape = serie_alter($v, $operations, $meta, $table, $redirect);
386
-			$trouver_table(''); // vider le cache des descriptions de table
387
-			# echec sur une etape en cours ?
388
-			# on sort
389
-			if ($etape) {
390
-				return [$v, $etape];
391
-			}
392
-			$n = time() - $time;
393
-			spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE);
394
-			if ($meta) {
395
-				ecrire_meta($meta, $installee = $v, 'oui', $table);
396
-			}
397
-			echo (_IS_CLI ? "\n" : '<br />');
398
-		}
399
-		if (time() >= _TIME_OUT) {
400
-			relance_maj($meta, $table, $redirect);
401
-		}
402
-	}
403
-	$trouver_table(''); // vider le cache des descriptions de table
404
-	// indispensable pour les chgt de versions qui n'ecrivent pas en base
405
-	// tant pis pour la redondance eventuelle avec ci-dessus
406
-	if ($meta) {
407
-		ecrire_meta($meta, $cible, 'oui', $table);
408
-	}
409
-	spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE);
410
-
411
-	return [];
354
+    # inclusions pour que les procedures d'upgrade disposent des fonctions de base
355
+    include_spip('base/create');
356
+    include_spip('base/abstract_sql');
357
+    $trouver_table = charger_fonction('trouver_table', 'base');
358
+    include_spip('inc/plugin'); // pour spip_version_compare
359
+    $n = 0;
360
+    $time = time();
361
+
362
+    if (!defined('_TIME_OUT')) {
363
+        /**
364
+         * Définir le timeout qui peut-être utilisé dans les fonctions
365
+         * de mises à jour qui durent trop longtemps
366
+         *
367
+         * À utiliser tel que : `if (time() >= _TIME_OUT)`
368
+         *
369
+         * @var int
370
+         */
371
+        define('_TIME_OUT', $time + _UPGRADE_TIME_OUT);
372
+    }
373
+
374
+    foreach ($maj as $v => $operations) {
375
+        // si une maj pour cette version
376
+        if (
377
+            $v == 'init' or
378
+            (spip_version_compare($v, $installee, '>')
379
+                and spip_version_compare($v, $cible, '<='))
380
+        ) {
381
+            if ($debut_page) {
382
+                maj_debut_page($v, $meta, $table);
383
+            }
384
+            echo "MAJ $v";
385
+            $etape = serie_alter($v, $operations, $meta, $table, $redirect);
386
+            $trouver_table(''); // vider le cache des descriptions de table
387
+            # echec sur une etape en cours ?
388
+            # on sort
389
+            if ($etape) {
390
+                return [$v, $etape];
391
+            }
392
+            $n = time() - $time;
393
+            spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE);
394
+            if ($meta) {
395
+                ecrire_meta($meta, $installee = $v, 'oui', $table);
396
+            }
397
+            echo (_IS_CLI ? "\n" : '<br />');
398
+        }
399
+        if (time() >= _TIME_OUT) {
400
+            relance_maj($meta, $table, $redirect);
401
+        }
402
+    }
403
+    $trouver_table(''); // vider le cache des descriptions de table
404
+    // indispensable pour les chgt de versions qui n'ecrivent pas en base
405
+    // tant pis pour la redondance eventuelle avec ci-dessus
406
+    if ($meta) {
407
+        ecrire_meta($meta, $cible, 'oui', $table);
408
+    }
409
+    spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE);
410
+
411
+    return [];
412 412
 }
413 413
 
414 414
 /**
@@ -431,53 +431,53 @@  discard block
 block discarded – undo
431 431
  * @return int
432 432
  */
433 433
 function serie_alter($serie, $q = [], $meta = '', $table = 'meta', $redirect = '') {
434
-	$meta2 = $meta . '_maj_' . $serie;
435
-	$etape = 0;
436
-	if (isset($GLOBALS[$table][$meta2])) {
437
-		$etape = intval($GLOBALS[$table][$meta2]);
438
-	}
439
-	foreach ($q as $i => $r) {
440
-		if ($i >= $etape) {
441
-			$msg = "maj $table $meta2 etape $i";
442
-			if (
443
-				is_array($r)
444
-				and function_exists($f = array_shift($r))
445
-			) {
446
-				// note: $r (arguments de la fonction $f) peut avoir des données tabulaires
447
-				spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE);
448
-				// pour les fonctions atomiques sql_xx
449
-				// on enregistre le meta avant de lancer la fonction,
450
-				// de maniere a eviter de boucler sur timeout
451
-				// mais pour les fonctions complexes,
452
-				// il faut les rejouer jusqu'a achevement.
453
-				// C'est a elle d'assurer qu'elles progressent a chaque rappel
454
-				if (strncmp($f, 'sql_', 4) == 0) {
455
-					ecrire_meta($meta2, $i + 1, 'non', $table);
456
-				}
457
-				echo (_IS_CLI ? '.' : " <span title='$i'>.</span>");
458
-				$f(...$r);
459
-				// si temps imparti depasse, on relance sans ecrire en meta
460
-				// car on est peut etre sorti sur timeout si c'est une fonction longue
461
-				if (time() >= _TIME_OUT) {
462
-					relance_maj($meta, $table, $redirect);
463
-				}
464
-				ecrire_meta($meta2, $i + 1, 'non', $table);
465
-				spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE);
466
-			} else {
467
-				if (!is_array($r)) {
468
-					spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR);
469
-				} else {
470
-					spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR);
471
-				}
472
-				// en cas d'erreur serieuse, on s'arrete
473
-				// mais on permet de passer par dessus en rechargeant la page.
474
-				return $i + 1;
475
-			}
476
-		}
477
-	}
478
-	effacer_meta($meta2, $table);
479
-
480
-	return 0;
434
+    $meta2 = $meta . '_maj_' . $serie;
435
+    $etape = 0;
436
+    if (isset($GLOBALS[$table][$meta2])) {
437
+        $etape = intval($GLOBALS[$table][$meta2]);
438
+    }
439
+    foreach ($q as $i => $r) {
440
+        if ($i >= $etape) {
441
+            $msg = "maj $table $meta2 etape $i";
442
+            if (
443
+                is_array($r)
444
+                and function_exists($f = array_shift($r))
445
+            ) {
446
+                // note: $r (arguments de la fonction $f) peut avoir des données tabulaires
447
+                spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE);
448
+                // pour les fonctions atomiques sql_xx
449
+                // on enregistre le meta avant de lancer la fonction,
450
+                // de maniere a eviter de boucler sur timeout
451
+                // mais pour les fonctions complexes,
452
+                // il faut les rejouer jusqu'a achevement.
453
+                // C'est a elle d'assurer qu'elles progressent a chaque rappel
454
+                if (strncmp($f, 'sql_', 4) == 0) {
455
+                    ecrire_meta($meta2, $i + 1, 'non', $table);
456
+                }
457
+                echo (_IS_CLI ? '.' : " <span title='$i'>.</span>");
458
+                $f(...$r);
459
+                // si temps imparti depasse, on relance sans ecrire en meta
460
+                // car on est peut etre sorti sur timeout si c'est une fonction longue
461
+                if (time() >= _TIME_OUT) {
462
+                    relance_maj($meta, $table, $redirect);
463
+                }
464
+                ecrire_meta($meta2, $i + 1, 'non', $table);
465
+                spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE);
466
+            } else {
467
+                if (!is_array($r)) {
468
+                    spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR);
469
+                } else {
470
+                    spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR);
471
+                }
472
+                // en cas d'erreur serieuse, on s'arrete
473
+                // mais on permet de passer par dessus en rechargeant la page.
474
+                return $i + 1;
475
+            }
476
+        }
477
+    }
478
+    effacer_meta($meta2, $table);
479
+
480
+    return 0;
481 481
 }
482 482
 
483 483
 /**
@@ -486,16 +486,16 @@  discard block
 block discarded – undo
486 486
  * @return bool True si possible.
487 487
  **/
488 488
 function upgrade_test() {
489
-	sql_drop_table('spip_test', true);
490
-	sql_create('spip_test', ['a' => 'int']);
491
-	sql_alter('TABLE spip_test ADD b INT');
492
-	sql_insertq('spip_test', ['b' => 1], ['field' => ['b' => 'int']]);
493
-	$result = sql_select('b', 'spip_test');
494
-	// ne pas garder le resultat de la requete sinon sqlite3
495
-	// ne peut pas supprimer la table spip_test lors du sql_alter qui suit
496
-	// car cette table serait alors 'verouillee'
497
-	$result = $result ? true : false;
498
-	sql_alter('TABLE spip_test DROP b');
499
-
500
-	return $result;
489
+    sql_drop_table('spip_test', true);
490
+    sql_create('spip_test', ['a' => 'int']);
491
+    sql_alter('TABLE spip_test ADD b INT');
492
+    sql_insertq('spip_test', ['b' => 1], ['field' => ['b' => 'int']]);
493
+    $result = sql_select('b', 'spip_test');
494
+    // ne pas garder le resultat de la requete sinon sqlite3
495
+    // ne peut pas supprimer la table spip_test lors du sql_alter qui suit
496
+    // car cette table serait alors 'verouillee'
497
+    $result = $result ? true : false;
498
+    sql_alter('TABLE spip_test DROP b');
499
+
500
+    return $result;
501 501
 }
Please login to merge, or discard this patch.