Completed
Push — master ( 3aac8c...691b26 )
by cam
01:02
created
ecrire/req/sqlite_generique.php 3 patches
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -2006,8 +2006,7 @@  discard block
 block discarded – undo
2006 2006
 		// si on ne connait pas le type on le deduit de $v autant que possible
2007 2007
 		if (is_bool($v)) {
2008 2008
 			return strval(intval($v));
2009
-		}
2010
-		elseif (is_numeric($v)) {
2009
+		} elseif (is_numeric($v)) {
2011 2010
 			return strval($v);
2012 2011
 		}
2013 2012
 	}
@@ -2633,8 +2632,7 @@  discard block
 block discarded – undo
2633 2632
 				$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2634 2633
 			}
2635 2634
 		}
2636
-	}
2637
-	else {
2635
+	} else {
2638 2636
 		$now = _sqlite_func_now(true);
2639 2637
 		foreach (array_keys($tables[$table]['desc']) as $k) {
2640 2638
 			$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
Please login to merge, or discard this patch.
Spacing   +95 added lines, -95 removed lines patch added patch discarded remove patch
@@ -64,27 +64,27 @@  discard block
 block discarded – undo
64 64
 	// determiner le dossier de la base : $addr ou _DIR_DB
65 65
 	$f = _DIR_DB;
66 66
 	if ($addr and strpos($addr, '/') !== false) {
67
-		$f = rtrim($addr, '/') . '/';
67
+		$f = rtrim($addr, '/').'/';
68 68
 	}
69 69
 
70 70
 	// un nom de base demande et impossible d'obtenir la base, on s'en va :
71 71
 	// il faut que la base existe ou que le repertoire parent soit writable
72
-	if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) {
73
-		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS);
72
+	if ($db and !is_file($f .= $db.'.sqlite') and !is_writable(dirname($f))) {
73
+		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.'._LOG_HS);
74 74
 
75 75
 		return false;
76 76
 	}
77 77
 
78 78
 	// charger les modules sqlite au besoin
79 79
 	if (!_sqlite_charger_version($sqlite_version)) {
80
-		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS);
80
+		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.'._LOG_HS);
81 81
 
82 82
 		return false;
83 83
 	}
84 84
 
85 85
 	// chargement des constantes
86 86
 	// il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
87
-	$define = 'spip_sqlite' . $sqlite_version . '_constantes';
87
+	$define = 'spip_sqlite'.$sqlite_version.'_constantes';
88 88
 	$define();
89 89
 
90 90
 	$ok = false;
@@ -92,8 +92,8 @@  discard block
 block discarded – undo
92 92
 		// si pas de db ->
93 93
 		// base temporaire tant qu'on ne connait pas son vrai nom
94 94
 		// pour tester la connexion
95
-		$db = '_sqlite' . $sqlite_version . '_install';
96
-		$tmp = _DIR_DB . $db . '.sqlite';
95
+		$db = '_sqlite'.$sqlite_version.'_install';
96
+		$tmp = _DIR_DB.$db.'.sqlite';
97 97
 		$ok = $link = new \PDO("sqlite:$tmp");
98 98
 	} else {
99 99
 		// Ouvrir (eventuellement creer la base)
@@ -102,7 +102,7 @@  discard block
 block discarded – undo
102 102
 
103 103
 	if (!$ok) {
104 104
 		$e = _sqlite_last_error_from_link($link);
105
-		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS);
105
+		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.'._LOG_HS);
106 106
 
107 107
 		return false;
108 108
 	}
@@ -188,7 +188,7 @@  discard block
 block discarded – undo
188 188
 		$table = $regs[3];
189 189
 		$suite = $regs[4];
190 190
 	} else {
191
-		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR);
191
+		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.'._LOG_ERREUR);
192 192
 
193 193
 		return false;
194 194
 	}
@@ -205,7 +205,7 @@  discard block
 block discarded – undo
205 205
 	$i = 0;
206 206
 	$ouverte = false;
207 207
 	while ($do = array_shift($todo)) {
208
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
208
+		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i].','.$do : $do;
209 209
 		$o = (false !== strpos($do, '('));
210 210
 		$f = (false !== strpos($do, ')'));
211 211
 		if ($o and !$f) {
@@ -231,7 +231,7 @@  discard block
 block discarded – undo
231 231
 		) {
232 232
 			spip_log(
233 233
 				"SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)",
234
-				'sqlite.' . _LOG_ERREUR
234
+				'sqlite.'._LOG_ERREUR
235 235
 			);
236 236
 
237 237
 			return false;
@@ -327,10 +327,10 @@  discard block
 block discarded – undo
327 327
 
328 328
 			// pas geres en sqlite2
329 329
 			case 'RENAME':
330
-				$do = 'RENAME TO' . substr($do, 6);
330
+				$do = 'RENAME TO'.substr($do, 6);
331 331
 			case 'RENAME TO':
332 332
 				if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
333
-					spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
333
+					spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.'._LOG_ERREUR);
334 334
 
335 335
 					return false;
336 336
 				}
@@ -373,7 +373,7 @@  discard block
 block discarded – undo
373 373
 						$colonnes = substr($colonne_origine, 1, -1);
374 374
 						if (false !== strpos(',', $colonnes)) {
375 375
 							spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes'
376
-								. " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR);
376
+								. " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.'._LOG_ERREUR);
377 377
 							break;
378 378
 						} else {
379 379
 							$nom_index = $colonnes;
@@ -388,12 +388,12 @@  discard block
 block discarded – undo
388 388
 
389 389
 			// pas geres en sqlite2
390 390
 			case 'ADD COLUMN':
391
-				$do = 'ADD' . substr($do, 10);
391
+				$do = 'ADD'.substr($do, 10);
392 392
 			case 'ADD':
393 393
 			default:
394 394
 				if (!preg_match(',primary\s+key,i', $do)) {
395 395
 					if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
396
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
396
+						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
397 397
 
398 398
 						return false;
399 399
 					}
@@ -413,7 +413,7 @@  discard block
 block discarded – undo
413 413
 					}
414 414
 					$opts['field'] = [$colonne_ajoutee => $def];
415 415
 					if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) {
416
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
416
+						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
417 417
 
418 418
 						return false;
419 419
 					}
@@ -421,10 +421,10 @@  discard block
 block discarded – undo
421 421
 				break;
422 422
 		}
423 423
 		// tout est bon, ouf !
424
-		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO);
424
+		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.'._LOG_INFO);
425 425
 	}
426 426
 
427
-	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO);
427
+	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.'._LOG_INFO);
428 428
 
429 429
 	return true;
430 430
 }
@@ -493,9 +493,9 @@  discard block
 block discarded – undo
493 493
  * @return bool true si la base est créee.
494 494
  **/
495 495
 function spip_sqlite_create_base($nom, $serveur = '', $option = true) {
496
-	$f = $nom . '.sqlite';
496
+	$f = $nom.'.sqlite';
497 497
 	if (strpos($nom, '/') === false) {
498
-		$f = _DIR_DB . $f;
498
+		$f = _DIR_DB.$f;
499 499
 	}
500 500
 
501 501
 	$ok = new \PDO("sqlite:$f");
@@ -535,13 +535,13 @@  discard block
 block discarded – undo
535 535
 	if (sql_showtable($nom, false, $serveur)) {
536 536
 		spip_log(
537 537
 			"Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",
538
-			'sqlite.' . _LOG_ERREUR
538
+			'sqlite.'._LOG_ERREUR
539 539
 		);
540 540
 
541 541
 		return false;
542 542
 	}
543 543
 
544
-	$query = "CREATE VIEW $nom AS " . $query_select;
544
+	$query = "CREATE VIEW $nom AS ".$query_select;
545 545
 
546 546
 	return spip_sqlite_query($query, $serveur, $requeter);
547 547
 }
@@ -567,8 +567,8 @@  discard block
 block discarded – undo
567 567
 function spip_sqlite_create_index($nom, $table, $champs, $unique = '', $serveur = '', $requeter = true) {
568 568
 	if (!($nom or $table or $champs)) {
569 569
 		spip_log(
570
-			"Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))',
571
-			'sqlite.' . _LOG_ERREUR
570
+			"Champ manquant pour creer un index sqlite ($nom, $table, (".join(',', $champs).'))',
571
+			'sqlite.'._LOG_ERREUR
572 572
 		);
573 573
 
574 574
 		return false;
@@ -576,7 +576,7 @@  discard block
 block discarded – undo
576 576
 
577 577
 	// SQLite ne differentie pas noms des index en fonction des tables
578 578
 	// il faut donc creer des noms uniques d'index pour une base sqlite
579
-	$nom = $table . '_' . $nom;
579
+	$nom = $table.'_'.$nom;
580 580
 	// enlever d'eventuelles parentheses deja presentes sur champs
581 581
 	if (!is_array($champs)) {
582 582
 		if ($champs[0] == '(') {
@@ -598,12 +598,12 @@  discard block
 block discarded – undo
598 598
 	} else {
599 599
 		/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
600 600
 		$a = spip_sqlite_showtable($table, $serveur);
601
-		if (isset($a['key']['KEY ' . $nom])) {
601
+		if (isset($a['key']['KEY '.$nom])) {
602 602
 			return true;
603 603
 		}
604 604
 	}
605 605
 
606
-	$query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')';
606
+	$query = 'CREATE '.($unique ? 'UNIQUE ' : '')."INDEX$ifnotexists $nom ON $table (".join(',', $champs).')';
607 607
 	$res = spip_sqlite_query($query, $serveur, $requeter);
608 608
 	if (!$requeter) {
609 609
 		return $res;
@@ -679,7 +679,7 @@  discard block
 block discarded – undo
679 679
 	$serveur = '',
680 680
 	$requeter = true
681 681
 ) {
682
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
682
+	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
683 683
 	$r = spip_sqlite_select(
684 684
 		"COUNT($c)",
685 685
 		$from,
@@ -788,14 +788,14 @@  discard block
 block discarded – undo
788 788
  */
789 789
 function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true) {
790 790
 	if (!($nom or $table)) {
791
-		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR);
791
+		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.'._LOG_ERREUR);
792 792
 
793 793
 		return false;
794 794
 	}
795 795
 
796 796
 	// SQLite ne differentie pas noms des index en fonction des tables
797 797
 	// il faut donc creer des noms uniques d'index pour une base sqlite
798
-	$index = $table . '_' . $nom;
798
+	$index = $table.'_'.$nom;
799 799
 	$exist = ' IF EXISTS';
800 800
 
801 801
 	$query = "DROP INDEX$exist $index";
@@ -827,7 +827,7 @@  discard block
 block discarded – undo
827 827
 	if ($s) {
828 828
 		$trace = debug_backtrace();
829 829
 		if ($trace[0]['function'] != 'spip_sqlite_error') {
830
-			spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR);
830
+			spip_log("$s - $query - ".sql_error_backtrace(), 'sqlite.'._LOG_ERREUR);
831 831
 		}
832 832
 	}
833 833
 
@@ -874,14 +874,14 @@  discard block
 block discarded – undo
874 874
 		$t = $link->errorInfo();
875 875
 		$s = ltrim($t[0], '0'); // 00000 si pas d'erreur
876 876
 		if ($s) {
877
-			$s .= ' / ' . $t[1];
877
+			$s .= ' / '.$t[1];
878 878
 		} // ajoute l'erreur du moteur SQLite
879 879
 	} else {
880 880
 		$s = ': aucune ressource sqlite (link)';
881 881
 	}
882 882
 
883 883
 	if ($s) {
884
-		spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR);
884
+		spip_log("Erreur sqlite $s", 'sqlite.'._LOG_ERREUR);
885 885
 	}
886 886
 
887 887
 	return $s ? $s : 0;
@@ -905,7 +905,7 @@  discard block
 block discarded – undo
905 905
 	}
906 906
 
907 907
 	$query = spip_sqlite::traduire_requete($query, $serveur);
908
-	$query = 'EXPLAIN ' . $query;
908
+	$query = 'EXPLAIN '.$query;
909 909
 	if (!$requeter) {
910 910
 		return $query;
911 911
 	}
@@ -1066,7 +1066,7 @@  discard block
 block discarded – undo
1066 1066
  **/
1067 1067
 function spip_sqlite_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1068 1068
 
1069
-	$query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1069
+	$query = "INSERT INTO $table ".($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1070 1070
 	if ($r = spip_sqlite_query($query, $serveur, $requeter)) {
1071 1071
 		if (!$requeter) {
1072 1072
 			return $r;
@@ -1121,8 +1121,8 @@  discard block
 block discarded – undo
1121 1121
 
1122 1122
 	$cles = $valeurs = '';
1123 1123
 	if (count($couples)) {
1124
-		$cles = '(' . join(',', array_keys($couples)) . ')';
1125
-		$valeurs = '(' . join(',', $couples) . ')';
1124
+		$cles = '('.join(',', array_keys($couples)).')';
1125
+		$valeurs = '('.join(',', $couples).')';
1126 1126
 	}
1127 1127
 
1128 1128
 	return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
@@ -1182,11 +1182,11 @@  discard block
 block discarded – undo
1182 1182
 
1183 1183
 		$champs = $valeurs = '';
1184 1184
 		if (count($couples)) {
1185
-			$champs = '(' . join(',', array_keys($couples)) . ')';
1186
-			$valeurs = '(' . join(',', $couples) . ')';
1187
-			$query = $query_start . "$champs VALUES $valeurs";
1185
+			$champs = '('.join(',', array_keys($couples)).')';
1186
+			$valeurs = '('.join(',', $couples).')';
1187
+			$query = $query_start."$champs VALUES $valeurs";
1188 1188
 		} else {
1189
-			$query = $query_start . 'DEFAULT VALUES';
1189
+			$query = $query_start.'DEFAULT VALUES';
1190 1190
 		}
1191 1191
 
1192 1192
 		if ($requeter) {
@@ -1318,7 +1318,7 @@  discard block
 block discarded – undo
1318 1318
  * @return string       Texte de sélection pour la requête
1319 1319
  */
1320 1320
 function spip_sqlite_multi($objet, $lang) {
1321
-	$r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi";
1321
+	$r = 'EXTRAIRE_MULTI('.$objet.", '".$lang."') AS multi";
1322 1322
 
1323 1323
 	return $r;
1324 1324
 }
@@ -1389,7 +1389,7 @@  discard block
 block discarded – undo
1389 1389
 function spip_sqlite_date_proche($champ, $interval, $unite) {
1390 1390
 	$op = (($interval <= 0) ? '>' : '<');
1391 1391
 
1392
-	return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))";
1392
+	return "($champ $op datetime('".date('Y-m-d H:i:s')."', '$interval $unite'))";
1393 1393
 }
1394 1394
 
1395 1395
 
@@ -1421,7 +1421,7 @@  discard block
 block discarded – undo
1421 1421
 				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1422 1422
 			) {
1423 1423
 				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur);
1424
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1424
+				spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE);
1425 1425
 			}
1426 1426
 			if (
1427 1427
 				preg_match(',^(INTEGER),i', $d)
@@ -1431,7 +1431,7 @@  discard block
 block discarded – undo
1431 1431
 				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1432 1432
 			) {
1433 1433
 				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur);
1434
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1434
+				spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE);
1435 1435
 			}
1436 1436
 			if (
1437 1437
 				preg_match(',^(datetime),i', $d)
@@ -1441,7 +1441,7 @@  discard block
 block discarded – undo
1441 1441
 				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1442 1442
 			) {
1443 1443
 				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur);
1444
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1444
+				spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE);
1445 1445
 			}
1446 1446
 		}
1447 1447
 
@@ -1492,10 +1492,10 @@  discard block
 block discarded – undo
1492 1492
 	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1493 1493
 	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1494 1494
 
1495
-	return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1495
+	return spip_sqlite_query("REPLACE INTO $table (".join(',', array_keys($couples)).') VALUES ('.join(
1496 1496
 		',',
1497 1497
 		$couples
1498
-	) . ')', $serveur);
1498
+	).')', $serveur);
1499 1499
 }
1500 1500
 
1501 1501
 
@@ -1581,7 +1581,7 @@  discard block
 block discarded – undo
1581 1581
 		. _sqlite_calculer_expression('WHERE', $where)
1582 1582
 		. _sqlite_calculer_expression('GROUP BY', $groupby, ',')
1583 1583
 		. _sqlite_calculer_expression('HAVING', $having)
1584
-		. ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '')
1584
+		. ($orderby ? ("\nORDER BY "._sqlite_calculer_order($orderby)) : '')
1585 1585
 		. ($limit ? "\nLIMIT $limit" : '');
1586 1586
 
1587 1587
 	// dans un select, on doit renvoyer la requête en cas d'erreur
@@ -1619,10 +1619,10 @@  discard block
 block discarded – undo
1619 1619
 	// interdire la creation d'une nouvelle base,
1620 1620
 	// sauf si on est dans l'installation
1621 1621
 	if (
1622
-		!is_file($f = _DIR_DB . $db . '.sqlite')
1622
+		!is_file($f = _DIR_DB.$db.'.sqlite')
1623 1623
 		&& (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)
1624 1624
 	) {
1625
-		spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS);
1625
+		spip_log("Il est interdit de creer la base $db", 'sqlite.'._LOG_HS);
1626 1626
 
1627 1627
 		return false;
1628 1628
 	}
@@ -1631,12 +1631,12 @@  discard block
 block discarded – undo
1631 1631
 	// avec les identifiants connus
1632 1632
 	$index = $serveur ? $serveur : 0;
1633 1633
 
1634
-	if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) {
1634
+	if ($link = spip_connect_db('', '', '', '', '@selectdb@'.$db, $serveur, '', '')) {
1635 1635
 		if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
1636 1636
 			return $db;
1637 1637
 		}
1638 1638
 	} else {
1639
-		spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS);
1639
+		spip_log("Impossible de selectionner la base $db", 'sqlite.'._LOG_HS);
1640 1640
 
1641 1641
 		return false;
1642 1642
 	}
@@ -1687,7 +1687,7 @@  discard block
 block discarded – undo
1687 1687
 	$match = "^$match$";
1688 1688
 
1689 1689
 	return spip_sqlite_query(
1690
-		"SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match),
1690
+		"SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP "._q($match),
1691 1691
 		$serveur,
1692 1692
 		$requeter
1693 1693
 	);
@@ -1710,7 +1710,7 @@  discard block
 block discarded – undo
1710 1710
 	$r = spip_sqlite_query(
1711 1711
 		'SELECT name FROM sqlite_master WHERE'
1712 1712
 		. ' type=\'table\''
1713
-		. ' AND name=' . spip_sqlite_quote($table, 'string')
1713
+		. ' AND name='.spip_sqlite_quote($table, 'string')
1714 1714
 		. ' AND name NOT LIKE \'sqlite_%\'',
1715 1715
 		$serveur,
1716 1716
 		$requeter
@@ -1807,7 +1807,7 @@  discard block
 block discarded – undo
1807 1807
 				// s'il y a une parenthèse fermante dans la clé
1808 1808
 				// ou dans la définition sans qu'il n'y ait une ouverture avant
1809 1809
 				if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1810
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1810
+					$fields[$k_precedent] .= ','.$k.' '.$def;
1811 1811
 					continue;
1812 1812
 				}
1813 1813
 
@@ -1842,13 +1842,13 @@  discard block
 block discarded – undo
1842 1842
 				. 'ORDER BY substr(type,2,1), name';
1843 1843
 			$a = spip_sqlite_query($query, $serveur, $requeter);
1844 1844
 			while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1845
-				$key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1845
+				$key = str_replace($nom_table.'_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1846 1846
 				$keytype = 'KEY';
1847 1847
 				if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1848 1848
 					$keytype = 'UNIQUE KEY';
1849 1849
 				}
1850 1850
 				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1851
-				$keys[$keytype . ' ' . $key] = $colonnes;
1851
+				$keys[$keytype.' '.$key] = $colonnes;
1852 1852
 			}
1853 1853
 		}
1854 1854
 	} // c'est une vue, on liste les champs disponibles simplement
@@ -1895,7 +1895,7 @@  discard block
 block discarded – undo
1895 1895
 
1896 1896
 	$set = [];
1897 1897
 	foreach ($champs as $champ => $val) {
1898
-		$set[] = $champ . "=$val";
1898
+		$set[] = $champ."=$val";
1899 1899
 	}
1900 1900
 	if (!empty($set)) {
1901 1901
 		return spip_sqlite_query(
@@ -1948,7 +1948,7 @@  discard block
 block discarded – undo
1948 1948
 
1949 1949
 	$set = [];
1950 1950
 	foreach ($champs as $champ => $val) {
1951
-		$set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1951
+		$set[$champ] = $champ.'='._sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1952 1952
 	}
1953 1953
 
1954 1954
 	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
@@ -1956,7 +1956,7 @@  discard block
 block discarded – undo
1956 1956
 	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1957 1957
 	foreach ($maj as $champ => $val) {
1958 1958
 		if (!isset($set[$champ])) {
1959
-			$set[$champ] = $champ . '=' . $val;
1959
+			$set[$champ] = $champ.'='.$val;
1960 1960
 		}
1961 1961
 	}
1962 1962
 
@@ -1985,7 +1985,7 @@  discard block
 block discarded – undo
1985 1985
  */
1986 1986
 function _sqlite_init() {
1987 1987
 	if (!defined('_DIR_DB')) {
1988
-		define('_DIR_DB', _DIR_ETC . 'bases/');
1988
+		define('_DIR_DB', _DIR_ETC.'bases/');
1989 1989
 	}
1990 1990
 	if (!defined('_SQLITE_CHMOD')) {
1991 1991
 		define('_SQLITE_CHMOD', _SPIP_CHMOD);
@@ -2092,9 +2092,9 @@  discard block
 block discarded – undo
2092 2092
 	}
2093 2093
 
2094 2094
 	// echapper les ' en ''
2095
-	spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2095
+	spip_log('Pas de methode ->quote pour echapper', 'sqlite.'._LOG_INFO_IMPORTANTE);
2096 2096
 
2097
-	return ("'" . str_replace("'", "''", $v) . "'");
2097
+	return ("'".str_replace("'", "''", $v)."'");
2098 2098
 }
2099 2099
 
2100 2100
 
@@ -2117,12 +2117,12 @@  discard block
 block discarded – undo
2117 2117
 	$exp = "\n$expression ";
2118 2118
 
2119 2119
 	if (!is_array($v)) {
2120
-		return $exp . $v;
2120
+		return $exp.$v;
2121 2121
 	} else {
2122 2122
 		if (strtoupper($join) === 'AND') {
2123
-			return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2123
+			return $exp.join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2124 2124
 		} else {
2125
-			return $exp . join($join, $v);
2125
+			return $exp.join($join, $v);
2126 2126
 		}
2127 2127
 	}
2128 2128
 }
@@ -2156,17 +2156,17 @@  discard block
 block discarded – undo
2156 2156
 		if (substr($k, -1) == '@') {
2157 2157
 			// c'est une jointure qui se refere au from precedent
2158 2158
 			// pas de virgule
2159
-			$res .= '  ' . $v;
2159
+			$res .= '  '.$v;
2160 2160
 		} else {
2161 2161
 			if (!is_numeric($k)) {
2162 2162
 				$p = strpos($v, ' ');
2163 2163
 				if ($p) {
2164
-					$v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2164
+					$v = substr($v, 0, $p)." AS '$k'".substr($v, $p);
2165 2165
 				} else {
2166 2166
 					$v .= " AS '$k'";
2167 2167
 				}
2168 2168
 			}
2169
-			$res .= ', ' . $v;
2169
+			$res .= ', '.$v;
2170 2170
 		}
2171 2171
 	}
2172 2172
 
@@ -2304,13 +2304,13 @@  discard block
 block discarded – undo
2304 2304
 
2305 2305
 	$def_origine = sql_showtable($table_origine, false, $serveur);
2306 2306
 	if (!$def_origine or !isset($def_origine['field'])) {
2307
-		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2307
+		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite'._LOG_ERREUR);
2308 2308
 
2309 2309
 		return false;
2310 2310
 	}
2311 2311
 
2312 2312
 
2313
-	$table_tmp = $table_origine . '_tmp';
2313
+	$table_tmp = $table_origine.'_tmp';
2314 2314
 
2315 2315
 	// 1) creer une table temporaire avec les modifications
2316 2316
 	// - DROP : suppression de la colonne
@@ -2397,7 +2397,7 @@  discard block
 block discarded – undo
2397 2397
 		} else {
2398 2398
 			// enlever KEY
2399 2399
 			$k = substr($k, 4);
2400
-			$queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2400
+			$queries[] = "CREATE INDEX $table_destination"."_$k ON $table_destination ($v)";
2401 2401
 		}
2402 2402
 	}
2403 2403
 
@@ -2408,7 +2408,7 @@  discard block
 block discarded – undo
2408 2408
 		foreach ($queries as $q) {
2409 2409
 			if (!spip_sqlite::executer_requete($q, $serveur)) {
2410 2410
 				spip_log('SQLite : ALTER TABLE table :'
2411
-					. " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2411
+					. " Erreur a l'execution de la requete : $q", 'sqlite.'._LOG_ERREUR);
2412 2412
 				spip_sqlite::annuler_transaction($serveur);
2413 2413
 
2414 2414
 				return false;
@@ -2498,27 +2498,27 @@  discard block
 block discarded – undo
2498 2498
 	$enum = '(\s*\([^\)]*\))?';
2499 2499
 
2500 2500
 	$remplace = [
2501
-		'/enum' . $enum . '/is' => 'VARCHAR(255)',
2501
+		'/enum'.$enum.'/is' => 'VARCHAR(255)',
2502 2502
 		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2503 2503
 		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2504 2504
 		'/auto_increment/is' => '',
2505 2505
 		'/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2506 2506
 		'/(timestamp .* )ON .*$/is' => '\\1',
2507 2507
 		'/character set \w+/is' => '',
2508
-		'/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2508
+		'/((big|small|medium|tiny)?int(eger)?)'.$num.'\s*unsigned/is' => '\\1 UNSIGNED',
2509 2509
 		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
-		'/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
+		'/((char|varchar)'.$num.'\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511 2511
 		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2512 2512
 		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2513 2513
 	];
2514 2514
 
2515 2515
 	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2516 2516
 	$remplace_autocinc = [
2517
-		'/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2517
+		'/(big|small|medium|tiny)?int(eger)?'.$num.'/is' => 'INTEGER'
2518 2518
 	];
2519 2519
 	// pour les int non autoincrement, il faut un DEFAULT
2520 2520
 	$remplace_nonautocinc = [
2521
-		'/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2521
+		'/((big|small|medium|tiny)?int(eger)?'.$num.'\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2522 2522
 	];
2523 2523
 
2524 2524
 	if (is_string($query)) {
@@ -2560,7 +2560,7 @@  discard block
 block discarded – undo
2560 2560
 		return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2561 2561
 	}
2562 2562
 	if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2563
-		return $champ . ' COLLATE NOCASE';
2563
+		return $champ.' COLLATE NOCASE';
2564 2564
 	}
2565 2565
 
2566 2566
 	return $champ;
@@ -2650,14 +2650,14 @@  discard block
 block discarded – undo
2650 2650
 		} else {
2651 2651
 			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2652 2652
 			$a = spip_sqlite_showtable($nom, $serveur);
2653
-			if (isset($a['key']['KEY ' . $nom])) {
2653
+			if (isset($a['key']['KEY '.$nom])) {
2654 2654
 				return true;
2655 2655
 			}
2656 2656
 		}
2657 2657
 	}
2658 2658
 
2659 2659
 	$temporary = $temporary ? ' TEMPORARY' : '';
2660
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2660
+	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query".($keys ? ",$keys" : '').")\n";
2661 2661
 
2662 2662
 	return $q;
2663 2663
 }
@@ -2878,7 +2878,7 @@  discard block
 block discarded – undo
2878 2878
 		$this->serveur = strtolower($serveur);
2879 2879
 
2880 2880
 		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2881
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2881
+			spip_log('Aucune connexion sqlite (link)', 'sqlite.'._LOG_ERREUR);
2882 2882
 
2883 2883
 			return false;
2884 2884
 		}
@@ -2924,7 +2924,7 @@  discard block
 block discarded – undo
2924 2924
 			try {
2925 2925
 				$r = $this->link->query($query);
2926 2926
 			} catch (\PDOException $e) {
2927
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2927
+				spip_log('PDOException: '.$e->getMessage(), 'sqlite.'._LOG_DEBUG);
2928 2928
 				$r = false;
2929 2929
 			}
2930 2930
 			// sauvegarde de la requete (elle y est deja dans $r->queryString)
@@ -2945,11 +2945,11 @@  discard block
 block discarded – undo
2945 2945
 
2946 2946
 			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2947 2947
 			if ($e and $e instanceof \PDOException) {
2948
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2949
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2948
+				$err = strip_tags($e->getMessage()).' in '.$e->getFile().' line '.$e->getLine();
2949
+				spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2950 2950
 			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2951
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2952
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2951
+				$err = strip_tags($err['message']).' in '.$err['file'].' line '.$err['line'];
2952
+				spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2953 2953
 			} else {
2954 2954
 				$err = '';
2955 2955
 			}
@@ -3027,15 +3027,15 @@  discard block
 block discarded – undo
3027 3027
 		// Correction Create Database
3028 3028
 		// Create Database -> requete ignoree
3029 3029
 		if (strpos($this->query, 'CREATE DATABASE') === 0) {
3030
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3030
+			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.'._LOG_AVERTISSEMENT);
3031 3031
 			$this->query = 'SELECT 1';
3032 3032
 		}
3033 3033
 
3034 3034
 		// Correction Insert Ignore
3035 3035
 		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3036 3036
 		if (strpos($this->query, 'INSERT IGNORE') === 0) {
3037
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3038
-			$this->query = 'INSERT ' . substr($this->query, '13');
3037
+			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.'._LOG_DEBUG);
3038
+			$this->query = 'INSERT '.substr($this->query, '13');
3039 3039
 		}
3040 3040
 
3041 3041
 		// Correction des dates avec INTERVAL
@@ -3063,7 +3063,7 @@  discard block
 block discarded – undo
3063 3063
 		if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3064 3064
 			spip_log(
3065 3065
 				"'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3066
-				'sqlite.' . _LOG_ERREUR
3066
+				'sqlite.'._LOG_ERREUR
3067 3067
 			);
3068 3068
 			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3069 3069
 		}
@@ -3086,8 +3086,8 @@  discard block
 block discarded – undo
3086 3086
 		} else {
3087 3087
 			$suite = '';
3088 3088
 		}
3089
-		$pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3090
-		$this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3089
+		$pref = ($this->prefixe) ? $this->prefixe.'_' : '';
3090
+		$this->query = preg_replace('/([,\s])spip_/S', '\1'.$pref, $this->query).$suite;
3091 3091
 
3092 3092
 		// Correction zero AS x
3093 3093
 		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
Please login to merge, or discard this patch.
Indentation   +1999 added lines, -1999 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
 // TODO: get/set_caracteres ?
@@ -42,91 +42,91 @@  discard block
 block discarded – undo
42 42
  * @return array|bool
43 43
  */
44 44
 function req_sqlite_dist($addr, $port, $login, $pass, $db = '', $prefixe = '', $sqlite_version = '') {
45
-	static $last_connect = [];
46
-
47
-	// si provient de selectdb
48
-	// un code pour etre sur que l'on vient de select_db()
49
-	if (strpos($db, $code = '@selectdb@') !== false) {
50
-		foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) {
51
-			$$a = $last_connect[$a];
52
-		}
53
-		$db = str_replace($code, '', $db);
54
-	}
55
-
56
-	/*
45
+    static $last_connect = [];
46
+
47
+    // si provient de selectdb
48
+    // un code pour etre sur que l'on vient de select_db()
49
+    if (strpos($db, $code = '@selectdb@') !== false) {
50
+        foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) {
51
+            $$a = $last_connect[$a];
52
+        }
53
+        $db = str_replace($code, '', $db);
54
+    }
55
+
56
+    /*
57 57
 	 * En sqlite, seule l'adresse du fichier est importante.
58 58
 	 * Ce sera $db le nom,
59 59
 	 * le path est $addr
60 60
 	 * (_DIR_DB si $addr est vide)
61 61
 	 */
62
-	_sqlite_init();
63
-
64
-	// determiner le dossier de la base : $addr ou _DIR_DB
65
-	$f = _DIR_DB;
66
-	if ($addr and strpos($addr, '/') !== false) {
67
-		$f = rtrim($addr, '/') . '/';
68
-	}
69
-
70
-	// un nom de base demande et impossible d'obtenir la base, on s'en va :
71
-	// il faut que la base existe ou que le repertoire parent soit writable
72
-	if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) {
73
-		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS);
74
-
75
-		return false;
76
-	}
77
-
78
-	// charger les modules sqlite au besoin
79
-	if (!_sqlite_charger_version($sqlite_version)) {
80
-		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS);
81
-
82
-		return false;
83
-	}
84
-
85
-	// chargement des constantes
86
-	// il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
87
-	$define = 'spip_sqlite' . $sqlite_version . '_constantes';
88
-	$define();
89
-
90
-	$ok = false;
91
-	if (!$db) {
92
-		// si pas de db ->
93
-		// base temporaire tant qu'on ne connait pas son vrai nom
94
-		// pour tester la connexion
95
-		$db = '_sqlite' . $sqlite_version . '_install';
96
-		$tmp = _DIR_DB . $db . '.sqlite';
97
-		$ok = $link = new \PDO("sqlite:$tmp");
98
-	} else {
99
-		// Ouvrir (eventuellement creer la base)
100
-		$ok = $link = new \PDO("sqlite:$f");
101
-	}
102
-
103
-	if (!$ok) {
104
-		$e = _sqlite_last_error_from_link($link);
105
-		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS);
106
-
107
-		return false;
108
-	}
109
-
110
-	if ($link) {
111
-		$last_connect = [
112
-			'addr' => $addr,
113
-			'port' => $port,
114
-			'login' => $login,
115
-			'pass' => $pass,
116
-			'db' => $db,
117
-			'prefixe' => $prefixe,
118
-		];
119
-		// etre sur qu'on definit bien les fonctions a chaque nouvelle connexion
120
-		include_spip('req/sqlite_fonctions');
121
-		_sqlite_init_functions($link);
122
-	}
123
-
124
-	return [
125
-		'db' => $db,
126
-		'prefixe' => $prefixe ? $prefixe : $db,
127
-		'link' => $link,
128
-		'total_requetes' => 0,
129
-	];
62
+    _sqlite_init();
63
+
64
+    // determiner le dossier de la base : $addr ou _DIR_DB
65
+    $f = _DIR_DB;
66
+    if ($addr and strpos($addr, '/') !== false) {
67
+        $f = rtrim($addr, '/') . '/';
68
+    }
69
+
70
+    // un nom de base demande et impossible d'obtenir la base, on s'en va :
71
+    // il faut que la base existe ou que le repertoire parent soit writable
72
+    if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) {
73
+        spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS);
74
+
75
+        return false;
76
+    }
77
+
78
+    // charger les modules sqlite au besoin
79
+    if (!_sqlite_charger_version($sqlite_version)) {
80
+        spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS);
81
+
82
+        return false;
83
+    }
84
+
85
+    // chargement des constantes
86
+    // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
87
+    $define = 'spip_sqlite' . $sqlite_version . '_constantes';
88
+    $define();
89
+
90
+    $ok = false;
91
+    if (!$db) {
92
+        // si pas de db ->
93
+        // base temporaire tant qu'on ne connait pas son vrai nom
94
+        // pour tester la connexion
95
+        $db = '_sqlite' . $sqlite_version . '_install';
96
+        $tmp = _DIR_DB . $db . '.sqlite';
97
+        $ok = $link = new \PDO("sqlite:$tmp");
98
+    } else {
99
+        // Ouvrir (eventuellement creer la base)
100
+        $ok = $link = new \PDO("sqlite:$f");
101
+    }
102
+
103
+    if (!$ok) {
104
+        $e = _sqlite_last_error_from_link($link);
105
+        spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS);
106
+
107
+        return false;
108
+    }
109
+
110
+    if ($link) {
111
+        $last_connect = [
112
+            'addr' => $addr,
113
+            'port' => $port,
114
+            'login' => $login,
115
+            'pass' => $pass,
116
+            'db' => $db,
117
+            'prefixe' => $prefixe,
118
+        ];
119
+        // etre sur qu'on definit bien les fonctions a chaque nouvelle connexion
120
+        include_spip('req/sqlite_fonctions');
121
+        _sqlite_init_functions($link);
122
+    }
123
+
124
+    return [
125
+        'db' => $db,
126
+        'prefixe' => $prefixe ? $prefixe : $db,
127
+        'link' => $link,
128
+        'total_requetes' => 0,
129
+    ];
130 130
 }
131 131
 
132 132
 
@@ -145,14 +145,14 @@  discard block
 block discarded – undo
145 145
  *    Resultat de la requete
146 146
  */
147 147
 function spip_sqlite_query($query, $serveur = '', $requeter = true) {
148
-	#spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG);
149
-	#_sqlite_init(); // fait la premiere fois dans spip_sqlite
150
-	$query = spip_sqlite::traduire_requete($query, $serveur);
151
-	if (!$requeter) {
152
-		return $query;
153
-	}
148
+    #spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG);
149
+    #_sqlite_init(); // fait la premiere fois dans spip_sqlite
150
+    $query = spip_sqlite::traduire_requete($query, $serveur);
151
+    if (!$requeter) {
152
+        return $query;
153
+    }
154 154
 
155
-	return spip_sqlite::executer_requete($query, $serveur);
155
+    return spip_sqlite::executer_requete($query, $serveur);
156 156
 }
157 157
 
158 158
 
@@ -169,11 +169,11 @@  discard block
 block discarded – undo
169 169
  */
170 170
 function spip_sqlite_alter($query, $serveur = '', $requeter = true) {
171 171
 
172
-	$query = spip_sqlite_query("ALTER $query", $serveur, false);
173
-	// traduire la requete pour recuperer les bons noms de table
174
-	$query = spip_sqlite::traduire_requete($query, $serveur);
172
+    $query = spip_sqlite_query("ALTER $query", $serveur, false);
173
+    // traduire la requete pour recuperer les bons noms de table
174
+    $query = spip_sqlite::traduire_requete($query, $serveur);
175 175
 
176
-	/*
176
+    /*
177 177
 		 * la il faut faire les transformations
178 178
 		 * si ALTER TABLE x (DROP|CHANGE) y
179 179
 		 *
@@ -182,251 +182,251 @@  discard block
 block discarded – undo
182 182
 		 * 3) faire chaque requete independemment
183 183
 		 */
184 184
 
185
-	// 1
186
-	if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) {
187
-		$debut = $regs[1];
188
-		$table = $regs[3];
189
-		$suite = $regs[4];
190
-	} else {
191
-		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR);
192
-
193
-		return false;
194
-	}
195
-
196
-	// 2
197
-	// il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
198
-	// tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux
199
-	// ou revoir l'api de sql_alter en creant un
200
-	// sql_alter_table($table,array($actions));
201
-	$todo = explode(',', $suite);
202
-
203
-	// on remet les morceaux dechires ensembles... que c'est laid !
204
-	$todo2 = [];
205
-	$i = 0;
206
-	$ouverte = false;
207
-	while ($do = array_shift($todo)) {
208
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
209
-		$o = (false !== strpos($do, '('));
210
-		$f = (false !== strpos($do, ')'));
211
-		if ($o and !$f) {
212
-			$ouverte = true;
213
-		} elseif ($f) {
214
-			$ouverte = false;
215
-		}
216
-		if (!$ouverte) {
217
-			$i++;
218
-		}
219
-	}
220
-
221
-	// 3
222
-	$resultats = [];
223
-	foreach ($todo2 as $do) {
224
-		$do = trim($do);
225
-		if (
226
-			!preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP'
227
-			. '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME'
228
-			. '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE'
229
-			. '|ADD COLUMN|ADD'
230
-			. ')\s*([^\s]*)\s*(.*)?/i', $do, $matches)
231
-		) {
232
-			spip_log(
233
-				"SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)",
234
-				'sqlite.' . _LOG_ERREUR
235
-			);
236
-
237
-			return false;
238
-		}
239
-
240
-		$cle = strtoupper($matches[1]);
241
-		$colonne_origine = $matches[2];
242
-		$colonne_destination = '';
243
-
244
-		$def = $matches[3];
245
-
246
-		// eluder une eventuelle clause before|after|first inutilisable
247
-		$defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def));
248
-		$defo = $defr; // garder la def d'origine pour certains cas
249
-		// remplacer les definitions venant de mysql
250
-		$defr = _sqlite_remplacements_definitions_table($defr);
251
-
252
-		// reinjecter dans le do
253
-		$do = str_replace($def, $defr, $do);
254
-		$def = $defr;
255
-
256
-		switch ($cle) {
257
-			// suppression d'un index
258
-			case 'DROP KEY':
259
-			case 'DROP INDEX':
260
-				$nom_index = $colonne_origine;
261
-				spip_sqlite_drop_index($nom_index, $table, $serveur);
262
-				break;
263
-
264
-			// suppression d'une pk
265
-			case 'DROP PRIMARY KEY':
266
-				if (
267
-					!_sqlite_modifier_table(
268
-						$table,
269
-						$colonne_origine,
270
-						['key' => ['PRIMARY KEY' => '']],
271
-						$serveur
272
-					)
273
-				) {
274
-					return false;
275
-				}
276
-				break;
277
-			// suppression d'une colonne
278
-			case 'DROP COLUMN':
279
-			case 'DROP':
280
-				if (
281
-					!_sqlite_modifier_table(
282
-						$table,
283
-						[$colonne_origine => ''],
284
-						[],
285
-						$serveur
286
-					)
287
-				) {
288
-					return false;
289
-				}
290
-				break;
291
-
292
-			case 'CHANGE COLUMN':
293
-			case 'CHANGE':
294
-				// recuperer le nom de la future colonne
295
-				// on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
296
-				// en tenant compte de la cle primaire (ce qui est mieux)
297
-				$def = trim($defo);
298
-				$colonne_destination = substr($def, 0, strpos($def, ' '));
299
-				$def = substr($def, strlen($colonne_destination) + 1);
300
-
301
-				if (
302
-					!_sqlite_modifier_table(
303
-						$table,
304
-						[$colonne_origine => $colonne_destination],
305
-						['field' => [$colonne_destination => $def]],
306
-						$serveur
307
-					)
308
-				) {
309
-					return false;
310
-				}
311
-				break;
312
-
313
-			case 'MODIFY':
314
-				// on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
315
-				// en tenant compte de la cle primaire (ce qui est mieux)
316
-				if (
317
-					!_sqlite_modifier_table(
318
-						$table,
319
-						$colonne_origine,
320
-						['field' => [$colonne_origine => $defo]],
321
-						$serveur
322
-					)
323
-				) {
324
-					return false;
325
-				}
326
-				break;
327
-
328
-			// pas geres en sqlite2
329
-			case 'RENAME':
330
-				$do = 'RENAME TO' . substr($do, 6);
331
-			case 'RENAME TO':
332
-				if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
333
-					spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
334
-
335
-					return false;
336
-				}
337
-				break;
338
-
339
-			// ajout d'une pk
340
-			case 'ADD PRIMARY KEY':
341
-				$pk = trim(substr($do, 16));
342
-				$pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk;
343
-				if (
344
-					!_sqlite_modifier_table(
345
-						$table,
346
-						$colonne_origine,
347
-						['key' => ['PRIMARY KEY' => $pk]],
348
-						$serveur
349
-					)
350
-				) {
351
-					return false;
352
-				}
353
-				break;
354
-			// ajout d'un index
355
-			case 'ADD UNIQUE KEY':
356
-			case 'ADD UNIQUE':
357
-				$unique = true;
358
-			case 'ADD INDEX':
359
-			case 'ADD KEY':
360
-				if (!isset($unique)) {
361
-					$unique = false;
362
-				}
363
-				// peut etre "(colonne)" ou "nom_index (colonnes)"
364
-				// bug potentiel si qqn met "(colonne, colonne)"
365
-				//
366
-				// nom_index (colonnes)
367
-				if ($def) {
368
-					$colonnes = substr($def, 1, -1);
369
-					$nom_index = $colonne_origine;
370
-				} else {
371
-					// (colonne)
372
-					if ($colonne_origine[0] == '(') {
373
-						$colonnes = substr($colonne_origine, 1, -1);
374
-						if (false !== strpos(',', $colonnes)) {
375
-							spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes'
376
-								. " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR);
377
-							break;
378
-						} else {
379
-							$nom_index = $colonnes;
380
-						}
381
-					} // nom_index
382
-					else {
383
-						$nom_index = $colonnes = $colonne_origine;
384
-					}
385
-				}
386
-				spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur);
387
-				break;
388
-
389
-			// pas geres en sqlite2
390
-			case 'ADD COLUMN':
391
-				$do = 'ADD' . substr($do, 10);
392
-			case 'ADD':
393
-			default:
394
-				if (!preg_match(',primary\s+key,i', $do)) {
395
-					if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
396
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
397
-
398
-						return false;
399
-					}
400
-					break;
401
-				}
402
-				// ou si la colonne est aussi primary key
403
-				// cas du add id_truc int primary key
404
-				// ajout d'une colonne qui passe en primary key directe
405
-				else {
406
-					$def = trim(substr($do, 3));
407
-					$colonne_ajoutee = substr($def, 0, strpos($def, ' '));
408
-					$def = substr($def, strlen($colonne_ajoutee) + 1);
409
-					$opts = [];
410
-					if (preg_match(',primary\s+key,i', $def)) {
411
-						$opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee];
412
-						$def = preg_replace(',primary\s+key,i', '', $def);
413
-					}
414
-					$opts['field'] = [$colonne_ajoutee => $def];
415
-					if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) {
416
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
417
-
418
-						return false;
419
-					}
420
-				}
421
-				break;
422
-		}
423
-		// tout est bon, ouf !
424
-		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO);
425
-	}
426
-
427
-	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO);
428
-
429
-	return true;
185
+    // 1
186
+    if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) {
187
+        $debut = $regs[1];
188
+        $table = $regs[3];
189
+        $suite = $regs[4];
190
+    } else {
191
+        spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR);
192
+
193
+        return false;
194
+    }
195
+
196
+    // 2
197
+    // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
198
+    // tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux
199
+    // ou revoir l'api de sql_alter en creant un
200
+    // sql_alter_table($table,array($actions));
201
+    $todo = explode(',', $suite);
202
+
203
+    // on remet les morceaux dechires ensembles... que c'est laid !
204
+    $todo2 = [];
205
+    $i = 0;
206
+    $ouverte = false;
207
+    while ($do = array_shift($todo)) {
208
+        $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
209
+        $o = (false !== strpos($do, '('));
210
+        $f = (false !== strpos($do, ')'));
211
+        if ($o and !$f) {
212
+            $ouverte = true;
213
+        } elseif ($f) {
214
+            $ouverte = false;
215
+        }
216
+        if (!$ouverte) {
217
+            $i++;
218
+        }
219
+    }
220
+
221
+    // 3
222
+    $resultats = [];
223
+    foreach ($todo2 as $do) {
224
+        $do = trim($do);
225
+        if (
226
+            !preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP'
227
+            . '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME'
228
+            . '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE'
229
+            . '|ADD COLUMN|ADD'
230
+            . ')\s*([^\s]*)\s*(.*)?/i', $do, $matches)
231
+        ) {
232
+            spip_log(
233
+                "SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)",
234
+                'sqlite.' . _LOG_ERREUR
235
+            );
236
+
237
+            return false;
238
+        }
239
+
240
+        $cle = strtoupper($matches[1]);
241
+        $colonne_origine = $matches[2];
242
+        $colonne_destination = '';
243
+
244
+        $def = $matches[3];
245
+
246
+        // eluder une eventuelle clause before|after|first inutilisable
247
+        $defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def));
248
+        $defo = $defr; // garder la def d'origine pour certains cas
249
+        // remplacer les definitions venant de mysql
250
+        $defr = _sqlite_remplacements_definitions_table($defr);
251
+
252
+        // reinjecter dans le do
253
+        $do = str_replace($def, $defr, $do);
254
+        $def = $defr;
255
+
256
+        switch ($cle) {
257
+            // suppression d'un index
258
+            case 'DROP KEY':
259
+            case 'DROP INDEX':
260
+                $nom_index = $colonne_origine;
261
+                spip_sqlite_drop_index($nom_index, $table, $serveur);
262
+                break;
263
+
264
+            // suppression d'une pk
265
+            case 'DROP PRIMARY KEY':
266
+                if (
267
+                    !_sqlite_modifier_table(
268
+                        $table,
269
+                        $colonne_origine,
270
+                        ['key' => ['PRIMARY KEY' => '']],
271
+                        $serveur
272
+                    )
273
+                ) {
274
+                    return false;
275
+                }
276
+                break;
277
+            // suppression d'une colonne
278
+            case 'DROP COLUMN':
279
+            case 'DROP':
280
+                if (
281
+                    !_sqlite_modifier_table(
282
+                        $table,
283
+                        [$colonne_origine => ''],
284
+                        [],
285
+                        $serveur
286
+                    )
287
+                ) {
288
+                    return false;
289
+                }
290
+                break;
291
+
292
+            case 'CHANGE COLUMN':
293
+            case 'CHANGE':
294
+                // recuperer le nom de la future colonne
295
+                // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
296
+                // en tenant compte de la cle primaire (ce qui est mieux)
297
+                $def = trim($defo);
298
+                $colonne_destination = substr($def, 0, strpos($def, ' '));
299
+                $def = substr($def, strlen($colonne_destination) + 1);
300
+
301
+                if (
302
+                    !_sqlite_modifier_table(
303
+                        $table,
304
+                        [$colonne_origine => $colonne_destination],
305
+                        ['field' => [$colonne_destination => $def]],
306
+                        $serveur
307
+                    )
308
+                ) {
309
+                    return false;
310
+                }
311
+                break;
312
+
313
+            case 'MODIFY':
314
+                // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
315
+                // en tenant compte de la cle primaire (ce qui est mieux)
316
+                if (
317
+                    !_sqlite_modifier_table(
318
+                        $table,
319
+                        $colonne_origine,
320
+                        ['field' => [$colonne_origine => $defo]],
321
+                        $serveur
322
+                    )
323
+                ) {
324
+                    return false;
325
+                }
326
+                break;
327
+
328
+            // pas geres en sqlite2
329
+            case 'RENAME':
330
+                $do = 'RENAME TO' . substr($do, 6);
331
+            case 'RENAME TO':
332
+                if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
333
+                    spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
334
+
335
+                    return false;
336
+                }
337
+                break;
338
+
339
+            // ajout d'une pk
340
+            case 'ADD PRIMARY KEY':
341
+                $pk = trim(substr($do, 16));
342
+                $pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk;
343
+                if (
344
+                    !_sqlite_modifier_table(
345
+                        $table,
346
+                        $colonne_origine,
347
+                        ['key' => ['PRIMARY KEY' => $pk]],
348
+                        $serveur
349
+                    )
350
+                ) {
351
+                    return false;
352
+                }
353
+                break;
354
+            // ajout d'un index
355
+            case 'ADD UNIQUE KEY':
356
+            case 'ADD UNIQUE':
357
+                $unique = true;
358
+            case 'ADD INDEX':
359
+            case 'ADD KEY':
360
+                if (!isset($unique)) {
361
+                    $unique = false;
362
+                }
363
+                // peut etre "(colonne)" ou "nom_index (colonnes)"
364
+                // bug potentiel si qqn met "(colonne, colonne)"
365
+                //
366
+                // nom_index (colonnes)
367
+                if ($def) {
368
+                    $colonnes = substr($def, 1, -1);
369
+                    $nom_index = $colonne_origine;
370
+                } else {
371
+                    // (colonne)
372
+                    if ($colonne_origine[0] == '(') {
373
+                        $colonnes = substr($colonne_origine, 1, -1);
374
+                        if (false !== strpos(',', $colonnes)) {
375
+                            spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes'
376
+                                . " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR);
377
+                            break;
378
+                        } else {
379
+                            $nom_index = $colonnes;
380
+                        }
381
+                    } // nom_index
382
+                    else {
383
+                        $nom_index = $colonnes = $colonne_origine;
384
+                    }
385
+                }
386
+                spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur);
387
+                break;
388
+
389
+            // pas geres en sqlite2
390
+            case 'ADD COLUMN':
391
+                $do = 'ADD' . substr($do, 10);
392
+            case 'ADD':
393
+            default:
394
+                if (!preg_match(',primary\s+key,i', $do)) {
395
+                    if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
396
+                        spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
397
+
398
+                        return false;
399
+                    }
400
+                    break;
401
+                }
402
+                // ou si la colonne est aussi primary key
403
+                // cas du add id_truc int primary key
404
+                // ajout d'une colonne qui passe en primary key directe
405
+                else {
406
+                    $def = trim(substr($do, 3));
407
+                    $colonne_ajoutee = substr($def, 0, strpos($def, ' '));
408
+                    $def = substr($def, strlen($colonne_ajoutee) + 1);
409
+                    $opts = [];
410
+                    if (preg_match(',primary\s+key,i', $def)) {
411
+                        $opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee];
412
+                        $def = preg_replace(',primary\s+key,i', '', $def);
413
+                    }
414
+                    $opts['field'] = [$colonne_ajoutee => $def];
415
+                    if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) {
416
+                        spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
417
+
418
+                        return false;
419
+                    }
420
+                }
421
+                break;
422
+        }
423
+        // tout est bon, ouf !
424
+        spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO);
425
+    }
426
+
427
+    spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO);
428
+
429
+    return true;
430 430
 }
431 431
 
432 432
 
@@ -449,38 +449,38 @@  discard block
 block discarded – undo
449 449
  *     - true si la requête réussie, false sinon.
450 450
  */
451 451
 function spip_sqlite_create(
452
-	$nom,
453
-	$champs,
454
-	$cles,
455
-	$autoinc = false,
456
-	$temporary = false,
457
-	$serveur = '',
458
-	$requeter = true
452
+    $nom,
453
+    $champs,
454
+    $cles,
455
+    $autoinc = false,
456
+    $temporary = false,
457
+    $serveur = '',
458
+    $requeter = true
459 459
 ) {
460
-	$query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter);
461
-	if (!$query) {
462
-		return false;
463
-	}
464
-	$res = spip_sqlite_query($query, $serveur, $requeter);
465
-
466
-	// SQLite ne cree pas les KEY sur les requetes CREATE TABLE
467
-	// il faut donc les faire creer ensuite
468
-	if (!$requeter) {
469
-		return $res;
470
-	}
471
-
472
-	$ok = $res ? true : false;
473
-	if ($ok) {
474
-		foreach ($cles as $k => $v) {
475
-			if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) {
476
-				$index = trim(substr($k, strlen($m[1])));
477
-				$unique = (strlen($m[1]) > 3);
478
-				$ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur);
479
-			}
480
-		}
481
-	}
482
-
483
-	return $ok ? true : false;
460
+    $query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter);
461
+    if (!$query) {
462
+        return false;
463
+    }
464
+    $res = spip_sqlite_query($query, $serveur, $requeter);
465
+
466
+    // SQLite ne cree pas les KEY sur les requetes CREATE TABLE
467
+    // il faut donc les faire creer ensuite
468
+    if (!$requeter) {
469
+        return $res;
470
+    }
471
+
472
+    $ok = $res ? true : false;
473
+    if ($ok) {
474
+        foreach ($cles as $k => $v) {
475
+            if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) {
476
+                $index = trim(substr($k, strlen($m[1])));
477
+                $unique = (strlen($m[1]) > 3);
478
+                $ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur);
479
+            }
480
+        }
481
+    }
482
+
483
+    return $ok ? true : false;
484 484
 }
485 485
 
486 486
 /**
@@ -493,21 +493,21 @@  discard block
 block discarded – undo
493 493
  * @return bool true si la base est créee.
494 494
  **/
495 495
 function spip_sqlite_create_base($nom, $serveur = '', $option = true) {
496
-	$f = $nom . '.sqlite';
497
-	if (strpos($nom, '/') === false) {
498
-		$f = _DIR_DB . $f;
499
-	}
496
+    $f = $nom . '.sqlite';
497
+    if (strpos($nom, '/') === false) {
498
+        $f = _DIR_DB . $f;
499
+    }
500 500
 
501
-	$ok = new \PDO("sqlite:$f");
501
+    $ok = new \PDO("sqlite:$f");
502 502
 
503
-	if ($ok) {
504
-		unset($ok);
503
+    if ($ok) {
504
+        unset($ok);
505 505
 
506
-		return true;
507
-	}
508
-	unset($ok);
506
+        return true;
507
+    }
508
+    unset($ok);
509 509
 
510
-	return false;
510
+    return false;
511 511
 }
512 512
 
513 513
 
@@ -528,22 +528,22 @@  discard block
 block discarded – undo
528 528
  *     - string texte de la requête si $requeter vaut false
529 529
  */
530 530
 function spip_sqlite_create_view($nom, $query_select, $serveur = '', $requeter = true) {
531
-	if (!$query_select) {
532
-		return false;
533
-	}
534
-	// vue deja presente
535
-	if (sql_showtable($nom, false, $serveur)) {
536
-		spip_log(
537
-			"Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",
538
-			'sqlite.' . _LOG_ERREUR
539
-		);
531
+    if (!$query_select) {
532
+        return false;
533
+    }
534
+    // vue deja presente
535
+    if (sql_showtable($nom, false, $serveur)) {
536
+        spip_log(
537
+            "Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",
538
+            'sqlite.' . _LOG_ERREUR
539
+        );
540 540
 
541
-		return false;
542
-	}
541
+        return false;
542
+    }
543 543
 
544
-	$query = "CREATE VIEW $nom AS " . $query_select;
544
+    $query = "CREATE VIEW $nom AS " . $query_select;
545 545
 
546
-	return spip_sqlite_query($query, $serveur, $requeter);
546
+    return spip_sqlite_query($query, $serveur, $requeter);
547 547
 }
548 548
 
549 549
 /**
@@ -565,54 +565,54 @@  discard block
 block discarded – undo
565 565
  *    string : requête, false si erreur, true sinon.
566 566
  */
567 567
 function spip_sqlite_create_index($nom, $table, $champs, $unique = '', $serveur = '', $requeter = true) {
568
-	if (!($nom or $table or $champs)) {
569
-		spip_log(
570
-			"Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))',
571
-			'sqlite.' . _LOG_ERREUR
572
-		);
573
-
574
-		return false;
575
-	}
576
-
577
-	// SQLite ne differentie pas noms des index en fonction des tables
578
-	// il faut donc creer des noms uniques d'index pour une base sqlite
579
-	$nom = $table . '_' . $nom;
580
-	// enlever d'eventuelles parentheses deja presentes sur champs
581
-	if (!is_array($champs)) {
582
-		if ($champs[0] == '(') {
583
-			$champs = substr($champs, 1, -1);
584
-		}
585
-		$champs = [$champs];
586
-		// supprimer l'info de longueur d'index mysql en fin de champ
587
-		$champs = preg_replace(',\(\d+\)$,', '', $champs);
588
-	}
589
-
590
-	$ifnotexists = '';
591
-	$version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur);
592
-	if (!function_exists('spip_version_compare')) {
593
-		include_spip('plugins/installer');
594
-	}
595
-
596
-	if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
597
-		$ifnotexists = ' IF NOT EXISTS';
598
-	} else {
599
-		/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
600
-		$a = spip_sqlite_showtable($table, $serveur);
601
-		if (isset($a['key']['KEY ' . $nom])) {
602
-			return true;
603
-		}
604
-	}
605
-
606
-	$query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')';
607
-	$res = spip_sqlite_query($query, $serveur, $requeter);
608
-	if (!$requeter) {
609
-		return $res;
610
-	}
611
-	if ($res) {
612
-		return true;
613
-	} else {
614
-		return false;
615
-	}
568
+    if (!($nom or $table or $champs)) {
569
+        spip_log(
570
+            "Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))',
571
+            'sqlite.' . _LOG_ERREUR
572
+        );
573
+
574
+        return false;
575
+    }
576
+
577
+    // SQLite ne differentie pas noms des index en fonction des tables
578
+    // il faut donc creer des noms uniques d'index pour une base sqlite
579
+    $nom = $table . '_' . $nom;
580
+    // enlever d'eventuelles parentheses deja presentes sur champs
581
+    if (!is_array($champs)) {
582
+        if ($champs[0] == '(') {
583
+            $champs = substr($champs, 1, -1);
584
+        }
585
+        $champs = [$champs];
586
+        // supprimer l'info de longueur d'index mysql en fin de champ
587
+        $champs = preg_replace(',\(\d+\)$,', '', $champs);
588
+    }
589
+
590
+    $ifnotexists = '';
591
+    $version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur);
592
+    if (!function_exists('spip_version_compare')) {
593
+        include_spip('plugins/installer');
594
+    }
595
+
596
+    if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
597
+        $ifnotexists = ' IF NOT EXISTS';
598
+    } else {
599
+        /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
600
+        $a = spip_sqlite_showtable($table, $serveur);
601
+        if (isset($a['key']['KEY ' . $nom])) {
602
+            return true;
603
+        }
604
+    }
605
+
606
+    $query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')';
607
+    $res = spip_sqlite_query($query, $serveur, $requeter);
608
+    if (!$requeter) {
609
+        return $res;
610
+    }
611
+    if ($res) {
612
+        return true;
613
+    } else {
614
+        return false;
615
+    }
616 616
 }
617 617
 
618 618
 /**
@@ -629,31 +629,31 @@  discard block
 block discarded – undo
629 629
  * @return int                 Nombre de lignes
630 630
  */
631 631
 function spip_sqlite_count($r, $serveur = '', $requeter = true) {
632
-	if (!$r) {
633
-		return 0;
634
-	}
635
-
636
-	// select ou autre (insert, update,...) ?
637
-	// (link,requete) a compter
638
-	if (is_array($r->spipSqliteRowCount)) {
639
-		list($link, $query) = $r->spipSqliteRowCount;
640
-		// amelioration possible a tester intensivement : pas de order by pour compter !
641
-		// $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query);
642
-		$query = "SELECT count(*) as zzzzsqlitecount FROM ($query)";
643
-		$l = $link->query($query);
644
-		$i = 0;
645
-		if ($l and $z = $l->fetch()) {
646
-			$i = $z['zzzzsqlitecount'];
647
-		}
648
-		$r->spipSqliteRowCount = $i;
649
-	}
650
-	if (isset($r->spipSqliteRowCount)) {
651
-		// Ce compte est faux s'il y a des limit dans la requete :(
652
-		// il retourne le nombre d'enregistrements sans le limit
653
-		return $r->spipSqliteRowCount;
654
-	} else {
655
-		return $r->rowCount();
656
-	}
632
+    if (!$r) {
633
+        return 0;
634
+    }
635
+
636
+    // select ou autre (insert, update,...) ?
637
+    // (link,requete) a compter
638
+    if (is_array($r->spipSqliteRowCount)) {
639
+        list($link, $query) = $r->spipSqliteRowCount;
640
+        // amelioration possible a tester intensivement : pas de order by pour compter !
641
+        // $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query);
642
+        $query = "SELECT count(*) as zzzzsqlitecount FROM ($query)";
643
+        $l = $link->query($query);
644
+        $i = 0;
645
+        if ($l and $z = $l->fetch()) {
646
+            $i = $z['zzzzsqlitecount'];
647
+        }
648
+        $r->spipSqliteRowCount = $i;
649
+    }
650
+    if (isset($r->spipSqliteRowCount)) {
651
+        // Ce compte est faux s'il y a des limit dans la requete :(
652
+        // il retourne le nombre d'enregistrements sans le limit
653
+        return $r->spipSqliteRowCount;
654
+    } else {
655
+        return $r->rowCount();
656
+    }
657 657
 }
658 658
 
659 659
 
@@ -672,30 +672,30 @@  discard block
 block discarded – undo
672 672
  *     - false si la requête a échouée
673 673
  **/
674 674
 function spip_sqlite_countsel(
675
-	$from = [],
676
-	$where = [],
677
-	$groupby = '',
678
-	$having = [],
679
-	$serveur = '',
680
-	$requeter = true
675
+    $from = [],
676
+    $where = [],
677
+    $groupby = '',
678
+    $having = [],
679
+    $serveur = '',
680
+    $requeter = true
681 681
 ) {
682
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
683
-	$r = spip_sqlite_select(
684
-		"COUNT($c)",
685
-		$from,
686
-		$where,
687
-		'',
688
-		'',
689
-		'',
690
-		$having,
691
-		$serveur,
692
-		$requeter
693
-	);
694
-	if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3
695
-		list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur);
696
-	}
697
-
698
-	return $r;
682
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
683
+    $r = spip_sqlite_select(
684
+        "COUNT($c)",
685
+        $from,
686
+        $where,
687
+        '',
688
+        '',
689
+        '',
690
+        $having,
691
+        $serveur,
692
+        $requeter
693
+    );
694
+    if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3
695
+        list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur);
696
+    }
697
+
698
+    return $r;
699 699
 }
700 700
 
701 701
 
@@ -712,24 +712,24 @@  discard block
 block discarded – undo
712 712
  *     - False en cas d'erreur.
713 713
  **/
714 714
 function spip_sqlite_delete($table, $where = '', $serveur = '', $requeter = true) {
715
-	$res = spip_sqlite_query(
716
-		_sqlite_calculer_expression('DELETE FROM', $table, ',')
717
-		. _sqlite_calculer_expression('WHERE', $where),
718
-		$serveur,
719
-		$requeter
720
-	);
715
+    $res = spip_sqlite_query(
716
+        _sqlite_calculer_expression('DELETE FROM', $table, ',')
717
+        . _sqlite_calculer_expression('WHERE', $where),
718
+        $serveur,
719
+        $requeter
720
+    );
721 721
 
722
-	// renvoyer la requete inerte si demandee
723
-	if (!$requeter) {
724
-		return $res;
725
-	}
722
+    // renvoyer la requete inerte si demandee
723
+    if (!$requeter) {
724
+        return $res;
725
+    }
726 726
 
727
-	if ($res) {
728
-		$link = _sqlite_link($serveur);
729
-		return $res->rowCount();
730
-	} else {
731
-		return false;
732
-	}
727
+    if ($res) {
728
+        $link = _sqlite_link($serveur);
729
+        return $res->rowCount();
730
+    } else {
731
+        return false;
732
+    }
733 733
 }
734 734
 
735 735
 
@@ -745,15 +745,15 @@  discard block
 block discarded – undo
745 745
  *     - true si la requête a réussie, false sinon
746 746
  */
747 747
 function spip_sqlite_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
748
-	if ($exist) {
749
-		$exist = ' IF EXISTS';
750
-	}
748
+    if ($exist) {
749
+        $exist = ' IF EXISTS';
750
+    }
751 751
 
752
-	if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) {
753
-		return true;
754
-	} else {
755
-		return false;
756
-	}
752
+    if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) {
753
+        return true;
754
+    } else {
755
+        return false;
756
+    }
757 757
 }
758 758
 
759 759
 
@@ -769,11 +769,11 @@  discard block
 block discarded – undo
769 769
  *     - true si la requête a réussie, false sinon
770 770
  */
771 771
 function spip_sqlite_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
772
-	if ($exist) {
773
-		$exist = ' IF EXISTS';
774
-	}
772
+    if ($exist) {
773
+        $exist = ' IF EXISTS';
774
+    }
775 775
 
776
-	return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter);
776
+    return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter);
777 777
 }
778 778
 
779 779
 /**
@@ -787,20 +787,20 @@  discard block
 block discarded – undo
787 787
  * @return bool ou requete
788 788
  */
789 789
 function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true) {
790
-	if (!($nom or $table)) {
791
-		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR);
790
+    if (!($nom or $table)) {
791
+        spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR);
792 792
 
793
-		return false;
794
-	}
793
+        return false;
794
+    }
795 795
 
796
-	// SQLite ne differentie pas noms des index en fonction des tables
797
-	// il faut donc creer des noms uniques d'index pour une base sqlite
798
-	$index = $table . '_' . $nom;
799
-	$exist = ' IF EXISTS';
796
+    // SQLite ne differentie pas noms des index en fonction des tables
797
+    // il faut donc creer des noms uniques d'index pour une base sqlite
798
+    $index = $table . '_' . $nom;
799
+    $exist = ' IF EXISTS';
800 800
 
801
-	$query = "DROP INDEX$exist $index";
801
+    $query = "DROP INDEX$exist $index";
802 802
 
803
-	return spip_sqlite_query($query, $serveur, $requeter);
803
+    return spip_sqlite_query($query, $serveur, $requeter);
804 804
 }
805 805
 
806 806
 /**
@@ -816,28 +816,28 @@  discard block
 block discarded – undo
816 816
  *     Erreur eventuelle
817 817
  **/
818 818
 function spip_sqlite_error($query = '', $serveur = '') {
819
-	$link = _sqlite_link($serveur);
819
+    $link = _sqlite_link($serveur);
820 820
 
821
-	if ($link) {
822
-		$errs = $link->errorInfo();
823
-		$s = _sqlite_last_error_from_link($link);
824
-	} else {
825
-		$s = ': aucune ressource sqlite (link)';
826
-	}
827
-	if ($s) {
828
-		$trace = debug_backtrace();
829
-		if ($trace[0]['function'] != 'spip_sqlite_error') {
830
-			spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR);
831
-		}
832
-	}
821
+    if ($link) {
822
+        $errs = $link->errorInfo();
823
+        $s = _sqlite_last_error_from_link($link);
824
+    } else {
825
+        $s = ': aucune ressource sqlite (link)';
826
+    }
827
+    if ($s) {
828
+        $trace = debug_backtrace();
829
+        if ($trace[0]['function'] != 'spip_sqlite_error') {
830
+            spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR);
831
+        }
832
+    }
833 833
 
834
-	return $s;
834
+    return $s;
835 835
 }
836 836
 
837 837
 function _sqlite_last_error_from_link($link) {
838
-	if ($link) {
839
-		$errs = $link->errorInfo();
840
-		/*
838
+    if ($link) {
839
+        $errs = $link->errorInfo();
840
+        /*
841 841
 			$errs[0]
842 842
 				numero SQLState ('HY000' souvent lors d'une erreur)
843 843
 				http://www.easysoft.com/developer/interfaces/odbc/sqlstate_status_return_codes.html
@@ -847,11 +847,11 @@  discard block
 block discarded – undo
847 847
 			$errs[2]
848 848
 				Le texte du message d'erreur
849 849
 		*/
850
-		if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur
851
-			return "$errs[2]";
852
-		}
853
-	}
854
-	return '';
850
+        if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur
851
+            return "$errs[2]";
852
+        }
853
+    }
854
+    return '';
855 855
 }
856 856
 
857 857
 /**
@@ -868,23 +868,23 @@  discard block
 block discarded – undo
868 868
  *    'HY000/1' : numéro de l'erreur SQLState / numéro d'erreur interne SQLite (en sqlite 3)
869 869
  **/
870 870
 function spip_sqlite_errno($serveur = '') {
871
-	$link = _sqlite_link($serveur);
871
+    $link = _sqlite_link($serveur);
872 872
 
873
-	if ($link) {
874
-		$t = $link->errorInfo();
875
-		$s = ltrim($t[0], '0'); // 00000 si pas d'erreur
876
-		if ($s) {
877
-			$s .= ' / ' . $t[1];
878
-		} // ajoute l'erreur du moteur SQLite
879
-	} else {
880
-		$s = ': aucune ressource sqlite (link)';
881
-	}
873
+    if ($link) {
874
+        $t = $link->errorInfo();
875
+        $s = ltrim($t[0], '0'); // 00000 si pas d'erreur
876
+        if ($s) {
877
+            $s .= ' / ' . $t[1];
878
+        } // ajoute l'erreur du moteur SQLite
879
+    } else {
880
+        $s = ': aucune ressource sqlite (link)';
881
+    }
882 882
 
883
-	if ($s) {
884
-		spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR);
885
-	}
883
+    if ($s) {
884
+        spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR);
885
+    }
886 886
 
887
-	return $s ? $s : 0;
887
+    return $s ? $s : 0;
888 888
 }
889 889
 
890 890
 
@@ -900,19 +900,19 @@  discard block
 block discarded – undo
900 900
  *     - false si on a pas pu avoir d'explication
901 901
  */
902 902
 function spip_sqlite_explain($query, $serveur = '', $requeter = true) {
903
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
904
-		return [];
905
-	}
903
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
904
+        return [];
905
+    }
906 906
 
907
-	$query = spip_sqlite::traduire_requete($query, $serveur);
908
-	$query = 'EXPLAIN ' . $query;
909
-	if (!$requeter) {
910
-		return $query;
911
-	}
912
-	// on ne trace pas ces requetes, sinon on obtient un tracage sans fin...
913
-	$r = spip_sqlite::executer_requete($query, $serveur, false);
907
+    $query = spip_sqlite::traduire_requete($query, $serveur);
908
+    $query = 'EXPLAIN ' . $query;
909
+    if (!$requeter) {
910
+        return $query;
911
+    }
912
+    // on ne trace pas ces requetes, sinon on obtient un tracage sans fin...
913
+    $r = spip_sqlite::executer_requete($query, $serveur, false);
914 914
 
915
-	return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier
915
+    return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier
916 916
 }
917 917
 
918 918
 
@@ -929,30 +929,30 @@  discard block
 block discarded – undo
929 929
  */
930 930
 function spip_sqlite_fetch($r, $t = '', $serveur = '', $requeter = true) {
931 931
 
932
-	$link = _sqlite_link($serveur);
933
-	$t = $t ? $t : SPIP_SQLITE3_ASSOC;
932
+    $link = _sqlite_link($serveur);
933
+    $t = $t ? $t : SPIP_SQLITE3_ASSOC;
934 934
 
935
-	$retour = false;
936
-	if ($r) {
937
-		$retour = $r->fetch($t);
938
-	}
935
+    $retour = false;
936
+    if ($r) {
937
+        $retour = $r->fetch($t);
938
+    }
939 939
 
940
-	// Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff !
941
-	// suppression de 'table.' pour toutes les cles (c'est un peu violent !)
942
-	// c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non
943
-	if (
944
-		$retour
945
-		and strpos(implode('', array_keys($retour)), '.') !== false
946
-	) {
947
-		foreach ($retour as $cle => $val) {
948
-			if (($pos = strpos($cle, '.')) !== false) {
949
-				$retour[substr($cle, $pos + 1)] = &$retour[$cle];
950
-				unset($retour[$cle]);
951
-			}
952
-		}
953
-	}
940
+    // Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff !
941
+    // suppression de 'table.' pour toutes les cles (c'est un peu violent !)
942
+    // c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non
943
+    if (
944
+        $retour
945
+        and strpos(implode('', array_keys($retour)), '.') !== false
946
+    ) {
947
+        foreach ($retour as $cle => $val) {
948
+            if (($pos = strpos($cle, '.')) !== false) {
949
+                $retour[substr($cle, $pos + 1)] = &$retour[$cle];
950
+                unset($retour[$cle]);
951
+            }
952
+        }
953
+    }
954 954
 
955
-	return $retour;
955
+    return $retour;
956 956
 }
957 957
 
958 958
 /**
@@ -965,8 +965,8 @@  discard block
 block discarded – undo
965 965
  * @return bool True si déplacement réussi, false sinon.
966 966
  **/
967 967
 function spip_sqlite_seek($r, $row_number, $serveur = '', $requeter = true) {
968
-	// encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind...
969
-	return false;
968
+    // encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind...
969
+    return false;
970 970
 }
971 971
 
972 972
 
@@ -982,10 +982,10 @@  discard block
 block discarded – undo
982 982
  * @return bool                True si réussi
983 983
  */
984 984
 function spip_sqlite_free(&$r, $serveur = '', $requeter = true) {
985
-	unset($r);
985
+    unset($r);
986 986
 
987
-	return true;
988
-	//return sqlite_free_result($r);
987
+    return true;
988
+    //return sqlite_free_result($r);
989 989
 }
990 990
 
991 991
 
@@ -1000,8 +1000,8 @@  discard block
 block discarded – undo
1000 1000
  * @return void
1001 1001
  */
1002 1002
 function spip_sqlite_get_charset($charset = [], $serveur = '', $requeter = true) {
1003
-	//$c = !$charset ? '' : (" LIKE "._q($charset['charset']));
1004
-	//return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur);
1003
+    //$c = !$charset ? '' : (" LIKE "._q($charset['charset']));
1004
+    //return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur);
1005 1005
 }
1006 1006
 
1007 1007
 
@@ -1016,7 +1016,7 @@  discard block
 block discarded – undo
1016 1016
  *     Valeur hexadécimale pour SQLite
1017 1017
  **/
1018 1018
 function spip_sqlite_hex($v) {
1019
-	return hexdec($v);
1019
+    return hexdec($v);
1020 1020
 }
1021 1021
 
1022 1022
 
@@ -1038,7 +1038,7 @@  discard block
 block discarded – undo
1038 1038
  *     Expression de requête SQL
1039 1039
  **/
1040 1040
 function spip_sqlite_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1041
-	return "($val $not IN ($valeurs))";
1041
+    return "($val $not IN ($valeurs))";
1042 1042
 }
1043 1043
 
1044 1044
 
@@ -1066,20 +1066,20 @@  discard block
 block discarded – undo
1066 1066
  **/
1067 1067
 function spip_sqlite_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1068 1068
 
1069
-	$query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1070
-	if ($r = spip_sqlite_query($query, $serveur, $requeter)) {
1071
-		if (!$requeter) {
1072
-			return $r;
1073
-		}
1074
-		$nb = spip_sqlite::last_insert_id($serveur);
1075
-	} else {
1076
-		$nb = false;
1077
-	}
1069
+    $query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1070
+    if ($r = spip_sqlite_query($query, $serveur, $requeter)) {
1071
+        if (!$requeter) {
1072
+            return $r;
1073
+        }
1074
+        $nb = spip_sqlite::last_insert_id($serveur);
1075
+    } else {
1076
+        $nb = false;
1077
+    }
1078 1078
 
1079
-	$err = spip_sqlite_error($query, $serveur);
1079
+    $err = spip_sqlite_error($query, $serveur);
1080 1080
 
1081
-	// cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1082
-	return isset($_GET['var_profile']) ? $r : $nb;
1081
+    // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1082
+    return isset($_GET['var_profile']) ? $r : $nb;
1083 1083
 }
1084 1084
 
1085 1085
 
@@ -1104,28 +1104,28 @@  discard block
 block discarded – undo
1104 1104
  *     - Tableau de description de la requête et du temps d'exécution, si var_profile activé
1105 1105
  **/
1106 1106
 function spip_sqlite_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
1107
-	if (!$desc) {
1108
-		$desc = description_table($table, $serveur);
1109
-	}
1110
-	if (!$desc) {
1111
-		die("$table insertion sans description");
1112
-	}
1113
-	$fields = isset($desc['field']) ? $desc['field'] : [];
1107
+    if (!$desc) {
1108
+        $desc = description_table($table, $serveur);
1109
+    }
1110
+    if (!$desc) {
1111
+        die("$table insertion sans description");
1112
+    }
1113
+    $fields = isset($desc['field']) ? $desc['field'] : [];
1114 1114
 
1115
-	foreach ($couples as $champ => $val) {
1116
-		$couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1117
-	}
1115
+    foreach ($couples as $champ => $val) {
1116
+        $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1117
+    }
1118 1118
 
1119
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1120
-	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1119
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1120
+    $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1121 1121
 
1122
-	$cles = $valeurs = '';
1123
-	if (count($couples)) {
1124
-		$cles = '(' . join(',', array_keys($couples)) . ')';
1125
-		$valeurs = '(' . join(',', $couples) . ')';
1126
-	}
1122
+    $cles = $valeurs = '';
1123
+    if (count($couples)) {
1124
+        $cles = '(' . join(',', array_keys($couples)) . ')';
1125
+        $valeurs = '(' . join(',', $couples) . ')';
1126
+    }
1127 1127
 
1128
-	return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
1128
+    return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
1129 1129
 }
1130 1130
 
1131 1131
 
@@ -1149,70 +1149,70 @@  discard block
 block discarded – undo
1149 1149
  *     - False en cas d'erreur.
1150 1150
  **/
1151 1151
 function spip_sqlite_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
1152
-	if (!$desc) {
1153
-		$desc = description_table($table, $serveur);
1154
-	}
1155
-	if (!$desc) {
1156
-		die("$table insertion sans description");
1157
-	}
1158
-	if (!isset($desc['field'])) {
1159
-		$desc['field'] = [];
1160
-	}
1161
-
1162
-	// recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci
1163
-	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1164
-
1165
-	// seul le nom de la table est a traduire ici :
1166
-	// le faire une seule fois au debut
1167
-	$query_start = "INSERT INTO $table ";
1168
-	$query_start = spip_sqlite::traduire_requete($query_start, $serveur);
1169
-
1170
-	// ouvrir une transaction
1171
-	if ($requeter) {
1172
-		spip_sqlite::demarrer_transaction($serveur);
1173
-	}
1174
-
1175
-	while ($couples = array_shift($tab_couples)) {
1176
-		foreach ($couples as $champ => $val) {
1177
-			$couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]);
1178
-		}
1179
-
1180
-		// inserer les champs timestamp par defaut
1181
-		$couples = array_merge($maj, $couples);
1182
-
1183
-		$champs = $valeurs = '';
1184
-		if (count($couples)) {
1185
-			$champs = '(' . join(',', array_keys($couples)) . ')';
1186
-			$valeurs = '(' . join(',', $couples) . ')';
1187
-			$query = $query_start . "$champs VALUES $valeurs";
1188
-		} else {
1189
-			$query = $query_start . 'DEFAULT VALUES';
1190
-		}
1191
-
1192
-		if ($requeter) {
1193
-			$retour = spip_sqlite::executer_requete($query, $serveur);
1194
-		}
1195
-
1196
-		// sur le dernier couple uniquement
1197
-		if (!count($tab_couples)) {
1198
-			$nb = 0;
1199
-			if ($requeter) {
1200
-				$nb = spip_sqlite::last_insert_id($serveur);
1201
-			} else {
1202
-				return $query;
1203
-			}
1204
-		}
1205
-
1206
-		$err = spip_sqlite_error($query, $serveur);
1207
-	}
1208
-
1209
-	if ($requeter) {
1210
-		spip_sqlite::finir_transaction($serveur);
1211
-	}
1212
-
1213
-	// renvoie le dernier id d'autoincrement ajoute
1214
-	// cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1215
-	return isset($_GET['var_profile']) ? $retour : $nb;
1152
+    if (!$desc) {
1153
+        $desc = description_table($table, $serveur);
1154
+    }
1155
+    if (!$desc) {
1156
+        die("$table insertion sans description");
1157
+    }
1158
+    if (!isset($desc['field'])) {
1159
+        $desc['field'] = [];
1160
+    }
1161
+
1162
+    // recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci
1163
+    $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1164
+
1165
+    // seul le nom de la table est a traduire ici :
1166
+    // le faire une seule fois au debut
1167
+    $query_start = "INSERT INTO $table ";
1168
+    $query_start = spip_sqlite::traduire_requete($query_start, $serveur);
1169
+
1170
+    // ouvrir une transaction
1171
+    if ($requeter) {
1172
+        spip_sqlite::demarrer_transaction($serveur);
1173
+    }
1174
+
1175
+    while ($couples = array_shift($tab_couples)) {
1176
+        foreach ($couples as $champ => $val) {
1177
+            $couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]);
1178
+        }
1179
+
1180
+        // inserer les champs timestamp par defaut
1181
+        $couples = array_merge($maj, $couples);
1182
+
1183
+        $champs = $valeurs = '';
1184
+        if (count($couples)) {
1185
+            $champs = '(' . join(',', array_keys($couples)) . ')';
1186
+            $valeurs = '(' . join(',', $couples) . ')';
1187
+            $query = $query_start . "$champs VALUES $valeurs";
1188
+        } else {
1189
+            $query = $query_start . 'DEFAULT VALUES';
1190
+        }
1191
+
1192
+        if ($requeter) {
1193
+            $retour = spip_sqlite::executer_requete($query, $serveur);
1194
+        }
1195
+
1196
+        // sur le dernier couple uniquement
1197
+        if (!count($tab_couples)) {
1198
+            $nb = 0;
1199
+            if ($requeter) {
1200
+                $nb = spip_sqlite::last_insert_id($serveur);
1201
+            } else {
1202
+                return $query;
1203
+            }
1204
+        }
1205
+
1206
+        $err = spip_sqlite_error($query, $serveur);
1207
+    }
1208
+
1209
+    if ($requeter) {
1210
+        spip_sqlite::finir_transaction($serveur);
1211
+    }
1212
+
1213
+    // renvoie le dernier id d'autoincrement ajoute
1214
+    // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1215
+    return isset($_GET['var_profile']) ? $retour : $nb;
1216 1216
 }
1217 1217
 
1218 1218
 
@@ -1227,7 +1227,7 @@  discard block
 block discarded – undo
1227 1227
  *     Toujours true.
1228 1228
  **/
1229 1229
 function spip_sqlite_preferer_transaction($serveur = '', $requeter = true) {
1230
-	return true;
1230
+    return true;
1231 1231
 }
1232 1232
 
1233 1233
 /**
@@ -1244,12 +1244,12 @@  discard block
 block discarded – undo
1244 1244
  *     string si texte de la requête demandé, true sinon
1245 1245
  **/
1246 1246
 function spip_sqlite_demarrer_transaction($serveur = '', $requeter = true) {
1247
-	if (!$requeter) {
1248
-		return 'BEGIN TRANSACTION';
1249
-	}
1250
-	spip_sqlite::demarrer_transaction($serveur);
1247
+    if (!$requeter) {
1248
+        return 'BEGIN TRANSACTION';
1249
+    }
1250
+    spip_sqlite::demarrer_transaction($serveur);
1251 1251
 
1252
-	return true;
1252
+    return true;
1253 1253
 }
1254 1254
 
1255 1255
 /**
@@ -1263,12 +1263,12 @@  discard block
 block discarded – undo
1263 1263
  *     string si texte de la requête demandé, true sinon
1264 1264
  **/
1265 1265
 function spip_sqlite_terminer_transaction($serveur = '', $requeter = true) {
1266
-	if (!$requeter) {
1267
-		return 'COMMIT';
1268
-	}
1269
-	spip_sqlite::finir_transaction($serveur);
1266
+    if (!$requeter) {
1267
+        return 'COMMIT';
1268
+    }
1269
+    spip_sqlite::finir_transaction($serveur);
1270 1270
 
1271
-	return true;
1271
+    return true;
1272 1272
 }
1273 1273
 
1274 1274
 
@@ -1283,27 +1283,27 @@  discard block
 block discarded – undo
1283 1283
  *     Liste des noms de bases
1284 1284
  **/
1285 1285
 function spip_sqlite_listdbs($serveur = '', $requeter = true) {
1286
-	_sqlite_init();
1286
+    _sqlite_init();
1287 1287
 
1288
-	if (!is_dir($d = substr(_DIR_DB, 0, -1))) {
1289
-		return [];
1290
-	}
1288
+    if (!is_dir($d = substr(_DIR_DB, 0, -1))) {
1289
+        return [];
1290
+    }
1291 1291
 
1292
-	include_spip('inc/flock');
1293
-	$bases = preg_files($d, $pattern = '(.*)\.sqlite$');
1294
-	$bds = [];
1292
+    include_spip('inc/flock');
1293
+    $bases = preg_files($d, $pattern = '(.*)\.sqlite$');
1294
+    $bds = [];
1295 1295
 
1296
-	foreach ($bases as $b) {
1297
-		// pas de bases commencant pas sqlite
1298
-		// (on s'en sert pour l'installation pour simuler la presence d'un serveur)
1299
-		// les bases sont de la forme _sqliteX_tmp_spip_install.sqlite
1300
-		if (strpos($b, '_sqlite')) {
1301
-			continue;
1302
-		}
1303
-		$bds[] = preg_replace(";.*/$pattern;iS", '$1', $b);
1304
-	}
1296
+    foreach ($bases as $b) {
1297
+        // pas de bases commencant pas sqlite
1298
+        // (on s'en sert pour l'installation pour simuler la presence d'un serveur)
1299
+        // les bases sont de la forme _sqliteX_tmp_spip_install.sqlite
1300
+        if (strpos($b, '_sqlite')) {
1301
+            continue;
1302
+        }
1303
+        $bds[] = preg_replace(";.*/$pattern;iS", '$1', $b);
1304
+    }
1305 1305
 
1306
-	return $bds;
1306
+    return $bds;
1307 1307
 }
1308 1308
 
1309 1309
 
@@ -1318,9 +1318,9 @@  discard block
 block discarded – undo
1318 1318
  * @return string       Texte de sélection pour la requête
1319 1319
  */
1320 1320
 function spip_sqlite_multi($objet, $lang) {
1321
-	$r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi";
1321
+    $r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi";
1322 1322
 
1323
-	return $r;
1323
+    return $r;
1324 1324
 }
1325 1325
 
1326 1326
 
@@ -1337,15 +1337,15 @@  discard block
 block discarded – undo
1337 1337
  * @return bool|string true / false / requete
1338 1338
  **/
1339 1339
 function spip_sqlite_optimize($table, $serveur = '', $requeter = true) {
1340
-	static $do = false;
1341
-	if ($requeter and $do) {
1342
-		return true;
1343
-	}
1344
-	if ($requeter) {
1345
-		$do = true;
1346
-	}
1340
+    static $do = false;
1341
+    if ($requeter and $do) {
1342
+        return true;
1343
+    }
1344
+    if ($requeter) {
1345
+        $do = true;
1346
+    }
1347 1347
 
1348
-	return spip_sqlite_query('VACUUM', $serveur, $requeter);
1348
+    return spip_sqlite_query('VACUUM', $serveur, $requeter);
1349 1349
 }
1350 1350
 
1351 1351
 
@@ -1362,15 +1362,15 @@  discard block
 block discarded – undo
1362 1362
  *    Donnée prête à être utilisée par le gestionnaire SQL
1363 1363
  */
1364 1364
 function spip_sqlite_quote($v, $type = '') {
1365
-	if (!is_array($v)) {
1366
-		return _sqlite_calculer_cite($v, $type);
1367
-	}
1368
-	// si c'est un tableau, le parcourir en propageant le type
1369
-	foreach ($v as $k => $r) {
1370
-		$v[$k] = spip_sqlite_quote($r, $type);
1371
-	}
1365
+    if (!is_array($v)) {
1366
+        return _sqlite_calculer_cite($v, $type);
1367
+    }
1368
+    // si c'est un tableau, le parcourir en propageant le type
1369
+    foreach ($v as $k => $r) {
1370
+        $v[$k] = spip_sqlite_quote($r, $type);
1371
+    }
1372 1372
 
1373
-	return join(',', $v);
1373
+    return join(',', $v);
1374 1374
 }
1375 1375
 
1376 1376
 
@@ -1387,9 +1387,9 @@  discard block
 block discarded – undo
1387 1387
  *     Expression SQL
1388 1388
  **/
1389 1389
 function spip_sqlite_date_proche($champ, $interval, $unite) {
1390
-	$op = (($interval <= 0) ? '>' : '<');
1390
+    $op = (($interval <= 0) ? '>' : '<');
1391 1391
 
1392
-	return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))";
1392
+    return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))";
1393 1393
 }
1394 1394
 
1395 1395
 
@@ -1407,48 +1407,48 @@  discard block
 block discarded – undo
1407 1407
  *     l'état de la table après la réparation
1408 1408
  */
1409 1409
 function spip_sqlite_repair($table, $serveur = '', $requeter = true) {
1410
-	if (
1411
-		$desc = spip_sqlite_showtable($table, $serveur)
1412
-		and isset($desc['field'])
1413
-		and is_array($desc['field'])
1414
-	) {
1415
-		foreach ($desc['field'] as $c => $d) {
1416
-			if (
1417
-				preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d)
1418
-				and stripos($d, 'NOT NULL') !== false
1419
-				and stripos($d, 'DEFAULT') === false
1420
-				/* pas touche aux cles primaires */
1421
-				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1422
-			) {
1423
-				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur);
1424
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1425
-			}
1426
-			if (
1427
-				preg_match(',^(INTEGER),i', $d)
1428
-				and stripos($d, 'NOT NULL') !== false
1429
-				and stripos($d, 'DEFAULT') === false
1430
-				/* pas touche aux cles primaires */
1431
-				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1432
-			) {
1433
-				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur);
1434
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1435
-			}
1436
-			if (
1437
-				preg_match(',^(datetime),i', $d)
1438
-				and stripos($d, 'NOT NULL') !== false
1439
-				and stripos($d, 'DEFAULT') === false
1440
-				/* pas touche aux cles primaires */
1441
-				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1442
-			) {
1443
-				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur);
1444
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1445
-			}
1446
-		}
1447
-
1448
-		return [' OK '];
1449
-	}
1450
-
1451
-	return [' ERROR '];
1410
+    if (
1411
+        $desc = spip_sqlite_showtable($table, $serveur)
1412
+        and isset($desc['field'])
1413
+        and is_array($desc['field'])
1414
+    ) {
1415
+        foreach ($desc['field'] as $c => $d) {
1416
+            if (
1417
+                preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d)
1418
+                and stripos($d, 'NOT NULL') !== false
1419
+                and stripos($d, 'DEFAULT') === false
1420
+                /* pas touche aux cles primaires */
1421
+                and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1422
+            ) {
1423
+                spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur);
1424
+                spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1425
+            }
1426
+            if (
1427
+                preg_match(',^(INTEGER),i', $d)
1428
+                and stripos($d, 'NOT NULL') !== false
1429
+                and stripos($d, 'DEFAULT') === false
1430
+                /* pas touche aux cles primaires */
1431
+                and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1432
+            ) {
1433
+                spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur);
1434
+                spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1435
+            }
1436
+            if (
1437
+                preg_match(',^(datetime),i', $d)
1438
+                and stripos($d, 'NOT NULL') !== false
1439
+                and stripos($d, 'DEFAULT') === false
1440
+                /* pas touche aux cles primaires */
1441
+                and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1442
+            ) {
1443
+                spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur);
1444
+                spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1445
+            }
1446
+        }
1447
+
1448
+        return [' OK '];
1449
+    }
1450
+
1451
+    return [' ERROR '];
1452 1452
 }
1453 1453
 
1454 1454
 
@@ -1477,25 +1477,25 @@  discard block
 block discarded – undo
1477 1477
  *     - False en cas d'erreur.
1478 1478
  **/
1479 1479
 function spip_sqlite_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1480
-	if (!$desc) {
1481
-		$desc = description_table($table, $serveur);
1482
-	}
1483
-	if (!$desc) {
1484
-		die("$table insertion sans description");
1485
-	}
1486
-	$fields = isset($desc['field']) ? $desc['field'] : [];
1480
+    if (!$desc) {
1481
+        $desc = description_table($table, $serveur);
1482
+    }
1483
+    if (!$desc) {
1484
+        die("$table insertion sans description");
1485
+    }
1486
+    $fields = isset($desc['field']) ? $desc['field'] : [];
1487 1487
 
1488
-	foreach ($couples as $champ => $val) {
1489
-		$couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1490
-	}
1488
+    foreach ($couples as $champ => $val) {
1489
+        $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1490
+    }
1491 1491
 
1492
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1493
-	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1492
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1493
+    $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1494 1494
 
1495
-	return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1496
-		',',
1497
-		$couples
1498
-	) . ')', $serveur);
1495
+    return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1496
+        ',',
1497
+        $couples
1498
+    ) . ')', $serveur);
1499 1499
 }
1500 1500
 
1501 1501
 
@@ -1525,13 +1525,13 @@  discard block
 block discarded – undo
1525 1525
  **/
1526 1526
 function spip_sqlite_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1527 1527
 
1528
-	// boucler pour trainter chaque requete independemment
1529
-	foreach ($tab_couples as $couples) {
1530
-		$retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter);
1531
-	}
1528
+    // boucler pour trainter chaque requete independemment
1529
+    foreach ($tab_couples as $couples) {
1530
+        $retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter);
1531
+    }
1532 1532
 
1533
-	// renvoie le dernier id
1534
-	return $retour;
1533
+    // renvoie le dernier id
1534
+    return $retour;
1535 1535
 }
1536 1536
 
1537 1537
 
@@ -1558,44 +1558,44 @@  discard block
 block discarded – undo
1558 1558
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
1559 1559
  */
1560 1560
 function spip_sqlite_select(
1561
-	$select,
1562
-	$from,
1563
-	$where = '',
1564
-	$groupby = '',
1565
-	$orderby = '',
1566
-	$limit = '',
1567
-	$having = '',
1568
-	$serveur = '',
1569
-	$requeter = true
1561
+    $select,
1562
+    $from,
1563
+    $where = '',
1564
+    $groupby = '',
1565
+    $orderby = '',
1566
+    $limit = '',
1567
+    $having = '',
1568
+    $serveur = '',
1569
+    $requeter = true
1570 1570
 ) {
1571 1571
 
1572
-	// version() n'est pas connu de sqlite
1573
-	$select = str_replace('version()', 'sqlite_version()', $select);
1572
+    // version() n'est pas connu de sqlite
1573
+    $select = str_replace('version()', 'sqlite_version()', $select);
1574 1574
 
1575
-	// recomposer from
1576
-	$from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from));
1575
+    // recomposer from
1576
+    $from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from));
1577 1577
 
1578
-	$query =
1579
-		_sqlite_calculer_expression('SELECT', $select, ', ')
1580
-		. _sqlite_calculer_expression('FROM', $from, ', ')
1581
-		. _sqlite_calculer_expression('WHERE', $where)
1582
-		. _sqlite_calculer_expression('GROUP BY', $groupby, ',')
1583
-		. _sqlite_calculer_expression('HAVING', $having)
1584
-		. ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '')
1585
-		. ($limit ? "\nLIMIT $limit" : '');
1578
+    $query =
1579
+        _sqlite_calculer_expression('SELECT', $select, ', ')
1580
+        . _sqlite_calculer_expression('FROM', $from, ', ')
1581
+        . _sqlite_calculer_expression('WHERE', $where)
1582
+        . _sqlite_calculer_expression('GROUP BY', $groupby, ',')
1583
+        . _sqlite_calculer_expression('HAVING', $having)
1584
+        . ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '')
1585
+        . ($limit ? "\nLIMIT $limit" : '');
1586 1586
 
1587
-	// dans un select, on doit renvoyer la requête en cas d'erreur
1588
-	$res = spip_sqlite_query($query, $serveur, $requeter);
1589
-	// texte de la requete demande ?
1590
-	if (!$requeter) {
1591
-		return $res;
1592
-	}
1593
-	// erreur survenue ?
1594
-	if ($res === false) {
1595
-		return spip_sqlite::traduire_requete($query, $serveur);
1596
-	}
1587
+    // dans un select, on doit renvoyer la requête en cas d'erreur
1588
+    $res = spip_sqlite_query($query, $serveur, $requeter);
1589
+    // texte de la requete demande ?
1590
+    if (!$requeter) {
1591
+        return $res;
1592
+    }
1593
+    // erreur survenue ?
1594
+    if ($res === false) {
1595
+        return spip_sqlite::traduire_requete($query, $serveur);
1596
+    }
1597 1597
 
1598
-	return $res;
1598
+    return $res;
1599 1599
 }
1600 1600
 
1601 1601
 
@@ -1614,32 +1614,32 @@  discard block
 block discarded – undo
1614 1614
  *     - False en cas d'erreur.
1615 1615
  **/
1616 1616
 function spip_sqlite_selectdb($db, $serveur = '', $requeter = true) {
1617
-	_sqlite_init();
1617
+    _sqlite_init();
1618 1618
 
1619
-	// interdire la creation d'une nouvelle base,
1620
-	// sauf si on est dans l'installation
1621
-	if (
1622
-		!is_file($f = _DIR_DB . $db . '.sqlite')
1623
-		&& (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)
1624
-	) {
1625
-		spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS);
1619
+    // interdire la creation d'une nouvelle base,
1620
+    // sauf si on est dans l'installation
1621
+    if (
1622
+        !is_file($f = _DIR_DB . $db . '.sqlite')
1623
+        && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)
1624
+    ) {
1625
+        spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS);
1626 1626
 
1627
-		return false;
1628
-	}
1627
+        return false;
1628
+    }
1629 1629
 
1630
-	// se connecter a la base indiquee
1631
-	// avec les identifiants connus
1632
-	$index = $serveur ? $serveur : 0;
1630
+    // se connecter a la base indiquee
1631
+    // avec les identifiants connus
1632
+    $index = $serveur ? $serveur : 0;
1633 1633
 
1634
-	if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) {
1635
-		if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
1636
-			return $db;
1637
-		}
1638
-	} else {
1639
-		spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS);
1634
+    if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) {
1635
+        if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
1636
+            return $db;
1637
+        }
1638
+    } else {
1639
+        spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS);
1640 1640
 
1641
-		return false;
1642
-	}
1641
+        return false;
1642
+    }
1643 1643
 }
1644 1644
 
1645 1645
 
@@ -1654,8 +1654,8 @@  discard block
 block discarded – undo
1654 1654
  * @return void
1655 1655
  */
1656 1656
 function spip_sqlite_set_charset($charset, $serveur = '', $requeter = true) {
1657
-	# spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR);
1658
-	# return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas !
1657
+    # spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR);
1658
+    # return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas !
1659 1659
 }
1660 1660
 
1661 1661
 
@@ -1673,24 +1673,24 @@  discard block
 block discarded – undo
1673 1673
  *     Ressource à utiliser avec sql_fetch()
1674 1674
  **/
1675 1675
 function spip_sqlite_showbase($match, $serveur = '', $requeter = true) {
1676
-	// type est le type d'entrée : table / index / view
1677
-	// on ne retourne que les tables (?) et non les vues...
1678
-	# ESCAPE non supporte par les versions sqlite <3
1679
-	#	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter);
1680
-	$match = preg_quote($match);
1681
-	$match = str_replace('\\\_', '[[TIRETBAS]]', $match);
1682
-	$match = str_replace('\\\%', '[[POURCENT]]', $match);
1683
-	$match = str_replace('_', '.', $match);
1684
-	$match = str_replace('%', '.*', $match);
1685
-	$match = str_replace('[[TIRETBAS]]', '_', $match);
1686
-	$match = str_replace('[[POURCENT]]', '%', $match);
1687
-	$match = "^$match$";
1688
-
1689
-	return spip_sqlite_query(
1690
-		"SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match),
1691
-		$serveur,
1692
-		$requeter
1693
-	);
1676
+    // type est le type d'entrée : table / index / view
1677
+    // on ne retourne que les tables (?) et non les vues...
1678
+    # ESCAPE non supporte par les versions sqlite <3
1679
+    #	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter);
1680
+    $match = preg_quote($match);
1681
+    $match = str_replace('\\\_', '[[TIRETBAS]]', $match);
1682
+    $match = str_replace('\\\%', '[[POURCENT]]', $match);
1683
+    $match = str_replace('_', '.', $match);
1684
+    $match = str_replace('%', '.*', $match);
1685
+    $match = str_replace('[[TIRETBAS]]', '_', $match);
1686
+    $match = str_replace('[[POURCENT]]', '%', $match);
1687
+    $match = "^$match$";
1688
+
1689
+    return spip_sqlite_query(
1690
+        "SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match),
1691
+        $serveur,
1692
+        $requeter
1693
+    );
1694 1694
 }
1695 1695
 
1696 1696
 /**
@@ -1708,19 +1708,19 @@  discard block
 block discarded – undo
1708 1708
  *     - string : requete sql, si $requeter = true
1709 1709
  **/
1710 1710
 function spip_sqlite_table_exists(string $table, $serveur = '', $requeter = true) {
1711
-	$r = spip_sqlite_query(
1712
-		'SELECT name FROM sqlite_master WHERE'
1713
-		. ' type=\'table\''
1714
-		. ' AND name=' . spip_sqlite_quote($table, 'string')
1715
-		. ' AND name NOT LIKE \'sqlite_%\'',
1716
-		$serveur,
1717
-		$requeter
1718
-	);
1719
-	if (!$requeter) {
1720
-		return $r;
1721
-	}
1722
-	$res = spip_sqlite_fetch($r);
1723
-	return (bool) $res;
1711
+    $r = spip_sqlite_query(
1712
+        'SELECT name FROM sqlite_master WHERE'
1713
+        . ' type=\'table\''
1714
+        . ' AND name=' . spip_sqlite_quote($table, 'string')
1715
+        . ' AND name NOT LIKE \'sqlite_%\'',
1716
+        $serveur,
1717
+        $requeter
1718
+    );
1719
+    if (!$requeter) {
1720
+        return $r;
1721
+    }
1722
+    $res = spip_sqlite_fetch($r);
1723
+    return (bool) $res;
1724 1724
 }
1725 1725
 
1726 1726
 define('_SQLITE_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -1743,129 +1743,129 @@  discard block
 block discarded – undo
1743 1743
  *     - array description de la table sinon
1744 1744
  */
1745 1745
 function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true) {
1746
-	$query =
1747
-		'SELECT sql, type FROM'
1748
-		. ' (SELECT * FROM sqlite_master UNION ALL'
1749
-		. ' SELECT * FROM sqlite_temp_master)'
1750
-		. " WHERE tbl_name LIKE '$nom_table'"
1751
-		. " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1752
-		. ' ORDER BY substr(type,2,1), name';
1753
-
1754
-	$a = spip_sqlite_query($query, $serveur, $requeter);
1755
-	if (!$a) {
1756
-		return '';
1757
-	}
1758
-	if (!$requeter) {
1759
-		return $a;
1760
-	}
1761
-	if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1762
-		return '';
1763
-	}
1764
-	$vue = ($a['type'] == 'view'); // table | vue
1765
-
1766
-	// c'est une table
1767
-	// il faut parser le create
1768
-	if (!$vue) {
1769
-		if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1770
-			return '';
1771
-		} else {
1772
-			$desc = $r[1];
1773
-			// extraction d'une KEY éventuelle en prenant garde de ne pas
1774
-			// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1775
-			if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1776
-				$namedkeys = $r[2];
1777
-				$desc = $r[1];
1778
-			} else {
1779
-				$namedkeys = '';
1780
-			}
1781
-
1782
-			$fields = [];
1783
-			$keys = [];
1784
-
1785
-			// enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1786
-			// par exemple s'il contiennent une virgule.
1787
-			// /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1788
-			list($desc, $echaps) = query_echappe_textes($desc);
1789
-
1790
-			// separer toutes les descriptions de champs, separes par des virgules
1791
-			# /!\ explode peut exploser aussi DECIMAL(10,2) !
1792
-			$k_precedent = null;
1793
-			foreach (explode(',', $desc) as $v) {
1794
-				preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1795
-				// Les cles de champs peuvent etre entourees
1796
-				// de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1797
-				// http://www.sqlite.org/lang_keywords.html
1798
-				$k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1799
-				if ($char = strpbrk($k[0], '\'"[`')) {
1800
-					$k = trim($k, $char);
1801
-					if ($char == '[') {
1802
-						$k = rtrim($k, ']');
1803
-					}
1804
-				}
1805
-				$def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1806
-
1807
-				// rustine pour DECIMAL(10,2)
1808
-				// s'il y a une parenthèse fermante dans la clé
1809
-				// ou dans la définition sans qu'il n'y ait une ouverture avant
1810
-				if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1811
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1812
-					continue;
1813
-				}
1814
-
1815
-				// la primary key peut etre dans une des descriptions de champs
1816
-				// et non en fin de table, cas encore decouvert avec Sqlite Manager
1817
-				if (stripos($r[2], 'PRIMARY KEY') !== false) {
1818
-					$keys['PRIMARY KEY'] = $k;
1819
-				}
1820
-
1821
-				$fields[$k] = $def;
1822
-				$k_precedent = $k;
1823
-			}
1824
-			// key inclues dans la requete
1825
-			foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1826
-				if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1827
-					$k = str_replace('`', '', trim($r[1]));
1828
-					$t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1829
-					if ($k && !isset($keys[$k])) {
1830
-						$keys[$k] = $t;
1831
-					} else {
1832
-						$keys[] = $t;
1833
-					}
1834
-				}
1835
-			}
1836
-			// sinon ajouter les key index
1837
-			$query =
1838
-				'SELECT name,sql FROM'
1839
-				. ' (SELECT * FROM sqlite_master UNION ALL'
1840
-				. ' SELECT * FROM sqlite_temp_master)'
1841
-				. " WHERE tbl_name LIKE '$nom_table'"
1842
-				. " AND type='index' AND name NOT LIKE 'sqlite_%'"
1843
-				. 'ORDER BY substr(type,2,1), name';
1844
-			$a = spip_sqlite_query($query, $serveur, $requeter);
1845
-			while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1846
-				$key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1847
-				$keytype = 'KEY';
1848
-				if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1849
-					$keytype = 'UNIQUE KEY';
1850
-				}
1851
-				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1852
-				$keys[$keytype . ' ' . $key] = $colonnes;
1853
-			}
1854
-		}
1855
-	} // c'est une vue, on liste les champs disponibles simplement
1856
-	else {
1857
-		if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1858
-			$fields = [];
1859
-			foreach ($res as $c => $v) {
1860
-				$fields[$c] = '';
1861
-			}
1862
-			$keys = [];
1863
-		} else {
1864
-			return '';
1865
-		}
1866
-	}
1867
-
1868
-	return ['field' => $fields, 'key' => $keys];
1746
+    $query =
1747
+        'SELECT sql, type FROM'
1748
+        . ' (SELECT * FROM sqlite_master UNION ALL'
1749
+        . ' SELECT * FROM sqlite_temp_master)'
1750
+        . " WHERE tbl_name LIKE '$nom_table'"
1751
+        . " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1752
+        . ' ORDER BY substr(type,2,1), name';
1753
+
1754
+    $a = spip_sqlite_query($query, $serveur, $requeter);
1755
+    if (!$a) {
1756
+        return '';
1757
+    }
1758
+    if (!$requeter) {
1759
+        return $a;
1760
+    }
1761
+    if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1762
+        return '';
1763
+    }
1764
+    $vue = ($a['type'] == 'view'); // table | vue
1765
+
1766
+    // c'est une table
1767
+    // il faut parser le create
1768
+    if (!$vue) {
1769
+        if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1770
+            return '';
1771
+        } else {
1772
+            $desc = $r[1];
1773
+            // extraction d'une KEY éventuelle en prenant garde de ne pas
1774
+            // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1775
+            if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1776
+                $namedkeys = $r[2];
1777
+                $desc = $r[1];
1778
+            } else {
1779
+                $namedkeys = '';
1780
+            }
1781
+
1782
+            $fields = [];
1783
+            $keys = [];
1784
+
1785
+            // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1786
+            // par exemple s'il contiennent une virgule.
1787
+            // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1788
+            list($desc, $echaps) = query_echappe_textes($desc);
1789
+
1790
+            // separer toutes les descriptions de champs, separes par des virgules
1791
+            # /!\ explode peut exploser aussi DECIMAL(10,2) !
1792
+            $k_precedent = null;
1793
+            foreach (explode(',', $desc) as $v) {
1794
+                preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1795
+                // Les cles de champs peuvent etre entourees
1796
+                // de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1797
+                // http://www.sqlite.org/lang_keywords.html
1798
+                $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1799
+                if ($char = strpbrk($k[0], '\'"[`')) {
1800
+                    $k = trim($k, $char);
1801
+                    if ($char == '[') {
1802
+                        $k = rtrim($k, ']');
1803
+                    }
1804
+                }
1805
+                $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1806
+
1807
+                // rustine pour DECIMAL(10,2)
1808
+                // s'il y a une parenthèse fermante dans la clé
1809
+                // ou dans la définition sans qu'il n'y ait une ouverture avant
1810
+                if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1811
+                    $fields[$k_precedent] .= ',' . $k . ' ' . $def;
1812
+                    continue;
1813
+                }
1814
+
1815
+                // la primary key peut etre dans une des descriptions de champs
1816
+                // et non en fin de table, cas encore decouvert avec Sqlite Manager
1817
+                if (stripos($r[2], 'PRIMARY KEY') !== false) {
1818
+                    $keys['PRIMARY KEY'] = $k;
1819
+                }
1820
+
1821
+                $fields[$k] = $def;
1822
+                $k_precedent = $k;
1823
+            }
1824
+            // key inclues dans la requete
1825
+            foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1826
+                if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1827
+                    $k = str_replace('`', '', trim($r[1]));
1828
+                    $t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1829
+                    if ($k && !isset($keys[$k])) {
1830
+                        $keys[$k] = $t;
1831
+                    } else {
1832
+                        $keys[] = $t;
1833
+                    }
1834
+                }
1835
+            }
1836
+            // sinon ajouter les key index
1837
+            $query =
1838
+                'SELECT name,sql FROM'
1839
+                . ' (SELECT * FROM sqlite_master UNION ALL'
1840
+                . ' SELECT * FROM sqlite_temp_master)'
1841
+                . " WHERE tbl_name LIKE '$nom_table'"
1842
+                . " AND type='index' AND name NOT LIKE 'sqlite_%'"
1843
+                . 'ORDER BY substr(type,2,1), name';
1844
+            $a = spip_sqlite_query($query, $serveur, $requeter);
1845
+            while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1846
+                $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1847
+                $keytype = 'KEY';
1848
+                if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1849
+                    $keytype = 'UNIQUE KEY';
1850
+                }
1851
+                $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1852
+                $keys[$keytype . ' ' . $key] = $colonnes;
1853
+            }
1854
+        }
1855
+    } // c'est une vue, on liste les champs disponibles simplement
1856
+    else {
1857
+        if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1858
+            $fields = [];
1859
+            foreach ($res as $c => $v) {
1860
+                $fields[$c] = '';
1861
+            }
1862
+            $keys = [];
1863
+        } else {
1864
+            return '';
1865
+        }
1866
+    }
1867
+
1868
+    return ['field' => $fields, 'key' => $keys];
1869 1869
 }
1870 1870
 
1871 1871
 
@@ -1891,22 +1891,22 @@  discard block
 block discarded – undo
1891 1891
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1892 1892
  */
1893 1893
 function spip_sqlite_update($table, $champs, $where = '', $desc = '', $serveur = '', $requeter = true) {
1894
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1895
-	$champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1894
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1895
+    $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1896 1896
 
1897
-	$set = [];
1898
-	foreach ($champs as $champ => $val) {
1899
-		$set[] = $champ . "=$val";
1900
-	}
1901
-	if (!empty($set)) {
1902
-		return spip_sqlite_query(
1903
-			_sqlite_calculer_expression('UPDATE', $table, ',')
1904
-			. _sqlite_calculer_expression('SET', $set, ',')
1905
-			. _sqlite_calculer_expression('WHERE', $where),
1906
-			$serveur,
1907
-			$requeter
1908
-		);
1909
-	}
1897
+    $set = [];
1898
+    foreach ($champs as $champ => $val) {
1899
+        $set[] = $champ . "=$val";
1900
+    }
1901
+    if (!empty($set)) {
1902
+        return spip_sqlite_query(
1903
+            _sqlite_calculer_expression('UPDATE', $table, ',')
1904
+            . _sqlite_calculer_expression('SET', $set, ',')
1905
+            . _sqlite_calculer_expression('WHERE', $where),
1906
+            $serveur,
1907
+            $requeter
1908
+        );
1909
+    }
1910 1910
 }
1911 1911
 
1912 1912
 
@@ -1936,38 +1936,38 @@  discard block
 block discarded – undo
1936 1936
  */
1937 1937
 function spip_sqlite_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1938 1938
 
1939
-	if (!$champs) {
1940
-		return;
1941
-	}
1942
-	if (!$desc) {
1943
-		$desc = description_table($table, $serveur);
1944
-	}
1945
-	if (!$desc) {
1946
-		die("$table insertion sans description");
1947
-	}
1948
-	$fields = $desc['field'];
1949
-
1950
-	$set = [];
1951
-	foreach ($champs as $champ => $val) {
1952
-		$set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1953
-	}
1954
-
1955
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1956
-	// attention ils sont deja quotes
1957
-	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1958
-	foreach ($maj as $champ => $val) {
1959
-		if (!isset($set[$champ])) {
1960
-			$set[$champ] = $champ . '=' . $val;
1961
-		}
1962
-	}
1963
-
1964
-	return spip_sqlite_query(
1965
-		_sqlite_calculer_expression('UPDATE', $table, ',')
1966
-		. _sqlite_calculer_expression('SET', $set, ',')
1967
-		. _sqlite_calculer_expression('WHERE', $where),
1968
-		$serveur,
1969
-		$requeter
1970
-	);
1939
+    if (!$champs) {
1940
+        return;
1941
+    }
1942
+    if (!$desc) {
1943
+        $desc = description_table($table, $serveur);
1944
+    }
1945
+    if (!$desc) {
1946
+        die("$table insertion sans description");
1947
+    }
1948
+    $fields = $desc['field'];
1949
+
1950
+    $set = [];
1951
+    foreach ($champs as $champ => $val) {
1952
+        $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1953
+    }
1954
+
1955
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1956
+    // attention ils sont deja quotes
1957
+    $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1958
+    foreach ($maj as $champ => $val) {
1959
+        if (!isset($set[$champ])) {
1960
+            $set[$champ] = $champ . '=' . $val;
1961
+        }
1962
+    }
1963
+
1964
+    return spip_sqlite_query(
1965
+        _sqlite_calculer_expression('UPDATE', $table, ',')
1966
+        . _sqlite_calculer_expression('SET', $set, ',')
1967
+        . _sqlite_calculer_expression('WHERE', $where),
1968
+        $serveur,
1969
+        $requeter
1970
+    );
1971 1971
 }
1972 1972
 
1973 1973
 
@@ -1985,17 +1985,17 @@  discard block
 block discarded – undo
1985 1985
  * @return void
1986 1986
  */
1987 1987
 function _sqlite_init() {
1988
-	if (!defined('_DIR_DB')) {
1989
-		define('_DIR_DB', _DIR_ETC . 'bases/');
1990
-	}
1991
-	if (!defined('_SQLITE_CHMOD')) {
1992
-		define('_SQLITE_CHMOD', _SPIP_CHMOD);
1993
-	}
1988
+    if (!defined('_DIR_DB')) {
1989
+        define('_DIR_DB', _DIR_ETC . 'bases/');
1990
+    }
1991
+    if (!defined('_SQLITE_CHMOD')) {
1992
+        define('_SQLITE_CHMOD', _SPIP_CHMOD);
1993
+    }
1994 1994
 
1995
-	if (!is_dir($d = _DIR_DB)) {
1996
-		include_spip('inc/flock');
1997
-		sous_repertoire($d);
1998
-	}
1995
+    if (!is_dir($d = _DIR_DB)) {
1996
+        include_spip('inc/flock');
1997
+        sous_repertoire($d);
1998
+    }
1999 1999
 }
2000 2000
 
2001 2001
 
@@ -2009,20 +2009,20 @@  discard block
 block discarded – undo
2009 2009
  * @return bool|int
2010 2010
  */
2011 2011
 function _sqlite_is_version($version = '', $link = '', $serveur = '', $requeter = true) {
2012
-	if ($link === '') {
2013
-		$link = _sqlite_link($serveur);
2014
-	}
2015
-	if (!$link) {
2016
-		return false;
2017
-	}
2012
+    if ($link === '') {
2013
+        $link = _sqlite_link($serveur);
2014
+    }
2015
+    if (!$link) {
2016
+        return false;
2017
+    }
2018 2018
 
2019
-	$v = 3;
2019
+    $v = 3;
2020 2020
 
2021
-	if (!$version) {
2022
-		return $v;
2023
-	}
2021
+    if (!$version) {
2022
+        return $v;
2023
+    }
2024 2024
 
2025
-	return ($version == $v);
2025
+    return ($version == $v);
2026 2026
 }
2027 2027
 
2028 2028
 
@@ -2033,9 +2033,9 @@  discard block
 block discarded – undo
2033 2033
  * @return PDO Information de connexion pour SQLite
2034 2034
  */
2035 2035
 function _sqlite_link($serveur = '') {
2036
-	$link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2036
+    $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2037 2037
 
2038
-	return $link;
2038
+    return $link;
2039 2039
 }
2040 2040
 
2041 2041
 
@@ -2050,52 +2050,52 @@  discard block
 block discarded – undo
2050 2050
  * @return string|number     Texte ou nombre échappé
2051 2051
  */
2052 2052
 function _sqlite_calculer_cite($v, $type) {
2053
-	if ($type) {
2054
-		if (
2055
-			is_null($v)
2056
-			and stripos($type, 'NOT NULL') === false
2057
-		) {
2058
-			return 'NULL';
2059
-		} // null php se traduit en NULL SQL
2060
-
2061
-		if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2062
-			return $v;
2063
-		}
2064
-		if (sql_test_int($type)) {
2065
-			if (is_numeric($v)) {
2066
-				return $v;
2067
-			} elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2068
-				return hexdec(substr($v, 2));
2069
-			} else {
2070
-				return intval($v);
2071
-			}
2072
-		}
2073
-	} else {
2074
-		// si on ne connait pas le type on le deduit de $v autant que possible
2075
-		if (is_bool($v)) {
2076
-			return strval(intval($v));
2077
-		}
2078
-		elseif (is_numeric($v)) {
2079
-			return strval($v);
2080
-		}
2081
-	}
2082
-
2083
-	// trouver un link sqlite pour faire l'echappement
2084
-	foreach ($GLOBALS['connexions'] as $s) {
2085
-		if (
2086
-			$l = $s['link']
2087
-			and is_object($l)
2088
-			and $l instanceof \PDO
2089
-			and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2090
-		) {
2091
-			return $l->quote($v);
2092
-		}
2093
-	}
2094
-
2095
-	// echapper les ' en ''
2096
-	spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2097
-
2098
-	return ("'" . str_replace("'", "''", $v) . "'");
2053
+    if ($type) {
2054
+        if (
2055
+            is_null($v)
2056
+            and stripos($type, 'NOT NULL') === false
2057
+        ) {
2058
+            return 'NULL';
2059
+        } // null php se traduit en NULL SQL
2060
+
2061
+        if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2062
+            return $v;
2063
+        }
2064
+        if (sql_test_int($type)) {
2065
+            if (is_numeric($v)) {
2066
+                return $v;
2067
+            } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2068
+                return hexdec(substr($v, 2));
2069
+            } else {
2070
+                return intval($v);
2071
+            }
2072
+        }
2073
+    } else {
2074
+        // si on ne connait pas le type on le deduit de $v autant que possible
2075
+        if (is_bool($v)) {
2076
+            return strval(intval($v));
2077
+        }
2078
+        elseif (is_numeric($v)) {
2079
+            return strval($v);
2080
+        }
2081
+    }
2082
+
2083
+    // trouver un link sqlite pour faire l'echappement
2084
+    foreach ($GLOBALS['connexions'] as $s) {
2085
+        if (
2086
+            $l = $s['link']
2087
+            and is_object($l)
2088
+            and $l instanceof \PDO
2089
+            and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2090
+        ) {
2091
+            return $l->quote($v);
2092
+        }
2093
+    }
2094
+
2095
+    // echapper les ' en ''
2096
+    spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2097
+
2098
+    return ("'" . str_replace("'", "''", $v) . "'");
2099 2099
 }
2100 2100
 
2101 2101
 
@@ -2111,21 +2111,21 @@  discard block
 block discarded – undo
2111 2111
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
2112 2112
  */
2113 2113
 function _sqlite_calculer_expression($expression, $v, $join = 'AND') {
2114
-	if (empty($v)) {
2115
-		return '';
2116
-	}
2114
+    if (empty($v)) {
2115
+        return '';
2116
+    }
2117 2117
 
2118
-	$exp = "\n$expression ";
2118
+    $exp = "\n$expression ";
2119 2119
 
2120
-	if (!is_array($v)) {
2121
-		return $exp . $v;
2122
-	} else {
2123
-		if (strtoupper($join) === 'AND') {
2124
-			return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2125
-		} else {
2126
-			return $exp . join($join, $v);
2127
-		}
2128
-	}
2120
+    if (!is_array($v)) {
2121
+        return $exp . $v;
2122
+    } else {
2123
+        if (strtoupper($join) === 'AND') {
2124
+            return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2125
+        } else {
2126
+            return $exp . join($join, $v);
2127
+        }
2128
+    }
2129 2129
 }
2130 2130
 
2131 2131
 
@@ -2141,7 +2141,7 @@  discard block
 block discarded – undo
2141 2141
  * @return string Texte du orderby préparé
2142 2142
  */
2143 2143
 function _sqlite_calculer_order($orderby) {
2144
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2144
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2145 2145
 }
2146 2146
 
2147 2147
 
@@ -2152,26 +2152,26 @@  discard block
 block discarded – undo
2152 2152
  * @return string Sélection de colonnes pour une clause SELECT
2153 2153
  */
2154 2154
 function _sqlite_calculer_select_as($args) {
2155
-	$res = '';
2156
-	foreach ($args as $k => $v) {
2157
-		if (substr($k, -1) == '@') {
2158
-			// c'est une jointure qui se refere au from precedent
2159
-			// pas de virgule
2160
-			$res .= '  ' . $v;
2161
-		} else {
2162
-			if (!is_numeric($k)) {
2163
-				$p = strpos($v, ' ');
2164
-				if ($p) {
2165
-					$v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2166
-				} else {
2167
-					$v .= " AS '$k'";
2168
-				}
2169
-			}
2170
-			$res .= ', ' . $v;
2171
-		}
2172
-	}
2173
-
2174
-	return substr($res, 2);
2155
+    $res = '';
2156
+    foreach ($args as $k => $v) {
2157
+        if (substr($k, -1) == '@') {
2158
+            // c'est une jointure qui se refere au from precedent
2159
+            // pas de virgule
2160
+            $res .= '  ' . $v;
2161
+        } else {
2162
+            if (!is_numeric($k)) {
2163
+                $p = strpos($v, ' ');
2164
+                if ($p) {
2165
+                    $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2166
+                } else {
2167
+                    $v .= " AS '$k'";
2168
+                }
2169
+            }
2170
+            $res .= ', ' . $v;
2171
+        }
2172
+    }
2173
+
2174
+    return substr($res, 2);
2175 2175
 }
2176 2176
 
2177 2177
 
@@ -2194,26 +2194,26 @@  discard block
 block discarded – undo
2194 2194
  *     Contrainte pour clause WHERE
2195 2195
  */
2196 2196
 function _sqlite_calculer_where($v) {
2197
-	if (!is_array($v)) {
2198
-		return $v;
2199
-	}
2200
-
2201
-	$op = array_shift($v);
2202
-	if (!($n = count($v))) {
2203
-		return $op;
2204
-	} else {
2205
-		$arg = _sqlite_calculer_where(array_shift($v));
2206
-		if ($n == 1) {
2207
-			return "$op($arg)";
2208
-		} else {
2209
-			$arg2 = _sqlite_calculer_where(array_shift($v));
2210
-			if ($n == 2) {
2211
-				return "($arg $op $arg2)";
2212
-			} else {
2213
-				return "($arg $op ($arg2) : $v[0])";
2214
-			}
2215
-		}
2216
-	}
2197
+    if (!is_array($v)) {
2198
+        return $v;
2199
+    }
2200
+
2201
+    $op = array_shift($v);
2202
+    if (!($n = count($v))) {
2203
+        return $op;
2204
+    } else {
2205
+        $arg = _sqlite_calculer_where(array_shift($v));
2206
+        if ($n == 1) {
2207
+            return "$op($arg)";
2208
+        } else {
2209
+            $arg2 = _sqlite_calculer_where(array_shift($v));
2210
+            if ($n == 2) {
2211
+                return "($arg $op $arg2)";
2212
+            } else {
2213
+                return "($arg $op ($arg2) : $v[0])";
2214
+            }
2215
+        }
2216
+    }
2217 2217
 }
2218 2218
 
2219 2219
 
@@ -2228,19 +2228,19 @@  discard block
 block discarded – undo
2228 2228
  * @return array|bool
2229 2229
  */
2230 2230
 function _sqlite_charger_version($version = '') {
2231
-	$versions = [];
2231
+    $versions = [];
2232 2232
 
2233
-	// version 3
2234
-	if (!$version || $version == 3) {
2235
-		if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2236
-			$versions[] = 3;
2237
-		}
2238
-	}
2239
-	if ($version) {
2240
-		return in_array($version, $versions);
2241
-	}
2233
+    // version 3
2234
+    if (!$version || $version == 3) {
2235
+        if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2236
+            $versions[] = 3;
2237
+        }
2238
+    }
2239
+    if ($version) {
2240
+        return in_array($version, $versions);
2241
+    }
2242 2242
 
2243
-	return $versions;
2243
+    return $versions;
2244 2244
 }
2245 2245
 
2246 2246
 
@@ -2278,147 +2278,147 @@  discard block
 block discarded – undo
2278 2278
  */
2279 2279
 function _sqlite_modifier_table($table, $colonne, $opt = [], $serveur = '') {
2280 2280
 
2281
-	if (is_array($table)) {
2282
-		$table_destination = reset($table);
2283
-		$table_origine = key($table);
2284
-	} else {
2285
-		$table_origine = $table_destination = $table;
2286
-	}
2287
-	// ne prend actuellement qu'un changement
2288
-	// mais pourra etre adapte pour changer plus qu'une colonne a la fois
2289
-	if (is_array($colonne)) {
2290
-		$colonne_destination = reset($colonne);
2291
-		$colonne_origine = key($colonne);
2292
-	} else {
2293
-		$colonne_origine = $colonne_destination = $colonne;
2294
-	}
2295
-	if (!isset($opt['field'])) {
2296
-		$opt['field'] = [];
2297
-	}
2298
-	if (!isset($opt['key'])) {
2299
-		$opt['key'] = [];
2300
-	}
2301
-
2302
-	// si les noms de tables sont differents, pas besoin de table temporaire
2303
-	// on prendra directement le nom de la future table
2304
-	$meme_table = ($table_origine == $table_destination);
2305
-
2306
-	$def_origine = sql_showtable($table_origine, false, $serveur);
2307
-	if (!$def_origine or !isset($def_origine['field'])) {
2308
-		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2309
-
2310
-		return false;
2311
-	}
2312
-
2313
-
2314
-	$table_tmp = $table_origine . '_tmp';
2315
-
2316
-	// 1) creer une table temporaire avec les modifications
2317
-	// - DROP : suppression de la colonne
2318
-	// - CHANGE : modification de la colonne
2319
-	// (foreach pour conserver l'ordre des champs)
2320
-
2321
-	// field
2322
-	$fields = [];
2323
-	// pour le INSERT INTO plus loin
2324
-	// stocker la correspondance nouvelles->anciennes colonnes
2325
-	$fields_correspondances = [];
2326
-	foreach ($def_origine['field'] as $c => $d) {
2327
-		if ($colonne_origine && ($c == $colonne_origine)) {
2328
-			// si pas DROP
2329
-			if ($colonne_destination) {
2330
-				$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2331
-				$fields_correspondances[$colonne_destination] = $c;
2332
-			}
2333
-		} else {
2334
-			$fields[$c] = $d;
2335
-			$fields_correspondances[$c] = $c;
2336
-		}
2337
-	}
2338
-	// cas de ADD sqlite2 (ajout du champ en fin de table):
2339
-	if (!$colonne_origine && $colonne_destination) {
2340
-		$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2341
-	}
2342
-
2343
-	// key...
2344
-	$keys = [];
2345
-	foreach ($def_origine['key'] as $c => $d) {
2346
-		$c = str_replace($colonne_origine, $colonne_destination, $c);
2347
-		$d = str_replace($colonne_origine, $colonne_destination, $d);
2348
-		// seulement si on ne supprime pas la colonne !
2349
-		if ($d) {
2350
-			$keys[$c] = $d;
2351
-		}
2352
-	}
2353
-
2354
-	// autres keys, on merge
2355
-	$keys = array_merge($keys, $opt['key']);
2356
-	$queries = [];
2357
-
2358
-	// copier dans destination (si differente de origine), sinon tmp
2359
-	$table_copie = ($meme_table) ? $table_tmp : $table_destination;
2360
-	$autoinc = (isset($keys['PRIMARY KEY'])
2361
-		and $keys['PRIMARY KEY']
2362
-		and stripos($keys['PRIMARY KEY'], ',') === false
2363
-		and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2364
-
2365
-	if (
2366
-		$q = _sqlite_requete_create(
2367
-			$table_copie,
2368
-			$fields,
2369
-			$keys,
2370
-			$autoinc,
2371
-			$temporary = false,
2372
-			$ifnotexists = true,
2373
-			$serveur
2374
-		)
2375
-	) {
2376
-		$queries[] = $q;
2377
-	}
2378
-
2379
-
2380
-	// 2) y copier les champs qui vont bien
2381
-	$champs_dest = join(', ', array_keys($fields_correspondances));
2382
-	$champs_ori = join(', ', $fields_correspondances);
2383
-	$queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2384
-
2385
-	// 3) supprimer la table d'origine
2386
-	$queries[] = "DROP TABLE $table_origine";
2387
-
2388
-	// 4) renommer la table temporaire
2389
-	// avec le nom de la table destination
2390
-	// si necessaire
2391
-	if ($meme_table) {
2392
-		$queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2393
-	}
2394
-
2395
-	// 5) remettre les index !
2396
-	foreach ($keys as $k => $v) {
2397
-		if ($k == 'PRIMARY KEY') {
2398
-		} else {
2399
-			// enlever KEY
2400
-			$k = substr($k, 4);
2401
-			$queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2402
-		}
2403
-	}
2404
-
2405
-
2406
-	if (count($queries)) {
2407
-		spip_sqlite::demarrer_transaction($serveur);
2408
-		// il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2409
-		foreach ($queries as $q) {
2410
-			if (!spip_sqlite::executer_requete($q, $serveur)) {
2411
-				spip_log('SQLite : ALTER TABLE table :'
2412
-					. " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2413
-				spip_sqlite::annuler_transaction($serveur);
2414
-
2415
-				return false;
2416
-			}
2417
-		}
2418
-		spip_sqlite::finir_transaction($serveur);
2419
-	}
2420
-
2421
-	return true;
2281
+    if (is_array($table)) {
2282
+        $table_destination = reset($table);
2283
+        $table_origine = key($table);
2284
+    } else {
2285
+        $table_origine = $table_destination = $table;
2286
+    }
2287
+    // ne prend actuellement qu'un changement
2288
+    // mais pourra etre adapte pour changer plus qu'une colonne a la fois
2289
+    if (is_array($colonne)) {
2290
+        $colonne_destination = reset($colonne);
2291
+        $colonne_origine = key($colonne);
2292
+    } else {
2293
+        $colonne_origine = $colonne_destination = $colonne;
2294
+    }
2295
+    if (!isset($opt['field'])) {
2296
+        $opt['field'] = [];
2297
+    }
2298
+    if (!isset($opt['key'])) {
2299
+        $opt['key'] = [];
2300
+    }
2301
+
2302
+    // si les noms de tables sont differents, pas besoin de table temporaire
2303
+    // on prendra directement le nom de la future table
2304
+    $meme_table = ($table_origine == $table_destination);
2305
+
2306
+    $def_origine = sql_showtable($table_origine, false, $serveur);
2307
+    if (!$def_origine or !isset($def_origine['field'])) {
2308
+        spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2309
+
2310
+        return false;
2311
+    }
2312
+
2313
+
2314
+    $table_tmp = $table_origine . '_tmp';
2315
+
2316
+    // 1) creer une table temporaire avec les modifications
2317
+    // - DROP : suppression de la colonne
2318
+    // - CHANGE : modification de la colonne
2319
+    // (foreach pour conserver l'ordre des champs)
2320
+
2321
+    // field
2322
+    $fields = [];
2323
+    // pour le INSERT INTO plus loin
2324
+    // stocker la correspondance nouvelles->anciennes colonnes
2325
+    $fields_correspondances = [];
2326
+    foreach ($def_origine['field'] as $c => $d) {
2327
+        if ($colonne_origine && ($c == $colonne_origine)) {
2328
+            // si pas DROP
2329
+            if ($colonne_destination) {
2330
+                $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2331
+                $fields_correspondances[$colonne_destination] = $c;
2332
+            }
2333
+        } else {
2334
+            $fields[$c] = $d;
2335
+            $fields_correspondances[$c] = $c;
2336
+        }
2337
+    }
2338
+    // cas de ADD sqlite2 (ajout du champ en fin de table):
2339
+    if (!$colonne_origine && $colonne_destination) {
2340
+        $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2341
+    }
2342
+
2343
+    // key...
2344
+    $keys = [];
2345
+    foreach ($def_origine['key'] as $c => $d) {
2346
+        $c = str_replace($colonne_origine, $colonne_destination, $c);
2347
+        $d = str_replace($colonne_origine, $colonne_destination, $d);
2348
+        // seulement si on ne supprime pas la colonne !
2349
+        if ($d) {
2350
+            $keys[$c] = $d;
2351
+        }
2352
+    }
2353
+
2354
+    // autres keys, on merge
2355
+    $keys = array_merge($keys, $opt['key']);
2356
+    $queries = [];
2357
+
2358
+    // copier dans destination (si differente de origine), sinon tmp
2359
+    $table_copie = ($meme_table) ? $table_tmp : $table_destination;
2360
+    $autoinc = (isset($keys['PRIMARY KEY'])
2361
+        and $keys['PRIMARY KEY']
2362
+        and stripos($keys['PRIMARY KEY'], ',') === false
2363
+        and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2364
+
2365
+    if (
2366
+        $q = _sqlite_requete_create(
2367
+            $table_copie,
2368
+            $fields,
2369
+            $keys,
2370
+            $autoinc,
2371
+            $temporary = false,
2372
+            $ifnotexists = true,
2373
+            $serveur
2374
+        )
2375
+    ) {
2376
+        $queries[] = $q;
2377
+    }
2378
+
2379
+
2380
+    // 2) y copier les champs qui vont bien
2381
+    $champs_dest = join(', ', array_keys($fields_correspondances));
2382
+    $champs_ori = join(', ', $fields_correspondances);
2383
+    $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2384
+
2385
+    // 3) supprimer la table d'origine
2386
+    $queries[] = "DROP TABLE $table_origine";
2387
+
2388
+    // 4) renommer la table temporaire
2389
+    // avec le nom de la table destination
2390
+    // si necessaire
2391
+    if ($meme_table) {
2392
+        $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2393
+    }
2394
+
2395
+    // 5) remettre les index !
2396
+    foreach ($keys as $k => $v) {
2397
+        if ($k == 'PRIMARY KEY') {
2398
+        } else {
2399
+            // enlever KEY
2400
+            $k = substr($k, 4);
2401
+            $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2402
+        }
2403
+    }
2404
+
2405
+
2406
+    if (count($queries)) {
2407
+        spip_sqlite::demarrer_transaction($serveur);
2408
+        // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2409
+        foreach ($queries as $q) {
2410
+            if (!spip_sqlite::executer_requete($q, $serveur)) {
2411
+                spip_log('SQLite : ALTER TABLE table :'
2412
+                    . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2413
+                spip_sqlite::annuler_transaction($serveur);
2414
+
2415
+                return false;
2416
+            }
2417
+        }
2418
+        spip_sqlite::finir_transaction($serveur);
2419
+    }
2420
+
2421
+    return true;
2422 2422
 }
2423 2423
 
2424 2424
 
@@ -2428,61 +2428,61 @@  discard block
 block discarded – undo
2428 2428
  * @return array
2429 2429
  */
2430 2430
 function _sqlite_ref_fonctions() {
2431
-	$fonctions = [
2432
-		'alter' => 'spip_sqlite_alter',
2433
-		'count' => 'spip_sqlite_count',
2434
-		'countsel' => 'spip_sqlite_countsel',
2435
-		'create' => 'spip_sqlite_create',
2436
-		'create_base' => 'spip_sqlite_create_base',
2437
-		'create_view' => 'spip_sqlite_create_view',
2438
-		'date_proche' => 'spip_sqlite_date_proche',
2439
-		'delete' => 'spip_sqlite_delete',
2440
-		'drop_table' => 'spip_sqlite_drop_table',
2441
-		'drop_view' => 'spip_sqlite_drop_view',
2442
-		'errno' => 'spip_sqlite_errno',
2443
-		'error' => 'spip_sqlite_error',
2444
-		'explain' => 'spip_sqlite_explain',
2445
-		'fetch' => 'spip_sqlite_fetch',
2446
-		'seek' => 'spip_sqlite_seek',
2447
-		'free' => 'spip_sqlite_free',
2448
-		'hex' => 'spip_sqlite_hex',
2449
-		'in' => 'spip_sqlite_in',
2450
-		'insert' => 'spip_sqlite_insert',
2451
-		'insertq' => 'spip_sqlite_insertq',
2452
-		'insertq_multi' => 'spip_sqlite_insertq_multi',
2453
-		'listdbs' => 'spip_sqlite_listdbs',
2454
-		'multi' => 'spip_sqlite_multi',
2455
-		'optimize' => 'spip_sqlite_optimize',
2456
-		'query' => 'spip_sqlite_query',
2457
-		'quote' => 'spip_sqlite_quote',
2458
-		'repair' => 'spip_sqlite_repair',
2459
-		'replace' => 'spip_sqlite_replace',
2460
-		'replace_multi' => 'spip_sqlite_replace_multi',
2461
-		'select' => 'spip_sqlite_select',
2462
-		'selectdb' => 'spip_sqlite_selectdb',
2463
-		'set_charset' => 'spip_sqlite_set_charset',
2464
-		'get_charset' => 'spip_sqlite_get_charset',
2465
-		'showbase' => 'spip_sqlite_showbase',
2466
-		'showtable' => 'spip_sqlite_showtable',
2467
-		'table_exists' => 'spip_sqlite_table_exists',
2468
-		'update' => 'spip_sqlite_update',
2469
-		'updateq' => 'spip_sqlite_updateq',
2470
-		'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2471
-		'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2472
-		'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2473
-	];
2474
-
2475
-	// association de chaque nom http d'un charset aux couples sqlite
2476
-	// SQLite supporte utf-8 et utf-16 uniquement.
2477
-	$charsets = [
2478
-		'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2479
-		//'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2480
-		//'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2481
-	];
2482
-
2483
-	$fonctions['charsets'] = $charsets;
2484
-
2485
-	return $fonctions;
2431
+    $fonctions = [
2432
+        'alter' => 'spip_sqlite_alter',
2433
+        'count' => 'spip_sqlite_count',
2434
+        'countsel' => 'spip_sqlite_countsel',
2435
+        'create' => 'spip_sqlite_create',
2436
+        'create_base' => 'spip_sqlite_create_base',
2437
+        'create_view' => 'spip_sqlite_create_view',
2438
+        'date_proche' => 'spip_sqlite_date_proche',
2439
+        'delete' => 'spip_sqlite_delete',
2440
+        'drop_table' => 'spip_sqlite_drop_table',
2441
+        'drop_view' => 'spip_sqlite_drop_view',
2442
+        'errno' => 'spip_sqlite_errno',
2443
+        'error' => 'spip_sqlite_error',
2444
+        'explain' => 'spip_sqlite_explain',
2445
+        'fetch' => 'spip_sqlite_fetch',
2446
+        'seek' => 'spip_sqlite_seek',
2447
+        'free' => 'spip_sqlite_free',
2448
+        'hex' => 'spip_sqlite_hex',
2449
+        'in' => 'spip_sqlite_in',
2450
+        'insert' => 'spip_sqlite_insert',
2451
+        'insertq' => 'spip_sqlite_insertq',
2452
+        'insertq_multi' => 'spip_sqlite_insertq_multi',
2453
+        'listdbs' => 'spip_sqlite_listdbs',
2454
+        'multi' => 'spip_sqlite_multi',
2455
+        'optimize' => 'spip_sqlite_optimize',
2456
+        'query' => 'spip_sqlite_query',
2457
+        'quote' => 'spip_sqlite_quote',
2458
+        'repair' => 'spip_sqlite_repair',
2459
+        'replace' => 'spip_sqlite_replace',
2460
+        'replace_multi' => 'spip_sqlite_replace_multi',
2461
+        'select' => 'spip_sqlite_select',
2462
+        'selectdb' => 'spip_sqlite_selectdb',
2463
+        'set_charset' => 'spip_sqlite_set_charset',
2464
+        'get_charset' => 'spip_sqlite_get_charset',
2465
+        'showbase' => 'spip_sqlite_showbase',
2466
+        'showtable' => 'spip_sqlite_showtable',
2467
+        'table_exists' => 'spip_sqlite_table_exists',
2468
+        'update' => 'spip_sqlite_update',
2469
+        'updateq' => 'spip_sqlite_updateq',
2470
+        'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2471
+        'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2472
+        'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2473
+    ];
2474
+
2475
+    // association de chaque nom http d'un charset aux couples sqlite
2476
+    // SQLite supporte utf-8 et utf-16 uniquement.
2477
+    $charsets = [
2478
+        'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2479
+        //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2480
+        //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2481
+    ];
2482
+
2483
+    $fonctions['charsets'] = $charsets;
2484
+
2485
+    return $fonctions;
2486 2486
 }
2487 2487
 
2488 2488
 
@@ -2494,56 +2494,56 @@  discard block
 block discarded – undo
2494 2494
  * @return mixed
2495 2495
  */
2496 2496
 function _sqlite_remplacements_definitions_table($query, $autoinc = false) {
2497
-	// quelques remplacements
2498
-	$num = '(\s*\([0-9]*\))?';
2499
-	$enum = '(\s*\([^\)]*\))?';
2500
-
2501
-	$remplace = [
2502
-		'/enum' . $enum . '/is' => 'VARCHAR(255)',
2503
-		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2504
-		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2505
-		'/auto_increment/is' => '',
2506
-		'/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2507
-		'/(timestamp .* )ON .*$/is' => '\\1',
2508
-		'/character set \w+/is' => '',
2509
-		'/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2510
-		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511
-		'/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2512
-		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2513
-		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2514
-	];
2515
-
2516
-	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2517
-	$remplace_autocinc = [
2518
-		'/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2519
-	];
2520
-	// pour les int non autoincrement, il faut un DEFAULT
2521
-	$remplace_nonautocinc = [
2522
-		'/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2523
-	];
2524
-
2525
-	if (is_string($query)) {
2526
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
2527
-		if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2528
-			$query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2529
-		} else {
2530
-			$query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2531
-			$query = _sqlite_collate_ci($query);
2532
-		}
2533
-	} elseif (is_array($query)) {
2534
-		foreach ($query as $k => $q) {
2535
-			$ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2536
-			$query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2537
-			if ($ai) {
2538
-				$query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2539
-			} else {
2540
-				$query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2541
-				$query[$k] = _sqlite_collate_ci($query[$k]);
2542
-			}
2543
-		}
2544
-	}
2545
-
2546
-	return $query;
2497
+    // quelques remplacements
2498
+    $num = '(\s*\([0-9]*\))?';
2499
+    $enum = '(\s*\([^\)]*\))?';
2500
+
2501
+    $remplace = [
2502
+        '/enum' . $enum . '/is' => 'VARCHAR(255)',
2503
+        '/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2504
+        '/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2505
+        '/auto_increment/is' => '',
2506
+        '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2507
+        '/(timestamp .* )ON .*$/is' => '\\1',
2508
+        '/character set \w+/is' => '',
2509
+        '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2510
+        '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511
+        '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2512
+        '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2513
+        '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2514
+    ];
2515
+
2516
+    // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2517
+    $remplace_autocinc = [
2518
+        '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2519
+    ];
2520
+    // pour les int non autoincrement, il faut un DEFAULT
2521
+    $remplace_nonautocinc = [
2522
+        '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2523
+    ];
2524
+
2525
+    if (is_string($query)) {
2526
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
2527
+        if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2528
+            $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2529
+        } else {
2530
+            $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2531
+            $query = _sqlite_collate_ci($query);
2532
+        }
2533
+    } elseif (is_array($query)) {
2534
+        foreach ($query as $k => $q) {
2535
+            $ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2536
+            $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2537
+            if ($ai) {
2538
+                $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2539
+            } else {
2540
+                $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2541
+                $query[$k] = _sqlite_collate_ci($query[$k]);
2542
+            }
2543
+        }
2544
+    }
2545
+
2546
+    return $query;
2547 2547
 }
2548 2548
 
2549 2549
 /**
@@ -2554,17 +2554,17 @@  discard block
 block discarded – undo
2554 2554
  * @return string
2555 2555
  */
2556 2556
 function _sqlite_collate_ci($champ) {
2557
-	if (stripos($champ, 'COLLATE') !== false) {
2558
-		return $champ;
2559
-	}
2560
-	if (stripos($champ, 'BINARY') !== false) {
2561
-		return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2562
-	}
2563
-	if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2564
-		return $champ . ' COLLATE NOCASE';
2565
-	}
2557
+    if (stripos($champ, 'COLLATE') !== false) {
2558
+        return $champ;
2559
+    }
2560
+    if (stripos($champ, 'BINARY') !== false) {
2561
+        return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2562
+    }
2563
+    if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2564
+        return $champ . ' COLLATE NOCASE';
2565
+    }
2566 2566
 
2567
-	return $champ;
2567
+    return $champ;
2568 2568
 }
2569 2569
 
2570 2570
 
@@ -2583,84 +2583,84 @@  discard block
 block discarded – undo
2583 2583
  * @return bool|string
2584 2584
  */
2585 2585
 function _sqlite_requete_create(
2586
-	$nom,
2587
-	$champs,
2588
-	$cles,
2589
-	$autoinc = false,
2590
-	$temporary = false,
2591
-	$_ifnotexists = true,
2592
-	$serveur = '',
2593
-	$requeter = true
2586
+    $nom,
2587
+    $champs,
2588
+    $cles,
2589
+    $autoinc = false,
2590
+    $temporary = false,
2591
+    $_ifnotexists = true,
2592
+    $serveur = '',
2593
+    $requeter = true
2594 2594
 ) {
2595
-	$query = $keys = $s = $p = '';
2596
-
2597
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
2598
-	// sans les renseigner (laisse le compilo recuperer la description)
2599
-	if (!is_array($champs) || !is_array($cles)) {
2600
-		return;
2601
-	}
2602
-
2603
-	// sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2604
-	// il faut passer par des create index
2605
-	// Il gere par contre primary key !
2606
-	// Soit la PK est definie dans les cles, soit dans un champs
2607
-	// soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2608
-	$pk = 'PRIMARY KEY';
2609
-	// le champ de cle primaire
2610
-	$champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2611
-
2612
-	foreach ($champs as $k => $v) {
2613
-		if (false !== stripos($v, $pk)) {
2614
-			$champ_pk = $k;
2615
-			// on n'en a plus besoin dans field, vu que defini dans key
2616
-			$champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2617
-			break;
2618
-		}
2619
-	}
2620
-
2621
-	if ($champ_pk) {
2622
-		$keys = "\n\t\t$pk ($champ_pk)";
2623
-	}
2624
-	// Pas de DEFAULT 0 sur les cles primaires en auto-increment
2625
-	if (
2626
-		isset($champs[$champ_pk])
2627
-		and stripos($champs[$champ_pk], 'default 0') !== false
2628
-	) {
2629
-		$champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2630
-	}
2631
-
2632
-	$champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2633
-	foreach ($champs as $k => $v) {
2634
-		$query .= "$s\n\t\t$k $v";
2635
-		$s = ',';
2636
-	}
2637
-
2638
-	$ifnotexists = '';
2639
-	if ($_ifnotexists) {
2640
-		$version = spip_sqlite_fetch(
2641
-			spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2642
-			'',
2643
-			$serveur
2644
-		);
2645
-		if (!function_exists('spip_version_compare')) {
2646
-			include_spip('plugins/installer');
2647
-		}
2648
-
2649
-		if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2650
-			$ifnotexists = ' IF NOT EXISTS';
2651
-		} else {
2652
-			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2653
-			$a = spip_sqlite_showtable($nom, $serveur);
2654
-			if (isset($a['key']['KEY ' . $nom])) {
2655
-				return true;
2656
-			}
2657
-		}
2658
-	}
2659
-
2660
-	$temporary = $temporary ? ' TEMPORARY' : '';
2661
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2662
-
2663
-	return $q;
2595
+    $query = $keys = $s = $p = '';
2596
+
2597
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
2598
+    // sans les renseigner (laisse le compilo recuperer la description)
2599
+    if (!is_array($champs) || !is_array($cles)) {
2600
+        return;
2601
+    }
2602
+
2603
+    // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2604
+    // il faut passer par des create index
2605
+    // Il gere par contre primary key !
2606
+    // Soit la PK est definie dans les cles, soit dans un champs
2607
+    // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2608
+    $pk = 'PRIMARY KEY';
2609
+    // le champ de cle primaire
2610
+    $champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2611
+
2612
+    foreach ($champs as $k => $v) {
2613
+        if (false !== stripos($v, $pk)) {
2614
+            $champ_pk = $k;
2615
+            // on n'en a plus besoin dans field, vu que defini dans key
2616
+            $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2617
+            break;
2618
+        }
2619
+    }
2620
+
2621
+    if ($champ_pk) {
2622
+        $keys = "\n\t\t$pk ($champ_pk)";
2623
+    }
2624
+    // Pas de DEFAULT 0 sur les cles primaires en auto-increment
2625
+    if (
2626
+        isset($champs[$champ_pk])
2627
+        and stripos($champs[$champ_pk], 'default 0') !== false
2628
+    ) {
2629
+        $champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2630
+    }
2631
+
2632
+    $champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2633
+    foreach ($champs as $k => $v) {
2634
+        $query .= "$s\n\t\t$k $v";
2635
+        $s = ',';
2636
+    }
2637
+
2638
+    $ifnotexists = '';
2639
+    if ($_ifnotexists) {
2640
+        $version = spip_sqlite_fetch(
2641
+            spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2642
+            '',
2643
+            $serveur
2644
+        );
2645
+        if (!function_exists('spip_version_compare')) {
2646
+            include_spip('plugins/installer');
2647
+        }
2648
+
2649
+        if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2650
+            $ifnotexists = ' IF NOT EXISTS';
2651
+        } else {
2652
+            /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2653
+            $a = spip_sqlite_showtable($nom, $serveur);
2654
+            if (isset($a['key']['KEY ' . $nom])) {
2655
+                return true;
2656
+            }
2657
+        }
2658
+    }
2659
+
2660
+    $temporary = $temporary ? ' TEMPORARY' : '';
2661
+    $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2662
+
2663
+    return $q;
2664 2664
 }
2665 2665
 
2666 2666
 
@@ -2679,41 +2679,41 @@  discard block
 block discarded – undo
2679 2679
  * @return
2680 2680
  */
2681 2681
 function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur = '') {
2682
-	static $tables = [];
2683
-
2684
-	if (!isset($tables[$table])) {
2685
-		if (!$desc) {
2686
-			$trouver_table = charger_fonction('trouver_table', 'base');
2687
-			$desc = $trouver_table($table, $serveur);
2688
-			// si pas de description, on ne fait rien, ou on die() ?
2689
-			if (!$desc) {
2690
-				return $couples;
2691
-			}
2692
-		}
2693
-
2694
-		// recherche des champs avec simplement 'TIMESTAMP'
2695
-		// cependant, il faudra peut etre etendre
2696
-		// avec la gestion de DEFAULT et ON UPDATE
2697
-		// mais ceux-ci ne sont pas utilises dans le core
2698
-		$tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2699
-
2700
-		$now = _sqlite_func_now(true);
2701
-		foreach ($desc['field'] as $k => $v) {
2702
-			if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2703
-				$tables[$table]['desc'][$k] = $v;
2704
-				$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2705
-			}
2706
-		}
2707
-	}
2708
-	else {
2709
-		$now = _sqlite_func_now(true);
2710
-		foreach (array_keys($tables[$table]['desc']) as $k) {
2711
-			$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2712
-		}
2713
-	}
2714
-
2715
-	// ajout des champs type 'timestamp' absents
2716
-	return array_merge($tables[$table]['valeur'], $couples);
2682
+    static $tables = [];
2683
+
2684
+    if (!isset($tables[$table])) {
2685
+        if (!$desc) {
2686
+            $trouver_table = charger_fonction('trouver_table', 'base');
2687
+            $desc = $trouver_table($table, $serveur);
2688
+            // si pas de description, on ne fait rien, ou on die() ?
2689
+            if (!$desc) {
2690
+                return $couples;
2691
+            }
2692
+        }
2693
+
2694
+        // recherche des champs avec simplement 'TIMESTAMP'
2695
+        // cependant, il faudra peut etre etendre
2696
+        // avec la gestion de DEFAULT et ON UPDATE
2697
+        // mais ceux-ci ne sont pas utilises dans le core
2698
+        $tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2699
+
2700
+        $now = _sqlite_func_now(true);
2701
+        foreach ($desc['field'] as $k => $v) {
2702
+            if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2703
+                $tables[$table]['desc'][$k] = $v;
2704
+                $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2705
+            }
2706
+        }
2707
+    }
2708
+    else {
2709
+        $now = _sqlite_func_now(true);
2710
+        foreach (array_keys($tables[$table]['desc']) as $k) {
2711
+            $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2712
+        }
2713
+    }
2714
+
2715
+    // ajout des champs type 'timestamp' absents
2716
+    return array_merge($tables[$table]['valeur'], $couples);
2717 2717
 }
2718 2718
 
2719 2719
 
@@ -2724,7 +2724,7 @@  discard block
 block discarded – undo
2724 2724
  * @return array|bool
2725 2725
  */
2726 2726
 function spip_versions_sqlite() {
2727
-	return _sqlite_charger_version();
2727
+    return _sqlite_charger_version();
2728 2728
 }
2729 2729
 
2730 2730
 /**
@@ -2732,114 +2732,114 @@  discard block
 block discarded – undo
2732 2732
  * encadrées de transactions.
2733 2733
  **/
2734 2734
 class spip_sqlite {
2735
-	/** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2736
-	public static $requeteurs = [];
2737
-	/** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2738
-	public static $transaction_en_cours = [];
2739
-
2740
-
2741
-	/**
2742
-	 * Retourne une unique instance du requêteur
2743
-	 *
2744
-	 * Retourne une instance unique du requêteur pour une connexion SQLite
2745
-	 * donnée
2746
-	 *
2747
-	 * @param string $serveur
2748
-	 *    Nom du connecteur
2749
-	 * @return sqlite_requeteur
2750
-	 *    Instance unique du requêteur
2751
-	 **/
2752
-	public static function requeteur($serveur) {
2753
-		if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2754
-			spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2755
-		}
2756
-
2757
-		return spip_sqlite::$requeteurs[$serveur];
2758
-	}
2759
-
2760
-	/**
2761
-	 * Prépare le texte d'une requête avant son exécution
2762
-	 *
2763
-	 * Adapte la requête au format plus ou moins MySQL par un format
2764
-	 * compris de SQLite.
2765
-	 *
2766
-	 * Change les préfixes de tables SPIP par ceux véritables
2767
-	 *
2768
-	 * @param string $query Requête à préparer
2769
-	 * @param string $serveur Nom de la connexion
2770
-	 * @return string           Requête préparée
2771
-	 */
2772
-	public static function traduire_requete($query, $serveur) {
2773
-		$requeteur = spip_sqlite::requeteur($serveur);
2774
-		$traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2775
-
2776
-		return $traducteur->traduire_requete();
2777
-	}
2778
-
2779
-	/**
2780
-	 * Démarre une transaction
2781
-	 *
2782
-	 * @param string $serveur Nom de la connexion
2783
-	 **/
2784
-	public static function demarrer_transaction($serveur) {
2785
-		spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2786
-		spip_sqlite::$transaction_en_cours[$serveur] = true;
2787
-	}
2788
-
2789
-	/**
2790
-	 * Exécute la requête donnée
2791
-	 *
2792
-	 * @param string $query Requête
2793
-	 * @param string $serveur Nom de la connexion
2794
-	 * @param null|bool $tracer Demander des statistiques (temps) ?
2795
-	 **/
2796
-	public static function executer_requete($query, $serveur, $tracer = null) {
2797
-		$requeteur = spip_sqlite::requeteur($serveur);
2798
-
2799
-		return $requeteur->executer_requete($query, $tracer);
2800
-	}
2801
-
2802
-	/**
2803
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2804
-	 *
2805
-	 * @param string $serveur Nom de la connexion
2806
-	 * return int                Identifiant
2807
-	 **/
2808
-	public static function last_insert_id($serveur) {
2809
-		$requeteur = spip_sqlite::requeteur($serveur);
2810
-
2811
-		return $requeteur->last_insert_id($serveur);
2812
-	}
2813
-
2814
-	/**
2815
-	 * Annule une transaction
2816
-	 *
2817
-	 * @param string $serveur Nom de la connexion
2818
-	 **/
2819
-	public static function annuler_transaction($serveur) {
2820
-		spip_sqlite::executer_requete('ROLLBACK', $serveur);
2821
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2822
-	}
2823
-
2824
-	/**
2825
-	 * Termine une transaction
2826
-	 *
2827
-	 * @param string $serveur Nom de la connexion
2828
-	 **/
2829
-	public static function finir_transaction($serveur) {
2830
-		// si pas de transaction en cours, ne rien faire et le dire
2831
-		if (
2832
-			!isset(spip_sqlite::$transaction_en_cours[$serveur])
2833
-			or spip_sqlite::$transaction_en_cours[$serveur] == false
2834
-		) {
2835
-			return false;
2836
-		}
2837
-		// sinon fermer la transaction et retourner true
2838
-		spip_sqlite::executer_requete('COMMIT', $serveur);
2839
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2840
-
2841
-		return true;
2842
-	}
2735
+    /** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2736
+    public static $requeteurs = [];
2737
+    /** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2738
+    public static $transaction_en_cours = [];
2739
+
2740
+
2741
+    /**
2742
+     * Retourne une unique instance du requêteur
2743
+     *
2744
+     * Retourne une instance unique du requêteur pour une connexion SQLite
2745
+     * donnée
2746
+     *
2747
+     * @param string $serveur
2748
+     *    Nom du connecteur
2749
+     * @return sqlite_requeteur
2750
+     *    Instance unique du requêteur
2751
+     **/
2752
+    public static function requeteur($serveur) {
2753
+        if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2754
+            spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2755
+        }
2756
+
2757
+        return spip_sqlite::$requeteurs[$serveur];
2758
+    }
2759
+
2760
+    /**
2761
+     * Prépare le texte d'une requête avant son exécution
2762
+     *
2763
+     * Adapte la requête au format plus ou moins MySQL par un format
2764
+     * compris de SQLite.
2765
+     *
2766
+     * Change les préfixes de tables SPIP par ceux véritables
2767
+     *
2768
+     * @param string $query Requête à préparer
2769
+     * @param string $serveur Nom de la connexion
2770
+     * @return string           Requête préparée
2771
+     */
2772
+    public static function traduire_requete($query, $serveur) {
2773
+        $requeteur = spip_sqlite::requeteur($serveur);
2774
+        $traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2775
+
2776
+        return $traducteur->traduire_requete();
2777
+    }
2778
+
2779
+    /**
2780
+     * Démarre une transaction
2781
+     *
2782
+     * @param string $serveur Nom de la connexion
2783
+     **/
2784
+    public static function demarrer_transaction($serveur) {
2785
+        spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2786
+        spip_sqlite::$transaction_en_cours[$serveur] = true;
2787
+    }
2788
+
2789
+    /**
2790
+     * Exécute la requête donnée
2791
+     *
2792
+     * @param string $query Requête
2793
+     * @param string $serveur Nom de la connexion
2794
+     * @param null|bool $tracer Demander des statistiques (temps) ?
2795
+     **/
2796
+    public static function executer_requete($query, $serveur, $tracer = null) {
2797
+        $requeteur = spip_sqlite::requeteur($serveur);
2798
+
2799
+        return $requeteur->executer_requete($query, $tracer);
2800
+    }
2801
+
2802
+    /**
2803
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2804
+     *
2805
+     * @param string $serveur Nom de la connexion
2806
+     * return int                Identifiant
2807
+     **/
2808
+    public static function last_insert_id($serveur) {
2809
+        $requeteur = spip_sqlite::requeteur($serveur);
2810
+
2811
+        return $requeteur->last_insert_id($serveur);
2812
+    }
2813
+
2814
+    /**
2815
+     * Annule une transaction
2816
+     *
2817
+     * @param string $serveur Nom de la connexion
2818
+     **/
2819
+    public static function annuler_transaction($serveur) {
2820
+        spip_sqlite::executer_requete('ROLLBACK', $serveur);
2821
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2822
+    }
2823
+
2824
+    /**
2825
+     * Termine une transaction
2826
+     *
2827
+     * @param string $serveur Nom de la connexion
2828
+     **/
2829
+    public static function finir_transaction($serveur) {
2830
+        // si pas de transaction en cours, ne rien faire et le dire
2831
+        if (
2832
+            !isset(spip_sqlite::$transaction_en_cours[$serveur])
2833
+            or spip_sqlite::$transaction_en_cours[$serveur] == false
2834
+        ) {
2835
+            return false;
2836
+        }
2837
+        // sinon fermer la transaction et retourner true
2838
+        spip_sqlite::executer_requete('COMMIT', $serveur);
2839
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2840
+
2841
+        return true;
2842
+    }
2843 2843
 }
2844 2844
 
2845 2845
 /*
@@ -2852,127 +2852,127 @@  discard block
 block discarded – undo
2852 2852
  */
2853 2853
 
2854 2854
 class sqlite_requeteur {
2855
-	/** @var string Texte de la requête */
2856
-	public $query = ''; // la requete
2857
-	/** @var string Nom de la connexion */
2858
-	public $serveur = '';
2859
-	/** @var PDO Identifiant de la connexion SQLite */
2860
-	public $link = '';
2861
-	/** @var string Prefixe des tables SPIP */
2862
-	public $prefixe = '';
2863
-	/** @var string Nom de la base de donnée */
2864
-	public $db = '';
2865
-	/** @var bool Doit-on tracer les requetes (var_profile) ? */
2866
-	public $tracer = false; // doit-on tracer les requetes (var_profile)
2867
-
2868
-	/** @var string Version de SQLite (2 ou 3) */
2869
-	public $sqlite_version = '';
2870
-
2871
-	/**
2872
-	 * Constructeur
2873
-	 *
2874
-	 * @param string $serveur
2875
-	 * @return bool
2876
-	 */
2877
-	public function __construct($serveur = '') {
2878
-		_sqlite_init();
2879
-		$this->serveur = strtolower($serveur);
2880
-
2881
-		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2882
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2883
-
2884
-			return false;
2885
-		}
2886
-
2887
-		$this->sqlite_version = _sqlite_is_version('', $this->link);
2888
-
2889
-		$this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2890
-		$this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2891
-
2892
-		// tracage des requetes ?
2893
-		$this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2894
-	}
2895
-
2896
-	/**
2897
-	 * Lancer la requête transmise et faire le tracage si demandé
2898
-	 *
2899
-	 * @param string $query
2900
-	 *     Requête à exécuter
2901
-	 * @param bool|null $tracer
2902
-	 *     true pour tracer la requête
2903
-	 * @return bool|PDOStatement|array
2904
-	 */
2905
-	public function executer_requete($query, $tracer = null) {
2906
-		if (is_null($tracer)) {
2907
-			$tracer = $this->tracer;
2908
-		}
2909
-		$err = '';
2910
-		$t = 0;
2911
-		if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2912
-			include_spip('public/tracer');
2913
-			$t = trace_query_start();
2914
-		}
2915
-
2916
-		# spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2917
-		if ($this->link) {
2918
-			// memoriser la derniere erreur PHP vue
2919
-			$last_error = (function_exists('error_get_last') ? error_get_last() : '');
2920
-			$e = null;
2921
-			// sauver la derniere requete
2922
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2923
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2924
-
2925
-			try {
2926
-				$r = $this->link->query($query);
2927
-			} catch (\PDOException $e) {
2928
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2929
-				$r = false;
2930
-			}
2931
-			// sauvegarde de la requete (elle y est deja dans $r->queryString)
2932
-			# $r->spipQueryString = $query;
2933
-
2934
-			// comptage : oblige de compter le nombre d'entrees retournees
2935
-			// par une requete SELECT
2936
-			// aucune autre solution ne donne le nombre attendu :( !
2937
-			// particulierement s'il y a des LIMIT dans la requete.
2938
-			if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2939
-				if ($r) {
2940
-					// noter le link et la query pour faire le comptage *si* on en a besoin
2941
-					$r->spipSqliteRowCount = [$this->link, $query];
2942
-				} elseif ($r instanceof PDOStatement) {
2943
-					$r->spipSqliteRowCount = 0;
2944
-				}
2945
-			}
2946
-
2947
-			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2948
-			if ($e and $e instanceof \PDOException) {
2949
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2950
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2951
-			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2952
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2953
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2954
-			} else {
2955
-				$err = '';
2956
-			}
2957
-		} else {
2958
-			$r = false;
2959
-		}
2960
-
2961
-		if (spip_sqlite_errno($this->serveur)) {
2962
-			$err .= spip_sqlite_error($query, $this->serveur);
2963
-		}
2964
-
2965
-		return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2966
-	}
2967
-
2968
-	/**
2969
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2970
-	 *
2971
-	 * @return string|false
2972
-	 **/
2973
-	public function last_insert_id() {
2974
-		return $this->link->lastInsertId();
2975
-	}
2855
+    /** @var string Texte de la requête */
2856
+    public $query = ''; // la requete
2857
+    /** @var string Nom de la connexion */
2858
+    public $serveur = '';
2859
+    /** @var PDO Identifiant de la connexion SQLite */
2860
+    public $link = '';
2861
+    /** @var string Prefixe des tables SPIP */
2862
+    public $prefixe = '';
2863
+    /** @var string Nom de la base de donnée */
2864
+    public $db = '';
2865
+    /** @var bool Doit-on tracer les requetes (var_profile) ? */
2866
+    public $tracer = false; // doit-on tracer les requetes (var_profile)
2867
+
2868
+    /** @var string Version de SQLite (2 ou 3) */
2869
+    public $sqlite_version = '';
2870
+
2871
+    /**
2872
+     * Constructeur
2873
+     *
2874
+     * @param string $serveur
2875
+     * @return bool
2876
+     */
2877
+    public function __construct($serveur = '') {
2878
+        _sqlite_init();
2879
+        $this->serveur = strtolower($serveur);
2880
+
2881
+        if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2882
+            spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2883
+
2884
+            return false;
2885
+        }
2886
+
2887
+        $this->sqlite_version = _sqlite_is_version('', $this->link);
2888
+
2889
+        $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2890
+        $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2891
+
2892
+        // tracage des requetes ?
2893
+        $this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2894
+    }
2895
+
2896
+    /**
2897
+     * Lancer la requête transmise et faire le tracage si demandé
2898
+     *
2899
+     * @param string $query
2900
+     *     Requête à exécuter
2901
+     * @param bool|null $tracer
2902
+     *     true pour tracer la requête
2903
+     * @return bool|PDOStatement|array
2904
+     */
2905
+    public function executer_requete($query, $tracer = null) {
2906
+        if (is_null($tracer)) {
2907
+            $tracer = $this->tracer;
2908
+        }
2909
+        $err = '';
2910
+        $t = 0;
2911
+        if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2912
+            include_spip('public/tracer');
2913
+            $t = trace_query_start();
2914
+        }
2915
+
2916
+        # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2917
+        if ($this->link) {
2918
+            // memoriser la derniere erreur PHP vue
2919
+            $last_error = (function_exists('error_get_last') ? error_get_last() : '');
2920
+            $e = null;
2921
+            // sauver la derniere requete
2922
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2923
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2924
+
2925
+            try {
2926
+                $r = $this->link->query($query);
2927
+            } catch (\PDOException $e) {
2928
+                spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2929
+                $r = false;
2930
+            }
2931
+            // sauvegarde de la requete (elle y est deja dans $r->queryString)
2932
+            # $r->spipQueryString = $query;
2933
+
2934
+            // comptage : oblige de compter le nombre d'entrees retournees
2935
+            // par une requete SELECT
2936
+            // aucune autre solution ne donne le nombre attendu :( !
2937
+            // particulierement s'il y a des LIMIT dans la requete.
2938
+            if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2939
+                if ($r) {
2940
+                    // noter le link et la query pour faire le comptage *si* on en a besoin
2941
+                    $r->spipSqliteRowCount = [$this->link, $query];
2942
+                } elseif ($r instanceof PDOStatement) {
2943
+                    $r->spipSqliteRowCount = 0;
2944
+                }
2945
+            }
2946
+
2947
+            // loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2948
+            if ($e and $e instanceof \PDOException) {
2949
+                $err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2950
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2951
+            } elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2952
+                $err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2953
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2954
+            } else {
2955
+                $err = '';
2956
+            }
2957
+        } else {
2958
+            $r = false;
2959
+        }
2960
+
2961
+        if (spip_sqlite_errno($this->serveur)) {
2962
+            $err .= spip_sqlite_error($query, $this->serveur);
2963
+        }
2964
+
2965
+        return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2966
+    }
2967
+
2968
+    /**
2969
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2970
+     *
2971
+     * @return string|false
2972
+     **/
2973
+    public function last_insert_id() {
2974
+        return $this->link->lastInsertId();
2975
+    }
2976 2976
 }
2977 2977
 
2978 2978
 
@@ -2982,206 +2982,206 @@  discard block
 block discarded – undo
2982 2982
  * (fonction pour proteger les textes)
2983 2983
  */
2984 2984
 class sqlite_traducteur {
2985
-	/** @var string $query Texte de la requête */
2986
-	public $query = '';
2987
-	/** @var string $prefixe Préfixe des tables */
2988
-	public $prefixe = '';
2989
-	/** @var string $sqlite_version Version de sqlite (2 ou 3) */
2990
-	public $sqlite_version = '';
2991
-
2992
-	/** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2993
-	 *
2994
-	 * @var array
2995
-	 */
2996
-	public $textes = [];
2997
-
2998
-	/**
2999
-	 * Constructeur
3000
-	 *
3001
-	 * @param string $query Requête à préparer
3002
-	 * @param string $prefixe Prefixe des tables à utiliser
3003
-	 * @param string $sqlite_version Version SQLite (2 ou 3)
3004
-	 */
3005
-	public function __construct($query, $prefixe, $sqlite_version) {
3006
-		$this->query = $query;
3007
-		$this->prefixe = $prefixe;
3008
-		$this->sqlite_version = $sqlite_version;
3009
-	}
3010
-
3011
-	/**
3012
-	 * Transformer la requete pour SQLite
3013
-	 *
3014
-	 * Enlève les textes, transforme la requête pour quelle soit
3015
-	 * bien interprétée par SQLite, puis remet les textes
3016
-	 * la fonction affecte `$this->query`
3017
-	 */
3018
-	public function traduire_requete() {
3019
-		//
3020
-		// 1) Protection des textes en les remplacant par des codes
3021
-		//
3022
-		// enlever les 'textes' et initialiser avec
3023
-		list($this->query, $textes) = query_echappe_textes($this->query);
3024
-
3025
-		//
3026
-		// 2) Corrections de la requete
3027
-		//
3028
-		// Correction Create Database
3029
-		// Create Database -> requete ignoree
3030
-		if (strpos($this->query, 'CREATE DATABASE') === 0) {
3031
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3032
-			$this->query = 'SELECT 1';
3033
-		}
3034
-
3035
-		// Correction Insert Ignore
3036
-		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3037
-		if (strpos($this->query, 'INSERT IGNORE') === 0) {
3038
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3039
-			$this->query = 'INSERT ' . substr($this->query, '13');
3040
-		}
3041
-
3042
-		// Correction des dates avec INTERVAL
3043
-		// utiliser sql_date_proche() de preference
3044
-		if (strpos($this->query, 'INTERVAL') !== false) {
3045
-			$this->query = preg_replace_callback(
3046
-				'/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3047
-				[&$this, '_remplacerDateParTime'],
3048
-				$this->query
3049
-			);
3050
-		}
3051
-
3052
-		if (strpos($this->query, 'LEFT(') !== false) {
3053
-			$this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3054
-		}
3055
-
3056
-		if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3057
-			$this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3058
-		}
3059
-
3060
-
3061
-		// Correction Using
3062
-		// USING (non reconnu en sqlite2)
3063
-		// problematique car la jointure ne se fait pas du coup.
3064
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3065
-			spip_log(
3066
-				"'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3067
-				'sqlite.' . _LOG_ERREUR
3068
-			);
3069
-			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3070
-		}
3071
-
3072
-		// Correction Field
3073
-		// remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3074
-		if (strpos($this->query, 'FIELD') !== false) {
3075
-			$this->query = preg_replace_callback(
3076
-				'/FIELD\s*\(([^\)]*)\)/',
3077
-				[&$this, '_remplacerFieldParCase'],
3078
-				$this->query
3079
-			);
3080
-		}
3081
-
3082
-		// Correction des noms de tables FROM
3083
-		// mettre les bons noms de table dans from, update, insert, replace...
3084
-		if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3085
-			$suite = strstr($this->query, $regs[0]);
3086
-			$this->query = substr($this->query, 0, -strlen($suite));
3087
-		} else {
3088
-			$suite = '';
3089
-		}
3090
-		$pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3091
-		$this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3092
-
3093
-		// Correction zero AS x
3094
-		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3095
-		// n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3096
-		// il dit que x ne doit pas être un integer dans le order by !
3097
-		// on remplace du coup x par vide() dans ce cas uniquement
3098
-		//
3099
-		// apparait dans public/vertebrer.php et dans le plugin menu aussi qui genere aussi ce genre de requete via un {par num #GET{tri_num}}
3100
-		// mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3101
-		if ((strpos($this->query, '0 AS') !== false)) {
3102
-			// on ne remplace que dans ORDER BY ou GROUP BY
3103
-			if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3104
-				$suite = strstr($this->query, $regs[0]);
3105
-				$this->query = substr($this->query, 0, -strlen($suite));
3106
-
3107
-				// on cherche les noms des x dans 0 AS x
3108
-				// on remplace dans $suite le nom par vide()
3109
-				preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3110
-				foreach ($matches[1] as $m) {
3111
-					if (strpos($suite, $m) !== false) {
3112
-						$suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3113
-					}
3114
-				}
3115
-				$this->query .= $suite;
3116
-			}
3117
-		}
3118
-
3119
-		// Correction possible des divisions entieres
3120
-		// Le standard SQL (lequel? ou?) semble indiquer que
3121
-		// a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3122
-		// C'est ce que retournent effectivement SQL Server et SQLite
3123
-		// Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3124
-		//
3125
-		// On peut forcer la conversion en multipliant par 1.0 avant la division
3126
-		// /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3127
-		// cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3128
-		//     http://www.sqlite.org/cvstrac/tktview?tn=3202
3129
-		// (4*1.0/3) n'est pas rendu dans ce cas !
3130
-		# $this->query = str_replace('/','* 1.00 / ',$this->query);
3131
-
3132
-
3133
-		// Correction critere REGEXP, non reconnu en sqlite2
3134
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3135
-			$this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3136
-		}
3137
-
3138
-		//
3139
-		// 3) Remise en place des textes d'origine
3140
-		//
3141
-		// Correction Antiquotes et echappements
3142
-		// ` => rien
3143
-		if (strpos($this->query, '`') !== false) {
3144
-			$this->query = str_replace('`', '', $this->query);
3145
-		}
3146
-
3147
-		$this->query = query_reinjecte_textes($this->query, $textes);
3148
-
3149
-		return $this->query;
3150
-	}
3151
-
3152
-
3153
-	/**
3154
-	 * Callback pour remplacer `DATE_` / `INTERVAL`
3155
-	 * par `DATE ... strtotime`
3156
-	 *
3157
-	 * @param array $matches Captures
3158
-	 * @return string Texte de date compris par SQLite
3159
-	 */
3160
-	public function _remplacerDateParTime($matches) {
3161
-		$op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3162
-
3163
-		return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3164
-	}
3165
-
3166
-	/**
3167
-	 * Callback pour remplacer `FIELD(table,i,j,k...)`
3168
-	 * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3169
-	 *
3170
-	 * @param array $matches Captures
3171
-	 * @return string Texte de liste ordonnée compris par SQLite
3172
-	 */
3173
-	public function _remplacerFieldParCase($matches) {
3174
-		$fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3175
-		$t = explode(',', $fields);
3176
-		$index = array_shift($t);
3177
-
3178
-		$res = '';
3179
-		$n = 0;
3180
-		foreach ($t as $v) {
3181
-			$n++;
3182
-			$res .= "\nWHEN $index=$v THEN $n";
3183
-		}
3184
-
3185
-		return "CASE $res ELSE 0 END ";
3186
-	}
2985
+    /** @var string $query Texte de la requête */
2986
+    public $query = '';
2987
+    /** @var string $prefixe Préfixe des tables */
2988
+    public $prefixe = '';
2989
+    /** @var string $sqlite_version Version de sqlite (2 ou 3) */
2990
+    public $sqlite_version = '';
2991
+
2992
+    /** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2993
+     *
2994
+     * @var array
2995
+     */
2996
+    public $textes = [];
2997
+
2998
+    /**
2999
+     * Constructeur
3000
+     *
3001
+     * @param string $query Requête à préparer
3002
+     * @param string $prefixe Prefixe des tables à utiliser
3003
+     * @param string $sqlite_version Version SQLite (2 ou 3)
3004
+     */
3005
+    public function __construct($query, $prefixe, $sqlite_version) {
3006
+        $this->query = $query;
3007
+        $this->prefixe = $prefixe;
3008
+        $this->sqlite_version = $sqlite_version;
3009
+    }
3010
+
3011
+    /**
3012
+     * Transformer la requete pour SQLite
3013
+     *
3014
+     * Enlève les textes, transforme la requête pour quelle soit
3015
+     * bien interprétée par SQLite, puis remet les textes
3016
+     * la fonction affecte `$this->query`
3017
+     */
3018
+    public function traduire_requete() {
3019
+        //
3020
+        // 1) Protection des textes en les remplacant par des codes
3021
+        //
3022
+        // enlever les 'textes' et initialiser avec
3023
+        list($this->query, $textes) = query_echappe_textes($this->query);
3024
+
3025
+        //
3026
+        // 2) Corrections de la requete
3027
+        //
3028
+        // Correction Create Database
3029
+        // Create Database -> requete ignoree
3030
+        if (strpos($this->query, 'CREATE DATABASE') === 0) {
3031
+            spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3032
+            $this->query = 'SELECT 1';
3033
+        }
3034
+
3035
+        // Correction Insert Ignore
3036
+        // INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3037
+        if (strpos($this->query, 'INSERT IGNORE') === 0) {
3038
+            spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3039
+            $this->query = 'INSERT ' . substr($this->query, '13');
3040
+        }
3041
+
3042
+        // Correction des dates avec INTERVAL
3043
+        // utiliser sql_date_proche() de preference
3044
+        if (strpos($this->query, 'INTERVAL') !== false) {
3045
+            $this->query = preg_replace_callback(
3046
+                '/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3047
+                [&$this, '_remplacerDateParTime'],
3048
+                $this->query
3049
+            );
3050
+        }
3051
+
3052
+        if (strpos($this->query, 'LEFT(') !== false) {
3053
+            $this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3054
+        }
3055
+
3056
+        if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3057
+            $this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3058
+        }
3059
+
3060
+
3061
+        // Correction Using
3062
+        // USING (non reconnu en sqlite2)
3063
+        // problematique car la jointure ne se fait pas du coup.
3064
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3065
+            spip_log(
3066
+                "'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3067
+                'sqlite.' . _LOG_ERREUR
3068
+            );
3069
+            $this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3070
+        }
3071
+
3072
+        // Correction Field
3073
+        // remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3074
+        if (strpos($this->query, 'FIELD') !== false) {
3075
+            $this->query = preg_replace_callback(
3076
+                '/FIELD\s*\(([^\)]*)\)/',
3077
+                [&$this, '_remplacerFieldParCase'],
3078
+                $this->query
3079
+            );
3080
+        }
3081
+
3082
+        // Correction des noms de tables FROM
3083
+        // mettre les bons noms de table dans from, update, insert, replace...
3084
+        if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3085
+            $suite = strstr($this->query, $regs[0]);
3086
+            $this->query = substr($this->query, 0, -strlen($suite));
3087
+        } else {
3088
+            $suite = '';
3089
+        }
3090
+        $pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3091
+        $this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3092
+
3093
+        // Correction zero AS x
3094
+        // pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3095
+        // n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3096
+        // il dit que x ne doit pas être un integer dans le order by !
3097
+        // on remplace du coup x par vide() dans ce cas uniquement
3098
+        //
3099
+        // apparait dans public/vertebrer.php et dans le plugin menu aussi qui genere aussi ce genre de requete via un {par num #GET{tri_num}}
3100
+        // mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3101
+        if ((strpos($this->query, '0 AS') !== false)) {
3102
+            // on ne remplace que dans ORDER BY ou GROUP BY
3103
+            if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3104
+                $suite = strstr($this->query, $regs[0]);
3105
+                $this->query = substr($this->query, 0, -strlen($suite));
3106
+
3107
+                // on cherche les noms des x dans 0 AS x
3108
+                // on remplace dans $suite le nom par vide()
3109
+                preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3110
+                foreach ($matches[1] as $m) {
3111
+                    if (strpos($suite, $m) !== false) {
3112
+                        $suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3113
+                    }
3114
+                }
3115
+                $this->query .= $suite;
3116
+            }
3117
+        }
3118
+
3119
+        // Correction possible des divisions entieres
3120
+        // Le standard SQL (lequel? ou?) semble indiquer que
3121
+        // a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3122
+        // C'est ce que retournent effectivement SQL Server et SQLite
3123
+        // Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3124
+        //
3125
+        // On peut forcer la conversion en multipliant par 1.0 avant la division
3126
+        // /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3127
+        // cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3128
+        //     http://www.sqlite.org/cvstrac/tktview?tn=3202
3129
+        // (4*1.0/3) n'est pas rendu dans ce cas !
3130
+        # $this->query = str_replace('/','* 1.00 / ',$this->query);
3131
+
3132
+
3133
+        // Correction critere REGEXP, non reconnu en sqlite2
3134
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3135
+            $this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3136
+        }
3137
+
3138
+        //
3139
+        // 3) Remise en place des textes d'origine
3140
+        //
3141
+        // Correction Antiquotes et echappements
3142
+        // ` => rien
3143
+        if (strpos($this->query, '`') !== false) {
3144
+            $this->query = str_replace('`', '', $this->query);
3145
+        }
3146
+
3147
+        $this->query = query_reinjecte_textes($this->query, $textes);
3148
+
3149
+        return $this->query;
3150
+    }
3151
+
3152
+
3153
+    /**
3154
+     * Callback pour remplacer `DATE_` / `INTERVAL`
3155
+     * par `DATE ... strtotime`
3156
+     *
3157
+     * @param array $matches Captures
3158
+     * @return string Texte de date compris par SQLite
3159
+     */
3160
+    public function _remplacerDateParTime($matches) {
3161
+        $op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3162
+
3163
+        return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3164
+    }
3165
+
3166
+    /**
3167
+     * Callback pour remplacer `FIELD(table,i,j,k...)`
3168
+     * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3169
+     *
3170
+     * @param array $matches Captures
3171
+     * @return string Texte de liste ordonnée compris par SQLite
3172
+     */
3173
+    public function _remplacerFieldParCase($matches) {
3174
+        $fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3175
+        $t = explode(',', $fields);
3176
+        $index = array_shift($t);
3177
+
3178
+        $res = '';
3179
+        $n = 0;
3180
+        foreach ($t as $v) {
3181
+            $n++;
3182
+            $res .= "\nWHEN $index=$v THEN $n";
3183
+        }
3184
+
3185
+        return "CASE $res ELSE 0 END ";
3186
+    }
3187 3187
 }
Please login to merge, or discard this patch.
ecrire/lang/ecrire_nl.php 1 patch
Indentation   +828 added lines, -828 removed lines patch added patch discarded remove patch
@@ -4,410 +4,410 @@  discard block
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'activer_plugin' => 'Plugin activeren',
14
-	'affichage' => 'Weergave',
15
-	'aide_non_disponible' => 'Dit deel van de online handleiding is nog niet beschikbaar in het Nederlands.',
16
-	'annuler_recherche' => 'Zoekopdracht stoppen',
17
-	'auteur' => 'Auteur:',
18
-	'avis_acces_interdit' => 'Toegang verboden',
19
-	'avis_acces_interdit_prive' => 'Je hebt geen toegangsrechten voor pagina <b>@exec@</b>.',
20
-	'avis_article_modifie' => 'LET OP: @nom_auteur_modif@ heeft @date_diff@ minuten geleden aan dit artikel gewerkt.',
21
-	'avis_aucun_resultat' => 'Geen resultaat.',
22
-	'avis_base_inaccessible' => 'Kan geen verbinding maken met database @base@.',
23
-	'avis_chemin_invalide_1' => 'De toegang die je hebt gekozen',
24
-	'avis_chemin_invalide_2' => 'lijkt niet geldig. Ga terug naar de vorige pagina en controleer de ingevulde gegevens.',
25
-	'avis_connexion_echec_1' => 'De verbinding met de database is mislukt.',
26
-	'avis_connexion_echec_2' => 'Keer terug naar de vorige pagina en kijk de gegevens na die je hebt ingevuld.',
27
-	'avis_connexion_echec_3' => '<b>LET OP</b> Op veel servers moet je vooraf om activatie van je toegang tot de database <b>vragen</b>. Als je geen verbinding kan maken, kijk dan na of je deze actie hebt ondernomen.',
28
-	'avis_connexion_erreur_creer_base' => 'De database kon niet worden gemaakt.',
29
-	'avis_connexion_erreur_nom_base' => 'De databasenaam kan enkel letters, cijfers en koppeltekens bevatten',
30
-	'avis_connexion_ldap_echec_1' => 'De verbinding met de LDAP-server is mislukt.',
31
-	'avis_connexion_ldap_echec_2' => 'Ga terug naar de vorige pagina en kijk na of de ingevulde gegevens correct zijn.',
32
-	'avis_connexion_ldap_echec_3' => 'Andere mogelijkheid is om de LDAP-ondersteuning om gebruikers in te voeren niet te gebruiken.',
33
-	'avis_deplacement_rubrique' => 'LET OP! Deze rubriek bevat @contient_breves@ nieuwsflits@scb@. Als je wil verplaatsten, bevestig dit dan door hier het vakje aan te vinken.',
34
-	'avis_erreur_connexion_mysql' => 'Verbinding met de SQL connectie mislukt',
35
-	'avis_espace_interdit' => '<b>Toegang verboden</b><div>SPIP is al geïnstalleerd.</div>',
36
-	'avis_lecture_noms_bases_1' => 'Het installatieprogramma heeft de namen van de geïnstalleerde databases niet kunnen lezen.',
37
-	'avis_lecture_noms_bases_2' => 'Geen enkele database is beschikbaar, ofwel is de functie die de databases zou moeten tonen om veiligheidsredenen niet geactiveerd (wat vaak het geval is bij providers).',
38
-	'avis_lecture_noms_bases_3' => 'In het andere geval is het heel waarschijnlijk dat een database met jouw aanmeldingsnaam (login) bruikbaar is:',
39
-	'avis_non_acces_page' => 'Je hebt geen toegang tot deze pagina.',
40
-	'avis_operation_echec' => 'De bewerking is mislukt.',
41
-	'avis_operation_impossible' => 'Onmogelijke handeling',
42
-	'avis_suppression_base' => 'LET OP: Het wissen van de gegevens is onomkeerbaar',
12
+    // A
13
+    'activer_plugin' => 'Plugin activeren',
14
+    'affichage' => 'Weergave',
15
+    'aide_non_disponible' => 'Dit deel van de online handleiding is nog niet beschikbaar in het Nederlands.',
16
+    'annuler_recherche' => 'Zoekopdracht stoppen',
17
+    'auteur' => 'Auteur:',
18
+    'avis_acces_interdit' => 'Toegang verboden',
19
+    'avis_acces_interdit_prive' => 'Je hebt geen toegangsrechten voor pagina <b>@exec@</b>.',
20
+    'avis_article_modifie' => 'LET OP: @nom_auteur_modif@ heeft @date_diff@ minuten geleden aan dit artikel gewerkt.',
21
+    'avis_aucun_resultat' => 'Geen resultaat.',
22
+    'avis_base_inaccessible' => 'Kan geen verbinding maken met database @base@.',
23
+    'avis_chemin_invalide_1' => 'De toegang die je hebt gekozen',
24
+    'avis_chemin_invalide_2' => 'lijkt niet geldig. Ga terug naar de vorige pagina en controleer de ingevulde gegevens.',
25
+    'avis_connexion_echec_1' => 'De verbinding met de database is mislukt.',
26
+    'avis_connexion_echec_2' => 'Keer terug naar de vorige pagina en kijk de gegevens na die je hebt ingevuld.',
27
+    'avis_connexion_echec_3' => '<b>LET OP</b> Op veel servers moet je vooraf om activatie van je toegang tot de database <b>vragen</b>. Als je geen verbinding kan maken, kijk dan na of je deze actie hebt ondernomen.',
28
+    'avis_connexion_erreur_creer_base' => 'De database kon niet worden gemaakt.',
29
+    'avis_connexion_erreur_nom_base' => 'De databasenaam kan enkel letters, cijfers en koppeltekens bevatten',
30
+    'avis_connexion_ldap_echec_1' => 'De verbinding met de LDAP-server is mislukt.',
31
+    'avis_connexion_ldap_echec_2' => 'Ga terug naar de vorige pagina en kijk na of de ingevulde gegevens correct zijn.',
32
+    'avis_connexion_ldap_echec_3' => 'Andere mogelijkheid is om de LDAP-ondersteuning om gebruikers in te voeren niet te gebruiken.',
33
+    'avis_deplacement_rubrique' => 'LET OP! Deze rubriek bevat @contient_breves@ nieuwsflits@scb@. Als je wil verplaatsten, bevestig dit dan door hier het vakje aan te vinken.',
34
+    'avis_erreur_connexion_mysql' => 'Verbinding met de SQL connectie mislukt',
35
+    'avis_espace_interdit' => '<b>Toegang verboden</b><div>SPIP is al geïnstalleerd.</div>',
36
+    'avis_lecture_noms_bases_1' => 'Het installatieprogramma heeft de namen van de geïnstalleerde databases niet kunnen lezen.',
37
+    'avis_lecture_noms_bases_2' => 'Geen enkele database is beschikbaar, ofwel is de functie die de databases zou moeten tonen om veiligheidsredenen niet geactiveerd (wat vaak het geval is bij providers).',
38
+    'avis_lecture_noms_bases_3' => 'In het andere geval is het heel waarschijnlijk dat een database met jouw aanmeldingsnaam (login) bruikbaar is:',
39
+    'avis_non_acces_page' => 'Je hebt geen toegang tot deze pagina.',
40
+    'avis_operation_echec' => 'De bewerking is mislukt.',
41
+    'avis_operation_impossible' => 'Onmogelijke handeling',
42
+    'avis_suppression_base' => 'LET OP: Het wissen van de gegevens is onomkeerbaar',
43 43
 
44
-	// B
45
-	'bouton_acces_ldap' => 'LDAP toegang toevoegen',
46
-	'bouton_ajouter' => 'Toevoegen',
47
-	'bouton_annuler' => 'Annuleren',
48
-	'bouton_cache_activer' => 'Buffer (cache) reactiveren',
49
-	'bouton_cache_desactiver' => 'Buffer (cache) tijdelijk uitschakelen',
50
-	'bouton_demande_publication' => 'De publicatie van het artikel vragen',
51
-	'bouton_desactive_tout' => 'Alles deactiveren',
52
-	'bouton_desinstaller' => 'Terugtrekken',
53
-	'bouton_effacer_tout' => 'ALLES wissen',
54
-	'bouton_envoyer_message' => 'Definitief bericht: versturen',
55
-	'bouton_fermer' => 'Sluiten',
56
-	'bouton_mettre_a_jour_base' => 'Database update',
57
-	'bouton_modifier' => 'Wijzigen',
58
-	'bouton_radio_afficher' => 'Weergeven',
59
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Opnemen in de lijst van online redacteurs',
60
-	'bouton_radio_envoi_annonces_adresse' => 'Aankondigingen verzenden naar dit adres:',
61
-	'bouton_radio_envoi_liste_nouveautes' => 'De lijst met nieuwe bijdragen versturen',
62
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Niet opnemen in de lijst van redacteurs',
63
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Geen editoriale aankondigingen versturen',
64
-	'bouton_redirection' => 'OMLEIDING',
65
-	'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Terugzetten naar de standaardwaardes',
66
-	'bouton_relancer_installation' => 'Installatie herstarten',
67
-	'bouton_reset_password' => 'Een nieuw wachtwoord genereren en per email opsturen',
68
-	'bouton_suivant' => 'Volgende',
69
-	'bouton_tenter_recuperation' => 'Poging tot herstel',
70
-	'bouton_test_proxy' => 'Proxy proberen',
71
-	'bouton_vider_cache' => 'De buffer (cache) leegmaken',
44
+    // B
45
+    'bouton_acces_ldap' => 'LDAP toegang toevoegen',
46
+    'bouton_ajouter' => 'Toevoegen',
47
+    'bouton_annuler' => 'Annuleren',
48
+    'bouton_cache_activer' => 'Buffer (cache) reactiveren',
49
+    'bouton_cache_desactiver' => 'Buffer (cache) tijdelijk uitschakelen',
50
+    'bouton_demande_publication' => 'De publicatie van het artikel vragen',
51
+    'bouton_desactive_tout' => 'Alles deactiveren',
52
+    'bouton_desinstaller' => 'Terugtrekken',
53
+    'bouton_effacer_tout' => 'ALLES wissen',
54
+    'bouton_envoyer_message' => 'Definitief bericht: versturen',
55
+    'bouton_fermer' => 'Sluiten',
56
+    'bouton_mettre_a_jour_base' => 'Database update',
57
+    'bouton_modifier' => 'Wijzigen',
58
+    'bouton_radio_afficher' => 'Weergeven',
59
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Opnemen in de lijst van online redacteurs',
60
+    'bouton_radio_envoi_annonces_adresse' => 'Aankondigingen verzenden naar dit adres:',
61
+    'bouton_radio_envoi_liste_nouveautes' => 'De lijst met nieuwe bijdragen versturen',
62
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Niet opnemen in de lijst van redacteurs',
63
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Geen editoriale aankondigingen versturen',
64
+    'bouton_redirection' => 'OMLEIDING',
65
+    'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Terugzetten naar de standaardwaardes',
66
+    'bouton_relancer_installation' => 'Installatie herstarten',
67
+    'bouton_reset_password' => 'Een nieuw wachtwoord genereren en per email opsturen',
68
+    'bouton_suivant' => 'Volgende',
69
+    'bouton_tenter_recuperation' => 'Poging tot herstel',
70
+    'bouton_test_proxy' => 'Proxy proberen',
71
+    'bouton_vider_cache' => 'De buffer (cache) leegmaken',
72 72
 
73
-	// C
74
-	'cache_modifiable_webmestre' => 'Deze parameter kan door de webmaster van de site gewijzigd worden.',
75
-	'calendrier_synchro' => 'Wanneer je <b>iCal</b> compatibele agendasoftware gebruikt, kan je deze synchroniseren met informatie van deze site.',
76
-	'config_activer_champs' => 'De volgende velden activeren',
77
-	'config_choix_base_sup' => 'een database op deze server kiezen',
78
-	'config_erreur_base_sup' => 'SPIP heeft geen toegang tot de lijst van toegankelijke databases',
79
-	'config_info_base_sup' => 'Als je andere databases hebt om door SPIP te ondervragen, met zijn SQL server of anders, kan je deze via onderstaand formulier opgeven. Als je bepaalde velden leeg laat, zullen de identificatiegegevens van de primaire database gebruikt worden.',
80
-	'config_info_base_sup_disponibles' => 'De reeds opvraagbare aanvullende databases:',
81
-	'config_info_enregistree' => 'De nieuwe configuratie werd bewaard',
82
-	'config_info_logos' => 'Elk element van de site kan een logo hebben, evenals een « zwevend logo »',
83
-	'config_info_logos_utiliser' => 'Logo’s gebruiken',
84
-	'config_info_logos_utiliser_non' => 'Logo’s niet gebruiken',
85
-	'config_info_logos_utiliser_survol' => 'Zwevende logo’s gebruiken',
86
-	'config_info_logos_utiliser_survol_non' => 'Geen zwevende logo’s gebruiken',
87
-	'config_info_redirection' => 'Door deze optie te activeren, kan je virtuele artikelen maken, eenvoudige verwijzen naar gepubliceerde artikelen op andere sites, ook buiten SPIP.',
88
-	'config_redirection' => 'Virtuele artikelen',
89
-	'config_titre_base_sup' => 'Declareren van een extra database',
90
-	'config_titre_base_sup_choix' => 'Kies een extra database',
91
-	'connexion_ldap' => 'Aansluiten:',
92
-	'creer_et_associer_un_auteur' => 'Maken en associëren een auteur',
73
+    // C
74
+    'cache_modifiable_webmestre' => 'Deze parameter kan door de webmaster van de site gewijzigd worden.',
75
+    'calendrier_synchro' => 'Wanneer je <b>iCal</b> compatibele agendasoftware gebruikt, kan je deze synchroniseren met informatie van deze site.',
76
+    'config_activer_champs' => 'De volgende velden activeren',
77
+    'config_choix_base_sup' => 'een database op deze server kiezen',
78
+    'config_erreur_base_sup' => 'SPIP heeft geen toegang tot de lijst van toegankelijke databases',
79
+    'config_info_base_sup' => 'Als je andere databases hebt om door SPIP te ondervragen, met zijn SQL server of anders, kan je deze via onderstaand formulier opgeven. Als je bepaalde velden leeg laat, zullen de identificatiegegevens van de primaire database gebruikt worden.',
80
+    'config_info_base_sup_disponibles' => 'De reeds opvraagbare aanvullende databases:',
81
+    'config_info_enregistree' => 'De nieuwe configuratie werd bewaard',
82
+    'config_info_logos' => 'Elk element van de site kan een logo hebben, evenals een « zwevend logo »',
83
+    'config_info_logos_utiliser' => 'Logo’s gebruiken',
84
+    'config_info_logos_utiliser_non' => 'Logo’s niet gebruiken',
85
+    'config_info_logos_utiliser_survol' => 'Zwevende logo’s gebruiken',
86
+    'config_info_logos_utiliser_survol_non' => 'Geen zwevende logo’s gebruiken',
87
+    'config_info_redirection' => 'Door deze optie te activeren, kan je virtuele artikelen maken, eenvoudige verwijzen naar gepubliceerde artikelen op andere sites, ook buiten SPIP.',
88
+    'config_redirection' => 'Virtuele artikelen',
89
+    'config_titre_base_sup' => 'Declareren van een extra database',
90
+    'config_titre_base_sup_choix' => 'Kies een extra database',
91
+    'connexion_ldap' => 'Aansluiten:',
92
+    'creer_et_associer_un_auteur' => 'Maken en associëren een auteur',
93 93
 
94
-	// D
95
-	'date_mot_heures' => 'uur',
94
+    // D
95
+    'date_mot_heures' => 'uur',
96 96
 
97
-	// E
98
-	'ecran_securite' => '+ beveiligingsscherm @version@',
99
-	'email' => 'e-mail',
100
-	'email_2' => 'e-mail:',
101
-	'en_savoir_plus' => 'Meer weten hierover',
102
-	'entree_adresse_annuaire' => 'Plaats van het adresboek',
103
-	'entree_adresse_email' => 'Je e-mailadres',
104
-	'entree_adresse_email_2' => 'E-mailadres',
105
-	'entree_base_donnee_1' => 'Adres van de database',
106
-	'entree_base_donnee_2' => '(Vaak komt dit adres overeen met dat van je website, soms is het gewoon de vermelding «localhost» of kan je het veld blanco laten.)',
107
-	'entree_biographie' => 'Korte biografie in enkele woorden.',
108
-	'entree_chemin_acces' => '<b>Invullen</b> van de toegangscode :',
109
-	'entree_cle_pgp' => 'Je PGP-sleutel',
110
-	'entree_cle_pgp_2' => 'PGP-sleutel',
111
-	'entree_contenu_rubrique' => '(Inhoud van de rubriek in enkele woorden)',
112
-	'entree_identifiants_connexion' => 'Je verbindingsgegevens...',
113
-	'entree_identifiants_connexion_2' => 'Login',
114
-	'entree_informations_connexion_ldap' => 'Vul hier de gegevens in om verbinding te maken met het LDAP adresboek. Deze gegevens kan je opvragen bij de systeem- of netwerkbeheerder.',
115
-	'entree_infos_perso' => 'Wie ben je ?',
116
-	'entree_infos_perso_2' => 'Wie is de auteur ?',
117
-	'entree_interieur_rubrique' => 'In de rubriek:',
118
-	'entree_liens_sites' => '<b>Hypertext link</b> (verwijzing, te bezoeken website ...)',
119
-	'entree_login' => 'Je login',
120
-	'entree_login_connexion_1' => 'De login voor de verbinding',
121
-	'entree_login_connexion_2' => '(Komt soms overeen met je FTP-loginnaam; soms wordt dit niet ingevuld)',
122
-	'entree_mot_passe' => 'Je wachtwoord',
123
-	'entree_mot_passe_1' => 'Wachtwoord voor deze verbinding ',
124
-	'entree_mot_passe_2' => '(Komt vaak overeen met je wachtwoord voor FTP-toegang; soms kan je dit ook blanco laten)',
125
-	'entree_nom_fichier' => 'Vul hier de naam in van het bestand @texte_compresse@:',
126
-	'entree_nom_pseudo' => 'je naam of bijnaam',
127
-	'entree_nom_pseudo_1' => '(Je naam of bijnaam)',
128
-	'entree_nom_pseudo_2' => 'Naam of bijnaam',
129
-	'entree_nom_site' => 'De websitenaam',
130
-	'entree_nom_site_2' => 'Naam van de site van de auteur',
131
-	'entree_nouveau_passe' => 'Nieuw wachtwoord',
132
-	'entree_passe_ldap' => 'Wachtwoord',
133
-	'entree_port_annuaire' => 'Het poortnummer van het adresboek',
134
-	'entree_signature' => 'Handtekening',
135
-	'entree_titre_obligatoire' => '<b>Titel</b> [verplicht]<br />',
136
-	'entree_url' => 'Je website-adres (URL)',
137
-	'entree_url_2' => 'Adres van de site (URL)',
138
-	'erreur_connect_deja_existant' => 'Een server met die naam bestaat al',
139
-	'erreur_contenu_suspect' => 'Slecht opgebouwde tekst',
140
-	'erreur_email_deja_existant' => 'Dit emailadres is al geregistreerd.',
141
-	'erreur_nom_connect_incorrect' => 'Deze server naam is niet toegestaan',
142
-	'erreur_plugin_attribut_balise_manquant' => 'Attribuut @attribut@ ontbreekt in lus @balise@.',
143
-	'erreur_plugin_desinstalation_echouee' => 'Het verwijderen van de plugin is mislukt. Maar je kunt hem wel uitschakelen.',
144
-	'erreur_plugin_fichier_absent' => 'Bestand ontbreekt',
145
-	'erreur_plugin_fichier_def_absent' => 'Definitiebestand ontbreekt',
146
-	'erreur_plugin_nom_fonction_interdit' => 'Functienaam verboden',
147
-	'erreur_plugin_nom_manquant' => 'Naam van de ontbrekende plugin',
148
-	'erreur_plugin_prefix_manquant' => 'Ruimte voor de naamgeving van de plugin is niet gedefinieerd',
149
-	'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; ontbreekt in het definitiebestand',
150
-	'erreur_plugin_version_manquant' => 'Versie van de ontbrekende plugin',
97
+    // E
98
+    'ecran_securite' => '+ beveiligingsscherm @version@',
99
+    'email' => 'e-mail',
100
+    'email_2' => 'e-mail:',
101
+    'en_savoir_plus' => 'Meer weten hierover',
102
+    'entree_adresse_annuaire' => 'Plaats van het adresboek',
103
+    'entree_adresse_email' => 'Je e-mailadres',
104
+    'entree_adresse_email_2' => 'E-mailadres',
105
+    'entree_base_donnee_1' => 'Adres van de database',
106
+    'entree_base_donnee_2' => '(Vaak komt dit adres overeen met dat van je website, soms is het gewoon de vermelding «localhost» of kan je het veld blanco laten.)',
107
+    'entree_biographie' => 'Korte biografie in enkele woorden.',
108
+    'entree_chemin_acces' => '<b>Invullen</b> van de toegangscode :',
109
+    'entree_cle_pgp' => 'Je PGP-sleutel',
110
+    'entree_cle_pgp_2' => 'PGP-sleutel',
111
+    'entree_contenu_rubrique' => '(Inhoud van de rubriek in enkele woorden)',
112
+    'entree_identifiants_connexion' => 'Je verbindingsgegevens...',
113
+    'entree_identifiants_connexion_2' => 'Login',
114
+    'entree_informations_connexion_ldap' => 'Vul hier de gegevens in om verbinding te maken met het LDAP adresboek. Deze gegevens kan je opvragen bij de systeem- of netwerkbeheerder.',
115
+    'entree_infos_perso' => 'Wie ben je ?',
116
+    'entree_infos_perso_2' => 'Wie is de auteur ?',
117
+    'entree_interieur_rubrique' => 'In de rubriek:',
118
+    'entree_liens_sites' => '<b>Hypertext link</b> (verwijzing, te bezoeken website ...)',
119
+    'entree_login' => 'Je login',
120
+    'entree_login_connexion_1' => 'De login voor de verbinding',
121
+    'entree_login_connexion_2' => '(Komt soms overeen met je FTP-loginnaam; soms wordt dit niet ingevuld)',
122
+    'entree_mot_passe' => 'Je wachtwoord',
123
+    'entree_mot_passe_1' => 'Wachtwoord voor deze verbinding ',
124
+    'entree_mot_passe_2' => '(Komt vaak overeen met je wachtwoord voor FTP-toegang; soms kan je dit ook blanco laten)',
125
+    'entree_nom_fichier' => 'Vul hier de naam in van het bestand @texte_compresse@:',
126
+    'entree_nom_pseudo' => 'je naam of bijnaam',
127
+    'entree_nom_pseudo_1' => '(Je naam of bijnaam)',
128
+    'entree_nom_pseudo_2' => 'Naam of bijnaam',
129
+    'entree_nom_site' => 'De websitenaam',
130
+    'entree_nom_site_2' => 'Naam van de site van de auteur',
131
+    'entree_nouveau_passe' => 'Nieuw wachtwoord',
132
+    'entree_passe_ldap' => 'Wachtwoord',
133
+    'entree_port_annuaire' => 'Het poortnummer van het adresboek',
134
+    'entree_signature' => 'Handtekening',
135
+    'entree_titre_obligatoire' => '<b>Titel</b> [verplicht]<br />',
136
+    'entree_url' => 'Je website-adres (URL)',
137
+    'entree_url_2' => 'Adres van de site (URL)',
138
+    'erreur_connect_deja_existant' => 'Een server met die naam bestaat al',
139
+    'erreur_contenu_suspect' => 'Slecht opgebouwde tekst',
140
+    'erreur_email_deja_existant' => 'Dit emailadres is al geregistreerd.',
141
+    'erreur_nom_connect_incorrect' => 'Deze server naam is niet toegestaan',
142
+    'erreur_plugin_attribut_balise_manquant' => 'Attribuut @attribut@ ontbreekt in lus @balise@.',
143
+    'erreur_plugin_desinstalation_echouee' => 'Het verwijderen van de plugin is mislukt. Maar je kunt hem wel uitschakelen.',
144
+    'erreur_plugin_fichier_absent' => 'Bestand ontbreekt',
145
+    'erreur_plugin_fichier_def_absent' => 'Definitiebestand ontbreekt',
146
+    'erreur_plugin_nom_fonction_interdit' => 'Functienaam verboden',
147
+    'erreur_plugin_nom_manquant' => 'Naam van de ontbrekende plugin',
148
+    'erreur_plugin_prefix_manquant' => 'Ruimte voor de naamgeving van de plugin is niet gedefinieerd',
149
+    'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; ontbreekt in het definitiebestand',
150
+    'erreur_plugin_version_manquant' => 'Versie van de ontbrekende plugin',
151 151
 
152
-	// H
153
-	'htaccess_a_simuler' => 'Waarschuwing: De configuratie van de HTTP-server negeert @htaccess@ bestanden. Om een goede beveiliging te hebben, moet je deze configuratie wijzigen, of de constanten @constantes@ (definieerbaar in het bestand mes_options.php) laten verwijzen naar mappen buiten @document_root@. ', # Je ne vois pas la modif ! La trad reste valable.
154
-	'htaccess_inoperant' => 'htaccess werkt niet',
152
+    // H
153
+    'htaccess_a_simuler' => 'Waarschuwing: De configuratie van de HTTP-server negeert @htaccess@ bestanden. Om een goede beveiliging te hebben, moet je deze configuratie wijzigen, of de constanten @constantes@ (definieerbaar in het bestand mes_options.php) laten verwijzen naar mappen buiten @document_root@. ', # Je ne vois pas la modif ! La trad reste valable.
154
+    'htaccess_inoperant' => 'htaccess werkt niet',
155 155
 
156
-	// I
157
-	'ical_info1' => 'Deze pagina toont de verschillende wijzen waarop je contact kan houden met het gebeuren van deze website.',
158
-	'ical_info2' => 'Voor meer inlichtingen over al deze technieken, aarzelt niet om <a href=" @spipnet@" te raadplegen >de documentatie van SPIP</a>.',
159
-	'ical_info_calendrier' => 'Twee kalenders zijn beschikbaar. De eerste geeft een overzicht van alle gepubliceerde artikelen. De tweede bevat editoriale berichten en je meest recente privé-berichten : deze tweede kalender is afgeschermd voor andere gebruikers door een persoonlijke sleutel die je op elk moment kan wijzigen door je wachtwoord te vernieuwen.',
160
-	'ical_methode_http' => 'Downloaden',
161
-	'ical_methode_webcal' => 'Synchronisatie (webcal://)',
162
-	'ical_texte_js' => 'Met een javascriptregel kan je op eenvoudige wijze de meest recente artikelen van deze site weergeven op een andere site die je beheert.',
163
-	'ical_texte_prive' => 'Deze kalender is voor persoonlijk gebruik en houdt je op de hoogte van je eigen editoriale activiteit (taken en persoonlijke afspraken, voorgestelde artikelen en nieuwsflitsen...).',
164
-	'ical_texte_public' => 'Via deze kalender kan je de publieke activiteit van de site volgen (gepubliceerde artikelen en nieuwsflitsen).',
165
-	'ical_texte_rss' => 'Je kan de nieuwe berichten van de site overnemen (syndiceren) op een andere site in eender welke bestandslezer via het formaat XML/RSS (Rich Site Summary). Dit is hetzelfde formaat dat SPIP toelaat nieuws over te nemen van andere sites die een uitwisselbaar formaat hanteren (gesyndiceerde sites).',
166
-	'ical_titre_js' => 'Javascript',
167
-	'ical_titre_mailing' => 'Mailinglijst',
168
-	'ical_titre_rss' => 'Syndicatiebestanden',
169
-	'icone_accueil' => 'Home',
170
-	'icone_activer_cookie' => 'De toegangskoekie activeren',
171
-	'icone_activite' => 'Activiteit',
172
-	'icone_admin_plugin' => 'Plugin beheer',
173
-	'icone_administration' => 'Beheer',
174
-	'icone_afficher_auteurs' => 'Auteurs tonen',
175
-	'icone_afficher_visiteurs' => 'Bezoekers tonen',
176
-	'icone_arret_discussion' => 'Niet langer deelnemen aan deze discussie',
177
-	'icone_calendrier' => 'Kalender',
178
-	'icone_configuration' => 'Configuratie',
179
-	'icone_creer_auteur' => 'Een nieuwe auteur aanmaken en koppelen aan dit artikel',
180
-	'icone_creer_mot_cle' => 'Een nieuw trefwoord aanmaken en koppelen aan dit artikel',
181
-	'icone_creer_rubrique_2' => 'Een nieuwe rubriek aanmaken',
182
-	'icone_developpement' => 'Ontwikkeling',
183
-	'icone_edition' => 'Items',
184
-	'icone_ma_langue' => 'Mijn taal',
185
-	'icone_mes_infos' => 'Mijn informatie',
186
-	'icone_mes_preferences' => 'Mijn Voorkeuren',
187
-	'icone_modifier_article' => 'Dit artikel wijzigen',
188
-	'icone_modifier_rubrique' => 'Deze rubriek wijzigen',
189
-	'icone_publication' => 'Publicatie',
190
-	'icone_relancer_signataire' => 'De ondertekenaar heractiveren',
191
-	'icone_retour' => 'Terug',
192
-	'icone_retour_article' => 'Terug naar artikel',
193
-	'icone_squelette' => 'Skeletten',
194
-	'icone_suivi_publication' => 'Publicaties volgen',
195
-	'icone_supprimer_cookie' => 'De toegangskoekie verwijderen',
196
-	'icone_supprimer_rubrique' => 'Deze rubriek wissen',
197
-	'icone_supprimer_signature' => 'Deze naam wissen',
198
-	'icone_valider_signature' => 'Deze naam goedkeuren',
199
-	'image_administrer_rubrique' => 'Je kan deze rubriek beheren',
200
-	'impossible_modifier_login_auteur' => 'De login kan niet worden veranderd.',
201
-	'impossible_modifier_pass_auteur' => 'Het wachtwoord kan niet worden gewijzigd.',
202
-	'info_1_article' => '1 artikel',
203
-	'info_1_auteur' => '1 auteur',
204
-	'info_1_message' => '1 bericht',
205
-	'info_1_mot_cle' => '1 trefwoord',
206
-	'info_1_rubrique' => '1 rubriek',
207
-	'info_1_visiteur' => '1 bezoeker',
208
-	'info_activer_cookie' => 'Je kan een <b>toegangskoekie</b> activeren, waardoor je makkelijk kan wisselen tussen de het publieke en het privé gedeelte van de website.',
209
-	'info_activer_menu_developpement' => 'Toon het menu Ontwikkeling',
210
-	'info_admin_etre_webmestre' => 'Geef me de webmaster rechten',
211
-	'info_admin_je_suis_webmestre' => 'Ik ben <b>webmaster</b>',
212
-	'info_admin_statuer_webmestre' => 'Geef deze beheerder webmaster rechten',
213
-	'info_admin_webmestre' => 'Deze beheerder is <b>webmaster</b>',
214
-	'info_administrateur' => 'Beheerder',
215
-	'info_administrateur_1' => 'Beheerder',
216
-	'info_administrateur_2' => 'van de website (<i>voorzichtig gebruiken</i>)',
217
-	'info_administrateur_site_01' => 'Als je beheerder bent van deze site, gelieve',
218
-	'info_administrateur_site_02' => 'deze koppeling aan te klikken',
219
-	'info_administrateurs' => 'Beheerders',
220
-	'info_administrer_rubrique' => 'Je kan deze rubriek beheren',
221
-	'info_adresse' => 'aan/naar het adres:',
222
-	'info_adresse_desinscription' => 'Adres voor uitschrijven:',
223
-	'info_adresse_url' => 'Adres (URL) van de website',
224
-	'info_afficher_par_nb' => 'Tonen',
225
-	'info_aide_en_ligne' => 'ONLINE HELP VAN SPIP',
226
-	'info_ajout_image' => 'Als je afbeeldingen als bijlage aan een document toevoegt, kan SPIP hiervan automatisch miniaturen aanmaken. Hierdoor kan je bvb. automatisch een fotogalerij of portfolio aanmaken.
156
+    // I
157
+    'ical_info1' => 'Deze pagina toont de verschillende wijzen waarop je contact kan houden met het gebeuren van deze website.',
158
+    'ical_info2' => 'Voor meer inlichtingen over al deze technieken, aarzelt niet om <a href=" @spipnet@" te raadplegen >de documentatie van SPIP</a>.',
159
+    'ical_info_calendrier' => 'Twee kalenders zijn beschikbaar. De eerste geeft een overzicht van alle gepubliceerde artikelen. De tweede bevat editoriale berichten en je meest recente privé-berichten : deze tweede kalender is afgeschermd voor andere gebruikers door een persoonlijke sleutel die je op elk moment kan wijzigen door je wachtwoord te vernieuwen.',
160
+    'ical_methode_http' => 'Downloaden',
161
+    'ical_methode_webcal' => 'Synchronisatie (webcal://)',
162
+    'ical_texte_js' => 'Met een javascriptregel kan je op eenvoudige wijze de meest recente artikelen van deze site weergeven op een andere site die je beheert.',
163
+    'ical_texte_prive' => 'Deze kalender is voor persoonlijk gebruik en houdt je op de hoogte van je eigen editoriale activiteit (taken en persoonlijke afspraken, voorgestelde artikelen en nieuwsflitsen...).',
164
+    'ical_texte_public' => 'Via deze kalender kan je de publieke activiteit van de site volgen (gepubliceerde artikelen en nieuwsflitsen).',
165
+    'ical_texte_rss' => 'Je kan de nieuwe berichten van de site overnemen (syndiceren) op een andere site in eender welke bestandslezer via het formaat XML/RSS (Rich Site Summary). Dit is hetzelfde formaat dat SPIP toelaat nieuws over te nemen van andere sites die een uitwisselbaar formaat hanteren (gesyndiceerde sites).',
166
+    'ical_titre_js' => 'Javascript',
167
+    'ical_titre_mailing' => 'Mailinglijst',
168
+    'ical_titre_rss' => 'Syndicatiebestanden',
169
+    'icone_accueil' => 'Home',
170
+    'icone_activer_cookie' => 'De toegangskoekie activeren',
171
+    'icone_activite' => 'Activiteit',
172
+    'icone_admin_plugin' => 'Plugin beheer',
173
+    'icone_administration' => 'Beheer',
174
+    'icone_afficher_auteurs' => 'Auteurs tonen',
175
+    'icone_afficher_visiteurs' => 'Bezoekers tonen',
176
+    'icone_arret_discussion' => 'Niet langer deelnemen aan deze discussie',
177
+    'icone_calendrier' => 'Kalender',
178
+    'icone_configuration' => 'Configuratie',
179
+    'icone_creer_auteur' => 'Een nieuwe auteur aanmaken en koppelen aan dit artikel',
180
+    'icone_creer_mot_cle' => 'Een nieuw trefwoord aanmaken en koppelen aan dit artikel',
181
+    'icone_creer_rubrique_2' => 'Een nieuwe rubriek aanmaken',
182
+    'icone_developpement' => 'Ontwikkeling',
183
+    'icone_edition' => 'Items',
184
+    'icone_ma_langue' => 'Mijn taal',
185
+    'icone_mes_infos' => 'Mijn informatie',
186
+    'icone_mes_preferences' => 'Mijn Voorkeuren',
187
+    'icone_modifier_article' => 'Dit artikel wijzigen',
188
+    'icone_modifier_rubrique' => 'Deze rubriek wijzigen',
189
+    'icone_publication' => 'Publicatie',
190
+    'icone_relancer_signataire' => 'De ondertekenaar heractiveren',
191
+    'icone_retour' => 'Terug',
192
+    'icone_retour_article' => 'Terug naar artikel',
193
+    'icone_squelette' => 'Skeletten',
194
+    'icone_suivi_publication' => 'Publicaties volgen',
195
+    'icone_supprimer_cookie' => 'De toegangskoekie verwijderen',
196
+    'icone_supprimer_rubrique' => 'Deze rubriek wissen',
197
+    'icone_supprimer_signature' => 'Deze naam wissen',
198
+    'icone_valider_signature' => 'Deze naam goedkeuren',
199
+    'image_administrer_rubrique' => 'Je kan deze rubriek beheren',
200
+    'impossible_modifier_login_auteur' => 'De login kan niet worden veranderd.',
201
+    'impossible_modifier_pass_auteur' => 'Het wachtwoord kan niet worden gewijzigd.',
202
+    'info_1_article' => '1 artikel',
203
+    'info_1_auteur' => '1 auteur',
204
+    'info_1_message' => '1 bericht',
205
+    'info_1_mot_cle' => '1 trefwoord',
206
+    'info_1_rubrique' => '1 rubriek',
207
+    'info_1_visiteur' => '1 bezoeker',
208
+    'info_activer_cookie' => 'Je kan een <b>toegangskoekie</b> activeren, waardoor je makkelijk kan wisselen tussen de het publieke en het privé gedeelte van de website.',
209
+    'info_activer_menu_developpement' => 'Toon het menu Ontwikkeling',
210
+    'info_admin_etre_webmestre' => 'Geef me de webmaster rechten',
211
+    'info_admin_je_suis_webmestre' => 'Ik ben <b>webmaster</b>',
212
+    'info_admin_statuer_webmestre' => 'Geef deze beheerder webmaster rechten',
213
+    'info_admin_webmestre' => 'Deze beheerder is <b>webmaster</b>',
214
+    'info_administrateur' => 'Beheerder',
215
+    'info_administrateur_1' => 'Beheerder',
216
+    'info_administrateur_2' => 'van de website (<i>voorzichtig gebruiken</i>)',
217
+    'info_administrateur_site_01' => 'Als je beheerder bent van deze site, gelieve',
218
+    'info_administrateur_site_02' => 'deze koppeling aan te klikken',
219
+    'info_administrateurs' => 'Beheerders',
220
+    'info_administrer_rubrique' => 'Je kan deze rubriek beheren',
221
+    'info_adresse' => 'aan/naar het adres:',
222
+    'info_adresse_desinscription' => 'Adres voor uitschrijven:',
223
+    'info_adresse_url' => 'Adres (URL) van de website',
224
+    'info_afficher_par_nb' => 'Tonen',
225
+    'info_aide_en_ligne' => 'ONLINE HELP VAN SPIP',
226
+    'info_ajout_image' => 'Als je afbeeldingen als bijlage aan een document toevoegt, kan SPIP hiervan automatisch miniaturen aanmaken. Hierdoor kan je bvb. automatisch een fotogalerij of portfolio aanmaken.
227 227
 ',
228
-	'info_ajouter_rubrique' => 'Een nieuwe rubriek toevoegen om te beheren:',
229
-	'info_annonce_nouveautes' => 'Aankondiging van nieuwe bijdragen',
230
-	'info_article' => 'artikel',
231
-	'info_article_2' => 'artikelen',
232
-	'info_article_a_paraitre' => 'Te publiceren artikelen met postdatering',
233
-	'info_articles_02' => 'artikelen',
234
-	'info_articles_2' => 'Artikelen',
235
-	'info_articles_auteur' => 'Artikelen van deze auteur',
236
-	'info_articles_miens' => 'Mijn artikelen',
237
-	'info_articles_tous' => 'Alle artikelen',
238
-	'info_articles_trouves' => 'Gevonden artikelen',
239
-	'info_attente_validation' => 'Je artikelen die op goedkeuring wachten',
240
-	'info_aucun_article' => 'Geen artikelen',
241
-	'info_aucun_auteur' => 'Geen auteur',
242
-	'info_aucun_message' => 'Geen bericht',
243
-	'info_aucun_rubrique' => 'Geen rubriek',
244
-	'info_aujourdhui' => 'vandaag:',
245
-	'info_auteur_gere_rubriques' => 'Deze auteur beheert de volgende rubrieken:',
246
-	'info_auteur_gere_toutes_rubriques' => 'Deze auteur beheert <b>alle rubrieken</b>',
247
-	'info_auteur_gere_toutes_rubriques_2' => 'Ik beheer <b>alle rubrieken</b>',
248
-	'info_auteurs' => 'De auteurs',
249
-	'info_auteurs_par_tri' => 'Auteur@partri@',
250
-	'info_auteurs_trouves' => 'Gevonden auteurs',
251
-	'info_authentification_externe' => 'Externe authenticatie',
252
-	'info_avertissement' => 'Waarschuwing',
253
-	'info_barre_outils' => 'met zijn gereedschapsbalk?',
254
-	'info_base_installee' => 'De structuur van je database is geïnstalleerd.',
255
-	'info_bio' => 'biografie',
256
-	'info_cache_desactive' => 'De buffer (cache) is tijdelijk uitgeschakeld.',
257
-	'info_chapeau' => 'Kop',
258
-	'info_chapeau_2' => 'Kop :',
259
-	'info_chemin_acces_1' => 'Opties: <b>Toegang tot het adresboek</b>',
260
-	'info_chemin_acces_2' => 'Je dient de toegang tot de gegevens uit het adresboek in te stellen. Zonder deze instellingen is het ONmogelijk de gebruikersprofielen in dit adresboek te lezen.',
261
-	'info_chemin_acces_annuaire' => 'Opties: <b>Toegang in het adresboek',
262
-	'info_choix_base' => 'Derde stap:',
263
-	'info_classement_1' => '<sup>ste</sup> op @liste@',
264
-	'info_classement_2' => '<sup>de</sup> @liste@',
265
-	'info_code_acces' => 'Vergeet je eigen toegangscode niet!',
266
-	'info_config_suivi' => 'Wanneer dit adres van een distributielijst is, kan je hieronder het adres opgeven waar deelnemers van de site zich kunnen inschrijven. Dit adres kan een URL zijn (het webadres voor het inschrijving op de lijst), of een emailadres met een onderwerp (zoals <tt>@adresse_suivi@?subject=subscribe</tt>):',
267
-	'info_config_suivi_explication' => 'Je kan je op de mailinglijst van deze site inschrijven. Je zal dan via e-mail een aankondiging ontvangen van artikelen en nieuwsflitsen die voor publicatie werden voorgesteld.',
268
-	'info_confirmer_passe' => 'Bevestig het nieuwe wachtwoord:',
269
-	'info_conflit_edition_avis_non_sauvegarde' => 'Let op: de volgende velden werden elders gewijzigd. Jouw wijzigingen op deze velden werden dus niet geregistreerd.',
270
-	'info_conflit_edition_differences' => 'Verschillen :',
271
-	'info_conflit_edition_version_enregistree' => 'De geregistreerde versie :',
272
-	'info_conflit_edition_votre_version' => 'Jouw versie:',
273
-	'info_connexion_base' => 'Proberen op de database aan te sluiten',
274
-	'info_connexion_base_donnee' => 'Aansluiten op je database',
275
-	'info_connexion_ldap_ok' => 'De LDAP-verbinding is gelukt. </b><p>Je kunt doorgaan naar de volgende stap.</p>',
276
-	'info_connexion_mysql' => 'Je SQL verbinding',
277
-	'info_connexion_ok' => 'De verbinding is geslaagd.',
278
-	'info_contact' => 'Contact',
279
-	'info_contenu_articles' => 'Inhoud van de artikelen',
280
-	'info_contributions' => 'Bijdragen',
281
-	'info_creation_paragraphe' => 'Om alinea’s te maken laat je gewoon enkele regels leeg.',
282
-	'info_creation_rubrique' => 'Alvorens artikelen te kunnen schrijven<br /> moet minstens een rubriek worden gemaakt.<br />',
283
-	'info_creation_tables' => 'Aanmaken van tabellen in de database',
284
-	'info_creer_base' => '<b>Creëren</b> een nieuw database:',
285
-	'info_dans_rubrique' => 'In de rubriek:',
286
-	'info_date_publication_anterieure' => 'Datum van eerdere redactie:',
287
-	'info_date_referencement' => 'DATUM VAN DE KOPPELING VAN DEZE SITE:',
288
-	'info_derniere_etape' => 'Klaar!',
289
-	'info_descriptif' => 'Beschrijving:',
290
-	'info_desinstaller_plugin' => 'verwijdert de gegevens en deactiveert de plugin',
291
-	'info_discussion_cours' => 'Lopende discussies',
292
-	'info_ecrire_article' => 'Alvorens een artikel te kunnen schrijven, dien je minimaal één rubriek aan te maken.',
293
-	'info_email_envoi' => 'Verzendadres (optioneel)',
294
-	'info_email_envoi_txt' => 'Geef hieronder het adres op dat gebruikt wordt voor het versturen van e-mails. (Standaard wordt het adres van de geadresseerde als verzendadres gebruikt.):',
295
-	'info_email_webmestre' => 'E-mailadres webmaster',
296
-	'info_envoi_email_automatique' => 'Automatisch verzenden van e-mails',
297
-	'info_envoyer_maintenant' => 'Nu versturen',
298
-	'info_etape_suivante' => 'Naar de volgende stap ',
299
-	'info_etape_suivante_1' => 'Je kunt de volgende stap zetten.',
300
-	'info_etape_suivante_2' => 'Je kunt de volgende stap zetten.',
301
-	'info_exceptions_proxy' => 'Uitzonderingen op de proxy',
302
-	'info_exportation_base' => 'Uitvoer van de database naar @archive@',
303
-	'info_facilite_suivi_activite' => 'Om de opvolging en redactie van artikelen te vergemakkelijken, kan SPIP mails versturen -bijvoorbeeld naar een mailinglist van redacteurs- met de aankondiging van vragen voor publicatie of goedgekeurde publicaties.',
304
-	'info_fichiers_authent' => 'Verificatiebestand ".htpasswd"',
305
-	'info_forums_abo_invites' => 'Je site bevat forums met abonnement; bezoekers worden dus op de publieke site verzocht zich in te schrijven.',
306
-	'info_gauche_admin_tech' => '<b>Deze pagina is enkel toegankelijk voor beheerders van de site.</b><p> Ze geeft toegang tot allerlei technische onderhoudstaken. Voor het uitvoeren van sommige taken zijn een afzonderlijke aanmelding en toegang tot je site via FTP nodig.</p>',
307
-	'info_gauche_admin_vider' => '<b>Deze pagina is alleen beschikbaar voor beheerders.</b><p> Het biedt toegang tot diverse
228
+    'info_ajouter_rubrique' => 'Een nieuwe rubriek toevoegen om te beheren:',
229
+    'info_annonce_nouveautes' => 'Aankondiging van nieuwe bijdragen',
230
+    'info_article' => 'artikel',
231
+    'info_article_2' => 'artikelen',
232
+    'info_article_a_paraitre' => 'Te publiceren artikelen met postdatering',
233
+    'info_articles_02' => 'artikelen',
234
+    'info_articles_2' => 'Artikelen',
235
+    'info_articles_auteur' => 'Artikelen van deze auteur',
236
+    'info_articles_miens' => 'Mijn artikelen',
237
+    'info_articles_tous' => 'Alle artikelen',
238
+    'info_articles_trouves' => 'Gevonden artikelen',
239
+    'info_attente_validation' => 'Je artikelen die op goedkeuring wachten',
240
+    'info_aucun_article' => 'Geen artikelen',
241
+    'info_aucun_auteur' => 'Geen auteur',
242
+    'info_aucun_message' => 'Geen bericht',
243
+    'info_aucun_rubrique' => 'Geen rubriek',
244
+    'info_aujourdhui' => 'vandaag:',
245
+    'info_auteur_gere_rubriques' => 'Deze auteur beheert de volgende rubrieken:',
246
+    'info_auteur_gere_toutes_rubriques' => 'Deze auteur beheert <b>alle rubrieken</b>',
247
+    'info_auteur_gere_toutes_rubriques_2' => 'Ik beheer <b>alle rubrieken</b>',
248
+    'info_auteurs' => 'De auteurs',
249
+    'info_auteurs_par_tri' => 'Auteur@partri@',
250
+    'info_auteurs_trouves' => 'Gevonden auteurs',
251
+    'info_authentification_externe' => 'Externe authenticatie',
252
+    'info_avertissement' => 'Waarschuwing',
253
+    'info_barre_outils' => 'met zijn gereedschapsbalk?',
254
+    'info_base_installee' => 'De structuur van je database is geïnstalleerd.',
255
+    'info_bio' => 'biografie',
256
+    'info_cache_desactive' => 'De buffer (cache) is tijdelijk uitgeschakeld.',
257
+    'info_chapeau' => 'Kop',
258
+    'info_chapeau_2' => 'Kop :',
259
+    'info_chemin_acces_1' => 'Opties: <b>Toegang tot het adresboek</b>',
260
+    'info_chemin_acces_2' => 'Je dient de toegang tot de gegevens uit het adresboek in te stellen. Zonder deze instellingen is het ONmogelijk de gebruikersprofielen in dit adresboek te lezen.',
261
+    'info_chemin_acces_annuaire' => 'Opties: <b>Toegang in het adresboek',
262
+    'info_choix_base' => 'Derde stap:',
263
+    'info_classement_1' => '<sup>ste</sup> op @liste@',
264
+    'info_classement_2' => '<sup>de</sup> @liste@',
265
+    'info_code_acces' => 'Vergeet je eigen toegangscode niet!',
266
+    'info_config_suivi' => 'Wanneer dit adres van een distributielijst is, kan je hieronder het adres opgeven waar deelnemers van de site zich kunnen inschrijven. Dit adres kan een URL zijn (het webadres voor het inschrijving op de lijst), of een emailadres met een onderwerp (zoals <tt>@adresse_suivi@?subject=subscribe</tt>):',
267
+    'info_config_suivi_explication' => 'Je kan je op de mailinglijst van deze site inschrijven. Je zal dan via e-mail een aankondiging ontvangen van artikelen en nieuwsflitsen die voor publicatie werden voorgesteld.',
268
+    'info_confirmer_passe' => 'Bevestig het nieuwe wachtwoord:',
269
+    'info_conflit_edition_avis_non_sauvegarde' => 'Let op: de volgende velden werden elders gewijzigd. Jouw wijzigingen op deze velden werden dus niet geregistreerd.',
270
+    'info_conflit_edition_differences' => 'Verschillen :',
271
+    'info_conflit_edition_version_enregistree' => 'De geregistreerde versie :',
272
+    'info_conflit_edition_votre_version' => 'Jouw versie:',
273
+    'info_connexion_base' => 'Proberen op de database aan te sluiten',
274
+    'info_connexion_base_donnee' => 'Aansluiten op je database',
275
+    'info_connexion_ldap_ok' => 'De LDAP-verbinding is gelukt. </b><p>Je kunt doorgaan naar de volgende stap.</p>',
276
+    'info_connexion_mysql' => 'Je SQL verbinding',
277
+    'info_connexion_ok' => 'De verbinding is geslaagd.',
278
+    'info_contact' => 'Contact',
279
+    'info_contenu_articles' => 'Inhoud van de artikelen',
280
+    'info_contributions' => 'Bijdragen',
281
+    'info_creation_paragraphe' => 'Om alinea’s te maken laat je gewoon enkele regels leeg.',
282
+    'info_creation_rubrique' => 'Alvorens artikelen te kunnen schrijven<br /> moet minstens een rubriek worden gemaakt.<br />',
283
+    'info_creation_tables' => 'Aanmaken van tabellen in de database',
284
+    'info_creer_base' => '<b>Creëren</b> een nieuw database:',
285
+    'info_dans_rubrique' => 'In de rubriek:',
286
+    'info_date_publication_anterieure' => 'Datum van eerdere redactie:',
287
+    'info_date_referencement' => 'DATUM VAN DE KOPPELING VAN DEZE SITE:',
288
+    'info_derniere_etape' => 'Klaar!',
289
+    'info_descriptif' => 'Beschrijving:',
290
+    'info_desinstaller_plugin' => 'verwijdert de gegevens en deactiveert de plugin',
291
+    'info_discussion_cours' => 'Lopende discussies',
292
+    'info_ecrire_article' => 'Alvorens een artikel te kunnen schrijven, dien je minimaal één rubriek aan te maken.',
293
+    'info_email_envoi' => 'Verzendadres (optioneel)',
294
+    'info_email_envoi_txt' => 'Geef hieronder het adres op dat gebruikt wordt voor het versturen van e-mails. (Standaard wordt het adres van de geadresseerde als verzendadres gebruikt.):',
295
+    'info_email_webmestre' => 'E-mailadres webmaster',
296
+    'info_envoi_email_automatique' => 'Automatisch verzenden van e-mails',
297
+    'info_envoyer_maintenant' => 'Nu versturen',
298
+    'info_etape_suivante' => 'Naar de volgende stap ',
299
+    'info_etape_suivante_1' => 'Je kunt de volgende stap zetten.',
300
+    'info_etape_suivante_2' => 'Je kunt de volgende stap zetten.',
301
+    'info_exceptions_proxy' => 'Uitzonderingen op de proxy',
302
+    'info_exportation_base' => 'Uitvoer van de database naar @archive@',
303
+    'info_facilite_suivi_activite' => 'Om de opvolging en redactie van artikelen te vergemakkelijken, kan SPIP mails versturen -bijvoorbeeld naar een mailinglist van redacteurs- met de aankondiging van vragen voor publicatie of goedgekeurde publicaties.',
304
+    'info_fichiers_authent' => 'Verificatiebestand ".htpasswd"',
305
+    'info_forums_abo_invites' => 'Je site bevat forums met abonnement; bezoekers worden dus op de publieke site verzocht zich in te schrijven.',
306
+    'info_gauche_admin_tech' => '<b>Deze pagina is enkel toegankelijk voor beheerders van de site.</b><p> Ze geeft toegang tot allerlei technische onderhoudstaken. Voor het uitvoeren van sommige taken zijn een afzonderlijke aanmelding en toegang tot je site via FTP nodig.</p>',
307
+    'info_gauche_admin_vider' => '<b>Deze pagina is alleen beschikbaar voor beheerders.</b><p> Het biedt toegang tot diverse
308 308
  technische onderhoudsfuncties. Sommige vereisen een specifiek verificatieproces, dat nodig is voor FTP-toegang tot de website.</p>',
309
-	'info_gauche_auteurs' => 'Je vindt hier alle auteurs van de site.
309
+    'info_gauche_auteurs' => 'Je vindt hier alle auteurs van de site.
310 310
  Hun status is te herkennen aan de kleur van het icoontje (beheerder = groen; redacteur = geel).',
311
-	'info_gauche_auteurs_exterieurs' => 'Externe auteurs, zonder toegang tot de site, zijn aangeduid met een blauw icoontje,
311
+    'info_gauche_auteurs_exterieurs' => 'Externe auteurs, zonder toegang tot de site, zijn aangeduid met een blauw icoontje,
312 312
 gewiste auteurs met een grijze.',
313
-	'info_gauche_messagerie' => 'Het berichtensysteem laat toe om berichten uit te wisselen tussen redacteurs, memo’s (voor persoonlijk gebruik) te bewaren of aankondigingen te tonen op de beginpagina van de privé-ruimte (als je beheerder bent).',
314
-	'info_gauche_statistiques_referers' => 'Deze pagina toont een lijst met <i>referers</i> (sites die een koppeling bevatten naar je eigen site), alleen voor vandaag en gisteren: de lijst wordt elke 24 uur opnieuw aangemaakt.',
315
-	'info_gauche_visiteurs_enregistres' => 'Hier zal je de geregistreerde bezoekers van de
313
+    'info_gauche_messagerie' => 'Het berichtensysteem laat toe om berichten uit te wisselen tussen redacteurs, memo’s (voor persoonlijk gebruik) te bewaren of aankondigingen te tonen op de beginpagina van de privé-ruimte (als je beheerder bent).',
314
+    'info_gauche_statistiques_referers' => 'Deze pagina toont een lijst met <i>referers</i> (sites die een koppeling bevatten naar je eigen site), alleen voor vandaag en gisteren: de lijst wordt elke 24 uur opnieuw aangemaakt.',
315
+    'info_gauche_visiteurs_enregistres' => 'Hier zal je de geregistreerde bezoekers van de
316 316
  publieke site vinden (forums met inschrijving).',
317
-	'info_generation_miniatures_images' => 'Aanmaak van miniatuurafbeeldingen',
318
-	'info_gerer_trad_objets' => '@objets@: het beheer van de vertalingskoppelingen',
319
-	'info_hebergeur_desactiver_envoi_email' => 'Sommige hostingbedrijven staan het automatisch versturen van e-mails via hun servers niet toe. In dat geval zal de volgende functionaliteit van SPIP niet werken.',
320
-	'info_hier' => 'gisteren:',
321
-	'info_identification_publique' => 'Je publieke identiteit...',
322
-	'info_image_process' => 'Kies de beste methode om een miniatuurafbeelding te maken door op de bijhorende afbeelding te klikken.',
323
-	'info_image_process2' => 'Wanneer geen enkel beeld wordt getoond, betekent dit dat de server van je website niet is ingesteld om deze tools te gebruiken. Als je van deze functies gebruik wil maken, dien je de technische verantwoordelijke van de server te contacteren en te vragen naar «GD» of «Imagick» extensies.',
324
-	'info_images_auto' => 'Beelden automatisch berekend',
325
-	'info_informations_personnelles' => 'Persoonlijke gegevens',
326
-	'info_inscription' => 'Ingeschreven op',
327
-	'info_inscription_automatique' => 'Automatische inschrijving van nieuwe redacteurs',
328
-	'info_jeu_caractere' => 'Tekenset van de site',
329
-	'info_jours' => 'dagen',
330
-	'info_laisser_champs_vides' => 'velden leeglaten)',
331
-	'info_langues' => 'Talen van de site',
332
-	'info_ldap_ok' => 'De LDAP-autentificatie is geïnstalleerd',
333
-	'info_lien_hypertexte' => 'Hypertekst koppeling:',
334
-	'info_liste_nouveautes_envoyee' => 'Het lijst met nieuwe bijdragen werd verstuurd',
335
-	'info_liste_redacteurs_connectes' => 'Lijst met online redacteuren',
336
-	'info_login_existant' => 'Deze login is reeds in gebruik',
337
-	'info_login_trop_court' => 'Login te kort.',
338
-	'info_login_trop_court_car_pluriel' => 'De login moet minstens @nb@ teken bevatten.',
339
-	'info_logos' => 'De logo’s',
340
-	'info_maximum' => 'maximum:',
341
-	'info_meme_rubrique' => 'In dezelfde rubriek',
342
-	'info_message_en_redaction' => 'Je berichten in redactie',
343
-	'info_message_technique' => 'Technisch bericht:',
344
-	'info_messagerie_interne' => 'Intern berichtensysteem',
345
-	'info_mise_a_niveau_base' => 'update van je SQL-database',
346
-	'info_mise_a_niveau_base_2' => '{{LET OP!}} Je hebt een SPIP-versie geïnstalleerd die {ouder} is dan diegene die zich eerder op deze site bevond.: je database loopt hierdoor het risico beschadigd te worden waardoor je site niet meer zal functioneren.<br />{{Herinstalleer de SPIP-bestanden.}}',
347
-	'info_modification_enregistree' => 'Je wijziging werd geregistreerd',
348
-	'info_modifier_auteur' => 'De auteur wijzigen:',
349
-	'info_modifier_rubrique' => 'De rubriek wijzigen:',
350
-	'info_modifier_titre' => 'Wijzigen: @titre@',
351
-	'info_mon_site_spip' => 'Mijn SPIP-site',
352
-	'info_moyenne' => 'gemiddeld:',
353
-	'info_multi_cet_article' => 'Gebruikte taal in dit artikel is:',
354
-	'info_multi_langues_choisies' => 'Kies hierna welke talen ter beschikking staan van de redacteurs van je site.
317
+    'info_generation_miniatures_images' => 'Aanmaak van miniatuurafbeeldingen',
318
+    'info_gerer_trad_objets' => '@objets@: het beheer van de vertalingskoppelingen',
319
+    'info_hebergeur_desactiver_envoi_email' => 'Sommige hostingbedrijven staan het automatisch versturen van e-mails via hun servers niet toe. In dat geval zal de volgende functionaliteit van SPIP niet werken.',
320
+    'info_hier' => 'gisteren:',
321
+    'info_identification_publique' => 'Je publieke identiteit...',
322
+    'info_image_process' => 'Kies de beste methode om een miniatuurafbeelding te maken door op de bijhorende afbeelding te klikken.',
323
+    'info_image_process2' => 'Wanneer geen enkel beeld wordt getoond, betekent dit dat de server van je website niet is ingesteld om deze tools te gebruiken. Als je van deze functies gebruik wil maken, dien je de technische verantwoordelijke van de server te contacteren en te vragen naar «GD» of «Imagick» extensies.',
324
+    'info_images_auto' => 'Beelden automatisch berekend',
325
+    'info_informations_personnelles' => 'Persoonlijke gegevens',
326
+    'info_inscription' => 'Ingeschreven op',
327
+    'info_inscription_automatique' => 'Automatische inschrijving van nieuwe redacteurs',
328
+    'info_jeu_caractere' => 'Tekenset van de site',
329
+    'info_jours' => 'dagen',
330
+    'info_laisser_champs_vides' => 'velden leeglaten)',
331
+    'info_langues' => 'Talen van de site',
332
+    'info_ldap_ok' => 'De LDAP-autentificatie is geïnstalleerd',
333
+    'info_lien_hypertexte' => 'Hypertekst koppeling:',
334
+    'info_liste_nouveautes_envoyee' => 'Het lijst met nieuwe bijdragen werd verstuurd',
335
+    'info_liste_redacteurs_connectes' => 'Lijst met online redacteuren',
336
+    'info_login_existant' => 'Deze login is reeds in gebruik',
337
+    'info_login_trop_court' => 'Login te kort.',
338
+    'info_login_trop_court_car_pluriel' => 'De login moet minstens @nb@ teken bevatten.',
339
+    'info_logos' => 'De logo’s',
340
+    'info_maximum' => 'maximum:',
341
+    'info_meme_rubrique' => 'In dezelfde rubriek',
342
+    'info_message_en_redaction' => 'Je berichten in redactie',
343
+    'info_message_technique' => 'Technisch bericht:',
344
+    'info_messagerie_interne' => 'Intern berichtensysteem',
345
+    'info_mise_a_niveau_base' => 'update van je SQL-database',
346
+    'info_mise_a_niveau_base_2' => '{{LET OP!}} Je hebt een SPIP-versie geïnstalleerd die {ouder} is dan diegene die zich eerder op deze site bevond.: je database loopt hierdoor het risico beschadigd te worden waardoor je site niet meer zal functioneren.<br />{{Herinstalleer de SPIP-bestanden.}}',
347
+    'info_modification_enregistree' => 'Je wijziging werd geregistreerd',
348
+    'info_modifier_auteur' => 'De auteur wijzigen:',
349
+    'info_modifier_rubrique' => 'De rubriek wijzigen:',
350
+    'info_modifier_titre' => 'Wijzigen: @titre@',
351
+    'info_mon_site_spip' => 'Mijn SPIP-site',
352
+    'info_moyenne' => 'gemiddeld:',
353
+    'info_multi_cet_article' => 'Gebruikte taal in dit artikel is:',
354
+    'info_multi_langues_choisies' => 'Kies hierna welke talen ter beschikking staan van de redacteurs van je site.
355 355
   Talen die al worden gebruikt (vooraan in de lijst getoond) kunnen niet geschrapt worden.
356 356
 ',
357
-	'info_multi_objets' => '@objets@ : Activeer de taalmenu',
358
-	'info_multi_secteurs' => '... enkel voor de hoofdrubrieken?',
359
-	'info_nb_articles' => '@nb@ artikelen',
360
-	'info_nb_auteurs' => '@nb@ auteurs',
361
-	'info_nb_messages' => '@nb@ berichten',
362
-	'info_nb_mots_cles' => '@nb@ trefwoorden',
363
-	'info_nb_rubriques' => '@nb@ rubrieken',
364
-	'info_nb_visiteurs' => '@nb@ bezoekers',
365
-	'info_nom' => 'Naam',
366
-	'info_nom_destinataire' => 'Naam van de geadresseerde',
367
-	'info_nom_pas_conforme' => 'HTML bakens zijn niet toegestaan',
368
-	'info_nom_site' => 'Naam van je site',
369
-	'info_nombre_articles' => '@nb_articles@ artikelen,',
370
-	'info_nombre_rubriques' => '@nb_rubriques@ rubrieken, ',
371
-	'info_nombre_sites' => '@nb_sites@ sites,',
372
-	'info_non_deplacer' => 'Niet verplaatsen...',
373
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP kan regelmatig een bericht versturen om de laatste  nieuwtjes van de site te melden
357
+    'info_multi_objets' => '@objets@ : Activeer de taalmenu',
358
+    'info_multi_secteurs' => '... enkel voor de hoofdrubrieken?',
359
+    'info_nb_articles' => '@nb@ artikelen',
360
+    'info_nb_auteurs' => '@nb@ auteurs',
361
+    'info_nb_messages' => '@nb@ berichten',
362
+    'info_nb_mots_cles' => '@nb@ trefwoorden',
363
+    'info_nb_rubriques' => '@nb@ rubrieken',
364
+    'info_nb_visiteurs' => '@nb@ bezoekers',
365
+    'info_nom' => 'Naam',
366
+    'info_nom_destinataire' => 'Naam van de geadresseerde',
367
+    'info_nom_pas_conforme' => 'HTML bakens zijn niet toegestaan',
368
+    'info_nom_site' => 'Naam van je site',
369
+    'info_nombre_articles' => '@nb_articles@ artikelen,',
370
+    'info_nombre_rubriques' => '@nb_rubriques@ rubrieken, ',
371
+    'info_nombre_sites' => '@nb_sites@ sites,',
372
+    'info_non_deplacer' => 'Niet verplaatsen...',
373
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP kan regelmatig een bericht versturen om de laatste  nieuwtjes van de site te melden
374 374
    (recent gepubliceerde artikelen en nieuwsflitsen).',
375
-	'info_non_envoi_liste_nouveautes' => 'De lijst met nieuwe bijdragen niet versturen',
376
-	'info_non_modifiable' => 'kan niet gewijzigd worden',
377
-	'info_non_suppression_mot_cle' => 'ik wil dit trefwoord niet verwijderen.',
378
-	'info_notes' => 'Voetnoot',
379
-	'info_nouvel_article' => 'Nieuw artikel',
380
-	'info_nouvelle_traduction' => 'Nieuwe vertaling :',
381
-	'info_numero_article' => 'ARTIKEL NUMMER:',
382
-	'info_obligatoire_02' => '(verplicht)', # MODIF
383
-	'info_option_accepter_visiteurs' => 'Inschrijving van bezoekers van de publieke site aanvaarden',
384
-	'info_option_ne_pas_accepter_visiteurs' => 'Inschrijving van bezoekers weigeren',
385
-	'info_options_avancees' => 'GEAVANCEERDE OPTIES',
386
-	'info_ou' => 'of...',
387
-	'info_page_interdite' => 'Verboden pagina',
388
-	'info_par_nom' => 'op naam',
389
-	'info_par_nombre_article' => 'volgens aantal artikelen',
390
-	'info_par_statut' => 'op status',
391
-	'info_par_tri' => '’(per @tri@)’',
392
-	'info_passe_trop_court' => 'Te kort wachtwoord.',
393
-	'info_passe_trop_court_car_pluriel' => 'Het wachtwoord moet ten minste @nb@ teken bevatten.',
394
-	'info_passes_identiques' => 'Beide wachtwoorden zijn niet identiek.',
395
-	'info_plus_cinq_car' => 'Meer dan 5 karakters',
396
-	'info_plus_cinq_car_2' => '(Meer dan 5 karakters)',
397
-	'info_plus_trois_car' => '(Meer dan 3 karakters)',
398
-	'info_popularite' => 'populariteit: @popularite@; bezoeken: @visites@',
399
-	'info_post_scriptum' => 'Post-Scriptum',
400
-	'info_post_scriptum_2' => 'Post-scriptum:',
401
-	'info_pour' => 'voor',
402
-	'info_preview_texte' => 'Nu is het ook mogelijk om de site in preview mode te zien, alsof alle artikelen en berichten (indien ze tenminste werden « voorgesteld voor publicatie ») ook echt waren gepubliceerd. Dient deze mogelijkheid uitsluitend te worden voorzien voor de beheerders, voor alle redacteurs of voor niemand?',
403
-	'info_procedez_par_etape' => 'vervolg stap voor stap',
404
-	'info_procedure_maj_version' => 'de procedure voor de update die nodig is om de database aan te passen aan de nieuwe versie van SPIP.',
405
-	'info_proxy_ok' => 'Test van proxy geslaagde.',
406
-	'info_ps' => 'N.B.',
407
-	'info_publier' => 'publiceren',
408
-	'info_publies' => 'Je gepubliceerde artikelen',
409
-	'info_question_accepter_visiteurs' => 'Als de sjablonen van je site voorzien dat bezoekers zich kunnen registreren zonder toegang tot de privé-ruimte, activeer dan de volgende optie :',
410
-	'info_question_inscription_nouveaux_redacteurs' => 'Aanvaard je inschrijvingen van nieuwe redacteuren vanaf
375
+    'info_non_envoi_liste_nouveautes' => 'De lijst met nieuwe bijdragen niet versturen',
376
+    'info_non_modifiable' => 'kan niet gewijzigd worden',
377
+    'info_non_suppression_mot_cle' => 'ik wil dit trefwoord niet verwijderen.',
378
+    'info_notes' => 'Voetnoot',
379
+    'info_nouvel_article' => 'Nieuw artikel',
380
+    'info_nouvelle_traduction' => 'Nieuwe vertaling :',
381
+    'info_numero_article' => 'ARTIKEL NUMMER:',
382
+    'info_obligatoire_02' => '(verplicht)', # MODIF
383
+    'info_option_accepter_visiteurs' => 'Inschrijving van bezoekers van de publieke site aanvaarden',
384
+    'info_option_ne_pas_accepter_visiteurs' => 'Inschrijving van bezoekers weigeren',
385
+    'info_options_avancees' => 'GEAVANCEERDE OPTIES',
386
+    'info_ou' => 'of...',
387
+    'info_page_interdite' => 'Verboden pagina',
388
+    'info_par_nom' => 'op naam',
389
+    'info_par_nombre_article' => 'volgens aantal artikelen',
390
+    'info_par_statut' => 'op status',
391
+    'info_par_tri' => '’(per @tri@)’',
392
+    'info_passe_trop_court' => 'Te kort wachtwoord.',
393
+    'info_passe_trop_court_car_pluriel' => 'Het wachtwoord moet ten minste @nb@ teken bevatten.',
394
+    'info_passes_identiques' => 'Beide wachtwoorden zijn niet identiek.',
395
+    'info_plus_cinq_car' => 'Meer dan 5 karakters',
396
+    'info_plus_cinq_car_2' => '(Meer dan 5 karakters)',
397
+    'info_plus_trois_car' => '(Meer dan 3 karakters)',
398
+    'info_popularite' => 'populariteit: @popularite@; bezoeken: @visites@',
399
+    'info_post_scriptum' => 'Post-Scriptum',
400
+    'info_post_scriptum_2' => 'Post-scriptum:',
401
+    'info_pour' => 'voor',
402
+    'info_preview_texte' => 'Nu is het ook mogelijk om de site in preview mode te zien, alsof alle artikelen en berichten (indien ze tenminste werden « voorgesteld voor publicatie ») ook echt waren gepubliceerd. Dient deze mogelijkheid uitsluitend te worden voorzien voor de beheerders, voor alle redacteurs of voor niemand?',
403
+    'info_procedez_par_etape' => 'vervolg stap voor stap',
404
+    'info_procedure_maj_version' => 'de procedure voor de update die nodig is om de database aan te passen aan de nieuwe versie van SPIP.',
405
+    'info_proxy_ok' => 'Test van proxy geslaagde.',
406
+    'info_ps' => 'N.B.',
407
+    'info_publier' => 'publiceren',
408
+    'info_publies' => 'Je gepubliceerde artikelen',
409
+    'info_question_accepter_visiteurs' => 'Als de sjablonen van je site voorzien dat bezoekers zich kunnen registreren zonder toegang tot de privé-ruimte, activeer dan de volgende optie :',
410
+    'info_question_inscription_nouveaux_redacteurs' => 'Aanvaard je inschrijvingen van nieuwe redacteuren vanaf
411 411
  de publieke site? Indien wel, dan kunnen bezoekers
412 412
  zich via een geautomatiseerd formulier inschrijven en
413 413
  toegang krijgen tot de privé-ruimte om zelf artikelen
@@ -417,483 +417,483 @@  discard block
 block discarded – undo
417 417
  blokkeren echter het versturen van e-mail vanaf hun
418 418
  servers: in dat geval is een automatische inschrijving
419 419
  niet mogelijk.</div>',
420
-	'info_qui_edite' => '@nom_auteur_modif@ heeft @date_diff@ minuten geleden aan deze inhoud gewerkt ',
421
-	'info_racine_site' => 'Begin van de site',
422
-	'info_recharger_page' => 'Laad deze pagina over enkele ogenblikken opnieuw.',
423
-	'info_recherche_auteur_zero' => 'Geen resultaat voor « @cherche_auteur@ ».',
424
-	'info_recommencer' => 'Probeer nogmaals, alstublieft.',
425
-	'info_redacteur_1' => 'Redacteur',
426
-	'info_redacteur_2' => 'met toegang tot de privé-ruimte (<i>aanbevolen</i>)',
427
-	'info_redacteurs' => 'Redacteurs',
428
-	'info_redaction_en_cours' => 'IN REDACTIE',
429
-	'info_redirection' => 'Doorverwijzing',
430
-	'info_redirection_activee' => 'De doorverwijzing is ingeschakeld.',
431
-	'info_redirection_boucle' => 'Je probeert het artikel naar zichzelf door te verwijzen.',
432
-	'info_redirection_desactivee' => 'De doorverwijzing is verwijderd.',
433
-	'info_refuses' => 'Je geweigerde artikelen',
434
-	'info_reglage_ldap' => 'Opties: <b>Instellen van de LDAP invoer</b>',
435
-	'info_renvoi_article' => '<b>Doorverwijzing.</b> Dit artikel verwijst naar de pagina:',
436
-	'info_reserve_admin' => 'Alleen beheerders kunnen dit adres wijzigen.',
437
-	'info_restreindre_rubrique' => 'Beheer tot deze rubriek beperken:',
438
-	'info_resultat_recherche' => 'Resultaat van de zoekopdracht:',
439
-	'info_rubriques' => 'Rubrieken',
440
-	'info_rubriques_02' => 'rubrieken',
441
-	'info_rubriques_trouvees' => 'Gevonden rubrieken',
442
-	'info_sans_titre' => 'Zonder titel',
443
-	'info_selection_chemin_acces' => '<b>Selecteer</b> hierna de toegangswijze tot het adresboek:',
444
-	'info_signatures' => 'namen',
445
-	'info_site' => 'Site',
446
-	'info_site_2' => 'site:',
447
-	'info_site_min' => 'site',
448
-	'info_site_reference_2' => 'Gekoppelde website',
449
-	'info_site_web' => 'Website:',
450
-	'info_sites' => 'sites',
451
-	'info_sites_lies_mot' => 'Referentiesites gekoppeld aan het trefwoord ',
452
-	'info_sites_proxy' => 'Een proxy gebruiken',
453
-	'info_sites_trouves' => 'Gevonden websites ',
454
-	'info_sous_titre' => 'Ondertitel:',
455
-	'info_statut_administrateur' => 'Beheerder',
456
-	'info_statut_auteur' => 'Status van deze auteur:',
457
-	'info_statut_auteur_2' => 'Ik ben',
458
-	'info_statut_auteur_a_confirmer' => 'Te bevestigen inschrijving',
459
-	'info_statut_auteur_autre' => 'Andere status:',
460
-	'info_statut_redacteur' => 'Redacteur',
461
-	'info_statut_utilisateurs_1' => 'Standaardstatus voor de ingevoerde gebruikers',
462
-	'info_statut_utilisateurs_2' => 'Kies de status die de personen uit het LDAP-adressenboek toebediend krijgen als ze de eerste keer inloggen. Nadien kan je de status van een individuele auteur wijzigen.',
463
-	'info_suivi_activite' => 'Opvolgen van de editoriale activiteit',
464
-	'info_surtitre' => 'Opschrift:',
465
-	'info_syndication_integrale_1' => 'Je site stelt syndicatiebestanden voor (zie « <a href="@url@">@titre@</a> »).',
466
-	'info_syndication_integrale_2' => 'Wil je integrale artikelen doorgeven of enkel een samenvatting van enkele honderden karakters doorgeven ?',
467
-	'info_table_prefix' => 'Je kunt het voorvoegsel van de naam van de databasetabel aanpassen (dit is absoluut noodzakelijk wanneer er verschillende sites in dezelfde database zitten). Dit voorvoegsel schrijf je in kleine letters, zonder accenten of spaties.',
468
-	'info_taille_maximale_images' => 'SPIP zal de maximumomvang van de beelden testen die hij kan behandelen (in miljoenen pixels). <br/> zullen de grotere beelden niet verminderd zijn.',
469
-	'info_taille_maximale_vignette' => 'Maximale grootte van de mini-afbeeldingen gemaakt door het systeem:',
470
-	'info_terminer_installation' => 'Je kan de standaardinstallatieprocedure nu beëindigen.',
471
-	'info_texte' => 'Tekst',
472
-	'info_texte_explicatif' => 'Uitleg',
473
-	'info_texte_long' => '(de tekst is lang: hij zal bijgevolg in verschillende delen verschijnen die opnieuw bij elkaar worden gevoegd na goedkeuring van de tekst.)',
474
-	'info_texte_message' => 'Tekst van je bericht',
475
-	'info_texte_message_02' => 'Tekst van het bericht',
476
-	'info_titre' => 'Titel:',
477
-	'info_total' => 'totaal:',
478
-	'info_tous_articles_en_redaction' => 'Alle artikelen in redactie',
479
-	'info_tous_articles_presents' => 'Alle in deze rubriek gepubliceerde artikelen',
480
-	'info_tous_articles_refuses' => 'Alle afgewezen artikelen',
481
-	'info_tous_les' => 'alle:',
482
-	'info_tout_site' => 'Volledige site',
483
-	'info_tout_site2' => 'Het artikel werd niet in deze taal vertaald.',
484
-	'info_tout_site3' => 'Het artikel werd in deze taal vertaald maar aan het bronartikel werden wijzigingen aangebracht. De vertaling dient geactualiseerd te worden.',
485
-	'info_tout_site4' => 'Het artikel is vertaald naar deze taal en de vertaling is geactualiseerd.',
486
-	'info_tout_site5' => 'Origineel artikel.',
487
-	'info_tout_site6' => '<b>LET OP:</b> alleen de originele artikelen worden getoond.
420
+    'info_qui_edite' => '@nom_auteur_modif@ heeft @date_diff@ minuten geleden aan deze inhoud gewerkt ',
421
+    'info_racine_site' => 'Begin van de site',
422
+    'info_recharger_page' => 'Laad deze pagina over enkele ogenblikken opnieuw.',
423
+    'info_recherche_auteur_zero' => 'Geen resultaat voor « @cherche_auteur@ ».',
424
+    'info_recommencer' => 'Probeer nogmaals, alstublieft.',
425
+    'info_redacteur_1' => 'Redacteur',
426
+    'info_redacteur_2' => 'met toegang tot de privé-ruimte (<i>aanbevolen</i>)',
427
+    'info_redacteurs' => 'Redacteurs',
428
+    'info_redaction_en_cours' => 'IN REDACTIE',
429
+    'info_redirection' => 'Doorverwijzing',
430
+    'info_redirection_activee' => 'De doorverwijzing is ingeschakeld.',
431
+    'info_redirection_boucle' => 'Je probeert het artikel naar zichzelf door te verwijzen.',
432
+    'info_redirection_desactivee' => 'De doorverwijzing is verwijderd.',
433
+    'info_refuses' => 'Je geweigerde artikelen',
434
+    'info_reglage_ldap' => 'Opties: <b>Instellen van de LDAP invoer</b>',
435
+    'info_renvoi_article' => '<b>Doorverwijzing.</b> Dit artikel verwijst naar de pagina:',
436
+    'info_reserve_admin' => 'Alleen beheerders kunnen dit adres wijzigen.',
437
+    'info_restreindre_rubrique' => 'Beheer tot deze rubriek beperken:',
438
+    'info_resultat_recherche' => 'Resultaat van de zoekopdracht:',
439
+    'info_rubriques' => 'Rubrieken',
440
+    'info_rubriques_02' => 'rubrieken',
441
+    'info_rubriques_trouvees' => 'Gevonden rubrieken',
442
+    'info_sans_titre' => 'Zonder titel',
443
+    'info_selection_chemin_acces' => '<b>Selecteer</b> hierna de toegangswijze tot het adresboek:',
444
+    'info_signatures' => 'namen',
445
+    'info_site' => 'Site',
446
+    'info_site_2' => 'site:',
447
+    'info_site_min' => 'site',
448
+    'info_site_reference_2' => 'Gekoppelde website',
449
+    'info_site_web' => 'Website:',
450
+    'info_sites' => 'sites',
451
+    'info_sites_lies_mot' => 'Referentiesites gekoppeld aan het trefwoord ',
452
+    'info_sites_proxy' => 'Een proxy gebruiken',
453
+    'info_sites_trouves' => 'Gevonden websites ',
454
+    'info_sous_titre' => 'Ondertitel:',
455
+    'info_statut_administrateur' => 'Beheerder',
456
+    'info_statut_auteur' => 'Status van deze auteur:',
457
+    'info_statut_auteur_2' => 'Ik ben',
458
+    'info_statut_auteur_a_confirmer' => 'Te bevestigen inschrijving',
459
+    'info_statut_auteur_autre' => 'Andere status:',
460
+    'info_statut_redacteur' => 'Redacteur',
461
+    'info_statut_utilisateurs_1' => 'Standaardstatus voor de ingevoerde gebruikers',
462
+    'info_statut_utilisateurs_2' => 'Kies de status die de personen uit het LDAP-adressenboek toebediend krijgen als ze de eerste keer inloggen. Nadien kan je de status van een individuele auteur wijzigen.',
463
+    'info_suivi_activite' => 'Opvolgen van de editoriale activiteit',
464
+    'info_surtitre' => 'Opschrift:',
465
+    'info_syndication_integrale_1' => 'Je site stelt syndicatiebestanden voor (zie « <a href="@url@">@titre@</a> »).',
466
+    'info_syndication_integrale_2' => 'Wil je integrale artikelen doorgeven of enkel een samenvatting van enkele honderden karakters doorgeven ?',
467
+    'info_table_prefix' => 'Je kunt het voorvoegsel van de naam van de databasetabel aanpassen (dit is absoluut noodzakelijk wanneer er verschillende sites in dezelfde database zitten). Dit voorvoegsel schrijf je in kleine letters, zonder accenten of spaties.',
468
+    'info_taille_maximale_images' => 'SPIP zal de maximumomvang van de beelden testen die hij kan behandelen (in miljoenen pixels). <br/> zullen de grotere beelden niet verminderd zijn.',
469
+    'info_taille_maximale_vignette' => 'Maximale grootte van de mini-afbeeldingen gemaakt door het systeem:',
470
+    'info_terminer_installation' => 'Je kan de standaardinstallatieprocedure nu beëindigen.',
471
+    'info_texte' => 'Tekst',
472
+    'info_texte_explicatif' => 'Uitleg',
473
+    'info_texte_long' => '(de tekst is lang: hij zal bijgevolg in verschillende delen verschijnen die opnieuw bij elkaar worden gevoegd na goedkeuring van de tekst.)',
474
+    'info_texte_message' => 'Tekst van je bericht',
475
+    'info_texte_message_02' => 'Tekst van het bericht',
476
+    'info_titre' => 'Titel:',
477
+    'info_total' => 'totaal:',
478
+    'info_tous_articles_en_redaction' => 'Alle artikelen in redactie',
479
+    'info_tous_articles_presents' => 'Alle in deze rubriek gepubliceerde artikelen',
480
+    'info_tous_articles_refuses' => 'Alle afgewezen artikelen',
481
+    'info_tous_les' => 'alle:',
482
+    'info_tout_site' => 'Volledige site',
483
+    'info_tout_site2' => 'Het artikel werd niet in deze taal vertaald.',
484
+    'info_tout_site3' => 'Het artikel werd in deze taal vertaald maar aan het bronartikel werden wijzigingen aangebracht. De vertaling dient geactualiseerd te worden.',
485
+    'info_tout_site4' => 'Het artikel is vertaald naar deze taal en de vertaling is geactualiseerd.',
486
+    'info_tout_site5' => 'Origineel artikel.',
487
+    'info_tout_site6' => '<b>LET OP:</b> alleen de originele artikelen worden getoond.
488 488
 Vertalingen worden gelinkt aan het origineel,
489 489
 een kleur geeft hun status aan:',
490
-	'info_traductions' => 'Vertalingen',
491
-	'info_travail_colaboratif' => 'Samenwerking op artikelen',
492
-	'info_un_article' => 'een artikel, ',
493
-	'info_un_site' => 'een website, ',
494
-	'info_une_rubrique' => 'een rubriek, ',
495
-	'info_une_rubrique_02' => '1 rubriek',
496
-	'info_url' => 'URL:',
497
-	'info_url_proxy' => 'Proxy-URL',
498
-	'info_url_proxy_pas_conforme' => 'De URL van de proxy is ongeldig.',
499
-	'info_url_site_pas_conforme' => 'De site URL is niet geldig.',
500
-	'info_url_test_proxy' => 'Test-URL',
501
-	'info_urlref' => 'Adres van de koppeling:',
502
-	'info_utilisation_spip' => 'Je kan het publicatiesysteem nu gebruiken...',
503
-	'info_visites_par_mois' => 'Weergave per maand:',
504
-	'info_visiteur_1' => 'Bezoeker',
505
-	'info_visiteur_2' => 'van de publieke site',
506
-	'info_visiteurs' => 'Bezoekers',
507
-	'info_visiteurs_02' => 'Bezoekers van de publieke site',
508
-	'info_webmestre_forces' => 'Webmasters zijn op dit moment gedefinieerd in <tt>@file_options@</tt>.',
509
-	'install_adresse_base_hebergeur' => 'Adres van de database die door de provider wordt toegekend',
510
-	'install_connect_ok' => 'De nieuwe database is gedeclareerd als server @connect@.',
511
-	'install_echec_annonce' => 'De installatie zal wellicht mislukken of leiden tot een niet-werkende site...',
512
-	'install_extension_mbstring' => 'SPIP functioneert niet met:',
513
-	'install_extension_php_obligatoire' => 'SPIP benodigt de PHP-extensie:',
514
-	'install_login_base_hebergeur' => 'Login van aansluiten die door de provider wordt toegekend',
515
-	'install_nom_base_hebergeur' => 'De naam van de database die door de provider wordt toegekend:',
516
-	'install_pas_table' => 'Database momenteel zonder tabellen',
517
-	'install_pass_base_hebergeur' => 'Wachtwoord van aansluiten dat door de provider wordt toegekend',
518
-	'install_php_version' => 'PHP versie @version@ onvoldoende (minimum = @minimum@)',
519
-	'install_select_langue' => 'Kies een taal en klik vervolgens op de knop  «volgende» om de installatie te beginnen.',
520
-	'install_select_type_db' => 'Het type database aangeven:',
521
-	'install_select_type_mysql' => 'MySQL',
522
-	'install_select_type_pg' => 'PostgreSQL',
523
-	'install_select_type_sqlite2' => 'SQLite 2',
524
-	'install_select_type_sqlite3' => 'SQLite 3',
525
-	'install_serveur_hebergeur' => 'Databaseserver die door de provider wordt toegekend',
526
-	'install_table_prefix_hebergeur' => 'Het voorvoegsel van de tabel dat door de provider wordt toegekend:',
527
-	'install_tables_base' => 'Tabellen van de database',
528
-	'install_types_db_connus' => 'SPIP kan <b>MySQL</b> (het meest verbreid), <b>PostgreSQL</b> en <b>SQLite</b> gebruiken.',
529
-	'install_types_db_connus_avertissement' => '<b>PostgreSQL</b>support wordt experimenteel voorgesteld.',
530
-	'instituer_erreur_statut_a_change' => 'De status werd al gewijzigd',
531
-	'instituer_erreur_statut_non_autorise' => 'Je kunt niet kiezen voor deze status',
532
-	'intem_redacteur' => 'redacteur',
533
-	'intitule_licence' => 'Licentie',
534
-	'item_accepter_inscriptions' => 'Inschrijvingen aanvaarden',
535
-	'item_activer_messages_avertissement' => 'Waarschuwingsberichten activeren',
536
-	'item_administrateur_2' => 'beheerder',
537
-	'item_afficher_calendrier' => 'Op de kalender tonen',
538
-	'item_autoriser_syndication_integrale' => 'Volledige artikelen verspreiden via syndicatiebestanden',
539
-	'item_choix_administrateurs' => 'de beheerders',
540
-	'item_choix_generation_miniature' => 'Automatisch aanmaken van verkleinde afbeeldingen.',
541
-	'item_choix_non_generation_miniature' => 'Geen verkleinde afbeeldingen aanmaken.',
542
-	'item_choix_redacteurs' => 'de redacteurs',
543
-	'item_choix_visiteurs' => 'bezoekers van de publieke site',
544
-	'item_creer_fichiers_authent' => 'de .htpasswd bestanden aanmaken',
545
-	'item_login' => 'Login',
546
-	'item_messagerie_agenda' => 'De berichtendienst en de agenda activeren',
547
-	'item_mots_cles_association_articles' => 'aan artikelen',
548
-	'item_mots_cles_association_rubriques' => 'aan rubrieken',
549
-	'item_mots_cles_association_sites' => 'aan gesyndiceerde of gerefereerde sites.',
550
-	'item_non' => 'Nee',
551
-	'item_non_accepter_inscriptions' => 'Geen inschrijvingen aanvaarden',
552
-	'item_non_activer_messages_avertissement' => 'Geen waarschuwingsberichten',
553
-	'item_non_afficher_calendrier' => 'Niet tonen op de kalender',
554
-	'item_non_autoriser_syndication_integrale' => 'Alleen een samenvatting verspreiden',
555
-	'item_non_creer_fichiers_authent' => 'Deze bestanden niet aanmaken',
556
-	'item_non_messagerie_agenda' => 'De berichtendienst en de agenda deactiveren',
557
-	'item_non_publier_articles' => 'Artikelen niet vrijgeven voor de vastgelegde datum van publicatie',
558
-	'item_nouvel_auteur' => 'Nieuwe auteur',
559
-	'item_nouvelle_rubrique' => 'Nieuwe rubriek',
560
-	'item_oui' => 'Ja',
561
-	'item_publier_articles' => 'Artikelen publiceren, ongeacht hun publicatiedatum.',
562
-	'item_reponse_article' => 'Antwoord op artikel',
563
-	'item_visiteur' => 'bezoeker',
490
+    'info_traductions' => 'Vertalingen',
491
+    'info_travail_colaboratif' => 'Samenwerking op artikelen',
492
+    'info_un_article' => 'een artikel, ',
493
+    'info_un_site' => 'een website, ',
494
+    'info_une_rubrique' => 'een rubriek, ',
495
+    'info_une_rubrique_02' => '1 rubriek',
496
+    'info_url' => 'URL:',
497
+    'info_url_proxy' => 'Proxy-URL',
498
+    'info_url_proxy_pas_conforme' => 'De URL van de proxy is ongeldig.',
499
+    'info_url_site_pas_conforme' => 'De site URL is niet geldig.',
500
+    'info_url_test_proxy' => 'Test-URL',
501
+    'info_urlref' => 'Adres van de koppeling:',
502
+    'info_utilisation_spip' => 'Je kan het publicatiesysteem nu gebruiken...',
503
+    'info_visites_par_mois' => 'Weergave per maand:',
504
+    'info_visiteur_1' => 'Bezoeker',
505
+    'info_visiteur_2' => 'van de publieke site',
506
+    'info_visiteurs' => 'Bezoekers',
507
+    'info_visiteurs_02' => 'Bezoekers van de publieke site',
508
+    'info_webmestre_forces' => 'Webmasters zijn op dit moment gedefinieerd in <tt>@file_options@</tt>.',
509
+    'install_adresse_base_hebergeur' => 'Adres van de database die door de provider wordt toegekend',
510
+    'install_connect_ok' => 'De nieuwe database is gedeclareerd als server @connect@.',
511
+    'install_echec_annonce' => 'De installatie zal wellicht mislukken of leiden tot een niet-werkende site...',
512
+    'install_extension_mbstring' => 'SPIP functioneert niet met:',
513
+    'install_extension_php_obligatoire' => 'SPIP benodigt de PHP-extensie:',
514
+    'install_login_base_hebergeur' => 'Login van aansluiten die door de provider wordt toegekend',
515
+    'install_nom_base_hebergeur' => 'De naam van de database die door de provider wordt toegekend:',
516
+    'install_pas_table' => 'Database momenteel zonder tabellen',
517
+    'install_pass_base_hebergeur' => 'Wachtwoord van aansluiten dat door de provider wordt toegekend',
518
+    'install_php_version' => 'PHP versie @version@ onvoldoende (minimum = @minimum@)',
519
+    'install_select_langue' => 'Kies een taal en klik vervolgens op de knop  «volgende» om de installatie te beginnen.',
520
+    'install_select_type_db' => 'Het type database aangeven:',
521
+    'install_select_type_mysql' => 'MySQL',
522
+    'install_select_type_pg' => 'PostgreSQL',
523
+    'install_select_type_sqlite2' => 'SQLite 2',
524
+    'install_select_type_sqlite3' => 'SQLite 3',
525
+    'install_serveur_hebergeur' => 'Databaseserver die door de provider wordt toegekend',
526
+    'install_table_prefix_hebergeur' => 'Het voorvoegsel van de tabel dat door de provider wordt toegekend:',
527
+    'install_tables_base' => 'Tabellen van de database',
528
+    'install_types_db_connus' => 'SPIP kan <b>MySQL</b> (het meest verbreid), <b>PostgreSQL</b> en <b>SQLite</b> gebruiken.',
529
+    'install_types_db_connus_avertissement' => '<b>PostgreSQL</b>support wordt experimenteel voorgesteld.',
530
+    'instituer_erreur_statut_a_change' => 'De status werd al gewijzigd',
531
+    'instituer_erreur_statut_non_autorise' => 'Je kunt niet kiezen voor deze status',
532
+    'intem_redacteur' => 'redacteur',
533
+    'intitule_licence' => 'Licentie',
534
+    'item_accepter_inscriptions' => 'Inschrijvingen aanvaarden',
535
+    'item_activer_messages_avertissement' => 'Waarschuwingsberichten activeren',
536
+    'item_administrateur_2' => 'beheerder',
537
+    'item_afficher_calendrier' => 'Op de kalender tonen',
538
+    'item_autoriser_syndication_integrale' => 'Volledige artikelen verspreiden via syndicatiebestanden',
539
+    'item_choix_administrateurs' => 'de beheerders',
540
+    'item_choix_generation_miniature' => 'Automatisch aanmaken van verkleinde afbeeldingen.',
541
+    'item_choix_non_generation_miniature' => 'Geen verkleinde afbeeldingen aanmaken.',
542
+    'item_choix_redacteurs' => 'de redacteurs',
543
+    'item_choix_visiteurs' => 'bezoekers van de publieke site',
544
+    'item_creer_fichiers_authent' => 'de .htpasswd bestanden aanmaken',
545
+    'item_login' => 'Login',
546
+    'item_messagerie_agenda' => 'De berichtendienst en de agenda activeren',
547
+    'item_mots_cles_association_articles' => 'aan artikelen',
548
+    'item_mots_cles_association_rubriques' => 'aan rubrieken',
549
+    'item_mots_cles_association_sites' => 'aan gesyndiceerde of gerefereerde sites.',
550
+    'item_non' => 'Nee',
551
+    'item_non_accepter_inscriptions' => 'Geen inschrijvingen aanvaarden',
552
+    'item_non_activer_messages_avertissement' => 'Geen waarschuwingsberichten',
553
+    'item_non_afficher_calendrier' => 'Niet tonen op de kalender',
554
+    'item_non_autoriser_syndication_integrale' => 'Alleen een samenvatting verspreiden',
555
+    'item_non_creer_fichiers_authent' => 'Deze bestanden niet aanmaken',
556
+    'item_non_messagerie_agenda' => 'De berichtendienst en de agenda deactiveren',
557
+    'item_non_publier_articles' => 'Artikelen niet vrijgeven voor de vastgelegde datum van publicatie',
558
+    'item_nouvel_auteur' => 'Nieuwe auteur',
559
+    'item_nouvelle_rubrique' => 'Nieuwe rubriek',
560
+    'item_oui' => 'Ja',
561
+    'item_publier_articles' => 'Artikelen publiceren, ongeacht hun publicatiedatum.',
562
+    'item_reponse_article' => 'Antwoord op artikel',
563
+    'item_visiteur' => 'bezoeker',
564 564
 
565
-	// J
566
-	'jour_non_connu_nc' => 'onbekend',
565
+    // J
566
+    'jour_non_connu_nc' => 'onbekend',
567 567
 
568
-	// L
569
-	'label_bando_outils' => 'Knoppenbalk',
570
-	'label_bando_outils_afficher' => 'Knoppenbalk tonen',
571
-	'label_bando_outils_masquer' => 'Knoppenbalk verbergen',
572
-	'label_choix_langue' => 'Selecteer je taal',
573
-	'label_nom_fichier_connect' => 'Geef de naam die wordt gebruikt voor deze server',
574
-	'label_slogan_site' => 'Slogan',
575
-	'label_taille_ecran' => 'Breedte van het scherm',
576
-	'label_texte_et_icones_navigation' => 'Navigatiemenu',
577
-	'label_texte_et_icones_page' => 'Weergave op de pagina',
578
-	'ldap_correspondance' => 'erfenis van het veld @champ@',
579
-	'ldap_correspondance_1' => 'Erfenis van de LDAP velden',
580
-	'ldap_correspondance_2' => 'Voor elk volgend SPIP veld, de naam van het overeenkomstige LDAP veld aangeven. Leeglaten om niets in te vullen, door spaties of komma’s gescheiden om verschillende LDAP velden te proberen.',
581
-	'lien_ajouter_auteur' => 'Voeg deze auteur toe',
582
-	'lien_ajouter_une_rubrique' => 'Deze rubriek toevoegen',
583
-	'lien_email' => 'e-mail',
584
-	'lien_nom_site' => 'NAAM WEBSITE:',
585
-	'lien_rapide_contenu' => 'Naar de inhoud gaan',
586
-	'lien_rapide_navigation' => 'Naar de navigatie gaan',
587
-	'lien_rapide_recherche' => 'Op zoek gaan',
588
-	'lien_retirer_auteur' => 'Auteur verwijderen',
589
-	'lien_retirer_rubrique' => 'Rubriek verwijderen',
590
-	'lien_retirer_tous_auteurs' => 'Verwijder alle auteurs',
591
-	'lien_retirer_toutes_rubriques' => 'Alle rubrieken verwijderen',
592
-	'lien_site' => 'site',
593
-	'lien_tout_decocher' => 'Alles deselecteren',
594
-	'lien_tout_deplier' => 'Alles uitvouwen',
595
-	'lien_tout_replier' => 'Alles opvouwen',
596
-	'lien_tout_supprimer' => 'Alles verwijderen',
597
-	'lien_trier_nom' => 'Sorteer op naam',
598
-	'lien_trier_nombre_articles' => 'Sorteer op aantal artikelen',
599
-	'lien_trier_statut' => 'Sorteer op status',
600
-	'lien_voir_en_ligne' => 'ONLINE BEKIJKEN:',
601
-	'logo_article' => 'Logo van het artikel',
602
-	'logo_auteur' => 'Logo van de auteur',
603
-	'logo_rubrique' => 'Logo van de rubriek ',
604
-	'logo_site' => 'Logo van deze site',
605
-	'logo_standard_rubrique' => 'Standaard logo rubrieken',
606
-	'logo_survol' => 'Logo voor rollover',
568
+    // L
569
+    'label_bando_outils' => 'Knoppenbalk',
570
+    'label_bando_outils_afficher' => 'Knoppenbalk tonen',
571
+    'label_bando_outils_masquer' => 'Knoppenbalk verbergen',
572
+    'label_choix_langue' => 'Selecteer je taal',
573
+    'label_nom_fichier_connect' => 'Geef de naam die wordt gebruikt voor deze server',
574
+    'label_slogan_site' => 'Slogan',
575
+    'label_taille_ecran' => 'Breedte van het scherm',
576
+    'label_texte_et_icones_navigation' => 'Navigatiemenu',
577
+    'label_texte_et_icones_page' => 'Weergave op de pagina',
578
+    'ldap_correspondance' => 'erfenis van het veld @champ@',
579
+    'ldap_correspondance_1' => 'Erfenis van de LDAP velden',
580
+    'ldap_correspondance_2' => 'Voor elk volgend SPIP veld, de naam van het overeenkomstige LDAP veld aangeven. Leeglaten om niets in te vullen, door spaties of komma’s gescheiden om verschillende LDAP velden te proberen.',
581
+    'lien_ajouter_auteur' => 'Voeg deze auteur toe',
582
+    'lien_ajouter_une_rubrique' => 'Deze rubriek toevoegen',
583
+    'lien_email' => 'e-mail',
584
+    'lien_nom_site' => 'NAAM WEBSITE:',
585
+    'lien_rapide_contenu' => 'Naar de inhoud gaan',
586
+    'lien_rapide_navigation' => 'Naar de navigatie gaan',
587
+    'lien_rapide_recherche' => 'Op zoek gaan',
588
+    'lien_retirer_auteur' => 'Auteur verwijderen',
589
+    'lien_retirer_rubrique' => 'Rubriek verwijderen',
590
+    'lien_retirer_tous_auteurs' => 'Verwijder alle auteurs',
591
+    'lien_retirer_toutes_rubriques' => 'Alle rubrieken verwijderen',
592
+    'lien_site' => 'site',
593
+    'lien_tout_decocher' => 'Alles deselecteren',
594
+    'lien_tout_deplier' => 'Alles uitvouwen',
595
+    'lien_tout_replier' => 'Alles opvouwen',
596
+    'lien_tout_supprimer' => 'Alles verwijderen',
597
+    'lien_trier_nom' => 'Sorteer op naam',
598
+    'lien_trier_nombre_articles' => 'Sorteer op aantal artikelen',
599
+    'lien_trier_statut' => 'Sorteer op status',
600
+    'lien_voir_en_ligne' => 'ONLINE BEKIJKEN:',
601
+    'logo_article' => 'Logo van het artikel',
602
+    'logo_auteur' => 'Logo van de auteur',
603
+    'logo_rubrique' => 'Logo van de rubriek ',
604
+    'logo_site' => 'Logo van deze site',
605
+    'logo_standard_rubrique' => 'Standaard logo rubrieken',
606
+    'logo_survol' => 'Logo voor rollover',
607 607
 
608
-	// M
609
-	'menu_aide_installation_choix_base' => 'Database kiezen',
610
-	'module_fichier_langue' => 'Taalbestand',
611
-	'module_raccourci' => 'Snelkoppeling',
612
-	'module_texte_affiche' => 'Weergegeven tekst',
613
-	'module_texte_explicatif' => 'Je kan de volgende snelkoppelingen invoegen in de skeletten van je publieke site. Ze worden automatisch vertaald in de verschillende talen waarvoor een taalbestand is aangemaakt.',
614
-	'module_texte_traduction' => 'Het taalbestand « @module@ » is beschikbaar in het:',
615
-	'mois_non_connu' => 'Onbekend',
608
+    // M
609
+    'menu_aide_installation_choix_base' => 'Database kiezen',
610
+    'module_fichier_langue' => 'Taalbestand',
611
+    'module_raccourci' => 'Snelkoppeling',
612
+    'module_texte_affiche' => 'Weergegeven tekst',
613
+    'module_texte_explicatif' => 'Je kan de volgende snelkoppelingen invoegen in de skeletten van je publieke site. Ze worden automatisch vertaald in de verschillende talen waarvoor een taalbestand is aangemaakt.',
614
+    'module_texte_traduction' => 'Het taalbestand « @module@ » is beschikbaar in het:',
615
+    'mois_non_connu' => 'Onbekend',
616 616
 
617
-	// N
618
-	'nouvelle_version_spip' => 'Versie @version@ van SPIP is beschikbaar',
619
-	'nouvelle_version_spip_majeure' => 'Een nieuwe versie van SPIP @version@ is beschikbaar',
617
+    // N
618
+    'nouvelle_version_spip' => 'Versie @version@ van SPIP is beschikbaar',
619
+    'nouvelle_version_spip_majeure' => 'Een nieuwe versie van SPIP @version@ is beschikbaar',
620 620
 
621
-	// O
622
-	'onglet_contenu' => 'Inhoud',
623
-	'onglet_declarer_une_autre_base' => 'Een andere database declareren',
624
-	'onglet_discuter' => 'Discussiëren',
625
-	'onglet_interactivite' => 'Interactiviteit',
626
-	'onglet_proprietes' => 'Eigendommen',
627
-	'onglet_repartition_actuelle' => 'nu',
628
-	'onglet_sous_rubriques' => 'Subrubrieken',
621
+    // O
622
+    'onglet_contenu' => 'Inhoud',
623
+    'onglet_declarer_une_autre_base' => 'Een andere database declareren',
624
+    'onglet_discuter' => 'Discussiëren',
625
+    'onglet_interactivite' => 'Interactiviteit',
626
+    'onglet_proprietes' => 'Eigendommen',
627
+    'onglet_repartition_actuelle' => 'nu',
628
+    'onglet_sous_rubriques' => 'Subrubrieken',
629 629
 
630
-	// P
631
-	'page_pas_proxy' => 'Deze bladzijde moet niet via proxy gaan',
632
-	'pas_de_proxy_pour' => 'Geef desnoods de machines of gebieden aan waarvoor deze proxy niet van toepassing moet zijn (bijvoorbeeld: @exemple@)',
633
-	'phpinfo' => 'PHP Configuratie',
634
-	'plugin_charge_paquet' => 'Inladen van het pakket @name@',
635
-	'plugin_charger' => 'Download',
636
-	'plugin_erreur_charger' => 'fout: onmogelijk om @zip@ te laden',
637
-	'plugin_erreur_droit1' => 'Er kan niet worden geschreven naar <code>@dest@</code>.',
638
-	'plugin_erreur_droit2' => 'Controleer de rechten op deze map (en maak hem eventueel aan), of plaats de bestanden via FTP.',
639
-	'plugin_erreur_zip' => 'pclzip fout: fout @status@',
640
-	'plugin_etat_developpement' => 'in ontwikkeling',
641
-	'plugin_etat_experimental' => 'experimenteel',
642
-	'plugin_etat_stable' => 'stabiel',
643
-	'plugin_etat_test' => 'in test',
644
-	'plugin_impossible_activer' => 'Onmogelijk om plugin @plugin@ te activeren',
645
-	'plugin_info_automatique1' => 'Als je de automatische installatie van plugins wilt toelaten, moet je:',
646
-	'plugin_info_automatique1_lib' => 'Als je de automatische installatie van deze bibliotheek toe wilt laten:',
647
-	'plugin_info_automatique2' => 'een lijst <code>@rep@</code> aanmaken;',
648
-	'plugin_info_automatique3' => 'controleren dat de server het recht heeft om in deze map te schrijven.',
649
-	'plugin_info_automatique_creer' => 'om in de siteroot te creëren.',
650
-	'plugin_info_automatique_exemples' => 'voorbeelden:',
651
-	'plugin_info_automatique_ftp' => 'Je kunt een plugin met FTP in de map <tt>@rep@</tt> plaatsen',
652
-	'plugin_info_automatique_lib' => 'Sommige plugins vragen eveneens om bestanden in map <code>lib/</code> te kunnen downloaden, die in de root van de site moet bestaan.',
653
-	'plugin_info_automatique_liste' => 'Je lijst van plugins:',
654
-	'plugin_info_automatique_liste_officielle' => 'officiële plugins',
655
-	'plugin_info_automatique_liste_update' => 'De lijsten bijwerken',
656
-	'plugin_info_automatique_ou' => 'om...',
657
-	'plugin_info_automatique_select' => 'Selecteert hieronder een plugin: SPIP zal hem downloaden en in map <code>@rep@</code> plaatsen; als de plugin al bestaat, zal hij worden bijgewerkt.',
658
-	'plugin_info_credit' => 'Credits',
659
-	'plugin_info_erreur_xml' => 'De declaratie van deze plugin is onjuist',
660
-	'plugin_info_install_ok' => 'Succesvolle installatie',
661
-	'plugin_info_necessite' => 'Benodigd:',
662
-	'plugin_info_non_compatible_spip' => 'Deze plugin is niet compatibel met deze versie van SPIP',
663
-	'plugin_info_plugins_dist_1' => 'De onderstaande plugins zijn geladen en geactiveerd in de directory @plugins_dist@.', # extensies zijn speciaale plugins geleeverd met spip-core om een gebruikbare SPIP pakket te bouwen
664
-	'plugin_info_plugins_dist_2' => 'Ze zijn niet te deactiveren.',
665
-	'plugin_info_telecharger' => 'om vanaf @url@ te downloaden en te plaatsen in @rep@',
666
-	'plugin_info_upgrade_ok' => ' Update geslaagd',
667
-	'plugin_librairies_installees' => 'Geïnstalleerde bibliotheken',
668
-	'plugin_necessite_extension_php' => 'De PHP-extensie @plugin@ is benodigd in versie @version@.',
669
-	'plugin_necessite_extension_php_sans_version' => 'Benodigde PHP-extensie: @plugin@',
670
-	'plugin_necessite_lib' => 'Deze plugin vereist de library @lib@',
671
-	'plugin_necessite_php' => 'Vereist @plugin@ in versie @version@.',
672
-	'plugin_necessite_plugin' => 'Vereist plugin @plugin@ met minimale versie @version@.',
673
-	'plugin_necessite_plugin_sans_version' => 'Vereist plugin @plugin@ ',
674
-	'plugin_necessite_spip' => 'Vereist SPIP in minimale versie @version@.',
675
-	'plugin_source' => 'bron: ',
676
-	'plugin_titre_automatique' => 'Automatische installatie',
677
-	'plugin_titre_automatique_ajouter' => 'Een plugin toevoegen',
678
-	'plugin_titre_installation' => 'Het installeren van plugin @plugin@',
679
-	'plugin_titre_modifier' => 'Mijn plugins',
680
-	'plugin_utilise_extension_php' => 'Gebruik de PHP-extensie @plugin@ in versie @version@.', # MODIF
681
-	'plugin_utilise_php' => 'Gebruikt @plugin@ in versie @version@.', # MODIF
682
-	'plugin_utilise_plugin' => 'Gebruikt plugin @plugin@ met versie @version@.', # MODIF
683
-	'plugin_zip_active' => 'Gaat door om het te activeren',
684
-	'plugin_zip_adresse' => 'geef hieronder het adres van een zipbestand om de plugin te downloaden, of het adres van een lijst van plugins.',
685
-	'plugin_zip_adresse_champ' => 'Adres van plugin of van de lijst ',
686
-	'plugin_zip_content' => 'Hij bevat de volgende bestanden (@taille@), <br/>klaar om in de map <code>@rep@</code> te worden geplaatst',
687
-	'plugin_zip_installe_finie' => 'Het bestand @zip@ is geunzipt en werd geplaatst.',
688
-	'plugin_zip_installe_rep_finie' => 'Het bestand @zip@ is geunzipt en werd in de map @rep@ geplaatst',
689
-	'plugin_zip_installer' => 'Je kunt hem nu installeren.',
690
-	'plugin_zip_telecharge' => 'Het bestand @zip@ werd geladen',
691
-	'plugins_actif_aucun' => 'Geen plugins ingeschakeld.',
692
-	'plugins_actif_un' => 'Eén plugin is ingeschakeld.',
693
-	'plugins_actifs' => '@count@ plugins activeren.',
694
-	'plugins_actifs_liste' => 'Actief',
695
-	'plugins_compte' => '@count@ plugins',
696
-	'plugins_disponible_un' => 'Eén plugin beschikbaar.',
697
-	'plugins_disponibles' => '@count@ plugins beschikbaar.',
698
-	'plugins_erreur' => 'De fout in plugins: @plugins@',
699
-	'plugins_liste' => 'Lijst van plugins',
700
-	'plugins_liste_dist' => 'Vergrendelde plugins', # "locked" in english
701
-	'plugins_recents' => 'Recente plugins.',
702
-	'plugins_tous_liste' => 'Alle',
703
-	'plugins_vue_hierarchie' => 'Hiërarchie',
704
-	'plugins_vue_liste' => 'Lijst',
705
-	'protocole_ldap' => 'De versie van het protocol:',
630
+    // P
631
+    'page_pas_proxy' => 'Deze bladzijde moet niet via proxy gaan',
632
+    'pas_de_proxy_pour' => 'Geef desnoods de machines of gebieden aan waarvoor deze proxy niet van toepassing moet zijn (bijvoorbeeld: @exemple@)',
633
+    'phpinfo' => 'PHP Configuratie',
634
+    'plugin_charge_paquet' => 'Inladen van het pakket @name@',
635
+    'plugin_charger' => 'Download',
636
+    'plugin_erreur_charger' => 'fout: onmogelijk om @zip@ te laden',
637
+    'plugin_erreur_droit1' => 'Er kan niet worden geschreven naar <code>@dest@</code>.',
638
+    'plugin_erreur_droit2' => 'Controleer de rechten op deze map (en maak hem eventueel aan), of plaats de bestanden via FTP.',
639
+    'plugin_erreur_zip' => 'pclzip fout: fout @status@',
640
+    'plugin_etat_developpement' => 'in ontwikkeling',
641
+    'plugin_etat_experimental' => 'experimenteel',
642
+    'plugin_etat_stable' => 'stabiel',
643
+    'plugin_etat_test' => 'in test',
644
+    'plugin_impossible_activer' => 'Onmogelijk om plugin @plugin@ te activeren',
645
+    'plugin_info_automatique1' => 'Als je de automatische installatie van plugins wilt toelaten, moet je:',
646
+    'plugin_info_automatique1_lib' => 'Als je de automatische installatie van deze bibliotheek toe wilt laten:',
647
+    'plugin_info_automatique2' => 'een lijst <code>@rep@</code> aanmaken;',
648
+    'plugin_info_automatique3' => 'controleren dat de server het recht heeft om in deze map te schrijven.',
649
+    'plugin_info_automatique_creer' => 'om in de siteroot te creëren.',
650
+    'plugin_info_automatique_exemples' => 'voorbeelden:',
651
+    'plugin_info_automatique_ftp' => 'Je kunt een plugin met FTP in de map <tt>@rep@</tt> plaatsen',
652
+    'plugin_info_automatique_lib' => 'Sommige plugins vragen eveneens om bestanden in map <code>lib/</code> te kunnen downloaden, die in de root van de site moet bestaan.',
653
+    'plugin_info_automatique_liste' => 'Je lijst van plugins:',
654
+    'plugin_info_automatique_liste_officielle' => 'officiële plugins',
655
+    'plugin_info_automatique_liste_update' => 'De lijsten bijwerken',
656
+    'plugin_info_automatique_ou' => 'om...',
657
+    'plugin_info_automatique_select' => 'Selecteert hieronder een plugin: SPIP zal hem downloaden en in map <code>@rep@</code> plaatsen; als de plugin al bestaat, zal hij worden bijgewerkt.',
658
+    'plugin_info_credit' => 'Credits',
659
+    'plugin_info_erreur_xml' => 'De declaratie van deze plugin is onjuist',
660
+    'plugin_info_install_ok' => 'Succesvolle installatie',
661
+    'plugin_info_necessite' => 'Benodigd:',
662
+    'plugin_info_non_compatible_spip' => 'Deze plugin is niet compatibel met deze versie van SPIP',
663
+    'plugin_info_plugins_dist_1' => 'De onderstaande plugins zijn geladen en geactiveerd in de directory @plugins_dist@.', # extensies zijn speciaale plugins geleeverd met spip-core om een gebruikbare SPIP pakket te bouwen
664
+    'plugin_info_plugins_dist_2' => 'Ze zijn niet te deactiveren.',
665
+    'plugin_info_telecharger' => 'om vanaf @url@ te downloaden en te plaatsen in @rep@',
666
+    'plugin_info_upgrade_ok' => ' Update geslaagd',
667
+    'plugin_librairies_installees' => 'Geïnstalleerde bibliotheken',
668
+    'plugin_necessite_extension_php' => 'De PHP-extensie @plugin@ is benodigd in versie @version@.',
669
+    'plugin_necessite_extension_php_sans_version' => 'Benodigde PHP-extensie: @plugin@',
670
+    'plugin_necessite_lib' => 'Deze plugin vereist de library @lib@',
671
+    'plugin_necessite_php' => 'Vereist @plugin@ in versie @version@.',
672
+    'plugin_necessite_plugin' => 'Vereist plugin @plugin@ met minimale versie @version@.',
673
+    'plugin_necessite_plugin_sans_version' => 'Vereist plugin @plugin@ ',
674
+    'plugin_necessite_spip' => 'Vereist SPIP in minimale versie @version@.',
675
+    'plugin_source' => 'bron: ',
676
+    'plugin_titre_automatique' => 'Automatische installatie',
677
+    'plugin_titre_automatique_ajouter' => 'Een plugin toevoegen',
678
+    'plugin_titre_installation' => 'Het installeren van plugin @plugin@',
679
+    'plugin_titre_modifier' => 'Mijn plugins',
680
+    'plugin_utilise_extension_php' => 'Gebruik de PHP-extensie @plugin@ in versie @version@.', # MODIF
681
+    'plugin_utilise_php' => 'Gebruikt @plugin@ in versie @version@.', # MODIF
682
+    'plugin_utilise_plugin' => 'Gebruikt plugin @plugin@ met versie @version@.', # MODIF
683
+    'plugin_zip_active' => 'Gaat door om het te activeren',
684
+    'plugin_zip_adresse' => 'geef hieronder het adres van een zipbestand om de plugin te downloaden, of het adres van een lijst van plugins.',
685
+    'plugin_zip_adresse_champ' => 'Adres van plugin of van de lijst ',
686
+    'plugin_zip_content' => 'Hij bevat de volgende bestanden (@taille@), <br/>klaar om in de map <code>@rep@</code> te worden geplaatst',
687
+    'plugin_zip_installe_finie' => 'Het bestand @zip@ is geunzipt en werd geplaatst.',
688
+    'plugin_zip_installe_rep_finie' => 'Het bestand @zip@ is geunzipt en werd in de map @rep@ geplaatst',
689
+    'plugin_zip_installer' => 'Je kunt hem nu installeren.',
690
+    'plugin_zip_telecharge' => 'Het bestand @zip@ werd geladen',
691
+    'plugins_actif_aucun' => 'Geen plugins ingeschakeld.',
692
+    'plugins_actif_un' => 'Eén plugin is ingeschakeld.',
693
+    'plugins_actifs' => '@count@ plugins activeren.',
694
+    'plugins_actifs_liste' => 'Actief',
695
+    'plugins_compte' => '@count@ plugins',
696
+    'plugins_disponible_un' => 'Eén plugin beschikbaar.',
697
+    'plugins_disponibles' => '@count@ plugins beschikbaar.',
698
+    'plugins_erreur' => 'De fout in plugins: @plugins@',
699
+    'plugins_liste' => 'Lijst van plugins',
700
+    'plugins_liste_dist' => 'Vergrendelde plugins', # "locked" in english
701
+    'plugins_recents' => 'Recente plugins.',
702
+    'plugins_tous_liste' => 'Alle',
703
+    'plugins_vue_hierarchie' => 'Hiërarchie',
704
+    'plugins_vue_liste' => 'Lijst',
705
+    'protocole_ldap' => 'De versie van het protocol:',
706 706
 
707
-	// Q
708
-	'queue_executer_maintenant' => 'Nu uitvoeren',
709
-	'queue_info_purger' => 'Je kunt alle wachtende taken verwijderen en de lijst van periodieke taken herstarten', # MODIF
710
-	'queue_nb_jobs_in_queue' => '@nb@ wachtrij', # MODIF
711
-	'queue_next_job_in_nb_sec' => 'Volgende opdracht in @nb@ sec', # MODIF
712
-	'queue_no_job_in_queue' => 'Geen opdracht in de wachtrij', # MODIF
713
-	'queue_one_job_in_queue' => '1 taak in wachtrij', # MODIF
714
-	'queue_priorite_tache' => 'prioriteit',
715
-	'queue_purger_queue' => 'De takenlijst leegmaken', # MODIF
716
-	'queue_titre' => 'Lijst van taken', # MODIF
707
+    // Q
708
+    'queue_executer_maintenant' => 'Nu uitvoeren',
709
+    'queue_info_purger' => 'Je kunt alle wachtende taken verwijderen en de lijst van periodieke taken herstarten', # MODIF
710
+    'queue_nb_jobs_in_queue' => '@nb@ wachtrij', # MODIF
711
+    'queue_next_job_in_nb_sec' => 'Volgende opdracht in @nb@ sec', # MODIF
712
+    'queue_no_job_in_queue' => 'Geen opdracht in de wachtrij', # MODIF
713
+    'queue_one_job_in_queue' => '1 taak in wachtrij', # MODIF
714
+    'queue_priorite_tache' => 'prioriteit',
715
+    'queue_purger_queue' => 'De takenlijst leegmaken', # MODIF
716
+    'queue_titre' => 'Lijst van taken', # MODIF
717 717
 
718
-	// R
719
-	'repertoire_plugins' => 'Map:',
720
-	'required' => '(verplicht)', # MODIF
718
+    // R
719
+    'repertoire_plugins' => 'Map:',
720
+    'required' => '(verplicht)', # MODIF
721 721
 
722
-	// S
723
-	'sans_heure' => 'zonder tijdstip',
724
-	'statut_admin_restreint' => 'beperkte beheerder',
725
-	'statut_webmestre' => 'webmaster',
722
+    // S
723
+    'sans_heure' => 'zonder tijdstip',
724
+    'statut_admin_restreint' => 'beperkte beheerder',
725
+    'statut_webmestre' => 'webmaster',
726 726
 
727
-	// T
728
-	'tache_cron_asap' => 'CRON taak @function@ (ASAP)',
729
-	'tache_cron_secondes' => 'CRON taak @function@ (om de @nb@ sec)',
730
-	'taille_cache_image' => 'De door SPIP automatisch aangemaakte afbeeldingen (icoontjes van documenten, grafisch weergegeven titels, wiskundige functies in TeX formaat...) nemen in map @dir@ in totaal @taille@ in.',
731
-	'taille_cache_infinie' => 'De site voorziet geen beperking in de grootte van de buffermap.',
732
-	'taille_cache_maxi' => 'SPIP probeert de omvang van de buffermap van de site te beperken tot ongeveer <b>@octets@</b> gegevens.',
733
-	'taille_cache_moins_de' => 'De cache is kleiner dan @octets@.',
734
-	'taille_cache_octets' => 'De grootte van de buffer bedraagt momenteel @octets@.',
735
-	'taille_cache_vide' => 'De buffer is leeg.',
736
-	'taille_repertoire_cache' => 'Grootte van het bufferbestand',
737
-	'text_article_propose_publication' => 'Artikel voorgesteld voor publicatie.',
738
-	'texte_acces_ldap_anonyme_1' => 'Sommige LDAP-servers aanvaarden geen anonieme toegang. In zo’n geval dien je één loginnaam op te geven om vervolgens informatie in het adressenboek te zoeken. In de meeste gevallen kan je de volgende velden echter leeg laten.',
739
-	'texte_admin_effacer_01' => 'Met dit commando vernietig je de <i>volledige</i> inhoud van de database,
727
+    // T
728
+    'tache_cron_asap' => 'CRON taak @function@ (ASAP)',
729
+    'tache_cron_secondes' => 'CRON taak @function@ (om de @nb@ sec)',
730
+    'taille_cache_image' => 'De door SPIP automatisch aangemaakte afbeeldingen (icoontjes van documenten, grafisch weergegeven titels, wiskundige functies in TeX formaat...) nemen in map @dir@ in totaal @taille@ in.',
731
+    'taille_cache_infinie' => 'De site voorziet geen beperking in de grootte van de buffermap.',
732
+    'taille_cache_maxi' => 'SPIP probeert de omvang van de buffermap van de site te beperken tot ongeveer <b>@octets@</b> gegevens.',
733
+    'taille_cache_moins_de' => 'De cache is kleiner dan @octets@.',
734
+    'taille_cache_octets' => 'De grootte van de buffer bedraagt momenteel @octets@.',
735
+    'taille_cache_vide' => 'De buffer is leeg.',
736
+    'taille_repertoire_cache' => 'Grootte van het bufferbestand',
737
+    'text_article_propose_publication' => 'Artikel voorgesteld voor publicatie.',
738
+    'texte_acces_ldap_anonyme_1' => 'Sommige LDAP-servers aanvaarden geen anonieme toegang. In zo’n geval dien je één loginnaam op te geven om vervolgens informatie in het adressenboek te zoeken. In de meeste gevallen kan je de volgende velden echter leeg laten.',
739
+    'texte_admin_effacer_01' => 'Met dit commando vernietig je de <i>volledige</i> inhoud van de database,
740 740
 inbegrepen <i>alle</i> toegangsrechten voor redacteurs en beheerders. Nadat je dit uitgevoerd hebt, dien je de herinstallatie van SPIP te starten om een volledig nieuwe database aan te maken met toegangsrechten voor een eerste beheerder.',
741
-	'texte_adresse_annuaire_1' => '(Als de map geïnstalleerd is op dezelfde computer als je website, is het waarschijnlijk «localhost».)',
742
-	'texte_ajout_auteur' => 'Deze auteur werd aan het artikel toegevoegd:',
743
-	'texte_annuaire_ldap_1' => 'Als je toegang hebt tot een LDAP-adresboek, kan je dit gebruiken om automatisch gebruikers in te voeren in SPIP.',
744
-	'texte_article_statut' => 'Dit artikel is:',
745
-	'texte_article_virtuel' => 'Virtueel artikel',
746
-	'texte_article_virtuel_reference' => '<b>Virtueel artikel:</b> gekoppeld artikel in je SPIP site maar doorgestuurd naar een andere URL. Verwijder de URL om de doorverwijzing te stoppen.',
747
-	'texte_aucun_resultat_auteur' => 'Geen resultaat voor "@cherche_auteur@"',
748
-	'texte_auteur_messagerie' => 'Deze website kan een lijst met auteurs die op dat moment aangelogd zijn, tonen. Het is mogelijk om direkt berichten opsturen en ontvangen tussen de auteurs.  Je kan kiezen om niet in deze lijst te verschijnen (je wordt dan « onzichtbaar » voor de andere gebruikers).',
749
-	'texte_auteurs' => 'DE AUTEURS',
750
-	'texte_choix_base_1' => 'Kies je database:',
751
-	'texte_choix_base_2' => 'De SQL server bevat meerdere databases.',
752
-	'texte_choix_base_3' => '<b>Kies</b> hierna die welke door jouw provider werd toegekend:',
753
-	'texte_choix_table_prefix' => 'Voorvoegsel van de tabellen:',
754
-	'texte_compte_element' => '@count@ element',
755
-	'texte_compte_elements' => '@count@ elementen',
756
-	'texte_conflit_edition_correction' => 'Controleer hieronder de verschillen tussen beide versies van de tekst; je kunt eveneens jouw wijzigingen kopiëren en opnieuw beginnen.',
757
-	'texte_connexion_mysql' => 'Raadpleegt de inlichtingen die door jouw provider worden verstrekt: je moet er de databaseserver vinden die men voorstelt en jouw persoonlijke identificaties om je erop aan te melden.',
758
-	'texte_contenu_article' => '(Inhoud van het artikel in enkele woorden.)',
759
-	'texte_contenu_articles' => 'Naargelang de opmaak van je website kan je beslissen sommige elementen van een artikel
741
+    'texte_adresse_annuaire_1' => '(Als de map geïnstalleerd is op dezelfde computer als je website, is het waarschijnlijk «localhost».)',
742
+    'texte_ajout_auteur' => 'Deze auteur werd aan het artikel toegevoegd:',
743
+    'texte_annuaire_ldap_1' => 'Als je toegang hebt tot een LDAP-adresboek, kan je dit gebruiken om automatisch gebruikers in te voeren in SPIP.',
744
+    'texte_article_statut' => 'Dit artikel is:',
745
+    'texte_article_virtuel' => 'Virtueel artikel',
746
+    'texte_article_virtuel_reference' => '<b>Virtueel artikel:</b> gekoppeld artikel in je SPIP site maar doorgestuurd naar een andere URL. Verwijder de URL om de doorverwijzing te stoppen.',
747
+    'texte_aucun_resultat_auteur' => 'Geen resultaat voor "@cherche_auteur@"',
748
+    'texte_auteur_messagerie' => 'Deze website kan een lijst met auteurs die op dat moment aangelogd zijn, tonen. Het is mogelijk om direkt berichten opsturen en ontvangen tussen de auteurs.  Je kan kiezen om niet in deze lijst te verschijnen (je wordt dan « onzichtbaar » voor de andere gebruikers).',
749
+    'texte_auteurs' => 'DE AUTEURS',
750
+    'texte_choix_base_1' => 'Kies je database:',
751
+    'texte_choix_base_2' => 'De SQL server bevat meerdere databases.',
752
+    'texte_choix_base_3' => '<b>Kies</b> hierna die welke door jouw provider werd toegekend:',
753
+    'texte_choix_table_prefix' => 'Voorvoegsel van de tabellen:',
754
+    'texte_compte_element' => '@count@ element',
755
+    'texte_compte_elements' => '@count@ elementen',
756
+    'texte_conflit_edition_correction' => 'Controleer hieronder de verschillen tussen beide versies van de tekst; je kunt eveneens jouw wijzigingen kopiëren en opnieuw beginnen.',
757
+    'texte_connexion_mysql' => 'Raadpleegt de inlichtingen die door jouw provider worden verstrekt: je moet er de databaseserver vinden die men voorstelt en jouw persoonlijke identificaties om je erop aan te melden.',
758
+    'texte_contenu_article' => '(Inhoud van het artikel in enkele woorden.)',
759
+    'texte_contenu_articles' => 'Naargelang de opmaak van je website kan je beslissen sommige elementen van een artikel
760 760
  wel of niet te gebruiken.
761 761
  Geef op de lijst hieronder aan welke elementen je wil gebruiken.',
762
-	'texte_crash_base' => 'Als je database gecrashed is,
762
+    'texte_crash_base' => 'Als je database gecrashed is,
763 763
   kan je een automatisch herstel proberen.',
764
-	'texte_creer_rubrique' => 'Alvorens artikelen te kunnen schrijven, <br/> moet je een rubriek aanmaken.',
765
-	'texte_date_creation_article' => 'DATUM VAN AANMAKEN VAN HET ARTIKEL:',
766
-	'texte_date_creation_objet' => 'Aanmaakdatum:', # on ajoute le &quot;:&quot;
767
-	'texte_date_publication_anterieure' => 'Datum van eerdere redactie:',
768
-	'texte_date_publication_anterieure_nonaffichee' => 'Verberg de datum van eerdere redactie.',
769
-	'texte_date_publication_article' => 'DATUM VAN ONLINE PUBLICATIE:',
770
-	'texte_date_publication_objet' => 'Datum van online publicatie:',
771
-	'texte_definir_comme_traduction_rubrique' => 'Deze rubriek is een vertaling van rubrieknummer:',
772
-	'texte_descriptif_rapide' => 'Korte beschrijving.',
773
-	'texte_effacer_base' => 'Verwijder de SPIP database',
774
-	'texte_effacer_statistiques' => 'De statistieken wissen',
775
-	'texte_en_cours_validation' => 'De onderstaande inhoud wacht op goedkeuring.',
776
-	'texte_enrichir_mise_a_jour' => 'De opmaak van een tekst kan gebeuren met behulp van zogeheten «typografische snelkoppelingen».',
777
-	'texte_fichier_authent' => 'SPIP moet er dan speciale bestanden <tt>.htpasswd</tt>
764
+    'texte_creer_rubrique' => 'Alvorens artikelen te kunnen schrijven, <br/> moet je een rubriek aanmaken.',
765
+    'texte_date_creation_article' => 'DATUM VAN AANMAKEN VAN HET ARTIKEL:',
766
+    'texte_date_creation_objet' => 'Aanmaakdatum:', # on ajoute le &quot;:&quot;
767
+    'texte_date_publication_anterieure' => 'Datum van eerdere redactie:',
768
+    'texte_date_publication_anterieure_nonaffichee' => 'Verberg de datum van eerdere redactie.',
769
+    'texte_date_publication_article' => 'DATUM VAN ONLINE PUBLICATIE:',
770
+    'texte_date_publication_objet' => 'Datum van online publicatie:',
771
+    'texte_definir_comme_traduction_rubrique' => 'Deze rubriek is een vertaling van rubrieknummer:',
772
+    'texte_descriptif_rapide' => 'Korte beschrijving.',
773
+    'texte_effacer_base' => 'Verwijder de SPIP database',
774
+    'texte_effacer_statistiques' => 'De statistieken wissen',
775
+    'texte_en_cours_validation' => 'De onderstaande inhoud wacht op goedkeuring.',
776
+    'texte_enrichir_mise_a_jour' => 'De opmaak van een tekst kan gebeuren met behulp van zogeheten «typografische snelkoppelingen».',
777
+    'texte_fichier_authent' => 'SPIP moet er dan speciale bestanden <tt>.htpasswd</tt>
778 778
   en <tt>.htpasswd-admin</tt> in de directory @dossier@ ?</b><p>
779 779
  Deze bestanden die je kunt gebruiken om toegang te beperken tot 
780 780
  auteurs en beheerders in andere delen van je site 
781 781
    (externe programma statistieken, bijvoorbeeld).</p><p>
782 782
 Als dit geen geen nut heeft, kunt je de standaard instellingen behouden (geen nieuw bestand maken).</p>',
783
-	'texte_informations_personnelles_1' => 'Nu zal het systeem een persoonlijke toegang tot de site voor je creëren.',
784
-	'texte_informations_personnelles_2' => '(Nota: als het een herinstallatie betreft en je toegangscode blijkt nog steeds te werken, kan je',
785
-	'texte_introductif_article' => '(Inleidende tekst op het artikel.)',
786
-	'texte_jeu_caractere' => 'Het is aan te raden op je site het universele alfabet (<tt>utf-8</tt>) te gebruiken: dit laat de weergave van teksten toe in alle talen en stelt geen compatibilieitsprobleem met de recente browsers.',
787
-	'texte_jeu_caractere_3' => 'Je site is momenteel geïnstalleerd in deze tekenset:',
788
-	'texte_jeu_caractere_4' => 'Indien dit niet overeenkomt met je werkelijke gegevens (bvb bij het terugzetten van je database), of als je <em>deze site opstart</em> en met een andere tekenset van start wil gaan, geef dat dan hieronder aan:',
789
-	'texte_login_ldap_1' => '(Leeg laten voor een anonieme login, of een volledig pad invullen, bijvoorbeeld «<tt>uid=janssen, ou=users, dc=mijn-domein, dc=com</tt>».)',
790
-	'texte_login_precaution' => 'LET OP! Met deze login ben je momenteel aangemeld.
783
+    'texte_informations_personnelles_1' => 'Nu zal het systeem een persoonlijke toegang tot de site voor je creëren.',
784
+    'texte_informations_personnelles_2' => '(Nota: als het een herinstallatie betreft en je toegangscode blijkt nog steeds te werken, kan je',
785
+    'texte_introductif_article' => '(Inleidende tekst op het artikel.)',
786
+    'texte_jeu_caractere' => 'Het is aan te raden op je site het universele alfabet (<tt>utf-8</tt>) te gebruiken: dit laat de weergave van teksten toe in alle talen en stelt geen compatibilieitsprobleem met de recente browsers.',
787
+    'texte_jeu_caractere_3' => 'Je site is momenteel geïnstalleerd in deze tekenset:',
788
+    'texte_jeu_caractere_4' => 'Indien dit niet overeenkomt met je werkelijke gegevens (bvb bij het terugzetten van je database), of als je <em>deze site opstart</em> en met een andere tekenset van start wil gaan, geef dat dan hieronder aan:',
789
+    'texte_login_ldap_1' => '(Leeg laten voor een anonieme login, of een volledig pad invullen, bijvoorbeeld «<tt>uid=janssen, ou=users, dc=mijn-domein, dc=com</tt>».)',
790
+    'texte_login_precaution' => 'LET OP! Met deze login ben je momenteel aangemeld.
791 791
  Gebruik dit formulier met de nodige voorzichtigheid...',
792
-	'texte_messagerie_agenda' => 'Een berichtendienst maakt het de redacteuren van de site mogelijk om in de privé ruimte berichten uit te wisselen. De dienst is gekoppeld aan een agenda.',
793
-	'texte_mise_a_niveau_base_1' => 'Je hebt zonet de SPIP bestanden vernieuwd. Nu dien je
792
+    'texte_messagerie_agenda' => 'Een berichtendienst maakt het de redacteuren van de site mogelijk om in de privé ruimte berichten uit te wisselen. De dienst is gekoppeld aan een agenda.',
793
+    'texte_mise_a_niveau_base_1' => 'Je hebt zonet de SPIP bestanden vernieuwd. Nu dien je
794 794
  eveneens de database te updaten.',
795
-	'texte_modifier_article' => 'Wijzigen artikel:',
796
-	'texte_multilinguisme' => 'Als je graag objecten in verschillende talen zou willen beheren, met een complexe navigatie, kan je een taalkeuzemenu toevoegen bij deze objecten, i.f.v de organisatie van je site.',
797
-	'texte_multilinguisme_trad' => 'Je kan eveneens een systeem in werking stellen voor het beheer van koppelingen tussen de verschillende vertalingen van de objecten.',
798
-	'texte_non_compresse' => '<i>niet gecomprimeerd</i> (de server ondersteunt deze functionaliteit niet)',
799
-	'texte_nouvelle_version_spip_1' => 'Je hebt een nieuwe versie van SPIP geïnstalleerd.',
800
-	'texte_nouvelle_version_spip_2' => 'Deze nieuwe SPIP-versie vereist een  grondiger update dan gewoonlijk. Als je webmaster bent van deze site, verwijder dan het bestand @connect@ en hervat de installatie om de verbindingsgegevens met de database te vernieuwen.<p> (NB: als je de verbindingsgegevens niet meer kent, kan je best eerst een blik werpen op het bestand @connect@ alvorens het te verwijderen...)</p>', # Pas de modif trouvée, la trad reste valable.
801
-	'texte_operation_echec' => 'Ga terug naar de vorige pagina, selecteer een andere database of maak een nieuwe aan. Kijk nog eens alle gegevens na die je van je provider hebt ontvangen.',
802
-	'texte_plus_trois_car' => 'meer dan 3 karakters',
803
-	'texte_plusieurs_articles' => 'Meerdere auteurs gevonden voor "@cherche_auteur@":',
804
-	'texte_port_annuaire' => '(De opgegeven standaardwaarde is meestal de juiste.)',
805
-	'texte_presente_plugin' => 'Deze pagina toont de lijst van beschikbare plugins op deze site. Je kan de nodige plugins activeren door het overeenkomstige vakje aan te kruisen.',
806
-	'texte_proposer_publication' => 'Wanneer je artikel gereed is, <br />kun je de publicatie ervan voorstellen.',
807
-	'texte_proxy' => 'In bepaalde gevallen (intranet, beschermde netwerken), zijn de verwijderde plaatsen (SPIP documentatie , georganiseerde plaatsen, enz.) toegankelijk slechts door een <i>proxy HTTP</i>. Eventueel geeft hieronder zijn adres aan, onder de vorm @proxy_in_actie@. Over het algemeen zul je dit hokje leeg laten.',
808
-	'texte_publication_articles_post_dates' => 'Hoe dient SPIP zich op te stellen ten opzichte van artikelen waarvan de
795
+    'texte_modifier_article' => 'Wijzigen artikel:',
796
+    'texte_multilinguisme' => 'Als je graag objecten in verschillende talen zou willen beheren, met een complexe navigatie, kan je een taalkeuzemenu toevoegen bij deze objecten, i.f.v de organisatie van je site.',
797
+    'texte_multilinguisme_trad' => 'Je kan eveneens een systeem in werking stellen voor het beheer van koppelingen tussen de verschillende vertalingen van de objecten.',
798
+    'texte_non_compresse' => '<i>niet gecomprimeerd</i> (de server ondersteunt deze functionaliteit niet)',
799
+    'texte_nouvelle_version_spip_1' => 'Je hebt een nieuwe versie van SPIP geïnstalleerd.',
800
+    'texte_nouvelle_version_spip_2' => 'Deze nieuwe SPIP-versie vereist een  grondiger update dan gewoonlijk. Als je webmaster bent van deze site, verwijder dan het bestand @connect@ en hervat de installatie om de verbindingsgegevens met de database te vernieuwen.<p> (NB: als je de verbindingsgegevens niet meer kent, kan je best eerst een blik werpen op het bestand @connect@ alvorens het te verwijderen...)</p>', # Pas de modif trouvée, la trad reste valable.
801
+    'texte_operation_echec' => 'Ga terug naar de vorige pagina, selecteer een andere database of maak een nieuwe aan. Kijk nog eens alle gegevens na die je van je provider hebt ontvangen.',
802
+    'texte_plus_trois_car' => 'meer dan 3 karakters',
803
+    'texte_plusieurs_articles' => 'Meerdere auteurs gevonden voor "@cherche_auteur@":',
804
+    'texte_port_annuaire' => '(De opgegeven standaardwaarde is meestal de juiste.)',
805
+    'texte_presente_plugin' => 'Deze pagina toont de lijst van beschikbare plugins op deze site. Je kan de nodige plugins activeren door het overeenkomstige vakje aan te kruisen.',
806
+    'texte_proposer_publication' => 'Wanneer je artikel gereed is, <br />kun je de publicatie ervan voorstellen.',
807
+    'texte_proxy' => 'In bepaalde gevallen (intranet, beschermde netwerken), zijn de verwijderde plaatsen (SPIP documentatie , georganiseerde plaatsen, enz.) toegankelijk slechts door een <i>proxy HTTP</i>. Eventueel geeft hieronder zijn adres aan, onder de vorm @proxy_in_actie@. Over het algemeen zul je dit hokje leeg laten.',
808
+    'texte_publication_articles_post_dates' => 'Hoe dient SPIP zich op te stellen ten opzichte van artikelen waarvan de
809 809
   publicatiedatum is vastgelegd op een
810 810
   toekomstige datum?',
811
-	'texte_rappel_selection_champs' => '[Vergeet niet de juiste keuze te maken voor dit veld.]',
812
-	'texte_recalcul_page' => 'Als je slechts één pagina wilt vernieuwen, doe je dit op de publieke site met de knop  «vernieuwen».',
813
-	'texte_recuperer_base' => 'De database herstellen',
814
-	'texte_reference_mais_redirige' => 'Gekoppeld artikel in je SPIP site, maar doorgestuurd naar een andere URL.',
815
-	'texte_requetes_echouent' => '<b>Wanneer bepaalde SQL-query’s systematisch crashen zonder duidelijke reden, is dit mogelijk te wijten aan de database zelf.</b><p> Je SQL Server heeft een herstelmogelijkheid van tabellen die beschadigd zijn door een crash. Hier kunt je proberen dit te repareren. Wanneer dat niet lukt, bewaar dan een kopie van het scherm dat aanwijzingen over de problemen bevat...</p><p>Als het probleem zich blijft voordoen, contact opnemen met je provider.</p>',
816
-	'texte_selection_langue_principale' => 'Hieronder kan je de «basistaal» van de site kiezen. Deze keuze verplicht je - gelukkig! - niet om artikelen in deze taal te schrijven, maar laat wel toe om het volgende te bepalen:
811
+    'texte_rappel_selection_champs' => '[Vergeet niet de juiste keuze te maken voor dit veld.]',
812
+    'texte_recalcul_page' => 'Als je slechts één pagina wilt vernieuwen, doe je dit op de publieke site met de knop  «vernieuwen».',
813
+    'texte_recuperer_base' => 'De database herstellen',
814
+    'texte_reference_mais_redirige' => 'Gekoppeld artikel in je SPIP site, maar doorgestuurd naar een andere URL.',
815
+    'texte_requetes_echouent' => '<b>Wanneer bepaalde SQL-query’s systematisch crashen zonder duidelijke reden, is dit mogelijk te wijten aan de database zelf.</b><p> Je SQL Server heeft een herstelmogelijkheid van tabellen die beschadigd zijn door een crash. Hier kunt je proberen dit te repareren. Wanneer dat niet lukt, bewaar dan een kopie van het scherm dat aanwijzingen over de problemen bevat...</p><p>Als het probleem zich blijft voordoen, contact opnemen met je provider.</p>',
816
+    'texte_selection_langue_principale' => 'Hieronder kan je de «basistaal» van de site kiezen. Deze keuze verplicht je - gelukkig! - niet om artikelen in deze taal te schrijven, maar laat wel toe om het volgende te bepalen:
817 817
  <ul><li> het standaardformaat van de data op de publieke site;</li>
818 818
  <li> de aard van de typografische motor die SPIP dient te gebruiken om teksten te tonen;</li>
819 819
  <li> de taal die gebruikt moet worden op de formulieren van de publieke site;</li>
820 820
  <li> de taal die standaard wordt voorgesteld in het privé-gedeelte.</li></ul>',
821
-	'texte_sous_titre' => 'Ondertitel',
822
-	'texte_statistiques_visites' => '(donkere balkjes:  zondag / donkere lijn: evolutie van het gemiddelde)',
823
-	'texte_statut_attente_validation' => 'wachten op goedkeuring',
824
-	'texte_statut_publies' => 'online geplaatst',
825
-	'texte_statut_refuses' => 'geweigerd',
826
-	'texte_suppression_fichiers' => 'Gebruik dit commando om alle bestanden uit de  buffer (cache) te verwijderen.
821
+    'texte_sous_titre' => 'Ondertitel',
822
+    'texte_statistiques_visites' => '(donkere balkjes:  zondag / donkere lijn: evolutie van het gemiddelde)',
823
+    'texte_statut_attente_validation' => 'wachten op goedkeuring',
824
+    'texte_statut_publies' => 'online geplaatst',
825
+    'texte_statut_refuses' => 'geweigerd',
826
+    'texte_suppression_fichiers' => 'Gebruik dit commando om alle bestanden uit de  buffer (cache) te verwijderen.
827 827
 Dit kan handig zijn als je veel pagina’s hebt gewijzigd, de layout of de structuur van de site hebt veranderd.
828 828
  De nieuwste pagina’s worden dan getoond en de buffer wordt opnieuw opgebouwd.',
829
-	'texte_sur_titre' => 'Opschrift',
830
-	'texte_table_ok' => ': deze tabel is OK.',
831
-	'texte_tentative_recuperation' => 'Poging tot herstel.',
832
-	'texte_tenter_reparation' => 'Poging tot herstel van de database',
833
-	'texte_test_proxy' => 'Om de proxy te testen kan je hier het adres geven van de website die je wil bereiken.',
834
-	'texte_titre_02' => 'Titel:',
835
-	'texte_titre_obligatoire' => '<b>Titel</b> [verplicht]',
836
-	'texte_travail_article' => '@nom_auteur_modif@ heeft @date_diff@ minuten geleden aan dit artikel gewerkt',
837
-	'texte_travail_collaboratif' => 'Als het vaak gebeurt dat meerdere redacteurs aanhetzelfde artikel werken, kan het systeem tonen welke artikelen er recent «geopend» werden
829
+    'texte_sur_titre' => 'Opschrift',
830
+    'texte_table_ok' => ': deze tabel is OK.',
831
+    'texte_tentative_recuperation' => 'Poging tot herstel.',
832
+    'texte_tenter_reparation' => 'Poging tot herstel van de database',
833
+    'texte_test_proxy' => 'Om de proxy te testen kan je hier het adres geven van de website die je wil bereiken.',
834
+    'texte_titre_02' => 'Titel:',
835
+    'texte_titre_obligatoire' => '<b>Titel</b> [verplicht]',
836
+    'texte_travail_article' => '@nom_auteur_modif@ heeft @date_diff@ minuten geleden aan dit artikel gewerkt',
837
+    'texte_travail_collaboratif' => 'Als het vaak gebeurt dat meerdere redacteurs aanhetzelfde artikel werken, kan het systeem tonen welke artikelen er recent «geopend» werden
838 838
  om te vermijden dat simultaan
839 839
  wijzigingen worden aangebracht.
840 840
  Deze optie is niet standaard geactiveerd om te vermijden dat er teveel waarschuwingsberichten op het
841 841
  scherm verschijnen.',
842
-	'texte_vide' => 'leeg',
843
-	'texte_vider_cache' => 'Cache leegmaken',
844
-	'titre_admin_tech' => 'Technisch onderhoud',
845
-	'titre_admin_vider' => 'Technisch onderhoud',
846
-	'titre_ajouter_un_auteur' => 'Voeg een auteur toe',
847
-	'titre_ajouter_un_mot' => 'Voeg een trefwoord toe',
848
-	'titre_cadre_afficher_article' => 'Artikelen tonen',
849
-	'titre_cadre_afficher_traductions' => 'Toon de status van de vertalingen voor de volgende talen:',
850
-	'titre_cadre_ajouter_auteur' => 'EEN AUTEUR TOEVOEGEN:',
851
-	'titre_cadre_interieur_rubrique' => 'Binnen rubriek',
852
-	'titre_cadre_numero_auteur' => 'AUTEUR NUMMER',
853
-	'titre_cadre_numero_objet' => '@objet@ NUMMER:',
854
-	'titre_cadre_signature_obligatoire' => '<b>Handtekening</b> [Verplicht]<br />',
855
-	'titre_config_contenu_notifications' => 'Kennisgevingen',
856
-	'titre_config_contenu_prive' => 'In het privé gedeelte',
857
-	'titre_config_contenu_public' => 'Op de openbare site',
858
-	'titre_config_fonctions' => 'Configuratie van de site',
859
-	'titre_config_langage' => 'Stel de taal in',
860
-	'titre_configuration' => 'Configuratie van de site',
861
-	'titre_configurer_preferences' => 'Configureer je voorkeuren',
862
-	'titre_configurer_preferences_menus' => 'Configureer je menuvoorkeuren',
863
-	'titre_conflit_edition' => 'Conflict bij de uitgave',
864
-	'titre_connexion_ldap' => 'Opties: <b>Je LDAP-verbinding</b>',
865
-	'titre_groupe_mots' => 'TREFWOORDENGROEP:',
866
-	'titre_identite_site' => 'Identiteit van de site',
867
-	'titre_langue_article' => 'Taal van het artikel',
868
-	'titre_langue_rubrique' => 'Taal van de rubriek',
869
-	'titre_langue_trad_article' => 'TAAL EN VERTALINGEN VAN HET ARTIKEL',
870
-	'titre_les_articles' => 'ARTIKELEN',
871
-	'titre_messagerie_agenda' => 'Boodschappen en agenda',
872
-	'titre_naviguer_dans_le_site' => 'Bezoek de site...',
873
-	'titre_nouvelle_rubrique' => 'Nieuwe rubriek',
874
-	'titre_numero_rubrique' => 'RUBRIEKNUMMER:',
875
-	'titre_page_articles_edit' => 'Wijzigen: @titre@',
876
-	'titre_page_articles_page' => 'Artikelen',
877
-	'titre_page_articles_tous' => 'Volledige site',
878
-	'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
879
-	'titre_page_config_contenu' => 'Websiteconfiguratie',
880
-	'titre_page_delete_all' => 'Volledige en onomkeerbare verwijdering',
881
-	'titre_page_recherche' => 'Zoekresultaat voor @recherche@ ',
882
-	'titre_page_statistiques_referers' => 'Statistieken (per referer)',
883
-	'titre_page_upgrade' => 'Bijwerken van SPIP',
884
-	'titre_preference_menus_favoris' => 'Favoriete menu’s',
885
-	'titre_publication_articles_post_dates' => 'Publicatie van postgedateerde artikelen',
886
-	'titre_reparation' => 'Herstel',
887
-	'titre_suivi_petition' => 'Opvolging van petities',
888
-	'tls_ldap' => 'Transport Layer Security:',
889
-	'trad_article_traduction' => 'Alle versies van dit artikel:',
890
-	'trad_delier' => 'Niet meer aan deze vertalingen koppelen',
891
-	'trad_lier' => 'Dit artikel is een vertaling van artikelnummer:',
892
-	'trad_new' => 'Een nieuwe vertaling schrijven',
842
+    'texte_vide' => 'leeg',
843
+    'texte_vider_cache' => 'Cache leegmaken',
844
+    'titre_admin_tech' => 'Technisch onderhoud',
845
+    'titre_admin_vider' => 'Technisch onderhoud',
846
+    'titre_ajouter_un_auteur' => 'Voeg een auteur toe',
847
+    'titre_ajouter_un_mot' => 'Voeg een trefwoord toe',
848
+    'titre_cadre_afficher_article' => 'Artikelen tonen',
849
+    'titre_cadre_afficher_traductions' => 'Toon de status van de vertalingen voor de volgende talen:',
850
+    'titre_cadre_ajouter_auteur' => 'EEN AUTEUR TOEVOEGEN:',
851
+    'titre_cadre_interieur_rubrique' => 'Binnen rubriek',
852
+    'titre_cadre_numero_auteur' => 'AUTEUR NUMMER',
853
+    'titre_cadre_numero_objet' => '@objet@ NUMMER:',
854
+    'titre_cadre_signature_obligatoire' => '<b>Handtekening</b> [Verplicht]<br />',
855
+    'titre_config_contenu_notifications' => 'Kennisgevingen',
856
+    'titre_config_contenu_prive' => 'In het privé gedeelte',
857
+    'titre_config_contenu_public' => 'Op de openbare site',
858
+    'titre_config_fonctions' => 'Configuratie van de site',
859
+    'titre_config_langage' => 'Stel de taal in',
860
+    'titre_configuration' => 'Configuratie van de site',
861
+    'titre_configurer_preferences' => 'Configureer je voorkeuren',
862
+    'titre_configurer_preferences_menus' => 'Configureer je menuvoorkeuren',
863
+    'titre_conflit_edition' => 'Conflict bij de uitgave',
864
+    'titre_connexion_ldap' => 'Opties: <b>Je LDAP-verbinding</b>',
865
+    'titre_groupe_mots' => 'TREFWOORDENGROEP:',
866
+    'titre_identite_site' => 'Identiteit van de site',
867
+    'titre_langue_article' => 'Taal van het artikel',
868
+    'titre_langue_rubrique' => 'Taal van de rubriek',
869
+    'titre_langue_trad_article' => 'TAAL EN VERTALINGEN VAN HET ARTIKEL',
870
+    'titre_les_articles' => 'ARTIKELEN',
871
+    'titre_messagerie_agenda' => 'Boodschappen en agenda',
872
+    'titre_naviguer_dans_le_site' => 'Bezoek de site...',
873
+    'titre_nouvelle_rubrique' => 'Nieuwe rubriek',
874
+    'titre_numero_rubrique' => 'RUBRIEKNUMMER:',
875
+    'titre_page_articles_edit' => 'Wijzigen: @titre@',
876
+    'titre_page_articles_page' => 'Artikelen',
877
+    'titre_page_articles_tous' => 'Volledige site',
878
+    'titre_page_calendrier' => 'Kalender @nom_mois@ @annee@',
879
+    'titre_page_config_contenu' => 'Websiteconfiguratie',
880
+    'titre_page_delete_all' => 'Volledige en onomkeerbare verwijdering',
881
+    'titre_page_recherche' => 'Zoekresultaat voor @recherche@ ',
882
+    'titre_page_statistiques_referers' => 'Statistieken (per referer)',
883
+    'titre_page_upgrade' => 'Bijwerken van SPIP',
884
+    'titre_preference_menus_favoris' => 'Favoriete menu’s',
885
+    'titre_publication_articles_post_dates' => 'Publicatie van postgedateerde artikelen',
886
+    'titre_reparation' => 'Herstel',
887
+    'titre_suivi_petition' => 'Opvolging van petities',
888
+    'tls_ldap' => 'Transport Layer Security:',
889
+    'trad_article_traduction' => 'Alle versies van dit artikel:',
890
+    'trad_delier' => 'Niet meer aan deze vertalingen koppelen',
891
+    'trad_lier' => 'Dit artikel is een vertaling van artikelnummer:',
892
+    'trad_new' => 'Een nieuwe vertaling schrijven',
893 893
 
894
-	// U
895
-	'utf8_convert_erreur_orig' => 'Fout : de karakterset @charset@ wordt niet ondersteund.',
894
+    // U
895
+    'utf8_convert_erreur_orig' => 'Fout : de karakterset @charset@ wordt niet ondersteund.',
896 896
 
897
-	// V
898
-	'version' => 'Versie:'
897
+    // V
898
+    'version' => 'Versie:'
899 899
 );
Please login to merge, or discard this patch.
ecrire/lang/ecrire_pt_br.php 1 patch
Indentation   +836 added lines, -836 removed lines patch added patch discarded remove patch
@@ -4,876 +4,876 @@
 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' => 'Ativar o plugin',
14
-	'affichage' => 'Exibição',
15
-	'aide_non_disponible' => 'Esta parte da ajuda online ainda não está disponível neste idioma.',
16
-	'annuler_recherche' => 'Cancelar a busca',
17
-	'auteur' => 'Autor:',
18
-	'avis_acces_interdit' => 'Acesso negado.',
19
-	'avis_acces_interdit_prive' => 'Você não está autorizado a acessar a página <b>@exec@</b>.',
20
-	'avis_article_modifie' => 'Atenção, @nom_auteur_modif@ editou esta matéria há @date_diff@ minutos',
21
-	'avis_aucun_resultat' => 'Nenhum resultado.',
22
-	'avis_base_inaccessible' => 'Não foi possível conectar com a base de dados @base@.',
23
-	'avis_chemin_invalide_1' => 'O caminho que você escolheu',
24
-	'avis_chemin_invalide_2' => 'não parece válido. Por favor, volte à página anterior e verifique as informações fornecidas.',
25
-	'avis_connexion_echec_1' => 'A conexão com a base de dados falhou.',
26
-	'avis_connexion_echec_2' => 'Volte à página anterior e verifique as informações que você forneceu.',
27
-	'avis_connexion_echec_3' => '<b>N.B.</b> Em diversos servidores, você precisa <b>solicitar</b> a ativação do seu acesso à base de dados antes de poder utilizá-la. Se você não consegue se conectar, verifique se você efetuou esse pedido.',
28
-	'avis_connexion_erreur_creer_base' => 'Não foi possível criar a base de dados.',
29
-	'avis_connexion_erreur_nom_base' => 'O nome da base só pode conter letras, números e traços',
30
-	'avis_connexion_ldap_echec_1' => 'A conexão ao servidor LDAP falhou.',
31
-	'avis_connexion_ldap_echec_2' => 'Volte à página anterior e verifique as informações que você forneceu.',
32
-	'avis_connexion_ldap_echec_3' => 'Opcionalmente, não use o suporte LDAP para importar os usuários.',
33
-	'avis_deplacement_rubrique' => 'Atenção! Esta seção contém @contient_breves@ nota@scb@: se você a transferir, por favor, marque este quadrado.',
34
-	'avis_erreur_connexion_mysql' => 'Erro de conexão SQL',
35
-	'avis_espace_interdit' => '<b>Área interdita</b> <div>O SPIP já está instalado.</div>',
36
-	'avis_lecture_noms_bases_1' => 'O programa de instalação não pôde ler os nomes das bases de dados instaladas.',
37
-	'avis_lecture_noms_bases_2' => 'Ou nenhuma base de dados esta disponível, ou a função que permite listar as bases foi desativada por razões de segurança (o que é o caso de diversos provedores de hospedagem).',
38
-	'avis_lecture_noms_bases_3' => 'No segundo caso, é provável que uma base de dados com o nome do seu login possa ser utilizada:',
39
-	'avis_non_acces_page' => 'Você não tem acesso a esta página.',
40
-	'avis_operation_echec' => 'A operação falhou.',
41
-	'avis_operation_impossible' => 'Operação impossível',
42
-	'avis_suppression_base' => 'ATENÇÃO, a supressão dos dados é irreversível',
12
+    // A
13
+    'activer_plugin' => 'Ativar o plugin',
14
+    'affichage' => 'Exibição',
15
+    'aide_non_disponible' => 'Esta parte da ajuda online ainda não está disponível neste idioma.',
16
+    'annuler_recherche' => 'Cancelar a busca',
17
+    'auteur' => 'Autor:',
18
+    'avis_acces_interdit' => 'Acesso negado.',
19
+    'avis_acces_interdit_prive' => 'Você não está autorizado a acessar a página <b>@exec@</b>.',
20
+    'avis_article_modifie' => 'Atenção, @nom_auteur_modif@ editou esta matéria há @date_diff@ minutos',
21
+    'avis_aucun_resultat' => 'Nenhum resultado.',
22
+    'avis_base_inaccessible' => 'Não foi possível conectar com a base de dados @base@.',
23
+    'avis_chemin_invalide_1' => 'O caminho que você escolheu',
24
+    'avis_chemin_invalide_2' => 'não parece válido. Por favor, volte à página anterior e verifique as informações fornecidas.',
25
+    'avis_connexion_echec_1' => 'A conexão com a base de dados falhou.',
26
+    'avis_connexion_echec_2' => 'Volte à página anterior e verifique as informações que você forneceu.',
27
+    'avis_connexion_echec_3' => '<b>N.B.</b> Em diversos servidores, você precisa <b>solicitar</b> a ativação do seu acesso à base de dados antes de poder utilizá-la. Se você não consegue se conectar, verifique se você efetuou esse pedido.',
28
+    'avis_connexion_erreur_creer_base' => 'Não foi possível criar a base de dados.',
29
+    'avis_connexion_erreur_nom_base' => 'O nome da base só pode conter letras, números e traços',
30
+    'avis_connexion_ldap_echec_1' => 'A conexão ao servidor LDAP falhou.',
31
+    'avis_connexion_ldap_echec_2' => 'Volte à página anterior e verifique as informações que você forneceu.',
32
+    'avis_connexion_ldap_echec_3' => 'Opcionalmente, não use o suporte LDAP para importar os usuários.',
33
+    'avis_deplacement_rubrique' => 'Atenção! Esta seção contém @contient_breves@ nota@scb@: se você a transferir, por favor, marque este quadrado.',
34
+    'avis_erreur_connexion_mysql' => 'Erro de conexão SQL',
35
+    'avis_espace_interdit' => '<b>Área interdita</b> <div>O SPIP já está instalado.</div>',
36
+    'avis_lecture_noms_bases_1' => 'O programa de instalação não pôde ler os nomes das bases de dados instaladas.',
37
+    'avis_lecture_noms_bases_2' => 'Ou nenhuma base de dados esta disponível, ou a função que permite listar as bases foi desativada por razões de segurança (o que é o caso de diversos provedores de hospedagem).',
38
+    'avis_lecture_noms_bases_3' => 'No segundo caso, é provável que uma base de dados com o nome do seu login possa ser utilizada:',
39
+    'avis_non_acces_page' => 'Você não tem acesso a esta página.',
40
+    'avis_operation_echec' => 'A operação falhou.',
41
+    'avis_operation_impossible' => 'Operação impossível',
42
+    'avis_suppression_base' => 'ATENÇÃO, a supressão dos dados é irreversível',
43 43
 
44
-	// B
45
-	'bouton_acces_ldap' => 'Incluir o acesso ao LDAP',
46
-	'bouton_ajouter' => 'Incluir',
47
-	'bouton_annuler' => 'Anular',
48
-	'bouton_cache_activer' => 'Reativar o cache',
49
-	'bouton_cache_desactiver' => 'Desativar temporariamente o cache',
50
-	'bouton_demande_publication' => 'Solicitar a publicação desta matéria',
51
-	'bouton_desactive_tout' => 'Desativar tudo',
52
-	'bouton_desinstaller' => 'Desinstalar',
53
-	'bouton_effacer_tout' => 'Apagar TUDO',
54
-	'bouton_envoyer_message' => 'Mensagem definitiva: enviar',
55
-	'bouton_fermer' => 'Fechar',
56
-	'bouton_mettre_a_jour_base' => 'Atualizar a base de dados',
57
-	'bouton_modifier' => 'Alterar',
58
-	'bouton_radio_afficher' => 'Exibir',
59
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Exibir nas listas de redatores conectados',
60
-	'bouton_radio_envoi_annonces_adresse' => 'Enviar os avisos para o endereço:',
61
-	'bouton_radio_envoi_liste_nouveautes' => 'Enviar a lista de novidades',
62
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Não exibir na lista de redatores',
63
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Não enviar os avisos editoriais',
64
-	'bouton_redirection' => 'REDIRECIONAMENTO',
65
-	'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Reiniciar aos valores padrão',
66
-	'bouton_relancer_inscription' => 'Reiniciar o registro',
67
-	'bouton_relancer_inscriptions' => 'Reiniciar os registros',
68
-	'bouton_relancer_installation' => 'Reiniciar a instalação',
69
-	'bouton_reset_password' => 'Criar uma nova senha e enviá-la por e-mail',
70
-	'bouton_suivant' => 'Avançar',
71
-	'bouton_tenter_recuperation' => 'Tentar uma reparação',
72
-	'bouton_test_proxy' => 'Testar o proxy',
73
-	'bouton_vider_cache' => 'Limpar o cache',
44
+    // B
45
+    'bouton_acces_ldap' => 'Incluir o acesso ao LDAP',
46
+    'bouton_ajouter' => 'Incluir',
47
+    'bouton_annuler' => 'Anular',
48
+    'bouton_cache_activer' => 'Reativar o cache',
49
+    'bouton_cache_desactiver' => 'Desativar temporariamente o cache',
50
+    'bouton_demande_publication' => 'Solicitar a publicação desta matéria',
51
+    'bouton_desactive_tout' => 'Desativar tudo',
52
+    'bouton_desinstaller' => 'Desinstalar',
53
+    'bouton_effacer_tout' => 'Apagar TUDO',
54
+    'bouton_envoyer_message' => 'Mensagem definitiva: enviar',
55
+    'bouton_fermer' => 'Fechar',
56
+    'bouton_mettre_a_jour_base' => 'Atualizar a base de dados',
57
+    'bouton_modifier' => 'Alterar',
58
+    'bouton_radio_afficher' => 'Exibir',
59
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Exibir nas listas de redatores conectados',
60
+    'bouton_radio_envoi_annonces_adresse' => 'Enviar os avisos para o endereço:',
61
+    'bouton_radio_envoi_liste_nouveautes' => 'Enviar a lista de novidades',
62
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Não exibir na lista de redatores',
63
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Não enviar os avisos editoriais',
64
+    'bouton_redirection' => 'REDIRECIONAMENTO',
65
+    'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Reiniciar aos valores padrão',
66
+    'bouton_relancer_inscription' => 'Reiniciar o registro',
67
+    'bouton_relancer_inscriptions' => 'Reiniciar os registros',
68
+    'bouton_relancer_installation' => 'Reiniciar a instalação',
69
+    'bouton_reset_password' => 'Criar uma nova senha e enviá-la por e-mail',
70
+    'bouton_suivant' => 'Avançar',
71
+    'bouton_tenter_recuperation' => 'Tentar uma reparação',
72
+    'bouton_test_proxy' => 'Testar o proxy',
73
+    'bouton_vider_cache' => 'Limpar o cache',
74 74
 
75
-	// C
76
-	'cache_modifiable_webmestre' => 'Este parâmetro é modificável pelo webmaster do site.',
77
-	'calendrier_synchro' => 'Se você usa um programa de agenda compatível com <b>iCal</b>, você pode sincronizá-lo com as informações deste site.',
78
-	'config_activer_champs' => 'Ativar os campos a seguir',
79
-	'config_choix_base_sup' => 'indicar uma base neste servidor',
80
-	'config_erreur_base_sup' => 'O SPIP não tem acesso à lista de bases acessíveis',
81
-	'config_info_base_sup' => 'Se você tiver outras bases de dados para serem consultadas via SPIP, em seu servidor SQL ou em outro, o formulário abaixo permite configurá-las. Se você deixar determinados campos em branco, os dados de conexão da base principal serão utilizados.',
82
-	'config_info_base_sup_disponibles' => 'Bases suplementares já consultáveis:',
83
-	'config_info_enregistree' => 'A nova configuração foi gravada',
84
-	'config_info_logos' => 'Cada elemento do site pode ter um ícone, bem como um ícone de «mouseOver»',
85
-	'config_info_logos_utiliser' => 'Usar os ícones',
86
-	'config_info_logos_utiliser_non' => 'Não usar o ícones',
87
-	'config_info_logos_utiliser_survol' => 'Usar os ícones de mouseOver',
88
-	'config_info_logos_utiliser_survol_non' => 'Não usar os ícones de mouseOver',
89
-	'config_info_redirection' => 'Ao ativar esta opção, você poderá criar matérias virtuais, meras referências a matérias publicadas em outros sites ou fora do SPIP.',
90
-	'config_redirection' => 'Matérias virtuais',
91
-	'config_titre_base_sup' => 'Configuração de uma base suplementar',
92
-	'config_titre_base_sup_choix' => 'Escolha uma base suplementar',
93
-	'connexion_ldap' => 'Conexão:',
94
-	'creer_et_associer_un_auteur' => 'Criar e vincular um autor',
75
+    // C
76
+    'cache_modifiable_webmestre' => 'Este parâmetro é modificável pelo webmaster do site.',
77
+    'calendrier_synchro' => 'Se você usa um programa de agenda compatível com <b>iCal</b>, você pode sincronizá-lo com as informações deste site.',
78
+    'config_activer_champs' => 'Ativar os campos a seguir',
79
+    'config_choix_base_sup' => 'indicar uma base neste servidor',
80
+    'config_erreur_base_sup' => 'O SPIP não tem acesso à lista de bases acessíveis',
81
+    'config_info_base_sup' => 'Se você tiver outras bases de dados para serem consultadas via SPIP, em seu servidor SQL ou em outro, o formulário abaixo permite configurá-las. Se você deixar determinados campos em branco, os dados de conexão da base principal serão utilizados.',
82
+    'config_info_base_sup_disponibles' => 'Bases suplementares já consultáveis:',
83
+    'config_info_enregistree' => 'A nova configuração foi gravada',
84
+    'config_info_logos' => 'Cada elemento do site pode ter um ícone, bem como um ícone de «mouseOver»',
85
+    'config_info_logos_utiliser' => 'Usar os ícones',
86
+    'config_info_logos_utiliser_non' => 'Não usar o ícones',
87
+    'config_info_logos_utiliser_survol' => 'Usar os ícones de mouseOver',
88
+    'config_info_logos_utiliser_survol_non' => 'Não usar os ícones de mouseOver',
89
+    'config_info_redirection' => 'Ao ativar esta opção, você poderá criar matérias virtuais, meras referências a matérias publicadas em outros sites ou fora do SPIP.',
90
+    'config_redirection' => 'Matérias virtuais',
91
+    'config_titre_base_sup' => 'Configuração de uma base suplementar',
92
+    'config_titre_base_sup_choix' => 'Escolha uma base suplementar',
93
+    'connexion_ldap' => 'Conexão:',
94
+    'creer_et_associer_un_auteur' => 'Criar e vincular um autor',
95 95
 
96
-	// D
97
-	'date_mot_heures' => 'horas',
96
+    // D
97
+    'date_mot_heures' => 'horas',
98 98
 
99
-	// E
100
-	'ecran_connexion_couleur_principale' => 'Cor principal',
101
-	'ecran_connexion_image_fond' => 'Imagem de fundo',
102
-	'ecran_connexion_image_fond_explication' => 'Usar uma imagem (formato JPEG, 1920x1080 pixels)',
103
-	'ecran_connexion_image_revenir_couleur_defaut' => 'Reverter para a cor padrão',
104
-	'ecran_connexion_titre' => 'Tela de conexão',
105
-	'ecran_securite' => ' + tela de segurança @version@',
106
-	'email' => 'e-mail',
107
-	'email_2' => 'e-mail:',
108
-	'en_savoir_plus' => 'Saiba mais',
109
-	'entree_adresse_annuaire' => 'Endereço do catálogo',
110
-	'entree_adresse_email' => 'Seu endereço de e-mail',
111
-	'entree_adresse_email_2' => 'Endereço de e-mail',
112
-	'entree_base_donnee_1' => 'Endereço da base de dados',
113
-	'entree_base_donnee_2' => '(Frequentemente este endereço corresponde ao do seu site, às vezes ele corresponde ao nome «localhost», algumas vezes ele pode ser deixado completamente em branco.)',
114
-	'entree_biographie' => 'Biografia curta em poucas palavras.',
115
-	'entree_chemin_acces' => '<b>Informe</b> o caminho de acesso:',
116
-	'entree_cle_pgp' => 'Sua chave PGP',
117
-	'entree_cle_pgp_2' => 'Chave PGP',
118
-	'entree_contenu_rubrique' => '(Conteúdo da seção em poucas palavras.)',
119
-	'entree_identifiants_connexion' => 'Seus dados de conexão...',
120
-	'entree_identifiants_connexion_2' => 'Dados de conexão',
121
-	'entree_informations_connexion_ldap' => 'Informe neste formulário os dados de conexão ao seu catálogo LDAP.
99
+    // E
100
+    'ecran_connexion_couleur_principale' => 'Cor principal',
101
+    'ecran_connexion_image_fond' => 'Imagem de fundo',
102
+    'ecran_connexion_image_fond_explication' => 'Usar uma imagem (formato JPEG, 1920x1080 pixels)',
103
+    'ecran_connexion_image_revenir_couleur_defaut' => 'Reverter para a cor padrão',
104
+    'ecran_connexion_titre' => 'Tela de conexão',
105
+    'ecran_securite' => ' + tela de segurança @version@',
106
+    'email' => 'e-mail',
107
+    'email_2' => 'e-mail:',
108
+    'en_savoir_plus' => 'Saiba mais',
109
+    'entree_adresse_annuaire' => 'Endereço do catálogo',
110
+    'entree_adresse_email' => 'Seu endereço de e-mail',
111
+    'entree_adresse_email_2' => 'Endereço de e-mail',
112
+    'entree_base_donnee_1' => 'Endereço da base de dados',
113
+    'entree_base_donnee_2' => '(Frequentemente este endereço corresponde ao do seu site, às vezes ele corresponde ao nome «localhost», algumas vezes ele pode ser deixado completamente em branco.)',
114
+    'entree_biographie' => 'Biografia curta em poucas palavras.',
115
+    'entree_chemin_acces' => '<b>Informe</b> o caminho de acesso:',
116
+    'entree_cle_pgp' => 'Sua chave PGP',
117
+    'entree_cle_pgp_2' => 'Chave PGP',
118
+    'entree_contenu_rubrique' => '(Conteúdo da seção em poucas palavras.)',
119
+    'entree_identifiants_connexion' => 'Seus dados de conexão...',
120
+    'entree_identifiants_connexion_2' => 'Dados de conexão',
121
+    'entree_informations_connexion_ldap' => 'Informe neste formulário os dados de conexão ao seu catálogo LDAP.
122 122
 Estas informações deverão ser fornecidas pelo administrador do sistema ou da rede.',
123
-	'entree_infos_perso' => 'Quem é você?',
124
-	'entree_infos_perso_2' => 'Quem é o autor?',
125
-	'entree_interieur_rubrique' => 'No interior da seção:',
126
-	'entree_liens_sites' => '<b>Link hipertexto</b> (referência, site a visitar...)',
127
-	'entree_login' => 'Seu login',
128
-	'entree_login_connexion_1' => 'O login de conexão',
129
-	'entree_login_connexion_2' => '(Frequentemente corresponde ao seu login para acesso por FTP; às vezes pode ser deixado em branco)',
130
-	'entree_mot_passe' => 'Sua senha',
131
-	'entree_mot_passe_1' => 'A senha de conexão',
132
-	'entree_mot_passe_2' => '(Frequentemente corresponde à sua senha para acesso por FTP; às vezes pode ser deixado em branco)',
133
-	'entree_nom_fichier' => 'Por favor, informe o nome do arquivo @texte_compresse@:',
134
-	'entree_nom_pseudo' => 'Seu nome ou apelido',
135
-	'entree_nom_pseudo_1' => '(Seu nome ou apelido)',
136
-	'entree_nom_pseudo_2' => 'Nome ou apelido',
137
-	'entree_nom_site' => 'O nome do seu site',
138
-	'entree_nom_site_2' => 'Nome do site do autor',
139
-	'entree_nouveau_passe' => 'Nova senha',
140
-	'entree_passe_ldap' => 'Senha',
141
-	'entree_port_annuaire' => 'O número da porta do catálogo',
142
-	'entree_signature' => 'Assinatura',
143
-	'entree_titre_obligatoire' => '<b>Título</b> [Obrigatório]<br />',
144
-	'entree_url' => 'O endereço (URL) do seu site',
145
-	'entree_url_2' => 'Endereço (URL) do site',
146
-	'erreur_connect_deja_existant' => 'Já existe um servidor com esse nome',
147
-	'erreur_contenu_suspect' => 'Texto escapado',
148
-	'erreur_email_deja_existant' => 'Esse endereço de email já está em uso.',
149
-	'erreur_nom_connect_incorrect' => 'Este nome de servidor não é autorizado',
150
-	'erreur_plugin_attribut_balise_manquant' => 'Atributo @attribut@ faltando no tag @balise@.',
151
-	'erreur_plugin_desinstalation_echouee' => 'A desinstalação do plugin falhou. No entanto, você pode desativá-lo.',
152
-	'erreur_plugin_fichier_absent' => 'Arquivo ausente',
153
-	'erreur_plugin_fichier_def_absent' => 'Arquivo de definição ausente',
154
-	'erreur_plugin_nom_fonction_interdit' => 'Nome de função não permitido',
155
-	'erreur_plugin_nom_manquant' => 'Nome do plugin ausente',
156
-	'erreur_plugin_prefix_manquant' => 'Área de nomeação do plugin não definida',
157
-	'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; ausente no arquivo de definição',
158
-	'erreur_plugin_version_manquant' => 'Versão do plugin ausente',
159
-	'erreur_type_fichier' => 'Tipo de arquivo incorreto',
123
+    'entree_infos_perso' => 'Quem é você?',
124
+    'entree_infos_perso_2' => 'Quem é o autor?',
125
+    'entree_interieur_rubrique' => 'No interior da seção:',
126
+    'entree_liens_sites' => '<b>Link hipertexto</b> (referência, site a visitar...)',
127
+    'entree_login' => 'Seu login',
128
+    'entree_login_connexion_1' => 'O login de conexão',
129
+    'entree_login_connexion_2' => '(Frequentemente corresponde ao seu login para acesso por FTP; às vezes pode ser deixado em branco)',
130
+    'entree_mot_passe' => 'Sua senha',
131
+    'entree_mot_passe_1' => 'A senha de conexão',
132
+    'entree_mot_passe_2' => '(Frequentemente corresponde à sua senha para acesso por FTP; às vezes pode ser deixado em branco)',
133
+    'entree_nom_fichier' => 'Por favor, informe o nome do arquivo @texte_compresse@:',
134
+    'entree_nom_pseudo' => 'Seu nome ou apelido',
135
+    'entree_nom_pseudo_1' => '(Seu nome ou apelido)',
136
+    'entree_nom_pseudo_2' => 'Nome ou apelido',
137
+    'entree_nom_site' => 'O nome do seu site',
138
+    'entree_nom_site_2' => 'Nome do site do autor',
139
+    'entree_nouveau_passe' => 'Nova senha',
140
+    'entree_passe_ldap' => 'Senha',
141
+    'entree_port_annuaire' => 'O número da porta do catálogo',
142
+    'entree_signature' => 'Assinatura',
143
+    'entree_titre_obligatoire' => '<b>Título</b> [Obrigatório]<br />',
144
+    'entree_url' => 'O endereço (URL) do seu site',
145
+    'entree_url_2' => 'Endereço (URL) do site',
146
+    'erreur_connect_deja_existant' => 'Já existe um servidor com esse nome',
147
+    'erreur_contenu_suspect' => 'Texto escapado',
148
+    'erreur_email_deja_existant' => 'Esse endereço de email já está em uso.',
149
+    'erreur_nom_connect_incorrect' => 'Este nome de servidor não é autorizado',
150
+    'erreur_plugin_attribut_balise_manquant' => 'Atributo @attribut@ faltando no tag @balise@.',
151
+    'erreur_plugin_desinstalation_echouee' => 'A desinstalação do plugin falhou. No entanto, você pode desativá-lo.',
152
+    'erreur_plugin_fichier_absent' => 'Arquivo ausente',
153
+    'erreur_plugin_fichier_def_absent' => 'Arquivo de definição ausente',
154
+    'erreur_plugin_nom_fonction_interdit' => 'Nome de função não permitido',
155
+    'erreur_plugin_nom_manquant' => 'Nome do plugin ausente',
156
+    'erreur_plugin_prefix_manquant' => 'Área de nomeação do plugin não definida',
157
+    'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; ausente no arquivo de definição',
158
+    'erreur_plugin_version_manquant' => 'Versão do plugin ausente',
159
+    'erreur_type_fichier' => 'Tipo de arquivo incorreto',
160 160
 
161
-	// H
162
-	'htaccess_a_simuler' => 'Aviso: a configuração do seu servidor HTTP não leva em conta os arquivos @htaccess@. Para poder garantir um bom nível de segurança, é preciso que você altere esta configuração, ou que as constantes @constantes@ (definíveis no arquivo mes_options.php) tenham como valor os diretórios abaixo de @document_root@.',
163
-	'htaccess_inoperant' => 'htaccess inoperante',
161
+    // H
162
+    'htaccess_a_simuler' => 'Aviso: a configuração do seu servidor HTTP não leva em conta os arquivos @htaccess@. Para poder garantir um bom nível de segurança, é preciso que você altere esta configuração, ou que as constantes @constantes@ (definíveis no arquivo mes_options.php) tenham como valor os diretórios abaixo de @document_root@.',
163
+    'htaccess_inoperant' => 'htaccess inoperante',
164 164
 
165
-	// I
166
-	'ical_info1' => 'Esta página apresenta diversos métodos para se manter a par da atividade deste site.',
167
-	'ical_info2' => 'Para mais informações sobre todas estas técnicas, não deixe de consultar <a href="@spipnet@">a documentação do SPIP</a>.',
168
-	'ical_info_calendrier' => 'Dois calendários estão à sua disposição. O primeiro é um mapa do site anunciando todas as matérias publicadas. O segundo contém os avisos editoriais bem como suas últimas mensagens privadas: ele lhe é reservado graças a uma chave pessoal, que você pode alterar a qualquer momento ao renovar a sua senha.',
169
-	'ical_methode_http' => 'Transferência',
170
-	'ical_methode_webcal' => 'Sincronização (webcal://)',
171
-	'ical_texte_js' => 'Uma linha de javascript permite-lhe exibir de forma simples, em qualquer site que lhe pertença, as matérias recentemente publicadas neste site.',
172
-	'ical_texte_prive' => 'Este calendário, de uso estritamente pessoal, o informa sobre a atividade editorial privada deste site (tarefas e encontros pessoais, matérias e notas propostas...).',
173
-	'ical_texte_public' => 'Este calendário permite-lhe acompanhar a atividade pública deste site (matérias e notas publicadas).',
174
-	'ical_texte_rss' => 'Você pode sindicar as novidades deste site em qualquer leitor de arquivos em formato XML/RSS (Rich Site Summary). É também o formato que permite ao SPIP ler as novidades publicadas em outros sites que utilizem um formato de troca de informações compatível (sites sindicados).',
175
-	'ical_titre_js' => 'Javascript',
176
-	'ical_titre_mailing' => 'Mailing-list',
177
-	'ical_titre_rss' => 'Arquivos de sindicação',
178
-	'icone_accueil' => 'Página Inicial',
179
-	'icone_activer_cookie' => 'Ativar o coockie de correspondência',
180
-	'icone_activite' => 'Atividade',
181
-	'icone_admin_plugin' => 'Gerenciamento dos plugins',
182
-	'icone_administration' => 'Manutenção',
183
-	'icone_afficher_auteurs' => 'Exibir os autores',
184
-	'icone_afficher_visiteurs' => 'Exibir os visitantes',
185
-	'icone_arret_discussion' => 'Não participar mais desta discussão',
186
-	'icone_calendrier' => 'Calendário',
187
-	'icone_configuration' => 'Configuração',
188
-	'icone_creer_auteur' => 'Criar um novo autor e vinculá-lo a esta matéria',
189
-	'icone_creer_mot_cle' => 'Criar uma nova palavra-chave e vinculá-la a esta matéria',
190
-	'icone_creer_rubrique_2' => 'Criar uma nova seção',
191
-	'icone_developpement' => 'Desenvolvimento',
192
-	'icone_edition' => 'Edição',
193
-	'icone_ma_langue' => 'Meu idioma',
194
-	'icone_mes_infos' => 'Minhas informações',
195
-	'icone_mes_preferences' => 'Minhas preferências',
196
-	'icone_modifier_article' => 'Editar esta matéria',
197
-	'icone_modifier_rubrique' => 'Editar esta seção',
198
-	'icone_publication' => 'Publicação',
199
-	'icone_relancer_signataire' => 'Reconfirmar o assinante',
200
-	'icone_retour' => 'Voltar',
201
-	'icone_retour_article' => 'Voltar para a matéria',
202
-	'icone_squelette' => 'Templates',
203
-	'icone_suivi_publication' => 'Acompanhamento da publicação',
204
-	'icone_supprimer_cookie' => 'Excluir o cookie de correspondência',
205
-	'icone_supprimer_rubrique' => 'Excluir esta seção',
206
-	'icone_supprimer_signature' => 'Excluir esta assinatura',
207
-	'icone_valider_signature' => 'Validar esta assinatura',
208
-	'image_administrer_rubrique' => 'Você pode administrar esta seção',
209
-	'impossible_modifier_login_auteur' => 'Não foi possível alterar o login.',
210
-	'impossible_modifier_pass_auteur' => 'Não foi possível alterar a senha.',
211
-	'info_1_article' => '1 matéria',
212
-	'info_1_auteur' => '1 autor',
213
-	'info_1_message' => '1 mensagem',
214
-	'info_1_mot_cle' => '1 palavra-chave',
215
-	'info_1_rubrique' => '1 seção',
216
-	'info_1_visiteur' => '1 visitante',
217
-	'info_activer_cookie' => 'Você pode ativar um <b>cookie de correspondência</b>, que lhe permitirá passar facilmente do site público para o site privado.',
218
-	'info_activer_menu_developpement' => 'Exibir o menu Desenvolvimento',
219
-	'info_admin_etre_webmestre' => 'Me conceder direitos de webmaster',
220
-	'info_admin_je_suis_webmestre' => 'Eu sou <b>webmaster</b>',
221
-	'info_admin_statuer_webmestre' => 'Dar a este administrador os direitos de webmaster',
222
-	'info_admin_webmestre' => 'Este administrador é <b>webmaster</b>',
223
-	'info_administrateur' => 'Administrador',
224
-	'info_administrateur_1' => 'Administrador',
225
-	'info_administrateur_2' => 'do site (<i>use com cuidado</i>)',
226
-	'info_administrateur_site_01' => 'Se você é administrador do site, por favor,',
227
-	'info_administrateur_site_02' => 'clique neste link',
228
-	'info_administrateurs' => 'Administradores',
229
-	'info_administrer_rubrique' => 'Você pode administrar esta seção',
230
-	'info_adresse' => 'no endereço:',
231
-	'info_adresse_desinscription' => 'Endereço da desinscrição:',
232
-	'info_adresse_url' => 'Endereço (URL) do site público',
233
-	'info_afficher_par_nb' => 'Exibir por',
234
-	'info_aide_en_ligne' => 'Ajuda online SPIP',
235
-	'info_ajout_image' => 'Assim que você incluir imagens e documentos anexados a uma matéria, o SPIP pode criar para você, automaticamente, ícones (miniaturas) das imagens inseridas. Isto permite, por exemplo, criar automaticamente uma galeria ou um portfólio.',
236
-	'info_ajouter_rubrique' => 'Incluir outra seção para administrar:',
237
-	'info_annonce_nouveautes' => 'Aviso das novidades',
238
-	'info_article' => 'matéria',
239
-	'info_article_2' => 'matérias',
240
-	'info_article_a_paraitre' => 'As matérias pós-datadas para exibição',
241
-	'info_articles_02' => 'matérias',
242
-	'info_articles_2' => 'Matérias',
243
-	'info_articles_auteur' => 'As matérias deste autor',
244
-	'info_articles_miens' => 'Minhas matérias',
245
-	'info_articles_tous' => 'Todas as matérias',
246
-	'info_articles_trouves' => 'Matérias encontradas',
247
-	'info_attente_validation' => 'Suas matérias aguardando validação',
248
-	'info_aucun_article' => 'Nenhuma matéria',
249
-	'info_aucun_auteur' => 'Nenhum autor',
250
-	'info_aucun_message' => 'Nenhuma mensagem',
251
-	'info_aucun_rubrique' => 'Nenhuma seção',
252
-	'info_aujourdhui' => 'Hoje:',
253
-	'info_auteur_gere_rubriques' => 'Este autor gerencia as seções a seguir:',
254
-	'info_auteur_gere_toutes_rubriques' => 'Este autor gerencia <b>todas as seções</b>',
255
-	'info_auteur_gere_toutes_rubriques_2' => 'Eu gerencio <b>todas as seções</b>',
256
-	'info_auteurs' => 'Os autores',
257
-	'info_auteurs_par_tri' => 'Autores@partri@',
258
-	'info_auteurs_trouves' => 'Autores encontrados',
259
-	'info_authentification_externe' => 'Autenticação externa',
260
-	'info_avertissement' => 'Aviso',
261
-	'info_barre_outils' => 'com sua barra de ferramentas?',
262
-	'info_base_installee' => 'A estrutura da sua base de dados foi instalada.',
263
-	'info_bio' => 'Biografia',
264
-	'info_cache_desactive' => 'O cache está temporariamente desativado.',
265
-	'info_chapeau' => 'Introdução',
266
-	'info_chapeau_2' => 'Introdução:',
267
-	'info_chemin_acces_1' => 'Opções: <b>Caminho de acesso no diretório</b>',
268
-	'info_chemin_acces_2' => 'A partir daqui, você deverá configurar o caminho de acesso às informações do diretório. Esta informação é indispensávelpara ler os perfis dos usuários no diretório.',
269
-	'info_chemin_acces_annuaire' => 'Opções: <b>Caminho de acesso no diretório</b>',
270
-	'info_choix_base' => 'Terceiro passo:',
271
-	'info_classement_1' => '<sup><u>o</u></sup> em @liste@',
272
-	'info_classement_2' => '<sup><u>a</u></sup> em @liste@',
273
-	'info_code_acces' => 'Não se esqueça dos seus dados de conexão!',
274
-	'info_config_suivi' => 'Se este endereço corresponde a uma mailing-list, você pode informar abaixo o endereço onde os participantes do site podem se inscrever. Este endereço pode ser um URL (por exemplo a página de inscrição na lista pela Web), ou um endereço de e-mail dotado de um assunto específico (par exemple: <tt>@adresse_suivi@?subject=subscribe</tt>):',
275
-	'info_config_suivi_explication' => 'Voce pode assinar a  mailing-list deste site. Você irá receber por e-mail, os avisos de matérias e notas propostos para publicação.',
276
-	'info_confirmer_passe' => 'Confirmar a nova senha:',
277
-	'info_conflit_edition_avis_non_sauvegarde' => 'Atenção os campos a seguir foram alterados por terceiros. As suas modificações nestes campos não foram, por isso, gravadas.',
278
-	'info_conflit_edition_differences' => 'Diferenças:',
279
-	'info_conflit_edition_version_enregistree' => 'A versão gravada:',
280
-	'info_conflit_edition_votre_version' => 'A sua versão:',
281
-	'info_connexion_base' => 'Teste de conexão com a base',
282
-	'info_connexion_base_donnee' => 'Conexão à sua base de dados',
283
-	'info_connexion_ldap_ok' => '<b>A conexão LDAP foi efetuada.</b><p>Você pode passar para o próximo passo.</p>',
284
-	'info_connexion_mysql' => 'Sua conexão SQL',
285
-	'info_connexion_ok' => 'A conexão foi obtida.',
286
-	'info_contact' => 'Contato',
287
-	'info_contenu_articles' => 'Conteúdo das matérias',
288
-	'info_contributions' => 'Contribuições',
289
-	'info_creation_paragraphe' => 'Para criar parágrafos, basta deixar linhas em branco.',
290
-	'info_creation_rubrique' => 'Antes de poder escrever matérias, você deve criar, pelo menos, uma seção.<br />',
291
-	'info_creation_tables' => 'Criação das tabelas da base',
292
-	'info_creer_base' => '<b>Criar</b> uma nova base de dados:',
293
-	'info_dans_rubrique' => 'Na seção:',
294
-	'info_date_publication_anterieure' => 'Data de redação anterior:',
295
-	'info_date_referencement' => 'DATA DE REFERENCIAMENTO DESTE SITE:',
296
-	'info_derniere_etape' => 'Terminou!',
297
-	'info_descriptif' => 'Descrição:',
298
-	'info_desinstaller_plugin' => 'exclui os dados e desativa o plugin',
299
-	'info_discussion_cours' => 'Discussões em andamento',
300
-	'info_ecrire_article' => 'Antes de poder escrever matérias, você precisa criar pelo menos uma seção.',
301
-	'info_email_envoi' => 'Endereço de e-mail de envio (opcional)',
302
-	'info_email_envoi_txt' => 'Informe aqui o endereço a ser utilizado para enviar os e-mails (por padrão, o endereço de destino será usado como endereço de envio):',
303
-	'info_email_webmestre' => 'Endereço de e-mail do webmaster',
304
-	'info_envoi_email_automatique' => 'Envio automático de e-mails',
305
-	'info_envoyer_maintenant' => 'Enviar agora',
306
-	'info_etape_suivante' => 'Avançar para a próxima etapa',
307
-	'info_etape_suivante_1' => 'Você pode passar para a próxima etapa.',
308
-	'info_etape_suivante_2' => 'Você pode passar para a próxima etapa.',
309
-	'info_exceptions_proxy' => 'Exceções para o proxy',
310
-	'info_exportation_base' => 'exportação da base para @archive@',
311
-	'info_facilite_suivi_activite' => 'Para facilitar o acompanhamento da atividade editorial do site, o SPIP pode enviar por e-mail, por exemplo a uma mailing-list de redatores, avisos dos pedidos de publicação e das validações das matérias.',
312
-	'info_fichiers_authent' => 'Arquivos de autenticação «.htpasswd»',
313
-	'info_forums_abo_invites' => 'O seu site comporta fóruns por assinatura; os visitantes são convidados a se registrar no site público.',
314
-	'info_gauche_admin_tech' => '<b>Esta página é acessível apenas aos responsáveis pelo site.</b><p>Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.</p>',
315
-	'info_gauche_admin_vider' => '<b>Esta página é acessível apenas aos responsáveis pelo site.</b><p> Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.</p>',
316
-	'info_gauche_auteurs' => 'Aqui, você encontra todos os autores do site.
165
+    // I
166
+    'ical_info1' => 'Esta página apresenta diversos métodos para se manter a par da atividade deste site.',
167
+    'ical_info2' => 'Para mais informações sobre todas estas técnicas, não deixe de consultar <a href="@spipnet@">a documentação do SPIP</a>.',
168
+    'ical_info_calendrier' => 'Dois calendários estão à sua disposição. O primeiro é um mapa do site anunciando todas as matérias publicadas. O segundo contém os avisos editoriais bem como suas últimas mensagens privadas: ele lhe é reservado graças a uma chave pessoal, que você pode alterar a qualquer momento ao renovar a sua senha.',
169
+    'ical_methode_http' => 'Transferência',
170
+    'ical_methode_webcal' => 'Sincronização (webcal://)',
171
+    'ical_texte_js' => 'Uma linha de javascript permite-lhe exibir de forma simples, em qualquer site que lhe pertença, as matérias recentemente publicadas neste site.',
172
+    'ical_texte_prive' => 'Este calendário, de uso estritamente pessoal, o informa sobre a atividade editorial privada deste site (tarefas e encontros pessoais, matérias e notas propostas...).',
173
+    'ical_texte_public' => 'Este calendário permite-lhe acompanhar a atividade pública deste site (matérias e notas publicadas).',
174
+    'ical_texte_rss' => 'Você pode sindicar as novidades deste site em qualquer leitor de arquivos em formato XML/RSS (Rich Site Summary). É também o formato que permite ao SPIP ler as novidades publicadas em outros sites que utilizem um formato de troca de informações compatível (sites sindicados).',
175
+    'ical_titre_js' => 'Javascript',
176
+    'ical_titre_mailing' => 'Mailing-list',
177
+    'ical_titre_rss' => 'Arquivos de sindicação',
178
+    'icone_accueil' => 'Página Inicial',
179
+    'icone_activer_cookie' => 'Ativar o coockie de correspondência',
180
+    'icone_activite' => 'Atividade',
181
+    'icone_admin_plugin' => 'Gerenciamento dos plugins',
182
+    'icone_administration' => 'Manutenção',
183
+    'icone_afficher_auteurs' => 'Exibir os autores',
184
+    'icone_afficher_visiteurs' => 'Exibir os visitantes',
185
+    'icone_arret_discussion' => 'Não participar mais desta discussão',
186
+    'icone_calendrier' => 'Calendário',
187
+    'icone_configuration' => 'Configuração',
188
+    'icone_creer_auteur' => 'Criar um novo autor e vinculá-lo a esta matéria',
189
+    'icone_creer_mot_cle' => 'Criar uma nova palavra-chave e vinculá-la a esta matéria',
190
+    'icone_creer_rubrique_2' => 'Criar uma nova seção',
191
+    'icone_developpement' => 'Desenvolvimento',
192
+    'icone_edition' => 'Edição',
193
+    'icone_ma_langue' => 'Meu idioma',
194
+    'icone_mes_infos' => 'Minhas informações',
195
+    'icone_mes_preferences' => 'Minhas preferências',
196
+    'icone_modifier_article' => 'Editar esta matéria',
197
+    'icone_modifier_rubrique' => 'Editar esta seção',
198
+    'icone_publication' => 'Publicação',
199
+    'icone_relancer_signataire' => 'Reconfirmar o assinante',
200
+    'icone_retour' => 'Voltar',
201
+    'icone_retour_article' => 'Voltar para a matéria',
202
+    'icone_squelette' => 'Templates',
203
+    'icone_suivi_publication' => 'Acompanhamento da publicação',
204
+    'icone_supprimer_cookie' => 'Excluir o cookie de correspondência',
205
+    'icone_supprimer_rubrique' => 'Excluir esta seção',
206
+    'icone_supprimer_signature' => 'Excluir esta assinatura',
207
+    'icone_valider_signature' => 'Validar esta assinatura',
208
+    'image_administrer_rubrique' => 'Você pode administrar esta seção',
209
+    'impossible_modifier_login_auteur' => 'Não foi possível alterar o login.',
210
+    'impossible_modifier_pass_auteur' => 'Não foi possível alterar a senha.',
211
+    'info_1_article' => '1 matéria',
212
+    'info_1_auteur' => '1 autor',
213
+    'info_1_message' => '1 mensagem',
214
+    'info_1_mot_cle' => '1 palavra-chave',
215
+    'info_1_rubrique' => '1 seção',
216
+    'info_1_visiteur' => '1 visitante',
217
+    'info_activer_cookie' => 'Você pode ativar um <b>cookie de correspondência</b>, que lhe permitirá passar facilmente do site público para o site privado.',
218
+    'info_activer_menu_developpement' => 'Exibir o menu Desenvolvimento',
219
+    'info_admin_etre_webmestre' => 'Me conceder direitos de webmaster',
220
+    'info_admin_je_suis_webmestre' => 'Eu sou <b>webmaster</b>',
221
+    'info_admin_statuer_webmestre' => 'Dar a este administrador os direitos de webmaster',
222
+    'info_admin_webmestre' => 'Este administrador é <b>webmaster</b>',
223
+    'info_administrateur' => 'Administrador',
224
+    'info_administrateur_1' => 'Administrador',
225
+    'info_administrateur_2' => 'do site (<i>use com cuidado</i>)',
226
+    'info_administrateur_site_01' => 'Se você é administrador do site, por favor,',
227
+    'info_administrateur_site_02' => 'clique neste link',
228
+    'info_administrateurs' => 'Administradores',
229
+    'info_administrer_rubrique' => 'Você pode administrar esta seção',
230
+    'info_adresse' => 'no endereço:',
231
+    'info_adresse_desinscription' => 'Endereço da desinscrição:',
232
+    'info_adresse_url' => 'Endereço (URL) do site público',
233
+    'info_afficher_par_nb' => 'Exibir por',
234
+    'info_aide_en_ligne' => 'Ajuda online SPIP',
235
+    'info_ajout_image' => 'Assim que você incluir imagens e documentos anexados a uma matéria, o SPIP pode criar para você, automaticamente, ícones (miniaturas) das imagens inseridas. Isto permite, por exemplo, criar automaticamente uma galeria ou um portfólio.',
236
+    'info_ajouter_rubrique' => 'Incluir outra seção para administrar:',
237
+    'info_annonce_nouveautes' => 'Aviso das novidades',
238
+    'info_article' => 'matéria',
239
+    'info_article_2' => 'matérias',
240
+    'info_article_a_paraitre' => 'As matérias pós-datadas para exibição',
241
+    'info_articles_02' => 'matérias',
242
+    'info_articles_2' => 'Matérias',
243
+    'info_articles_auteur' => 'As matérias deste autor',
244
+    'info_articles_miens' => 'Minhas matérias',
245
+    'info_articles_tous' => 'Todas as matérias',
246
+    'info_articles_trouves' => 'Matérias encontradas',
247
+    'info_attente_validation' => 'Suas matérias aguardando validação',
248
+    'info_aucun_article' => 'Nenhuma matéria',
249
+    'info_aucun_auteur' => 'Nenhum autor',
250
+    'info_aucun_message' => 'Nenhuma mensagem',
251
+    'info_aucun_rubrique' => 'Nenhuma seção',
252
+    'info_aujourdhui' => 'Hoje:',
253
+    'info_auteur_gere_rubriques' => 'Este autor gerencia as seções a seguir:',
254
+    'info_auteur_gere_toutes_rubriques' => 'Este autor gerencia <b>todas as seções</b>',
255
+    'info_auteur_gere_toutes_rubriques_2' => 'Eu gerencio <b>todas as seções</b>',
256
+    'info_auteurs' => 'Os autores',
257
+    'info_auteurs_par_tri' => 'Autores@partri@',
258
+    'info_auteurs_trouves' => 'Autores encontrados',
259
+    'info_authentification_externe' => 'Autenticação externa',
260
+    'info_avertissement' => 'Aviso',
261
+    'info_barre_outils' => 'com sua barra de ferramentas?',
262
+    'info_base_installee' => 'A estrutura da sua base de dados foi instalada.',
263
+    'info_bio' => 'Biografia',
264
+    'info_cache_desactive' => 'O cache está temporariamente desativado.',
265
+    'info_chapeau' => 'Introdução',
266
+    'info_chapeau_2' => 'Introdução:',
267
+    'info_chemin_acces_1' => 'Opções: <b>Caminho de acesso no diretório</b>',
268
+    'info_chemin_acces_2' => 'A partir daqui, você deverá configurar o caminho de acesso às informações do diretório. Esta informação é indispensávelpara ler os perfis dos usuários no diretório.',
269
+    'info_chemin_acces_annuaire' => 'Opções: <b>Caminho de acesso no diretório</b>',
270
+    'info_choix_base' => 'Terceiro passo:',
271
+    'info_classement_1' => '<sup><u>o</u></sup> em @liste@',
272
+    'info_classement_2' => '<sup><u>a</u></sup> em @liste@',
273
+    'info_code_acces' => 'Não se esqueça dos seus dados de conexão!',
274
+    'info_config_suivi' => 'Se este endereço corresponde a uma mailing-list, você pode informar abaixo o endereço onde os participantes do site podem se inscrever. Este endereço pode ser um URL (por exemplo a página de inscrição na lista pela Web), ou um endereço de e-mail dotado de um assunto específico (par exemple: <tt>@adresse_suivi@?subject=subscribe</tt>):',
275
+    'info_config_suivi_explication' => 'Voce pode assinar a  mailing-list deste site. Você irá receber por e-mail, os avisos de matérias e notas propostos para publicação.',
276
+    'info_confirmer_passe' => 'Confirmar a nova senha:',
277
+    'info_conflit_edition_avis_non_sauvegarde' => 'Atenção os campos a seguir foram alterados por terceiros. As suas modificações nestes campos não foram, por isso, gravadas.',
278
+    'info_conflit_edition_differences' => 'Diferenças:',
279
+    'info_conflit_edition_version_enregistree' => 'A versão gravada:',
280
+    'info_conflit_edition_votre_version' => 'A sua versão:',
281
+    'info_connexion_base' => 'Teste de conexão com a base',
282
+    'info_connexion_base_donnee' => 'Conexão à sua base de dados',
283
+    'info_connexion_ldap_ok' => '<b>A conexão LDAP foi efetuada.</b><p>Você pode passar para o próximo passo.</p>',
284
+    'info_connexion_mysql' => 'Sua conexão SQL',
285
+    'info_connexion_ok' => 'A conexão foi obtida.',
286
+    'info_contact' => 'Contato',
287
+    'info_contenu_articles' => 'Conteúdo das matérias',
288
+    'info_contributions' => 'Contribuições',
289
+    'info_creation_paragraphe' => 'Para criar parágrafos, basta deixar linhas em branco.',
290
+    'info_creation_rubrique' => 'Antes de poder escrever matérias, você deve criar, pelo menos, uma seção.<br />',
291
+    'info_creation_tables' => 'Criação das tabelas da base',
292
+    'info_creer_base' => '<b>Criar</b> uma nova base de dados:',
293
+    'info_dans_rubrique' => 'Na seção:',
294
+    'info_date_publication_anterieure' => 'Data de redação anterior:',
295
+    'info_date_referencement' => 'DATA DE REFERENCIAMENTO DESTE SITE:',
296
+    'info_derniere_etape' => 'Terminou!',
297
+    'info_descriptif' => 'Descrição:',
298
+    'info_desinstaller_plugin' => 'exclui os dados e desativa o plugin',
299
+    'info_discussion_cours' => 'Discussões em andamento',
300
+    'info_ecrire_article' => 'Antes de poder escrever matérias, você precisa criar pelo menos uma seção.',
301
+    'info_email_envoi' => 'Endereço de e-mail de envio (opcional)',
302
+    'info_email_envoi_txt' => 'Informe aqui o endereço a ser utilizado para enviar os e-mails (por padrão, o endereço de destino será usado como endereço de envio):',
303
+    'info_email_webmestre' => 'Endereço de e-mail do webmaster',
304
+    'info_envoi_email_automatique' => 'Envio automático de e-mails',
305
+    'info_envoyer_maintenant' => 'Enviar agora',
306
+    'info_etape_suivante' => 'Avançar para a próxima etapa',
307
+    'info_etape_suivante_1' => 'Você pode passar para a próxima etapa.',
308
+    'info_etape_suivante_2' => 'Você pode passar para a próxima etapa.',
309
+    'info_exceptions_proxy' => 'Exceções para o proxy',
310
+    'info_exportation_base' => 'exportação da base para @archive@',
311
+    'info_facilite_suivi_activite' => 'Para facilitar o acompanhamento da atividade editorial do site, o SPIP pode enviar por e-mail, por exemplo a uma mailing-list de redatores, avisos dos pedidos de publicação e das validações das matérias.',
312
+    'info_fichiers_authent' => 'Arquivos de autenticação «.htpasswd»',
313
+    'info_forums_abo_invites' => 'O seu site comporta fóruns por assinatura; os visitantes são convidados a se registrar no site público.',
314
+    'info_gauche_admin_tech' => '<b>Esta página é acessível apenas aos responsáveis pelo site.</b><p>Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.</p>',
315
+    'info_gauche_admin_vider' => '<b>Esta página é acessível apenas aos responsáveis pelo site.</b><p> Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao website.</p>',
316
+    'info_gauche_auteurs' => 'Aqui, você encontra todos os autores do site.
317 317
 Os status dos autores é indicado pela côr dos ícones (administrador = verde; redator = amarelo).',
318
-	'info_gauche_auteurs_exterieurs' => 'Os autores externos, sem acesso ao site, são indicados por um ícone azul;
318
+    'info_gauche_auteurs_exterieurs' => 'Os autores externos, sem acesso ao site, são indicados por um ícone azul;
319 319
 os autores excluídos por um ícone cinza.',
320
-	'info_gauche_messagerie' => 'O sistema interno de mensagens permite a troca de mensagens entre redatores, a criação de lembretes (para seu uso pessoal) ou exibir anúncios na página de entrada da área privada (se você for administrador).',
321
-	'info_gauche_statistiques_referers' => 'Esta página apresenta a lista dos  <i>referers</i>, ou seja, dos sites que contêm links para o seu site, unicamente para ontem e hoje; esta lista é zerada a cada 24 horas.',
322
-	'info_gauche_visiteurs_enregistres' => 'Você encontrará aqui os visitantes registrados na área pública do site (fóruns por assinatura).',
323
-	'info_generation_miniatures_images' => 'Geração de miniaturas das imagens',
324
-	'info_gerer_trad_objets' => '@objets@ : gerenciar os links de tradução',
325
-	'info_hebergeur_desactiver_envoi_email' => 'Alguns serviços de hospedagem desativam o envio automático de e-mails a partir dos seus servidores. Neste caso, as funcionalidades a seguir não funcionarão.',
326
-	'info_hier' => 'ontem:',
327
-	'info_identification_publique' => 'Sua identificação pública...',
328
-	'info_image_process' => 'Por favor, selecione o melhor método de criação dos ícones, clicando na imagem correspondente.',
329
-	'info_image_process2' => 'Se nenhuma imagem está sendo exibida, o servidor que hospeda o seu site não foi configurado para utilizar essas ferramentas. Se você deseja usar essas funções, contate o responsável técnico e solicite as extensões «GD» ou «Imagick».',
330
-	'info_images_auto' => 'Imagens calculadas automaticamente',
331
-	'info_informations_personnelles' => 'Informações pessoais',
332
-	'info_inscription' => 'Inscrição online',
333
-	'info_inscription_automatique' => 'Inscrição automática de novos redatores',
334
-	'info_jeu_caractere' => 'Conjunto de caracteres do site',
335
-	'info_jours' => 'dias',
336
-	'info_laisser_champs_vides' => 'deixar estes campos vazios)',
337
-	'info_langues' => 'Idiomas do site',
338
-	'info_ldap_ok' => 'A autenticação LDAP está instalada.',
339
-	'info_lien_hypertexte' => 'Link hipertexto:',
340
-	'info_liste_nouveautes_envoyee' => 'A lista de novidades foi enviada',
341
-	'info_liste_redacteurs_connectes' => 'Lista de redatores conectados',
342
-	'info_login_existant' => 'Este login já está cadastrado.',
343
-	'info_login_trop_court' => 'Login muito curto.',
344
-	'info_login_trop_court_car_pluriel' => 'O login deve conter pelo menos @nb@ caracteres.',
345
-	'info_logos' => 'Os ícones',
346
-	'info_maximum' => 'máximo:',
347
-	'info_meme_rubrique' => 'Na mesma seção',
348
-	'info_message_en_redaction' => 'Suas mensagens em fase de redação',
349
-	'info_message_technique' => 'Mensagem técnica:',
350
-	'info_messagerie_interne' => 'Mensageria interna',
351
-	'info_mise_a_niveau_base' => 'atualização da sua base SQL',
352
-	'info_mise_a_niveau_base_2' => '{{Atenção!}} Você instalou uma versão de arquivos SPIP {anterior} à que estava instalada no site: a sua base de dados corre o risco de se corromper e o seu site não funcionar mais.<br />{{Reinstale os arquivos SPIP.}}',
353
-	'info_modification_enregistree' => 'Sua alteração foi gravada',
354
-	'info_modifier_auteur' => 'Editar o autor:',
355
-	'info_modifier_rubrique' => 'Editar a seção:',
356
-	'info_modifier_titre' => 'Editar: @titre@',
357
-	'info_mon_site_spip' => 'Meu site SPIP',
358
-	'info_moyenne' => 'média:',
359
-	'info_multi_cet_article' => 'Idioma desta matéria:',
360
-	'info_multi_langues_choisies' => 'Por favor, selecione a seguir os idiomas à disposição dos redatores do seu site.
320
+    'info_gauche_messagerie' => 'O sistema interno de mensagens permite a troca de mensagens entre redatores, a criação de lembretes (para seu uso pessoal) ou exibir anúncios na página de entrada da área privada (se você for administrador).',
321
+    'info_gauche_statistiques_referers' => 'Esta página apresenta a lista dos  <i>referers</i>, ou seja, dos sites que contêm links para o seu site, unicamente para ontem e hoje; esta lista é zerada a cada 24 horas.',
322
+    'info_gauche_visiteurs_enregistres' => 'Você encontrará aqui os visitantes registrados na área pública do site (fóruns por assinatura).',
323
+    'info_generation_miniatures_images' => 'Geração de miniaturas das imagens',
324
+    'info_gerer_trad_objets' => '@objets@ : gerenciar os links de tradução',
325
+    'info_hebergeur_desactiver_envoi_email' => 'Alguns serviços de hospedagem desativam o envio automático de e-mails a partir dos seus servidores. Neste caso, as funcionalidades a seguir não funcionarão.',
326
+    'info_hier' => 'ontem:',
327
+    'info_identification_publique' => 'Sua identificação pública...',
328
+    'info_image_process' => 'Por favor, selecione o melhor método de criação dos ícones, clicando na imagem correspondente.',
329
+    'info_image_process2' => 'Se nenhuma imagem está sendo exibida, o servidor que hospeda o seu site não foi configurado para utilizar essas ferramentas. Se você deseja usar essas funções, contate o responsável técnico e solicite as extensões «GD» ou «Imagick».',
330
+    'info_images_auto' => 'Imagens calculadas automaticamente',
331
+    'info_informations_personnelles' => 'Informações pessoais',
332
+    'info_inscription' => 'Inscrição online',
333
+    'info_inscription_automatique' => 'Inscrição automática de novos redatores',
334
+    'info_jeu_caractere' => 'Conjunto de caracteres do site',
335
+    'info_jours' => 'dias',
336
+    'info_laisser_champs_vides' => 'deixar estes campos vazios)',
337
+    'info_langues' => 'Idiomas do site',
338
+    'info_ldap_ok' => 'A autenticação LDAP está instalada.',
339
+    'info_lien_hypertexte' => 'Link hipertexto:',
340
+    'info_liste_nouveautes_envoyee' => 'A lista de novidades foi enviada',
341
+    'info_liste_redacteurs_connectes' => 'Lista de redatores conectados',
342
+    'info_login_existant' => 'Este login já está cadastrado.',
343
+    'info_login_trop_court' => 'Login muito curto.',
344
+    'info_login_trop_court_car_pluriel' => 'O login deve conter pelo menos @nb@ caracteres.',
345
+    'info_logos' => 'Os ícones',
346
+    'info_maximum' => 'máximo:',
347
+    'info_meme_rubrique' => 'Na mesma seção',
348
+    'info_message_en_redaction' => 'Suas mensagens em fase de redação',
349
+    'info_message_technique' => 'Mensagem técnica:',
350
+    'info_messagerie_interne' => 'Mensageria interna',
351
+    'info_mise_a_niveau_base' => 'atualização da sua base SQL',
352
+    'info_mise_a_niveau_base_2' => '{{Atenção!}} Você instalou uma versão de arquivos SPIP {anterior} à que estava instalada no site: a sua base de dados corre o risco de se corromper e o seu site não funcionar mais.<br />{{Reinstale os arquivos SPIP.}}',
353
+    'info_modification_enregistree' => 'Sua alteração foi gravada',
354
+    'info_modifier_auteur' => 'Editar o autor:',
355
+    'info_modifier_rubrique' => 'Editar a seção:',
356
+    'info_modifier_titre' => 'Editar: @titre@',
357
+    'info_mon_site_spip' => 'Meu site SPIP',
358
+    'info_moyenne' => 'média:',
359
+    'info_multi_cet_article' => 'Idioma desta matéria:',
360
+    'info_multi_langues_choisies' => 'Por favor, selecione a seguir os idiomas à disposição dos redatores do seu site.
361 361
 Os idiomas já utilizados no site (no topo da lista) não podem ser desativados.',
362
-	'info_multi_objets' => '@objets@ : ativar o menu de idioma',
363
-	'info_multi_secteurs' => '... apenas para as seções situadas na raiz?',
364
-	'info_nb_articles' => '@nb@ matérias',
365
-	'info_nb_auteurs' => '@nb@ autores',
366
-	'info_nb_messages' => '@nb@ mensagens',
367
-	'info_nb_mots_cles' => '@nb@ palavras-chave',
368
-	'info_nb_rubriques' => '@nb@ seções',
369
-	'info_nb_visiteurs' => '@nb@ visitantes',
370
-	'info_nom' => 'Nome',
371
-	'info_nom_destinataire' => 'Nome do destinatário',
372
-	'info_nom_pas_conforme' => 'tags HTML não são permitidas',
373
-	'info_nom_site' => 'Nome do seu site',
374
-	'info_nombre_articles' => '@nb_articles@ matérias,',
375
-	'info_nombre_rubriques' => '@nb_rubriques@ seções,',
376
-	'info_nombre_sites' => '@nb_sites@ sites,',
377
-	'info_non_deplacer' => 'Não mover...',
378
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'O SPIP pode enviar regularmente o anúncio das últimas novidades do site (matérias e notas publicadas recentemente).',
379
-	'info_non_envoi_liste_nouveautes' => 'Não enviar a lista de novidades',
380
-	'info_non_modifiable' => 'não pode ser modificado',
381
-	'info_non_suppression_mot_cle' => 'Eu não quero excluir esta palavra-chave.',
382
-	'info_notes' => 'Observações',
383
-	'info_nouvel_article' => 'Nova matéria',
384
-	'info_nouvelle_traduction' => 'Nova tradução:',
385
-	'info_numero_article' => 'MATÉRIA NÚMERO:',
386
-	'info_obligatoire_02' => '(obrigatório)',
387
-	'info_option_accepter_visiteurs' => 'Aceitar a inscrição de visitantes do site público',
388
-	'info_option_ne_pas_accepter_visiteurs' => 'Recusar a inscrição dos visitantes',
389
-	'info_options_avancees' => 'OPÇÕES AVANÇADAS',
390
-	'info_ou' => 'ou...',
391
-	'info_page_interdite' => 'Página não autorizada',
392
-	'info_par_nom' => 'por nome',
393
-	'info_par_nombre_article' => 'por número de matérias',
394
-	'info_par_statut' => 'por status',
395
-	'info_par_tri' => '’(por @tri@)’',
396
-	'info_passe_trop_court' => 'Senha muito curta.',
397
-	'info_passe_trop_court_car_pluriel' => 'A senha deve conter pelo menos @nb@ caracteres.',
398
-	'info_passes_identiques' => 'As duas senhas não são idênticas.',
399
-	'info_plus_cinq_car' => 'mais de 5 caracteres',
400
-	'info_plus_cinq_car_2' => '(Mais de 5 caracteres)',
401
-	'info_plus_trois_car' => '(Mais de 3 caracteres)',
402
-	'info_popularite' => 'popularidade: @popularite@; visitas: @visites@',
403
-	'info_post_scriptum' => 'Rodapé',
404
-	'info_post_scriptum_2' => 'Rodapé:',
405
-	'info_pour' => 'para',
406
-	'info_preview_texte' => 'É possível visualizar os diferentes elementos editoriais do site que tenham  pelo menos o status de «proposto», bem como os elementos em fase de redação de que se é autor. Esta funcionalidade deve estar disponível para os administradores, para os redatores, ou para ninguém?',
407
-	'info_procedez_par_etape' => 'proceder passo-a-passo',
408
-	'info_procedure_maj_version' => 'o procedimento de atualização deve ser rodado para adaptar a base de dados à nova versão do SPIP.',
409
-	'info_proxy_ok' => 'Teste do proxy bem sucedido',
410
-	'info_ps' => 'P.S.',
411
-	'info_publier' => 'publicar',
412
-	'info_publies' => 'Suas matérias publicadas online',
413
-	'info_question_accepter_visiteurs' => 'Se os templates do seu site prevêem o cadastramento de visitantes sem acesso à área privada, por favor, ative a opção abaixo:',
414
-	'info_question_inscription_nouveaux_redacteurs' => 'Você quer aceitar inscrições de novos redatores a partir do site público? Se você aceitar, os visitantes poderão se cadastrar através de um formulário automatizado, tendo acesso à área privada para propôr as suas próprias matérias. <div class="notice">Durante a fase de inscrição, os usuários recebem um e-mail automático, fornecendo-lhes os seus códigos de acesso à área privada. Alguns serviços de hospedagem desativam o envio de e-mails a partir dos seus servidores: nesse caso, a inscrição automática é impossível.</div>',
415
-	'info_qui_edite' => '@nom_auteur_modif@ trabalhou neste conteúdo há @date_diff@ minutos',
416
-	'info_racine_site' => 'Raiz do site',
417
-	'info_recharger_page' => 'Por favor, atualize esta página em alguns instantes.',
418
-	'info_recherche_auteur_zero' => 'Nenhum resultado para «@cherche_auteur@».',
419
-	'info_recommencer' => 'Por favor, recomece.',
420
-	'info_redacteur_1' => 'Redator',
421
-	'info_redacteur_2' => 'com acesso à área privada (<i>recomendado</i>)',
422
-	'info_redacteurs' => 'Redatores',
423
-	'info_redaction_en_cours' => 'EM FASE DE REDAÇÃO',
424
-	'info_redirection' => 'Redirecionamento',
425
-	'info_redirection_activee' => 'O redirecionamento foi ativado.',
426
-	'info_redirection_boucle' => 'Você tentou redirecionar a matéria para ela mesma.',
427
-	'info_redirection_desactivee' => 'O redirecionamento foi excluído.',
428
-	'info_refuses' => 'Suas matérias recusadas',
429
-	'info_reglage_ldap' => 'Opções: <b>Configuração da importação LDAP</b>',
430
-	'info_renvoi_article' => '<b>Redirecionamento.</b> Esta matéria redireciona para a página:',
431
-	'info_reserve_admin' => 'Apenas os administradores podem alterar este endereço.',
432
-	'info_restreindre_rubrique' => 'Restringir o gerenciamento à seção:',
433
-	'info_resultat_recherche' => 'Resultados da busca:',
434
-	'info_rubriques' => 'Seções',
435
-	'info_rubriques_02' => 'seções',
436
-	'info_rubriques_trouvees' => 'Seções encontradas',
437
-	'info_sans_titre' => 'Sem título',
438
-	'info_selection_chemin_acces' => '<b>Selecione</b> a seguir o caminho para acessar o diretório:',
439
-	'info_signatures' => 'assinaturas',
440
-	'info_site' => 'Site',
441
-	'info_site_2' => 'site:',
442
-	'info_site_min' => 'site',
443
-	'info_site_reference_2' => 'Site referenciado',
444
-	'info_site_web' => 'Website:',
445
-	'info_sites' => 'sites',
446
-	'info_sites_lies_mot' => 'Os sites referenciados vinculados a esta palavra-chave',
447
-	'info_sites_proxy' => 'Utilizar um proxy',
448
-	'info_sites_trouves' => 'Sites encontrados',
449
-	'info_sous_titre' => 'Subtítulo:',
450
-	'info_statut_administrateur' => 'Administrador',
451
-	'info_statut_auteur' => 'Status deste autor:',
452
-	'info_statut_auteur_2' => 'Eu sou',
453
-	'info_statut_auteur_a_confirmer' => 'Inscrição a confirmar',
454
-	'info_statut_auteur_autre' => 'Outro status:',
455
-	'info_statut_redacteur' => 'Redator',
456
-	'info_statut_utilisateurs_1' => 'Status padrão dos usuários importados',
457
-	'info_statut_utilisateurs_2' => 'Escolha o status atribuído às pessoas que constam do diretório LDAP, quando elas se conectarem pela primeira vêz. Você poderá, em seguida, alterar caso a caso este valor para cada autor.',
458
-	'info_suivi_activite' => 'Acompanhamento da atividade editorial',
459
-	'info_surtitre' => 'Sobretítulo:',
460
-	'info_syndication_integrale_1' => 'O seu site propõe arquivos de sindicação (ver «<a href="@url@">@titre@</a>»).',
461
-	'info_syndication_integrale_2' => 'Você deseja transmitir as matérias integralmente, ou difundir apenas um resumo de algumas centenas de caracteres?',
462
-	'info_table_prefix' => 'Você pode alterar o prefixo do nome das tabelas de dados (indispensável no caso de pretender instalar diversos sites na mesma base de dados). Este prefixo deve estar em minúsculas, não acentuadas, e sem espaços.',
463
-	'info_taille_maximale_images' => 'SPIP irá testar o tamanho máximo das imagens que o sistema pode tratar (em milhões de pixels).<br />As imagens muito grandes não serão reduzidas.',
464
-	'info_taille_maximale_vignette' => 'Tamanho máximo dos ícones gerados pelo sistema:',
465
-	'info_terminer_installation' => 'Você pode agora terminar o procedimento de instalação padrão.',
466
-	'info_texte' => 'Texto',
467
-	'info_texte_explicatif' => 'Texto explicativo',
468
-	'info_texte_long' => '(o texto é longo: ele aparecerá em diversas partes que serão recombinadas após validação.)',
469
-	'info_texte_message' => 'Texto da sua mensagem',
470
-	'info_texte_message_02' => 'Texto da mensagem',
471
-	'info_titre' => 'Título:',
472
-	'info_total' => 'total:',
473
-	'info_tous_articles_en_redaction' => 'Todas as matérias em fase de redação',
474
-	'info_tous_articles_presents' => 'Todas as matérias publicadas nesta seção',
475
-	'info_tous_articles_refuses' => 'Todas as matérias recusadas',
476
-	'info_tous_les' => 'todos os:',
477
-	'info_tout_site' => 'Todo o site',
478
-	'info_tout_site2' => 'A matéria não foi traduzida para este idioma.',
479
-	'info_tout_site3' => 'A matéria foi traduzida para este idioma, mas foram feitas alterações na matéria de referência. A tradução procisa ser atualizada.',
480
-	'info_tout_site4' => 'A matéria foi traduzida para este idioma e a tradução está em dia.',
481
-	'info_tout_site5' => 'Matéria original.',
482
-	'info_tout_site6' => '<b>Atenção:</b> apenas as matérias originais estão exibidas.
362
+    'info_multi_objets' => '@objets@ : ativar o menu de idioma',
363
+    'info_multi_secteurs' => '... apenas para as seções situadas na raiz?',
364
+    'info_nb_articles' => '@nb@ matérias',
365
+    'info_nb_auteurs' => '@nb@ autores',
366
+    'info_nb_messages' => '@nb@ mensagens',
367
+    'info_nb_mots_cles' => '@nb@ palavras-chave',
368
+    'info_nb_rubriques' => '@nb@ seções',
369
+    'info_nb_visiteurs' => '@nb@ visitantes',
370
+    'info_nom' => 'Nome',
371
+    'info_nom_destinataire' => 'Nome do destinatário',
372
+    'info_nom_pas_conforme' => 'tags HTML não são permitidas',
373
+    'info_nom_site' => 'Nome do seu site',
374
+    'info_nombre_articles' => '@nb_articles@ matérias,',
375
+    'info_nombre_rubriques' => '@nb_rubriques@ seções,',
376
+    'info_nombre_sites' => '@nb_sites@ sites,',
377
+    'info_non_deplacer' => 'Não mover...',
378
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'O SPIP pode enviar regularmente o anúncio das últimas novidades do site (matérias e notas publicadas recentemente).',
379
+    'info_non_envoi_liste_nouveautes' => 'Não enviar a lista de novidades',
380
+    'info_non_modifiable' => 'não pode ser modificado',
381
+    'info_non_suppression_mot_cle' => 'Eu não quero excluir esta palavra-chave.',
382
+    'info_notes' => 'Observações',
383
+    'info_nouvel_article' => 'Nova matéria',
384
+    'info_nouvelle_traduction' => 'Nova tradução:',
385
+    'info_numero_article' => 'MATÉRIA NÚMERO:',
386
+    'info_obligatoire_02' => '(obrigatório)',
387
+    'info_option_accepter_visiteurs' => 'Aceitar a inscrição de visitantes do site público',
388
+    'info_option_ne_pas_accepter_visiteurs' => 'Recusar a inscrição dos visitantes',
389
+    'info_options_avancees' => 'OPÇÕES AVANÇADAS',
390
+    'info_ou' => 'ou...',
391
+    'info_page_interdite' => 'Página não autorizada',
392
+    'info_par_nom' => 'por nome',
393
+    'info_par_nombre_article' => 'por número de matérias',
394
+    'info_par_statut' => 'por status',
395
+    'info_par_tri' => '’(por @tri@)’',
396
+    'info_passe_trop_court' => 'Senha muito curta.',
397
+    'info_passe_trop_court_car_pluriel' => 'A senha deve conter pelo menos @nb@ caracteres.',
398
+    'info_passes_identiques' => 'As duas senhas não são idênticas.',
399
+    'info_plus_cinq_car' => 'mais de 5 caracteres',
400
+    'info_plus_cinq_car_2' => '(Mais de 5 caracteres)',
401
+    'info_plus_trois_car' => '(Mais de 3 caracteres)',
402
+    'info_popularite' => 'popularidade: @popularite@; visitas: @visites@',
403
+    'info_post_scriptum' => 'Rodapé',
404
+    'info_post_scriptum_2' => 'Rodapé:',
405
+    'info_pour' => 'para',
406
+    'info_preview_texte' => 'É possível visualizar os diferentes elementos editoriais do site que tenham  pelo menos o status de «proposto», bem como os elementos em fase de redação de que se é autor. Esta funcionalidade deve estar disponível para os administradores, para os redatores, ou para ninguém?',
407
+    'info_procedez_par_etape' => 'proceder passo-a-passo',
408
+    'info_procedure_maj_version' => 'o procedimento de atualização deve ser rodado para adaptar a base de dados à nova versão do SPIP.',
409
+    'info_proxy_ok' => 'Teste do proxy bem sucedido',
410
+    'info_ps' => 'P.S.',
411
+    'info_publier' => 'publicar',
412
+    'info_publies' => 'Suas matérias publicadas online',
413
+    'info_question_accepter_visiteurs' => 'Se os templates do seu site prevêem o cadastramento de visitantes sem acesso à área privada, por favor, ative a opção abaixo:',
414
+    'info_question_inscription_nouveaux_redacteurs' => 'Você quer aceitar inscrições de novos redatores a partir do site público? Se você aceitar, os visitantes poderão se cadastrar através de um formulário automatizado, tendo acesso à área privada para propôr as suas próprias matérias. <div class="notice">Durante a fase de inscrição, os usuários recebem um e-mail automático, fornecendo-lhes os seus códigos de acesso à área privada. Alguns serviços de hospedagem desativam o envio de e-mails a partir dos seus servidores: nesse caso, a inscrição automática é impossível.</div>',
415
+    'info_qui_edite' => '@nom_auteur_modif@ trabalhou neste conteúdo há @date_diff@ minutos',
416
+    'info_racine_site' => 'Raiz do site',
417
+    'info_recharger_page' => 'Por favor, atualize esta página em alguns instantes.',
418
+    'info_recherche_auteur_zero' => 'Nenhum resultado para «@cherche_auteur@».',
419
+    'info_recommencer' => 'Por favor, recomece.',
420
+    'info_redacteur_1' => 'Redator',
421
+    'info_redacteur_2' => 'com acesso à área privada (<i>recomendado</i>)',
422
+    'info_redacteurs' => 'Redatores',
423
+    'info_redaction_en_cours' => 'EM FASE DE REDAÇÃO',
424
+    'info_redirection' => 'Redirecionamento',
425
+    'info_redirection_activee' => 'O redirecionamento foi ativado.',
426
+    'info_redirection_boucle' => 'Você tentou redirecionar a matéria para ela mesma.',
427
+    'info_redirection_desactivee' => 'O redirecionamento foi excluído.',
428
+    'info_refuses' => 'Suas matérias recusadas',
429
+    'info_reglage_ldap' => 'Opções: <b>Configuração da importação LDAP</b>',
430
+    'info_renvoi_article' => '<b>Redirecionamento.</b> Esta matéria redireciona para a página:',
431
+    'info_reserve_admin' => 'Apenas os administradores podem alterar este endereço.',
432
+    'info_restreindre_rubrique' => 'Restringir o gerenciamento à seção:',
433
+    'info_resultat_recherche' => 'Resultados da busca:',
434
+    'info_rubriques' => 'Seções',
435
+    'info_rubriques_02' => 'seções',
436
+    'info_rubriques_trouvees' => 'Seções encontradas',
437
+    'info_sans_titre' => 'Sem título',
438
+    'info_selection_chemin_acces' => '<b>Selecione</b> a seguir o caminho para acessar o diretório:',
439
+    'info_signatures' => 'assinaturas',
440
+    'info_site' => 'Site',
441
+    'info_site_2' => 'site:',
442
+    'info_site_min' => 'site',
443
+    'info_site_reference_2' => 'Site referenciado',
444
+    'info_site_web' => 'Website:',
445
+    'info_sites' => 'sites',
446
+    'info_sites_lies_mot' => 'Os sites referenciados vinculados a esta palavra-chave',
447
+    'info_sites_proxy' => 'Utilizar um proxy',
448
+    'info_sites_trouves' => 'Sites encontrados',
449
+    'info_sous_titre' => 'Subtítulo:',
450
+    'info_statut_administrateur' => 'Administrador',
451
+    'info_statut_auteur' => 'Status deste autor:',
452
+    'info_statut_auteur_2' => 'Eu sou',
453
+    'info_statut_auteur_a_confirmer' => 'Inscrição a confirmar',
454
+    'info_statut_auteur_autre' => 'Outro status:',
455
+    'info_statut_redacteur' => 'Redator',
456
+    'info_statut_utilisateurs_1' => 'Status padrão dos usuários importados',
457
+    'info_statut_utilisateurs_2' => 'Escolha o status atribuído às pessoas que constam do diretório LDAP, quando elas se conectarem pela primeira vêz. Você poderá, em seguida, alterar caso a caso este valor para cada autor.',
458
+    'info_suivi_activite' => 'Acompanhamento da atividade editorial',
459
+    'info_surtitre' => 'Sobretítulo:',
460
+    'info_syndication_integrale_1' => 'O seu site propõe arquivos de sindicação (ver «<a href="@url@">@titre@</a>»).',
461
+    'info_syndication_integrale_2' => 'Você deseja transmitir as matérias integralmente, ou difundir apenas um resumo de algumas centenas de caracteres?',
462
+    'info_table_prefix' => 'Você pode alterar o prefixo do nome das tabelas de dados (indispensável no caso de pretender instalar diversos sites na mesma base de dados). Este prefixo deve estar em minúsculas, não acentuadas, e sem espaços.',
463
+    'info_taille_maximale_images' => 'SPIP irá testar o tamanho máximo das imagens que o sistema pode tratar (em milhões de pixels).<br />As imagens muito grandes não serão reduzidas.',
464
+    'info_taille_maximale_vignette' => 'Tamanho máximo dos ícones gerados pelo sistema:',
465
+    'info_terminer_installation' => 'Você pode agora terminar o procedimento de instalação padrão.',
466
+    'info_texte' => 'Texto',
467
+    'info_texte_explicatif' => 'Texto explicativo',
468
+    'info_texte_long' => '(o texto é longo: ele aparecerá em diversas partes que serão recombinadas após validação.)',
469
+    'info_texte_message' => 'Texto da sua mensagem',
470
+    'info_texte_message_02' => 'Texto da mensagem',
471
+    'info_titre' => 'Título:',
472
+    'info_total' => 'total:',
473
+    'info_tous_articles_en_redaction' => 'Todas as matérias em fase de redação',
474
+    'info_tous_articles_presents' => 'Todas as matérias publicadas nesta seção',
475
+    'info_tous_articles_refuses' => 'Todas as matérias recusadas',
476
+    'info_tous_les' => 'todos os:',
477
+    'info_tout_site' => 'Todo o site',
478
+    'info_tout_site2' => 'A matéria não foi traduzida para este idioma.',
479
+    'info_tout_site3' => 'A matéria foi traduzida para este idioma, mas foram feitas alterações na matéria de referência. A tradução procisa ser atualizada.',
480
+    'info_tout_site4' => 'A matéria foi traduzida para este idioma e a tradução está em dia.',
481
+    'info_tout_site5' => 'Matéria original.',
482
+    'info_tout_site6' => '<b>Atenção:</b> apenas as matérias originais estão exibidas.
483 483
 As traduções estão associadas ao original, numa côr que indica o seu status:',
484
-	'info_traductions' => 'Traduções',
485
-	'info_travail_colaboratif' => 'Trabalho colaborativo nas matérias',
486
-	'info_un_article' => 'uma matéria,',
487
-	'info_un_site' => 'um site,',
488
-	'info_une_rubrique' => 'uma seção,',
489
-	'info_une_rubrique_02' => '1 seção',
490
-	'info_url' => 'URL:',
491
-	'info_url_proxy' => 'URL do proxy',
492
-	'info_url_proxy_pas_conforme' => 'O URL do proxy não é válido.',
493
-	'info_url_site_pas_conforme' => 'O URL do site não é válido.',
494
-	'info_url_test_proxy' => 'URL de teste',
495
-	'info_urlref' => 'Link hipertexto:',
496
-	'info_utilisation_spip' => 'Você pode agora começar a utilizar o sistema de publicação assistida...',
497
-	'info_visites_par_mois' => 'Exibir por mês:',
498
-	'info_visiteur_1' => 'Visitante',
499
-	'info_visiteur_2' => 'do site público',
500
-	'info_visiteurs' => 'Visitantes',
501
-	'info_visiteurs_02' => 'Visitantes do site público',
502
-	'info_webmestre_forces' => 'Os webmasters são definidos em <tt>@file_options@</tt>.',
503
-	'install_adresse_base_hebergeur' => 'Endereço da base de dados atribuído pelo serviço de hospedagem:',
504
-	'install_connect_ok' => 'A nova base de dados foi corretamente declarada sob o nome de servidor @connect@.',
505
-	'install_echec_annonce' => 'A instalação irá, provavelmente, falhar, ou levar a um site que não funciona...',
506
-	'install_extension_mbstring' => 'O SPIP não funciona com:',
507
-	'install_extension_php_obligatoire' => 'O SPIP exige a extensão php:',
508
-	'install_login_base_hebergeur' => 'Login de conexão atribuído pelo serviço de hospedagem:',
509
-	'install_nom_base_hebergeur' => 'Nome da base atribuído pelo serviço de hospedagem:',
510
-	'install_pas_table' => 'Base atualmente sem tabelas',
511
-	'install_pass_base_hebergeur' => 'Senha de conexão atribuída pelo serviço de hospedagem',
512
-	'install_php_version' => 'PHP versão @version@ é insuficiente (mínimo = @minimum@)',
513
-	'install_select_langue' => 'Escolha um idioma e clique no botão «avançar» para iniciar o procedimento de instalação.',
514
-	'install_select_type_db' => 'Indicar o tipo de base de dados:',
515
-	'install_select_type_mysql' => 'MySQL',
516
-	'install_select_type_pg' => 'PostgreSQL',
517
-	'install_select_type_sqlite2' => 'SQLite 2',
518
-	'install_select_type_sqlite3' => 'SQLite 3',
519
-	'install_serveur_hebergeur' => 'Servidor de base de dados atribuído pelo serviço de hospedagem',
520
-	'install_table_prefix_hebergeur' => 'Prefixo de tabela atribuído pelo serviço de hospedagem:',
521
-	'install_tables_base' => 'Tabelas da base',
522
-	'install_types_db_connus' => 'SPIP pode usar <b>MySQL</b> (a mais comum), e <b>SQLite</b>.',
523
-	'install_types_db_connus_avertissement' => 'O suporte ao <b>PostgreSQL</b> é também proposto a título experimental',
524
-	'instituer_erreur_statut_a_change' => 'O status já foi alterado',
525
-	'instituer_erreur_statut_non_autorise' => 'Você não pode escolher este status',
526
-	'intem_redacteur' => 'redator',
527
-	'intitule_licence' => 'Licença',
528
-	'item_accepter_inscriptions' => 'Aceitar as inscrições',
529
-	'item_activer_messages_avertissement' => 'Ativar as mensagens de aviso',
530
-	'item_administrateur_2' => 'administrador',
531
-	'item_afficher_calendrier' => 'Exibir no calendário',
532
-	'item_autoriser_syndication_integrale' => 'Difundir a íntegra das matérias nos arquivos de sindicação',
533
-	'item_choix_administrateurs' => 'os administradores',
534
-	'item_choix_generation_miniature' => 'Gerar automaticamente as miniaturas das imagens.',
535
-	'item_choix_non_generation_miniature' => 'Não gerar as miniaturas das imagens.',
536
-	'item_choix_redacteurs' => 'os redatores',
537
-	'item_choix_visiteurs' => 'os visitantes do site público',
538
-	'item_creer_fichiers_authent' => 'Criar os arquivos .htpasswd',
539
-	'item_login' => 'Login',
540
-	'item_messagerie_agenda' => 'Ativar as mesagens internas e a agenda',
541
-	'item_mots_cles_association_articles' => 'às matérias',
542
-	'item_mots_cles_association_rubriques' => 'às seções',
543
-	'item_mots_cles_association_sites' => 'aos sites referenciados ou sindicados.',
544
-	'item_non' => 'Não',
545
-	'item_non_accepter_inscriptions' => 'Não aceitar inscrições',
546
-	'item_non_activer_messages_avertissement' => 'Sem mensagens de aviso',
547
-	'item_non_afficher_calendrier' => 'Não exibir no calendário',
548
-	'item_non_autoriser_syndication_integrale' => 'Difundir apenas um resumo',
549
-	'item_non_creer_fichiers_authent' => 'Não criar os arquivos',
550
-	'item_non_messagerie_agenda' => 'Desativar as mensagens internas e a agenda',
551
-	'item_non_publier_articles' => 'Não publicar as matérias antes da data de publicação fixada.',
552
-	'item_nouvel_auteur' => 'Novo autor',
553
-	'item_nouvelle_rubrique' => 'Nova seção',
554
-	'item_oui' => 'Sim',
555
-	'item_publier_articles' => 'Publicar as matérias seja qual for a sua data de publicação.',
556
-	'item_reponse_article' => 'Resposta à matéria',
557
-	'item_visiteur' => 'Visitante',
484
+    'info_traductions' => 'Traduções',
485
+    'info_travail_colaboratif' => 'Trabalho colaborativo nas matérias',
486
+    'info_un_article' => 'uma matéria,',
487
+    'info_un_site' => 'um site,',
488
+    'info_une_rubrique' => 'uma seção,',
489
+    'info_une_rubrique_02' => '1 seção',
490
+    'info_url' => 'URL:',
491
+    'info_url_proxy' => 'URL do proxy',
492
+    'info_url_proxy_pas_conforme' => 'O URL do proxy não é válido.',
493
+    'info_url_site_pas_conforme' => 'O URL do site não é válido.',
494
+    'info_url_test_proxy' => 'URL de teste',
495
+    'info_urlref' => 'Link hipertexto:',
496
+    'info_utilisation_spip' => 'Você pode agora começar a utilizar o sistema de publicação assistida...',
497
+    'info_visites_par_mois' => 'Exibir por mês:',
498
+    'info_visiteur_1' => 'Visitante',
499
+    'info_visiteur_2' => 'do site público',
500
+    'info_visiteurs' => 'Visitantes',
501
+    'info_visiteurs_02' => 'Visitantes do site público',
502
+    'info_webmestre_forces' => 'Os webmasters são definidos em <tt>@file_options@</tt>.',
503
+    'install_adresse_base_hebergeur' => 'Endereço da base de dados atribuído pelo serviço de hospedagem:',
504
+    'install_connect_ok' => 'A nova base de dados foi corretamente declarada sob o nome de servidor @connect@.',
505
+    'install_echec_annonce' => 'A instalação irá, provavelmente, falhar, ou levar a um site que não funciona...',
506
+    'install_extension_mbstring' => 'O SPIP não funciona com:',
507
+    'install_extension_php_obligatoire' => 'O SPIP exige a extensão php:',
508
+    'install_login_base_hebergeur' => 'Login de conexão atribuído pelo serviço de hospedagem:',
509
+    'install_nom_base_hebergeur' => 'Nome da base atribuído pelo serviço de hospedagem:',
510
+    'install_pas_table' => 'Base atualmente sem tabelas',
511
+    'install_pass_base_hebergeur' => 'Senha de conexão atribuída pelo serviço de hospedagem',
512
+    'install_php_version' => 'PHP versão @version@ é insuficiente (mínimo = @minimum@)',
513
+    'install_select_langue' => 'Escolha um idioma e clique no botão «avançar» para iniciar o procedimento de instalação.',
514
+    'install_select_type_db' => 'Indicar o tipo de base de dados:',
515
+    'install_select_type_mysql' => 'MySQL',
516
+    'install_select_type_pg' => 'PostgreSQL',
517
+    'install_select_type_sqlite2' => 'SQLite 2',
518
+    'install_select_type_sqlite3' => 'SQLite 3',
519
+    'install_serveur_hebergeur' => 'Servidor de base de dados atribuído pelo serviço de hospedagem',
520
+    'install_table_prefix_hebergeur' => 'Prefixo de tabela atribuído pelo serviço de hospedagem:',
521
+    'install_tables_base' => 'Tabelas da base',
522
+    'install_types_db_connus' => 'SPIP pode usar <b>MySQL</b> (a mais comum), e <b>SQLite</b>.',
523
+    'install_types_db_connus_avertissement' => 'O suporte ao <b>PostgreSQL</b> é também proposto a título experimental',
524
+    'instituer_erreur_statut_a_change' => 'O status já foi alterado',
525
+    'instituer_erreur_statut_non_autorise' => 'Você não pode escolher este status',
526
+    'intem_redacteur' => 'redator',
527
+    'intitule_licence' => 'Licença',
528
+    'item_accepter_inscriptions' => 'Aceitar as inscrições',
529
+    'item_activer_messages_avertissement' => 'Ativar as mensagens de aviso',
530
+    'item_administrateur_2' => 'administrador',
531
+    'item_afficher_calendrier' => 'Exibir no calendário',
532
+    'item_autoriser_syndication_integrale' => 'Difundir a íntegra das matérias nos arquivos de sindicação',
533
+    'item_choix_administrateurs' => 'os administradores',
534
+    'item_choix_generation_miniature' => 'Gerar automaticamente as miniaturas das imagens.',
535
+    'item_choix_non_generation_miniature' => 'Não gerar as miniaturas das imagens.',
536
+    'item_choix_redacteurs' => 'os redatores',
537
+    'item_choix_visiteurs' => 'os visitantes do site público',
538
+    'item_creer_fichiers_authent' => 'Criar os arquivos .htpasswd',
539
+    'item_login' => 'Login',
540
+    'item_messagerie_agenda' => 'Ativar as mesagens internas e a agenda',
541
+    'item_mots_cles_association_articles' => 'às matérias',
542
+    'item_mots_cles_association_rubriques' => 'às seções',
543
+    'item_mots_cles_association_sites' => 'aos sites referenciados ou sindicados.',
544
+    'item_non' => 'Não',
545
+    'item_non_accepter_inscriptions' => 'Não aceitar inscrições',
546
+    'item_non_activer_messages_avertissement' => 'Sem mensagens de aviso',
547
+    'item_non_afficher_calendrier' => 'Não exibir no calendário',
548
+    'item_non_autoriser_syndication_integrale' => 'Difundir apenas um resumo',
549
+    'item_non_creer_fichiers_authent' => 'Não criar os arquivos',
550
+    'item_non_messagerie_agenda' => 'Desativar as mensagens internas e a agenda',
551
+    'item_non_publier_articles' => 'Não publicar as matérias antes da data de publicação fixada.',
552
+    'item_nouvel_auteur' => 'Novo autor',
553
+    'item_nouvelle_rubrique' => 'Nova seção',
554
+    'item_oui' => 'Sim',
555
+    'item_publier_articles' => 'Publicar as matérias seja qual for a sua data de publicação.',
556
+    'item_reponse_article' => 'Resposta à matéria',
557
+    'item_visiteur' => 'Visitante',
558 558
 
559
-	// J
560
-	'jour_non_connu_nc' => 'n.c.',
559
+    // J
560
+    'jour_non_connu_nc' => 'n.c.',
561 561
 
562
-	// L
563
-	'label_bando_outils' => 'Barra de ferramentas',
564
-	'label_bando_outils_afficher' => 'Exibir as ferramentas',
565
-	'label_bando_outils_masquer' => 'Esconder as ferramentas',
566
-	'label_choix_langue' => 'Escolha o seu idioma',
567
-	'label_nom_fichier_connect' => 'Informe o nome usado por este servidor',
568
-	'label_slogan_site' => 'Slogan do site',
569
-	'label_taille_ecran' => 'Largura da tela',
570
-	'label_texte_et_icones_navigation' => 'Menu de navegação',
571
-	'label_texte_et_icones_page' => 'Exibição na página',
572
-	'ldap_correspondance' => 'herança do campo @champ@',
573
-	'ldap_correspondance_1' => 'Herança dos campos LDAP',
574
-	'ldap_correspondance_2' => 'Para cada um dos campos SPIP a seguir, indique o nome do campo LDAP correspondente. Deixe em branco para não preencher, separe por espaços ou vírgulas para tentar vários campos LDAP.',
575
-	'lien_ajouter_auteur' => 'Incluir este autor',
576
-	'lien_ajouter_une_rubrique' => 'Incluir esta seção',
577
-	'lien_email' => 'e-mail',
578
-	'lien_nom_site' => 'NOME DO SITE:',
579
-	'lien_rapide_contenu' => 'Ir para o conteúdo',
580
-	'lien_rapide_navigation' => 'Ir para a navegação',
581
-	'lien_rapide_recherche' => 'Ir para a busca',
582
-	'lien_retirer_auteur' => 'Retirar o autor',
583
-	'lien_retirer_rubrique' => 'Excluir a seção',
584
-	'lien_retirer_tous_auteurs' => 'Retirar todos os autores',
585
-	'lien_retirer_toutes_rubriques' => 'Retirar todas as seções',
586
-	'lien_site' => 'site',
587
-	'lien_tout_decocher' => 'Desmarcar tudo',
588
-	'lien_tout_deplier' => 'Expandir tudo',
589
-	'lien_tout_replier' => 'Retrair tudo',
590
-	'lien_tout_supprimer' => 'Excluir tudo',
591
-	'lien_trier_nom' => 'Ordenar pelo nome',
592
-	'lien_trier_nombre_articles' => 'Ordenar por número de matérias',
593
-	'lien_trier_statut' => 'Ordenar pelo status',
594
-	'lien_voir_en_ligne' => 'VER ONLINE:',
595
-	'logo_article' => 'Ícone da matéria',
596
-	'logo_auteur' => 'Ícone do autor',
597
-	'logo_rubrique' => 'Ícone da seção',
598
-	'logo_site' => 'Ícone deste site',
599
-	'logo_standard_rubrique' => 'Ícone padrão das seções',
600
-	'logo_survol' => 'Ícone para mouseOver',
562
+    // L
563
+    'label_bando_outils' => 'Barra de ferramentas',
564
+    'label_bando_outils_afficher' => 'Exibir as ferramentas',
565
+    'label_bando_outils_masquer' => 'Esconder as ferramentas',
566
+    'label_choix_langue' => 'Escolha o seu idioma',
567
+    'label_nom_fichier_connect' => 'Informe o nome usado por este servidor',
568
+    'label_slogan_site' => 'Slogan do site',
569
+    'label_taille_ecran' => 'Largura da tela',
570
+    'label_texte_et_icones_navigation' => 'Menu de navegação',
571
+    'label_texte_et_icones_page' => 'Exibição na página',
572
+    'ldap_correspondance' => 'herança do campo @champ@',
573
+    'ldap_correspondance_1' => 'Herança dos campos LDAP',
574
+    'ldap_correspondance_2' => 'Para cada um dos campos SPIP a seguir, indique o nome do campo LDAP correspondente. Deixe em branco para não preencher, separe por espaços ou vírgulas para tentar vários campos LDAP.',
575
+    'lien_ajouter_auteur' => 'Incluir este autor',
576
+    'lien_ajouter_une_rubrique' => 'Incluir esta seção',
577
+    'lien_email' => 'e-mail',
578
+    'lien_nom_site' => 'NOME DO SITE:',
579
+    'lien_rapide_contenu' => 'Ir para o conteúdo',
580
+    'lien_rapide_navigation' => 'Ir para a navegação',
581
+    'lien_rapide_recherche' => 'Ir para a busca',
582
+    'lien_retirer_auteur' => 'Retirar o autor',
583
+    'lien_retirer_rubrique' => 'Excluir a seção',
584
+    'lien_retirer_tous_auteurs' => 'Retirar todos os autores',
585
+    'lien_retirer_toutes_rubriques' => 'Retirar todas as seções',
586
+    'lien_site' => 'site',
587
+    'lien_tout_decocher' => 'Desmarcar tudo',
588
+    'lien_tout_deplier' => 'Expandir tudo',
589
+    'lien_tout_replier' => 'Retrair tudo',
590
+    'lien_tout_supprimer' => 'Excluir tudo',
591
+    'lien_trier_nom' => 'Ordenar pelo nome',
592
+    'lien_trier_nombre_articles' => 'Ordenar por número de matérias',
593
+    'lien_trier_statut' => 'Ordenar pelo status',
594
+    'lien_voir_en_ligne' => 'VER ONLINE:',
595
+    'logo_article' => 'Ícone da matéria',
596
+    'logo_auteur' => 'Ícone do autor',
597
+    'logo_rubrique' => 'Ícone da seção',
598
+    'logo_site' => 'Ícone deste site',
599
+    'logo_standard_rubrique' => 'Ícone padrão das seções',
600
+    'logo_survol' => 'Ícone para mouseOver',
601 601
 
602
-	// M
603
-	'menu_aide_installation_choix_base' => 'Seleção da sua base',
604
-	'module_fichier_langue' => 'Arquivo de idioma',
605
-	'module_raccourci' => 'Atalho',
606
-	'module_texte_affiche' => 'Texto exibido',
607
-	'module_texte_explicatif' => 'Você pode inserir os atalhos a seguir nos templates do seu site público. Eles serão traduzidos automaticamente para os idiomas para os quais exista um arquivo de idioma.',
608
-	'module_texte_traduction' => 'O arquivo de idioma «@module@» está disponível em:',
609
-	'mois_non_connu' => 'desconhecido',
602
+    // M
603
+    'menu_aide_installation_choix_base' => 'Seleção da sua base',
604
+    'module_fichier_langue' => 'Arquivo de idioma',
605
+    'module_raccourci' => 'Atalho',
606
+    'module_texte_affiche' => 'Texto exibido',
607
+    'module_texte_explicatif' => 'Você pode inserir os atalhos a seguir nos templates do seu site público. Eles serão traduzidos automaticamente para os idiomas para os quais exista um arquivo de idioma.',
608
+    'module_texte_traduction' => 'O arquivo de idioma «@module@» está disponível em:',
609
+    'mois_non_connu' => 'desconhecido',
610 610
 
611
-	// N
612
-	'nouvelle_version_spip' => 'A versão @version@ do SPIP está disponível',
613
-	'nouvelle_version_spip_majeure' => 'Uma nova versão SPIP @version@ está disponível',
611
+    // N
612
+    'nouvelle_version_spip' => 'A versão @version@ do SPIP está disponível',
613
+    'nouvelle_version_spip_majeure' => 'Uma nova versão SPIP @version@ está disponível',
614 614
 
615
-	// O
616
-	'onglet_contenu' => 'Conteúdo',
617
-	'onglet_declarer_une_autre_base' => 'Configurar outra base',
618
-	'onglet_discuter' => 'Discutir',
619
-	'onglet_interactivite' => 'Interatividade',
620
-	'onglet_proprietes' => 'Propriedades',
621
-	'onglet_repartition_actuelle' => 'atualmente',
622
-	'onglet_sous_rubriques' => 'Subseções',
615
+    // O
616
+    'onglet_contenu' => 'Conteúdo',
617
+    'onglet_declarer_une_autre_base' => 'Configurar outra base',
618
+    'onglet_discuter' => 'Discutir',
619
+    'onglet_interactivite' => 'Interatividade',
620
+    'onglet_proprietes' => 'Propriedades',
621
+    'onglet_repartition_actuelle' => 'atualmente',
622
+    'onglet_sous_rubriques' => 'Subseções',
623 623
 
624
-	// P
625
-	'page_pas_proxy' => 'Esta página não deve passar pelo proxy',
626
-	'pas_de_proxy_pour' => 'Se necessário, indique as máquinas ou domínios para os quais este proxy não se aplica (por exemplo: @exemple@)',
627
-	'phpinfo' => 'Configuração PHP',
628
-	'plugin_charge_paquet' => 'Carregamento do pacote @name@',
629
-	'plugin_charger' => 'Transferir',
630
-	'plugin_erreur_charger' => 'erro: não foi possível carregar @zip@',
631
-	'plugin_erreur_droit1' => 'O diretório <code>@dest@</code> não está acessível para escrita.',
632
-	'plugin_erreur_droit2' => 'Por favor, verifique os direitos deste diretório (e criá-lo, caso não exista), ou instalar os arquivos por FTP.',
633
-	'plugin_erreur_zip' => 'falha pclzip: erro @status@',
634
-	'plugin_etat_developpement' => 'em desenvolvimento',
635
-	'plugin_etat_experimental' => 'experimental',
636
-	'plugin_etat_stable' => 'estável',
637
-	'plugin_etat_test' => 'em teste',
638
-	'plugin_impossible_activer' => 'Não foi possível ativar o plugin @plugin@',
639
-	'plugin_info_automatique1' => 'Se você deseja autorizar a instalaçào automática dos plugins, por favor:',
640
-	'plugin_info_automatique1_lib' => 'Se você deseja autorizar a instalação automática desta biblioteca, por favor:',
641
-	'plugin_info_automatique2' => 'crie um diretório <code>@rep@</code> ;',
642
-	'plugin_info_automatique3' => 'verifique se o servidor está autorizado a escrever neste diretório',
643
-	'plugin_info_automatique_creer' => 'a ser criado na raiz do site.',
644
-	'plugin_info_automatique_exemples' => 'exemplos:',
645
-	'plugin_info_automatique_ftp' => 'Você pode instalar os plugins, por FTP, no diretório <tt>@rep@</tt>',
646
-	'plugin_info_automatique_lib' => 'Alguns plugins precisam também poder transferir arquivos para o diretório <code>lib/</code>, a ser criado, caso não exista, na raiz do site.',
647
-	'plugin_info_automatique_liste' => 'Suas listas de plugins:',
648
-	'plugin_info_automatique_liste_officielle' => 'os plugins oficiais',
649
-	'plugin_info_automatique_liste_update' => 'Atualizar as listas',
650
-	'plugin_info_automatique_ou' => 'ou...',
651
-	'plugin_info_automatique_select' => 'Selecione abaixo um plugin: O SPIP o transferirá e o instalará no diretório <code>@rep@</code>; se o plugin já existir, será atualizado.',
652
-	'plugin_info_credit' => 'Créditos',
653
-	'plugin_info_erreur_xml' => 'A declaração deste plugin está incorreta',
654
-	'plugin_info_install_ok' => 'Instalação bem sucedida',
655
-	'plugin_info_necessite' => 'Requer:',
656
-	'plugin_info_non_compatible_spip' => 'Este plugin não é compatível com esta versão do SPIP',
657
-	'plugin_info_plugins_dist_1' => 'Os plugins abaixo são carregados e ativados no diretório @plugins_dist@.',
658
-	'plugin_info_plugins_dist_2' => 'Eles não são desativáveis.',
659
-	'plugin_info_telecharger' => 'transferir de @url@ e instalar em @rep@',
660
-	'plugin_info_upgrade_ok' => 'Atualização bem sucedida',
661
-	'plugin_librairies_installees' => 'Bibliotecas instaladas',
662
-	'plugin_necessite_extension_php' => 'Requer a extensão PHP @plugin@ na versão @version@.',
663
-	'plugin_necessite_extension_php_sans_version' => 'Requer a extensão PHP @plugin@',
664
-	'plugin_necessite_lib' => 'Este plugin precisa da biblioteca @lib@',
665
-	'plugin_necessite_php' => 'Requer @plugin@ na versão @version@.',
666
-	'plugin_necessite_plugin' => 'Precisa do plugin @plugin@, na versão @version@.',
667
-	'plugin_necessite_plugin_sans_version' => 'Precisa do plugin @plugin@',
668
-	'plugin_necessite_spip' => 'É necessário o SPIP na versão @version@, pelo menos.',
669
-	'plugin_source' => 'fonte: ',
670
-	'plugin_titre_automatique' => 'Instalação automática',
671
-	'plugin_titre_automatique_ajouter' => 'Incluir plugins',
672
-	'plugin_titre_installation' => 'Instalação do plugin @plugin@',
673
-	'plugin_titre_modifier' => 'Meus plugins',
674
-	'plugin_utilise_extension_php' => 'A extensão PHP @plugin@ deve estar na versão @version@.',
675
-	'plugin_utilise_php' => '@plugin@ deve estar na versão @version@.',
676
-	'plugin_utilise_plugin' => 'O plugin @plugin@ deve estar na versão @version@.',
677
-	'plugin_zip_active' => 'Continue para o ativar',
678
-	'plugin_zip_adresse' => 'Indique abaixo o endereço de um arquivo zip de plugin a ser transferido, ou ainda o endereço de uma lista de plugins.',
679
-	'plugin_zip_adresse_champ' => 'Endereço do plugin ou da lista',
680
-	'plugin_zip_content' => 'Ele contém os arquivos a seguir (@taille@),<br />prontos para serem instalados no diretório <code>@rep@</code>',
681
-	'plugin_zip_installe_finie' => 'O arquivo @zip@ foi descompactado e instalado.',
682
-	'plugin_zip_installe_rep_finie' => 'O arquivo @zip@ foi descompactado e instalado no diretório @rep@',
683
-	'plugin_zip_installer' => 'Você pode, agora, instalá-lo.',
684
-	'plugin_zip_telecharge' => 'O arquivo @zip@ foi transferido',
685
-	'plugins_actif_aucun' => 'Nenhum plugin ativado.',
686
-	'plugins_actif_un' => 'Um plugin ativado.',
687
-	'plugins_actifs' => '@count@ plugins ativados.',
688
-	'plugins_actifs_liste' => 'Ativos',
689
-	'plugins_compte' => '@count@ plugins',
690
-	'plugins_disponible_un' => 'Um plugin disponível.',
691
-	'plugins_disponibles' => '@count@ plugins disponiveis.',
692
-	'plugins_erreur' => 'Erro nos plugins: @plugins@',
693
-	'plugins_liste' => 'Lista dos plugins',
694
-	'plugins_liste_dist' => 'Plugins bloqueados',
695
-	'plugins_recents' => 'Plugins recentes.',
696
-	'plugins_tous_liste' => 'Todos',
697
-	'plugins_vue_hierarchie' => 'Hierarquia',
698
-	'plugins_vue_liste' => 'Lista',
699
-	'protocole_ldap' => 'Versão do protocolo:',
624
+    // P
625
+    'page_pas_proxy' => 'Esta página não deve passar pelo proxy',
626
+    'pas_de_proxy_pour' => 'Se necessário, indique as máquinas ou domínios para os quais este proxy não se aplica (por exemplo: @exemple@)',
627
+    'phpinfo' => 'Configuração PHP',
628
+    'plugin_charge_paquet' => 'Carregamento do pacote @name@',
629
+    'plugin_charger' => 'Transferir',
630
+    'plugin_erreur_charger' => 'erro: não foi possível carregar @zip@',
631
+    'plugin_erreur_droit1' => 'O diretório <code>@dest@</code> não está acessível para escrita.',
632
+    'plugin_erreur_droit2' => 'Por favor, verifique os direitos deste diretório (e criá-lo, caso não exista), ou instalar os arquivos por FTP.',
633
+    'plugin_erreur_zip' => 'falha pclzip: erro @status@',
634
+    'plugin_etat_developpement' => 'em desenvolvimento',
635
+    'plugin_etat_experimental' => 'experimental',
636
+    'plugin_etat_stable' => 'estável',
637
+    'plugin_etat_test' => 'em teste',
638
+    'plugin_impossible_activer' => 'Não foi possível ativar o plugin @plugin@',
639
+    'plugin_info_automatique1' => 'Se você deseja autorizar a instalaçào automática dos plugins, por favor:',
640
+    'plugin_info_automatique1_lib' => 'Se você deseja autorizar a instalação automática desta biblioteca, por favor:',
641
+    'plugin_info_automatique2' => 'crie um diretório <code>@rep@</code> ;',
642
+    'plugin_info_automatique3' => 'verifique se o servidor está autorizado a escrever neste diretório',
643
+    'plugin_info_automatique_creer' => 'a ser criado na raiz do site.',
644
+    'plugin_info_automatique_exemples' => 'exemplos:',
645
+    'plugin_info_automatique_ftp' => 'Você pode instalar os plugins, por FTP, no diretório <tt>@rep@</tt>',
646
+    'plugin_info_automatique_lib' => 'Alguns plugins precisam também poder transferir arquivos para o diretório <code>lib/</code>, a ser criado, caso não exista, na raiz do site.',
647
+    'plugin_info_automatique_liste' => 'Suas listas de plugins:',
648
+    'plugin_info_automatique_liste_officielle' => 'os plugins oficiais',
649
+    'plugin_info_automatique_liste_update' => 'Atualizar as listas',
650
+    'plugin_info_automatique_ou' => 'ou...',
651
+    'plugin_info_automatique_select' => 'Selecione abaixo um plugin: O SPIP o transferirá e o instalará no diretório <code>@rep@</code>; se o plugin já existir, será atualizado.',
652
+    'plugin_info_credit' => 'Créditos',
653
+    'plugin_info_erreur_xml' => 'A declaração deste plugin está incorreta',
654
+    'plugin_info_install_ok' => 'Instalação bem sucedida',
655
+    'plugin_info_necessite' => 'Requer:',
656
+    'plugin_info_non_compatible_spip' => 'Este plugin não é compatível com esta versão do SPIP',
657
+    'plugin_info_plugins_dist_1' => 'Os plugins abaixo são carregados e ativados no diretório @plugins_dist@.',
658
+    'plugin_info_plugins_dist_2' => 'Eles não são desativáveis.',
659
+    'plugin_info_telecharger' => 'transferir de @url@ e instalar em @rep@',
660
+    'plugin_info_upgrade_ok' => 'Atualização bem sucedida',
661
+    'plugin_librairies_installees' => 'Bibliotecas instaladas',
662
+    'plugin_necessite_extension_php' => 'Requer a extensão PHP @plugin@ na versão @version@.',
663
+    'plugin_necessite_extension_php_sans_version' => 'Requer a extensão PHP @plugin@',
664
+    'plugin_necessite_lib' => 'Este plugin precisa da biblioteca @lib@',
665
+    'plugin_necessite_php' => 'Requer @plugin@ na versão @version@.',
666
+    'plugin_necessite_plugin' => 'Precisa do plugin @plugin@, na versão @version@.',
667
+    'plugin_necessite_plugin_sans_version' => 'Precisa do plugin @plugin@',
668
+    'plugin_necessite_spip' => 'É necessário o SPIP na versão @version@, pelo menos.',
669
+    'plugin_source' => 'fonte: ',
670
+    'plugin_titre_automatique' => 'Instalação automática',
671
+    'plugin_titre_automatique_ajouter' => 'Incluir plugins',
672
+    'plugin_titre_installation' => 'Instalação do plugin @plugin@',
673
+    'plugin_titre_modifier' => 'Meus plugins',
674
+    'plugin_utilise_extension_php' => 'A extensão PHP @plugin@ deve estar na versão @version@.',
675
+    'plugin_utilise_php' => '@plugin@ deve estar na versão @version@.',
676
+    'plugin_utilise_plugin' => 'O plugin @plugin@ deve estar na versão @version@.',
677
+    'plugin_zip_active' => 'Continue para o ativar',
678
+    'plugin_zip_adresse' => 'Indique abaixo o endereço de um arquivo zip de plugin a ser transferido, ou ainda o endereço de uma lista de plugins.',
679
+    'plugin_zip_adresse_champ' => 'Endereço do plugin ou da lista',
680
+    'plugin_zip_content' => 'Ele contém os arquivos a seguir (@taille@),<br />prontos para serem instalados no diretório <code>@rep@</code>',
681
+    'plugin_zip_installe_finie' => 'O arquivo @zip@ foi descompactado e instalado.',
682
+    'plugin_zip_installe_rep_finie' => 'O arquivo @zip@ foi descompactado e instalado no diretório @rep@',
683
+    'plugin_zip_installer' => 'Você pode, agora, instalá-lo.',
684
+    'plugin_zip_telecharge' => 'O arquivo @zip@ foi transferido',
685
+    'plugins_actif_aucun' => 'Nenhum plugin ativado.',
686
+    'plugins_actif_un' => 'Um plugin ativado.',
687
+    'plugins_actifs' => '@count@ plugins ativados.',
688
+    'plugins_actifs_liste' => 'Ativos',
689
+    'plugins_compte' => '@count@ plugins',
690
+    'plugins_disponible_un' => 'Um plugin disponível.',
691
+    'plugins_disponibles' => '@count@ plugins disponiveis.',
692
+    'plugins_erreur' => 'Erro nos plugins: @plugins@',
693
+    'plugins_liste' => 'Lista dos plugins',
694
+    'plugins_liste_dist' => 'Plugins bloqueados',
695
+    'plugins_recents' => 'Plugins recentes.',
696
+    'plugins_tous_liste' => 'Todos',
697
+    'plugins_vue_hierarchie' => 'Hierarquia',
698
+    'plugins_vue_liste' => 'Lista',
699
+    'protocole_ldap' => 'Versão do protocolo:',
700 700
 
701
-	// Q
702
-	'queue_executer_maintenant' => 'Executar agora',
703
-	'queue_info_purger' => 'Você pode excluir todas as tarefas de fundo em espera e reinicializar a lista com as tarefas periódicas',
704
-	'queue_nb_jobs_in_queue' => '@nb@ tarefas em espera',
705
-	'queue_next_job_in_nb_sec' => 'Próxima tarefa em @nb@ s',
706
-	'queue_no_job_in_queue' => 'Nenhum tarefa em espera',
707
-	'queue_one_job_in_queue' => '1 tarefa em espera',
708
-	'queue_priorite_tache' => 'prioridade',
709
-	'queue_purger_queue' => 'Reiniciar a lista de tarefas',
710
-	'queue_titre' => 'Tarefas de fundo',
701
+    // Q
702
+    'queue_executer_maintenant' => 'Executar agora',
703
+    'queue_info_purger' => 'Você pode excluir todas as tarefas de fundo em espera e reinicializar a lista com as tarefas periódicas',
704
+    'queue_nb_jobs_in_queue' => '@nb@ tarefas em espera',
705
+    'queue_next_job_in_nb_sec' => 'Próxima tarefa em @nb@ s',
706
+    'queue_no_job_in_queue' => 'Nenhum tarefa em espera',
707
+    'queue_one_job_in_queue' => '1 tarefa em espera',
708
+    'queue_priorite_tache' => 'prioridade',
709
+    'queue_purger_queue' => 'Reiniciar a lista de tarefas',
710
+    'queue_titre' => 'Tarefas de fundo',
711 711
 
712
-	// R
713
-	'repertoire_plugins' => 'Diretório:',
714
-	'required' => '(obrigatório)',
712
+    // R
713
+    'repertoire_plugins' => 'Diretório:',
714
+    'required' => '(obrigatório)',
715 715
 
716
-	// S
717
-	'sans_heure' => 'sem hora',
718
-	'statut_admin_restreint' => '(admin limitado)',
719
-	'statut_webmestre' => 'webmaster',
716
+    // S
717
+    'sans_heure' => 'sem hora',
718
+    'statut_admin_restreint' => '(admin limitado)',
719
+    'statut_webmestre' => 'webmaster',
720 720
 
721
-	// T
722
-	'tache_cron_asap' => 'Tarefa CRON @function@ (ASAP)',
723
-	'tache_cron_secondes' => 'Tarefa CRON @function@ (a cada @nb@ s)',
724
-	'taille_cache_image' => 'As imagens calculadas automaticamente pelo SPIP (ícones de documentos, títulos apresentados sob a forma gráfica, funções matemáticas em formato TeX...) ocupam, no diretório @dir@, um total de @taille@.',
725
-	'taille_cache_infinie' => 'Este site não prevê limitação de tamanho do diretório do cache.',
726
-	'taille_cache_maxi' => 'O SPIP tenta limitar o tamanho do diretório do cache deste site em cerca de <b>@octets@</b>.',
727
-	'taille_cache_moins_de' => 'O tamanho do cache é menor do que @octets@.',
728
-	'taille_cache_octets' => 'O tamanho atual do cache é de cerca de @octets@.',
729
-	'taille_cache_vide' => 'O cache está vazio.',
730
-	'taille_repertoire_cache' => 'Tamanho do diretório cache',
731
-	'text_article_propose_publication' => 'Matéria proposta para publicação.',
732
-	'texte_acces_ldap_anonyme_1' => 'Alguns servidores LDAP não aceitam nenhum acesso anônimo. Neste caso, é necessário especificar um identificador de acesso inicial de modo a poder, em seguida, pesquisar as informações no diretório. Na maior parte dos casos, entretanto, os campos a seguir poderão ser deixados em branco.',
733
-	'texte_admin_effacer_01' => 'Este comando apaga <i>todo</i> o conteúdo da base de dados,incluindo <i>todos</i> os acessos dos redatores e administradores. Após executá-lo, você deverá reinstalar o SPIP para recriar uma nova base de dados bem como um acesso inicial de administrador.',
734
-	'texte_adresse_annuaire_1' => '(Se o seu diretório está instalado na mesma máquina que este website, trata-se provavelmente de «localhost».)',
735
-	'texte_ajout_auteur' => 'O autor a seguir foi incluído na matéria:',
736
-	'texte_annuaire_ldap_1' => 'Se você tem acesso a um diretório LDAP, você poderá utilizá-lo para importar automaticamente os usuários para o SPIP.',
737
-	'texte_article_statut' => 'Esta matéria está:',
738
-	'texte_article_virtuel' => 'Matéria virtual',
739
-	'texte_article_virtuel_reference' => '<b>Matéria virtual:</b> matéria referenciada no seu site SPIP, mas redirecionada para um outro URL. Para cancelar o redirecionamento, apague o URL abaixo.',
740
-	'texte_aucun_resultat_auteur' => 'Nenhum resultado para "@cherche_auteur@"',
741
-	'texte_auteur_messagerie' => 'Este site pode monitorar permanentemente a lista de editores conectados, permitindo-lhe trocar mensagens em tempo real. Você pode decidir não aparecer nessa lista (ficando "invisível" para os outros usuários).',
742
-	'texte_auteurs' => 'OS AUTORES',
743
-	'texte_choix_base_1' => 'Escolha a sua base:',
744
-	'texte_choix_base_2' => 'O servidor SQL contém várias bases de dados.',
745
-	'texte_choix_base_3' => '<b>Escolha</b> abaixo a que lhe foi atribuída pelo seu serviço de hospedagem:',
746
-	'texte_choix_table_prefix' => 'Prefixo das tabelas:',
747
-	'texte_compte_element' => '@count@ elemento',
748
-	'texte_compte_elements' => '@count@ elementos',
749
-	'texte_conflit_edition_correction' => 'Por favor, controle abaixo as diferenças entre as duas versões do texto; você pode também copiar as suas modificações e depois recomeçar.',
750
-	'texte_connexion_mysql' => 'Consulte as informações fornecidas pelo seu serviço de hospedagem: nelas, você deverá encontrar o servidor de base de dados fornecido e os seus dados de conexão ao servidor SQL.',
751
-	'texte_contenu_article' => '(Conteúdo da matéria em poucas palavras.)',
752
-	'texte_contenu_articles' => 'De acordo com o layout adotado pelo seu site, você poderá decidir se certos elementos das matérias serão utilizados. Use a listagem abaixo para indicar quais elementos estão disponíveis.',
753
-	'texte_crash_base' => 'Se a sua base de dados se corrompeu, você poderá tentar uma reparação automática.',
754
-	'texte_creer_rubrique' => 'Antes de poder escrever matérias, você precisa criar uma seção.',
755
-	'texte_date_creation_article' => 'DATA DE CRIAÇÃO DA MATÉRIA:',
756
-	'texte_date_creation_objet' => 'Data de criação:', # on ajoute le &quot;:&quot;
757
-	'texte_date_publication_anterieure' => 'Data de redação anterior:',
758
-	'texte_date_publication_anterieure_nonaffichee' => 'Não exibir a data de redação anterior.',
759
-	'texte_date_publication_article' => 'DATA DE PUBLICAÇÃO ONLINE:',
760
-	'texte_date_publication_objet' => 'Data de publicação online:',
761
-	'texte_definir_comme_traduction_rubrique' => 'Esta seção é uma tradução da seção número:',
762
-	'texte_descriptif_rapide' => 'Descrição rápida',
763
-	'texte_effacer_base' => 'Apagar a base de dados do SPIP',
764
-	'texte_effacer_statistiques' => 'Apagar as estatísticas',
765
-	'texte_en_cours_validation' => 'Os conteúdos abaixo estão propostos para publicação.',
766
-	'texte_enrichir_mise_a_jour' => 'Você pode enriquecer a diagramação do seu texto usando «atalhos tipográficos».',
767
-	'texte_fichier_authent' => '<b>O SPIP pode criar os arquivos especiais  <tt>.htpasswd</tt> e <tt>.htpasswd-admin</tt> no diretório @dossier@?</b><p>
721
+    // T
722
+    'tache_cron_asap' => 'Tarefa CRON @function@ (ASAP)',
723
+    'tache_cron_secondes' => 'Tarefa CRON @function@ (a cada @nb@ s)',
724
+    'taille_cache_image' => 'As imagens calculadas automaticamente pelo SPIP (ícones de documentos, títulos apresentados sob a forma gráfica, funções matemáticas em formato TeX...) ocupam, no diretório @dir@, um total de @taille@.',
725
+    'taille_cache_infinie' => 'Este site não prevê limitação de tamanho do diretório do cache.',
726
+    'taille_cache_maxi' => 'O SPIP tenta limitar o tamanho do diretório do cache deste site em cerca de <b>@octets@</b>.',
727
+    'taille_cache_moins_de' => 'O tamanho do cache é menor do que @octets@.',
728
+    'taille_cache_octets' => 'O tamanho atual do cache é de cerca de @octets@.',
729
+    'taille_cache_vide' => 'O cache está vazio.',
730
+    'taille_repertoire_cache' => 'Tamanho do diretório cache',
731
+    'text_article_propose_publication' => 'Matéria proposta para publicação.',
732
+    'texte_acces_ldap_anonyme_1' => 'Alguns servidores LDAP não aceitam nenhum acesso anônimo. Neste caso, é necessário especificar um identificador de acesso inicial de modo a poder, em seguida, pesquisar as informações no diretório. Na maior parte dos casos, entretanto, os campos a seguir poderão ser deixados em branco.',
733
+    'texte_admin_effacer_01' => 'Este comando apaga <i>todo</i> o conteúdo da base de dados,incluindo <i>todos</i> os acessos dos redatores e administradores. Após executá-lo, você deverá reinstalar o SPIP para recriar uma nova base de dados bem como um acesso inicial de administrador.',
734
+    'texte_adresse_annuaire_1' => '(Se o seu diretório está instalado na mesma máquina que este website, trata-se provavelmente de «localhost».)',
735
+    'texte_ajout_auteur' => 'O autor a seguir foi incluído na matéria:',
736
+    'texte_annuaire_ldap_1' => 'Se você tem acesso a um diretório LDAP, você poderá utilizá-lo para importar automaticamente os usuários para o SPIP.',
737
+    'texte_article_statut' => 'Esta matéria está:',
738
+    'texte_article_virtuel' => 'Matéria virtual',
739
+    'texte_article_virtuel_reference' => '<b>Matéria virtual:</b> matéria referenciada no seu site SPIP, mas redirecionada para um outro URL. Para cancelar o redirecionamento, apague o URL abaixo.',
740
+    'texte_aucun_resultat_auteur' => 'Nenhum resultado para "@cherche_auteur@"',
741
+    'texte_auteur_messagerie' => 'Este site pode monitorar permanentemente a lista de editores conectados, permitindo-lhe trocar mensagens em tempo real. Você pode decidir não aparecer nessa lista (ficando "invisível" para os outros usuários).',
742
+    'texte_auteurs' => 'OS AUTORES',
743
+    'texte_choix_base_1' => 'Escolha a sua base:',
744
+    'texte_choix_base_2' => 'O servidor SQL contém várias bases de dados.',
745
+    'texte_choix_base_3' => '<b>Escolha</b> abaixo a que lhe foi atribuída pelo seu serviço de hospedagem:',
746
+    'texte_choix_table_prefix' => 'Prefixo das tabelas:',
747
+    'texte_compte_element' => '@count@ elemento',
748
+    'texte_compte_elements' => '@count@ elementos',
749
+    'texte_conflit_edition_correction' => 'Por favor, controle abaixo as diferenças entre as duas versões do texto; você pode também copiar as suas modificações e depois recomeçar.',
750
+    'texte_connexion_mysql' => 'Consulte as informações fornecidas pelo seu serviço de hospedagem: nelas, você deverá encontrar o servidor de base de dados fornecido e os seus dados de conexão ao servidor SQL.',
751
+    'texte_contenu_article' => '(Conteúdo da matéria em poucas palavras.)',
752
+    'texte_contenu_articles' => 'De acordo com o layout adotado pelo seu site, você poderá decidir se certos elementos das matérias serão utilizados. Use a listagem abaixo para indicar quais elementos estão disponíveis.',
753
+    'texte_crash_base' => 'Se a sua base de dados se corrompeu, você poderá tentar uma reparação automática.',
754
+    'texte_creer_rubrique' => 'Antes de poder escrever matérias, você precisa criar uma seção.',
755
+    'texte_date_creation_article' => 'DATA DE CRIAÇÃO DA MATÉRIA:',
756
+    'texte_date_creation_objet' => 'Data de criação:', # on ajoute le &quot;:&quot;
757
+    'texte_date_publication_anterieure' => 'Data de redação anterior:',
758
+    'texte_date_publication_anterieure_nonaffichee' => 'Não exibir a data de redação anterior.',
759
+    'texte_date_publication_article' => 'DATA DE PUBLICAÇÃO ONLINE:',
760
+    'texte_date_publication_objet' => 'Data de publicação online:',
761
+    'texte_definir_comme_traduction_rubrique' => 'Esta seção é uma tradução da seção número:',
762
+    'texte_descriptif_rapide' => 'Descrição rápida',
763
+    'texte_effacer_base' => 'Apagar a base de dados do SPIP',
764
+    'texte_effacer_statistiques' => 'Apagar as estatísticas',
765
+    'texte_en_cours_validation' => 'Os conteúdos abaixo estão propostos para publicação.',
766
+    'texte_enrichir_mise_a_jour' => 'Você pode enriquecer a diagramação do seu texto usando «atalhos tipográficos».',
767
+    'texte_fichier_authent' => '<b>O SPIP pode criar os arquivos especiais  <tt>.htpasswd</tt> e <tt>.htpasswd-admin</tt> no diretório @dossier@?</b><p>
768 768
 Estes arquivos podem servir para restringir o acesso aos autores e administradores em outras áreas do seu site (programas externos de estatísticas, por exemplo).</p><p>
769 769
 Se eles não forem úteis, você poderá deixar esta opção com o seu valor padrão (sem criar os arquivos).</p>',
770
-	'texte_informations_personnelles_1' => 'O sistema vai criar agora um acesso personalizado ao site.',
771
-	'texte_informations_personnelles_2' => '(Nota: trata-se de uma reinstalação, se o seu acesso funciona corretamente, você pode',
772
-	'texte_introductif_article' => '(Texto introdutório da matéria.)',
773
-	'texte_jeu_caractere' => 'É aconselhável usar no seu site o alfabeto universal (<tt>utf-8</tt>): ele permite a exibição de textos em todos os idiomas, e não tem problemas de compatibilidade com os navegadores modernos.',
774
-	'texte_jeu_caractere_3' => 'O seu site está configurado atualmente com o conjunto de caracteres:',
775
-	'texte_jeu_caractere_4' => 'Se isso não corresponde à realidade dos seus dados (por ex., em seguimento a um restauro da base de dados), ou se <em>você lançou este site</em> e deseja utilizar um outro conjunto de caracteres, por favor, indique-o aqui:',
776
-	'texte_login_ldap_1' => '(Deixe em branco para acesso anônimo, ou informe o caminho completo, por exemplo «<tt>uid=dupont, ou=users, dc=mon-domaine, dc=com</tt>».)',
777
-	'texte_login_precaution' => 'Atenção! Este é o login com o qual você está conectado agora. Use este formulário com cautela...',
778
-	'texte_messagerie_agenda' => 'As mensagens internas permitem que os redatores se comuniquem entre si, diretamente da área privada do site. Elas estão associadas a uma agenda.',
779
-	'texte_mise_a_niveau_base_1' => 'Você acabou de atualizar os arquivos do SPIP.
770
+    'texte_informations_personnelles_1' => 'O sistema vai criar agora um acesso personalizado ao site.',
771
+    'texte_informations_personnelles_2' => '(Nota: trata-se de uma reinstalação, se o seu acesso funciona corretamente, você pode',
772
+    'texte_introductif_article' => '(Texto introdutório da matéria.)',
773
+    'texte_jeu_caractere' => 'É aconselhável usar no seu site o alfabeto universal (<tt>utf-8</tt>): ele permite a exibição de textos em todos os idiomas, e não tem problemas de compatibilidade com os navegadores modernos.',
774
+    'texte_jeu_caractere_3' => 'O seu site está configurado atualmente com o conjunto de caracteres:',
775
+    'texte_jeu_caractere_4' => 'Se isso não corresponde à realidade dos seus dados (por ex., em seguimento a um restauro da base de dados), ou se <em>você lançou este site</em> e deseja utilizar um outro conjunto de caracteres, por favor, indique-o aqui:',
776
+    'texte_login_ldap_1' => '(Deixe em branco para acesso anônimo, ou informe o caminho completo, por exemplo «<tt>uid=dupont, ou=users, dc=mon-domaine, dc=com</tt>».)',
777
+    'texte_login_precaution' => 'Atenção! Este é o login com o qual você está conectado agora. Use este formulário com cautela...',
778
+    'texte_messagerie_agenda' => 'As mensagens internas permitem que os redatores se comuniquem entre si, diretamente da área privada do site. Elas estão associadas a uma agenda.',
779
+    'texte_mise_a_niveau_base_1' => 'Você acabou de atualizar os arquivos do SPIP.
780 780
 Agora é necessário atualizar a base de dados do site.',
781
-	'texte_modifier_article' => 'Editar a matéria:',
782
-	'texte_multilinguisme' => 'Se você deseja gerar objetos em diversos idiomas, com uma navegação complexa, você pode incluir um menu de seleção de idioma nesses objetos, de acordo com a estrutura do seu site.',
783
-	'texte_multilinguisme_trad' => 'Você pode, igualmente, ativar um sistema de gerenciamento de links entre as diferentes traduções em certos objetos.',
784
-	'texte_non_compresse' => '<i>não compactado</i> (seu servidor não suporta esta funcionalidade)',
785
-	'texte_nouvelle_version_spip_1' => 'Você instalou uma nova versão do SPIP.',
786
-	'texte_nouvelle_version_spip_2' => 'Esta nova versão precisa de uma atualização mais completa do que o normal. Se você é o webmaster do site, por favor, apague o arquivo @connect@ e retome a instalação de forma a incluir os seus parâmetros de conexão à base de dados.<p> (NB.: se você não se lembra dos seus parâmetros de conexão, consulte o arquivo @connect@ antes de apagá-lo...)</p>',
787
-	'texte_operation_echec' => 'Volte à página anterior, escolha uma outra base de dados ou crie uma nova. Verifique as informações fornecidas pelo seu serviço de hospedagem.',
788
-	'texte_plus_trois_car' => 'mais de 3 caracteres',
789
-	'texte_plusieurs_articles' => 'Demasiados autores encontrados para "@cherche_auteur@":',
790
-	'texte_port_annuaire' => '(O valor padrão indicado é geralmente conveniente.)',
791
-	'texte_presente_plugin' => 'Esta página lista os plugins disponíveis para o site. Você pode ativar os plugins necessários marcando a opção correspondente.',
792
-	'texte_proposer_publication' => 'Assim que a sua matéria estiver pronta, você pode propor a sua publicação.',
793
-	'texte_proxy' => 'Em alguns casos (intranet, redes protegidas...), os sites remotos (documentação do SPIP, sites sindicados etc.) só estarão acessíveis através de um <i>proxy HTTP</i>. Nesse caso, informe abaixo o endereço, no formato @[email protected], você pode deixar este campo vazio.',
794
-	'texte_publication_articles_post_dates' => 'Que comportamento o SPIP deve adotar face às matérias em que a data de publicação está pré-datada?',
795
-	'texte_rappel_selection_champs' => '[Não se esqueça de selecionar corretamente este campo.]',
796
-	'texte_recalcul_page' => 'Se você quiser recalcular uma única página, passe para a área pública e clique no botão «atualizar».',
797
-	'texte_recuperer_base' => 'Reparar a base de dados',
798
-	'texte_reference_mais_redirige' => 'matéria referenciada no seu site em  SPIP, mas redirecionada para outro URL.',
799
-	'texte_requetes_echouent' => '<b>Já que certas solicitações SQL falharam sistematicamente e sem razão aparente, é possível que a causa esteja na base de dados em si.</b><p>
781
+    'texte_modifier_article' => 'Editar a matéria:',
782
+    'texte_multilinguisme' => 'Se você deseja gerar objetos em diversos idiomas, com uma navegação complexa, você pode incluir um menu de seleção de idioma nesses objetos, de acordo com a estrutura do seu site.',
783
+    'texte_multilinguisme_trad' => 'Você pode, igualmente, ativar um sistema de gerenciamento de links entre as diferentes traduções em certos objetos.',
784
+    'texte_non_compresse' => '<i>não compactado</i> (seu servidor não suporta esta funcionalidade)',
785
+    'texte_nouvelle_version_spip_1' => 'Você instalou uma nova versão do SPIP.',
786
+    'texte_nouvelle_version_spip_2' => 'Esta nova versão precisa de uma atualização mais completa do que o normal. Se você é o webmaster do site, por favor, apague o arquivo @connect@ e retome a instalação de forma a incluir os seus parâmetros de conexão à base de dados.<p> (NB.: se você não se lembra dos seus parâmetros de conexão, consulte o arquivo @connect@ antes de apagá-lo...)</p>',
787
+    'texte_operation_echec' => 'Volte à página anterior, escolha uma outra base de dados ou crie uma nova. Verifique as informações fornecidas pelo seu serviço de hospedagem.',
788
+    'texte_plus_trois_car' => 'mais de 3 caracteres',
789
+    'texte_plusieurs_articles' => 'Demasiados autores encontrados para "@cherche_auteur@":',
790
+    'texte_port_annuaire' => '(O valor padrão indicado é geralmente conveniente.)',
791
+    'texte_presente_plugin' => 'Esta página lista os plugins disponíveis para o site. Você pode ativar os plugins necessários marcando a opção correspondente.',
792
+    'texte_proposer_publication' => 'Assim que a sua matéria estiver pronta, você pode propor a sua publicação.',
793
+    'texte_proxy' => 'Em alguns casos (intranet, redes protegidas...), os sites remotos (documentação do SPIP, sites sindicados etc.) só estarão acessíveis através de um <i>proxy HTTP</i>. Nesse caso, informe abaixo o endereço, no formato @[email protected], você pode deixar este campo vazio.',
794
+    'texte_publication_articles_post_dates' => 'Que comportamento o SPIP deve adotar face às matérias em que a data de publicação está pré-datada?',
795
+    'texte_rappel_selection_champs' => '[Não se esqueça de selecionar corretamente este campo.]',
796
+    'texte_recalcul_page' => 'Se você quiser recalcular uma única página, passe para a área pública e clique no botão «atualizar».',
797
+    'texte_recuperer_base' => 'Reparar a base de dados',
798
+    'texte_reference_mais_redirige' => 'matéria referenciada no seu site em  SPIP, mas redirecionada para outro URL.',
799
+    'texte_requetes_echouent' => '<b>Já que certas solicitações SQL falharam sistematicamente e sem razão aparente, é possível que a causa esteja na base de dados em si.</b><p>
800 800
 O seu servidor SQL dispõe de uma funcionalidade de reparação das suas tabelas quando elas são danificadas por acidente. Você poderá tentar esta reparação; em caso de falha, conserve uma cópia da mensagem de erro, que poderá conter indícios do que não está funcionando...</p><p>
801 801
 Se o problema persistir, contate o seu serviço de hospedagem.</p>',
802
-	'texte_selection_langue_principale' => 'Você pode escolher abaixo o «idioma principal» do site. esta escolha não o obriga - felizmente! - a escrever as suas matérias no idioma selecionado, mas permite determinar:
802
+    'texte_selection_langue_principale' => 'Você pode escolher abaixo o «idioma principal» do site. esta escolha não o obriga - felizmente! - a escrever as suas matérias no idioma selecionado, mas permite determinar:
803 803
  <ul><li>o formato padrão das datas no site público;</li>
804 804
  <li>a natureza do motor tipográfico que o SPIP deverá usar para a composição dos textos;</li>
805 805
  <li>o idioma usado nos formulários do site público;</li>
806 806
  <li>o idioma padrão exibido na área privada.</li></ul>',
807
-	'texte_sous_titre' => 'Subtítulo',
808
-	'texte_statistiques_visites' => '(barras escuras:  domingo / curva escura: evolução da média)',
809
-	'texte_statut_attente_validation' => 'aguardando validação',
810
-	'texte_statut_publies' => 'publicadas online',
811
-	'texte_statut_refuses' => 'recusadas',
812
-	'texte_suppression_fichiers' => 'Use este comando para excluir todos os arquivos que constam do cache do SPIP. Isto permite, por exemplo, forçar a reconstrução de todas as páginas, caso você tenha feito alterações importantes no layout ou na estrutura do site.',
813
-	'texte_sur_titre' => 'Sobretítulo',
814
-	'texte_table_ok' => ': esta tabela está OK.',
815
-	'texte_tentative_recuperation' => 'Tentativa de reparação',
816
-	'texte_tenter_reparation' => 'Tentar uma reparação da base de dados',
817
-	'texte_test_proxy' => 'Para testar este proxy, informe aqui o endereço de um website que você deseje testar.',
818
-	'texte_titre_02' => 'Título:',
819
-	'texte_titre_obligatoire' => '<b>Título</b> [obrigatório]',
820
-	'texte_travail_article' => '@nom_auteur_modif@ trabalhou nesta matéria há @date_diff@ minutos',
821
-	'texte_travail_collaboratif' => 'Se é frequente acontecer de mais de um redator trabalhar em uma mesma matéria, o sistema pode exibir as matérias recentemente "abertas", de modo a evitar modificações concorrentes. Esta opção está desativada por padrão, para evitar a exibição de mensagens de aviso desnecessárias.',
822
-	'texte_vide' => 'vazia',
823
-	'texte_vider_cache' => 'Esvaziar o cache',
824
-	'titre_admin_tech' => 'Manutenção técnica',
825
-	'titre_admin_vider' => 'Manutenção técnica',
826
-	'titre_ajouter_un_auteur' => 'Incluir um autor',
827
-	'titre_ajouter_un_mot' => 'Incluir uma palavra-chave',
828
-	'titre_cadre_afficher_article' => 'Exibir as matérias',
829
-	'titre_cadre_afficher_traductions' => 'Exibir o status das traduções para os idiomas a seguir:',
830
-	'titre_cadre_ajouter_auteur' => 'INCLUIR UM AUTOR:',
831
-	'titre_cadre_interieur_rubrique' => 'Na seção',
832
-	'titre_cadre_numero_auteur' => 'AUTOR NÚMERO',
833
-	'titre_cadre_numero_objet' => '@objet@ NÚMERO:',
834
-	'titre_cadre_signature_obligatoire' => '<b>Assinatura</b> [obrigatório]<br />',
835
-	'titre_config_contenu_notifications' => 'Notificações',
836
-	'titre_config_contenu_prive' => 'Na área privada',
837
-	'titre_config_contenu_public' => 'No site público',
838
-	'titre_config_fonctions' => 'Configuração do site',
839
-	'titre_config_langage' => 'Configurar o idioma',
840
-	'titre_configuration' => 'Configuração do site',
841
-	'titre_configurer_preferences' => 'Configurar as suas preferências',
842
-	'titre_configurer_preferences_menus' => 'Configurar as suas preferências de menus',
843
-	'titre_conflit_edition' => 'Conflito durante a edição',
844
-	'titre_connexion_ldap' => 'Opções: <b>Sua conexão LDAP</b>',
845
-	'titre_groupe_mots' => 'GRUPO DE PALAVRAS-CHAVE:',
846
-	'titre_identite_site' => 'Identidade do site',
847
-	'titre_langue_article' => 'Idioma da matéria',
848
-	'titre_langue_rubrique' => 'Idioma da seção',
849
-	'titre_langue_trad_article' => 'IDIOMA E TRADUÇÕES DA MATÉRIA',
850
-	'titre_les_articles' => 'AS MATÉRIAS',
851
-	'titre_messagerie_agenda' => 'Mensagens internas e agenda',
852
-	'titre_naviguer_dans_le_site' => 'Navegar no site...',
853
-	'titre_nouvelle_rubrique' => 'Nova seção',
854
-	'titre_numero_rubrique' => 'SEÇÃO NÚMERO:',
855
-	'titre_page_articles_edit' => 'Editar: @titre@',
856
-	'titre_page_articles_page' => 'As matérias',
857
-	'titre_page_articles_tous' => 'Todo o site',
858
-	'titre_page_calendrier' => 'Calendário @nom_mois@ @annee@',
859
-	'titre_page_config_contenu' => 'Configuração do site',
860
-	'titre_page_delete_all' => 'supressão total e irreversível',
861
-	'titre_page_recherche' => 'Resultados da busca por @recherche@',
862
-	'titre_page_statistiques_referers' => 'Estatísticas (links de entrada)',
863
-	'titre_page_upgrade' => 'Atualização do SPIP',
864
-	'titre_preference_menus_favoris' => 'Menus favoritos',
865
-	'titre_publication_articles_post_dates' => 'Publicação de matérias pós-datadas',
866
-	'titre_reparation' => 'Reparação',
867
-	'titre_suivi_petition' => 'Acompanhamento das petições',
868
-	'tls_ldap' => 'Transport Layer Security:',
869
-	'trad_article_traduction' => 'Todas as versões desta matéria:',
870
-	'trad_delier' => 'Desvincular destas traduções',
871
-	'trad_lier' => 'Esta matéria é uma tradução da matéria número:',
872
-	'trad_new' => 'Escrever uma nova tradução',
807
+    'texte_sous_titre' => 'Subtítulo',
808
+    'texte_statistiques_visites' => '(barras escuras:  domingo / curva escura: evolução da média)',
809
+    'texte_statut_attente_validation' => 'aguardando validação',
810
+    'texte_statut_publies' => 'publicadas online',
811
+    'texte_statut_refuses' => 'recusadas',
812
+    'texte_suppression_fichiers' => 'Use este comando para excluir todos os arquivos que constam do cache do SPIP. Isto permite, por exemplo, forçar a reconstrução de todas as páginas, caso você tenha feito alterações importantes no layout ou na estrutura do site.',
813
+    'texte_sur_titre' => 'Sobretítulo',
814
+    'texte_table_ok' => ': esta tabela está OK.',
815
+    'texte_tentative_recuperation' => 'Tentativa de reparação',
816
+    'texte_tenter_reparation' => 'Tentar uma reparação da base de dados',
817
+    'texte_test_proxy' => 'Para testar este proxy, informe aqui o endereço de um website que você deseje testar.',
818
+    'texte_titre_02' => 'Título:',
819
+    'texte_titre_obligatoire' => '<b>Título</b> [obrigatório]',
820
+    'texte_travail_article' => '@nom_auteur_modif@ trabalhou nesta matéria há @date_diff@ minutos',
821
+    'texte_travail_collaboratif' => 'Se é frequente acontecer de mais de um redator trabalhar em uma mesma matéria, o sistema pode exibir as matérias recentemente "abertas", de modo a evitar modificações concorrentes. Esta opção está desativada por padrão, para evitar a exibição de mensagens de aviso desnecessárias.',
822
+    'texte_vide' => 'vazia',
823
+    'texte_vider_cache' => 'Esvaziar o cache',
824
+    'titre_admin_tech' => 'Manutenção técnica',
825
+    'titre_admin_vider' => 'Manutenção técnica',
826
+    'titre_ajouter_un_auteur' => 'Incluir um autor',
827
+    'titre_ajouter_un_mot' => 'Incluir uma palavra-chave',
828
+    'titre_cadre_afficher_article' => 'Exibir as matérias',
829
+    'titre_cadre_afficher_traductions' => 'Exibir o status das traduções para os idiomas a seguir:',
830
+    'titre_cadre_ajouter_auteur' => 'INCLUIR UM AUTOR:',
831
+    'titre_cadre_interieur_rubrique' => 'Na seção',
832
+    'titre_cadre_numero_auteur' => 'AUTOR NÚMERO',
833
+    'titre_cadre_numero_objet' => '@objet@ NÚMERO:',
834
+    'titre_cadre_signature_obligatoire' => '<b>Assinatura</b> [obrigatório]<br />',
835
+    'titre_config_contenu_notifications' => 'Notificações',
836
+    'titre_config_contenu_prive' => 'Na área privada',
837
+    'titre_config_contenu_public' => 'No site público',
838
+    'titre_config_fonctions' => 'Configuração do site',
839
+    'titre_config_langage' => 'Configurar o idioma',
840
+    'titre_configuration' => 'Configuração do site',
841
+    'titre_configurer_preferences' => 'Configurar as suas preferências',
842
+    'titre_configurer_preferences_menus' => 'Configurar as suas preferências de menus',
843
+    'titre_conflit_edition' => 'Conflito durante a edição',
844
+    'titre_connexion_ldap' => 'Opções: <b>Sua conexão LDAP</b>',
845
+    'titre_groupe_mots' => 'GRUPO DE PALAVRAS-CHAVE:',
846
+    'titre_identite_site' => 'Identidade do site',
847
+    'titre_langue_article' => 'Idioma da matéria',
848
+    'titre_langue_rubrique' => 'Idioma da seção',
849
+    'titre_langue_trad_article' => 'IDIOMA E TRADUÇÕES DA MATÉRIA',
850
+    'titre_les_articles' => 'AS MATÉRIAS',
851
+    'titre_messagerie_agenda' => 'Mensagens internas e agenda',
852
+    'titre_naviguer_dans_le_site' => 'Navegar no site...',
853
+    'titre_nouvelle_rubrique' => 'Nova seção',
854
+    'titre_numero_rubrique' => 'SEÇÃO NÚMERO:',
855
+    'titre_page_articles_edit' => 'Editar: @titre@',
856
+    'titre_page_articles_page' => 'As matérias',
857
+    'titre_page_articles_tous' => 'Todo o site',
858
+    'titre_page_calendrier' => 'Calendário @nom_mois@ @annee@',
859
+    'titre_page_config_contenu' => 'Configuração do site',
860
+    'titre_page_delete_all' => 'supressão total e irreversível',
861
+    'titre_page_recherche' => 'Resultados da busca por @recherche@',
862
+    'titre_page_statistiques_referers' => 'Estatísticas (links de entrada)',
863
+    'titre_page_upgrade' => 'Atualização do SPIP',
864
+    'titre_preference_menus_favoris' => 'Menus favoritos',
865
+    'titre_publication_articles_post_dates' => 'Publicação de matérias pós-datadas',
866
+    'titre_reparation' => 'Reparação',
867
+    'titre_suivi_petition' => 'Acompanhamento das petições',
868
+    'tls_ldap' => 'Transport Layer Security:',
869
+    'trad_article_traduction' => 'Todas as versões desta matéria:',
870
+    'trad_delier' => 'Desvincular destas traduções',
871
+    'trad_lier' => 'Esta matéria é uma tradução da matéria número:',
872
+    'trad_new' => 'Escrever uma nova tradução',
873 873
 
874
-	// U
875
-	'utf8_convert_erreur_orig' => 'Erro: o conjunto de caracteres @charset@ não é suportado.',
874
+    // U
875
+    'utf8_convert_erreur_orig' => 'Erro: o conjunto de caracteres @charset@ não é suportado.',
876 876
 
877
-	// V
878
-	'version' => 'Versão:'
877
+    // V
878
+    'version' => 'Versão:'
879 879
 );
Please login to merge, or discard this patch.
ecrire/lang/public_pt_br.php 1 patch
Indentation   +115 added lines, -115 removed lines patch added patch discarded remove patch
@@ -4,123 +4,123 @@
 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
-	'accueil_site' => 'Página inicial',
14
-	'article' => 'Matéria',
15
-	'articles' => 'Matérias',
16
-	'articles_auteur' => 'Matérias deste autor',
17
-	'articles_populaires' => 'Matérias mais populares',
18
-	'articles_rubrique' => 'Matérias desta seção',
19
-	'aucun_article' => 'Não há nenhuma matéria neste endereço',
20
-	'aucun_auteur' => 'Não há nenhum autor neste endereço',
21
-	'aucun_site' => 'Não há nenhum site neste endereço',
22
-	'aucune_breve' => 'Não há nenhuma nota neste endereço',
23
-	'aucune_rubrique' => 'Não há nenhuma seção neste endereço',
24
-	'auteur' => 'Autor',
25
-	'autres' => 'Outros',
26
-	'autres_breves' => 'Outras notas',
27
-	'autres_groupes_mots_clefs' => 'Outros grupos de palavras-chave',
28
-	'autres_sites' => 'Outros sites',
29
-
30
-	// B
31
-	'bonjour' => 'Bom dia',
32
-
33
-	// C
34
-	'commenter_site' => 'Comentar este site',
35
-	'contact' => 'Contato',
36
-	'copie_document_impossible' => 'Não foi possível copiar o documento',
37
-
38
-	// D
39
-	'date' => 'Data',
40
-	'dernier_ajout' => 'Última inclusão',
41
-	'dernieres_breves' => 'Últimas notas',
42
-	'derniers_articles' => 'Últimas matérias',
43
-	'derniers_commentaires' => 'Últimos comentários',
44
-	'derniers_messages_forum' => 'Últimas mensagens publicadas nos fóruns',
45
-
46
-	// E
47
-	'edition_mode_texte' => 'Edição em modo texto de',
48
-	'en_reponse' => 'Em resposta a:',
49
-	'en_resume' => 'Em resumo',
50
-	'envoyer_message' => 'Enviar uma mensagem',
51
-	'espace_prive' => 'Espaço privado',
52
-
53
-	// F
54
-	'formats_acceptes' => 'Formatos aceitos: @formats@.',
55
-
56
-	// H
57
-	'hierarchie_site' => 'Hierarquia do site',
58
-
59
-	// J
60
-	'jours' => 'dias',
61
-
62
-	// L
63
-	'lien_connecter' => 'Conectar-se',
64
-
65
-	// M
66
-	'meme_auteur' => 'Do mesmo autor',
67
-	'meme_rubrique' => 'Na mesma seção',
68
-	'memes_auteurs' => 'Dos mesmos autores',
69
-	'message' => 'Mensagem',
70
-	'messages_forum' => 'Mensagens',
71
-	'messages_recents' => 'Mensagens de fórum mais recentes',
72
-	'mots_clef' => 'Palavra-chave',
73
-	'mots_clefs' => 'Palavras-chave',
74
-	'mots_clefs_meme_groupe' => 'Palavras-chave no mesmo grupo',
75
-
76
-	// N
77
-	'navigation' => 'Navegação',
78
-	'nom' => 'Nome',
79
-	'nouveautes' => 'As novidades',
80
-	'nouveautes_web' => 'Novidades na web',
81
-	'nouveaux_articles' => 'Novas matérias',
82
-	'nouvelles_breves' => 'Novas notas',
83
-
84
-	// P
85
-	'page_precedente' => 'página anterior',
86
-	'page_suivante' => 'página seguinte',
87
-	'par_auteur' => 'por ',
88
-	'participer_site' => 'Você pode participar da vida deste site e propor as suas próprias matérias ao se inscrever abaixo. Você receberá imediatamente um e-mail informando os seus códigos de acesso ao espaço privado do site.',
89
-	'plan_site' => 'Mapa do site',
90
-	'popularite' => 'Popularidade',
91
-	'poster_message' => 'Postar uma mensagem',
92
-	'proposer_site' => 'Você pode propor a inclusão de um site nesta seção:',
93
-
94
-	// R
95
-	'repondre_article' => 'Responder a esta matéria',
96
-	'repondre_breve' => 'Responder a esta nota',
97
-	'resultats_recherche' => 'Resultados da busca',
98
-	'retour_debut_forums' => 'Voltar ao início dos fóruns',
99
-	'rss_abonnement' => 'Copie o URL a seguir para o seu agregador:',
100
-	'rss_abonnement_titre' => 'Subscrever',
101
-	'rss_abonnement_titre_page' => 'Subscrever',
102
-	'rss_explication' => 'Um feed RSS coleta as informações de atualização de um site. Ele fornece o conteúdo das postagens ou dos somentários, ou um trecho dos mesmos, bem como um link para as versões integrais e informações adicionais. Esse feed é pensado para ser lido por um agregador RSS.',
103
-	'rss_explication_titre' => 'O que é um fluxo RSS?',
104
-	'rubrique' => 'Seção',
105
-	'rubriques' => 'Seções',
106
-
107
-	// S
108
-	'signatures_petition' => 'Assinaturas',
109
-	'site_realise_avec_spip' => 'Site realizado com SPIP',
110
-	'sites_web' => 'Websites',
111
-	'sous_rubriques' => 'Subseções',
112
-	'spam' => 'Spam',
113
-	'suite' => 'a seguir',
114
-	'sur_web' => 'Na web',
115
-	'syndiquer_rubrique' => 'Sindicar esta seção',
116
-	'syndiquer_site' => 'Sindicar todo o site',
117
-
118
-	// T
119
-	'texte_lettre_information' => 'Esta é a mensagem de informação do site',
120
-	'texte_lettre_information_2' => 'Esta mensagem compila as novidades publicadas desde',
121
-
122
-	// V
123
-	'ver_imprimer' => 'Versão para impressão',
124
-	'voir_en_ligne' => 'Ver online',
125
-	'voir_squelette' => 'visualizar o template desta página'
12
+    // A
13
+    'accueil_site' => 'Página inicial',
14
+    'article' => 'Matéria',
15
+    'articles' => 'Matérias',
16
+    'articles_auteur' => 'Matérias deste autor',
17
+    'articles_populaires' => 'Matérias mais populares',
18
+    'articles_rubrique' => 'Matérias desta seção',
19
+    'aucun_article' => 'Não há nenhuma matéria neste endereço',
20
+    'aucun_auteur' => 'Não há nenhum autor neste endereço',
21
+    'aucun_site' => 'Não há nenhum site neste endereço',
22
+    'aucune_breve' => 'Não há nenhuma nota neste endereço',
23
+    'aucune_rubrique' => 'Não há nenhuma seção neste endereço',
24
+    'auteur' => 'Autor',
25
+    'autres' => 'Outros',
26
+    'autres_breves' => 'Outras notas',
27
+    'autres_groupes_mots_clefs' => 'Outros grupos de palavras-chave',
28
+    'autres_sites' => 'Outros sites',
29
+
30
+    // B
31
+    'bonjour' => 'Bom dia',
32
+
33
+    // C
34
+    'commenter_site' => 'Comentar este site',
35
+    'contact' => 'Contato',
36
+    'copie_document_impossible' => 'Não foi possível copiar o documento',
37
+
38
+    // D
39
+    'date' => 'Data',
40
+    'dernier_ajout' => 'Última inclusão',
41
+    'dernieres_breves' => 'Últimas notas',
42
+    'derniers_articles' => 'Últimas matérias',
43
+    'derniers_commentaires' => 'Últimos comentários',
44
+    'derniers_messages_forum' => 'Últimas mensagens publicadas nos fóruns',
45
+
46
+    // E
47
+    'edition_mode_texte' => 'Edição em modo texto de',
48
+    'en_reponse' => 'Em resposta a:',
49
+    'en_resume' => 'Em resumo',
50
+    'envoyer_message' => 'Enviar uma mensagem',
51
+    'espace_prive' => 'Espaço privado',
52
+
53
+    // F
54
+    'formats_acceptes' => 'Formatos aceitos: @formats@.',
55
+
56
+    // H
57
+    'hierarchie_site' => 'Hierarquia do site',
58
+
59
+    // J
60
+    'jours' => 'dias',
61
+
62
+    // L
63
+    'lien_connecter' => 'Conectar-se',
64
+
65
+    // M
66
+    'meme_auteur' => 'Do mesmo autor',
67
+    'meme_rubrique' => 'Na mesma seção',
68
+    'memes_auteurs' => 'Dos mesmos autores',
69
+    'message' => 'Mensagem',
70
+    'messages_forum' => 'Mensagens',
71
+    'messages_recents' => 'Mensagens de fórum mais recentes',
72
+    'mots_clef' => 'Palavra-chave',
73
+    'mots_clefs' => 'Palavras-chave',
74
+    'mots_clefs_meme_groupe' => 'Palavras-chave no mesmo grupo',
75
+
76
+    // N
77
+    'navigation' => 'Navegação',
78
+    'nom' => 'Nome',
79
+    'nouveautes' => 'As novidades',
80
+    'nouveautes_web' => 'Novidades na web',
81
+    'nouveaux_articles' => 'Novas matérias',
82
+    'nouvelles_breves' => 'Novas notas',
83
+
84
+    // P
85
+    'page_precedente' => 'página anterior',
86
+    'page_suivante' => 'página seguinte',
87
+    'par_auteur' => 'por ',
88
+    'participer_site' => 'Você pode participar da vida deste site e propor as suas próprias matérias ao se inscrever abaixo. Você receberá imediatamente um e-mail informando os seus códigos de acesso ao espaço privado do site.',
89
+    'plan_site' => 'Mapa do site',
90
+    'popularite' => 'Popularidade',
91
+    'poster_message' => 'Postar uma mensagem',
92
+    'proposer_site' => 'Você pode propor a inclusão de um site nesta seção:',
93
+
94
+    // R
95
+    'repondre_article' => 'Responder a esta matéria',
96
+    'repondre_breve' => 'Responder a esta nota',
97
+    'resultats_recherche' => 'Resultados da busca',
98
+    'retour_debut_forums' => 'Voltar ao início dos fóruns',
99
+    'rss_abonnement' => 'Copie o URL a seguir para o seu agregador:',
100
+    'rss_abonnement_titre' => 'Subscrever',
101
+    'rss_abonnement_titre_page' => 'Subscrever',
102
+    'rss_explication' => 'Um feed RSS coleta as informações de atualização de um site. Ele fornece o conteúdo das postagens ou dos somentários, ou um trecho dos mesmos, bem como um link para as versões integrais e informações adicionais. Esse feed é pensado para ser lido por um agregador RSS.',
103
+    'rss_explication_titre' => 'O que é um fluxo RSS?',
104
+    'rubrique' => 'Seção',
105
+    'rubriques' => 'Seções',
106
+
107
+    // S
108
+    'signatures_petition' => 'Assinaturas',
109
+    'site_realise_avec_spip' => 'Site realizado com SPIP',
110
+    'sites_web' => 'Websites',
111
+    'sous_rubriques' => 'Subseções',
112
+    'spam' => 'Spam',
113
+    'suite' => 'a seguir',
114
+    'sur_web' => 'Na web',
115
+    'syndiquer_rubrique' => 'Sindicar esta seção',
116
+    'syndiquer_site' => 'Sindicar todo o site',
117
+
118
+    // T
119
+    'texte_lettre_information' => 'Esta é a mensagem de informação do site',
120
+    'texte_lettre_information_2' => 'Esta mensagem compila as novidades publicadas desde',
121
+
122
+    // V
123
+    'ver_imprimer' => 'Versão para impressão',
124
+    'voir_en_ligne' => 'Ver online',
125
+    'voir_squelette' => 'visualizar o template desta página'
126 126
 );
Please login to merge, or discard this patch.
prive/themes/spip/vars.css_fonctions.php 2 patches
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -49,8 +49,8 @@  discard block
 block discarded – undo
49 49
 
50 50
 	// Espacements pour le rythme vertical et les gouttières
51 51
 	// Basés sur la hauteur d'une ligne de texte à la racine du document
52
-	$vars->add('--spip-spacing-y', round(strmult($Pile[0]['font-size'], $Pile[0]['line-height']), 4) . 'rem');
53
-	$vars->add('--spip-spacing-x', round(strmult($Pile[0]['font-size'], $Pile[0]['line-height']), 4) . 'rem');
52
+	$vars->add('--spip-spacing-y', round(strmult($Pile[0]['font-size'], $Pile[0]['line-height']), 4).'rem');
53
+	$vars->add('--spip-spacing-x', round(strmult($Pile[0]['font-size'], $Pile[0]['line-height']), 4).'rem');
54 54
 	$vars->add('--spip-margin-bottom', $Pile[0]['margin-bottom']); // À déprécier
55 55
 
56 56
 	// Bordures
@@ -60,20 +60,20 @@  discard block
 block discarded – undo
60 60
 
61 61
 	// Ombres portées
62 62
 	$shadow_mini =
63
-		'0 0.05em 0.1em hsla(0, 0%, 0%, 0.33),' .
64
-		'0 0.1em  0.15em hsla(0, 0%, 0%, 0.05),' .
63
+		'0 0.05em 0.1em hsla(0, 0%, 0%, 0.33),'.
64
+		'0 0.1em  0.15em hsla(0, 0%, 0%, 0.05),'.
65 65
 		'0 0.1em  0.25em  hsla(0, 0%, 0%, 0.05)';
66 66
 	$shadow =
67
-		'0 0.05em 0.15em hsla(0, 0%, 0%, 0.33),' .
68
-		'0 0.1em  0.25em hsla(0, 0%, 0%, 0.05),' .
67
+		'0 0.05em 0.15em hsla(0, 0%, 0%, 0.33),'.
68
+		'0 0.1em  0.25em hsla(0, 0%, 0%, 0.05),'.
69 69
 		'0 0.1em  0.5em  hsla(0, 0%, 0%, 0.05)';
70 70
 	$shadow_large =
71
-		'0 0.05em 0.15em hsla(0, 0%, 0%, 0.1),' .
72
-		'0 0.2em  0.5em  hsla(0, 0%, 0%, 0.1),' .
71
+		'0 0.05em 0.15em hsla(0, 0%, 0%, 0.1),'.
72
+		'0 0.2em  0.5em  hsla(0, 0%, 0%, 0.1),'.
73 73
 		'0 0.2em  1em    hsla(0, 0%, 0%, 0.075)';
74 74
 	$shadow_huge =
75
-		'0 0.1em 0.25em hsla(0, 0%, 0%, 0.1),' .
76
-		'0 0.25em  1em  hsla(0, 0%, 0%, 0.1),' .
75
+		'0 0.1em 0.25em hsla(0, 0%, 0%, 0.1),'.
76
+		'0 0.25em  1em  hsla(0, 0%, 0%, 0.1),'.
77 77
 		'0 0.5em  2em    hsla(0, 0%, 0%, 0.075)';
78 78
 	$vars->add('--spip-box-shadow-mini', $shadow_mini);
79 79
 	$vars->add('--spip-box-shadow-mini-hover', $shadow);
Please login to merge, or discard this patch.
Indentation   +161 added lines, -161 removed lines patch added patch discarded remove patch
@@ -5,23 +5,23 @@  discard block
 block discarded – undo
5 5
  * @internal
6 6
  */
7 7
 class Spip_Css_Vars_Collection {
8
-	private array $vars = [];
9
-
10
-	public function add(string $var, string $value) {
11
-		$this->vars[$var] = $value;
12
-	}
13
-
14
-	public function getString(): string {
15
-		$string = '';
16
-		foreach ($this->vars as $key => $value) {
17
-			$string .= "$key: $value;\n";
18
-		}
19
-		return $string;
20
-	}
21
-
22
-	public function __toString(): string {
23
-		return $this->getString();
24
-	}
8
+    private array $vars = [];
9
+
10
+    public function add(string $var, string $value) {
11
+        $this->vars[$var] = $value;
12
+    }
13
+
14
+    public function getString(): string {
15
+        $string = '';
16
+        foreach ($this->vars as $key => $value) {
17
+            $string .= "$key: $value;\n";
18
+        }
19
+        return $string;
20
+    }
21
+
22
+    public function __toString(): string {
23
+        return $this->getString();
24
+    }
25 25
 }
26 26
 
27 27
 /**
@@ -30,59 +30,59 @@  discard block
 block discarded – undo
30 30
  * @param Pile $pile Pile
31 31
  */
32 32
 function spip_generer_variables_css_typo(array $Pile): \Spip_Css_Vars_Collection {
33
-	$vars = new \Spip_Css_Vars_Collection();
34
-
35
-	// Direction
36
-	$vars->add('--spip-dir', $Pile[0]['dir']);
37
-	$vars->add('--spip-left', $Pile[0]['left']);
38
-	$vars->add('--spip-right', $Pile[0]['right']);
39
-
40
-	// Typographie
41
-	$vars->add('--spip-font-size', $Pile[0]['font-size']);
42
-	$vars->add('--spip-line-height', $Pile[0]['line-height']);
43
-	$vars->add('--spip-text-indent', $Pile[0]['text-indent']);
44
-	$vars->add('--spip-font-family', $Pile[0]['font-family']);
45
-
46
-	// Couleurs hors thème
47
-	$vars->add('--spip-background-color', $Pile[0]['background-color']);
48
-	$vars->add('--spip-color', $Pile[0]['color']);
49
-
50
-	// Espacements pour le rythme vertical et les gouttières
51
-	// Basés sur la hauteur d'une ligne de texte à la racine du document
52
-	$vars->add('--spip-spacing-y', round(strmult($Pile[0]['font-size'], $Pile[0]['line-height']), 4) . 'rem');
53
-	$vars->add('--spip-spacing-x', round(strmult($Pile[0]['font-size'], $Pile[0]['line-height']), 4) . 'rem');
54
-	$vars->add('--spip-margin-bottom', $Pile[0]['margin-bottom']); // À déprécier
55
-
56
-	// Bordures
57
-	$vars->add('--spip-border-radius-mini', '0.2rem');
58
-	$vars->add('--spip-border-radius', '0.33rem');
59
-	$vars->add('--spip-border-radius-large', '0.66rem');
60
-
61
-	// Ombres portées
62
-	$shadow_mini =
63
-		'0 0.05em 0.1em hsla(0, 0%, 0%, 0.33),' .
64
-		'0 0.1em  0.15em hsla(0, 0%, 0%, 0.05),' .
65
-		'0 0.1em  0.25em  hsla(0, 0%, 0%, 0.05)';
66
-	$shadow =
67
-		'0 0.05em 0.15em hsla(0, 0%, 0%, 0.33),' .
68
-		'0 0.1em  0.25em hsla(0, 0%, 0%, 0.05),' .
69
-		'0 0.1em  0.5em  hsla(0, 0%, 0%, 0.05)';
70
-	$shadow_large =
71
-		'0 0.05em 0.15em hsla(0, 0%, 0%, 0.1),' .
72
-		'0 0.2em  0.5em  hsla(0, 0%, 0%, 0.1),' .
73
-		'0 0.2em  1em    hsla(0, 0%, 0%, 0.075)';
74
-	$shadow_huge =
75
-		'0 0.1em 0.25em hsla(0, 0%, 0%, 0.1),' .
76
-		'0 0.25em  1em  hsla(0, 0%, 0%, 0.1),' .
77
-		'0 0.5em  2em    hsla(0, 0%, 0%, 0.075)';
78
-	$vars->add('--spip-box-shadow-mini', $shadow_mini);
79
-	$vars->add('--spip-box-shadow-mini-hover', $shadow);
80
-	$vars->add('--spip-box-shadow', $shadow);
81
-	$vars->add('--spip-box-shadow-hover', $shadow_large);
82
-	$vars->add('--spip-box-shadow-large', $shadow_large);
83
-	$vars->add('--spip-box-shadow-large-hover', $shadow_huge);
84
-
85
-	return $vars;
33
+    $vars = new \Spip_Css_Vars_Collection();
34
+
35
+    // Direction
36
+    $vars->add('--spip-dir', $Pile[0]['dir']);
37
+    $vars->add('--spip-left', $Pile[0]['left']);
38
+    $vars->add('--spip-right', $Pile[0]['right']);
39
+
40
+    // Typographie
41
+    $vars->add('--spip-font-size', $Pile[0]['font-size']);
42
+    $vars->add('--spip-line-height', $Pile[0]['line-height']);
43
+    $vars->add('--spip-text-indent', $Pile[0]['text-indent']);
44
+    $vars->add('--spip-font-family', $Pile[0]['font-family']);
45
+
46
+    // Couleurs hors thème
47
+    $vars->add('--spip-background-color', $Pile[0]['background-color']);
48
+    $vars->add('--spip-color', $Pile[0]['color']);
49
+
50
+    // Espacements pour le rythme vertical et les gouttières
51
+    // Basés sur la hauteur d'une ligne de texte à la racine du document
52
+    $vars->add('--spip-spacing-y', round(strmult($Pile[0]['font-size'], $Pile[0]['line-height']), 4) . 'rem');
53
+    $vars->add('--spip-spacing-x', round(strmult($Pile[0]['font-size'], $Pile[0]['line-height']), 4) . 'rem');
54
+    $vars->add('--spip-margin-bottom', $Pile[0]['margin-bottom']); // À déprécier
55
+
56
+    // Bordures
57
+    $vars->add('--spip-border-radius-mini', '0.2rem');
58
+    $vars->add('--spip-border-radius', '0.33rem');
59
+    $vars->add('--spip-border-radius-large', '0.66rem');
60
+
61
+    // Ombres portées
62
+    $shadow_mini =
63
+        '0 0.05em 0.1em hsla(0, 0%, 0%, 0.33),' .
64
+        '0 0.1em  0.15em hsla(0, 0%, 0%, 0.05),' .
65
+        '0 0.1em  0.25em  hsla(0, 0%, 0%, 0.05)';
66
+    $shadow =
67
+        '0 0.05em 0.15em hsla(0, 0%, 0%, 0.33),' .
68
+        '0 0.1em  0.25em hsla(0, 0%, 0%, 0.05),' .
69
+        '0 0.1em  0.5em  hsla(0, 0%, 0%, 0.05)';
70
+    $shadow_large =
71
+        '0 0.05em 0.15em hsla(0, 0%, 0%, 0.1),' .
72
+        '0 0.2em  0.5em  hsla(0, 0%, 0%, 0.1),' .
73
+        '0 0.2em  1em    hsla(0, 0%, 0%, 0.075)';
74
+    $shadow_huge =
75
+        '0 0.1em 0.25em hsla(0, 0%, 0%, 0.1),' .
76
+        '0 0.25em  1em  hsla(0, 0%, 0%, 0.1),' .
77
+        '0 0.5em  2em    hsla(0, 0%, 0%, 0.075)';
78
+    $vars->add('--spip-box-shadow-mini', $shadow_mini);
79
+    $vars->add('--spip-box-shadow-mini-hover', $shadow);
80
+    $vars->add('--spip-box-shadow', $shadow);
81
+    $vars->add('--spip-box-shadow-hover', $shadow_large);
82
+    $vars->add('--spip-box-shadow-large', $shadow_large);
83
+    $vars->add('--spip-box-shadow-large-hover', $shadow_huge);
84
+
85
+    return $vars;
86 86
 }
87 87
 
88 88
 /**
@@ -91,101 +91,101 @@  discard block
 block discarded – undo
91 91
  * @param string $couleur Couleur hex
92 92
  */
93 93
 function spip_generer_variables_css_couleurs_theme(string $couleur): \Spip_Css_Vars_Collection {
94
-	$vars = new \Spip_Css_Vars_Collection();
95
-
96
-	#$vars->add('--spip-color-theme--hsl', couleur_hex_to_hsl($couleur, 'h, s, l')); // redéfini ensuite
97
-	$vars->add('--spip-color-theme--h', couleur_hex_to_hsl($couleur, 'h'));
98
-	$vars->add('--spip-color-theme--s', couleur_hex_to_hsl($couleur, 's'));
99
-	$vars->add('--spip-color-theme--l', couleur_hex_to_hsl($couleur, 'l'));
100
-
101
-	// un joli dégradé coloré de presque blanc à presque noir…
102
-	$vars->add('--spip-color-theme--100', couleur_hex_to_hsl(couleur_eclaircir($couleur, .99), 'h, s, l'));
103
-	$vars->add('--spip-color-theme--98', couleur_hex_to_hsl(couleur_eclaircir($couleur, .95), 'h, s, l'));
104
-	$vars->add('--spip-color-theme--95', couleur_hex_to_hsl(couleur_eclaircir($couleur, .90), 'h, s, l'));
105
-	$vars->add('--spip-color-theme--90', couleur_hex_to_hsl(couleur_eclaircir($couleur, .75), 'h, s, l'));
106
-	$vars->add('--spip-color-theme--80', couleur_hex_to_hsl(couleur_eclaircir($couleur, .50), 'h, s, l'));
107
-	$vars->add('--spip-color-theme--70', couleur_hex_to_hsl(couleur_eclaircir($couleur, .25), 'h, s, l'));
108
-	$vars->add('--spip-color-theme--60', couleur_hex_to_hsl($couleur, 'h, s, l'));
109
-	$vars->add('--spip-color-theme--50', couleur_hex_to_hsl(couleur_foncer($couleur, .125), 'h, s, l'));
110
-	$vars->add('--spip-color-theme--40', couleur_hex_to_hsl(couleur_foncer($couleur, .25), 'h, s, l'));
111
-	$vars->add('--spip-color-theme--30', couleur_hex_to_hsl(couleur_foncer($couleur, .375), 'h, s, l'));
112
-	$vars->add('--spip-color-theme--20', couleur_hex_to_hsl(couleur_foncer($couleur, .50), 'h, s, l'));
113
-	$vars->add('--spip-color-theme--10', couleur_hex_to_hsl(couleur_foncer($couleur, .75), 'h, s, l'));
114
-	$vars->add('--spip-color-theme--00', couleur_hex_to_hsl(couleur_foncer($couleur, .98), 'h, s, l'));
115
-
116
-	return $vars;
94
+    $vars = new \Spip_Css_Vars_Collection();
95
+
96
+    #$vars->add('--spip-color-theme--hsl', couleur_hex_to_hsl($couleur, 'h, s, l')); // redéfini ensuite
97
+    $vars->add('--spip-color-theme--h', couleur_hex_to_hsl($couleur, 'h'));
98
+    $vars->add('--spip-color-theme--s', couleur_hex_to_hsl($couleur, 's'));
99
+    $vars->add('--spip-color-theme--l', couleur_hex_to_hsl($couleur, 'l'));
100
+
101
+    // un joli dégradé coloré de presque blanc à presque noir…
102
+    $vars->add('--spip-color-theme--100', couleur_hex_to_hsl(couleur_eclaircir($couleur, .99), 'h, s, l'));
103
+    $vars->add('--spip-color-theme--98', couleur_hex_to_hsl(couleur_eclaircir($couleur, .95), 'h, s, l'));
104
+    $vars->add('--spip-color-theme--95', couleur_hex_to_hsl(couleur_eclaircir($couleur, .90), 'h, s, l'));
105
+    $vars->add('--spip-color-theme--90', couleur_hex_to_hsl(couleur_eclaircir($couleur, .75), 'h, s, l'));
106
+    $vars->add('--spip-color-theme--80', couleur_hex_to_hsl(couleur_eclaircir($couleur, .50), 'h, s, l'));
107
+    $vars->add('--spip-color-theme--70', couleur_hex_to_hsl(couleur_eclaircir($couleur, .25), 'h, s, l'));
108
+    $vars->add('--spip-color-theme--60', couleur_hex_to_hsl($couleur, 'h, s, l'));
109
+    $vars->add('--spip-color-theme--50', couleur_hex_to_hsl(couleur_foncer($couleur, .125), 'h, s, l'));
110
+    $vars->add('--spip-color-theme--40', couleur_hex_to_hsl(couleur_foncer($couleur, .25), 'h, s, l'));
111
+    $vars->add('--spip-color-theme--30', couleur_hex_to_hsl(couleur_foncer($couleur, .375), 'h, s, l'));
112
+    $vars->add('--spip-color-theme--20', couleur_hex_to_hsl(couleur_foncer($couleur, .50), 'h, s, l'));
113
+    $vars->add('--spip-color-theme--10', couleur_hex_to_hsl(couleur_foncer($couleur, .75), 'h, s, l'));
114
+    $vars->add('--spip-color-theme--00', couleur_hex_to_hsl(couleur_foncer($couleur, .98), 'h, s, l'));
115
+
116
+    return $vars;
117 117
 }
118 118
 
119 119
 /**
120 120
  * Génère les variables CSS de couleurs, dont celles dépendantes des couleurs du thème actif.
121 121
  */
122 122
 function spip_generer_variables_css_couleurs(): \Spip_Css_Vars_Collection {
123
-	$vars = new \Spip_Css_Vars_Collection();
124
-
125
-	// nos déclinaisons de couleur (basées sur le dégradé précedent, où 60 est là couleur du thème)
126
-	$vars->add('--spip-color-theme-white--hsl', 'var(--spip-color-theme--100)');
127
-	$vars->add('--spip-color-theme-lightest--hsl', 'var(--spip-color-theme--95)');
128
-	$vars->add('--spip-color-theme-lighter--hsl', 'var(--spip-color-theme--90)');
129
-	$vars->add('--spip-color-theme-light--hsl', 'var(--spip-color-theme--80)');
130
-	$vars->add('--spip-color-theme--hsl', 'var(--spip-color-theme--60)');
131
-	$vars->add('--spip-color-theme-dark--hsl', 'var(--spip-color-theme--40)');
132
-	$vars->add('--spip-color-theme-darker--hsl', 'var(--spip-color-theme--20)');
133
-	$vars->add('--spip-color-theme-darkest--hsl', 'var(--spip-color-theme--10)');
134
-	$vars->add('--spip-color-theme-black--hsl', 'var(--spip-color-theme--00)');
135
-
136
-	$vars->add('--spip-color-theme-white', 'hsl(var(--spip-color-theme-white--hsl))');
137
-	$vars->add('--spip-color-theme-lightest', 'hsl(var(--spip-color-theme-lightest--hsl))');
138
-	$vars->add('--spip-color-theme-lighter', 'hsl(var(--spip-color-theme-lighter--hsl))');
139
-	$vars->add('--spip-color-theme-light', 'hsl(var(--spip-color-theme-light--hsl))');
140
-	$vars->add('--spip-color-theme', 'hsl(var(--spip-color-theme--hsl))');
141
-	$vars->add('--spip-color-theme-dark', 'hsl(var(--spip-color-theme-dark--hsl))');
142
-	$vars->add('--spip-color-theme-darker', 'hsl(var(--spip-color-theme-darker--hsl))');
143
-	$vars->add('--spip-color-theme-darkest', 'hsl(var(--spip-color-theme-darkest--hsl))');
144
-	$vars->add('--spip-color-theme-black', 'hsl(var(--spip-color-theme-black--hsl))');
145
-
146
-	// déclinaisons de gris (luminosité calquée sur le dégradé de couleur)
147
-	$vars->add('--spip-color-white--hsl', '0, 0%, 100%');
148
-	$vars->add('--spip-color-gray-lightest--hsl', '0, 0%, 96%');
149
-	$vars->add('--spip-color-gray-lighter--hsl', '0, 0%, 90%');
150
-	$vars->add('--spip-color-gray-light--hsl', '0, 0%, 80%');
151
-	$vars->add('--spip-color-gray--hsl', '0, 0%, 60%');
152
-	$vars->add('--spip-color-gray-dark--hsl', '0, 0%, 40%');
153
-	$vars->add('--spip-color-gray-darker--hsl', '0, 0%, 20%');
154
-	$vars->add('--spip-color-gray-darkest--hsl', '0, 0%, 10%');
155
-	$vars->add('--spip-color-black--hsl', '0, 0%, 0%');
156
-
157
-	$vars->add('--spip-color-white', 'hsl(var(--spip-color-white--hsl))');
158
-	$vars->add('--spip-color-gray-lightest', 'hsl(var(--spip-color-gray-lightest--hsl))');
159
-	$vars->add('--spip-color-gray-lighter', 'hsl(var(--spip-color-gray-lighter--hsl))');
160
-	$vars->add('--spip-color-gray-light', 'hsl(var(--spip-color-gray-light--hsl))');
161
-	$vars->add('--spip-color-gray', 'hsl(var(--spip-color-gray--hsl))');
162
-	$vars->add('--spip-color-gray-dark', 'hsl(var(--spip-color-gray-dark--hsl))');
163
-	$vars->add('--spip-color-gray-darker', 'hsl(var(--spip-color-gray-darker--hsl))');
164
-	$vars->add('--spip-color-gray-darkest', 'hsl(var(--spip-color-gray-darkest--hsl))');
165
-	$vars->add('--spip-color-black', 'hsl(var(--spip-color-black--hsl))');
166
-
167
-	// Différents états : erreur, etc.
168
-	$vars->add('--spip-color-success--hsl', '72, 66%, 62%');
169
-	$vars->add('--spip-color-success--h', '72');
170
-	$vars->add('--spip-color-success--s', '66%');
171
-	$vars->add('--spip-color-success--l', '62%');
172
-	$vars->add('--spip-color-error--hsl', '356, 70%, 57%');
173
-	$vars->add('--spip-color-error--h', '356');
174
-	$vars->add('--spip-color-error--s', '70%');
175
-	$vars->add('--spip-color-error--l', '57%');
176
-	$vars->add('--spip-color-notice--hsl', '47, 100%, 62%');
177
-	$vars->add('--spip-color-notice--h', '47');
178
-	$vars->add('--spip-color-notice--s', '100%');
179
-	$vars->add('--spip-color-notice--l', '62%');
180
-	$vars->add('--spip-color-info--hsl', '197, 56%, 27%');
181
-	$vars->add('--spip-color-info--h', '197');
182
-	$vars->add('--spip-color-info--s', '56%');
183
-	$vars->add('--spip-color-info--l', '27%');
184
-
185
-	$vars->add('--spip-color-success', 'hsl(var(--spip-color-success--hsl))');
186
-	$vars->add('--spip-color-error', 'hsl(var(--spip-color-error--hsl))');
187
-	$vars->add('--spip-color-notice', 'hsl(var(--spip-color-notice--hsl))');
188
-	$vars->add('--spip-color-info', 'hsl(var(--spip-color-info--hsl))');
189
-
190
-	return $vars;
123
+    $vars = new \Spip_Css_Vars_Collection();
124
+
125
+    // nos déclinaisons de couleur (basées sur le dégradé précedent, où 60 est là couleur du thème)
126
+    $vars->add('--spip-color-theme-white--hsl', 'var(--spip-color-theme--100)');
127
+    $vars->add('--spip-color-theme-lightest--hsl', 'var(--spip-color-theme--95)');
128
+    $vars->add('--spip-color-theme-lighter--hsl', 'var(--spip-color-theme--90)');
129
+    $vars->add('--spip-color-theme-light--hsl', 'var(--spip-color-theme--80)');
130
+    $vars->add('--spip-color-theme--hsl', 'var(--spip-color-theme--60)');
131
+    $vars->add('--spip-color-theme-dark--hsl', 'var(--spip-color-theme--40)');
132
+    $vars->add('--spip-color-theme-darker--hsl', 'var(--spip-color-theme--20)');
133
+    $vars->add('--spip-color-theme-darkest--hsl', 'var(--spip-color-theme--10)');
134
+    $vars->add('--spip-color-theme-black--hsl', 'var(--spip-color-theme--00)');
135
+
136
+    $vars->add('--spip-color-theme-white', 'hsl(var(--spip-color-theme-white--hsl))');
137
+    $vars->add('--spip-color-theme-lightest', 'hsl(var(--spip-color-theme-lightest--hsl))');
138
+    $vars->add('--spip-color-theme-lighter', 'hsl(var(--spip-color-theme-lighter--hsl))');
139
+    $vars->add('--spip-color-theme-light', 'hsl(var(--spip-color-theme-light--hsl))');
140
+    $vars->add('--spip-color-theme', 'hsl(var(--spip-color-theme--hsl))');
141
+    $vars->add('--spip-color-theme-dark', 'hsl(var(--spip-color-theme-dark--hsl))');
142
+    $vars->add('--spip-color-theme-darker', 'hsl(var(--spip-color-theme-darker--hsl))');
143
+    $vars->add('--spip-color-theme-darkest', 'hsl(var(--spip-color-theme-darkest--hsl))');
144
+    $vars->add('--spip-color-theme-black', 'hsl(var(--spip-color-theme-black--hsl))');
145
+
146
+    // déclinaisons de gris (luminosité calquée sur le dégradé de couleur)
147
+    $vars->add('--spip-color-white--hsl', '0, 0%, 100%');
148
+    $vars->add('--spip-color-gray-lightest--hsl', '0, 0%, 96%');
149
+    $vars->add('--spip-color-gray-lighter--hsl', '0, 0%, 90%');
150
+    $vars->add('--spip-color-gray-light--hsl', '0, 0%, 80%');
151
+    $vars->add('--spip-color-gray--hsl', '0, 0%, 60%');
152
+    $vars->add('--spip-color-gray-dark--hsl', '0, 0%, 40%');
153
+    $vars->add('--spip-color-gray-darker--hsl', '0, 0%, 20%');
154
+    $vars->add('--spip-color-gray-darkest--hsl', '0, 0%, 10%');
155
+    $vars->add('--spip-color-black--hsl', '0, 0%, 0%');
156
+
157
+    $vars->add('--spip-color-white', 'hsl(var(--spip-color-white--hsl))');
158
+    $vars->add('--spip-color-gray-lightest', 'hsl(var(--spip-color-gray-lightest--hsl))');
159
+    $vars->add('--spip-color-gray-lighter', 'hsl(var(--spip-color-gray-lighter--hsl))');
160
+    $vars->add('--spip-color-gray-light', 'hsl(var(--spip-color-gray-light--hsl))');
161
+    $vars->add('--spip-color-gray', 'hsl(var(--spip-color-gray--hsl))');
162
+    $vars->add('--spip-color-gray-dark', 'hsl(var(--spip-color-gray-dark--hsl))');
163
+    $vars->add('--spip-color-gray-darker', 'hsl(var(--spip-color-gray-darker--hsl))');
164
+    $vars->add('--spip-color-gray-darkest', 'hsl(var(--spip-color-gray-darkest--hsl))');
165
+    $vars->add('--spip-color-black', 'hsl(var(--spip-color-black--hsl))');
166
+
167
+    // Différents états : erreur, etc.
168
+    $vars->add('--spip-color-success--hsl', '72, 66%, 62%');
169
+    $vars->add('--spip-color-success--h', '72');
170
+    $vars->add('--spip-color-success--s', '66%');
171
+    $vars->add('--spip-color-success--l', '62%');
172
+    $vars->add('--spip-color-error--hsl', '356, 70%, 57%');
173
+    $vars->add('--spip-color-error--h', '356');
174
+    $vars->add('--spip-color-error--s', '70%');
175
+    $vars->add('--spip-color-error--l', '57%');
176
+    $vars->add('--spip-color-notice--hsl', '47, 100%, 62%');
177
+    $vars->add('--spip-color-notice--h', '47');
178
+    $vars->add('--spip-color-notice--s', '100%');
179
+    $vars->add('--spip-color-notice--l', '62%');
180
+    $vars->add('--spip-color-info--hsl', '197, 56%, 27%');
181
+    $vars->add('--spip-color-info--h', '197');
182
+    $vars->add('--spip-color-info--s', '56%');
183
+    $vars->add('--spip-color-info--l', '27%');
184
+
185
+    $vars->add('--spip-color-success', 'hsl(var(--spip-color-success--hsl))');
186
+    $vars->add('--spip-color-error', 'hsl(var(--spip-color-error--hsl))');
187
+    $vars->add('--spip-color-notice', 'hsl(var(--spip-color-notice--hsl))');
188
+    $vars->add('--spip-color-info', 'hsl(var(--spip-color-info--hsl))');
189
+
190
+    return $vars;
191 191
 }
Please login to merge, or discard this patch.
prive/objets/liste/articles_fonctions.php 1 patch
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -11,40 +11,40 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 function defaut_tri_defined($defaut) {
18
-	if (!defined('_TRI_ARTICLES_RUBRIQUE')) {
19
-		return $defaut;
20
-	}
18
+    if (!defined('_TRI_ARTICLES_RUBRIQUE')) {
19
+        return $defaut;
20
+    }
21 21
 
22
-	$sens = 1;
23
-	$tri = trim(_TRI_ARTICLES_RUBRIQUE);
24
-	$tri = explode(' ', $tri);
25
-	if (strncasecmp(end($tri), 'DESC', 4) == 0) {
26
-		$sens = -1;
27
-		array_pop($tri);
28
-	} elseif (strncasecmp(end($tri), 'ASC', 3) == 0) {
29
-		$sens = 1;
30
-		array_pop($tri);
31
-	}
32
-	$tri = implode(' ', $tri);
33
-	$tri = [$tri => $sens];
34
-	foreach ($defaut as $n => $s) {
35
-		if (!isset($tri[$n])) {
36
-			$tri[$n] = $s;
37
-		}
38
-	}
22
+    $sens = 1;
23
+    $tri = trim(_TRI_ARTICLES_RUBRIQUE);
24
+    $tri = explode(' ', $tri);
25
+    if (strncasecmp(end($tri), 'DESC', 4) == 0) {
26
+        $sens = -1;
27
+        array_pop($tri);
28
+    } elseif (strncasecmp(end($tri), 'ASC', 3) == 0) {
29
+        $sens = 1;
30
+        array_pop($tri);
31
+    }
32
+    $tri = implode(' ', $tri);
33
+    $tri = [$tri => $sens];
34
+    foreach ($defaut as $n => $s) {
35
+        if (!isset($tri[$n])) {
36
+            $tri[$n] = $s;
37
+        }
38
+    }
39 39
 
40
-	return $tri;
40
+    return $tri;
41 41
 }
42 42
 
43 43
 function defaut_tri_par($par, $defaut) {
44
-	if (!defined('_TRI_ARTICLES_RUBRIQUE')) {
45
-		return $par;
46
-	}
47
-	$par = array_keys($defaut);
44
+    if (!defined('_TRI_ARTICLES_RUBRIQUE')) {
45
+        return $par;
46
+    }
47
+    $par = array_keys($defaut);
48 48
 
49
-	return reset($par);
49
+    return reset($par);
50 50
 }
Please login to merge, or discard this patch.
prive/objets/liste/objets-trad_fonctions.php 2 patches
Indentation   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -11,24 +11,24 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 function lister_traductions($id_trad, $objet) {
18
-	$table_objet_sql = table_objet_sql($objet);
19
-	$primary = id_table_objet($objet);
18
+    $table_objet_sql = table_objet_sql($objet);
19
+    $primary = id_table_objet($objet);
20 20
 
21
-	$select = "$primary as id,lang";
22
-	$where = 'id_trad=' . intval($id_trad);
23
-	$trouver_table = charger_fonction('trouver_table', 'base');
24
-	$desc = $trouver_table($table_objet_sql);
25
-	if (isset($desc['field']['statut'])) {
26
-		$select .= ',statut';
27
-		$where .= ' AND statut!=' . sql_quote('poubelle');
28
-	}
21
+    $select = "$primary as id,lang";
22
+    $where = 'id_trad=' . intval($id_trad);
23
+    $trouver_table = charger_fonction('trouver_table', 'base');
24
+    $desc = $trouver_table($table_objet_sql);
25
+    if (isset($desc['field']['statut'])) {
26
+        $select .= ',statut';
27
+        $where .= ' AND statut!=' . sql_quote('poubelle');
28
+    }
29 29
 
30
-	$rows = sql_allfetsel($select, $table_objet_sql, $where);
31
-	lang_select();
30
+    $rows = sql_allfetsel($select, $table_objet_sql, $where);
31
+    lang_select();
32 32
 
33
-	return $rows;
33
+    return $rows;
34 34
 }
Please login to merge, or discard this patch.
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -19,12 +19,12 @@
 block discarded – undo
19 19
 	$primary = id_table_objet($objet);
20 20
 
21 21
 	$select = "$primary as id,lang";
22
-	$where = 'id_trad=' . intval($id_trad);
22
+	$where = 'id_trad='.intval($id_trad);
23 23
 	$trouver_table = charger_fonction('trouver_table', 'base');
24 24
 	$desc = $trouver_table($table_objet_sql);
25 25
 	if (isset($desc['field']['statut'])) {
26 26
 		$select .= ',statut';
27
-		$where .= ' AND statut!=' . sql_quote('poubelle');
27
+		$where .= ' AND statut!='.sql_quote('poubelle');
28 28
 	}
29 29
 
30 30
 	$rows = sql_allfetsel($select, $table_objet_sql, $where);
Please login to merge, or discard this patch.
prive/formulaires/configurer_transcodeur.php 1 patch
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -11,35 +11,35 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 function formulaires_configurer_transcodeur_charger_dist() {
18
-	$valeurs = [
19
-		'charset' => $GLOBALS['meta']['charset'],
20
-	];
18
+    $valeurs = [
19
+        'charset' => $GLOBALS['meta']['charset'],
20
+    ];
21 21
 
22
-	return $valeurs;
22
+    return $valeurs;
23 23
 }
24 24
 
25 25
 function formulaires_configurer_transcodeur_verifier_dist() {
26
-	include_spip('inc/charsets');
26
+    include_spip('inc/charsets');
27 27
 
28
-	$erreurs = [];
29
-	if (!$charset = _request('charset')) {
30
-		$erreurs['charset'] = _T('info_obligatoire');
31
-	} elseif ($charset != 'utf-8' and !load_charset($charset)) {
32
-		$erreurs['charset'] = _T('utf8_convert_erreur_orig', ['charset' => entites_html($charset)]);
33
-	}
28
+    $erreurs = [];
29
+    if (!$charset = _request('charset')) {
30
+        $erreurs['charset'] = _T('info_obligatoire');
31
+    } elseif ($charset != 'utf-8' and !load_charset($charset)) {
32
+        $erreurs['charset'] = _T('utf8_convert_erreur_orig', ['charset' => entites_html($charset)]);
33
+    }
34 34
 
35
-	return $erreurs;
35
+    return $erreurs;
36 36
 }
37 37
 
38 38
 
39 39
 function formulaires_configurer_transcodeur_traiter_dist() {
40
-	$res = ['editable' => true];
41
-	ecrire_meta('charset', _request('charset'));
42
-	$res['message_ok'] = _T('config_info_enregistree');
40
+    $res = ['editable' => true];
41
+    ecrire_meta('charset', _request('charset'));
42
+    $res['message_ok'] = _T('config_info_enregistree');
43 43
 
44
-	return $res;
44
+    return $res;
45 45
 }
Please login to merge, or discard this patch.
prive/formulaires/configurer_ecran_connexion.php 3 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -3,7 +3,7 @@
 block discarded – undo
3 3
 function formulaires_configurer_ecran_connexion_data(): array {
4 4
 	return [
5 5
 		'couleur_defaut' => '#db1762',
6
-		'img_fond' => _DIR_IMG . 'spip_fond_login.jpg',
6
+		'img_fond' => _DIR_IMG.'spip_fond_login.jpg',
7 7
 	];
8 8
 }
9 9
 
Please login to merge, or discard this patch.
Indentation   +74 added lines, -74 removed lines patch added patch discarded remove patch
@@ -1,94 +1,94 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 function formulaires_configurer_ecran_connexion_data(): array {
4
-	return [
5
-		'couleur_defaut' => '#db1762',
6
-		'img_fond' => _DIR_IMG . 'spip_fond_login.jpg',
7
-	];
4
+    return [
5
+        'couleur_defaut' => '#db1762',
6
+        'img_fond' => _DIR_IMG . 'spip_fond_login.jpg',
7
+    ];
8 8
 }
9 9
 
10 10
 function formulaires_configurer_ecran_connexion_charger_dist() {
11
-	include_spip('inc/config');
12
-	include_spip('inc/autoriser');
11
+    include_spip('inc/config');
12
+    include_spip('inc/autoriser');
13 13
 
14
-	$data = formulaires_configurer_ecran_connexion_data();
14
+    $data = formulaires_configurer_ecran_connexion_data();
15 15
 
16
-	$valeurs = [
17
-		'couleur_login' => lire_config('couleur_login', $data['couleur_defaut']),
18
-		'couleur_defaut_login' => $data['couleur_defaut'],
19
-		'upload_image_fond_login' => '',
20
-	];
16
+    $valeurs = [
17
+        'couleur_login' => lire_config('couleur_login', $data['couleur_defaut']),
18
+        'couleur_defaut_login' => $data['couleur_defaut'],
19
+        'upload_image_fond_login' => '',
20
+    ];
21 21
 
22
-	if (file_exists($data['img_fond'])) {
23
-		$valeurs['src_img'] = $data['img_fond'];
24
-	}
22
+    if (file_exists($data['img_fond'])) {
23
+        $valeurs['src_img'] = $data['img_fond'];
24
+    }
25 25
 
26
-	return $valeurs;
26
+    return $valeurs;
27 27
 }
28 28
 
29 29
 
30 30
 function formulaires_configurer_ecran_connexion_verifier_dist() {
31
-	$erreurs = [];
32
-
33
-	if (_request('supprimer_image_fond_login')) {
34
-		// rien à tester
35
-	}
36
-
37
-	elseif (_request('supprimer_couleur_login')) {
38
-		// rien à tester
39
-	}
40
-
41
-	elseif (!empty($_FILES['upload_image_fond_login'])) {
42
-		$file = $_FILES['upload_image_fond_login'];
43
-		include_spip('inc/documents');
44
-		$extension = pathinfo($file['name'], PATHINFO_EXTENSION);
45
-		$extension = corriger_extension(strtolower($extension));
46
-		if (!in_array($extension, ['jpg'])) {
47
-			$erreurs['upload_image_fond_login'] = _T('erreur_type_fichier');
48
-		}
49
-	}
50
-
51
-	return $erreurs;
31
+    $erreurs = [];
32
+
33
+    if (_request('supprimer_image_fond_login')) {
34
+        // rien à tester
35
+    }
36
+
37
+    elseif (_request('supprimer_couleur_login')) {
38
+        // rien à tester
39
+    }
40
+
41
+    elseif (!empty($_FILES['upload_image_fond_login'])) {
42
+        $file = $_FILES['upload_image_fond_login'];
43
+        include_spip('inc/documents');
44
+        $extension = pathinfo($file['name'], PATHINFO_EXTENSION);
45
+        $extension = corriger_extension(strtolower($extension));
46
+        if (!in_array($extension, ['jpg'])) {
47
+            $erreurs['upload_image_fond_login'] = _T('erreur_type_fichier');
48
+        }
49
+    }
50
+
51
+    return $erreurs;
52 52
 }
53 53
 
54 54
 
55 55
 function formulaires_configurer_ecran_connexion_traiter_dist() {
56 56
 
57
-	$retours = [
58
-		'message_ok' => _T('config_info_enregistree'),
59
-		'editable' => true,
60
-	];
61
-
62
-	include_spip('inc/config');
63
-	$data = formulaires_configurer_ecran_connexion_data();
64
-	$dest = $data['img_fond'];
65
-
66
-	if (_request('couleur_login')) {
67
-		$color = _request('couleur_login');
68
-		if ($color === $data['couleur_defaut']) {
69
-			effacer_config('couleur_login');
70
-		} else {
71
-			ecrire_config('couleur_login', $color);
72
-		}
73
-	}
74
-
75
-	if (_request('supprimer_image_fond_login')) {
76
-		@unlink($dest);
77
-	}
78
-
79
-	elseif (_request('supprimer_couleur_login')) {
80
-		effacer_config('couleur_login');
81
-		set_request('couleur_login', null);
82
-	}
83
-
84
-	elseif (!empty($_FILES['upload_image_fond_login'])) {
85
-		$file = $_FILES['upload_image_fond_login'];
86
-		include_spip('inc/documents');
87
-		deplacer_fichier_upload($file['tmp_name'], $dest);
88
-	}
89
-
90
-	include_spip('inc/invalideur');
91
-	suivre_invalideur('1'); # tout effacer
92
-
93
-	return $retours;
57
+    $retours = [
58
+        'message_ok' => _T('config_info_enregistree'),
59
+        'editable' => true,
60
+    ];
61
+
62
+    include_spip('inc/config');
63
+    $data = formulaires_configurer_ecran_connexion_data();
64
+    $dest = $data['img_fond'];
65
+
66
+    if (_request('couleur_login')) {
67
+        $color = _request('couleur_login');
68
+        if ($color === $data['couleur_defaut']) {
69
+            effacer_config('couleur_login');
70
+        } else {
71
+            ecrire_config('couleur_login', $color);
72
+        }
73
+    }
74
+
75
+    if (_request('supprimer_image_fond_login')) {
76
+        @unlink($dest);
77
+    }
78
+
79
+    elseif (_request('supprimer_couleur_login')) {
80
+        effacer_config('couleur_login');
81
+        set_request('couleur_login', null);
82
+    }
83
+
84
+    elseif (!empty($_FILES['upload_image_fond_login'])) {
85
+        $file = $_FILES['upload_image_fond_login'];
86
+        include_spip('inc/documents');
87
+        deplacer_fichier_upload($file['tmp_name'], $dest);
88
+    }
89
+
90
+    include_spip('inc/invalideur');
91
+    suivre_invalideur('1'); # tout effacer
92
+
93
+    return $retours;
94 94
 }
Please login to merge, or discard this patch.
Braces   +4 added lines, -12 removed lines patch added patch discarded remove patch
@@ -32,13 +32,9 @@  discard block
 block discarded – undo
32 32
 
33 33
 	if (_request('supprimer_image_fond_login')) {
34 34
 		// rien à tester
35
-	}
36
-
37
-	elseif (_request('supprimer_couleur_login')) {
35
+	} elseif (_request('supprimer_couleur_login')) {
38 36
 		// rien à tester
39
-	}
40
-
41
-	elseif (!empty($_FILES['upload_image_fond_login'])) {
37
+	} elseif (!empty($_FILES['upload_image_fond_login'])) {
42 38
 		$file = $_FILES['upload_image_fond_login'];
43 39
 		include_spip('inc/documents');
44 40
 		$extension = pathinfo($file['name'], PATHINFO_EXTENSION);
@@ -74,14 +70,10 @@  discard block
 block discarded – undo
74 70
 
75 71
 	if (_request('supprimer_image_fond_login')) {
76 72
 		@unlink($dest);
77
-	}
78
-
79
-	elseif (_request('supprimer_couleur_login')) {
73
+	} elseif (_request('supprimer_couleur_login')) {
80 74
 		effacer_config('couleur_login');
81 75
 		set_request('couleur_login', null);
82
-	}
83
-
84
-	elseif (!empty($_FILES['upload_image_fond_login'])) {
76
+	} elseif (!empty($_FILES['upload_image_fond_login'])) {
85 77
 		$file = $_FILES['upload_image_fond_login'];
86 78
 		include_spip('inc/documents');
87 79
 		deplacer_fichier_upload($file['tmp_name'], $dest);
Please login to merge, or discard this patch.