Completed
Push — master ( 3898e1...ad50fe )
by cam
01:35
created
ecrire/req/mysql.php 3 patches
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -553,16 +553,14 @@
 block discarded – undo
553 553
 		if (stripos($suite, 'SELECT') !== false) {
554 554
 			if ($echappe_textes) {
555 555
 				[$suite_echap, $textes] = query_echappe_textes($suite);
556
-			}
557
-			else {
556
+			} else {
558 557
 				$suite_echap = $suite;
559 558
 			}
560 559
 			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
561 560
 				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
562 561
 				if ($echappe_textes) {
563 562
 					$suite = query_reinjecte_textes($suite_echap, $textes);
564
-				}
565
-				else {
563
+				} else {
566 564
 					$suite = $suite_echap;
567 565
 				}
568 566
 			}
Please login to merge, or discard this patch.
Spacing   +81 added lines, -81 removed lines patch added patch discarded remove patch
@@ -58,12 +58,12 @@  discard block
 block discarded – undo
58 58
 			$link = @mysqli_connect($host, $login, $pass);
59 59
 		}
60 60
 	} catch (\mysqli_sql_exception $e) {
61
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
61
+		spip_log('mysqli_sql_exception: '.$e->getMessage(), 'mysql.'._LOG_DEBUG);
62 62
 		$link = false;
63 63
 	}
64 64
 
65 65
 	if (!$link) {
66
-		spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
66
+		spip_log('Echec mysqli_connect. Erreur : '.mysqli_connect_error(), 'mysql.'._LOG_HS);
67 67
 
68 68
 		return false;
69 69
 	}
@@ -82,7 +82,7 @@  discard block
 block discarded – undo
82 82
 	}
83 83
 
84 84
 	spip_log(
85
-		"Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
85
+		"Connexion MySQLi vers $host, base $db, prefixe $prefixe ".($ok ? 'operationnelle' : 'impossible'),
86 86
 		_LOG_DEBUG
87 87
 	);
88 88
 
@@ -173,9 +173,9 @@  discard block
 block discarded – undo
173 173
  */
174 174
 function spip_mysql_set_charset($charset, $serveur = '', $requeter = true) {
175 175
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
176
-	spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
176
+	spip_log('changement de charset sql : '.'SET NAMES '._q($charset), _LOG_DEBUG);
177 177
 
178
-	return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
178
+	return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES '._q($charset));
179 179
 }
180 180
 
181 181
 
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
 function spip_mysql_get_charset($charset = [], $serveur = '', $requeter = true) {
191 191
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
192 192
 	$connexion['last'] = $c = 'SHOW CHARACTER SET'
193
-		. (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
193
+		. (!$charset ? '' : (' LIKE '._q($charset['charset'])));
194 194
 
195 195
 	return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
196 196
 }
@@ -234,21 +234,21 @@  discard block
 block discarded – undo
234 234
 	$debug = '';
235 235
 	if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
236 236
 		if (isset($GLOBALS['debug']['aucasou'])) {
237
-			[, $id, , $infos] = $GLOBALS['debug']['aucasou'];
238
-			$debug .= "BOUCLE$id @ " . ($infos[0] ?? '') . ' | ';
237
+			[, $id,, $infos] = $GLOBALS['debug']['aucasou'];
238
+			$debug .= "BOUCLE$id @ ".($infos[0] ?? '').' | ';
239 239
 		}
240 240
 		if (isset($_SERVER['REQUEST_URI'])) {
241 241
 			$debug .= $_SERVER['REQUEST_URI'];
242 242
 		}
243 243
 		if (!empty($GLOBALS['ip'])) {
244
-			$debug .= ' + ' . $GLOBALS['ip'];
244
+			$debug .= ' + '.$GLOBALS['ip'];
245 245
 		}
246
-		$debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
246
+		$debug = ' /* '.mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)).' */';
247 247
 	}
248 248
 	try {
249
-		$r = mysqli_query($link, $query . $debug);
249
+		$r = mysqli_query($link, $query.$debug);
250 250
 	} catch (\mysqli_sql_exception $e) {
251
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
251
+		spip_log('mysqli_sql_exception: '.$e->getMessage(), 'mysql.'._LOG_DEBUG);
252 252
 		$r = false;
253 253
 		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
254 254
 		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
@@ -266,9 +266,9 @@  discard block
 block discarded – undo
266 266
 			$link = $connexion['link'];
267 267
 			//On retente au cas où
268 268
 			try {
269
-				$r = mysqli_query($link, $query . $debug);
269
+				$r = mysqli_query($link, $query.$debug);
270 270
 			} catch (\mysqli_sql_exception $e) {
271
-				spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
271
+				spip_log('mysqli_sql_exception: '.$e->getMessage(), 'mysql.'._LOG_DEBUG);
272 272
 				$r = false;
273 273
 				// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
274 274
 				// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
@@ -301,7 +301,7 @@  discard block
 block discarded – undo
301 301
 	// d'utiliser ceux-ci, copie-colle de phpmyadmin
302 302
 	$query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
303 303
 
304
-	return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
304
+	return spip_mysql_query('ALTER '.$query, $serveur, $requeter); # i.e. que PG se debrouille
305 305
 }
306 306
 
307 307
 
@@ -314,7 +314,7 @@  discard block
 block discarded – undo
314 314
  * @return bool            Toujours true
315 315
  */
316 316
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
317
-	spip_mysql_query('OPTIMIZE TABLE ' . $table);
317
+	spip_mysql_query('OPTIMIZE TABLE '.$table);
318 318
 
319 319
 	return true;
320 320
 }
@@ -337,7 +337,7 @@  discard block
 block discarded – undo
337 337
 	$link = $connexion['link'];
338 338
 	$db = $connexion['db'];
339 339
 
340
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
340
+	$query = 'EXPLAIN '._mysql_traite_query($query, $db, $prefixe);
341 341
 	$r = mysqli_query($link, $query);
342 342
 
343 343
 	return spip_mysql_fetch($r, null, $serveur);
@@ -388,7 +388,7 @@  discard block
 block discarded – undo
388 388
 		. calculer_mysql_expression('WHERE', $where)
389 389
 		. calculer_mysql_expression('GROUP BY', $groupby, ',')
390 390
 		. calculer_mysql_expression('HAVING', $having)
391
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
391
+		. ($orderby ? ("\nORDER BY ".spip_mysql_order($orderby)) : '')
392 392
 		. ($limit ? "\nLIMIT $limit" : '');
393 393
 
394 394
 	// renvoyer la requete inerte si demandee
@@ -478,12 +478,12 @@  discard block
 block discarded – undo
478 478
 	$exp = "\n$expression ";
479 479
 
480 480
 	if (!is_array($v)) {
481
-		return $exp . $v;
481
+		return $exp.$v;
482 482
 	} else {
483 483
 		if (strtoupper($join) === 'AND') {
484
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
484
+			return $exp.join("\n\t$join ", array_map('calculer_mysql_where', $v));
485 485
 		} else {
486
-			return $exp . join($join, $v);
486
+			return $exp.join($join, $v);
487 487
 		}
488 488
 	}
489 489
 }
@@ -501,17 +501,17 @@  discard block
 block discarded – undo
501 501
 		if (substr($k, -1) == '@') {
502 502
 			// c'est une jointure qui se refere au from precedent
503 503
 			// pas de virgule
504
-			$res .= '  ' . $v;
504
+			$res .= '  '.$v;
505 505
 		} else {
506 506
 			if (!is_numeric($k)) {
507 507
 				$p = strpos($v, ' ');
508 508
 				if ($p) {
509
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
509
+					$v = substr($v, 0, $p)." AS `$k`".substr($v, $p);
510 510
 				} else {
511 511
 					$v .= " AS `$k`";
512 512
 				}
513 513
 			}
514
-			$res .= ', ' . $v;
514
+			$res .= ', '.$v;
515 515
 		}
516 516
 	}
517 517
 
@@ -541,13 +541,13 @@  discard block
 block discarded – undo
541 541
 function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) {
542 542
 
543 543
 	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
544
-		$pref = '`' . $db . '`.';
544
+		$pref = '`'.$db.'`.';
545 545
 	} else {
546 546
 		$pref = '';
547 547
 	}
548 548
 
549 549
 	if ($prefixe) {
550
-		$pref .= $prefixe . '_';
550
+		$pref .= $prefixe.'_';
551 551
 	}
552 552
 
553 553
 	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
@@ -566,7 +566,7 @@  discard block
 block discarded – undo
566 566
 				$suite_echap = $suite;
567 567
 			}
568 568
 			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
569
-				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
569
+				$suite_echap = $r[1]._mysql_traite_query($r[2], $db, $prefixe, false);
570 570
 				if ($echappe_textes) {
571 571
 					$suite = query_reinjecte_textes($suite_echap, $textes);
572 572
 				}
@@ -576,7 +576,7 @@  discard block
 block discarded – undo
576 576
 			}
577 577
 		}
578 578
 	}
579
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
579
+	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1'.$pref, $query).$suite;
580 580
 
581 581
 	// en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
582 582
 	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
@@ -616,7 +616,7 @@  discard block
 block discarded – undo
616 616
 		$ok = false;
617 617
 	}
618 618
 	if (!$ok) {
619
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
619
+		spip_log('Echec mysqli_selectdb. Erreur : '.mysqli_error($link), 'mysql.'._LOG_CRITIQUE);
620 620
 	}
621 621
 
622 622
 	return $ok;
@@ -706,10 +706,10 @@  discard block
 block discarded – undo
706 706
 
707 707
 	$character_set = '';
708 708
 	if (@$GLOBALS['meta']['charset_sql_base']) {
709
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
709
+		$character_set .= ' CHARACTER SET '.$GLOBALS['meta']['charset_sql_base'];
710 710
 	}
711 711
 	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
712
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
712
+		$character_set .= ' COLLATE '.$GLOBALS['meta']['charset_collation_sql_base'];
713 713
 	}
714 714
 
715 715
 	foreach ($champs as $k => $v) {
@@ -719,7 +719,7 @@  discard block
 block discarded – undo
719 719
 				preg_match(',(char|text),i', $defs[1])
720 720
 				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
721 721
 			) {
722
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
722
+				$v = $defs[1].$character_set.' '.substr($v, strlen($defs[1]));
723 723
 			}
724 724
 		}
725 725
 
@@ -731,8 +731,8 @@  discard block
 block discarded – undo
731 731
 		$s = ',';
732 732
 	}
733 733
 	$temporary = $temporary ? 'TEMPORARY' : '';
734
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
735
-		. (defined('_MYSQL_ENGINE') ? ' ENGINE=' . _MYSQL_ENGINE : '')
734
+	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query".($keys ? ",$keys" : '').')'
735
+		. (defined('_MYSQL_ENGINE') ? ' ENGINE='._MYSQL_ENGINE : '')
736 736
 		. ($character_set ? " DEFAULT $character_set" : '')
737 737
 		. "\n";
738 738
 
@@ -811,7 +811,7 @@  discard block
 block discarded – undo
811 811
 		return false;
812 812
 	}
813 813
 
814
-	$query = "CREATE VIEW $nom AS " . $query_select;
814
+	$query = "CREATE VIEW $nom AS ".$query_select;
815 815
 
816 816
 	return spip_mysql_query($query, $serveur, $requeter);
817 817
 }
@@ -869,7 +869,7 @@  discard block
 block discarded – undo
869 869
  *     Ressource à utiliser avec sql_fetch()
870 870
  **/
871 871
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
872
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
872
+	return spip_mysql_query('SHOW TABLES LIKE '._q($match), $serveur, $requeter);
873 873
 }
874 874
 
875 875
 /**
@@ -885,7 +885,7 @@  discard block
 block discarded – undo
885 885
  *     - true si la requête a réussie, false sinon
886 886
  */
887 887
 function spip_mysql_repair($table, $serveur = '', $requeter = true) {
888
-	$table_status = spip_mysql_fetch(spip_mysql_query('SHOW TABLE STATUS WHERE Name = ' . _q($table), $serveur, true));
888
+	$table_status = spip_mysql_fetch(spip_mysql_query('SHOW TABLE STATUS WHERE Name = '._q($table), $serveur, true));
889 889
 	$engine = $table_status['Engine'];
890 890
 	if ($engine == 'InnoDB') {
891 891
 		if (spip_mysql_alter("TABLE $table ENGINE = InnoDB", $serveur, $requeter)) {
@@ -894,7 +894,7 @@  discard block
 block discarded – undo
894 894
 	} elseif ($engine == 'MyISAM') {
895 895
 		return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
896 896
 	} else {
897
-		spip_log("spip_mysql_repair impossible pour la table $table engine $engine", 'mysql.' . _LOG_DEBUG);
897
+		spip_log("spip_mysql_repair impossible pour la table $table engine $engine", 'mysql.'._LOG_DEBUG);
898 898
 	}
899 899
 }
900 900
 
@@ -913,7 +913,7 @@  discard block
 block discarded – undo
913 913
  *     - string : requete sql, si $requeter = true
914 914
  **/
915 915
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
916
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
916
+	$r = spip_mysql_query('SHOW TABLES LIKE '._q($table), $serveur, $requeter);
917 917
 	if (!$requeter) {
918 918
 		return $r;
919 919
 	}
@@ -995,22 +995,22 @@  discard block
 block discarded – undo
995 995
 			}
996 996
 			if ($val['Default'] === '0' || $val['Default']) {
997 997
 				if (preg_match('/[A-Z_]/', $val['Default'])) {
998
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
998
+					$nfields[$val['Field']] .= ' DEFAULT '.$val['Default'];
999 999
 				} else {
1000
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
1000
+					$nfields[$val['Field']] .= " DEFAULT '".$val['Default']."'";
1001 1001
 				}
1002 1002
 			}
1003 1003
 			if ($val['Extra']) {
1004
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
1004
+				$nfields[$val['Field']] .= ' '.$val['Extra'];
1005 1005
 			}
1006 1006
 			if ($val['Key'] == 'PRI') {
1007 1007
 				$nkeys['PRIMARY KEY'] = $val['Field'];
1008 1008
 			} else {
1009 1009
 				if ($val['Key'] == 'MUL') {
1010
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
1010
+					$nkeys['KEY '.$val['Field']] = $val['Field'];
1011 1011
 				} else {
1012 1012
 					if ($val['Key'] == 'UNI') {
1013
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
1013
+						$nkeys['UNIQUE KEY '.$val['Field']] = $val['Field'];
1014 1014
 					}
1015 1015
 				}
1016 1016
 			}
@@ -1085,7 +1085,7 @@  discard block
 block discarded – undo
1085 1085
 	$serveur = '',
1086 1086
 	$requeter = true
1087 1087
 ) {
1088
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1088
+	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
1089 1089
 
1090 1090
 	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1091 1091
 	if (!$requeter) {
@@ -1125,7 +1125,7 @@  discard block
 block discarded – undo
1125 1125
 	if ($s) {
1126 1126
 		$trace = debug_backtrace();
1127 1127
 		if ($trace[0]['function'] != 'spip_mysql_error') {
1128
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1128
+			spip_log("$s - $query - ".sql_error_backtrace(), 'mysql.'._LOG_ERREUR);
1129 1129
 		}
1130 1130
 	}
1131 1131
 
@@ -1251,7 +1251,7 @@  discard block
 block discarded – undo
1251 1251
 	try {
1252 1252
 		$insert = mysqli_query($link, $query);
1253 1253
 	} catch (\mysqli_sql_exception $e) {
1254
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1254
+		spip_log('mysqli_sql_exception: '.$e->getMessage(), 'mysql.'._LOG_DEBUG);
1255 1255
 		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1256 1256
 		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1257 1257
 	}
@@ -1306,8 +1306,8 @@  discard block
 block discarded – undo
1306 1306
 
1307 1307
 	return spip_mysql_insert(
1308 1308
 		$table,
1309
-		'(' . join(',', array_keys($couples)) . ')',
1310
-		'(' . join(',', $couples) . ')',
1309
+		'('.join(',', array_keys($couples)).')',
1310
+		'('.join(',', $couples).')',
1311 1311
 		$desc,
1312 1312
 		$serveur,
1313 1313
 		$requeter
@@ -1344,7 +1344,7 @@  discard block
 block discarded – undo
1344 1344
 	}
1345 1345
 	$fields = $desc['field'] ?? [];
1346 1346
 
1347
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1347
+	$cles = '('.join(',', array_keys(reset($tab_couples))).')';
1348 1348
 	$valeurs = [];
1349 1349
 	$r = false;
1350 1350
 
@@ -1353,7 +1353,7 @@  discard block
 block discarded – undo
1353 1353
 		foreach ($couples as $champ => $val) {
1354 1354
 			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1355 1355
 		}
1356
-		$valeurs[] = '(' . join(',', $couples) . ')';
1356
+		$valeurs[] = '('.join(',', $couples).')';
1357 1357
 		if (count($valeurs) >= 100) {
1358 1358
 			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1359 1359
 			$valeurs = [];
@@ -1390,7 +1390,7 @@  discard block
 block discarded – undo
1390 1390
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1391 1391
 	$set = [];
1392 1392
 	foreach ($champs as $champ => $val) {
1393
-		$set[] = $champ . "=$val";
1393
+		$set[] = $champ."=$val";
1394 1394
 	}
1395 1395
 	if (!empty($set)) {
1396 1396
 		return spip_mysql_query(
@@ -1446,7 +1446,7 @@  discard block
 block discarded – undo
1446 1446
 	}
1447 1447
 	$set = [];
1448 1448
 	foreach ($champs as $champ => $val) {
1449
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1449
+		$set[] = $champ.'='.spip_mysql_cite($val, @$fields[$champ]);
1450 1450
 	}
1451 1451
 
1452 1452
 	return spip_mysql_query(
@@ -1515,10 +1515,10 @@  discard block
 block discarded – undo
1515 1515
  *     - False en cas d'erreur.
1516 1516
  **/
1517 1517
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1518
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1518
+	return spip_mysql_query("REPLACE $table (".join(',', array_keys($couples)).') VALUES ('.join(
1519 1519
 		',',
1520 1520
 		array_map('_q', $couples)
1521
-	) . ')', $serveur, $requeter);
1521
+	).')', $serveur, $requeter);
1522 1522
 }
1523 1523
 
1524 1524
 
@@ -1547,10 +1547,10 @@  discard block
 block discarded – undo
1547 1547
  *     - False en cas d'erreur.
1548 1548
  **/
1549 1549
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1550
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1550
+	$cles = '('.join(',', array_keys($tab_couples[0])).')';
1551 1551
 	$valeurs = [];
1552 1552
 	foreach ($tab_couples as $couples) {
1553
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1553
+		$valeurs[] = '('.join(',', array_map('_q', $couples)).')';
1554 1554
 	}
1555 1555
 	$valeurs = implode(', ', $valeurs);
1556 1556
 
@@ -1570,28 +1570,28 @@  discard block
 block discarded – undo
1570 1570
  */
1571 1571
 function spip_mysql_multi($objet, $lang) {
1572 1572
 	$lengthlang = strlen("[$lang]");
1573
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1574
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1575
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1576
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1577
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1578
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1573
+	$posmulti = 'INSTR('.$objet.", '<multi>')";
1574
+	$posfinmulti = 'INSTR('.$objet.", '</multi>')";
1575
+	$debutchaine = 'LEFT('.$objet.", $posmulti-1)";
1576
+	$finchaine = 'RIGHT('.$objet.', CHAR_LENGTH('.$objet.") -(7+$posfinmulti))";
1577
+	$chainemulti = 'TRIM(SUBSTRING('.$objet.", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1578
+	$poslang = "INSTR($chainemulti,'[".$lang."]')";
1579 1579
 	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1580
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1581
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1580
+	$chainelang = 'TRIM(SUBSTRING('.$objet.", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1581
+	$posfinlang = 'INSTR('.$chainelang.", '[')";
1582 1582
 	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1583 1583
 	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1584
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1585
-		'     TRIM(' . $objet . '), ' .
1586
-		'     CONCAT( ' .
1587
-		"          $debutchaine, " .
1588
-		'          IF( ' .
1589
-		"               $poslang = 0, " .
1590
-		"                     $chainemulti, " .
1591
-		"               $chainelang" .
1592
-		'          ), ' .
1593
-		"          $finchaine" .
1594
-		'     ) ' .
1584
+	$retour = "(TRIM(IF($posmulti = 0 , ".
1585
+		'     TRIM('.$objet.'), '.
1586
+		'     CONCAT( '.
1587
+		"          $debutchaine, ".
1588
+		'          IF( '.
1589
+		"               $poslang = 0, ".
1590
+		"                     $chainemulti, ".
1591
+		"               $chainelang".
1592
+		'          ), '.
1593
+		"          $finchaine".
1594
+		'     ) '.
1595 1595
 		'))) AS multi';
1596 1596
 
1597 1597
 	return $retour;
@@ -1608,7 +1608,7 @@  discard block
 block discarded – undo
1608 1608
  *     Valeur hexadécimale pour MySQL
1609 1609
  **/
1610 1610
 function spip_mysql_hex($v) {
1611
-	return '0x' . $v;
1611
+	return '0x'.$v;
1612 1612
 }
1613 1613
 
1614 1614
 /**
@@ -1648,7 +1648,7 @@  discard block
 block discarded – undo
1648 1648
  *     Expression SQL
1649 1649
  **/
1650 1650
 function spip_mysql_date_proche($champ, $interval, $unite) {
1651
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1651
+	$use_now = (($champ === 'maj' or strpos($champ, '.maj')) ? true : false);
1652 1652
 	return '('
1653 1653
 	. $champ
1654 1654
 	. (($interval <= 0) ? '>' : '<')
@@ -1703,7 +1703,7 @@  discard block
 block discarded – undo
1703 1703
 		} elseif ($v === null) {
1704 1704
 			return "''";
1705 1705
 		}
1706
-		return "'" . addslashes($v) . "'";
1706
+		return "'".addslashes($v)."'";
1707 1707
 	}
1708 1708
 
1709 1709
 	if ($v === null) {
@@ -1727,7 +1727,7 @@  discard block
 block discarded – undo
1727 1727
 		}
1728 1728
 	}
1729 1729
 
1730
-	return ("'" . addslashes($v) . "'");
1730
+	return ("'".addslashes($v)."'");
1731 1731
 }
1732 1732
 
1733 1733
 /**
@@ -1761,7 +1761,7 @@  discard block
 block discarded – undo
1761 1761
 	} else {
1762 1762
 		$GLOBALS['mysql_rappel_nom_base'] = false;
1763 1763
 
1764
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1764
+		return "\$GLOBALS['mysql_rappel_nom_base'] = false; ".
1765 1765
 		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1766 1766
 	}
1767 1767
 }
Please login to merge, or discard this patch.
Indentation   +877 added lines, -877 removed lines patch added patch discarded remove patch
@@ -20,11 +20,11 @@  discard block
 block discarded – undo
20 20
  */
21 21
 
22 22
 if (!defined('_ECRIRE_INC_VERSION')) {
23
-	return;
23
+    return;
24 24
 }
25 25
 
26 26
 if (!defined('_MYSQL_NOPLANES')) {
27
-	define('_MYSQL_NOPLANES', true);
27
+    define('_MYSQL_NOPLANES', true);
28 28
 }
29 29
 
30 30
 /**
@@ -41,112 +41,112 @@  discard block
 block discarded – undo
41 41
  *     - tableau décrivant la connexion sinon
42 42
  */
43 43
 function req_mysql_dist($host, $port, $login, $pass, $db = '', $prefixe = '') {
44
-	if (!extension_loaded(\mysqli::class)) {
45
-		return false;
46
-	}
47
-
48
-	// si port est fourni mais pas host, c'est un socket -> compat avec vieille syntaxe de mysql_connect() et anciens fichiers connect.php
49
-	try {
50
-		if (
51
-			$port and !is_numeric($socket = $port)
52
-			and (!$host or $host === 'localhost')
53
-		) {
54
-			$link = @mysqli_connect($host, $login, $pass, '', null, $socket);
55
-		} elseif ($port) {
56
-			$link = @mysqli_connect($host, $login, $pass, '', $port);
57
-		} else {
58
-			$link = @mysqli_connect($host, $login, $pass);
59
-		}
60
-	} catch (\mysqli_sql_exception $e) {
61
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
62
-		$link = false;
63
-	}
64
-
65
-	if (!$link) {
66
-		spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
67
-
68
-		return false;
69
-	}
70
-	$last = '';
71
-	if (!$db) {
72
-		$ok = $link;
73
-		$db = 'spip';
74
-	} else {
75
-		$ok = mysqli_select_db($link, $db);
76
-		if (
77
-			defined('_MYSQL_SET_SQL_MODE')
78
-			or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
79
-		) {
80
-			mysqli_query($link, $last = "set sql_mode=''");
81
-		}
82
-	}
83
-
84
-	spip_log(
85
-		"Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
86
-		_LOG_DEBUG
87
-	);
88
-
89
-	return !$ok ? false : [
90
-		'db' => $db,
91
-		'last' => $last,
92
-		'prefixe' => $prefixe ?: $db,
93
-		'link' => $link,
94
-		'total_requetes' => 0,
95
-	];
44
+    if (!extension_loaded(\mysqli::class)) {
45
+        return false;
46
+    }
47
+
48
+    // si port est fourni mais pas host, c'est un socket -> compat avec vieille syntaxe de mysql_connect() et anciens fichiers connect.php
49
+    try {
50
+        if (
51
+            $port and !is_numeric($socket = $port)
52
+            and (!$host or $host === 'localhost')
53
+        ) {
54
+            $link = @mysqli_connect($host, $login, $pass, '', null, $socket);
55
+        } elseif ($port) {
56
+            $link = @mysqli_connect($host, $login, $pass, '', $port);
57
+        } else {
58
+            $link = @mysqli_connect($host, $login, $pass);
59
+        }
60
+    } catch (\mysqli_sql_exception $e) {
61
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
62
+        $link = false;
63
+    }
64
+
65
+    if (!$link) {
66
+        spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
67
+
68
+        return false;
69
+    }
70
+    $last = '';
71
+    if (!$db) {
72
+        $ok = $link;
73
+        $db = 'spip';
74
+    } else {
75
+        $ok = mysqli_select_db($link, $db);
76
+        if (
77
+            defined('_MYSQL_SET_SQL_MODE')
78
+            or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
79
+        ) {
80
+            mysqli_query($link, $last = "set sql_mode=''");
81
+        }
82
+    }
83
+
84
+    spip_log(
85
+        "Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
86
+        _LOG_DEBUG
87
+    );
88
+
89
+    return !$ok ? false : [
90
+        'db' => $db,
91
+        'last' => $last,
92
+        'prefixe' => $prefixe ?: $db,
93
+        'link' => $link,
94
+        'total_requetes' => 0,
95
+    ];
96 96
 }
97 97
 
98 98
 
99 99
 $GLOBALS['spip_mysql_functions_1'] = [
100
-	'alter' => 'spip_mysql_alter',
101
-	'count' => 'spip_mysql_count',
102
-	'countsel' => 'spip_mysql_countsel',
103
-	'create' => 'spip_mysql_create',
104
-	'create_base' => 'spip_mysql_create_base',
105
-	'create_view' => 'spip_mysql_create_view',
106
-	'date_proche' => 'spip_mysql_date_proche',
107
-	'delete' => 'spip_mysql_delete',
108
-	'drop_table' => 'spip_mysql_drop_table',
109
-	'drop_view' => 'spip_mysql_drop_view',
110
-	'errno' => 'spip_mysql_errno',
111
-	'error' => 'spip_mysql_error',
112
-	'explain' => 'spip_mysql_explain',
113
-	'fetch' => 'spip_mysql_fetch',
114
-	'seek' => 'spip_mysql_seek',
115
-	'free' => 'spip_mysql_free',
116
-	'hex' => 'spip_mysql_hex',
117
-	'in' => 'spip_mysql_in',
118
-	'insert' => 'spip_mysql_insert',
119
-	'insertq' => 'spip_mysql_insertq',
120
-	'insertq_multi' => 'spip_mysql_insertq_multi',
121
-	'listdbs' => 'spip_mysql_listdbs',
122
-	'multi' => 'spip_mysql_multi',
123
-	'optimize' => 'spip_mysql_optimize',
124
-	'query' => 'spip_mysql_query',
125
-	'quote' => 'spip_mysql_quote',
126
-	'replace' => 'spip_mysql_replace',
127
-	'replace_multi' => 'spip_mysql_replace_multi',
128
-	'repair' => 'spip_mysql_repair',
129
-	'select' => 'spip_mysql_select',
130
-	'selectdb' => 'spip_mysql_selectdb',
131
-	'set_charset' => 'spip_mysql_set_charset',
132
-	'get_charset' => 'spip_mysql_get_charset',
133
-	'showbase' => 'spip_mysql_showbase',
134
-	'showtable' => 'spip_mysql_showtable',
135
-	'table_exists' => 'spip_mysql_table_exists',
136
-	'update' => 'spip_mysql_update',
137
-	'updateq' => 'spip_mysql_updateq',
138
-
139
-	// association de chaque nom http d'un charset aux couples MySQL
140
-	'charsets' => [
141
-		'cp1250' => ['charset' => 'cp1250', 'collation' => 'cp1250_general_ci'],
142
-		'cp1251' => ['charset' => 'cp1251', 'collation' => 'cp1251_general_ci'],
143
-		'cp1256' => ['charset' => 'cp1256', 'collation' => 'cp1256_general_ci'],
144
-		'iso-8859-1' => ['charset' => 'latin1', 'collation' => 'latin1_swedish_ci'],
100
+    'alter' => 'spip_mysql_alter',
101
+    'count' => 'spip_mysql_count',
102
+    'countsel' => 'spip_mysql_countsel',
103
+    'create' => 'spip_mysql_create',
104
+    'create_base' => 'spip_mysql_create_base',
105
+    'create_view' => 'spip_mysql_create_view',
106
+    'date_proche' => 'spip_mysql_date_proche',
107
+    'delete' => 'spip_mysql_delete',
108
+    'drop_table' => 'spip_mysql_drop_table',
109
+    'drop_view' => 'spip_mysql_drop_view',
110
+    'errno' => 'spip_mysql_errno',
111
+    'error' => 'spip_mysql_error',
112
+    'explain' => 'spip_mysql_explain',
113
+    'fetch' => 'spip_mysql_fetch',
114
+    'seek' => 'spip_mysql_seek',
115
+    'free' => 'spip_mysql_free',
116
+    'hex' => 'spip_mysql_hex',
117
+    'in' => 'spip_mysql_in',
118
+    'insert' => 'spip_mysql_insert',
119
+    'insertq' => 'spip_mysql_insertq',
120
+    'insertq_multi' => 'spip_mysql_insertq_multi',
121
+    'listdbs' => 'spip_mysql_listdbs',
122
+    'multi' => 'spip_mysql_multi',
123
+    'optimize' => 'spip_mysql_optimize',
124
+    'query' => 'spip_mysql_query',
125
+    'quote' => 'spip_mysql_quote',
126
+    'replace' => 'spip_mysql_replace',
127
+    'replace_multi' => 'spip_mysql_replace_multi',
128
+    'repair' => 'spip_mysql_repair',
129
+    'select' => 'spip_mysql_select',
130
+    'selectdb' => 'spip_mysql_selectdb',
131
+    'set_charset' => 'spip_mysql_set_charset',
132
+    'get_charset' => 'spip_mysql_get_charset',
133
+    'showbase' => 'spip_mysql_showbase',
134
+    'showtable' => 'spip_mysql_showtable',
135
+    'table_exists' => 'spip_mysql_table_exists',
136
+    'update' => 'spip_mysql_update',
137
+    'updateq' => 'spip_mysql_updateq',
138
+
139
+    // association de chaque nom http d'un charset aux couples MySQL
140
+    'charsets' => [
141
+        'cp1250' => ['charset' => 'cp1250', 'collation' => 'cp1250_general_ci'],
142
+        'cp1251' => ['charset' => 'cp1251', 'collation' => 'cp1251_general_ci'],
143
+        'cp1256' => ['charset' => 'cp1256', 'collation' => 'cp1256_general_ci'],
144
+        'iso-8859-1' => ['charset' => 'latin1', 'collation' => 'latin1_swedish_ci'],
145 145
 //'iso-8859-6'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
146
-		'iso-8859-9' => ['charset' => 'latin5', 'collation' => 'latin5_turkish_ci'],
146
+        'iso-8859-9' => ['charset' => 'latin5', 'collation' => 'latin5_turkish_ci'],
147 147
 //'iso-8859-15'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
148
-		'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci']
149
-	]
148
+        'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci']
149
+    ]
150 150
 ];
151 151
 
152 152
 
@@ -157,9 +157,9 @@  discard block
 block discarded – undo
157 157
  * @return Object Information de connexion pour mysqli
158 158
  */
159 159
 function _mysql_link($serveur = '') {
160
-	$link = &$GLOBALS['connexions'][$serveur ?: 0]['link'];
160
+    $link = &$GLOBALS['connexions'][$serveur ?: 0]['link'];
161 161
 
162
-	return $link;
162
+    return $link;
163 163
 }
164 164
 
165 165
 
@@ -172,10 +172,10 @@  discard block
 block discarded – undo
172 172
  * @return mysqli_result|bool Jeu de résultats pour fetch()
173 173
  */
174 174
 function spip_mysql_set_charset($charset, $serveur = '', $requeter = true) {
175
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
176
-	spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
175
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
176
+    spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
177 177
 
178
-	return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
178
+    return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
179 179
 }
180 180
 
181 181
 
@@ -188,11 +188,11 @@  discard block
 block discarded – undo
188 188
  * @return array Description du charset (son nom est dans 'charset')
189 189
  */
190 190
 function spip_mysql_get_charset($charset = [], $serveur = '', $requeter = true) {
191
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
192
-	$connexion['last'] = $c = 'SHOW CHARACTER SET'
193
-		. (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
191
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
192
+    $connexion['last'] = $c = 'SHOW CHARACTER SET'
193
+        . (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
194 194
 
195
-	return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
195
+    return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
196 196
 }
197 197
 
198 198
 /**
@@ -208,80 +208,80 @@  discard block
 block discarded – undo
208 208
  */
209 209
 function spip_mysql_query($query, $serveur = '', $requeter = true) {
210 210
 
211
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
212
-	$prefixe = $connexion['prefixe'];
213
-	$link = $connexion['link'];
214
-	$db = $connexion['db'];
215
-
216
-	$query = _mysql_traite_query($query, $db, $prefixe);
217
-
218
-	// renvoyer la requete inerte si demandee
219
-	if (!$requeter) {
220
-		return $query;
221
-	}
222
-
223
-	if (isset($_GET['var_profile']) or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
224
-		include_spip('public/tracer');
225
-		$t = trace_query_start();
226
-	} else {
227
-		$t = 0;
228
-	}
229
-
230
-	$connexion['last'] = $query;
231
-	$connexion['total_requetes']++;
232
-
233
-	// ajouter un debug utile dans log/mysql-slow.log ?
234
-	$debug = '';
235
-	if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
236
-		if (isset($GLOBALS['debug']['aucasou'])) {
237
-			[, $id, , $infos] = $GLOBALS['debug']['aucasou'];
238
-			$debug .= "BOUCLE$id @ " . ($infos[0] ?? '') . ' | ';
239
-		}
240
-		if (isset($_SERVER['REQUEST_URI'])) {
241
-			$debug .= $_SERVER['REQUEST_URI'];
242
-		}
243
-		if (!empty($GLOBALS['ip'])) {
244
-			$debug .= ' + ' . $GLOBALS['ip'];
245
-		}
246
-		$debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
247
-	}
248
-	try {
249
-		$r = mysqli_query($link, $query . $debug);
250
-	} catch (\mysqli_sql_exception $e) {
251
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
252
-		$r = false;
253
-		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
254
-		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
255
-	}
256
-
257
-	//Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
258
-	if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
259
-		if ($e == 2006) { //Si Gone Away on relance une connexion vierge
260
-			//Fermer la connexion defaillante
261
-			mysqli_close($connexion['link']);
262
-			unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
263
-			//Relancer une connexion vierge
264
-			spip_connect($serveur);
265
-			$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
266
-			$link = $connexion['link'];
267
-			//On retente au cas où
268
-			try {
269
-				$r = mysqli_query($link, $query . $debug);
270
-			} catch (\mysqli_sql_exception $e) {
271
-				spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
272
-				$r = false;
273
-				// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
274
-				// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
275
-			}
276
-		}
277
-	}
278
-
279
-	// Log de l'erreur eventuelle
280
-	if ($e = spip_mysql_errno($serveur)) {
281
-		// et du fautif
282
-		$e .= spip_mysql_error($query, $serveur);
283
-	}
284
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
211
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
212
+    $prefixe = $connexion['prefixe'];
213
+    $link = $connexion['link'];
214
+    $db = $connexion['db'];
215
+
216
+    $query = _mysql_traite_query($query, $db, $prefixe);
217
+
218
+    // renvoyer la requete inerte si demandee
219
+    if (!$requeter) {
220
+        return $query;
221
+    }
222
+
223
+    if (isset($_GET['var_profile']) or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
224
+        include_spip('public/tracer');
225
+        $t = trace_query_start();
226
+    } else {
227
+        $t = 0;
228
+    }
229
+
230
+    $connexion['last'] = $query;
231
+    $connexion['total_requetes']++;
232
+
233
+    // ajouter un debug utile dans log/mysql-slow.log ?
234
+    $debug = '';
235
+    if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
236
+        if (isset($GLOBALS['debug']['aucasou'])) {
237
+            [, $id, , $infos] = $GLOBALS['debug']['aucasou'];
238
+            $debug .= "BOUCLE$id @ " . ($infos[0] ?? '') . ' | ';
239
+        }
240
+        if (isset($_SERVER['REQUEST_URI'])) {
241
+            $debug .= $_SERVER['REQUEST_URI'];
242
+        }
243
+        if (!empty($GLOBALS['ip'])) {
244
+            $debug .= ' + ' . $GLOBALS['ip'];
245
+        }
246
+        $debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
247
+    }
248
+    try {
249
+        $r = mysqli_query($link, $query . $debug);
250
+    } catch (\mysqli_sql_exception $e) {
251
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
252
+        $r = false;
253
+        // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
254
+        // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
255
+    }
256
+
257
+    //Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
258
+    if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
259
+        if ($e == 2006) { //Si Gone Away on relance une connexion vierge
260
+            //Fermer la connexion defaillante
261
+            mysqli_close($connexion['link']);
262
+            unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
263
+            //Relancer une connexion vierge
264
+            spip_connect($serveur);
265
+            $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
266
+            $link = $connexion['link'];
267
+            //On retente au cas où
268
+            try {
269
+                $r = mysqli_query($link, $query . $debug);
270
+            } catch (\mysqli_sql_exception $e) {
271
+                spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
272
+                $r = false;
273
+                // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
274
+                // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
275
+            }
276
+        }
277
+    }
278
+
279
+    // Log de l'erreur eventuelle
280
+    if ($e = spip_mysql_errno($serveur)) {
281
+        // et du fautif
282
+        $e .= spip_mysql_error($query, $serveur);
283
+    }
284
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
285 285
 }
286 286
 
287 287
 /**
@@ -296,12 +296,12 @@  discard block
 block discarded – undo
296 296
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
297 297
  */
298 298
 function spip_mysql_alter($query, $serveur = '', $requeter = true) {
299
-	// ici on supprime les ` entourant le nom de table pour permettre
300
-	// la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
301
-	// d'utiliser ceux-ci, copie-colle de phpmyadmin
302
-	$query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
299
+    // ici on supprime les ` entourant le nom de table pour permettre
300
+    // la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
301
+    // d'utiliser ceux-ci, copie-colle de phpmyadmin
302
+    $query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
303 303
 
304
-	return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
304
+    return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
305 305
 }
306 306
 
307 307
 
@@ -314,9 +314,9 @@  discard block
 block discarded – undo
314 314
  * @return bool            Toujours true
315 315
  */
316 316
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
317
-	spip_mysql_query('OPTIMIZE TABLE ' . $table);
317
+    spip_mysql_query('OPTIMIZE TABLE ' . $table);
318 318
 
319
-	return true;
319
+    return true;
320 320
 }
321 321
 
322 322
 
@@ -329,18 +329,18 @@  discard block
 block discarded – undo
329 329
  * @return array           Tableau de l'explication
330 330
  */
331 331
 function spip_mysql_explain($query, $serveur = '', $requeter = true) {
332
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
333
-		return [];
334
-	}
335
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
336
-	$prefixe = $connexion['prefixe'];
337
-	$link = $connexion['link'];
338
-	$db = $connexion['db'];
339
-
340
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
341
-	$r = mysqli_query($link, $query);
342
-
343
-	return spip_mysql_fetch($r, null, $serveur);
332
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
333
+        return [];
334
+    }
335
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
336
+    $prefixe = $connexion['prefixe'];
337
+    $link = $connexion['link'];
338
+    $db = $connexion['db'];
339
+
340
+    $query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
341
+    $r = mysqli_query($link, $query);
342
+
343
+    return spip_mysql_fetch($r, null, $serveur);
344 344
 }
345 345
 
346 346
 
@@ -369,35 +369,35 @@  discard block
 block discarded – undo
369 369
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
370 370
  */
371 371
 function spip_mysql_select(
372
-	$select,
373
-	$from,
374
-	$where = '',
375
-	$groupby = '',
376
-	$orderby = '',
377
-	$limit = '',
378
-	$having = '',
379
-	$serveur = '',
380
-	$requeter = true
372
+    $select,
373
+    $from,
374
+    $where = '',
375
+    $groupby = '',
376
+    $orderby = '',
377
+    $limit = '',
378
+    $having = '',
379
+    $serveur = '',
380
+    $requeter = true
381 381
 ) {
382 382
 
383 383
 
384
-	$from = (!is_array($from) ? $from : spip_mysql_select_as($from));
385
-	$query =
386
-		calculer_mysql_expression('SELECT', $select, ', ')
387
-		. calculer_mysql_expression('FROM', $from, ', ')
388
-		. calculer_mysql_expression('WHERE', $where)
389
-		. calculer_mysql_expression('GROUP BY', $groupby, ',')
390
-		. calculer_mysql_expression('HAVING', $having)
391
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
392
-		. ($limit ? "\nLIMIT $limit" : '');
384
+    $from = (!is_array($from) ? $from : spip_mysql_select_as($from));
385
+    $query =
386
+        calculer_mysql_expression('SELECT', $select, ', ')
387
+        . calculer_mysql_expression('FROM', $from, ', ')
388
+        . calculer_mysql_expression('WHERE', $where)
389
+        . calculer_mysql_expression('GROUP BY', $groupby, ',')
390
+        . calculer_mysql_expression('HAVING', $having)
391
+        . ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
392
+        . ($limit ? "\nLIMIT $limit" : '');
393 393
 
394
-	// renvoyer la requete inerte si demandee
395
-	if ($requeter === false) {
396
-		return $query;
397
-	}
398
-	$r = spip_mysql_query($query, $serveur, $requeter);
394
+    // renvoyer la requete inerte si demandee
395
+    if ($requeter === false) {
396
+        return $query;
397
+    }
398
+    $r = spip_mysql_query($query, $serveur, $requeter);
399 399
 
400
-	return $r ?: $query;
400
+    return $r ?: $query;
401 401
 }
402 402
 
403 403
 
@@ -414,7 +414,7 @@  discard block
 block discarded – undo
414 414
  * @return string Texte du orderby préparé
415 415
  */
416 416
 function spip_mysql_order($orderby) {
417
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
417
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
418 418
 }
419 419
 
420 420
 
@@ -437,26 +437,26 @@  discard block
 block discarded – undo
437 437
  *     Contrainte pour clause WHERE
438 438
  */
439 439
 function calculer_mysql_where($v) {
440
-	if (!is_array($v)) {
441
-		return $v;
442
-	}
443
-
444
-	$op = array_shift($v);
445
-	if (!($n = count($v))) {
446
-		return $op;
447
-	} else {
448
-		$arg = calculer_mysql_where(array_shift($v));
449
-		if ($n == 1) {
450
-			return "$op($arg)";
451
-		} else {
452
-			$arg2 = calculer_mysql_where(array_shift($v));
453
-			if ($n == 2) {
454
-				return "($arg $op $arg2)";
455
-			} else {
456
-				return "($arg $op ($arg2) : $v[0])";
457
-			}
458
-		}
459
-	}
440
+    if (!is_array($v)) {
441
+        return $v;
442
+    }
443
+
444
+    $op = array_shift($v);
445
+    if (!($n = count($v))) {
446
+        return $op;
447
+    } else {
448
+        $arg = calculer_mysql_where(array_shift($v));
449
+        if ($n == 1) {
450
+            return "$op($arg)";
451
+        } else {
452
+            $arg2 = calculer_mysql_where(array_shift($v));
453
+            if ($n == 2) {
454
+                return "($arg $op $arg2)";
455
+            } else {
456
+                return "($arg $op ($arg2) : $v[0])";
457
+            }
458
+        }
459
+    }
460 460
 }
461 461
 
462 462
 /**
@@ -471,21 +471,21 @@  discard block
 block discarded – undo
471 471
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
472 472
  */
473 473
 function calculer_mysql_expression($expression, $v, $join = 'AND') {
474
-	if (empty($v)) {
475
-		return '';
476
-	}
477
-
478
-	$exp = "\n$expression ";
479
-
480
-	if (!is_array($v)) {
481
-		return $exp . $v;
482
-	} else {
483
-		if (strtoupper($join) === 'AND') {
484
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
485
-		} else {
486
-			return $exp . join($join, $v);
487
-		}
488
-	}
474
+    if (empty($v)) {
475
+        return '';
476
+    }
477
+
478
+    $exp = "\n$expression ";
479
+
480
+    if (!is_array($v)) {
481
+        return $exp . $v;
482
+    } else {
483
+        if (strtoupper($join) === 'AND') {
484
+            return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
485
+        } else {
486
+            return $exp . join($join, $v);
487
+        }
488
+    }
489 489
 }
490 490
 
491 491
 
@@ -496,26 +496,26 @@  discard block
 block discarded – undo
496 496
  * @return string Sélection de colonnes pour une clause SELECT
497 497
  */
498 498
 function spip_mysql_select_as($args) {
499
-	$res = '';
500
-	foreach ($args as $k => $v) {
501
-		if (substr($k, -1) == '@') {
502
-			// c'est une jointure qui se refere au from precedent
503
-			// pas de virgule
504
-			$res .= '  ' . $v;
505
-		} else {
506
-			if (!is_numeric($k)) {
507
-				$p = strpos($v, ' ');
508
-				if ($p) {
509
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
510
-				} else {
511
-					$v .= " AS `$k`";
512
-				}
513
-			}
514
-			$res .= ', ' . $v;
515
-		}
516
-	}
517
-
518
-	return substr($res, 2);
499
+    $res = '';
500
+    foreach ($args as $k => $v) {
501
+        if (substr($k, -1) == '@') {
502
+            // c'est une jointure qui se refere au from precedent
503
+            // pas de virgule
504
+            $res .= '  ' . $v;
505
+        } else {
506
+            if (!is_numeric($k)) {
507
+                $p = strpos($v, ' ');
508
+                if ($p) {
509
+                    $v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
510
+                } else {
511
+                    $v .= " AS `$k`";
512
+                }
513
+            }
514
+            $res .= ', ' . $v;
515
+        }
516
+    }
517
+
518
+    return substr($res, 2);
519 519
 }
520 520
 
521 521
 
@@ -540,58 +540,58 @@  discard block
 block discarded – undo
540 540
  */
541 541
 function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) {
542 542
 
543
-	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
544
-		$pref = '`' . $db . '`.';
545
-	} else {
546
-		$pref = '';
547
-	}
548
-
549
-	if ($prefixe) {
550
-		$pref .= $prefixe . '_';
551
-	}
552
-
553
-	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
554
-		$suite = '';
555
-	} else {
556
-		$suite = strstr($query, (string) $regs[0]);
557
-		$query = substr($query, 0, -strlen($suite));
558
-		// propager le prefixe en cas de requete imbriquee
559
-		// il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
560
-		// modifier une requete qui est en fait juste du texte dans un champ
561
-		if (stripos($suite, 'SELECT') !== false) {
562
-			if ($echappe_textes) {
563
-				[$suite_echap, $textes] = query_echappe_textes($suite);
564
-			}
565
-			else {
566
-				$suite_echap = $suite;
567
-			}
568
-			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
569
-				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
570
-				if ($echappe_textes) {
571
-					$suite = query_reinjecte_textes($suite_echap, $textes);
572
-				}
573
-				else {
574
-					$suite = $suite_echap;
575
-				}
576
-			}
577
-		}
578
-	}
579
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
580
-
581
-	// en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
582
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
583
-	if (
584
-		defined('_MYSQL_NOPLANES')
585
-		and _MYSQL_NOPLANES
586
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
587
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
588
-	) {
589
-		include_spip('inc/charsets');
590
-		$r = utf8_noplanes($r);
591
-	}
592
-
593
-	#spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
594
-	return $r;
543
+    if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
544
+        $pref = '`' . $db . '`.';
545
+    } else {
546
+        $pref = '';
547
+    }
548
+
549
+    if ($prefixe) {
550
+        $pref .= $prefixe . '_';
551
+    }
552
+
553
+    if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
554
+        $suite = '';
555
+    } else {
556
+        $suite = strstr($query, (string) $regs[0]);
557
+        $query = substr($query, 0, -strlen($suite));
558
+        // propager le prefixe en cas de requete imbriquee
559
+        // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
560
+        // modifier une requete qui est en fait juste du texte dans un champ
561
+        if (stripos($suite, 'SELECT') !== false) {
562
+            if ($echappe_textes) {
563
+                [$suite_echap, $textes] = query_echappe_textes($suite);
564
+            }
565
+            else {
566
+                $suite_echap = $suite;
567
+            }
568
+            if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
569
+                $suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
570
+                if ($echappe_textes) {
571
+                    $suite = query_reinjecte_textes($suite_echap, $textes);
572
+                }
573
+                else {
574
+                    $suite = $suite_echap;
575
+                }
576
+            }
577
+        }
578
+    }
579
+    $r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
580
+
581
+    // en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
582
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
583
+    if (
584
+        defined('_MYSQL_NOPLANES')
585
+        and _MYSQL_NOPLANES
586
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
587
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
588
+    ) {
589
+        include_spip('inc/charsets');
590
+        $r = utf8_noplanes($r);
591
+    }
592
+
593
+    #spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
594
+    return $r;
595 595
 }
596 596
 
597 597
 /**
@@ -609,17 +609,17 @@  discard block
 block discarded – undo
609 609
  *     - False en cas d'erreur.
610 610
  **/
611 611
 function spip_mysql_selectdb($db, $serveur = '', $requeter = true) {
612
-	$link = _mysql_link($serveur);
613
-	try {
614
-		$ok = mysqli_select_db($link, $db);
615
-	} catch (\mysqli_sql_exception $e) {
616
-		$ok = false;
617
-	}
618
-	if (!$ok) {
619
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
620
-	}
621
-
622
-	return $ok;
612
+    $link = _mysql_link($serveur);
613
+    try {
614
+        $ok = mysqli_select_db($link, $db);
615
+    } catch (\mysqli_sql_exception $e) {
616
+        $ok = false;
617
+    }
618
+    if (!$ok) {
619
+        spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
620
+    }
621
+
622
+    return $ok;
623 623
 }
624 624
 
625 625
 
@@ -640,14 +640,14 @@  discard block
 block discarded – undo
640 640
  *     Liste de noms de bases de données
641 641
  **/
642 642
 function spip_mysql_listdbs($serveur = '', $requeter = true) {
643
-	$dbs = [];
644
-	if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
645
-		while ($row = mysqli_fetch_assoc($res)) {
646
-			$dbs[] = $row['Database'];
647
-		}
648
-	}
649
-
650
-	return $dbs;
643
+    $dbs = [];
644
+    if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
645
+        while ($row = mysqli_fetch_assoc($res)) {
646
+            $dbs[] = $row['Database'];
647
+        }
648
+    }
649
+
650
+    return $dbs;
651 651
 }
652 652
 
653 653
 
@@ -670,73 +670,73 @@  discard block
 block discarded – undo
670 670
  *     - true si la requête réussie, false sinon.
671 671
  */
672 672
 function spip_mysql_create(
673
-	$nom,
674
-	$champs,
675
-	$cles,
676
-	$autoinc = false,
677
-	$temporary = false,
678
-	$serveur = '',
679
-	$requeter = true
673
+    $nom,
674
+    $champs,
675
+    $cles,
676
+    $autoinc = false,
677
+    $temporary = false,
678
+    $serveur = '',
679
+    $requeter = true
680 680
 ) {
681 681
 
682
-	$query = '';
683
-	$keys = '';
684
-	$s = '';
685
-	$p = '';
686
-
687
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
688
-	// sans les renseigner (laisse le compilo recuperer la description)
689
-	if (!is_array($champs) || !is_array($cles)) {
690
-		return;
691
-	}
692
-
693
-	$res = spip_mysql_query('SELECT version() as v', $serveur);
694
-	if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
695
-		spip_mysql_query("SET sql_mode=''", $serveur);
696
-	}
697
-
698
-	foreach ($cles as $k => $v) {
699
-		$keys .= "$s\n\t\t$k ($v)";
700
-		if ($k == 'PRIMARY KEY') {
701
-			$p = $v;
702
-		}
703
-		$s = ',';
704
-	}
705
-	$s = '';
706
-
707
-	$character_set = '';
708
-	if (@$GLOBALS['meta']['charset_sql_base']) {
709
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
710
-	}
711
-	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
712
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
713
-	}
714
-
715
-	foreach ($champs as $k => $v) {
716
-		$v = _mysql_remplacements_definitions_table($v);
717
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
718
-			if (
719
-				preg_match(',(char|text),i', $defs[1])
720
-				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
721
-			) {
722
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
723
-			}
724
-		}
725
-
726
-		$query .= "$s\n\t\t$k $v"
727
-			. (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
728
-				? ' auto_increment'
729
-				: ''
730
-			);
731
-		$s = ',';
732
-	}
733
-	$temporary = $temporary ? 'TEMPORARY' : '';
734
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
735
-		. (defined('_MYSQL_ENGINE') ? ' ENGINE=' . _MYSQL_ENGINE : '')
736
-		. ($character_set ? " DEFAULT $character_set" : '')
737
-		. "\n";
738
-
739
-	return spip_mysql_query($q, $serveur);
682
+    $query = '';
683
+    $keys = '';
684
+    $s = '';
685
+    $p = '';
686
+
687
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
688
+    // sans les renseigner (laisse le compilo recuperer la description)
689
+    if (!is_array($champs) || !is_array($cles)) {
690
+        return;
691
+    }
692
+
693
+    $res = spip_mysql_query('SELECT version() as v', $serveur);
694
+    if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
695
+        spip_mysql_query("SET sql_mode=''", $serveur);
696
+    }
697
+
698
+    foreach ($cles as $k => $v) {
699
+        $keys .= "$s\n\t\t$k ($v)";
700
+        if ($k == 'PRIMARY KEY') {
701
+            $p = $v;
702
+        }
703
+        $s = ',';
704
+    }
705
+    $s = '';
706
+
707
+    $character_set = '';
708
+    if (@$GLOBALS['meta']['charset_sql_base']) {
709
+        $character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
710
+    }
711
+    if (@$GLOBALS['meta']['charset_collation_sql_base']) {
712
+        $character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
713
+    }
714
+
715
+    foreach ($champs as $k => $v) {
716
+        $v = _mysql_remplacements_definitions_table($v);
717
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
718
+            if (
719
+                preg_match(',(char|text),i', $defs[1])
720
+                and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
721
+            ) {
722
+                $v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
723
+            }
724
+        }
725
+
726
+        $query .= "$s\n\t\t$k $v"
727
+            . (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
728
+                ? ' auto_increment'
729
+                : ''
730
+            );
731
+        $s = ',';
732
+    }
733
+    $temporary = $temporary ? 'TEMPORARY' : '';
734
+    $q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
735
+        . (defined('_MYSQL_ENGINE') ? ' ENGINE=' . _MYSQL_ENGINE : '')
736
+        . ($character_set ? " DEFAULT $character_set" : '')
737
+        . "\n";
738
+
739
+    return spip_mysql_query($q, $serveur);
740 740
 }
741 741
 
742 742
 
@@ -749,25 +749,25 @@  discard block
 block discarded – undo
749 749
  *     Définition SQL adaptée pour MySQL d'un champ de table
750 750
  */
751 751
 function _mysql_remplacements_definitions_table($query) {
752
-	// quelques remplacements
753
-	$num = '(\s*\([0-9]*\))?';
754
-	$enum = '(\s*\([^\)]*\))?';
755
-
756
-	$remplace = [
757
-		'/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
758
-		'/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
759
-	];
760
-
761
-	if (is_string($query)) {
762
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
763
-	} elseif (is_array($query)) {
764
-		$keys = array_keys($remplace);
765
-		foreach ($query as $k => $q) {
766
-			$query[$k] = preg_replace($keys, $remplace, $q);
767
-		}
768
-	}
769
-
770
-	return $query;
752
+    // quelques remplacements
753
+    $num = '(\s*\([0-9]*\))?';
754
+    $enum = '(\s*\([^\)]*\))?';
755
+
756
+    $remplace = [
757
+        '/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
758
+        '/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
759
+    ];
760
+
761
+    if (is_string($query)) {
762
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
763
+    } elseif (is_array($query)) {
764
+        $keys = array_keys($remplace);
765
+        foreach ($query as $k => $q) {
766
+            $query[$k] = preg_replace($keys, $remplace, $q);
767
+        }
768
+    }
769
+
770
+    return $query;
771 771
 }
772 772
 
773 773
 
@@ -780,7 +780,7 @@  discard block
 block discarded – undo
780 780
  * @return bool true si la base est créee.
781 781
  **/
782 782
 function spip_mysql_create_base($nom, $serveur = '', $requeter = true) {
783
-	return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
783
+    return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
784 784
 }
785 785
 
786 786
 
@@ -801,19 +801,19 @@  discard block
 block discarded – undo
801 801
  *     - string texte de la requête si $requeter vaut false
802 802
  */
803 803
 function spip_mysql_create_view($nom, $query_select, $serveur = '', $requeter = true) {
804
-	if (!$query_select) {
805
-		return false;
806
-	}
807
-	// vue deja presente
808
-	if (sql_showtable($nom, false, $serveur)) {
809
-		spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
804
+    if (!$query_select) {
805
+        return false;
806
+    }
807
+    // vue deja presente
808
+    if (sql_showtable($nom, false, $serveur)) {
809
+        spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
810 810
 
811
-		return false;
812
-	}
811
+        return false;
812
+    }
813 813
 
814
-	$query = "CREATE VIEW $nom AS " . $query_select;
814
+    $query = "CREATE VIEW $nom AS " . $query_select;
815 815
 
816
-	return spip_mysql_query($query, $serveur, $requeter);
816
+    return spip_mysql_query($query, $serveur, $requeter);
817 817
 }
818 818
 
819 819
 
@@ -829,11 +829,11 @@  discard block
 block discarded – undo
829 829
  *     - true si la requête a réussie, false sinon
830 830
  */
831 831
 function spip_mysql_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
832
-	if ($exist) {
833
-		$exist = ' IF EXISTS';
834
-	}
832
+    if ($exist) {
833
+        $exist = ' IF EXISTS';
834
+    }
835 835
 
836
-	return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
836
+    return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
837 837
 }
838 838
 
839 839
 /**
@@ -848,11 +848,11 @@  discard block
 block discarded – undo
848 848
  *     - true si la requête a réussie, false sinon
849 849
  */
850 850
 function spip_mysql_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
851
-	if ($exist) {
852
-		$exist = ' IF EXISTS';
853
-	}
851
+    if ($exist) {
852
+        $exist = ' IF EXISTS';
853
+    }
854 854
 
855
-	return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
855
+    return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
856 856
 }
857 857
 
858 858
 /**
@@ -869,7 +869,7 @@  discard block
 block discarded – undo
869 869
  *     Ressource à utiliser avec sql_fetch()
870 870
  **/
871 871
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
872
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
872
+    return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
873 873
 }
874 874
 
875 875
 /**
@@ -885,17 +885,17 @@  discard block
 block discarded – undo
885 885
  *     - true si la requête a réussie, false sinon
886 886
  */
887 887
 function spip_mysql_repair($table, $serveur = '', $requeter = true) {
888
-	$table_status = spip_mysql_fetch(spip_mysql_query('SHOW TABLE STATUS WHERE Name = ' . _q($table), $serveur, true));
889
-	$engine = $table_status['Engine'];
890
-	if ($engine == 'InnoDB') {
891
-		if (spip_mysql_alter("TABLE $table ENGINE = InnoDB", $serveur, $requeter)) {
892
-			return [' OK '];
893
-		}
894
-	} elseif ($engine == 'MyISAM') {
895
-		return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
896
-	} else {
897
-		spip_log("spip_mysql_repair impossible pour la table $table engine $engine", 'mysql.' . _LOG_DEBUG);
898
-	}
888
+    $table_status = spip_mysql_fetch(spip_mysql_query('SHOW TABLE STATUS WHERE Name = ' . _q($table), $serveur, true));
889
+    $engine = $table_status['Engine'];
890
+    if ($engine == 'InnoDB') {
891
+        if (spip_mysql_alter("TABLE $table ENGINE = InnoDB", $serveur, $requeter)) {
892
+            return [' OK '];
893
+        }
894
+    } elseif ($engine == 'MyISAM') {
895
+        return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
896
+    } else {
897
+        spip_log("spip_mysql_repair impossible pour la table $table engine $engine", 'mysql.' . _LOG_DEBUG);
898
+    }
899 899
 }
900 900
 
901 901
 /**
@@ -913,12 +913,12 @@  discard block
 block discarded – undo
913 913
  *     - string : requete sql, si $requeter = true
914 914
  **/
915 915
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
916
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
917
-	if (!$requeter) {
918
-		return $r;
919
-	}
920
-	$res = spip_mysql_fetch($r);
921
-	return (bool) $res;
916
+    $r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
917
+    if (!$requeter) {
918
+        return $r;
919
+    }
920
+    $res = spip_mysql_fetch($r);
921
+    return (bool) $res;
922 922
 }
923 923
 
924 924
 define('_MYSQL_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -941,86 +941,86 @@  discard block
 block discarded – undo
941 941
  *     - array description de la table sinon
942 942
  */
943 943
 function spip_mysql_showtable($nom_table, $serveur = '', $requeter = true) {
944
-	$s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
945
-	if (!$s) {
946
-		return '';
947
-	}
948
-	if (!$requeter) {
949
-		return $s;
950
-	}
951
-
952
-	[, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
953
-	if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
954
-		$desc = $r[1];
955
-		// extraction d'une KEY éventuelle en prenant garde de ne pas
956
-		// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
957
-		if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
958
-			$namedkeys = $r[2];
959
-			$desc = $r[1];
960
-		} else {
961
-			$namedkeys = '';
962
-		}
963
-
964
-		$fields = [];
965
-		foreach (preg_split('/,\s*`/', $desc) as $v) {
966
-			preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
967
-			$fields[strtolower($r[1])] = $r[2];
968
-		}
969
-		$keys = [];
970
-
971
-		foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
972
-			if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
973
-				$k = str_replace('`', '', trim($r[1]));
974
-				$t = strtolower(str_replace('`', '', $r[2]));
975
-				if ($k && !isset($keys[$k])) {
976
-					$keys[$k] = $t;
977
-				} else {
978
-					$keys[] = $t;
979
-				}
980
-			}
981
-		}
982
-		spip_mysql_free($s);
983
-
984
-		return ['field' => $fields, 'key' => $keys];
985
-	}
986
-
987
-	$res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
988
-	if ($res) {
989
-		$nfields = [];
990
-		$nkeys = [];
991
-		while ($val = spip_mysql_fetch($res)) {
992
-			$nfields[$val['Field']] = $val['Type'];
993
-			if ($val['Null'] == 'NO') {
994
-				$nfields[$val['Field']] .= ' NOT NULL';
995
-			}
996
-			if ($val['Default'] === '0' || $val['Default']) {
997
-				if (preg_match('/[A-Z_]/', $val['Default'])) {
998
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
999
-				} else {
1000
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
1001
-				}
1002
-			}
1003
-			if ($val['Extra']) {
1004
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
1005
-			}
1006
-			if ($val['Key'] == 'PRI') {
1007
-				$nkeys['PRIMARY KEY'] = $val['Field'];
1008
-			} else {
1009
-				if ($val['Key'] == 'MUL') {
1010
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
1011
-				} else {
1012
-					if ($val['Key'] == 'UNI') {
1013
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
1014
-					}
1015
-				}
1016
-			}
1017
-		}
1018
-		spip_mysql_free($res);
1019
-
1020
-		return ['field' => $nfields, 'key' => $nkeys];
1021
-	}
1022
-
1023
-	return '';
944
+    $s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
945
+    if (!$s) {
946
+        return '';
947
+    }
948
+    if (!$requeter) {
949
+        return $s;
950
+    }
951
+
952
+    [, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
953
+    if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
954
+        $desc = $r[1];
955
+        // extraction d'une KEY éventuelle en prenant garde de ne pas
956
+        // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
957
+        if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
958
+            $namedkeys = $r[2];
959
+            $desc = $r[1];
960
+        } else {
961
+            $namedkeys = '';
962
+        }
963
+
964
+        $fields = [];
965
+        foreach (preg_split('/,\s*`/', $desc) as $v) {
966
+            preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
967
+            $fields[strtolower($r[1])] = $r[2];
968
+        }
969
+        $keys = [];
970
+
971
+        foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
972
+            if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
973
+                $k = str_replace('`', '', trim($r[1]));
974
+                $t = strtolower(str_replace('`', '', $r[2]));
975
+                if ($k && !isset($keys[$k])) {
976
+                    $keys[$k] = $t;
977
+                } else {
978
+                    $keys[] = $t;
979
+                }
980
+            }
981
+        }
982
+        spip_mysql_free($s);
983
+
984
+        return ['field' => $fields, 'key' => $keys];
985
+    }
986
+
987
+    $res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
988
+    if ($res) {
989
+        $nfields = [];
990
+        $nkeys = [];
991
+        while ($val = spip_mysql_fetch($res)) {
992
+            $nfields[$val['Field']] = $val['Type'];
993
+            if ($val['Null'] == 'NO') {
994
+                $nfields[$val['Field']] .= ' NOT NULL';
995
+            }
996
+            if ($val['Default'] === '0' || $val['Default']) {
997
+                if (preg_match('/[A-Z_]/', $val['Default'])) {
998
+                    $nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
999
+                } else {
1000
+                    $nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
1001
+                }
1002
+            }
1003
+            if ($val['Extra']) {
1004
+                $nfields[$val['Field']] .= ' ' . $val['Extra'];
1005
+            }
1006
+            if ($val['Key'] == 'PRI') {
1007
+                $nkeys['PRIMARY KEY'] = $val['Field'];
1008
+            } else {
1009
+                if ($val['Key'] == 'MUL') {
1010
+                    $nkeys['KEY ' . $val['Field']] = $val['Field'];
1011
+                } else {
1012
+                    if ($val['Key'] == 'UNI') {
1013
+                        $nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
1014
+                    }
1015
+                }
1016
+            }
1017
+        }
1018
+        spip_mysql_free($res);
1019
+
1020
+        return ['field' => $nfields, 'key' => $nkeys];
1021
+    }
1022
+
1023
+    return '';
1024 1024
 }
1025 1025
 
1026 1026
 
@@ -1039,13 +1039,13 @@  discard block
 block discarded – undo
1039 1039
  *     - false Erreur
1040 1040
  */
1041 1041
 function spip_mysql_fetch($r, $t = '', $serveur = '', $requeter = true) {
1042
-	if (!$t) {
1043
-		$t = \MYSQLI_ASSOC;
1044
-	}
1045
-	if ($r) {
1046
-		return mysqli_fetch_array($r, $t);
1047
-	}
1048
-	return false;
1042
+    if (!$t) {
1043
+        $t = \MYSQLI_ASSOC;
1044
+    }
1045
+    if ($r) {
1046
+        return mysqli_fetch_array($r, $t);
1047
+    }
1048
+    return false;
1049 1049
 }
1050 1050
 
1051 1051
 /**
@@ -1058,9 +1058,9 @@  discard block
 block discarded – undo
1058 1058
  * @return bool True si déplacement réussi, false sinon.
1059 1059
  **/
1060 1060
 function spip_mysql_seek($r, $row_number, $serveur = '', $requeter = true) {
1061
-	if ($r and mysqli_num_rows($r)) {
1062
-		return mysqli_data_seek($r, $row_number);
1063
-	}
1061
+    if ($r and mysqli_num_rows($r)) {
1062
+        return mysqli_data_seek($r, $row_number);
1063
+    }
1064 1064
 }
1065 1065
 
1066 1066
 
@@ -1078,26 +1078,26 @@  discard block
 block discarded – undo
1078 1078
  *     - int Nombre de lignes (0 si la requête n'a pas réussie)
1079 1079
  **/
1080 1080
 function spip_mysql_countsel(
1081
-	$from = [],
1082
-	$where = [],
1083
-	$groupby = '',
1084
-	$having = [],
1085
-	$serveur = '',
1086
-	$requeter = true
1081
+    $from = [],
1082
+    $where = [],
1083
+    $groupby = '',
1084
+    $having = [],
1085
+    $serveur = '',
1086
+    $requeter = true
1087 1087
 ) {
1088
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1089
-
1090
-	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1091
-	if (!$requeter) {
1092
-		return $r;
1093
-	}
1094
-	if (!$r instanceof mysqli_result) {
1095
-		return 0;
1096
-	}
1097
-	[$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1098
-	mysqli_free_result($r);
1099
-
1100
-	return intval($c);
1088
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1089
+
1090
+    $r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1091
+    if (!$requeter) {
1092
+        return $r;
1093
+    }
1094
+    if (!$r instanceof mysqli_result) {
1095
+        return 0;
1096
+    }
1097
+    [$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1098
+    mysqli_free_result($r);
1099
+
1100
+    return intval($c);
1101 1101
 }
1102 1102
 
1103 1103
 
@@ -1120,16 +1120,16 @@  discard block
 block discarded – undo
1120 1120
  *     Erreur eventuelle
1121 1121
  **/
1122 1122
 function spip_mysql_error($query = '', $serveur = '', $requeter = true) {
1123
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1124
-	$s = mysqli_error($link);
1125
-	if ($s) {
1126
-		$trace = debug_backtrace();
1127
-		if ($trace[0]['function'] != 'spip_mysql_error') {
1128
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1129
-		}
1130
-	}
1131
-
1132
-	return $s;
1123
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1124
+    $s = mysqli_error($link);
1125
+    if ($s) {
1126
+        $trace = debug_backtrace();
1127
+        if ($trace[0]['function'] != 'spip_mysql_error') {
1128
+            spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1129
+        }
1130
+    }
1131
+
1132
+    return $s;
1133 1133
 }
1134 1134
 
1135 1135
 
@@ -1144,18 +1144,18 @@  discard block
 block discarded – undo
1144 1144
  *     0, pas d'erreur. Autre, numéro de l'erreur.
1145 1145
  **/
1146 1146
 function spip_mysql_errno($serveur = '', $requeter = true) {
1147
-	$link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1148
-	$s = mysqli_errno($link);
1149
-	// 2006 MySQL server has gone away
1150
-	// 2013 Lost connection to MySQL server during query
1151
-	if (in_array($s, [2006, 2013])) {
1152
-		define('spip_interdire_cache', true);
1153
-	}
1154
-	if ($s) {
1155
-		spip_log("Erreur mysql $s", _LOG_ERREUR);
1156
-	}
1157
-
1158
-	return $s;
1147
+    $link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1148
+    $s = mysqli_errno($link);
1149
+    // 2006 MySQL server has gone away
1150
+    // 2013 Lost connection to MySQL server during query
1151
+    if (in_array($s, [2006, 2013])) {
1152
+        define('spip_interdire_cache', true);
1153
+    }
1154
+    if ($s) {
1155
+        spip_log("Erreur mysql $s", _LOG_ERREUR);
1156
+    }
1157
+
1158
+    return $s;
1159 1159
 }
1160 1160
 
1161 1161
 
@@ -1169,9 +1169,9 @@  discard block
 block discarded – undo
1169 1169
  * @return int               Nombre de lignes
1170 1170
  */
1171 1171
 function spip_mysql_count($r, $serveur = '', $requeter = true) {
1172
-	if ($r) {
1173
-		return mysqli_num_rows($r);
1174
-	}
1172
+    if ($r) {
1173
+        return mysqli_num_rows($r);
1174
+    }
1175 1175
 }
1176 1176
 
1177 1177
 
@@ -1187,7 +1187,7 @@  discard block
 block discarded – undo
1187 1187
  * @return bool              True si réussi
1188 1188
  */
1189 1189
 function spip_mysql_free($r, $serveur = '', $requeter = true) {
1190
-	return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1190
+    return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1191 1191
 }
1192 1192
 
1193 1193
 
@@ -1215,59 +1215,59 @@  discard block
 block discarded – undo
1215 1215
  **/
1216 1216
 function spip_mysql_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1217 1217
 
1218
-	$e = null;
1219
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1220
-	$link = $connexion['link'];
1221
-	$table = prefixer_table_spip($table, $connexion['prefixe']);
1222
-
1223
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1224
-	if (
1225
-		defined('_MYSQL_NOPLANES')
1226
-		and _MYSQL_NOPLANES
1227
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
1228
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1229
-	) {
1230
-		include_spip('inc/charsets');
1231
-		$valeurs = utf8_noplanes($valeurs);
1232
-	}
1233
-
1234
-	$query = "INSERT INTO $table $champs VALUES $valeurs";
1235
-	if (!$requeter) {
1236
-		return $query;
1237
-	}
1238
-
1239
-	if (isset($_GET['var_profile'])) {
1240
-		include_spip('public/tracer');
1241
-		$t = trace_query_start();
1242
-		$e = '';
1243
-	} else {
1244
-		$t = 0;
1245
-	}
1246
-
1247
-	$connexion['last'] = $query;
1248
-	#spip_log($query, 'mysql.'._LOG_DEBUG);
1249
-	$r = false;
1250
-	$insert = false;
1251
-	try {
1252
-		$insert = mysqli_query($link, $query);
1253
-	} catch (\mysqli_sql_exception $e) {
1254
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1255
-		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1256
-		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1257
-	}
1258
-	if ($insert) {
1259
-		$r = mysqli_insert_id($link);
1260
-	} else {
1261
-		// Log de l'erreur eventuelle
1262
-		if ($e = spip_mysql_errno($serveur)) {
1263
-			// et du fautif
1264
-			$e .= spip_mysql_error($query, $serveur);
1265
-		}
1266
-	}
1267
-
1268
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1269
-
1270
-	// return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1218
+    $e = null;
1219
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1220
+    $link = $connexion['link'];
1221
+    $table = prefixer_table_spip($table, $connexion['prefixe']);
1222
+
1223
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1224
+    if (
1225
+        defined('_MYSQL_NOPLANES')
1226
+        and _MYSQL_NOPLANES
1227
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
1228
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1229
+    ) {
1230
+        include_spip('inc/charsets');
1231
+        $valeurs = utf8_noplanes($valeurs);
1232
+    }
1233
+
1234
+    $query = "INSERT INTO $table $champs VALUES $valeurs";
1235
+    if (!$requeter) {
1236
+        return $query;
1237
+    }
1238
+
1239
+    if (isset($_GET['var_profile'])) {
1240
+        include_spip('public/tracer');
1241
+        $t = trace_query_start();
1242
+        $e = '';
1243
+    } else {
1244
+        $t = 0;
1245
+    }
1246
+
1247
+    $connexion['last'] = $query;
1248
+    #spip_log($query, 'mysql.'._LOG_DEBUG);
1249
+    $r = false;
1250
+    $insert = false;
1251
+    try {
1252
+        $insert = mysqli_query($link, $query);
1253
+    } catch (\mysqli_sql_exception $e) {
1254
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1255
+        // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1256
+        // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1257
+    }
1258
+    if ($insert) {
1259
+        $r = mysqli_insert_id($link);
1260
+    } else {
1261
+        // Log de l'erreur eventuelle
1262
+        if ($e = spip_mysql_errno($serveur)) {
1263
+            // et du fautif
1264
+            $e .= spip_mysql_error($query, $serveur);
1265
+        }
1266
+    }
1267
+
1268
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1269
+
1270
+    // return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1271 1271
 }
1272 1272
 
1273 1273
 /**
@@ -1292,26 +1292,26 @@  discard block
 block discarded – undo
1292 1292
  **/
1293 1293
 function spip_mysql_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
1294 1294
 
1295
-	if (!$desc) {
1296
-		$desc = description_table($table, $serveur);
1297
-	}
1298
-	if (!$desc) {
1299
-		$couples = [];
1300
-	}
1301
-	$fields = $desc['field'] ?? [];
1302
-
1303
-	foreach ($couples as $champ => $val) {
1304
-		$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1305
-	}
1306
-
1307
-	return spip_mysql_insert(
1308
-		$table,
1309
-		'(' . join(',', array_keys($couples)) . ')',
1310
-		'(' . join(',', $couples) . ')',
1311
-		$desc,
1312
-		$serveur,
1313
-		$requeter
1314
-	);
1295
+    if (!$desc) {
1296
+        $desc = description_table($table, $serveur);
1297
+    }
1298
+    if (!$desc) {
1299
+        $couples = [];
1300
+    }
1301
+    $fields = $desc['field'] ?? [];
1302
+
1303
+    foreach ($couples as $champ => $val) {
1304
+        $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1305
+    }
1306
+
1307
+    return spip_mysql_insert(
1308
+        $table,
1309
+        '(' . join(',', array_keys($couples)) . ')',
1310
+        '(' . join(',', $couples) . ')',
1311
+        $desc,
1312
+        $serveur,
1313
+        $requeter
1314
+    );
1315 1315
 }
1316 1316
 
1317 1317
 
@@ -1336,34 +1336,34 @@  discard block
 block discarded – undo
1336 1336
  **/
1337 1337
 function spip_mysql_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
1338 1338
 
1339
-	if (!$desc) {
1340
-		$desc = description_table($table, $serveur);
1341
-	}
1342
-	if (!$desc) {
1343
-		$tab_couples = [];
1344
-	}
1345
-	$fields = $desc['field'] ?? [];
1346
-
1347
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1348
-	$valeurs = [];
1349
-	$r = false;
1350
-
1351
-	// Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1352
-	foreach ($tab_couples as $couples) {
1353
-		foreach ($couples as $champ => $val) {
1354
-			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1355
-		}
1356
-		$valeurs[] = '(' . join(',', $couples) . ')';
1357
-		if (count($valeurs) >= 100) {
1358
-			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1359
-			$valeurs = [];
1360
-		}
1361
-	}
1362
-	if (count($valeurs)) {
1363
-		$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1364
-	}
1365
-
1366
-	return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1339
+    if (!$desc) {
1340
+        $desc = description_table($table, $serveur);
1341
+    }
1342
+    if (!$desc) {
1343
+        $tab_couples = [];
1344
+    }
1345
+    $fields = $desc['field'] ?? [];
1346
+
1347
+    $cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1348
+    $valeurs = [];
1349
+    $r = false;
1350
+
1351
+    // Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1352
+    foreach ($tab_couples as $couples) {
1353
+        foreach ($couples as $champ => $val) {
1354
+            $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1355
+        }
1356
+        $valeurs[] = '(' . join(',', $couples) . ')';
1357
+        if (count($valeurs) >= 100) {
1358
+            $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1359
+            $valeurs = [];
1360
+        }
1361
+    }
1362
+    if (count($valeurs)) {
1363
+        $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1364
+    }
1365
+
1366
+    return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1367 1367
 }
1368 1368
 
1369 1369
 /**
@@ -1388,19 +1388,19 @@  discard block
 block discarded – undo
1388 1388
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1389 1389
  */
1390 1390
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1391
-	$set = [];
1392
-	foreach ($champs as $champ => $val) {
1393
-		$set[] = $champ . "=$val";
1394
-	}
1395
-	if (!empty($set)) {
1396
-		return spip_mysql_query(
1397
-			calculer_mysql_expression('UPDATE', $table, ',')
1398
-			. calculer_mysql_expression('SET', $set, ',')
1399
-			. calculer_mysql_expression('WHERE', $where),
1400
-			$serveur,
1401
-			$requeter
1402
-		);
1403
-	}
1391
+    $set = [];
1392
+    foreach ($champs as $champ => $val) {
1393
+        $set[] = $champ . "=$val";
1394
+    }
1395
+    if (!empty($set)) {
1396
+        return spip_mysql_query(
1397
+            calculer_mysql_expression('UPDATE', $table, ',')
1398
+            . calculer_mysql_expression('SET', $set, ',')
1399
+            . calculer_mysql_expression('WHERE', $where),
1400
+            $serveur,
1401
+            $requeter
1402
+        );
1403
+    }
1404 1404
 }
1405 1405
 
1406 1406
 /**
@@ -1433,29 +1433,29 @@  discard block
 block discarded – undo
1433 1433
  */
1434 1434
 function spip_mysql_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1435 1435
 
1436
-	if (!$champs) {
1437
-		return;
1438
-	}
1439
-	if (!$desc) {
1440
-		$desc = description_table($table, $serveur);
1441
-	}
1442
-	if (!$desc) {
1443
-		$champs = [];
1444
-	} else {
1445
-		$fields = $desc['field'];
1446
-	}
1447
-	$set = [];
1448
-	foreach ($champs as $champ => $val) {
1449
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1450
-	}
1451
-
1452
-	return spip_mysql_query(
1453
-		calculer_mysql_expression('UPDATE', $table, ',')
1454
-		. calculer_mysql_expression('SET', $set, ',')
1455
-		. calculer_mysql_expression('WHERE', $where),
1456
-		$serveur,
1457
-		$requeter
1458
-	);
1436
+    if (!$champs) {
1437
+        return;
1438
+    }
1439
+    if (!$desc) {
1440
+        $desc = description_table($table, $serveur);
1441
+    }
1442
+    if (!$desc) {
1443
+        $champs = [];
1444
+    } else {
1445
+        $fields = $desc['field'];
1446
+    }
1447
+    $set = [];
1448
+    foreach ($champs as $champ => $val) {
1449
+        $set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1450
+    }
1451
+
1452
+    return spip_mysql_query(
1453
+        calculer_mysql_expression('UPDATE', $table, ',')
1454
+        . calculer_mysql_expression('SET', $set, ',')
1455
+        . calculer_mysql_expression('WHERE', $where),
1456
+        $serveur,
1457
+        $requeter
1458
+    );
1459 1459
 }
1460 1460
 
1461 1461
 /**
@@ -1471,22 +1471,22 @@  discard block
 block discarded – undo
1471 1471
  *     - False en cas d'erreur.
1472 1472
  **/
1473 1473
 function spip_mysql_delete($table, $where = '', $serveur = '', $requeter = true) {
1474
-	$res = spip_mysql_query(
1475
-		calculer_mysql_expression('DELETE FROM', $table, ',')
1476
-		. calculer_mysql_expression('WHERE', $where),
1477
-		$serveur,
1478
-		$requeter
1479
-	);
1480
-	if (!$requeter) {
1481
-		return $res;
1482
-	}
1483
-	if ($res) {
1484
-		$link = _mysql_link($serveur);
1485
-
1486
-		return mysqli_affected_rows($link);
1487
-	} else {
1488
-		return false;
1489
-	}
1474
+    $res = spip_mysql_query(
1475
+        calculer_mysql_expression('DELETE FROM', $table, ',')
1476
+        . calculer_mysql_expression('WHERE', $where),
1477
+        $serveur,
1478
+        $requeter
1479
+    );
1480
+    if (!$requeter) {
1481
+        return $res;
1482
+    }
1483
+    if ($res) {
1484
+        $link = _mysql_link($serveur);
1485
+
1486
+        return mysqli_affected_rows($link);
1487
+    } else {
1488
+        return false;
1489
+    }
1490 1490
 }
1491 1491
 
1492 1492
 
@@ -1515,10 +1515,10 @@  discard block
 block discarded – undo
1515 1515
  *     - False en cas d'erreur.
1516 1516
  **/
1517 1517
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1518
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1519
-		',',
1520
-		array_map('_q', $couples)
1521
-	) . ')', $serveur, $requeter);
1518
+    return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1519
+        ',',
1520
+        array_map('_q', $couples)
1521
+    ) . ')', $serveur, $requeter);
1522 1522
 }
1523 1523
 
1524 1524
 
@@ -1547,14 +1547,14 @@  discard block
 block discarded – undo
1547 1547
  *     - False en cas d'erreur.
1548 1548
  **/
1549 1549
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1550
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1551
-	$valeurs = [];
1552
-	foreach ($tab_couples as $couples) {
1553
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1554
-	}
1555
-	$valeurs = implode(', ', $valeurs);
1556
-
1557
-	return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1550
+    $cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1551
+    $valeurs = [];
1552
+    foreach ($tab_couples as $couples) {
1553
+        $valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1554
+    }
1555
+    $valeurs = implode(', ', $valeurs);
1556
+
1557
+    return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1558 1558
 }
1559 1559
 
1560 1560
 
@@ -1569,32 +1569,32 @@  discard block
 block discarded – undo
1569 1569
  * @return string       Texte de sélection pour la requête
1570 1570
  */
1571 1571
 function spip_mysql_multi($objet, $lang) {
1572
-	$lengthlang = strlen("[$lang]");
1573
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1574
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1575
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1576
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1577
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1578
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1579
-	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1580
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1581
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1582
-	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1583
-	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1584
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1585
-		'     TRIM(' . $objet . '), ' .
1586
-		'     CONCAT( ' .
1587
-		"          $debutchaine, " .
1588
-		'          IF( ' .
1589
-		"               $poslang = 0, " .
1590
-		"                     $chainemulti, " .
1591
-		"               $chainelang" .
1592
-		'          ), ' .
1593
-		"          $finchaine" .
1594
-		'     ) ' .
1595
-		'))) AS multi';
1596
-
1597
-	return $retour;
1572
+    $lengthlang = strlen("[$lang]");
1573
+    $posmulti = 'INSTR(' . $objet . ", '<multi>')";
1574
+    $posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1575
+    $debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1576
+    $finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1577
+    $chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1578
+    $poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1579
+    $poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1580
+    $chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1581
+    $posfinlang = 'INSTR(' . $chainelang . ", '[')";
1582
+    $chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1583
+    //$chainelang = "LEFT($chainelang,$posfinlang-1)";
1584
+    $retour = "(TRIM(IF($posmulti = 0 , " .
1585
+        '     TRIM(' . $objet . '), ' .
1586
+        '     CONCAT( ' .
1587
+        "          $debutchaine, " .
1588
+        '          IF( ' .
1589
+        "               $poslang = 0, " .
1590
+        "                     $chainemulti, " .
1591
+        "               $chainelang" .
1592
+        '          ), ' .
1593
+        "          $finchaine" .
1594
+        '     ) ' .
1595
+        '))) AS multi';
1596
+
1597
+    return $retour;
1598 1598
 }
1599 1599
 
1600 1600
 /**
@@ -1608,7 +1608,7 @@  discard block
 block discarded – undo
1608 1608
  *     Valeur hexadécimale pour MySQL
1609 1609
  **/
1610 1610
 function spip_mysql_hex($v) {
1611
-	return '0x' . $v;
1611
+    return '0x' . $v;
1612 1612
 }
1613 1613
 
1614 1614
 /**
@@ -1624,15 +1624,15 @@  discard block
 block discarded – undo
1624 1624
  *    Donnée prête à être utilisée par le gestionnaire SQL
1625 1625
  */
1626 1626
 function spip_mysql_quote($v, $type = '') {
1627
-	if (!is_array($v)) {
1628
-		return spip_mysql_cite($v, $type);
1629
-	}
1630
-
1631
-	// si c'est un tableau, le parcourir en propageant le type
1632
-	foreach ($v as $k => $r) {
1633
-		$v[$k] = spip_mysql_quote($r, $type);
1634
-	}
1635
-	return implode(',', $v);
1627
+    if (!is_array($v)) {
1628
+        return spip_mysql_cite($v, $type);
1629
+    }
1630
+
1631
+    // si c'est un tableau, le parcourir en propageant le type
1632
+    foreach ($v as $k => $r) {
1633
+        $v[$k] = spip_mysql_quote($r, $type);
1634
+    }
1635
+    return implode(',', $v);
1636 1636
 }
1637 1637
 
1638 1638
 /**
@@ -1648,18 +1648,18 @@  discard block
 block discarded – undo
1648 1648
  *     Expression SQL
1649 1649
  **/
1650 1650
 function spip_mysql_date_proche($champ, $interval, $unite) {
1651
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1652
-	return '('
1653
-	. $champ
1654
-	. (($interval <= 0) ? '>' : '<')
1655
-	. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1656
-	. '('
1657
-	. ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1658
-	. ', INTERVAL '
1659
-	. (($interval > 0) ? $interval : (0 - $interval))
1660
-	. ' '
1661
-	. $unite
1662
-	. '))';
1651
+    $use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1652
+    return '('
1653
+    . $champ
1654
+    . (($interval <= 0) ? '>' : '<')
1655
+    . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1656
+    . '('
1657
+    . ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1658
+    . ', INTERVAL '
1659
+    . (($interval > 0) ? $interval : (0 - $interval))
1660
+    . ' '
1661
+    . $unite
1662
+    . '))';
1663 1663
 }
1664 1664
 
1665 1665
 
@@ -1683,7 +1683,7 @@  discard block
 block discarded – undo
1683 1683
  *     Expression de requête SQL
1684 1684
  **/
1685 1685
 function spip_mysql_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1686
-	return "($val $not IN ($valeurs))";
1686
+    return "($val $not IN ($valeurs))";
1687 1687
 }
1688 1688
 
1689 1689
 
@@ -1695,39 +1695,39 @@  discard block
 block discarded – undo
1695 1695
  * @return string|number     Texte ou nombre échappé
1696 1696
  */
1697 1697
 function spip_mysql_cite($v, $type) {
1698
-	if (!$type) {
1699
-		if (is_bool($v)) {
1700
-			return strval(intval($v));
1701
-		} elseif (is_numeric($v)) {
1702
-			return strval($v);
1703
-		} elseif ($v === null) {
1704
-			return "''";
1705
-		}
1706
-		return "'" . addslashes($v) . "'";
1707
-	}
1708
-
1709
-	if ($v === null) {
1710
-		if (stripos($type, 'NOT NULL') === false) {
1711
-			// null php se traduit en NULL SQL
1712
-			return 'NULL';
1713
-		} else {
1714
-			return "''";
1715
-		}
1716
-	} elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1717
-		return $v;
1718
-	} elseif (sql_test_int($type)) {
1719
-		if (
1720
-			is_numeric($v)
1721
-			or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1722
-		) {
1723
-			return $v;
1724
-		} else {
1725
-			// si pas numerique, forcer le intval
1726
-			return intval($v);
1727
-		}
1728
-	}
1729
-
1730
-	return ("'" . addslashes($v) . "'");
1698
+    if (!$type) {
1699
+        if (is_bool($v)) {
1700
+            return strval(intval($v));
1701
+        } elseif (is_numeric($v)) {
1702
+            return strval($v);
1703
+        } elseif ($v === null) {
1704
+            return "''";
1705
+        }
1706
+        return "'" . addslashes($v) . "'";
1707
+    }
1708
+
1709
+    if ($v === null) {
1710
+        if (stripos($type, 'NOT NULL') === false) {
1711
+            // null php se traduit en NULL SQL
1712
+            return 'NULL';
1713
+        } else {
1714
+            return "''";
1715
+        }
1716
+    } elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1717
+        return $v;
1718
+    } elseif (sql_test_int($type)) {
1719
+        if (
1720
+            is_numeric($v)
1721
+            or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1722
+        ) {
1723
+            return $v;
1724
+        } else {
1725
+            // si pas numerique, forcer le intval
1726
+            return intval($v);
1727
+        }
1728
+    }
1729
+
1730
+    return ("'" . addslashes($v) . "'");
1731 1731
 }
1732 1732
 
1733 1733
 /**
@@ -1737,7 +1737,7 @@  discard block
 block discarded – undo
1737 1737
  *     True si on a les fonctions, false sinon
1738 1738
  */
1739 1739
 function spip_versions_mysql() {
1740
-	return function_exists('mysqli_query');
1740
+    return function_exists('mysqli_query');
1741 1741
 }
1742 1742
 
1743 1743
 
@@ -1750,20 +1750,20 @@  discard block
 block discarded – undo
1750 1750
  *     - chaîne : code compilé pour le faire désactiver par SPIP sinon
1751 1751
  */
1752 1752
 function test_rappel_nom_base_mysql($server_db) {
1753
-	$GLOBALS['mysql_rappel_nom_base'] = true;
1754
-	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1755
-	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1753
+    $GLOBALS['mysql_rappel_nom_base'] = true;
1754
+    sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1755
+    $ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1756 1756
 
1757
-	if ($ok) {
1758
-		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1757
+    if ($ok) {
1758
+        sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1759 1759
 
1760
-		return '';
1761
-	} else {
1762
-		$GLOBALS['mysql_rappel_nom_base'] = false;
1760
+        return '';
1761
+    } else {
1762
+        $GLOBALS['mysql_rappel_nom_base'] = false;
1763 1763
 
1764
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1765
-		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1766
-	}
1764
+        return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1765
+        "/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1766
+    }
1767 1767
 }
1768 1768
 
1769 1769
 /**
@@ -1777,13 +1777,13 @@  discard block
 block discarded – undo
1777 1777
  *     - chaîne : code compilé pour l'indiquer le résultat du test à SPIP
1778 1778
  */
1779 1779
 function test_sql_mode_mysql($server_db) {
1780
-	$res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1781
-	$row = sql_fetch($res, $server_db);
1782
-	if (version_compare($row['v'], '5.0.0', '>=')) {
1783
-		defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1780
+    $res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1781
+    $row = sql_fetch($res, $server_db);
1782
+    if (version_compare($row['v'], '5.0.0', '>=')) {
1783
+        defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1784 1784
 
1785
-		return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1786
-	}
1785
+        return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1786
+    }
1787 1787
 
1788
-	return '';
1788
+    return '';
1789 1789
 }
Please login to merge, or discard this patch.
ecrire/xml/indenter.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -63,9 +63,9 @@
 block discarded – undo
63 63
 	$f = new IndenteurXML();
64 64
 	$sax($page, $apply, $f);
65 65
 	if (!$f->err) {
66
-		return $f->entete . $f->res;
66
+		return $f->entete.$f->res;
67 67
 	}
68
-	spip_log('indentation impossible ' . (is_countable($f->err) ? count($f->err) : 0) . ' erreurs de validation');
68
+	spip_log('indentation impossible '.(is_countable($f->err) ? count($f->err) : 0).' erreurs de validation');
69 69
 
70
-	return $f->entete . $f->page;
70
+	return $f->entete.$f->page;
71 71
 }
Please login to merge, or discard this patch.
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -11,55 +11,55 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 class IndenteurXML {
18 18
 
19
-	public function debutElement($phraseur, $name, $attrs) {
20
-		xml_debutElement($this, $name, $attrs);
21
-	}
19
+    public function debutElement($phraseur, $name, $attrs) {
20
+        xml_debutElement($this, $name, $attrs);
21
+    }
22 22
 
23
-	public function finElement($phraseur, $name) {
24
-		xml_finElement($this, $name);
25
-	}
23
+    public function finElement($phraseur, $name) {
24
+        xml_finElement($this, $name);
25
+    }
26 26
 
27
-	public function textElement($phraseur, $data) {
28
-		xml_textElement($this, $data);
29
-	}
27
+    public function textElement($phraseur, $data) {
28
+        xml_textElement($this, $data);
29
+    }
30 30
 
31
-	public function piElement($phraseur, $target, $data) {
32
-		xml_PiElement($this, $target, $data);
33
-	}
31
+    public function piElement($phraseur, $target, $data) {
32
+        xml_PiElement($this, $target, $data);
33
+    }
34 34
 
35
-	public function defaultElement($phraseur, $data) {
36
-		xml_defaultElement($this, $data);
37
-	}
35
+    public function defaultElement($phraseur, $data) {
36
+        xml_defaultElement($this, $data);
37
+    }
38 38
 
39
-	public function phraserTout($phraseur, $data) {
40
-		xml_parsestring($this, $data);
41
-	}
39
+    public function phraserTout($phraseur, $data) {
40
+        xml_parsestring($this, $data);
41
+    }
42 42
 
43
-	public $depth = '';
44
-	public $res = '';
45
-	public $err = [];
46
-	public $contenu = [];
47
-	public $ouvrant = [];
48
-	public $reperes = [];
49
-	public $entete = '';
50
-	public $page = '';
51
-	public $dtc = null;
52
-	public $sax = null;
43
+    public $depth = '';
44
+    public $res = '';
45
+    public $err = [];
46
+    public $contenu = [];
47
+    public $ouvrant = [];
48
+    public $reperes = [];
49
+    public $entete = '';
50
+    public $page = '';
51
+    public $dtc = null;
52
+    public $sax = null;
53 53
 }
54 54
 
55 55
 function xml_indenter_dist($page, $apply = false) {
56
-	$sax = charger_fonction('sax', 'xml');
57
-	$f = new IndenteurXML();
58
-	$sax($page, $apply, $f);
59
-	if (!$f->err) {
60
-		return $f->entete . $f->res;
61
-	}
62
-	spip_log('indentation impossible ' . (is_countable($f->err) ? count($f->err) : 0) . ' erreurs de validation');
56
+    $sax = charger_fonction('sax', 'xml');
57
+    $f = new IndenteurXML();
58
+    $sax($page, $apply, $f);
59
+    if (!$f->err) {
60
+        return $f->entete . $f->res;
61
+    }
62
+    spip_log('indentation impossible ' . (is_countable($f->err) ? count($f->err) : 0) . ' erreurs de validation');
63 63
 
64
-	return $f->entete . $f->page;
64
+    return $f->entete . $f->page;
65 65
 }
Please login to merge, or discard this patch.
ecrire/xml/sax.php 2 patches
Spacing   +21 added lines, -22 removed lines patch added patch discarded remove patch
@@ -46,8 +46,8 @@  discard block
 block discarded – undo
46 46
 	$t = $phraseur->ouvrant[$depth] ?? ' ';
47 47
 	// espace initial signifie: deja integree au resultat
48 48
 	if ($t[0] != ' ') {
49
-		$phraseur->res .= '<' . $t . '>';
50
-		$phraseur->ouvrant[$depth] = ' ' . $t;
49
+		$phraseur->res .= '<'.$t.'>';
50
+		$phraseur->ouvrant[$depth] = ' '.$t;
51 51
 	}
52 52
 	$t = $phraseur->contenu[$depth];
53 53
 	// n'indenter que s'il y a un separateur avant
@@ -58,14 +58,14 @@  discard block
 block discarded – undo
58 58
 	foreach ($attrs as $k => $v) {
59 59
 		$delim = strpos($v, "'") === false ? "'" : '"';
60 60
 		$val = xml_entites_html($v);
61
-		$att .= $sep . $k . '=' . $delim
61
+		$att .= $sep.$k.'='.$delim
62 62
 			. ($delim !== '"' ? str_replace('&quot;', '"', $val) : $val)
63 63
 			. $delim;
64 64
 		$sep = "\n $depth";
65 65
 	}
66 66
 	$phraseur->depth .= '  ';
67 67
 	$phraseur->contenu[$phraseur->depth] = '';
68
-	$phraseur->ouvrant[$phraseur->depth] = $name . $att;
68
+	$phraseur->ouvrant[$phraseur->depth] = $name.$att;
69 69
 	$phraseur->reperes[$phraseur->depth] = xml_get_current_line_number($phraseur->sax);
70 70
 }
71 71
 
@@ -74,13 +74,13 @@  discard block
 block discarded – undo
74 74
 	$ouv = $phraseur->ouvrant[$phraseur->depth];
75 75
 
76 76
 	if ($ouv[0] != ' ') {
77
-		$phraseur->ouvrant[$phraseur->depth] = ' ' . $ouv;
77
+		$phraseur->ouvrant[$phraseur->depth] = ' '.$ouv;
78 78
 	} else {
79 79
 		$ouv = '';
80 80
 	}
81 81
 	$t = $phraseur->contenu[$phraseur->depth];
82 82
 	$phraseur->depth = substr($phraseur->depth, 2);
83
-	$t = preg_replace("/[\n\t ]+$/", "\n" . $phraseur->depth, $t);
83
+	$t = preg_replace("/[\n\t ]+$/", "\n".$phraseur->depth, $t);
84 84
 
85 85
 	// fusion <balise></balise> en <balise />.
86 86
 	// ATTENTION,  certains clients http croient que fusion ==> pas d'atttributs
@@ -89,9 +89,9 @@  discard block
 block discarded – undo
89 89
 	// (param fusion_bal)
90 90
 
91 91
 	if ($t || (($ouv != $name) and !$fusion_bal)) {
92
-		$phraseur->res .= ($ouv ? ('<' . $ouv . '>') : '') . $t . '</' . $name . '>';
92
+		$phraseur->res .= ($ouv ? ('<'.$ouv.'>') : '').$t.'</'.$name.'>';
93 93
 	} else {
94
-		$phraseur->res .= ($ouv ? ('<' . $ouv . ' />') : ('</' . $name . '>'));
94
+		$phraseur->res .= ($ouv ? ('<'.$ouv.' />') : ('</'.$name.'>'));
95 95
 	}
96 96
 }
97 97
 
@@ -136,16 +136,15 @@  discard block
 block discarded – undo
136 136
 		coordonnees_erreur(
137 137
 			$phraseur,
138 138
 			xml_error_string(xml_get_error_code($phraseur->sax))
139
-			. "<br />\n" .
140
-			(!$phraseur->depth ? '' :
141
-				('(' .
142
-					_T('erreur_balise_non_fermee') .
143
-					' <tt>' .
144
-					$phraseur->ouvrant[$phraseur->depth] .
145
-					'</tt> ' .
146
-					_T('ligne') .
147
-					' ' .
148
-					$phraseur->reperes[$phraseur->depth] .
139
+			. "<br />\n".
140
+			(!$phraseur->depth ? '' : ('('.
141
+					_T('erreur_balise_non_fermee').
142
+					' <tt>'.
143
+					$phraseur->ouvrant[$phraseur->depth].
144
+					'</tt> '.
145
+					_T('ligne').
146
+					' '.
147
+					$phraseur->reperes[$phraseur->depth].
149 148
 			") <br />\n"))
150 149
 		);
151 150
 	}
@@ -188,7 +187,7 @@  discard block
 block discarded – undo
188 187
 	// et escamoter le doctype que sax mange en php5 mais pas en  php4
189 188
 	if (!$doctype) {
190 189
 		if (!$r = analyser_doctype($page)) {
191
-			$page = _MESSAGE_DOCTYPE . _DOCTYPE_ECRIRE
190
+			$page = _MESSAGE_DOCTYPE._DOCTYPE_ECRIRE
192 191
 				. preg_replace(_REGEXP_DOCTYPE, '', $page);
193 192
 			$r = analyser_doctype($page);
194 193
 		}
@@ -297,18 +296,18 @@  discard block
 block discarded – undo
297 296
 					'rss-0.91.dtd'
298 297
 				];
299 298
 			} else {
300
-				$dtd = $topelement . '.dtd';
299
+				$dtd = $topelement.'.dtd';
301 300
 				$f = find_in_path($dtd);
302 301
 				if (file_exists($f)) {
303 302
 					return [$entete, 'SYSTEM', $f, $dtd];
304 303
 				}
305 304
 			}
306 305
 		}
307
-		spip_log('Dtd pas vu pour ' . substr($data, 0, 100));
306
+		spip_log('Dtd pas vu pour '.substr($data, 0, 100));
308 307
 
309 308
 		return [];
310 309
 	}
311
-	[$entete, , $topelement, $avail, $suite] = $page;
310
+	[$entete,, $topelement, $avail, $suite] = $page;
312 311
 
313 312
 	if (!preg_match('/^"([^"]*)"\s*(.*)$/', $suite, $r)) {
314 313
 		if (!preg_match("/^'([^']*)'\s*(.*)$/", $suite, $r)) {
Please login to merge, or discard this patch.
Indentation   +257 added lines, -257 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('inc/charsets');
@@ -24,222 +24,222 @@  discard block
 block discarded – undo
24 24
  * @return string
25 25
  */
26 26
 function xml_entites_html($texte) {
27
-	if (
28
-		!is_string($texte) or !$texte
29
-		or strpbrk($texte, "&\"'<>") == false
30
-	) {
31
-		return $texte;
32
-	}
33
-
34
-	if (!function_exists('spip_htmlspecialchars')) {
35
-		include_spip('inc/filtres_mini');
36
-	}
37
-	$texte = spip_htmlspecialchars($texte, ENT_QUOTES);
38
-
39
-	return $texte;
27
+    if (
28
+        !is_string($texte) or !$texte
29
+        or strpbrk($texte, "&\"'<>") == false
30
+    ) {
31
+        return $texte;
32
+    }
33
+
34
+    if (!function_exists('spip_htmlspecialchars')) {
35
+        include_spip('inc/filtres_mini');
36
+    }
37
+    $texte = spip_htmlspecialchars($texte, ENT_QUOTES);
38
+
39
+    return $texte;
40 40
 }
41 41
 
42 42
 function xml_debutElement($phraseur, $name, $attrs) {
43
-	$depth = $phraseur->depth;
44
-
45
-	$t = $phraseur->ouvrant[$depth] ?? ' ';
46
-	// espace initial signifie: deja integree au resultat
47
-	if ($t[0] != ' ') {
48
-		$phraseur->res .= '<' . $t . '>';
49
-		$phraseur->ouvrant[$depth] = ' ' . $t;
50
-	}
51
-	$t = $phraseur->contenu[$depth];
52
-	// n'indenter que s'il y a un separateur avant
53
-	$phraseur->res .= preg_replace("/[\n\t ]+$/", "\n$depth", $t);
54
-	$phraseur->contenu[$depth] = '';
55
-	$att = '';
56
-	$sep = ' ';
57
-	foreach ($attrs as $k => $v) {
58
-		$delim = strpos($v, "'") === false ? "'" : '"';
59
-		$val = xml_entites_html($v);
60
-		$att .= $sep . $k . '=' . $delim
61
-			. ($delim !== '"' ? str_replace('&quot;', '"', $val) : $val)
62
-			. $delim;
63
-		$sep = "\n $depth";
64
-	}
65
-	$phraseur->depth .= '  ';
66
-	$phraseur->contenu[$phraseur->depth] = '';
67
-	$phraseur->ouvrant[$phraseur->depth] = $name . $att;
68
-	$phraseur->reperes[$phraseur->depth] = xml_get_current_line_number($phraseur->sax);
43
+    $depth = $phraseur->depth;
44
+
45
+    $t = $phraseur->ouvrant[$depth] ?? ' ';
46
+    // espace initial signifie: deja integree au resultat
47
+    if ($t[0] != ' ') {
48
+        $phraseur->res .= '<' . $t . '>';
49
+        $phraseur->ouvrant[$depth] = ' ' . $t;
50
+    }
51
+    $t = $phraseur->contenu[$depth];
52
+    // n'indenter que s'il y a un separateur avant
53
+    $phraseur->res .= preg_replace("/[\n\t ]+$/", "\n$depth", $t);
54
+    $phraseur->contenu[$depth] = '';
55
+    $att = '';
56
+    $sep = ' ';
57
+    foreach ($attrs as $k => $v) {
58
+        $delim = strpos($v, "'") === false ? "'" : '"';
59
+        $val = xml_entites_html($v);
60
+        $att .= $sep . $k . '=' . $delim
61
+            . ($delim !== '"' ? str_replace('&quot;', '"', $val) : $val)
62
+            . $delim;
63
+        $sep = "\n $depth";
64
+    }
65
+    $phraseur->depth .= '  ';
66
+    $phraseur->contenu[$phraseur->depth] = '';
67
+    $phraseur->ouvrant[$phraseur->depth] = $name . $att;
68
+    $phraseur->reperes[$phraseur->depth] = xml_get_current_line_number($phraseur->sax);
69 69
 }
70 70
 
71 71
 function xml_finElement($phraseur, $name, $fusion_bal = false) {
72
-	$ouv = $phraseur->ouvrant[$phraseur->depth];
73
-
74
-	if ($ouv[0] != ' ') {
75
-		$phraseur->ouvrant[$phraseur->depth] = ' ' . $ouv;
76
-	} else {
77
-		$ouv = '';
78
-	}
79
-	$t = $phraseur->contenu[$phraseur->depth];
80
-	$phraseur->depth = substr($phraseur->depth, 2);
81
-	$t = preg_replace("/[\n\t ]+$/", "\n" . $phraseur->depth, $t);
82
-
83
-	// fusion <balise></balise> en <balise />.
84
-	// ATTENTION,  certains clients http croient que fusion ==> pas d'atttributs
85
-	// en particulier pour les balises Script et A.
86
-	// en presence d'attributs ne le faire que si la DTD est dispo et d'accord
87
-	// (param fusion_bal)
88
-
89
-	if ($t || (($ouv != $name) and !$fusion_bal)) {
90
-		$phraseur->res .= ($ouv ? ('<' . $ouv . '>') : '') . $t . '</' . $name . '>';
91
-	} else {
92
-		$phraseur->res .= ($ouv ? ('<' . $ouv . ' />') : ('</' . $name . '>'));
93
-	}
72
+    $ouv = $phraseur->ouvrant[$phraseur->depth];
73
+
74
+    if ($ouv[0] != ' ') {
75
+        $phraseur->ouvrant[$phraseur->depth] = ' ' . $ouv;
76
+    } else {
77
+        $ouv = '';
78
+    }
79
+    $t = $phraseur->contenu[$phraseur->depth];
80
+    $phraseur->depth = substr($phraseur->depth, 2);
81
+    $t = preg_replace("/[\n\t ]+$/", "\n" . $phraseur->depth, $t);
82
+
83
+    // fusion <balise></balise> en <balise />.
84
+    // ATTENTION,  certains clients http croient que fusion ==> pas d'atttributs
85
+    // en particulier pour les balises Script et A.
86
+    // en presence d'attributs ne le faire que si la DTD est dispo et d'accord
87
+    // (param fusion_bal)
88
+
89
+    if ($t || (($ouv != $name) and !$fusion_bal)) {
90
+        $phraseur->res .= ($ouv ? ('<' . $ouv . '>') : '') . $t . '</' . $name . '>';
91
+    } else {
92
+        $phraseur->res .= ($ouv ? ('<' . $ouv . ' />') : ('</' . $name . '>'));
93
+    }
94 94
 }
95 95
 
96 96
 function xml_textElement($phraseur, $data) {
97
-	$depth = $phraseur->depth;
98
-	$phraseur->contenu[$depth] .= preg_match('/^script/', $phraseur->ouvrant[$depth])
99
-		? $data
100
-		: xml_entites_html($data);
97
+    $depth = $phraseur->depth;
98
+    $phraseur->contenu[$depth] .= preg_match('/^script/', $phraseur->ouvrant[$depth])
99
+        ? $data
100
+        : xml_entites_html($data);
101 101
 }
102 102
 
103 103
 function xml_piElement($phraseur, $target, $data) {
104
-	$depth = $phraseur->depth;
105
-
106
-	if (strtolower($target) != 'php') {
107
-		$phraseur->contenu[$depth] .= $data;
108
-	} else {
109
-		ob_start();
110
-		eval($data);
111
-		$data = ob_get_contents();
112
-		ob_end_clean();
113
-		$phraseur->contenu[$depth] .= $data;
114
-	}
104
+    $depth = $phraseur->depth;
105
+
106
+    if (strtolower($target) != 'php') {
107
+        $phraseur->contenu[$depth] .= $data;
108
+    } else {
109
+        ob_start();
110
+        eval($data);
111
+        $data = ob_get_contents();
112
+        ob_end_clean();
113
+        $phraseur->contenu[$depth] .= $data;
114
+    }
115 115
 }
116 116
 
117 117
 
118 118
 function xml_defaultElement($phraseur, $data) {
119
-	$depth = $phraseur->depth;
119
+    $depth = $phraseur->depth;
120 120
 
121
-	if (!isset($phraseur->contenu[$depth])) {
122
-		$phraseur->contenu[$depth] = '';
123
-	}
124
-	$phraseur->contenu[$depth] .= $data;
121
+    if (!isset($phraseur->contenu[$depth])) {
122
+        $phraseur->contenu[$depth] = '';
123
+    }
124
+    $phraseur->contenu[$depth] .= $data;
125 125
 }
126 126
 
127 127
 function xml_parsestring($phraseur, $data) {
128
-	$phraseur->contenu[$phraseur->depth] = '';
129
-
130
-	if (!xml_parse($phraseur->sax, $data, true)) {
131
-		coordonnees_erreur(
132
-			$phraseur,
133
-			xml_error_string(xml_get_error_code($phraseur->sax))
134
-			. "<br />\n" .
135
-			(!$phraseur->depth ? '' :
136
-				('(' .
137
-					_T('erreur_balise_non_fermee') .
138
-					' <tt>' .
139
-					$phraseur->ouvrant[$phraseur->depth] .
140
-					'</tt> ' .
141
-					_T('ligne') .
142
-					' ' .
143
-					$phraseur->reperes[$phraseur->depth] .
144
-			") <br />\n"))
145
-		);
146
-	}
128
+    $phraseur->contenu[$phraseur->depth] = '';
129
+
130
+    if (!xml_parse($phraseur->sax, $data, true)) {
131
+        coordonnees_erreur(
132
+            $phraseur,
133
+            xml_error_string(xml_get_error_code($phraseur->sax))
134
+            . "<br />\n" .
135
+            (!$phraseur->depth ? '' :
136
+                ('(' .
137
+                    _T('erreur_balise_non_fermee') .
138
+                    ' <tt>' .
139
+                    $phraseur->ouvrant[$phraseur->depth] .
140
+                    '</tt> ' .
141
+                    _T('ligne') .
142
+                    ' ' .
143
+                    $phraseur->reperes[$phraseur->depth] .
144
+            ") <br />\n"))
145
+        );
146
+    }
147 147
 }
148 148
 
149 149
 function coordonnees_erreur($phraseur, $msg) {
150
-	$entete_length = substr_count($phraseur->entete, "\n");
151
-	$phraseur->err[] = [
152
-		$msg,
153
-		xml_get_current_line_number($phraseur->sax) + $entete_length,
154
-		xml_get_current_column_number($phraseur->sax)
155
-	];
150
+    $entete_length = substr_count($phraseur->entete, "\n");
151
+    $phraseur->err[] = [
152
+        $msg,
153
+        xml_get_current_line_number($phraseur->sax) + $entete_length,
154
+        xml_get_current_column_number($phraseur->sax)
155
+    ];
156 156
 }
157 157
 
158 158
 function xml_sax_dist($page, $apply = false, $phraseur = null, $doctype = '', $charset = null) {
159
-	if (is_null($charset)) {
160
-		$charset = $GLOBALS['meta']['charset'];
161
-	}
162
-	if ($apply) {
163
-		ob_start();
164
-		if (is_array($apply)) {
165
-			$r = $page(...$apply);
166
-		} else {
167
-			$r = $page();
168
-		}
169
-		$page = ob_get_contents();
170
-		ob_end_clean();
171
-		// fonction sans aucun "echo", ca doit etre le resultat
172
-		if (!$page) {
173
-			$page = $r;
174
-		}
175
-	}
176
-
177
-	if (!$page) {
178
-		return '';
179
-	}
180
-	// charger la DTD et transcoder les entites,
181
-	// et escamoter le doctype que sax mange en php5 mais pas en  php4
182
-	if (!$doctype) {
183
-		if (!$r = analyser_doctype($page)) {
184
-			$page = _MESSAGE_DOCTYPE . _DOCTYPE_ECRIRE
185
-				. preg_replace(_REGEXP_DOCTYPE, '', $page);
186
-			$r = analyser_doctype($page);
187
-		}
188
-		[$entete, $avail, $grammaire, $rotlvl] = array_pad($r, 4, null);
189
-		$page = substr($page, strlen($entete));
190
-	} else {
191
-		$avail = 'SYSTEM';
192
-		$grammaire = $doctype;
193
-		$rotlvl = basename($grammaire);
194
-	}
195
-
196
-	include_spip('xml/analyser_dtd');
197
-	$dtc = charger_dtd($grammaire, $avail, $rotlvl);
198
-	$page = sax_bug($page, $dtc, $charset);
199
-
200
-	// compatibilite Tidy espace public
201
-	if (!$phraseur) {
202
-		$indenter_xml = charger_fonction('indenter', 'xml');
203
-
204
-		return $indenter_xml($page, $apply);
205
-	}
206
-
207
-	$xml_parser = xml_parser_create($charset);
208
-
209
-	xml_set_element_handler(
210
-		$xml_parser,
211
-		[$phraseur, 'debutElement'],
212
-		[$phraseur, 'finElement']
213
-	);
214
-
215
-	xml_set_character_data_handler(
216
-		$xml_parser,
217
-		[$phraseur, 'textElement']
218
-	);
219
-
220
-	xml_set_processing_instruction_handler(
221
-		$xml_parser,
222
-		[$phraseur, 'piElement']
223
-	);
224
-
225
-	xml_set_default_handler(
226
-		$xml_parser,
227
-		[$phraseur, 'defaultElement']
228
-	);
229
-
230
-	xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
231
-
232
-	$phraseur->sax = $xml_parser;
233
-	if (isset($entete)) {
234
-		$phraseur->entete = $entete;
235
-	}
236
-	$phraseur->page = $page;
237
-	$phraseur->dtc = $dtc;
238
-	$phraseur->phraserTout($xml_parser, $page);
239
-	xml_parser_free($xml_parser);
240
-	$phraseur->sax = '';
241
-
242
-	return $phraseur;
159
+    if (is_null($charset)) {
160
+        $charset = $GLOBALS['meta']['charset'];
161
+    }
162
+    if ($apply) {
163
+        ob_start();
164
+        if (is_array($apply)) {
165
+            $r = $page(...$apply);
166
+        } else {
167
+            $r = $page();
168
+        }
169
+        $page = ob_get_contents();
170
+        ob_end_clean();
171
+        // fonction sans aucun "echo", ca doit etre le resultat
172
+        if (!$page) {
173
+            $page = $r;
174
+        }
175
+    }
176
+
177
+    if (!$page) {
178
+        return '';
179
+    }
180
+    // charger la DTD et transcoder les entites,
181
+    // et escamoter le doctype que sax mange en php5 mais pas en  php4
182
+    if (!$doctype) {
183
+        if (!$r = analyser_doctype($page)) {
184
+            $page = _MESSAGE_DOCTYPE . _DOCTYPE_ECRIRE
185
+                . preg_replace(_REGEXP_DOCTYPE, '', $page);
186
+            $r = analyser_doctype($page);
187
+        }
188
+        [$entete, $avail, $grammaire, $rotlvl] = array_pad($r, 4, null);
189
+        $page = substr($page, strlen($entete));
190
+    } else {
191
+        $avail = 'SYSTEM';
192
+        $grammaire = $doctype;
193
+        $rotlvl = basename($grammaire);
194
+    }
195
+
196
+    include_spip('xml/analyser_dtd');
197
+    $dtc = charger_dtd($grammaire, $avail, $rotlvl);
198
+    $page = sax_bug($page, $dtc, $charset);
199
+
200
+    // compatibilite Tidy espace public
201
+    if (!$phraseur) {
202
+        $indenter_xml = charger_fonction('indenter', 'xml');
203
+
204
+        return $indenter_xml($page, $apply);
205
+    }
206
+
207
+    $xml_parser = xml_parser_create($charset);
208
+
209
+    xml_set_element_handler(
210
+        $xml_parser,
211
+        [$phraseur, 'debutElement'],
212
+        [$phraseur, 'finElement']
213
+    );
214
+
215
+    xml_set_character_data_handler(
216
+        $xml_parser,
217
+        [$phraseur, 'textElement']
218
+    );
219
+
220
+    xml_set_processing_instruction_handler(
221
+        $xml_parser,
222
+        [$phraseur, 'piElement']
223
+    );
224
+
225
+    xml_set_default_handler(
226
+        $xml_parser,
227
+        [$phraseur, 'defaultElement']
228
+    );
229
+
230
+    xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
231
+
232
+    $phraseur->sax = $xml_parser;
233
+    if (isset($entete)) {
234
+        $phraseur->entete = $entete;
235
+    }
236
+    $phraseur->page = $page;
237
+    $phraseur->dtc = $dtc;
238
+    $phraseur->phraserTout($xml_parser, $page);
239
+    xml_parser_free($xml_parser);
240
+    $phraseur->sax = '';
241
+
242
+    return $phraseur;
243 243
 }
244 244
 
245 245
 // SAX ne dit pas si une Entite est dans un attribut ou non.
@@ -250,24 +250,24 @@  discard block
 block discarded – undo
250 250
 // sinon on se rabat sur ce qu'en connait SPIP en standard.
251 251
 
252 252
 function sax_bug($data, $dtc, $charset = null) {
253
-	if (is_null($charset)) {
254
-		$charset = $GLOBALS['meta']['charset'];
255
-	}
256
-
257
-	if ($dtc) {
258
-		$trans = [];
259
-
260
-		foreach ($dtc->entites as $k => $v) {
261
-			if (!strpos(' amp lt gt quot ', (string) $k)) {
262
-				$trans["&$k;"] = $v;
263
-			}
264
-		}
265
-		$data = strtr($data, $trans);
266
-	} else {
267
-		$data = html2unicode($data, true);
268
-	}
269
-
270
-	return unicode2charset($data, $charset);
253
+    if (is_null($charset)) {
254
+        $charset = $GLOBALS['meta']['charset'];
255
+    }
256
+
257
+    if ($dtc) {
258
+        $trans = [];
259
+
260
+        foreach ($dtc->entites as $k => $v) {
261
+            if (!strpos(' amp lt gt quot ', (string) $k)) {
262
+                $trans["&$k;"] = $v;
263
+            }
264
+        }
265
+        $data = strtr($data, $trans);
266
+    } else {
267
+        $data = html2unicode($data, true);
268
+    }
269
+
270
+    return unicode2charset($data, $charset);
271 271
 }
272 272
 
273 273
 // Retirer < ? xml... ? > et autre PI, ainsi que les commentaires en debut
@@ -277,52 +277,52 @@  discard block
 block discarded – undo
277 277
 // les autres formats RSS n'ont pas de DTD,
278 278
 // mais un XML Schema que SPIP ne fait pas encore lire.
279 279
 function analyser_doctype($data) {
280
-	if (!preg_match(_REGEXP_DOCTYPE, $data, $page)) {
281
-		if (preg_match(_REGEXP_XML, $data, $page)) {
282
-			[, $entete, $topelement] = $page;
283
-			if ($topelement == 'rss') {
284
-				return [
285
-					$entete,
286
-					'PUBLIC',
287
-					_DOCTYPE_RSS,
288
-					'rss-0.91.dtd'
289
-				];
290
-			} else {
291
-				$dtd = $topelement . '.dtd';
292
-				$f = find_in_path($dtd);
293
-				if (file_exists($f)) {
294
-					return [$entete, 'SYSTEM', $f, $dtd];
295
-				}
296
-			}
297
-		}
298
-		spip_log('Dtd pas vu pour ' . substr($data, 0, 100));
299
-
300
-		return [];
301
-	}
302
-	[$entete, , $topelement, $avail, $suite] = $page;
303
-
304
-	if (!preg_match('/^"([^"]*)"\s*(.*)$/', $suite, $r)) {
305
-		if (!preg_match("/^'([^']*)'\s*(.*)$/", $suite, $r)) {
306
-			return [];
307
-		}
308
-	}
309
-	[, $rotlvl, $suite] = $r;
310
-
311
-	if (!$suite) {
312
-		if ($avail != 'SYSTEM') {
313
-			return [];
314
-		}
315
-		$grammaire = $rotlvl;
316
-		$rotlvl = '';
317
-	} else {
318
-		if (!preg_match('/^"([^"]*)"\s*$/', $suite, $r)) {
319
-			if (!preg_match("/^'([^']*)'\s*$/", $suite, $r)) {
320
-				return [];
321
-			}
322
-		}
323
-
324
-		$grammaire = $r[1];
325
-	}
326
-
327
-	return [$entete, $avail, $grammaire, $rotlvl];
280
+    if (!preg_match(_REGEXP_DOCTYPE, $data, $page)) {
281
+        if (preg_match(_REGEXP_XML, $data, $page)) {
282
+            [, $entete, $topelement] = $page;
283
+            if ($topelement == 'rss') {
284
+                return [
285
+                    $entete,
286
+                    'PUBLIC',
287
+                    _DOCTYPE_RSS,
288
+                    'rss-0.91.dtd'
289
+                ];
290
+            } else {
291
+                $dtd = $topelement . '.dtd';
292
+                $f = find_in_path($dtd);
293
+                if (file_exists($f)) {
294
+                    return [$entete, 'SYSTEM', $f, $dtd];
295
+                }
296
+            }
297
+        }
298
+        spip_log('Dtd pas vu pour ' . substr($data, 0, 100));
299
+
300
+        return [];
301
+    }
302
+    [$entete, , $topelement, $avail, $suite] = $page;
303
+
304
+    if (!preg_match('/^"([^"]*)"\s*(.*)$/', $suite, $r)) {
305
+        if (!preg_match("/^'([^']*)'\s*(.*)$/", $suite, $r)) {
306
+            return [];
307
+        }
308
+    }
309
+    [, $rotlvl, $suite] = $r;
310
+
311
+    if (!$suite) {
312
+        if ($avail != 'SYSTEM') {
313
+            return [];
314
+        }
315
+        $grammaire = $rotlvl;
316
+        $rotlvl = '';
317
+    } else {
318
+        if (!preg_match('/^"([^"]*)"\s*$/', $suite, $r)) {
319
+            if (!preg_match("/^'([^']*)'\s*$/", $suite, $r)) {
320
+                return [];
321
+            }
322
+        }
323
+
324
+        $grammaire = $r[1];
325
+    }
326
+
327
+    return [$entete, $avail, $grammaire, $rotlvl];
328 328
 }
Please login to merge, or discard this patch.
ecrire/xml/analyser_dtd.php 2 patches
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -29,7 +29,7 @@  discard block
 block discarded – undo
29 29
 		$grammaire = find_in_path($grammaire);
30 30
 	}
31 31
 
32
-	$file = _DIR_CACHE_XML . preg_replace('/[^\w.]/', '_', $rotlvl) . '.gz';
32
+	$file = _DIR_CACHE_XML.preg_replace('/[^\w.]/', '_', $rotlvl).'.gz';
33 33
 
34 34
 	if (lire_fichier($file, $r)) {
35 35
 		if (!$grammaire) {
@@ -56,7 +56,7 @@  discard block
 block discarded – undo
56 56
 				$dtc->peres[$k] = $v;
57 57
 			}
58 58
 
59
-			spip_log("Analyser DTD $avail $grammaire (" . spip_timer('dtd') . ') ' . (is_countable($dtc->macros) ? count($dtc->macros) : 0) . ' macros, ' . (is_countable($dtc->elements) ? count($dtc->elements) : 0) . ' elements, ' . (is_countable($dtc->attributs) ? count($dtc->attributs) : 0) . " listes d'attributs, " . (is_countable($dtc->entites) ? count($dtc->entites) : 0) . ' entites');
59
+			spip_log("Analyser DTD $avail $grammaire (".spip_timer('dtd').') '.(is_countable($dtc->macros) ? count($dtc->macros) : 0).' macros, '.(is_countable($dtc->elements) ? count($dtc->elements) : 0).' elements, '.(is_countable($dtc->attributs) ? count($dtc->attributs) : 0)." listes d'attributs, ".(is_countable($dtc->entites) ? count($dtc->entites) : 0).' entites');
60 60
 			#	$r = $dtc->regles; ksort($r);foreach($r as $l => $v) {$t=array_keys($dtc->attributs[$l]);echo "<b>$l</b> '$v' ", count($t), " attributs: ", join (', ',$t);$t=$dtc->peres[$l];echo "<br />",count($t), " peres: ", @join (', ',$t), "<br />\n";}exit;
61 61
 			ecrire_fichier($file, serialize($dtc), true);
62 62
 		}
@@ -173,7 +173,7 @@  discard block
 block discarded – undo
173 173
 			}
174 174
 		}
175 175
 		if (!is_string($r)) {
176
-			spip_log("erreur $r dans la DTD  " . substr($dtd, 0, 80) . '.....');
176
+			spip_log("erreur $r dans la DTD  ".substr($dtd, 0, 80).'.....');
177 177
 
178 178
 			return false;
179 179
 		}
@@ -221,7 +221,7 @@  discard block
 block discarded – undo
221 221
 			($n[0] == 'PUBLIC')
222 222
 			and !tester_url_absolue($n[1])
223 223
 		) {
224
-			$n[1] = substr($grammaire, 0, strrpos($grammaire, '/') + 1) . $n[1];
224
+			$n[1] = substr($grammaire, 0, strrpos($grammaire, '/') + 1).$n[1];
225 225
 		}
226 226
 		analyser_dtd($n[1], $n[0], $dtc);
227 227
 	}
@@ -249,7 +249,7 @@  discard block
 block discarded – undo
249 249
 	}
250 250
 
251 251
 	if ($dtc->macros[$m[1]] == 'INCLUDE') {
252
-		$retour = $r[1] . substr($m[2], strlen($r[0]));
252
+		$retour = $r[1].substr($m[2], strlen($r[0]));
253 253
 	} else {
254 254
 		$retour = substr($m[2], strlen($r[0]));
255 255
 	}
@@ -282,7 +282,7 @@  discard block
 block discarded – undo
282 282
 		spip_log("redefinition de l'entite $nom");
283 283
 	}
284 284
 	if ($k6) {
285
-		return $k6 . $dtd;
285
+		return $k6.$dtd;
286 286
 	} // cas du synonyme complet
287 287
 	$val = expanserEntite(($k2 ? $k3 : ($k4 ? $k5 : $k6)), $dtc->macros);
288 288
 
@@ -390,7 +390,7 @@  discard block
 block discarded – undo
390 390
 	if (preg_match_all("/\s*(\S+)\s+(([(][^)]*[)])|(\S+))\s+([^\s']*)(\s*'[^']*')?/", $val, $r2, PREG_SET_ORDER)) {
391 391
 		foreach ($r2 as $m2) {
392 392
 			$v = preg_match('/^\w+$/', $m2[2]) ? $m2[2]
393
-				: ('/^' . preg_replace('/\s+/', '', $m2[2]) . '$/');
393
+				: ('/^'.preg_replace('/\s+/', '', $m2[2]).'$/');
394 394
 			$m21 = expanserEntite($m2[1], $dtc->macros);
395 395
 			$m25 = expanserEntite($m2[5], $dtc->macros);
396 396
 			$dtc->attributs[$nom][$m21] = [$v, $m25];
Please login to merge, or discard this patch.
Indentation   +335 added lines, -335 removed lines patch added patch discarded remove patch
@@ -11,58 +11,58 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('xml/interfaces');
18 18
 
19 19
 function charger_dtd($grammaire, $avail, $rotlvl) {
20
-	$r = null;
21
-	static $dtd = []; # cache bien utile pour le validateur en boucle
22
-
23
-	if (isset($dtd[$grammaire])) {
24
-		return $dtd[$grammaire];
25
-	}
26
-
27
-	if ($avail == 'SYSTEM') {
28
-		$grammaire = find_in_path($grammaire);
29
-	}
30
-
31
-	$file = _DIR_CACHE_XML . preg_replace('/[^\w.]/', '_', $rotlvl) . '.gz';
32
-
33
-	if (lire_fichier($file, $r)) {
34
-		if (!$grammaire) {
35
-			return [];
36
-		}
37
-		if (($avail == 'SYSTEM') and filemtime($file) < filemtime($grammaire)) {
38
-			$r = false;
39
-		}
40
-	}
41
-
42
-	if ($r) {
43
-		$dtc = unserialize($r);
44
-	} else {
45
-		spip_timer('dtd');
46
-		$dtc = new DTC();
47
-		// L'analyseur retourne un booleen de reussite et modifie $dtc.
48
-		// Retourner vide en cas d'echec
49
-		if (!analyser_dtd($grammaire, $avail, $dtc)) {
50
-			$dtc = [];
51
-		} else {
52
-			// tri final pour presenter les suggestions de corrections
53
-			foreach ($dtc->peres as $k => $v) {
54
-				asort($v);
55
-				$dtc->peres[$k] = $v;
56
-			}
57
-
58
-			spip_log("Analyser DTD $avail $grammaire (" . spip_timer('dtd') . ') ' . (is_countable($dtc->macros) ? count($dtc->macros) : 0) . ' macros, ' . (is_countable($dtc->elements) ? count($dtc->elements) : 0) . ' elements, ' . (is_countable($dtc->attributs) ? count($dtc->attributs) : 0) . " listes d'attributs, " . (is_countable($dtc->entites) ? count($dtc->entites) : 0) . ' entites');
59
-			#	$r = $dtc->regles; ksort($r);foreach($r as $l => $v) {$t=array_keys($dtc->attributs[$l]);echo "<b>$l</b> '$v' ", count($t), " attributs: ", join (', ',$t);$t=$dtc->peres[$l];echo "<br />",count($t), " peres: ", @join (', ',$t), "<br />\n";}exit;
60
-			ecrire_fichier($file, serialize($dtc), true);
61
-		}
62
-	}
63
-	$dtd[$grammaire] = $dtc;
64
-
65
-	return $dtc;
20
+    $r = null;
21
+    static $dtd = []; # cache bien utile pour le validateur en boucle
22
+
23
+    if (isset($dtd[$grammaire])) {
24
+        return $dtd[$grammaire];
25
+    }
26
+
27
+    if ($avail == 'SYSTEM') {
28
+        $grammaire = find_in_path($grammaire);
29
+    }
30
+
31
+    $file = _DIR_CACHE_XML . preg_replace('/[^\w.]/', '_', $rotlvl) . '.gz';
32
+
33
+    if (lire_fichier($file, $r)) {
34
+        if (!$grammaire) {
35
+            return [];
36
+        }
37
+        if (($avail == 'SYSTEM') and filemtime($file) < filemtime($grammaire)) {
38
+            $r = false;
39
+        }
40
+    }
41
+
42
+    if ($r) {
43
+        $dtc = unserialize($r);
44
+    } else {
45
+        spip_timer('dtd');
46
+        $dtc = new DTC();
47
+        // L'analyseur retourne un booleen de reussite et modifie $dtc.
48
+        // Retourner vide en cas d'echec
49
+        if (!analyser_dtd($grammaire, $avail, $dtc)) {
50
+            $dtc = [];
51
+        } else {
52
+            // tri final pour presenter les suggestions de corrections
53
+            foreach ($dtc->peres as $k => $v) {
54
+                asort($v);
55
+                $dtc->peres[$k] = $v;
56
+            }
57
+
58
+            spip_log("Analyser DTD $avail $grammaire (" . spip_timer('dtd') . ') ' . (is_countable($dtc->macros) ? count($dtc->macros) : 0) . ' macros, ' . (is_countable($dtc->elements) ? count($dtc->elements) : 0) . ' elements, ' . (is_countable($dtc->attributs) ? count($dtc->attributs) : 0) . " listes d'attributs, " . (is_countable($dtc->entites) ? count($dtc->entites) : 0) . ' entites');
59
+            #	$r = $dtc->regles; ksort($r);foreach($r as $l => $v) {$t=array_keys($dtc->attributs[$l]);echo "<b>$l</b> '$v' ", count($t), " attributs: ", join (', ',$t);$t=$dtc->peres[$l];echo "<br />",count($t), " peres: ", @join (', ',$t), "<br />\n";}exit;
60
+            ecrire_fichier($file, serialize($dtc), true);
61
+        }
62
+    }
63
+    $dtd[$grammaire] = $dtc;
64
+
65
+    return $dtc;
66 66
 }
67 67
 
68 68
 // Compiler une regle de production en une Regexp qu'on appliquera sur la
@@ -74,153 +74,153 @@  discard block
 block discarded – undo
74 74
 // et parentheser le tout pour que  | + * ? s'applique dessus.
75 75
 
76 76
 function compilerRegle($val) {
77
-	$x = str_replace(
78
-		'()',
79
-		'',
80
-		preg_replace(
81
-			'/\s*,\s*/',
82
-			'',
83
-			preg_replace(
84
-				'/(\w+)\s*/',
85
-				'(?:\1 )',
86
-				preg_replace(
87
-					'/\s*\)/',
88
-					')',
89
-					preg_replace(
90
-						'/\s*([(+*|?])\s*/',
91
-						'\1',
92
-						preg_replace('/\s*#\w+\s*[,|]?\s*/', '', $val)
93
-					)
94
-				)
95
-			)
96
-		)
97
-	);
98
-
99
-	return $x;
77
+    $x = str_replace(
78
+        '()',
79
+        '',
80
+        preg_replace(
81
+            '/\s*,\s*/',
82
+            '',
83
+            preg_replace(
84
+                '/(\w+)\s*/',
85
+                '(?:\1 )',
86
+                preg_replace(
87
+                    '/\s*\)/',
88
+                    ')',
89
+                    preg_replace(
90
+                        '/\s*([(+*|?])\s*/',
91
+                        '\1',
92
+                        preg_replace('/\s*#\w+\s*[,|]?\s*/', '', $val)
93
+                    )
94
+                )
95
+            )
96
+        )
97
+    );
98
+
99
+    return $x;
100 100
 }
101 101
 
102 102
 
103 103
 function analyser_dtd($loc, $avail, &$dtc) {
104
-	// creer le repertoire de cache si ce n'est fait
105
-	// (utile aussi pour le resultat de la compil)
106
-	$file = sous_repertoire(_DIR_CACHE_XML);
107
-	// si DTD locale, ignorer ce repertoire pour le moment
108
-	if ($avail == 'SYSTEM') {
109
-		$file = $loc;
110
-		if (_DIR_RACINE and strncmp($file, _DIR_RACINE, strlen(_DIR_RACINE)) == 0) {
111
-			$file = substr($file, strlen(_DIR_RACINE));
112
-		}
113
-		$file = find_in_path($file);
114
-	} else {
115
-		$file .= preg_replace('/[^\w.]/', '_', $loc);
116
-	}
117
-
118
-	$dtd = '';
119
-	if (@is_readable($file)) {
120
-		lire_fichier($file, $dtd);
121
-	} else {
122
-		if ($avail == 'PUBLIC') {
123
-			include_spip('inc/distant');
124
-			$dtd = recuperer_url($loc);
125
-			$dtd = trim($dtd['page'] ?? '');
126
-			if ($dtd) {
127
-				ecrire_fichier($file, $dtd, true);
128
-			}
129
-		}
130
-	}
131
-
132
-	$dtd = ltrim($dtd);
133
-	if (!$dtd) {
134
-		spip_log("DTD '$loc' ($file) inaccessible");
135
-
136
-		return false;
137
-	} else {
138
-		spip_log("analyse de la DTD $loc ");
139
-	}
140
-
141
-	while ($dtd) {
142
-		if ($dtd[0] != '<') {
143
-			$r = analyser_dtd_lexeme($dtd, $dtc, $loc);
144
-		} elseif ($dtd[1] != '!') {
145
-			$r = analyser_dtd_pi($dtd, $dtc, $loc);
146
-		} elseif ($dtd[2] == '[') {
147
-			$r = analyser_dtd_data($dtd, $dtc, $loc);
148
-		} else {
149
-			switch ($dtd[3]) {
150
-				case '%':
151
-					$r = analyser_dtd_data($dtd, $dtc, $loc);
152
-					break;
153
-				case 'T':
154
-					$r = analyser_dtd_attlist($dtd, $dtc, $loc);
155
-					break;
156
-				case 'L':
157
-					$r = analyser_dtd_element($dtd, $dtc, $loc);
158
-					break;
159
-				case 'N':
160
-					$r = analyser_dtd_entity($dtd, $dtc, $loc);
161
-					break;
162
-				case 'O':
163
-					$r = analyser_dtd_notation($dtd, $dtc, $loc);
164
-					break;
165
-				case '-':
166
-					$r = analyser_dtd_comment($dtd, $dtc, $loc);
167
-					break;
168
-				default:
169
-					$r = -1;
170
-			}
171
-		}
172
-		if (!is_string($r)) {
173
-			spip_log("erreur $r dans la DTD  " . substr($dtd, 0, 80) . '.....');
174
-
175
-			return false;
176
-		}
177
-		$dtd = $r;
178
-	}
179
-
180
-	return true;
104
+    // creer le repertoire de cache si ce n'est fait
105
+    // (utile aussi pour le resultat de la compil)
106
+    $file = sous_repertoire(_DIR_CACHE_XML);
107
+    // si DTD locale, ignorer ce repertoire pour le moment
108
+    if ($avail == 'SYSTEM') {
109
+        $file = $loc;
110
+        if (_DIR_RACINE and strncmp($file, _DIR_RACINE, strlen(_DIR_RACINE)) == 0) {
111
+            $file = substr($file, strlen(_DIR_RACINE));
112
+        }
113
+        $file = find_in_path($file);
114
+    } else {
115
+        $file .= preg_replace('/[^\w.]/', '_', $loc);
116
+    }
117
+
118
+    $dtd = '';
119
+    if (@is_readable($file)) {
120
+        lire_fichier($file, $dtd);
121
+    } else {
122
+        if ($avail == 'PUBLIC') {
123
+            include_spip('inc/distant');
124
+            $dtd = recuperer_url($loc);
125
+            $dtd = trim($dtd['page'] ?? '');
126
+            if ($dtd) {
127
+                ecrire_fichier($file, $dtd, true);
128
+            }
129
+        }
130
+    }
131
+
132
+    $dtd = ltrim($dtd);
133
+    if (!$dtd) {
134
+        spip_log("DTD '$loc' ($file) inaccessible");
135
+
136
+        return false;
137
+    } else {
138
+        spip_log("analyse de la DTD $loc ");
139
+    }
140
+
141
+    while ($dtd) {
142
+        if ($dtd[0] != '<') {
143
+            $r = analyser_dtd_lexeme($dtd, $dtc, $loc);
144
+        } elseif ($dtd[1] != '!') {
145
+            $r = analyser_dtd_pi($dtd, $dtc, $loc);
146
+        } elseif ($dtd[2] == '[') {
147
+            $r = analyser_dtd_data($dtd, $dtc, $loc);
148
+        } else {
149
+            switch ($dtd[3]) {
150
+                case '%':
151
+                    $r = analyser_dtd_data($dtd, $dtc, $loc);
152
+                    break;
153
+                case 'T':
154
+                    $r = analyser_dtd_attlist($dtd, $dtc, $loc);
155
+                    break;
156
+                case 'L':
157
+                    $r = analyser_dtd_element($dtd, $dtc, $loc);
158
+                    break;
159
+                case 'N':
160
+                    $r = analyser_dtd_entity($dtd, $dtc, $loc);
161
+                    break;
162
+                case 'O':
163
+                    $r = analyser_dtd_notation($dtd, $dtc, $loc);
164
+                    break;
165
+                case '-':
166
+                    $r = analyser_dtd_comment($dtd, $dtc, $loc);
167
+                    break;
168
+                default:
169
+                    $r = -1;
170
+            }
171
+        }
172
+        if (!is_string($r)) {
173
+            spip_log("erreur $r dans la DTD  " . substr($dtd, 0, 80) . '.....');
174
+
175
+            return false;
176
+        }
177
+        $dtd = $r;
178
+    }
179
+
180
+    return true;
181 181
 }
182 182
 
183 183
 function analyser_dtd_comment($dtd, &$dtc, $grammaire) {
184
-	// ejecter les commentaires, surtout quand ils contiennent du code.
185
-	// Option /s car sur plusieurs lignes parfois
184
+    // ejecter les commentaires, surtout quand ils contiennent du code.
185
+    // Option /s car sur plusieurs lignes parfois
186 186
 
187
-	if (!preg_match('/^<!--.*?-->\s*(.*)$/s', $dtd, $m)) {
188
-		return -6;
189
-	}
187
+    if (!preg_match('/^<!--.*?-->\s*(.*)$/s', $dtd, $m)) {
188
+        return -6;
189
+    }
190 190
 
191
-	return $m[1];
191
+    return $m[1];
192 192
 }
193 193
 
194 194
 function analyser_dtd_pi($dtd, &$dtc, $grammaire) {
195
-	if (!preg_match('/^<\?.*?>\s*(.*)$/s', $dtd, $m)) {
196
-		return -10;
197
-	}
195
+    if (!preg_match('/^<\?.*?>\s*(.*)$/s', $dtd, $m)) {
196
+        return -10;
197
+    }
198 198
 
199
-	return $m[1];
199
+    return $m[1];
200 200
 }
201 201
 
202 202
 function analyser_dtd_lexeme($dtd, &$dtc, $grammaire) {
203 203
 
204
-	if (!preg_match(_REGEXP_ENTITY_DEF, $dtd, $m)) {
205
-		return -9;
206
-	}
207
-
208
-	[, $s] = $m;
209
-	$n = $dtc->macros[$s];
210
-
211
-	if (is_array($n)) {
212
-		// en cas d'inclusion, l'espace de nom est le meme
213
-		// mais gaffe aux DTD dont l'URL est relative a l'engloblante
214
-		if (
215
-			($n[0] == 'PUBLIC')
216
-			and !tester_url_absolue($n[1])
217
-		) {
218
-			$n[1] = substr($grammaire, 0, strrpos($grammaire, '/') + 1) . $n[1];
219
-		}
220
-		analyser_dtd($n[1], $n[0], $dtc);
221
-	}
222
-
223
-	return ltrim(substr($dtd, strlen($m[0])));
204
+    if (!preg_match(_REGEXP_ENTITY_DEF, $dtd, $m)) {
205
+        return -9;
206
+    }
207
+
208
+    [, $s] = $m;
209
+    $n = $dtc->macros[$s];
210
+
211
+    if (is_array($n)) {
212
+        // en cas d'inclusion, l'espace de nom est le meme
213
+        // mais gaffe aux DTD dont l'URL est relative a l'engloblante
214
+        if (
215
+            ($n[0] == 'PUBLIC')
216
+            and !tester_url_absolue($n[1])
217
+        ) {
218
+            $n[1] = substr($grammaire, 0, strrpos($grammaire, '/') + 1) . $n[1];
219
+        }
220
+        analyser_dtd($n[1], $n[0], $dtc);
221
+    }
222
+
223
+    return ltrim(substr($dtd, strlen($m[0])));
224 224
 }
225 225
 
226 226
 // il faudrait gerer plus proprement les niveaux d'inclusion:
@@ -228,83 +228,83 @@  discard block
 block discarded – undo
228 228
 
229 229
 function analyser_dtd_data($dtd, &$dtc, $grammaire) {
230 230
 
231
-	if (!preg_match(_REGEXP_INCLUDE_USE, $dtd, $m)) {
232
-		return -11;
233
-	}
234
-	if (
235
-		!preg_match(
236
-			'/^((\s*<!(\[\s*%\s*[^;]*;\s*\[([^]<]*<[^>]*>)*[^]<]*\]\]>)|([^]>]*>))*[^]<]*)\]\]>\s*/s',
237
-			$m[2],
238
-			$r
239
-		)
240
-	) {
241
-		return -12;
242
-	}
243
-
244
-	if ($dtc->macros[$m[1]] == 'INCLUDE') {
245
-		$retour = $r[1] . substr($m[2], strlen($r[0]));
246
-	} else {
247
-		$retour = substr($m[2], strlen($r[0]));
248
-	}
249
-
250
-	return $retour;
231
+    if (!preg_match(_REGEXP_INCLUDE_USE, $dtd, $m)) {
232
+        return -11;
233
+    }
234
+    if (
235
+        !preg_match(
236
+            '/^((\s*<!(\[\s*%\s*[^;]*;\s*\[([^]<]*<[^>]*>)*[^]<]*\]\]>)|([^]>]*>))*[^]<]*)\]\]>\s*/s',
237
+            $m[2],
238
+            $r
239
+        )
240
+    ) {
241
+        return -12;
242
+    }
243
+
244
+    if ($dtc->macros[$m[1]] == 'INCLUDE') {
245
+        $retour = $r[1] . substr($m[2], strlen($r[0]));
246
+    } else {
247
+        $retour = substr($m[2], strlen($r[0]));
248
+    }
249
+
250
+    return $retour;
251 251
 }
252 252
 
253 253
 function analyser_dtd_notation($dtd, &$dtc, $grammaire) {
254
-	if (!preg_match('/^<!NOTATION.*?>\s*(.*)$/s', $dtd, $m)) {
255
-		return -8;
256
-	}
257
-	spip_log('analyser_dtd_notation a ecrire');
254
+    if (!preg_match('/^<!NOTATION.*?>\s*(.*)$/s', $dtd, $m)) {
255
+        return -8;
256
+    }
257
+    spip_log('analyser_dtd_notation a ecrire');
258 258
 
259
-	return $m[1];
259
+    return $m[1];
260 260
 }
261 261
 
262 262
 function analyser_dtd_entity($dtd, &$dtc, $grammaire) {
263
-	if (!preg_match(_REGEXP_ENTITY_DECL, $dtd, $m)) {
264
-		return -2;
265
-	}
266
-
267
-	[$t, $term, $nom, $type, $k1, $k2, $k3, $k4, $k5, $k6, $c, $q, $alt, $dtd] = $m;
268
-
269
-	if (isset($dtc->macros[$nom]) and $dtc->macros[$nom]) {
270
-		return $dtd;
271
-	}
272
-	if (isset($dtc->entites[$nom])) {
273
-		spip_log("redefinition de l'entite $nom");
274
-	}
275
-	if ($k6) {
276
-		return $k6 . $dtd;
277
-	} // cas du synonyme complet
278
-	$val = expanserEntite(($k2 ? $k3 : ($k4 ? $k5 : $k6)), $dtc->macros);
279
-
280
-	// cas particulier double evaluation: 'PUBLIC "..." "...."'
281
-	if (preg_match('/(PUBLIC|SYSTEM)\s+"([^"]*)"\s*("([^"]*)")?\s*$/s', $val, $r)) {
282
-		[$t, $type, $val, $q, $alt] = $r;
283
-	}
284
-
285
-	if (!$term) {
286
-		$dtc->entites[$nom] = $val;
287
-	} elseif (!$type) {
288
-		$dtc->macros[$nom] = $val;
289
-	} else {
290
-		if (($type == 'SYSTEM') and !$alt) {
291
-			$alt = $val;
292
-		}
293
-		if (!$alt) {
294
-			$dtc->macros[$nom] = $val;
295
-		} else {
296
-			if (
297
-				($type == 'PUBLIC')
298
-				and (strpos($alt, '/') === false)
299
-			) {
300
-				$alt = preg_replace(',/[^/]+$,', '/', $grammaire)
301
-					. $alt;
302
-			}
303
-			$dtc->macros[$nom] = [$type, $alt];
304
-		}
305
-	}
306
-
307
-	return $dtd;
263
+    if (!preg_match(_REGEXP_ENTITY_DECL, $dtd, $m)) {
264
+        return -2;
265
+    }
266
+
267
+    [$t, $term, $nom, $type, $k1, $k2, $k3, $k4, $k5, $k6, $c, $q, $alt, $dtd] = $m;
268
+
269
+    if (isset($dtc->macros[$nom]) and $dtc->macros[$nom]) {
270
+        return $dtd;
271
+    }
272
+    if (isset($dtc->entites[$nom])) {
273
+        spip_log("redefinition de l'entite $nom");
274
+    }
275
+    if ($k6) {
276
+        return $k6 . $dtd;
277
+    } // cas du synonyme complet
278
+    $val = expanserEntite(($k2 ? $k3 : ($k4 ? $k5 : $k6)), $dtc->macros);
279
+
280
+    // cas particulier double evaluation: 'PUBLIC "..." "...."'
281
+    if (preg_match('/(PUBLIC|SYSTEM)\s+"([^"]*)"\s*("([^"]*)")?\s*$/s', $val, $r)) {
282
+        [$t, $type, $val, $q, $alt] = $r;
283
+    }
284
+
285
+    if (!$term) {
286
+        $dtc->entites[$nom] = $val;
287
+    } elseif (!$type) {
288
+        $dtc->macros[$nom] = $val;
289
+    } else {
290
+        if (($type == 'SYSTEM') and !$alt) {
291
+            $alt = $val;
292
+        }
293
+        if (!$alt) {
294
+            $dtc->macros[$nom] = $val;
295
+        } else {
296
+            if (
297
+                ($type == 'PUBLIC')
298
+                and (strpos($alt, '/') === false)
299
+            ) {
300
+                $alt = preg_replace(',/[^/]+$,', '/', $grammaire)
301
+                    . $alt;
302
+            }
303
+            $dtc->macros[$nom] = [$type, $alt];
304
+        }
305
+    }
306
+
307
+    return $dtd;
308 308
 }
309 309
 
310 310
 // Dresser le tableau des filles potentielles de l'element
@@ -317,76 +317,76 @@  discard block
 block discarded – undo
317 317
 // Fin du controle en finElement
318 318
 
319 319
 function analyser_dtd_element($dtd, &$dtc, $grammaire) {
320
-	if (!preg_match('/^<!ELEMENT\s+([^>\s]+)([^>]*)>\s*(.*)$/s', $dtd, $m)) {
321
-		return -3;
322
-	}
323
-
324
-	[, $nom, $contenu, $dtd] = $m;
325
-	$nom = expanserEntite($nom, $dtc->macros);
326
-
327
-	if (isset($dtc->elements[$nom])) {
328
-		spip_log("redefinition de l'element $nom dans la DTD");
329
-
330
-		return -4;
331
-	}
332
-	$filles = [];
333
-	$contenu = expanserEntite($contenu, $dtc->macros);
334
-	$val = $contenu ? compilerRegle($contenu) : '(?:EMPTY )';
335
-	if ($val == '(?:EMPTY )') {
336
-		$dtc->regles[$nom] = 'EMPTY';
337
-	} elseif ($val == '(?:ANY )') {
338
-		$dtc->regles[$nom] = 'ANY';
339
-	} else {
340
-		$last = substr($val, -1);
341
-		if (
342
-			preg_match('/ \w/', $val)
343
-			or (!empty($last) and strpos('*+?', $last) === false)
344
-		) {
345
-			$dtc->regles[$nom] = "/^$val$/";
346
-		} else {
347
-			$dtc->regles[$nom] = $last;
348
-		}
349
-		$filles = array_values(preg_split('/\W+/', $val, -1, PREG_SPLIT_NO_EMPTY));
350
-
351
-		foreach ($filles as $k) {
352
-			if (!isset($dtc->peres[$k])) {
353
-				$dtc->peres[$k] = [];
354
-			}
355
-			if (!in_array($nom, $dtc->peres[$k])) {
356
-				$dtc->peres[$k][] = $nom;
357
-			}
358
-		}
359
-	}
360
-	$dtc->pcdata[$nom] = (strpos($contenu, '#PCDATA') === false);
361
-	$dtc->elements[$nom] = $filles;
362
-
363
-	return $dtd;
320
+    if (!preg_match('/^<!ELEMENT\s+([^>\s]+)([^>]*)>\s*(.*)$/s', $dtd, $m)) {
321
+        return -3;
322
+    }
323
+
324
+    [, $nom, $contenu, $dtd] = $m;
325
+    $nom = expanserEntite($nom, $dtc->macros);
326
+
327
+    if (isset($dtc->elements[$nom])) {
328
+        spip_log("redefinition de l'element $nom dans la DTD");
329
+
330
+        return -4;
331
+    }
332
+    $filles = [];
333
+    $contenu = expanserEntite($contenu, $dtc->macros);
334
+    $val = $contenu ? compilerRegle($contenu) : '(?:EMPTY )';
335
+    if ($val == '(?:EMPTY )') {
336
+        $dtc->regles[$nom] = 'EMPTY';
337
+    } elseif ($val == '(?:ANY )') {
338
+        $dtc->regles[$nom] = 'ANY';
339
+    } else {
340
+        $last = substr($val, -1);
341
+        if (
342
+            preg_match('/ \w/', $val)
343
+            or (!empty($last) and strpos('*+?', $last) === false)
344
+        ) {
345
+            $dtc->regles[$nom] = "/^$val$/";
346
+        } else {
347
+            $dtc->regles[$nom] = $last;
348
+        }
349
+        $filles = array_values(preg_split('/\W+/', $val, -1, PREG_SPLIT_NO_EMPTY));
350
+
351
+        foreach ($filles as $k) {
352
+            if (!isset($dtc->peres[$k])) {
353
+                $dtc->peres[$k] = [];
354
+            }
355
+            if (!in_array($nom, $dtc->peres[$k])) {
356
+                $dtc->peres[$k][] = $nom;
357
+            }
358
+        }
359
+    }
360
+    $dtc->pcdata[$nom] = (strpos($contenu, '#PCDATA') === false);
361
+    $dtc->elements[$nom] = $filles;
362
+
363
+    return $dtd;
364 364
 }
365 365
 
366 366
 
367 367
 function analyser_dtd_attlist($dtd, &$dtc, $grammaire) {
368
-	if (!preg_match('/^<!ATTLIST\s+(\S+)\s+([^>]*)>\s*(.*)/s', $dtd, $m)) {
369
-		return -5;
370
-	}
371
-
372
-	[, $nom, $val, $dtd] = $m;
373
-	$nom = expanserEntite($nom, $dtc->macros);
374
-	$val = expanserEntite($val, $dtc->macros);
375
-	if (!isset($dtc->attributs[$nom])) {
376
-		$dtc->attributs[$nom] = [];
377
-	}
378
-
379
-	if (preg_match_all("/\s*(\S+)\s+(([(][^)]*[)])|(\S+))\s+([^\s']*)(\s*'[^']*')?/", $val, $r2, PREG_SET_ORDER)) {
380
-		foreach ($r2 as $m2) {
381
-			$v = preg_match('/^\w+$/', $m2[2]) ? $m2[2]
382
-				: ('/^' . preg_replace('/\s+/', '', $m2[2]) . '$/');
383
-			$m21 = expanserEntite($m2[1], $dtc->macros);
384
-			$m25 = expanserEntite($m2[5], $dtc->macros);
385
-			$dtc->attributs[$nom][$m21] = [$v, $m25];
386
-		}
387
-	}
388
-
389
-	return $dtd;
368
+    if (!preg_match('/^<!ATTLIST\s+(\S+)\s+([^>]*)>\s*(.*)/s', $dtd, $m)) {
369
+        return -5;
370
+    }
371
+
372
+    [, $nom, $val, $dtd] = $m;
373
+    $nom = expanserEntite($nom, $dtc->macros);
374
+    $val = expanserEntite($val, $dtc->macros);
375
+    if (!isset($dtc->attributs[$nom])) {
376
+        $dtc->attributs[$nom] = [];
377
+    }
378
+
379
+    if (preg_match_all("/\s*(\S+)\s+(([(][^)]*[)])|(\S+))\s+([^\s']*)(\s*'[^']*')?/", $val, $r2, PREG_SET_ORDER)) {
380
+        foreach ($r2 as $m2) {
381
+            $v = preg_match('/^\w+$/', $m2[2]) ? $m2[2]
382
+                : ('/^' . preg_replace('/\s+/', '', $m2[2]) . '$/');
383
+            $m21 = expanserEntite($m2[1], $dtc->macros);
384
+            $m25 = expanserEntite($m2[5], $dtc->macros);
385
+            $dtc->attributs[$nom][$m21] = [$v, $m25];
386
+        }
387
+    }
388
+
389
+    return $dtd;
390 390
 }
391 391
 
392 392
 
@@ -402,26 +402,26 @@  discard block
 block discarded – undo
402 402
  * @return string|array
403 403
  **/
404 404
 function expanserEntite($val, $macros = []) {
405
-	static $vu = [];
406
-	if (!is_string($val)) {
407
-		return $vu;
408
-	}
409
-
410
-	if (preg_match_all(_REGEXP_ENTITY_USE, $val, $r, PREG_SET_ORDER)) {
411
-		foreach ($r as $m) {
412
-			$ent = $m[1];
413
-			// il peut valoir ""
414
-			if (!isset($macros[$ent])) {
415
-				spip_log("Entite $ent inconnu");
416
-			} else {
417
-				if (!isset($vu[$ent])) {
418
-					$vu[$ent] = 0;
419
-				}
420
-				++$vu[$ent];
421
-				$val = str_replace($m[0], $macros[$ent], $val);
422
-			}
423
-		}
424
-	}
425
-
426
-	return trim(preg_replace('/\s+/', ' ', $val));
405
+    static $vu = [];
406
+    if (!is_string($val)) {
407
+        return $vu;
408
+    }
409
+
410
+    if (preg_match_all(_REGEXP_ENTITY_USE, $val, $r, PREG_SET_ORDER)) {
411
+        foreach ($r as $m) {
412
+            $ent = $m[1];
413
+            // il peut valoir ""
414
+            if (!isset($macros[$ent])) {
415
+                spip_log("Entite $ent inconnu");
416
+            } else {
417
+                if (!isset($vu[$ent])) {
418
+                    $vu[$ent] = 0;
419
+                }
420
+                ++$vu[$ent];
421
+                $val = str_replace($m[0], $macros[$ent], $val);
422
+            }
423
+        }
424
+    }
425
+
426
+    return trim(preg_replace('/\s+/', ' ', $val));
427 427
 }
Please login to merge, or discard this patch.
prive/formulaires/instituer_objet.php 2 patches
Indentation   +108 added lines, -108 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('inc/editer');
@@ -32,17 +32,17 @@  discard block
 block discarded – undo
32 32
  * @return array
33 33
  */
34 34
 function lister_statuts_proposes($desc, $publiable = true) {
35
-	if (!isset($desc['statut_textes_instituer'])) {
36
-		return false;
37
-	}
35
+    if (!isset($desc['statut_textes_instituer'])) {
36
+        return false;
37
+    }
38 38
 
39
-	$l = $desc['statut_textes_instituer'];
40
-	if (!$publiable) {
41
-		unset($l['publie']);
42
-		unset($l['refuse']);
43
-	}
39
+    $l = $desc['statut_textes_instituer'];
40
+    if (!$publiable) {
41
+        unset($l['publie']);
42
+        unset($l['refuse']);
43
+    }
44 44
 
45
-	return $l;
45
+    return $l;
46 46
 }
47 47
 
48 48
 /**
@@ -64,54 +64,54 @@  discard block
 block discarded – undo
64 64
  *     Environnement du formulaire ou false si aucun affichage à faire.
65 65
  */
66 66
 function formulaires_instituer_objet_charger_dist($objet, $id_objet, $retour = '', $editable = true) {
67
-	$editable = ($editable ? true : false);
68
-
69
-	$table = table_objet_sql($objet);
70
-	$desc = lister_tables_objets_sql($table);
71
-
72
-	if (!isset($desc['statut_textes_instituer'])) {
73
-		return false;
74
-	}
75
-
76
-	if (!autoriser('modifier', $objet, $id_objet)) {
77
-		$editable = false;
78
-	}
79
-
80
-	// charger le contenu de l'objet
81
-	// dont son champ statut
82
-	$v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', '');
83
-
84
-	$publiable = true;
85
-	$statuts = lister_statuts_proposes($desc);
86
-	// tester si on a le droit de publier, si un statut publie existe
87
-	if (isset($statuts['publie'])) {
88
-		if (!autoriser('instituer', $objet, $id_objet, null, ['statut' => 'publie'])) {
89
-			if ($v['statut'] == 'publie') {
90
-				$editable = false;
91
-			} else {
92
-				$publiable = false;
93
-			}
94
-		}
95
-	}
96
-	$statuts = lister_statuts_proposes($desc, $editable ? $publiable : true);
97
-	if (count($statuts) == 1 and isset($statuts[$v['statut']])) {
98
-		$editable = false;
99
-	}
100
-
101
-	$valeurs = [
102
-		'editable' => $editable,
103
-		'statut' => $v['statut'],
104
-		'_objet' => $objet,
105
-		'_id_objet' => $id_objet,
106
-		'_statuts' => $statuts,
107
-		'_publiable' => $publiable,
108
-		'_label' => $desc['texte_changer_statut'] ?? 'texte_article_statut',
109
-		'_aide' => $desc['aide_changer_statut'] ?? '',
110
-		'_hidden' => "<input type='hidden' name='statut_old' value='" . $v['statut'] . "' />",
111
-	];
112
-
113
-	#if (!count($valeurs['statuts']))
114
-	return $valeurs;
67
+    $editable = ($editable ? true : false);
68
+
69
+    $table = table_objet_sql($objet);
70
+    $desc = lister_tables_objets_sql($table);
71
+
72
+    if (!isset($desc['statut_textes_instituer'])) {
73
+        return false;
74
+    }
75
+
76
+    if (!autoriser('modifier', $objet, $id_objet)) {
77
+        $editable = false;
78
+    }
79
+
80
+    // charger le contenu de l'objet
81
+    // dont son champ statut
82
+    $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', '');
83
+
84
+    $publiable = true;
85
+    $statuts = lister_statuts_proposes($desc);
86
+    // tester si on a le droit de publier, si un statut publie existe
87
+    if (isset($statuts['publie'])) {
88
+        if (!autoriser('instituer', $objet, $id_objet, null, ['statut' => 'publie'])) {
89
+            if ($v['statut'] == 'publie') {
90
+                $editable = false;
91
+            } else {
92
+                $publiable = false;
93
+            }
94
+        }
95
+    }
96
+    $statuts = lister_statuts_proposes($desc, $editable ? $publiable : true);
97
+    if (count($statuts) == 1 and isset($statuts[$v['statut']])) {
98
+        $editable = false;
99
+    }
100
+
101
+    $valeurs = [
102
+        'editable' => $editable,
103
+        'statut' => $v['statut'],
104
+        '_objet' => $objet,
105
+        '_id_objet' => $id_objet,
106
+        '_statuts' => $statuts,
107
+        '_publiable' => $publiable,
108
+        '_label' => $desc['texte_changer_statut'] ?? 'texte_article_statut',
109
+        '_aide' => $desc['aide_changer_statut'] ?? '',
110
+        '_hidden' => "<input type='hidden' name='statut_old' value='" . $v['statut'] . "' />",
111
+    ];
112
+
113
+    #if (!count($valeurs['statuts']))
114
+    return $valeurs;
115 115
 }
116 116
 
117 117
 /**
@@ -131,35 +131,35 @@  discard block
 block discarded – undo
131 131
  *     Tableau des erreurs
132 132
  */
133 133
 function formulaires_instituer_objet_verifier_dist($objet, $id_objet, $retour = '', $editable = true) {
134
-	$erreurs = [];
135
-	// charger le contenu de l'objet
136
-	// dont son champ statut
137
-	$v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', '');
138
-
139
-	if ($v['statut'] !== _request('statut_old')) {
140
-		$erreurs['statut'] = _T('instituer_erreur_statut_a_change');
141
-	} else {
142
-		$table = table_objet_sql($objet);
143
-		$desc = lister_tables_objets_sql($table);
144
-
145
-		$publiable = true;
146
-		if (
147
-			isset($v['id_rubrique'])
148
-			and !autoriser('publierdans', 'rubrique', $v['id_rubrique'])
149
-		) {
150
-			$publiable = false;
151
-		}
152
-		$l = lister_statuts_proposes($desc, $publiable);
153
-		$statut = _request('statut');
154
-		if (
155
-			!isset($l[$statut])
156
-			or !autoriser('instituer', $objet, $id_objet, '', ['statut' => $statut])
157
-		) {
158
-			$erreurs['statut'] = _T('instituer_erreur_statut_non_autorise');
159
-		}
160
-	}
161
-
162
-	return $erreurs;
134
+    $erreurs = [];
135
+    // charger le contenu de l'objet
136
+    // dont son champ statut
137
+    $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', '');
138
+
139
+    if ($v['statut'] !== _request('statut_old')) {
140
+        $erreurs['statut'] = _T('instituer_erreur_statut_a_change');
141
+    } else {
142
+        $table = table_objet_sql($objet);
143
+        $desc = lister_tables_objets_sql($table);
144
+
145
+        $publiable = true;
146
+        if (
147
+            isset($v['id_rubrique'])
148
+            and !autoriser('publierdans', 'rubrique', $v['id_rubrique'])
149
+        ) {
150
+            $publiable = false;
151
+        }
152
+        $l = lister_statuts_proposes($desc, $publiable);
153
+        $statut = _request('statut');
154
+        if (
155
+            !isset($l[$statut])
156
+            or !autoriser('instituer', $objet, $id_objet, '', ['statut' => $statut])
157
+        ) {
158
+            $erreurs['statut'] = _T('instituer_erreur_statut_non_autorise');
159
+        }
160
+    }
161
+
162
+    return $erreurs;
163 163
 }
164 164
 
165 165
 /**
@@ -178,25 +178,25 @@  discard block
 block discarded – undo
178 178
  */
179 179
 function formulaires_instituer_objet_traiter_dist($objet, $id_objet, $retour = '', $editable = true) {
180 180
 
181
-	$c = ['statut' => _request('statut')];
182
-	// si on a envoye une 'date_posterieure', l'enregistrer
183
-	// todo dans le HTML
184
-	if ($d = _request('date_posterieure')) {
185
-		$c['date'] = $d;
186
-	}
187
-
188
-
189
-	include_spip('action/editer_objet');
190
-	if ($err = objet_instituer($objet, $id_objet, $c)) {
191
-		$res = ['message_erreur' => $err];
192
-	} else {
193
-		$res = ['message_ok' => _T('info_modification_enregistree')];
194
-		if ($retour) {
195
-			$res['redirect'] = $retour;
196
-		}
197
-		set_request('statut');
198
-		set_request('date_posterieure');
199
-	}
200
-
201
-	return $res;
181
+    $c = ['statut' => _request('statut')];
182
+    // si on a envoye une 'date_posterieure', l'enregistrer
183
+    // todo dans le HTML
184
+    if ($d = _request('date_posterieure')) {
185
+        $c['date'] = $d;
186
+    }
187
+
188
+
189
+    include_spip('action/editer_objet');
190
+    if ($err = objet_instituer($objet, $id_objet, $c)) {
191
+        $res = ['message_erreur' => $err];
192
+    } else {
193
+        $res = ['message_ok' => _T('info_modification_enregistree')];
194
+        if ($retour) {
195
+            $res['redirect'] = $retour;
196
+        }
197
+        set_request('statut');
198
+        set_request('date_posterieure');
199
+    }
200
+
201
+    return $res;
202 202
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -107,7 +107,7 @@
 block discarded – undo
107 107
 		'_publiable' => $publiable,
108 108
 		'_label' => $desc['texte_changer_statut'] ?? 'texte_article_statut',
109 109
 		'_aide' => $desc['aide_changer_statut'] ?? '',
110
-		'_hidden' => "<input type='hidden' name='statut_old' value='" . $v['statut'] . "' />",
110
+		'_hidden' => "<input type='hidden' name='statut_old' value='".$v['statut']."' />",
111 111
 	];
112 112
 
113 113
 	#if (!count($valeurs['statuts']))
Please login to merge, or discard this patch.
prive/formulaires/dater.php 2 patches
Indentation   +266 added lines, -266 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -45,136 +45,136 @@  discard block
 block discarded – undo
45 45
  **/
46 46
 function formulaires_dater_charger_dist($objet, $id_objet, $retour = '', $options = []) {
47 47
 
48
-	$jour = null;
49
-	$mois = null;
50
-	$annee = null;
51
-	$heure = null;
52
-	$minute = null;
53
-	$objet = objet_type($objet);
54
-	if (!$objet or !intval($id_objet)) {
55
-		return false;
56
-	}
57
-
58
-	if (!is_array($options)) {
59
-		$options = unserialize($options);
60
-	}
61
-
62
-	$_id_objet = id_table_objet($objet);
63
-	$table = table_objet($objet);
64
-	$trouver_table = charger_fonction('trouver_table', 'base');
65
-	$desc = $trouver_table($table);
66
-
67
-	if (!$desc) {
68
-		return false;
69
-	}
70
-
71
-	$champ_date = $desc['date'] ?: 'date';
72
-	if (isset($options['champ_date']) and $options['champ_date']) {
73
-		$champ_date = $options['champ_date'];
74
-	}
75
-	if (!isset($desc['field'][$champ_date])) {
76
-		return false;
77
-	}
78
-
79
-	$valeurs = [
80
-		'objet' => $objet,
81
-		'id_objet' => $id_objet,
82
-		'id' => $id_objet,
83
-	];
84
-
85
-
86
-	$select = "$champ_date as date";
87
-	$champ_date_redac = 'date_redac';
88
-	if (isset($options['champ_date_redac']) and $options['champ_date_redac']) {
89
-		$champ_date_redac = $options['champ_date_redac'];
90
-	}
91
-	if (isset($desc['field'][$champ_date_redac])) {
92
-		$select .= ",$champ_date_redac as date_redac";
93
-	}
94
-	if (isset($desc['field']['statut'])) {
95
-		$select .= ',statut';
96
-	}
97
-
98
-
99
-	$row = sql_fetsel($select, $desc['table'], "$_id_objet=" . intval($id_objet));
100
-	$statut = $row['statut'] ?? 'publie'; // pas de statut => publie
101
-
102
-	$valeurs['editable'] = autoriser('dater', $objet, $id_objet, null, ['statut' => $statut]);
103
-
104
-	$possedeDateRedac = false;
105
-
106
-	if (
107
-		isset($row['date_redac']) and
108
-		$regs = recup_date($row['date_redac'], false)
109
-	) {
110
-		$annee_redac = $regs[0];
111
-		$mois_redac = $regs[1];
112
-		$jour_redac = $regs[2];
113
-		$heure_redac = $regs[3];
114
-		$minute_redac = $regs[4];
115
-		$possedeDateRedac = true;
116
-		// attention : les vrai dates de l'annee 1 sont stockee avec +9000 => 9001
117
-		// mais reviennent ici en annee 1 par recup_date
118
-		// on verifie donc que le intval($row['date_redac']) qui ressort l'annee
119
-		// est bien lui aussi <=1 : dans ce cas c'est une date sql 'nulle' ou presque, selon
120
-		// le gestionnnaire sql utilise (0001-01-01 pour PG par exemple)
121
-		if (intval($row['date_redac']) <= 1 and ($annee_redac <= 1) and ($mois_redac <= 1) and ($jour_redac <= 1)) {
122
-			$possedeDateRedac = false;
123
-		}
124
-	} else {
125
-		$annee_redac = $mois_redac = $jour_redac = $heure_redac = $minute_redac = 0;
126
-	}
127
-
128
-	if ($regs = recup_date($row['date'], false)) {
129
-		$annee = $regs[0];
130
-		$mois = $regs[1];
131
-		$jour = $regs[2];
132
-		$heure = $regs[3];
133
-		$minute = $regs[4];
134
-	}
135
-
136
-	// attention, si la variable s'appelle date ou date_redac, le compilo va
137
-	// la normaliser, ce qu'on ne veut pas ici.
138
-	$valeurs['afficher_date_redac'] = ($possedeDateRedac ? $row['date_redac'] : '');
139
-	$valeurs['date_redac_jour'] = dater_formater_saisie_jour($jour_redac, $mois_redac, $annee_redac);
140
-	$valeurs['date_redac_heure'] = "$heure_redac:$minute_redac";
141
-
142
-	$valeurs['afficher_date'] = $row['date'];
143
-	$valeurs['date_jour'] = dater_formater_saisie_jour($jour, $mois, $annee);
144
-	$valeurs['date_heure'] = "$heure:$minute";
145
-
146
-	$valeurs['sans_redac'] = !$possedeDateRedac;
147
-
148
-	if (isset($options['date_redac'])) {
149
-		$valeurs['_editer_date_anterieure'] = $options['date_redac'];
150
-	} else {
151
-		$valeurs['_editer_date_anterieure'] = ($objet == 'article' and ($GLOBALS['meta']['articles_redac'] != 'non' or $possedeDateRedac));
152
-	}
153
-	$valeurs['_label_date'] = (($statut == 'publie') ?
154
-		_T('texte_date_publication_objet') : _T('texte_date_creation_objet'));
155
-	if (isset($options['label_date']) and $options['label_date']) {
156
-		$valeurs['_label_date'] = $options['label_date'];
157
-	}
158
-	if (isset($options['label_date_redac']) and $options['label_date_redac']) {
159
-		$valeurs['_label_date_redac'] = $options['label_date_redac'];
160
-	}
161
-	if (isset($options['texte_sans_date_redac']) and $options['texte_sans_date_redac']) {
162
-		$valeurs['_texte_sans_date_redac'] = $options['texte_sans_date_redac'];
163
-	}
164
-	if (isset($options['class']) and $options['class']) {
165
-		$valeurs['_class'] = $options['class'];
166
-	}
167
-
168
-	$valeurs['_saisie_en_cours'] = (_request('_saisie_en_cours') !== null or _request('date_jour') !== null);
169
-
170
-	// cas ou l'on ne peut pas dater mais on peut modifier la date de redac anterieure
171
-	// https://core.spip.net/issues/3494
172
-	$valeurs['_editer_date'] = $valeurs['editable'];
173
-	if ($valeurs['_editer_date_anterieure'] and !$valeurs['editable']) {
174
-		$valeurs['editable'] = autoriser('modifier', $objet, $id_objet);
175
-	}
176
-
177
-	return $valeurs;
48
+    $jour = null;
49
+    $mois = null;
50
+    $annee = null;
51
+    $heure = null;
52
+    $minute = null;
53
+    $objet = objet_type($objet);
54
+    if (!$objet or !intval($id_objet)) {
55
+        return false;
56
+    }
57
+
58
+    if (!is_array($options)) {
59
+        $options = unserialize($options);
60
+    }
61
+
62
+    $_id_objet = id_table_objet($objet);
63
+    $table = table_objet($objet);
64
+    $trouver_table = charger_fonction('trouver_table', 'base');
65
+    $desc = $trouver_table($table);
66
+
67
+    if (!$desc) {
68
+        return false;
69
+    }
70
+
71
+    $champ_date = $desc['date'] ?: 'date';
72
+    if (isset($options['champ_date']) and $options['champ_date']) {
73
+        $champ_date = $options['champ_date'];
74
+    }
75
+    if (!isset($desc['field'][$champ_date])) {
76
+        return false;
77
+    }
78
+
79
+    $valeurs = [
80
+        'objet' => $objet,
81
+        'id_objet' => $id_objet,
82
+        'id' => $id_objet,
83
+    ];
84
+
85
+
86
+    $select = "$champ_date as date";
87
+    $champ_date_redac = 'date_redac';
88
+    if (isset($options['champ_date_redac']) and $options['champ_date_redac']) {
89
+        $champ_date_redac = $options['champ_date_redac'];
90
+    }
91
+    if (isset($desc['field'][$champ_date_redac])) {
92
+        $select .= ",$champ_date_redac as date_redac";
93
+    }
94
+    if (isset($desc['field']['statut'])) {
95
+        $select .= ',statut';
96
+    }
97
+
98
+
99
+    $row = sql_fetsel($select, $desc['table'], "$_id_objet=" . intval($id_objet));
100
+    $statut = $row['statut'] ?? 'publie'; // pas de statut => publie
101
+
102
+    $valeurs['editable'] = autoriser('dater', $objet, $id_objet, null, ['statut' => $statut]);
103
+
104
+    $possedeDateRedac = false;
105
+
106
+    if (
107
+        isset($row['date_redac']) and
108
+        $regs = recup_date($row['date_redac'], false)
109
+    ) {
110
+        $annee_redac = $regs[0];
111
+        $mois_redac = $regs[1];
112
+        $jour_redac = $regs[2];
113
+        $heure_redac = $regs[3];
114
+        $minute_redac = $regs[4];
115
+        $possedeDateRedac = true;
116
+        // attention : les vrai dates de l'annee 1 sont stockee avec +9000 => 9001
117
+        // mais reviennent ici en annee 1 par recup_date
118
+        // on verifie donc que le intval($row['date_redac']) qui ressort l'annee
119
+        // est bien lui aussi <=1 : dans ce cas c'est une date sql 'nulle' ou presque, selon
120
+        // le gestionnnaire sql utilise (0001-01-01 pour PG par exemple)
121
+        if (intval($row['date_redac']) <= 1 and ($annee_redac <= 1) and ($mois_redac <= 1) and ($jour_redac <= 1)) {
122
+            $possedeDateRedac = false;
123
+        }
124
+    } else {
125
+        $annee_redac = $mois_redac = $jour_redac = $heure_redac = $minute_redac = 0;
126
+    }
127
+
128
+    if ($regs = recup_date($row['date'], false)) {
129
+        $annee = $regs[0];
130
+        $mois = $regs[1];
131
+        $jour = $regs[2];
132
+        $heure = $regs[3];
133
+        $minute = $regs[4];
134
+    }
135
+
136
+    // attention, si la variable s'appelle date ou date_redac, le compilo va
137
+    // la normaliser, ce qu'on ne veut pas ici.
138
+    $valeurs['afficher_date_redac'] = ($possedeDateRedac ? $row['date_redac'] : '');
139
+    $valeurs['date_redac_jour'] = dater_formater_saisie_jour($jour_redac, $mois_redac, $annee_redac);
140
+    $valeurs['date_redac_heure'] = "$heure_redac:$minute_redac";
141
+
142
+    $valeurs['afficher_date'] = $row['date'];
143
+    $valeurs['date_jour'] = dater_formater_saisie_jour($jour, $mois, $annee);
144
+    $valeurs['date_heure'] = "$heure:$minute";
145
+
146
+    $valeurs['sans_redac'] = !$possedeDateRedac;
147
+
148
+    if (isset($options['date_redac'])) {
149
+        $valeurs['_editer_date_anterieure'] = $options['date_redac'];
150
+    } else {
151
+        $valeurs['_editer_date_anterieure'] = ($objet == 'article' and ($GLOBALS['meta']['articles_redac'] != 'non' or $possedeDateRedac));
152
+    }
153
+    $valeurs['_label_date'] = (($statut == 'publie') ?
154
+        _T('texte_date_publication_objet') : _T('texte_date_creation_objet'));
155
+    if (isset($options['label_date']) and $options['label_date']) {
156
+        $valeurs['_label_date'] = $options['label_date'];
157
+    }
158
+    if (isset($options['label_date_redac']) and $options['label_date_redac']) {
159
+        $valeurs['_label_date_redac'] = $options['label_date_redac'];
160
+    }
161
+    if (isset($options['texte_sans_date_redac']) and $options['texte_sans_date_redac']) {
162
+        $valeurs['_texte_sans_date_redac'] = $options['texte_sans_date_redac'];
163
+    }
164
+    if (isset($options['class']) and $options['class']) {
165
+        $valeurs['_class'] = $options['class'];
166
+    }
167
+
168
+    $valeurs['_saisie_en_cours'] = (_request('_saisie_en_cours') !== null or _request('date_jour') !== null);
169
+
170
+    // cas ou l'on ne peut pas dater mais on peut modifier la date de redac anterieure
171
+    // https://core.spip.net/issues/3494
172
+    $valeurs['_editer_date'] = $valeurs['editable'];
173
+    if ($valeurs['_editer_date_anterieure'] and !$valeurs['editable']) {
174
+        $valeurs['editable'] = autoriser('modifier', $objet, $id_objet);
175
+    }
176
+
177
+    return $valeurs;
178 178
 }
179 179
 
180 180
 /**
@@ -192,20 +192,20 @@  discard block
 block discarded – undo
192 192
  *     Date formatée tel que `02/10/2012`
193 193
  **/
194 194
 function dater_formater_saisie_jour($jour, $mois, $annee, $sep = '/') {
195
-	$annee = str_pad($annee, 4, '0', STR_PAD_LEFT);
196
-	if (intval($jour)) {
197
-		$jour = str_pad($jour, 2, '0', STR_PAD_LEFT);
198
-		$mois = str_pad($mois, 2, '0', STR_PAD_LEFT);
195
+    $annee = str_pad($annee, 4, '0', STR_PAD_LEFT);
196
+    if (intval($jour)) {
197
+        $jour = str_pad($jour, 2, '0', STR_PAD_LEFT);
198
+        $mois = str_pad($mois, 2, '0', STR_PAD_LEFT);
199 199
 
200
-		return "$jour$sep$mois$sep$annee";
201
-	}
202
-	if (intval($mois)) {
203
-		$mois = str_pad($mois, 2, '0', STR_PAD_LEFT);
200
+        return "$jour$sep$mois$sep$annee";
201
+    }
202
+    if (intval($mois)) {
203
+        $mois = str_pad($mois, 2, '0', STR_PAD_LEFT);
204 204
 
205
-		return "$mois$sep$annee";
206
-	}
205
+        return "$mois$sep$annee";
206
+    }
207 207
 
208
-	return $annee;
208
+    return $annee;
209 209
 }
210 210
 
211 211
 /**
@@ -224,7 +224,7 @@  discard block
 block discarded – undo
224 224
  *     Hash du formulaire
225 225
  **/
226 226
 function formulaires_dater_identifier_dist($objet, $id_objet, $retour = '', $options = []) {
227
-	return serialize([$objet, $id_objet]);
227
+    return serialize([$objet, $id_objet]);
228 228
 }
229 229
 
230 230
 /**
@@ -242,30 +242,30 @@  discard block
 block discarded – undo
242 242
  *     Tableau des erreurs
243 243
  */
244 244
 function formulaires_dater_verifier_dist($objet, $id_objet, $retour = '', $options = []) {
245
-	$erreurs = [];
246
-
247
-	// ouvrir le formulaire en edition ?
248
-	if (_request('_saisie_en_cours')) {
249
-		$erreurs['message_erreur'] = '';
250
-
251
-		return $erreurs;
252
-	}
253
-
254
-	if (_request('changer')) {
255
-		foreach (['date', 'date_redac'] as $k) {
256
-			if ($v = _request($k . '_jour') and !dater_recuperer_date_saisie($v, $k)) {
257
-				$erreurs[$k] = _T('format_date_incorrecte');
258
-			} elseif ($v = _request($k . '_heure') and !dater_recuperer_heure_saisie($v)) {
259
-				$erreurs[$k] = _T('format_heure_incorrecte');
260
-			}
261
-		}
262
-
263
-		if (!_request('date_jour')) {
264
-			$erreurs['date'] = _T('info_obligatoire');
265
-		}
266
-	}
267
-
268
-	return $erreurs;
245
+    $erreurs = [];
246
+
247
+    // ouvrir le formulaire en edition ?
248
+    if (_request('_saisie_en_cours')) {
249
+        $erreurs['message_erreur'] = '';
250
+
251
+        return $erreurs;
252
+    }
253
+
254
+    if (_request('changer')) {
255
+        foreach (['date', 'date_redac'] as $k) {
256
+            if ($v = _request($k . '_jour') and !dater_recuperer_date_saisie($v, $k)) {
257
+                $erreurs[$k] = _T('format_date_incorrecte');
258
+            } elseif ($v = _request($k . '_heure') and !dater_recuperer_heure_saisie($v)) {
259
+                $erreurs[$k] = _T('format_heure_incorrecte');
260
+            }
261
+        }
262
+
263
+        if (!_request('date_jour')) {
264
+            $erreurs['date'] = _T('info_obligatoire');
265
+        }
266
+    }
267
+
268
+    return $erreurs;
269 269
 }
270 270
 
271 271
 /**
@@ -283,79 +283,79 @@  discard block
 block discarded – undo
283 283
  *     Retours des traitements
284 284
  */
285 285
 function formulaires_dater_traiter_dist($objet, $id_objet, $retour = '', $options = []) {
286
-	$res = ['editable' => ' '];
287
-
288
-	if (_request('changer')) {
289
-		$table = table_objet($objet);
290
-		$trouver_table = charger_fonction('trouver_table', 'base');
291
-		$desc = $trouver_table($table);
292
-
293
-		if (!$desc) {
294
-			return ['message_erreur' => _L('erreur')];
295
-		} #impossible en principe
296
-
297
-		$champ_date = $desc['date'] ?: 'date';
298
-		if (isset($options['champ_date']) and $options['champ_date']) {
299
-			$champ_date = $options['champ_date'];
300
-		}
301
-
302
-		$set = [];
303
-
304
-		$charger = charger_fonction('charger', 'formulaires/dater/');
305
-		$v = $charger($objet, $id_objet, $retour, $options);
306
-
307
-		if ($v['_editer_date']) {
308
-			if (!$d = dater_recuperer_date_saisie(_request('date_jour'))) {
309
-				$d = [date('Y'), date('m'), date('d')];
310
-			}
311
-			if (!$h = dater_recuperer_heure_saisie(_request('date_heure'))) {
312
-				$h = [0, 0];
313
-			}
314
-
315
-			$set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
316
-		}
317
-
318
-		$champ_date_redac = 'date_redac';
319
-		if (isset($options['champ_date_redac']) and $options['champ_date_redac']) {
320
-			$champ_date_redac = $options['champ_date_redac'];
321
-		}
322
-		if (isset($desc['field'][$champ_date_redac]) and $v['_editer_date_anterieure']) {
323
-			if (!_request('date_redac_jour') or _request('sans_redac')) {
324
-				$set[$champ_date_redac] = sql_format_date(0, 0, 0, 0, 0, 0);
325
-			} else {
326
-				if (!$d = dater_recuperer_date_saisie(_request('date_redac_jour'), 'date_redac')) {
327
-					$d = [date('Y'), date('m'), date('d')];
328
-				}
329
-				if (!$h = dater_recuperer_heure_saisie(_request('date_redac_heure'))) {
330
-					$h = [0, 0];
331
-				}
332
-				$set[$champ_date_redac] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
333
-			}
334
-		}
335
-
336
-		if (count($set)) {
337
-			$publie_avant = objet_test_si_publie($objet, $id_objet);
338
-			include_spip('action/editer_objet');
339
-			objet_modifier($objet, $id_objet, $set);
340
-			$publie_apres = objet_test_si_publie($objet, $id_objet);
341
-			if ($publie_avant !== $publie_apres) {
342
-				// on refuse ajax pour forcer le rechargement de la page ici
343
-				// on refera traiter une 2eme fois, mais c'est sans consequence
344
-				refuser_traiter_formulaire_ajax();
345
-			}
346
-		}
347
-	}
348
-
349
-	if ($retour) {
350
-		$res['redirect'] = $retour;
351
-	}
352
-
353
-	set_request('date_jour');
354
-	set_request('date_redac_jour');
355
-	set_request('date_heure');
356
-	set_request('date_redac_heure');
357
-
358
-	return $res;
286
+    $res = ['editable' => ' '];
287
+
288
+    if (_request('changer')) {
289
+        $table = table_objet($objet);
290
+        $trouver_table = charger_fonction('trouver_table', 'base');
291
+        $desc = $trouver_table($table);
292
+
293
+        if (!$desc) {
294
+            return ['message_erreur' => _L('erreur')];
295
+        } #impossible en principe
296
+
297
+        $champ_date = $desc['date'] ?: 'date';
298
+        if (isset($options['champ_date']) and $options['champ_date']) {
299
+            $champ_date = $options['champ_date'];
300
+        }
301
+
302
+        $set = [];
303
+
304
+        $charger = charger_fonction('charger', 'formulaires/dater/');
305
+        $v = $charger($objet, $id_objet, $retour, $options);
306
+
307
+        if ($v['_editer_date']) {
308
+            if (!$d = dater_recuperer_date_saisie(_request('date_jour'))) {
309
+                $d = [date('Y'), date('m'), date('d')];
310
+            }
311
+            if (!$h = dater_recuperer_heure_saisie(_request('date_heure'))) {
312
+                $h = [0, 0];
313
+            }
314
+
315
+            $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
316
+        }
317
+
318
+        $champ_date_redac = 'date_redac';
319
+        if (isset($options['champ_date_redac']) and $options['champ_date_redac']) {
320
+            $champ_date_redac = $options['champ_date_redac'];
321
+        }
322
+        if (isset($desc['field'][$champ_date_redac]) and $v['_editer_date_anterieure']) {
323
+            if (!_request('date_redac_jour') or _request('sans_redac')) {
324
+                $set[$champ_date_redac] = sql_format_date(0, 0, 0, 0, 0, 0);
325
+            } else {
326
+                if (!$d = dater_recuperer_date_saisie(_request('date_redac_jour'), 'date_redac')) {
327
+                    $d = [date('Y'), date('m'), date('d')];
328
+                }
329
+                if (!$h = dater_recuperer_heure_saisie(_request('date_redac_heure'))) {
330
+                    $h = [0, 0];
331
+                }
332
+                $set[$champ_date_redac] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
333
+            }
334
+        }
335
+
336
+        if (count($set)) {
337
+            $publie_avant = objet_test_si_publie($objet, $id_objet);
338
+            include_spip('action/editer_objet');
339
+            objet_modifier($objet, $id_objet, $set);
340
+            $publie_apres = objet_test_si_publie($objet, $id_objet);
341
+            if ($publie_avant !== $publie_apres) {
342
+                // on refuse ajax pour forcer le rechargement de la page ici
343
+                // on refera traiter une 2eme fois, mais c'est sans consequence
344
+                refuser_traiter_formulaire_ajax();
345
+            }
346
+        }
347
+    }
348
+
349
+    if ($retour) {
350
+        $res['redirect'] = $retour;
351
+    }
352
+
353
+    set_request('date_jour');
354
+    set_request('date_redac_jour');
355
+    set_request('date_heure');
356
+    set_request('date_redac_heure');
357
+
358
+    return $res;
359 359
 }
360 360
 
361 361
 /**
@@ -366,24 +366,24 @@  discard block
 block discarded – undo
366 366
  * @return array|string Chaîne vide si date invalide, tableau (année, mois, jour) sinon.
367 367
  */
368 368
 function dater_recuperer_date_saisie($post, $quoi = 'date') {
369
-	if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) {
370
-		return '';
371
-	}
372
-	if ($quoi == 'date_redac') {
373
-		if ($regs[3] <> '' and $regs[3] < 1001) {
374
-			$regs[3] += 9000;
375
-		}
376
-
377
-		return [$regs[3], $regs[2], $regs[1]];
378
-	} else {
379
-		if (
380
-			checkdate(intval($regs[2]), intval($regs[1]), intval($regs[3]))
381
-			and $t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3])
382
-		) {
383
-			return [date('Y', $t), date('m', $t), date('d', $t)];
384
-		}
385
-		return '';
386
-	}
369
+    if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) {
370
+        return '';
371
+    }
372
+    if ($quoi == 'date_redac') {
373
+        if ($regs[3] <> '' and $regs[3] < 1001) {
374
+            $regs[3] += 9000;
375
+        }
376
+
377
+        return [$regs[3], $regs[2], $regs[1]];
378
+    } else {
379
+        if (
380
+            checkdate(intval($regs[2]), intval($regs[1]), intval($regs[3]))
381
+            and $t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3])
382
+        ) {
383
+            return [date('Y', $t), date('m', $t), date('d', $t)];
384
+        }
385
+        return '';
386
+    }
387 387
 }
388 388
 
389 389
 /**
@@ -393,12 +393,12 @@  discard block
 block discarded – undo
393 393
  * @return array
394 394
  */
395 395
 function dater_recuperer_heure_saisie($post) {
396
-	if (!preg_match('#([0-9]{1,2})(?:[h:](?:([0-9]{1,2}))?)?#', $post, $regs)) {
397
-		return '';
398
-	}
399
-	if ($regs[1] > 23 or $regs[2] > 59) {
400
-		return '';
401
-	}
402
-
403
-	return [$regs[1], $regs[2]];
396
+    if (!preg_match('#([0-9]{1,2})(?:[h:](?:([0-9]{1,2}))?)?#', $post, $regs)) {
397
+        return '';
398
+    }
399
+    if ($regs[1] > 23 or $regs[2] > 59) {
400
+        return '';
401
+    }
402
+
403
+    return [$regs[1], $regs[2]];
404 404
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -96,7 +96,7 @@  discard block
 block discarded – undo
96 96
 	}
97 97
 
98 98
 
99
-	$row = sql_fetsel($select, $desc['table'], "$_id_objet=" . intval($id_objet));
99
+	$row = sql_fetsel($select, $desc['table'], "$_id_objet=".intval($id_objet));
100 100
 	$statut = $row['statut'] ?? 'publie'; // pas de statut => publie
101 101
 
102 102
 	$valeurs['editable'] = autoriser('dater', $objet, $id_objet, null, ['statut' => $statut]);
@@ -253,9 +253,9 @@  discard block
 block discarded – undo
253 253
 
254 254
 	if (_request('changer')) {
255 255
 		foreach (['date', 'date_redac'] as $k) {
256
-			if ($v = _request($k . '_jour') and !dater_recuperer_date_saisie($v, $k)) {
256
+			if ($v = _request($k.'_jour') and !dater_recuperer_date_saisie($v, $k)) {
257 257
 				$erreurs[$k] = _T('format_date_incorrecte');
258
-			} elseif ($v = _request($k . '_heure') and !dater_recuperer_heure_saisie($v)) {
258
+			} elseif ($v = _request($k.'_heure') and !dater_recuperer_heure_saisie($v)) {
259 259
 				$erreurs[$k] = _T('format_heure_incorrecte');
260 260
 			}
261 261
 		}
Please login to merge, or discard this patch.
ecrire/notifications/instituerarticle.php 1 patch
Indentation   +44 added lines, -44 removed lines patch added patch discarded remove patch
@@ -11,53 +11,53 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 // Fonction appelee par divers pipelines
18 18
 function notifications_instituerarticle_dist($quoi, $id_article, $options) {
19 19
 
20
-	// ne devrait jamais se produire
21
-	if ($options['statut'] == $options['statut_ancien']) {
22
-		spip_log('statut inchange', 'notifications');
23
-
24
-		return;
25
-	}
26
-
27
-	include_spip('inc/texte');
28
-
29
-	$modele = '';
30
-	if ($options['statut'] == 'publie') {
31
-		if (
32
-			$GLOBALS['meta']['post_dates'] == 'non'
33
-			and strtotime($options['date']) > time()
34
-		) {
35
-			$modele = 'notifications/article_valide';
36
-		} else {
37
-			$modele = 'notifications/article_publie';
38
-		}
39
-	}
40
-
41
-	if ($options['statut'] == 'prop' and $options['statut_ancien'] != 'publie') {
42
-		$modele = 'notifications/article_propose';
43
-	}
44
-
45
-	if ($modele) {
46
-		$destinataires = [];
47
-		if ($GLOBALS['meta']['suivi_edito'] == 'oui') {
48
-			$destinataires = explode(',', $GLOBALS['meta']['adresse_suivi']);
49
-		}
50
-
51
-
52
-		$destinataires = pipeline(
53
-			'notifications_destinataires',
54
-			[
55
-				'args' => ['quoi' => $quoi, 'id' => $id_article, 'options' => $options],
56
-				'data' => $destinataires
57
-			]
58
-		);
59
-
60
-		$texte = email_notification_article($id_article, $modele);
61
-		notifications_envoyer_mails($destinataires, $texte);
62
-	}
20
+    // ne devrait jamais se produire
21
+    if ($options['statut'] == $options['statut_ancien']) {
22
+        spip_log('statut inchange', 'notifications');
23
+
24
+        return;
25
+    }
26
+
27
+    include_spip('inc/texte');
28
+
29
+    $modele = '';
30
+    if ($options['statut'] == 'publie') {
31
+        if (
32
+            $GLOBALS['meta']['post_dates'] == 'non'
33
+            and strtotime($options['date']) > time()
34
+        ) {
35
+            $modele = 'notifications/article_valide';
36
+        } else {
37
+            $modele = 'notifications/article_publie';
38
+        }
39
+    }
40
+
41
+    if ($options['statut'] == 'prop' and $options['statut_ancien'] != 'publie') {
42
+        $modele = 'notifications/article_propose';
43
+    }
44
+
45
+    if ($modele) {
46
+        $destinataires = [];
47
+        if ($GLOBALS['meta']['suivi_edito'] == 'oui') {
48
+            $destinataires = explode(',', $GLOBALS['meta']['adresse_suivi']);
49
+        }
50
+
51
+
52
+        $destinataires = pipeline(
53
+            'notifications_destinataires',
54
+            [
55
+                'args' => ['quoi' => $quoi, 'id' => $id_article, 'options' => $options],
56
+                'data' => $destinataires
57
+            ]
58
+        );
59
+
60
+        $texte = email_notification_article($id_article, $modele);
61
+        notifications_envoyer_mails($destinataires, $texte);
62
+    }
63 63
 }
Please login to merge, or discard this patch.
ecrire/req/sqlite3.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 
@@ -21,18 +21,18 @@  discard block
 block discarded – undo
21 21
 
22 22
 
23 23
 function req_sqlite3_dist($addr, $port, $login, $pass, $db = '', $prefixe = '') {
24
-	return req_sqlite_dist($addr, $port, $login, $pass, $db, $prefixe, $sqlite_version = 3);
24
+    return req_sqlite_dist($addr, $port, $login, $pass, $db, $prefixe, $sqlite_version = 3);
25 25
 }
26 26
 
27 27
 
28 28
 function spip_sqlite3_constantes() {
29
-	if (!defined('SPIP_SQLITE3_ASSOC')) {
30
-		define('SPIP_SQLITE3_ASSOC', PDO::FETCH_ASSOC);
31
-		define('SPIP_SQLITE3_NUM', PDO::FETCH_NUM);
32
-		define('SPIP_SQLITE3_BOTH', PDO::FETCH_BOTH);
33
-	}
29
+    if (!defined('SPIP_SQLITE3_ASSOC')) {
30
+        define('SPIP_SQLITE3_ASSOC', PDO::FETCH_ASSOC);
31
+        define('SPIP_SQLITE3_NUM', PDO::FETCH_NUM);
32
+        define('SPIP_SQLITE3_BOTH', PDO::FETCH_BOTH);
33
+    }
34 34
 }
35 35
 
36 36
 function spip_versions_sqlite3() {
37
-	return _sqlite_charger_version(3) ? 3 : false;
37
+    return _sqlite_charger_version(3) ? 3 : false;
38 38
 }
Please login to merge, or discard this patch.
ecrire/req/pg.exp.php 2 patches
Indentation   +1179 added lines, -1179 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
 define('_DEFAULT_DB', 'spip');
@@ -31,159 +31,159 @@  discard block
 block discarded – undo
31 31
 // si ca ne marche toujours pas, echec.
32 32
 
33 33
 function req_pg_dist($addr, $port, $login, $pass, $db = '', $prefixe = '') {
34
-	static $last_connect = [];
35
-	if (!extension_loaded('pgsql')) {
36
-		return false;
37
-	}
38
-
39
-	// si provient de selectdb
40
-	if (empty($addr) && empty($port) && empty($login) && empty($pass)) {
41
-		foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) {
42
-			${$a} = $last_connect[$a];
43
-		}
44
-	}
45
-	[$host, $p] = array_pad(explode(';', $addr), 2, null);
46
-	if ($p > 0) {
47
-		$port = " port=$p";
48
-	} else {
49
-		$port = '';
50
-	}
51
-	$erreurs = [];
52
-	if ($db) {
53
-		@$link = pg_connect("host=$host$port dbname=$db user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW);
54
-	} elseif (!@$link = pg_connect("host=$host$port user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
55
-		$erreurs[] = pg_last_error();
56
-		if (@$link = pg_connect("host=$host$port dbname=$login user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
57
-			$db = $login;
58
-		} else {
59
-			$erreurs[] = pg_last_error();
60
-			$db = _DEFAULT_DB;
61
-			$link = pg_connect("host=$host$port dbname=$db user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW);
62
-		}
63
-	}
64
-	if (!$link) {
65
-		$erreurs[] = pg_last_error();
66
-		foreach ($erreurs as $e) {
67
-			spip_log('Echec pg_connect. Erreur : ' . $e, 'pg.' . _LOG_HS);
68
-		}
69
-
70
-		return false;
71
-	}
72
-
73
-	if ($link) {
74
-		$last_connect = [
75
-			'addr' => $addr,
76
-			'port' => $port,
77
-			'login' => $login,
78
-			'pass' => $pass,
79
-			'db' => $db,
80
-			'prefixe' => $prefixe,
81
-		];
82
-	}
83
-
84
-	spip_log(
85
-		"Connexion vers $host, base $db, prefixe $prefixe " . ($link ? 'operationnelle' : 'impossible'),
86
-		'pg.' . _LOG_DEBUG
87
-	);
88
-
89
-	return !$link ? false : [
90
-		'db' => $db,
91
-		'prefixe' => $prefixe ?: $db,
92
-		'link' => $link,
93
-	];
34
+    static $last_connect = [];
35
+    if (!extension_loaded('pgsql')) {
36
+        return false;
37
+    }
38
+
39
+    // si provient de selectdb
40
+    if (empty($addr) && empty($port) && empty($login) && empty($pass)) {
41
+        foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) {
42
+            ${$a} = $last_connect[$a];
43
+        }
44
+    }
45
+    [$host, $p] = array_pad(explode(';', $addr), 2, null);
46
+    if ($p > 0) {
47
+        $port = " port=$p";
48
+    } else {
49
+        $port = '';
50
+    }
51
+    $erreurs = [];
52
+    if ($db) {
53
+        @$link = pg_connect("host=$host$port dbname=$db user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW);
54
+    } elseif (!@$link = pg_connect("host=$host$port user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
55
+        $erreurs[] = pg_last_error();
56
+        if (@$link = pg_connect("host=$host$port dbname=$login user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
57
+            $db = $login;
58
+        } else {
59
+            $erreurs[] = pg_last_error();
60
+            $db = _DEFAULT_DB;
61
+            $link = pg_connect("host=$host$port dbname=$db user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW);
62
+        }
63
+    }
64
+    if (!$link) {
65
+        $erreurs[] = pg_last_error();
66
+        foreach ($erreurs as $e) {
67
+            spip_log('Echec pg_connect. Erreur : ' . $e, 'pg.' . _LOG_HS);
68
+        }
69
+
70
+        return false;
71
+    }
72
+
73
+    if ($link) {
74
+        $last_connect = [
75
+            'addr' => $addr,
76
+            'port' => $port,
77
+            'login' => $login,
78
+            'pass' => $pass,
79
+            'db' => $db,
80
+            'prefixe' => $prefixe,
81
+        ];
82
+    }
83
+
84
+    spip_log(
85
+        "Connexion vers $host, base $db, prefixe $prefixe " . ($link ? 'operationnelle' : 'impossible'),
86
+        'pg.' . _LOG_DEBUG
87
+    );
88
+
89
+    return !$link ? false : [
90
+        'db' => $db,
91
+        'prefixe' => $prefixe ?: $db,
92
+        'link' => $link,
93
+    ];
94 94
 }
95 95
 
96 96
 $GLOBALS['spip_pg_functions_1'] = [
97
-	'alter' => 'spip_pg_alter',
98
-	'count' => 'spip_pg_count',
99
-	'countsel' => 'spip_pg_countsel',
100
-	'create' => 'spip_pg_create',
101
-	'create_base' => 'spip_pg_create_base',
102
-	'create_view' => 'spip_pg_create_view',
103
-	'date_proche' => 'spip_pg_date_proche',
104
-	'delete' => 'spip_pg_delete',
105
-	'drop_table' => 'spip_pg_drop_table',
106
-	'drop_view' => 'spip_pg_drop_view',
107
-	'errno' => 'spip_pg_errno',
108
-	'error' => 'spip_pg_error',
109
-	'explain' => 'spip_pg_explain',
110
-	'fetch' => 'spip_pg_fetch',
111
-	'seek' => 'spip_pg_seek',
112
-	'free' => 'spip_pg_free',
113
-	'hex' => 'spip_pg_hex',
114
-	'in' => 'spip_pg_in',
115
-	'insert' => 'spip_pg_insert',
116
-	'insertq' => 'spip_pg_insertq',
117
-	'insertq_multi' => 'spip_pg_insertq_multi',
118
-	'listdbs' => 'spip_pg_listdbs',
119
-	'multi' => 'spip_pg_multi',
120
-	'optimize' => 'spip_pg_optimize',
121
-	'query' => 'spip_pg_query',
122
-	'quote' => 'spip_pg_quote',
123
-	'replace' => 'spip_pg_replace',
124
-	'replace_multi' => 'spip_pg_replace_multi',
125
-	'select' => 'spip_pg_select',
126
-	'selectdb' => 'spip_pg_selectdb',
127
-	'set_connect_charset' => 'spip_pg_set_connect_charset',
128
-	'showbase' => 'spip_pg_showbase',
129
-	'showtable' => 'spip_pg_showtable',
130
-	'update' => 'spip_pg_update',
131
-	'updateq' => 'spip_pg_updateq',
97
+    'alter' => 'spip_pg_alter',
98
+    'count' => 'spip_pg_count',
99
+    'countsel' => 'spip_pg_countsel',
100
+    'create' => 'spip_pg_create',
101
+    'create_base' => 'spip_pg_create_base',
102
+    'create_view' => 'spip_pg_create_view',
103
+    'date_proche' => 'spip_pg_date_proche',
104
+    'delete' => 'spip_pg_delete',
105
+    'drop_table' => 'spip_pg_drop_table',
106
+    'drop_view' => 'spip_pg_drop_view',
107
+    'errno' => 'spip_pg_errno',
108
+    'error' => 'spip_pg_error',
109
+    'explain' => 'spip_pg_explain',
110
+    'fetch' => 'spip_pg_fetch',
111
+    'seek' => 'spip_pg_seek',
112
+    'free' => 'spip_pg_free',
113
+    'hex' => 'spip_pg_hex',
114
+    'in' => 'spip_pg_in',
115
+    'insert' => 'spip_pg_insert',
116
+    'insertq' => 'spip_pg_insertq',
117
+    'insertq_multi' => 'spip_pg_insertq_multi',
118
+    'listdbs' => 'spip_pg_listdbs',
119
+    'multi' => 'spip_pg_multi',
120
+    'optimize' => 'spip_pg_optimize',
121
+    'query' => 'spip_pg_query',
122
+    'quote' => 'spip_pg_quote',
123
+    'replace' => 'spip_pg_replace',
124
+    'replace_multi' => 'spip_pg_replace_multi',
125
+    'select' => 'spip_pg_select',
126
+    'selectdb' => 'spip_pg_selectdb',
127
+    'set_connect_charset' => 'spip_pg_set_connect_charset',
128
+    'showbase' => 'spip_pg_showbase',
129
+    'showtable' => 'spip_pg_showtable',
130
+    'update' => 'spip_pg_update',
131
+    'updateq' => 'spip_pg_updateq',
132 132
 ];
133 133
 
134 134
 // Par ou ca passe une fois les traductions faites
135 135
 function spip_pg_trace_query($query, $serveur = '') {
136
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
137
-	$prefixe = $connexion['prefixe'];
138
-	$link = $connexion['link'];
139
-	$db = $connexion['db'];
140
-
141
-	if (isset($_GET['var_profile'])) {
142
-		include_spip('public/tracer');
143
-		$t = trace_query_start();
144
-		$e = '';
145
-	} else {
146
-		$t = 0;
147
-	}
148
-
149
-	$connexion['last'] = $query;
150
-	$r = spip_pg_query_simple($link, $query);
151
-
152
-	// Log de l'erreur eventuelle
153
-	if ($e = spip_pg_errno($serveur)) {
154
-		$e .= spip_pg_error($query, $serveur);
155
-	} // et du fautif
156
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
136
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
137
+    $prefixe = $connexion['prefixe'];
138
+    $link = $connexion['link'];
139
+    $db = $connexion['db'];
140
+
141
+    if (isset($_GET['var_profile'])) {
142
+        include_spip('public/tracer');
143
+        $t = trace_query_start();
144
+        $e = '';
145
+    } else {
146
+        $t = 0;
147
+    }
148
+
149
+    $connexion['last'] = $query;
150
+    $r = spip_pg_query_simple($link, $query);
151
+
152
+    // Log de l'erreur eventuelle
153
+    if ($e = spip_pg_errno($serveur)) {
154
+        $e .= spip_pg_error($query, $serveur);
155
+    } // et du fautif
156
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
157 157
 }
158 158
 
159 159
 // Fonction de requete generale quand on est sur que c'est SQL standard.
160 160
 // Elle change juste le noms des tables ($table_prefix) dans le FROM etc
161 161
 
162 162
 function spip_pg_query($query, $serveur = '', $requeter = true) {
163
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
164
-	$prefixe = $connexion['prefixe'];
165
-	$link = $connexion['link'];
166
-	$db = $connexion['db'];
167
-
168
-	if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
169
-		$suite = strstr($query, (string) $regs[0]);
170
-		$query = substr($query, 0, -strlen($suite));
171
-	} else {
172
-		$suite = '';
173
-	}
174
-	$query = preg_replace('/([,\s])spip_/', '\1' . $prefixe . '_', $query) . $suite;
175
-
176
-	// renvoyer la requete inerte si demandee
177
-	if (!$requeter) {
178
-		return $query;
179
-	}
180
-
181
-	return spip_pg_trace_query($query, $serveur);
163
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
164
+    $prefixe = $connexion['prefixe'];
165
+    $link = $connexion['link'];
166
+    $db = $connexion['db'];
167
+
168
+    if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
169
+        $suite = strstr($query, (string) $regs[0]);
170
+        $query = substr($query, 0, -strlen($suite));
171
+    } else {
172
+        $suite = '';
173
+    }
174
+    $query = preg_replace('/([,\s])spip_/', '\1' . $prefixe . '_', $query) . $suite;
175
+
176
+    // renvoyer la requete inerte si demandee
177
+    if (!$requeter) {
178
+        return $query;
179
+    }
180
+
181
+    return spip_pg_trace_query($query, $serveur);
182 182
 }
183 183
 
184 184
 function spip_pg_query_simple($link, $query) {
185
-	#spip_log(var_export($query,true), 'pg.'._LOG_DEBUG);
186
-	return pg_query($link, $query);
185
+    #spip_log(var_export($query,true), 'pg.'._LOG_DEBUG);
186
+    return pg_query($link, $query);
187 187
 }
188 188
 
189 189
 /*
@@ -195,196 +195,196 @@  discard block
 block discarded – undo
195 195
  * de requetes showtable intempestives
196 196
  */
197 197
 function spip_pg_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur = '') {
198
-	static $tables = [];
199
-
200
-	if (!isset($tables[$table])) {
201
-		if (!$desc) {
202
-			$trouver_table = charger_fonction('trouver_table', 'base');
203
-			$desc = $trouver_table($table, $serveur);
204
-			// si pas de description, on ne fait rien, ou on die() ?
205
-			if (!$desc) {
206
-				return $couples;
207
-			}
208
-		}
209
-
210
-		// recherche des champs avec simplement 'TIMESTAMP'
211
-		// cependant, il faudra peut etre etendre
212
-		// avec la gestion de DEFAULT et ON UPDATE
213
-		// mais ceux-ci ne sont pas utilises dans le core
214
-		$tables[$table] = [];
215
-		foreach ($desc['field'] as $k => $v) {
216
-			$v = strtolower(ltrim($v));
217
-			// ne pas ajouter de timestamp now() si un default est specifie
218
-			if (strpos($v, 'timestamp') === 0 and strpos($v, 'default') === false) {
219
-				$tables[$table][] = $k;
220
-			}
221
-		}
222
-	}
223
-
224
-	// ajout des champs type 'timestamp' absents
225
-	foreach ($tables[$table] as $maj) {
226
-		if (!array_key_exists($maj, $couples)) {
227
-			$couples[$maj] = 'NOW()';
228
-		}
229
-	}
230
-
231
-	return $couples;
198
+    static $tables = [];
199
+
200
+    if (!isset($tables[$table])) {
201
+        if (!$desc) {
202
+            $trouver_table = charger_fonction('trouver_table', 'base');
203
+            $desc = $trouver_table($table, $serveur);
204
+            // si pas de description, on ne fait rien, ou on die() ?
205
+            if (!$desc) {
206
+                return $couples;
207
+            }
208
+        }
209
+
210
+        // recherche des champs avec simplement 'TIMESTAMP'
211
+        // cependant, il faudra peut etre etendre
212
+        // avec la gestion de DEFAULT et ON UPDATE
213
+        // mais ceux-ci ne sont pas utilises dans le core
214
+        $tables[$table] = [];
215
+        foreach ($desc['field'] as $k => $v) {
216
+            $v = strtolower(ltrim($v));
217
+            // ne pas ajouter de timestamp now() si un default est specifie
218
+            if (strpos($v, 'timestamp') === 0 and strpos($v, 'default') === false) {
219
+                $tables[$table][] = $k;
220
+            }
221
+        }
222
+    }
223
+
224
+    // ajout des champs type 'timestamp' absents
225
+    foreach ($tables[$table] as $maj) {
226
+        if (!array_key_exists($maj, $couples)) {
227
+            $couples[$maj] = 'NOW()';
228
+        }
229
+    }
230
+
231
+    return $couples;
232 232
 }
233 233
 
234 234
 
235 235
 // Alter en PG ne traite pas les index
236 236
 function spip_pg_alter($query, $serveur = '', $requeter = true) {
237
-	// il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
238
-	// tout en cassant en deux alter distincts "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"...
239
-	// ou revoir l'api de sql_alter en creant un
240
-	// sql_alter_table($table,array($actions));
241
-	if (!preg_match('/\s*((\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) {
242
-		spip_log("$query mal comprise", 'pg.' . _LOG_ERREUR);
243
-
244
-		return false;
245
-	}
246
-	$debut = $regs[1];
247
-	$table = $regs[3];
248
-	$suite = $regs[4];
249
-	$todo = explode(',', $suite);
250
-	// on remet les morceaux dechires ensembles... que c'est laid !
251
-	$todo2 = [];
252
-	$i = 0;
253
-	$ouverte = false;
254
-	while ($do = array_shift($todo)) {
255
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
256
-		$o = (false !== strpos($do, '('));
257
-		$f = (false !== strpos($do, ')'));
258
-		if ($o and !$f) {
259
-			$ouverte = true;
260
-		} elseif ($f) {
261
-			$ouverte = false;
262
-		}
263
-		if (!$ouverte) {
264
-			$i++;
265
-		}
266
-	}
267
-	$todo = $todo2;
268
-	$query = $debut . ' ' . array_shift($todo);
269
-
270
-	if (!preg_match('/^\s*(IGNORE\s*)?TABLE\s+(\w+)\s+(ADD|DROP|CHANGE|MODIFY|RENAME)\s*(.*)$/is', $query, $r)) {
271
-		spip_log("$query incompris", 'pg.' . _LOG_ERREUR);
272
-	} else {
273
-		if ($r[1]) {
274
-			spip_log("j'ignore IGNORE dans $query", 'pg.' . _LOG_AVERTISSEMENT);
275
-		}
276
-		$f = 'spip_pg_alter_' . strtolower($r[3]);
277
-		if (function_exists($f)) {
278
-			$f($r[2], $r[4], $serveur, $requeter);
279
-		} else {
280
-			spip_log("$query non prevu", 'pg.' . _LOG_ERREUR);
281
-		}
282
-	}
283
-	// Alter a plusieurs args. Faudrait optimiser.
284
-	if ($todo) {
285
-		spip_pg_alter("TABLE $table " . join(',', $todo));
286
-	}
237
+    // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
238
+    // tout en cassant en deux alter distincts "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"...
239
+    // ou revoir l'api de sql_alter en creant un
240
+    // sql_alter_table($table,array($actions));
241
+    if (!preg_match('/\s*((\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) {
242
+        spip_log("$query mal comprise", 'pg.' . _LOG_ERREUR);
243
+
244
+        return false;
245
+    }
246
+    $debut = $regs[1];
247
+    $table = $regs[3];
248
+    $suite = $regs[4];
249
+    $todo = explode(',', $suite);
250
+    // on remet les morceaux dechires ensembles... que c'est laid !
251
+    $todo2 = [];
252
+    $i = 0;
253
+    $ouverte = false;
254
+    while ($do = array_shift($todo)) {
255
+        $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
256
+        $o = (false !== strpos($do, '('));
257
+        $f = (false !== strpos($do, ')'));
258
+        if ($o and !$f) {
259
+            $ouverte = true;
260
+        } elseif ($f) {
261
+            $ouverte = false;
262
+        }
263
+        if (!$ouverte) {
264
+            $i++;
265
+        }
266
+    }
267
+    $todo = $todo2;
268
+    $query = $debut . ' ' . array_shift($todo);
269
+
270
+    if (!preg_match('/^\s*(IGNORE\s*)?TABLE\s+(\w+)\s+(ADD|DROP|CHANGE|MODIFY|RENAME)\s*(.*)$/is', $query, $r)) {
271
+        spip_log("$query incompris", 'pg.' . _LOG_ERREUR);
272
+    } else {
273
+        if ($r[1]) {
274
+            spip_log("j'ignore IGNORE dans $query", 'pg.' . _LOG_AVERTISSEMENT);
275
+        }
276
+        $f = 'spip_pg_alter_' . strtolower($r[3]);
277
+        if (function_exists($f)) {
278
+            $f($r[2], $r[4], $serveur, $requeter);
279
+        } else {
280
+            spip_log("$query non prevu", 'pg.' . _LOG_ERREUR);
281
+        }
282
+    }
283
+    // Alter a plusieurs args. Faudrait optimiser.
284
+    if ($todo) {
285
+        spip_pg_alter("TABLE $table " . join(',', $todo));
286
+    }
287 287
 }
288 288
 
289 289
 function spip_pg_alter_change($table, $arg, $serveur = '', $requeter = true) {
290
-	if (!preg_match('/^`?(\w+)`?\s+`?(\w+)`?\s+(.*?)\s*(DEFAULT .*?)?(NOT\s+NULL)?\s*(DEFAULT .*?)?$/i', $arg, $r)) {
291
-		spip_log("alter change: $arg  incompris", 'pg.' . _LOG_ERREUR);
292
-	} else {
293
-		[, $old, $new, $type, $default, $null, $def2] = $r;
294
-		$actions = ["ALTER $old TYPE " . mysql2pg_type($type)];
295
-		if ($null) {
296
-			$actions[] = "ALTER $old SET NOT NULL";
297
-		} else {
298
-			$actions[] = "ALTER $old DROP NOT NULL";
299
-		}
300
-
301
-		if ($d = ($default ?: $def2)) {
302
-			$actions[] = "ALTER $old SET $d";
303
-		} else {
304
-			$actions[] = "ALTER $old DROP DEFAULT";
305
-		}
306
-
307
-		spip_pg_query("ALTER TABLE $table " . join(', ', $actions));
308
-
309
-		if ($old != $new) {
310
-			spip_pg_query("ALTER TABLE $table RENAME $old TO $new", $serveur);
311
-		}
312
-	}
290
+    if (!preg_match('/^`?(\w+)`?\s+`?(\w+)`?\s+(.*?)\s*(DEFAULT .*?)?(NOT\s+NULL)?\s*(DEFAULT .*?)?$/i', $arg, $r)) {
291
+        spip_log("alter change: $arg  incompris", 'pg.' . _LOG_ERREUR);
292
+    } else {
293
+        [, $old, $new, $type, $default, $null, $def2] = $r;
294
+        $actions = ["ALTER $old TYPE " . mysql2pg_type($type)];
295
+        if ($null) {
296
+            $actions[] = "ALTER $old SET NOT NULL";
297
+        } else {
298
+            $actions[] = "ALTER $old DROP NOT NULL";
299
+        }
300
+
301
+        if ($d = ($default ?: $def2)) {
302
+            $actions[] = "ALTER $old SET $d";
303
+        } else {
304
+            $actions[] = "ALTER $old DROP DEFAULT";
305
+        }
306
+
307
+        spip_pg_query("ALTER TABLE $table " . join(', ', $actions));
308
+
309
+        if ($old != $new) {
310
+            spip_pg_query("ALTER TABLE $table RENAME $old TO $new", $serveur);
311
+        }
312
+    }
313 313
 }
314 314
 
315 315
 function spip_pg_alter_add($table, $arg, $serveur = '', $requeter = true) {
316
-	$nom_index = null;
317
-	if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*(.*)$/', $arg, $r)) {
318
-		spip_log("alter add $arg  incompris", 'pg.' . _LOG_ERREUR);
319
-
320
-		return null;
321
-	}
322
-	if (!$r[1] or $r[1] == 'COLUMN') {
323
-		preg_match('/`?(\w+)`?(.*)/', $r[2], $m);
324
-		if (preg_match('/^(.*)(BEFORE|AFTER|FIRST)(.*)$/is', $m[2], $n)) {
325
-			$m[2] = $n[1];
326
-		}
327
-
328
-		return spip_pg_query("ALTER TABLE $table ADD " . $m[1] . ' ' . mysql2pg_type($m[2]), $serveur, $requeter);
329
-	} elseif ($r[1][0] == 'P') {
330
-		// la primary peut etre sur plusieurs champs
331
-		$r[2] = trim(str_replace('`', '', $r[2]));
332
-		$m = ($r[2][0] == '(') ? substr($r[2], 1, -1) : $r[2];
333
-
334
-		return spip_pg_query(
335
-			"ALTER TABLE $table ADD CONSTRAINT $table" . '_pkey PRIMARY KEY (' . $m . ')',
336
-			$serveur,
337
-			$requeter
338
-		);
339
-	} else {
340
-		preg_match('/([^\s,]*)\s*(.*)?/', $r[2], $m);
341
-		// peut etre "(colonne)" ou "nom_index (colonnes)"
342
-		// bug potentiel si qqn met "(colonne, colonne)"
343
-		//
344
-		// nom_index (colonnes)
345
-		if ($m[2]) {
346
-			$colonnes = substr($m[2], 1, -1);
347
-			$nom_index = $m[1];
348
-		} else {
349
-			// (colonne)
350
-			if ($m[1][0] == '(') {
351
-				$colonnes = substr($m[1], 1, -1);
352
-				if (false !== strpos(',', $colonnes)) {
353
-					spip_log('PG : Erreur, impossible de creer un index sur plusieurs colonnes'
354
-						. " sans qu'il ait de nom ($table, ($colonnes))", 'pg.' . _LOG_ERREUR);
355
-				} else {
356
-					$nom_index = $colonnes;
357
-				}
358
-			} // nom_index
359
-			else {
360
-				$nom_index = $colonnes = $m[1];
361
-			}
362
-		}
363
-
364
-		return spip_pg_create_index($nom_index, $table, $colonnes, $serveur, $requeter);
365
-	}
316
+    $nom_index = null;
317
+    if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*(.*)$/', $arg, $r)) {
318
+        spip_log("alter add $arg  incompris", 'pg.' . _LOG_ERREUR);
319
+
320
+        return null;
321
+    }
322
+    if (!$r[1] or $r[1] == 'COLUMN') {
323
+        preg_match('/`?(\w+)`?(.*)/', $r[2], $m);
324
+        if (preg_match('/^(.*)(BEFORE|AFTER|FIRST)(.*)$/is', $m[2], $n)) {
325
+            $m[2] = $n[1];
326
+        }
327
+
328
+        return spip_pg_query("ALTER TABLE $table ADD " . $m[1] . ' ' . mysql2pg_type($m[2]), $serveur, $requeter);
329
+    } elseif ($r[1][0] == 'P') {
330
+        // la primary peut etre sur plusieurs champs
331
+        $r[2] = trim(str_replace('`', '', $r[2]));
332
+        $m = ($r[2][0] == '(') ? substr($r[2], 1, -1) : $r[2];
333
+
334
+        return spip_pg_query(
335
+            "ALTER TABLE $table ADD CONSTRAINT $table" . '_pkey PRIMARY KEY (' . $m . ')',
336
+            $serveur,
337
+            $requeter
338
+        );
339
+    } else {
340
+        preg_match('/([^\s,]*)\s*(.*)?/', $r[2], $m);
341
+        // peut etre "(colonne)" ou "nom_index (colonnes)"
342
+        // bug potentiel si qqn met "(colonne, colonne)"
343
+        //
344
+        // nom_index (colonnes)
345
+        if ($m[2]) {
346
+            $colonnes = substr($m[2], 1, -1);
347
+            $nom_index = $m[1];
348
+        } else {
349
+            // (colonne)
350
+            if ($m[1][0] == '(') {
351
+                $colonnes = substr($m[1], 1, -1);
352
+                if (false !== strpos(',', $colonnes)) {
353
+                    spip_log('PG : Erreur, impossible de creer un index sur plusieurs colonnes'
354
+                        . " sans qu'il ait de nom ($table, ($colonnes))", 'pg.' . _LOG_ERREUR);
355
+                } else {
356
+                    $nom_index = $colonnes;
357
+                }
358
+            } // nom_index
359
+            else {
360
+                $nom_index = $colonnes = $m[1];
361
+            }
362
+        }
363
+
364
+        return spip_pg_create_index($nom_index, $table, $colonnes, $serveur, $requeter);
365
+    }
366 366
 }
367 367
 
368 368
 function spip_pg_alter_drop($table, $arg, $serveur = '', $requeter = true) {
369
-	if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*`?(\w*)`?/', $arg, $r)) {
370
-		spip_log("alter drop: $arg  incompris", 'pg.' . _LOG_ERREUR);
371
-	} else {
372
-		if (!$r[1] or $r[1] == 'COLUMN') {
373
-			return spip_pg_query("ALTER TABLE $table DROP " . $r[2], $serveur);
374
-		} elseif ($r[1][0] == 'P') {
375
-			return spip_pg_query("ALTER TABLE $table DROP CONSTRAINT $table" . '_pkey', $serveur);
376
-		} else {
377
-			return spip_pg_query('DROP INDEX ' . $table . '_' . $r[2], $serveur);
378
-		}
379
-	}
369
+    if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*`?(\w*)`?/', $arg, $r)) {
370
+        spip_log("alter drop: $arg  incompris", 'pg.' . _LOG_ERREUR);
371
+    } else {
372
+        if (!$r[1] or $r[1] == 'COLUMN') {
373
+            return spip_pg_query("ALTER TABLE $table DROP " . $r[2], $serveur);
374
+        } elseif ($r[1][0] == 'P') {
375
+            return spip_pg_query("ALTER TABLE $table DROP CONSTRAINT $table" . '_pkey', $serveur);
376
+        } else {
377
+            return spip_pg_query('DROP INDEX ' . $table . '_' . $r[2], $serveur);
378
+        }
379
+    }
380 380
 }
381 381
 
382 382
 function spip_pg_alter_modify($table, $arg, $serveur = '', $requeter = true) {
383
-	if (!preg_match('/^`?(\w+)`?\s+(.*)$/', $arg, $r)) {
384
-		spip_log("alter modify: $arg  incompris", 'pg.' . _LOG_ERREUR);
385
-	} else {
386
-		return spip_pg_alter_change($table, $r[1] . ' ' . $arg, $serveur = '', $requeter = true);
387
-	}
383
+    if (!preg_match('/^`?(\w+)`?\s+(.*)$/', $arg, $r)) {
384
+        spip_log("alter modify: $arg  incompris", 'pg.' . _LOG_ERREUR);
385
+    } else {
386
+        return spip_pg_alter_change($table, $r[1] . ' ' . $arg, $serveur = '', $requeter = true);
387
+    }
388 388
 }
389 389
 
390 390
 // attention (en pg) :
@@ -392,17 +392,17 @@  discard block
 block discarded – undo
392 392
 // - alter table A rename X to Y = changer le nom de la colonne X en Y
393 393
 // pour l'instant, traiter simplement RENAME TO X
394 394
 function spip_pg_alter_rename($table, $arg, $serveur = '', $requeter = true) {
395
-	$rename = '';
396
-	// si TO, mais pas au debut
397
-	if (!stripos($arg, 'TO ')) {
398
-		$rename = $arg;
399
-	} elseif (preg_match('/^(TO)\s*`?(\w*)`?/', $arg, $r)) {
400
-		$rename = $r[2];
401
-	} else {
402
-		spip_log("alter rename: $arg  incompris", 'pg.' . _LOG_ERREUR);
403
-	}
404
-
405
-	return $rename ? spip_pg_query("ALTER TABLE $table RENAME TO $rename") : false;
395
+    $rename = '';
396
+    // si TO, mais pas au debut
397
+    if (!stripos($arg, 'TO ')) {
398
+        $rename = $arg;
399
+    } elseif (preg_match('/^(TO)\s*`?(\w*)`?/', $arg, $r)) {
400
+        $rename = $r[2];
401
+    } else {
402
+        spip_log("alter rename: $arg  incompris", 'pg.' . _LOG_ERREUR);
403
+    }
404
+
405
+    return $rename ? spip_pg_query("ALTER TABLE $table RENAME TO $rename") : false;
406 406
 }
407 407
 
408 408
 
@@ -418,59 +418,59 @@  discard block
 block discarded – undo
418 418
  * @return bool ou requete
419 419
  */
420 420
 function spip_pg_create_index($nom, $table, $champs, $serveur = '', $requeter = true) {
421
-	if (!($nom or $table or $champs)) {
422
-		spip_log(
423
-			"Champ manquant pour creer un index pg ($nom, $table, (" . @join(',', $champs) . '))',
424
-			'pg.' . _LOG_ERREUR
425
-		);
426
-
427
-		return false;
428
-	}
429
-
430
-	$nom = str_replace('`', '', $nom);
431
-	$champs = str_replace('`', '', $champs);
432
-
433
-	// PG ne differentie pas noms des index en fonction des tables
434
-	// il faut donc creer des noms uniques d'index pour une base pg
435
-	$nom = $table . '_' . $nom;
436
-	// enlever d'eventuelles parentheses deja presentes sur champs
437
-	if (!is_array($champs)) {
438
-		if ($champs[0] == '(') {
439
-			$champs = substr($champs, 1, -1);
440
-		}
441
-		$champs = [$champs];
442
-	}
443
-	$query = "CREATE INDEX $nom ON $table (" . join(',', $champs) . ')';
444
-	if (!$requeter) {
445
-		return $query;
446
-	}
447
-	$res = spip_pg_query($query, $serveur, $requeter);
448
-
449
-	return $res;
421
+    if (!($nom or $table or $champs)) {
422
+        spip_log(
423
+            "Champ manquant pour creer un index pg ($nom, $table, (" . @join(',', $champs) . '))',
424
+            'pg.' . _LOG_ERREUR
425
+        );
426
+
427
+        return false;
428
+    }
429
+
430
+    $nom = str_replace('`', '', $nom);
431
+    $champs = str_replace('`', '', $champs);
432
+
433
+    // PG ne differentie pas noms des index en fonction des tables
434
+    // il faut donc creer des noms uniques d'index pour une base pg
435
+    $nom = $table . '_' . $nom;
436
+    // enlever d'eventuelles parentheses deja presentes sur champs
437
+    if (!is_array($champs)) {
438
+        if ($champs[0] == '(') {
439
+            $champs = substr($champs, 1, -1);
440
+        }
441
+        $champs = [$champs];
442
+    }
443
+    $query = "CREATE INDEX $nom ON $table (" . join(',', $champs) . ')';
444
+    if (!$requeter) {
445
+        return $query;
446
+    }
447
+    $res = spip_pg_query($query, $serveur, $requeter);
448
+
449
+    return $res;
450 450
 }
451 451
 
452 452
 
453 453
 function spip_pg_explain($query, $serveur = '', $requeter = true) {
454
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
455
-		return [];
456
-	}
457
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
458
-	$prefixe = $connexion['prefixe'];
459
-	$link = $connexion['link'];
460
-	if (preg_match('/\s(SET|VALUES|WHERE)\s/i', $query, $regs)) {
461
-		$suite = strstr($query, (string) $regs[0]);
462
-		$query = substr($query, 0, -strlen($suite));
463
-	} else {
464
-		$suite = '';
465
-	}
466
-	$query = 'EXPLAIN ' . preg_replace('/([,\s])spip_/', '\1' . $prefixe . '_', $query) . $suite;
467
-
468
-	if (!$requeter) {
469
-		return $query;
470
-	}
471
-	$r = spip_pg_query_simple($link, $query);
472
-
473
-	return spip_pg_fetch($r, null, $serveur);
454
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
455
+        return [];
456
+    }
457
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
458
+    $prefixe = $connexion['prefixe'];
459
+    $link = $connexion['link'];
460
+    if (preg_match('/\s(SET|VALUES|WHERE)\s/i', $query, $regs)) {
461
+        $suite = strstr($query, (string) $regs[0]);
462
+        $query = substr($query, 0, -strlen($suite));
463
+    } else {
464
+        $suite = '';
465
+    }
466
+    $query = 'EXPLAIN ' . preg_replace('/([,\s])spip_/', '\1' . $prefixe . '_', $query) . $suite;
467
+
468
+    if (!$requeter) {
469
+        return $query;
470
+    }
471
+    $r = spip_pg_query_simple($link, $query);
472
+
473
+    return spip_pg_fetch($r, null, $serveur);
474 474
 }
475 475
 
476 476
 
@@ -489,92 +489,92 @@  discard block
 block discarded – undo
489 489
  *     - False en cas d'erreur.
490 490
  **/
491 491
 function spip_pg_selectdb($db, $serveur = '', $requeter = true) {
492
-	// se connecter a la base indiquee
493
-	// avec les identifiants connus
494
-	$index = $serveur ? strtolower($serveur) : 0;
495
-
496
-	if ($link = spip_connect_db('', '', '', '', $db, 'pg', '', '')) {
497
-		if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
498
-			return $db;
499
-		}
500
-	} else {
501
-		return false;
502
-	}
492
+    // se connecter a la base indiquee
493
+    // avec les identifiants connus
494
+    $index = $serveur ? strtolower($serveur) : 0;
495
+
496
+    if ($link = spip_connect_db('', '', '', '', $db, 'pg', '', '')) {
497
+        if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
498
+            return $db;
499
+        }
500
+    } else {
501
+        return false;
502
+    }
503 503
 }
504 504
 
505 505
 // Qu'une seule base pour le moment
506 506
 
507 507
 function spip_pg_listdbs($serveur) {
508
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
509
-	$link = $connexion['link'];
510
-	$dbs = [];
511
-	$res = spip_pg_query_simple($link, 'select * From pg_database');
512
-	while ($row = pg_fetch_array($res, null, PGSQL_NUM)) {
513
-		$dbs[] = reset($row);
514
-	}
515
-
516
-	return $dbs;
508
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
509
+    $link = $connexion['link'];
510
+    $dbs = [];
511
+    $res = spip_pg_query_simple($link, 'select * From pg_database');
512
+    while ($row = pg_fetch_array($res, null, PGSQL_NUM)) {
513
+        $dbs[] = reset($row);
514
+    }
515
+
516
+    return $dbs;
517 517
 }
518 518
 
519 519
 function spip_pg_select(
520
-	$select,
521
-	$from,
522
-	$where = '',
523
-	$groupby = [],
524
-	$orderby = '',
525
-	$limit = '',
526
-	$having = '',
527
-	$serveur = '',
528
-	$requeter = true
520
+    $select,
521
+    $from,
522
+    $where = '',
523
+    $groupby = [],
524
+    $orderby = '',
525
+    $limit = '',
526
+    $having = '',
527
+    $serveur = '',
528
+    $requeter = true
529 529
 ) {
530 530
 
531
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
532
-	$prefixe = $connexion['prefixe'];
533
-	$link = $connexion['link'];
534
-	$db = $connexion['db'];
535
-
536
-	$limit = preg_match('/^\s*(([0-9]+),)?\s*([0-9]+)\s*$/', $limit, $limatch);
537
-	if ($limit) {
538
-		$offset = $limatch[2];
539
-		$count = $limatch[3];
540
-	}
541
-
542
-	$select = spip_pg_frommysql($select);
543
-
544
-	// si pas de tri explicitement demande, le GROUP BY ne
545
-	// contient que la clef primaire.
546
-	// lui ajouter alors le champ de tri par defaut
547
-	if (preg_match('/FIELD\(([a-z]+\.[a-z]+),/i', $orderby[0], $groupbyplus)) {
548
-		$groupby[] = $groupbyplus[1];
549
-	}
550
-
551
-	$orderby = spip_pg_orderby($orderby, $select);
552
-
553
-	if ($having) {
554
-		if (is_array($having)) {
555
-			$having = join("\n\tAND ", array_map('calculer_pg_where', $having));
556
-		}
557
-	}
558
-	$from = spip_pg_from($from, $prefixe);
559
-	$query = 'SELECT ' . $select
560
-		. (!$from ? '' : "\nFROM $from")
561
-		. (!$where ? '' : ("\nWHERE " . (!is_array($where) ? calculer_pg_where($where) : (join(
562
-			"\n\tAND ",
563
-			array_map('calculer_pg_where', $where)
564
-		)))))
565
-		. spip_pg_groupby($groupby, $from, $select)
566
-		. (!$having ? '' : "\nHAVING $having")
567
-		. ($orderby ? ("\nORDER BY $orderby") : '')
568
-		. (!$limit ? '' : (" LIMIT $count" . (!$offset ? '' : " OFFSET $offset")));
569
-
570
-	// renvoyer la requete inerte si demandee
571
-	if ($requeter === false) {
572
-		return $query;
573
-	}
574
-
575
-	$r = spip_pg_trace_query($query, $serveur);
576
-
577
-	return $r ?: $query;
531
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
532
+    $prefixe = $connexion['prefixe'];
533
+    $link = $connexion['link'];
534
+    $db = $connexion['db'];
535
+
536
+    $limit = preg_match('/^\s*(([0-9]+),)?\s*([0-9]+)\s*$/', $limit, $limatch);
537
+    if ($limit) {
538
+        $offset = $limatch[2];
539
+        $count = $limatch[3];
540
+    }
541
+
542
+    $select = spip_pg_frommysql($select);
543
+
544
+    // si pas de tri explicitement demande, le GROUP BY ne
545
+    // contient que la clef primaire.
546
+    // lui ajouter alors le champ de tri par defaut
547
+    if (preg_match('/FIELD\(([a-z]+\.[a-z]+),/i', $orderby[0], $groupbyplus)) {
548
+        $groupby[] = $groupbyplus[1];
549
+    }
550
+
551
+    $orderby = spip_pg_orderby($orderby, $select);
552
+
553
+    if ($having) {
554
+        if (is_array($having)) {
555
+            $having = join("\n\tAND ", array_map('calculer_pg_where', $having));
556
+        }
557
+    }
558
+    $from = spip_pg_from($from, $prefixe);
559
+    $query = 'SELECT ' . $select
560
+        . (!$from ? '' : "\nFROM $from")
561
+        . (!$where ? '' : ("\nWHERE " . (!is_array($where) ? calculer_pg_where($where) : (join(
562
+            "\n\tAND ",
563
+            array_map('calculer_pg_where', $where)
564
+        )))))
565
+        . spip_pg_groupby($groupby, $from, $select)
566
+        . (!$having ? '' : "\nHAVING $having")
567
+        . ($orderby ? ("\nORDER BY $orderby") : '')
568
+        . (!$limit ? '' : (" LIMIT $count" . (!$offset ? '' : " OFFSET $offset")));
569
+
570
+    // renvoyer la requete inerte si demandee
571
+    if ($requeter === false) {
572
+        return $query;
573
+    }
574
+
575
+    $r = spip_pg_trace_query($query, $serveur);
576
+
577
+    return $r ?: $query;
578 578
 ;
579 579
 }
580 580
 
@@ -582,26 +582,26 @@  discard block
 block discarded – undo
582 582
 // car le reste de la requete utilise les alias (AS) systematiquement
583 583
 
584 584
 function spip_pg_from($from, $prefixe) {
585
-	if (is_array($from)) {
586
-		$from = spip_pg_select_as($from);
587
-	}
585
+    if (is_array($from)) {
586
+        $from = spip_pg_select_as($from);
587
+    }
588 588
 
589
-	return !$prefixe ? $from : preg_replace('/(\b)spip_/', '\1' . $prefixe . '_', $from);
589
+    return !$prefixe ? $from : preg_replace('/(\b)spip_/', '\1' . $prefixe . '_', $from);
590 590
 }
591 591
 
592 592
 function spip_pg_orderby($order, $select) {
593
-	$res = [];
594
-	$arg = (is_array($order) ? $order : preg_split('/\s*,\s*/', $order));
595
-
596
-	foreach ($arg as $v) {
597
-		if (preg_match('/(case\s+.*?else\s+0\s+end)\s*AS\s+' . $v . '/', $select, $m)) {
598
-			$res[] = $m[1];
599
-		} else {
600
-			$res[] = $v;
601
-		}
602
-	}
603
-
604
-	return spip_pg_frommysql(join(',', $res));
593
+    $res = [];
594
+    $arg = (is_array($order) ? $order : preg_split('/\s*,\s*/', $order));
595
+
596
+    foreach ($arg as $v) {
597
+        if (preg_match('/(case\s+.*?else\s+0\s+end)\s*AS\s+' . $v . '/', $select, $m)) {
598
+            $res[] = $m[1];
599
+        } else {
600
+            $res[] = $v;
601
+        }
602
+    }
603
+
604
+    return spip_pg_frommysql(join(',', $res));
605 605
 }
606 606
 
607 607
 // Conversion a l'arrach' des jointures MySQL en jointures PG
@@ -609,56 +609,56 @@  discard block
 block discarded – undo
609 609
 // et pour enlever les repetitions (sans incidence de perf, mais ca fait sale)
610 610
 
611 611
 function spip_pg_groupby($groupby, $from, $select) {
612
-	$join = strpos($from, ',');
613
-	// ismplifier avant de decouper
614
-	if (is_string($select)) { // fct SQL sur colonne et constante apostrophee ==> la colonne
615
-	$select = preg_replace('/\w+\(\s*([^(),\']*),\s*\'[^\']*\'[^)]*\)/', '\\1', $select);
616
-	}
617
-
618
-	if ($join or $groupby) {
619
-		$join = is_array($select) ? $select : explode(', ', $select);
620
-	}
621
-	if ($join) {
622
-		// enlever les 0 as points, '', ...
623
-		foreach ($join as $k => $v) {
624
-			$v = str_replace('DISTINCT ', '', $v);
625
-			// fct SQL sur colonne et constante apostrophee ==> la colonne
626
-			$v = preg_replace('/\w+\(\s*([^(),\']*),\s*\'[^\']*\'[^)]*\)/', '\\1', $v);
627
-			$v = preg_replace('/CAST\(\s*([^(),\' ]*\s+)as\s*\w+\)/', '\\1', $v);
628
-			// resultat d'agregat ne sont pas a mettre dans le groupby
629
-			$v = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)(\s*AS\s+\w+)\s*,?/i', '', $v);
630
-			// idem sans AS (fetch numerique)
631
-			$v = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)\s*,?/i', '', $v);
632
-			// des AS simples : on garde le cote droit du AS
633
-			$v = preg_replace('/^.*\sAS\s+(\w+)\s*$/i', '\\1', $v);
634
-			// ne reste plus que les vrais colonnes, ou des constantes a virer
635
-			if (preg_match(',^[\'"],', $v) or is_numeric($v)) {
636
-				unset($join[$k]);
637
-			} else {
638
-				$join[$k] = trim($v);
639
-			}
640
-		}
641
-		$join = array_diff($join, ['']);
642
-		$join = implode(',', $join);
643
-	}
644
-	if (is_array($groupby)) {
645
-		$groupby = join(',', $groupby);
646
-	}
647
-	if ($join) {
648
-		$groupby = $groupby ? "$groupby, $join" : $join;
649
-	}
650
-	if (!$groupby) {
651
-		return '';
652
-	}
653
-
654
-	$groupby = spip_pg_frommysql($groupby);
655
-	// Ne pas mettre dans le Group-By des valeurs numeriques
656
-	// issue de prepare_recherche
657
-	$groupby = preg_replace('/^\s*\d+\s+AS\s+\w+\s*,?\s*/i', '', $groupby);
658
-	$groupby = preg_replace('/,\s*\d+\s+AS\s+\w+\s*/i', '', $groupby);
659
-	$groupby = preg_replace('/\s+AS\s+\w+\s*/i', '', $groupby);
660
-
661
-	return "\nGROUP BY $groupby";
612
+    $join = strpos($from, ',');
613
+    // ismplifier avant de decouper
614
+    if (is_string($select)) { // fct SQL sur colonne et constante apostrophee ==> la colonne
615
+    $select = preg_replace('/\w+\(\s*([^(),\']*),\s*\'[^\']*\'[^)]*\)/', '\\1', $select);
616
+    }
617
+
618
+    if ($join or $groupby) {
619
+        $join = is_array($select) ? $select : explode(', ', $select);
620
+    }
621
+    if ($join) {
622
+        // enlever les 0 as points, '', ...
623
+        foreach ($join as $k => $v) {
624
+            $v = str_replace('DISTINCT ', '', $v);
625
+            // fct SQL sur colonne et constante apostrophee ==> la colonne
626
+            $v = preg_replace('/\w+\(\s*([^(),\']*),\s*\'[^\']*\'[^)]*\)/', '\\1', $v);
627
+            $v = preg_replace('/CAST\(\s*([^(),\' ]*\s+)as\s*\w+\)/', '\\1', $v);
628
+            // resultat d'agregat ne sont pas a mettre dans le groupby
629
+            $v = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)(\s*AS\s+\w+)\s*,?/i', '', $v);
630
+            // idem sans AS (fetch numerique)
631
+            $v = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)\s*,?/i', '', $v);
632
+            // des AS simples : on garde le cote droit du AS
633
+            $v = preg_replace('/^.*\sAS\s+(\w+)\s*$/i', '\\1', $v);
634
+            // ne reste plus que les vrais colonnes, ou des constantes a virer
635
+            if (preg_match(',^[\'"],', $v) or is_numeric($v)) {
636
+                unset($join[$k]);
637
+            } else {
638
+                $join[$k] = trim($v);
639
+            }
640
+        }
641
+        $join = array_diff($join, ['']);
642
+        $join = implode(',', $join);
643
+    }
644
+    if (is_array($groupby)) {
645
+        $groupby = join(',', $groupby);
646
+    }
647
+    if ($join) {
648
+        $groupby = $groupby ? "$groupby, $join" : $join;
649
+    }
650
+    if (!$groupby) {
651
+        return '';
652
+    }
653
+
654
+    $groupby = spip_pg_frommysql($groupby);
655
+    // Ne pas mettre dans le Group-By des valeurs numeriques
656
+    // issue de prepare_recherche
657
+    $groupby = preg_replace('/^\s*\d+\s+AS\s+\w+\s*,?\s*/i', '', $groupby);
658
+    $groupby = preg_replace('/,\s*\d+\s+AS\s+\w+\s*/i', '', $groupby);
659
+    $groupby = preg_replace('/\s+AS\s+\w+\s*/i', '', $groupby);
660
+
661
+    return "\nGROUP BY $groupby";
662 662
 }
663 663
 
664 664
 // Conversion des operateurs MySQL en PG
@@ -669,492 +669,492 @@  discard block
 block discarded – undo
669 669
 // A ameliorer.
670 670
 
671 671
 function spip_pg_frommysql($arg) {
672
-	if (is_array($arg)) {
673
-		$arg = join(', ', $arg);
674
-	}
675
-
676
-	$res = spip_pg_fromfield($arg);
677
-
678
-	$res = preg_replace('/\brand[(][)]/i', 'random()', $res);
679
-
680
-	$res = preg_replace(
681
-		'/\b0\.0[+]([a-zA-Z0-9_.]+)\s*/',
682
-		'CAST(substring(\1, \'^ *[0-9.]+\') as float)',
683
-		$res
684
-	);
685
-	$res = preg_replace(
686
-		'/\b0[+]([a-zA-Z0-9_.]+)\s*/',
687
-		'CAST(substring(\1, \'^ *[0-9]+\') as int)',
688
-		$res
689
-	);
690
-	$res = preg_replace(
691
-		'/\bconv[(]([^,]*)[^)]*[)]/i',
692
-		'CAST(substring(\1, \'^ *[0-9]+\') as int)',
693
-		$res
694
-	);
695
-
696
-	$res = preg_replace(
697
-		'/UNIX_TIMESTAMP\s*[(]\s*[)]/',
698
-		' EXTRACT(epoch FROM NOW())',
699
-		$res
700
-	);
701
-
702
-	// la fonction md5(integer) n'est pas connu en pg
703
-	// il faut donc forcer les types en text (cas de md5(id_article))
704
-	$res = preg_replace(
705
-		'/md5\s*[(]([^)]*)[)]/i',
706
-		'MD5(CAST(\1 AS text))',
707
-		$res
708
-	);
709
-
710
-	$res = preg_replace(
711
-		'/UNIX_TIMESTAMP\s*[(]([^)]*)[)]/',
712
-		' EXTRACT(epoch FROM \1)',
713
-		$res
714
-	);
715
-
716
-	$res = preg_replace(
717
-		'/\bDAYOFMONTH\s*[(]([^()]*([(][^()]*[)][^()]*)*[^)]*)[)]/',
718
-		' EXTRACT(day FROM \1)',
719
-		$res
720
-	);
721
-
722
-	$res = preg_replace(
723
-		'/\bMONTH\s*[(]([^()]*([(][^)]*[)][^()]*)*[^)]*)[)]/',
724
-		' EXTRACT(month FROM \1)',
725
-		$res
726
-	);
727
-
728
-	$res = preg_replace(
729
-		'/\bYEAR\s*[(]([^()]*([(][^)]*[)][^()]*)*[^)]*)[)]/',
730
-		' EXTRACT(year FROM \1)',
731
-		$res
732
-	);
733
-
734
-	$res = preg_replace(
735
-		'/TO_DAYS\s*[(]([^()]*([(][^)]*[)][()]*)*)[)]/',
736
-		' EXTRACT(day FROM \1 - \'0001-01-01\')',
737
-		$res
738
-	);
739
-
740
-	$res = preg_replace('/(EXTRACT[(][^ ]* FROM *)"([^"]*)"/', '\1\'\2\'', $res);
741
-
742
-	$res = preg_replace('/DATE_FORMAT\s*[(]([^,]*),\s*\'%Y%m%d\'[)]/', 'to_char(\1, \'YYYYMMDD\')', $res);
743
-
744
-	$res = preg_replace('/DATE_FORMAT\s*[(]([^,]*),\s*\'%Y%m\'[)]/', 'to_char(\1, \'YYYYMM\')', $res);
745
-
746
-	$res = preg_replace('/DATE_SUB\s*[(]([^,]*),/', '(\1 -', $res);
747
-	$res = preg_replace('/DATE_ADD\s*[(]([^,]*),/', '(\1 +', $res);
748
-	$res = preg_replace('/INTERVAL\s+(\d+\s+\w+)/', 'INTERVAL \'\1\'', $res);
749
-	$res = preg_replace('/([+<>-]=?)\s*(\'\d+-\d+-\d+\s+\d+:\d+(:\d+)\')/', '\1 timestamp \2', $res);
750
-	$res = preg_replace('/(\'\d+-\d+-\d+\s+\d+:\d+:\d+\')\s*([+<>-]=?)/', 'timestamp \1 \2', $res);
751
-
752
-	$res = preg_replace('/([+<>-]=?)\s*(\'\d+-\d+-\d+\')/', '\1 timestamp \2', $res);
753
-	$res = preg_replace('/(\'\d+-\d+-\d+\')\s*([+<>-]=?)/', 'timestamp \1 \2', $res);
754
-
755
-	$res = preg_replace('/(timestamp .\d+)-00-/', '\1-01-', $res);
756
-	$res = preg_replace('/(timestamp .\d+-\d+)-00/', '\1-01', $res);
672
+    if (is_array($arg)) {
673
+        $arg = join(', ', $arg);
674
+    }
675
+
676
+    $res = spip_pg_fromfield($arg);
677
+
678
+    $res = preg_replace('/\brand[(][)]/i', 'random()', $res);
679
+
680
+    $res = preg_replace(
681
+        '/\b0\.0[+]([a-zA-Z0-9_.]+)\s*/',
682
+        'CAST(substring(\1, \'^ *[0-9.]+\') as float)',
683
+        $res
684
+    );
685
+    $res = preg_replace(
686
+        '/\b0[+]([a-zA-Z0-9_.]+)\s*/',
687
+        'CAST(substring(\1, \'^ *[0-9]+\') as int)',
688
+        $res
689
+    );
690
+    $res = preg_replace(
691
+        '/\bconv[(]([^,]*)[^)]*[)]/i',
692
+        'CAST(substring(\1, \'^ *[0-9]+\') as int)',
693
+        $res
694
+    );
695
+
696
+    $res = preg_replace(
697
+        '/UNIX_TIMESTAMP\s*[(]\s*[)]/',
698
+        ' EXTRACT(epoch FROM NOW())',
699
+        $res
700
+    );
701
+
702
+    // la fonction md5(integer) n'est pas connu en pg
703
+    // il faut donc forcer les types en text (cas de md5(id_article))
704
+    $res = preg_replace(
705
+        '/md5\s*[(]([^)]*)[)]/i',
706
+        'MD5(CAST(\1 AS text))',
707
+        $res
708
+    );
709
+
710
+    $res = preg_replace(
711
+        '/UNIX_TIMESTAMP\s*[(]([^)]*)[)]/',
712
+        ' EXTRACT(epoch FROM \1)',
713
+        $res
714
+    );
715
+
716
+    $res = preg_replace(
717
+        '/\bDAYOFMONTH\s*[(]([^()]*([(][^()]*[)][^()]*)*[^)]*)[)]/',
718
+        ' EXTRACT(day FROM \1)',
719
+        $res
720
+    );
721
+
722
+    $res = preg_replace(
723
+        '/\bMONTH\s*[(]([^()]*([(][^)]*[)][^()]*)*[^)]*)[)]/',
724
+        ' EXTRACT(month FROM \1)',
725
+        $res
726
+    );
727
+
728
+    $res = preg_replace(
729
+        '/\bYEAR\s*[(]([^()]*([(][^)]*[)][^()]*)*[^)]*)[)]/',
730
+        ' EXTRACT(year FROM \1)',
731
+        $res
732
+    );
733
+
734
+    $res = preg_replace(
735
+        '/TO_DAYS\s*[(]([^()]*([(][^)]*[)][()]*)*)[)]/',
736
+        ' EXTRACT(day FROM \1 - \'0001-01-01\')',
737
+        $res
738
+    );
739
+
740
+    $res = preg_replace('/(EXTRACT[(][^ ]* FROM *)"([^"]*)"/', '\1\'\2\'', $res);
741
+
742
+    $res = preg_replace('/DATE_FORMAT\s*[(]([^,]*),\s*\'%Y%m%d\'[)]/', 'to_char(\1, \'YYYYMMDD\')', $res);
743
+
744
+    $res = preg_replace('/DATE_FORMAT\s*[(]([^,]*),\s*\'%Y%m\'[)]/', 'to_char(\1, \'YYYYMM\')', $res);
745
+
746
+    $res = preg_replace('/DATE_SUB\s*[(]([^,]*),/', '(\1 -', $res);
747
+    $res = preg_replace('/DATE_ADD\s*[(]([^,]*),/', '(\1 +', $res);
748
+    $res = preg_replace('/INTERVAL\s+(\d+\s+\w+)/', 'INTERVAL \'\1\'', $res);
749
+    $res = preg_replace('/([+<>-]=?)\s*(\'\d+-\d+-\d+\s+\d+:\d+(:\d+)\')/', '\1 timestamp \2', $res);
750
+    $res = preg_replace('/(\'\d+-\d+-\d+\s+\d+:\d+:\d+\')\s*([+<>-]=?)/', 'timestamp \1 \2', $res);
751
+
752
+    $res = preg_replace('/([+<>-]=?)\s*(\'\d+-\d+-\d+\')/', '\1 timestamp \2', $res);
753
+    $res = preg_replace('/(\'\d+-\d+-\d+\')\s*([+<>-]=?)/', 'timestamp \1 \2', $res);
754
+
755
+    $res = preg_replace('/(timestamp .\d+)-00-/', '\1-01-', $res);
756
+    $res = preg_replace('/(timestamp .\d+-\d+)-00/', '\1-01', $res);
757 757
 # correct en theorie mais produit des debordements arithmetiques
758 758
 #	$res = preg_replace("/(EXTRACT[(][^ ]* FROM *)(timestamp *'[^']*' *[+-] *timestamp *'[^']*') *[)]/", '\2', $res);
759
-	$res = preg_replace("/(EXTRACT[(][^ ]* FROM *)('[^']*')/", '\1 timestamp \2', $res);
760
-	$res = preg_replace('/\sLIKE\s+/', ' ILIKE ', $res);
759
+    $res = preg_replace("/(EXTRACT[(][^ ]* FROM *)('[^']*')/", '\1 timestamp \2', $res);
760
+    $res = preg_replace('/\sLIKE\s+/', ' ILIKE ', $res);
761 761
 
762
-	return str_replace('REGEXP', '~', $res);
762
+    return str_replace('REGEXP', '~', $res);
763 763
 }
764 764
 
765 765
 function spip_pg_fromfield($arg) {
766
-	while (preg_match('/^(.*?)FIELD\s*\(([^,]*)((,[^,)]*)*)\)/', $arg, $m)) {
767
-		preg_match_all('/,([^,]*)/', $m[3], $r, PREG_PATTERN_ORDER);
768
-		$res = '';
769
-		$n = 0;
770
-		$index = $m[2];
771
-		foreach ($r[1] as $v) {
772
-			$n++;
773
-			$res .= "\nwhen $index=$v then $n";
774
-		}
775
-		$arg = $m[1] . "case $res else 0 end "
776
-			. substr($arg, strlen($m[0]));
777
-	}
778
-
779
-	return $arg;
766
+    while (preg_match('/^(.*?)FIELD\s*\(([^,]*)((,[^,)]*)*)\)/', $arg, $m)) {
767
+        preg_match_all('/,([^,]*)/', $m[3], $r, PREG_PATTERN_ORDER);
768
+        $res = '';
769
+        $n = 0;
770
+        $index = $m[2];
771
+        foreach ($r[1] as $v) {
772
+            $n++;
773
+            $res .= "\nwhen $index=$v then $n";
774
+        }
775
+        $arg = $m[1] . "case $res else 0 end "
776
+            . substr($arg, strlen($m[0]));
777
+    }
778
+
779
+    return $arg;
780 780
 }
781 781
 
782 782
 function calculer_pg_where($v) {
783
-	if (!is_array($v)) {
784
-		return spip_pg_frommysql($v);
785
-	}
786
-
787
-	$op = str_replace('REGEXP', '~', array_shift($v));
788
-	if (!($n = count($v))) {
789
-		return $op;
790
-	} else {
791
-		$arg = calculer_pg_where(array_shift($v));
792
-		if ($n == 1) {
793
-			return "$op($arg)";
794
-		} else {
795
-			$arg2 = calculer_pg_where(array_shift($v));
796
-			if ($n == 2) {
797
-				return "($arg $op $arg2)";
798
-			} else {
799
-				return "($arg $op ($arg2) : $v[0])";
800
-			}
801
-		}
802
-	}
783
+    if (!is_array($v)) {
784
+        return spip_pg_frommysql($v);
785
+    }
786
+
787
+    $op = str_replace('REGEXP', '~', array_shift($v));
788
+    if (!($n = count($v))) {
789
+        return $op;
790
+    } else {
791
+        $arg = calculer_pg_where(array_shift($v));
792
+        if ($n == 1) {
793
+            return "$op($arg)";
794
+        } else {
795
+            $arg2 = calculer_pg_where(array_shift($v));
796
+            if ($n == 2) {
797
+                return "($arg $op $arg2)";
798
+            } else {
799
+                return "($arg $op ($arg2) : $v[0])";
800
+            }
801
+        }
802
+    }
803 803
 }
804 804
 
805 805
 
806 806
 function calculer_pg_expression($expression, $v, $join = 'AND') {
807
-	if (empty($v)) {
808
-		return '';
809
-	}
807
+    if (empty($v)) {
808
+        return '';
809
+    }
810 810
 
811
-	$exp = "\n$expression ";
811
+    $exp = "\n$expression ";
812 812
 
813
-	if (!is_array($v)) {
814
-		$v = [$v];
815
-	}
813
+    if (!is_array($v)) {
814
+        $v = [$v];
815
+    }
816 816
 
817
-	if (strtoupper($join) === 'AND') {
818
-		return $exp . join("\n\t$join ", array_map('calculer_pg_where', $v));
819
-	} else {
820
-		return $exp . join($join, $v);
821
-	}
817
+    if (strtoupper($join) === 'AND') {
818
+        return $exp . join("\n\t$join ", array_map('calculer_pg_where', $v));
819
+    } else {
820
+        return $exp . join($join, $v);
821
+    }
822 822
 }
823 823
 
824 824
 function spip_pg_select_as($args) {
825
-	$argsas = '';
826
-	foreach ($args as $k => $v) {
827
-		if (substr($k, -1) == '@') {
828
-			// c'est une jointure qui se refere au from precedent
829
-			// pas de virgule
830
-			$argsas .= '  ' . $v;
831
-		} else {
832
-			$as = '';
833
-			//  spip_log("$k : $v", _LOG_DEBUG);
834
-			if (!is_numeric($k)) {
835
-				if (preg_match('/\.(.*)$/', $k, $r)) {
836
-					$v = $k;
837
-				} elseif ($v != $k) {
838
-					$p = strpos($v, ' ');
839
-					if ($p) {
840
-						$v = substr($v, 0, $p) . " AS $k" . substr($v, $p);
841
-					} else {
842
-						$as = " AS $k";
843
-					}
844
-				}
845
-			}
846
-			// spip_log("subs $k : $v avec $as", _LOG_DEBUG);
847
-			// if (strpos($v, 'JOIN') === false)  $argsas .= ', ';
848
-			$argsas .= ', ' . $v . $as;
849
-		}
850
-	}
851
-
852
-	return substr($argsas, 2);
825
+    $argsas = '';
826
+    foreach ($args as $k => $v) {
827
+        if (substr($k, -1) == '@') {
828
+            // c'est une jointure qui se refere au from precedent
829
+            // pas de virgule
830
+            $argsas .= '  ' . $v;
831
+        } else {
832
+            $as = '';
833
+            //  spip_log("$k : $v", _LOG_DEBUG);
834
+            if (!is_numeric($k)) {
835
+                if (preg_match('/\.(.*)$/', $k, $r)) {
836
+                    $v = $k;
837
+                } elseif ($v != $k) {
838
+                    $p = strpos($v, ' ');
839
+                    if ($p) {
840
+                        $v = substr($v, 0, $p) . " AS $k" . substr($v, $p);
841
+                    } else {
842
+                        $as = " AS $k";
843
+                    }
844
+                }
845
+            }
846
+            // spip_log("subs $k : $v avec $as", _LOG_DEBUG);
847
+            // if (strpos($v, 'JOIN') === false)  $argsas .= ', ';
848
+            $argsas .= ', ' . $v . $as;
849
+        }
850
+    }
851
+
852
+    return substr($argsas, 2);
853 853
 }
854 854
 
855 855
 function spip_pg_fetch($res, $t = '', $serveur = '', $requeter = true) {
856 856
 
857
-	if ($res) {
858
-		$res = pg_fetch_array($res, null, PGSQL_ASSOC);
859
-	}
857
+    if ($res) {
858
+        $res = pg_fetch_array($res, null, PGSQL_ASSOC);
859
+    }
860 860
 
861
-	return $res;
861
+    return $res;
862 862
 }
863 863
 
864 864
 function spip_pg_seek($r, $row_number, $serveur = '', $requeter = true) {
865
-	if ($r) {
866
-		return pg_result_seek($r, $row_number);
867
-	}
865
+    if ($r) {
866
+        return pg_result_seek($r, $row_number);
867
+    }
868 868
 }
869 869
 
870 870
 
871 871
 function spip_pg_countsel(
872
-	$from = [],
873
-	$where = [],
874
-	$groupby = [],
875
-	$having = [],
876
-	$serveur = '',
877
-	$requeter = true
872
+    $from = [],
873
+    $where = [],
874
+    $groupby = [],
875
+    $having = [],
876
+    $serveur = '',
877
+    $requeter = true
878 878
 ) {
879
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
880
-	$r = spip_pg_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
881
-	if (!$requeter) {
882
-		return $r;
883
-	}
884
-	if (!is_resource($r)) {
885
-		return 0;
886
-	}
887
-	[$c] = pg_fetch_array($r, null, PGSQL_NUM);
888
-
889
-	return $c;
879
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
880
+    $r = spip_pg_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
881
+    if (!$requeter) {
882
+        return $r;
883
+    }
884
+    if (!is_resource($r)) {
885
+        return 0;
886
+    }
887
+    [$c] = pg_fetch_array($r, null, PGSQL_NUM);
888
+
889
+    return $c;
890 890
 }
891 891
 
892 892
 function spip_pg_count($res, $serveur = '', $requeter = true) {
893
-	return !$res ? 0 : pg_numrows($res);
893
+    return !$res ? 0 : pg_numrows($res);
894 894
 }
895 895
 
896 896
 function spip_pg_free($res, $serveur = '', $requeter = true) {
897
-	// rien a faire en postgres
897
+    // rien a faire en postgres
898 898
 }
899 899
 
900 900
 function spip_pg_delete($table, $where = '', $serveur = '', $requeter = true) {
901 901
 
902
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
903
-	$table = prefixer_table_spip($table, $connexion['prefixe']);
902
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
903
+    $table = prefixer_table_spip($table, $connexion['prefixe']);
904 904
 
905
-	$query = calculer_pg_expression('DELETE FROM', $table, ',')
906
-		. calculer_pg_expression('WHERE', $where, 'AND');
905
+    $query = calculer_pg_expression('DELETE FROM', $table, ',')
906
+        . calculer_pg_expression('WHERE', $where, 'AND');
907 907
 
908
-	// renvoyer la requete inerte si demandee
909
-	if (!$requeter) {
910
-		return $query;
911
-	}
908
+    // renvoyer la requete inerte si demandee
909
+    if (!$requeter) {
910
+        return $query;
911
+    }
912 912
 
913
-	$res = spip_pg_trace_query($query, $serveur);
914
-	if ($res) {
915
-		return pg_affected_rows($res);
916
-	} else {
917
-		return false;
918
-	}
913
+    $res = spip_pg_trace_query($query, $serveur);
914
+    if ($res) {
915
+        return pg_affected_rows($res);
916
+    } else {
917
+        return false;
918
+    }
919 919
 }
920 920
 
921 921
 function spip_pg_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
922
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
923
-	$prefixe = $connexion['prefixe'];
924
-	$link = $connexion['link'];
925
-
926
-	if (!$desc) {
927
-		$desc = description_table($table, $serveur);
928
-	}
929
-	$seq = spip_pg_sequence($table, true);
930
-	// si pas de cle primaire dans l'insertion, renvoyer curval
931
-	if (!preg_match(",\b$seq\b,", $champs)) {
932
-		$seq = spip_pg_sequence($table);
933
-		$seq = prefixer_table_spip($seq, $prefixe);
934
-		$seq = "currval('$seq')";
935
-	}
936
-
937
-	$table = prefixer_table_spip($table, $prefixe);
938
-	$ret = !$seq ? '' : (" RETURNING $seq");
939
-	$ins = (strlen($champs) < 3)
940
-		? ' DEFAULT VALUES'
941
-		: "$champs VALUES $valeurs";
942
-	$q = "INSERT INTO $table $ins $ret";
943
-	if (!$requeter) {
944
-		return $q;
945
-	}
946
-	$connexion['last'] = $q;
947
-	$r = spip_pg_query_simple($link, $q);
922
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
923
+    $prefixe = $connexion['prefixe'];
924
+    $link = $connexion['link'];
925
+
926
+    if (!$desc) {
927
+        $desc = description_table($table, $serveur);
928
+    }
929
+    $seq = spip_pg_sequence($table, true);
930
+    // si pas de cle primaire dans l'insertion, renvoyer curval
931
+    if (!preg_match(",\b$seq\b,", $champs)) {
932
+        $seq = spip_pg_sequence($table);
933
+        $seq = prefixer_table_spip($seq, $prefixe);
934
+        $seq = "currval('$seq')";
935
+    }
936
+
937
+    $table = prefixer_table_spip($table, $prefixe);
938
+    $ret = !$seq ? '' : (" RETURNING $seq");
939
+    $ins = (strlen($champs) < 3)
940
+        ? ' DEFAULT VALUES'
941
+        : "$champs VALUES $valeurs";
942
+    $q = "INSERT INTO $table $ins $ret";
943
+    if (!$requeter) {
944
+        return $q;
945
+    }
946
+    $connexion['last'] = $q;
947
+    $r = spip_pg_query_simple($link, $q);
948 948
 #	spip_log($q,'pg.'._LOG_DEBUG);
949
-	if ($r) {
950
-		if (!$ret) {
951
-			return 0;
952
-		}
953
-		if ($r2 = pg_fetch_array($r, null, PGSQL_NUM)) {
954
-			return $r2[0];
955
-		}
956
-	}
957
-
958
-	return false;
949
+    if ($r) {
950
+        if (!$ret) {
951
+            return 0;
952
+        }
953
+        if ($r2 = pg_fetch_array($r, null, PGSQL_NUM)) {
954
+            return $r2[0];
955
+        }
956
+    }
957
+
958
+    return false;
959 959
 }
960 960
 
961 961
 function spip_pg_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
962 962
 
963
-	if (!$desc) {
964
-		$desc = description_table($table, $serveur);
965
-	}
966
-	if (!$desc) {
967
-		die("$table insertion sans description");
968
-	}
969
-	$fields = $desc['field'];
970
-
971
-	foreach ($couples as $champ => $val) {
972
-		$couples[$champ] = spip_pg_cite($val, $fields[$champ]);
973
-	}
974
-
975
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
976
-	$couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
977
-
978
-	return spip_pg_insert(
979
-		$table,
980
-		'(' . join(',', array_keys($couples)) . ')',
981
-		'(' . join(',', $couples) . ')',
982
-		$desc,
983
-		$serveur,
984
-		$requeter
985
-	);
963
+    if (!$desc) {
964
+        $desc = description_table($table, $serveur);
965
+    }
966
+    if (!$desc) {
967
+        die("$table insertion sans description");
968
+    }
969
+    $fields = $desc['field'];
970
+
971
+    foreach ($couples as $champ => $val) {
972
+        $couples[$champ] = spip_pg_cite($val, $fields[$champ]);
973
+    }
974
+
975
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
976
+    $couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
977
+
978
+    return spip_pg_insert(
979
+        $table,
980
+        '(' . join(',', array_keys($couples)) . ')',
981
+        '(' . join(',', $couples) . ')',
982
+        $desc,
983
+        $serveur,
984
+        $requeter
985
+    );
986 986
 }
987 987
 
988 988
 
989 989
 function spip_pg_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
990 990
 
991
-	if (!$desc) {
992
-		$desc = description_table($table, $serveur);
993
-	}
994
-	if (!$desc) {
995
-		die("$table insertion sans description");
996
-	}
997
-	$fields = $desc['field'] ?? [];
998
-
999
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1000
-	// une premiere fois pour ajouter maj dans les cles
1001
-	$c = $tab_couples[0] ?? [];
1002
-	$les_cles = spip_pg_ajouter_champs_timestamp($table, $c, $desc, $serveur);
1003
-
1004
-	$cles = '(' . join(',', array_keys($les_cles)) . ')';
1005
-	$valeurs = [];
1006
-	foreach ($tab_couples as $couples) {
1007
-		foreach ($couples as $champ => $val) {
1008
-			$couples[$champ] = spip_pg_cite($val, $fields[$champ]);
1009
-		}
1010
-		// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1011
-		$couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1012
-
1013
-		$valeurs[] = '(' . join(',', $couples) . ')';
1014
-	}
1015
-	$valeurs = implode(', ', $valeurs);
1016
-
1017
-	return spip_pg_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
991
+    if (!$desc) {
992
+        $desc = description_table($table, $serveur);
993
+    }
994
+    if (!$desc) {
995
+        die("$table insertion sans description");
996
+    }
997
+    $fields = $desc['field'] ?? [];
998
+
999
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1000
+    // une premiere fois pour ajouter maj dans les cles
1001
+    $c = $tab_couples[0] ?? [];
1002
+    $les_cles = spip_pg_ajouter_champs_timestamp($table, $c, $desc, $serveur);
1003
+
1004
+    $cles = '(' . join(',', array_keys($les_cles)) . ')';
1005
+    $valeurs = [];
1006
+    foreach ($tab_couples as $couples) {
1007
+        foreach ($couples as $champ => $val) {
1008
+            $couples[$champ] = spip_pg_cite($val, $fields[$champ]);
1009
+        }
1010
+        // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1011
+        $couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1012
+
1013
+        $valeurs[] = '(' . join(',', $couples) . ')';
1014
+    }
1015
+    $valeurs = implode(', ', $valeurs);
1016
+
1017
+    return spip_pg_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
1018 1018
 }
1019 1019
 
1020 1020
 
1021 1021
 function spip_pg_update($table, $couples, $where = '', $desc = '', $serveur = '', $requeter = true) {
1022 1022
 
1023
-	if (!$couples) {
1024
-		return;
1025
-	}
1026
-	$connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1027
-	$table = prefixer_table_spip($table, $connexion['prefixe']);
1023
+    if (!$couples) {
1024
+        return;
1025
+    }
1026
+    $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1027
+    $table = prefixer_table_spip($table, $connexion['prefixe']);
1028 1028
 
1029
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1030
-	$couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1029
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1030
+    $couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1031 1031
 
1032
-	$set = [];
1033
-	foreach ($couples as $champ => $val) {
1034
-		$set[] = $champ . '=' . $val;
1035
-	}
1032
+    $set = [];
1033
+    foreach ($couples as $champ => $val) {
1034
+        $set[] = $champ . '=' . $val;
1035
+    }
1036 1036
 
1037
-	$query = calculer_pg_expression('UPDATE', $table, ',')
1038
-		. calculer_pg_expression('SET', $set, ',')
1039
-		. calculer_pg_expression('WHERE', $where, 'AND');
1037
+    $query = calculer_pg_expression('UPDATE', $table, ',')
1038
+        . calculer_pg_expression('SET', $set, ',')
1039
+        . calculer_pg_expression('WHERE', $where, 'AND');
1040 1040
 
1041
-	// renvoyer la requete inerte si demandee
1042
-	if (!$requeter) {
1043
-		return $query;
1044
-	}
1041
+    // renvoyer la requete inerte si demandee
1042
+    if (!$requeter) {
1043
+        return $query;
1044
+    }
1045 1045
 
1046
-	return spip_pg_trace_query($query, $serveur);
1046
+    return spip_pg_trace_query($query, $serveur);
1047 1047
 }
1048 1048
 
1049 1049
 // idem, mais les valeurs sont des constantes a mettre entre apostrophes
1050 1050
 // sauf les expressions de date lorsqu'il s'agit de fonctions SQL (NOW etc)
1051 1051
 function spip_pg_updateq($table, $couples, $where = '', $desc = [], $serveur = '', $requeter = true) {
1052
-	if (!$couples) {
1053
-		return;
1054
-	}
1055
-	if (!$desc) {
1056
-		$desc = description_table($table, $serveur);
1057
-	}
1058
-	$fields = $desc['field'];
1059
-	foreach ($couples as $k => $val) {
1060
-		$couples[$k] = spip_pg_cite($val, $fields[$k]);
1061
-	}
1062
-
1063
-	return spip_pg_update($table, $couples, $where, $desc, $serveur, $requeter);
1052
+    if (!$couples) {
1053
+        return;
1054
+    }
1055
+    if (!$desc) {
1056
+        $desc = description_table($table, $serveur);
1057
+    }
1058
+    $fields = $desc['field'];
1059
+    foreach ($couples as $k => $val) {
1060
+        $couples[$k] = spip_pg_cite($val, $fields[$k]);
1061
+    }
1062
+
1063
+    return spip_pg_update($table, $couples, $where, $desc, $serveur, $requeter);
1064 1064
 }
1065 1065
 
1066 1066
 
1067 1067
 function spip_pg_replace($table, $values, $desc, $serveur = '', $requeter = true) {
1068
-	if (!$values) {
1069
-		spip_log("replace vide $table", 'pg.' . _LOG_AVERTISSEMENT);
1070
-
1071
-		return 0;
1072
-	}
1073
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1074
-	$prefixe = $connexion['prefixe'];
1075
-	$link = $connexion['link'];
1076
-
1077
-	if (!$desc) {
1078
-		$desc = description_table($table, $serveur);
1079
-	}
1080
-	if (!$desc) {
1081
-		die("$table insertion sans description");
1082
-	}
1083
-	$prim = $desc['key']['PRIMARY KEY'];
1084
-	$ids = preg_split('/,\s*/', $prim);
1085
-	$noprims = $prims = [];
1086
-	foreach ($values as $k => $v) {
1087
-		$values[$k] = $v = spip_pg_cite($v, $desc['field'][$k]);
1088
-
1089
-		if (!in_array($k, $ids)) {
1090
-			$noprims[$k] = "$k=$v";
1091
-		} else {
1092
-			$prims[$k] = "$k=$v";
1093
-		}
1094
-	}
1095
-
1096
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1097
-	$values = spip_pg_ajouter_champs_timestamp($table, $values, $desc, $serveur);
1098
-
1099
-	$where = join(' AND ', $prims);
1100
-	if (!$where) {
1101
-		return spip_pg_insert(
1102
-			$table,
1103
-			'(' . join(',', array_keys($values)) . ')',
1104
-			'(' . join(',', $values) . ')',
1105
-			$desc,
1106
-			$serveur
1107
-		);
1108
-	}
1109
-	$couples = join(',', $noprims);
1110
-
1111
-	$seq = spip_pg_sequence($table);
1112
-	$table = prefixer_table_spip($table, $prefixe);
1113
-	$seq = prefixer_table_spip($seq, $prefixe);
1114
-
1115
-	$connexion['last'] = $q = "UPDATE $table SET $couples WHERE $where";
1116
-	if ($couples) {
1117
-		$couples = spip_pg_query_simple($link, $q);
1068
+    if (!$values) {
1069
+        spip_log("replace vide $table", 'pg.' . _LOG_AVERTISSEMENT);
1070
+
1071
+        return 0;
1072
+    }
1073
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1074
+    $prefixe = $connexion['prefixe'];
1075
+    $link = $connexion['link'];
1076
+
1077
+    if (!$desc) {
1078
+        $desc = description_table($table, $serveur);
1079
+    }
1080
+    if (!$desc) {
1081
+        die("$table insertion sans description");
1082
+    }
1083
+    $prim = $desc['key']['PRIMARY KEY'];
1084
+    $ids = preg_split('/,\s*/', $prim);
1085
+    $noprims = $prims = [];
1086
+    foreach ($values as $k => $v) {
1087
+        $values[$k] = $v = spip_pg_cite($v, $desc['field'][$k]);
1088
+
1089
+        if (!in_array($k, $ids)) {
1090
+            $noprims[$k] = "$k=$v";
1091
+        } else {
1092
+            $prims[$k] = "$k=$v";
1093
+        }
1094
+    }
1095
+
1096
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1097
+    $values = spip_pg_ajouter_champs_timestamp($table, $values, $desc, $serveur);
1098
+
1099
+    $where = join(' AND ', $prims);
1100
+    if (!$where) {
1101
+        return spip_pg_insert(
1102
+            $table,
1103
+            '(' . join(',', array_keys($values)) . ')',
1104
+            '(' . join(',', $values) . ')',
1105
+            $desc,
1106
+            $serveur
1107
+        );
1108
+    }
1109
+    $couples = join(',', $noprims);
1110
+
1111
+    $seq = spip_pg_sequence($table);
1112
+    $table = prefixer_table_spip($table, $prefixe);
1113
+    $seq = prefixer_table_spip($seq, $prefixe);
1114
+
1115
+    $connexion['last'] = $q = "UPDATE $table SET $couples WHERE $where";
1116
+    if ($couples) {
1117
+        $couples = spip_pg_query_simple($link, $q);
1118 1118
 #	  spip_log($q,'pg.'._LOG_DEBUG);
1119
-		if (!$couples) {
1120
-			return false;
1121
-		}
1122
-		$couples = pg_affected_rows($couples);
1123
-	}
1124
-	if (!$couples) {
1125
-		$ret = !$seq ? '' :
1126
-			(" RETURNING nextval('$seq') < $prim");
1127
-		$connexion['last'] = $q = "INSERT INTO $table (" . join(',', array_keys($values)) . ') VALUES (' . join(
1128
-			',',
1129
-			$values
1130
-		) . ")$ret";
1131
-		$couples = spip_pg_query_simple($link, $q);
1132
-		if (!$couples) {
1133
-			return false;
1134
-		} elseif ($ret) {
1135
-			$r = pg_fetch_array($couples, null, PGSQL_NUM);
1136
-			if ($r[0]) {
1137
-				$connexion['last'] = $q = "SELECT setval('$seq', $prim) from $table";
1138
-				// Le code de SPIP met parfois la sequence a 0 (dans l'import)
1139
-				// MySQL n'en dit rien, on fait pareil pour PG
1140
-				$r = @pg_query($link, $q);
1141
-			}
1142
-		}
1143
-	}
1144
-
1145
-	return $couples;
1119
+        if (!$couples) {
1120
+            return false;
1121
+        }
1122
+        $couples = pg_affected_rows($couples);
1123
+    }
1124
+    if (!$couples) {
1125
+        $ret = !$seq ? '' :
1126
+            (" RETURNING nextval('$seq') < $prim");
1127
+        $connexion['last'] = $q = "INSERT INTO $table (" . join(',', array_keys($values)) . ') VALUES (' . join(
1128
+            ',',
1129
+            $values
1130
+        ) . ")$ret";
1131
+        $couples = spip_pg_query_simple($link, $q);
1132
+        if (!$couples) {
1133
+            return false;
1134
+        } elseif ($ret) {
1135
+            $r = pg_fetch_array($couples, null, PGSQL_NUM);
1136
+            if ($r[0]) {
1137
+                $connexion['last'] = $q = "SELECT setval('$seq', $prim) from $table";
1138
+                // Le code de SPIP met parfois la sequence a 0 (dans l'import)
1139
+                // MySQL n'en dit rien, on fait pareil pour PG
1140
+                $r = @pg_query($link, $q);
1141
+            }
1142
+        }
1143
+    }
1144
+
1145
+    return $couples;
1146 1146
 }
1147 1147
 
1148 1148
 
1149 1149
 function spip_pg_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1150
-	$retour = null;
1151
-	// boucler pour traiter chaque requete independemment
1152
-	foreach ($tab_couples as $couples) {
1153
-		$retour = spip_pg_replace($table, $couples, $desc, $serveur, $requeter);
1154
-	}
1155
-
1156
-	// renvoie le dernier id
1157
-	return $retour;
1150
+    $retour = null;
1151
+    // boucler pour traiter chaque requete independemment
1152
+    foreach ($tab_couples as $couples) {
1153
+        $retour = spip_pg_replace($table, $couples, $desc, $serveur, $requeter);
1154
+    }
1155
+
1156
+    // renvoie le dernier id
1157
+    return $retour;
1158 1158
 }
1159 1159
 
1160 1160
 
@@ -1163,149 +1163,149 @@  discard block
 block discarded – undo
1163 1163
 
1164 1164
 function spip_pg_sequence($table, $raw = false) {
1165 1165
 
1166
-	include_spip('base/serial');
1167
-	if (!isset($GLOBALS['tables_principales'][$table])) {
1168
-		return false;
1169
-	}
1170
-	$desc = $GLOBALS['tables_principales'][$table];
1171
-	$prim = @$desc['key']['PRIMARY KEY'];
1172
-	if (
1173
-		!preg_match('/^\w+$/', $prim)
1174
-		or strpos($desc['field'][$prim], 'int') === false
1175
-	) {
1176
-		return '';
1177
-	} else {
1178
-		return $raw ? $prim : $table . '_' . $prim . '_seq';
1179
-	}
1166
+    include_spip('base/serial');
1167
+    if (!isset($GLOBALS['tables_principales'][$table])) {
1168
+        return false;
1169
+    }
1170
+    $desc = $GLOBALS['tables_principales'][$table];
1171
+    $prim = @$desc['key']['PRIMARY KEY'];
1172
+    if (
1173
+        !preg_match('/^\w+$/', $prim)
1174
+        or strpos($desc['field'][$prim], 'int') === false
1175
+    ) {
1176
+        return '';
1177
+    } else {
1178
+        return $raw ? $prim : $table . '_' . $prim . '_seq';
1179
+    }
1180 1180
 }
1181 1181
 
1182 1182
 // Explicite les conversions de Mysql d'une valeur $v de type $t
1183 1183
 // Dans le cas d'un champ date, pas d'apostrophe, c'est une syntaxe ad hoc
1184 1184
 
1185 1185
 function spip_pg_cite($v, $t) {
1186
-	if (is_null($v)) {
1187
-		return 'NULL';
1188
-	} // null php se traduit en NULL SQL
1189
-
1190
-	if (sql_test_date($t)) {
1191
-		if ($v and (strpos('0123456789', (string) $v[0]) === false)) {
1192
-			return spip_pg_frommysql($v);
1193
-		} else {
1194
-			if (strncmp($v, '0000', 4) == 0) {
1195
-				$v = '0001' . substr($v, 4);
1196
-			}
1197
-			if (strpos($v, '-00-00') === 4) {
1198
-				$v = substr($v, 0, 4) . '-01-01' . substr($v, 10);
1199
-			}
1200
-
1201
-			return "timestamp '$v'";
1202
-		}
1203
-	} elseif (!sql_test_int($t)) {
1204
-		return ("'" . pg_escape_string($v) . "'");
1205
-	} elseif (is_numeric($v) or (strpos($v, 'CAST(') === 0)) {
1206
-		return $v;
1207
-	} elseif ($v[0] == '0' and $v[1] !== 'x' and ctype_xdigit(substr($v, 1))) {
1208
-		return substr($v, 1);
1209
-	} else {
1210
-		spip_log("Warning: '$v'  n'est pas de type $t", 'pg.' . _LOG_AVERTISSEMENT);
1211
-
1212
-		return intval($v);
1213
-	}
1186
+    if (is_null($v)) {
1187
+        return 'NULL';
1188
+    } // null php se traduit en NULL SQL
1189
+
1190
+    if (sql_test_date($t)) {
1191
+        if ($v and (strpos('0123456789', (string) $v[0]) === false)) {
1192
+            return spip_pg_frommysql($v);
1193
+        } else {
1194
+            if (strncmp($v, '0000', 4) == 0) {
1195
+                $v = '0001' . substr($v, 4);
1196
+            }
1197
+            if (strpos($v, '-00-00') === 4) {
1198
+                $v = substr($v, 0, 4) . '-01-01' . substr($v, 10);
1199
+            }
1200
+
1201
+            return "timestamp '$v'";
1202
+        }
1203
+    } elseif (!sql_test_int($t)) {
1204
+        return ("'" . pg_escape_string($v) . "'");
1205
+    } elseif (is_numeric($v) or (strpos($v, 'CAST(') === 0)) {
1206
+        return $v;
1207
+    } elseif ($v[0] == '0' and $v[1] !== 'x' and ctype_xdigit(substr($v, 1))) {
1208
+        return substr($v, 1);
1209
+    } else {
1210
+        spip_log("Warning: '$v'  n'est pas de type $t", 'pg.' . _LOG_AVERTISSEMENT);
1211
+
1212
+        return intval($v);
1213
+    }
1214 1214
 }
1215 1215
 
1216 1216
 function spip_pg_hex($v) {
1217
-	return "CAST(x'" . $v . "' as bigint)";
1217
+    return "CAST(x'" . $v . "' as bigint)";
1218 1218
 }
1219 1219
 
1220 1220
 function spip_pg_quote($v, $type = '') {
1221
-	if (!is_array($v)) {
1222
-		return spip_pg_cite($v, $type);
1223
-	}
1224
-	// si c'est un tableau, le parcourir en propageant le type
1225
-	foreach ($v as $k => $r) {
1226
-		$v[$k] = spip_pg_quote($r, $type);
1227
-	}
1228
-
1229
-	return join(',', $v);
1221
+    if (!is_array($v)) {
1222
+        return spip_pg_cite($v, $type);
1223
+    }
1224
+    // si c'est un tableau, le parcourir en propageant le type
1225
+    foreach ($v as $k => $r) {
1226
+        $v[$k] = spip_pg_quote($r, $type);
1227
+    }
1228
+
1229
+    return join(',', $v);
1230 1230
 }
1231 1231
 
1232 1232
 function spip_pg_date_proche($champ, $interval, $unite) {
1233
-	return '('
1234
-	. $champ
1235
-	. (($interval <= 0) ? '>' : '<')
1236
-	. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1237
-	. '('
1238
-	. sql_quote(date('Y-m-d H:i:s'))
1239
-	. ', INTERVAL '
1240
-	. (($interval > 0) ? $interval : (0 - $interval))
1241
-	. ' '
1242
-	. $unite
1243
-	. '))';
1233
+    return '('
1234
+    . $champ
1235
+    . (($interval <= 0) ? '>' : '<')
1236
+    . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1237
+    . '('
1238
+    . sql_quote(date('Y-m-d H:i:s'))
1239
+    . ', INTERVAL '
1240
+    . (($interval > 0) ? $interval : (0 - $interval))
1241
+    . ' '
1242
+    . $unite
1243
+    . '))';
1244 1244
 }
1245 1245
 
1246 1246
 function spip_pg_in($val, $valeurs, $not = '', $serveur = '') {
1247 1247
 //
1248 1248
 // IN (...) souvent limite a 255  elements, d'ou cette fonction assistante
1249 1249
 //
1250
-	// s'il n'y a pas de valeur, eviter de produire un IN vide: PG rale.
1251
-	if (!$valeurs) {
1252
-		return $not ? '0=0' : '0=1';
1253
-	}
1254
-	if (strpos($valeurs, "CAST(x'") !== false) {
1255
-		return "($val=" . join("OR $val=", explode(',', $valeurs)) . ')';
1256
-	}
1257
-	$n = $i = 0;
1258
-	$in_sql = '';
1259
-	while ($n = strpos($valeurs, ',', $n + 1)) {
1260
-		if ((++$i) >= 255) {
1261
-			$in_sql .= "($val $not IN (" .
1262
-				substr($valeurs, 0, $n) .
1263
-				"))\n" .
1264
-				($not ? "AND\t" : "OR\t");
1265
-			$valeurs = substr($valeurs, $n + 1);
1266
-			$i = $n = 0;
1267
-		}
1268
-	}
1269
-	$in_sql .= "($val $not IN ($valeurs))";
1270
-
1271
-	return "($in_sql)";
1250
+    // s'il n'y a pas de valeur, eviter de produire un IN vide: PG rale.
1251
+    if (!$valeurs) {
1252
+        return $not ? '0=0' : '0=1';
1253
+    }
1254
+    if (strpos($valeurs, "CAST(x'") !== false) {
1255
+        return "($val=" . join("OR $val=", explode(',', $valeurs)) . ')';
1256
+    }
1257
+    $n = $i = 0;
1258
+    $in_sql = '';
1259
+    while ($n = strpos($valeurs, ',', $n + 1)) {
1260
+        if ((++$i) >= 255) {
1261
+            $in_sql .= "($val $not IN (" .
1262
+                substr($valeurs, 0, $n) .
1263
+                "))\n" .
1264
+                ($not ? "AND\t" : "OR\t");
1265
+            $valeurs = substr($valeurs, $n + 1);
1266
+            $i = $n = 0;
1267
+        }
1268
+    }
1269
+    $in_sql .= "($val $not IN ($valeurs))";
1270
+
1271
+    return "($in_sql)";
1272 1272
 }
1273 1273
 
1274 1274
 function spip_pg_error($query = '', $serveur = '', $requeter = true) {
1275
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1276
-	$s = $link ? pg_last_error($link) : pg_last_error();
1277
-	if ($s) {
1278
-		$s = str_replace('ERROR', 'errcode: 1000 ', $s);
1279
-		spip_log("$s - $query", 'pg.' . _LOG_ERREUR);
1280
-	}
1281
-
1282
-	return $s;
1275
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1276
+    $s = $link ? pg_last_error($link) : pg_last_error();
1277
+    if ($s) {
1278
+        $s = str_replace('ERROR', 'errcode: 1000 ', $s);
1279
+        spip_log("$s - $query", 'pg.' . _LOG_ERREUR);
1280
+    }
1281
+
1282
+    return $s;
1283 1283
 }
1284 1284
 
1285 1285
 function spip_pg_errno($serveur = '') {
1286
-	// il faudrait avoir la derniere ressource retournee et utiliser
1287
-	// http://fr2.php.net/manual/fr/function.pg-result-error.php
1288
-	return 0;
1286
+    // il faudrait avoir la derniere ressource retournee et utiliser
1287
+    // http://fr2.php.net/manual/fr/function.pg-result-error.php
1288
+    return 0;
1289 1289
 }
1290 1290
 
1291 1291
 function spip_pg_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
1292
-	if ($exist) {
1293
-		$exist = ' IF EXISTS';
1294
-	}
1295
-	if (spip_pg_query("DROP TABLE$exist $table", $serveur, $requeter)) {
1296
-		return true;
1297
-	} else {
1298
-		return false;
1299
-	}
1292
+    if ($exist) {
1293
+        $exist = ' IF EXISTS';
1294
+    }
1295
+    if (spip_pg_query("DROP TABLE$exist $table", $serveur, $requeter)) {
1296
+        return true;
1297
+    } else {
1298
+        return false;
1299
+    }
1300 1300
 }
1301 1301
 
1302 1302
 // supprime une vue
1303 1303
 function spip_pg_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
1304
-	if ($exist) {
1305
-		$exist = ' IF EXISTS';
1306
-	}
1304
+    if ($exist) {
1305
+        $exist = ' IF EXISTS';
1306
+    }
1307 1307
 
1308
-	return spip_pg_query("DROP VIEW$exist $view", $serveur, $requeter);
1308
+    return spip_pg_query("DROP VIEW$exist $view", $serveur, $requeter);
1309 1309
 }
1310 1310
 
1311 1311
 /**
@@ -1322,40 +1322,40 @@  discard block
 block discarded – undo
1322 1322
  *     Ressource à utiliser avec sql_fetch()
1323 1323
  **/
1324 1324
 function spip_pg_showbase($match, $serveur = '', $requeter = true) {
1325
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1326
-	$link = $connexion['link'];
1327
-	$connexion['last'] = $q = 'SELECT tablename FROM pg_tables WHERE tablename ILIKE ' . _q($match);
1325
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1326
+    $link = $connexion['link'];
1327
+    $connexion['last'] = $q = 'SELECT tablename FROM pg_tables WHERE tablename ILIKE ' . _q($match);
1328 1328
 
1329
-	return spip_pg_query_simple($link, $q);
1329
+    return spip_pg_query_simple($link, $q);
1330 1330
 }
1331 1331
 
1332 1332
 function spip_pg_showtable($nom_table, $serveur = '', $requeter = true) {
1333
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1334
-	$link = $connexion['link'];
1335
-	$connexion['last'] = $q = 'SELECT column_name, column_default, data_type FROM information_schema.columns WHERE table_name ILIKE ' . _q($nom_table);
1336
-
1337
-	$res = spip_pg_query_simple($link, $q);
1338
-	if (!$res) {
1339
-		return false;
1340
-	}
1341
-
1342
-	// etrangement, $res peut ne rien contenir, mais arriver ici...
1343
-	// il faut en tenir compte dans le return
1344
-	$fields = [];
1345
-	while ($field = pg_fetch_array($res, null, PGSQL_NUM)) {
1346
-		$fields[$field[0]] = $field[2] . (!$field[1] ? '' : (' DEFAULT ' . $field[1]));
1347
-	}
1348
-	$connexion['last'] = $q = 'SELECT indexdef FROM pg_indexes WHERE tablename ILIKE ' . _q($nom_table);
1349
-	$res = spip_pg_query_simple($link, $q);
1350
-	$keys = [];
1351
-	while ($index = pg_fetch_array($res, null, PGSQL_NUM)) {
1352
-		if (preg_match('/CREATE\s+(UNIQUE\s+)?INDEX\s([^\s]+).*\((.*)\)$/', $index[0], $r)) {
1353
-			$nom = str_replace($nom_table . '_', '', $r[2]);
1354
-			$keys[($r[1] ? 'PRIMARY KEY' : ('KEY ' . $nom))] = $r[3];
1355
-		}
1356
-	}
1357
-
1358
-	return count($fields) ? ['field' => $fields, 'key' => $keys] : false;
1333
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1334
+    $link = $connexion['link'];
1335
+    $connexion['last'] = $q = 'SELECT column_name, column_default, data_type FROM information_schema.columns WHERE table_name ILIKE ' . _q($nom_table);
1336
+
1337
+    $res = spip_pg_query_simple($link, $q);
1338
+    if (!$res) {
1339
+        return false;
1340
+    }
1341
+
1342
+    // etrangement, $res peut ne rien contenir, mais arriver ici...
1343
+    // il faut en tenir compte dans le return
1344
+    $fields = [];
1345
+    while ($field = pg_fetch_array($res, null, PGSQL_NUM)) {
1346
+        $fields[$field[0]] = $field[2] . (!$field[1] ? '' : (' DEFAULT ' . $field[1]));
1347
+    }
1348
+    $connexion['last'] = $q = 'SELECT indexdef FROM pg_indexes WHERE tablename ILIKE ' . _q($nom_table);
1349
+    $res = spip_pg_query_simple($link, $q);
1350
+    $keys = [];
1351
+    while ($index = pg_fetch_array($res, null, PGSQL_NUM)) {
1352
+        if (preg_match('/CREATE\s+(UNIQUE\s+)?INDEX\s([^\s]+).*\((.*)\)$/', $index[0], $r)) {
1353
+            $nom = str_replace($nom_table . '_', '', $r[2]);
1354
+            $keys[($r[1] ? 'PRIMARY KEY' : ('KEY ' . $nom))] = $r[3];
1355
+        }
1356
+    }
1357
+
1358
+    return count($fields) ? ['field' => $fields, 'key' => $keys] : false;
1359 1359
 }
1360 1360
 
1361 1361
 // Fonction de creation d'une table SQL nommee $nom
@@ -1366,116 +1366,116 @@  discard block
 block discarded – undo
1366 1366
 // Le nom des index est prefixe par celui de la table pour eviter les conflits
1367 1367
 function spip_pg_create($nom, $champs, $cles, $autoinc = false, $temporary = false, $serveur = '', $requeter = true) {
1368 1368
 
1369
-	$connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1370
-	$link = $connexion['link'];
1371
-	$nom = prefixer_table_spip($nom, $connexion['prefixe']);
1372
-
1373
-	$query = $prim = $prim_name = $v = $s = $p = '';
1374
-	$keys = [];
1375
-
1376
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
1377
-	// sans les renseigner (laisse le compilo recuperer la description)
1378
-	if (!is_array($champs) || !is_array($cles)) {
1379
-		return;
1380
-	}
1381
-
1382
-	foreach ($cles as $k => $v) {
1383
-		if (strpos($k, 'KEY ') === 0) {
1384
-			$n = str_replace('`', '', $k);
1385
-			$v = str_replace('`', '"', $v);
1386
-			$i = $nom . preg_replace('/KEY +/', '_', $n);
1387
-			if ($k != $n) {
1388
-				$i = "\"$i\"";
1389
-			}
1390
-			$keys[] = "CREATE INDEX $i ON $nom ($v);";
1391
-		} elseif (strpos($k, 'UNIQUE ') === 0) {
1392
-			$k = preg_replace('/^UNIQUE +/', '', $k);
1393
-			$prim .= "$s\n\t\tCONSTRAINT " . str_replace('`', '"', $k) . " UNIQUE ($v)";
1394
-		} else {
1395
-			$prim .= "$s\n\t\t" . str_replace('`', '"', $k) . " ($v)";
1396
-		}
1397
-		if ($k == 'PRIMARY KEY') {
1398
-			$prim_name = $v;
1399
-		}
1400
-		$s = ',';
1401
-	}
1402
-	$s = '';
1403
-
1404
-	$character_set = '';
1405
-	if (@$GLOBALS['meta']['charset_sql_base']) {
1406
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
1407
-	}
1408
-	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
1409
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
1410
-	}
1411
-
1412
-	foreach ($champs as $k => $v) {
1413
-		$k = str_replace('`', '"', $k);
1414
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
1415
-			if (preg_match(',(char|text),i', $defs[1]) and !preg_match(',binary,i', $defs[1])) {
1416
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
1417
-			}
1418
-		}
1419
-
1420
-		$query .= "$s\n\t\t$k "
1421
-			. (($autoinc && ($prim_name == $k) && preg_match(',\b(big|small|medium|tiny)?int\b,i', $v))
1422
-				? ' bigserial'
1423
-				: mysql2pg_type($v)
1424
-			);
1425
-		$s = ',';
1426
-	}
1427
-	$temporary = $temporary ? 'TEMPORARY' : '';
1428
-
1429
-	// En l'absence de "if not exists" en PG, on neutralise les erreurs
1430
-
1431
-	$q = "CREATE $temporary TABLE $nom ($query" . ($prim ? ",$prim" : '') . ')' .
1432
-		($character_set ? " DEFAULT $character_set" : '')
1433
-		. "\n";
1434
-
1435
-	if (!$requeter) {
1436
-		return $q;
1437
-	}
1438
-	$connexion['last'] = $q;
1439
-	$r = @pg_query($link, $q);
1440
-
1441
-	if (!$r) {
1442
-		spip_log("Impossible de creer cette table: $q", 'pg.' . _LOG_ERREUR);
1443
-	} else {
1444
-		foreach ($keys as $index) {
1445
-			pg_query($link, $index);
1446
-		}
1447
-	}
1448
-
1449
-	return $r;
1369
+    $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1370
+    $link = $connexion['link'];
1371
+    $nom = prefixer_table_spip($nom, $connexion['prefixe']);
1372
+
1373
+    $query = $prim = $prim_name = $v = $s = $p = '';
1374
+    $keys = [];
1375
+
1376
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
1377
+    // sans les renseigner (laisse le compilo recuperer la description)
1378
+    if (!is_array($champs) || !is_array($cles)) {
1379
+        return;
1380
+    }
1381
+
1382
+    foreach ($cles as $k => $v) {
1383
+        if (strpos($k, 'KEY ') === 0) {
1384
+            $n = str_replace('`', '', $k);
1385
+            $v = str_replace('`', '"', $v);
1386
+            $i = $nom . preg_replace('/KEY +/', '_', $n);
1387
+            if ($k != $n) {
1388
+                $i = "\"$i\"";
1389
+            }
1390
+            $keys[] = "CREATE INDEX $i ON $nom ($v);";
1391
+        } elseif (strpos($k, 'UNIQUE ') === 0) {
1392
+            $k = preg_replace('/^UNIQUE +/', '', $k);
1393
+            $prim .= "$s\n\t\tCONSTRAINT " . str_replace('`', '"', $k) . " UNIQUE ($v)";
1394
+        } else {
1395
+            $prim .= "$s\n\t\t" . str_replace('`', '"', $k) . " ($v)";
1396
+        }
1397
+        if ($k == 'PRIMARY KEY') {
1398
+            $prim_name = $v;
1399
+        }
1400
+        $s = ',';
1401
+    }
1402
+    $s = '';
1403
+
1404
+    $character_set = '';
1405
+    if (@$GLOBALS['meta']['charset_sql_base']) {
1406
+        $character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
1407
+    }
1408
+    if (@$GLOBALS['meta']['charset_collation_sql_base']) {
1409
+        $character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
1410
+    }
1411
+
1412
+    foreach ($champs as $k => $v) {
1413
+        $k = str_replace('`', '"', $k);
1414
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
1415
+            if (preg_match(',(char|text),i', $defs[1]) and !preg_match(',binary,i', $defs[1])) {
1416
+                $v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
1417
+            }
1418
+        }
1419
+
1420
+        $query .= "$s\n\t\t$k "
1421
+            . (($autoinc && ($prim_name == $k) && preg_match(',\b(big|small|medium|tiny)?int\b,i', $v))
1422
+                ? ' bigserial'
1423
+                : mysql2pg_type($v)
1424
+            );
1425
+        $s = ',';
1426
+    }
1427
+    $temporary = $temporary ? 'TEMPORARY' : '';
1428
+
1429
+    // En l'absence de "if not exists" en PG, on neutralise les erreurs
1430
+
1431
+    $q = "CREATE $temporary TABLE $nom ($query" . ($prim ? ",$prim" : '') . ')' .
1432
+        ($character_set ? " DEFAULT $character_set" : '')
1433
+        . "\n";
1434
+
1435
+    if (!$requeter) {
1436
+        return $q;
1437
+    }
1438
+    $connexion['last'] = $q;
1439
+    $r = @pg_query($link, $q);
1440
+
1441
+    if (!$r) {
1442
+        spip_log("Impossible de creer cette table: $q", 'pg.' . _LOG_ERREUR);
1443
+    } else {
1444
+        foreach ($keys as $index) {
1445
+            pg_query($link, $index);
1446
+        }
1447
+    }
1448
+
1449
+    return $r;
1450 1450
 }
1451 1451
 
1452 1452
 
1453 1453
 function spip_pg_create_base($nom, $serveur = '', $requeter = true) {
1454
-	return spip_pg_query("CREATE DATABASE $nom", $serveur, $requeter);
1454
+    return spip_pg_query("CREATE DATABASE $nom", $serveur, $requeter);
1455 1455
 }
1456 1456
 
1457 1457
 // Fonction de creation d'une vue SQL nommee $nom
1458 1458
 function spip_pg_create_view($nom, $query_select, $serveur = '', $requeter = true) {
1459
-	if (!$query_select) {
1460
-		return false;
1461
-	}
1462
-	// vue deja presente
1463
-	if (sql_showtable($nom, false, $serveur)) {
1464
-		if ($requeter) {
1465
-			spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", 'pg.' . _LOG_ERREUR);
1466
-		}
1459
+    if (!$query_select) {
1460
+        return false;
1461
+    }
1462
+    // vue deja presente
1463
+    if (sql_showtable($nom, false, $serveur)) {
1464
+        if ($requeter) {
1465
+            spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", 'pg.' . _LOG_ERREUR);
1466
+        }
1467 1467
 
1468
-		return false;
1469
-	}
1468
+        return false;
1469
+    }
1470 1470
 
1471
-	$query = "CREATE VIEW $nom AS " . $query_select;
1471
+    $query = "CREATE VIEW $nom AS " . $query_select;
1472 1472
 
1473
-	return spip_pg_query($query, $serveur, $requeter);
1473
+    return spip_pg_query($query, $serveur, $requeter);
1474 1474
 }
1475 1475
 
1476 1476
 
1477 1477
 function spip_pg_set_connect_charset($charset, $serveur = '', $requeter = true) {
1478
-	spip_log('changement de charset sql a ecrire en PG', 'pg.' . _LOG_ERREUR);
1478
+    spip_log('changement de charset sql a ecrire en PG', 'pg.' . _LOG_ERREUR);
1479 1479
 }
1480 1480
 
1481 1481
 
@@ -1488,50 +1488,50 @@  discard block
 block discarded – undo
1488 1488
  * @return bool|string true / false / requete
1489 1489
  **/
1490 1490
 function spip_pg_optimize($table, $serveur = '', $requeter = true) {
1491
-	return spip_pg_query('VACUUM ' . $table, $serveur, $requeter);
1491
+    return spip_pg_query('VACUUM ' . $table, $serveur, $requeter);
1492 1492
 }
1493 1493
 
1494 1494
 // Selectionner la sous-chaine dans $objet
1495 1495
 // correspondant a $lang. Cf balise Multi de Spip
1496 1496
 
1497 1497
 function spip_pg_multi($objet, $lang) {
1498
-	$r = 'regexp_replace('
1499
-		. $objet
1500
-		. ",'<multi>.*[[]"
1501
-		. $lang
1502
-		. "[]]([^[]*).*</multi>', E'\\\\1') AS multi";
1498
+    $r = 'regexp_replace('
1499
+        . $objet
1500
+        . ",'<multi>.*[[]"
1501
+        . $lang
1502
+        . "[]]([^[]*).*</multi>', E'\\\\1') AS multi";
1503 1503
 
1504
-	return $r;
1504
+    return $r;
1505 1505
 }
1506 1506
 
1507 1507
 // Palanquee d'idiosyncrasies MySQL dans les creations de table
1508 1508
 // A completer par les autres, mais essayer de reduire en amont.
1509 1509
 
1510 1510
 function mysql2pg_type($v) {
1511
-	$remplace = [
1512
-		'/auto_increment/i' => '', // non reconnu
1513
-		'/bigint/i' => 'bigint',
1514
-		'/mediumint/i' => 'mediumint',
1515
-		'/smallint/i' => 'smallint',
1516
-		'/tinyint/i' => 'int',
1517
-		'/int\s*[(]\s*\d+\s*[)]/i' => 'int',
1518
-		'/longtext/i' => 'text',
1519
-		'/mediumtext/i' => 'text',
1520
-		'/tinytext/i' => 'text',
1521
-		'/longblob/i' => 'text',
1522
-		'/0000-00-00/' => '0001-01-01',
1523
-		'/datetime/i' => 'timestamp',
1524
-		'/unsigned/i' => '',
1525
-		'/double/i' => 'double precision',
1526
-		'/VARCHAR\((\d+)\)\s+BINARY/i' => 'varchar(\1)',
1527
-		'/ENUM *[(][^)]*[)]/i' => 'varchar(255)',
1528
-		'/(timestamp .* )ON .*$/is' => '\\1',
1529
-	];
1530
-
1531
-	return preg_replace(array_keys($remplace), array_values($remplace), $v);
1511
+    $remplace = [
1512
+        '/auto_increment/i' => '', // non reconnu
1513
+        '/bigint/i' => 'bigint',
1514
+        '/mediumint/i' => 'mediumint',
1515
+        '/smallint/i' => 'smallint',
1516
+        '/tinyint/i' => 'int',
1517
+        '/int\s*[(]\s*\d+\s*[)]/i' => 'int',
1518
+        '/longtext/i' => 'text',
1519
+        '/mediumtext/i' => 'text',
1520
+        '/tinytext/i' => 'text',
1521
+        '/longblob/i' => 'text',
1522
+        '/0000-00-00/' => '0001-01-01',
1523
+        '/datetime/i' => 'timestamp',
1524
+        '/unsigned/i' => '',
1525
+        '/double/i' => 'double precision',
1526
+        '/VARCHAR\((\d+)\)\s+BINARY/i' => 'varchar(\1)',
1527
+        '/ENUM *[(][^)]*[)]/i' => 'varchar(255)',
1528
+        '/(timestamp .* )ON .*$/is' => '\\1',
1529
+    ];
1530
+
1531
+    return preg_replace(array_keys($remplace), array_values($remplace), $v);
1532 1532
 }
1533 1533
 
1534 1534
 // Renvoie false si on n'a pas les fonctions pg (pour l'install)
1535 1535
 function spip_versions_pg() {
1536
-	return function_exists('pg_connect');
1536
+    return function_exists('pg_connect');
1537 1537
 }
Please login to merge, or discard this patch.
Spacing   +83 added lines, -84 removed lines patch added patch discarded remove patch
@@ -64,7 +64,7 @@  discard block
 block discarded – undo
64 64
 	if (!$link) {
65 65
 		$erreurs[] = pg_last_error();
66 66
 		foreach ($erreurs as $e) {
67
-			spip_log('Echec pg_connect. Erreur : ' . $e, 'pg.' . _LOG_HS);
67
+			spip_log('Echec pg_connect. Erreur : '.$e, 'pg.'._LOG_HS);
68 68
 		}
69 69
 
70 70
 		return false;
@@ -82,8 +82,8 @@  discard block
 block discarded – undo
82 82
 	}
83 83
 
84 84
 	spip_log(
85
-		"Connexion vers $host, base $db, prefixe $prefixe " . ($link ? 'operationnelle' : 'impossible'),
86
-		'pg.' . _LOG_DEBUG
85
+		"Connexion vers $host, base $db, prefixe $prefixe ".($link ? 'operationnelle' : 'impossible'),
86
+		'pg.'._LOG_DEBUG
87 87
 	);
88 88
 
89 89
 	return !$link ? false : [
@@ -171,7 +171,7 @@  discard block
 block discarded – undo
171 171
 	} else {
172 172
 		$suite = '';
173 173
 	}
174
-	$query = preg_replace('/([,\s])spip_/', '\1' . $prefixe . '_', $query) . $suite;
174
+	$query = preg_replace('/([,\s])spip_/', '\1'.$prefixe.'_', $query).$suite;
175 175
 
176 176
 	// renvoyer la requete inerte si demandee
177 177
 	if (!$requeter) {
@@ -239,7 +239,7 @@  discard block
 block discarded – undo
239 239
 	// ou revoir l'api de sql_alter en creant un
240 240
 	// sql_alter_table($table,array($actions));
241 241
 	if (!preg_match('/\s*((\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) {
242
-		spip_log("$query mal comprise", 'pg.' . _LOG_ERREUR);
242
+		spip_log("$query mal comprise", 'pg.'._LOG_ERREUR);
243 243
 
244 244
 		return false;
245 245
 	}
@@ -252,7 +252,7 @@  discard block
 block discarded – undo
252 252
 	$i = 0;
253 253
 	$ouverte = false;
254 254
 	while ($do = array_shift($todo)) {
255
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
255
+		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i].','.$do : $do;
256 256
 		$o = (false !== strpos($do, '('));
257 257
 		$f = (false !== strpos($do, ')'));
258 258
 		if ($o and !$f) {
@@ -265,33 +265,33 @@  discard block
 block discarded – undo
265 265
 		}
266 266
 	}
267 267
 	$todo = $todo2;
268
-	$query = $debut . ' ' . array_shift($todo);
268
+	$query = $debut.' '.array_shift($todo);
269 269
 
270 270
 	if (!preg_match('/^\s*(IGNORE\s*)?TABLE\s+(\w+)\s+(ADD|DROP|CHANGE|MODIFY|RENAME)\s*(.*)$/is', $query, $r)) {
271
-		spip_log("$query incompris", 'pg.' . _LOG_ERREUR);
271
+		spip_log("$query incompris", 'pg.'._LOG_ERREUR);
272 272
 	} else {
273 273
 		if ($r[1]) {
274
-			spip_log("j'ignore IGNORE dans $query", 'pg.' . _LOG_AVERTISSEMENT);
274
+			spip_log("j'ignore IGNORE dans $query", 'pg.'._LOG_AVERTISSEMENT);
275 275
 		}
276
-		$f = 'spip_pg_alter_' . strtolower($r[3]);
276
+		$f = 'spip_pg_alter_'.strtolower($r[3]);
277 277
 		if (function_exists($f)) {
278 278
 			$f($r[2], $r[4], $serveur, $requeter);
279 279
 		} else {
280
-			spip_log("$query non prevu", 'pg.' . _LOG_ERREUR);
280
+			spip_log("$query non prevu", 'pg.'._LOG_ERREUR);
281 281
 		}
282 282
 	}
283 283
 	// Alter a plusieurs args. Faudrait optimiser.
284 284
 	if ($todo) {
285
-		spip_pg_alter("TABLE $table " . join(',', $todo));
285
+		spip_pg_alter("TABLE $table ".join(',', $todo));
286 286
 	}
287 287
 }
288 288
 
289 289
 function spip_pg_alter_change($table, $arg, $serveur = '', $requeter = true) {
290 290
 	if (!preg_match('/^`?(\w+)`?\s+`?(\w+)`?\s+(.*?)\s*(DEFAULT .*?)?(NOT\s+NULL)?\s*(DEFAULT .*?)?$/i', $arg, $r)) {
291
-		spip_log("alter change: $arg  incompris", 'pg.' . _LOG_ERREUR);
291
+		spip_log("alter change: $arg  incompris", 'pg.'._LOG_ERREUR);
292 292
 	} else {
293 293
 		[, $old, $new, $type, $default, $null, $def2] = $r;
294
-		$actions = ["ALTER $old TYPE " . mysql2pg_type($type)];
294
+		$actions = ["ALTER $old TYPE ".mysql2pg_type($type)];
295 295
 		if ($null) {
296 296
 			$actions[] = "ALTER $old SET NOT NULL";
297 297
 		} else {
@@ -304,7 +304,7 @@  discard block
 block discarded – undo
304 304
 			$actions[] = "ALTER $old DROP DEFAULT";
305 305
 		}
306 306
 
307
-		spip_pg_query("ALTER TABLE $table " . join(', ', $actions));
307
+		spip_pg_query("ALTER TABLE $table ".join(', ', $actions));
308 308
 
309 309
 		if ($old != $new) {
310 310
 			spip_pg_query("ALTER TABLE $table RENAME $old TO $new", $serveur);
@@ -315,7 +315,7 @@  discard block
 block discarded – undo
315 315
 function spip_pg_alter_add($table, $arg, $serveur = '', $requeter = true) {
316 316
 	$nom_index = null;
317 317
 	if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*(.*)$/', $arg, $r)) {
318
-		spip_log("alter add $arg  incompris", 'pg.' . _LOG_ERREUR);
318
+		spip_log("alter add $arg  incompris", 'pg.'._LOG_ERREUR);
319 319
 
320 320
 		return null;
321 321
 	}
@@ -325,14 +325,14 @@  discard block
 block discarded – undo
325 325
 			$m[2] = $n[1];
326 326
 		}
327 327
 
328
-		return spip_pg_query("ALTER TABLE $table ADD " . $m[1] . ' ' . mysql2pg_type($m[2]), $serveur, $requeter);
328
+		return spip_pg_query("ALTER TABLE $table ADD ".$m[1].' '.mysql2pg_type($m[2]), $serveur, $requeter);
329 329
 	} elseif ($r[1][0] == 'P') {
330 330
 		// la primary peut etre sur plusieurs champs
331 331
 		$r[2] = trim(str_replace('`', '', $r[2]));
332 332
 		$m = ($r[2][0] == '(') ? substr($r[2], 1, -1) : $r[2];
333 333
 
334 334
 		return spip_pg_query(
335
-			"ALTER TABLE $table ADD CONSTRAINT $table" . '_pkey PRIMARY KEY (' . $m . ')',
335
+			"ALTER TABLE $table ADD CONSTRAINT $table".'_pkey PRIMARY KEY ('.$m.')',
336 336
 			$serveur,
337 337
 			$requeter
338 338
 		);
@@ -351,7 +351,7 @@  discard block
 block discarded – undo
351 351
 				$colonnes = substr($m[1], 1, -1);
352 352
 				if (false !== strpos(',', $colonnes)) {
353 353
 					spip_log('PG : Erreur, impossible de creer un index sur plusieurs colonnes'
354
-						. " sans qu'il ait de nom ($table, ($colonnes))", 'pg.' . _LOG_ERREUR);
354
+						. " sans qu'il ait de nom ($table, ($colonnes))", 'pg.'._LOG_ERREUR);
355 355
 				} else {
356 356
 					$nom_index = $colonnes;
357 357
 				}
@@ -367,23 +367,23 @@  discard block
 block discarded – undo
367 367
 
368 368
 function spip_pg_alter_drop($table, $arg, $serveur = '', $requeter = true) {
369 369
 	if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*`?(\w*)`?/', $arg, $r)) {
370
-		spip_log("alter drop: $arg  incompris", 'pg.' . _LOG_ERREUR);
370
+		spip_log("alter drop: $arg  incompris", 'pg.'._LOG_ERREUR);
371 371
 	} else {
372 372
 		if (!$r[1] or $r[1] == 'COLUMN') {
373
-			return spip_pg_query("ALTER TABLE $table DROP " . $r[2], $serveur);
373
+			return spip_pg_query("ALTER TABLE $table DROP ".$r[2], $serveur);
374 374
 		} elseif ($r[1][0] == 'P') {
375
-			return spip_pg_query("ALTER TABLE $table DROP CONSTRAINT $table" . '_pkey', $serveur);
375
+			return spip_pg_query("ALTER TABLE $table DROP CONSTRAINT $table".'_pkey', $serveur);
376 376
 		} else {
377
-			return spip_pg_query('DROP INDEX ' . $table . '_' . $r[2], $serveur);
377
+			return spip_pg_query('DROP INDEX '.$table.'_'.$r[2], $serveur);
378 378
 		}
379 379
 	}
380 380
 }
381 381
 
382 382
 function spip_pg_alter_modify($table, $arg, $serveur = '', $requeter = true) {
383 383
 	if (!preg_match('/^`?(\w+)`?\s+(.*)$/', $arg, $r)) {
384
-		spip_log("alter modify: $arg  incompris", 'pg.' . _LOG_ERREUR);
384
+		spip_log("alter modify: $arg  incompris", 'pg.'._LOG_ERREUR);
385 385
 	} else {
386
-		return spip_pg_alter_change($table, $r[1] . ' ' . $arg, $serveur = '', $requeter = true);
386
+		return spip_pg_alter_change($table, $r[1].' '.$arg, $serveur = '', $requeter = true);
387 387
 	}
388 388
 }
389 389
 
@@ -399,7 +399,7 @@  discard block
 block discarded – undo
399 399
 	} elseif (preg_match('/^(TO)\s*`?(\w*)`?/', $arg, $r)) {
400 400
 		$rename = $r[2];
401 401
 	} else {
402
-		spip_log("alter rename: $arg  incompris", 'pg.' . _LOG_ERREUR);
402
+		spip_log("alter rename: $arg  incompris", 'pg.'._LOG_ERREUR);
403 403
 	}
404 404
 
405 405
 	return $rename ? spip_pg_query("ALTER TABLE $table RENAME TO $rename") : false;
@@ -420,8 +420,8 @@  discard block
 block discarded – undo
420 420
 function spip_pg_create_index($nom, $table, $champs, $serveur = '', $requeter = true) {
421 421
 	if (!($nom or $table or $champs)) {
422 422
 		spip_log(
423
-			"Champ manquant pour creer un index pg ($nom, $table, (" . @join(',', $champs) . '))',
424
-			'pg.' . _LOG_ERREUR
423
+			"Champ manquant pour creer un index pg ($nom, $table, (".@join(',', $champs).'))',
424
+			'pg.'._LOG_ERREUR
425 425
 		);
426 426
 
427 427
 		return false;
@@ -432,7 +432,7 @@  discard block
 block discarded – undo
432 432
 
433 433
 	// PG ne differentie pas noms des index en fonction des tables
434 434
 	// il faut donc creer des noms uniques d'index pour une base pg
435
-	$nom = $table . '_' . $nom;
435
+	$nom = $table.'_'.$nom;
436 436
 	// enlever d'eventuelles parentheses deja presentes sur champs
437 437
 	if (!is_array($champs)) {
438 438
 		if ($champs[0] == '(') {
@@ -440,7 +440,7 @@  discard block
 block discarded – undo
440 440
 		}
441 441
 		$champs = [$champs];
442 442
 	}
443
-	$query = "CREATE INDEX $nom ON $table (" . join(',', $champs) . ')';
443
+	$query = "CREATE INDEX $nom ON $table (".join(',', $champs).')';
444 444
 	if (!$requeter) {
445 445
 		return $query;
446 446
 	}
@@ -463,7 +463,7 @@  discard block
 block discarded – undo
463 463
 	} else {
464 464
 		$suite = '';
465 465
 	}
466
-	$query = 'EXPLAIN ' . preg_replace('/([,\s])spip_/', '\1' . $prefixe . '_', $query) . $suite;
466
+	$query = 'EXPLAIN '.preg_replace('/([,\s])spip_/', '\1'.$prefixe.'_', $query).$suite;
467 467
 
468 468
 	if (!$requeter) {
469 469
 		return $query;
@@ -556,16 +556,16 @@  discard block
 block discarded – undo
556 556
 		}
557 557
 	}
558 558
 	$from = spip_pg_from($from, $prefixe);
559
-	$query = 'SELECT ' . $select
559
+	$query = 'SELECT '.$select
560 560
 		. (!$from ? '' : "\nFROM $from")
561
-		. (!$where ? '' : ("\nWHERE " . (!is_array($where) ? calculer_pg_where($where) : (join(
561
+		. (!$where ? '' : ("\nWHERE ".(!is_array($where) ? calculer_pg_where($where) : (join(
562 562
 			"\n\tAND ",
563 563
 			array_map('calculer_pg_where', $where)
564 564
 		)))))
565 565
 		. spip_pg_groupby($groupby, $from, $select)
566 566
 		. (!$having ? '' : "\nHAVING $having")
567 567
 		. ($orderby ? ("\nORDER BY $orderby") : '')
568
-		. (!$limit ? '' : (" LIMIT $count" . (!$offset ? '' : " OFFSET $offset")));
568
+		. (!$limit ? '' : (" LIMIT $count".(!$offset ? '' : " OFFSET $offset")));
569 569
 
570 570
 	// renvoyer la requete inerte si demandee
571 571
 	if ($requeter === false) {
@@ -586,7 +586,7 @@  discard block
 block discarded – undo
586 586
 		$from = spip_pg_select_as($from);
587 587
 	}
588 588
 
589
-	return !$prefixe ? $from : preg_replace('/(\b)spip_/', '\1' . $prefixe . '_', $from);
589
+	return !$prefixe ? $from : preg_replace('/(\b)spip_/', '\1'.$prefixe.'_', $from);
590 590
 }
591 591
 
592 592
 function spip_pg_orderby($order, $select) {
@@ -594,7 +594,7 @@  discard block
 block discarded – undo
594 594
 	$arg = (is_array($order) ? $order : preg_split('/\s*,\s*/', $order));
595 595
 
596 596
 	foreach ($arg as $v) {
597
-		if (preg_match('/(case\s+.*?else\s+0\s+end)\s*AS\s+' . $v . '/', $select, $m)) {
597
+		if (preg_match('/(case\s+.*?else\s+0\s+end)\s*AS\s+'.$v.'/', $select, $m)) {
598 598
 			$res[] = $m[1];
599 599
 		} else {
600 600
 			$res[] = $v;
@@ -772,7 +772,7 @@  discard block
 block discarded – undo
772 772
 			$n++;
773 773
 			$res .= "\nwhen $index=$v then $n";
774 774
 		}
775
-		$arg = $m[1] . "case $res else 0 end "
775
+		$arg = $m[1]."case $res else 0 end "
776 776
 			. substr($arg, strlen($m[0]));
777 777
 	}
778 778
 
@@ -815,9 +815,9 @@  discard block
 block discarded – undo
815 815
 	}
816 816
 
817 817
 	if (strtoupper($join) === 'AND') {
818
-		return $exp . join("\n\t$join ", array_map('calculer_pg_where', $v));
818
+		return $exp.join("\n\t$join ", array_map('calculer_pg_where', $v));
819 819
 	} else {
820
-		return $exp . join($join, $v);
820
+		return $exp.join($join, $v);
821 821
 	}
822 822
 }
823 823
 
@@ -827,7 +827,7 @@  discard block
 block discarded – undo
827 827
 		if (substr($k, -1) == '@') {
828 828
 			// c'est une jointure qui se refere au from precedent
829 829
 			// pas de virgule
830
-			$argsas .= '  ' . $v;
830
+			$argsas .= '  '.$v;
831 831
 		} else {
832 832
 			$as = '';
833 833
 			//  spip_log("$k : $v", _LOG_DEBUG);
@@ -837,7 +837,7 @@  discard block
 block discarded – undo
837 837
 				} elseif ($v != $k) {
838 838
 					$p = strpos($v, ' ');
839 839
 					if ($p) {
840
-						$v = substr($v, 0, $p) . " AS $k" . substr($v, $p);
840
+						$v = substr($v, 0, $p)." AS $k".substr($v, $p);
841 841
 					} else {
842 842
 						$as = " AS $k";
843 843
 					}
@@ -845,7 +845,7 @@  discard block
 block discarded – undo
845 845
 			}
846 846
 			// spip_log("subs $k : $v avec $as", _LOG_DEBUG);
847 847
 			// if (strpos($v, 'JOIN') === false)  $argsas .= ', ';
848
-			$argsas .= ', ' . $v . $as;
848
+			$argsas .= ', '.$v.$as;
849 849
 		}
850 850
 	}
851 851
 
@@ -876,7 +876,7 @@  discard block
 block discarded – undo
876 876
 	$serveur = '',
877 877
 	$requeter = true
878 878
 ) {
879
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
879
+	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
880 880
 	$r = spip_pg_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
881 881
 	if (!$requeter) {
882 882
 		return $r;
@@ -977,8 +977,8 @@  discard block
 block discarded – undo
977 977
 
978 978
 	return spip_pg_insert(
979 979
 		$table,
980
-		'(' . join(',', array_keys($couples)) . ')',
981
-		'(' . join(',', $couples) . ')',
980
+		'('.join(',', array_keys($couples)).')',
981
+		'('.join(',', $couples).')',
982 982
 		$desc,
983 983
 		$serveur,
984 984
 		$requeter
@@ -1001,7 +1001,7 @@  discard block
 block discarded – undo
1001 1001
 	$c = $tab_couples[0] ?? [];
1002 1002
 	$les_cles = spip_pg_ajouter_champs_timestamp($table, $c, $desc, $serveur);
1003 1003
 
1004
-	$cles = '(' . join(',', array_keys($les_cles)) . ')';
1004
+	$cles = '('.join(',', array_keys($les_cles)).')';
1005 1005
 	$valeurs = [];
1006 1006
 	foreach ($tab_couples as $couples) {
1007 1007
 		foreach ($couples as $champ => $val) {
@@ -1010,7 +1010,7 @@  discard block
 block discarded – undo
1010 1010
 		// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1011 1011
 		$couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1012 1012
 
1013
-		$valeurs[] = '(' . join(',', $couples) . ')';
1013
+		$valeurs[] = '('.join(',', $couples).')';
1014 1014
 	}
1015 1015
 	$valeurs = implode(', ', $valeurs);
1016 1016
 
@@ -1031,7 +1031,7 @@  discard block
 block discarded – undo
1031 1031
 
1032 1032
 	$set = [];
1033 1033
 	foreach ($couples as $champ => $val) {
1034
-		$set[] = $champ . '=' . $val;
1034
+		$set[] = $champ.'='.$val;
1035 1035
 	}
1036 1036
 
1037 1037
 	$query = calculer_pg_expression('UPDATE', $table, ',')
@@ -1066,7 +1066,7 @@  discard block
 block discarded – undo
1066 1066
 
1067 1067
 function spip_pg_replace($table, $values, $desc, $serveur = '', $requeter = true) {
1068 1068
 	if (!$values) {
1069
-		spip_log("replace vide $table", 'pg.' . _LOG_AVERTISSEMENT);
1069
+		spip_log("replace vide $table", 'pg.'._LOG_AVERTISSEMENT);
1070 1070
 
1071 1071
 		return 0;
1072 1072
 	}
@@ -1100,8 +1100,8 @@  discard block
 block discarded – undo
1100 1100
 	if (!$where) {
1101 1101
 		return spip_pg_insert(
1102 1102
 			$table,
1103
-			'(' . join(',', array_keys($values)) . ')',
1104
-			'(' . join(',', $values) . ')',
1103
+			'('.join(',', array_keys($values)).')',
1104
+			'('.join(',', $values).')',
1105 1105
 			$desc,
1106 1106
 			$serveur
1107 1107
 		);
@@ -1122,12 +1122,11 @@  discard block
 block discarded – undo
1122 1122
 		$couples = pg_affected_rows($couples);
1123 1123
 	}
1124 1124
 	if (!$couples) {
1125
-		$ret = !$seq ? '' :
1126
-			(" RETURNING nextval('$seq') < $prim");
1127
-		$connexion['last'] = $q = "INSERT INTO $table (" . join(',', array_keys($values)) . ') VALUES (' . join(
1125
+		$ret = !$seq ? '' : (" RETURNING nextval('$seq') < $prim");
1126
+		$connexion['last'] = $q = "INSERT INTO $table (".join(',', array_keys($values)).') VALUES ('.join(
1128 1127
 			',',
1129 1128
 			$values
1130
-		) . ")$ret";
1129
+		).")$ret";
1131 1130
 		$couples = spip_pg_query_simple($link, $q);
1132 1131
 		if (!$couples) {
1133 1132
 			return false;
@@ -1175,7 +1174,7 @@  discard block
 block discarded – undo
1175 1174
 	) {
1176 1175
 		return '';
1177 1176
 	} else {
1178
-		return $raw ? $prim : $table . '_' . $prim . '_seq';
1177
+		return $raw ? $prim : $table.'_'.$prim.'_seq';
1179 1178
 	}
1180 1179
 }
1181 1180
 
@@ -1192,29 +1191,29 @@  discard block
 block discarded – undo
1192 1191
 			return spip_pg_frommysql($v);
1193 1192
 		} else {
1194 1193
 			if (strncmp($v, '0000', 4) == 0) {
1195
-				$v = '0001' . substr($v, 4);
1194
+				$v = '0001'.substr($v, 4);
1196 1195
 			}
1197 1196
 			if (strpos($v, '-00-00') === 4) {
1198
-				$v = substr($v, 0, 4) . '-01-01' . substr($v, 10);
1197
+				$v = substr($v, 0, 4).'-01-01'.substr($v, 10);
1199 1198
 			}
1200 1199
 
1201 1200
 			return "timestamp '$v'";
1202 1201
 		}
1203 1202
 	} elseif (!sql_test_int($t)) {
1204
-		return ("'" . pg_escape_string($v) . "'");
1203
+		return ("'".pg_escape_string($v)."'");
1205 1204
 	} elseif (is_numeric($v) or (strpos($v, 'CAST(') === 0)) {
1206 1205
 		return $v;
1207 1206
 	} elseif ($v[0] == '0' and $v[1] !== 'x' and ctype_xdigit(substr($v, 1))) {
1208 1207
 		return substr($v, 1);
1209 1208
 	} else {
1210
-		spip_log("Warning: '$v'  n'est pas de type $t", 'pg.' . _LOG_AVERTISSEMENT);
1209
+		spip_log("Warning: '$v'  n'est pas de type $t", 'pg.'._LOG_AVERTISSEMENT);
1211 1210
 
1212 1211
 		return intval($v);
1213 1212
 	}
1214 1213
 }
1215 1214
 
1216 1215
 function spip_pg_hex($v) {
1217
-	return "CAST(x'" . $v . "' as bigint)";
1216
+	return "CAST(x'".$v."' as bigint)";
1218 1217
 }
1219 1218
 
1220 1219
 function spip_pg_quote($v, $type = '') {
@@ -1252,15 +1251,15 @@  discard block
 block discarded – undo
1252 1251
 		return $not ? '0=0' : '0=1';
1253 1252
 	}
1254 1253
 	if (strpos($valeurs, "CAST(x'") !== false) {
1255
-		return "($val=" . join("OR $val=", explode(',', $valeurs)) . ')';
1254
+		return "($val=".join("OR $val=", explode(',', $valeurs)).')';
1256 1255
 	}
1257 1256
 	$n = $i = 0;
1258 1257
 	$in_sql = '';
1259 1258
 	while ($n = strpos($valeurs, ',', $n + 1)) {
1260 1259
 		if ((++$i) >= 255) {
1261
-			$in_sql .= "($val $not IN (" .
1262
-				substr($valeurs, 0, $n) .
1263
-				"))\n" .
1260
+			$in_sql .= "($val $not IN (".
1261
+				substr($valeurs, 0, $n).
1262
+				"))\n".
1264 1263
 				($not ? "AND\t" : "OR\t");
1265 1264
 			$valeurs = substr($valeurs, $n + 1);
1266 1265
 			$i = $n = 0;
@@ -1276,7 +1275,7 @@  discard block
 block discarded – undo
1276 1275
 	$s = $link ? pg_last_error($link) : pg_last_error();
1277 1276
 	if ($s) {
1278 1277
 		$s = str_replace('ERROR', 'errcode: 1000 ', $s);
1279
-		spip_log("$s - $query", 'pg.' . _LOG_ERREUR);
1278
+		spip_log("$s - $query", 'pg.'._LOG_ERREUR);
1280 1279
 	}
1281 1280
 
1282 1281
 	return $s;
@@ -1324,7 +1323,7 @@  discard block
 block discarded – undo
1324 1323
 function spip_pg_showbase($match, $serveur = '', $requeter = true) {
1325 1324
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1326 1325
 	$link = $connexion['link'];
1327
-	$connexion['last'] = $q = 'SELECT tablename FROM pg_tables WHERE tablename ILIKE ' . _q($match);
1326
+	$connexion['last'] = $q = 'SELECT tablename FROM pg_tables WHERE tablename ILIKE '._q($match);
1328 1327
 
1329 1328
 	return spip_pg_query_simple($link, $q);
1330 1329
 }
@@ -1332,7 +1331,7 @@  discard block
 block discarded – undo
1332 1331
 function spip_pg_showtable($nom_table, $serveur = '', $requeter = true) {
1333 1332
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1334 1333
 	$link = $connexion['link'];
1335
-	$connexion['last'] = $q = 'SELECT column_name, column_default, data_type FROM information_schema.columns WHERE table_name ILIKE ' . _q($nom_table);
1334
+	$connexion['last'] = $q = 'SELECT column_name, column_default, data_type FROM information_schema.columns WHERE table_name ILIKE '._q($nom_table);
1336 1335
 
1337 1336
 	$res = spip_pg_query_simple($link, $q);
1338 1337
 	if (!$res) {
@@ -1343,15 +1342,15 @@  discard block
 block discarded – undo
1343 1342
 	// il faut en tenir compte dans le return
1344 1343
 	$fields = [];
1345 1344
 	while ($field = pg_fetch_array($res, null, PGSQL_NUM)) {
1346
-		$fields[$field[0]] = $field[2] . (!$field[1] ? '' : (' DEFAULT ' . $field[1]));
1345
+		$fields[$field[0]] = $field[2].(!$field[1] ? '' : (' DEFAULT '.$field[1]));
1347 1346
 	}
1348
-	$connexion['last'] = $q = 'SELECT indexdef FROM pg_indexes WHERE tablename ILIKE ' . _q($nom_table);
1347
+	$connexion['last'] = $q = 'SELECT indexdef FROM pg_indexes WHERE tablename ILIKE '._q($nom_table);
1349 1348
 	$res = spip_pg_query_simple($link, $q);
1350 1349
 	$keys = [];
1351 1350
 	while ($index = pg_fetch_array($res, null, PGSQL_NUM)) {
1352 1351
 		if (preg_match('/CREATE\s+(UNIQUE\s+)?INDEX\s([^\s]+).*\((.*)\)$/', $index[0], $r)) {
1353
-			$nom = str_replace($nom_table . '_', '', $r[2]);
1354
-			$keys[($r[1] ? 'PRIMARY KEY' : ('KEY ' . $nom))] = $r[3];
1352
+			$nom = str_replace($nom_table.'_', '', $r[2]);
1353
+			$keys[($r[1] ? 'PRIMARY KEY' : ('KEY '.$nom))] = $r[3];
1355 1354
 		}
1356 1355
 	}
1357 1356
 
@@ -1383,16 +1382,16 @@  discard block
 block discarded – undo
1383 1382
 		if (strpos($k, 'KEY ') === 0) {
1384 1383
 			$n = str_replace('`', '', $k);
1385 1384
 			$v = str_replace('`', '"', $v);
1386
-			$i = $nom . preg_replace('/KEY +/', '_', $n);
1385
+			$i = $nom.preg_replace('/KEY +/', '_', $n);
1387 1386
 			if ($k != $n) {
1388 1387
 				$i = "\"$i\"";
1389 1388
 			}
1390 1389
 			$keys[] = "CREATE INDEX $i ON $nom ($v);";
1391 1390
 		} elseif (strpos($k, 'UNIQUE ') === 0) {
1392 1391
 			$k = preg_replace('/^UNIQUE +/', '', $k);
1393
-			$prim .= "$s\n\t\tCONSTRAINT " . str_replace('`', '"', $k) . " UNIQUE ($v)";
1392
+			$prim .= "$s\n\t\tCONSTRAINT ".str_replace('`', '"', $k)." UNIQUE ($v)";
1394 1393
 		} else {
1395
-			$prim .= "$s\n\t\t" . str_replace('`', '"', $k) . " ($v)";
1394
+			$prim .= "$s\n\t\t".str_replace('`', '"', $k)." ($v)";
1396 1395
 		}
1397 1396
 		if ($k == 'PRIMARY KEY') {
1398 1397
 			$prim_name = $v;
@@ -1403,17 +1402,17 @@  discard block
 block discarded – undo
1403 1402
 
1404 1403
 	$character_set = '';
1405 1404
 	if (@$GLOBALS['meta']['charset_sql_base']) {
1406
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
1405
+		$character_set .= ' CHARACTER SET '.$GLOBALS['meta']['charset_sql_base'];
1407 1406
 	}
1408 1407
 	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
1409
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
1408
+		$character_set .= ' COLLATE '.$GLOBALS['meta']['charset_collation_sql_base'];
1410 1409
 	}
1411 1410
 
1412 1411
 	foreach ($champs as $k => $v) {
1413 1412
 		$k = str_replace('`', '"', $k);
1414 1413
 		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
1415 1414
 			if (preg_match(',(char|text),i', $defs[1]) and !preg_match(',binary,i', $defs[1])) {
1416
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
1415
+				$v = $defs[1].$character_set.' '.substr($v, strlen($defs[1]));
1417 1416
 			}
1418 1417
 		}
1419 1418
 
@@ -1428,7 +1427,7 @@  discard block
 block discarded – undo
1428 1427
 
1429 1428
 	// En l'absence de "if not exists" en PG, on neutralise les erreurs
1430 1429
 
1431
-	$q = "CREATE $temporary TABLE $nom ($query" . ($prim ? ",$prim" : '') . ')' .
1430
+	$q = "CREATE $temporary TABLE $nom ($query".($prim ? ",$prim" : '').')'.
1432 1431
 		($character_set ? " DEFAULT $character_set" : '')
1433 1432
 		. "\n";
1434 1433
 
@@ -1439,7 +1438,7 @@  discard block
 block discarded – undo
1439 1438
 	$r = @pg_query($link, $q);
1440 1439
 
1441 1440
 	if (!$r) {
1442
-		spip_log("Impossible de creer cette table: $q", 'pg.' . _LOG_ERREUR);
1441
+		spip_log("Impossible de creer cette table: $q", 'pg.'._LOG_ERREUR);
1443 1442
 	} else {
1444 1443
 		foreach ($keys as $index) {
1445 1444
 			pg_query($link, $index);
@@ -1462,20 +1461,20 @@  discard block
 block discarded – undo
1462 1461
 	// vue deja presente
1463 1462
 	if (sql_showtable($nom, false, $serveur)) {
1464 1463
 		if ($requeter) {
1465
-			spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", 'pg.' . _LOG_ERREUR);
1464
+			spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", 'pg.'._LOG_ERREUR);
1466 1465
 		}
1467 1466
 
1468 1467
 		return false;
1469 1468
 	}
1470 1469
 
1471
-	$query = "CREATE VIEW $nom AS " . $query_select;
1470
+	$query = "CREATE VIEW $nom AS ".$query_select;
1472 1471
 
1473 1472
 	return spip_pg_query($query, $serveur, $requeter);
1474 1473
 }
1475 1474
 
1476 1475
 
1477 1476
 function spip_pg_set_connect_charset($charset, $serveur = '', $requeter = true) {
1478
-	spip_log('changement de charset sql a ecrire en PG', 'pg.' . _LOG_ERREUR);
1477
+	spip_log('changement de charset sql a ecrire en PG', 'pg.'._LOG_ERREUR);
1479 1478
 }
1480 1479
 
1481 1480
 
@@ -1488,7 +1487,7 @@  discard block
 block discarded – undo
1488 1487
  * @return bool|string true / false / requete
1489 1488
  **/
1490 1489
 function spip_pg_optimize($table, $serveur = '', $requeter = true) {
1491
-	return spip_pg_query('VACUUM ' . $table, $serveur, $requeter);
1490
+	return spip_pg_query('VACUUM '.$table, $serveur, $requeter);
1492 1491
 }
1493 1492
 
1494 1493
 // Selectionner la sous-chaine dans $objet
Please login to merge, or discard this patch.