Completed
Push — master ( f3f7e8...f275b4 )
by cam
01:00
created
ecrire/genie/optimiser.php 2 patches
Indentation   +111 added lines, -111 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 include_spip('base/abstract_sql');
@@ -35,26 +35,26 @@  discard block
 block discarded – undo
35 35
  **/
36 36
 function genie_optimiser_dist($t) {
37 37
 
38
-	optimiser_base_une_table();
39
-	optimiser_base();
40
-	optimiser_caches_contextes();
38
+    optimiser_base_une_table();
39
+    optimiser_base();
40
+    optimiser_caches_contextes();
41 41
 
42
-	// la date souhaitee pour le tour suivant = apres-demain a 4h du mat ;
43
-	// sachant qu'on a un delai de 48h, on renvoie aujourd'hui a 4h du mat
44
-	// avec une periode de flou entre 2h et 6h pour ne pas saturer un hebergeur
45
-	// qui aurait beaucoup de sites SPIP
46
-	return -(mktime(2, 0, 0) + random_int(0, 3600 * 4));
42
+    // la date souhaitee pour le tour suivant = apres-demain a 4h du mat ;
43
+    // sachant qu'on a un delai de 48h, on renvoie aujourd'hui a 4h du mat
44
+    // avec une periode de flou entre 2h et 6h pour ne pas saturer un hebergeur
45
+    // qui aurait beaucoup de sites SPIP
46
+    return -(mktime(2, 0, 0) + random_int(0, 3600 * 4));
47 47
 }
48 48
 
49 49
 /**
50 50
  * Vider les contextes ajax de plus de 48h
51 51
  */
52 52
 function optimiser_caches_contextes() {
53
-	sous_repertoire(_DIR_CACHE, 'contextes');
54
-	if (is_dir($d = _DIR_CACHE . 'contextes')) {
55
-		include_spip('inc/invalideur');
56
-		purger_repertoire($d, ['mtime' => time() - 48 * 24 * 3600, 'limit' => 10000]);
57
-	}
53
+    sous_repertoire(_DIR_CACHE, 'contextes');
54
+    if (is_dir($d = _DIR_CACHE . 'contextes')) {
55
+        include_spip('inc/invalideur');
56
+        purger_repertoire($d, ['mtime' => time() - 48 * 24 * 3600, 'limit' => 10000]);
57
+    }
58 58
 }
59 59
 
60 60
 /**
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
  * @return void
70 70
  **/
71 71
 function optimiser_base($attente = 86400) {
72
-	optimiser_base_disparus($attente);
72
+    optimiser_base_disparus($attente);
73 73
 }
74 74
 
75 75
 
@@ -86,28 +86,28 @@  discard block
 block discarded – undo
86 86
  **/
87 87
 function optimiser_base_une_table() {
88 88
 
89
-	$tables = [];
90
-	$result = sql_showbase();
91
-
92
-	// on n'optimise qu'une seule table a chaque fois,
93
-	// pour ne pas vautrer le systeme
94
-	// lire http://dev.mysql.com/doc/refman/5.0/fr/optimize-table.html
95
-	while ($row = sql_fetch($result)) {
96
-		$tables[] = array_shift($row);
97
-	}
98
-
99
-	spip_log('optimiser_base_une_table ' . json_encode($tables, JSON_THROW_ON_ERROR), 'genie' . _LOG_DEBUG);
100
-	if ($tables) {
101
-		$table_op = intval(lire_config('optimiser_table', 0) + 1) % sizeof($tables);
102
-		ecrire_config('optimiser_table', $table_op);
103
-		$q = $tables[$table_op];
104
-		spip_log("optimiser_base_une_table : debut d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
105
-		if (sql_optimize($q)) {
106
-			spip_log("optimiser_base_une_table : fin d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
107
-		} else {
108
-			spip_log("optimiser_base_une_table : Pas d'optimiseur necessaire", 'genie' . _LOG_DEBUG);
109
-		}
110
-	}
89
+    $tables = [];
90
+    $result = sql_showbase();
91
+
92
+    // on n'optimise qu'une seule table a chaque fois,
93
+    // pour ne pas vautrer le systeme
94
+    // lire http://dev.mysql.com/doc/refman/5.0/fr/optimize-table.html
95
+    while ($row = sql_fetch($result)) {
96
+        $tables[] = array_shift($row);
97
+    }
98
+
99
+    spip_log('optimiser_base_une_table ' . json_encode($tables, JSON_THROW_ON_ERROR), 'genie' . _LOG_DEBUG);
100
+    if ($tables) {
101
+        $table_op = intval(lire_config('optimiser_table', 0) + 1) % sizeof($tables);
102
+        ecrire_config('optimiser_table', $table_op);
103
+        $q = $tables[$table_op];
104
+        spip_log("optimiser_base_une_table : debut d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
105
+        if (sql_optimize($q)) {
106
+            spip_log("optimiser_base_une_table : fin d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
107
+        } else {
108
+            spip_log("optimiser_base_une_table : Pas d'optimiseur necessaire", 'genie' . _LOG_DEBUG);
109
+        }
110
+    }
111 111
 }
112 112
 
113 113
 
@@ -133,18 +133,18 @@  discard block
 block discarded – undo
133 133
  *     Nombre de suppressions
134 134
  **/
135 135
 function optimiser_sansref($table, $id, $sel, $and = '') {
136
-	$in = [];
137
-	while ($row = sql_fetch($sel)) {
138
-		$in[$row['id']] = true;
139
-	}
140
-	sql_free($sel);
141
-
142
-	if ($in) {
143
-		sql_delete($table, sql_in($id, array_keys($in)) . ($and ? " AND $and" : ''));
144
-		spip_log("optimiser_sansref: Numeros des entrees $id supprimees dans la table $table: " . implode(', ', array_keys($in)), 'genie' . _LOG_DEBUG);
145
-	}
146
-
147
-	return count($in);
136
+    $in = [];
137
+    while ($row = sql_fetch($sel)) {
138
+        $in[$row['id']] = true;
139
+    }
140
+    sql_free($sel);
141
+
142
+    if ($in) {
143
+        sql_delete($table, sql_in($id, array_keys($in)) . ($and ? " AND $and" : ''));
144
+        spip_log("optimiser_sansref: Numeros des entrees $id supprimees dans la table $table: " . implode(', ', array_keys($in)), 'genie' . _LOG_DEBUG);
145
+    }
146
+
147
+    return count($in);
148 148
 }
149 149
 
150 150
 
@@ -166,81 +166,81 @@  discard block
 block discarded – undo
166 166
  **/
167 167
 function optimiser_base_disparus($attente = 86400) {
168 168
 
169
-	# format = 20060610110141, si on veut forcer une optimisation tout de suite
170
-	$mydate = date('Y-m-d H:i:s', time() - $attente);
171
-	$mydate_quote = sql_quote($mydate);
169
+    # format = 20060610110141, si on veut forcer une optimisation tout de suite
170
+    $mydate = date('Y-m-d H:i:s', time() - $attente);
171
+    $mydate_quote = sql_quote($mydate);
172 172
 
173
-	$n = 0;
173
+    $n = 0;
174 174
 
175
-	//
176
-	// Rubriques
177
-	//
175
+    //
176
+    // Rubriques
177
+    //
178 178
 
179
-	# les articles qui sont dans une id_rubrique inexistante
180
-	# attention on controle id_rubrique>0 pour ne pas tuer les articles
181
-	# specialement affectes a une rubrique non-existante (plugin,
182
-	# cf. https://core.spip.net/issues/1549 )
183
-	$res = sql_select(
184
-		'A.id_article AS id',
185
-		'spip_articles AS A
179
+    # les articles qui sont dans une id_rubrique inexistante
180
+    # attention on controle id_rubrique>0 pour ne pas tuer les articles
181
+    # specialement affectes a une rubrique non-existante (plugin,
182
+    # cf. https://core.spip.net/issues/1549 )
183
+    $res = sql_select(
184
+        'A.id_article AS id',
185
+        'spip_articles AS A
186 186
 		        LEFT JOIN spip_rubriques AS R
187 187
 		          ON A.id_rubrique=R.id_rubrique',
188
-		"A.id_rubrique > 0
188
+        "A.id_rubrique > 0
189 189
 			 AND R.id_rubrique IS NULL
190 190
 		         AND A.maj < $mydate_quote"
191
-	);
191
+    );
192 192
 
193
-	$n += optimiser_sansref('spip_articles', 'id_article', $res);
193
+    $n += optimiser_sansref('spip_articles', 'id_article', $res);
194 194
 
195
-	// les articles a la poubelle
196
-	sql_delete('spip_articles', "statut='poubelle' AND maj < $mydate_quote");
195
+    // les articles a la poubelle
196
+    sql_delete('spip_articles', "statut='poubelle' AND maj < $mydate_quote");
197 197
 
198
-	//
199
-	// Auteurs
200
-	//
198
+    //
199
+    // Auteurs
200
+    //
201 201
 
202
-	include_spip('action/editer_liens');
203
-	// optimiser les liens de tous les auteurs vers des objets effaces
204
-	// et depuis des auteurs effaces
205
-	$n += objet_optimiser_liens(['auteur' => '*'], '*');
202
+    include_spip('action/editer_liens');
203
+    // optimiser les liens de tous les auteurs vers des objets effaces
204
+    // et depuis des auteurs effaces
205
+    $n += objet_optimiser_liens(['auteur' => '*'], '*');
206 206
 
207
-	# effacer les auteurs poubelle qui ne sont lies a rien
208
-	$res = sql_select(
209
-		'A.id_auteur AS id',
210
-		'spip_auteurs AS A
207
+    # effacer les auteurs poubelle qui ne sont lies a rien
208
+    $res = sql_select(
209
+        'A.id_auteur AS id',
210
+        'spip_auteurs AS A
211 211
 		      	LEFT JOIN spip_auteurs_liens AS L
212 212
 		          ON L.id_auteur=A.id_auteur',
213
-		"L.id_auteur IS NULL
213
+        "L.id_auteur IS NULL
214 214
 		       	AND A.statut='5poubelle' AND A.maj < $mydate_quote"
215
-	);
216
-
217
-	$n += optimiser_sansref('spip_auteurs', 'id_auteur', $res);
218
-
219
-	# supprimer les auteurs 'nouveau' qui n'ont jamais donne suite
220
-	# au mail de confirmation (45 jours pour repondre, ca devrait suffire)
221
-	if (!defined('_AUTEURS_DELAI_REJET_NOUVEAU')) {
222
-		define('_AUTEURS_DELAI_REJET_NOUVEAU', 45 * 24 * 3600);
223
-	}
224
-	sql_delete('spip_auteurs', "statut='nouveau' AND maj < " . sql_quote(date('Y-m-d', time() - intval(_AUTEURS_DELAI_REJET_NOUVEAU))));
225
-
226
-	/**
227
-	 * Permet aux plugins de compléter l'optimisation suite aux éléments disparus
228
-	 *
229
-	 * L'index 'data' est un entier indiquant le nombre d'optimisations
230
-	 * qui ont été réalisées (par exemple le nombre de suppressions faites)
231
-	 * et qui doit être incrémenté par les fonctions
232
-	 * utilisant ce pipeline si elles suppriment des éléments.
233
-	 *
234
-	 * @pipeline_appel optimiser_base_disparus
235
-	 */
236
-	$n = pipeline('optimiser_base_disparus', [
237
-		'args' => [
238
-			'attente' => $attente,
239
-			'date' => $mydate
240
-		],
241
-		'data' => $n
242
-	]);
243
-
244
-
245
-	spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie' . _LOG_DEBUG);
215
+    );
216
+
217
+    $n += optimiser_sansref('spip_auteurs', 'id_auteur', $res);
218
+
219
+    # supprimer les auteurs 'nouveau' qui n'ont jamais donne suite
220
+    # au mail de confirmation (45 jours pour repondre, ca devrait suffire)
221
+    if (!defined('_AUTEURS_DELAI_REJET_NOUVEAU')) {
222
+        define('_AUTEURS_DELAI_REJET_NOUVEAU', 45 * 24 * 3600);
223
+    }
224
+    sql_delete('spip_auteurs', "statut='nouveau' AND maj < " . sql_quote(date('Y-m-d', time() - intval(_AUTEURS_DELAI_REJET_NOUVEAU))));
225
+
226
+    /**
227
+     * Permet aux plugins de compléter l'optimisation suite aux éléments disparus
228
+     *
229
+     * L'index 'data' est un entier indiquant le nombre d'optimisations
230
+     * qui ont été réalisées (par exemple le nombre de suppressions faites)
231
+     * et qui doit être incrémenté par les fonctions
232
+     * utilisant ce pipeline si elles suppriment des éléments.
233
+     *
234
+     * @pipeline_appel optimiser_base_disparus
235
+     */
236
+    $n = pipeline('optimiser_base_disparus', [
237
+        'args' => [
238
+            'attente' => $attente,
239
+            'date' => $mydate
240
+        ],
241
+        'data' => $n
242
+    ]);
243
+
244
+
245
+    spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie' . _LOG_DEBUG);
246 246
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -51,7 +51,7 @@  discard block
 block discarded – undo
51 51
  */
52 52
 function optimiser_caches_contextes() {
53 53
 	sous_repertoire(_DIR_CACHE, 'contextes');
54
-	if (is_dir($d = _DIR_CACHE . 'contextes')) {
54
+	if (is_dir($d = _DIR_CACHE.'contextes')) {
55 55
 		include_spip('inc/invalideur');
56 56
 		purger_repertoire($d, ['mtime' => time() - 48 * 24 * 3600, 'limit' => 10000]);
57 57
 	}
@@ -96,16 +96,16 @@  discard block
 block discarded – undo
96 96
 		$tables[] = array_shift($row);
97 97
 	}
98 98
 
99
-	spip_log('optimiser_base_une_table ' . json_encode($tables, JSON_THROW_ON_ERROR), 'genie' . _LOG_DEBUG);
99
+	spip_log('optimiser_base_une_table '.json_encode($tables, JSON_THROW_ON_ERROR), 'genie'._LOG_DEBUG);
100 100
 	if ($tables) {
101 101
 		$table_op = intval(lire_config('optimiser_table', 0) + 1) % sizeof($tables);
102 102
 		ecrire_config('optimiser_table', $table_op);
103 103
 		$q = $tables[$table_op];
104
-		spip_log("optimiser_base_une_table : debut d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
104
+		spip_log("optimiser_base_une_table : debut d'optimisation de la table $q", 'genie'._LOG_DEBUG);
105 105
 		if (sql_optimize($q)) {
106
-			spip_log("optimiser_base_une_table : fin d'optimisation de la table $q", 'genie' . _LOG_DEBUG);
106
+			spip_log("optimiser_base_une_table : fin d'optimisation de la table $q", 'genie'._LOG_DEBUG);
107 107
 		} else {
108
-			spip_log("optimiser_base_une_table : Pas d'optimiseur necessaire", 'genie' . _LOG_DEBUG);
108
+			spip_log("optimiser_base_une_table : Pas d'optimiseur necessaire", 'genie'._LOG_DEBUG);
109 109
 		}
110 110
 	}
111 111
 }
@@ -140,8 +140,8 @@  discard block
 block discarded – undo
140 140
 	sql_free($sel);
141 141
 
142 142
 	if ($in) {
143
-		sql_delete($table, sql_in($id, array_keys($in)) . ($and ? " AND $and" : ''));
144
-		spip_log("optimiser_sansref: Numeros des entrees $id supprimees dans la table $table: " . implode(', ', array_keys($in)), 'genie' . _LOG_DEBUG);
143
+		sql_delete($table, sql_in($id, array_keys($in)).($and ? " AND $and" : ''));
144
+		spip_log("optimiser_sansref: Numeros des entrees $id supprimees dans la table $table: ".implode(', ', array_keys($in)), 'genie'._LOG_DEBUG);
145 145
 	}
146 146
 
147 147
 	return count($in);
@@ -221,7 +221,7 @@  discard block
 block discarded – undo
221 221
 	if (!defined('_AUTEURS_DELAI_REJET_NOUVEAU')) {
222 222
 		define('_AUTEURS_DELAI_REJET_NOUVEAU', 45 * 24 * 3600);
223 223
 	}
224
-	sql_delete('spip_auteurs', "statut='nouveau' AND maj < " . sql_quote(date('Y-m-d', time() - intval(_AUTEURS_DELAI_REJET_NOUVEAU))));
224
+	sql_delete('spip_auteurs', "statut='nouveau' AND maj < ".sql_quote(date('Y-m-d', time() - intval(_AUTEURS_DELAI_REJET_NOUVEAU))));
225 225
 
226 226
 	/**
227 227
 	 * Permet aux plugins de compléter l'optimisation suite aux éléments disparus
@@ -242,5 +242,5 @@  discard block
 block discarded – undo
242 242
 	]);
243 243
 
244 244
 
245
-	spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie' . _LOG_DEBUG);
245
+	spip_log("optimiser_base_disparus : {$n} lien(s) mort(s)", 'genie'._LOG_DEBUG);
246 246
 }
Please login to merge, or discard this patch.
ecrire/genie/mail.php 2 patches
Indentation   +27 added lines, -27 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
 /**
@@ -32,35 +32,35 @@  discard block
 block discarded – undo
32 32
  * @return int
33 33
  */
34 34
 function genie_mail_dist($t) {
35
-	$adresse_neuf = $GLOBALS['meta']['adresse_neuf'];
36
-	$jours_neuf = $GLOBALS['meta']['jours_neuf'];
35
+    $adresse_neuf = $GLOBALS['meta']['adresse_neuf'];
36
+    $jours_neuf = $GLOBALS['meta']['jours_neuf'];
37 37
 
38
-	$now = time();
39
-	if (!isset($GLOBALS['meta']['dernier_envoi_neuf'])) {
40
-		ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now - (3600 * 24 * $jours_neuf)));
41
-	}
38
+    $now = time();
39
+    if (!isset($GLOBALS['meta']['dernier_envoi_neuf'])) {
40
+        ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now - (3600 * 24 * $jours_neuf)));
41
+    }
42 42
 
43
-	$page = recuperer_fond(
44
-		'nouveautes',
45
-		['date' => $GLOBALS['meta']['dernier_envoi_neuf'], 'jours_neuf' => $jours_neuf],
46
-		['raw' => true]
47
-	);
43
+    $page = recuperer_fond(
44
+        'nouveautes',
45
+        ['date' => $GLOBALS['meta']['dernier_envoi_neuf'], 'jours_neuf' => $jours_neuf],
46
+        ['raw' => true]
47
+    );
48 48
 
49
-	if (strlen(trim($page['texte']))) {
50
-		// recuperer les entetes envoyes par #HTTP_HEADER
51
-		$headers = '';
52
-		if (isset($page['entetes']) and is_countable($page['entetes']) ? count($page['entetes']) : 0) {
53
-			foreach ($page['entetes'] as $k => $v) {
54
-				$headers .= (strlen($v) ? "$k: $v" : $k) . "\n";
55
-			}
56
-		}
49
+    if (strlen(trim($page['texte']))) {
50
+        // recuperer les entetes envoyes par #HTTP_HEADER
51
+        $headers = '';
52
+        if (isset($page['entetes']) and is_countable($page['entetes']) ? count($page['entetes']) : 0) {
53
+            foreach ($page['entetes'] as $k => $v) {
54
+                $headers .= (strlen($v) ? "$k: $v" : $k) . "\n";
55
+            }
56
+        }
57 57
 
58
-		include_spip('inc/notifications');
59
-		notifications_envoyer_mails($adresse_neuf, $page['texte'], '', '', $headers);
60
-		ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now));
61
-	} else {
62
-		spip_log("mail nouveautes : rien de neuf depuis $jours_neuf jours");
63
-	}
58
+        include_spip('inc/notifications');
59
+        notifications_envoyer_mails($adresse_neuf, $page['texte'], '', '', $headers);
60
+        ecrire_meta('dernier_envoi_neuf', date('Y-m-d H:i:s', $now));
61
+    } else {
62
+        spip_log("mail nouveautes : rien de neuf depuis $jours_neuf jours");
63
+    }
64 64
 
65
-	return 1;
65
+    return 1;
66 66
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -51,7 +51,7 @@
 block discarded – undo
51 51
 		$headers = '';
52 52
 		if (isset($page['entetes']) and is_countable($page['entetes']) ? count($page['entetes']) : 0) {
53 53
 			foreach ($page['entetes'] as $k => $v) {
54
-				$headers .= (strlen($v) ? "$k: $v" : $k) . "\n";
54
+				$headers .= (strlen($v) ? "$k: $v" : $k)."\n";
55 55
 			}
56 56
 		}
57 57
 
Please login to merge, or discard this patch.
ecrire/req/sqlite_fonctions.php 2 patches
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -333,7 +333,7 @@  discard block
 block discarded – undo
333 333
  * @return string
334 334
  */
335 335
 function _sqlite_func_preg_replace($quoi, $cherche, $remplace) {
336
-	$return = preg_replace('%' . $cherche . '%', $remplace, $quoi);
336
+	$return = preg_replace('%'.$cherche.'%', $remplace, $quoi);
337 337
 
338 338
 	#spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
339 339
 	return $return;
@@ -409,7 +409,7 @@  discard block
 block discarded – undo
409 409
 	// il faut enlever un niveau d'echappement pour être homogène à mysql
410 410
 	$cherche = str_replace('\\\\', '\\', $cherche);
411 411
 	$u = $GLOBALS['meta']['pcre_u'] ?? 'u';
412
-	$return = preg_match('%' . $cherche . '%imsS' . $u, $quoi);
412
+	$return = preg_match('%'.$cherche.'%imsS'.$u, $quoi);
413 413
 
414 414
 	#spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
415 415
 	return $return;
@@ -461,7 +461,7 @@  discard block
 block discarded – undo
461 461
 		$count = 0;
462 462
 		str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
463 463
 		if ($count > 0) {
464
-			spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
464
+			spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.'._LOG_ERREUR);
465 465
 		}
466 466
 		$to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
467 467
 	}
@@ -480,7 +480,7 @@  discard block
 block discarded – undo
480 480
  */
481 481
 function _sqlite_func_to_days($d) {
482 482
 	static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
483
-	$result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
483
+	$result = $offset + (int) ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
484 484
 
485 485
 	#spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
486 486
 	return $result;
Please login to merge, or discard this patch.
Indentation   +229 added lines, -229 removed lines patch added patch discarded remove patch
@@ -22,7 +22,7 @@  discard block
 block discarded – undo
22 22
  */
23 23
 
24 24
 if (!defined('_ECRIRE_INC_VERSION')) {
25
-	return;
25
+    return;
26 26
 }
27 27
 
28 28
 /**
@@ -43,90 +43,90 @@  discard block
 block discarded – undo
43 43
  */
44 44
 function _sqlite_init_functions(&$sqlite) {
45 45
 
46
-	if (!$sqlite) {
47
-		return false;
48
-	}
46
+    if (!$sqlite) {
47
+        return false;
48
+    }
49 49
 
50 50
 
51
-	$fonctions = [
52
-		// A
53
-		'ACOS'  => ['acos', 1],
54
-		'ASIN'  => ['asin', 1],
55
-		'ATAN'  => ['atan', 1], // mysql accepte 2 params comme atan2… hum ?
56
-		'ATAN2' => ['atan2', 2],
51
+    $fonctions = [
52
+        // A
53
+        'ACOS'  => ['acos', 1],
54
+        'ASIN'  => ['asin', 1],
55
+        'ATAN'  => ['atan', 1], // mysql accepte 2 params comme atan2… hum ?
56
+        'ATAN2' => ['atan2', 2],
57 57
 
58
-		// C
59
-		'CEIL'   => ['_sqlite_func_ceil', 1],
60
-		'CONCAT' => ['_sqlite_func_concat', -1],
61
-		'COS'    => ['cos', 1],
58
+        // C
59
+        'CEIL'   => ['_sqlite_func_ceil', 1],
60
+        'CONCAT' => ['_sqlite_func_concat', -1],
61
+        'COS'    => ['cos', 1],
62 62
 
63
-		// D
64
-		'DATE_FORMAT' => ['_sqlite_func_date_format', 2], // équivalent a strftime avec args inversés
65
-		'DAYOFMONTH'  => ['_sqlite_func_dayofmonth', 1],
66
-		'DEGREES'     => ['rad2deg', 1],
63
+        // D
64
+        'DATE_FORMAT' => ['_sqlite_func_date_format', 2], // équivalent a strftime avec args inversés
65
+        'DAYOFMONTH'  => ['_sqlite_func_dayofmonth', 1],
66
+        'DEGREES'     => ['rad2deg', 1],
67 67
 
68
-		// E
69
-		'EXTRAIRE_MULTI' => ['_sqlite_func_extraire_multi', 2], // specifique a SPIP/sql_multi()
70
-		'EXP'            => ['exp', 1],
68
+        // E
69
+        'EXTRAIRE_MULTI' => ['_sqlite_func_extraire_multi', 2], // specifique a SPIP/sql_multi()
70
+        'EXP'            => ['exp', 1],
71 71
 
72
-		// F
73
-		'FIND_IN_SET' => ['_sqlite_func_find_in_set', 2],
74
-		'FLOOR'       => ['_sqlite_func_floor', 1],
72
+        // F
73
+        'FIND_IN_SET' => ['_sqlite_func_find_in_set', 2],
74
+        'FLOOR'       => ['_sqlite_func_floor', 1],
75 75
 
76
-		// G
77
-		'GREATEST' => ['_sqlite_func_greatest', -1],
76
+        // G
77
+        'GREATEST' => ['_sqlite_func_greatest', -1],
78 78
 
79
-		// I
80
-		'IF'     => ['_sqlite_func_if', 3],
81
-		'INSERT' => ['_sqlite_func_insert', 4],
82
-		'INSTR'  => ['_sqlite_func_instr', 2],
79
+        // I
80
+        'IF'     => ['_sqlite_func_if', 3],
81
+        'INSERT' => ['_sqlite_func_insert', 4],
82
+        'INSTR'  => ['_sqlite_func_instr', 2],
83 83
 
84
-		// L
85
-		'LEAST'  => ['_sqlite_func_least', -1],
86
-		'_LEFT'  => ['_sqlite_func_left', 2],
84
+        // L
85
+        'LEAST'  => ['_sqlite_func_least', -1],
86
+        '_LEFT'  => ['_sqlite_func_left', 2],
87 87
 
88
-		// N
89
-		'NOW' => ['_sqlite_func_now', 0],
88
+        // N
89
+        'NOW' => ['_sqlite_func_now', 0],
90 90
 
91
-		// M
92
-		'MD5'   => ['md5', 1],
93
-		'MONTH' => ['_sqlite_func_month', 1],
91
+        // M
92
+        'MD5'   => ['md5', 1],
93
+        'MONTH' => ['_sqlite_func_month', 1],
94 94
 
95
-		// P
96
-		'PREG_REPLACE' => ['_sqlite_func_preg_replace', 3],
95
+        // P
96
+        'PREG_REPLACE' => ['_sqlite_func_preg_replace', 3],
97 97
 
98
-		// R
99
-		'RADIANS' => ['deg2rad', 1],
100
-		'RAND'    => ['_sqlite_func_rand', 0], // sinon random() v2.4
101
-		'REGEXP'  => ['_sqlite_func_regexp_match', 2], // critere REGEXP supporte a partir de v3.3.2
102
-		'RIGHT'   => ['_sqlite_func_right', 2],
98
+        // R
99
+        'RADIANS' => ['deg2rad', 1],
100
+        'RAND'    => ['_sqlite_func_rand', 0], // sinon random() v2.4
101
+        'REGEXP'  => ['_sqlite_func_regexp_match', 2], // critere REGEXP supporte a partir de v3.3.2
102
+        'RIGHT'   => ['_sqlite_func_right', 2],
103 103
 
104
-		// S
105
-		'SETTYPE'   => ['settype', 2], // CAST present en v3.2.3
106
-		'SIN'       => ['sin', 1],
107
-		'SQRT'      => ['sqrt', 1],
108
-		'SUBSTRING' => ['_sqlite_func_substring' /*, 3*/], // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
104
+        // S
105
+        'SETTYPE'   => ['settype', 2], // CAST present en v3.2.3
106
+        'SIN'       => ['sin', 1],
107
+        'SQRT'      => ['sqrt', 1],
108
+        'SUBSTRING' => ['_sqlite_func_substring' /*, 3*/], // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
109 109
 
110
-		// T
111
-		'TAN'           => ['tan', 1],
112
-		'TIMESTAMPDIFF' => ['_sqlite_timestampdiff'    /*, 3*/],
113
-		'TO_DAYS'       => ['_sqlite_func_to_days', 1],
110
+        // T
111
+        'TAN'           => ['tan', 1],
112
+        'TIMESTAMPDIFF' => ['_sqlite_timestampdiff'    /*, 3*/],
113
+        'TO_DAYS'       => ['_sqlite_func_to_days', 1],
114 114
 
115
-		// U
116
-		'UNIX_TIMESTAMP' => ['_sqlite_func_unix_timestamp', 1],
115
+        // U
116
+        'UNIX_TIMESTAMP' => ['_sqlite_func_unix_timestamp', 1],
117 117
 
118
-		// V
119
-		'VIDE' => ['_sqlite_func_vide', 0], // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
118
+        // V
119
+        'VIDE' => ['_sqlite_func_vide', 0], // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
120 120
 
121
-		// Y
122
-		'YEAR' => ['_sqlite_func_year', 1]
123
-	];
121
+        // Y
122
+        'YEAR' => ['_sqlite_func_year', 1]
123
+    ];
124 124
 
125
-	foreach ($fonctions as $f => $r) {
126
-		_sqlite_add_function($sqlite, $f, $r);
127
-	}
125
+    foreach ($fonctions as $f => $r) {
126
+        _sqlite_add_function($sqlite, $f, $r);
127
+    }
128 128
 
129
-	#spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
129
+    #spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
130 130
 }
131 131
 
132 132
 
@@ -147,9 +147,9 @@  discard block
 block discarded – undo
147 147
  *
148 148
 **/
149 149
 function _sqlite_add_function(&$sqlite, &$f, &$r) {
150
-	isset($r[1])
151
-		? $sqlite->sqliteCreateFunction($f, $r[0], $r[1])
152
-		: $sqlite->sqliteCreateFunction($f, $r[0]);
150
+    isset($r[1])
151
+        ? $sqlite->sqliteCreateFunction($f, $r[0], $r[1])
152
+        : $sqlite->sqliteCreateFunction($f, $r[0]);
153 153
 }
154 154
 
155 155
 /**
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
  * @return int
160 160
  */
161 161
 function _sqlite_func_ceil($a) {
162
-	return ceil($a);
162
+    return ceil($a);
163 163
 }
164 164
 
165 165
 /**
@@ -169,7 +169,7 @@  discard block
 block discarded – undo
169 169
  * @return string
170 170
  */
171 171
 function _sqlite_func_concat(...$args) {
172
-	return join('', $args);
172
+    return join('', $args);
173 173
 }
174 174
 
175 175
 
@@ -182,7 +182,7 @@  discard block
 block discarded – undo
182 182
  * @return string
183 183
  */
184 184
 function _sqlite_func_dayofmonth($d) {
185
-	return _sqlite_func_date('d', $d);
185
+    return _sqlite_func_date('d', $d);
186 186
 }
187 187
 
188 188
 
@@ -194,15 +194,15 @@  discard block
 block discarded – undo
194 194
  * @return int
195 195
  */
196 196
 function _sqlite_func_find_in_set($num, $set) {
197
-	$rank = 0;
198
-	foreach (explode(',', $set) as $v) {
199
-		if ($v == $num) {
200
-			return (++$rank);
201
-		}
202
-		$rank++;
203
-	}
204
-
205
-	return 0;
197
+    $rank = 0;
198
+    foreach (explode(',', $set) as $v) {
199
+        if ($v == $num) {
200
+            return (++$rank);
201
+        }
202
+        $rank++;
203
+    }
204
+
205
+    return 0;
206 206
 }
207 207
 
208 208
 /**
@@ -212,7 +212,7 @@  discard block
 block discarded – undo
212 212
  * @return int
213 213
  */
214 214
 function _sqlite_func_floor($a) {
215
-	return floor($a);
215
+    return floor($a);
216 216
 }
217 217
 
218 218
 
@@ -225,7 +225,7 @@  discard block
 block discarded – undo
225 225
  * @return mixed
226 226
  */
227 227
 function _sqlite_func_if($bool, $oui, $non) {
228
-	return ($bool) ? $oui : $non;
228
+    return ($bool) ? $oui : $non;
229 229
 }
230 230
 
231 231
 
@@ -242,10 +242,10 @@  discard block
 block discarded – undo
242 242
  * @return string
243 243
  */
244 244
 function _sqlite_func_insert($s, $index, $longueur, $chaine) {
245
-	return
246
-		substr($s, 0, $index)
247
-		. $chaine
248
-		. substr(substr($s, $index), $longueur);
245
+    return
246
+        substr($s, 0, $index)
247
+        . $chaine
248
+        . substr(substr($s, $index), $longueur);
249 249
 }
250 250
 
251 251
 
@@ -257,7 +257,7 @@  discard block
 block discarded – undo
257 257
  * @return int
258 258
  */
259 259
 function _sqlite_func_instr($s, $search) {
260
-	return strpos($s, $search);
260
+    return strpos($s, $search);
261 261
 }
262 262
 
263 263
 
@@ -268,7 +268,7 @@  discard block
 block discarded – undo
268 268
  * @return int
269 269
  */
270 270
 function _sqlite_func_least(...$args) {
271
-	return min($args);
271
+    return min($args);
272 272
 }
273 273
 
274 274
 
@@ -279,7 +279,7 @@  discard block
 block discarded – undo
279 279
  * @return int
280 280
  */
281 281
 function _sqlite_func_greatest(...$args) {
282
-	return max($args);
282
+    return max($args);
283 283
 }
284 284
 
285 285
 
@@ -291,7 +291,7 @@  discard block
 block discarded – undo
291 291
  * @return string
292 292
  */
293 293
 function _sqlite_func_left($s, $lenght) {
294
-	return substr($s, $lenght);
294
+    return substr($s, $lenght);
295 295
 }
296 296
 
297 297
 /**
@@ -301,13 +301,13 @@  discard block
 block discarded – undo
301 301
  * @return string
302 302
  */
303 303
 function _sqlite_func_now($force_refresh = false) {
304
-	static $now = null;
305
-	if (is_null($now) or $force_refresh) {
306
-		$now = date('Y-m-d H:i:s');
307
-	}
304
+    static $now = null;
305
+    if (is_null($now) or $force_refresh) {
306
+        $now = date('Y-m-d H:i:s');
307
+    }
308 308
 
309
-	#spip_log("Passage avec NOW : $now | ".time(),'sqlite.'._LOG_DEBUG);
310
-	return $now;
309
+    #spip_log("Passage avec NOW : $now | ".time(),'sqlite.'._LOG_DEBUG);
310
+    return $now;
311 311
 }
312 312
 
313 313
 
@@ -320,7 +320,7 @@  discard block
 block discarded – undo
320 320
  * @return string
321 321
  */
322 322
 function _sqlite_func_month($d) {
323
-	return _sqlite_func_date('m', $d);
323
+    return _sqlite_func_date('m', $d);
324 324
 }
325 325
 
326 326
 
@@ -333,10 +333,10 @@  discard block
 block discarded – undo
333 333
  * @return string
334 334
  */
335 335
 function _sqlite_func_preg_replace($quoi, $cherche, $remplace) {
336
-	$return = preg_replace('%' . $cherche . '%', $remplace, $quoi);
336
+    $return = preg_replace('%' . $cherche . '%', $remplace, $quoi);
337 337
 
338
-	#spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
339
-	return $return;
338
+    #spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
339
+    return $return;
340 340
 }
341 341
 
342 342
 /**
@@ -349,26 +349,26 @@  discard block
 block discarded – undo
349 349
  * @return string, l'extrait trouve.
350 350
  **/
351 351
 function _sqlite_func_extraire_multi($quoi, $lang) {
352
-	if (!defined('_EXTRAIRE_MULTI')) {
353
-		include_spip('inc/filtres');
354
-	}
355
-	if (!function_exists('approcher_langue')) {
356
-		include_spip('inc/lang');
357
-	}
358
-	if (preg_match_all(_EXTRAIRE_MULTI, $quoi, $regs, PREG_SET_ORDER)) {
359
-		foreach ($regs as $reg) {
360
-			// chercher la version de la langue courante
361
-			$trads = extraire_trads($reg[1]);
362
-			if ($l = approcher_langue($trads, $lang)) {
363
-				$trad = $trads[$l];
364
-			} else {
365
-				$trad = reset($trads);
366
-			}
367
-			$quoi = str_replace($reg[0], $trad, $quoi);
368
-		}
369
-	}
370
-
371
-	return $quoi;
352
+    if (!defined('_EXTRAIRE_MULTI')) {
353
+        include_spip('inc/filtres');
354
+    }
355
+    if (!function_exists('approcher_langue')) {
356
+        include_spip('inc/lang');
357
+    }
358
+    if (preg_match_all(_EXTRAIRE_MULTI, $quoi, $regs, PREG_SET_ORDER)) {
359
+        foreach ($regs as $reg) {
360
+            // chercher la version de la langue courante
361
+            $trads = extraire_trads($reg[1]);
362
+            if ($l = approcher_langue($trads, $lang)) {
363
+                $trad = $trads[$l];
364
+            } else {
365
+                $trad = reset($trads);
366
+            }
367
+            $quoi = str_replace($reg[0], $trad, $quoi);
368
+        }
369
+    }
370
+
371
+    return $quoi;
372 372
 }
373 373
 
374 374
 
@@ -378,7 +378,7 @@  discard block
 block discarded – undo
378 378
  * @return float
379 379
  */
380 380
 function _sqlite_func_rand() {
381
-	return random_int(0, mt_getrandmax());
381
+    return random_int(0, mt_getrandmax());
382 382
 }
383 383
 
384 384
 
@@ -390,7 +390,7 @@  discard block
 block discarded – undo
390 390
  * @return string
391 391
  */
392 392
 function _sqlite_func_right($s, $length) {
393
-	return substr($s, 0 - $length);
393
+    return substr($s, 0 - $length);
394 394
 }
395 395
 
396 396
 
@@ -402,17 +402,17 @@  discard block
 block discarded – undo
402 402
  * @return bool
403 403
  */
404 404
 function _sqlite_func_regexp_match($cherche, $quoi) {
405
-	// optimiser un cas tres courant avec les requetes en base
406
-	if (!$quoi and !strlen($quoi)) {
407
-		return false;
408
-	}
409
-	// il faut enlever un niveau d'echappement pour être homogène à mysql
410
-	$cherche = str_replace('\\\\', '\\', $cherche);
411
-	$u = $GLOBALS['meta']['pcre_u'] ?? 'u';
412
-	$return = preg_match('%' . $cherche . '%imsS' . $u, $quoi);
413
-
414
-	#spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
415
-	return $return;
405
+    // optimiser un cas tres courant avec les requetes en base
406
+    if (!$quoi and !strlen($quoi)) {
407
+        return false;
408
+    }
409
+    // il faut enlever un niveau d'echappement pour être homogène à mysql
410
+    $cherche = str_replace('\\\\', '\\', $cherche);
411
+    $u = $GLOBALS['meta']['pcre_u'] ?? 'u';
412
+    $return = preg_match('%' . $cherche . '%imsS' . $u, $quoi);
413
+
414
+    #spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
415
+    return $return;
416 416
 }
417 417
 
418 418
 
@@ -427,8 +427,8 @@  discard block
 block discarded – undo
427 427
  * @return string
428 428
  */
429 429
 function _sqlite_func_date_format($date, $conv) {
430
-	$conv = _sqlite_func_strftime_format_converter($conv);
431
-	return strftime($conv, is_int($date) ? $date : strtotime($date));
430
+    $conv = _sqlite_func_strftime_format_converter($conv);
431
+    return strftime($conv, is_int($date) ? $date : strtotime($date));
432 432
 }
433 433
 
434 434
 /**
@@ -444,28 +444,28 @@  discard block
 block discarded – undo
444 444
  * @return void
445 445
  */
446 446
 function _sqlite_func_strftime_format_converter(string $conv): string {
447
-	// ok : %a %b %d %e %H %I %l %j %k %m %p %r %S %T %w %y %Y
448
-	// on ne sait pas en gérer certains...
449
-	static $mysql_to_strftime_not_ok = ['%c', '%D', '%f', '%U', '%V', '%W', '%X'];
450
-	static $mysql_to_strftime = [
451
-		'%h' => '%I',
452
-		'%i' => '%M',
453
-		'%M' => '%B',
454
-		'%s' => '%S',
455
-		'%u' => '%U',
456
-		'%v' => '%V',
457
-		'%x' => '%G',
458
-	];
459
-	static $to_strftime = [];
460
-	if (!isset($to_strftime[$conv])) {
461
-		$count = 0;
462
-		str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
463
-		if ($count > 0) {
464
-			spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
465
-		}
466
-		$to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
467
-	}
468
-	return $to_strftime[$conv];
447
+    // ok : %a %b %d %e %H %I %l %j %k %m %p %r %S %T %w %y %Y
448
+    // on ne sait pas en gérer certains...
449
+    static $mysql_to_strftime_not_ok = ['%c', '%D', '%f', '%U', '%V', '%W', '%X'];
450
+    static $mysql_to_strftime = [
451
+        '%h' => '%I',
452
+        '%i' => '%M',
453
+        '%M' => '%B',
454
+        '%s' => '%S',
455
+        '%u' => '%U',
456
+        '%v' => '%V',
457
+        '%x' => '%G',
458
+    ];
459
+    static $to_strftime = [];
460
+    if (!isset($to_strftime[$conv])) {
461
+        $count = 0;
462
+        str_replace($mysql_to_strftime_not_ok, '', $conv, $count);
463
+        if ($count > 0) {
464
+            spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_ERREUR);
465
+        }
466
+        $to_strftime[$conv] = str_replace(array_keys($mysql_to_strftime), $mysql_to_strftime, $conv);
467
+    }
468
+    return $to_strftime[$conv];
469 469
 }
470 470
 
471 471
 /**
@@ -479,11 +479,11 @@  discard block
 block discarded – undo
479 479
  * @return int
480 480
  */
481 481
 function _sqlite_func_to_days($d) {
482
-	static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
483
-	$result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
482
+    static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
483
+    $result = $offset + (int)ceil(_sqlite_func_unix_timestamp($d) / (24 * 3600));
484 484
 
485
-	#spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
486
-	return $result;
485
+    #spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
486
+    return $result;
487 487
 }
488 488
 
489 489
 /**
@@ -495,13 +495,13 @@  discard block
 block discarded – undo
495 495
  * @return string
496 496
  */
497 497
 function _sqlite_func_substring($string, $start, $len = null) {
498
-	// SQL compte a partir de 1, php a partir de 0
499
-	$start = ($start > 0) ? $start - 1 : $start;
500
-	if (is_null($len)) {
501
-		return substr($string, $start);
502
-	} else {
503
-		return substr($string, $start, $len);
504
-	}
498
+    // SQL compte a partir de 1, php a partir de 0
499
+    $start = ($start > 0) ? $start - 1 : $start;
500
+    if (is_null($len)) {
501
+        return substr($string, $start);
502
+    } else {
503
+        return substr($string, $start, $len);
504
+    }
505 505
 }
506 506
 
507 507
 /**
@@ -517,33 +517,33 @@  discard block
 block discarded – undo
517 517
  * @return int
518 518
  */
519 519
 function _sqlite_timestampdiff($unit, $date1, $date2) {
520
-	$d1 = date_create($date1);
521
-	$d2 = date_create($date2);
522
-	$diff = date_diff($d1, $d2);
523
-	$inv = $diff->invert ? -1 : 1;
524
-	switch ($unit) {
525
-		case 'YEAR':
526
-			return $inv * $diff->y;
527
-		case 'QUARTER':
528
-			return $inv * (4 * $diff->y + intval(floor($diff->m / 3)));
529
-		case 'MONTH':
530
-			return $inv * (12 * $diff->y + $diff->m);
531
-		case 'WEEK':
532
-			return $inv * intval(floor($diff->days / 7));
533
-		case 'DAY':
534
-			#var_dump($inv*$diff->days);
535
-			return $inv * $diff->days;
536
-		case 'HOUR':
537
-			return $inv * (24 * $diff->days + $diff->h);
538
-		case 'MINUTE':
539
-			return $inv * ((24 * $diff->days + $diff->h) * 60 + $diff->i);
540
-		case 'SECOND':
541
-			return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s);
542
-		case 'MICROSECOND':
543
-			return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s) * 1_000_000;
544
-	}
545
-
546
-	return 0;
520
+    $d1 = date_create($date1);
521
+    $d2 = date_create($date2);
522
+    $diff = date_diff($d1, $d2);
523
+    $inv = $diff->invert ? -1 : 1;
524
+    switch ($unit) {
525
+        case 'YEAR':
526
+            return $inv * $diff->y;
527
+        case 'QUARTER':
528
+            return $inv * (4 * $diff->y + intval(floor($diff->m / 3)));
529
+        case 'MONTH':
530
+            return $inv * (12 * $diff->y + $diff->m);
531
+        case 'WEEK':
532
+            return $inv * intval(floor($diff->days / 7));
533
+        case 'DAY':
534
+            #var_dump($inv*$diff->days);
535
+            return $inv * $diff->days;
536
+        case 'HOUR':
537
+            return $inv * (24 * $diff->days + $diff->h);
538
+        case 'MINUTE':
539
+            return $inv * ((24 * $diff->days + $diff->h) * 60 + $diff->i);
540
+        case 'SECOND':
541
+            return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s);
542
+        case 'MICROSECOND':
543
+            return $inv * (((24 * $diff->days + $diff->h) * 60 + $diff->i) * 60 + $diff->s) * 1_000_000;
544
+    }
545
+
546
+    return 0;
547 547
 }
548 548
 
549 549
 /**
@@ -553,24 +553,24 @@  discard block
 block discarded – undo
553 553
  * @return int
554 554
  */
555 555
 function _sqlite_func_unix_timestamp($d) {
556
-	static $mem = [];
557
-	static $n = 0;
558
-	if (isset($mem[$d])) {
559
-		return $mem[$d];
560
-	}
561
-	if ($n++ > 100) {
562
-		$mem = [];
563
-		$n = 0;
564
-	}
565
-
566
-	//2005-12-02 20:53:53
567
-	#spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
568
-	if (!$d) {
569
-		return $mem[$d] = time();
570
-	}
571
-
572
-	// une pile plus grosse n'accelere pas le calcul
573
-	return $mem[$d] = strtotime($d);
556
+    static $mem = [];
557
+    static $n = 0;
558
+    if (isset($mem[$d])) {
559
+        return $mem[$d];
560
+    }
561
+    if ($n++ > 100) {
562
+        $mem = [];
563
+        $n = 0;
564
+    }
565
+
566
+    //2005-12-02 20:53:53
567
+    #spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
568
+    if (!$d) {
569
+        return $mem[$d] = time();
570
+    }
571
+
572
+    // une pile plus grosse n'accelere pas le calcul
573
+    return $mem[$d] = strtotime($d);
574 574
 }
575 575
 
576 576
 
@@ -583,7 +583,7 @@  discard block
 block discarded – undo
583 583
  * @return string
584 584
  */
585 585
 function _sqlite_func_year($d) {
586
-	return _sqlite_func_date('Y', $d);
586
+    return _sqlite_func_date('Y', $d);
587 587
 }
588 588
 
589 589
 /**
@@ -596,20 +596,20 @@  discard block
 block discarded – undo
596 596
  * @return string
597 597
  */
598 598
 function _sqlite_func_date($quoi, $d) {
599
-	static $mem = [];
600
-	static $n = 0;
601
-	if (isset($mem[$d])) {
602
-		return $mem[$d][$quoi];
603
-	}
604
-	if ($n++ > 100) {
605
-		$mem = [];
606
-		$n = 0;
607
-	}
608
-
609
-	$dec = date('Y-m-d', _sqlite_func_unix_timestamp($d));
610
-	$mem[$d] = ['Y' => substr($dec, 0, 4), 'm' => substr($dec, 5, 2), 'd' => substr($dec, 8, 2)];
611
-
612
-	return $mem[$d][$quoi];
599
+    static $mem = [];
600
+    static $n = 0;
601
+    if (isset($mem[$d])) {
602
+        return $mem[$d][$quoi];
603
+    }
604
+    if ($n++ > 100) {
605
+        $mem = [];
606
+        $n = 0;
607
+    }
608
+
609
+    $dec = date('Y-m-d', _sqlite_func_unix_timestamp($d));
610
+    $mem[$d] = ['Y' => substr($dec, 0, 4), 'm' => substr($dec, 5, 2), 'd' => substr($dec, 8, 2)];
611
+
612
+    return $mem[$d][$quoi];
613 613
 }
614 614
 
615 615
 /**
@@ -618,5 +618,5 @@  discard block
 block discarded – undo
618 618
  * @return void
619 619
  */
620 620
 function _sqlite_func_vide() {
621
-	return;
621
+    return;
622 622
 }
Please login to merge, or discard this patch.
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   +78 added lines, -78 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;
@@ -612,7 +612,7 @@  discard block
 block discarded – undo
612 612
 	$link = _mysql_link($serveur);
613 613
 	$ok = mysqli_select_db($link, $db);
614 614
 	if (!$ok) {
615
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
615
+		spip_log('Echec mysqli_selectdb. Erreur : '.mysqli_error($link), 'mysql.'._LOG_CRITIQUE);
616 616
 	}
617 617
 
618 618
 	return $ok;
@@ -702,10 +702,10 @@  discard block
 block discarded – undo
702 702
 
703 703
 	$character_set = '';
704 704
 	if (@$GLOBALS['meta']['charset_sql_base']) {
705
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
705
+		$character_set .= ' CHARACTER SET '.$GLOBALS['meta']['charset_sql_base'];
706 706
 	}
707 707
 	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
708
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
708
+		$character_set .= ' COLLATE '.$GLOBALS['meta']['charset_collation_sql_base'];
709 709
 	}
710 710
 
711 711
 	foreach ($champs as $k => $v) {
@@ -715,7 +715,7 @@  discard block
 block discarded – undo
715 715
 				preg_match(',(char|text),i', $defs[1])
716 716
 				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
717 717
 			) {
718
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
718
+				$v = $defs[1].$character_set.' '.substr($v, strlen($defs[1]));
719 719
 			}
720 720
 		}
721 721
 
@@ -727,7 +727,7 @@  discard block
 block discarded – undo
727 727
 		$s = ',';
728 728
 	}
729 729
 	$temporary = $temporary ? 'TEMPORARY' : '';
730
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
730
+	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query".($keys ? ",$keys" : '').')'
731 731
 		. ' ENGINE=MyISAM'
732 732
 		. ($character_set ? " DEFAULT $character_set" : '')
733 733
 		. "\n";
@@ -807,7 +807,7 @@  discard block
 block discarded – undo
807 807
 		return false;
808 808
 	}
809 809
 
810
-	$query = "CREATE VIEW $nom AS " . $query_select;
810
+	$query = "CREATE VIEW $nom AS ".$query_select;
811 811
 
812 812
 	return spip_mysql_query($query, $serveur, $requeter);
813 813
 }
@@ -865,7 +865,7 @@  discard block
 block discarded – undo
865 865
  *     Ressource à utiliser avec sql_fetch()
866 866
  **/
867 867
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
868
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
868
+	return spip_mysql_query('SHOW TABLES LIKE '._q($match), $serveur, $requeter);
869 869
 }
870 870
 
871 871
 /**
@@ -899,7 +899,7 @@  discard block
 block discarded – undo
899 899
  *     - string : requete sql, si $requeter = true
900 900
  **/
901 901
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
902
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
902
+	$r = spip_mysql_query('SHOW TABLES LIKE '._q($table), $serveur, $requeter);
903 903
 	if (!$requeter) {
904 904
 		return $r;
905 905
 	}
@@ -981,22 +981,22 @@  discard block
 block discarded – undo
981 981
 			}
982 982
 			if ($val['Default'] === '0' || $val['Default']) {
983 983
 				if (preg_match('/[A-Z_]/', $val['Default'])) {
984
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
984
+					$nfields[$val['Field']] .= ' DEFAULT '.$val['Default'];
985 985
 				} else {
986
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
986
+					$nfields[$val['Field']] .= " DEFAULT '".$val['Default']."'";
987 987
 				}
988 988
 			}
989 989
 			if ($val['Extra']) {
990
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
990
+				$nfields[$val['Field']] .= ' '.$val['Extra'];
991 991
 			}
992 992
 			if ($val['Key'] == 'PRI') {
993 993
 				$nkeys['PRIMARY KEY'] = $val['Field'];
994 994
 			} else {
995 995
 				if ($val['Key'] == 'MUL') {
996
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
996
+					$nkeys['KEY '.$val['Field']] = $val['Field'];
997 997
 				} else {
998 998
 					if ($val['Key'] == 'UNI') {
999
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
999
+						$nkeys['UNIQUE KEY '.$val['Field']] = $val['Field'];
1000 1000
 					}
1001 1001
 				}
1002 1002
 			}
@@ -1067,7 +1067,7 @@  discard block
 block discarded – undo
1067 1067
 	$serveur = '',
1068 1068
 	$requeter = true
1069 1069
 ) {
1070
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1070
+	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
1071 1071
 
1072 1072
 	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1073 1073
 	if (!$requeter) {
@@ -1107,7 +1107,7 @@  discard block
 block discarded – undo
1107 1107
 	if ($s) {
1108 1108
 		$trace = debug_backtrace();
1109 1109
 		if ($trace[0]['function'] != 'spip_mysql_error') {
1110
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1110
+			spip_log("$s - $query - ".sql_error_backtrace(), 'mysql.'._LOG_ERREUR);
1111 1111
 		}
1112 1112
 	}
1113 1113
 
@@ -1233,7 +1233,7 @@  discard block
 block discarded – undo
1233 1233
 	try {
1234 1234
 		$insert = mysqli_query($link, $query);
1235 1235
 	} catch (\mysqli_sql_exception $e) {
1236
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1236
+		spip_log('mysqli_sql_exception: '.$e->getMessage(), 'mysql.'._LOG_DEBUG);
1237 1237
 		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1238 1238
 		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1239 1239
 	}
@@ -1288,8 +1288,8 @@  discard block
 block discarded – undo
1288 1288
 
1289 1289
 	return spip_mysql_insert(
1290 1290
 		$table,
1291
-		'(' . join(',', array_keys($couples)) . ')',
1292
-		'(' . join(',', $couples) . ')',
1291
+		'('.join(',', array_keys($couples)).')',
1292
+		'('.join(',', $couples).')',
1293 1293
 		$desc,
1294 1294
 		$serveur,
1295 1295
 		$requeter
@@ -1326,7 +1326,7 @@  discard block
 block discarded – undo
1326 1326
 	}
1327 1327
 	$fields = $desc['field'] ?? [];
1328 1328
 
1329
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1329
+	$cles = '('.join(',', array_keys(reset($tab_couples))).')';
1330 1330
 	$valeurs = [];
1331 1331
 	$r = false;
1332 1332
 
@@ -1335,7 +1335,7 @@  discard block
 block discarded – undo
1335 1335
 		foreach ($couples as $champ => $val) {
1336 1336
 			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1337 1337
 		}
1338
-		$valeurs[] = '(' . join(',', $couples) . ')';
1338
+		$valeurs[] = '('.join(',', $couples).')';
1339 1339
 		if (count($valeurs) >= 100) {
1340 1340
 			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1341 1341
 			$valeurs = [];
@@ -1372,7 +1372,7 @@  discard block
 block discarded – undo
1372 1372
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1373 1373
 	$set = [];
1374 1374
 	foreach ($champs as $champ => $val) {
1375
-		$set[] = $champ . "=$val";
1375
+		$set[] = $champ."=$val";
1376 1376
 	}
1377 1377
 	if (!empty($set)) {
1378 1378
 		return spip_mysql_query(
@@ -1428,7 +1428,7 @@  discard block
 block discarded – undo
1428 1428
 	}
1429 1429
 	$set = [];
1430 1430
 	foreach ($champs as $champ => $val) {
1431
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1431
+		$set[] = $champ.'='.spip_mysql_cite($val, @$fields[$champ]);
1432 1432
 	}
1433 1433
 
1434 1434
 	return spip_mysql_query(
@@ -1497,10 +1497,10 @@  discard block
 block discarded – undo
1497 1497
  *     - False en cas d'erreur.
1498 1498
  **/
1499 1499
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1500
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1500
+	return spip_mysql_query("REPLACE $table (".join(',', array_keys($couples)).') VALUES ('.join(
1501 1501
 		',',
1502 1502
 		array_map('_q', $couples)
1503
-	) . ')', $serveur, $requeter);
1503
+	).')', $serveur, $requeter);
1504 1504
 }
1505 1505
 
1506 1506
 
@@ -1529,10 +1529,10 @@  discard block
 block discarded – undo
1529 1529
  *     - False en cas d'erreur.
1530 1530
  **/
1531 1531
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1532
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1532
+	$cles = '('.join(',', array_keys($tab_couples[0])).')';
1533 1533
 	$valeurs = [];
1534 1534
 	foreach ($tab_couples as $couples) {
1535
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1535
+		$valeurs[] = '('.join(',', array_map('_q', $couples)).')';
1536 1536
 	}
1537 1537
 	$valeurs = implode(', ', $valeurs);
1538 1538
 
@@ -1552,28 +1552,28 @@  discard block
 block discarded – undo
1552 1552
  */
1553 1553
 function spip_mysql_multi($objet, $lang) {
1554 1554
 	$lengthlang = strlen("[$lang]");
1555
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1556
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1557
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1558
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1559
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1560
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1555
+	$posmulti = 'INSTR('.$objet.", '<multi>')";
1556
+	$posfinmulti = 'INSTR('.$objet.", '</multi>')";
1557
+	$debutchaine = 'LEFT('.$objet.", $posmulti-1)";
1558
+	$finchaine = 'RIGHT('.$objet.', CHAR_LENGTH('.$objet.") -(7+$posfinmulti))";
1559
+	$chainemulti = 'TRIM(SUBSTRING('.$objet.", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1560
+	$poslang = "INSTR($chainemulti,'[".$lang."]')";
1561 1561
 	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1562
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1563
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1562
+	$chainelang = 'TRIM(SUBSTRING('.$objet.", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1563
+	$posfinlang = 'INSTR('.$chainelang.", '[')";
1564 1564
 	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1565 1565
 	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1566
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1567
-		'     TRIM(' . $objet . '), ' .
1568
-		'     CONCAT( ' .
1569
-		"          $debutchaine, " .
1570
-		'          IF( ' .
1571
-		"               $poslang = 0, " .
1572
-		"                     $chainemulti, " .
1573
-		"               $chainelang" .
1574
-		'          ), ' .
1575
-		"          $finchaine" .
1576
-		'     ) ' .
1566
+	$retour = "(TRIM(IF($posmulti = 0 , ".
1567
+		'     TRIM('.$objet.'), '.
1568
+		'     CONCAT( '.
1569
+		"          $debutchaine, ".
1570
+		'          IF( '.
1571
+		"               $poslang = 0, ".
1572
+		"                     $chainemulti, ".
1573
+		"               $chainelang".
1574
+		'          ), '.
1575
+		"          $finchaine".
1576
+		'     ) '.
1577 1577
 		'))) AS multi';
1578 1578
 
1579 1579
 	return $retour;
@@ -1590,7 +1590,7 @@  discard block
 block discarded – undo
1590 1590
  *     Valeur hexadécimale pour MySQL
1591 1591
  **/
1592 1592
 function spip_mysql_hex($v) {
1593
-	return '0x' . $v;
1593
+	return '0x'.$v;
1594 1594
 }
1595 1595
 
1596 1596
 /**
@@ -1630,7 +1630,7 @@  discard block
 block discarded – undo
1630 1630
  *     Expression SQL
1631 1631
  **/
1632 1632
 function spip_mysql_date_proche($champ, $interval, $unite) {
1633
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1633
+	$use_now = (($champ === 'maj' or strpos($champ, '.maj')) ? true : false);
1634 1634
 	return '('
1635 1635
 	. $champ
1636 1636
 	. (($interval <= 0) ? '>' : '<')
@@ -1685,7 +1685,7 @@  discard block
 block discarded – undo
1685 1685
 		} elseif ($v === null) {
1686 1686
 			return "''";
1687 1687
 		}
1688
-		return "'" . addslashes($v) . "'";
1688
+		return "'".addslashes($v)."'";
1689 1689
 	}
1690 1690
 
1691 1691
 	if ($v === null) {
@@ -1709,7 +1709,7 @@  discard block
 block discarded – undo
1709 1709
 		}
1710 1710
 	}
1711 1711
 
1712
-	return ("'" . addslashes($v) . "'");
1712
+	return ("'".addslashes($v)."'");
1713 1713
 }
1714 1714
 
1715 1715
 /**
@@ -1743,7 +1743,7 @@  discard block
 block discarded – undo
1743 1743
 	} else {
1744 1744
 		$GLOBALS['mysql_rappel_nom_base'] = false;
1745 1745
 
1746
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1746
+		return "\$GLOBALS['mysql_rappel_nom_base'] = false; ".
1747 1747
 		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1748 1748
 	}
1749 1749
 }
Please login to merge, or discard this patch.
Indentation   +861 added lines, -861 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,13 +609,13 @@  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
-	$ok = mysqli_select_db($link, $db);
614
-	if (!$ok) {
615
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
616
-	}
612
+    $link = _mysql_link($serveur);
613
+    $ok = mysqli_select_db($link, $db);
614
+    if (!$ok) {
615
+        spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
616
+    }
617 617
 
618
-	return $ok;
618
+    return $ok;
619 619
 }
620 620
 
621 621
 
@@ -636,14 +636,14 @@  discard block
 block discarded – undo
636 636
  *     Liste de noms de bases de données
637 637
  **/
638 638
 function spip_mysql_listdbs($serveur = '', $requeter = true) {
639
-	$dbs = [];
640
-	if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
641
-		while ($row = mysqli_fetch_assoc($res)) {
642
-			$dbs[] = $row['Database'];
643
-		}
644
-	}
645
-
646
-	return $dbs;
639
+    $dbs = [];
640
+    if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
641
+        while ($row = mysqli_fetch_assoc($res)) {
642
+            $dbs[] = $row['Database'];
643
+        }
644
+    }
645
+
646
+    return $dbs;
647 647
 }
648 648
 
649 649
 
@@ -666,73 +666,73 @@  discard block
 block discarded – undo
666 666
  *     - true si la requête réussie, false sinon.
667 667
  */
668 668
 function spip_mysql_create(
669
-	$nom,
670
-	$champs,
671
-	$cles,
672
-	$autoinc = false,
673
-	$temporary = false,
674
-	$serveur = '',
675
-	$requeter = true
669
+    $nom,
670
+    $champs,
671
+    $cles,
672
+    $autoinc = false,
673
+    $temporary = false,
674
+    $serveur = '',
675
+    $requeter = true
676 676
 ) {
677 677
 
678
-	$query = '';
679
-	$keys = '';
680
-	$s = '';
681
-	$p = '';
682
-
683
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
684
-	// sans les renseigner (laisse le compilo recuperer la description)
685
-	if (!is_array($champs) || !is_array($cles)) {
686
-		return;
687
-	}
688
-
689
-	$res = spip_mysql_query('SELECT version() as v', $serveur);
690
-	if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
691
-		spip_mysql_query("SET sql_mode=''", $serveur);
692
-	}
693
-
694
-	foreach ($cles as $k => $v) {
695
-		$keys .= "$s\n\t\t$k ($v)";
696
-		if ($k == 'PRIMARY KEY') {
697
-			$p = $v;
698
-		}
699
-		$s = ',';
700
-	}
701
-	$s = '';
702
-
703
-	$character_set = '';
704
-	if (@$GLOBALS['meta']['charset_sql_base']) {
705
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
706
-	}
707
-	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
708
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
709
-	}
710
-
711
-	foreach ($champs as $k => $v) {
712
-		$v = _mysql_remplacements_definitions_table($v);
713
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
714
-			if (
715
-				preg_match(',(char|text),i', $defs[1])
716
-				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
717
-			) {
718
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
719
-			}
720
-		}
721
-
722
-		$query .= "$s\n\t\t$k $v"
723
-			. (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
724
-				? ' auto_increment'
725
-				: ''
726
-			);
727
-		$s = ',';
728
-	}
729
-	$temporary = $temporary ? 'TEMPORARY' : '';
730
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
731
-		. ' ENGINE=MyISAM'
732
-		. ($character_set ? " DEFAULT $character_set" : '')
733
-		. "\n";
734
-
735
-	return spip_mysql_query($q, $serveur);
678
+    $query = '';
679
+    $keys = '';
680
+    $s = '';
681
+    $p = '';
682
+
683
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
684
+    // sans les renseigner (laisse le compilo recuperer la description)
685
+    if (!is_array($champs) || !is_array($cles)) {
686
+        return;
687
+    }
688
+
689
+    $res = spip_mysql_query('SELECT version() as v', $serveur);
690
+    if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
691
+        spip_mysql_query("SET sql_mode=''", $serveur);
692
+    }
693
+
694
+    foreach ($cles as $k => $v) {
695
+        $keys .= "$s\n\t\t$k ($v)";
696
+        if ($k == 'PRIMARY KEY') {
697
+            $p = $v;
698
+        }
699
+        $s = ',';
700
+    }
701
+    $s = '';
702
+
703
+    $character_set = '';
704
+    if (@$GLOBALS['meta']['charset_sql_base']) {
705
+        $character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
706
+    }
707
+    if (@$GLOBALS['meta']['charset_collation_sql_base']) {
708
+        $character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
709
+    }
710
+
711
+    foreach ($champs as $k => $v) {
712
+        $v = _mysql_remplacements_definitions_table($v);
713
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
714
+            if (
715
+                preg_match(',(char|text),i', $defs[1])
716
+                and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
717
+            ) {
718
+                $v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
719
+            }
720
+        }
721
+
722
+        $query .= "$s\n\t\t$k $v"
723
+            . (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
724
+                ? ' auto_increment'
725
+                : ''
726
+            );
727
+        $s = ',';
728
+    }
729
+    $temporary = $temporary ? 'TEMPORARY' : '';
730
+    $q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
731
+        . ' ENGINE=MyISAM'
732
+        . ($character_set ? " DEFAULT $character_set" : '')
733
+        . "\n";
734
+
735
+    return spip_mysql_query($q, $serveur);
736 736
 }
737 737
 
738 738
 
@@ -745,25 +745,25 @@  discard block
 block discarded – undo
745 745
  *     Définition SQL adaptée pour MySQL d'un champ de table
746 746
  */
747 747
 function _mysql_remplacements_definitions_table($query) {
748
-	// quelques remplacements
749
-	$num = '(\s*\([0-9]*\))?';
750
-	$enum = '(\s*\([^\)]*\))?';
751
-
752
-	$remplace = [
753
-		'/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
754
-		'/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
755
-	];
756
-
757
-	if (is_string($query)) {
758
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
759
-	} elseif (is_array($query)) {
760
-		$keys = array_keys($remplace);
761
-		foreach ($query as $k => $q) {
762
-			$query[$k] = preg_replace($keys, $remplace, $q);
763
-		}
764
-	}
765
-
766
-	return $query;
748
+    // quelques remplacements
749
+    $num = '(\s*\([0-9]*\))?';
750
+    $enum = '(\s*\([^\)]*\))?';
751
+
752
+    $remplace = [
753
+        '/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
754
+        '/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
755
+    ];
756
+
757
+    if (is_string($query)) {
758
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
759
+    } elseif (is_array($query)) {
760
+        $keys = array_keys($remplace);
761
+        foreach ($query as $k => $q) {
762
+            $query[$k] = preg_replace($keys, $remplace, $q);
763
+        }
764
+    }
765
+
766
+    return $query;
767 767
 }
768 768
 
769 769
 
@@ -776,7 +776,7 @@  discard block
 block discarded – undo
776 776
  * @return bool true si la base est créee.
777 777
  **/
778 778
 function spip_mysql_create_base($nom, $serveur = '', $requeter = true) {
779
-	return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
779
+    return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
780 780
 }
781 781
 
782 782
 
@@ -797,19 +797,19 @@  discard block
 block discarded – undo
797 797
  *     - string texte de la requête si $requeter vaut false
798 798
  */
799 799
 function spip_mysql_create_view($nom, $query_select, $serveur = '', $requeter = true) {
800
-	if (!$query_select) {
801
-		return false;
802
-	}
803
-	// vue deja presente
804
-	if (sql_showtable($nom, false, $serveur)) {
805
-		spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
800
+    if (!$query_select) {
801
+        return false;
802
+    }
803
+    // vue deja presente
804
+    if (sql_showtable($nom, false, $serveur)) {
805
+        spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
806 806
 
807
-		return false;
808
-	}
807
+        return false;
808
+    }
809 809
 
810
-	$query = "CREATE VIEW $nom AS " . $query_select;
810
+    $query = "CREATE VIEW $nom AS " . $query_select;
811 811
 
812
-	return spip_mysql_query($query, $serveur, $requeter);
812
+    return spip_mysql_query($query, $serveur, $requeter);
813 813
 }
814 814
 
815 815
 
@@ -825,11 +825,11 @@  discard block
 block discarded – undo
825 825
  *     - true si la requête a réussie, false sinon
826 826
  */
827 827
 function spip_mysql_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
828
-	if ($exist) {
829
-		$exist = ' IF EXISTS';
830
-	}
828
+    if ($exist) {
829
+        $exist = ' IF EXISTS';
830
+    }
831 831
 
832
-	return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
832
+    return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
833 833
 }
834 834
 
835 835
 /**
@@ -844,11 +844,11 @@  discard block
 block discarded – undo
844 844
  *     - true si la requête a réussie, false sinon
845 845
  */
846 846
 function spip_mysql_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
847
-	if ($exist) {
848
-		$exist = ' IF EXISTS';
849
-	}
847
+    if ($exist) {
848
+        $exist = ' IF EXISTS';
849
+    }
850 850
 
851
-	return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
851
+    return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
852 852
 }
853 853
 
854 854
 /**
@@ -865,7 +865,7 @@  discard block
 block discarded – undo
865 865
  *     Ressource à utiliser avec sql_fetch()
866 866
  **/
867 867
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
868
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
868
+    return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
869 869
 }
870 870
 
871 871
 /**
@@ -881,7 +881,7 @@  discard block
 block discarded – undo
881 881
  *     - true si la requête a réussie, false sinon
882 882
  */
883 883
 function spip_mysql_repair($table, $serveur = '', $requeter = true) {
884
-	return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
884
+    return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
885 885
 }
886 886
 
887 887
 /**
@@ -899,12 +899,12 @@  discard block
 block discarded – undo
899 899
  *     - string : requete sql, si $requeter = true
900 900
  **/
901 901
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
902
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
903
-	if (!$requeter) {
904
-		return $r;
905
-	}
906
-	$res = spip_mysql_fetch($r);
907
-	return (bool) $res;
902
+    $r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
903
+    if (!$requeter) {
904
+        return $r;
905
+    }
906
+    $res = spip_mysql_fetch($r);
907
+    return (bool) $res;
908 908
 }
909 909
 
910 910
 define('_MYSQL_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -927,86 +927,86 @@  discard block
 block discarded – undo
927 927
  *     - array description de la table sinon
928 928
  */
929 929
 function spip_mysql_showtable($nom_table, $serveur = '', $requeter = true) {
930
-	$s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
931
-	if (!$s) {
932
-		return '';
933
-	}
934
-	if (!$requeter) {
935
-		return $s;
936
-	}
937
-
938
-	[, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
939
-	if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
940
-		$desc = $r[1];
941
-		// extraction d'une KEY éventuelle en prenant garde de ne pas
942
-		// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
943
-		if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
944
-			$namedkeys = $r[2];
945
-			$desc = $r[1];
946
-		} else {
947
-			$namedkeys = '';
948
-		}
949
-
950
-		$fields = [];
951
-		foreach (preg_split('/,\s*`/', $desc) as $v) {
952
-			preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
953
-			$fields[strtolower($r[1])] = $r[2];
954
-		}
955
-		$keys = [];
956
-
957
-		foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
958
-			if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
959
-				$k = str_replace('`', '', trim($r[1]));
960
-				$t = strtolower(str_replace('`', '', $r[2]));
961
-				if ($k && !isset($keys[$k])) {
962
-					$keys[$k] = $t;
963
-				} else {
964
-					$keys[] = $t;
965
-				}
966
-			}
967
-		}
968
-		spip_mysql_free($s);
969
-
970
-		return ['field' => $fields, 'key' => $keys];
971
-	}
972
-
973
-	$res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
974
-	if ($res) {
975
-		$nfields = [];
976
-		$nkeys = [];
977
-		while ($val = spip_mysql_fetch($res)) {
978
-			$nfields[$val['Field']] = $val['Type'];
979
-			if ($val['Null'] == 'NO') {
980
-				$nfields[$val['Field']] .= ' NOT NULL';
981
-			}
982
-			if ($val['Default'] === '0' || $val['Default']) {
983
-				if (preg_match('/[A-Z_]/', $val['Default'])) {
984
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
985
-				} else {
986
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
987
-				}
988
-			}
989
-			if ($val['Extra']) {
990
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
991
-			}
992
-			if ($val['Key'] == 'PRI') {
993
-				$nkeys['PRIMARY KEY'] = $val['Field'];
994
-			} else {
995
-				if ($val['Key'] == 'MUL') {
996
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
997
-				} else {
998
-					if ($val['Key'] == 'UNI') {
999
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
1000
-					}
1001
-				}
1002
-			}
1003
-		}
1004
-		spip_mysql_free($res);
1005
-
1006
-		return ['field' => $nfields, 'key' => $nkeys];
1007
-	}
1008
-
1009
-	return '';
930
+    $s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
931
+    if (!$s) {
932
+        return '';
933
+    }
934
+    if (!$requeter) {
935
+        return $s;
936
+    }
937
+
938
+    [, $a] = mysqli_fetch_array($s, MYSQLI_NUM);
939
+    if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
940
+        $desc = $r[1];
941
+        // extraction d'une KEY éventuelle en prenant garde de ne pas
942
+        // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
943
+        if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
944
+            $namedkeys = $r[2];
945
+            $desc = $r[1];
946
+        } else {
947
+            $namedkeys = '';
948
+        }
949
+
950
+        $fields = [];
951
+        foreach (preg_split('/,\s*`/', $desc) as $v) {
952
+            preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
953
+            $fields[strtolower($r[1])] = $r[2];
954
+        }
955
+        $keys = [];
956
+
957
+        foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
958
+            if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
959
+                $k = str_replace('`', '', trim($r[1]));
960
+                $t = strtolower(str_replace('`', '', $r[2]));
961
+                if ($k && !isset($keys[$k])) {
962
+                    $keys[$k] = $t;
963
+                } else {
964
+                    $keys[] = $t;
965
+                }
966
+            }
967
+        }
968
+        spip_mysql_free($s);
969
+
970
+        return ['field' => $fields, 'key' => $keys];
971
+    }
972
+
973
+    $res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
974
+    if ($res) {
975
+        $nfields = [];
976
+        $nkeys = [];
977
+        while ($val = spip_mysql_fetch($res)) {
978
+            $nfields[$val['Field']] = $val['Type'];
979
+            if ($val['Null'] == 'NO') {
980
+                $nfields[$val['Field']] .= ' NOT NULL';
981
+            }
982
+            if ($val['Default'] === '0' || $val['Default']) {
983
+                if (preg_match('/[A-Z_]/', $val['Default'])) {
984
+                    $nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
985
+                } else {
986
+                    $nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
987
+                }
988
+            }
989
+            if ($val['Extra']) {
990
+                $nfields[$val['Field']] .= ' ' . $val['Extra'];
991
+            }
992
+            if ($val['Key'] == 'PRI') {
993
+                $nkeys['PRIMARY KEY'] = $val['Field'];
994
+            } else {
995
+                if ($val['Key'] == 'MUL') {
996
+                    $nkeys['KEY ' . $val['Field']] = $val['Field'];
997
+                } else {
998
+                    if ($val['Key'] == 'UNI') {
999
+                        $nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
1000
+                    }
1001
+                }
1002
+            }
1003
+        }
1004
+        spip_mysql_free($res);
1005
+
1006
+        return ['field' => $nfields, 'key' => $nkeys];
1007
+    }
1008
+
1009
+    return '';
1010 1010
 }
1011 1011
 
1012 1012
 
@@ -1022,12 +1022,12 @@  discard block
 block discarded – undo
1022 1022
  * @return array           Ligne de résultat
1023 1023
  */
1024 1024
 function spip_mysql_fetch($r, $t = '', $serveur = '', $requeter = true) {
1025
-	if (!$t) {
1026
-		$t = \MYSQLI_ASSOC;
1027
-	}
1028
-	if ($r) {
1029
-		return mysqli_fetch_array($r, $t);
1030
-	}
1025
+    if (!$t) {
1026
+        $t = \MYSQLI_ASSOC;
1027
+    }
1028
+    if ($r) {
1029
+        return mysqli_fetch_array($r, $t);
1030
+    }
1031 1031
 }
1032 1032
 
1033 1033
 /**
@@ -1040,9 +1040,9 @@  discard block
 block discarded – undo
1040 1040
  * @return bool True si déplacement réussi, false sinon.
1041 1041
  **/
1042 1042
 function spip_mysql_seek($r, $row_number, $serveur = '', $requeter = true) {
1043
-	if ($r and mysqli_num_rows($r)) {
1044
-		return mysqli_data_seek($r, $row_number);
1045
-	}
1043
+    if ($r and mysqli_num_rows($r)) {
1044
+        return mysqli_data_seek($r, $row_number);
1045
+    }
1046 1046
 }
1047 1047
 
1048 1048
 
@@ -1060,26 +1060,26 @@  discard block
 block discarded – undo
1060 1060
  *     - int Nombre de lignes (0 si la requête n'a pas réussie)
1061 1061
  **/
1062 1062
 function spip_mysql_countsel(
1063
-	$from = [],
1064
-	$where = [],
1065
-	$groupby = '',
1066
-	$having = [],
1067
-	$serveur = '',
1068
-	$requeter = true
1063
+    $from = [],
1064
+    $where = [],
1065
+    $groupby = '',
1066
+    $having = [],
1067
+    $serveur = '',
1068
+    $requeter = true
1069 1069
 ) {
1070
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1071
-
1072
-	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1073
-	if (!$requeter) {
1074
-		return $r;
1075
-	}
1076
-	if (!$r instanceof mysqli_result) {
1077
-		return 0;
1078
-	}
1079
-	[$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1080
-	mysqli_free_result($r);
1081
-
1082
-	return $c;
1070
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1071
+
1072
+    $r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1073
+    if (!$requeter) {
1074
+        return $r;
1075
+    }
1076
+    if (!$r instanceof mysqli_result) {
1077
+        return 0;
1078
+    }
1079
+    [$c] = mysqli_fetch_array($r, MYSQLI_NUM);
1080
+    mysqli_free_result($r);
1081
+
1082
+    return $c;
1083 1083
 }
1084 1084
 
1085 1085
 
@@ -1102,16 +1102,16 @@  discard block
 block discarded – undo
1102 1102
  *     Erreur eventuelle
1103 1103
  **/
1104 1104
 function spip_mysql_error($query = '', $serveur = '', $requeter = true) {
1105
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1106
-	$s = mysqli_error($link);
1107
-	if ($s) {
1108
-		$trace = debug_backtrace();
1109
-		if ($trace[0]['function'] != 'spip_mysql_error') {
1110
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1111
-		}
1112
-	}
1113
-
1114
-	return $s;
1105
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1106
+    $s = mysqli_error($link);
1107
+    if ($s) {
1108
+        $trace = debug_backtrace();
1109
+        if ($trace[0]['function'] != 'spip_mysql_error') {
1110
+            spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1111
+        }
1112
+    }
1113
+
1114
+    return $s;
1115 1115
 }
1116 1116
 
1117 1117
 
@@ -1126,18 +1126,18 @@  discard block
 block discarded – undo
1126 1126
  *     0, pas d'erreur. Autre, numéro de l'erreur.
1127 1127
  **/
1128 1128
 function spip_mysql_errno($serveur = '', $requeter = true) {
1129
-	$link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1130
-	$s = mysqli_errno($link);
1131
-	// 2006 MySQL server has gone away
1132
-	// 2013 Lost connection to MySQL server during query
1133
-	if (in_array($s, [2006, 2013])) {
1134
-		define('spip_interdire_cache', true);
1135
-	}
1136
-	if ($s) {
1137
-		spip_log("Erreur mysql $s", _LOG_ERREUR);
1138
-	}
1139
-
1140
-	return $s;
1129
+    $link = $GLOBALS['connexions'][$serveur ?: 0]['link'];
1130
+    $s = mysqli_errno($link);
1131
+    // 2006 MySQL server has gone away
1132
+    // 2013 Lost connection to MySQL server during query
1133
+    if (in_array($s, [2006, 2013])) {
1134
+        define('spip_interdire_cache', true);
1135
+    }
1136
+    if ($s) {
1137
+        spip_log("Erreur mysql $s", _LOG_ERREUR);
1138
+    }
1139
+
1140
+    return $s;
1141 1141
 }
1142 1142
 
1143 1143
 
@@ -1151,9 +1151,9 @@  discard block
 block discarded – undo
1151 1151
  * @return int               Nombre de lignes
1152 1152
  */
1153 1153
 function spip_mysql_count($r, $serveur = '', $requeter = true) {
1154
-	if ($r) {
1155
-		return mysqli_num_rows($r);
1156
-	}
1154
+    if ($r) {
1155
+        return mysqli_num_rows($r);
1156
+    }
1157 1157
 }
1158 1158
 
1159 1159
 
@@ -1169,7 +1169,7 @@  discard block
 block discarded – undo
1169 1169
  * @return bool              True si réussi
1170 1170
  */
1171 1171
 function spip_mysql_free($r, $serveur = '', $requeter = true) {
1172
-	return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1172
+    return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1173 1173
 }
1174 1174
 
1175 1175
 
@@ -1197,59 +1197,59 @@  discard block
 block discarded – undo
1197 1197
  **/
1198 1198
 function spip_mysql_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1199 1199
 
1200
-	$e = null;
1201
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1202
-	$link = $connexion['link'];
1203
-	$table = prefixer_table_spip($table, $connexion['prefixe']);
1204
-
1205
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1206
-	if (
1207
-		defined('_MYSQL_NOPLANES')
1208
-		and _MYSQL_NOPLANES
1209
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
1210
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1211
-	) {
1212
-		include_spip('inc/charsets');
1213
-		$valeurs = utf8_noplanes($valeurs);
1214
-	}
1215
-
1216
-	$query = "INSERT INTO $table $champs VALUES $valeurs";
1217
-	if (!$requeter) {
1218
-		return $query;
1219
-	}
1220
-
1221
-	if (isset($_GET['var_profile'])) {
1222
-		include_spip('public/tracer');
1223
-		$t = trace_query_start();
1224
-		$e = '';
1225
-	} else {
1226
-		$t = 0;
1227
-	}
1228
-
1229
-	$connexion['last'] = $query;
1230
-	#spip_log($query, 'mysql.'._LOG_DEBUG);
1231
-	$r = false;
1232
-	$insert = false;
1233
-	try {
1234
-		$insert = mysqli_query($link, $query);
1235
-	} catch (\mysqli_sql_exception $e) {
1236
-		spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1237
-		// TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1238
-		// mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1239
-	}
1240
-	if ($insert) {
1241
-		$r = mysqli_insert_id($link);
1242
-	} else {
1243
-		// Log de l'erreur eventuelle
1244
-		if ($e = spip_mysql_errno($serveur)) {
1245
-			// et du fautif
1246
-			$e .= spip_mysql_error($query, $serveur);
1247
-		}
1248
-	}
1249
-
1250
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1251
-
1252
-	// return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1200
+    $e = null;
1201
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1202
+    $link = $connexion['link'];
1203
+    $table = prefixer_table_spip($table, $connexion['prefixe']);
1204
+
1205
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1206
+    if (
1207
+        defined('_MYSQL_NOPLANES')
1208
+        and _MYSQL_NOPLANES
1209
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
1210
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1211
+    ) {
1212
+        include_spip('inc/charsets');
1213
+        $valeurs = utf8_noplanes($valeurs);
1214
+    }
1215
+
1216
+    $query = "INSERT INTO $table $champs VALUES $valeurs";
1217
+    if (!$requeter) {
1218
+        return $query;
1219
+    }
1220
+
1221
+    if (isset($_GET['var_profile'])) {
1222
+        include_spip('public/tracer');
1223
+        $t = trace_query_start();
1224
+        $e = '';
1225
+    } else {
1226
+        $t = 0;
1227
+    }
1228
+
1229
+    $connexion['last'] = $query;
1230
+    #spip_log($query, 'mysql.'._LOG_DEBUG);
1231
+    $r = false;
1232
+    $insert = false;
1233
+    try {
1234
+        $insert = mysqli_query($link, $query);
1235
+    } catch (\mysqli_sql_exception $e) {
1236
+        spip_log('mysqli_sql_exception: ' . $e->getMessage(), 'mysql.' . _LOG_DEBUG);
1237
+        // TODO: utiliser l’exception ensuite plutôt que les appels à spip_mysql_errno()
1238
+        // mais il faut pour php < 8.1 forcer les exeptions via mysqli_report().
1239
+    }
1240
+    if ($insert) {
1241
+        $r = mysqli_insert_id($link);
1242
+    } else {
1243
+        // Log de l'erreur eventuelle
1244
+        if ($e = spip_mysql_errno($serveur)) {
1245
+            // et du fautif
1246
+            $e .= spip_mysql_error($query, $serveur);
1247
+        }
1248
+    }
1249
+
1250
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1251
+
1252
+    // return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1253 1253
 }
1254 1254
 
1255 1255
 /**
@@ -1274,26 +1274,26 @@  discard block
 block discarded – undo
1274 1274
  **/
1275 1275
 function spip_mysql_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
1276 1276
 
1277
-	if (!$desc) {
1278
-		$desc = description_table($table, $serveur);
1279
-	}
1280
-	if (!$desc) {
1281
-		$couples = [];
1282
-	}
1283
-	$fields = $desc['field'] ?? [];
1284
-
1285
-	foreach ($couples as $champ => $val) {
1286
-		$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1287
-	}
1288
-
1289
-	return spip_mysql_insert(
1290
-		$table,
1291
-		'(' . join(',', array_keys($couples)) . ')',
1292
-		'(' . join(',', $couples) . ')',
1293
-		$desc,
1294
-		$serveur,
1295
-		$requeter
1296
-	);
1277
+    if (!$desc) {
1278
+        $desc = description_table($table, $serveur);
1279
+    }
1280
+    if (!$desc) {
1281
+        $couples = [];
1282
+    }
1283
+    $fields = $desc['field'] ?? [];
1284
+
1285
+    foreach ($couples as $champ => $val) {
1286
+        $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1287
+    }
1288
+
1289
+    return spip_mysql_insert(
1290
+        $table,
1291
+        '(' . join(',', array_keys($couples)) . ')',
1292
+        '(' . join(',', $couples) . ')',
1293
+        $desc,
1294
+        $serveur,
1295
+        $requeter
1296
+    );
1297 1297
 }
1298 1298
 
1299 1299
 
@@ -1318,34 +1318,34 @@  discard block
 block discarded – undo
1318 1318
  **/
1319 1319
 function spip_mysql_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
1320 1320
 
1321
-	if (!$desc) {
1322
-		$desc = description_table($table, $serveur);
1323
-	}
1324
-	if (!$desc) {
1325
-		$tab_couples = [];
1326
-	}
1327
-	$fields = $desc['field'] ?? [];
1328
-
1329
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1330
-	$valeurs = [];
1331
-	$r = false;
1332
-
1333
-	// Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1334
-	foreach ($tab_couples as $couples) {
1335
-		foreach ($couples as $champ => $val) {
1336
-			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1337
-		}
1338
-		$valeurs[] = '(' . join(',', $couples) . ')';
1339
-		if (count($valeurs) >= 100) {
1340
-			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1341
-			$valeurs = [];
1342
-		}
1343
-	}
1344
-	if (count($valeurs)) {
1345
-		$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1346
-	}
1347
-
1348
-	return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1321
+    if (!$desc) {
1322
+        $desc = description_table($table, $serveur);
1323
+    }
1324
+    if (!$desc) {
1325
+        $tab_couples = [];
1326
+    }
1327
+    $fields = $desc['field'] ?? [];
1328
+
1329
+    $cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1330
+    $valeurs = [];
1331
+    $r = false;
1332
+
1333
+    // Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1334
+    foreach ($tab_couples as $couples) {
1335
+        foreach ($couples as $champ => $val) {
1336
+            $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1337
+        }
1338
+        $valeurs[] = '(' . join(',', $couples) . ')';
1339
+        if (count($valeurs) >= 100) {
1340
+            $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1341
+            $valeurs = [];
1342
+        }
1343
+    }
1344
+    if (count($valeurs)) {
1345
+        $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1346
+    }
1347
+
1348
+    return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1349 1349
 }
1350 1350
 
1351 1351
 /**
@@ -1370,19 +1370,19 @@  discard block
 block discarded – undo
1370 1370
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1371 1371
  */
1372 1372
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1373
-	$set = [];
1374
-	foreach ($champs as $champ => $val) {
1375
-		$set[] = $champ . "=$val";
1376
-	}
1377
-	if (!empty($set)) {
1378
-		return spip_mysql_query(
1379
-			calculer_mysql_expression('UPDATE', $table, ',')
1380
-			. calculer_mysql_expression('SET', $set, ',')
1381
-			. calculer_mysql_expression('WHERE', $where),
1382
-			$serveur,
1383
-			$requeter
1384
-		);
1385
-	}
1373
+    $set = [];
1374
+    foreach ($champs as $champ => $val) {
1375
+        $set[] = $champ . "=$val";
1376
+    }
1377
+    if (!empty($set)) {
1378
+        return spip_mysql_query(
1379
+            calculer_mysql_expression('UPDATE', $table, ',')
1380
+            . calculer_mysql_expression('SET', $set, ',')
1381
+            . calculer_mysql_expression('WHERE', $where),
1382
+            $serveur,
1383
+            $requeter
1384
+        );
1385
+    }
1386 1386
 }
1387 1387
 
1388 1388
 /**
@@ -1415,29 +1415,29 @@  discard block
 block discarded – undo
1415 1415
  */
1416 1416
 function spip_mysql_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1417 1417
 
1418
-	if (!$champs) {
1419
-		return;
1420
-	}
1421
-	if (!$desc) {
1422
-		$desc = description_table($table, $serveur);
1423
-	}
1424
-	if (!$desc) {
1425
-		$champs = [];
1426
-	} else {
1427
-		$fields = $desc['field'];
1428
-	}
1429
-	$set = [];
1430
-	foreach ($champs as $champ => $val) {
1431
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1432
-	}
1433
-
1434
-	return spip_mysql_query(
1435
-		calculer_mysql_expression('UPDATE', $table, ',')
1436
-		. calculer_mysql_expression('SET', $set, ',')
1437
-		. calculer_mysql_expression('WHERE', $where),
1438
-		$serveur,
1439
-		$requeter
1440
-	);
1418
+    if (!$champs) {
1419
+        return;
1420
+    }
1421
+    if (!$desc) {
1422
+        $desc = description_table($table, $serveur);
1423
+    }
1424
+    if (!$desc) {
1425
+        $champs = [];
1426
+    } else {
1427
+        $fields = $desc['field'];
1428
+    }
1429
+    $set = [];
1430
+    foreach ($champs as $champ => $val) {
1431
+        $set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1432
+    }
1433
+
1434
+    return spip_mysql_query(
1435
+        calculer_mysql_expression('UPDATE', $table, ',')
1436
+        . calculer_mysql_expression('SET', $set, ',')
1437
+        . calculer_mysql_expression('WHERE', $where),
1438
+        $serveur,
1439
+        $requeter
1440
+    );
1441 1441
 }
1442 1442
 
1443 1443
 /**
@@ -1453,22 +1453,22 @@  discard block
 block discarded – undo
1453 1453
  *     - False en cas d'erreur.
1454 1454
  **/
1455 1455
 function spip_mysql_delete($table, $where = '', $serveur = '', $requeter = true) {
1456
-	$res = spip_mysql_query(
1457
-		calculer_mysql_expression('DELETE FROM', $table, ',')
1458
-		. calculer_mysql_expression('WHERE', $where),
1459
-		$serveur,
1460
-		$requeter
1461
-	);
1462
-	if (!$requeter) {
1463
-		return $res;
1464
-	}
1465
-	if ($res) {
1466
-		$link = _mysql_link($serveur);
1467
-
1468
-		return mysqli_affected_rows($link);
1469
-	} else {
1470
-		return false;
1471
-	}
1456
+    $res = spip_mysql_query(
1457
+        calculer_mysql_expression('DELETE FROM', $table, ',')
1458
+        . calculer_mysql_expression('WHERE', $where),
1459
+        $serveur,
1460
+        $requeter
1461
+    );
1462
+    if (!$requeter) {
1463
+        return $res;
1464
+    }
1465
+    if ($res) {
1466
+        $link = _mysql_link($serveur);
1467
+
1468
+        return mysqli_affected_rows($link);
1469
+    } else {
1470
+        return false;
1471
+    }
1472 1472
 }
1473 1473
 
1474 1474
 
@@ -1497,10 +1497,10 @@  discard block
 block discarded – undo
1497 1497
  *     - False en cas d'erreur.
1498 1498
  **/
1499 1499
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1500
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1501
-		',',
1502
-		array_map('_q', $couples)
1503
-	) . ')', $serveur, $requeter);
1500
+    return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1501
+        ',',
1502
+        array_map('_q', $couples)
1503
+    ) . ')', $serveur, $requeter);
1504 1504
 }
1505 1505
 
1506 1506
 
@@ -1529,14 +1529,14 @@  discard block
 block discarded – undo
1529 1529
  *     - False en cas d'erreur.
1530 1530
  **/
1531 1531
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1532
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1533
-	$valeurs = [];
1534
-	foreach ($tab_couples as $couples) {
1535
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1536
-	}
1537
-	$valeurs = implode(', ', $valeurs);
1538
-
1539
-	return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1532
+    $cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1533
+    $valeurs = [];
1534
+    foreach ($tab_couples as $couples) {
1535
+        $valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1536
+    }
1537
+    $valeurs = implode(', ', $valeurs);
1538
+
1539
+    return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1540 1540
 }
1541 1541
 
1542 1542
 
@@ -1551,32 +1551,32 @@  discard block
 block discarded – undo
1551 1551
  * @return string       Texte de sélection pour la requête
1552 1552
  */
1553 1553
 function spip_mysql_multi($objet, $lang) {
1554
-	$lengthlang = strlen("[$lang]");
1555
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1556
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1557
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1558
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1559
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1560
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1561
-	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1562
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1563
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1564
-	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1565
-	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1566
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1567
-		'     TRIM(' . $objet . '), ' .
1568
-		'     CONCAT( ' .
1569
-		"          $debutchaine, " .
1570
-		'          IF( ' .
1571
-		"               $poslang = 0, " .
1572
-		"                     $chainemulti, " .
1573
-		"               $chainelang" .
1574
-		'          ), ' .
1575
-		"          $finchaine" .
1576
-		'     ) ' .
1577
-		'))) AS multi';
1578
-
1579
-	return $retour;
1554
+    $lengthlang = strlen("[$lang]");
1555
+    $posmulti = 'INSTR(' . $objet . ", '<multi>')";
1556
+    $posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1557
+    $debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1558
+    $finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1559
+    $chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1560
+    $poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1561
+    $poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1562
+    $chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1563
+    $posfinlang = 'INSTR(' . $chainelang . ", '[')";
1564
+    $chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1565
+    //$chainelang = "LEFT($chainelang,$posfinlang-1)";
1566
+    $retour = "(TRIM(IF($posmulti = 0 , " .
1567
+        '     TRIM(' . $objet . '), ' .
1568
+        '     CONCAT( ' .
1569
+        "          $debutchaine, " .
1570
+        '          IF( ' .
1571
+        "               $poslang = 0, " .
1572
+        "                     $chainemulti, " .
1573
+        "               $chainelang" .
1574
+        '          ), ' .
1575
+        "          $finchaine" .
1576
+        '     ) ' .
1577
+        '))) AS multi';
1578
+
1579
+    return $retour;
1580 1580
 }
1581 1581
 
1582 1582
 /**
@@ -1590,7 +1590,7 @@  discard block
 block discarded – undo
1590 1590
  *     Valeur hexadécimale pour MySQL
1591 1591
  **/
1592 1592
 function spip_mysql_hex($v) {
1593
-	return '0x' . $v;
1593
+    return '0x' . $v;
1594 1594
 }
1595 1595
 
1596 1596
 /**
@@ -1606,15 +1606,15 @@  discard block
 block discarded – undo
1606 1606
  *    Donnée prête à être utilisée par le gestionnaire SQL
1607 1607
  */
1608 1608
 function spip_mysql_quote($v, $type = '') {
1609
-	if (!is_array($v)) {
1610
-		return spip_mysql_cite($v, $type);
1611
-	}
1612
-
1613
-	// si c'est un tableau, le parcourir en propageant le type
1614
-	foreach ($v as $k => $r) {
1615
-		$v[$k] = spip_mysql_quote($r, $type);
1616
-	}
1617
-	return implode(',', $v);
1609
+    if (!is_array($v)) {
1610
+        return spip_mysql_cite($v, $type);
1611
+    }
1612
+
1613
+    // si c'est un tableau, le parcourir en propageant le type
1614
+    foreach ($v as $k => $r) {
1615
+        $v[$k] = spip_mysql_quote($r, $type);
1616
+    }
1617
+    return implode(',', $v);
1618 1618
 }
1619 1619
 
1620 1620
 /**
@@ -1630,18 +1630,18 @@  discard block
 block discarded – undo
1630 1630
  *     Expression SQL
1631 1631
  **/
1632 1632
 function spip_mysql_date_proche($champ, $interval, $unite) {
1633
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1634
-	return '('
1635
-	. $champ
1636
-	. (($interval <= 0) ? '>' : '<')
1637
-	. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1638
-	. '('
1639
-	. ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1640
-	. ', INTERVAL '
1641
-	. (($interval > 0) ? $interval : (0 - $interval))
1642
-	. ' '
1643
-	. $unite
1644
-	. '))';
1633
+    $use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1634
+    return '('
1635
+    . $champ
1636
+    . (($interval <= 0) ? '>' : '<')
1637
+    . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1638
+    . '('
1639
+    . ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1640
+    . ', INTERVAL '
1641
+    . (($interval > 0) ? $interval : (0 - $interval))
1642
+    . ' '
1643
+    . $unite
1644
+    . '))';
1645 1645
 }
1646 1646
 
1647 1647
 
@@ -1665,7 +1665,7 @@  discard block
 block discarded – undo
1665 1665
  *     Expression de requête SQL
1666 1666
  **/
1667 1667
 function spip_mysql_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1668
-	return "($val $not IN ($valeurs))";
1668
+    return "($val $not IN ($valeurs))";
1669 1669
 }
1670 1670
 
1671 1671
 
@@ -1677,39 +1677,39 @@  discard block
 block discarded – undo
1677 1677
  * @return string|number     Texte ou nombre échappé
1678 1678
  */
1679 1679
 function spip_mysql_cite($v, $type) {
1680
-	if (!$type) {
1681
-		if (is_bool($v)) {
1682
-			return strval(intval($v));
1683
-		} elseif (is_numeric($v)) {
1684
-			return strval($v);
1685
-		} elseif ($v === null) {
1686
-			return "''";
1687
-		}
1688
-		return "'" . addslashes($v) . "'";
1689
-	}
1690
-
1691
-	if ($v === null) {
1692
-		if (stripos($type, 'NOT NULL') === false) {
1693
-			// null php se traduit en NULL SQL
1694
-			return 'NULL';
1695
-		} else {
1696
-			return "''";
1697
-		}
1698
-	} elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1699
-		return $v;
1700
-	} elseif (sql_test_int($type)) {
1701
-		if (
1702
-			is_numeric($v)
1703
-			or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1704
-		) {
1705
-			return $v;
1706
-		} else {
1707
-			// si pas numerique, forcer le intval
1708
-			return intval($v);
1709
-		}
1710
-	}
1711
-
1712
-	return ("'" . addslashes($v) . "'");
1680
+    if (!$type) {
1681
+        if (is_bool($v)) {
1682
+            return strval(intval($v));
1683
+        } elseif (is_numeric($v)) {
1684
+            return strval($v);
1685
+        } elseif ($v === null) {
1686
+            return "''";
1687
+        }
1688
+        return "'" . addslashes($v) . "'";
1689
+    }
1690
+
1691
+    if ($v === null) {
1692
+        if (stripos($type, 'NOT NULL') === false) {
1693
+            // null php se traduit en NULL SQL
1694
+            return 'NULL';
1695
+        } else {
1696
+            return "''";
1697
+        }
1698
+    } elseif (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1699
+        return $v;
1700
+    } elseif (sql_test_int($type)) {
1701
+        if (
1702
+            is_numeric($v)
1703
+            or ($v and ctype_xdigit(substr($v, 2)) and $v[0] === '0' and $v[1] === 'x')
1704
+        ) {
1705
+            return $v;
1706
+        } else {
1707
+            // si pas numerique, forcer le intval
1708
+            return intval($v);
1709
+        }
1710
+    }
1711
+
1712
+    return ("'" . addslashes($v) . "'");
1713 1713
 }
1714 1714
 
1715 1715
 /**
@@ -1719,7 +1719,7 @@  discard block
 block discarded – undo
1719 1719
  *     True si on a les fonctions, false sinon
1720 1720
  */
1721 1721
 function spip_versions_mysql() {
1722
-	return function_exists('mysqli_query');
1722
+    return function_exists('mysqli_query');
1723 1723
 }
1724 1724
 
1725 1725
 
@@ -1732,20 +1732,20 @@  discard block
 block discarded – undo
1732 1732
  *     - chaîne : code compilé pour le faire désactiver par SPIP sinon
1733 1733
  */
1734 1734
 function test_rappel_nom_base_mysql($server_db) {
1735
-	$GLOBALS['mysql_rappel_nom_base'] = true;
1736
-	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1737
-	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1735
+    $GLOBALS['mysql_rappel_nom_base'] = true;
1736
+    sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1737
+    $ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1738 1738
 
1739
-	if ($ok) {
1740
-		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1739
+    if ($ok) {
1740
+        sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1741 1741
 
1742
-		return '';
1743
-	} else {
1744
-		$GLOBALS['mysql_rappel_nom_base'] = false;
1742
+        return '';
1743
+    } else {
1744
+        $GLOBALS['mysql_rappel_nom_base'] = false;
1745 1745
 
1746
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1747
-		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1748
-	}
1746
+        return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1747
+        "/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1748
+    }
1749 1749
 }
1750 1750
 
1751 1751
 /**
@@ -1759,13 +1759,13 @@  discard block
 block discarded – undo
1759 1759
  *     - chaîne : code compilé pour l'indiquer le résultat du test à SPIP
1760 1760
  */
1761 1761
 function test_sql_mode_mysql($server_db) {
1762
-	$res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1763
-	$row = sql_fetch($res, $server_db);
1764
-	if (version_compare($row['v'], '5.0.0', '>=')) {
1765
-		defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1762
+    $res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1763
+    $row = sql_fetch($res, $server_db);
1764
+    if (version_compare($row['v'], '5.0.0', '>=')) {
1765
+        defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1766 1766
 
1767
-		return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1768
-	}
1767
+        return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1768
+    }
1769 1769
 
1770
-	return '';
1770
+    return '';
1771 1771
 }
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/editer_liens.php 2 patches
Indentation   +352 added lines, -352 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Formulaires
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 
@@ -36,25 +36,25 @@  discard block
 block discarded – undo
36 36
  *   ($table_source,$objet,$id_objet,$objet_lien)
37 37
  */
38 38
 function determine_source_lien_objet($a, $b, $c) {
39
-	$table_source = $objet_lien = $objet = $id_objet = null;
40
-	// auteurs, article, 23 :
41
-	// associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
42
-	if (is_numeric($c) and !is_numeric($b)) {
43
-		$table_source = table_objet($a);
44
-		$objet_lien = objet_type($a);
45
-		$objet = objet_type($b);
46
-		$id_objet = $c;
47
-	}
48
-	// article, 23, auteurs
49
-	// associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
50
-	if (is_numeric($b) and !is_numeric($c)) {
51
-		$table_source = table_objet($c);
52
-		$objet_lien = objet_type($a);
53
-		$objet = objet_type($a);
54
-		$id_objet = $b;
55
-	}
56
-
57
-	return [$table_source, $objet, $id_objet, $objet_lien];
39
+    $table_source = $objet_lien = $objet = $id_objet = null;
40
+    // auteurs, article, 23 :
41
+    // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
42
+    if (is_numeric($c) and !is_numeric($b)) {
43
+        $table_source = table_objet($a);
44
+        $objet_lien = objet_type($a);
45
+        $objet = objet_type($b);
46
+        $id_objet = $c;
47
+    }
48
+    // article, 23, auteurs
49
+    // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
50
+    if (is_numeric($b) and !is_numeric($c)) {
51
+        $table_source = table_objet($c);
52
+        $objet_lien = objet_type($a);
53
+        $objet = objet_type($a);
54
+        $id_objet = $b;
55
+    }
56
+
57
+    return [$table_source, $objet, $id_objet, $objet_lien];
58 58
 }
59 59
 
60 60
 /**
@@ -80,93 +80,93 @@  discard block
 block discarded – undo
80 80
  */
81 81
 function formulaires_editer_liens_charger_dist($a, $b, $c, $options = []) {
82 82
 
83
-	// compat avec ancienne signature ou le 4eme argument est $editable
84
-	if (!is_array($options)) {
85
-		$options = ['editable' => $options];
86
-	} elseif (!isset($options['editable'])) {
87
-		$options['editable'] = true;
88
-	}
89
-
90
-	$editable = $options['editable'];
91
-
92
-	[$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
93
-	if (!$table_source or !$objet or !$objet_lien or !$id_objet) {
94
-		return false;
95
-	}
96
-
97
-	$objet_source = objet_type($table_source);
98
-	$table_sql_source = table_objet_sql($objet_source);
99
-
100
-	// verifier existence de la table xxx_liens
101
-	include_spip('action/editer_liens');
102
-	if (!objet_associable($objet_lien)) {
103
-		return false;
104
-	}
105
-
106
-	// L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
107
-	include_spip('inc/autoriser');
108
-	$editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet)
109
-		and autoriser('modifier', $objet, $id_objet));
110
-
111
-	if (
112
-		!$editable and !count(objet_trouver_liens(
113
-			[$objet_lien => '*'],
114
-			[($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet]
115
-		))
116
-	) {
117
-		return false;
118
-	}
119
-
120
-	// squelettes de vue et de d'association
121
-	// ils sont différents si des rôles sont définis.
122
-	$skel_vue = $table_source . '_lies';
123
-	$skel_ajout = $table_source . '_associer';
124
-
125
-	// description des roles
126
-	include_spip('inc/roles');
127
-	if ($roles = roles_presents($objet_source, $objet)) {
128
-		// on demande de nouveaux squelettes en conséquence
129
-		$skel_vue = $table_source . '_roles_lies';
130
-		$skel_ajout = $table_source . '_roles_associer';
131
-	}
132
-
133
-	$oups = _request('_oups') ?? '';
134
-	if ($oups) {
135
-		if (unserialize(base64_decode($oups))) {
136
-			// on est bon, rien a faire
137
-		} elseif (unserialize($oups)) {
138
-			// il faut encoder
139
-			$oups = base64_encode($oups);
140
-		} else {
141
-			$oups = '';
142
-		}
143
-	}
144
-	$valeurs = [
145
-		'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
146
-		'_vue_liee' => $skel_vue,
147
-		'_vue_ajout' => $skel_ajout,
148
-		'_objet_lien' => $objet_lien,
149
-		'id_lien_ajoute' => _request('id_lien_ajoute'),
150
-		'objet' => $objet,
151
-		'id_objet' => $id_objet,
152
-		'objet_source' => $objet_source,
153
-		'table_source' => $table_source,
154
-		'recherche' => '',
155
-		'visible' => 0,
156
-		'ajouter_lien' => '',
157
-		'supprimer_lien' => '',
158
-		'qualifier_lien' => '',
159
-		'ordonner_lien' => '',
160
-		'desordonner_liens' => '',
161
-		'_roles' => $roles, # description des roles
162
-		'_oups' => $oups,
163
-		'editable' => $editable,
164
-	];
165
-
166
-	// les options non definies dans $valeurs sont passees telles quelles au formulaire html
167
-	$valeurs = array_merge($options, $valeurs);
168
-
169
-	return $valeurs;
83
+    // compat avec ancienne signature ou le 4eme argument est $editable
84
+    if (!is_array($options)) {
85
+        $options = ['editable' => $options];
86
+    } elseif (!isset($options['editable'])) {
87
+        $options['editable'] = true;
88
+    }
89
+
90
+    $editable = $options['editable'];
91
+
92
+    [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
93
+    if (!$table_source or !$objet or !$objet_lien or !$id_objet) {
94
+        return false;
95
+    }
96
+
97
+    $objet_source = objet_type($table_source);
98
+    $table_sql_source = table_objet_sql($objet_source);
99
+
100
+    // verifier existence de la table xxx_liens
101
+    include_spip('action/editer_liens');
102
+    if (!objet_associable($objet_lien)) {
103
+        return false;
104
+    }
105
+
106
+    // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
107
+    include_spip('inc/autoriser');
108
+    $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet)
109
+        and autoriser('modifier', $objet, $id_objet));
110
+
111
+    if (
112
+        !$editable and !count(objet_trouver_liens(
113
+            [$objet_lien => '*'],
114
+            [($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet]
115
+        ))
116
+    ) {
117
+        return false;
118
+    }
119
+
120
+    // squelettes de vue et de d'association
121
+    // ils sont différents si des rôles sont définis.
122
+    $skel_vue = $table_source . '_lies';
123
+    $skel_ajout = $table_source . '_associer';
124
+
125
+    // description des roles
126
+    include_spip('inc/roles');
127
+    if ($roles = roles_presents($objet_source, $objet)) {
128
+        // on demande de nouveaux squelettes en conséquence
129
+        $skel_vue = $table_source . '_roles_lies';
130
+        $skel_ajout = $table_source . '_roles_associer';
131
+    }
132
+
133
+    $oups = _request('_oups') ?? '';
134
+    if ($oups) {
135
+        if (unserialize(base64_decode($oups))) {
136
+            // on est bon, rien a faire
137
+        } elseif (unserialize($oups)) {
138
+            // il faut encoder
139
+            $oups = base64_encode($oups);
140
+        } else {
141
+            $oups = '';
142
+        }
143
+    }
144
+    $valeurs = [
145
+        'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form
146
+        '_vue_liee' => $skel_vue,
147
+        '_vue_ajout' => $skel_ajout,
148
+        '_objet_lien' => $objet_lien,
149
+        'id_lien_ajoute' => _request('id_lien_ajoute'),
150
+        'objet' => $objet,
151
+        'id_objet' => $id_objet,
152
+        'objet_source' => $objet_source,
153
+        'table_source' => $table_source,
154
+        'recherche' => '',
155
+        'visible' => 0,
156
+        'ajouter_lien' => '',
157
+        'supprimer_lien' => '',
158
+        'qualifier_lien' => '',
159
+        'ordonner_lien' => '',
160
+        'desordonner_liens' => '',
161
+        '_roles' => $roles, # description des roles
162
+        '_oups' => $oups,
163
+        'editable' => $editable,
164
+    ];
165
+
166
+    // les options non definies dans $valeurs sont passees telles quelles au formulaire html
167
+    $valeurs = array_merge($options, $valeurs);
168
+
169
+    return $valeurs;
170 170
 }
171 171
 
172 172
 /**
@@ -210,165 +210,165 @@  discard block
 block discarded – undo
210 210
  * @return array
211 211
  */
212 212
 function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = []) {
213
-	// compat avec ancienne signature ou le 4eme argument est $editable
214
-	if (!is_array($options)) {
215
-		$options = ['editable' => $options];
216
-	} elseif (!isset($options['editable'])) {
217
-		$options['editable'] = true;
218
-	}
219
-
220
-	$editable = $options['editable'];
221
-
222
-	$res = ['editable' => $editable ? true : false];
223
-	[$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
224
-	if (!$table_source or !$objet or !$objet_lien) {
225
-		return $res;
226
-	}
227
-
228
-
229
-	if (_request('tout_voir')) {
230
-		set_request('recherche', '');
231
-	}
232
-
233
-	include_spip('inc/autoriser');
234
-	if (autoriser('modifier', $objet, $id_objet)) {
235
-		// annuler les suppressions du coup d'avant !
236
-		if (
237
-			_request('annuler_oups')
238
-			and $oups = _request('_oups')
239
-			and $oups = base64_decode($oups)
240
-			and $oups = unserialize($oups)
241
-		) {
242
-			if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) {
243
-				$oups_objets($oups);
244
-			} else {
245
-				$objet_source = objet_type($table_source);
246
-				include_spip('action/editer_liens');
247
-				foreach ($oups as $oup) {
248
-					if ($objet_lien == $objet_source) {
249
-						objet_associer([$objet_source => $oup[$objet_source]], [$objet => $oup[$objet]], $oup);
250
-					} else {
251
-						objet_associer([$objet => $oup[$objet]], [$objet_source => $oup[$objet_source]], $oup);
252
-					}
253
-				}
254
-			}
255
-			# oups ne persiste que pour la derniere action, si suppression
256
-			set_request('_oups');
257
-		}
258
-
259
-		$supprimer = _request('supprimer_lien');
260
-		$ajouter = _request('ajouter_lien');
261
-		$ordonner = _request('ordonner_lien');
262
-
263
-		if (_request('desordonner_liens')) {
264
-			include_spip('action/editer_liens');
265
-			objet_qualifier_liens([$objet_lien => '*'], [$objet => $id_objet], ['rang_lien' => 0]);
266
-		}
267
-
268
-		// il est possible de preciser dans une seule variable un remplacement :
269
-		// remplacer_lien[old][new]
270
-		if ($remplacer = _request('remplacer_lien')) {
271
-			foreach ($remplacer as $k => $v) {
272
-				if ($old = lien_verifier_action($k, '')) {
273
-					foreach (is_array($v) ? $v : [$v] as $kn => $vn) {
274
-						if ($new = lien_verifier_action($kn, $vn)) {
275
-							$supprimer[$old] = 'x';
276
-							$ajouter[$new] = '+';
277
-						}
278
-					}
279
-				}
280
-			}
281
-		}
282
-
283
-		if ($supprimer) {
284
-			if (
285
-				$supprimer_objets = charger_fonction(
286
-					"editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}",
287
-					'action',
288
-					true
289
-				)
290
-			) {
291
-				$oups = $supprimer_objets($supprimer);
292
-			} else {
293
-				include_spip('action/editer_liens');
294
-				$oups = [];
295
-
296
-				foreach ($supprimer as $k => $v) {
297
-					if ($lien = lien_verifier_action($k, $v)) {
298
-						$lien = explode('-', $lien);
299
-						[$objet_source, $ids, $objet_lie, $idl, $role] = array_pad($lien, 5, null);
300
-						// appliquer une condition sur le rôle si défini ('*' pour tous les roles)
301
-						$cond = (!is_null($role) ? ['role' => $role] : []);
302
-						if ($objet_lien == $objet_source) {
303
-							$oups = array_merge(
304
-								$oups,
305
-								objet_trouver_liens([$objet_source => $ids], [$objet_lie => $idl], $cond)
306
-							);
307
-							objet_dissocier([$objet_source => $ids], [$objet_lie => $idl], $cond);
308
-						} else {
309
-							$oups = array_merge(
310
-								$oups,
311
-								objet_trouver_liens([$objet_lie => $idl], [$objet_source => $ids], $cond)
312
-							);
313
-							objet_dissocier([$objet_lie => $idl], [$objet_source => $ids], $cond);
314
-						}
315
-					}
316
-				}
317
-			}
318
-			set_request('_oups', $oups ? base64_encode(serialize($oups)) : null);
319
-		}
320
-
321
-		if ($ajouter) {
322
-			if (
323
-				$ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true)
324
-			) {
325
-				$ajout_ok = $ajouter_objets($ajouter);
326
-			} else {
327
-				$ajout_ok = false;
328
-				include_spip('action/editer_liens');
329
-				foreach ($ajouter as $k => $v) {
330
-					if ($lien = lien_verifier_action($k, $v)) {
331
-						$ajout_ok = true;
332
-						[$objet1, $ids, $objet2, $idl] = explode('-', $lien);
333
-						$qualifs = lien_retrouver_qualif($objet_lien, $lien);
334
-						if ($objet_lien == $objet1) {
335
-							lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs);
336
-						} else {
337
-							lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs);
338
-						}
339
-						set_request('id_lien_ajoute', $ids);
340
-					}
341
-				}
342
-			}
343
-			# oups ne persiste que pour la derniere action, si suppression
344
-			# une suppression suivie d'un ajout dans le meme hit est un remplacement
345
-			# non annulable !
346
-			if ($ajout_ok) {
347
-				set_request('_oups');
348
-			}
349
-		}
350
-
351
-		if ($ordonner) {
352
-			include_spip('action/editer_liens');
353
-			foreach ($ordonner as $k => $rang_lien) {
354
-				if ($lien = lien_verifier_action($k, '')) {
355
-					[$objet1, $ids, $objet2, $idl] = explode('-', $lien);
356
-					$qualif = ['rang_lien' => $rang_lien];
357
-
358
-					if ($objet_lien == $objet1) {
359
-						objet_qualifier_liens([$objet1 => $ids], [$objet2 => $idl], $qualif);
360
-					} else {
361
-						objet_qualifier_liens([$objet2 => $idl], [$objet1 => $ids], $qualif);
362
-					}
363
-					set_request('id_lien_ajoute', $ids);
364
-					set_request('_oups');
365
-				}
366
-			}
367
-		}
368
-	}
369
-
370
-
371
-	return $res;
213
+    // compat avec ancienne signature ou le 4eme argument est $editable
214
+    if (!is_array($options)) {
215
+        $options = ['editable' => $options];
216
+    } elseif (!isset($options['editable'])) {
217
+        $options['editable'] = true;
218
+    }
219
+
220
+    $editable = $options['editable'];
221
+
222
+    $res = ['editable' => $editable ? true : false];
223
+    [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c);
224
+    if (!$table_source or !$objet or !$objet_lien) {
225
+        return $res;
226
+    }
227
+
228
+
229
+    if (_request('tout_voir')) {
230
+        set_request('recherche', '');
231
+    }
232
+
233
+    include_spip('inc/autoriser');
234
+    if (autoriser('modifier', $objet, $id_objet)) {
235
+        // annuler les suppressions du coup d'avant !
236
+        if (
237
+            _request('annuler_oups')
238
+            and $oups = _request('_oups')
239
+            and $oups = base64_decode($oups)
240
+            and $oups = unserialize($oups)
241
+        ) {
242
+            if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) {
243
+                $oups_objets($oups);
244
+            } else {
245
+                $objet_source = objet_type($table_source);
246
+                include_spip('action/editer_liens');
247
+                foreach ($oups as $oup) {
248
+                    if ($objet_lien == $objet_source) {
249
+                        objet_associer([$objet_source => $oup[$objet_source]], [$objet => $oup[$objet]], $oup);
250
+                    } else {
251
+                        objet_associer([$objet => $oup[$objet]], [$objet_source => $oup[$objet_source]], $oup);
252
+                    }
253
+                }
254
+            }
255
+            # oups ne persiste que pour la derniere action, si suppression
256
+            set_request('_oups');
257
+        }
258
+
259
+        $supprimer = _request('supprimer_lien');
260
+        $ajouter = _request('ajouter_lien');
261
+        $ordonner = _request('ordonner_lien');
262
+
263
+        if (_request('desordonner_liens')) {
264
+            include_spip('action/editer_liens');
265
+            objet_qualifier_liens([$objet_lien => '*'], [$objet => $id_objet], ['rang_lien' => 0]);
266
+        }
267
+
268
+        // il est possible de preciser dans une seule variable un remplacement :
269
+        // remplacer_lien[old][new]
270
+        if ($remplacer = _request('remplacer_lien')) {
271
+            foreach ($remplacer as $k => $v) {
272
+                if ($old = lien_verifier_action($k, '')) {
273
+                    foreach (is_array($v) ? $v : [$v] as $kn => $vn) {
274
+                        if ($new = lien_verifier_action($kn, $vn)) {
275
+                            $supprimer[$old] = 'x';
276
+                            $ajouter[$new] = '+';
277
+                        }
278
+                    }
279
+                }
280
+            }
281
+        }
282
+
283
+        if ($supprimer) {
284
+            if (
285
+                $supprimer_objets = charger_fonction(
286
+                    "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}",
287
+                    'action',
288
+                    true
289
+                )
290
+            ) {
291
+                $oups = $supprimer_objets($supprimer);
292
+            } else {
293
+                include_spip('action/editer_liens');
294
+                $oups = [];
295
+
296
+                foreach ($supprimer as $k => $v) {
297
+                    if ($lien = lien_verifier_action($k, $v)) {
298
+                        $lien = explode('-', $lien);
299
+                        [$objet_source, $ids, $objet_lie, $idl, $role] = array_pad($lien, 5, null);
300
+                        // appliquer une condition sur le rôle si défini ('*' pour tous les roles)
301
+                        $cond = (!is_null($role) ? ['role' => $role] : []);
302
+                        if ($objet_lien == $objet_source) {
303
+                            $oups = array_merge(
304
+                                $oups,
305
+                                objet_trouver_liens([$objet_source => $ids], [$objet_lie => $idl], $cond)
306
+                            );
307
+                            objet_dissocier([$objet_source => $ids], [$objet_lie => $idl], $cond);
308
+                        } else {
309
+                            $oups = array_merge(
310
+                                $oups,
311
+                                objet_trouver_liens([$objet_lie => $idl], [$objet_source => $ids], $cond)
312
+                            );
313
+                            objet_dissocier([$objet_lie => $idl], [$objet_source => $ids], $cond);
314
+                        }
315
+                    }
316
+                }
317
+            }
318
+            set_request('_oups', $oups ? base64_encode(serialize($oups)) : null);
319
+        }
320
+
321
+        if ($ajouter) {
322
+            if (
323
+                $ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true)
324
+            ) {
325
+                $ajout_ok = $ajouter_objets($ajouter);
326
+            } else {
327
+                $ajout_ok = false;
328
+                include_spip('action/editer_liens');
329
+                foreach ($ajouter as $k => $v) {
330
+                    if ($lien = lien_verifier_action($k, $v)) {
331
+                        $ajout_ok = true;
332
+                        [$objet1, $ids, $objet2, $idl] = explode('-', $lien);
333
+                        $qualifs = lien_retrouver_qualif($objet_lien, $lien);
334
+                        if ($objet_lien == $objet1) {
335
+                            lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs);
336
+                        } else {
337
+                            lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs);
338
+                        }
339
+                        set_request('id_lien_ajoute', $ids);
340
+                    }
341
+                }
342
+            }
343
+            # oups ne persiste que pour la derniere action, si suppression
344
+            # une suppression suivie d'un ajout dans le meme hit est un remplacement
345
+            # non annulable !
346
+            if ($ajout_ok) {
347
+                set_request('_oups');
348
+            }
349
+        }
350
+
351
+        if ($ordonner) {
352
+            include_spip('action/editer_liens');
353
+            foreach ($ordonner as $k => $rang_lien) {
354
+                if ($lien = lien_verifier_action($k, '')) {
355
+                    [$objet1, $ids, $objet2, $idl] = explode('-', $lien);
356
+                    $qualif = ['rang_lien' => $rang_lien];
357
+
358
+                    if ($objet_lien == $objet1) {
359
+                        objet_qualifier_liens([$objet1 => $ids], [$objet2 => $idl], $qualif);
360
+                    } else {
361
+                        objet_qualifier_liens([$objet2 => $idl], [$objet1 => $ids], $qualif);
362
+                    }
363
+                    set_request('id_lien_ajoute', $ids);
364
+                    set_request('_oups');
365
+                }
366
+            }
367
+        }
368
+    }
369
+
370
+
371
+    return $res;
372 372
 }
373 373
 
374 374
 
@@ -391,24 +391,24 @@  discard block
 block discarded – undo
391 391
  * @return string Action demandée si trouvée, sinon ''
392 392
  */
393 393
 function lien_verifier_action($k, $v) {
394
-	$action = '';
395
-	if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) {
396
-		$action = $k;
397
-	}
398
-	if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) {
399
-		if (is_numeric($k)) {
400
-			$action = $v;
401
-		}
402
-		if (_request($k)) {
403
-			$action = $v;
404
-		}
405
-	}
406
-	// ajout un role null fictif (plus pratique) si pas défini
407
-	if ($action and count(explode('-', $action)) == 4) {
408
-		$action .= '-';
409
-	}
410
-
411
-	return $action;
394
+    $action = '';
395
+    if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) {
396
+        $action = $k;
397
+    }
398
+    if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) {
399
+        if (is_numeric($k)) {
400
+            $action = $v;
401
+        }
402
+        if (_request($k)) {
403
+            $action = $v;
404
+        }
405
+    }
406
+    // ajout un role null fictif (plus pratique) si pas défini
407
+    if ($action and count(explode('-', $action)) == 4) {
408
+        $action .= '-';
409
+    }
410
+
411
+    return $action;
412 412
 }
413 413
 
414 414
 
@@ -424,66 +424,66 @@  discard block
 block discarded – undo
424 424
  *   Liste des qualifs pour chaque lien. Tableau vide s'il n'y en a pas.
425 425
  **/
426 426
 function lien_retrouver_qualif($objet_lien, $lien) {
427
-	// un role est défini dans la liaison
428
-	$defs = explode('-', $lien);
429
-	[$objet1, , $objet2, , $role] = array_pad($defs, 5, null);
430
-	if ($objet_lien == $objet1) {
431
-		$colonne_role = roles_colonne($objet1, $objet2);
432
-	} else {
433
-		$colonne_role = roles_colonne($objet2, $objet1);
434
-	}
435
-
436
-	// cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut)
437
-	if ($role) {
438
-		return [
439
-			// un seul lien avec ce role
440
-			[$colonne_role => $role]
441
-		];
442
-	}
443
-
444
-	// retrouver les rôles postés pour cette liaison, s'il y en a.
445
-	$qualifier_lien = _request('qualifier_lien');
446
-	if (!$qualifier_lien or !is_array($qualifier_lien)) {
447
-		return [];
448
-	}
449
-
450
-	// pas avec l'action complete (incluant le role)
451
-	$qualif = [];
452
-	if (
453
-		(!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien])
454
-		and count($defs) == 5
455
-	) {
456
-		// on tente avec l'action sans le role
457
-		array_pop($defs);
458
-		$lien = implode('-', $defs);
459
-		if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) {
460
-			$qualif = [];
461
-		}
462
-	}
463
-
464
-	// $qualif de la forme array(role=>array(...),valeur=>array(...),....)
465
-	// on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...)
466
-	$qualifs = [];
467
-	while (is_countable($qualif) ? count($qualif) : 0) {
468
-		$q = [];
469
-		foreach ($qualif as $att => $values) {
470
-			if (is_array($values)) {
471
-				$q[$att] = array_shift($qualif[$att]);
472
-				if (!(is_countable($qualif[$att]) ? count($qualif[$att]) : 0)) {
473
-					unset($qualif[$att]);
474
-				}
475
-			} else {
476
-				$q[$att] = $values;
477
-				unset($qualif[$att]);
478
-			}
479
-		}
480
-		// pas de rôle vide
481
-		if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) {
482
-			$qualifs[] = $q;
483
-		}
484
-	}
485
-
486
-	return $qualifs;
427
+    // un role est défini dans la liaison
428
+    $defs = explode('-', $lien);
429
+    [$objet1, , $objet2, , $role] = array_pad($defs, 5, null);
430
+    if ($objet_lien == $objet1) {
431
+        $colonne_role = roles_colonne($objet1, $objet2);
432
+    } else {
433
+        $colonne_role = roles_colonne($objet2, $objet1);
434
+    }
435
+
436
+    // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut)
437
+    if ($role) {
438
+        return [
439
+            // un seul lien avec ce role
440
+            [$colonne_role => $role]
441
+        ];
442
+    }
443
+
444
+    // retrouver les rôles postés pour cette liaison, s'il y en a.
445
+    $qualifier_lien = _request('qualifier_lien');
446
+    if (!$qualifier_lien or !is_array($qualifier_lien)) {
447
+        return [];
448
+    }
449
+
450
+    // pas avec l'action complete (incluant le role)
451
+    $qualif = [];
452
+    if (
453
+        (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien])
454
+        and count($defs) == 5
455
+    ) {
456
+        // on tente avec l'action sans le role
457
+        array_pop($defs);
458
+        $lien = implode('-', $defs);
459
+        if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) {
460
+            $qualif = [];
461
+        }
462
+    }
463
+
464
+    // $qualif de la forme array(role=>array(...),valeur=>array(...),....)
465
+    // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...)
466
+    $qualifs = [];
467
+    while (is_countable($qualif) ? count($qualif) : 0) {
468
+        $q = [];
469
+        foreach ($qualif as $att => $values) {
470
+            if (is_array($values)) {
471
+                $q[$att] = array_shift($qualif[$att]);
472
+                if (!(is_countable($qualif[$att]) ? count($qualif[$att]) : 0)) {
473
+                    unset($qualif[$att]);
474
+                }
475
+            } else {
476
+                $q[$att] = $values;
477
+                unset($qualif[$att]);
478
+            }
479
+        }
480
+        // pas de rôle vide
481
+        if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) {
482
+            $qualifs[] = $q;
483
+        }
484
+    }
485
+
486
+    return $qualifs;
487 487
 }
488 488
 
489 489
 /**
@@ -502,12 +502,12 @@  discard block
 block discarded – undo
502 502
  **/
503 503
 function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs) {
504 504
 
505
-	// retrouver la colonne de roles s'il y en a a lier
506
-	if (is_array($qualifs) and count($qualifs)) {
507
-		foreach ($qualifs as $qualif) {
508
-			objet_associer([$objet_source => $ids], [$objet_lien => $idl], $qualif);
509
-		}
510
-	} else {
511
-		objet_associer([$objet_source => $ids], [$objet_lien => $idl]);
512
-	}
505
+    // retrouver la colonne de roles s'il y en a a lier
506
+    if (is_array($qualifs) and count($qualifs)) {
507
+        foreach ($qualifs as $qualif) {
508
+            objet_associer([$objet_source => $ids], [$objet_lien => $idl], $qualif);
509
+        }
510
+    } else {
511
+        objet_associer([$objet_source => $ids], [$objet_lien => $idl]);
512
+    }
513 513
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -105,7 +105,7 @@  discard block
 block discarded – undo
105 105
 
106 106
 	// L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
107 107
 	include_spip('inc/autoriser');
108
-	$editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet)
108
+	$editable = ($editable and autoriser('associer'.$table_source, $objet, $id_objet)
109 109
 		and autoriser('modifier', $objet, $id_objet));
110 110
 
111 111
 	if (
@@ -119,15 +119,15 @@  discard block
 block discarded – undo
119 119
 
120 120
 	// squelettes de vue et de d'association
121 121
 	// ils sont différents si des rôles sont définis.
122
-	$skel_vue = $table_source . '_lies';
123
-	$skel_ajout = $table_source . '_associer';
122
+	$skel_vue = $table_source.'_lies';
123
+	$skel_ajout = $table_source.'_associer';
124 124
 
125 125
 	// description des roles
126 126
 	include_spip('inc/roles');
127 127
 	if ($roles = roles_presents($objet_source, $objet)) {
128 128
 		// on demande de nouveaux squelettes en conséquence
129
-		$skel_vue = $table_source . '_roles_lies';
130
-		$skel_ajout = $table_source . '_roles_associer';
129
+		$skel_vue = $table_source.'_roles_lies';
130
+		$skel_ajout = $table_source.'_roles_associer';
131 131
 	}
132 132
 
133 133
 	$oups = _request('_oups') ?? '';
@@ -426,7 +426,7 @@  discard block
 block discarded – undo
426 426
 function lien_retrouver_qualif($objet_lien, $lien) {
427 427
 	// un role est défini dans la liaison
428 428
 	$defs = explode('-', $lien);
429
-	[$objet1, , $objet2, , $role] = array_pad($defs, 5, null);
429
+	[$objet1,, $objet2,, $role] = array_pad($defs, 5, null);
430 430
 	if ($objet_lien == $objet1) {
431 431
 		$colonne_role = roles_colonne($objet1, $objet2);
432 432
 	} else {
Please login to merge, or discard this patch.