Completed
Push — master ( 8fce1d...545544 )
by cam
01:25
created
ecrire/base/trouver_table.php 2 patches
Indentation   +150 added lines, -150 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\SQL\Tables
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 include_spip('base/objets');
22 22
 
@@ -68,153 +68,153 @@  discard block
 block discarded – undo
68 68
  *
69 69
  **/
70 70
 function base_trouver_table_dist($nom, $serveur = '', $table_spip = true, array $options = []) {
71
-	static $nom_cache_desc_sql = [];
72
-
73
-	if (
74
-		!spip_connect($serveur)
75
-		or !preg_match('/^[a-zA-Z0-9._-]*/', $nom)
76
-	) {
77
-		return null;
78
-	}
79
-
80
-	$options = $options + [
81
-		// si false, baissera le niveau de log si une table demandée n’existe pas
82
-		'log_missing' => true,
83
-	];
84
-
85
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
86
-	$objets_sql = lister_tables_objets_sql('::md5');
87
-
88
-	// le nom du cache depend du serveur mais aussi du nom de la db et du prefixe
89
-	// ce qui permet une auto invalidation en cas de modif manuelle du fichier
90
-	// de connexion, et tout risque d'ambiguite
91
-	if (!isset($nom_cache_desc_sql[$serveur][$objets_sql])) {
92
-		$nom_cache_desc_sql[$serveur][$objets_sql] =
93
-			_DIR_CACHE . 'sql_desc_'
94
-			. ($serveur ? "{$serveur}_" : '')
95
-			. substr(md5($connexion['db'] . ':' . $connexion['prefixe'] . ":$objets_sql"), 0, 8)
96
-			. '.txt';
97
-		// nouveau nom de cache = nouvelle version en memoire
98
-		unset($connexion['tables']);
99
-	}
100
-
101
-	// un appel avec $nom vide est une demande explicite de vidange du cache des descriptions
102
-	if (!$nom) {
103
-		spip_unlink($nom_cache_desc_sql[$serveur][$objets_sql]);
104
-		$connexion['tables'] = [];
105
-
106
-		return null;
107
-	}
108
-
109
-	$nom_sql = $nom;
110
-	if (preg_match('/\.(.*)$/', $nom, $s)) {
111
-		$nom_sql = $s[1];
112
-	} else {
113
-		$nom_sql = $nom;
114
-	}
115
-
116
-	$fdesc = $desc = '';
117
-	$connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0];
118
-
119
-	// base sous SPIP: gerer les abreviations explicites des noms de table
120
-	if ($connexion['spip_connect_version']) {
121
-		if ($table_spip and isset($GLOBALS['table_des_tables'][$nom])) {
122
-			$nom = $GLOBALS['table_des_tables'][$nom];
123
-			$nom_sql = 'spip_' . $nom;
124
-		}
125
-	}
126
-
127
-	// si c'est la premiere table qu'on cherche
128
-	// et si on est pas explicitement en recalcul
129
-	// on essaye de recharger le cache des decriptions de ce serveur
130
-	// dans le fichier cache
131
-	if (
132
-		!isset($connexion['tables'][$nom_sql])
133
-		and defined('_VAR_MODE') and _VAR_MODE !== 'recalcul'
134
-		and (!isset($connexion['tables']) or !$connexion['tables'])
135
-	) {
136
-		if (
137
-			lire_fichier($nom_cache_desc_sql[$serveur][$objets_sql], $desc_cache)
138
-			and $desc_cache = unserialize($desc_cache)
139
-		) {
140
-			$connexion['tables'] = $desc_cache;
141
-		}
142
-	}
143
-	if ($table_spip and !isset($connexion['tables'][$nom_sql])) {
144
-		if (isset($GLOBALS['tables_principales'][$nom_sql])) {
145
-			$fdesc = $GLOBALS['tables_principales'][$nom_sql];
146
-		}
147
-		// meme si pas d'abreviation declaree, trouver la table spip_$nom
148
-		// si c'est une table principale,
149
-		// puisqu'on le fait aussi pour les tables auxiliaires
150
-		elseif ($nom_sql == $nom and isset($GLOBALS['tables_principales']['spip_' . $nom])) {
151
-			$nom_sql = 'spip_' . $nom;
152
-			$fdesc = &$GLOBALS['tables_principales'][$nom_sql];
153
-		} elseif (
154
-			isset($GLOBALS['tables_auxiliaires'][$n = $nom])
155
-			or isset($GLOBALS['tables_auxiliaires'][$n = 'spip_' . $nom])
156
-		) {
157
-			$nom_sql = $n;
158
-			$fdesc = &$GLOBALS['tables_auxiliaires'][$n];
159
-		}  # table locale a cote de SPIP, comme non SPIP:
160
-	}
161
-	if (!isset($connexion['tables'][$nom_sql])) {
162
-		// La *vraie* base a la priorite
163
-		$exists = sql_table_exists($nom_sql, $table_spip, $serveur);
164
-		if (
165
-			!$exists 
166
-			or !$desc = sql_showtable($nom_sql, $table_spip, $serveur)
167
-			or !$desc['field']
168
-		) {
169
-			if (!$fdesc) {
170
-				$log_level = $options['log_missing'] ? _LOG_INFO_IMPORTANTE : _LOG_DEBUG;
171
-				spip_log("trouver_table: table inconnue '$serveur' '$nom'", 'base' . $log_level);
172
-
173
-				return null;
174
-			}
175
-			// on ne sait pas lire la structure de la table :
176
-			// on retombe sur la description donnee dans les fichiers spip
177
-			$desc = $fdesc;
178
-			$desc['exist'] = false;
179
-		} else {
180
-			$desc['exist'] = true;
181
-			// gerer le cas des cles vides (echec de l'analyse sur une vue par exemple)
182
-			// pour recuperer la declaration de lister_tables_objets_sql() si il y en a une
183
-			if (! $desc['key']) {
184
-				spip_log("trouver_table: table sans cle '$serveur' '$nom'", 'base');
185
-				unset($desc['key']);
186
-			}
187
-		}
188
-
189
-		$desc['table'] = $desc['table_sql'] = $nom_sql;
190
-		$desc['connexion'] = $serveur;
191
-
192
-		// charger les infos declarees pour cette table
193
-		// en lui passant les infos connues
194
-		// $desc est prioritaire pour la description de la table
195
-		$desc = array_merge(lister_tables_objets_sql($nom_sql, $desc), $desc);
196
-		// s'assurer qu'on a toujours un 'key'
197
-		if (!isset($desc['key']) && !empty($fdesc['key'])) {
198
-			$desc['key'] = $fdesc['key'];
199
-		}
200
-		if (! isset($desc['key'])) {
201
-			$desc['key'] = [];
202
-		}
203
-
204
-		// si tables_objets_sql est bien fini d'init, on peut cacher
205
-		$connexion['tables'][$nom_sql] = $desc;
206
-		$res = &$connexion['tables'][$nom_sql];
207
-		// une nouvelle table a ete decrite
208
-		// mettons donc a jour le cache des descriptions de ce serveur
209
-		if (is_writeable(_DIR_CACHE)) {
210
-			ecrire_fichier($nom_cache_desc_sql[$serveur][$objets_sql], serialize($connexion['tables']), true);
211
-		}
212
-	} else {
213
-		$res = &$connexion['tables'][$nom_sql];
214
-	}
215
-
216
-	// toujours retourner $nom dans id_table
217
-	$res['id_table'] = $nom;
218
-
219
-	return $res;
71
+    static $nom_cache_desc_sql = [];
72
+
73
+    if (
74
+        !spip_connect($serveur)
75
+        or !preg_match('/^[a-zA-Z0-9._-]*/', $nom)
76
+    ) {
77
+        return null;
78
+    }
79
+
80
+    $options = $options + [
81
+        // si false, baissera le niveau de log si une table demandée n’existe pas
82
+        'log_missing' => true,
83
+    ];
84
+
85
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
86
+    $objets_sql = lister_tables_objets_sql('::md5');
87
+
88
+    // le nom du cache depend du serveur mais aussi du nom de la db et du prefixe
89
+    // ce qui permet une auto invalidation en cas de modif manuelle du fichier
90
+    // de connexion, et tout risque d'ambiguite
91
+    if (!isset($nom_cache_desc_sql[$serveur][$objets_sql])) {
92
+        $nom_cache_desc_sql[$serveur][$objets_sql] =
93
+            _DIR_CACHE . 'sql_desc_'
94
+            . ($serveur ? "{$serveur}_" : '')
95
+            . substr(md5($connexion['db'] . ':' . $connexion['prefixe'] . ":$objets_sql"), 0, 8)
96
+            . '.txt';
97
+        // nouveau nom de cache = nouvelle version en memoire
98
+        unset($connexion['tables']);
99
+    }
100
+
101
+    // un appel avec $nom vide est une demande explicite de vidange du cache des descriptions
102
+    if (!$nom) {
103
+        spip_unlink($nom_cache_desc_sql[$serveur][$objets_sql]);
104
+        $connexion['tables'] = [];
105
+
106
+        return null;
107
+    }
108
+
109
+    $nom_sql = $nom;
110
+    if (preg_match('/\.(.*)$/', $nom, $s)) {
111
+        $nom_sql = $s[1];
112
+    } else {
113
+        $nom_sql = $nom;
114
+    }
115
+
116
+    $fdesc = $desc = '';
117
+    $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0];
118
+
119
+    // base sous SPIP: gerer les abreviations explicites des noms de table
120
+    if ($connexion['spip_connect_version']) {
121
+        if ($table_spip and isset($GLOBALS['table_des_tables'][$nom])) {
122
+            $nom = $GLOBALS['table_des_tables'][$nom];
123
+            $nom_sql = 'spip_' . $nom;
124
+        }
125
+    }
126
+
127
+    // si c'est la premiere table qu'on cherche
128
+    // et si on est pas explicitement en recalcul
129
+    // on essaye de recharger le cache des decriptions de ce serveur
130
+    // dans le fichier cache
131
+    if (
132
+        !isset($connexion['tables'][$nom_sql])
133
+        and defined('_VAR_MODE') and _VAR_MODE !== 'recalcul'
134
+        and (!isset($connexion['tables']) or !$connexion['tables'])
135
+    ) {
136
+        if (
137
+            lire_fichier($nom_cache_desc_sql[$serveur][$objets_sql], $desc_cache)
138
+            and $desc_cache = unserialize($desc_cache)
139
+        ) {
140
+            $connexion['tables'] = $desc_cache;
141
+        }
142
+    }
143
+    if ($table_spip and !isset($connexion['tables'][$nom_sql])) {
144
+        if (isset($GLOBALS['tables_principales'][$nom_sql])) {
145
+            $fdesc = $GLOBALS['tables_principales'][$nom_sql];
146
+        }
147
+        // meme si pas d'abreviation declaree, trouver la table spip_$nom
148
+        // si c'est une table principale,
149
+        // puisqu'on le fait aussi pour les tables auxiliaires
150
+        elseif ($nom_sql == $nom and isset($GLOBALS['tables_principales']['spip_' . $nom])) {
151
+            $nom_sql = 'spip_' . $nom;
152
+            $fdesc = &$GLOBALS['tables_principales'][$nom_sql];
153
+        } elseif (
154
+            isset($GLOBALS['tables_auxiliaires'][$n = $nom])
155
+            or isset($GLOBALS['tables_auxiliaires'][$n = 'spip_' . $nom])
156
+        ) {
157
+            $nom_sql = $n;
158
+            $fdesc = &$GLOBALS['tables_auxiliaires'][$n];
159
+        }  # table locale a cote de SPIP, comme non SPIP:
160
+    }
161
+    if (!isset($connexion['tables'][$nom_sql])) {
162
+        // La *vraie* base a la priorite
163
+        $exists = sql_table_exists($nom_sql, $table_spip, $serveur);
164
+        if (
165
+            !$exists 
166
+            or !$desc = sql_showtable($nom_sql, $table_spip, $serveur)
167
+            or !$desc['field']
168
+        ) {
169
+            if (!$fdesc) {
170
+                $log_level = $options['log_missing'] ? _LOG_INFO_IMPORTANTE : _LOG_DEBUG;
171
+                spip_log("trouver_table: table inconnue '$serveur' '$nom'", 'base' . $log_level);
172
+
173
+                return null;
174
+            }
175
+            // on ne sait pas lire la structure de la table :
176
+            // on retombe sur la description donnee dans les fichiers spip
177
+            $desc = $fdesc;
178
+            $desc['exist'] = false;
179
+        } else {
180
+            $desc['exist'] = true;
181
+            // gerer le cas des cles vides (echec de l'analyse sur une vue par exemple)
182
+            // pour recuperer la declaration de lister_tables_objets_sql() si il y en a une
183
+            if (! $desc['key']) {
184
+                spip_log("trouver_table: table sans cle '$serveur' '$nom'", 'base');
185
+                unset($desc['key']);
186
+            }
187
+        }
188
+
189
+        $desc['table'] = $desc['table_sql'] = $nom_sql;
190
+        $desc['connexion'] = $serveur;
191
+
192
+        // charger les infos declarees pour cette table
193
+        // en lui passant les infos connues
194
+        // $desc est prioritaire pour la description de la table
195
+        $desc = array_merge(lister_tables_objets_sql($nom_sql, $desc), $desc);
196
+        // s'assurer qu'on a toujours un 'key'
197
+        if (!isset($desc['key']) && !empty($fdesc['key'])) {
198
+            $desc['key'] = $fdesc['key'];
199
+        }
200
+        if (! isset($desc['key'])) {
201
+            $desc['key'] = [];
202
+        }
203
+
204
+        // si tables_objets_sql est bien fini d'init, on peut cacher
205
+        $connexion['tables'][$nom_sql] = $desc;
206
+        $res = &$connexion['tables'][$nom_sql];
207
+        // une nouvelle table a ete decrite
208
+        // mettons donc a jour le cache des descriptions de ce serveur
209
+        if (is_writeable(_DIR_CACHE)) {
210
+            ecrire_fichier($nom_cache_desc_sql[$serveur][$objets_sql], serialize($connexion['tables']), true);
211
+        }
212
+    } else {
213
+        $res = &$connexion['tables'][$nom_sql];
214
+    }
215
+
216
+    // toujours retourner $nom dans id_table
217
+    $res['id_table'] = $nom;
218
+
219
+    return $res;
220 220
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -90,9 +90,9 @@  discard block
 block discarded – undo
90 90
 	// de connexion, et tout risque d'ambiguite
91 91
 	if (!isset($nom_cache_desc_sql[$serveur][$objets_sql])) {
92 92
 		$nom_cache_desc_sql[$serveur][$objets_sql] =
93
-			_DIR_CACHE . 'sql_desc_'
93
+			_DIR_CACHE.'sql_desc_'
94 94
 			. ($serveur ? "{$serveur}_" : '')
95
-			. substr(md5($connexion['db'] . ':' . $connexion['prefixe'] . ":$objets_sql"), 0, 8)
95
+			. substr(md5($connexion['db'].':'.$connexion['prefixe'].":$objets_sql"), 0, 8)
96 96
 			. '.txt';
97 97
 		// nouveau nom de cache = nouvelle version en memoire
98 98
 		unset($connexion['tables']);
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
 	if ($connexion['spip_connect_version']) {
121 121
 		if ($table_spip and isset($GLOBALS['table_des_tables'][$nom])) {
122 122
 			$nom = $GLOBALS['table_des_tables'][$nom];
123
-			$nom_sql = 'spip_' . $nom;
123
+			$nom_sql = 'spip_'.$nom;
124 124
 		}
125 125
 	}
126 126
 
@@ -147,12 +147,12 @@  discard block
 block discarded – undo
147 147
 		// meme si pas d'abreviation declaree, trouver la table spip_$nom
148 148
 		// si c'est une table principale,
149 149
 		// puisqu'on le fait aussi pour les tables auxiliaires
150
-		elseif ($nom_sql == $nom and isset($GLOBALS['tables_principales']['spip_' . $nom])) {
151
-			$nom_sql = 'spip_' . $nom;
150
+		elseif ($nom_sql == $nom and isset($GLOBALS['tables_principales']['spip_'.$nom])) {
151
+			$nom_sql = 'spip_'.$nom;
152 152
 			$fdesc = &$GLOBALS['tables_principales'][$nom_sql];
153 153
 		} elseif (
154 154
 			isset($GLOBALS['tables_auxiliaires'][$n = $nom])
155
-			or isset($GLOBALS['tables_auxiliaires'][$n = 'spip_' . $nom])
155
+			or isset($GLOBALS['tables_auxiliaires'][$n = 'spip_'.$nom])
156 156
 		) {
157 157
 			$nom_sql = $n;
158 158
 			$fdesc = &$GLOBALS['tables_auxiliaires'][$n];
@@ -168,7 +168,7 @@  discard block
 block discarded – undo
168 168
 		) {
169 169
 			if (!$fdesc) {
170 170
 				$log_level = $options['log_missing'] ? _LOG_INFO_IMPORTANTE : _LOG_DEBUG;
171
-				spip_log("trouver_table: table inconnue '$serveur' '$nom'", 'base' . $log_level);
171
+				spip_log("trouver_table: table inconnue '$serveur' '$nom'", 'base'.$log_level);
172 172
 
173 173
 				return null;
174 174
 			}
@@ -180,7 +180,7 @@  discard block
 block discarded – undo
180 180
 			$desc['exist'] = true;
181 181
 			// gerer le cas des cles vides (echec de l'analyse sur une vue par exemple)
182 182
 			// pour recuperer la declaration de lister_tables_objets_sql() si il y en a une
183
-			if (! $desc['key']) {
183
+			if (!$desc['key']) {
184 184
 				spip_log("trouver_table: table sans cle '$serveur' '$nom'", 'base');
185 185
 				unset($desc['key']);
186 186
 			}
@@ -197,7 +197,7 @@  discard block
 block discarded – undo
197 197
 		if (!isset($desc['key']) && !empty($fdesc['key'])) {
198 198
 			$desc['key'] = $fdesc['key'];
199 199
 		}
200
-		if (! isset($desc['key'])) {
200
+		if (!isset($desc['key'])) {
201 201
 			$desc['key'] = [];
202 202
 		}
203 203
 
Please login to merge, or discard this patch.
ecrire/base/abstract_sql.php 1 patch
Indentation   +695 added lines, -695 removed lines patch added patch discarded remove patch
@@ -25,7 +25,7 @@  discard block
 block discarded – undo
25 25
  */
26 26
 
27 27
 if (!defined('_ECRIRE_INC_VERSION')) {
28
-	return;
28
+    return;
29 29
 }
30 30
 
31 31
 /** Version de l'API SQL */
@@ -45,39 +45,39 @@  discard block
 block discarded – undo
45 45
  *     contexte de l'erreur
46 46
  **/
47 47
 function sql_error_backtrace($compil_info = false) {
48
-	$trace = debug_backtrace();
49
-	$caller = array_shift($trace);
50
-	while (count($trace) and (empty($trace[0]['file']) or $trace[0]['file'] === $caller['file'] or $trace[0]['file'] === __FILE__)) {
51
-		array_shift($trace);
52
-	}
53
-
54
-	if ($compil_info) {
55
-		$contexte_compil = [
56
-			$trace[0]['file'],// sourcefile
57
-			'', //nom
58
-			(isset($trace[1]) ? $trace[1]['function'] . "(){\n" : '')
59
-			. $trace[0]['function'] . '();'
60
-			. (isset($trace[1]) ? "\n}" : ''), //id_boucle
61
-			$trace[0]['line'], // ligne
62
-			$GLOBALS['spip_lang'], // lang
63
-		];
64
-
65
-		return $contexte_compil;
66
-	}
67
-
68
-	$message = count($trace) ? $trace[0]['file'] . ' L' . $trace[0]['line'] : '';
69
-	$f = [];
70
-	while (count($trace) and $t = array_shift($trace)) {
71
-		if (in_array($t['function'], ['include_once', 'include_spip', 'find_in_path'])) {
72
-			break;
73
-		}
74
-		$f[] = $t['function'];
75
-	}
76
-	if (count($f)) {
77
-		$message .= ' [' . implode('(),', $f) . '()]';
78
-	}
79
-
80
-	return $message;
48
+    $trace = debug_backtrace();
49
+    $caller = array_shift($trace);
50
+    while (count($trace) and (empty($trace[0]['file']) or $trace[0]['file'] === $caller['file'] or $trace[0]['file'] === __FILE__)) {
51
+        array_shift($trace);
52
+    }
53
+
54
+    if ($compil_info) {
55
+        $contexte_compil = [
56
+            $trace[0]['file'],// sourcefile
57
+            '', //nom
58
+            (isset($trace[1]) ? $trace[1]['function'] . "(){\n" : '')
59
+            . $trace[0]['function'] . '();'
60
+            . (isset($trace[1]) ? "\n}" : ''), //id_boucle
61
+            $trace[0]['line'], // ligne
62
+            $GLOBALS['spip_lang'], // lang
63
+        ];
64
+
65
+        return $contexte_compil;
66
+    }
67
+
68
+    $message = count($trace) ? $trace[0]['file'] . ' L' . $trace[0]['line'] : '';
69
+    $f = [];
70
+    while (count($trace) and $t = array_shift($trace)) {
71
+        if (in_array($t['function'], ['include_once', 'include_spip', 'find_in_path'])) {
72
+            break;
73
+        }
74
+        $f[] = $t['function'];
75
+    }
76
+    if (count($f)) {
77
+        $message .= ' [' . implode('(),', $f) . '()]';
78
+    }
79
+
80
+    return $message;
81 81
 }
82 82
 
83 83
 
@@ -102,16 +102,16 @@  discard block
 block discarded – undo
102 102
  *
103 103
  **/
104 104
 function sql_serveur($ins_sql = '', $serveur = '', $continue = false) {
105
-	static $sql_serveur = [];
106
-	if (!isset($sql_serveur[$serveur][$ins_sql])) {
107
-		$f = spip_connect_sql(sql_ABSTRACT_VERSION, $ins_sql, $serveur, $continue);
108
-		if (!is_string($f) or !$f) {
109
-			return $f;
110
-		}
111
-		$sql_serveur[$serveur][$ins_sql] = $f;
112
-	}
113
-
114
-	return $sql_serveur[$serveur][$ins_sql];
105
+    static $sql_serveur = [];
106
+    if (!isset($sql_serveur[$serveur][$ins_sql])) {
107
+        $f = spip_connect_sql(sql_ABSTRACT_VERSION, $ins_sql, $serveur, $continue);
108
+        if (!is_string($f) or !$f) {
109
+            return $f;
110
+        }
111
+        $sql_serveur[$serveur][$ins_sql] = $f;
112
+    }
113
+
114
+    return $sql_serveur[$serveur][$ins_sql];
115 115
 }
116 116
 
117 117
 /**
@@ -133,23 +133,23 @@  discard block
 block discarded – undo
133 133
  *     Retourne le nom du charset si effectivement trouvé, sinon false.
134 134
  **/
135 135
 function sql_get_charset($charset, $serveur = '', $option = true) {
136
-	// le nom http du charset differe parfois du nom SQL utf-8 ==> utf8 etc.
137
-	$desc = sql_serveur('', $serveur, true, true);
138
-	$desc = $desc[sql_ABSTRACT_VERSION];
139
-	$c = $desc['charsets'][$charset];
140
-	if ($c) {
141
-		if (function_exists($f = @$desc['get_charset'])) {
142
-			if ($f($c, $serveur, $option !== false)) {
143
-				return $c;
144
-			}
145
-		}
146
-	}
147
-	spip_log(
148
-		"SPIP ne connait pas les Charsets disponibles sur le serveur $serveur. Le serveur choisira seul.",
149
-		_LOG_AVERTISSEMENT
150
-	);
151
-
152
-	return false;
136
+    // le nom http du charset differe parfois du nom SQL utf-8 ==> utf8 etc.
137
+    $desc = sql_serveur('', $serveur, true, true);
138
+    $desc = $desc[sql_ABSTRACT_VERSION];
139
+    $c = $desc['charsets'][$charset];
140
+    if ($c) {
141
+        if (function_exists($f = @$desc['get_charset'])) {
142
+            if ($f($c, $serveur, $option !== false)) {
143
+                return $c;
144
+            }
145
+        }
146
+    }
147
+    spip_log(
148
+        "SPIP ne connait pas les Charsets disponibles sur le serveur $serveur. Le serveur choisira seul.",
149
+        _LOG_AVERTISSEMENT
150
+    );
151
+
152
+    return false;
153 153
 }
154 154
 
155 155
 
@@ -175,12 +175,12 @@  discard block
 block discarded – undo
175 175
  *    Retourne true si elle reussie.
176 176
  **/
177 177
 function sql_set_charset($charset, $serveur = '', $option = true) {
178
-	$f = sql_serveur('set_charset', $serveur, $option === 'continue' or $option === false);
179
-	if (!is_string($f) or !$f) {
180
-		return false;
181
-	}
178
+    $f = sql_serveur('set_charset', $serveur, $option === 'continue' or $option === false);
179
+    if (!is_string($f) or !$f) {
180
+        return false;
181
+    }
182 182
 
183
-	return $f($charset, $serveur, $option !== false);
183
+    return $f($charset, $serveur, $option !== false);
184 184
 }
185 185
 
186 186
 
@@ -231,59 +231,59 @@  discard block
 block discarded – undo
231 231
  *
232 232
  **/
233 233
 function sql_select(
234
-	$select = [],
235
-	$from = [],
236
-	$where = [],
237
-	$groupby = [],
238
-	$orderby = [],
239
-	$limit = '',
240
-	$having = [],
241
-	$serveur = '',
242
-	$option = true
234
+    $select = [],
235
+    $from = [],
236
+    $where = [],
237
+    $groupby = [],
238
+    $orderby = [],
239
+    $limit = '',
240
+    $having = [],
241
+    $serveur = '',
242
+    $option = true
243 243
 ) {
244
-	$f = sql_serveur('select', $serveur, $option === 'continue' or $option === false);
245
-	if (!is_string($f) or !$f) {
246
-		return false;
247
-	}
248
-
249
-	$debug = (defined('_VAR_MODE') and _VAR_MODE == 'debug');
250
-	if (($option !== false) and !$debug) {
251
-		$res = $f(
252
-			$select,
253
-			$from,
254
-			$where,
255
-			$groupby,
256
-			$orderby,
257
-			$limit,
258
-			$having,
259
-			$serveur,
260
-			is_array($option) ? true : $option
261
-		);
262
-	} else {
263
-		$query = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false);
264
-		if (!$option) {
265
-			return $query;
266
-		}
267
-		// le debug, c'est pour ce qui a ete produit par le compilateur
268
-		if (isset($GLOBALS['debug']['aucasou'])) {
269
-			list($table, $id, ) = $GLOBALS['debug']['aucasou'];
270
-			$nom = $GLOBALS['debug_objets']['courant'] . $id;
271
-			$GLOBALS['debug_objets']['requete'][$nom] = $query;
272
-		}
273
-		$res = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, true);
274
-	}
275
-
276
-	// en cas d'erreur
277
-	if (!is_string($res)) {
278
-		return $res;
279
-	}
280
-	// denoncer l'erreur SQL dans sa version brute
281
-	spip_sql_erreur($serveur);
282
-	// idem dans sa version squelette (prefixe des tables non substitue)
283
-	$contexte_compil = sql_error_backtrace(true);
284
-	erreur_squelette([sql_errno($serveur), sql_error($serveur), $res], $contexte_compil);
285
-
286
-	return false;
244
+    $f = sql_serveur('select', $serveur, $option === 'continue' or $option === false);
245
+    if (!is_string($f) or !$f) {
246
+        return false;
247
+    }
248
+
249
+    $debug = (defined('_VAR_MODE') and _VAR_MODE == 'debug');
250
+    if (($option !== false) and !$debug) {
251
+        $res = $f(
252
+            $select,
253
+            $from,
254
+            $where,
255
+            $groupby,
256
+            $orderby,
257
+            $limit,
258
+            $having,
259
+            $serveur,
260
+            is_array($option) ? true : $option
261
+        );
262
+    } else {
263
+        $query = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false);
264
+        if (!$option) {
265
+            return $query;
266
+        }
267
+        // le debug, c'est pour ce qui a ete produit par le compilateur
268
+        if (isset($GLOBALS['debug']['aucasou'])) {
269
+            list($table, $id, ) = $GLOBALS['debug']['aucasou'];
270
+            $nom = $GLOBALS['debug_objets']['courant'] . $id;
271
+            $GLOBALS['debug_objets']['requete'][$nom] = $query;
272
+        }
273
+        $res = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, true);
274
+    }
275
+
276
+    // en cas d'erreur
277
+    if (!is_string($res)) {
278
+        return $res;
279
+    }
280
+    // denoncer l'erreur SQL dans sa version brute
281
+    spip_sql_erreur($serveur);
282
+    // idem dans sa version squelette (prefixe des tables non substitue)
283
+    $contexte_compil = sql_error_backtrace(true);
284
+    erreur_squelette([sql_errno($serveur), sql_error($serveur), $res], $contexte_compil);
285
+
286
+    return false;
287 287
 }
288 288
 
289 289
 
@@ -320,16 +320,16 @@  discard block
 block discarded – undo
320 320
  *
321 321
  **/
322 322
 function sql_get_select(
323
-	$select = [],
324
-	$from = [],
325
-	$where = [],
326
-	$groupby = [],
327
-	$orderby = [],
328
-	$limit = '',
329
-	$having = [],
330
-	$serveur = ''
323
+    $select = [],
324
+    $from = [],
325
+    $where = [],
326
+    $groupby = [],
327
+    $orderby = [],
328
+    $limit = '',
329
+    $having = [],
330
+    $serveur = ''
331 331
 ) {
332
-	return sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false);
332
+    return sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false);
333 333
 }
334 334
 
335 335
 
@@ -373,23 +373,23 @@  discard block
 block discarded – undo
373 373
  *
374 374
  **/
375 375
 function sql_countsel(
376
-	$from = [],
377
-	$where = [],
378
-	$groupby = [],
379
-	$having = [],
380
-	$serveur = '',
381
-	$option = true
376
+    $from = [],
377
+    $where = [],
378
+    $groupby = [],
379
+    $having = [],
380
+    $serveur = '',
381
+    $option = true
382 382
 ) {
383
-	$f = sql_serveur('countsel', $serveur, $option === 'continue' or $option === false);
384
-	if (!is_string($f) or !$f) {
385
-		return false;
386
-	}
387
-	$r = $f($from, $where, $groupby, $having, $serveur, $option !== false);
388
-	if ($r === false) {
389
-		spip_sql_erreur($serveur);
390
-	}
391
-
392
-	return $r;
383
+    $f = sql_serveur('countsel', $serveur, $option === 'continue' or $option === false);
384
+    if (!is_string($f) or !$f) {
385
+        return false;
386
+    }
387
+    $r = $f($from, $where, $groupby, $having, $serveur, $option !== false);
388
+    if ($r === false) {
389
+        spip_sql_erreur($serveur);
390
+    }
391
+
392
+    return $r;
393 393
 }
394 394
 
395 395
 /**
@@ -421,16 +421,16 @@  discard block
 block discarded – undo
421 421
  *     Ce retour n'est pas pertinent pour savoir si l'opération est correctement réalisée.
422 422
  **/
423 423
 function sql_alter($q, $serveur = '', $option = true) {
424
-	$f = sql_serveur('alter', $serveur, $option === 'continue' or $option === false);
425
-	if (!is_string($f) or !$f) {
426
-		return false;
427
-	}
428
-	$r = $f($q, $serveur, $option !== false);
429
-	if ($r === false) {
430
-		spip_sql_erreur($serveur);
431
-	}
432
-
433
-	return $r;
424
+    $f = sql_serveur('alter', $serveur, $option === 'continue' or $option === false);
425
+    if (!is_string($f) or !$f) {
426
+        return false;
427
+    }
428
+    $r = $f($q, $serveur, $option !== false);
429
+    if ($r === false) {
430
+        spip_sql_erreur($serveur);
431
+    }
432
+
433
+    return $r;
434 434
 }
435 435
 
436 436
 /**
@@ -453,12 +453,12 @@  discard block
 block discarded – undo
453 453
  *    presentant une ligne de resultat d'une selection
454 454
  */
455 455
 function sql_fetch($res, $serveur = '', $option = true) {
456
-	$f = sql_serveur('fetch', $serveur, $option === 'continue' or $option === false);
457
-	if (!is_string($f) or !$f) {
458
-		return false;
459
-	}
456
+    $f = sql_serveur('fetch', $serveur, $option === 'continue' or $option === false);
457
+    if (!is_string($f) or !$f) {
458
+        return false;
459
+    }
460 460
 
461
-	return $f($res, null, $serveur, $option !== false);
461
+    return $f($res, null, $serveur, $option !== false);
462 462
 }
463 463
 
464 464
 
@@ -485,20 +485,20 @@  discard block
 block discarded – undo
485 485
  *    presentant une ligne de resultat d'une selection
486 486
  */
487 487
 function sql_fetch_all($res, $serveur = '', $option = true) {
488
-	$rows = [];
489
-	if (!$res) {
490
-		return $rows;
491
-	}
492
-	$f = sql_serveur('fetch', $serveur, $option === 'continue' or $option === false);
493
-	if (!is_string($f) or !$f) {
494
-		return [];
495
-	}
496
-	while ($r = $f($res, null, $serveur, $option !== false)) {
497
-		$rows[] = $r;
498
-	}
499
-	sql_free($res, $serveur);
500
-
501
-	return $rows;
488
+    $rows = [];
489
+    if (!$res) {
490
+        return $rows;
491
+    }
492
+    $f = sql_serveur('fetch', $serveur, $option === 'continue' or $option === false);
493
+    if (!is_string($f) or !$f) {
494
+        return [];
495
+    }
496
+    while ($r = $f($res, null, $serveur, $option !== false)) {
497
+        $rows[] = $r;
498
+    }
499
+    sql_free($res, $serveur);
500
+
501
+    return $rows;
502 502
 }
503 503
 
504 504
 /**
@@ -526,16 +526,16 @@  discard block
 block discarded – undo
526 526
  *    Operation effectuée (true), sinon false.
527 527
  **/
528 528
 function sql_seek($res, $row_number, $serveur = '', $option = true) {
529
-	$f = sql_serveur('seek', $serveur, $option === 'continue' or $option === false);
530
-	if (!is_string($f) or !$f) {
531
-		return false;
532
-	}
533
-	$r = $f($res, $row_number, $serveur, $option !== false);
534
-	if ($r === false) {
535
-		spip_sql_erreur($serveur);
536
-	}
537
-
538
-	return $r;
529
+    $f = sql_serveur('seek', $serveur, $option === 'continue' or $option === false);
530
+    if (!is_string($f) or !$f) {
531
+        return false;
532
+    }
533
+    $r = $f($res, $row_number, $serveur, $option !== false);
534
+    if ($r === false) {
535
+        spip_sql_erreur($serveur);
536
+    }
537
+
538
+    return $r;
539 539
 }
540 540
 
541 541
 
@@ -560,16 +560,16 @@  discard block
 block discarded – undo
560 560
  *    False en cas d'erreur.
561 561
  **/
562 562
 function sql_listdbs($serveur = '', $option = true) {
563
-	$f = sql_serveur('listdbs', $serveur, $option === 'continue' or $option === false);
564
-	if (!is_string($f) or !$f) {
565
-		return false;
566
-	}
567
-	$r = $f($serveur);
568
-	if ($r === false) {
569
-		spip_sql_erreur($serveur);
570
-	}
571
-
572
-	return $r;
563
+    $f = sql_serveur('listdbs', $serveur, $option === 'continue' or $option === false);
564
+    if (!is_string($f) or !$f) {
565
+        return false;
566
+    }
567
+    $r = $f($serveur);
568
+    if ($r === false) {
569
+        spip_sql_erreur($serveur);
570
+    }
571
+
572
+    return $r;
573 573
 }
574 574
 
575 575
 
@@ -592,16 +592,16 @@  discard block
 block discarded – undo
592 592
  *     - False en cas d'erreur.
593 593
  **/
594 594
 function sql_selectdb($nom, $serveur = '', $option = true) {
595
-	$f = sql_serveur('selectdb', $serveur, $option === 'continue' or $option === false);
596
-	if (!is_string($f) or !$f) {
597
-		return false;
598
-	}
599
-	$r = $f($nom, $serveur, $option !== false);
600
-	if ($r === false) {
601
-		spip_sql_erreur($serveur);
602
-	}
603
-
604
-	return $r;
595
+    $f = sql_serveur('selectdb', $serveur, $option === 'continue' or $option === false);
596
+    if (!is_string($f) or !$f) {
597
+        return false;
598
+    }
599
+    $r = $f($nom, $serveur, $option !== false);
600
+    if ($r === false) {
601
+        spip_sql_erreur($serveur);
602
+    }
603
+
604
+    return $r;
605 605
 }
606 606
 
607 607
 /**
@@ -626,16 +626,16 @@  discard block
 block discarded – undo
626 626
  *     - false en cas d'erreur.
627 627
  **/
628 628
 function sql_count($res, $serveur = '', $option = true) {
629
-	$f = sql_serveur('count', $serveur, $option === 'continue' or $option === false);
630
-	if (!is_string($f) or !$f) {
631
-		return false;
632
-	}
633
-	$r = $f($res, $serveur, $option !== false);
634
-	if ($r === false) {
635
-		spip_sql_erreur($serveur);
636
-	}
637
-
638
-	return $r;
629
+    $f = sql_serveur('count', $serveur, $option === 'continue' or $option === false);
630
+    if (!is_string($f) or !$f) {
631
+        return false;
632
+    }
633
+    $r = $f($res, $serveur, $option !== false);
634
+    if ($r === false) {
635
+        spip_sql_erreur($serveur);
636
+    }
637
+
638
+    return $r;
639 639
 }
640 640
 
641 641
 /**
@@ -657,12 +657,12 @@  discard block
 block discarded – undo
657 657
  *     True si réussi
658 658
  */
659 659
 function sql_free($res, $serveur = '', $option = true) {
660
-	$f = sql_serveur('free', $serveur, $option === 'continue' or $option === false);
661
-	if (!is_string($f) or !$f) {
662
-		return false;
663
-	}
660
+    $f = sql_serveur('free', $serveur, $option === 'continue' or $option === false);
661
+    if (!is_string($f) or !$f) {
662
+        return false;
663
+    }
664 664
 
665
-	return $f($res);
665
+    return $f($res);
666 666
 }
667 667
 
668 668
 
@@ -700,17 +700,17 @@  discard block
 block discarded – undo
700 700
  *     - False en cas d'erreur.
701 701
  **/
702 702
 function sql_insert($table, $noms, $valeurs, $desc = [], $serveur = '', $option = true) {
703
-	$f = sql_serveur('insert', $serveur, $option === 'continue' or $option === false);
704
-	if (!is_string($f) or !$f) {
705
-		return false;
706
-	}
707
-	$r = $f($table, $noms, $valeurs, $desc, $serveur, $option !== false);
708
-	if ($r === false or $r === null) {
709
-		spip_sql_erreur($serveur);
710
-		$r = false;
711
-	}
712
-
713
-	return $r;
703
+    $f = sql_serveur('insert', $serveur, $option === 'continue' or $option === false);
704
+    if (!is_string($f) or !$f) {
705
+        return false;
706
+    }
707
+    $r = $f($table, $noms, $valeurs, $desc, $serveur, $option !== false);
708
+    if ($r === false or $r === null) {
709
+        spip_sql_erreur($serveur);
710
+        $r = false;
711
+    }
712
+
713
+    return $r;
714 714
 }
715 715
 
716 716
 /**
@@ -751,17 +751,17 @@  discard block
 block discarded – undo
751 751
  *     - False en cas d'erreur.
752 752
  **/
753 753
 function sql_insertq($table, $couples = [], $desc = [], $serveur = '', $option = true) {
754
-	$f = sql_serveur('insertq', $serveur, $option === 'continue' or $option === false);
755
-	if (!is_string($f) or !$f) {
756
-		return false;
757
-	}
758
-	$r = $f($table, $couples, $desc, $serveur, $option !== false);
759
-	if ($r === false or $r === null) {
760
-		spip_sql_erreur($serveur);
761
-		$r = false;
762
-	}
763
-
764
-	return $r;
754
+    $f = sql_serveur('insertq', $serveur, $option === 'continue' or $option === false);
755
+    if (!is_string($f) or !$f) {
756
+        return false;
757
+    }
758
+    $r = $f($table, $couples, $desc, $serveur, $option !== false);
759
+    if ($r === false or $r === null) {
760
+        spip_sql_erreur($serveur);
761
+        $r = false;
762
+    }
763
+
764
+    return $r;
765 765
 }
766 766
 
767 767
 /**
@@ -796,17 +796,17 @@  discard block
 block discarded – undo
796 796
  *     - False en cas d'erreur.
797 797
  **/
798 798
 function sql_insertq_multi($table, $couples = [], $desc = [], $serveur = '', $option = true) {
799
-	$f = sql_serveur('insertq_multi', $serveur, $option === 'continue' or $option === false);
800
-	if (!is_string($f) or !$f) {
801
-		return false;
802
-	}
803
-	$r = $f($table, $couples, $desc, $serveur, $option !== false);
804
-	if ($r === false or $r === null) {
805
-		spip_sql_erreur($serveur);
806
-		$r = false;
807
-	}
808
-
809
-	return $r;
799
+    $f = sql_serveur('insertq_multi', $serveur, $option === 'continue' or $option === false);
800
+    if (!is_string($f) or !$f) {
801
+        return false;
802
+    }
803
+    $r = $f($table, $couples, $desc, $serveur, $option !== false);
804
+    if ($r === false or $r === null) {
805
+        spip_sql_erreur($serveur);
806
+        $r = false;
807
+    }
808
+
809
+    return $r;
810 810
 }
811 811
 
812 812
 /**
@@ -846,16 +846,16 @@  discard block
 block discarded – undo
846 846
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
847 847
  */
848 848
 function sql_update($table, $exp, $where = '', $desc = [], $serveur = '', $option = true) {
849
-	$f = sql_serveur('update', $serveur, $option === 'continue' or $option === false);
850
-	if (!is_string($f) or !$f) {
851
-		return false;
852
-	}
853
-	$r = $f($table, $exp, $where, $desc, $serveur, $option !== false);
854
-	if ($r === false) {
855
-		spip_sql_erreur($serveur);
856
-	}
857
-
858
-	return $r;
849
+    $f = sql_serveur('update', $serveur, $option === 'continue' or $option === false);
850
+    if (!is_string($f) or !$f) {
851
+        return false;
852
+    }
853
+    $r = $f($table, $exp, $where, $desc, $serveur, $option !== false);
854
+    if ($r === false) {
855
+        spip_sql_erreur($serveur);
856
+    }
857
+
858
+    return $r;
859 859
 }
860 860
 
861 861
 
@@ -901,16 +901,16 @@  discard block
 block discarded – undo
901 901
  *     - False en cas d'erreur.
902 902
  **/
903 903
 function sql_updateq($table, $exp, $where = '', $desc = [], $serveur = '', $option = true) {
904
-	$f = sql_serveur('updateq', $serveur, $option === 'continue' or $option === false);
905
-	if (!is_string($f) or !$f) {
906
-		return false;
907
-	}
908
-	$r = $f($table, $exp, $where, $desc, $serveur, $option !== false);
909
-	if ($r === false) {
910
-		spip_sql_erreur($serveur);
911
-	}
912
-
913
-	return $r;
904
+    $f = sql_serveur('updateq', $serveur, $option === 'continue' or $option === false);
905
+    if (!is_string($f) or !$f) {
906
+        return false;
907
+    }
908
+    $r = $f($table, $exp, $where, $desc, $serveur, $option !== false);
909
+    if ($r === false) {
910
+        spip_sql_erreur($serveur);
911
+    }
912
+
913
+    return $r;
914 914
 }
915 915
 
916 916
 /**
@@ -941,16 +941,16 @@  discard block
 block discarded – undo
941 941
  *     - False en cas d'erreur.
942 942
  **/
943 943
 function sql_delete($table, $where = '', $serveur = '', $option = true) {
944
-	$f = sql_serveur('delete', $serveur, $option === 'continue' or $option === false);
945
-	if (!is_string($f) or !$f) {
946
-		return false;
947
-	}
948
-	$r = $f($table, $where, $serveur, $option !== false);
949
-	if ($r === false) {
950
-		spip_sql_erreur($serveur);
951
-	}
952
-
953
-	return $r;
944
+    $f = sql_serveur('delete', $serveur, $option === 'continue' or $option === false);
945
+    if (!is_string($f) or !$f) {
946
+        return false;
947
+    }
948
+    $r = $f($table, $where, $serveur, $option !== false);
949
+    if ($r === false) {
950
+        spip_sql_erreur($serveur);
951
+    }
952
+
953
+    return $r;
954 954
 }
955 955
 
956 956
 /**
@@ -986,16 +986,16 @@  discard block
 block discarded – undo
986 986
  *     - False en cas d'erreur.
987 987
  **/
988 988
 function sql_replace($table, $couples, $desc = [], $serveur = '', $option = true) {
989
-	$f = sql_serveur('replace', $serveur, $option === 'continue' or $option === false);
990
-	if (!is_string($f) or !$f) {
991
-		return false;
992
-	}
993
-	$r = $f($table, $couples, $desc, $serveur, $option !== false);
994
-	if ($r === false) {
995
-		spip_sql_erreur($serveur);
996
-	}
997
-
998
-	return $r;
989
+    $f = sql_serveur('replace', $serveur, $option === 'continue' or $option === false);
990
+    if (!is_string($f) or !$f) {
991
+        return false;
992
+    }
993
+    $r = $f($table, $couples, $desc, $serveur, $option !== false);
994
+    if ($r === false) {
995
+        spip_sql_erreur($serveur);
996
+    }
997
+
998
+    return $r;
999 999
 }
1000 1000
 
1001 1001
 
@@ -1033,16 +1033,16 @@  discard block
 block discarded – undo
1033 1033
  *     - False en cas d'erreur.
1034 1034
  **/
1035 1035
 function sql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $option = true) {
1036
-	$f = sql_serveur('replace_multi', $serveur, $option === 'continue' or $option === false);
1037
-	if (!is_string($f) or !$f) {
1038
-		return false;
1039
-	}
1040
-	$r = $f($table, $tab_couples, $desc, $serveur, $option !== false);
1041
-	if ($r === false) {
1042
-		spip_sql_erreur($serveur);
1043
-	}
1044
-
1045
-	return $r;
1036
+    $f = sql_serveur('replace_multi', $serveur, $option === 'continue' or $option === false);
1037
+    if (!is_string($f) or !$f) {
1038
+        return false;
1039
+    }
1040
+    $r = $f($table, $tab_couples, $desc, $serveur, $option !== false);
1041
+    if ($r === false) {
1042
+        spip_sql_erreur($serveur);
1043
+    }
1044
+
1045
+    return $r;
1046 1046
 }
1047 1047
 
1048 1048
 /**
@@ -1070,16 +1070,16 @@  discard block
 block discarded – undo
1070 1070
  *     - False en cas d'erreur.
1071 1071
  **/
1072 1072
 function sql_drop_table($table, $exist = '', $serveur = '', $option = true) {
1073
-	$f = sql_serveur('drop_table', $serveur, $option === 'continue' or $option === false);
1074
-	if (!is_string($f) or !$f) {
1075
-		return false;
1076
-	}
1077
-	$r = $f($table, $exist, $serveur, $option !== false);
1078
-	if ($r === false) {
1079
-		spip_sql_erreur($serveur);
1080
-	}
1081
-
1082
-	return $r;
1073
+    $f = sql_serveur('drop_table', $serveur, $option === 'continue' or $option === false);
1074
+    if (!is_string($f) or !$f) {
1075
+        return false;
1076
+    }
1077
+    $r = $f($table, $exist, $serveur, $option !== false);
1078
+    if ($r === false) {
1079
+        spip_sql_erreur($serveur);
1080
+    }
1081
+
1082
+    return $r;
1083 1083
 }
1084 1084
 
1085 1085
 /**
@@ -1103,16 +1103,16 @@  discard block
 block discarded – undo
1103 1103
  *     - true si la requête a réussie, false sinon
1104 1104
  */
1105 1105
 function sql_drop_view($table, $exist = '', $serveur = '', $option = true) {
1106
-	$f = sql_serveur('drop_view', $serveur, $option === 'continue' or $option === false);
1107
-	if (!is_string($f) or !$f) {
1108
-		return false;
1109
-	}
1110
-	$r = $f($table, $exist, $serveur, $option !== false);
1111
-	if ($r === false) {
1112
-		spip_sql_erreur($serveur);
1113
-	}
1114
-
1115
-	return $r;
1106
+    $f = sql_serveur('drop_view', $serveur, $option === 'continue' or $option === false);
1107
+    if (!is_string($f) or !$f) {
1108
+        return false;
1109
+    }
1110
+    $r = $f($table, $exist, $serveur, $option !== false);
1111
+    if ($r === false) {
1112
+        spip_sql_erreur($serveur);
1113
+    }
1114
+
1115
+    return $r;
1116 1116
 }
1117 1117
 
1118 1118
 /**
@@ -1136,18 +1136,18 @@  discard block
 block discarded – undo
1136 1136
  *     Ressource à utiliser avec sql_fetch()
1137 1137
  **/
1138 1138
 function sql_showbase($spip = null, $serveur = '', $option = true) {
1139
-	$f = sql_serveur('showbase', $serveur, $option === 'continue' or $option === false);
1140
-	if (!is_string($f) or !$f) {
1141
-		return false;
1142
-	}
1143
-
1144
-	// la globale n'est remplie qu'apres l'appel de sql_serveur.
1145
-	if ($spip == null) {
1146
-		$connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1147
-		$spip = $connexion['prefixe'] . '\_%';
1148
-	}
1149
-
1150
-	return $f($spip, $serveur, $option !== false);
1139
+    $f = sql_serveur('showbase', $serveur, $option === 'continue' or $option === false);
1140
+    if (!is_string($f) or !$f) {
1141
+        return false;
1142
+    }
1143
+
1144
+    // la globale n'est remplie qu'apres l'appel de sql_serveur.
1145
+    if ($spip == null) {
1146
+        $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1147
+        $spip = $connexion['prefixe'] . '\_%';
1148
+    }
1149
+
1150
+    return $f($spip, $serveur, $option !== false);
1151 1151
 }
1152 1152
 
1153 1153
 /**
@@ -1170,15 +1170,15 @@  discard block
 block discarded – undo
1170 1170
  *     Liste des tables SQL
1171 1171
  **/
1172 1172
 function sql_alltable($spip = null, $serveur = '', $option = true) {
1173
-	$q = sql_showbase($spip, $serveur, $option);
1174
-	$r = [];
1175
-	if ($q) {
1176
-		while ($t = sql_fetch($q, $serveur)) {
1177
-			$r[] = array_shift($t);
1178
-		}
1179
-	}
1180
-
1181
-	return $r;
1173
+    $q = sql_showbase($spip, $serveur, $option);
1174
+    $r = [];
1175
+    if ($q) {
1176
+        while ($t = sql_fetch($q, $serveur)) {
1177
+            $r[] = array_shift($t);
1178
+        }
1179
+    }
1180
+
1181
+    return $r;
1182 1182
 }
1183 1183
 
1184 1184
 /**
@@ -1211,31 +1211,31 @@  discard block
 block discarded – undo
1211 1211
  *       - 'join' => array() // jointures, si déclarées.
1212 1212
  **/
1213 1213
 function sql_showtable($table, $table_spip = false, $serveur = '', $option = true) {
1214
-	$f = sql_serveur('showtable', $serveur, $option === 'continue' or $option === false);
1215
-	if (!is_string($f) or !$f) {
1216
-		return false;
1217
-	}
1218
-
1219
-	// la globale n'est remplie qu'apres l'appel de sql_serveur.
1220
-	if ($table_spip) {
1221
-		$connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1222
-		$prefixe = $connexion['prefixe'];
1223
-		$vraie_table = prefixer_table_spip($table, $prefixe);
1224
-	} else {
1225
-		$vraie_table = $table;
1226
-	}
1227
-
1228
-	$f = $f($vraie_table, $serveur, $option !== false);
1229
-	if (!$f) {
1230
-		return [];
1231
-	}
1232
-	if (isset($GLOBALS['tables_principales'][$table]['join'])) {
1233
-		$f['join'] = $GLOBALS['tables_principales'][$table]['join'];
1234
-	} elseif (isset($GLOBALS['tables_auxiliaires'][$table]['join'])) {
1235
-		$f['join'] = $GLOBALS['tables_auxiliaires'][$table]['join'];
1236
-	}
1237
-
1238
-	return $f;
1214
+    $f = sql_serveur('showtable', $serveur, $option === 'continue' or $option === false);
1215
+    if (!is_string($f) or !$f) {
1216
+        return false;
1217
+    }
1218
+
1219
+    // la globale n'est remplie qu'apres l'appel de sql_serveur.
1220
+    if ($table_spip) {
1221
+        $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1222
+        $prefixe = $connexion['prefixe'];
1223
+        $vraie_table = prefixer_table_spip($table, $prefixe);
1224
+    } else {
1225
+        $vraie_table = $table;
1226
+    }
1227
+
1228
+    $f = $f($vraie_table, $serveur, $option !== false);
1229
+    if (!$f) {
1230
+        return [];
1231
+    }
1232
+    if (isset($GLOBALS['tables_principales'][$table]['join'])) {
1233
+        $f['join'] = $GLOBALS['tables_principales'][$table]['join'];
1234
+    } elseif (isset($GLOBALS['tables_auxiliaires'][$table]['join'])) {
1235
+        $f['join'] = $GLOBALS['tables_auxiliaires'][$table]['join'];
1236
+    }
1237
+
1238
+    return $f;
1239 1239
 }
1240 1240
 
1241 1241
 
@@ -1263,21 +1263,21 @@  discard block
 block discarded – undo
1263 1263
  *     - False en cas d'erreur.
1264 1264
  **/
1265 1265
 function sql_table_exists(string $table, bool $table_spip = true, $serveur = '', $option = true) {
1266
-	$f = sql_serveur('table_exists', $serveur, $option === 'continue' or $option === false);
1267
-	if (!is_string($f) or !$f) {
1268
-		return false;
1269
-	}
1270
-
1271
-	// la globale n'est remplie qu'apres l'appel de sql_serveur.
1272
-	if ($table_spip) {
1273
-		$connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1274
-		$prefixe = $connexion['prefixe'];
1275
-		$vraie_table = prefixer_table_spip($table, $prefixe);
1276
-	} else {
1277
-		$vraie_table = $table;
1278
-	}
1279
-
1280
-	return $f($vraie_table, $serveur, $option !== false);
1266
+    $f = sql_serveur('table_exists', $serveur, $option === 'continue' or $option === false);
1267
+    if (!is_string($f) or !$f) {
1268
+        return false;
1269
+    }
1270
+
1271
+    // la globale n'est remplie qu'apres l'appel de sql_serveur.
1272
+    if ($table_spip) {
1273
+        $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1274
+        $prefixe = $connexion['prefixe'];
1275
+        $vraie_table = prefixer_table_spip($table, $prefixe);
1276
+    } else {
1277
+        $vraie_table = $table;
1278
+    }
1279
+
1280
+    return $f($vraie_table, $serveur, $option !== false);
1281 1281
 }
1282 1282
 
1283 1283
 
@@ -1323,24 +1323,24 @@  discard block
 block discarded – undo
1323 1323
  *     true si succès, false en cas d'echec
1324 1324
  **/
1325 1325
 function sql_create(
1326
-	$nom,
1327
-	$champs,
1328
-	$cles = [],
1329
-	$autoinc = false,
1330
-	$temporary = false,
1331
-	$serveur = '',
1332
-	$option = true
1326
+    $nom,
1327
+    $champs,
1328
+    $cles = [],
1329
+    $autoinc = false,
1330
+    $temporary = false,
1331
+    $serveur = '',
1332
+    $option = true
1333 1333
 ) {
1334
-	$f = sql_serveur('create', $serveur, $option === 'continue' or $option === false);
1335
-	if (!is_string($f) or !$f) {
1336
-		return false;
1337
-	}
1338
-	$r = $f($nom, $champs, $cles, $autoinc, $temporary, $serveur, $option !== false);
1339
-	if ($r === false) {
1340
-		spip_sql_erreur($serveur);
1341
-	}
1342
-
1343
-	return $r;
1334
+    $f = sql_serveur('create', $serveur, $option === 'continue' or $option === false);
1335
+    if (!is_string($f) or !$f) {
1336
+        return false;
1337
+    }
1338
+    $r = $f($nom, $champs, $cles, $autoinc, $temporary, $serveur, $option !== false);
1339
+    if ($r === false) {
1340
+        spip_sql_erreur($serveur);
1341
+    }
1342
+
1343
+    return $r;
1344 1344
 }
1345 1345
 
1346 1346
 /**
@@ -1358,16 +1358,16 @@  discard block
 block discarded – undo
1358 1358
  * @return bool true si la base est créee.
1359 1359
  **/
1360 1360
 function sql_create_base($nom, $serveur = '', $option = true) {
1361
-	$f = sql_serveur('create_base', $serveur, $option === 'continue' or $option === false);
1362
-	if (!is_string($f) or !$f) {
1363
-		return false;
1364
-	}
1365
-	$r = $f($nom, $serveur, $option !== false);
1366
-	if ($r === false) {
1367
-		spip_sql_erreur($serveur);
1368
-	}
1369
-
1370
-	return $r;
1361
+    $f = sql_serveur('create_base', $serveur, $option === 'continue' or $option === false);
1362
+    if (!is_string($f) or !$f) {
1363
+        return false;
1364
+    }
1365
+    $r = $f($nom, $serveur, $option !== false);
1366
+    if ($r === false) {
1367
+        spip_sql_erreur($serveur);
1368
+    }
1369
+
1370
+    return $r;
1371 1371
 }
1372 1372
 
1373 1373
 
@@ -1397,16 +1397,16 @@  discard block
 block discarded – undo
1397 1397
  *     - false en cas d'échec.
1398 1398
  **/
1399 1399
 function sql_create_view($nom, $select_query, $serveur = '', $option = true) {
1400
-	$f = sql_serveur('create_view', $serveur, $option === 'continue' or $option === false);
1401
-	if (!is_string($f) or !$f) {
1402
-		return false;
1403
-	}
1404
-	$r = $f($nom, $select_query, $serveur, $option !== false);
1405
-	if ($r === false) {
1406
-		spip_sql_erreur($serveur);
1407
-	}
1408
-
1409
-	return $r;
1400
+    $f = sql_serveur('create_view', $serveur, $option === 'continue' or $option === false);
1401
+    if (!is_string($f) or !$f) {
1402
+        return false;
1403
+    }
1404
+    $r = $f($nom, $select_query, $serveur, $option !== false);
1405
+    if ($r === false) {
1406
+        spip_sql_erreur($serveur);
1407
+    }
1408
+
1409
+    return $r;
1410 1410
 }
1411 1411
 
1412 1412
 /**
@@ -1435,12 +1435,12 @@  discard block
 block discarded – undo
1435 1435
  *     Texte de sélection pour la requête
1436 1436
  */
1437 1437
 function sql_multi($sel, $lang, $serveur = '', $option = true) {
1438
-	$f = sql_serveur('multi', $serveur, $option === 'continue' or $option === false);
1439
-	if (!is_string($f) or !$f) {
1440
-		return false;
1441
-	}
1438
+    $f = sql_serveur('multi', $serveur, $option === 'continue' or $option === false);
1439
+    if (!is_string($f) or !$f) {
1440
+        return false;
1441
+    }
1442 1442
 
1443
-	return $f($sel, $lang);
1443
+    return $f($sel, $lang);
1444 1444
 }
1445 1445
 
1446 1446
 
@@ -1455,12 +1455,12 @@  discard block
 block discarded – undo
1455 1455
  *      False si le serveur est indisponible
1456 1456
  */
1457 1457
 function sql_error($serveur = '') {
1458
-	$f = sql_serveur('error', $serveur, 'continue');
1459
-	if (!is_string($f) or !$f) {
1460
-		return false;
1461
-	}
1458
+    $f = sql_serveur('error', $serveur, 'continue');
1459
+    if (!is_string($f) or !$f) {
1460
+        return false;
1461
+    }
1462 1462
 
1463
-	return $f('query inconnue', $serveur);
1463
+    return $f('query inconnue', $serveur);
1464 1464
 }
1465 1465
 
1466 1466
 /**
@@ -1474,12 +1474,12 @@  discard block
 block discarded – undo
1474 1474
  *      False si le serveur est indisponible
1475 1475
  */
1476 1476
 function sql_errno($serveur = '') {
1477
-	$f = sql_serveur('errno', $serveur, 'continue');
1478
-	if (!is_string($f) or !$f) {
1479
-		return false;
1480
-	}
1477
+    $f = sql_serveur('errno', $serveur, 'continue');
1478
+    if (!is_string($f) or !$f) {
1479
+        return false;
1480
+    }
1481 1481
 
1482
-	return $f($serveur);
1482
+    return $f($serveur);
1483 1483
 }
1484 1484
 
1485 1485
 /**
@@ -1497,16 +1497,16 @@  discard block
 block discarded – undo
1497 1497
  * @return array           Tableau de l'explication
1498 1498
  */
1499 1499
 function sql_explain($q, $serveur = '', $option = true) {
1500
-	$f = sql_serveur('explain', $serveur, 'continue');
1501
-	if (!is_string($f) or !$f) {
1502
-		return false;
1503
-	}
1504
-	$r = $f($q, $serveur, $option !== false);
1505
-	if ($r === false) {
1506
-		spip_sql_erreur($serveur);
1507
-	}
1508
-
1509
-	return $r;
1500
+    $f = sql_serveur('explain', $serveur, 'continue');
1501
+    if (!is_string($f) or !$f) {
1502
+        return false;
1503
+    }
1504
+    $r = $f($q, $serveur, $option !== false);
1505
+    if ($r === false) {
1506
+        spip_sql_erreur($serveur);
1507
+    }
1508
+
1509
+    return $r;
1510 1510
 }
1511 1511
 
1512 1512
 /**
@@ -1524,16 +1524,16 @@  discard block
 block discarded – undo
1524 1524
  * @return bool            Toujours true
1525 1525
  */
1526 1526
 function sql_optimize($table, $serveur = '', $option = true) {
1527
-	$f = sql_serveur('optimize', $serveur, $option === 'continue' or $option === false);
1528
-	if (!is_string($f) or !$f) {
1529
-		return false;
1530
-	}
1531
-	$r = $f($table, $serveur, $option !== false);
1532
-	if ($r === false) {
1533
-		spip_sql_erreur($serveur);
1534
-	}
1535
-
1536
-	return $r;
1527
+    $f = sql_serveur('optimize', $serveur, $option === 'continue' or $option === false);
1528
+    if (!is_string($f) or !$f) {
1529
+        return false;
1530
+    }
1531
+    $r = $f($table, $serveur, $option !== false);
1532
+    if ($r === false) {
1533
+        spip_sql_erreur($serveur);
1534
+    }
1535
+
1536
+    return $r;
1537 1537
 }
1538 1538
 
1539 1539
 /**
@@ -1553,16 +1553,16 @@  discard block
 block discarded – undo
1553 1553
  *     - true si la requête a réussie, false sinon
1554 1554
  */
1555 1555
 function sql_repair($table, $serveur = '', $option = true) {
1556
-	$f = sql_serveur('repair', $serveur, $option === 'continue' or $option === false);
1557
-	if (!is_string($f) or !$f) {
1558
-		return false;
1559
-	}
1560
-	$r = $f($table, $serveur, $option !== false);
1561
-	if ($r === false) {
1562
-		spip_sql_erreur($serveur);
1563
-	}
1564
-
1565
-	return $r;
1556
+    $f = sql_serveur('repair', $serveur, $option === 'continue' or $option === false);
1557
+    if (!is_string($f) or !$f) {
1558
+        return false;
1559
+    }
1560
+    $r = $f($table, $serveur, $option !== false);
1561
+    if ($r === false) {
1562
+        spip_sql_erreur($serveur);
1563
+    }
1564
+
1565
+    return $r;
1566 1566
 }
1567 1567
 
1568 1568
 
@@ -1587,16 +1587,16 @@  discard block
 block discarded – undo
1587 1587
  *     - array : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
1588 1588
  */
1589 1589
 function sql_query($ins, $serveur = '', $option = true) {
1590
-	$f = sql_serveur('query', $serveur, $option === 'continue' or $option === false);
1591
-	if (!is_string($f) or !$f) {
1592
-		return false;
1593
-	}
1594
-	$r = $f($ins, $serveur, $option !== false);
1595
-	if ($r === false) {
1596
-		spip_sql_erreur($serveur);
1597
-	}
1598
-
1599
-	return $r;
1590
+    $f = sql_serveur('query', $serveur, $option === 'continue' or $option === false);
1591
+    if (!is_string($f) or !$f) {
1592
+        return false;
1593
+    }
1594
+    $r = $f($ins, $serveur, $option !== false);
1595
+    if ($r === false) {
1596
+        spip_sql_erreur($serveur);
1597
+    }
1598
+
1599
+    return $r;
1600 1600
 }
1601 1601
 
1602 1602
 /**
@@ -1644,27 +1644,27 @@  discard block
 block discarded – undo
1644 1644
  *
1645 1645
  **/
1646 1646
 function sql_fetsel(
1647
-	$select = [],
1648
-	$from = [],
1649
-	$where = [],
1650
-	$groupby = [],
1651
-	$orderby = [],
1652
-	$limit = '',
1653
-	$having = [],
1654
-	$serveur = '',
1655
-	$option = true
1647
+    $select = [],
1648
+    $from = [],
1649
+    $where = [],
1650
+    $groupby = [],
1651
+    $orderby = [],
1652
+    $limit = '',
1653
+    $having = [],
1654
+    $serveur = '',
1655
+    $option = true
1656 1656
 ) {
1657
-	$q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option);
1658
-	if ($option === false) {
1659
-		return $q;
1660
-	}
1661
-	if (!$q) {
1662
-		return [];
1663
-	}
1664
-	$r = sql_fetch($q, $serveur, $option);
1665
-	sql_free($q, $serveur, $option);
1666
-
1667
-	return $r;
1657
+    $q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option);
1658
+    if ($option === false) {
1659
+        return $q;
1660
+    }
1661
+    if (!$q) {
1662
+        return [];
1663
+    }
1664
+    $r = sql_fetch($q, $serveur, $option);
1665
+    sql_free($q, $serveur, $option);
1666
+
1667
+    return $r;
1668 1668
 }
1669 1669
 
1670 1670
 
@@ -1721,22 +1721,22 @@  discard block
 block discarded – undo
1721 1721
  *
1722 1722
  **/
1723 1723
 function sql_allfetsel(
1724
-	$select = [],
1725
-	$from = [],
1726
-	$where = [],
1727
-	$groupby = [],
1728
-	$orderby = [],
1729
-	$limit = '',
1730
-	$having = [],
1731
-	$serveur = '',
1732
-	$option = true
1724
+    $select = [],
1725
+    $from = [],
1726
+    $where = [],
1727
+    $groupby = [],
1728
+    $orderby = [],
1729
+    $limit = '',
1730
+    $having = [],
1731
+    $serveur = '',
1732
+    $option = true
1733 1733
 ) {
1734
-	$q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option);
1735
-	if ($option === false) {
1736
-		return $q;
1737
-	}
1734
+    $q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option);
1735
+    if ($option === false) {
1736
+        return $q;
1737
+    }
1738 1738
 
1739
-	return sql_fetch_all($q, $serveur, $option);
1739
+    return sql_fetch_all($q, $serveur, $option);
1740 1740
 }
1741 1741
 
1742 1742
 
@@ -1783,33 +1783,33 @@  discard block
 block discarded – undo
1783 1783
  *
1784 1784
  **/
1785 1785
 function sql_getfetsel(
1786
-	$select,
1787
-	$from = [],
1788
-	$where = [],
1789
-	$groupby = [],
1790
-	$orderby = [],
1791
-	$limit = '',
1792
-	$having = [],
1793
-	$serveur = '',
1794
-	$option = true
1786
+    $select,
1787
+    $from = [],
1788
+    $where = [],
1789
+    $groupby = [],
1790
+    $orderby = [],
1791
+    $limit = '',
1792
+    $having = [],
1793
+    $serveur = '',
1794
+    $option = true
1795 1795
 ) {
1796
-	if (preg_match('/\s+as\s+(\w+)$/i', $select, $c)) {
1797
-		$id = $c[1];
1798
-	} elseif (!preg_match('/\W/', $select)) {
1799
-		$id = $select;
1800
-	} else {
1801
-		$id = 'n';
1802
-		$select .= ' AS n';
1803
-	}
1804
-	$r = sql_fetsel($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option);
1805
-	if ($option === false) {
1806
-		return $r;
1807
-	}
1808
-	if (!$r) {
1809
-		return null;
1810
-	}
1811
-
1812
-	return $r[$id];
1796
+    if (preg_match('/\s+as\s+(\w+)$/i', $select, $c)) {
1797
+        $id = $c[1];
1798
+    } elseif (!preg_match('/\W/', $select)) {
1799
+        $id = $select;
1800
+    } else {
1801
+        $id = 'n';
1802
+        $select .= ' AS n';
1803
+    }
1804
+    $r = sql_fetsel($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option);
1805
+    if ($option === false) {
1806
+        return $r;
1807
+    }
1808
+    if (!$r) {
1809
+        return null;
1810
+    }
1811
+
1812
+    return $r[$id];
1813 1813
 }
1814 1814
 
1815 1815
 /**
@@ -1827,9 +1827,9 @@  discard block
 block discarded – undo
1827 1827
  *    Numero de version du serveur SQL
1828 1828
  **/
1829 1829
 function sql_version($serveur = '', $option = true) {
1830
-	$row = sql_fetsel('version() AS n', '', '', '', '', '', '', $serveur);
1830
+    $row = sql_fetsel('version() AS n', '', '', '', '', '', '', $serveur);
1831 1831
 
1832
-	return ($row['n']);
1832
+    return ($row['n']);
1833 1833
 }
1834 1834
 
1835 1835
 /**
@@ -1865,16 +1865,16 @@  discard block
 block discarded – undo
1865 1865
  *    Le serveur SQL prefere t'il des transactions pour les insertions multiples ?
1866 1866
  **/
1867 1867
 function sql_preferer_transaction($serveur = '', $option = true) {
1868
-	$f = sql_serveur('preferer_transaction', $serveur, 'continue');
1869
-	if (!is_string($f) or !$f) {
1870
-		return false;
1871
-	}
1872
-	$r = $f($serveur, $option !== false);
1873
-	if ($r === false) {
1874
-		spip_sql_erreur($serveur);
1875
-	}
1876
-
1877
-	return $r;
1868
+    $f = sql_serveur('preferer_transaction', $serveur, 'continue');
1869
+    if (!is_string($f) or !$f) {
1870
+        return false;
1871
+    }
1872
+    $r = $f($serveur, $option !== false);
1873
+    if ($r === false) {
1874
+        spip_sql_erreur($serveur);
1875
+    }
1876
+
1877
+    return $r;
1878 1878
 }
1879 1879
 
1880 1880
 ;
@@ -1899,16 +1899,16 @@  discard block
 block discarded – undo
1899 1899
  *      false en cas d'erreur
1900 1900
  **/
1901 1901
 function sql_demarrer_transaction($serveur = '', $option = true) {
1902
-	$f = sql_serveur('demarrer_transaction', $serveur, 'continue');
1903
-	if (!is_string($f) or !$f) {
1904
-		return false;
1905
-	}
1906
-	$r = $f($serveur, $option !== false);
1907
-	if ($r === false) {
1908
-		spip_sql_erreur($serveur);
1909
-	}
1910
-
1911
-	return $r;
1902
+    $f = sql_serveur('demarrer_transaction', $serveur, 'continue');
1903
+    if (!is_string($f) or !$f) {
1904
+        return false;
1905
+    }
1906
+    $r = $f($serveur, $option !== false);
1907
+    if ($r === false) {
1908
+        spip_sql_erreur($serveur);
1909
+    }
1910
+
1911
+    return $r;
1912 1912
 }
1913 1913
 
1914 1914
 ;
@@ -1933,16 +1933,16 @@  discard block
 block discarded – undo
1933 1933
  *      false en cas d'erreur
1934 1934
  **/
1935 1935
 function sql_terminer_transaction($serveur = '', $option = true) {
1936
-	$f = sql_serveur('terminer_transaction', $serveur, 'continue');
1937
-	if (!is_string($f) or !$f) {
1938
-		return false;
1939
-	}
1940
-	$r = $f($serveur, $option !== false);
1941
-	if ($r === false) {
1942
-		spip_sql_erreur($serveur);
1943
-	}
1944
-
1945
-	return $r;
1936
+    $f = sql_serveur('terminer_transaction', $serveur, 'continue');
1937
+    if (!is_string($f) or !$f) {
1938
+        return false;
1939
+    }
1940
+    $r = $f($serveur, $option !== false);
1941
+    if ($r === false) {
1942
+        spip_sql_erreur($serveur);
1943
+    }
1944
+
1945
+    return $r;
1946 1946
 }
1947 1947
 
1948 1948
 ;
@@ -1969,12 +1969,12 @@  discard block
 block discarded – undo
1969 1969
  *     Valeur hexadécimale attendue par le serveur SQL
1970 1970
  **/
1971 1971
 function sql_hex($val, $serveur = '', $option = true) {
1972
-	$f = sql_serveur('hex', $serveur, $option === 'continue' or $option === false);
1973
-	if (!is_string($f) or !$f) {
1974
-		return false;
1975
-	}
1972
+    $f = sql_serveur('hex', $serveur, $option === 'continue' or $option === false);
1973
+    if (!is_string($f) or !$f) {
1974
+        return false;
1975
+    }
1976 1976
 
1977
-	return $f($val);
1977
+    return $f($val);
1978 1978
 }
1979 1979
 
1980 1980
 /**
@@ -2000,12 +2000,12 @@  discard block
 block discarded – undo
2000 2000
  *     La chaine echappee
2001 2001
  **/
2002 2002
 function sql_quote($val, $serveur = '', $type = '') {
2003
-	$f = sql_serveur('quote', $serveur, true);
2004
-	if (!is_string($f) or !$f) {
2005
-		$f = '_q';
2006
-	}
2003
+    $f = sql_serveur('quote', $serveur, true);
2004
+    if (!is_string($f) or !$f) {
2005
+        $f = '_q';
2006
+    }
2007 2007
 
2008
-	return $f($val, $type);
2008
+    return $f($val, $type);
2009 2009
 }
2010 2010
 
2011 2011
 /**
@@ -2030,12 +2030,12 @@  discard block
 block discarded – undo
2030 2030
  *     - false si le serveur SQL est indisponible
2031 2031
  **/
2032 2032
 function sql_date_proche($champ, $interval, $unite, $serveur = '', $option = true) {
2033
-	$f = sql_serveur('date_proche', $serveur, true);
2034
-	if (!is_string($f) or !$f) {
2035
-		return false;
2036
-	}
2033
+    $f = sql_serveur('date_proche', $serveur, true);
2034
+    if (!is_string($f) or !$f) {
2035
+        return false;
2036
+    }
2037 2037
 
2038
-	return $f($champ, $interval, $unite);
2038
+    return $f($champ, $interval, $unite);
2039 2039
 }
2040 2040
 
2041 2041
 /**
@@ -2071,28 +2071,28 @@  discard block
 block discarded – undo
2071 2071
  *     Expression de requête SQL
2072 2072
  **/
2073 2073
 function sql_in_quote($champ, $valeurs, $not = '', $serveur = '', $type = '', $option = true) {
2074
-	$quote = sql_serveur('quote', $serveur, true);
2075
-	if (!is_string($quote) or !$quote) {
2076
-		return false;
2077
-	}
2078
-
2079
-	// sql_quote produit une chaine dans tous les cas
2080
-	$valeurs = array_filter($valeurs, function ($v) {
2081
- return !is_array($v);
2082
-	});
2083
-	$valeurs = array_unique($valeurs);
2084
-	$valeurs = $quote($valeurs, $type);
2085
-
2086
-	if (!strlen(trim($valeurs))) {
2087
-		return ($not ? '0=0' : '0=1');
2088
-	}
2089
-
2090
-	$f = sql_serveur('in', $serveur, $option === 'continue' or $option === false);
2091
-	if (!is_string($f) or !$f) {
2092
-		return false;
2093
-	}
2094
-
2095
-	return $f($champ, $valeurs, $not ? 'NOT' : '', $serveur, $option !== false);
2074
+    $quote = sql_serveur('quote', $serveur, true);
2075
+    if (!is_string($quote) or !$quote) {
2076
+        return false;
2077
+    }
2078
+
2079
+    // sql_quote produit une chaine dans tous les cas
2080
+    $valeurs = array_filter($valeurs, function ($v) {
2081
+    return !is_array($v);
2082
+    });
2083
+    $valeurs = array_unique($valeurs);
2084
+    $valeurs = $quote($valeurs, $type);
2085
+
2086
+    if (!strlen(trim($valeurs))) {
2087
+        return ($not ? '0=0' : '0=1');
2088
+    }
2089
+
2090
+    $f = sql_serveur('in', $serveur, $option === 'continue' or $option === false);
2091
+    if (!is_string($f) or !$f) {
2092
+        return false;
2093
+    }
2094
+
2095
+    return $f($champ, $valeurs, $not ? 'NOT' : '', $serveur, $option !== false);
2096 2096
 }
2097 2097
 
2098 2098
 /**
@@ -2109,19 +2109,19 @@  discard block
 block discarded – undo
2109 2109
  * @param bool $option
2110 2110
  */
2111 2111
 function sql_in($champ, $valeurs, $not = '', $serveur = '', $option = true) {
2112
-	$type = '';
2113
-	if (!is_array($valeurs)) {
2114
-		$valeurs = strval($valeurs);
2115
-		if (isset($valeurs[0]) and $valeurs[0] === ',') {
2116
-			$valeurs = substr($valeurs, 1);
2117
-		}
2118
-		// on explode en tableau pour pouvoir securiser le contenu
2119
-		$valeurs = explode(',', $valeurs);
2120
-		// et on force un cast de type int donc
2121
-		$type = 'int';
2122
-	}
2123
-
2124
-	return sql_in_quote($champ, $valeurs, $not, $serveur, $type, $option);
2112
+    $type = '';
2113
+    if (!is_array($valeurs)) {
2114
+        $valeurs = strval($valeurs);
2115
+        if (isset($valeurs[0]) and $valeurs[0] === ',') {
2116
+            $valeurs = substr($valeurs, 1);
2117
+        }
2118
+        // on explode en tableau pour pouvoir securiser le contenu
2119
+        $valeurs = explode(',', $valeurs);
2120
+        // et on force un cast de type int donc
2121
+        $type = 'int';
2122
+    }
2123
+
2124
+    return sql_in_quote($champ, $valeurs, $not, $serveur, $type, $option);
2125 2125
 }
2126 2126
 
2127 2127
 
@@ -2162,24 +2162,24 @@  discard block
 block discarded – undo
2162 2162
  *     Expression de requête SQL
2163 2163
  **/
2164 2164
 function sql_in_select(
2165
-	$in,
2166
-	$select,
2167
-	$from = [],
2168
-	$where = [],
2169
-	$groupby = [],
2170
-	$orderby = [],
2171
-	$limit = '',
2172
-	$having = [],
2173
-	$serveur = ''
2165
+    $in,
2166
+    $select,
2167
+    $from = [],
2168
+    $where = [],
2169
+    $groupby = [],
2170
+    $orderby = [],
2171
+    $limit = '',
2172
+    $having = [],
2173
+    $serveur = ''
2174 2174
 ) {
2175
-	$liste = [];
2176
-	$res = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur);
2177
-	while ($r = sql_fetch($res)) {
2178
-		$liste[] = array_shift($r);
2179
-	}
2180
-	sql_free($res);
2181
-
2182
-	return sql_in($in, $liste);
2175
+    $liste = [];
2176
+    $res = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur);
2177
+    while ($r = sql_fetch($res)) {
2178
+        $liste[] = array_shift($r);
2179
+    }
2180
+    sql_free($res);
2181
+
2182
+    return sql_in($in, $liste);
2183 2183
 }
2184 2184
 
2185 2185
 /**
@@ -2211,29 +2211,29 @@  discard block
 block discarded – undo
2211 2211
  *    Position apres le saut.
2212 2212
  */
2213 2213
 function sql_skip($res, $pos, $saut, $count, $serveur = '', $option = true) {
2214
-	// pas de saut en arriere qu'on ne sait pas faire sans sql_seek
2215
-	if (($saut = intval($saut)) <= 0) {
2216
-		return $pos;
2217
-	}
2218
-
2219
-	$seek = $pos + $saut;
2220
-	// si le saut fait depasser le maxi, on libere la resource
2221
-	// et on sort
2222
-	if ($seek >= $count) {
2223
-		sql_free($res, $serveur, $option);
2224
-
2225
-		return $count;
2226
-	}
2227
-
2228
-	if (sql_seek($res, $seek)) {
2229
-		$pos = $seek;
2230
-	} else {
2231
-		while ($pos < $seek and sql_fetch($res, $serveur, $option)) {
2232
-			$pos++;
2233
-		}
2234
-	}
2235
-
2236
-	return $pos;
2214
+    // pas de saut en arriere qu'on ne sait pas faire sans sql_seek
2215
+    if (($saut = intval($saut)) <= 0) {
2216
+        return $pos;
2217
+    }
2218
+
2219
+    $seek = $pos + $saut;
2220
+    // si le saut fait depasser le maxi, on libere la resource
2221
+    // et on sort
2222
+    if ($seek >= $count) {
2223
+        sql_free($res, $serveur, $option);
2224
+
2225
+        return $count;
2226
+    }
2227
+
2228
+    if (sql_seek($res, $seek)) {
2229
+        $pos = $seek;
2230
+    } else {
2231
+        while ($pos < $seek and sql_fetch($res, $serveur, $option)) {
2232
+            $pos++;
2233
+        }
2234
+    }
2235
+
2236
+    return $pos;
2237 2237
 }
2238 2238
 
2239 2239
 
@@ -2253,7 +2253,7 @@  discard block
 block discarded – undo
2253 2253
  *     True si le champ est de type entier
2254 2254
  */
2255 2255
 function sql_test_int($type, $serveur = '', $option = true) {
2256
-	return preg_match('/^(TINYINT|SMALLINT|MEDIUMINT|INT|INTEGER|BIGINT)/i', trim($type));
2256
+    return preg_match('/^(TINYINT|SMALLINT|MEDIUMINT|INT|INTEGER|BIGINT)/i', trim($type));
2257 2257
 }
2258 2258
 
2259 2259
 /**
@@ -2272,7 +2272,7 @@  discard block
 block discarded – undo
2272 2272
  *     True si le champ est de type entier
2273 2273
  */
2274 2274
 function sql_test_date($type, $serveur = '', $option = true) {
2275
-	return preg_match('/^(DATE|DATETIME|TIMESTAMP|TIME)/i', trim($type));
2275
+    return preg_match('/^(DATE|DATETIME|TIMESTAMP|TIME)/i', trim($type));
2276 2276
 }
2277 2277
 
2278 2278
 /**
@@ -2294,19 +2294,19 @@  discard block
 block discarded – undo
2294 2294
  *     La date formatee
2295 2295
  */
2296 2296
 function sql_format_date($annee = 0, $mois = 0, $jour = 0, $h = 0, $m = 0, $s = 0, $serveur = '') {
2297
-	$annee = sprintf('%04s', $annee);
2298
-	$mois = sprintf('%02s', $mois);
2299
-
2300
-	if ($annee == '0000') {
2301
-		$mois = 0;
2302
-	}
2303
-	if ($mois == '00') {
2304
-		$jour = 0;
2305
-	}
2306
-
2307
-	return sprintf('%04u', $annee) . '-' . sprintf('%02u', $mois) . '-'
2308
-	. sprintf('%02u', $jour) . ' ' . sprintf('%02u', $h) . ':'
2309
-	. sprintf('%02u', $m) . ':' . sprintf('%02u', $s);
2297
+    $annee = sprintf('%04s', $annee);
2298
+    $mois = sprintf('%02s', $mois);
2299
+
2300
+    if ($annee == '0000') {
2301
+        $mois = 0;
2302
+    }
2303
+    if ($mois == '00') {
2304
+        $jour = 0;
2305
+    }
2306
+
2307
+    return sprintf('%04u', $annee) . '-' . sprintf('%02u', $mois) . '-'
2308
+    . sprintf('%02u', $jour) . ' ' . sprintf('%02u', $h) . ':'
2309
+    . sprintf('%02u', $m) . ':' . sprintf('%02u', $s);
2310 2310
 }
2311 2311
 
2312 2312
 
@@ -2329,32 +2329,32 @@  discard block
 block discarded – undo
2329 2329
  **/
2330 2330
 function description_table($nom, $serveur = '') {
2331 2331
 
2332
-	static $trouver_table;
2332
+    static $trouver_table;
2333 2333
 
2334
-	/* toujours utiliser trouver_table
2334
+    /* toujours utiliser trouver_table
2335 2335
 	 qui renverra la description theorique
2336 2336
 	 car sinon on va se comporter differement selon que la table est declaree
2337 2337
 	 ou non
2338 2338
 	 */
2339
-	if (!$trouver_table) {
2340
-		$trouver_table = charger_fonction('trouver_table', 'base');
2341
-	}
2342
-	if ($desc = $trouver_table($nom, $serveur)) {
2343
-		return $desc;
2344
-	}
2345
-
2346
-	// sauf a l'installation :
2347
-	include_spip('base/serial');
2348
-	if (isset($GLOBALS['tables_principales'][$nom])) {
2349
-		return $GLOBALS['tables_principales'][$nom];
2350
-	}
2351
-
2352
-	include_spip('base/auxiliaires');
2353
-	if (isset($GLOBALS['tables_auxiliaires'][$nom])) {
2354
-		return $GLOBALS['tables_auxiliaires'][$nom];
2355
-	}
2356
-
2357
-	return false;
2339
+    if (!$trouver_table) {
2340
+        $trouver_table = charger_fonction('trouver_table', 'base');
2341
+    }
2342
+    if ($desc = $trouver_table($nom, $serveur)) {
2343
+        return $desc;
2344
+    }
2345
+
2346
+    // sauf a l'installation :
2347
+    include_spip('base/serial');
2348
+    if (isset($GLOBALS['tables_principales'][$nom])) {
2349
+        return $GLOBALS['tables_principales'][$nom];
2350
+    }
2351
+
2352
+    include_spip('base/auxiliaires');
2353
+    if (isset($GLOBALS['tables_auxiliaires'][$nom])) {
2354
+        return $GLOBALS['tables_auxiliaires'][$nom];
2355
+    }
2356
+
2357
+    return false;
2358 2358
 }
2359 2359
 
2360 2360
 /**
@@ -2367,8 +2367,8 @@  discard block
 block discarded – undo
2367 2367
  * @return string Table sql éventuellement renommée
2368 2368
  */
2369 2369
 function prefixer_table_spip($table, $prefixe) {
2370
-	if ($prefixe) {
2371
-		$table = preg_replace('/^spip_/', $prefixe . '_', $table);
2372
-	}
2373
-	return $table;
2370
+    if ($prefixe) {
2371
+        $table = preg_replace('/^spip_/', $prefixe . '_', $table);
2372
+    }
2373
+    return $table;
2374 2374
 }
Please login to merge, or discard this patch.
ecrire/action/editer_liens.php 2 patches
Indentation   +574 added lines, -574 removed lines patch added patch discarded remove patch
@@ -29,7 +29,7 @@  discard block
 block discarded – undo
29 29
  */
30 30
 
31 31
 if (!defined('_ECRIRE_INC_VERSION')) {
32
-	return;
32
+    return;
33 33
 }
34 34
 
35 35
 // charger la gestion les rôles sur les objets
@@ -47,22 +47,22 @@  discard block
 block discarded – undo
47 47
  *     - array(clé primaire, nom de la table de lien) si associable
48 48
  */
49 49
 function objet_associable($objet) {
50
-	$trouver_table = charger_fonction('trouver_table', 'base');
51
-	$table_sql = table_objet_sql($objet);
52
-
53
-	$l = '';
54
-	if (
55
-		$primary = id_table_objet($objet)
56
-		and $trouver_table($l = $table_sql . '_liens', '', true, ['log_missing' => false])
57
-		and !preg_match(',[^\w],', $primary)
58
-		and !preg_match(',[^\w],', $l)
59
-	) {
60
-		return [$primary, $l];
61
-	}
62
-
63
-	spip_log("Objet $objet non associable : ne dispose pas d'une cle primaire $primary OU d'une table liens $l");
64
-
65
-	return false;
50
+    $trouver_table = charger_fonction('trouver_table', 'base');
51
+    $table_sql = table_objet_sql($objet);
52
+
53
+    $l = '';
54
+    if (
55
+        $primary = id_table_objet($objet)
56
+        and $trouver_table($l = $table_sql . '_liens', '', true, ['log_missing' => false])
57
+        and !preg_match(',[^\w],', $primary)
58
+        and !preg_match(',[^\w],', $l)
59
+    ) {
60
+        return [$primary, $l];
61
+    }
62
+
63
+    spip_log("Objet $objet non associable : ne dispose pas d'une cle primaire $primary OU d'une table liens $l");
64
+
65
+    return false;
66 66
 }
67 67
 
68 68
 /**
@@ -88,13 +88,13 @@  discard block
 block discarded – undo
88 88
  * @return bool|int
89 89
  */
90 90
 function objet_associer($objets_source, $objets_lies, $qualif = null) {
91
-	$modifs = objet_traiter_liaisons('lien_insert', $objets_source, $objets_lies, $qualif);
91
+    $modifs = objet_traiter_liaisons('lien_insert', $objets_source, $objets_lies, $qualif);
92 92
 
93
-	if ($qualif) {
94
-		objet_qualifier_liens($objets_source, $objets_lies, $qualif);
95
-	}
93
+    if ($qualif) {
94
+        objet_qualifier_liens($objets_source, $objets_lies, $qualif);
95
+    }
96 96
 
97
-	return $modifs; // pas d'erreur
97
+    return $modifs; // pas d'erreur
98 98
 }
99 99
 
100 100
 
@@ -128,7 +128,7 @@  discard block
 block discarded – undo
128 128
  * @return bool|int
129 129
  */
130 130
 function objet_dissocier($objets_source, $objets_lies, $cond = null) {
131
-	return objet_traiter_liaisons('lien_delete', $objets_source, $objets_lies, $cond);
131
+    return objet_traiter_liaisons('lien_delete', $objets_source, $objets_lies, $cond);
132 132
 }
133 133
 
134 134
 
@@ -153,7 +153,7 @@  discard block
 block discarded – undo
153 153
  * @return bool|int
154 154
  */
155 155
 function objet_qualifier_liens($objets_source, $objets_lies, $qualif) {
156
-	return objet_traiter_liaisons('lien_set', $objets_source, $objets_lies, $qualif);
156
+    return objet_traiter_liaisons('lien_set', $objets_source, $objets_lies, $qualif);
157 157
 }
158 158
 
159 159
 
@@ -188,7 +188,7 @@  discard block
 block discarded – undo
188 188
  *     Liste des trouvailles
189 189
  */
190 190
 function objet_trouver_liens($objets_source, $objets_lies, $cond = null) {
191
-	return objet_traiter_liaisons('lien_find', $objets_source, $objets_lies, $cond);
191
+    return objet_traiter_liaisons('lien_find', $objets_source, $objets_lies, $cond);
192 192
 }
193 193
 
194 194
 
@@ -212,8 +212,8 @@  discard block
 block discarded – undo
212 212
  * @return int
213 213
  */
214 214
 function objet_optimiser_liens($objets_source, $objets_lies) {
215
-	spip_log('objet_optimiser_liens : ' . json_encode($objets_source) . ', ' . json_encode($objets_lies), 'genie' . _LOG_DEBUG);
216
-	return objet_traiter_liaisons('lien_optimise', $objets_source, $objets_lies);
215
+    spip_log('objet_optimiser_liens : ' . json_encode($objets_source) . ', ' . json_encode($objets_lies), 'genie' . _LOG_DEBUG);
216
+    return objet_traiter_liaisons('lien_optimise', $objets_source, $objets_lies);
217 217
 }
218 218
 
219 219
 
@@ -233,37 +233,37 @@  discard block
 block discarded – undo
233 233
  *     Nombre de liens copiés
234 234
  */
235 235
 function objet_dupliquer_liens($objet, $id_source, $id_cible, $types = null, $exclure_types = null) {
236
-	include_spip('base/objets');
237
-	$tables = lister_tables_objets_sql();
238
-	$n = 0;
239
-	foreach ($tables as $table_sql => $infos) {
240
-		if (
241
-			(is_null($types) or in_array($infos['type'], $types))
242
-			and (is_null($exclure_types) or !in_array($infos['type'], $exclure_types))
243
-		) {
244
-			if (objet_associable($infos['type'])) {
245
-				$liens = (($infos['type'] == $objet) ?
246
-					objet_trouver_liens([$objet => $id_source], '*')
247
-					:
248
-					objet_trouver_liens([$infos['type'] => '*'], [$objet => $id_source]));
249
-				foreach ($liens as $lien) {
250
-					$n++;
251
-					if ($infos['type'] == $objet) {
252
-						if (
253
-							(is_null($types) or in_array($lien['objet'], $types))
254
-							and (is_null($exclure_types) or !in_array($lien['objet'], $exclure_types))
255
-						) {
256
-							objet_associer([$objet => $id_cible], [$lien['objet'] => $lien[$lien['objet']]], $lien);
257
-						}
258
-					} else {
259
-						objet_associer([$infos['type'] => $lien[$infos['type']]], [$objet => $id_cible], $lien);
260
-					}
261
-				}
262
-			}
263
-		}
264
-	}
265
-
266
-	return $n;
236
+    include_spip('base/objets');
237
+    $tables = lister_tables_objets_sql();
238
+    $n = 0;
239
+    foreach ($tables as $table_sql => $infos) {
240
+        if (
241
+            (is_null($types) or in_array($infos['type'], $types))
242
+            and (is_null($exclure_types) or !in_array($infos['type'], $exclure_types))
243
+        ) {
244
+            if (objet_associable($infos['type'])) {
245
+                $liens = (($infos['type'] == $objet) ?
246
+                    objet_trouver_liens([$objet => $id_source], '*')
247
+                    :
248
+                    objet_trouver_liens([$infos['type'] => '*'], [$objet => $id_source]));
249
+                foreach ($liens as $lien) {
250
+                    $n++;
251
+                    if ($infos['type'] == $objet) {
252
+                        if (
253
+                            (is_null($types) or in_array($lien['objet'], $types))
254
+                            and (is_null($exclure_types) or !in_array($lien['objet'], $exclure_types))
255
+                        ) {
256
+                            objet_associer([$objet => $id_cible], [$lien['objet'] => $lien[$lien['objet']]], $lien);
257
+                        }
258
+                    } else {
259
+                        objet_associer([$infos['type'] => $lien[$infos['type']]], [$objet => $id_cible], $lien);
260
+                    }
261
+                }
262
+            }
263
+        }
264
+    }
265
+
266
+    return $n;
267 267
 }
268 268
 
269 269
 /**
@@ -305,38 +305,38 @@  discard block
 block discarded – undo
305 305
  * @return bool|int|array
306 306
  */
307 307
 function objet_traiter_liaisons($operation, $objets_source, $objets_lies, $set = null) {
308
-	// accepter une syntaxe minimale pour supprimer tous les liens
309
-	if ($objets_lies == '*') {
310
-		$objets_lies = ['*' => '*'];
311
-	}
312
-	$modifs = 0; // compter le nombre de modifications
313
-	$echec = null;
314
-	foreach ($objets_source as $objet => $ids) {
315
-		if ($a = objet_associable($objet)) {
316
-			list($primary, $l) = $a;
317
-			if (!is_array($ids)) {
318
-				$ids = [$ids];
319
-			} elseif (reset($ids) == 'NOT') {
320
-				// si on demande un array('NOT',...) => recuperer la liste d'ids correspondants
321
-				$where = lien_where($primary, $ids, '*', '*');
322
-				$ids = sql_allfetsel($primary, $l, $where);
323
-				$ids = array_map('reset', $ids);
324
-			}
325
-			foreach ($ids as $id) {
326
-				$res = $operation($objet, $primary, $l, $id, $objets_lies, $set);
327
-				if ($res === false) {
328
-					spip_log("objet_traiter_liaisons [Echec] : $operation sur $objet/$primary/$l/$id", _LOG_ERREUR);
329
-					$echec = true;
330
-				} else {
331
-					$modifs = ($modifs ? (is_array($res) ? array_merge($modifs, $res) : $modifs + $res) : $res);
332
-				}
333
-			}
334
-		} else {
335
-			$echec = true;
336
-		}
337
-	}
338
-
339
-	return ($echec ? false : $modifs); // pas d'erreur
308
+    // accepter une syntaxe minimale pour supprimer tous les liens
309
+    if ($objets_lies == '*') {
310
+        $objets_lies = ['*' => '*'];
311
+    }
312
+    $modifs = 0; // compter le nombre de modifications
313
+    $echec = null;
314
+    foreach ($objets_source as $objet => $ids) {
315
+        if ($a = objet_associable($objet)) {
316
+            list($primary, $l) = $a;
317
+            if (!is_array($ids)) {
318
+                $ids = [$ids];
319
+            } elseif (reset($ids) == 'NOT') {
320
+                // si on demande un array('NOT',...) => recuperer la liste d'ids correspondants
321
+                $where = lien_where($primary, $ids, '*', '*');
322
+                $ids = sql_allfetsel($primary, $l, $where);
323
+                $ids = array_map('reset', $ids);
324
+            }
325
+            foreach ($ids as $id) {
326
+                $res = $operation($objet, $primary, $l, $id, $objets_lies, $set);
327
+                if ($res === false) {
328
+                    spip_log("objet_traiter_liaisons [Echec] : $operation sur $objet/$primary/$l/$id", _LOG_ERREUR);
329
+                    $echec = true;
330
+                } else {
331
+                    $modifs = ($modifs ? (is_array($res) ? array_merge($modifs, $res) : $modifs + $res) : $res);
332
+                }
333
+            }
334
+        } else {
335
+            $echec = true;
336
+        }
337
+    }
338
+
339
+    return ($echec ? false : $modifs); // pas d'erreur
340 340
 }
341 341
 
342 342
 
@@ -365,117 +365,117 @@  discard block
 block discarded – undo
365 365
  *     Nombre d'insertions faites, false si échec.
366 366
  */
367 367
 function lien_insert($objet_source, $primary, $table_lien, $id, $objets, $qualif) {
368
-	$ins = 0;
369
-	$echec = null;
370
-	if (is_null($qualif)) {
371
-		$qualif = [];
372
-	}
373
-
374
-	foreach ($objets as $objet => $id_objets) {
375
-		if (!is_array($id_objets)) {
376
-			$id_objets = [$id_objets];
377
-		}
378
-
379
-		// role, colonne, where par défaut
380
-		list($role, $colonne_role, $cond) =
381
-			roles_trouver_dans_qualif($objet_source, $objet, $qualif);
382
-
383
-		foreach ($id_objets as $id_objet) {
384
-			$objet = (($objet == '*') ? $objet : objet_type($objet)); # securite
385
-
386
-			$insertions = [
387
-				'id_objet' => $id_objet,
388
-				'objet' => $objet,
389
-				$primary => $id
390
-			];
391
-			// rôle en plus s'il est défini
392
-			if ($role) {
393
-				$insertions += [
394
-					$colonne_role => $role
395
-				];
396
-			}
397
-
398
-			if (lien_triables($table_lien)) {
399
-				if (isset($qualif['rang_lien'])) {
400
-					$rang = $qualif['rang_lien'];
401
-				}
402
-				else {
403
-					$where = lien_where($primary, $id, $objet, $id_objet);
404
-					// si il y a deja un lien pour ce couple (avec un autre role?) on reprend le meme rang si non nul
405
-					if (!$rang = intval(sql_getfetsel('rang_lien', $table_lien, $where))) {
406
-						$where = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet);
407
-						$rang = intval(sql_getfetsel('max(rang_lien)', $table_lien, $where));
408
-						// si aucun lien n'a de rang, on en introduit pas, on garde zero
409
-						if ($rang > 0) {
410
-							$rang = intval($rang) + 1;
411
-						}
412
-					}
413
-				}
414
-				$insertions['rang_lien'] = $rang;
415
-			}
416
-
417
-			$args = [
418
-				'table_lien' => $table_lien,
419
-				'objet_source' => $objet_source,
420
-				'id_objet_source' => $id,
421
-				'objet' => $objet,
422
-				'id_objet' => $id_objet,
423
-				'role' => $role,
424
-				'colonne_role' => $colonne_role,
425
-				'action' => 'insert',
426
-			];
427
-
428
-			// Envoyer aux plugins
429
-			$insertions = pipeline(
430
-				'pre_edition_lien',
431
-				[
432
-					'args' => $args,
433
-					'data' => $insertions
434
-				]
435
-			);
436
-			$args['id_objet'] = $insertions['id_objet'];
437
-
438
-			$where = lien_where($primary, $id, $objet, $id_objet, $cond);
439
-
440
-			if (
441
-				($id_objet = intval($insertions['id_objet']) or in_array($objet, ['site', 'rubrique']))
442
-				and !sql_getfetsel($primary, $table_lien, $where)
443
-			) {
444
-				if (lien_triables($table_lien) and isset($insertions['rang_lien']) and intval($insertions['rang_lien'])) {
445
-					$where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
446
-					$where_meme_lien = implode(' AND ', $where_meme_lien);
447
-					// on decale les liens de rang_lien>=la valeur inseree pour faire la place
448
-					// sauf sur le meme lien avec un role eventuellement different
449
-					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . intval($insertions['rang_lien']), "NOT($where_meme_lien)"]);
450
-					sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
451
-				}
452
-
453
-				$e = sql_insertq($table_lien, $insertions);
454
-				if ($e !== false) {
455
-					$ins++;
456
-					lien_propage_date_modif($objet, $id_objet);
457
-					lien_propage_date_modif($objet_source, $id);
458
-					// Envoyer aux plugins
459
-					pipeline(
460
-						'post_edition_lien',
461
-						[
462
-							'args' => $args,
463
-							'data' => $insertions
464
-						]
465
-					);
466
-				} else {
467
-					$echec = true;
468
-				}
469
-			}
470
-		}
471
-	}
472
-	// si on a fait des insertions, on reordonne les liens concernes
473
-	// pas la peine si $qualif['rang_lien'] etait fournie, on va passer dans lien_set a suivre et donc finir le recomptage
474
-	if ($ins > 0 and empty($qualif['rang_lien'])) {
475
-		lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
476
-	}
477
-
478
-	return ($echec ? false : $ins);
368
+    $ins = 0;
369
+    $echec = null;
370
+    if (is_null($qualif)) {
371
+        $qualif = [];
372
+    }
373
+
374
+    foreach ($objets as $objet => $id_objets) {
375
+        if (!is_array($id_objets)) {
376
+            $id_objets = [$id_objets];
377
+        }
378
+
379
+        // role, colonne, where par défaut
380
+        list($role, $colonne_role, $cond) =
381
+            roles_trouver_dans_qualif($objet_source, $objet, $qualif);
382
+
383
+        foreach ($id_objets as $id_objet) {
384
+            $objet = (($objet == '*') ? $objet : objet_type($objet)); # securite
385
+
386
+            $insertions = [
387
+                'id_objet' => $id_objet,
388
+                'objet' => $objet,
389
+                $primary => $id
390
+            ];
391
+            // rôle en plus s'il est défini
392
+            if ($role) {
393
+                $insertions += [
394
+                    $colonne_role => $role
395
+                ];
396
+            }
397
+
398
+            if (lien_triables($table_lien)) {
399
+                if (isset($qualif['rang_lien'])) {
400
+                    $rang = $qualif['rang_lien'];
401
+                }
402
+                else {
403
+                    $where = lien_where($primary, $id, $objet, $id_objet);
404
+                    // si il y a deja un lien pour ce couple (avec un autre role?) on reprend le meme rang si non nul
405
+                    if (!$rang = intval(sql_getfetsel('rang_lien', $table_lien, $where))) {
406
+                        $where = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet);
407
+                        $rang = intval(sql_getfetsel('max(rang_lien)', $table_lien, $where));
408
+                        // si aucun lien n'a de rang, on en introduit pas, on garde zero
409
+                        if ($rang > 0) {
410
+                            $rang = intval($rang) + 1;
411
+                        }
412
+                    }
413
+                }
414
+                $insertions['rang_lien'] = $rang;
415
+            }
416
+
417
+            $args = [
418
+                'table_lien' => $table_lien,
419
+                'objet_source' => $objet_source,
420
+                'id_objet_source' => $id,
421
+                'objet' => $objet,
422
+                'id_objet' => $id_objet,
423
+                'role' => $role,
424
+                'colonne_role' => $colonne_role,
425
+                'action' => 'insert',
426
+            ];
427
+
428
+            // Envoyer aux plugins
429
+            $insertions = pipeline(
430
+                'pre_edition_lien',
431
+                [
432
+                    'args' => $args,
433
+                    'data' => $insertions
434
+                ]
435
+            );
436
+            $args['id_objet'] = $insertions['id_objet'];
437
+
438
+            $where = lien_where($primary, $id, $objet, $id_objet, $cond);
439
+
440
+            if (
441
+                ($id_objet = intval($insertions['id_objet']) or in_array($objet, ['site', 'rubrique']))
442
+                and !sql_getfetsel($primary, $table_lien, $where)
443
+            ) {
444
+                if (lien_triables($table_lien) and isset($insertions['rang_lien']) and intval($insertions['rang_lien'])) {
445
+                    $where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
446
+                    $where_meme_lien = implode(' AND ', $where_meme_lien);
447
+                    // on decale les liens de rang_lien>=la valeur inseree pour faire la place
448
+                    // sauf sur le meme lien avec un role eventuellement different
449
+                    $w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . intval($insertions['rang_lien']), "NOT($where_meme_lien)"]);
450
+                    sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
451
+                }
452
+
453
+                $e = sql_insertq($table_lien, $insertions);
454
+                if ($e !== false) {
455
+                    $ins++;
456
+                    lien_propage_date_modif($objet, $id_objet);
457
+                    lien_propage_date_modif($objet_source, $id);
458
+                    // Envoyer aux plugins
459
+                    pipeline(
460
+                        'post_edition_lien',
461
+                        [
462
+                            'args' => $args,
463
+                            'data' => $insertions
464
+                        ]
465
+                    );
466
+                } else {
467
+                    $echec = true;
468
+                }
469
+            }
470
+        }
471
+    }
472
+    // si on a fait des insertions, on reordonne les liens concernes
473
+    // pas la peine si $qualif['rang_lien'] etait fournie, on va passer dans lien_set a suivre et donc finir le recomptage
474
+    if ($ins > 0 and empty($qualif['rang_lien'])) {
475
+        lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
476
+    }
477
+
478
+    return ($echec ? false : $ins);
479 479
 }
480 480
 
481 481
 
@@ -488,47 +488,47 @@  discard block
 block discarded – undo
488 488
  * @param array|string $objets
489 489
  */
490 490
 function lien_ordonner($objet_source, $primary, $table_lien, $id, $objets) {
491
-	if (!lien_triables($table_lien)) {
492
-		return;
493
-	}
494
-
495
-	$deja_reordonne = [];
496
-
497
-	foreach ($objets as $objet => $id_objets) {
498
-		if (!is_array($id_objets)) {
499
-			$id_objets = [$id_objets];
500
-		}
501
-
502
-		foreach ($id_objets as $id_objet) {
503
-			if (empty($deja_reordonne[$id][$objet][$id_objet])) {
504
-				$objet = (($objet == '*') ? $objet : objet_type($objet)); # securite
505
-
506
-				$where = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet);
507
-				$liens = sql_allfetsel("$primary, id_objet, objet, rang_lien", $table_lien, $where, '', 'rang_lien');
508
-
509
-				$rangs = array_column($liens, 'rang_lien');
510
-				if (count($rangs) and (max($rangs) > 0 or min($rangs) < 0)) {
511
-					$rang = 1;
512
-					foreach ($liens as $lien) {
513
-						if (empty($deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']])) {
514
-							$where = lien_where($primary, $lien[$primary], $lien['objet'], $lien['id_objet'], ['rang_lien!=' . intval($rang)]);
515
-							sql_updateq($table_lien, ['rang_lien' => $rang], $where);
516
-
517
-							if (empty($deja_reordonne[$lien[$primary]])) {
518
-								$deja_reordonne[$lien[$primary]] = [];
519
-							}
520
-							if (empty($deja_reordonne[$lien[$primary]][$lien['objet']])) {
521
-								$deja_reordonne[$lien[$primary]][$lien['objet']] = [];
522
-							}
523
-							$deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']] = $rang;
524
-
525
-							$rang++;
526
-						}
527
-					}
528
-				}
529
-			}
530
-		}
531
-	}
491
+    if (!lien_triables($table_lien)) {
492
+        return;
493
+    }
494
+
495
+    $deja_reordonne = [];
496
+
497
+    foreach ($objets as $objet => $id_objets) {
498
+        if (!is_array($id_objets)) {
499
+            $id_objets = [$id_objets];
500
+        }
501
+
502
+        foreach ($id_objets as $id_objet) {
503
+            if (empty($deja_reordonne[$id][$objet][$id_objet])) {
504
+                $objet = (($objet == '*') ? $objet : objet_type($objet)); # securite
505
+
506
+                $where = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet);
507
+                $liens = sql_allfetsel("$primary, id_objet, objet, rang_lien", $table_lien, $where, '', 'rang_lien');
508
+
509
+                $rangs = array_column($liens, 'rang_lien');
510
+                if (count($rangs) and (max($rangs) > 0 or min($rangs) < 0)) {
511
+                    $rang = 1;
512
+                    foreach ($liens as $lien) {
513
+                        if (empty($deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']])) {
514
+                            $where = lien_where($primary, $lien[$primary], $lien['objet'], $lien['id_objet'], ['rang_lien!=' . intval($rang)]);
515
+                            sql_updateq($table_lien, ['rang_lien' => $rang], $where);
516
+
517
+                            if (empty($deja_reordonne[$lien[$primary]])) {
518
+                                $deja_reordonne[$lien[$primary]] = [];
519
+                            }
520
+                            if (empty($deja_reordonne[$lien[$primary]][$lien['objet']])) {
521
+                                $deja_reordonne[$lien[$primary]][$lien['objet']] = [];
522
+                            }
523
+                            $deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']] = $rang;
524
+
525
+                            $rang++;
526
+                        }
527
+                    }
528
+                }
529
+            }
530
+        }
531
+    }
532 532
 }
533 533
 
534 534
 
@@ -539,18 +539,18 @@  discard block
 block discarded – undo
539 539
  * @return mixed
540 540
  */
541 541
 function lien_triables($table_lien) {
542
-	static $triables = [];
543
-	if (!isset($triables[$table_lien])) {
544
-		$trouver_table = charger_fonction('trouver_table', 'base');
545
-		$desc = $trouver_table($table_lien);
546
-		if ($desc and isset($desc['field']['rang_lien'])) {
547
-			$triables[$table_lien] = true;
548
-		}
549
-		else {
550
-			$triables[$table_lien] = false;
551
-		}
552
-	}
553
-	return $triables[$table_lien];
542
+    static $triables = [];
543
+    if (!isset($triables[$table_lien])) {
544
+        $trouver_table = charger_fonction('trouver_table', 'base');
545
+        $desc = $trouver_table($table_lien);
546
+        if ($desc and isset($desc['field']['rang_lien'])) {
547
+            $triables[$table_lien] = true;
548
+        }
549
+        else {
550
+            $triables[$table_lien] = false;
551
+        }
552
+    }
553
+    return $triables[$table_lien];
554 554
 }
555 555
 
556 556
 
@@ -566,52 +566,52 @@  discard block
 block discarded – undo
566 566
  * @return array                        Liste des conditions
567 567
  */
568 568
 function lien_where($primary, $id_source, $objet, $id_objet, $cond = []) {
569
-	if (
570
-		(!is_array($id_source) and !strlen($id_source))
571
-		or !strlen($objet)
572
-		or (!is_array($id_objet) and !strlen($id_objet))
573
-	) {
574
-		return ['0=1'];
575
-	} // securite
576
-
577
-	$not = '';
578
-	if (is_array($id_source) and reset($id_source) == 'NOT') {
579
-		$not = array_shift($id_source);
580
-		$id_source = reset($id_source);
581
-	}
582
-
583
-	$where = $cond;
584
-
585
-	if ($id_source !== '*') {
586
-		$where[] = (is_array($id_source) ? sql_in(
587
-			addslashes($primary),
588
-			array_map('intval', $id_source),
589
-			$not
590
-		) : addslashes($primary) . ($not ? '<>' : '=') . intval($id_source));
591
-	} elseif ($not) {
592
-		$where[] = '0=1';
593
-	} // idiot mais quand meme
594
-
595
-	$not = '';
596
-	if (is_array($id_objet) and reset($id_objet) == 'NOT') {
597
-		$not = array_shift($id_objet);
598
-		$id_objet = reset($id_objet);
599
-	}
600
-
601
-	if ($objet !== '*') {
602
-		$where[] = 'objet=' . sql_quote($objet);
603
-	}
604
-	if ($id_objet !== '*') {
605
-		$where[] = (is_array($id_objet) ? sql_in(
606
-			'id_objet',
607
-			array_map('intval', $id_objet),
608
-			$not
609
-		) : 'id_objet' . ($not ? '<>' : '=') . intval($id_objet));
610
-	} elseif ($not) {
611
-		$where[] = '0=1';
612
-	} // idiot mais quand meme
613
-
614
-	return $where;
569
+    if (
570
+        (!is_array($id_source) and !strlen($id_source))
571
+        or !strlen($objet)
572
+        or (!is_array($id_objet) and !strlen($id_objet))
573
+    ) {
574
+        return ['0=1'];
575
+    } // securite
576
+
577
+    $not = '';
578
+    if (is_array($id_source) and reset($id_source) == 'NOT') {
579
+        $not = array_shift($id_source);
580
+        $id_source = reset($id_source);
581
+    }
582
+
583
+    $where = $cond;
584
+
585
+    if ($id_source !== '*') {
586
+        $where[] = (is_array($id_source) ? sql_in(
587
+            addslashes($primary),
588
+            array_map('intval', $id_source),
589
+            $not
590
+        ) : addslashes($primary) . ($not ? '<>' : '=') . intval($id_source));
591
+    } elseif ($not) {
592
+        $where[] = '0=1';
593
+    } // idiot mais quand meme
594
+
595
+    $not = '';
596
+    if (is_array($id_objet) and reset($id_objet) == 'NOT') {
597
+        $not = array_shift($id_objet);
598
+        $id_objet = reset($id_objet);
599
+    }
600
+
601
+    if ($objet !== '*') {
602
+        $where[] = 'objet=' . sql_quote($objet);
603
+    }
604
+    if ($id_objet !== '*') {
605
+        $where[] = (is_array($id_objet) ? sql_in(
606
+            'id_objet',
607
+            array_map('intval', $id_objet),
608
+            $not
609
+        ) : 'id_objet' . ($not ? '<>' : '=') . intval($id_objet));
610
+    } elseif ($not) {
611
+        $where[] = '0=1';
612
+    } // idiot mais quand meme
613
+
614
+    return $where;
615 615
 }
616 616
 
617 617
 /**
@@ -626,13 +626,13 @@  discard block
 block discarded – undo
626 626
  */
627 627
 function lien_rang_where($table_lien, $primary, $id_source, $objet, $id_objet, $cond = []) {
628 628
 
629
-	// si on veut compter les rangs autrement que le core ne le fait par defaut, fournir le where adhoc
630
-	if (function_exists($f = 'lien_rang_where_' . $table_lien)) {
631
-		return $f($primary, $id_source, $objet, $id_objet, $cond);
632
-	}
629
+    // si on veut compter les rangs autrement que le core ne le fait par defaut, fournir le where adhoc
630
+    if (function_exists($f = 'lien_rang_where_' . $table_lien)) {
631
+        return $f($primary, $id_source, $objet, $id_objet, $cond);
632
+    }
633 633
 
634
-	// par defaut c'est un rang compté pour tous les id_source d'un couple objet-id_objet
635
-	return lien_where($primary, '*', $objet, $id_objet, $cond);
634
+    // par defaut c'est un rang compté pour tous les id_source d'un couple objet-id_objet
635
+    return lien_where($primary, '*', $objet, $id_objet, $cond);
636 636
 }
637 637
 
638 638
 /**
@@ -663,90 +663,90 @@  discard block
 block discarded – undo
663 663
  */
664 664
 function lien_delete($objet_source, $primary, $table_lien, $id, $objets, $cond = null) {
665 665
 
666
-	$retire = [];
667
-	$dels = 0;
668
-	$echec = false;
669
-	if (is_null($cond)) {
670
-		$cond = [];
671
-	}
672
-
673
-	foreach ($objets as $objet => $id_objets) {
674
-		$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
675
-		if (!is_array($id_objets) or reset($id_objets) == 'NOT') {
676
-			$id_objets = [$id_objets];
677
-		}
678
-		foreach ($id_objets as $id_objet) {
679
-			list($cond, $colonne_role, $role) = roles_creer_condition_role($objet_source, $objet, $cond);
680
-			// id_objet peut valoir '*'
681
-			$where = lien_where($primary, $id, $objet, $id_objet, $cond);
682
-
683
-			// lire les liens existants pour propager la date de modif
684
-			$select = "$primary,id_objet,objet";
685
-			if ($colonne_role) {
686
-				$select .= ",$colonne_role";
687
-			}
688
-			$liens = sql_allfetsel($select, $table_lien, $where);
689
-
690
-			// iterer sur les liens pour permettre aux plugins de gerer
691
-			foreach ($liens as $l) {
692
-				$args = [
693
-					'table_lien' => $table_lien,
694
-					'objet_source' => $objet_source,
695
-					'id_objet_source' => $l[$primary],
696
-					'objet' => $l['objet'],
697
-					'id_objet' => $l['id_objet'],
698
-					'colonne_role' => $colonne_role,
699
-					'role' => ($colonne_role ? $l[$colonne_role] : ''),
700
-					'action' => 'delete',
701
-				];
702
-
703
-				// Envoyer aux plugins
704
-				$l = pipeline(
705
-					'pre_edition_lien',
706
-					[
707
-						'args' => $args,
708
-						'data' => $l
709
-					]
710
-				);
711
-				$args['id_objet'] = $id_o = $l['id_objet'];
712
-
713
-				if ($id_o = intval($l['id_objet']) or in_array($l['objet'], ['site', 'rubrique'])) {
714
-					$where = lien_where($primary, $l[$primary], $l['objet'], $id_o, $cond);
715
-					$e = sql_delete($table_lien, $where);
716
-					if ($e !== false) {
717
-						$dels += $e;
718
-						lien_propage_date_modif($l['objet'], $id_o);
719
-						lien_propage_date_modif($objet_source, $l[$primary]);
720
-					} else {
721
-						$echec = true;
722
-					}
723
-					$retire[] = [
724
-						'source' => [$objet_source => $l[$primary]],
725
-						'lien' => [$l['objet'] => $id_o],
726
-						'type' => $l['objet'],
727
-						'role' => ($colonne_role ? $l[$colonne_role] : ''),
728
-						'id' => $id_o
729
-					];
730
-					// Envoyer aux plugins
731
-					pipeline(
732
-						'post_edition_lien',
733
-						[
734
-							'args' => $args,
735
-							'data' => $l
736
-						]
737
-					);
738
-				}
739
-			}
740
-		}
741
-	}
742
-	// si on a supprime des liens, on reordonne les liens concernes
743
-	if ($dels) {
744
-		lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
745
-	}
746
-
747
-	pipeline('trig_supprimer_objets_lies', $retire);
748
-
749
-	return ($echec ? false : $dels);
666
+    $retire = [];
667
+    $dels = 0;
668
+    $echec = false;
669
+    if (is_null($cond)) {
670
+        $cond = [];
671
+    }
672
+
673
+    foreach ($objets as $objet => $id_objets) {
674
+        $objet = ($objet == '*') ? $objet : objet_type($objet); # securite
675
+        if (!is_array($id_objets) or reset($id_objets) == 'NOT') {
676
+            $id_objets = [$id_objets];
677
+        }
678
+        foreach ($id_objets as $id_objet) {
679
+            list($cond, $colonne_role, $role) = roles_creer_condition_role($objet_source, $objet, $cond);
680
+            // id_objet peut valoir '*'
681
+            $where = lien_where($primary, $id, $objet, $id_objet, $cond);
682
+
683
+            // lire les liens existants pour propager la date de modif
684
+            $select = "$primary,id_objet,objet";
685
+            if ($colonne_role) {
686
+                $select .= ",$colonne_role";
687
+            }
688
+            $liens = sql_allfetsel($select, $table_lien, $where);
689
+
690
+            // iterer sur les liens pour permettre aux plugins de gerer
691
+            foreach ($liens as $l) {
692
+                $args = [
693
+                    'table_lien' => $table_lien,
694
+                    'objet_source' => $objet_source,
695
+                    'id_objet_source' => $l[$primary],
696
+                    'objet' => $l['objet'],
697
+                    'id_objet' => $l['id_objet'],
698
+                    'colonne_role' => $colonne_role,
699
+                    'role' => ($colonne_role ? $l[$colonne_role] : ''),
700
+                    'action' => 'delete',
701
+                ];
702
+
703
+                // Envoyer aux plugins
704
+                $l = pipeline(
705
+                    'pre_edition_lien',
706
+                    [
707
+                        'args' => $args,
708
+                        'data' => $l
709
+                    ]
710
+                );
711
+                $args['id_objet'] = $id_o = $l['id_objet'];
712
+
713
+                if ($id_o = intval($l['id_objet']) or in_array($l['objet'], ['site', 'rubrique'])) {
714
+                    $where = lien_where($primary, $l[$primary], $l['objet'], $id_o, $cond);
715
+                    $e = sql_delete($table_lien, $where);
716
+                    if ($e !== false) {
717
+                        $dels += $e;
718
+                        lien_propage_date_modif($l['objet'], $id_o);
719
+                        lien_propage_date_modif($objet_source, $l[$primary]);
720
+                    } else {
721
+                        $echec = true;
722
+                    }
723
+                    $retire[] = [
724
+                        'source' => [$objet_source => $l[$primary]],
725
+                        'lien' => [$l['objet'] => $id_o],
726
+                        'type' => $l['objet'],
727
+                        'role' => ($colonne_role ? $l[$colonne_role] : ''),
728
+                        'id' => $id_o
729
+                    ];
730
+                    // Envoyer aux plugins
731
+                    pipeline(
732
+                        'post_edition_lien',
733
+                        [
734
+                            'args' => $args,
735
+                            'data' => $l
736
+                        ]
737
+                    );
738
+                }
739
+            }
740
+        }
741
+    }
742
+    // si on a supprime des liens, on reordonne les liens concernes
743
+    if ($dels) {
744
+        lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
745
+    }
746
+
747
+    pipeline('trig_supprimer_objets_lies', $retire);
748
+
749
+    return ($echec ? false : $dels);
750 750
 }
751 751
 
752 752
 
@@ -769,67 +769,67 @@  discard block
 block discarded – undo
769 769
  * @return bool|int
770 770
  */
771 771
 function lien_optimise($objet_source, $primary, $table_lien, $id, $objets) {
772
-	include_spip('genie/optimiser');
773
-	$echec = false;
774
-	$dels = 0;
775
-	foreach ($objets as $objet => $id_objets) {
776
-		$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
777
-		if (!is_array($id_objets) or reset($id_objets) == 'NOT') {
778
-			$id_objets = [$id_objets];
779
-		}
780
-		foreach ($id_objets as $id_objet) {
781
-			$where = lien_where($primary, $id, $objet, $id_objet);
782
-			# les liens vers un objet inexistant
783
-			$r = sql_select('DISTINCT objet', $table_lien, $where);
784
-			while ($t = sql_fetch($r)) {
785
-				$type = $t['objet'];
786
-				$spip_table_objet = table_objet_sql($type);
787
-				$id_table_objet = id_table_objet($type);
788
-				$res = sql_select(
789
-					"L.$primary AS id,L.id_objet",
790
-					// la condition de jointure inclue L.objet='xxx' pour ne joindre que les bonnes lignes
791
-					// du coups toutes les lignes avec un autre objet ont un id_xxx=NULL puisque LEFT JOIN
792
-					// il faut les eliminier en repetant la condition dans le where L.objet='xxx'
793
-					"$table_lien AS L
772
+    include_spip('genie/optimiser');
773
+    $echec = false;
774
+    $dels = 0;
775
+    foreach ($objets as $objet => $id_objets) {
776
+        $objet = ($objet == '*') ? $objet : objet_type($objet); # securite
777
+        if (!is_array($id_objets) or reset($id_objets) == 'NOT') {
778
+            $id_objets = [$id_objets];
779
+        }
780
+        foreach ($id_objets as $id_objet) {
781
+            $where = lien_where($primary, $id, $objet, $id_objet);
782
+            # les liens vers un objet inexistant
783
+            $r = sql_select('DISTINCT objet', $table_lien, $where);
784
+            while ($t = sql_fetch($r)) {
785
+                $type = $t['objet'];
786
+                $spip_table_objet = table_objet_sql($type);
787
+                $id_table_objet = id_table_objet($type);
788
+                $res = sql_select(
789
+                    "L.$primary AS id,L.id_objet",
790
+                    // la condition de jointure inclue L.objet='xxx' pour ne joindre que les bonnes lignes
791
+                    // du coups toutes les lignes avec un autre objet ont un id_xxx=NULL puisque LEFT JOIN
792
+                    // il faut les eliminier en repetant la condition dans le where L.objet='xxx'
793
+                    "$table_lien AS L
794 794
 									LEFT JOIN $spip_table_objet AS O
795 795
 										ON (O.$id_table_objet=L.id_objet AND L.objet=" . sql_quote($type) . ')',
796
-					'L.objet=' . sql_quote($type) . " AND O.$id_table_objet IS NULL"
797
-				);
798
-				// sur une cle primaire composee, pas d'autres solutions que de virer un a un
799
-				while ($row = sql_fetch($res)) {
800
-					if ($primary === 'id_document' and in_array($type, ['site', 'rubrique']) and !intval($row['id_objet'])) {
801
-						continue; // gaffe, c'est le logo du site ou des rubriques!
802
-					}
803
-					$e = sql_delete(
804
-						$table_lien,
805
-						["$primary=" . $row['id'], 'id_objet=' . $row['id_objet'], 'objet=' . sql_quote($type)]
806
-					);
807
-					if ($e != false) {
808
-						$dels += $e;
809
-						spip_log(
810
-							'lien_optimise: Entree ' . $row['id'] . '/' . $row['id_objet'] . "/$type supprimee dans la table $table_lien",
811
-							'genie' . _LOG_INFO_IMPORTANTE
812
-						);
813
-					}
814
-				}
815
-			}
816
-
817
-			# les liens depuis un objet inexistant
818
-			$table_source = table_objet_sql($objet_source);
819
-			// filtrer selon $id, $objet, $id_objet eventuellement fournis
820
-			// (en general '*' pour chaque)
821
-			$where = lien_where("L.$primary", $id, $objet, $id_objet);
822
-			$where[] = "O.$primary IS NULL";
823
-			$res = sql_select(
824
-				"L.$primary AS id",
825
-				"$table_lien AS L LEFT JOIN $table_source AS O ON L.$primary=O.$primary",
826
-				$where
827
-			);
828
-			$dels += optimiser_sansref($table_lien, $primary, $res);
829
-		}
830
-	}
831
-
832
-	return ($echec ? false : $dels);
796
+                    'L.objet=' . sql_quote($type) . " AND O.$id_table_objet IS NULL"
797
+                );
798
+                // sur une cle primaire composee, pas d'autres solutions que de virer un a un
799
+                while ($row = sql_fetch($res)) {
800
+                    if ($primary === 'id_document' and in_array($type, ['site', 'rubrique']) and !intval($row['id_objet'])) {
801
+                        continue; // gaffe, c'est le logo du site ou des rubriques!
802
+                    }
803
+                    $e = sql_delete(
804
+                        $table_lien,
805
+                        ["$primary=" . $row['id'], 'id_objet=' . $row['id_objet'], 'objet=' . sql_quote($type)]
806
+                    );
807
+                    if ($e != false) {
808
+                        $dels += $e;
809
+                        spip_log(
810
+                            'lien_optimise: Entree ' . $row['id'] . '/' . $row['id_objet'] . "/$type supprimee dans la table $table_lien",
811
+                            'genie' . _LOG_INFO_IMPORTANTE
812
+                        );
813
+                    }
814
+                }
815
+            }
816
+
817
+            # les liens depuis un objet inexistant
818
+            $table_source = table_objet_sql($objet_source);
819
+            // filtrer selon $id, $objet, $id_objet eventuellement fournis
820
+            // (en general '*' pour chaque)
821
+            $where = lien_where("L.$primary", $id, $objet, $id_objet);
822
+            $where[] = "O.$primary IS NULL";
823
+            $res = sql_select(
824
+                "L.$primary AS id",
825
+                "$table_lien AS L LEFT JOIN $table_source AS O ON L.$primary=O.$primary",
826
+                $where
827
+            );
828
+            $dels += optimiser_sansref($table_lien, $primary, $res);
829
+        }
830
+    }
831
+
832
+    return ($echec ? false : $dels);
833 833
 }
834 834
 
835 835
 
@@ -861,92 +861,92 @@  discard block
 block discarded – undo
861 861
  *     Nombre de modifications faites, false si échec.
862 862
  */
863 863
 function lien_set($objet_source, $primary, $table_lien, $id, $objets, $qualif) {
864
-	$echec = null;
865
-	$ok = 0;
866
-	$reordonner = false;
867
-	if (!$qualif) {
868
-		return false;
869
-	}
870
-	// nettoyer qualif qui peut venir directement d'un objet_trouver_lien :
871
-	unset($qualif[$primary]);
872
-	unset($qualif[$objet_source]);
873
-	if (isset($qualif['objet'])) {
874
-		unset($qualif[$qualif['objet']]);
875
-	}
876
-	unset($qualif['objet']);
877
-	unset($qualif['id_objet']);
878
-	foreach ($objets as $objet => $id_objets) {
879
-		// role, colonne, where par défaut
880
-		list($role, $colonne_role, $cond) =
881
-			roles_trouver_dans_qualif($objet_source, $objet, $qualif);
882
-
883
-		$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
884
-		if (!is_array($id_objets) or reset($id_objets) == 'NOT') {
885
-			$id_objets = [$id_objets];
886
-		}
887
-		foreach ($id_objets as $id_objet) {
888
-			$args = [
889
-				'table_lien' => $table_lien,
890
-				'objet_source' => $objet_source,
891
-				'id_objet_source' => $id,
892
-				'objet' => $objet,
893
-				'id_objet' => $id_objet,
894
-				'role' => $role,
895
-				'colonne_role' => $colonne_role,
896
-				'action' => 'modifier',
897
-			];
898
-
899
-			// Envoyer aux plugins
900
-			$qualif = pipeline(
901
-				'pre_edition_lien',
902
-				[
903
-					'args' => $args,
904
-					'data' => $qualif,
905
-				]
906
-			);
907
-			$args['id_objet'] = $id_objet;
908
-
909
-			if (lien_triables($table_lien) and isset($qualif['rang_lien'])) {
910
-				if (intval($qualif['rang_lien'])) {
911
-					// on decale les liens de rang_lien>=la valeur inseree pour faire la place
912
-					// sauf sur le meme lien avec un role eventuellement different
913
-					$where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
914
-					$where_meme_lien = implode(' AND ', $where_meme_lien);
915
-					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . intval($qualif['rang_lien']), "NOT($where_meme_lien)"]);
916
-					sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
917
-				}
918
-				// tous les liens de même rôle recoivent le rang indiqué aussi
919
-				if (roles_colonne($objet_source, $objet)) {
920
-					$w = lien_where($primary, $id, $objet, $id_objet);
921
-					sql_updateq($table_lien, ['rang_lien' => intval($qualif['rang_lien'])], $w);
922
-				}
923
-				$reordonner = true;
924
-			}
925
-
926
-			$where = lien_where($primary, $id, $objet, $id_objet, $cond);
927
-			$e = sql_updateq($table_lien, $qualif, $where);
928
-
929
-			if ($e === false) {
930
-				$echec = true;
931
-			} else {
932
-				// Envoyer aux plugins
933
-				pipeline(
934
-					'post_edition_lien',
935
-					[
936
-						'args' => $args,
937
-						'data' => $qualif
938
-					]
939
-				);
940
-				$ok++;
941
-			}
942
-		}
943
-	}
944
-	// si on a fait des modif de rang, on reordonne les liens concernes
945
-	if ($reordonner) {
946
-		lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
947
-	}
948
-
949
-	return ($echec ? false : $ok);
864
+    $echec = null;
865
+    $ok = 0;
866
+    $reordonner = false;
867
+    if (!$qualif) {
868
+        return false;
869
+    }
870
+    // nettoyer qualif qui peut venir directement d'un objet_trouver_lien :
871
+    unset($qualif[$primary]);
872
+    unset($qualif[$objet_source]);
873
+    if (isset($qualif['objet'])) {
874
+        unset($qualif[$qualif['objet']]);
875
+    }
876
+    unset($qualif['objet']);
877
+    unset($qualif['id_objet']);
878
+    foreach ($objets as $objet => $id_objets) {
879
+        // role, colonne, where par défaut
880
+        list($role, $colonne_role, $cond) =
881
+            roles_trouver_dans_qualif($objet_source, $objet, $qualif);
882
+
883
+        $objet = ($objet == '*') ? $objet : objet_type($objet); # securite
884
+        if (!is_array($id_objets) or reset($id_objets) == 'NOT') {
885
+            $id_objets = [$id_objets];
886
+        }
887
+        foreach ($id_objets as $id_objet) {
888
+            $args = [
889
+                'table_lien' => $table_lien,
890
+                'objet_source' => $objet_source,
891
+                'id_objet_source' => $id,
892
+                'objet' => $objet,
893
+                'id_objet' => $id_objet,
894
+                'role' => $role,
895
+                'colonne_role' => $colonne_role,
896
+                'action' => 'modifier',
897
+            ];
898
+
899
+            // Envoyer aux plugins
900
+            $qualif = pipeline(
901
+                'pre_edition_lien',
902
+                [
903
+                    'args' => $args,
904
+                    'data' => $qualif,
905
+                ]
906
+            );
907
+            $args['id_objet'] = $id_objet;
908
+
909
+            if (lien_triables($table_lien) and isset($qualif['rang_lien'])) {
910
+                if (intval($qualif['rang_lien'])) {
911
+                    // on decale les liens de rang_lien>=la valeur inseree pour faire la place
912
+                    // sauf sur le meme lien avec un role eventuellement different
913
+                    $where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
914
+                    $where_meme_lien = implode(' AND ', $where_meme_lien);
915
+                    $w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . intval($qualif['rang_lien']), "NOT($where_meme_lien)"]);
916
+                    sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
917
+                }
918
+                // tous les liens de même rôle recoivent le rang indiqué aussi
919
+                if (roles_colonne($objet_source, $objet)) {
920
+                    $w = lien_where($primary, $id, $objet, $id_objet);
921
+                    sql_updateq($table_lien, ['rang_lien' => intval($qualif['rang_lien'])], $w);
922
+                }
923
+                $reordonner = true;
924
+            }
925
+
926
+            $where = lien_where($primary, $id, $objet, $id_objet, $cond);
927
+            $e = sql_updateq($table_lien, $qualif, $where);
928
+
929
+            if ($e === false) {
930
+                $echec = true;
931
+            } else {
932
+                // Envoyer aux plugins
933
+                pipeline(
934
+                    'post_edition_lien',
935
+                    [
936
+                        'args' => $args,
937
+                        'data' => $qualif
938
+                    ]
939
+                );
940
+                $ok++;
941
+            }
942
+        }
943
+    }
944
+    // si on a fait des modif de rang, on reordonne les liens concernes
945
+    if ($reordonner) {
946
+        lien_ordonner($objet_source, $primary, $table_lien, $id, $objets);
947
+    }
948
+
949
+    return ($echec ? false : $ok);
950 950
 }
951 951
 
952 952
 /**
@@ -976,23 +976,23 @@  discard block
 block discarded – undo
976 976
  * @return array
977 977
  */
978 978
 function lien_find($objet_source, $primary, $table_lien, $id, $objets, $cond = null) {
979
-	$trouve = [];
980
-	foreach ($objets as $objet => $id_objets) {
981
-		$objet = ($objet == '*') ? $objet : objet_type($objet); # securite
982
-		// gerer les roles s'il y en a dans $cond
983
-		list($cond) = roles_creer_condition_role($objet_source, $objet, $cond, true);
984
-		// lien_where prend en charge les $id_objets sous forme int ou array
985
-		$where = lien_where($primary, $id, $objet, $id_objets, $cond);
986
-		$liens = sql_allfetsel('*', $table_lien, $where);
987
-		// ajouter les entrees objet_source et objet cible par convenance
988
-		foreach ($liens as $l) {
989
-			$l[$objet_source] = $l[$primary];
990
-			$l[$l['objet']] = $l['id_objet'];
991
-			$trouve[] = $l;
992
-		}
993
-	}
994
-
995
-	return $trouve;
979
+    $trouve = [];
980
+    foreach ($objets as $objet => $id_objets) {
981
+        $objet = ($objet == '*') ? $objet : objet_type($objet); # securite
982
+        // gerer les roles s'il y en a dans $cond
983
+        list($cond) = roles_creer_condition_role($objet_source, $objet, $cond, true);
984
+        // lien_where prend en charge les $id_objets sous forme int ou array
985
+        $where = lien_where($primary, $id, $objet, $id_objets, $cond);
986
+        $liens = sql_allfetsel('*', $table_lien, $where);
987
+        // ajouter les entrees objet_source et objet cible par convenance
988
+        foreach ($liens as $l) {
989
+            $l[$objet_source] = $l[$primary];
990
+            $l[$l['objet']] = $l['id_objet'];
991
+            $trouve[] = $l;
992
+        }
993
+    }
994
+
995
+    return $trouve;
996 996
 }
997 997
 
998 998
 /**
@@ -1003,26 +1003,26 @@  discard block
 block discarded – undo
1003 1003
  * @param array|int $ids
1004 1004
  */
1005 1005
 function lien_propage_date_modif($objet, $ids) {
1006
-	static $done = [];
1007
-	$hash = md5($objet . serialize($ids));
1008
-
1009
-	// sql_updateq, peut être un rien lent.
1010
-	// On évite de l'appeler 2 fois sur les mêmes choses
1011
-	if (isset($done[$hash])) {
1012
-		return;
1013
-	}
1014
-
1015
-	$trouver_table = charger_fonction('trouver_table', 'base');
1016
-
1017
-	$table = table_objet_sql($objet);
1018
-	if (
1019
-		$desc = $trouver_table($table)
1020
-		and isset($desc['field']['date_modif'])
1021
-	) {
1022
-		$primary = id_table_objet($objet);
1023
-		$where = (is_array($ids) ? sql_in($primary, array_map('intval', $ids)) : "$primary=" . intval($ids));
1024
-		sql_updateq($table, ['date_modif' => date('Y-m-d H:i:s')], $where);
1025
-	}
1026
-
1027
-	$done[$hash] = true;
1006
+    static $done = [];
1007
+    $hash = md5($objet . serialize($ids));
1008
+
1009
+    // sql_updateq, peut être un rien lent.
1010
+    // On évite de l'appeler 2 fois sur les mêmes choses
1011
+    if (isset($done[$hash])) {
1012
+        return;
1013
+    }
1014
+
1015
+    $trouver_table = charger_fonction('trouver_table', 'base');
1016
+
1017
+    $table = table_objet_sql($objet);
1018
+    if (
1019
+        $desc = $trouver_table($table)
1020
+        and isset($desc['field']['date_modif'])
1021
+    ) {
1022
+        $primary = id_table_objet($objet);
1023
+        $where = (is_array($ids) ? sql_in($primary, array_map('intval', $ids)) : "$primary=" . intval($ids));
1024
+        sql_updateq($table, ['date_modif' => date('Y-m-d H:i:s')], $where);
1025
+    }
1026
+
1027
+    $done[$hash] = true;
1028 1028
 }
Please login to merge, or discard this patch.
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
 	$l = '';
54 54
 	if (
55 55
 		$primary = id_table_objet($objet)
56
-		and $trouver_table($l = $table_sql . '_liens', '', true, ['log_missing' => false])
56
+		and $trouver_table($l = $table_sql.'_liens', '', true, ['log_missing' => false])
57 57
 		and !preg_match(',[^\w],', $primary)
58 58
 		and !preg_match(',[^\w],', $l)
59 59
 	) {
@@ -212,7 +212,7 @@  discard block
 block discarded – undo
212 212
  * @return int
213 213
  */
214 214
 function objet_optimiser_liens($objets_source, $objets_lies) {
215
-	spip_log('objet_optimiser_liens : ' . json_encode($objets_source) . ', ' . json_encode($objets_lies), 'genie' . _LOG_DEBUG);
215
+	spip_log('objet_optimiser_liens : '.json_encode($objets_source).', '.json_encode($objets_lies), 'genie'._LOG_DEBUG);
216 216
 	return objet_traiter_liaisons('lien_optimise', $objets_source, $objets_lies);
217 217
 }
218 218
 
@@ -446,7 +446,7 @@  discard block
 block discarded – undo
446 446
 					$where_meme_lien = implode(' AND ', $where_meme_lien);
447 447
 					// on decale les liens de rang_lien>=la valeur inseree pour faire la place
448 448
 					// sauf sur le meme lien avec un role eventuellement different
449
-					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . intval($insertions['rang_lien']), "NOT($where_meme_lien)"]);
449
+					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>='.intval($insertions['rang_lien']), "NOT($where_meme_lien)"]);
450 450
 					sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
451 451
 				}
452 452
 
@@ -511,7 +511,7 @@  discard block
 block discarded – undo
511 511
 					$rang = 1;
512 512
 					foreach ($liens as $lien) {
513 513
 						if (empty($deja_reordonne[$lien[$primary]][$lien['objet']][$lien['id_objet']])) {
514
-							$where = lien_where($primary, $lien[$primary], $lien['objet'], $lien['id_objet'], ['rang_lien!=' . intval($rang)]);
514
+							$where = lien_where($primary, $lien[$primary], $lien['objet'], $lien['id_objet'], ['rang_lien!='.intval($rang)]);
515 515
 							sql_updateq($table_lien, ['rang_lien' => $rang], $where);
516 516
 
517 517
 							if (empty($deja_reordonne[$lien[$primary]])) {
@@ -587,7 +587,7 @@  discard block
 block discarded – undo
587 587
 			addslashes($primary),
588 588
 			array_map('intval', $id_source),
589 589
 			$not
590
-		) : addslashes($primary) . ($not ? '<>' : '=') . intval($id_source));
590
+		) : addslashes($primary).($not ? '<>' : '=').intval($id_source));
591 591
 	} elseif ($not) {
592 592
 		$where[] = '0=1';
593 593
 	} // idiot mais quand meme
@@ -599,14 +599,14 @@  discard block
 block discarded – undo
599 599
 	}
600 600
 
601 601
 	if ($objet !== '*') {
602
-		$where[] = 'objet=' . sql_quote($objet);
602
+		$where[] = 'objet='.sql_quote($objet);
603 603
 	}
604 604
 	if ($id_objet !== '*') {
605 605
 		$where[] = (is_array($id_objet) ? sql_in(
606 606
 			'id_objet',
607 607
 			array_map('intval', $id_objet),
608 608
 			$not
609
-		) : 'id_objet' . ($not ? '<>' : '=') . intval($id_objet));
609
+		) : 'id_objet'.($not ? '<>' : '=').intval($id_objet));
610 610
 	} elseif ($not) {
611 611
 		$where[] = '0=1';
612 612
 	} // idiot mais quand meme
@@ -627,7 +627,7 @@  discard block
 block discarded – undo
627 627
 function lien_rang_where($table_lien, $primary, $id_source, $objet, $id_objet, $cond = []) {
628 628
 
629 629
 	// si on veut compter les rangs autrement que le core ne le fait par defaut, fournir le where adhoc
630
-	if (function_exists($f = 'lien_rang_where_' . $table_lien)) {
630
+	if (function_exists($f = 'lien_rang_where_'.$table_lien)) {
631 631
 		return $f($primary, $id_source, $objet, $id_objet, $cond);
632 632
 	}
633 633
 
@@ -792,8 +792,8 @@  discard block
 block discarded – undo
792 792
 					// il faut les eliminier en repetant la condition dans le where L.objet='xxx'
793 793
 					"$table_lien AS L
794 794
 									LEFT JOIN $spip_table_objet AS O
795
-										ON (O.$id_table_objet=L.id_objet AND L.objet=" . sql_quote($type) . ')',
796
-					'L.objet=' . sql_quote($type) . " AND O.$id_table_objet IS NULL"
795
+										ON (O.$id_table_objet=L.id_objet AND L.objet=".sql_quote($type).')',
796
+					'L.objet='.sql_quote($type)." AND O.$id_table_objet IS NULL"
797 797
 				);
798 798
 				// sur une cle primaire composee, pas d'autres solutions que de virer un a un
799 799
 				while ($row = sql_fetch($res)) {
@@ -802,13 +802,13 @@  discard block
 block discarded – undo
802 802
 					}
803 803
 					$e = sql_delete(
804 804
 						$table_lien,
805
-						["$primary=" . $row['id'], 'id_objet=' . $row['id_objet'], 'objet=' . sql_quote($type)]
805
+						["$primary=".$row['id'], 'id_objet='.$row['id_objet'], 'objet='.sql_quote($type)]
806 806
 					);
807 807
 					if ($e != false) {
808 808
 						$dels += $e;
809 809
 						spip_log(
810
-							'lien_optimise: Entree ' . $row['id'] . '/' . $row['id_objet'] . "/$type supprimee dans la table $table_lien",
811
-							'genie' . _LOG_INFO_IMPORTANTE
810
+							'lien_optimise: Entree '.$row['id'].'/'.$row['id_objet']."/$type supprimee dans la table $table_lien",
811
+							'genie'._LOG_INFO_IMPORTANTE
812 812
 						);
813 813
 					}
814 814
 				}
@@ -912,7 +912,7 @@  discard block
 block discarded – undo
912 912
 					// sauf sur le meme lien avec un role eventuellement different
913 913
 					$where_meme_lien = lien_where($primary, $id, $objet, $id_objet);
914 914
 					$where_meme_lien = implode(' AND ', $where_meme_lien);
915
-					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>=' . intval($qualif['rang_lien']), "NOT($where_meme_lien)"]);
915
+					$w = lien_rang_where($table_lien, $primary, $id, $objet, $id_objet, ['rang_lien>='.intval($qualif['rang_lien']), "NOT($where_meme_lien)"]);
916 916
 					sql_update($table_lien, ['rang_lien' => 'rang_lien+1'], $w);
917 917
 				}
918 918
 				// tous les liens de même rôle recoivent le rang indiqué aussi
@@ -1004,7 +1004,7 @@  discard block
 block discarded – undo
1004 1004
  */
1005 1005
 function lien_propage_date_modif($objet, $ids) {
1006 1006
 	static $done = [];
1007
-	$hash = md5($objet . serialize($ids));
1007
+	$hash = md5($objet.serialize($ids));
1008 1008
 
1009 1009
 	// sql_updateq, peut être un rien lent.
1010 1010
 	// On évite de l'appeler 2 fois sur les mêmes choses
@@ -1020,7 +1020,7 @@  discard block
 block discarded – undo
1020 1020
 		and isset($desc['field']['date_modif'])
1021 1021
 	) {
1022 1022
 		$primary = id_table_objet($objet);
1023
-		$where = (is_array($ids) ? sql_in($primary, array_map('intval', $ids)) : "$primary=" . intval($ids));
1023
+		$where = (is_array($ids) ? sql_in($primary, array_map('intval', $ids)) : "$primary=".intval($ids));
1024 1024
 		sql_updateq($table, ['date_modif' => date('Y-m-d H:i:s')], $where);
1025 1025
 	}
1026 1026
 
Please login to merge, or discard this patch.
ecrire/req/mysql.php 2 patches
Indentation   +833 added lines, -833 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,109 +41,109 @@  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')) {
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
-	if (
50
-		$port and !is_numeric($socket = $port)
51
-		and (!$host or $host == 'localhost')
52
-	) {
53
-		$link = @mysqli_connect($host, $login, $pass, '', null, $socket);
54
-	}
55
-	elseif ($port) {
56
-		$link = @mysqli_connect($host, $login, $pass, '', $port);
57
-	}
58
-	else {
59
-		$link = @mysqli_connect($host, $login, $pass);
60
-	}
61
-
62
-	if (!$link) {
63
-		spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
64
-
65
-		return false;
66
-	}
67
-	$last = '';
68
-	if (!$db) {
69
-		$ok = $link;
70
-		$db = 'spip';
71
-	} else {
72
-		$ok = mysqli_select_db($link, $db);
73
-		if (
74
-			defined('_MYSQL_SET_SQL_MODE')
75
-			or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
76
-		) {
77
-			mysqli_query($link, $last = "set sql_mode=''");
78
-		}
79
-	}
80
-
81
-	spip_log(
82
-		"Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
83
-		_LOG_DEBUG
84
-	);
85
-
86
-	return !$ok ? false : [
87
-		'db' => $db,
88
-		'last' => $last,
89
-		'prefixe' => $prefixe ? $prefixe : $db,
90
-		'link' => $link,
91
-		'total_requetes' => 0,
92
-	];
44
+    if (!extension_loaded('mysqli')) {
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
+    if (
50
+        $port and !is_numeric($socket = $port)
51
+        and (!$host or $host == 'localhost')
52
+    ) {
53
+        $link = @mysqli_connect($host, $login, $pass, '', null, $socket);
54
+    }
55
+    elseif ($port) {
56
+        $link = @mysqli_connect($host, $login, $pass, '', $port);
57
+    }
58
+    else {
59
+        $link = @mysqli_connect($host, $login, $pass);
60
+    }
61
+
62
+    if (!$link) {
63
+        spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
64
+
65
+        return false;
66
+    }
67
+    $last = '';
68
+    if (!$db) {
69
+        $ok = $link;
70
+        $db = 'spip';
71
+    } else {
72
+        $ok = mysqli_select_db($link, $db);
73
+        if (
74
+            defined('_MYSQL_SET_SQL_MODE')
75
+            or defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
76
+        ) {
77
+            mysqli_query($link, $last = "set sql_mode=''");
78
+        }
79
+    }
80
+
81
+    spip_log(
82
+        "Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
83
+        _LOG_DEBUG
84
+    );
85
+
86
+    return !$ok ? false : [
87
+        'db' => $db,
88
+        'last' => $last,
89
+        'prefixe' => $prefixe ? $prefixe : $db,
90
+        'link' => $link,
91
+        'total_requetes' => 0,
92
+    ];
93 93
 }
94 94
 
95 95
 
96 96
 $GLOBALS['spip_mysql_functions_1'] = [
97
-	'alter' => 'spip_mysql_alter',
98
-	'count' => 'spip_mysql_count',
99
-	'countsel' => 'spip_mysql_countsel',
100
-	'create' => 'spip_mysql_create',
101
-	'create_base' => 'spip_mysql_create_base',
102
-	'create_view' => 'spip_mysql_create_view',
103
-	'date_proche' => 'spip_mysql_date_proche',
104
-	'delete' => 'spip_mysql_delete',
105
-	'drop_table' => 'spip_mysql_drop_table',
106
-	'drop_view' => 'spip_mysql_drop_view',
107
-	'errno' => 'spip_mysql_errno',
108
-	'error' => 'spip_mysql_error',
109
-	'explain' => 'spip_mysql_explain',
110
-	'fetch' => 'spip_mysql_fetch',
111
-	'seek' => 'spip_mysql_seek',
112
-	'free' => 'spip_mysql_free',
113
-	'hex' => 'spip_mysql_hex',
114
-	'in' => 'spip_mysql_in',
115
-	'insert' => 'spip_mysql_insert',
116
-	'insertq' => 'spip_mysql_insertq',
117
-	'insertq_multi' => 'spip_mysql_insertq_multi',
118
-	'listdbs' => 'spip_mysql_listdbs',
119
-	'multi' => 'spip_mysql_multi',
120
-	'optimize' => 'spip_mysql_optimize',
121
-	'query' => 'spip_mysql_query',
122
-	'quote' => 'spip_mysql_quote',
123
-	'replace' => 'spip_mysql_replace',
124
-	'replace_multi' => 'spip_mysql_replace_multi',
125
-	'repair' => 'spip_mysql_repair',
126
-	'select' => 'spip_mysql_select',
127
-	'selectdb' => 'spip_mysql_selectdb',
128
-	'set_charset' => 'spip_mysql_set_charset',
129
-	'get_charset' => 'spip_mysql_get_charset',
130
-	'showbase' => 'spip_mysql_showbase',
131
-	'showtable' => 'spip_mysql_showtable',
132
-	'table_exists' => 'spip_mysql_table_exists',
133
-	'update' => 'spip_mysql_update',
134
-	'updateq' => 'spip_mysql_updateq',
135
-
136
-	// association de chaque nom http d'un charset aux couples MySQL
137
-	'charsets' => [
138
-		'cp1250' => ['charset' => 'cp1250', 'collation' => 'cp1250_general_ci'],
139
-		'cp1251' => ['charset' => 'cp1251', 'collation' => 'cp1251_general_ci'],
140
-		'cp1256' => ['charset' => 'cp1256', 'collation' => 'cp1256_general_ci'],
141
-		'iso-8859-1' => ['charset' => 'latin1', 'collation' => 'latin1_swedish_ci'],
97
+    'alter' => 'spip_mysql_alter',
98
+    'count' => 'spip_mysql_count',
99
+    'countsel' => 'spip_mysql_countsel',
100
+    'create' => 'spip_mysql_create',
101
+    'create_base' => 'spip_mysql_create_base',
102
+    'create_view' => 'spip_mysql_create_view',
103
+    'date_proche' => 'spip_mysql_date_proche',
104
+    'delete' => 'spip_mysql_delete',
105
+    'drop_table' => 'spip_mysql_drop_table',
106
+    'drop_view' => 'spip_mysql_drop_view',
107
+    'errno' => 'spip_mysql_errno',
108
+    'error' => 'spip_mysql_error',
109
+    'explain' => 'spip_mysql_explain',
110
+    'fetch' => 'spip_mysql_fetch',
111
+    'seek' => 'spip_mysql_seek',
112
+    'free' => 'spip_mysql_free',
113
+    'hex' => 'spip_mysql_hex',
114
+    'in' => 'spip_mysql_in',
115
+    'insert' => 'spip_mysql_insert',
116
+    'insertq' => 'spip_mysql_insertq',
117
+    'insertq_multi' => 'spip_mysql_insertq_multi',
118
+    'listdbs' => 'spip_mysql_listdbs',
119
+    'multi' => 'spip_mysql_multi',
120
+    'optimize' => 'spip_mysql_optimize',
121
+    'query' => 'spip_mysql_query',
122
+    'quote' => 'spip_mysql_quote',
123
+    'replace' => 'spip_mysql_replace',
124
+    'replace_multi' => 'spip_mysql_replace_multi',
125
+    'repair' => 'spip_mysql_repair',
126
+    'select' => 'spip_mysql_select',
127
+    'selectdb' => 'spip_mysql_selectdb',
128
+    'set_charset' => 'spip_mysql_set_charset',
129
+    'get_charset' => 'spip_mysql_get_charset',
130
+    'showbase' => 'spip_mysql_showbase',
131
+    'showtable' => 'spip_mysql_showtable',
132
+    'table_exists' => 'spip_mysql_table_exists',
133
+    'update' => 'spip_mysql_update',
134
+    'updateq' => 'spip_mysql_updateq',
135
+
136
+    // association de chaque nom http d'un charset aux couples MySQL
137
+    'charsets' => [
138
+        'cp1250' => ['charset' => 'cp1250', 'collation' => 'cp1250_general_ci'],
139
+        'cp1251' => ['charset' => 'cp1251', 'collation' => 'cp1251_general_ci'],
140
+        'cp1256' => ['charset' => 'cp1256', 'collation' => 'cp1256_general_ci'],
141
+        'iso-8859-1' => ['charset' => 'latin1', 'collation' => 'latin1_swedish_ci'],
142 142
 //'iso-8859-6'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
143
-		'iso-8859-9' => ['charset' => 'latin5', 'collation' => 'latin5_turkish_ci'],
143
+        'iso-8859-9' => ['charset' => 'latin5', 'collation' => 'latin5_turkish_ci'],
144 144
 //'iso-8859-15'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
145
-		'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci']
146
-	]
145
+        'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci']
146
+    ]
147 147
 ];
148 148
 
149 149
 
@@ -154,9 +154,9 @@  discard block
 block discarded – undo
154 154
  * @return Object Information de connexion pour mysqli
155 155
  */
156 156
 function _mysql_link($serveur = '') {
157
-	$link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
157
+    $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
158 158
 
159
-	return $link;
159
+    return $link;
160 160
 }
161 161
 
162 162
 
@@ -169,10 +169,10 @@  discard block
 block discarded – undo
169 169
  * @return resource       Ressource de résultats pour fetch()
170 170
  */
171 171
 function spip_mysql_set_charset($charset, $serveur = '', $requeter = true) {
172
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
173
-	spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
172
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
173
+    spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
174 174
 
175
-	return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
175
+    return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
176 176
 }
177 177
 
178 178
 
@@ -185,11 +185,11 @@  discard block
 block discarded – undo
185 185
  * @return array                Description du charset (son nom est dans 'charset')
186 186
  */
187 187
 function spip_mysql_get_charset($charset = [], $serveur = '', $requeter = true) {
188
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
189
-	$connexion['last'] = $c = 'SHOW CHARACTER SET'
190
-		. (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
188
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
189
+    $connexion['last'] = $c = 'SHOW CHARACTER SET'
190
+        . (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
191 191
 
192
-	return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
192
+    return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
193 193
 }
194 194
 
195 195
 /**
@@ -205,66 +205,66 @@  discard block
 block discarded – undo
205 205
  */
206 206
 function spip_mysql_query($query, $serveur = '', $requeter = true) {
207 207
 
208
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
209
-	$prefixe = $connexion['prefixe'];
210
-	$link = $connexion['link'];
211
-	$db = $connexion['db'];
212
-
213
-	$query = _mysql_traite_query($query, $db, $prefixe);
214
-
215
-	// renvoyer la requete inerte si demandee
216
-	if (!$requeter) {
217
-		return $query;
218
-	}
219
-
220
-	if (isset($_GET['var_profile']) or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
221
-		include_spip('public/tracer');
222
-		$t = trace_query_start();
223
-	} else {
224
-		$t = 0;
225
-	}
226
-
227
-	$connexion['last'] = $query;
228
-	$connexion['total_requetes']++;
229
-
230
-	// ajouter un debug utile dans log/mysql-slow.log ?
231
-	$debug = '';
232
-	if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
233
-		if (isset($GLOBALS['debug']['aucasou'])) {
234
-			list(, $id, , $infos) = $GLOBALS['debug']['aucasou'];
235
-			$debug .= "BOUCLE$id @ " . (isset($infos[0]) ? $infos[0] : '') . ' | ';
236
-		}
237
-		if (isset($_SERVER['REQUEST_URI'])) {
238
-			$debug .= $_SERVER['REQUEST_URI'];
239
-		}
240
-		if (!empty($GLOBALS['ip'])) {
241
-			$debug .= ' + ' . $GLOBALS['ip'];
242
-		}
243
-		$debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
244
-	}
245
-
246
-	$r = mysqli_query($link, $query . $debug);
247
-
248
-	//Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
249
-	if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
250
-		if ($e == 2006) { //Si Gone Away on relance une connexion vierge
251
-			//Fermer la connexion defaillante
252
-			mysqli_close($connexion['link']);
253
-			unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
254
-			//Relancer une connexion vierge
255
-			spip_connect($serveur);
256
-			$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
257
-			$link = $connexion['link'];
258
-			//On retente au cas où
259
-			$r = mysqli_query($link, $query . $debug);
260
-		}
261
-	}
262
-
263
-	// Log de l'erreur eventuelle
264
-	if ($e = spip_mysql_errno($serveur)) {
265
-		$e .= spip_mysql_error($query, $serveur);
266
-	} // et du fautif
267
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
208
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
209
+    $prefixe = $connexion['prefixe'];
210
+    $link = $connexion['link'];
211
+    $db = $connexion['db'];
212
+
213
+    $query = _mysql_traite_query($query, $db, $prefixe);
214
+
215
+    // renvoyer la requete inerte si demandee
216
+    if (!$requeter) {
217
+        return $query;
218
+    }
219
+
220
+    if (isset($_GET['var_profile']) or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
221
+        include_spip('public/tracer');
222
+        $t = trace_query_start();
223
+    } else {
224
+        $t = 0;
225
+    }
226
+
227
+    $connexion['last'] = $query;
228
+    $connexion['total_requetes']++;
229
+
230
+    // ajouter un debug utile dans log/mysql-slow.log ?
231
+    $debug = '';
232
+    if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
233
+        if (isset($GLOBALS['debug']['aucasou'])) {
234
+            list(, $id, , $infos) = $GLOBALS['debug']['aucasou'];
235
+            $debug .= "BOUCLE$id @ " . (isset($infos[0]) ? $infos[0] : '') . ' | ';
236
+        }
237
+        if (isset($_SERVER['REQUEST_URI'])) {
238
+            $debug .= $_SERVER['REQUEST_URI'];
239
+        }
240
+        if (!empty($GLOBALS['ip'])) {
241
+            $debug .= ' + ' . $GLOBALS['ip'];
242
+        }
243
+        $debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
244
+    }
245
+
246
+    $r = mysqli_query($link, $query . $debug);
247
+
248
+    //Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
249
+    if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
250
+        if ($e == 2006) { //Si Gone Away on relance une connexion vierge
251
+            //Fermer la connexion defaillante
252
+            mysqli_close($connexion['link']);
253
+            unset($GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]);
254
+            //Relancer une connexion vierge
255
+            spip_connect($serveur);
256
+            $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
257
+            $link = $connexion['link'];
258
+            //On retente au cas où
259
+            $r = mysqli_query($link, $query . $debug);
260
+        }
261
+    }
262
+
263
+    // Log de l'erreur eventuelle
264
+    if ($e = spip_mysql_errno($serveur)) {
265
+        $e .= spip_mysql_error($query, $serveur);
266
+    } // et du fautif
267
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
268 268
 }
269 269
 
270 270
 /**
@@ -279,12 +279,12 @@  discard block
 block discarded – undo
279 279
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
280 280
  */
281 281
 function spip_mysql_alter($query, $serveur = '', $requeter = true) {
282
-	// ici on supprime les ` entourant le nom de table pour permettre
283
-	// la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
284
-	// d'utiliser ceux-ci, copie-colle de phpmyadmin
285
-	$query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
282
+    // ici on supprime les ` entourant le nom de table pour permettre
283
+    // la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
284
+    // d'utiliser ceux-ci, copie-colle de phpmyadmin
285
+    $query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
286 286
 
287
-	return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
287
+    return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
288 288
 }
289 289
 
290 290
 
@@ -297,9 +297,9 @@  discard block
 block discarded – undo
297 297
  * @return bool            Toujours true
298 298
  */
299 299
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
300
-	spip_mysql_query('OPTIMIZE TABLE ' . $table);
300
+    spip_mysql_query('OPTIMIZE TABLE ' . $table);
301 301
 
302
-	return true;
302
+    return true;
303 303
 }
304 304
 
305 305
 
@@ -312,18 +312,18 @@  discard block
 block discarded – undo
312 312
  * @return array           Tableau de l'explication
313 313
  */
314 314
 function spip_mysql_explain($query, $serveur = '', $requeter = true) {
315
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
316
-		return [];
317
-	}
318
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
319
-	$prefixe = $connexion['prefixe'];
320
-	$link = $connexion['link'];
321
-	$db = $connexion['db'];
322
-
323
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
324
-	$r = mysqli_query($link, $query);
325
-
326
-	return spip_mysql_fetch($r, null, $serveur);
315
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
316
+        return [];
317
+    }
318
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
319
+    $prefixe = $connexion['prefixe'];
320
+    $link = $connexion['link'];
321
+    $db = $connexion['db'];
322
+
323
+    $query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
324
+    $r = mysqli_query($link, $query);
325
+
326
+    return spip_mysql_fetch($r, null, $serveur);
327 327
 }
328 328
 
329 329
 
@@ -352,35 +352,35 @@  discard block
 block discarded – undo
352 352
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
353 353
  */
354 354
 function spip_mysql_select(
355
-	$select,
356
-	$from,
357
-	$where = '',
358
-	$groupby = '',
359
-	$orderby = '',
360
-	$limit = '',
361
-	$having = '',
362
-	$serveur = '',
363
-	$requeter = true
355
+    $select,
356
+    $from,
357
+    $where = '',
358
+    $groupby = '',
359
+    $orderby = '',
360
+    $limit = '',
361
+    $having = '',
362
+    $serveur = '',
363
+    $requeter = true
364 364
 ) {
365 365
 
366 366
 
367
-	$from = (!is_array($from) ? $from : spip_mysql_select_as($from));
368
-	$query =
369
-		calculer_mysql_expression('SELECT', $select, ', ')
370
-		. calculer_mysql_expression('FROM', $from, ', ')
371
-		. calculer_mysql_expression('WHERE', $where)
372
-		. calculer_mysql_expression('GROUP BY', $groupby, ',')
373
-		. calculer_mysql_expression('HAVING', $having)
374
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
375
-		. ($limit ? "\nLIMIT $limit" : '');
367
+    $from = (!is_array($from) ? $from : spip_mysql_select_as($from));
368
+    $query =
369
+        calculer_mysql_expression('SELECT', $select, ', ')
370
+        . calculer_mysql_expression('FROM', $from, ', ')
371
+        . calculer_mysql_expression('WHERE', $where)
372
+        . calculer_mysql_expression('GROUP BY', $groupby, ',')
373
+        . calculer_mysql_expression('HAVING', $having)
374
+        . ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
375
+        . ($limit ? "\nLIMIT $limit" : '');
376 376
 
377
-	// renvoyer la requete inerte si demandee
378
-	if ($requeter === false) {
379
-		return $query;
380
-	}
381
-	$r = spip_mysql_query($query, $serveur, $requeter);
377
+    // renvoyer la requete inerte si demandee
378
+    if ($requeter === false) {
379
+        return $query;
380
+    }
381
+    $r = spip_mysql_query($query, $serveur, $requeter);
382 382
 
383
-	return $r ? $r : $query;
383
+    return $r ? $r : $query;
384 384
 }
385 385
 
386 386
 
@@ -397,7 +397,7 @@  discard block
 block discarded – undo
397 397
  * @return string Texte du orderby préparé
398 398
  */
399 399
 function spip_mysql_order($orderby) {
400
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
400
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
401 401
 }
402 402
 
403 403
 
@@ -420,26 +420,26 @@  discard block
 block discarded – undo
420 420
  *     Contrainte pour clause WHERE
421 421
  */
422 422
 function calculer_mysql_where($v) {
423
-	if (!is_array($v)) {
424
-		return $v;
425
-	}
426
-
427
-	$op = array_shift($v);
428
-	if (!($n = count($v))) {
429
-		return $op;
430
-	} else {
431
-		$arg = calculer_mysql_where(array_shift($v));
432
-		if ($n == 1) {
433
-			return "$op($arg)";
434
-		} else {
435
-			$arg2 = calculer_mysql_where(array_shift($v));
436
-			if ($n == 2) {
437
-				return "($arg $op $arg2)";
438
-			} else {
439
-				return "($arg $op ($arg2) : $v[0])";
440
-			}
441
-		}
442
-	}
423
+    if (!is_array($v)) {
424
+        return $v;
425
+    }
426
+
427
+    $op = array_shift($v);
428
+    if (!($n = count($v))) {
429
+        return $op;
430
+    } else {
431
+        $arg = calculer_mysql_where(array_shift($v));
432
+        if ($n == 1) {
433
+            return "$op($arg)";
434
+        } else {
435
+            $arg2 = calculer_mysql_where(array_shift($v));
436
+            if ($n == 2) {
437
+                return "($arg $op $arg2)";
438
+            } else {
439
+                return "($arg $op ($arg2) : $v[0])";
440
+            }
441
+        }
442
+    }
443 443
 }
444 444
 
445 445
 /**
@@ -454,21 +454,21 @@  discard block
 block discarded – undo
454 454
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
455 455
  */
456 456
 function calculer_mysql_expression($expression, $v, $join = 'AND') {
457
-	if (empty($v)) {
458
-		return '';
459
-	}
460
-
461
-	$exp = "\n$expression ";
462
-
463
-	if (!is_array($v)) {
464
-		return $exp . $v;
465
-	} else {
466
-		if (strtoupper($join) === 'AND') {
467
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
468
-		} else {
469
-			return $exp . join($join, $v);
470
-		}
471
-	}
457
+    if (empty($v)) {
458
+        return '';
459
+    }
460
+
461
+    $exp = "\n$expression ";
462
+
463
+    if (!is_array($v)) {
464
+        return $exp . $v;
465
+    } else {
466
+        if (strtoupper($join) === 'AND') {
467
+            return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
468
+        } else {
469
+            return $exp . join($join, $v);
470
+        }
471
+    }
472 472
 }
473 473
 
474 474
 
@@ -479,26 +479,26 @@  discard block
 block discarded – undo
479 479
  * @return string Sélection de colonnes pour une clause SELECT
480 480
  */
481 481
 function spip_mysql_select_as($args) {
482
-	$res = '';
483
-	foreach ($args as $k => $v) {
484
-		if (substr($k, -1) == '@') {
485
-			// c'est une jointure qui se refere au from precedent
486
-			// pas de virgule
487
-			$res .= '  ' . $v;
488
-		} else {
489
-			if (!is_numeric($k)) {
490
-				$p = strpos($v, ' ');
491
-				if ($p) {
492
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
493
-				} else {
494
-					$v .= " AS `$k`";
495
-				}
496
-			}
497
-			$res .= ', ' . $v;
498
-		}
499
-	}
500
-
501
-	return substr($res, 2);
482
+    $res = '';
483
+    foreach ($args as $k => $v) {
484
+        if (substr($k, -1) == '@') {
485
+            // c'est une jointure qui se refere au from precedent
486
+            // pas de virgule
487
+            $res .= '  ' . $v;
488
+        } else {
489
+            if (!is_numeric($k)) {
490
+                $p = strpos($v, ' ');
491
+                if ($p) {
492
+                    $v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
493
+                } else {
494
+                    $v .= " AS `$k`";
495
+                }
496
+            }
497
+            $res .= ', ' . $v;
498
+        }
499
+    }
500
+
501
+    return substr($res, 2);
502 502
 }
503 503
 
504 504
 
@@ -523,58 +523,58 @@  discard block
 block discarded – undo
523 523
  */
524 524
 function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) {
525 525
 
526
-	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
527
-		$pref = '`' . $db . '`.';
528
-	} else {
529
-		$pref = '';
530
-	}
531
-
532
-	if ($prefixe) {
533
-		$pref .= $prefixe . '_';
534
-	}
535
-
536
-	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
537
-		$suite = '';
538
-	} else {
539
-		$suite = strstr($query, $regs[0]);
540
-		$query = substr($query, 0, -strlen($suite));
541
-		// propager le prefixe en cas de requete imbriquee
542
-		// il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
543
-		// modifier une requete qui est en fait juste du texte dans un champ
544
-		if (stripos($suite, 'SELECT') !== false) {
545
-			if ($echappe_textes) {
546
-				list($suite_echap, $textes) = query_echappe_textes($suite);
547
-			}
548
-			else {
549
-				$suite_echap = $suite;
550
-			}
551
-			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
552
-				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
553
-				if ($echappe_textes) {
554
-					$suite = query_reinjecte_textes($suite_echap, $textes);
555
-				}
556
-				else {
557
-					$suite = $suite_echap;
558
-				}
559
-			}
560
-		}
561
-	}
562
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
563
-
564
-	// en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
565
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
566
-	if (
567
-		defined('_MYSQL_NOPLANES')
568
-		and _MYSQL_NOPLANES
569
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
570
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
571
-	) {
572
-		include_spip('inc/charsets');
573
-		$r = utf8_noplanes($r);
574
-	}
575
-
576
-	#spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
577
-	return $r;
526
+    if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
527
+        $pref = '`' . $db . '`.';
528
+    } else {
529
+        $pref = '';
530
+    }
531
+
532
+    if ($prefixe) {
533
+        $pref .= $prefixe . '_';
534
+    }
535
+
536
+    if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
537
+        $suite = '';
538
+    } else {
539
+        $suite = strstr($query, $regs[0]);
540
+        $query = substr($query, 0, -strlen($suite));
541
+        // propager le prefixe en cas de requete imbriquee
542
+        // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
543
+        // modifier une requete qui est en fait juste du texte dans un champ
544
+        if (stripos($suite, 'SELECT') !== false) {
545
+            if ($echappe_textes) {
546
+                list($suite_echap, $textes) = query_echappe_textes($suite);
547
+            }
548
+            else {
549
+                $suite_echap = $suite;
550
+            }
551
+            if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
552
+                $suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
553
+                if ($echappe_textes) {
554
+                    $suite = query_reinjecte_textes($suite_echap, $textes);
555
+                }
556
+                else {
557
+                    $suite = $suite_echap;
558
+                }
559
+            }
560
+        }
561
+    }
562
+    $r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
563
+
564
+    // en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
565
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
566
+    if (
567
+        defined('_MYSQL_NOPLANES')
568
+        and _MYSQL_NOPLANES
569
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
570
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
571
+    ) {
572
+        include_spip('inc/charsets');
573
+        $r = utf8_noplanes($r);
574
+    }
575
+
576
+    #spip_log("_mysql_traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
577
+    return $r;
578 578
 }
579 579
 
580 580
 /**
@@ -592,13 +592,13 @@  discard block
 block discarded – undo
592 592
  *     - False en cas d'erreur.
593 593
  **/
594 594
 function spip_mysql_selectdb($db, $serveur = '', $requeter = true) {
595
-	$link = _mysql_link($serveur);
596
-	$ok = mysqli_select_db($link, $db);
597
-	if (!$ok) {
598
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
599
-	}
595
+    $link = _mysql_link($serveur);
596
+    $ok = mysqli_select_db($link, $db);
597
+    if (!$ok) {
598
+        spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
599
+    }
600 600
 
601
-	return $ok;
601
+    return $ok;
602 602
 }
603 603
 
604 604
 
@@ -619,14 +619,14 @@  discard block
 block discarded – undo
619 619
  *     Liste de noms de bases de données
620 620
  **/
621 621
 function spip_mysql_listdbs($serveur = '', $requeter = true) {
622
-	$dbs = [];
623
-	if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
624
-		while ($row = mysqli_fetch_assoc($res)) {
625
-			$dbs[] = $row['Database'];
626
-		}
627
-	}
628
-
629
-	return $dbs;
622
+    $dbs = [];
623
+    if ($res = spip_mysql_query('SHOW DATABASES', $serveur)) {
624
+        while ($row = mysqli_fetch_assoc($res)) {
625
+            $dbs[] = $row['Database'];
626
+        }
627
+    }
628
+
629
+    return $dbs;
630 630
 }
631 631
 
632 632
 
@@ -649,73 +649,73 @@  discard block
 block discarded – undo
649 649
  *     - true si la requête réussie, false sinon.
650 650
  */
651 651
 function spip_mysql_create(
652
-	$nom,
653
-	$champs,
654
-	$cles,
655
-	$autoinc = false,
656
-	$temporary = false,
657
-	$serveur = '',
658
-	$requeter = true
652
+    $nom,
653
+    $champs,
654
+    $cles,
655
+    $autoinc = false,
656
+    $temporary = false,
657
+    $serveur = '',
658
+    $requeter = true
659 659
 ) {
660 660
 
661
-	$query = '';
662
-	$keys = '';
663
-	$s = '';
664
-	$p = '';
665
-
666
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
667
-	// sans les renseigner (laisse le compilo recuperer la description)
668
-	if (!is_array($champs) || !is_array($cles)) {
669
-		return;
670
-	}
671
-
672
-	$res = spip_mysql_query('SELECT version() as v', $serveur);
673
-	if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
674
-		spip_mysql_query("SET sql_mode=''", $serveur);
675
-	}
676
-
677
-	foreach ($cles as $k => $v) {
678
-		$keys .= "$s\n\t\t$k ($v)";
679
-		if ($k == 'PRIMARY KEY') {
680
-			$p = $v;
681
-		}
682
-		$s = ',';
683
-	}
684
-	$s = '';
685
-
686
-	$character_set = '';
687
-	if (@$GLOBALS['meta']['charset_sql_base']) {
688
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
689
-	}
690
-	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
691
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
692
-	}
693
-
694
-	foreach ($champs as $k => $v) {
695
-		$v = _mysql_remplacements_definitions_table($v);
696
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
697
-			if (
698
-				preg_match(',(char|text),i', $defs[1])
699
-				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
700
-			) {
701
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
702
-			}
703
-		}
704
-
705
-		$query .= "$s\n\t\t$k $v"
706
-			. (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
707
-				? ' auto_increment'
708
-				: ''
709
-			);
710
-		$s = ',';
711
-	}
712
-	$temporary = $temporary ? 'TEMPORARY' : '';
713
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
714
-		. ' ENGINE=MyISAM'
715
-		. ($character_set ? " DEFAULT $character_set" : '')
716
-		. "\n";
717
-
718
-	return spip_mysql_query($q, $serveur);
661
+    $query = '';
662
+    $keys = '';
663
+    $s = '';
664
+    $p = '';
665
+
666
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
667
+    // sans les renseigner (laisse le compilo recuperer la description)
668
+    if (!is_array($champs) || !is_array($cles)) {
669
+        return;
670
+    }
671
+
672
+    $res = spip_mysql_query('SELECT version() as v', $serveur);
673
+    if (($row = mysqli_fetch_array($res)) && (version_compare($row['v'], '5.0', '>='))) {
674
+        spip_mysql_query("SET sql_mode=''", $serveur);
675
+    }
676
+
677
+    foreach ($cles as $k => $v) {
678
+        $keys .= "$s\n\t\t$k ($v)";
679
+        if ($k == 'PRIMARY KEY') {
680
+            $p = $v;
681
+        }
682
+        $s = ',';
683
+    }
684
+    $s = '';
685
+
686
+    $character_set = '';
687
+    if (@$GLOBALS['meta']['charset_sql_base']) {
688
+        $character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
689
+    }
690
+    if (@$GLOBALS['meta']['charset_collation_sql_base']) {
691
+        $character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
692
+    }
693
+
694
+    foreach ($champs as $k => $v) {
695
+        $v = _mysql_remplacements_definitions_table($v);
696
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i', $v, $defs)) {
697
+            if (
698
+                preg_match(',(char|text),i', $defs[1])
699
+                and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
700
+            ) {
701
+                $v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
702
+            }
703
+        }
704
+
705
+        $query .= "$s\n\t\t$k $v"
706
+            . (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
707
+                ? ' auto_increment'
708
+                : ''
709
+            );
710
+        $s = ',';
711
+    }
712
+    $temporary = $temporary ? 'TEMPORARY' : '';
713
+    $q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
714
+        . ' ENGINE=MyISAM'
715
+        . ($character_set ? " DEFAULT $character_set" : '')
716
+        . "\n";
717
+
718
+    return spip_mysql_query($q, $serveur);
719 719
 }
720 720
 
721 721
 
@@ -728,25 +728,25 @@  discard block
 block discarded – undo
728 728
  *     Définition SQL adaptée pour MySQL d'un champ de table
729 729
  */
730 730
 function _mysql_remplacements_definitions_table($query) {
731
-	// quelques remplacements
732
-	$num = '(\s*\([0-9]*\))?';
733
-	$enum = '(\s*\([^\)]*\))?';
734
-
735
-	$remplace = [
736
-		'/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
737
-		'/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
738
-	];
739
-
740
-	if (is_string($query)) {
741
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
742
-	} elseif (is_array($query)) {
743
-		$keys = array_keys($remplace);
744
-		foreach ($query as $k => $q) {
745
-			$query[$k] = preg_replace($keys, $remplace, $q);
746
-		}
747
-	}
748
-
749
-	return $query;
731
+    // quelques remplacements
732
+    $num = '(\s*\([0-9]*\))?';
733
+    $enum = '(\s*\([^\)]*\))?';
734
+
735
+    $remplace = [
736
+        '/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
737
+        '/^TIMESTAMP($| NULL DEFAULT NULL)/is' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
738
+    ];
739
+
740
+    if (is_string($query)) {
741
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
742
+    } elseif (is_array($query)) {
743
+        $keys = array_keys($remplace);
744
+        foreach ($query as $k => $q) {
745
+            $query[$k] = preg_replace($keys, $remplace, $q);
746
+        }
747
+    }
748
+
749
+    return $query;
750 750
 }
751 751
 
752 752
 
@@ -759,7 +759,7 @@  discard block
 block discarded – undo
759 759
  * @return bool true si la base est créee.
760 760
  **/
761 761
 function spip_mysql_create_base($nom, $serveur = '', $requeter = true) {
762
-	return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
762
+    return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
763 763
 }
764 764
 
765 765
 
@@ -780,19 +780,19 @@  discard block
 block discarded – undo
780 780
  *     - string texte de la requête si $requeter vaut false
781 781
  */
782 782
 function spip_mysql_create_view($nom, $query_select, $serveur = '', $requeter = true) {
783
-	if (!$query_select) {
784
-		return false;
785
-	}
786
-	// vue deja presente
787
-	if (sql_showtable($nom, false, $serveur)) {
788
-		spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
783
+    if (!$query_select) {
784
+        return false;
785
+    }
786
+    // vue deja presente
787
+    if (sql_showtable($nom, false, $serveur)) {
788
+        spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
789 789
 
790
-		return false;
791
-	}
790
+        return false;
791
+    }
792 792
 
793
-	$query = "CREATE VIEW $nom AS " . $query_select;
793
+    $query = "CREATE VIEW $nom AS " . $query_select;
794 794
 
795
-	return spip_mysql_query($query, $serveur, $requeter);
795
+    return spip_mysql_query($query, $serveur, $requeter);
796 796
 }
797 797
 
798 798
 
@@ -808,11 +808,11 @@  discard block
 block discarded – undo
808 808
  *     - true si la requête a réussie, false sinon
809 809
  */
810 810
 function spip_mysql_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
811
-	if ($exist) {
812
-		$exist = ' IF EXISTS';
813
-	}
811
+    if ($exist) {
812
+        $exist = ' IF EXISTS';
813
+    }
814 814
 
815
-	return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
815
+    return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
816 816
 }
817 817
 
818 818
 /**
@@ -827,11 +827,11 @@  discard block
 block discarded – undo
827 827
  *     - true si la requête a réussie, false sinon
828 828
  */
829 829
 function spip_mysql_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
830
-	if ($exist) {
831
-		$exist = ' IF EXISTS';
832
-	}
830
+    if ($exist) {
831
+        $exist = ' IF EXISTS';
832
+    }
833 833
 
834
-	return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
834
+    return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
835 835
 }
836 836
 
837 837
 /**
@@ -848,7 +848,7 @@  discard block
 block discarded – undo
848 848
  *     Ressource à utiliser avec sql_fetch()
849 849
  **/
850 850
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
851
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
851
+    return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
852 852
 }
853 853
 
854 854
 /**
@@ -864,7 +864,7 @@  discard block
 block discarded – undo
864 864
  *     - true si la requête a réussie, false sinon
865 865
  */
866 866
 function spip_mysql_repair($table, $serveur = '', $requeter = true) {
867
-	return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
867
+    return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
868 868
 }
869 869
 
870 870
 /**
@@ -881,12 +881,12 @@  discard block
 block discarded – undo
881 881
  *     Ressource à utiliser avec sql_fetch()
882 882
  **/
883 883
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
884
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
885
-	if (!$requeter) {
886
-		return $r;
887
-	}
888
-	$res = spip_mysql_fetch($r);
889
-	return (bool) $res;
884
+    $r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
885
+    if (!$requeter) {
886
+        return $r;
887
+    }
888
+    $res = spip_mysql_fetch($r);
889
+    return (bool) $res;
890 890
 }
891 891
 
892 892
 define('_MYSQL_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -909,86 +909,86 @@  discard block
 block discarded – undo
909 909
  *     - array description de la table sinon
910 910
  */
911 911
 function spip_mysql_showtable($nom_table, $serveur = '', $requeter = true) {
912
-	$s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
913
-	if (!$s) {
914
-		return '';
915
-	}
916
-	if (!$requeter) {
917
-		return $s;
918
-	}
919
-
920
-	list(, $a) = mysqli_fetch_array($s, MYSQLI_NUM);
921
-	if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
922
-		$desc = $r[1];
923
-		// extraction d'une KEY éventuelle en prenant garde de ne pas
924
-		// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
925
-		if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
926
-			$namedkeys = $r[2];
927
-			$desc = $r[1];
928
-		} else {
929
-			$namedkeys = '';
930
-		}
931
-
932
-		$fields = [];
933
-		foreach (preg_split('/,\s*`/', $desc) as $v) {
934
-			preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
935
-			$fields[strtolower($r[1])] = $r[2];
936
-		}
937
-		$keys = [];
938
-
939
-		foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
940
-			if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
941
-				$k = str_replace('`', '', trim($r[1]));
942
-				$t = strtolower(str_replace('`', '', $r[2]));
943
-				if ($k && !isset($keys[$k])) {
944
-					$keys[$k] = $t;
945
-				} else {
946
-					$keys[] = $t;
947
-				}
948
-			}
949
-		}
950
-		spip_mysql_free($s);
951
-
952
-		return ['field' => $fields, 'key' => $keys];
953
-	}
954
-
955
-	$res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
956
-	if ($res) {
957
-		$nfields = [];
958
-		$nkeys = [];
959
-		while ($val = spip_mysql_fetch($res)) {
960
-			$nfields[$val['Field']] = $val['Type'];
961
-			if ($val['Null'] == 'NO') {
962
-				$nfields[$val['Field']] .= ' NOT NULL';
963
-			}
964
-			if ($val['Default'] === '0' || $val['Default']) {
965
-				if (preg_match('/[A-Z_]/', $val['Default'])) {
966
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
967
-				} else {
968
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
969
-				}
970
-			}
971
-			if ($val['Extra']) {
972
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
973
-			}
974
-			if ($val['Key'] == 'PRI') {
975
-				$nkeys['PRIMARY KEY'] = $val['Field'];
976
-			} else {
977
-				if ($val['Key'] == 'MUL') {
978
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
979
-				} else {
980
-					if ($val['Key'] == 'UNI') {
981
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
982
-					}
983
-				}
984
-			}
985
-		}
986
-		spip_mysql_free($res);
987
-
988
-		return ['field' => $nfields, 'key' => $nkeys];
989
-	}
990
-
991
-	return '';
912
+    $s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
913
+    if (!$s) {
914
+        return '';
915
+    }
916
+    if (!$requeter) {
917
+        return $s;
918
+    }
919
+
920
+    list(, $a) = mysqli_fetch_array($s, MYSQLI_NUM);
921
+    if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)) {
922
+        $desc = $r[1];
923
+        // extraction d'une KEY éventuelle en prenant garde de ne pas
924
+        // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
925
+        if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
926
+            $namedkeys = $r[2];
927
+            $desc = $r[1];
928
+        } else {
929
+            $namedkeys = '';
930
+        }
931
+
932
+        $fields = [];
933
+        foreach (preg_split('/,\s*`/', $desc) as $v) {
934
+            preg_match('/^\s*`?([^`]*)`\s*(.*)/', $v, $r);
935
+            $fields[strtolower($r[1])] = $r[2];
936
+        }
937
+        $keys = [];
938
+
939
+        foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
940
+            if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
941
+                $k = str_replace('`', '', trim($r[1]));
942
+                $t = strtolower(str_replace('`', '', $r[2]));
943
+                if ($k && !isset($keys[$k])) {
944
+                    $keys[$k] = $t;
945
+                } else {
946
+                    $keys[] = $t;
947
+                }
948
+            }
949
+        }
950
+        spip_mysql_free($s);
951
+
952
+        return ['field' => $fields, 'key' => $keys];
953
+    }
954
+
955
+    $res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
956
+    if ($res) {
957
+        $nfields = [];
958
+        $nkeys = [];
959
+        while ($val = spip_mysql_fetch($res)) {
960
+            $nfields[$val['Field']] = $val['Type'];
961
+            if ($val['Null'] == 'NO') {
962
+                $nfields[$val['Field']] .= ' NOT NULL';
963
+            }
964
+            if ($val['Default'] === '0' || $val['Default']) {
965
+                if (preg_match('/[A-Z_]/', $val['Default'])) {
966
+                    $nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
967
+                } else {
968
+                    $nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
969
+                }
970
+            }
971
+            if ($val['Extra']) {
972
+                $nfields[$val['Field']] .= ' ' . $val['Extra'];
973
+            }
974
+            if ($val['Key'] == 'PRI') {
975
+                $nkeys['PRIMARY KEY'] = $val['Field'];
976
+            } else {
977
+                if ($val['Key'] == 'MUL') {
978
+                    $nkeys['KEY ' . $val['Field']] = $val['Field'];
979
+                } else {
980
+                    if ($val['Key'] == 'UNI') {
981
+                        $nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
982
+                    }
983
+                }
984
+            }
985
+        }
986
+        spip_mysql_free($res);
987
+
988
+        return ['field' => $nfields, 'key' => $nkeys];
989
+    }
990
+
991
+    return '';
992 992
 }
993 993
 
994 994
 
@@ -1004,12 +1004,12 @@  discard block
 block discarded – undo
1004 1004
  * @return array           Ligne de résultat
1005 1005
  */
1006 1006
 function spip_mysql_fetch($r, $t = '', $serveur = '', $requeter = true) {
1007
-	if (!$t) {
1008
-		$t = MYSQLI_ASSOC;
1009
-	}
1010
-	if ($r) {
1011
-		return mysqli_fetch_array($r, $t);
1012
-	}
1007
+    if (!$t) {
1008
+        $t = MYSQLI_ASSOC;
1009
+    }
1010
+    if ($r) {
1011
+        return mysqli_fetch_array($r, $t);
1012
+    }
1013 1013
 }
1014 1014
 
1015 1015
 /**
@@ -1022,9 +1022,9 @@  discard block
 block discarded – undo
1022 1022
  * @return bool True si déplacement réussi, false sinon.
1023 1023
  **/
1024 1024
 function spip_mysql_seek($r, $row_number, $serveur = '', $requeter = true) {
1025
-	if ($r and mysqli_num_rows($r)) {
1026
-		return mysqli_data_seek($r, $row_number);
1027
-	}
1025
+    if ($r and mysqli_num_rows($r)) {
1026
+        return mysqli_data_seek($r, $row_number);
1027
+    }
1028 1028
 }
1029 1029
 
1030 1030
 
@@ -1042,26 +1042,26 @@  discard block
 block discarded – undo
1042 1042
  *     - int Nombre de lignes (0 si la requête n'a pas réussie)
1043 1043
  **/
1044 1044
 function spip_mysql_countsel(
1045
-	$from = [],
1046
-	$where = [],
1047
-	$groupby = '',
1048
-	$having = [],
1049
-	$serveur = '',
1050
-	$requeter = true
1045
+    $from = [],
1046
+    $where = [],
1047
+    $groupby = '',
1048
+    $having = [],
1049
+    $serveur = '',
1050
+    $requeter = true
1051 1051
 ) {
1052
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1053
-
1054
-	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1055
-	if (!$requeter) {
1056
-		return $r;
1057
-	}
1058
-	if (!$r instanceof mysqli_result) {
1059
-		return 0;
1060
-	}
1061
-	list($c) = mysqli_fetch_array($r, MYSQLI_NUM);
1062
-	mysqli_free_result($r);
1063
-
1064
-	return $c;
1052
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1053
+
1054
+    $r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1055
+    if (!$requeter) {
1056
+        return $r;
1057
+    }
1058
+    if (!$r instanceof mysqli_result) {
1059
+        return 0;
1060
+    }
1061
+    list($c) = mysqli_fetch_array($r, MYSQLI_NUM);
1062
+    mysqli_free_result($r);
1063
+
1064
+    return $c;
1065 1065
 }
1066 1066
 
1067 1067
 
@@ -1084,16 +1084,16 @@  discard block
 block discarded – undo
1084 1084
  *     Erreur eventuelle
1085 1085
  **/
1086 1086
 function spip_mysql_error($query = '', $serveur = '', $requeter = true) {
1087
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1088
-	$s = mysqli_error($link);
1089
-	if ($s) {
1090
-		$trace = debug_backtrace();
1091
-		if ($trace[0]['function'] != 'spip_mysql_error') {
1092
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1093
-		}
1094
-	}
1095
-
1096
-	return $s;
1087
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1088
+    $s = mysqli_error($link);
1089
+    if ($s) {
1090
+        $trace = debug_backtrace();
1091
+        if ($trace[0]['function'] != 'spip_mysql_error') {
1092
+            spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1093
+        }
1094
+    }
1095
+
1096
+    return $s;
1097 1097
 }
1098 1098
 
1099 1099
 
@@ -1108,18 +1108,18 @@  discard block
 block discarded – undo
1108 1108
  *     0, pas d'erreur. Autre, numéro de l'erreur.
1109 1109
  **/
1110 1110
 function spip_mysql_errno($serveur = '', $requeter = true) {
1111
-	$link = $GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
1112
-	$s = mysqli_errno($link);
1113
-	// 2006 MySQL server has gone away
1114
-	// 2013 Lost connection to MySQL server during query
1115
-	if (in_array($s, [2006, 2013])) {
1116
-		define('spip_interdire_cache', true);
1117
-	}
1118
-	if ($s) {
1119
-		spip_log("Erreur mysql $s", _LOG_ERREUR);
1120
-	}
1121
-
1122
-	return $s;
1111
+    $link = $GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
1112
+    $s = mysqli_errno($link);
1113
+    // 2006 MySQL server has gone away
1114
+    // 2013 Lost connection to MySQL server during query
1115
+    if (in_array($s, [2006, 2013])) {
1116
+        define('spip_interdire_cache', true);
1117
+    }
1118
+    if ($s) {
1119
+        spip_log("Erreur mysql $s", _LOG_ERREUR);
1120
+    }
1121
+
1122
+    return $s;
1123 1123
 }
1124 1124
 
1125 1125
 
@@ -1133,9 +1133,9 @@  discard block
 block discarded – undo
1133 1133
  * @return int               Nombre de lignes
1134 1134
  */
1135 1135
 function spip_mysql_count($r, $serveur = '', $requeter = true) {
1136
-	if ($r) {
1137
-		return mysqli_num_rows($r);
1138
-	}
1136
+    if ($r) {
1137
+        return mysqli_num_rows($r);
1138
+    }
1139 1139
 }
1140 1140
 
1141 1141
 
@@ -1151,7 +1151,7 @@  discard block
 block discarded – undo
1151 1151
  * @return bool              True si réussi
1152 1152
  */
1153 1153
 function spip_mysql_free($r, $serveur = '', $requeter = true) {
1154
-	return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1154
+    return (($r instanceof mysqli_result) ? mysqli_free_result($r) : false);
1155 1155
 }
1156 1156
 
1157 1157
 
@@ -1179,49 +1179,49 @@  discard block
 block discarded – undo
1179 1179
  **/
1180 1180
 function spip_mysql_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1181 1181
 
1182
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1183
-	$link = $connexion['link'];
1184
-	$table = prefixer_table_spip($table, $connexion['prefixe']);
1185
-
1186
-	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1187
-	if (
1188
-		defined('_MYSQL_NOPLANES')
1189
-		and _MYSQL_NOPLANES
1190
-		and !empty($GLOBALS['meta']['charset_sql_connexion'])
1191
-		and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1192
-	) {
1193
-		include_spip('inc/charsets');
1194
-		$valeurs = utf8_noplanes($valeurs);
1195
-	}
1196
-
1197
-	$query = "INSERT INTO $table $champs VALUES $valeurs";
1198
-	if (!$requeter) {
1199
-		return $query;
1200
-	}
1201
-
1202
-	if (isset($_GET['var_profile'])) {
1203
-		include_spip('public/tracer');
1204
-		$t = trace_query_start();
1205
-		$e = '';
1206
-	} else {
1207
-		$t = 0;
1208
-	}
1209
-
1210
-	$connexion['last'] = $query;
1211
-	#spip_log($query, 'mysql.'._LOG_DEBUG);
1212
-	$r = false;
1213
-	if (mysqli_query($link, $query)) {
1214
-		$r = mysqli_insert_id($link);
1215
-	} else {
1216
-		// Log de l'erreur eventuelle
1217
-		if ($e = spip_mysql_errno($serveur)) {
1218
-			$e .= spip_mysql_error($query, $serveur);
1219
-		} // et du fautif
1220
-	}
1221
-
1222
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1223
-
1224
-	// return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1182
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1183
+    $link = $connexion['link'];
1184
+    $table = prefixer_table_spip($table, $connexion['prefixe']);
1185
+
1186
+    // remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
1187
+    if (
1188
+        defined('_MYSQL_NOPLANES')
1189
+        and _MYSQL_NOPLANES
1190
+        and !empty($GLOBALS['meta']['charset_sql_connexion'])
1191
+        and $GLOBALS['meta']['charset_sql_connexion'] == 'utf8'
1192
+    ) {
1193
+        include_spip('inc/charsets');
1194
+        $valeurs = utf8_noplanes($valeurs);
1195
+    }
1196
+
1197
+    $query = "INSERT INTO $table $champs VALUES $valeurs";
1198
+    if (!$requeter) {
1199
+        return $query;
1200
+    }
1201
+
1202
+    if (isset($_GET['var_profile'])) {
1203
+        include_spip('public/tracer');
1204
+        $t = trace_query_start();
1205
+        $e = '';
1206
+    } else {
1207
+        $t = 0;
1208
+    }
1209
+
1210
+    $connexion['last'] = $query;
1211
+    #spip_log($query, 'mysql.'._LOG_DEBUG);
1212
+    $r = false;
1213
+    if (mysqli_query($link, $query)) {
1214
+        $r = mysqli_insert_id($link);
1215
+    } else {
1216
+        // Log de l'erreur eventuelle
1217
+        if ($e = spip_mysql_errno($serveur)) {
1218
+            $e .= spip_mysql_error($query, $serveur);
1219
+        } // et du fautif
1220
+    }
1221
+
1222
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
1223
+
1224
+    // return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
1225 1225
 }
1226 1226
 
1227 1227
 /**
@@ -1246,26 +1246,26 @@  discard block
 block discarded – undo
1246 1246
  **/
1247 1247
 function spip_mysql_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
1248 1248
 
1249
-	if (!$desc) {
1250
-		$desc = description_table($table, $serveur);
1251
-	}
1252
-	if (!$desc) {
1253
-		$couples = [];
1254
-	}
1255
-	$fields = isset($desc['field']) ? $desc['field'] : [];
1256
-
1257
-	foreach ($couples as $champ => $val) {
1258
-		$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1259
-	}
1260
-
1261
-	return spip_mysql_insert(
1262
-		$table,
1263
-		'(' . join(',', array_keys($couples)) . ')',
1264
-		'(' . join(',', $couples) . ')',
1265
-		$desc,
1266
-		$serveur,
1267
-		$requeter
1268
-	);
1249
+    if (!$desc) {
1250
+        $desc = description_table($table, $serveur);
1251
+    }
1252
+    if (!$desc) {
1253
+        $couples = [];
1254
+    }
1255
+    $fields = isset($desc['field']) ? $desc['field'] : [];
1256
+
1257
+    foreach ($couples as $champ => $val) {
1258
+        $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1259
+    }
1260
+
1261
+    return spip_mysql_insert(
1262
+        $table,
1263
+        '(' . join(',', array_keys($couples)) . ')',
1264
+        '(' . join(',', $couples) . ')',
1265
+        $desc,
1266
+        $serveur,
1267
+        $requeter
1268
+    );
1269 1269
 }
1270 1270
 
1271 1271
 
@@ -1290,34 +1290,34 @@  discard block
 block discarded – undo
1290 1290
  **/
1291 1291
 function spip_mysql_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
1292 1292
 
1293
-	if (!$desc) {
1294
-		$desc = description_table($table, $serveur);
1295
-	}
1296
-	if (!$desc) {
1297
-		$tab_couples = [];
1298
-	}
1299
-	$fields = isset($desc['field']) ? $desc['field'] : [];
1300
-
1301
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1302
-	$valeurs = [];
1303
-	$r = false;
1304
-
1305
-	// Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1306
-	foreach ($tab_couples as $couples) {
1307
-		foreach ($couples as $champ => $val) {
1308
-			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1309
-		}
1310
-		$valeurs[] = '(' . join(',', $couples) . ')';
1311
-		if (count($valeurs) >= 100) {
1312
-			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1313
-			$valeurs = [];
1314
-		}
1315
-	}
1316
-	if (count($valeurs)) {
1317
-		$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1318
-	}
1319
-
1320
-	return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1293
+    if (!$desc) {
1294
+        $desc = description_table($table, $serveur);
1295
+    }
1296
+    if (!$desc) {
1297
+        $tab_couples = [];
1298
+    }
1299
+    $fields = isset($desc['field']) ? $desc['field'] : [];
1300
+
1301
+    $cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1302
+    $valeurs = [];
1303
+    $r = false;
1304
+
1305
+    // Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
1306
+    foreach ($tab_couples as $couples) {
1307
+        foreach ($couples as $champ => $val) {
1308
+            $couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1309
+        }
1310
+        $valeurs[] = '(' . join(',', $couples) . ')';
1311
+        if (count($valeurs) >= 100) {
1312
+            $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1313
+            $valeurs = [];
1314
+        }
1315
+    }
1316
+    if (count($valeurs)) {
1317
+        $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1318
+    }
1319
+
1320
+    return $r; // dans le cas d'une table auto_increment, le dernier insert_id
1321 1321
 }
1322 1322
 
1323 1323
 /**
@@ -1342,19 +1342,19 @@  discard block
 block discarded – undo
1342 1342
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1343 1343
  */
1344 1344
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1345
-	$set = [];
1346
-	foreach ($champs as $champ => $val) {
1347
-		$set[] = $champ . "=$val";
1348
-	}
1349
-	if (!empty($set)) {
1350
-		return spip_mysql_query(
1351
-			calculer_mysql_expression('UPDATE', $table, ',')
1352
-			. calculer_mysql_expression('SET', $set, ',')
1353
-			. calculer_mysql_expression('WHERE', $where),
1354
-			$serveur,
1355
-			$requeter
1356
-		);
1357
-	}
1345
+    $set = [];
1346
+    foreach ($champs as $champ => $val) {
1347
+        $set[] = $champ . "=$val";
1348
+    }
1349
+    if (!empty($set)) {
1350
+        return spip_mysql_query(
1351
+            calculer_mysql_expression('UPDATE', $table, ',')
1352
+            . calculer_mysql_expression('SET', $set, ',')
1353
+            . calculer_mysql_expression('WHERE', $where),
1354
+            $serveur,
1355
+            $requeter
1356
+        );
1357
+    }
1358 1358
 }
1359 1359
 
1360 1360
 /**
@@ -1387,29 +1387,29 @@  discard block
 block discarded – undo
1387 1387
  */
1388 1388
 function spip_mysql_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1389 1389
 
1390
-	if (!$champs) {
1391
-		return;
1392
-	}
1393
-	if (!$desc) {
1394
-		$desc = description_table($table, $serveur);
1395
-	}
1396
-	if (!$desc) {
1397
-		$champs = [];
1398
-	} else {
1399
-		$fields = $desc['field'];
1400
-	}
1401
-	$set = [];
1402
-	foreach ($champs as $champ => $val) {
1403
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1404
-	}
1405
-
1406
-	return spip_mysql_query(
1407
-		calculer_mysql_expression('UPDATE', $table, ',')
1408
-		. calculer_mysql_expression('SET', $set, ',')
1409
-		. calculer_mysql_expression('WHERE', $where),
1410
-		$serveur,
1411
-		$requeter
1412
-	);
1390
+    if (!$champs) {
1391
+        return;
1392
+    }
1393
+    if (!$desc) {
1394
+        $desc = description_table($table, $serveur);
1395
+    }
1396
+    if (!$desc) {
1397
+        $champs = [];
1398
+    } else {
1399
+        $fields = $desc['field'];
1400
+    }
1401
+    $set = [];
1402
+    foreach ($champs as $champ => $val) {
1403
+        $set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1404
+    }
1405
+
1406
+    return spip_mysql_query(
1407
+        calculer_mysql_expression('UPDATE', $table, ',')
1408
+        . calculer_mysql_expression('SET', $set, ',')
1409
+        . calculer_mysql_expression('WHERE', $where),
1410
+        $serveur,
1411
+        $requeter
1412
+    );
1413 1413
 }
1414 1414
 
1415 1415
 /**
@@ -1425,22 +1425,22 @@  discard block
 block discarded – undo
1425 1425
  *     - False en cas d'erreur.
1426 1426
  **/
1427 1427
 function spip_mysql_delete($table, $where = '', $serveur = '', $requeter = true) {
1428
-	$res = spip_mysql_query(
1429
-		calculer_mysql_expression('DELETE FROM', $table, ',')
1430
-		. calculer_mysql_expression('WHERE', $where),
1431
-		$serveur,
1432
-		$requeter
1433
-	);
1434
-	if (!$requeter) {
1435
-		return $res;
1436
-	}
1437
-	if ($res) {
1438
-		$link = _mysql_link($serveur);
1439
-
1440
-		return mysqli_affected_rows($link);
1441
-	} else {
1442
-		return false;
1443
-	}
1428
+    $res = spip_mysql_query(
1429
+        calculer_mysql_expression('DELETE FROM', $table, ',')
1430
+        . calculer_mysql_expression('WHERE', $where),
1431
+        $serveur,
1432
+        $requeter
1433
+    );
1434
+    if (!$requeter) {
1435
+        return $res;
1436
+    }
1437
+    if ($res) {
1438
+        $link = _mysql_link($serveur);
1439
+
1440
+        return mysqli_affected_rows($link);
1441
+    } else {
1442
+        return false;
1443
+    }
1444 1444
 }
1445 1445
 
1446 1446
 
@@ -1469,10 +1469,10 @@  discard block
 block discarded – undo
1469 1469
  *     - False en cas d'erreur.
1470 1470
  **/
1471 1471
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1472
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1473
-		',',
1474
-		array_map('_q', $couples)
1475
-	) . ')', $serveur, $requeter);
1472
+    return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1473
+        ',',
1474
+        array_map('_q', $couples)
1475
+    ) . ')', $serveur, $requeter);
1476 1476
 }
1477 1477
 
1478 1478
 
@@ -1501,14 +1501,14 @@  discard block
 block discarded – undo
1501 1501
  *     - False en cas d'erreur.
1502 1502
  **/
1503 1503
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1504
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1505
-	$valeurs = [];
1506
-	foreach ($tab_couples as $couples) {
1507
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1508
-	}
1509
-	$valeurs = implode(', ', $valeurs);
1510
-
1511
-	return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1504
+    $cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1505
+    $valeurs = [];
1506
+    foreach ($tab_couples as $couples) {
1507
+        $valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1508
+    }
1509
+    $valeurs = implode(', ', $valeurs);
1510
+
1511
+    return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1512 1512
 }
1513 1513
 
1514 1514
 
@@ -1523,32 +1523,32 @@  discard block
 block discarded – undo
1523 1523
  * @return string       Texte de sélection pour la requête
1524 1524
  */
1525 1525
 function spip_mysql_multi($objet, $lang) {
1526
-	$lengthlang = strlen("[$lang]");
1527
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1528
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1529
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1530
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1531
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1532
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1533
-	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1534
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1535
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1536
-	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1537
-	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1538
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1539
-		'     TRIM(' . $objet . '), ' .
1540
-		'     CONCAT( ' .
1541
-		"          $debutchaine, " .
1542
-		'          IF( ' .
1543
-		"               $poslang = 0, " .
1544
-		"                     $chainemulti, " .
1545
-		"               $chainelang" .
1546
-		'          ), ' .
1547
-		"          $finchaine" .
1548
-		'     ) ' .
1549
-		'))) AS multi';
1550
-
1551
-	return $retour;
1526
+    $lengthlang = strlen("[$lang]");
1527
+    $posmulti = 'INSTR(' . $objet . ", '<multi>')";
1528
+    $posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1529
+    $debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1530
+    $finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1531
+    $chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1532
+    $poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1533
+    $poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1534
+    $chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1535
+    $posfinlang = 'INSTR(' . $chainelang . ", '[')";
1536
+    $chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1537
+    //$chainelang = "LEFT($chainelang,$posfinlang-1)";
1538
+    $retour = "(TRIM(IF($posmulti = 0 , " .
1539
+        '     TRIM(' . $objet . '), ' .
1540
+        '     CONCAT( ' .
1541
+        "          $debutchaine, " .
1542
+        '          IF( ' .
1543
+        "               $poslang = 0, " .
1544
+        "                     $chainemulti, " .
1545
+        "               $chainelang" .
1546
+        '          ), ' .
1547
+        "          $finchaine" .
1548
+        '     ) ' .
1549
+        '))) AS multi';
1550
+
1551
+    return $retour;
1552 1552
 }
1553 1553
 
1554 1554
 /**
@@ -1562,7 +1562,7 @@  discard block
 block discarded – undo
1562 1562
  *     Valeur hexadécimale pour MySQL
1563 1563
  **/
1564 1564
 function spip_mysql_hex($v) {
1565
-	return '0x' . $v;
1565
+    return '0x' . $v;
1566 1566
 }
1567 1567
 
1568 1568
 /**
@@ -1578,15 +1578,15 @@  discard block
 block discarded – undo
1578 1578
  *    Donnée prête à être utilisée par le gestionnaire SQL
1579 1579
  */
1580 1580
 function spip_mysql_quote($v, $type = '') {
1581
-	if (!is_array($v)) {
1582
-		return spip_mysql_cite($v, $type);
1583
-	}
1584
-
1585
-	// si c'est un tableau, le parcourir en propageant le type
1586
-	foreach ($v as $k => $r) {
1587
-		$v[$k] = spip_mysql_quote($r, $type);
1588
-	}
1589
-	return implode(',', $v);
1581
+    if (!is_array($v)) {
1582
+        return spip_mysql_cite($v, $type);
1583
+    }
1584
+
1585
+    // si c'est un tableau, le parcourir en propageant le type
1586
+    foreach ($v as $k => $r) {
1587
+        $v[$k] = spip_mysql_quote($r, $type);
1588
+    }
1589
+    return implode(',', $v);
1590 1590
 }
1591 1591
 
1592 1592
 /**
@@ -1602,18 +1602,18 @@  discard block
 block discarded – undo
1602 1602
  *     Expression SQL
1603 1603
  **/
1604 1604
 function spip_mysql_date_proche($champ, $interval, $unite) {
1605
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1606
-	return '('
1607
-	. $champ
1608
-	. (($interval <= 0) ? '>' : '<')
1609
-	. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1610
-	. '('
1611
-	. ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1612
-	. ', INTERVAL '
1613
-	. (($interval > 0) ? $interval : (0 - $interval))
1614
-	. ' '
1615
-	. $unite
1616
-	. '))';
1605
+    $use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1606
+    return '('
1607
+    . $champ
1608
+    . (($interval <= 0) ? '>' : '<')
1609
+    . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1610
+    . '('
1611
+    . ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
1612
+    . ', INTERVAL '
1613
+    . (($interval > 0) ? $interval : (0 - $interval))
1614
+    . ' '
1615
+    . $unite
1616
+    . '))';
1617 1617
 }
1618 1618
 
1619 1619
 
@@ -1637,7 +1637,7 @@  discard block
 block discarded – undo
1637 1637
  *     Expression de requête SQL
1638 1638
  **/
1639 1639
 function spip_mysql_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1640
-	return "($val $not IN ($valeurs))";
1640
+    return "($val $not IN ($valeurs))";
1641 1641
 }
1642 1642
 
1643 1643
 
@@ -1649,38 +1649,38 @@  discard block
 block discarded – undo
1649 1649
  * @return string|number     Texte ou nombre échappé
1650 1650
  */
1651 1651
 function spip_mysql_cite($v, $type) {
1652
-	if (!$type) {
1653
-		if (is_bool($v)) {
1654
-			return strval(intval($v));
1655
-		}
1656
-		elseif (is_numeric($v)) {
1657
-			return strval($v);
1658
-		}
1659
-		return "'" . addslashes($v) . "'";
1660
-	}
1661
-
1662
-	if (
1663
-		is_null($v)
1664
-		and stripos($type, 'NOT NULL') === false
1665
-	) {
1666
-		return 'NULL';
1667
-	} // null php se traduit en NULL SQL
1668
-	if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1669
-		return $v;
1670
-	}
1671
-	if (sql_test_int($type)) {
1672
-		if (
1673
-			is_numeric($v) or (ctype_xdigit(substr($v, 2))
1674
-				and $v[0] == '0' and $v[1] == 'x')
1675
-		) {
1676
-			return $v;
1677
-		} // si pas numerique, forcer le intval
1678
-		else {
1679
-			return intval($v);
1680
-		}
1681
-	}
1682
-
1683
-	return ("'" . addslashes($v) . "'");
1652
+    if (!$type) {
1653
+        if (is_bool($v)) {
1654
+            return strval(intval($v));
1655
+        }
1656
+        elseif (is_numeric($v)) {
1657
+            return strval($v);
1658
+        }
1659
+        return "'" . addslashes($v) . "'";
1660
+    }
1661
+
1662
+    if (
1663
+        is_null($v)
1664
+        and stripos($type, 'NOT NULL') === false
1665
+    ) {
1666
+        return 'NULL';
1667
+    } // null php se traduit en NULL SQL
1668
+    if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
1669
+        return $v;
1670
+    }
1671
+    if (sql_test_int($type)) {
1672
+        if (
1673
+            is_numeric($v) or (ctype_xdigit(substr($v, 2))
1674
+                and $v[0] == '0' and $v[1] == 'x')
1675
+        ) {
1676
+            return $v;
1677
+        } // si pas numerique, forcer le intval
1678
+        else {
1679
+            return intval($v);
1680
+        }
1681
+    }
1682
+
1683
+    return ("'" . addslashes($v) . "'");
1684 1684
 }
1685 1685
 
1686 1686
 /**
@@ -1690,7 +1690,7 @@  discard block
 block discarded – undo
1690 1690
  *     True si on a les fonctions, false sinon
1691 1691
  */
1692 1692
 function spip_versions_mysql() {
1693
-	return function_exists('mysqli_query');
1693
+    return function_exists('mysqli_query');
1694 1694
 }
1695 1695
 
1696 1696
 
@@ -1703,20 +1703,20 @@  discard block
 block discarded – undo
1703 1703
  *     - chaîne : code compilé pour le faire désactiver par SPIP sinon
1704 1704
  */
1705 1705
 function test_rappel_nom_base_mysql($server_db) {
1706
-	$GLOBALS['mysql_rappel_nom_base'] = true;
1707
-	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1708
-	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1706
+    $GLOBALS['mysql_rappel_nom_base'] = true;
1707
+    sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1708
+    $ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1709 1709
 
1710
-	if ($ok) {
1711
-		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1710
+    if ($ok) {
1711
+        sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1712 1712
 
1713
-		return '';
1714
-	} else {
1715
-		$GLOBALS['mysql_rappel_nom_base'] = false;
1713
+        return '';
1714
+    } else {
1715
+        $GLOBALS['mysql_rappel_nom_base'] = false;
1716 1716
 
1717
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1718
-		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1719
-	}
1717
+        return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1718
+        "/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1719
+    }
1720 1720
 }
1721 1721
 
1722 1722
 /**
@@ -1730,13 +1730,13 @@  discard block
 block discarded – undo
1730 1730
  *     - chaîne : code compilé pour l'indiquer le résultat du test à SPIP
1731 1731
  */
1732 1732
 function test_sql_mode_mysql($server_db) {
1733
-	$res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1734
-	$row = sql_fetch($res, $server_db);
1735
-	if (version_compare($row['v'], '5.0.0', '>=')) {
1736
-		defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1733
+    $res = sql_select('version() as v', '', '', '', '', '', '', $server_db);
1734
+    $row = sql_fetch($res, $server_db);
1735
+    if (version_compare($row['v'], '5.0.0', '>=')) {
1736
+        defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE', true);
1737 1737
 
1738
-		return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1739
-	}
1738
+        return "defined('_MYSQL_SET_SQL_MODE') || define('_MYSQL_SET_SQL_MODE',true);\n";
1739
+    }
1740 1740
 
1741
-	return '';
1741
+    return '';
1742 1742
 }
Please login to merge, or discard this patch.
Spacing   +74 added lines, -74 removed lines patch added patch discarded remove patch
@@ -60,7 +60,7 @@  discard block
 block discarded – undo
60 60
 	}
61 61
 
62 62
 	if (!$link) {
63
-		spip_log('Echec mysqli_connect. Erreur : ' . mysqli_connect_error(), 'mysql.' . _LOG_HS);
63
+		spip_log('Echec mysqli_connect. Erreur : '.mysqli_connect_error(), 'mysql.'._LOG_HS);
64 64
 
65 65
 		return false;
66 66
 	}
@@ -79,7 +79,7 @@  discard block
 block discarded – undo
79 79
 	}
80 80
 
81 81
 	spip_log(
82
-		"Connexion MySQLi vers $host, base $db, prefixe $prefixe " . ($ok ? 'operationnelle' : 'impossible'),
82
+		"Connexion MySQLi vers $host, base $db, prefixe $prefixe ".($ok ? 'operationnelle' : 'impossible'),
83 83
 		_LOG_DEBUG
84 84
 	);
85 85
 
@@ -170,9 +170,9 @@  discard block
 block discarded – undo
170 170
  */
171 171
 function spip_mysql_set_charset($charset, $serveur = '', $requeter = true) {
172 172
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
173
-	spip_log('changement de charset sql : ' . 'SET NAMES ' . _q($charset), _LOG_DEBUG);
173
+	spip_log('changement de charset sql : '.'SET NAMES '._q($charset), _LOG_DEBUG);
174 174
 
175
-	return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES ' . _q($charset));
175
+	return mysqli_query($connexion['link'], $connexion['last'] = 'SET NAMES '._q($charset));
176 176
 }
177 177
 
178 178
 
@@ -187,7 +187,7 @@  discard block
 block discarded – undo
187 187
 function spip_mysql_get_charset($charset = [], $serveur = '', $requeter = true) {
188 188
 	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
189 189
 	$connexion['last'] = $c = 'SHOW CHARACTER SET'
190
-		. (!$charset ? '' : (' LIKE ' . _q($charset['charset'])));
190
+		. (!$charset ? '' : (' LIKE '._q($charset['charset'])));
191 191
 
192 192
 	return spip_mysql_fetch(mysqli_query($connexion['link'], $c), null, $serveur);
193 193
 }
@@ -231,19 +231,19 @@  discard block
 block discarded – undo
231 231
 	$debug = '';
232 232
 	if (defined('_DEBUG_SLOW_QUERIES') and _DEBUG_SLOW_QUERIES) {
233 233
 		if (isset($GLOBALS['debug']['aucasou'])) {
234
-			list(, $id, , $infos) = $GLOBALS['debug']['aucasou'];
235
-			$debug .= "BOUCLE$id @ " . (isset($infos[0]) ? $infos[0] : '') . ' | ';
234
+			list(, $id,, $infos) = $GLOBALS['debug']['aucasou'];
235
+			$debug .= "BOUCLE$id @ ".(isset($infos[0]) ? $infos[0] : '').' | ';
236 236
 		}
237 237
 		if (isset($_SERVER['REQUEST_URI'])) {
238 238
 			$debug .= $_SERVER['REQUEST_URI'];
239 239
 		}
240 240
 		if (!empty($GLOBALS['ip'])) {
241
-			$debug .= ' + ' . $GLOBALS['ip'];
241
+			$debug .= ' + '.$GLOBALS['ip'];
242 242
 		}
243
-		$debug = ' /* ' . mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)) . ' */';
243
+		$debug = ' /* '.mysqli_real_escape_string($link, str_replace('*/', '@/', $debug)).' */';
244 244
 	}
245 245
 
246
-	$r = mysqli_query($link, $query . $debug);
246
+	$r = mysqli_query($link, $query.$debug);
247 247
 
248 248
 	//Eviter de propager le GoneAway sur les autres requetes d'un même processus PHP
249 249
 	if ($e = spip_mysql_errno($serveur)) {  // Log d'un Gone Away
@@ -256,7 +256,7 @@  discard block
 block discarded – undo
256 256
 			$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
257 257
 			$link = $connexion['link'];
258 258
 			//On retente au cas où
259
-			$r = mysqli_query($link, $query . $debug);
259
+			$r = mysqli_query($link, $query.$debug);
260 260
 		}
261 261
 	}
262 262
 
@@ -284,7 +284,7 @@  discard block
 block discarded – undo
284 284
 	// d'utiliser ceux-ci, copie-colle de phpmyadmin
285 285
 	$query = preg_replace(',^TABLE\s*`([^`]*)`,i', "TABLE \\1", $query);
286 286
 
287
-	return spip_mysql_query('ALTER ' . $query, $serveur, $requeter); # i.e. que PG se debrouille
287
+	return spip_mysql_query('ALTER '.$query, $serveur, $requeter); # i.e. que PG se debrouille
288 288
 }
289 289
 
290 290
 
@@ -297,7 +297,7 @@  discard block
 block discarded – undo
297 297
  * @return bool            Toujours true
298 298
  */
299 299
 function spip_mysql_optimize($table, $serveur = '', $requeter = true) {
300
-	spip_mysql_query('OPTIMIZE TABLE ' . $table);
300
+	spip_mysql_query('OPTIMIZE TABLE '.$table);
301 301
 
302 302
 	return true;
303 303
 }
@@ -320,7 +320,7 @@  discard block
 block discarded – undo
320 320
 	$link = $connexion['link'];
321 321
 	$db = $connexion['db'];
322 322
 
323
-	$query = 'EXPLAIN ' . _mysql_traite_query($query, $db, $prefixe);
323
+	$query = 'EXPLAIN '._mysql_traite_query($query, $db, $prefixe);
324 324
 	$r = mysqli_query($link, $query);
325 325
 
326 326
 	return spip_mysql_fetch($r, null, $serveur);
@@ -371,7 +371,7 @@  discard block
 block discarded – undo
371 371
 		. calculer_mysql_expression('WHERE', $where)
372 372
 		. calculer_mysql_expression('GROUP BY', $groupby, ',')
373 373
 		. calculer_mysql_expression('HAVING', $having)
374
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) : '')
374
+		. ($orderby ? ("\nORDER BY ".spip_mysql_order($orderby)) : '')
375 375
 		. ($limit ? "\nLIMIT $limit" : '');
376 376
 
377 377
 	// renvoyer la requete inerte si demandee
@@ -461,12 +461,12 @@  discard block
 block discarded – undo
461 461
 	$exp = "\n$expression ";
462 462
 
463 463
 	if (!is_array($v)) {
464
-		return $exp . $v;
464
+		return $exp.$v;
465 465
 	} else {
466 466
 		if (strtoupper($join) === 'AND') {
467
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
467
+			return $exp.join("\n\t$join ", array_map('calculer_mysql_where', $v));
468 468
 		} else {
469
-			return $exp . join($join, $v);
469
+			return $exp.join($join, $v);
470 470
 		}
471 471
 	}
472 472
 }
@@ -484,17 +484,17 @@  discard block
 block discarded – undo
484 484
 		if (substr($k, -1) == '@') {
485 485
 			// c'est une jointure qui se refere au from precedent
486 486
 			// pas de virgule
487
-			$res .= '  ' . $v;
487
+			$res .= '  '.$v;
488 488
 		} else {
489 489
 			if (!is_numeric($k)) {
490 490
 				$p = strpos($v, ' ');
491 491
 				if ($p) {
492
-					$v = substr($v, 0, $p) . " AS `$k`" . substr($v, $p);
492
+					$v = substr($v, 0, $p)." AS `$k`".substr($v, $p);
493 493
 				} else {
494 494
 					$v .= " AS `$k`";
495 495
 				}
496 496
 			}
497
-			$res .= ', ' . $v;
497
+			$res .= ', '.$v;
498 498
 		}
499 499
 	}
500 500
 
@@ -524,13 +524,13 @@  discard block
 block discarded – undo
524 524
 function _mysql_traite_query($query, $db = '', $prefixe = '', $echappe_textes = true) {
525 525
 
526 526
 	if ($GLOBALS['mysql_rappel_nom_base'] and $db) {
527
-		$pref = '`' . $db . '`.';
527
+		$pref = '`'.$db.'`.';
528 528
 	} else {
529 529
 		$pref = '';
530 530
 	}
531 531
 
532 532
 	if ($prefixe) {
533
-		$pref .= $prefixe . '_';
533
+		$pref .= $prefixe.'_';
534 534
 	}
535 535
 
536 536
 	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
@@ -549,7 +549,7 @@  discard block
 block discarded – undo
549 549
 				$suite_echap = $suite;
550 550
 			}
551 551
 			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite_echap, $r)) {
552
-				$suite_echap = $r[1] . _mysql_traite_query($r[2], $db, $prefixe, false);
552
+				$suite_echap = $r[1]._mysql_traite_query($r[2], $db, $prefixe, false);
553 553
 				if ($echappe_textes) {
554 554
 					$suite = query_reinjecte_textes($suite_echap, $textes);
555 555
 				}
@@ -559,7 +559,7 @@  discard block
 block discarded – undo
559 559
 			}
560 560
 		}
561 561
 	}
562
-	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1' . $pref, $query) . $suite;
562
+	$r = preg_replace(_SQL_PREFIXE_TABLE_MYSQL, '\1'.$pref, $query).$suite;
563 563
 
564 564
 	// en option, remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
565 565
 	// remplacer les emoji (que mysql ne sait pas gérer) en &#128169;
@@ -595,7 +595,7 @@  discard block
 block discarded – undo
595 595
 	$link = _mysql_link($serveur);
596 596
 	$ok = mysqli_select_db($link, $db);
597 597
 	if (!$ok) {
598
-		spip_log('Echec mysqli_selectdb. Erreur : ' . mysqli_error($link), 'mysql.' . _LOG_CRITIQUE);
598
+		spip_log('Echec mysqli_selectdb. Erreur : '.mysqli_error($link), 'mysql.'._LOG_CRITIQUE);
599 599
 	}
600 600
 
601 601
 	return $ok;
@@ -685,10 +685,10 @@  discard block
 block discarded – undo
685 685
 
686 686
 	$character_set = '';
687 687
 	if (@$GLOBALS['meta']['charset_sql_base']) {
688
-		$character_set .= ' CHARACTER SET ' . $GLOBALS['meta']['charset_sql_base'];
688
+		$character_set .= ' CHARACTER SET '.$GLOBALS['meta']['charset_sql_base'];
689 689
 	}
690 690
 	if (@$GLOBALS['meta']['charset_collation_sql_base']) {
691
-		$character_set .= ' COLLATE ' . $GLOBALS['meta']['charset_collation_sql_base'];
691
+		$character_set .= ' COLLATE '.$GLOBALS['meta']['charset_collation_sql_base'];
692 692
 	}
693 693
 
694 694
 	foreach ($champs as $k => $v) {
@@ -698,7 +698,7 @@  discard block
 block discarded – undo
698 698
 				preg_match(',(char|text),i', $defs[1])
699 699
 				and !preg_match(',(binary|CHARACTER|COLLATE),i', $v)
700 700
 			) {
701
-				$v = $defs[1] . $character_set . ' ' . substr($v, strlen($defs[1]));
701
+				$v = $defs[1].$character_set.' '.substr($v, strlen($defs[1]));
702 702
 			}
703 703
 		}
704 704
 
@@ -710,7 +710,7 @@  discard block
 block discarded – undo
710 710
 		$s = ',';
711 711
 	}
712 712
 	$temporary = $temporary ? 'TEMPORARY' : '';
713
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ')'
713
+	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query".($keys ? ",$keys" : '').')'
714 714
 		. ' ENGINE=MyISAM'
715 715
 		. ($character_set ? " DEFAULT $character_set" : '')
716 716
 		. "\n";
@@ -790,7 +790,7 @@  discard block
 block discarded – undo
790 790
 		return false;
791 791
 	}
792 792
 
793
-	$query = "CREATE VIEW $nom AS " . $query_select;
793
+	$query = "CREATE VIEW $nom AS ".$query_select;
794 794
 
795 795
 	return spip_mysql_query($query, $serveur, $requeter);
796 796
 }
@@ -848,7 +848,7 @@  discard block
 block discarded – undo
848 848
  *     Ressource à utiliser avec sql_fetch()
849 849
  **/
850 850
 function spip_mysql_showbase($match, $serveur = '', $requeter = true) {
851
-	return spip_mysql_query('SHOW TABLES LIKE ' . _q($match), $serveur, $requeter);
851
+	return spip_mysql_query('SHOW TABLES LIKE '._q($match), $serveur, $requeter);
852 852
 }
853 853
 
854 854
 /**
@@ -881,7 +881,7 @@  discard block
 block discarded – undo
881 881
  *     Ressource à utiliser avec sql_fetch()
882 882
  **/
883 883
 function spip_mysql_table_exists(string $table, $serveur = '', $requeter = true) {
884
-	$r = spip_mysql_query('SHOW TABLES LIKE ' . _q($table), $serveur, $requeter);
884
+	$r = spip_mysql_query('SHOW TABLES LIKE '._q($table), $serveur, $requeter);
885 885
 	if (!$requeter) {
886 886
 		return $r;
887 887
 	}
@@ -963,22 +963,22 @@  discard block
 block discarded – undo
963 963
 			}
964 964
 			if ($val['Default'] === '0' || $val['Default']) {
965 965
 				if (preg_match('/[A-Z_]/', $val['Default'])) {
966
-					$nfields[$val['Field']] .= ' DEFAULT ' . $val['Default'];
966
+					$nfields[$val['Field']] .= ' DEFAULT '.$val['Default'];
967 967
 				} else {
968
-					$nfields[$val['Field']] .= " DEFAULT '" . $val['Default'] . "'";
968
+					$nfields[$val['Field']] .= " DEFAULT '".$val['Default']."'";
969 969
 				}
970 970
 			}
971 971
 			if ($val['Extra']) {
972
-				$nfields[$val['Field']] .= ' ' . $val['Extra'];
972
+				$nfields[$val['Field']] .= ' '.$val['Extra'];
973 973
 			}
974 974
 			if ($val['Key'] == 'PRI') {
975 975
 				$nkeys['PRIMARY KEY'] = $val['Field'];
976 976
 			} else {
977 977
 				if ($val['Key'] == 'MUL') {
978
-					$nkeys['KEY ' . $val['Field']] = $val['Field'];
978
+					$nkeys['KEY '.$val['Field']] = $val['Field'];
979 979
 				} else {
980 980
 					if ($val['Key'] == 'UNI') {
981
-						$nkeys['UNIQUE KEY ' . $val['Field']] = $val['Field'];
981
+						$nkeys['UNIQUE KEY '.$val['Field']] = $val['Field'];
982 982
 					}
983 983
 				}
984 984
 			}
@@ -1049,7 +1049,7 @@  discard block
 block discarded – undo
1049 1049
 	$serveur = '',
1050 1050
 	$requeter = true
1051 1051
 ) {
1052
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
1052
+	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
1053 1053
 
1054 1054
 	$r = spip_mysql_select("COUNT($c)", $from, $where, '', '', '', $having, $serveur, $requeter);
1055 1055
 	if (!$requeter) {
@@ -1089,7 +1089,7 @@  discard block
 block discarded – undo
1089 1089
 	if ($s) {
1090 1090
 		$trace = debug_backtrace();
1091 1091
 		if ($trace[0]['function'] != 'spip_mysql_error') {
1092
-			spip_log("$s - $query - " . sql_error_backtrace(), 'mysql.' . _LOG_ERREUR);
1092
+			spip_log("$s - $query - ".sql_error_backtrace(), 'mysql.'._LOG_ERREUR);
1093 1093
 		}
1094 1094
 	}
1095 1095
 
@@ -1260,8 +1260,8 @@  discard block
 block discarded – undo
1260 1260
 
1261 1261
 	return spip_mysql_insert(
1262 1262
 		$table,
1263
-		'(' . join(',', array_keys($couples)) . ')',
1264
-		'(' . join(',', $couples) . ')',
1263
+		'('.join(',', array_keys($couples)).')',
1264
+		'('.join(',', $couples).')',
1265 1265
 		$desc,
1266 1266
 		$serveur,
1267 1267
 		$requeter
@@ -1298,7 +1298,7 @@  discard block
 block discarded – undo
1298 1298
 	}
1299 1299
 	$fields = isset($desc['field']) ? $desc['field'] : [];
1300 1300
 
1301
-	$cles = '(' . join(',', array_keys(reset($tab_couples))) . ')';
1301
+	$cles = '('.join(',', array_keys(reset($tab_couples))).')';
1302 1302
 	$valeurs = [];
1303 1303
 	$r = false;
1304 1304
 
@@ -1307,7 +1307,7 @@  discard block
 block discarded – undo
1307 1307
 		foreach ($couples as $champ => $val) {
1308 1308
 			$couples[$champ] = spip_mysql_cite($val, $fields[$champ]);
1309 1309
 		}
1310
-		$valeurs[] = '(' . join(',', $couples) . ')';
1310
+		$valeurs[] = '('.join(',', $couples).')';
1311 1311
 		if (count($valeurs) >= 100) {
1312 1312
 			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
1313 1313
 			$valeurs = [];
@@ -1344,7 +1344,7 @@  discard block
 block discarded – undo
1344 1344
 function spip_mysql_update($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1345 1345
 	$set = [];
1346 1346
 	foreach ($champs as $champ => $val) {
1347
-		$set[] = $champ . "=$val";
1347
+		$set[] = $champ."=$val";
1348 1348
 	}
1349 1349
 	if (!empty($set)) {
1350 1350
 		return spip_mysql_query(
@@ -1400,7 +1400,7 @@  discard block
 block discarded – undo
1400 1400
 	}
1401 1401
 	$set = [];
1402 1402
 	foreach ($champs as $champ => $val) {
1403
-		$set[] = $champ . '=' . spip_mysql_cite($val, @$fields[$champ]);
1403
+		$set[] = $champ.'='.spip_mysql_cite($val, @$fields[$champ]);
1404 1404
 	}
1405 1405
 
1406 1406
 	return spip_mysql_query(
@@ -1469,10 +1469,10 @@  discard block
 block discarded – undo
1469 1469
  *     - False en cas d'erreur.
1470 1470
  **/
1471 1471
 function spip_mysql_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1472
-	return spip_mysql_query("REPLACE $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1472
+	return spip_mysql_query("REPLACE $table (".join(',', array_keys($couples)).') VALUES ('.join(
1473 1473
 		',',
1474 1474
 		array_map('_q', $couples)
1475
-	) . ')', $serveur, $requeter);
1475
+	).')', $serveur, $requeter);
1476 1476
 }
1477 1477
 
1478 1478
 
@@ -1501,10 +1501,10 @@  discard block
 block discarded – undo
1501 1501
  *     - False en cas d'erreur.
1502 1502
  **/
1503 1503
 function spip_mysql_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1504
-	$cles = '(' . join(',', array_keys($tab_couples[0])) . ')';
1504
+	$cles = '('.join(',', array_keys($tab_couples[0])).')';
1505 1505
 	$valeurs = [];
1506 1506
 	foreach ($tab_couples as $couples) {
1507
-		$valeurs[] = '(' . join(',', array_map('_q', $couples)) . ')';
1507
+		$valeurs[] = '('.join(',', array_map('_q', $couples)).')';
1508 1508
 	}
1509 1509
 	$valeurs = implode(', ', $valeurs);
1510 1510
 
@@ -1524,28 +1524,28 @@  discard block
 block discarded – undo
1524 1524
  */
1525 1525
 function spip_mysql_multi($objet, $lang) {
1526 1526
 	$lengthlang = strlen("[$lang]");
1527
-	$posmulti = 'INSTR(' . $objet . ", '<multi>')";
1528
-	$posfinmulti = 'INSTR(' . $objet . ", '</multi>')";
1529
-	$debutchaine = 'LEFT(' . $objet . ", $posmulti-1)";
1530
-	$finchaine = 'RIGHT(' . $objet . ', CHAR_LENGTH(' . $objet . ") -(7+$posfinmulti))";
1531
-	$chainemulti = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1532
-	$poslang = "INSTR($chainemulti,'[" . $lang . "]')";
1527
+	$posmulti = 'INSTR('.$objet.", '<multi>')";
1528
+	$posfinmulti = 'INSTR('.$objet.", '</multi>')";
1529
+	$debutchaine = 'LEFT('.$objet.", $posmulti-1)";
1530
+	$finchaine = 'RIGHT('.$objet.', CHAR_LENGTH('.$objet.") -(7+$posfinmulti))";
1531
+	$chainemulti = 'TRIM(SUBSTRING('.$objet.", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1532
+	$poslang = "INSTR($chainemulti,'[".$lang."]')";
1533 1533
 	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1534
-	$chainelang = 'TRIM(SUBSTRING(' . $objet . ", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1535
-	$posfinlang = 'INSTR(' . $chainelang . ", '[')";
1534
+	$chainelang = 'TRIM(SUBSTRING('.$objet.", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1535
+	$posfinlang = 'INSTR('.$chainelang.", '[')";
1536 1536
 	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1537 1537
 	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1538
-	$retour = "(TRIM(IF($posmulti = 0 , " .
1539
-		'     TRIM(' . $objet . '), ' .
1540
-		'     CONCAT( ' .
1541
-		"          $debutchaine, " .
1542
-		'          IF( ' .
1543
-		"               $poslang = 0, " .
1544
-		"                     $chainemulti, " .
1545
-		"               $chainelang" .
1546
-		'          ), ' .
1547
-		"          $finchaine" .
1548
-		'     ) ' .
1538
+	$retour = "(TRIM(IF($posmulti = 0 , ".
1539
+		'     TRIM('.$objet.'), '.
1540
+		'     CONCAT( '.
1541
+		"          $debutchaine, ".
1542
+		'          IF( '.
1543
+		"               $poslang = 0, ".
1544
+		"                     $chainemulti, ".
1545
+		"               $chainelang".
1546
+		'          ), '.
1547
+		"          $finchaine".
1548
+		'     ) '.
1549 1549
 		'))) AS multi';
1550 1550
 
1551 1551
 	return $retour;
@@ -1562,7 +1562,7 @@  discard block
 block discarded – undo
1562 1562
  *     Valeur hexadécimale pour MySQL
1563 1563
  **/
1564 1564
 function spip_mysql_hex($v) {
1565
-	return '0x' . $v;
1565
+	return '0x'.$v;
1566 1566
 }
1567 1567
 
1568 1568
 /**
@@ -1602,7 +1602,7 @@  discard block
 block discarded – undo
1602 1602
  *     Expression SQL
1603 1603
  **/
1604 1604
 function spip_mysql_date_proche($champ, $interval, $unite) {
1605
-	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
1605
+	$use_now = (($champ === 'maj' or strpos($champ, '.maj')) ? true : false);
1606 1606
 	return '('
1607 1607
 	. $champ
1608 1608
 	. (($interval <= 0) ? '>' : '<')
@@ -1656,7 +1656,7 @@  discard block
 block discarded – undo
1656 1656
 		elseif (is_numeric($v)) {
1657 1657
 			return strval($v);
1658 1658
 		}
1659
-		return "'" . addslashes($v) . "'";
1659
+		return "'".addslashes($v)."'";
1660 1660
 	}
1661 1661
 
1662 1662
 	if (
@@ -1680,7 +1680,7 @@  discard block
 block discarded – undo
1680 1680
 		}
1681 1681
 	}
1682 1682
 
1683
-	return ("'" . addslashes($v) . "'");
1683
+	return ("'".addslashes($v)."'");
1684 1684
 }
1685 1685
 
1686 1686
 /**
@@ -1714,7 +1714,7 @@  discard block
 block discarded – undo
1714 1714
 	} else {
1715 1715
 		$GLOBALS['mysql_rappel_nom_base'] = false;
1716 1716
 
1717
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; " .
1717
+		return "\$GLOBALS['mysql_rappel_nom_base'] = false; ".
1718 1718
 		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1719 1719
 	}
1720 1720
 }
Please login to merge, or discard this patch.
ecrire/req/sqlite_generique.php 2 patches
Indentation   +1999 added lines, -1999 removed lines patch added patch discarded remove patch
@@ -18,7 +18,7 @@  discard block
 block discarded – undo
18 18
  */
19 19
 
20 20
 if (!defined('_ECRIRE_INC_VERSION')) {
21
-	return;
21
+    return;
22 22
 }
23 23
 
24 24
 // TODO: get/set_caracteres ?
@@ -42,91 +42,91 @@  discard block
 block discarded – undo
42 42
  * @return array|bool
43 43
  */
44 44
 function req_sqlite_dist($addr, $port, $login, $pass, $db = '', $prefixe = '', $sqlite_version = '') {
45
-	static $last_connect = [];
46
-
47
-	// si provient de selectdb
48
-	// un code pour etre sur que l'on vient de select_db()
49
-	if (strpos($db, $code = '@selectdb@') !== false) {
50
-		foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) {
51
-			$$a = $last_connect[$a];
52
-		}
53
-		$db = str_replace($code, '', $db);
54
-	}
55
-
56
-	/*
45
+    static $last_connect = [];
46
+
47
+    // si provient de selectdb
48
+    // un code pour etre sur que l'on vient de select_db()
49
+    if (strpos($db, $code = '@selectdb@') !== false) {
50
+        foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) {
51
+            $$a = $last_connect[$a];
52
+        }
53
+        $db = str_replace($code, '', $db);
54
+    }
55
+
56
+    /*
57 57
 	 * En sqlite, seule l'adresse du fichier est importante.
58 58
 	 * Ce sera $db le nom,
59 59
 	 * le path est $addr
60 60
 	 * (_DIR_DB si $addr est vide)
61 61
 	 */
62
-	_sqlite_init();
63
-
64
-	// determiner le dossier de la base : $addr ou _DIR_DB
65
-	$f = _DIR_DB;
66
-	if ($addr and strpos($addr, '/') !== false) {
67
-		$f = rtrim($addr, '/') . '/';
68
-	}
69
-
70
-	// un nom de base demande et impossible d'obtenir la base, on s'en va :
71
-	// il faut que la base existe ou que le repertoire parent soit writable
72
-	if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) {
73
-		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS);
74
-
75
-		return false;
76
-	}
77
-
78
-	// charger les modules sqlite au besoin
79
-	if (!_sqlite_charger_version($sqlite_version)) {
80
-		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS);
81
-
82
-		return false;
83
-	}
84
-
85
-	// chargement des constantes
86
-	// il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
87
-	$define = 'spip_sqlite' . $sqlite_version . '_constantes';
88
-	$define();
89
-
90
-	$ok = false;
91
-	if (!$db) {
92
-		// si pas de db ->
93
-		// base temporaire tant qu'on ne connait pas son vrai nom
94
-		// pour tester la connexion
95
-		$db = '_sqlite' . $sqlite_version . '_install';
96
-		$tmp = _DIR_DB . $db . '.sqlite';
97
-		$ok = $link = new \PDO("sqlite:$tmp");
98
-	} else {
99
-		// Ouvrir (eventuellement creer la base)
100
-		$ok = $link = new \PDO("sqlite:$f");
101
-	}
102
-
103
-	if (!$ok) {
104
-		$e = _sqlite_last_error_from_link($link);
105
-		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS);
106
-
107
-		return false;
108
-	}
109
-
110
-	if ($link) {
111
-		$last_connect = [
112
-			'addr' => $addr,
113
-			'port' => $port,
114
-			'login' => $login,
115
-			'pass' => $pass,
116
-			'db' => $db,
117
-			'prefixe' => $prefixe,
118
-		];
119
-		// etre sur qu'on definit bien les fonctions a chaque nouvelle connexion
120
-		include_spip('req/sqlite_fonctions');
121
-		_sqlite_init_functions($link);
122
-	}
123
-
124
-	return [
125
-		'db' => $db,
126
-		'prefixe' => $prefixe ? $prefixe : $db,
127
-		'link' => $link,
128
-		'total_requetes' => 0,
129
-	];
62
+    _sqlite_init();
63
+
64
+    // determiner le dossier de la base : $addr ou _DIR_DB
65
+    $f = _DIR_DB;
66
+    if ($addr and strpos($addr, '/') !== false) {
67
+        $f = rtrim($addr, '/') . '/';
68
+    }
69
+
70
+    // un nom de base demande et impossible d'obtenir la base, on s'en va :
71
+    // il faut que la base existe ou que le repertoire parent soit writable
72
+    if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) {
73
+        spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS);
74
+
75
+        return false;
76
+    }
77
+
78
+    // charger les modules sqlite au besoin
79
+    if (!_sqlite_charger_version($sqlite_version)) {
80
+        spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS);
81
+
82
+        return false;
83
+    }
84
+
85
+    // chargement des constantes
86
+    // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
87
+    $define = 'spip_sqlite' . $sqlite_version . '_constantes';
88
+    $define();
89
+
90
+    $ok = false;
91
+    if (!$db) {
92
+        // si pas de db ->
93
+        // base temporaire tant qu'on ne connait pas son vrai nom
94
+        // pour tester la connexion
95
+        $db = '_sqlite' . $sqlite_version . '_install';
96
+        $tmp = _DIR_DB . $db . '.sqlite';
97
+        $ok = $link = new \PDO("sqlite:$tmp");
98
+    } else {
99
+        // Ouvrir (eventuellement creer la base)
100
+        $ok = $link = new \PDO("sqlite:$f");
101
+    }
102
+
103
+    if (!$ok) {
104
+        $e = _sqlite_last_error_from_link($link);
105
+        spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS);
106
+
107
+        return false;
108
+    }
109
+
110
+    if ($link) {
111
+        $last_connect = [
112
+            'addr' => $addr,
113
+            'port' => $port,
114
+            'login' => $login,
115
+            'pass' => $pass,
116
+            'db' => $db,
117
+            'prefixe' => $prefixe,
118
+        ];
119
+        // etre sur qu'on definit bien les fonctions a chaque nouvelle connexion
120
+        include_spip('req/sqlite_fonctions');
121
+        _sqlite_init_functions($link);
122
+    }
123
+
124
+    return [
125
+        'db' => $db,
126
+        'prefixe' => $prefixe ? $prefixe : $db,
127
+        'link' => $link,
128
+        'total_requetes' => 0,
129
+    ];
130 130
 }
131 131
 
132 132
 
@@ -145,14 +145,14 @@  discard block
 block discarded – undo
145 145
  *    Resultat de la requete
146 146
  */
147 147
 function spip_sqlite_query($query, $serveur = '', $requeter = true) {
148
-	#spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG);
149
-	#_sqlite_init(); // fait la premiere fois dans spip_sqlite
150
-	$query = spip_sqlite::traduire_requete($query, $serveur);
151
-	if (!$requeter) {
152
-		return $query;
153
-	}
148
+    #spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG);
149
+    #_sqlite_init(); // fait la premiere fois dans spip_sqlite
150
+    $query = spip_sqlite::traduire_requete($query, $serveur);
151
+    if (!$requeter) {
152
+        return $query;
153
+    }
154 154
 
155
-	return spip_sqlite::executer_requete($query, $serveur);
155
+    return spip_sqlite::executer_requete($query, $serveur);
156 156
 }
157 157
 
158 158
 
@@ -169,11 +169,11 @@  discard block
 block discarded – undo
169 169
  */
170 170
 function spip_sqlite_alter($query, $serveur = '', $requeter = true) {
171 171
 
172
-	$query = spip_sqlite_query("ALTER $query", $serveur, false);
173
-	// traduire la requete pour recuperer les bons noms de table
174
-	$query = spip_sqlite::traduire_requete($query, $serveur);
172
+    $query = spip_sqlite_query("ALTER $query", $serveur, false);
173
+    // traduire la requete pour recuperer les bons noms de table
174
+    $query = spip_sqlite::traduire_requete($query, $serveur);
175 175
 
176
-	/*
176
+    /*
177 177
 		 * la il faut faire les transformations
178 178
 		 * si ALTER TABLE x (DROP|CHANGE) y
179 179
 		 *
@@ -182,251 +182,251 @@  discard block
 block discarded – undo
182 182
 		 * 3) faire chaque requete independemment
183 183
 		 */
184 184
 
185
-	// 1
186
-	if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) {
187
-		$debut = $regs[1];
188
-		$table = $regs[3];
189
-		$suite = $regs[4];
190
-	} else {
191
-		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR);
192
-
193
-		return false;
194
-	}
195
-
196
-	// 2
197
-	// il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
198
-	// tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux
199
-	// ou revoir l'api de sql_alter en creant un
200
-	// sql_alter_table($table,array($actions));
201
-	$todo = explode(',', $suite);
202
-
203
-	// on remet les morceaux dechires ensembles... que c'est laid !
204
-	$todo2 = [];
205
-	$i = 0;
206
-	$ouverte = false;
207
-	while ($do = array_shift($todo)) {
208
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
209
-		$o = (false !== strpos($do, '('));
210
-		$f = (false !== strpos($do, ')'));
211
-		if ($o and !$f) {
212
-			$ouverte = true;
213
-		} elseif ($f) {
214
-			$ouverte = false;
215
-		}
216
-		if (!$ouverte) {
217
-			$i++;
218
-		}
219
-	}
220
-
221
-	// 3
222
-	$resultats = [];
223
-	foreach ($todo2 as $do) {
224
-		$do = trim($do);
225
-		if (
226
-			!preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP'
227
-			. '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME'
228
-			. '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE'
229
-			. '|ADD COLUMN|ADD'
230
-			. ')\s*([^\s]*)\s*(.*)?/i', $do, $matches)
231
-		) {
232
-			spip_log(
233
-				"SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)",
234
-				'sqlite.' . _LOG_ERREUR
235
-			);
236
-
237
-			return false;
238
-		}
239
-
240
-		$cle = strtoupper($matches[1]);
241
-		$colonne_origine = $matches[2];
242
-		$colonne_destination = '';
243
-
244
-		$def = $matches[3];
245
-
246
-		// eluder une eventuelle clause before|after|first inutilisable
247
-		$defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def));
248
-		$defo = $defr; // garder la def d'origine pour certains cas
249
-		// remplacer les definitions venant de mysql
250
-		$defr = _sqlite_remplacements_definitions_table($defr);
251
-
252
-		// reinjecter dans le do
253
-		$do = str_replace($def, $defr, $do);
254
-		$def = $defr;
255
-
256
-		switch ($cle) {
257
-			// suppression d'un index
258
-			case 'DROP KEY':
259
-			case 'DROP INDEX':
260
-				$nom_index = $colonne_origine;
261
-				spip_sqlite_drop_index($nom_index, $table, $serveur);
262
-				break;
263
-
264
-			// suppression d'une pk
265
-			case 'DROP PRIMARY KEY':
266
-				if (
267
-					!_sqlite_modifier_table(
268
-						$table,
269
-						$colonne_origine,
270
-						['key' => ['PRIMARY KEY' => '']],
271
-						$serveur
272
-					)
273
-				) {
274
-					return false;
275
-				}
276
-				break;
277
-			// suppression d'une colonne
278
-			case 'DROP COLUMN':
279
-			case 'DROP':
280
-				if (
281
-					!_sqlite_modifier_table(
282
-						$table,
283
-						[$colonne_origine => ''],
284
-						[],
285
-						$serveur
286
-					)
287
-				) {
288
-					return false;
289
-				}
290
-				break;
291
-
292
-			case 'CHANGE COLUMN':
293
-			case 'CHANGE':
294
-				// recuperer le nom de la future colonne
295
-				// on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
296
-				// en tenant compte de la cle primaire (ce qui est mieux)
297
-				$def = trim($defo);
298
-				$colonne_destination = substr($def, 0, strpos($def, ' '));
299
-				$def = substr($def, strlen($colonne_destination) + 1);
300
-
301
-				if (
302
-					!_sqlite_modifier_table(
303
-						$table,
304
-						[$colonne_origine => $colonne_destination],
305
-						['field' => [$colonne_destination => $def]],
306
-						$serveur
307
-					)
308
-				) {
309
-					return false;
310
-				}
311
-				break;
312
-
313
-			case 'MODIFY':
314
-				// on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
315
-				// en tenant compte de la cle primaire (ce qui est mieux)
316
-				if (
317
-					!_sqlite_modifier_table(
318
-						$table,
319
-						$colonne_origine,
320
-						['field' => [$colonne_origine => $defo]],
321
-						$serveur
322
-					)
323
-				) {
324
-					return false;
325
-				}
326
-				break;
327
-
328
-			// pas geres en sqlite2
329
-			case 'RENAME':
330
-				$do = 'RENAME TO' . substr($do, 6);
331
-			case 'RENAME TO':
332
-				if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
333
-					spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
334
-
335
-					return false;
336
-				}
337
-				break;
338
-
339
-			// ajout d'une pk
340
-			case 'ADD PRIMARY KEY':
341
-				$pk = trim(substr($do, 16));
342
-				$pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk;
343
-				if (
344
-					!_sqlite_modifier_table(
345
-						$table,
346
-						$colonne_origine,
347
-						['key' => ['PRIMARY KEY' => $pk]],
348
-						$serveur
349
-					)
350
-				) {
351
-					return false;
352
-				}
353
-				break;
354
-			// ajout d'un index
355
-			case 'ADD UNIQUE KEY':
356
-			case 'ADD UNIQUE':
357
-				$unique = true;
358
-			case 'ADD INDEX':
359
-			case 'ADD KEY':
360
-				if (!isset($unique)) {
361
-					$unique = false;
362
-				}
363
-				// peut etre "(colonne)" ou "nom_index (colonnes)"
364
-				// bug potentiel si qqn met "(colonne, colonne)"
365
-				//
366
-				// nom_index (colonnes)
367
-				if ($def) {
368
-					$colonnes = substr($def, 1, -1);
369
-					$nom_index = $colonne_origine;
370
-				} else {
371
-					// (colonne)
372
-					if ($colonne_origine[0] == '(') {
373
-						$colonnes = substr($colonne_origine, 1, -1);
374
-						if (false !== strpos(',', $colonnes)) {
375
-							spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes'
376
-								. " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR);
377
-							break;
378
-						} else {
379
-							$nom_index = $colonnes;
380
-						}
381
-					} // nom_index
382
-					else {
383
-						$nom_index = $colonnes = $colonne_origine;
384
-					}
385
-				}
386
-				spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur);
387
-				break;
388
-
389
-			// pas geres en sqlite2
390
-			case 'ADD COLUMN':
391
-				$do = 'ADD' . substr($do, 10);
392
-			case 'ADD':
393
-			default:
394
-				if (!preg_match(',primary\s+key,i', $do)) {
395
-					if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
396
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
397
-
398
-						return false;
399
-					}
400
-					break;
401
-				}
402
-				// ou si la colonne est aussi primary key
403
-				// cas du add id_truc int primary key
404
-				// ajout d'une colonne qui passe en primary key directe
405
-				else {
406
-					$def = trim(substr($do, 3));
407
-					$colonne_ajoutee = substr($def, 0, strpos($def, ' '));
408
-					$def = substr($def, strlen($colonne_ajoutee) + 1);
409
-					$opts = [];
410
-					if (preg_match(',primary\s+key,i', $def)) {
411
-						$opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee];
412
-						$def = preg_replace(',primary\s+key,i', '', $def);
413
-					}
414
-					$opts['field'] = [$colonne_ajoutee => $def];
415
-					if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) {
416
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
417
-
418
-						return false;
419
-					}
420
-				}
421
-				break;
422
-		}
423
-		// tout est bon, ouf !
424
-		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO);
425
-	}
426
-
427
-	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO);
428
-
429
-	return true;
185
+    // 1
186
+    if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) {
187
+        $debut = $regs[1];
188
+        $table = $regs[3];
189
+        $suite = $regs[4];
190
+    } else {
191
+        spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR);
192
+
193
+        return false;
194
+    }
195
+
196
+    // 2
197
+    // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
198
+    // tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux
199
+    // ou revoir l'api de sql_alter en creant un
200
+    // sql_alter_table($table,array($actions));
201
+    $todo = explode(',', $suite);
202
+
203
+    // on remet les morceaux dechires ensembles... que c'est laid !
204
+    $todo2 = [];
205
+    $i = 0;
206
+    $ouverte = false;
207
+    while ($do = array_shift($todo)) {
208
+        $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
209
+        $o = (false !== strpos($do, '('));
210
+        $f = (false !== strpos($do, ')'));
211
+        if ($o and !$f) {
212
+            $ouverte = true;
213
+        } elseif ($f) {
214
+            $ouverte = false;
215
+        }
216
+        if (!$ouverte) {
217
+            $i++;
218
+        }
219
+    }
220
+
221
+    // 3
222
+    $resultats = [];
223
+    foreach ($todo2 as $do) {
224
+        $do = trim($do);
225
+        if (
226
+            !preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP'
227
+            . '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME'
228
+            . '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE'
229
+            . '|ADD COLUMN|ADD'
230
+            . ')\s*([^\s]*)\s*(.*)?/i', $do, $matches)
231
+        ) {
232
+            spip_log(
233
+                "SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)",
234
+                'sqlite.' . _LOG_ERREUR
235
+            );
236
+
237
+            return false;
238
+        }
239
+
240
+        $cle = strtoupper($matches[1]);
241
+        $colonne_origine = $matches[2];
242
+        $colonne_destination = '';
243
+
244
+        $def = $matches[3];
245
+
246
+        // eluder une eventuelle clause before|after|first inutilisable
247
+        $defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def));
248
+        $defo = $defr; // garder la def d'origine pour certains cas
249
+        // remplacer les definitions venant de mysql
250
+        $defr = _sqlite_remplacements_definitions_table($defr);
251
+
252
+        // reinjecter dans le do
253
+        $do = str_replace($def, $defr, $do);
254
+        $def = $defr;
255
+
256
+        switch ($cle) {
257
+            // suppression d'un index
258
+            case 'DROP KEY':
259
+            case 'DROP INDEX':
260
+                $nom_index = $colonne_origine;
261
+                spip_sqlite_drop_index($nom_index, $table, $serveur);
262
+                break;
263
+
264
+            // suppression d'une pk
265
+            case 'DROP PRIMARY KEY':
266
+                if (
267
+                    !_sqlite_modifier_table(
268
+                        $table,
269
+                        $colonne_origine,
270
+                        ['key' => ['PRIMARY KEY' => '']],
271
+                        $serveur
272
+                    )
273
+                ) {
274
+                    return false;
275
+                }
276
+                break;
277
+            // suppression d'une colonne
278
+            case 'DROP COLUMN':
279
+            case 'DROP':
280
+                if (
281
+                    !_sqlite_modifier_table(
282
+                        $table,
283
+                        [$colonne_origine => ''],
284
+                        [],
285
+                        $serveur
286
+                    )
287
+                ) {
288
+                    return false;
289
+                }
290
+                break;
291
+
292
+            case 'CHANGE COLUMN':
293
+            case 'CHANGE':
294
+                // recuperer le nom de la future colonne
295
+                // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
296
+                // en tenant compte de la cle primaire (ce qui est mieux)
297
+                $def = trim($defo);
298
+                $colonne_destination = substr($def, 0, strpos($def, ' '));
299
+                $def = substr($def, strlen($colonne_destination) + 1);
300
+
301
+                if (
302
+                    !_sqlite_modifier_table(
303
+                        $table,
304
+                        [$colonne_origine => $colonne_destination],
305
+                        ['field' => [$colonne_destination => $def]],
306
+                        $serveur
307
+                    )
308
+                ) {
309
+                    return false;
310
+                }
311
+                break;
312
+
313
+            case 'MODIFY':
314
+                // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
315
+                // en tenant compte de la cle primaire (ce qui est mieux)
316
+                if (
317
+                    !_sqlite_modifier_table(
318
+                        $table,
319
+                        $colonne_origine,
320
+                        ['field' => [$colonne_origine => $defo]],
321
+                        $serveur
322
+                    )
323
+                ) {
324
+                    return false;
325
+                }
326
+                break;
327
+
328
+            // pas geres en sqlite2
329
+            case 'RENAME':
330
+                $do = 'RENAME TO' . substr($do, 6);
331
+            case 'RENAME TO':
332
+                if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
333
+                    spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
334
+
335
+                    return false;
336
+                }
337
+                break;
338
+
339
+            // ajout d'une pk
340
+            case 'ADD PRIMARY KEY':
341
+                $pk = trim(substr($do, 16));
342
+                $pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk;
343
+                if (
344
+                    !_sqlite_modifier_table(
345
+                        $table,
346
+                        $colonne_origine,
347
+                        ['key' => ['PRIMARY KEY' => $pk]],
348
+                        $serveur
349
+                    )
350
+                ) {
351
+                    return false;
352
+                }
353
+                break;
354
+            // ajout d'un index
355
+            case 'ADD UNIQUE KEY':
356
+            case 'ADD UNIQUE':
357
+                $unique = true;
358
+            case 'ADD INDEX':
359
+            case 'ADD KEY':
360
+                if (!isset($unique)) {
361
+                    $unique = false;
362
+                }
363
+                // peut etre "(colonne)" ou "nom_index (colonnes)"
364
+                // bug potentiel si qqn met "(colonne, colonne)"
365
+                //
366
+                // nom_index (colonnes)
367
+                if ($def) {
368
+                    $colonnes = substr($def, 1, -1);
369
+                    $nom_index = $colonne_origine;
370
+                } else {
371
+                    // (colonne)
372
+                    if ($colonne_origine[0] == '(') {
373
+                        $colonnes = substr($colonne_origine, 1, -1);
374
+                        if (false !== strpos(',', $colonnes)) {
375
+                            spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes'
376
+                                . " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR);
377
+                            break;
378
+                        } else {
379
+                            $nom_index = $colonnes;
380
+                        }
381
+                    } // nom_index
382
+                    else {
383
+                        $nom_index = $colonnes = $colonne_origine;
384
+                    }
385
+                }
386
+                spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur);
387
+                break;
388
+
389
+            // pas geres en sqlite2
390
+            case 'ADD COLUMN':
391
+                $do = 'ADD' . substr($do, 10);
392
+            case 'ADD':
393
+            default:
394
+                if (!preg_match(',primary\s+key,i', $do)) {
395
+                    if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
396
+                        spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
397
+
398
+                        return false;
399
+                    }
400
+                    break;
401
+                }
402
+                // ou si la colonne est aussi primary key
403
+                // cas du add id_truc int primary key
404
+                // ajout d'une colonne qui passe en primary key directe
405
+                else {
406
+                    $def = trim(substr($do, 3));
407
+                    $colonne_ajoutee = substr($def, 0, strpos($def, ' '));
408
+                    $def = substr($def, strlen($colonne_ajoutee) + 1);
409
+                    $opts = [];
410
+                    if (preg_match(',primary\s+key,i', $def)) {
411
+                        $opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee];
412
+                        $def = preg_replace(',primary\s+key,i', '', $def);
413
+                    }
414
+                    $opts['field'] = [$colonne_ajoutee => $def];
415
+                    if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) {
416
+                        spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
417
+
418
+                        return false;
419
+                    }
420
+                }
421
+                break;
422
+        }
423
+        // tout est bon, ouf !
424
+        spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO);
425
+    }
426
+
427
+    spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO);
428
+
429
+    return true;
430 430
 }
431 431
 
432 432
 
@@ -449,38 +449,38 @@  discard block
 block discarded – undo
449 449
  *     - true si la requête réussie, false sinon.
450 450
  */
451 451
 function spip_sqlite_create(
452
-	$nom,
453
-	$champs,
454
-	$cles,
455
-	$autoinc = false,
456
-	$temporary = false,
457
-	$serveur = '',
458
-	$requeter = true
452
+    $nom,
453
+    $champs,
454
+    $cles,
455
+    $autoinc = false,
456
+    $temporary = false,
457
+    $serveur = '',
458
+    $requeter = true
459 459
 ) {
460
-	$query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter);
461
-	if (!$query) {
462
-		return false;
463
-	}
464
-	$res = spip_sqlite_query($query, $serveur, $requeter);
465
-
466
-	// SQLite ne cree pas les KEY sur les requetes CREATE TABLE
467
-	// il faut donc les faire creer ensuite
468
-	if (!$requeter) {
469
-		return $res;
470
-	}
471
-
472
-	$ok = $res ? true : false;
473
-	if ($ok) {
474
-		foreach ($cles as $k => $v) {
475
-			if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) {
476
-				$index = trim(substr($k, strlen($m[1])));
477
-				$unique = (strlen($m[1]) > 3);
478
-				$ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur);
479
-			}
480
-		}
481
-	}
482
-
483
-	return $ok ? true : false;
460
+    $query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter);
461
+    if (!$query) {
462
+        return false;
463
+    }
464
+    $res = spip_sqlite_query($query, $serveur, $requeter);
465
+
466
+    // SQLite ne cree pas les KEY sur les requetes CREATE TABLE
467
+    // il faut donc les faire creer ensuite
468
+    if (!$requeter) {
469
+        return $res;
470
+    }
471
+
472
+    $ok = $res ? true : false;
473
+    if ($ok) {
474
+        foreach ($cles as $k => $v) {
475
+            if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) {
476
+                $index = trim(substr($k, strlen($m[1])));
477
+                $unique = (strlen($m[1]) > 3);
478
+                $ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur);
479
+            }
480
+        }
481
+    }
482
+
483
+    return $ok ? true : false;
484 484
 }
485 485
 
486 486
 /**
@@ -493,21 +493,21 @@  discard block
 block discarded – undo
493 493
  * @return bool true si la base est créee.
494 494
  **/
495 495
 function spip_sqlite_create_base($nom, $serveur = '', $option = true) {
496
-	$f = $nom . '.sqlite';
497
-	if (strpos($nom, '/') === false) {
498
-		$f = _DIR_DB . $f;
499
-	}
496
+    $f = $nom . '.sqlite';
497
+    if (strpos($nom, '/') === false) {
498
+        $f = _DIR_DB . $f;
499
+    }
500 500
 
501
-	$ok = new \PDO("sqlite:$f");
501
+    $ok = new \PDO("sqlite:$f");
502 502
 
503
-	if ($ok) {
504
-		unset($ok);
503
+    if ($ok) {
504
+        unset($ok);
505 505
 
506
-		return true;
507
-	}
508
-	unset($ok);
506
+        return true;
507
+    }
508
+    unset($ok);
509 509
 
510
-	return false;
510
+    return false;
511 511
 }
512 512
 
513 513
 
@@ -528,22 +528,22 @@  discard block
 block discarded – undo
528 528
  *     - string texte de la requête si $requeter vaut false
529 529
  */
530 530
 function spip_sqlite_create_view($nom, $query_select, $serveur = '', $requeter = true) {
531
-	if (!$query_select) {
532
-		return false;
533
-	}
534
-	// vue deja presente
535
-	if (sql_showtable($nom, false, $serveur)) {
536
-		spip_log(
537
-			"Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",
538
-			'sqlite.' . _LOG_ERREUR
539
-		);
531
+    if (!$query_select) {
532
+        return false;
533
+    }
534
+    // vue deja presente
535
+    if (sql_showtable($nom, false, $serveur)) {
536
+        spip_log(
537
+            "Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",
538
+            'sqlite.' . _LOG_ERREUR
539
+        );
540 540
 
541
-		return false;
542
-	}
541
+        return false;
542
+    }
543 543
 
544
-	$query = "CREATE VIEW $nom AS " . $query_select;
544
+    $query = "CREATE VIEW $nom AS " . $query_select;
545 545
 
546
-	return spip_sqlite_query($query, $serveur, $requeter);
546
+    return spip_sqlite_query($query, $serveur, $requeter);
547 547
 }
548 548
 
549 549
 /**
@@ -565,54 +565,54 @@  discard block
 block discarded – undo
565 565
  *    string : requête, false si erreur, true sinon.
566 566
  */
567 567
 function spip_sqlite_create_index($nom, $table, $champs, $unique = '', $serveur = '', $requeter = true) {
568
-	if (!($nom or $table or $champs)) {
569
-		spip_log(
570
-			"Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))',
571
-			'sqlite.' . _LOG_ERREUR
572
-		);
573
-
574
-		return false;
575
-	}
576
-
577
-	// SQLite ne differentie pas noms des index en fonction des tables
578
-	// il faut donc creer des noms uniques d'index pour une base sqlite
579
-	$nom = $table . '_' . $nom;
580
-	// enlever d'eventuelles parentheses deja presentes sur champs
581
-	if (!is_array($champs)) {
582
-		if ($champs[0] == '(') {
583
-			$champs = substr($champs, 1, -1);
584
-		}
585
-		$champs = [$champs];
586
-		// supprimer l'info de longueur d'index mysql en fin de champ
587
-		$champs = preg_replace(',\(\d+\)$,', '', $champs);
588
-	}
589
-
590
-	$ifnotexists = '';
591
-	$version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur);
592
-	if (!function_exists('spip_version_compare')) {
593
-		include_spip('plugins/installer');
594
-	}
595
-
596
-	if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
597
-		$ifnotexists = ' IF NOT EXISTS';
598
-	} else {
599
-		/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
600
-		$a = spip_sqlite_showtable($table, $serveur);
601
-		if (isset($a['key']['KEY ' . $nom])) {
602
-			return true;
603
-		}
604
-	}
605
-
606
-	$query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')';
607
-	$res = spip_sqlite_query($query, $serveur, $requeter);
608
-	if (!$requeter) {
609
-		return $res;
610
-	}
611
-	if ($res) {
612
-		return true;
613
-	} else {
614
-		return false;
615
-	}
568
+    if (!($nom or $table or $champs)) {
569
+        spip_log(
570
+            "Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))',
571
+            'sqlite.' . _LOG_ERREUR
572
+        );
573
+
574
+        return false;
575
+    }
576
+
577
+    // SQLite ne differentie pas noms des index en fonction des tables
578
+    // il faut donc creer des noms uniques d'index pour une base sqlite
579
+    $nom = $table . '_' . $nom;
580
+    // enlever d'eventuelles parentheses deja presentes sur champs
581
+    if (!is_array($champs)) {
582
+        if ($champs[0] == '(') {
583
+            $champs = substr($champs, 1, -1);
584
+        }
585
+        $champs = [$champs];
586
+        // supprimer l'info de longueur d'index mysql en fin de champ
587
+        $champs = preg_replace(',\(\d+\)$,', '', $champs);
588
+    }
589
+
590
+    $ifnotexists = '';
591
+    $version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur);
592
+    if (!function_exists('spip_version_compare')) {
593
+        include_spip('plugins/installer');
594
+    }
595
+
596
+    if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
597
+        $ifnotexists = ' IF NOT EXISTS';
598
+    } else {
599
+        /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
600
+        $a = spip_sqlite_showtable($table, $serveur);
601
+        if (isset($a['key']['KEY ' . $nom])) {
602
+            return true;
603
+        }
604
+    }
605
+
606
+    $query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')';
607
+    $res = spip_sqlite_query($query, $serveur, $requeter);
608
+    if (!$requeter) {
609
+        return $res;
610
+    }
611
+    if ($res) {
612
+        return true;
613
+    } else {
614
+        return false;
615
+    }
616 616
 }
617 617
 
618 618
 /**
@@ -629,31 +629,31 @@  discard block
 block discarded – undo
629 629
  * @return int                 Nombre de lignes
630 630
  */
631 631
 function spip_sqlite_count($r, $serveur = '', $requeter = true) {
632
-	if (!$r) {
633
-		return 0;
634
-	}
635
-
636
-	// select ou autre (insert, update,...) ?
637
-	// (link,requete) a compter
638
-	if (is_array($r->spipSqliteRowCount)) {
639
-		list($link, $query) = $r->spipSqliteRowCount;
640
-		// amelioration possible a tester intensivement : pas de order by pour compter !
641
-		// $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query);
642
-		$query = "SELECT count(*) as zzzzsqlitecount FROM ($query)";
643
-		$l = $link->query($query);
644
-		$i = 0;
645
-		if ($l and $z = $l->fetch()) {
646
-			$i = $z['zzzzsqlitecount'];
647
-		}
648
-		$r->spipSqliteRowCount = $i;
649
-	}
650
-	if (isset($r->spipSqliteRowCount)) {
651
-		// Ce compte est faux s'il y a des limit dans la requete :(
652
-		// il retourne le nombre d'enregistrements sans le limit
653
-		return $r->spipSqliteRowCount;
654
-	} else {
655
-		return $r->rowCount();
656
-	}
632
+    if (!$r) {
633
+        return 0;
634
+    }
635
+
636
+    // select ou autre (insert, update,...) ?
637
+    // (link,requete) a compter
638
+    if (is_array($r->spipSqliteRowCount)) {
639
+        list($link, $query) = $r->spipSqliteRowCount;
640
+        // amelioration possible a tester intensivement : pas de order by pour compter !
641
+        // $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query);
642
+        $query = "SELECT count(*) as zzzzsqlitecount FROM ($query)";
643
+        $l = $link->query($query);
644
+        $i = 0;
645
+        if ($l and $z = $l->fetch()) {
646
+            $i = $z['zzzzsqlitecount'];
647
+        }
648
+        $r->spipSqliteRowCount = $i;
649
+    }
650
+    if (isset($r->spipSqliteRowCount)) {
651
+        // Ce compte est faux s'il y a des limit dans la requete :(
652
+        // il retourne le nombre d'enregistrements sans le limit
653
+        return $r->spipSqliteRowCount;
654
+    } else {
655
+        return $r->rowCount();
656
+    }
657 657
 }
658 658
 
659 659
 
@@ -672,30 +672,30 @@  discard block
 block discarded – undo
672 672
  *     - false si la requête a échouée
673 673
  **/
674 674
 function spip_sqlite_countsel(
675
-	$from = [],
676
-	$where = [],
677
-	$groupby = '',
678
-	$having = [],
679
-	$serveur = '',
680
-	$requeter = true
675
+    $from = [],
676
+    $where = [],
677
+    $groupby = '',
678
+    $having = [],
679
+    $serveur = '',
680
+    $requeter = true
681 681
 ) {
682
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
683
-	$r = spip_sqlite_select(
684
-		"COUNT($c)",
685
-		$from,
686
-		$where,
687
-		'',
688
-		'',
689
-		'',
690
-		$having,
691
-		$serveur,
692
-		$requeter
693
-	);
694
-	if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3
695
-		list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur);
696
-	}
697
-
698
-	return $r;
682
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
683
+    $r = spip_sqlite_select(
684
+        "COUNT($c)",
685
+        $from,
686
+        $where,
687
+        '',
688
+        '',
689
+        '',
690
+        $having,
691
+        $serveur,
692
+        $requeter
693
+    );
694
+    if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3
695
+        list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur);
696
+    }
697
+
698
+    return $r;
699 699
 }
700 700
 
701 701
 
@@ -712,24 +712,24 @@  discard block
 block discarded – undo
712 712
  *     - False en cas d'erreur.
713 713
  **/
714 714
 function spip_sqlite_delete($table, $where = '', $serveur = '', $requeter = true) {
715
-	$res = spip_sqlite_query(
716
-		_sqlite_calculer_expression('DELETE FROM', $table, ',')
717
-		. _sqlite_calculer_expression('WHERE', $where),
718
-		$serveur,
719
-		$requeter
720
-	);
715
+    $res = spip_sqlite_query(
716
+        _sqlite_calculer_expression('DELETE FROM', $table, ',')
717
+        . _sqlite_calculer_expression('WHERE', $where),
718
+        $serveur,
719
+        $requeter
720
+    );
721 721
 
722
-	// renvoyer la requete inerte si demandee
723
-	if (!$requeter) {
724
-		return $res;
725
-	}
722
+    // renvoyer la requete inerte si demandee
723
+    if (!$requeter) {
724
+        return $res;
725
+    }
726 726
 
727
-	if ($res) {
728
-		$link = _sqlite_link($serveur);
729
-		return $res->rowCount();
730
-	} else {
731
-		return false;
732
-	}
727
+    if ($res) {
728
+        $link = _sqlite_link($serveur);
729
+        return $res->rowCount();
730
+    } else {
731
+        return false;
732
+    }
733 733
 }
734 734
 
735 735
 
@@ -745,15 +745,15 @@  discard block
 block discarded – undo
745 745
  *     - true si la requête a réussie, false sinon
746 746
  */
747 747
 function spip_sqlite_drop_table($table, $exist = '', $serveur = '', $requeter = true) {
748
-	if ($exist) {
749
-		$exist = ' IF EXISTS';
750
-	}
748
+    if ($exist) {
749
+        $exist = ' IF EXISTS';
750
+    }
751 751
 
752
-	if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) {
753
-		return true;
754
-	} else {
755
-		return false;
756
-	}
752
+    if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) {
753
+        return true;
754
+    } else {
755
+        return false;
756
+    }
757 757
 }
758 758
 
759 759
 
@@ -769,11 +769,11 @@  discard block
 block discarded – undo
769 769
  *     - true si la requête a réussie, false sinon
770 770
  */
771 771
 function spip_sqlite_drop_view($view, $exist = '', $serveur = '', $requeter = true) {
772
-	if ($exist) {
773
-		$exist = ' IF EXISTS';
774
-	}
772
+    if ($exist) {
773
+        $exist = ' IF EXISTS';
774
+    }
775 775
 
776
-	return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter);
776
+    return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter);
777 777
 }
778 778
 
779 779
 /**
@@ -787,20 +787,20 @@  discard block
 block discarded – undo
787 787
  * @return bool ou requete
788 788
  */
789 789
 function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true) {
790
-	if (!($nom or $table)) {
791
-		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR);
790
+    if (!($nom or $table)) {
791
+        spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR);
792 792
 
793
-		return false;
794
-	}
793
+        return false;
794
+    }
795 795
 
796
-	// SQLite ne differentie pas noms des index en fonction des tables
797
-	// il faut donc creer des noms uniques d'index pour une base sqlite
798
-	$index = $table . '_' . $nom;
799
-	$exist = ' IF EXISTS';
796
+    // SQLite ne differentie pas noms des index en fonction des tables
797
+    // il faut donc creer des noms uniques d'index pour une base sqlite
798
+    $index = $table . '_' . $nom;
799
+    $exist = ' IF EXISTS';
800 800
 
801
-	$query = "DROP INDEX$exist $index";
801
+    $query = "DROP INDEX$exist $index";
802 802
 
803
-	return spip_sqlite_query($query, $serveur, $requeter);
803
+    return spip_sqlite_query($query, $serveur, $requeter);
804 804
 }
805 805
 
806 806
 /**
@@ -816,28 +816,28 @@  discard block
 block discarded – undo
816 816
  *     Erreur eventuelle
817 817
  **/
818 818
 function spip_sqlite_error($query = '', $serveur = '') {
819
-	$link = _sqlite_link($serveur);
819
+    $link = _sqlite_link($serveur);
820 820
 
821
-	if ($link) {
822
-		$errs = $link->errorInfo();
823
-		$s = _sqlite_last_error_from_link($link);
824
-	} else {
825
-		$s = ': aucune ressource sqlite (link)';
826
-	}
827
-	if ($s) {
828
-		$trace = debug_backtrace();
829
-		if ($trace[0]['function'] != 'spip_sqlite_error') {
830
-			spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR);
831
-		}
832
-	}
821
+    if ($link) {
822
+        $errs = $link->errorInfo();
823
+        $s = _sqlite_last_error_from_link($link);
824
+    } else {
825
+        $s = ': aucune ressource sqlite (link)';
826
+    }
827
+    if ($s) {
828
+        $trace = debug_backtrace();
829
+        if ($trace[0]['function'] != 'spip_sqlite_error') {
830
+            spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR);
831
+        }
832
+    }
833 833
 
834
-	return $s;
834
+    return $s;
835 835
 }
836 836
 
837 837
 function _sqlite_last_error_from_link($link) {
838
-	if ($link) {
839
-		$errs = $link->errorInfo();
840
-		/*
838
+    if ($link) {
839
+        $errs = $link->errorInfo();
840
+        /*
841 841
 			$errs[0]
842 842
 				numero SQLState ('HY000' souvent lors d'une erreur)
843 843
 				http://www.easysoft.com/developer/interfaces/odbc/sqlstate_status_return_codes.html
@@ -847,11 +847,11 @@  discard block
 block discarded – undo
847 847
 			$errs[2]
848 848
 				Le texte du message d'erreur
849 849
 		*/
850
-		if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur
851
-			return "$errs[2]";
852
-		}
853
-	}
854
-	return '';
850
+        if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur
851
+            return "$errs[2]";
852
+        }
853
+    }
854
+    return '';
855 855
 }
856 856
 
857 857
 /**
@@ -868,23 +868,23 @@  discard block
 block discarded – undo
868 868
  *    'HY000/1' : numéro de l'erreur SQLState / numéro d'erreur interne SQLite (en sqlite 3)
869 869
  **/
870 870
 function spip_sqlite_errno($serveur = '') {
871
-	$link = _sqlite_link($serveur);
871
+    $link = _sqlite_link($serveur);
872 872
 
873
-	if ($link) {
874
-		$t = $link->errorInfo();
875
-		$s = ltrim($t[0], '0'); // 00000 si pas d'erreur
876
-		if ($s) {
877
-			$s .= ' / ' . $t[1];
878
-		} // ajoute l'erreur du moteur SQLite
879
-	} else {
880
-		$s = ': aucune ressource sqlite (link)';
881
-	}
873
+    if ($link) {
874
+        $t = $link->errorInfo();
875
+        $s = ltrim($t[0], '0'); // 00000 si pas d'erreur
876
+        if ($s) {
877
+            $s .= ' / ' . $t[1];
878
+        } // ajoute l'erreur du moteur SQLite
879
+    } else {
880
+        $s = ': aucune ressource sqlite (link)';
881
+    }
882 882
 
883
-	if ($s) {
884
-		spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR);
885
-	}
883
+    if ($s) {
884
+        spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR);
885
+    }
886 886
 
887
-	return $s ? $s : 0;
887
+    return $s ? $s : 0;
888 888
 }
889 889
 
890 890
 
@@ -900,19 +900,19 @@  discard block
 block discarded – undo
900 900
  *     - false si on a pas pu avoir d'explication
901 901
  */
902 902
 function spip_sqlite_explain($query, $serveur = '', $requeter = true) {
903
-	if (strpos(ltrim($query), 'SELECT') !== 0) {
904
-		return [];
905
-	}
903
+    if (strpos(ltrim($query), 'SELECT') !== 0) {
904
+        return [];
905
+    }
906 906
 
907
-	$query = spip_sqlite::traduire_requete($query, $serveur);
908
-	$query = 'EXPLAIN ' . $query;
909
-	if (!$requeter) {
910
-		return $query;
911
-	}
912
-	// on ne trace pas ces requetes, sinon on obtient un tracage sans fin...
913
-	$r = spip_sqlite::executer_requete($query, $serveur, false);
907
+    $query = spip_sqlite::traduire_requete($query, $serveur);
908
+    $query = 'EXPLAIN ' . $query;
909
+    if (!$requeter) {
910
+        return $query;
911
+    }
912
+    // on ne trace pas ces requetes, sinon on obtient un tracage sans fin...
913
+    $r = spip_sqlite::executer_requete($query, $serveur, false);
914 914
 
915
-	return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier
915
+    return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier
916 916
 }
917 917
 
918 918
 
@@ -929,30 +929,30 @@  discard block
 block discarded – undo
929 929
  */
930 930
 function spip_sqlite_fetch($r, $t = '', $serveur = '', $requeter = true) {
931 931
 
932
-	$link = _sqlite_link($serveur);
933
-	$t = $t ? $t : SPIP_SQLITE3_ASSOC;
932
+    $link = _sqlite_link($serveur);
933
+    $t = $t ? $t : SPIP_SQLITE3_ASSOC;
934 934
 
935
-	$retour = false;
936
-	if ($r) {
937
-		$retour = $r->fetch($t);
938
-	}
935
+    $retour = false;
936
+    if ($r) {
937
+        $retour = $r->fetch($t);
938
+    }
939 939
 
940
-	// Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff !
941
-	// suppression de 'table.' pour toutes les cles (c'est un peu violent !)
942
-	// c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non
943
-	if (
944
-		$retour
945
-		and strpos(implode('', array_keys($retour)), '.') !== false
946
-	) {
947
-		foreach ($retour as $cle => $val) {
948
-			if (($pos = strpos($cle, '.')) !== false) {
949
-				$retour[substr($cle, $pos + 1)] = &$retour[$cle];
950
-				unset($retour[$cle]);
951
-			}
952
-		}
953
-	}
940
+    // Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff !
941
+    // suppression de 'table.' pour toutes les cles (c'est un peu violent !)
942
+    // c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non
943
+    if (
944
+        $retour
945
+        and strpos(implode('', array_keys($retour)), '.') !== false
946
+    ) {
947
+        foreach ($retour as $cle => $val) {
948
+            if (($pos = strpos($cle, '.')) !== false) {
949
+                $retour[substr($cle, $pos + 1)] = &$retour[$cle];
950
+                unset($retour[$cle]);
951
+            }
952
+        }
953
+    }
954 954
 
955
-	return $retour;
955
+    return $retour;
956 956
 }
957 957
 
958 958
 /**
@@ -965,8 +965,8 @@  discard block
 block discarded – undo
965 965
  * @return bool True si déplacement réussi, false sinon.
966 966
  **/
967 967
 function spip_sqlite_seek($r, $row_number, $serveur = '', $requeter = true) {
968
-	// encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind...
969
-	return false;
968
+    // encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind...
969
+    return false;
970 970
 }
971 971
 
972 972
 
@@ -982,10 +982,10 @@  discard block
 block discarded – undo
982 982
  * @return bool                True si réussi
983 983
  */
984 984
 function spip_sqlite_free(&$r, $serveur = '', $requeter = true) {
985
-	unset($r);
985
+    unset($r);
986 986
 
987
-	return true;
988
-	//return sqlite_free_result($r);
987
+    return true;
988
+    //return sqlite_free_result($r);
989 989
 }
990 990
 
991 991
 
@@ -1000,8 +1000,8 @@  discard block
 block discarded – undo
1000 1000
  * @return void
1001 1001
  */
1002 1002
 function spip_sqlite_get_charset($charset = [], $serveur = '', $requeter = true) {
1003
-	//$c = !$charset ? '' : (" LIKE "._q($charset['charset']));
1004
-	//return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur);
1003
+    //$c = !$charset ? '' : (" LIKE "._q($charset['charset']));
1004
+    //return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur);
1005 1005
 }
1006 1006
 
1007 1007
 
@@ -1016,7 +1016,7 @@  discard block
 block discarded – undo
1016 1016
  *     Valeur hexadécimale pour SQLite
1017 1017
  **/
1018 1018
 function spip_sqlite_hex($v) {
1019
-	return hexdec($v);
1019
+    return hexdec($v);
1020 1020
 }
1021 1021
 
1022 1022
 
@@ -1038,7 +1038,7 @@  discard block
 block discarded – undo
1038 1038
  *     Expression de requête SQL
1039 1039
  **/
1040 1040
 function spip_sqlite_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) {
1041
-	return "($val $not IN ($valeurs))";
1041
+    return "($val $not IN ($valeurs))";
1042 1042
 }
1043 1043
 
1044 1044
 
@@ -1066,20 +1066,20 @@  discard block
 block discarded – undo
1066 1066
  **/
1067 1067
 function spip_sqlite_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1068 1068
 
1069
-	$query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1070
-	if ($r = spip_sqlite_query($query, $serveur, $requeter)) {
1071
-		if (!$requeter) {
1072
-			return $r;
1073
-		}
1074
-		$nb = spip_sqlite::last_insert_id($serveur);
1075
-	} else {
1076
-		$nb = false;
1077
-	}
1069
+    $query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1070
+    if ($r = spip_sqlite_query($query, $serveur, $requeter)) {
1071
+        if (!$requeter) {
1072
+            return $r;
1073
+        }
1074
+        $nb = spip_sqlite::last_insert_id($serveur);
1075
+    } else {
1076
+        $nb = false;
1077
+    }
1078 1078
 
1079
-	$err = spip_sqlite_error($query, $serveur);
1079
+    $err = spip_sqlite_error($query, $serveur);
1080 1080
 
1081
-	// cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1082
-	return isset($_GET['var_profile']) ? $r : $nb;
1081
+    // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1082
+    return isset($_GET['var_profile']) ? $r : $nb;
1083 1083
 }
1084 1084
 
1085 1085
 
@@ -1104,28 +1104,28 @@  discard block
 block discarded – undo
1104 1104
  *     - Tableau de description de la requête et du temps d'exécution, si var_profile activé
1105 1105
  **/
1106 1106
 function spip_sqlite_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) {
1107
-	if (!$desc) {
1108
-		$desc = description_table($table, $serveur);
1109
-	}
1110
-	if (!$desc) {
1111
-		die("$table insertion sans description");
1112
-	}
1113
-	$fields = isset($desc['field']) ? $desc['field'] : [];
1107
+    if (!$desc) {
1108
+        $desc = description_table($table, $serveur);
1109
+    }
1110
+    if (!$desc) {
1111
+        die("$table insertion sans description");
1112
+    }
1113
+    $fields = isset($desc['field']) ? $desc['field'] : [];
1114 1114
 
1115
-	foreach ($couples as $champ => $val) {
1116
-		$couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1117
-	}
1115
+    foreach ($couples as $champ => $val) {
1116
+        $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1117
+    }
1118 1118
 
1119
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1120
-	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1119
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1120
+    $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1121 1121
 
1122
-	$cles = $valeurs = '';
1123
-	if (count($couples)) {
1124
-		$cles = '(' . join(',', array_keys($couples)) . ')';
1125
-		$valeurs = '(' . join(',', $couples) . ')';
1126
-	}
1122
+    $cles = $valeurs = '';
1123
+    if (count($couples)) {
1124
+        $cles = '(' . join(',', array_keys($couples)) . ')';
1125
+        $valeurs = '(' . join(',', $couples) . ')';
1126
+    }
1127 1127
 
1128
-	return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
1128
+    return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
1129 1129
 }
1130 1130
 
1131 1131
 
@@ -1149,70 +1149,70 @@  discard block
 block discarded – undo
1149 1149
  *     - False en cas d'erreur.
1150 1150
  **/
1151 1151
 function spip_sqlite_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) {
1152
-	if (!$desc) {
1153
-		$desc = description_table($table, $serveur);
1154
-	}
1155
-	if (!$desc) {
1156
-		die("$table insertion sans description");
1157
-	}
1158
-	if (!isset($desc['field'])) {
1159
-		$desc['field'] = [];
1160
-	}
1161
-
1162
-	// recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci
1163
-	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1164
-
1165
-	// seul le nom de la table est a traduire ici :
1166
-	// le faire une seule fois au debut
1167
-	$query_start = "INSERT INTO $table ";
1168
-	$query_start = spip_sqlite::traduire_requete($query_start, $serveur);
1169
-
1170
-	// ouvrir une transaction
1171
-	if ($requeter) {
1172
-		spip_sqlite::demarrer_transaction($serveur);
1173
-	}
1174
-
1175
-	while ($couples = array_shift($tab_couples)) {
1176
-		foreach ($couples as $champ => $val) {
1177
-			$couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]);
1178
-		}
1179
-
1180
-		// inserer les champs timestamp par defaut
1181
-		$couples = array_merge($maj, $couples);
1182
-
1183
-		$champs = $valeurs = '';
1184
-		if (count($couples)) {
1185
-			$champs = '(' . join(',', array_keys($couples)) . ')';
1186
-			$valeurs = '(' . join(',', $couples) . ')';
1187
-			$query = $query_start . "$champs VALUES $valeurs";
1188
-		} else {
1189
-			$query = $query_start . 'DEFAULT VALUES';
1190
-		}
1191
-
1192
-		if ($requeter) {
1193
-			$retour = spip_sqlite::executer_requete($query, $serveur);
1194
-		}
1195
-
1196
-		// sur le dernier couple uniquement
1197
-		if (!count($tab_couples)) {
1198
-			$nb = 0;
1199
-			if ($requeter) {
1200
-				$nb = spip_sqlite::last_insert_id($serveur);
1201
-			} else {
1202
-				return $query;
1203
-			}
1204
-		}
1205
-
1206
-		$err = spip_sqlite_error($query, $serveur);
1207
-	}
1208
-
1209
-	if ($requeter) {
1210
-		spip_sqlite::finir_transaction($serveur);
1211
-	}
1212
-
1213
-	// renvoie le dernier id d'autoincrement ajoute
1214
-	// cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1215
-	return isset($_GET['var_profile']) ? $retour : $nb;
1152
+    if (!$desc) {
1153
+        $desc = description_table($table, $serveur);
1154
+    }
1155
+    if (!$desc) {
1156
+        die("$table insertion sans description");
1157
+    }
1158
+    if (!isset($desc['field'])) {
1159
+        $desc['field'] = [];
1160
+    }
1161
+
1162
+    // recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci
1163
+    $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1164
+
1165
+    // seul le nom de la table est a traduire ici :
1166
+    // le faire une seule fois au debut
1167
+    $query_start = "INSERT INTO $table ";
1168
+    $query_start = spip_sqlite::traduire_requete($query_start, $serveur);
1169
+
1170
+    // ouvrir une transaction
1171
+    if ($requeter) {
1172
+        spip_sqlite::demarrer_transaction($serveur);
1173
+    }
1174
+
1175
+    while ($couples = array_shift($tab_couples)) {
1176
+        foreach ($couples as $champ => $val) {
1177
+            $couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]);
1178
+        }
1179
+
1180
+        // inserer les champs timestamp par defaut
1181
+        $couples = array_merge($maj, $couples);
1182
+
1183
+        $champs = $valeurs = '';
1184
+        if (count($couples)) {
1185
+            $champs = '(' . join(',', array_keys($couples)) . ')';
1186
+            $valeurs = '(' . join(',', $couples) . ')';
1187
+            $query = $query_start . "$champs VALUES $valeurs";
1188
+        } else {
1189
+            $query = $query_start . 'DEFAULT VALUES';
1190
+        }
1191
+
1192
+        if ($requeter) {
1193
+            $retour = spip_sqlite::executer_requete($query, $serveur);
1194
+        }
1195
+
1196
+        // sur le dernier couple uniquement
1197
+        if (!count($tab_couples)) {
1198
+            $nb = 0;
1199
+            if ($requeter) {
1200
+                $nb = spip_sqlite::last_insert_id($serveur);
1201
+            } else {
1202
+                return $query;
1203
+            }
1204
+        }
1205
+
1206
+        $err = spip_sqlite_error($query, $serveur);
1207
+    }
1208
+
1209
+    if ($requeter) {
1210
+        spip_sqlite::finir_transaction($serveur);
1211
+    }
1212
+
1213
+    // renvoie le dernier id d'autoincrement ajoute
1214
+    // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
1215
+    return isset($_GET['var_profile']) ? $retour : $nb;
1216 1216
 }
1217 1217
 
1218 1218
 
@@ -1227,7 +1227,7 @@  discard block
 block discarded – undo
1227 1227
  *     Toujours true.
1228 1228
  **/
1229 1229
 function spip_sqlite_preferer_transaction($serveur = '', $requeter = true) {
1230
-	return true;
1230
+    return true;
1231 1231
 }
1232 1232
 
1233 1233
 /**
@@ -1244,12 +1244,12 @@  discard block
 block discarded – undo
1244 1244
  *     string si texte de la requête demandé, true sinon
1245 1245
  **/
1246 1246
 function spip_sqlite_demarrer_transaction($serveur = '', $requeter = true) {
1247
-	if (!$requeter) {
1248
-		return 'BEGIN TRANSACTION';
1249
-	}
1250
-	spip_sqlite::demarrer_transaction($serveur);
1247
+    if (!$requeter) {
1248
+        return 'BEGIN TRANSACTION';
1249
+    }
1250
+    spip_sqlite::demarrer_transaction($serveur);
1251 1251
 
1252
-	return true;
1252
+    return true;
1253 1253
 }
1254 1254
 
1255 1255
 /**
@@ -1263,12 +1263,12 @@  discard block
 block discarded – undo
1263 1263
  *     string si texte de la requête demandé, true sinon
1264 1264
  **/
1265 1265
 function spip_sqlite_terminer_transaction($serveur = '', $requeter = true) {
1266
-	if (!$requeter) {
1267
-		return 'COMMIT';
1268
-	}
1269
-	spip_sqlite::finir_transaction($serveur);
1266
+    if (!$requeter) {
1267
+        return 'COMMIT';
1268
+    }
1269
+    spip_sqlite::finir_transaction($serveur);
1270 1270
 
1271
-	return true;
1271
+    return true;
1272 1272
 }
1273 1273
 
1274 1274
 
@@ -1283,27 +1283,27 @@  discard block
 block discarded – undo
1283 1283
  *     Liste des noms de bases
1284 1284
  **/
1285 1285
 function spip_sqlite_listdbs($serveur = '', $requeter = true) {
1286
-	_sqlite_init();
1286
+    _sqlite_init();
1287 1287
 
1288
-	if (!is_dir($d = substr(_DIR_DB, 0, -1))) {
1289
-		return [];
1290
-	}
1288
+    if (!is_dir($d = substr(_DIR_DB, 0, -1))) {
1289
+        return [];
1290
+    }
1291 1291
 
1292
-	include_spip('inc/flock');
1293
-	$bases = preg_files($d, $pattern = '(.*)\.sqlite$');
1294
-	$bds = [];
1292
+    include_spip('inc/flock');
1293
+    $bases = preg_files($d, $pattern = '(.*)\.sqlite$');
1294
+    $bds = [];
1295 1295
 
1296
-	foreach ($bases as $b) {
1297
-		// pas de bases commencant pas sqlite
1298
-		// (on s'en sert pour l'installation pour simuler la presence d'un serveur)
1299
-		// les bases sont de la forme _sqliteX_tmp_spip_install.sqlite
1300
-		if (strpos($b, '_sqlite')) {
1301
-			continue;
1302
-		}
1303
-		$bds[] = preg_replace(";.*/$pattern;iS", '$1', $b);
1304
-	}
1296
+    foreach ($bases as $b) {
1297
+        // pas de bases commencant pas sqlite
1298
+        // (on s'en sert pour l'installation pour simuler la presence d'un serveur)
1299
+        // les bases sont de la forme _sqliteX_tmp_spip_install.sqlite
1300
+        if (strpos($b, '_sqlite')) {
1301
+            continue;
1302
+        }
1303
+        $bds[] = preg_replace(";.*/$pattern;iS", '$1', $b);
1304
+    }
1305 1305
 
1306
-	return $bds;
1306
+    return $bds;
1307 1307
 }
1308 1308
 
1309 1309
 
@@ -1318,9 +1318,9 @@  discard block
 block discarded – undo
1318 1318
  * @return string       Texte de sélection pour la requête
1319 1319
  */
1320 1320
 function spip_sqlite_multi($objet, $lang) {
1321
-	$r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi";
1321
+    $r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi";
1322 1322
 
1323
-	return $r;
1323
+    return $r;
1324 1324
 }
1325 1325
 
1326 1326
 
@@ -1337,15 +1337,15 @@  discard block
 block discarded – undo
1337 1337
  * @return bool|string true / false / requete
1338 1338
  **/
1339 1339
 function spip_sqlite_optimize($table, $serveur = '', $requeter = true) {
1340
-	static $do = false;
1341
-	if ($requeter and $do) {
1342
-		return true;
1343
-	}
1344
-	if ($requeter) {
1345
-		$do = true;
1346
-	}
1340
+    static $do = false;
1341
+    if ($requeter and $do) {
1342
+        return true;
1343
+    }
1344
+    if ($requeter) {
1345
+        $do = true;
1346
+    }
1347 1347
 
1348
-	return spip_sqlite_query('VACUUM', $serveur, $requeter);
1348
+    return spip_sqlite_query('VACUUM', $serveur, $requeter);
1349 1349
 }
1350 1350
 
1351 1351
 
@@ -1362,15 +1362,15 @@  discard block
 block discarded – undo
1362 1362
  *    Donnée prête à être utilisée par le gestionnaire SQL
1363 1363
  */
1364 1364
 function spip_sqlite_quote($v, $type = '') {
1365
-	if (!is_array($v)) {
1366
-		return _sqlite_calculer_cite($v, $type);
1367
-	}
1368
-	// si c'est un tableau, le parcourir en propageant le type
1369
-	foreach ($v as $k => $r) {
1370
-		$v[$k] = spip_sqlite_quote($r, $type);
1371
-	}
1365
+    if (!is_array($v)) {
1366
+        return _sqlite_calculer_cite($v, $type);
1367
+    }
1368
+    // si c'est un tableau, le parcourir en propageant le type
1369
+    foreach ($v as $k => $r) {
1370
+        $v[$k] = spip_sqlite_quote($r, $type);
1371
+    }
1372 1372
 
1373
-	return join(',', $v);
1373
+    return join(',', $v);
1374 1374
 }
1375 1375
 
1376 1376
 
@@ -1387,9 +1387,9 @@  discard block
 block discarded – undo
1387 1387
  *     Expression SQL
1388 1388
  **/
1389 1389
 function spip_sqlite_date_proche($champ, $interval, $unite) {
1390
-	$op = (($interval <= 0) ? '>' : '<');
1390
+    $op = (($interval <= 0) ? '>' : '<');
1391 1391
 
1392
-	return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))";
1392
+    return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))";
1393 1393
 }
1394 1394
 
1395 1395
 
@@ -1407,48 +1407,48 @@  discard block
 block discarded – undo
1407 1407
  *     l'état de la table après la réparation
1408 1408
  */
1409 1409
 function spip_sqlite_repair($table, $serveur = '', $requeter = true) {
1410
-	if (
1411
-		$desc = spip_sqlite_showtable($table, $serveur)
1412
-		and isset($desc['field'])
1413
-		and is_array($desc['field'])
1414
-	) {
1415
-		foreach ($desc['field'] as $c => $d) {
1416
-			if (
1417
-				preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d)
1418
-				and stripos($d, 'NOT NULL') !== false
1419
-				and stripos($d, 'DEFAULT') === false
1420
-				/* pas touche aux cles primaires */
1421
-				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1422
-			) {
1423
-				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur);
1424
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1425
-			}
1426
-			if (
1427
-				preg_match(',^(INTEGER),i', $d)
1428
-				and stripos($d, 'NOT NULL') !== false
1429
-				and stripos($d, 'DEFAULT') === false
1430
-				/* pas touche aux cles primaires */
1431
-				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1432
-			) {
1433
-				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur);
1434
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1435
-			}
1436
-			if (
1437
-				preg_match(',^(datetime),i', $d)
1438
-				and stripos($d, 'NOT NULL') !== false
1439
-				and stripos($d, 'DEFAULT') === false
1440
-				/* pas touche aux cles primaires */
1441
-				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1442
-			) {
1443
-				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur);
1444
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1445
-			}
1446
-		}
1447
-
1448
-		return [' OK '];
1449
-	}
1450
-
1451
-	return [' ERROR '];
1410
+    if (
1411
+        $desc = spip_sqlite_showtable($table, $serveur)
1412
+        and isset($desc['field'])
1413
+        and is_array($desc['field'])
1414
+    ) {
1415
+        foreach ($desc['field'] as $c => $d) {
1416
+            if (
1417
+                preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d)
1418
+                and stripos($d, 'NOT NULL') !== false
1419
+                and stripos($d, 'DEFAULT') === false
1420
+                /* pas touche aux cles primaires */
1421
+                and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1422
+            ) {
1423
+                spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur);
1424
+                spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1425
+            }
1426
+            if (
1427
+                preg_match(',^(INTEGER),i', $d)
1428
+                and stripos($d, 'NOT NULL') !== false
1429
+                and stripos($d, 'DEFAULT') === false
1430
+                /* pas touche aux cles primaires */
1431
+                and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1432
+            ) {
1433
+                spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur);
1434
+                spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1435
+            }
1436
+            if (
1437
+                preg_match(',^(datetime),i', $d)
1438
+                and stripos($d, 'NOT NULL') !== false
1439
+                and stripos($d, 'DEFAULT') === false
1440
+                /* pas touche aux cles primaires */
1441
+                and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1442
+            ) {
1443
+                spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur);
1444
+                spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1445
+            }
1446
+        }
1447
+
1448
+        return [' OK '];
1449
+    }
1450
+
1451
+    return [' ERROR '];
1452 1452
 }
1453 1453
 
1454 1454
 
@@ -1477,25 +1477,25 @@  discard block
 block discarded – undo
1477 1477
  *     - False en cas d'erreur.
1478 1478
  **/
1479 1479
 function spip_sqlite_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) {
1480
-	if (!$desc) {
1481
-		$desc = description_table($table, $serveur);
1482
-	}
1483
-	if (!$desc) {
1484
-		die("$table insertion sans description");
1485
-	}
1486
-	$fields = isset($desc['field']) ? $desc['field'] : [];
1480
+    if (!$desc) {
1481
+        $desc = description_table($table, $serveur);
1482
+    }
1483
+    if (!$desc) {
1484
+        die("$table insertion sans description");
1485
+    }
1486
+    $fields = isset($desc['field']) ? $desc['field'] : [];
1487 1487
 
1488
-	foreach ($couples as $champ => $val) {
1489
-		$couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1490
-	}
1488
+    foreach ($couples as $champ => $val) {
1489
+        $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1490
+    }
1491 1491
 
1492
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1493
-	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1492
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1493
+    $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1494 1494
 
1495
-	return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1496
-		',',
1497
-		$couples
1498
-	) . ')', $serveur);
1495
+    return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1496
+        ',',
1497
+        $couples
1498
+    ) . ')', $serveur);
1499 1499
 }
1500 1500
 
1501 1501
 
@@ -1525,13 +1525,13 @@  discard block
 block discarded – undo
1525 1525
  **/
1526 1526
 function spip_sqlite_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) {
1527 1527
 
1528
-	// boucler pour trainter chaque requete independemment
1529
-	foreach ($tab_couples as $couples) {
1530
-		$retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter);
1531
-	}
1528
+    // boucler pour trainter chaque requete independemment
1529
+    foreach ($tab_couples as $couples) {
1530
+        $retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter);
1531
+    }
1532 1532
 
1533
-	// renvoie le dernier id
1534
-	return $retour;
1533
+    // renvoie le dernier id
1534
+    return $retour;
1535 1535
 }
1536 1536
 
1537 1537
 
@@ -1558,44 +1558,44 @@  discard block
 block discarded – undo
1558 1558
  *     - array  : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer.
1559 1559
  */
1560 1560
 function spip_sqlite_select(
1561
-	$select,
1562
-	$from,
1563
-	$where = '',
1564
-	$groupby = '',
1565
-	$orderby = '',
1566
-	$limit = '',
1567
-	$having = '',
1568
-	$serveur = '',
1569
-	$requeter = true
1561
+    $select,
1562
+    $from,
1563
+    $where = '',
1564
+    $groupby = '',
1565
+    $orderby = '',
1566
+    $limit = '',
1567
+    $having = '',
1568
+    $serveur = '',
1569
+    $requeter = true
1570 1570
 ) {
1571 1571
 
1572
-	// version() n'est pas connu de sqlite
1573
-	$select = str_replace('version()', 'sqlite_version()', $select);
1572
+    // version() n'est pas connu de sqlite
1573
+    $select = str_replace('version()', 'sqlite_version()', $select);
1574 1574
 
1575
-	// recomposer from
1576
-	$from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from));
1575
+    // recomposer from
1576
+    $from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from));
1577 1577
 
1578
-	$query =
1579
-		_sqlite_calculer_expression('SELECT', $select, ', ')
1580
-		. _sqlite_calculer_expression('FROM', $from, ', ')
1581
-		. _sqlite_calculer_expression('WHERE', $where)
1582
-		. _sqlite_calculer_expression('GROUP BY', $groupby, ',')
1583
-		. _sqlite_calculer_expression('HAVING', $having)
1584
-		. ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '')
1585
-		. ($limit ? "\nLIMIT $limit" : '');
1578
+    $query =
1579
+        _sqlite_calculer_expression('SELECT', $select, ', ')
1580
+        . _sqlite_calculer_expression('FROM', $from, ', ')
1581
+        . _sqlite_calculer_expression('WHERE', $where)
1582
+        . _sqlite_calculer_expression('GROUP BY', $groupby, ',')
1583
+        . _sqlite_calculer_expression('HAVING', $having)
1584
+        . ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '')
1585
+        . ($limit ? "\nLIMIT $limit" : '');
1586 1586
 
1587
-	// dans un select, on doit renvoyer la requête en cas d'erreur
1588
-	$res = spip_sqlite_query($query, $serveur, $requeter);
1589
-	// texte de la requete demande ?
1590
-	if (!$requeter) {
1591
-		return $res;
1592
-	}
1593
-	// erreur survenue ?
1594
-	if ($res === false) {
1595
-		return spip_sqlite::traduire_requete($query, $serveur);
1596
-	}
1587
+    // dans un select, on doit renvoyer la requête en cas d'erreur
1588
+    $res = spip_sqlite_query($query, $serveur, $requeter);
1589
+    // texte de la requete demande ?
1590
+    if (!$requeter) {
1591
+        return $res;
1592
+    }
1593
+    // erreur survenue ?
1594
+    if ($res === false) {
1595
+        return spip_sqlite::traduire_requete($query, $serveur);
1596
+    }
1597 1597
 
1598
-	return $res;
1598
+    return $res;
1599 1599
 }
1600 1600
 
1601 1601
 
@@ -1614,32 +1614,32 @@  discard block
 block discarded – undo
1614 1614
  *     - False en cas d'erreur.
1615 1615
  **/
1616 1616
 function spip_sqlite_selectdb($db, $serveur = '', $requeter = true) {
1617
-	_sqlite_init();
1617
+    _sqlite_init();
1618 1618
 
1619
-	// interdire la creation d'une nouvelle base,
1620
-	// sauf si on est dans l'installation
1621
-	if (
1622
-		!is_file($f = _DIR_DB . $db . '.sqlite')
1623
-		&& (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)
1624
-	) {
1625
-		spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS);
1619
+    // interdire la creation d'une nouvelle base,
1620
+    // sauf si on est dans l'installation
1621
+    if (
1622
+        !is_file($f = _DIR_DB . $db . '.sqlite')
1623
+        && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)
1624
+    ) {
1625
+        spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS);
1626 1626
 
1627
-		return false;
1628
-	}
1627
+        return false;
1628
+    }
1629 1629
 
1630
-	// se connecter a la base indiquee
1631
-	// avec les identifiants connus
1632
-	$index = $serveur ? $serveur : 0;
1630
+    // se connecter a la base indiquee
1631
+    // avec les identifiants connus
1632
+    $index = $serveur ? $serveur : 0;
1633 1633
 
1634
-	if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) {
1635
-		if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
1636
-			return $db;
1637
-		}
1638
-	} else {
1639
-		spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS);
1634
+    if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) {
1635
+        if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
1636
+            return $db;
1637
+        }
1638
+    } else {
1639
+        spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS);
1640 1640
 
1641
-		return false;
1642
-	}
1641
+        return false;
1642
+    }
1643 1643
 }
1644 1644
 
1645 1645
 
@@ -1654,8 +1654,8 @@  discard block
 block discarded – undo
1654 1654
  * @return void
1655 1655
  */
1656 1656
 function spip_sqlite_set_charset($charset, $serveur = '', $requeter = true) {
1657
-	# spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR);
1658
-	# return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas !
1657
+    # spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR);
1658
+    # return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas !
1659 1659
 }
1660 1660
 
1661 1661
 
@@ -1673,24 +1673,24 @@  discard block
 block discarded – undo
1673 1673
  *     Ressource à utiliser avec sql_fetch()
1674 1674
  **/
1675 1675
 function spip_sqlite_showbase($match, $serveur = '', $requeter = true) {
1676
-	// type est le type d'entrée : table / index / view
1677
-	// on ne retourne que les tables (?) et non les vues...
1678
-	# ESCAPE non supporte par les versions sqlite <3
1679
-	#	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter);
1680
-	$match = preg_quote($match);
1681
-	$match = str_replace('\\\_', '[[TIRETBAS]]', $match);
1682
-	$match = str_replace('\\\%', '[[POURCENT]]', $match);
1683
-	$match = str_replace('_', '.', $match);
1684
-	$match = str_replace('%', '.*', $match);
1685
-	$match = str_replace('[[TIRETBAS]]', '_', $match);
1686
-	$match = str_replace('[[POURCENT]]', '%', $match);
1687
-	$match = "^$match$";
1688
-
1689
-	return spip_sqlite_query(
1690
-		"SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match),
1691
-		$serveur,
1692
-		$requeter
1693
-	);
1676
+    // type est le type d'entrée : table / index / view
1677
+    // on ne retourne que les tables (?) et non les vues...
1678
+    # ESCAPE non supporte par les versions sqlite <3
1679
+    #	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter);
1680
+    $match = preg_quote($match);
1681
+    $match = str_replace('\\\_', '[[TIRETBAS]]', $match);
1682
+    $match = str_replace('\\\%', '[[POURCENT]]', $match);
1683
+    $match = str_replace('_', '.', $match);
1684
+    $match = str_replace('%', '.*', $match);
1685
+    $match = str_replace('[[TIRETBAS]]', '_', $match);
1686
+    $match = str_replace('[[POURCENT]]', '%', $match);
1687
+    $match = "^$match$";
1688
+
1689
+    return spip_sqlite_query(
1690
+        "SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match),
1691
+        $serveur,
1692
+        $requeter
1693
+    );
1694 1694
 }
1695 1695
 
1696 1696
 /**
@@ -1707,19 +1707,19 @@  discard block
 block discarded – undo
1707 1707
  *     Ressource à utiliser avec sql_fetch()
1708 1708
  **/
1709 1709
 function spip_sqlite_table_exists(string $table, $serveur = '', $requeter = true) {
1710
-	$r = spip_sqlite_query(
1711
-		'SELECT name FROM sqlite_master WHERE'
1712
-		. ' type=\'table\''
1713
-		. ' AND name=' . spip_sqlite_quote($table, 'string')
1714
-		. ' AND name NOT LIKE \'sqlite_%\'', 
1715
-		$serveur, 
1716
-		$requeter
1717
-	);
1718
-	if (!$requeter) {
1719
-		return $r;
1720
-	}
1721
-	$res = spip_sqlite_fetch($r);
1722
-	return (bool) $res;
1710
+    $r = spip_sqlite_query(
1711
+        'SELECT name FROM sqlite_master WHERE'
1712
+        . ' type=\'table\''
1713
+        . ' AND name=' . spip_sqlite_quote($table, 'string')
1714
+        . ' AND name NOT LIKE \'sqlite_%\'', 
1715
+        $serveur, 
1716
+        $requeter
1717
+    );
1718
+    if (!$requeter) {
1719
+        return $r;
1720
+    }
1721
+    $res = spip_sqlite_fetch($r);
1722
+    return (bool) $res;
1723 1723
 }
1724 1724
 
1725 1725
 define('_SQLITE_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -1742,129 +1742,129 @@  discard block
 block discarded – undo
1742 1742
  *     - array description de la table sinon
1743 1743
  */
1744 1744
 function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true) {
1745
-	$query =
1746
-		'SELECT sql, type FROM'
1747
-		. ' (SELECT * FROM sqlite_master UNION ALL'
1748
-		. ' SELECT * FROM sqlite_temp_master)'
1749
-		. " WHERE tbl_name LIKE '$nom_table'"
1750
-		. " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1751
-		. ' ORDER BY substr(type,2,1), name';
1752
-
1753
-	$a = spip_sqlite_query($query, $serveur, $requeter);
1754
-	if (!$a) {
1755
-		return '';
1756
-	}
1757
-	if (!$requeter) {
1758
-		return $a;
1759
-	}
1760
-	if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1761
-		return '';
1762
-	}
1763
-	$vue = ($a['type'] == 'view'); // table | vue
1764
-
1765
-	// c'est une table
1766
-	// il faut parser le create
1767
-	if (!$vue) {
1768
-		if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1769
-			return '';
1770
-		} else {
1771
-			$desc = $r[1];
1772
-			// extraction d'une KEY éventuelle en prenant garde de ne pas
1773
-			// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1774
-			if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1775
-				$namedkeys = $r[2];
1776
-				$desc = $r[1];
1777
-			} else {
1778
-				$namedkeys = '';
1779
-			}
1780
-
1781
-			$fields = [];
1782
-			$keys = [];
1783
-
1784
-			// enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1785
-			// par exemple s'il contiennent une virgule.
1786
-			// /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1787
-			list($desc, $echaps) = query_echappe_textes($desc);
1788
-
1789
-			// separer toutes les descriptions de champs, separes par des virgules
1790
-			# /!\ explode peut exploser aussi DECIMAL(10,2) !
1791
-			$k_precedent = null;
1792
-			foreach (explode(',', $desc) as $v) {
1793
-				preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1794
-				// Les cles de champs peuvent etre entourees
1795
-				// de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1796
-				// http://www.sqlite.org/lang_keywords.html
1797
-				$k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1798
-				if ($char = strpbrk($k[0], '\'"[`')) {
1799
-					$k = trim($k, $char);
1800
-					if ($char == '[') {
1801
-						$k = rtrim($k, ']');
1802
-					}
1803
-				}
1804
-				$def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1805
-
1806
-				// rustine pour DECIMAL(10,2)
1807
-				// s'il y a une parenthèse fermante dans la clé
1808
-				// ou dans la définition sans qu'il n'y ait une ouverture avant
1809
-				if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1810
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1811
-					continue;
1812
-				}
1813
-
1814
-				// la primary key peut etre dans une des descriptions de champs
1815
-				// et non en fin de table, cas encore decouvert avec Sqlite Manager
1816
-				if (stripos($r[2], 'PRIMARY KEY') !== false) {
1817
-					$keys['PRIMARY KEY'] = $k;
1818
-				}
1819
-
1820
-				$fields[$k] = $def;
1821
-				$k_precedent = $k;
1822
-			}
1823
-			// key inclues dans la requete
1824
-			foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1825
-				if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1826
-					$k = str_replace('`', '', trim($r[1]));
1827
-					$t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1828
-					if ($k && !isset($keys[$k])) {
1829
-						$keys[$k] = $t;
1830
-					} else {
1831
-						$keys[] = $t;
1832
-					}
1833
-				}
1834
-			}
1835
-			// sinon ajouter les key index
1836
-			$query =
1837
-				'SELECT name,sql FROM'
1838
-				. ' (SELECT * FROM sqlite_master UNION ALL'
1839
-				. ' SELECT * FROM sqlite_temp_master)'
1840
-				. " WHERE tbl_name LIKE '$nom_table'"
1841
-				. " AND type='index' AND name NOT LIKE 'sqlite_%'"
1842
-				. 'ORDER BY substr(type,2,1), name';
1843
-			$a = spip_sqlite_query($query, $serveur, $requeter);
1844
-			while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1845
-				$key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1846
-				$keytype = 'KEY';
1847
-				if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1848
-					$keytype = 'UNIQUE KEY';
1849
-				}
1850
-				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1851
-				$keys[$keytype . ' ' . $key] = $colonnes;
1852
-			}
1853
-		}
1854
-	} // c'est une vue, on liste les champs disponibles simplement
1855
-	else {
1856
-		if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1857
-			$fields = [];
1858
-			foreach ($res as $c => $v) {
1859
-				$fields[$c] = '';
1860
-			}
1861
-			$keys = [];
1862
-		} else {
1863
-			return '';
1864
-		}
1865
-	}
1866
-
1867
-	return ['field' => $fields, 'key' => $keys];
1745
+    $query =
1746
+        'SELECT sql, type FROM'
1747
+        . ' (SELECT * FROM sqlite_master UNION ALL'
1748
+        . ' SELECT * FROM sqlite_temp_master)'
1749
+        . " WHERE tbl_name LIKE '$nom_table'"
1750
+        . " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1751
+        . ' ORDER BY substr(type,2,1), name';
1752
+
1753
+    $a = spip_sqlite_query($query, $serveur, $requeter);
1754
+    if (!$a) {
1755
+        return '';
1756
+    }
1757
+    if (!$requeter) {
1758
+        return $a;
1759
+    }
1760
+    if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1761
+        return '';
1762
+    }
1763
+    $vue = ($a['type'] == 'view'); // table | vue
1764
+
1765
+    // c'est une table
1766
+    // il faut parser le create
1767
+    if (!$vue) {
1768
+        if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1769
+            return '';
1770
+        } else {
1771
+            $desc = $r[1];
1772
+            // extraction d'une KEY éventuelle en prenant garde de ne pas
1773
+            // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1774
+            if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1775
+                $namedkeys = $r[2];
1776
+                $desc = $r[1];
1777
+            } else {
1778
+                $namedkeys = '';
1779
+            }
1780
+
1781
+            $fields = [];
1782
+            $keys = [];
1783
+
1784
+            // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1785
+            // par exemple s'il contiennent une virgule.
1786
+            // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1787
+            list($desc, $echaps) = query_echappe_textes($desc);
1788
+
1789
+            // separer toutes les descriptions de champs, separes par des virgules
1790
+            # /!\ explode peut exploser aussi DECIMAL(10,2) !
1791
+            $k_precedent = null;
1792
+            foreach (explode(',', $desc) as $v) {
1793
+                preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1794
+                // Les cles de champs peuvent etre entourees
1795
+                // de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1796
+                // http://www.sqlite.org/lang_keywords.html
1797
+                $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1798
+                if ($char = strpbrk($k[0], '\'"[`')) {
1799
+                    $k = trim($k, $char);
1800
+                    if ($char == '[') {
1801
+                        $k = rtrim($k, ']');
1802
+                    }
1803
+                }
1804
+                $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1805
+
1806
+                // rustine pour DECIMAL(10,2)
1807
+                // s'il y a une parenthèse fermante dans la clé
1808
+                // ou dans la définition sans qu'il n'y ait une ouverture avant
1809
+                if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1810
+                    $fields[$k_precedent] .= ',' . $k . ' ' . $def;
1811
+                    continue;
1812
+                }
1813
+
1814
+                // la primary key peut etre dans une des descriptions de champs
1815
+                // et non en fin de table, cas encore decouvert avec Sqlite Manager
1816
+                if (stripos($r[2], 'PRIMARY KEY') !== false) {
1817
+                    $keys['PRIMARY KEY'] = $k;
1818
+                }
1819
+
1820
+                $fields[$k] = $def;
1821
+                $k_precedent = $k;
1822
+            }
1823
+            // key inclues dans la requete
1824
+            foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1825
+                if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1826
+                    $k = str_replace('`', '', trim($r[1]));
1827
+                    $t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1828
+                    if ($k && !isset($keys[$k])) {
1829
+                        $keys[$k] = $t;
1830
+                    } else {
1831
+                        $keys[] = $t;
1832
+                    }
1833
+                }
1834
+            }
1835
+            // sinon ajouter les key index
1836
+            $query =
1837
+                'SELECT name,sql FROM'
1838
+                . ' (SELECT * FROM sqlite_master UNION ALL'
1839
+                . ' SELECT * FROM sqlite_temp_master)'
1840
+                . " WHERE tbl_name LIKE '$nom_table'"
1841
+                . " AND type='index' AND name NOT LIKE 'sqlite_%'"
1842
+                . 'ORDER BY substr(type,2,1), name';
1843
+            $a = spip_sqlite_query($query, $serveur, $requeter);
1844
+            while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1845
+                $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1846
+                $keytype = 'KEY';
1847
+                if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1848
+                    $keytype = 'UNIQUE KEY';
1849
+                }
1850
+                $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1851
+                $keys[$keytype . ' ' . $key] = $colonnes;
1852
+            }
1853
+        }
1854
+    } // c'est une vue, on liste les champs disponibles simplement
1855
+    else {
1856
+        if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1857
+            $fields = [];
1858
+            foreach ($res as $c => $v) {
1859
+                $fields[$c] = '';
1860
+            }
1861
+            $keys = [];
1862
+        } else {
1863
+            return '';
1864
+        }
1865
+    }
1866
+
1867
+    return ['field' => $fields, 'key' => $keys];
1868 1868
 }
1869 1869
 
1870 1870
 
@@ -1890,22 +1890,22 @@  discard block
 block discarded – undo
1890 1890
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1891 1891
  */
1892 1892
 function spip_sqlite_update($table, $champs, $where = '', $desc = '', $serveur = '', $requeter = true) {
1893
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1894
-	$champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1893
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1894
+    $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1895 1895
 
1896
-	$set = [];
1897
-	foreach ($champs as $champ => $val) {
1898
-		$set[] = $champ . "=$val";
1899
-	}
1900
-	if (!empty($set)) {
1901
-		return spip_sqlite_query(
1902
-			_sqlite_calculer_expression('UPDATE', $table, ',')
1903
-			. _sqlite_calculer_expression('SET', $set, ',')
1904
-			. _sqlite_calculer_expression('WHERE', $where),
1905
-			$serveur,
1906
-			$requeter
1907
-		);
1908
-	}
1896
+    $set = [];
1897
+    foreach ($champs as $champ => $val) {
1898
+        $set[] = $champ . "=$val";
1899
+    }
1900
+    if (!empty($set)) {
1901
+        return spip_sqlite_query(
1902
+            _sqlite_calculer_expression('UPDATE', $table, ',')
1903
+            . _sqlite_calculer_expression('SET', $set, ',')
1904
+            . _sqlite_calculer_expression('WHERE', $where),
1905
+            $serveur,
1906
+            $requeter
1907
+        );
1908
+    }
1909 1909
 }
1910 1910
 
1911 1911
 
@@ -1935,38 +1935,38 @@  discard block
 block discarded – undo
1935 1935
  */
1936 1936
 function spip_sqlite_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1937 1937
 
1938
-	if (!$champs) {
1939
-		return;
1940
-	}
1941
-	if (!$desc) {
1942
-		$desc = description_table($table, $serveur);
1943
-	}
1944
-	if (!$desc) {
1945
-		die("$table insertion sans description");
1946
-	}
1947
-	$fields = $desc['field'];
1948
-
1949
-	$set = [];
1950
-	foreach ($champs as $champ => $val) {
1951
-		$set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1952
-	}
1953
-
1954
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1955
-	// attention ils sont deja quotes
1956
-	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1957
-	foreach ($maj as $champ => $val) {
1958
-		if (!isset($set[$champ])) {
1959
-			$set[$champ] = $champ . '=' . $val;
1960
-		}
1961
-	}
1962
-
1963
-	return spip_sqlite_query(
1964
-		_sqlite_calculer_expression('UPDATE', $table, ',')
1965
-		. _sqlite_calculer_expression('SET', $set, ',')
1966
-		. _sqlite_calculer_expression('WHERE', $where),
1967
-		$serveur,
1968
-		$requeter
1969
-	);
1938
+    if (!$champs) {
1939
+        return;
1940
+    }
1941
+    if (!$desc) {
1942
+        $desc = description_table($table, $serveur);
1943
+    }
1944
+    if (!$desc) {
1945
+        die("$table insertion sans description");
1946
+    }
1947
+    $fields = $desc['field'];
1948
+
1949
+    $set = [];
1950
+    foreach ($champs as $champ => $val) {
1951
+        $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1952
+    }
1953
+
1954
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1955
+    // attention ils sont deja quotes
1956
+    $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1957
+    foreach ($maj as $champ => $val) {
1958
+        if (!isset($set[$champ])) {
1959
+            $set[$champ] = $champ . '=' . $val;
1960
+        }
1961
+    }
1962
+
1963
+    return spip_sqlite_query(
1964
+        _sqlite_calculer_expression('UPDATE', $table, ',')
1965
+        . _sqlite_calculer_expression('SET', $set, ',')
1966
+        . _sqlite_calculer_expression('WHERE', $where),
1967
+        $serveur,
1968
+        $requeter
1969
+    );
1970 1970
 }
1971 1971
 
1972 1972
 
@@ -1984,17 +1984,17 @@  discard block
 block discarded – undo
1984 1984
  * @return void
1985 1985
  */
1986 1986
 function _sqlite_init() {
1987
-	if (!defined('_DIR_DB')) {
1988
-		define('_DIR_DB', _DIR_ETC . 'bases/');
1989
-	}
1990
-	if (!defined('_SQLITE_CHMOD')) {
1991
-		define('_SQLITE_CHMOD', _SPIP_CHMOD);
1992
-	}
1987
+    if (!defined('_DIR_DB')) {
1988
+        define('_DIR_DB', _DIR_ETC . 'bases/');
1989
+    }
1990
+    if (!defined('_SQLITE_CHMOD')) {
1991
+        define('_SQLITE_CHMOD', _SPIP_CHMOD);
1992
+    }
1993 1993
 
1994
-	if (!is_dir($d = _DIR_DB)) {
1995
-		include_spip('inc/flock');
1996
-		sous_repertoire($d);
1997
-	}
1994
+    if (!is_dir($d = _DIR_DB)) {
1995
+        include_spip('inc/flock');
1996
+        sous_repertoire($d);
1997
+    }
1998 1998
 }
1999 1999
 
2000 2000
 
@@ -2008,20 +2008,20 @@  discard block
 block discarded – undo
2008 2008
  * @return bool|int
2009 2009
  */
2010 2010
 function _sqlite_is_version($version = '', $link = '', $serveur = '', $requeter = true) {
2011
-	if ($link === '') {
2012
-		$link = _sqlite_link($serveur);
2013
-	}
2014
-	if (!$link) {
2015
-		return false;
2016
-	}
2011
+    if ($link === '') {
2012
+        $link = _sqlite_link($serveur);
2013
+    }
2014
+    if (!$link) {
2015
+        return false;
2016
+    }
2017 2017
 
2018
-	$v = 3;
2018
+    $v = 3;
2019 2019
 
2020
-	if (!$version) {
2021
-		return $v;
2022
-	}
2020
+    if (!$version) {
2021
+        return $v;
2022
+    }
2023 2023
 
2024
-	return ($version == $v);
2024
+    return ($version == $v);
2025 2025
 }
2026 2026
 
2027 2027
 
@@ -2032,9 +2032,9 @@  discard block
 block discarded – undo
2032 2032
  * @return Object Information de connexion pour SQLite
2033 2033
  */
2034 2034
 function _sqlite_link($serveur = '') {
2035
-	$link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2035
+    $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2036 2036
 
2037
-	return $link;
2037
+    return $link;
2038 2038
 }
2039 2039
 
2040 2040
 
@@ -2049,52 +2049,52 @@  discard block
 block discarded – undo
2049 2049
  * @return string|number     Texte ou nombre échappé
2050 2050
  */
2051 2051
 function _sqlite_calculer_cite($v, $type) {
2052
-	if ($type) {
2053
-		if (
2054
-			is_null($v)
2055
-			and stripos($type, 'NOT NULL') === false
2056
-		) {
2057
-			return 'NULL';
2058
-		} // null php se traduit en NULL SQL
2059
-
2060
-		if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2061
-			return $v;
2062
-		}
2063
-		if (sql_test_int($type)) {
2064
-			if (is_numeric($v)) {
2065
-				return $v;
2066
-			} elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2067
-				return hexdec(substr($v, 2));
2068
-			} else {
2069
-				return intval($v);
2070
-			}
2071
-		}
2072
-	} else {
2073
-		// si on ne connait pas le type on le deduit de $v autant que possible
2074
-		if (is_bool($v)) {
2075
-			return strval(intval($v));
2076
-		}
2077
-		elseif (is_numeric($v)) {
2078
-			return strval($v);
2079
-		}
2080
-	}
2081
-
2082
-	// trouver un link sqlite pour faire l'echappement
2083
-	foreach ($GLOBALS['connexions'] as $s) {
2084
-		if (
2085
-			$l = $s['link']
2086
-			and is_object($l)
2087
-			and $l instanceof \PDO
2088
-			and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2089
-		) {
2090
-			return $l->quote($v);
2091
-		}
2092
-	}
2093
-
2094
-	// echapper les ' en ''
2095
-	spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2096
-
2097
-	return ("'" . str_replace("'", "''", $v) . "'");
2052
+    if ($type) {
2053
+        if (
2054
+            is_null($v)
2055
+            and stripos($type, 'NOT NULL') === false
2056
+        ) {
2057
+            return 'NULL';
2058
+        } // null php se traduit en NULL SQL
2059
+
2060
+        if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2061
+            return $v;
2062
+        }
2063
+        if (sql_test_int($type)) {
2064
+            if (is_numeric($v)) {
2065
+                return $v;
2066
+            } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2067
+                return hexdec(substr($v, 2));
2068
+            } else {
2069
+                return intval($v);
2070
+            }
2071
+        }
2072
+    } else {
2073
+        // si on ne connait pas le type on le deduit de $v autant que possible
2074
+        if (is_bool($v)) {
2075
+            return strval(intval($v));
2076
+        }
2077
+        elseif (is_numeric($v)) {
2078
+            return strval($v);
2079
+        }
2080
+    }
2081
+
2082
+    // trouver un link sqlite pour faire l'echappement
2083
+    foreach ($GLOBALS['connexions'] as $s) {
2084
+        if (
2085
+            $l = $s['link']
2086
+            and is_object($l)
2087
+            and $l instanceof \PDO
2088
+            and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2089
+        ) {
2090
+            return $l->quote($v);
2091
+        }
2092
+    }
2093
+
2094
+    // echapper les ' en ''
2095
+    spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2096
+
2097
+    return ("'" . str_replace("'", "''", $v) . "'");
2098 2098
 }
2099 2099
 
2100 2100
 
@@ -2110,21 +2110,21 @@  discard block
 block discarded – undo
2110 2110
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
2111 2111
  */
2112 2112
 function _sqlite_calculer_expression($expression, $v, $join = 'AND') {
2113
-	if (empty($v)) {
2114
-		return '';
2115
-	}
2113
+    if (empty($v)) {
2114
+        return '';
2115
+    }
2116 2116
 
2117
-	$exp = "\n$expression ";
2117
+    $exp = "\n$expression ";
2118 2118
 
2119
-	if (!is_array($v)) {
2120
-		return $exp . $v;
2121
-	} else {
2122
-		if (strtoupper($join) === 'AND') {
2123
-			return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2124
-		} else {
2125
-			return $exp . join($join, $v);
2126
-		}
2127
-	}
2119
+    if (!is_array($v)) {
2120
+        return $exp . $v;
2121
+    } else {
2122
+        if (strtoupper($join) === 'AND') {
2123
+            return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2124
+        } else {
2125
+            return $exp . join($join, $v);
2126
+        }
2127
+    }
2128 2128
 }
2129 2129
 
2130 2130
 
@@ -2140,7 +2140,7 @@  discard block
 block discarded – undo
2140 2140
  * @return string Texte du orderby préparé
2141 2141
  */
2142 2142
 function _sqlite_calculer_order($orderby) {
2143
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2143
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2144 2144
 }
2145 2145
 
2146 2146
 
@@ -2151,26 +2151,26 @@  discard block
 block discarded – undo
2151 2151
  * @return string Sélection de colonnes pour une clause SELECT
2152 2152
  */
2153 2153
 function _sqlite_calculer_select_as($args) {
2154
-	$res = '';
2155
-	foreach ($args as $k => $v) {
2156
-		if (substr($k, -1) == '@') {
2157
-			// c'est une jointure qui se refere au from precedent
2158
-			// pas de virgule
2159
-			$res .= '  ' . $v;
2160
-		} else {
2161
-			if (!is_numeric($k)) {
2162
-				$p = strpos($v, ' ');
2163
-				if ($p) {
2164
-					$v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2165
-				} else {
2166
-					$v .= " AS '$k'";
2167
-				}
2168
-			}
2169
-			$res .= ', ' . $v;
2170
-		}
2171
-	}
2172
-
2173
-	return substr($res, 2);
2154
+    $res = '';
2155
+    foreach ($args as $k => $v) {
2156
+        if (substr($k, -1) == '@') {
2157
+            // c'est une jointure qui se refere au from precedent
2158
+            // pas de virgule
2159
+            $res .= '  ' . $v;
2160
+        } else {
2161
+            if (!is_numeric($k)) {
2162
+                $p = strpos($v, ' ');
2163
+                if ($p) {
2164
+                    $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2165
+                } else {
2166
+                    $v .= " AS '$k'";
2167
+                }
2168
+            }
2169
+            $res .= ', ' . $v;
2170
+        }
2171
+    }
2172
+
2173
+    return substr($res, 2);
2174 2174
 }
2175 2175
 
2176 2176
 
@@ -2193,26 +2193,26 @@  discard block
 block discarded – undo
2193 2193
  *     Contrainte pour clause WHERE
2194 2194
  */
2195 2195
 function _sqlite_calculer_where($v) {
2196
-	if (!is_array($v)) {
2197
-		return $v;
2198
-	}
2199
-
2200
-	$op = array_shift($v);
2201
-	if (!($n = count($v))) {
2202
-		return $op;
2203
-	} else {
2204
-		$arg = _sqlite_calculer_where(array_shift($v));
2205
-		if ($n == 1) {
2206
-			return "$op($arg)";
2207
-		} else {
2208
-			$arg2 = _sqlite_calculer_where(array_shift($v));
2209
-			if ($n == 2) {
2210
-				return "($arg $op $arg2)";
2211
-			} else {
2212
-				return "($arg $op ($arg2) : $v[0])";
2213
-			}
2214
-		}
2215
-	}
2196
+    if (!is_array($v)) {
2197
+        return $v;
2198
+    }
2199
+
2200
+    $op = array_shift($v);
2201
+    if (!($n = count($v))) {
2202
+        return $op;
2203
+    } else {
2204
+        $arg = _sqlite_calculer_where(array_shift($v));
2205
+        if ($n == 1) {
2206
+            return "$op($arg)";
2207
+        } else {
2208
+            $arg2 = _sqlite_calculer_where(array_shift($v));
2209
+            if ($n == 2) {
2210
+                return "($arg $op $arg2)";
2211
+            } else {
2212
+                return "($arg $op ($arg2) : $v[0])";
2213
+            }
2214
+        }
2215
+    }
2216 2216
 }
2217 2217
 
2218 2218
 
@@ -2227,19 +2227,19 @@  discard block
 block discarded – undo
2227 2227
  * @return array|bool
2228 2228
  */
2229 2229
 function _sqlite_charger_version($version = '') {
2230
-	$versions = [];
2230
+    $versions = [];
2231 2231
 
2232
-	// version 3
2233
-	if (!$version || $version == 3) {
2234
-		if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2235
-			$versions[] = 3;
2236
-		}
2237
-	}
2238
-	if ($version) {
2239
-		return in_array($version, $versions);
2240
-	}
2232
+    // version 3
2233
+    if (!$version || $version == 3) {
2234
+        if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2235
+            $versions[] = 3;
2236
+        }
2237
+    }
2238
+    if ($version) {
2239
+        return in_array($version, $versions);
2240
+    }
2241 2241
 
2242
-	return $versions;
2242
+    return $versions;
2243 2243
 }
2244 2244
 
2245 2245
 
@@ -2277,147 +2277,147 @@  discard block
 block discarded – undo
2277 2277
  */
2278 2278
 function _sqlite_modifier_table($table, $colonne, $opt = [], $serveur = '') {
2279 2279
 
2280
-	if (is_array($table)) {
2281
-		$table_destination = reset($table);
2282
-		$table_origine = key($table);
2283
-	} else {
2284
-		$table_origine = $table_destination = $table;
2285
-	}
2286
-	// ne prend actuellement qu'un changement
2287
-	// mais pourra etre adapte pour changer plus qu'une colonne a la fois
2288
-	if (is_array($colonne)) {
2289
-		$colonne_destination = reset($colonne);
2290
-		$colonne_origine = key($colonne);
2291
-	} else {
2292
-		$colonne_origine = $colonne_destination = $colonne;
2293
-	}
2294
-	if (!isset($opt['field'])) {
2295
-		$opt['field'] = [];
2296
-	}
2297
-	if (!isset($opt['key'])) {
2298
-		$opt['key'] = [];
2299
-	}
2300
-
2301
-	// si les noms de tables sont differents, pas besoin de table temporaire
2302
-	// on prendra directement le nom de la future table
2303
-	$meme_table = ($table_origine == $table_destination);
2304
-
2305
-	$def_origine = sql_showtable($table_origine, false, $serveur);
2306
-	if (!$def_origine or !isset($def_origine['field'])) {
2307
-		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2308
-
2309
-		return false;
2310
-	}
2311
-
2312
-
2313
-	$table_tmp = $table_origine . '_tmp';
2314
-
2315
-	// 1) creer une table temporaire avec les modifications
2316
-	// - DROP : suppression de la colonne
2317
-	// - CHANGE : modification de la colonne
2318
-	// (foreach pour conserver l'ordre des champs)
2319
-
2320
-	// field
2321
-	$fields = [];
2322
-	// pour le INSERT INTO plus loin
2323
-	// stocker la correspondance nouvelles->anciennes colonnes
2324
-	$fields_correspondances = [];
2325
-	foreach ($def_origine['field'] as $c => $d) {
2326
-		if ($colonne_origine && ($c == $colonne_origine)) {
2327
-			// si pas DROP
2328
-			if ($colonne_destination) {
2329
-				$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2330
-				$fields_correspondances[$colonne_destination] = $c;
2331
-			}
2332
-		} else {
2333
-			$fields[$c] = $d;
2334
-			$fields_correspondances[$c] = $c;
2335
-		}
2336
-	}
2337
-	// cas de ADD sqlite2 (ajout du champ en fin de table):
2338
-	if (!$colonne_origine && $colonne_destination) {
2339
-		$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2340
-	}
2341
-
2342
-	// key...
2343
-	$keys = [];
2344
-	foreach ($def_origine['key'] as $c => $d) {
2345
-		$c = str_replace($colonne_origine, $colonne_destination, $c);
2346
-		$d = str_replace($colonne_origine, $colonne_destination, $d);
2347
-		// seulement si on ne supprime pas la colonne !
2348
-		if ($d) {
2349
-			$keys[$c] = $d;
2350
-		}
2351
-	}
2352
-
2353
-	// autres keys, on merge
2354
-	$keys = array_merge($keys, $opt['key']);
2355
-	$queries = [];
2356
-
2357
-	// copier dans destination (si differente de origine), sinon tmp
2358
-	$table_copie = ($meme_table) ? $table_tmp : $table_destination;
2359
-	$autoinc = (isset($keys['PRIMARY KEY'])
2360
-		and $keys['PRIMARY KEY']
2361
-		and stripos($keys['PRIMARY KEY'], ',') === false
2362
-		and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2363
-
2364
-	if (
2365
-		$q = _sqlite_requete_create(
2366
-			$table_copie,
2367
-			$fields,
2368
-			$keys,
2369
-			$autoinc,
2370
-			$temporary = false,
2371
-			$ifnotexists = true,
2372
-			$serveur
2373
-		)
2374
-	) {
2375
-		$queries[] = $q;
2376
-	}
2377
-
2378
-
2379
-	// 2) y copier les champs qui vont bien
2380
-	$champs_dest = join(', ', array_keys($fields_correspondances));
2381
-	$champs_ori = join(', ', $fields_correspondances);
2382
-	$queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2383
-
2384
-	// 3) supprimer la table d'origine
2385
-	$queries[] = "DROP TABLE $table_origine";
2386
-
2387
-	// 4) renommer la table temporaire
2388
-	// avec le nom de la table destination
2389
-	// si necessaire
2390
-	if ($meme_table) {
2391
-		$queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2392
-	}
2393
-
2394
-	// 5) remettre les index !
2395
-	foreach ($keys as $k => $v) {
2396
-		if ($k == 'PRIMARY KEY') {
2397
-		} else {
2398
-			// enlever KEY
2399
-			$k = substr($k, 4);
2400
-			$queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2401
-		}
2402
-	}
2403
-
2404
-
2405
-	if (count($queries)) {
2406
-		spip_sqlite::demarrer_transaction($serveur);
2407
-		// il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2408
-		foreach ($queries as $q) {
2409
-			if (!spip_sqlite::executer_requete($q, $serveur)) {
2410
-				spip_log('SQLite : ALTER TABLE table :'
2411
-					. " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2412
-				spip_sqlite::annuler_transaction($serveur);
2413
-
2414
-				return false;
2415
-			}
2416
-		}
2417
-		spip_sqlite::finir_transaction($serveur);
2418
-	}
2419
-
2420
-	return true;
2280
+    if (is_array($table)) {
2281
+        $table_destination = reset($table);
2282
+        $table_origine = key($table);
2283
+    } else {
2284
+        $table_origine = $table_destination = $table;
2285
+    }
2286
+    // ne prend actuellement qu'un changement
2287
+    // mais pourra etre adapte pour changer plus qu'une colonne a la fois
2288
+    if (is_array($colonne)) {
2289
+        $colonne_destination = reset($colonne);
2290
+        $colonne_origine = key($colonne);
2291
+    } else {
2292
+        $colonne_origine = $colonne_destination = $colonne;
2293
+    }
2294
+    if (!isset($opt['field'])) {
2295
+        $opt['field'] = [];
2296
+    }
2297
+    if (!isset($opt['key'])) {
2298
+        $opt['key'] = [];
2299
+    }
2300
+
2301
+    // si les noms de tables sont differents, pas besoin de table temporaire
2302
+    // on prendra directement le nom de la future table
2303
+    $meme_table = ($table_origine == $table_destination);
2304
+
2305
+    $def_origine = sql_showtable($table_origine, false, $serveur);
2306
+    if (!$def_origine or !isset($def_origine['field'])) {
2307
+        spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2308
+
2309
+        return false;
2310
+    }
2311
+
2312
+
2313
+    $table_tmp = $table_origine . '_tmp';
2314
+
2315
+    // 1) creer une table temporaire avec les modifications
2316
+    // - DROP : suppression de la colonne
2317
+    // - CHANGE : modification de la colonne
2318
+    // (foreach pour conserver l'ordre des champs)
2319
+
2320
+    // field
2321
+    $fields = [];
2322
+    // pour le INSERT INTO plus loin
2323
+    // stocker la correspondance nouvelles->anciennes colonnes
2324
+    $fields_correspondances = [];
2325
+    foreach ($def_origine['field'] as $c => $d) {
2326
+        if ($colonne_origine && ($c == $colonne_origine)) {
2327
+            // si pas DROP
2328
+            if ($colonne_destination) {
2329
+                $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2330
+                $fields_correspondances[$colonne_destination] = $c;
2331
+            }
2332
+        } else {
2333
+            $fields[$c] = $d;
2334
+            $fields_correspondances[$c] = $c;
2335
+        }
2336
+    }
2337
+    // cas de ADD sqlite2 (ajout du champ en fin de table):
2338
+    if (!$colonne_origine && $colonne_destination) {
2339
+        $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2340
+    }
2341
+
2342
+    // key...
2343
+    $keys = [];
2344
+    foreach ($def_origine['key'] as $c => $d) {
2345
+        $c = str_replace($colonne_origine, $colonne_destination, $c);
2346
+        $d = str_replace($colonne_origine, $colonne_destination, $d);
2347
+        // seulement si on ne supprime pas la colonne !
2348
+        if ($d) {
2349
+            $keys[$c] = $d;
2350
+        }
2351
+    }
2352
+
2353
+    // autres keys, on merge
2354
+    $keys = array_merge($keys, $opt['key']);
2355
+    $queries = [];
2356
+
2357
+    // copier dans destination (si differente de origine), sinon tmp
2358
+    $table_copie = ($meme_table) ? $table_tmp : $table_destination;
2359
+    $autoinc = (isset($keys['PRIMARY KEY'])
2360
+        and $keys['PRIMARY KEY']
2361
+        and stripos($keys['PRIMARY KEY'], ',') === false
2362
+        and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2363
+
2364
+    if (
2365
+        $q = _sqlite_requete_create(
2366
+            $table_copie,
2367
+            $fields,
2368
+            $keys,
2369
+            $autoinc,
2370
+            $temporary = false,
2371
+            $ifnotexists = true,
2372
+            $serveur
2373
+        )
2374
+    ) {
2375
+        $queries[] = $q;
2376
+    }
2377
+
2378
+
2379
+    // 2) y copier les champs qui vont bien
2380
+    $champs_dest = join(', ', array_keys($fields_correspondances));
2381
+    $champs_ori = join(', ', $fields_correspondances);
2382
+    $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2383
+
2384
+    // 3) supprimer la table d'origine
2385
+    $queries[] = "DROP TABLE $table_origine";
2386
+
2387
+    // 4) renommer la table temporaire
2388
+    // avec le nom de la table destination
2389
+    // si necessaire
2390
+    if ($meme_table) {
2391
+        $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2392
+    }
2393
+
2394
+    // 5) remettre les index !
2395
+    foreach ($keys as $k => $v) {
2396
+        if ($k == 'PRIMARY KEY') {
2397
+        } else {
2398
+            // enlever KEY
2399
+            $k = substr($k, 4);
2400
+            $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2401
+        }
2402
+    }
2403
+
2404
+
2405
+    if (count($queries)) {
2406
+        spip_sqlite::demarrer_transaction($serveur);
2407
+        // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2408
+        foreach ($queries as $q) {
2409
+            if (!spip_sqlite::executer_requete($q, $serveur)) {
2410
+                spip_log('SQLite : ALTER TABLE table :'
2411
+                    . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2412
+                spip_sqlite::annuler_transaction($serveur);
2413
+
2414
+                return false;
2415
+            }
2416
+        }
2417
+        spip_sqlite::finir_transaction($serveur);
2418
+    }
2419
+
2420
+    return true;
2421 2421
 }
2422 2422
 
2423 2423
 
@@ -2427,61 +2427,61 @@  discard block
 block discarded – undo
2427 2427
  * @return array
2428 2428
  */
2429 2429
 function _sqlite_ref_fonctions() {
2430
-	$fonctions = [
2431
-		'alter' => 'spip_sqlite_alter',
2432
-		'count' => 'spip_sqlite_count',
2433
-		'countsel' => 'spip_sqlite_countsel',
2434
-		'create' => 'spip_sqlite_create',
2435
-		'create_base' => 'spip_sqlite_create_base',
2436
-		'create_view' => 'spip_sqlite_create_view',
2437
-		'date_proche' => 'spip_sqlite_date_proche',
2438
-		'delete' => 'spip_sqlite_delete',
2439
-		'drop_table' => 'spip_sqlite_drop_table',
2440
-		'drop_view' => 'spip_sqlite_drop_view',
2441
-		'errno' => 'spip_sqlite_errno',
2442
-		'error' => 'spip_sqlite_error',
2443
-		'explain' => 'spip_sqlite_explain',
2444
-		'fetch' => 'spip_sqlite_fetch',
2445
-		'seek' => 'spip_sqlite_seek',
2446
-		'free' => 'spip_sqlite_free',
2447
-		'hex' => 'spip_sqlite_hex',
2448
-		'in' => 'spip_sqlite_in',
2449
-		'insert' => 'spip_sqlite_insert',
2450
-		'insertq' => 'spip_sqlite_insertq',
2451
-		'insertq_multi' => 'spip_sqlite_insertq_multi',
2452
-		'listdbs' => 'spip_sqlite_listdbs',
2453
-		'multi' => 'spip_sqlite_multi',
2454
-		'optimize' => 'spip_sqlite_optimize',
2455
-		'query' => 'spip_sqlite_query',
2456
-		'quote' => 'spip_sqlite_quote',
2457
-		'repair' => 'spip_sqlite_repair',
2458
-		'replace' => 'spip_sqlite_replace',
2459
-		'replace_multi' => 'spip_sqlite_replace_multi',
2460
-		'select' => 'spip_sqlite_select',
2461
-		'selectdb' => 'spip_sqlite_selectdb',
2462
-		'set_charset' => 'spip_sqlite_set_charset',
2463
-		'get_charset' => 'spip_sqlite_get_charset',
2464
-		'showbase' => 'spip_sqlite_showbase',
2465
-		'showtable' => 'spip_sqlite_showtable',
2466
-		'table_exists' => 'spip_sqlite_table_exists',
2467
-		'update' => 'spip_sqlite_update',
2468
-		'updateq' => 'spip_sqlite_updateq',
2469
-		'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2470
-		'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2471
-		'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2472
-	];
2473
-
2474
-	// association de chaque nom http d'un charset aux couples sqlite
2475
-	// SQLite supporte utf-8 et utf-16 uniquement.
2476
-	$charsets = [
2477
-		'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2478
-		//'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2479
-		//'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2480
-	];
2481
-
2482
-	$fonctions['charsets'] = $charsets;
2483
-
2484
-	return $fonctions;
2430
+    $fonctions = [
2431
+        'alter' => 'spip_sqlite_alter',
2432
+        'count' => 'spip_sqlite_count',
2433
+        'countsel' => 'spip_sqlite_countsel',
2434
+        'create' => 'spip_sqlite_create',
2435
+        'create_base' => 'spip_sqlite_create_base',
2436
+        'create_view' => 'spip_sqlite_create_view',
2437
+        'date_proche' => 'spip_sqlite_date_proche',
2438
+        'delete' => 'spip_sqlite_delete',
2439
+        'drop_table' => 'spip_sqlite_drop_table',
2440
+        'drop_view' => 'spip_sqlite_drop_view',
2441
+        'errno' => 'spip_sqlite_errno',
2442
+        'error' => 'spip_sqlite_error',
2443
+        'explain' => 'spip_sqlite_explain',
2444
+        'fetch' => 'spip_sqlite_fetch',
2445
+        'seek' => 'spip_sqlite_seek',
2446
+        'free' => 'spip_sqlite_free',
2447
+        'hex' => 'spip_sqlite_hex',
2448
+        'in' => 'spip_sqlite_in',
2449
+        'insert' => 'spip_sqlite_insert',
2450
+        'insertq' => 'spip_sqlite_insertq',
2451
+        'insertq_multi' => 'spip_sqlite_insertq_multi',
2452
+        'listdbs' => 'spip_sqlite_listdbs',
2453
+        'multi' => 'spip_sqlite_multi',
2454
+        'optimize' => 'spip_sqlite_optimize',
2455
+        'query' => 'spip_sqlite_query',
2456
+        'quote' => 'spip_sqlite_quote',
2457
+        'repair' => 'spip_sqlite_repair',
2458
+        'replace' => 'spip_sqlite_replace',
2459
+        'replace_multi' => 'spip_sqlite_replace_multi',
2460
+        'select' => 'spip_sqlite_select',
2461
+        'selectdb' => 'spip_sqlite_selectdb',
2462
+        'set_charset' => 'spip_sqlite_set_charset',
2463
+        'get_charset' => 'spip_sqlite_get_charset',
2464
+        'showbase' => 'spip_sqlite_showbase',
2465
+        'showtable' => 'spip_sqlite_showtable',
2466
+        'table_exists' => 'spip_sqlite_table_exists',
2467
+        'update' => 'spip_sqlite_update',
2468
+        'updateq' => 'spip_sqlite_updateq',
2469
+        'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2470
+        'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2471
+        'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2472
+    ];
2473
+
2474
+    // association de chaque nom http d'un charset aux couples sqlite
2475
+    // SQLite supporte utf-8 et utf-16 uniquement.
2476
+    $charsets = [
2477
+        'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2478
+        //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2479
+        //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2480
+    ];
2481
+
2482
+    $fonctions['charsets'] = $charsets;
2483
+
2484
+    return $fonctions;
2485 2485
 }
2486 2486
 
2487 2487
 
@@ -2493,56 +2493,56 @@  discard block
 block discarded – undo
2493 2493
  * @return mixed
2494 2494
  */
2495 2495
 function _sqlite_remplacements_definitions_table($query, $autoinc = false) {
2496
-	// quelques remplacements
2497
-	$num = '(\s*\([0-9]*\))?';
2498
-	$enum = '(\s*\([^\)]*\))?';
2499
-
2500
-	$remplace = [
2501
-		'/enum' . $enum . '/is' => 'VARCHAR(255)',
2502
-		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2503
-		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2504
-		'/auto_increment/is' => '',
2505
-		'/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2506
-		'/(timestamp .* )ON .*$/is' => '\\1',
2507
-		'/character set \w+/is' => '',
2508
-		'/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2509
-		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
-		'/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511
-		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2512
-		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2513
-	];
2514
-
2515
-	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2516
-	$remplace_autocinc = [
2517
-		'/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2518
-	];
2519
-	// pour les int non autoincrement, il faut un DEFAULT
2520
-	$remplace_nonautocinc = [
2521
-		'/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2522
-	];
2523
-
2524
-	if (is_string($query)) {
2525
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
2526
-		if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2527
-			$query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2528
-		} else {
2529
-			$query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2530
-			$query = _sqlite_collate_ci($query);
2531
-		}
2532
-	} elseif (is_array($query)) {
2533
-		foreach ($query as $k => $q) {
2534
-			$ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2535
-			$query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2536
-			if ($ai) {
2537
-				$query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2538
-			} else {
2539
-				$query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2540
-				$query[$k] = _sqlite_collate_ci($query[$k]);
2541
-			}
2542
-		}
2543
-	}
2544
-
2545
-	return $query;
2496
+    // quelques remplacements
2497
+    $num = '(\s*\([0-9]*\))?';
2498
+    $enum = '(\s*\([^\)]*\))?';
2499
+
2500
+    $remplace = [
2501
+        '/enum' . $enum . '/is' => 'VARCHAR(255)',
2502
+        '/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2503
+        '/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2504
+        '/auto_increment/is' => '',
2505
+        '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2506
+        '/(timestamp .* )ON .*$/is' => '\\1',
2507
+        '/character set \w+/is' => '',
2508
+        '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2509
+        '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
+        '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511
+        '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2512
+        '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2513
+    ];
2514
+
2515
+    // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2516
+    $remplace_autocinc = [
2517
+        '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2518
+    ];
2519
+    // pour les int non autoincrement, il faut un DEFAULT
2520
+    $remplace_nonautocinc = [
2521
+        '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2522
+    ];
2523
+
2524
+    if (is_string($query)) {
2525
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
2526
+        if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2527
+            $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2528
+        } else {
2529
+            $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2530
+            $query = _sqlite_collate_ci($query);
2531
+        }
2532
+    } elseif (is_array($query)) {
2533
+        foreach ($query as $k => $q) {
2534
+            $ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2535
+            $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2536
+            if ($ai) {
2537
+                $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2538
+            } else {
2539
+                $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2540
+                $query[$k] = _sqlite_collate_ci($query[$k]);
2541
+            }
2542
+        }
2543
+    }
2544
+
2545
+    return $query;
2546 2546
 }
2547 2547
 
2548 2548
 /**
@@ -2553,17 +2553,17 @@  discard block
 block discarded – undo
2553 2553
  * @return string
2554 2554
  */
2555 2555
 function _sqlite_collate_ci($champ) {
2556
-	if (stripos($champ, 'COLLATE') !== false) {
2557
-		return $champ;
2558
-	}
2559
-	if (stripos($champ, 'BINARY') !== false) {
2560
-		return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2561
-	}
2562
-	if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2563
-		return $champ . ' COLLATE NOCASE';
2564
-	}
2556
+    if (stripos($champ, 'COLLATE') !== false) {
2557
+        return $champ;
2558
+    }
2559
+    if (stripos($champ, 'BINARY') !== false) {
2560
+        return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2561
+    }
2562
+    if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2563
+        return $champ . ' COLLATE NOCASE';
2564
+    }
2565 2565
 
2566
-	return $champ;
2566
+    return $champ;
2567 2567
 }
2568 2568
 
2569 2569
 
@@ -2582,84 +2582,84 @@  discard block
 block discarded – undo
2582 2582
  * @return bool|string
2583 2583
  */
2584 2584
 function _sqlite_requete_create(
2585
-	$nom,
2586
-	$champs,
2587
-	$cles,
2588
-	$autoinc = false,
2589
-	$temporary = false,
2590
-	$_ifnotexists = true,
2591
-	$serveur = '',
2592
-	$requeter = true
2585
+    $nom,
2586
+    $champs,
2587
+    $cles,
2588
+    $autoinc = false,
2589
+    $temporary = false,
2590
+    $_ifnotexists = true,
2591
+    $serveur = '',
2592
+    $requeter = true
2593 2593
 ) {
2594
-	$query = $keys = $s = $p = '';
2595
-
2596
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
2597
-	// sans les renseigner (laisse le compilo recuperer la description)
2598
-	if (!is_array($champs) || !is_array($cles)) {
2599
-		return;
2600
-	}
2601
-
2602
-	// sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2603
-	// il faut passer par des create index
2604
-	// Il gere par contre primary key !
2605
-	// Soit la PK est definie dans les cles, soit dans un champs
2606
-	// soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2607
-	$pk = 'PRIMARY KEY';
2608
-	// le champ de cle primaire
2609
-	$champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2610
-
2611
-	foreach ($champs as $k => $v) {
2612
-		if (false !== stripos($v, $pk)) {
2613
-			$champ_pk = $k;
2614
-			// on n'en a plus besoin dans field, vu que defini dans key
2615
-			$champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2616
-			break;
2617
-		}
2618
-	}
2619
-
2620
-	if ($champ_pk) {
2621
-		$keys = "\n\t\t$pk ($champ_pk)";
2622
-	}
2623
-	// Pas de DEFAULT 0 sur les cles primaires en auto-increment
2624
-	if (
2625
-		isset($champs[$champ_pk])
2626
-		and stripos($champs[$champ_pk], 'default 0') !== false
2627
-	) {
2628
-		$champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2629
-	}
2630
-
2631
-	$champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2632
-	foreach ($champs as $k => $v) {
2633
-		$query .= "$s\n\t\t$k $v";
2634
-		$s = ',';
2635
-	}
2636
-
2637
-	$ifnotexists = '';
2638
-	if ($_ifnotexists) {
2639
-		$version = spip_sqlite_fetch(
2640
-			spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2641
-			'',
2642
-			$serveur
2643
-		);
2644
-		if (!function_exists('spip_version_compare')) {
2645
-			include_spip('plugins/installer');
2646
-		}
2647
-
2648
-		if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2649
-			$ifnotexists = ' IF NOT EXISTS';
2650
-		} else {
2651
-			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2652
-			$a = spip_sqlite_showtable($nom, $serveur);
2653
-			if (isset($a['key']['KEY ' . $nom])) {
2654
-				return true;
2655
-			}
2656
-		}
2657
-	}
2658
-
2659
-	$temporary = $temporary ? ' TEMPORARY' : '';
2660
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2661
-
2662
-	return $q;
2594
+    $query = $keys = $s = $p = '';
2595
+
2596
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
2597
+    // sans les renseigner (laisse le compilo recuperer la description)
2598
+    if (!is_array($champs) || !is_array($cles)) {
2599
+        return;
2600
+    }
2601
+
2602
+    // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2603
+    // il faut passer par des create index
2604
+    // Il gere par contre primary key !
2605
+    // Soit la PK est definie dans les cles, soit dans un champs
2606
+    // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2607
+    $pk = 'PRIMARY KEY';
2608
+    // le champ de cle primaire
2609
+    $champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2610
+
2611
+    foreach ($champs as $k => $v) {
2612
+        if (false !== stripos($v, $pk)) {
2613
+            $champ_pk = $k;
2614
+            // on n'en a plus besoin dans field, vu que defini dans key
2615
+            $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2616
+            break;
2617
+        }
2618
+    }
2619
+
2620
+    if ($champ_pk) {
2621
+        $keys = "\n\t\t$pk ($champ_pk)";
2622
+    }
2623
+    // Pas de DEFAULT 0 sur les cles primaires en auto-increment
2624
+    if (
2625
+        isset($champs[$champ_pk])
2626
+        and stripos($champs[$champ_pk], 'default 0') !== false
2627
+    ) {
2628
+        $champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2629
+    }
2630
+
2631
+    $champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2632
+    foreach ($champs as $k => $v) {
2633
+        $query .= "$s\n\t\t$k $v";
2634
+        $s = ',';
2635
+    }
2636
+
2637
+    $ifnotexists = '';
2638
+    if ($_ifnotexists) {
2639
+        $version = spip_sqlite_fetch(
2640
+            spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2641
+            '',
2642
+            $serveur
2643
+        );
2644
+        if (!function_exists('spip_version_compare')) {
2645
+            include_spip('plugins/installer');
2646
+        }
2647
+
2648
+        if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2649
+            $ifnotexists = ' IF NOT EXISTS';
2650
+        } else {
2651
+            /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2652
+            $a = spip_sqlite_showtable($nom, $serveur);
2653
+            if (isset($a['key']['KEY ' . $nom])) {
2654
+                return true;
2655
+            }
2656
+        }
2657
+    }
2658
+
2659
+    $temporary = $temporary ? ' TEMPORARY' : '';
2660
+    $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2661
+
2662
+    return $q;
2663 2663
 }
2664 2664
 
2665 2665
 
@@ -2678,41 +2678,41 @@  discard block
 block discarded – undo
2678 2678
  * @return
2679 2679
  */
2680 2680
 function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur = '') {
2681
-	static $tables = [];
2682
-
2683
-	if (!isset($tables[$table])) {
2684
-		if (!$desc) {
2685
-			$trouver_table = charger_fonction('trouver_table', 'base');
2686
-			$desc = $trouver_table($table, $serveur);
2687
-			// si pas de description, on ne fait rien, ou on die() ?
2688
-			if (!$desc) {
2689
-				return $couples;
2690
-			}
2691
-		}
2692
-
2693
-		// recherche des champs avec simplement 'TIMESTAMP'
2694
-		// cependant, il faudra peut etre etendre
2695
-		// avec la gestion de DEFAULT et ON UPDATE
2696
-		// mais ceux-ci ne sont pas utilises dans le core
2697
-		$tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2698
-
2699
-		$now = _sqlite_func_now(true);
2700
-		foreach ($desc['field'] as $k => $v) {
2701
-			if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2702
-				$tables[$table]['desc'][$k] = $v;
2703
-				$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2704
-			}
2705
-		}
2706
-	}
2707
-	else {
2708
-		$now = _sqlite_func_now(true);
2709
-		foreach (array_keys($tables[$table]['desc']) as $k) {
2710
-			$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2711
-		}
2712
-	}
2713
-
2714
-	// ajout des champs type 'timestamp' absents
2715
-	return array_merge($tables[$table]['valeur'], $couples);
2681
+    static $tables = [];
2682
+
2683
+    if (!isset($tables[$table])) {
2684
+        if (!$desc) {
2685
+            $trouver_table = charger_fonction('trouver_table', 'base');
2686
+            $desc = $trouver_table($table, $serveur);
2687
+            // si pas de description, on ne fait rien, ou on die() ?
2688
+            if (!$desc) {
2689
+                return $couples;
2690
+            }
2691
+        }
2692
+
2693
+        // recherche des champs avec simplement 'TIMESTAMP'
2694
+        // cependant, il faudra peut etre etendre
2695
+        // avec la gestion de DEFAULT et ON UPDATE
2696
+        // mais ceux-ci ne sont pas utilises dans le core
2697
+        $tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2698
+
2699
+        $now = _sqlite_func_now(true);
2700
+        foreach ($desc['field'] as $k => $v) {
2701
+            if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2702
+                $tables[$table]['desc'][$k] = $v;
2703
+                $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2704
+            }
2705
+        }
2706
+    }
2707
+    else {
2708
+        $now = _sqlite_func_now(true);
2709
+        foreach (array_keys($tables[$table]['desc']) as $k) {
2710
+            $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2711
+        }
2712
+    }
2713
+
2714
+    // ajout des champs type 'timestamp' absents
2715
+    return array_merge($tables[$table]['valeur'], $couples);
2716 2716
 }
2717 2717
 
2718 2718
 
@@ -2723,7 +2723,7 @@  discard block
 block discarded – undo
2723 2723
  * @return array|bool
2724 2724
  */
2725 2725
 function spip_versions_sqlite() {
2726
-	return _sqlite_charger_version();
2726
+    return _sqlite_charger_version();
2727 2727
 }
2728 2728
 
2729 2729
 /**
@@ -2731,114 +2731,114 @@  discard block
 block discarded – undo
2731 2731
  * encadrées de transactions.
2732 2732
  **/
2733 2733
 class spip_sqlite {
2734
-	/** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2735
-	public static $requeteurs = [];
2736
-	/** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2737
-	public static $transaction_en_cours = [];
2738
-
2739
-
2740
-	/**
2741
-	 * Retourne une unique instance du requêteur
2742
-	 *
2743
-	 * Retourne une instance unique du requêteur pour une connexion SQLite
2744
-	 * donnée
2745
-	 *
2746
-	 * @param string $serveur
2747
-	 *    Nom du connecteur
2748
-	 * @return sqlite_requeteur
2749
-	 *    Instance unique du requêteur
2750
-	 **/
2751
-	public static function requeteur($serveur) {
2752
-		if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2753
-			spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2754
-		}
2755
-
2756
-		return spip_sqlite::$requeteurs[$serveur];
2757
-	}
2758
-
2759
-	/**
2760
-	 * Prépare le texte d'une requête avant son exécution
2761
-	 *
2762
-	 * Adapte la requête au format plus ou moins MySQL par un format
2763
-	 * compris de SQLite.
2764
-	 *
2765
-	 * Change les préfixes de tables SPIP par ceux véritables
2766
-	 *
2767
-	 * @param string $query Requête à préparer
2768
-	 * @param string $serveur Nom de la connexion
2769
-	 * @return string           Requête préparée
2770
-	 */
2771
-	public static function traduire_requete($query, $serveur) {
2772
-		$requeteur = spip_sqlite::requeteur($serveur);
2773
-		$traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2774
-
2775
-		return $traducteur->traduire_requete();
2776
-	}
2777
-
2778
-	/**
2779
-	 * Démarre une transaction
2780
-	 *
2781
-	 * @param string $serveur Nom de la connexion
2782
-	 **/
2783
-	public static function demarrer_transaction($serveur) {
2784
-		spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2785
-		spip_sqlite::$transaction_en_cours[$serveur] = true;
2786
-	}
2787
-
2788
-	/**
2789
-	 * Exécute la requête donnée
2790
-	 *
2791
-	 * @param string $query Requête
2792
-	 * @param string $serveur Nom de la connexion
2793
-	 * @param null|bool $tracer Demander des statistiques (temps) ?
2794
-	 **/
2795
-	public static function executer_requete($query, $serveur, $tracer = null) {
2796
-		$requeteur = spip_sqlite::requeteur($serveur);
2797
-
2798
-		return $requeteur->executer_requete($query, $tracer);
2799
-	}
2800
-
2801
-	/**
2802
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2803
-	 *
2804
-	 * @param string $serveur Nom de la connexion
2805
-	 * return int                Identifiant
2806
-	 **/
2807
-	public static function last_insert_id($serveur) {
2808
-		$requeteur = spip_sqlite::requeteur($serveur);
2809
-
2810
-		return $requeteur->last_insert_id($serveur);
2811
-	}
2812
-
2813
-	/**
2814
-	 * Annule une transaction
2815
-	 *
2816
-	 * @param string $serveur Nom de la connexion
2817
-	 **/
2818
-	public static function annuler_transaction($serveur) {
2819
-		spip_sqlite::executer_requete('ROLLBACK', $serveur);
2820
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2821
-	}
2822
-
2823
-	/**
2824
-	 * Termine une transaction
2825
-	 *
2826
-	 * @param string $serveur Nom de la connexion
2827
-	 **/
2828
-	public static function finir_transaction($serveur) {
2829
-		// si pas de transaction en cours, ne rien faire et le dire
2830
-		if (
2831
-			!isset(spip_sqlite::$transaction_en_cours[$serveur])
2832
-			or spip_sqlite::$transaction_en_cours[$serveur] == false
2833
-		) {
2834
-			return false;
2835
-		}
2836
-		// sinon fermer la transaction et retourner true
2837
-		spip_sqlite::executer_requete('COMMIT', $serveur);
2838
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2839
-
2840
-		return true;
2841
-	}
2734
+    /** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2735
+    public static $requeteurs = [];
2736
+    /** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2737
+    public static $transaction_en_cours = [];
2738
+
2739
+
2740
+    /**
2741
+     * Retourne une unique instance du requêteur
2742
+     *
2743
+     * Retourne une instance unique du requêteur pour une connexion SQLite
2744
+     * donnée
2745
+     *
2746
+     * @param string $serveur
2747
+     *    Nom du connecteur
2748
+     * @return sqlite_requeteur
2749
+     *    Instance unique du requêteur
2750
+     **/
2751
+    public static function requeteur($serveur) {
2752
+        if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2753
+            spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2754
+        }
2755
+
2756
+        return spip_sqlite::$requeteurs[$serveur];
2757
+    }
2758
+
2759
+    /**
2760
+     * Prépare le texte d'une requête avant son exécution
2761
+     *
2762
+     * Adapte la requête au format plus ou moins MySQL par un format
2763
+     * compris de SQLite.
2764
+     *
2765
+     * Change les préfixes de tables SPIP par ceux véritables
2766
+     *
2767
+     * @param string $query Requête à préparer
2768
+     * @param string $serveur Nom de la connexion
2769
+     * @return string           Requête préparée
2770
+     */
2771
+    public static function traduire_requete($query, $serveur) {
2772
+        $requeteur = spip_sqlite::requeteur($serveur);
2773
+        $traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2774
+
2775
+        return $traducteur->traduire_requete();
2776
+    }
2777
+
2778
+    /**
2779
+     * Démarre une transaction
2780
+     *
2781
+     * @param string $serveur Nom de la connexion
2782
+     **/
2783
+    public static function demarrer_transaction($serveur) {
2784
+        spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2785
+        spip_sqlite::$transaction_en_cours[$serveur] = true;
2786
+    }
2787
+
2788
+    /**
2789
+     * Exécute la requête donnée
2790
+     *
2791
+     * @param string $query Requête
2792
+     * @param string $serveur Nom de la connexion
2793
+     * @param null|bool $tracer Demander des statistiques (temps) ?
2794
+     **/
2795
+    public static function executer_requete($query, $serveur, $tracer = null) {
2796
+        $requeteur = spip_sqlite::requeteur($serveur);
2797
+
2798
+        return $requeteur->executer_requete($query, $tracer);
2799
+    }
2800
+
2801
+    /**
2802
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2803
+     *
2804
+     * @param string $serveur Nom de la connexion
2805
+     * return int                Identifiant
2806
+     **/
2807
+    public static function last_insert_id($serveur) {
2808
+        $requeteur = spip_sqlite::requeteur($serveur);
2809
+
2810
+        return $requeteur->last_insert_id($serveur);
2811
+    }
2812
+
2813
+    /**
2814
+     * Annule une transaction
2815
+     *
2816
+     * @param string $serveur Nom de la connexion
2817
+     **/
2818
+    public static function annuler_transaction($serveur) {
2819
+        spip_sqlite::executer_requete('ROLLBACK', $serveur);
2820
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2821
+    }
2822
+
2823
+    /**
2824
+     * Termine une transaction
2825
+     *
2826
+     * @param string $serveur Nom de la connexion
2827
+     **/
2828
+    public static function finir_transaction($serveur) {
2829
+        // si pas de transaction en cours, ne rien faire et le dire
2830
+        if (
2831
+            !isset(spip_sqlite::$transaction_en_cours[$serveur])
2832
+            or spip_sqlite::$transaction_en_cours[$serveur] == false
2833
+        ) {
2834
+            return false;
2835
+        }
2836
+        // sinon fermer la transaction et retourner true
2837
+        spip_sqlite::executer_requete('COMMIT', $serveur);
2838
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2839
+
2840
+        return true;
2841
+    }
2842 2842
 }
2843 2843
 
2844 2844
 /*
@@ -2851,127 +2851,127 @@  discard block
 block discarded – undo
2851 2851
  */
2852 2852
 
2853 2853
 class sqlite_requeteur {
2854
-	/** @var string Texte de la requête */
2855
-	public $query = ''; // la requete
2856
-	/** @var string Nom de la connexion */
2857
-	public $serveur = '';
2858
-	/** @var Ressource Identifiant de la connexion SQLite */
2859
-	public $link = '';
2860
-	/** @var string Prefixe des tables SPIP */
2861
-	public $prefixe = '';
2862
-	/** @var string Nom de la base de donnée */
2863
-	public $db = '';
2864
-	/** @var bool Doit-on tracer les requetes (var_profile) ? */
2865
-	public $tracer = false; // doit-on tracer les requetes (var_profile)
2866
-
2867
-	/** @var string Version de SQLite (2 ou 3) */
2868
-	public $sqlite_version = '';
2869
-
2870
-	/**
2871
-	 * Constructeur
2872
-	 *
2873
-	 * @param string $serveur
2874
-	 * @return bool
2875
-	 */
2876
-	public function __construct($serveur = '') {
2877
-		_sqlite_init();
2878
-		$this->serveur = strtolower($serveur);
2879
-
2880
-		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2881
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2882
-
2883
-			return false;
2884
-		}
2885
-
2886
-		$this->sqlite_version = _sqlite_is_version('', $this->link);
2887
-
2888
-		$this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2889
-		$this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2890
-
2891
-		// tracage des requetes ?
2892
-		$this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2893
-	}
2894
-
2895
-	/**
2896
-	 * Lancer la requête transmise et faire le tracage si demandé
2897
-	 *
2898
-	 * @param string $query
2899
-	 *     Requête à exécuter
2900
-	 * @param bool|null $tracer
2901
-	 *     true pour tracer la requête
2902
-	 * @return bool|SQLiteResult
2903
-	 */
2904
-	public function executer_requete($query, $tracer = null) {
2905
-		if (is_null($tracer)) {
2906
-			$tracer = $this->tracer;
2907
-		}
2908
-		$err = '';
2909
-		$t = 0;
2910
-		if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2911
-			include_spip('public/tracer');
2912
-			$t = trace_query_start();
2913
-		}
2914
-
2915
-		# spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2916
-		if ($this->link) {
2917
-			// memoriser la derniere erreur PHP vue
2918
-			$last_error = (function_exists('error_get_last') ? error_get_last() : '');
2919
-			$e = null;
2920
-			// sauver la derniere requete
2921
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2922
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2923
-
2924
-			try {
2925
-				$r = $this->link->query($query);
2926
-			} catch (\PDOException $e) {
2927
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2928
-				$r = false;
2929
-			}
2930
-			// sauvegarde de la requete (elle y est deja dans $r->queryString)
2931
-			# $r->spipQueryString = $query;
2932
-
2933
-			// comptage : oblige de compter le nombre d'entrees retournees
2934
-			// par une requete SELECT
2935
-			// aucune autre solution ne donne le nombre attendu :( !
2936
-			// particulierement s'il y a des LIMIT dans la requete.
2937
-			if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2938
-				if ($r) {
2939
-					// noter le link et la query pour faire le comptage *si* on en a besoin
2940
-					$r->spipSqliteRowCount = [$this->link, $query];
2941
-				} elseif ($r instanceof PDOStatement) {
2942
-					$r->spipSqliteRowCount = 0;
2943
-				}
2944
-			}
2945
-
2946
-			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2947
-			if ($e and $e instanceof \PDOException) {
2948
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2949
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2950
-			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2951
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2952
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2953
-			} else {
2954
-				$err = '';
2955
-			}
2956
-		} else {
2957
-			$r = false;
2958
-		}
2959
-
2960
-		if (spip_sqlite_errno($this->serveur)) {
2961
-			$err .= spip_sqlite_error($query, $this->serveur);
2962
-		}
2963
-
2964
-		return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2965
-	}
2966
-
2967
-	/**
2968
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2969
-	 *
2970
-	 * @return int
2971
-	 **/
2972
-	public function last_insert_id() {
2973
-		return $this->link->lastInsertId();
2974
-	}
2854
+    /** @var string Texte de la requête */
2855
+    public $query = ''; // la requete
2856
+    /** @var string Nom de la connexion */
2857
+    public $serveur = '';
2858
+    /** @var Ressource Identifiant de la connexion SQLite */
2859
+    public $link = '';
2860
+    /** @var string Prefixe des tables SPIP */
2861
+    public $prefixe = '';
2862
+    /** @var string Nom de la base de donnée */
2863
+    public $db = '';
2864
+    /** @var bool Doit-on tracer les requetes (var_profile) ? */
2865
+    public $tracer = false; // doit-on tracer les requetes (var_profile)
2866
+
2867
+    /** @var string Version de SQLite (2 ou 3) */
2868
+    public $sqlite_version = '';
2869
+
2870
+    /**
2871
+     * Constructeur
2872
+     *
2873
+     * @param string $serveur
2874
+     * @return bool
2875
+     */
2876
+    public function __construct($serveur = '') {
2877
+        _sqlite_init();
2878
+        $this->serveur = strtolower($serveur);
2879
+
2880
+        if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2881
+            spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2882
+
2883
+            return false;
2884
+        }
2885
+
2886
+        $this->sqlite_version = _sqlite_is_version('', $this->link);
2887
+
2888
+        $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2889
+        $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2890
+
2891
+        // tracage des requetes ?
2892
+        $this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2893
+    }
2894
+
2895
+    /**
2896
+     * Lancer la requête transmise et faire le tracage si demandé
2897
+     *
2898
+     * @param string $query
2899
+     *     Requête à exécuter
2900
+     * @param bool|null $tracer
2901
+     *     true pour tracer la requête
2902
+     * @return bool|SQLiteResult
2903
+     */
2904
+    public function executer_requete($query, $tracer = null) {
2905
+        if (is_null($tracer)) {
2906
+            $tracer = $this->tracer;
2907
+        }
2908
+        $err = '';
2909
+        $t = 0;
2910
+        if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2911
+            include_spip('public/tracer');
2912
+            $t = trace_query_start();
2913
+        }
2914
+
2915
+        # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2916
+        if ($this->link) {
2917
+            // memoriser la derniere erreur PHP vue
2918
+            $last_error = (function_exists('error_get_last') ? error_get_last() : '');
2919
+            $e = null;
2920
+            // sauver la derniere requete
2921
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2922
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2923
+
2924
+            try {
2925
+                $r = $this->link->query($query);
2926
+            } catch (\PDOException $e) {
2927
+                spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2928
+                $r = false;
2929
+            }
2930
+            // sauvegarde de la requete (elle y est deja dans $r->queryString)
2931
+            # $r->spipQueryString = $query;
2932
+
2933
+            // comptage : oblige de compter le nombre d'entrees retournees
2934
+            // par une requete SELECT
2935
+            // aucune autre solution ne donne le nombre attendu :( !
2936
+            // particulierement s'il y a des LIMIT dans la requete.
2937
+            if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2938
+                if ($r) {
2939
+                    // noter le link et la query pour faire le comptage *si* on en a besoin
2940
+                    $r->spipSqliteRowCount = [$this->link, $query];
2941
+                } elseif ($r instanceof PDOStatement) {
2942
+                    $r->spipSqliteRowCount = 0;
2943
+                }
2944
+            }
2945
+
2946
+            // loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2947
+            if ($e and $e instanceof \PDOException) {
2948
+                $err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2949
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2950
+            } elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2951
+                $err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2952
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2953
+            } else {
2954
+                $err = '';
2955
+            }
2956
+        } else {
2957
+            $r = false;
2958
+        }
2959
+
2960
+        if (spip_sqlite_errno($this->serveur)) {
2961
+            $err .= spip_sqlite_error($query, $this->serveur);
2962
+        }
2963
+
2964
+        return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2965
+    }
2966
+
2967
+    /**
2968
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2969
+     *
2970
+     * @return int
2971
+     **/
2972
+    public function last_insert_id() {
2973
+        return $this->link->lastInsertId();
2974
+    }
2975 2975
 }
2976 2976
 
2977 2977
 
@@ -2981,206 +2981,206 @@  discard block
 block discarded – undo
2981 2981
  * (fonction pour proteger les textes)
2982 2982
  */
2983 2983
 class sqlite_traducteur {
2984
-	/** @var string $query Texte de la requête */
2985
-	public $query = '';
2986
-	/** @var string $prefixe Préfixe des tables */
2987
-	public $prefixe = '';
2988
-	/** @var string $sqlite_version Version de sqlite (2 ou 3) */
2989
-	public $sqlite_version = '';
2990
-
2991
-	/** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2992
-	 *
2993
-	 * @var array
2994
-	 */
2995
-	public $textes = [];
2996
-
2997
-	/**
2998
-	 * Constructeur
2999
-	 *
3000
-	 * @param string $query Requête à préparer
3001
-	 * @param string $prefixe Prefixe des tables à utiliser
3002
-	 * @param string $sqlite_version Version SQLite (2 ou 3)
3003
-	 */
3004
-	public function __construct($query, $prefixe, $sqlite_version) {
3005
-		$this->query = $query;
3006
-		$this->prefixe = $prefixe;
3007
-		$this->sqlite_version = $sqlite_version;
3008
-	}
3009
-
3010
-	/**
3011
-	 * Transformer la requete pour SQLite
3012
-	 *
3013
-	 * Enlève les textes, transforme la requête pour quelle soit
3014
-	 * bien interprétée par SQLite, puis remet les textes
3015
-	 * la fonction affecte `$this->query`
3016
-	 */
3017
-	public function traduire_requete() {
3018
-		//
3019
-		// 1) Protection des textes en les remplacant par des codes
3020
-		//
3021
-		// enlever les 'textes' et initialiser avec
3022
-		list($this->query, $textes) = query_echappe_textes($this->query);
3023
-
3024
-		//
3025
-		// 2) Corrections de la requete
3026
-		//
3027
-		// Correction Create Database
3028
-		// Create Database -> requete ignoree
3029
-		if (strpos($this->query, 'CREATE DATABASE') === 0) {
3030
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3031
-			$this->query = 'SELECT 1';
3032
-		}
3033
-
3034
-		// Correction Insert Ignore
3035
-		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3036
-		if (strpos($this->query, 'INSERT IGNORE') === 0) {
3037
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3038
-			$this->query = 'INSERT ' . substr($this->query, '13');
3039
-		}
3040
-
3041
-		// Correction des dates avec INTERVAL
3042
-		// utiliser sql_date_proche() de preference
3043
-		if (strpos($this->query, 'INTERVAL') !== false) {
3044
-			$this->query = preg_replace_callback(
3045
-				'/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3046
-				[&$this, '_remplacerDateParTime'],
3047
-				$this->query
3048
-			);
3049
-		}
3050
-
3051
-		if (strpos($this->query, 'LEFT(') !== false) {
3052
-			$this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3053
-		}
3054
-
3055
-		if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3056
-			$this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3057
-		}
3058
-
3059
-
3060
-		// Correction Using
3061
-		// USING (non reconnu en sqlite2)
3062
-		// problematique car la jointure ne se fait pas du coup.
3063
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3064
-			spip_log(
3065
-				"'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3066
-				'sqlite.' . _LOG_ERREUR
3067
-			);
3068
-			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3069
-		}
3070
-
3071
-		// Correction Field
3072
-		// remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3073
-		if (strpos($this->query, 'FIELD') !== false) {
3074
-			$this->query = preg_replace_callback(
3075
-				'/FIELD\s*\(([^\)]*)\)/',
3076
-				[&$this, '_remplacerFieldParCase'],
3077
-				$this->query
3078
-			);
3079
-		}
3080
-
3081
-		// Correction des noms de tables FROM
3082
-		// mettre les bons noms de table dans from, update, insert, replace...
3083
-		if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3084
-			$suite = strstr($this->query, $regs[0]);
3085
-			$this->query = substr($this->query, 0, -strlen($suite));
3086
-		} else {
3087
-			$suite = '';
3088
-		}
3089
-		$pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3090
-		$this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3091
-
3092
-		// Correction zero AS x
3093
-		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3094
-		// n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3095
-		// il dit que x ne doit pas être un integer dans le order by !
3096
-		// on remplace du coup x par vide() dans ce cas uniquement
3097
-		//
3098
-		// apparait dans public/vertebrer.php et dans le plugin menu aussi qui genere aussi ce genre de requete via un {par num #GET{tri_num}}
3099
-		// mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3100
-		if ((strpos($this->query, '0 AS') !== false)) {
3101
-			// on ne remplace que dans ORDER BY ou GROUP BY
3102
-			if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3103
-				$suite = strstr($this->query, $regs[0]);
3104
-				$this->query = substr($this->query, 0, -strlen($suite));
3105
-
3106
-				// on cherche les noms des x dans 0 AS x
3107
-				// on remplace dans $suite le nom par vide()
3108
-				preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3109
-				foreach ($matches[1] as $m) {
3110
-					if (strpos($suite, $m) !== false) {
3111
-						$suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3112
-					}
3113
-				}
3114
-				$this->query .= $suite;
3115
-			}
3116
-		}
3117
-
3118
-		// Correction possible des divisions entieres
3119
-		// Le standard SQL (lequel? ou?) semble indiquer que
3120
-		// a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3121
-		// C'est ce que retournent effectivement SQL Server et SQLite
3122
-		// Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3123
-		//
3124
-		// On peut forcer la conversion en multipliant par 1.0 avant la division
3125
-		// /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3126
-		// cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3127
-		//     http://www.sqlite.org/cvstrac/tktview?tn=3202
3128
-		// (4*1.0/3) n'est pas rendu dans ce cas !
3129
-		# $this->query = str_replace('/','* 1.00 / ',$this->query);
3130
-
3131
-
3132
-		// Correction critere REGEXP, non reconnu en sqlite2
3133
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3134
-			$this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3135
-		}
3136
-
3137
-		//
3138
-		// 3) Remise en place des textes d'origine
3139
-		//
3140
-		// Correction Antiquotes et echappements
3141
-		// ` => rien
3142
-		if (strpos($this->query, '`') !== false) {
3143
-			$this->query = str_replace('`', '', $this->query);
3144
-		}
3145
-
3146
-		$this->query = query_reinjecte_textes($this->query, $textes);
3147
-
3148
-		return $this->query;
3149
-	}
3150
-
3151
-
3152
-	/**
3153
-	 * Callback pour remplacer `DATE_` / `INTERVAL`
3154
-	 * par `DATE ... strtotime`
3155
-	 *
3156
-	 * @param array $matches Captures
3157
-	 * @return string Texte de date compris par SQLite
3158
-	 */
3159
-	public function _remplacerDateParTime($matches) {
3160
-		$op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3161
-
3162
-		return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3163
-	}
3164
-
3165
-	/**
3166
-	 * Callback pour remplacer `FIELD(table,i,j,k...)`
3167
-	 * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3168
-	 *
3169
-	 * @param array $matches Captures
3170
-	 * @return string Texte de liste ordonnée compris par SQLite
3171
-	 */
3172
-	public function _remplacerFieldParCase($matches) {
3173
-		$fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3174
-		$t = explode(',', $fields);
3175
-		$index = array_shift($t);
3176
-
3177
-		$res = '';
3178
-		$n = 0;
3179
-		foreach ($t as $v) {
3180
-			$n++;
3181
-			$res .= "\nWHEN $index=$v THEN $n";
3182
-		}
3183
-
3184
-		return "CASE $res ELSE 0 END ";
3185
-	}
2984
+    /** @var string $query Texte de la requête */
2985
+    public $query = '';
2986
+    /** @var string $prefixe Préfixe des tables */
2987
+    public $prefixe = '';
2988
+    /** @var string $sqlite_version Version de sqlite (2 ou 3) */
2989
+    public $sqlite_version = '';
2990
+
2991
+    /** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2992
+     *
2993
+     * @var array
2994
+     */
2995
+    public $textes = [];
2996
+
2997
+    /**
2998
+     * Constructeur
2999
+     *
3000
+     * @param string $query Requête à préparer
3001
+     * @param string $prefixe Prefixe des tables à utiliser
3002
+     * @param string $sqlite_version Version SQLite (2 ou 3)
3003
+     */
3004
+    public function __construct($query, $prefixe, $sqlite_version) {
3005
+        $this->query = $query;
3006
+        $this->prefixe = $prefixe;
3007
+        $this->sqlite_version = $sqlite_version;
3008
+    }
3009
+
3010
+    /**
3011
+     * Transformer la requete pour SQLite
3012
+     *
3013
+     * Enlève les textes, transforme la requête pour quelle soit
3014
+     * bien interprétée par SQLite, puis remet les textes
3015
+     * la fonction affecte `$this->query`
3016
+     */
3017
+    public function traduire_requete() {
3018
+        //
3019
+        // 1) Protection des textes en les remplacant par des codes
3020
+        //
3021
+        // enlever les 'textes' et initialiser avec
3022
+        list($this->query, $textes) = query_echappe_textes($this->query);
3023
+
3024
+        //
3025
+        // 2) Corrections de la requete
3026
+        //
3027
+        // Correction Create Database
3028
+        // Create Database -> requete ignoree
3029
+        if (strpos($this->query, 'CREATE DATABASE') === 0) {
3030
+            spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3031
+            $this->query = 'SELECT 1';
3032
+        }
3033
+
3034
+        // Correction Insert Ignore
3035
+        // INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3036
+        if (strpos($this->query, 'INSERT IGNORE') === 0) {
3037
+            spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3038
+            $this->query = 'INSERT ' . substr($this->query, '13');
3039
+        }
3040
+
3041
+        // Correction des dates avec INTERVAL
3042
+        // utiliser sql_date_proche() de preference
3043
+        if (strpos($this->query, 'INTERVAL') !== false) {
3044
+            $this->query = preg_replace_callback(
3045
+                '/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3046
+                [&$this, '_remplacerDateParTime'],
3047
+                $this->query
3048
+            );
3049
+        }
3050
+
3051
+        if (strpos($this->query, 'LEFT(') !== false) {
3052
+            $this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3053
+        }
3054
+
3055
+        if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3056
+            $this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3057
+        }
3058
+
3059
+
3060
+        // Correction Using
3061
+        // USING (non reconnu en sqlite2)
3062
+        // problematique car la jointure ne se fait pas du coup.
3063
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3064
+            spip_log(
3065
+                "'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3066
+                'sqlite.' . _LOG_ERREUR
3067
+            );
3068
+            $this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3069
+        }
3070
+
3071
+        // Correction Field
3072
+        // remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3073
+        if (strpos($this->query, 'FIELD') !== false) {
3074
+            $this->query = preg_replace_callback(
3075
+                '/FIELD\s*\(([^\)]*)\)/',
3076
+                [&$this, '_remplacerFieldParCase'],
3077
+                $this->query
3078
+            );
3079
+        }
3080
+
3081
+        // Correction des noms de tables FROM
3082
+        // mettre les bons noms de table dans from, update, insert, replace...
3083
+        if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3084
+            $suite = strstr($this->query, $regs[0]);
3085
+            $this->query = substr($this->query, 0, -strlen($suite));
3086
+        } else {
3087
+            $suite = '';
3088
+        }
3089
+        $pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3090
+        $this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3091
+
3092
+        // Correction zero AS x
3093
+        // pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3094
+        // n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3095
+        // il dit que x ne doit pas être un integer dans le order by !
3096
+        // on remplace du coup x par vide() dans ce cas uniquement
3097
+        //
3098
+        // apparait dans public/vertebrer.php et dans le plugin menu aussi qui genere aussi ce genre de requete via un {par num #GET{tri_num}}
3099
+        // mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3100
+        if ((strpos($this->query, '0 AS') !== false)) {
3101
+            // on ne remplace que dans ORDER BY ou GROUP BY
3102
+            if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3103
+                $suite = strstr($this->query, $regs[0]);
3104
+                $this->query = substr($this->query, 0, -strlen($suite));
3105
+
3106
+                // on cherche les noms des x dans 0 AS x
3107
+                // on remplace dans $suite le nom par vide()
3108
+                preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3109
+                foreach ($matches[1] as $m) {
3110
+                    if (strpos($suite, $m) !== false) {
3111
+                        $suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3112
+                    }
3113
+                }
3114
+                $this->query .= $suite;
3115
+            }
3116
+        }
3117
+
3118
+        // Correction possible des divisions entieres
3119
+        // Le standard SQL (lequel? ou?) semble indiquer que
3120
+        // a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3121
+        // C'est ce que retournent effectivement SQL Server et SQLite
3122
+        // Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3123
+        //
3124
+        // On peut forcer la conversion en multipliant par 1.0 avant la division
3125
+        // /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3126
+        // cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3127
+        //     http://www.sqlite.org/cvstrac/tktview?tn=3202
3128
+        // (4*1.0/3) n'est pas rendu dans ce cas !
3129
+        # $this->query = str_replace('/','* 1.00 / ',$this->query);
3130
+
3131
+
3132
+        // Correction critere REGEXP, non reconnu en sqlite2
3133
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3134
+            $this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3135
+        }
3136
+
3137
+        //
3138
+        // 3) Remise en place des textes d'origine
3139
+        //
3140
+        // Correction Antiquotes et echappements
3141
+        // ` => rien
3142
+        if (strpos($this->query, '`') !== false) {
3143
+            $this->query = str_replace('`', '', $this->query);
3144
+        }
3145
+
3146
+        $this->query = query_reinjecte_textes($this->query, $textes);
3147
+
3148
+        return $this->query;
3149
+    }
3150
+
3151
+
3152
+    /**
3153
+     * Callback pour remplacer `DATE_` / `INTERVAL`
3154
+     * par `DATE ... strtotime`
3155
+     *
3156
+     * @param array $matches Captures
3157
+     * @return string Texte de date compris par SQLite
3158
+     */
3159
+    public function _remplacerDateParTime($matches) {
3160
+        $op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3161
+
3162
+        return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3163
+    }
3164
+
3165
+    /**
3166
+     * Callback pour remplacer `FIELD(table,i,j,k...)`
3167
+     * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3168
+     *
3169
+     * @param array $matches Captures
3170
+     * @return string Texte de liste ordonnée compris par SQLite
3171
+     */
3172
+    public function _remplacerFieldParCase($matches) {
3173
+        $fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3174
+        $t = explode(',', $fields);
3175
+        $index = array_shift($t);
3176
+
3177
+        $res = '';
3178
+        $n = 0;
3179
+        foreach ($t as $v) {
3180
+            $n++;
3181
+            $res .= "\nWHEN $index=$v THEN $n";
3182
+        }
3183
+
3184
+        return "CASE $res ELSE 0 END ";
3185
+    }
3186 3186
 }
Please login to merge, or discard this patch.
Spacing   +95 added lines, -95 removed lines patch added patch discarded remove patch
@@ -64,27 +64,27 @@  discard block
 block discarded – undo
64 64
 	// determiner le dossier de la base : $addr ou _DIR_DB
65 65
 	$f = _DIR_DB;
66 66
 	if ($addr and strpos($addr, '/') !== false) {
67
-		$f = rtrim($addr, '/') . '/';
67
+		$f = rtrim($addr, '/').'/';
68 68
 	}
69 69
 
70 70
 	// un nom de base demande et impossible d'obtenir la base, on s'en va :
71 71
 	// il faut que la base existe ou que le repertoire parent soit writable
72
-	if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) {
73
-		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS);
72
+	if ($db and !is_file($f .= $db.'.sqlite') and !is_writable(dirname($f))) {
73
+		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.'._LOG_HS);
74 74
 
75 75
 		return false;
76 76
 	}
77 77
 
78 78
 	// charger les modules sqlite au besoin
79 79
 	if (!_sqlite_charger_version($sqlite_version)) {
80
-		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS);
80
+		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.'._LOG_HS);
81 81
 
82 82
 		return false;
83 83
 	}
84 84
 
85 85
 	// chargement des constantes
86 86
 	// il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
87
-	$define = 'spip_sqlite' . $sqlite_version . '_constantes';
87
+	$define = 'spip_sqlite'.$sqlite_version.'_constantes';
88 88
 	$define();
89 89
 
90 90
 	$ok = false;
@@ -92,8 +92,8 @@  discard block
 block discarded – undo
92 92
 		// si pas de db ->
93 93
 		// base temporaire tant qu'on ne connait pas son vrai nom
94 94
 		// pour tester la connexion
95
-		$db = '_sqlite' . $sqlite_version . '_install';
96
-		$tmp = _DIR_DB . $db . '.sqlite';
95
+		$db = '_sqlite'.$sqlite_version.'_install';
96
+		$tmp = _DIR_DB.$db.'.sqlite';
97 97
 		$ok = $link = new \PDO("sqlite:$tmp");
98 98
 	} else {
99 99
 		// Ouvrir (eventuellement creer la base)
@@ -102,7 +102,7 @@  discard block
 block discarded – undo
102 102
 
103 103
 	if (!$ok) {
104 104
 		$e = _sqlite_last_error_from_link($link);
105
-		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS);
105
+		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.'._LOG_HS);
106 106
 
107 107
 		return false;
108 108
 	}
@@ -188,7 +188,7 @@  discard block
 block discarded – undo
188 188
 		$table = $regs[3];
189 189
 		$suite = $regs[4];
190 190
 	} else {
191
-		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR);
191
+		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.'._LOG_ERREUR);
192 192
 
193 193
 		return false;
194 194
 	}
@@ -205,7 +205,7 @@  discard block
 block discarded – undo
205 205
 	$i = 0;
206 206
 	$ouverte = false;
207 207
 	while ($do = array_shift($todo)) {
208
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do;
208
+		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i].','.$do : $do;
209 209
 		$o = (false !== strpos($do, '('));
210 210
 		$f = (false !== strpos($do, ')'));
211 211
 		if ($o and !$f) {
@@ -231,7 +231,7 @@  discard block
 block discarded – undo
231 231
 		) {
232 232
 			spip_log(
233 233
 				"SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)",
234
-				'sqlite.' . _LOG_ERREUR
234
+				'sqlite.'._LOG_ERREUR
235 235
 			);
236 236
 
237 237
 			return false;
@@ -327,10 +327,10 @@  discard block
 block discarded – undo
327 327
 
328 328
 			// pas geres en sqlite2
329 329
 			case 'RENAME':
330
-				$do = 'RENAME TO' . substr($do, 6);
330
+				$do = 'RENAME TO'.substr($do, 6);
331 331
 			case 'RENAME TO':
332 332
 				if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
333
-					spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR);
333
+					spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.'._LOG_ERREUR);
334 334
 
335 335
 					return false;
336 336
 				}
@@ -373,7 +373,7 @@  discard block
 block discarded – undo
373 373
 						$colonnes = substr($colonne_origine, 1, -1);
374 374
 						if (false !== strpos(',', $colonnes)) {
375 375
 							spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes'
376
-								. " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR);
376
+								. " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.'._LOG_ERREUR);
377 377
 							break;
378 378
 						} else {
379 379
 							$nom_index = $colonnes;
@@ -388,12 +388,12 @@  discard block
 block discarded – undo
388 388
 
389 389
 			// pas geres en sqlite2
390 390
 			case 'ADD COLUMN':
391
-				$do = 'ADD' . substr($do, 10);
391
+				$do = 'ADD'.substr($do, 10);
392 392
 			case 'ADD':
393 393
 			default:
394 394
 				if (!preg_match(',primary\s+key,i', $do)) {
395 395
 					if (!spip_sqlite::executer_requete("$debut $do", $serveur)) {
396
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
396
+						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
397 397
 
398 398
 						return false;
399 399
 					}
@@ -413,7 +413,7 @@  discard block
 block discarded – undo
413 413
 					}
414 414
 					$opts['field'] = [$colonne_ajoutee => $def];
415 415
 					if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) {
416
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR);
416
+						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
417 417
 
418 418
 						return false;
419 419
 					}
@@ -421,10 +421,10 @@  discard block
 block discarded – undo
421 421
 				break;
422 422
 		}
423 423
 		// tout est bon, ouf !
424
-		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO);
424
+		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.'._LOG_INFO);
425 425
 	}
426 426
 
427
-	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO);
427
+	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.'._LOG_INFO);
428 428
 
429 429
 	return true;
430 430
 }
@@ -493,9 +493,9 @@  discard block
 block discarded – undo
493 493
  * @return bool true si la base est créee.
494 494
  **/
495 495
 function spip_sqlite_create_base($nom, $serveur = '', $option = true) {
496
-	$f = $nom . '.sqlite';
496
+	$f = $nom.'.sqlite';
497 497
 	if (strpos($nom, '/') === false) {
498
-		$f = _DIR_DB . $f;
498
+		$f = _DIR_DB.$f;
499 499
 	}
500 500
 
501 501
 	$ok = new \PDO("sqlite:$f");
@@ -535,13 +535,13 @@  discard block
 block discarded – undo
535 535
 	if (sql_showtable($nom, false, $serveur)) {
536 536
 		spip_log(
537 537
 			"Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",
538
-			'sqlite.' . _LOG_ERREUR
538
+			'sqlite.'._LOG_ERREUR
539 539
 		);
540 540
 
541 541
 		return false;
542 542
 	}
543 543
 
544
-	$query = "CREATE VIEW $nom AS " . $query_select;
544
+	$query = "CREATE VIEW $nom AS ".$query_select;
545 545
 
546 546
 	return spip_sqlite_query($query, $serveur, $requeter);
547 547
 }
@@ -567,8 +567,8 @@  discard block
 block discarded – undo
567 567
 function spip_sqlite_create_index($nom, $table, $champs, $unique = '', $serveur = '', $requeter = true) {
568 568
 	if (!($nom or $table or $champs)) {
569 569
 		spip_log(
570
-			"Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))',
571
-			'sqlite.' . _LOG_ERREUR
570
+			"Champ manquant pour creer un index sqlite ($nom, $table, (".join(',', $champs).'))',
571
+			'sqlite.'._LOG_ERREUR
572 572
 		);
573 573
 
574 574
 		return false;
@@ -576,7 +576,7 @@  discard block
 block discarded – undo
576 576
 
577 577
 	// SQLite ne differentie pas noms des index en fonction des tables
578 578
 	// il faut donc creer des noms uniques d'index pour une base sqlite
579
-	$nom = $table . '_' . $nom;
579
+	$nom = $table.'_'.$nom;
580 580
 	// enlever d'eventuelles parentheses deja presentes sur champs
581 581
 	if (!is_array($champs)) {
582 582
 		if ($champs[0] == '(') {
@@ -598,12 +598,12 @@  discard block
 block discarded – undo
598 598
 	} else {
599 599
 		/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
600 600
 		$a = spip_sqlite_showtable($table, $serveur);
601
-		if (isset($a['key']['KEY ' . $nom])) {
601
+		if (isset($a['key']['KEY '.$nom])) {
602 602
 			return true;
603 603
 		}
604 604
 	}
605 605
 
606
-	$query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')';
606
+	$query = 'CREATE '.($unique ? 'UNIQUE ' : '')."INDEX$ifnotexists $nom ON $table (".join(',', $champs).')';
607 607
 	$res = spip_sqlite_query($query, $serveur, $requeter);
608 608
 	if (!$requeter) {
609 609
 		return $res;
@@ -679,7 +679,7 @@  discard block
 block discarded – undo
679 679
 	$serveur = '',
680 680
 	$requeter = true
681 681
 ) {
682
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
682
+	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
683 683
 	$r = spip_sqlite_select(
684 684
 		"COUNT($c)",
685 685
 		$from,
@@ -788,14 +788,14 @@  discard block
 block discarded – undo
788 788
  */
789 789
 function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true) {
790 790
 	if (!($nom or $table)) {
791
-		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR);
791
+		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.'._LOG_ERREUR);
792 792
 
793 793
 		return false;
794 794
 	}
795 795
 
796 796
 	// SQLite ne differentie pas noms des index en fonction des tables
797 797
 	// il faut donc creer des noms uniques d'index pour une base sqlite
798
-	$index = $table . '_' . $nom;
798
+	$index = $table.'_'.$nom;
799 799
 	$exist = ' IF EXISTS';
800 800
 
801 801
 	$query = "DROP INDEX$exist $index";
@@ -827,7 +827,7 @@  discard block
 block discarded – undo
827 827
 	if ($s) {
828 828
 		$trace = debug_backtrace();
829 829
 		if ($trace[0]['function'] != 'spip_sqlite_error') {
830
-			spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR);
830
+			spip_log("$s - $query - ".sql_error_backtrace(), 'sqlite.'._LOG_ERREUR);
831 831
 		}
832 832
 	}
833 833
 
@@ -874,14 +874,14 @@  discard block
 block discarded – undo
874 874
 		$t = $link->errorInfo();
875 875
 		$s = ltrim($t[0], '0'); // 00000 si pas d'erreur
876 876
 		if ($s) {
877
-			$s .= ' / ' . $t[1];
877
+			$s .= ' / '.$t[1];
878 878
 		} // ajoute l'erreur du moteur SQLite
879 879
 	} else {
880 880
 		$s = ': aucune ressource sqlite (link)';
881 881
 	}
882 882
 
883 883
 	if ($s) {
884
-		spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR);
884
+		spip_log("Erreur sqlite $s", 'sqlite.'._LOG_ERREUR);
885 885
 	}
886 886
 
887 887
 	return $s ? $s : 0;
@@ -905,7 +905,7 @@  discard block
 block discarded – undo
905 905
 	}
906 906
 
907 907
 	$query = spip_sqlite::traduire_requete($query, $serveur);
908
-	$query = 'EXPLAIN ' . $query;
908
+	$query = 'EXPLAIN '.$query;
909 909
 	if (!$requeter) {
910 910
 		return $query;
911 911
 	}
@@ -1066,7 +1066,7 @@  discard block
 block discarded – undo
1066 1066
  **/
1067 1067
 function spip_sqlite_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) {
1068 1068
 
1069
-	$query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1069
+	$query = "INSERT INTO $table ".($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES');
1070 1070
 	if ($r = spip_sqlite_query($query, $serveur, $requeter)) {
1071 1071
 		if (!$requeter) {
1072 1072
 			return $r;
@@ -1121,8 +1121,8 @@  discard block
 block discarded – undo
1121 1121
 
1122 1122
 	$cles = $valeurs = '';
1123 1123
 	if (count($couples)) {
1124
-		$cles = '(' . join(',', array_keys($couples)) . ')';
1125
-		$valeurs = '(' . join(',', $couples) . ')';
1124
+		$cles = '('.join(',', array_keys($couples)).')';
1125
+		$valeurs = '('.join(',', $couples).')';
1126 1126
 	}
1127 1127
 
1128 1128
 	return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
@@ -1182,11 +1182,11 @@  discard block
 block discarded – undo
1182 1182
 
1183 1183
 		$champs = $valeurs = '';
1184 1184
 		if (count($couples)) {
1185
-			$champs = '(' . join(',', array_keys($couples)) . ')';
1186
-			$valeurs = '(' . join(',', $couples) . ')';
1187
-			$query = $query_start . "$champs VALUES $valeurs";
1185
+			$champs = '('.join(',', array_keys($couples)).')';
1186
+			$valeurs = '('.join(',', $couples).')';
1187
+			$query = $query_start."$champs VALUES $valeurs";
1188 1188
 		} else {
1189
-			$query = $query_start . 'DEFAULT VALUES';
1189
+			$query = $query_start.'DEFAULT VALUES';
1190 1190
 		}
1191 1191
 
1192 1192
 		if ($requeter) {
@@ -1318,7 +1318,7 @@  discard block
 block discarded – undo
1318 1318
  * @return string       Texte de sélection pour la requête
1319 1319
  */
1320 1320
 function spip_sqlite_multi($objet, $lang) {
1321
-	$r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi";
1321
+	$r = 'EXTRAIRE_MULTI('.$objet.", '".$lang."') AS multi";
1322 1322
 
1323 1323
 	return $r;
1324 1324
 }
@@ -1389,7 +1389,7 @@  discard block
 block discarded – undo
1389 1389
 function spip_sqlite_date_proche($champ, $interval, $unite) {
1390 1390
 	$op = (($interval <= 0) ? '>' : '<');
1391 1391
 
1392
-	return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))";
1392
+	return "($champ $op datetime('".date('Y-m-d H:i:s')."', '$interval $unite'))";
1393 1393
 }
1394 1394
 
1395 1395
 
@@ -1421,7 +1421,7 @@  discard block
 block discarded – undo
1421 1421
 				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1422 1422
 			) {
1423 1423
 				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur);
1424
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1424
+				spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE);
1425 1425
 			}
1426 1426
 			if (
1427 1427
 				preg_match(',^(INTEGER),i', $d)
@@ -1431,7 +1431,7 @@  discard block
 block discarded – undo
1431 1431
 				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1432 1432
 			) {
1433 1433
 				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur);
1434
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1434
+				spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE);
1435 1435
 			}
1436 1436
 			if (
1437 1437
 				preg_match(',^(datetime),i', $d)
@@ -1441,7 +1441,7 @@  discard block
 block discarded – undo
1441 1441
 				and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c)
1442 1442
 			) {
1443 1443
 				spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur);
1444
-				spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE);
1444
+				spip_log("ALTER $q", 'repair'._LOG_INFO_IMPORTANTE);
1445 1445
 			}
1446 1446
 		}
1447 1447
 
@@ -1492,10 +1492,10 @@  discard block
 block discarded – undo
1492 1492
 	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1493 1493
 	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1494 1494
 
1495
-	return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join(
1495
+	return spip_sqlite_query("REPLACE INTO $table (".join(',', array_keys($couples)).') VALUES ('.join(
1496 1496
 		',',
1497 1497
 		$couples
1498
-	) . ')', $serveur);
1498
+	).')', $serveur);
1499 1499
 }
1500 1500
 
1501 1501
 
@@ -1581,7 +1581,7 @@  discard block
 block discarded – undo
1581 1581
 		. _sqlite_calculer_expression('WHERE', $where)
1582 1582
 		. _sqlite_calculer_expression('GROUP BY', $groupby, ',')
1583 1583
 		. _sqlite_calculer_expression('HAVING', $having)
1584
-		. ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '')
1584
+		. ($orderby ? ("\nORDER BY "._sqlite_calculer_order($orderby)) : '')
1585 1585
 		. ($limit ? "\nLIMIT $limit" : '');
1586 1586
 
1587 1587
 	// dans un select, on doit renvoyer la requête en cas d'erreur
@@ -1619,10 +1619,10 @@  discard block
 block discarded – undo
1619 1619
 	// interdire la creation d'une nouvelle base,
1620 1620
 	// sauf si on est dans l'installation
1621 1621
 	if (
1622
-		!is_file($f = _DIR_DB . $db . '.sqlite')
1622
+		!is_file($f = _DIR_DB.$db.'.sqlite')
1623 1623
 		&& (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)
1624 1624
 	) {
1625
-		spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS);
1625
+		spip_log("Il est interdit de creer la base $db", 'sqlite.'._LOG_HS);
1626 1626
 
1627 1627
 		return false;
1628 1628
 	}
@@ -1631,12 +1631,12 @@  discard block
 block discarded – undo
1631 1631
 	// avec les identifiants connus
1632 1632
 	$index = $serveur ? $serveur : 0;
1633 1633
 
1634
-	if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) {
1634
+	if ($link = spip_connect_db('', '', '', '', '@selectdb@'.$db, $serveur, '', '')) {
1635 1635
 		if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) {
1636 1636
 			return $db;
1637 1637
 		}
1638 1638
 	} else {
1639
-		spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS);
1639
+		spip_log("Impossible de selectionner la base $db", 'sqlite.'._LOG_HS);
1640 1640
 
1641 1641
 		return false;
1642 1642
 	}
@@ -1687,7 +1687,7 @@  discard block
 block discarded – undo
1687 1687
 	$match = "^$match$";
1688 1688
 
1689 1689
 	return spip_sqlite_query(
1690
-		"SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match),
1690
+		"SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP "._q($match),
1691 1691
 		$serveur,
1692 1692
 		$requeter
1693 1693
 	);
@@ -1710,7 +1710,7 @@  discard block
 block discarded – undo
1710 1710
 	$r = spip_sqlite_query(
1711 1711
 		'SELECT name FROM sqlite_master WHERE'
1712 1712
 		. ' type=\'table\''
1713
-		. ' AND name=' . spip_sqlite_quote($table, 'string')
1713
+		. ' AND name='.spip_sqlite_quote($table, 'string')
1714 1714
 		. ' AND name NOT LIKE \'sqlite_%\'', 
1715 1715
 		$serveur, 
1716 1716
 		$requeter
@@ -1807,7 +1807,7 @@  discard block
 block discarded – undo
1807 1807
 				// s'il y a une parenthèse fermante dans la clé
1808 1808
 				// ou dans la définition sans qu'il n'y ait une ouverture avant
1809 1809
 				if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1810
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1810
+					$fields[$k_precedent] .= ','.$k.' '.$def;
1811 1811
 					continue;
1812 1812
 				}
1813 1813
 
@@ -1842,13 +1842,13 @@  discard block
 block discarded – undo
1842 1842
 				. 'ORDER BY substr(type,2,1), name';
1843 1843
 			$a = spip_sqlite_query($query, $serveur, $requeter);
1844 1844
 			while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1845
-				$key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1845
+				$key = str_replace($nom_table.'_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1846 1846
 				$keytype = 'KEY';
1847 1847
 				if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1848 1848
 					$keytype = 'UNIQUE KEY';
1849 1849
 				}
1850 1850
 				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1851
-				$keys[$keytype . ' ' . $key] = $colonnes;
1851
+				$keys[$keytype.' '.$key] = $colonnes;
1852 1852
 			}
1853 1853
 		}
1854 1854
 	} // c'est une vue, on liste les champs disponibles simplement
@@ -1895,7 +1895,7 @@  discard block
 block discarded – undo
1895 1895
 
1896 1896
 	$set = [];
1897 1897
 	foreach ($champs as $champ => $val) {
1898
-		$set[] = $champ . "=$val";
1898
+		$set[] = $champ."=$val";
1899 1899
 	}
1900 1900
 	if (!empty($set)) {
1901 1901
 		return spip_sqlite_query(
@@ -1948,7 +1948,7 @@  discard block
 block discarded – undo
1948 1948
 
1949 1949
 	$set = [];
1950 1950
 	foreach ($champs as $champ => $val) {
1951
-		$set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1951
+		$set[$champ] = $champ.'='._sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1952 1952
 	}
1953 1953
 
1954 1954
 	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
@@ -1956,7 +1956,7 @@  discard block
 block discarded – undo
1956 1956
 	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1957 1957
 	foreach ($maj as $champ => $val) {
1958 1958
 		if (!isset($set[$champ])) {
1959
-			$set[$champ] = $champ . '=' . $val;
1959
+			$set[$champ] = $champ.'='.$val;
1960 1960
 		}
1961 1961
 	}
1962 1962
 
@@ -1985,7 +1985,7 @@  discard block
 block discarded – undo
1985 1985
  */
1986 1986
 function _sqlite_init() {
1987 1987
 	if (!defined('_DIR_DB')) {
1988
-		define('_DIR_DB', _DIR_ETC . 'bases/');
1988
+		define('_DIR_DB', _DIR_ETC.'bases/');
1989 1989
 	}
1990 1990
 	if (!defined('_SQLITE_CHMOD')) {
1991 1991
 		define('_SQLITE_CHMOD', _SPIP_CHMOD);
@@ -2092,9 +2092,9 @@  discard block
 block discarded – undo
2092 2092
 	}
2093 2093
 
2094 2094
 	// echapper les ' en ''
2095
-	spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2095
+	spip_log('Pas de methode ->quote pour echapper', 'sqlite.'._LOG_INFO_IMPORTANTE);
2096 2096
 
2097
-	return ("'" . str_replace("'", "''", $v) . "'");
2097
+	return ("'".str_replace("'", "''", $v)."'");
2098 2098
 }
2099 2099
 
2100 2100
 
@@ -2117,12 +2117,12 @@  discard block
 block discarded – undo
2117 2117
 	$exp = "\n$expression ";
2118 2118
 
2119 2119
 	if (!is_array($v)) {
2120
-		return $exp . $v;
2120
+		return $exp.$v;
2121 2121
 	} else {
2122 2122
 		if (strtoupper($join) === 'AND') {
2123
-			return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2123
+			return $exp.join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2124 2124
 		} else {
2125
-			return $exp . join($join, $v);
2125
+			return $exp.join($join, $v);
2126 2126
 		}
2127 2127
 	}
2128 2128
 }
@@ -2156,17 +2156,17 @@  discard block
 block discarded – undo
2156 2156
 		if (substr($k, -1) == '@') {
2157 2157
 			// c'est une jointure qui se refere au from precedent
2158 2158
 			// pas de virgule
2159
-			$res .= '  ' . $v;
2159
+			$res .= '  '.$v;
2160 2160
 		} else {
2161 2161
 			if (!is_numeric($k)) {
2162 2162
 				$p = strpos($v, ' ');
2163 2163
 				if ($p) {
2164
-					$v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2164
+					$v = substr($v, 0, $p)." AS '$k'".substr($v, $p);
2165 2165
 				} else {
2166 2166
 					$v .= " AS '$k'";
2167 2167
 				}
2168 2168
 			}
2169
-			$res .= ', ' . $v;
2169
+			$res .= ', '.$v;
2170 2170
 		}
2171 2171
 	}
2172 2172
 
@@ -2304,13 +2304,13 @@  discard block
 block discarded – undo
2304 2304
 
2305 2305
 	$def_origine = sql_showtable($table_origine, false, $serveur);
2306 2306
 	if (!$def_origine or !isset($def_origine['field'])) {
2307
-		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2307
+		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite'._LOG_ERREUR);
2308 2308
 
2309 2309
 		return false;
2310 2310
 	}
2311 2311
 
2312 2312
 
2313
-	$table_tmp = $table_origine . '_tmp';
2313
+	$table_tmp = $table_origine.'_tmp';
2314 2314
 
2315 2315
 	// 1) creer une table temporaire avec les modifications
2316 2316
 	// - DROP : suppression de la colonne
@@ -2397,7 +2397,7 @@  discard block
 block discarded – undo
2397 2397
 		} else {
2398 2398
 			// enlever KEY
2399 2399
 			$k = substr($k, 4);
2400
-			$queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2400
+			$queries[] = "CREATE INDEX $table_destination"."_$k ON $table_destination ($v)";
2401 2401
 		}
2402 2402
 	}
2403 2403
 
@@ -2408,7 +2408,7 @@  discard block
 block discarded – undo
2408 2408
 		foreach ($queries as $q) {
2409 2409
 			if (!spip_sqlite::executer_requete($q, $serveur)) {
2410 2410
 				spip_log('SQLite : ALTER TABLE table :'
2411
-					. " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2411
+					. " Erreur a l'execution de la requete : $q", 'sqlite.'._LOG_ERREUR);
2412 2412
 				spip_sqlite::annuler_transaction($serveur);
2413 2413
 
2414 2414
 				return false;
@@ -2498,27 +2498,27 @@  discard block
 block discarded – undo
2498 2498
 	$enum = '(\s*\([^\)]*\))?';
2499 2499
 
2500 2500
 	$remplace = [
2501
-		'/enum' . $enum . '/is' => 'VARCHAR(255)',
2501
+		'/enum'.$enum.'/is' => 'VARCHAR(255)',
2502 2502
 		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2503 2503
 		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2504 2504
 		'/auto_increment/is' => '',
2505 2505
 		'/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2506 2506
 		'/(timestamp .* )ON .*$/is' => '\\1',
2507 2507
 		'/character set \w+/is' => '',
2508
-		'/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2508
+		'/((big|small|medium|tiny)?int(eger)?)'.$num.'\s*unsigned/is' => '\\1 UNSIGNED',
2509 2509
 		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
-		'/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
+		'/((char|varchar)'.$num.'\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511 2511
 		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2512 2512
 		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2513 2513
 	];
2514 2514
 
2515 2515
 	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2516 2516
 	$remplace_autocinc = [
2517
-		'/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2517
+		'/(big|small|medium|tiny)?int(eger)?'.$num.'/is' => 'INTEGER'
2518 2518
 	];
2519 2519
 	// pour les int non autoincrement, il faut un DEFAULT
2520 2520
 	$remplace_nonautocinc = [
2521
-		'/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2521
+		'/((big|small|medium|tiny)?int(eger)?'.$num.'\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2522 2522
 	];
2523 2523
 
2524 2524
 	if (is_string($query)) {
@@ -2560,7 +2560,7 @@  discard block
 block discarded – undo
2560 2560
 		return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2561 2561
 	}
2562 2562
 	if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2563
-		return $champ . ' COLLATE NOCASE';
2563
+		return $champ.' COLLATE NOCASE';
2564 2564
 	}
2565 2565
 
2566 2566
 	return $champ;
@@ -2650,14 +2650,14 @@  discard block
 block discarded – undo
2650 2650
 		} else {
2651 2651
 			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2652 2652
 			$a = spip_sqlite_showtable($nom, $serveur);
2653
-			if (isset($a['key']['KEY ' . $nom])) {
2653
+			if (isset($a['key']['KEY '.$nom])) {
2654 2654
 				return true;
2655 2655
 			}
2656 2656
 		}
2657 2657
 	}
2658 2658
 
2659 2659
 	$temporary = $temporary ? ' TEMPORARY' : '';
2660
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2660
+	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query".($keys ? ",$keys" : '').")\n";
2661 2661
 
2662 2662
 	return $q;
2663 2663
 }
@@ -2878,7 +2878,7 @@  discard block
 block discarded – undo
2878 2878
 		$this->serveur = strtolower($serveur);
2879 2879
 
2880 2880
 		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2881
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2881
+			spip_log('Aucune connexion sqlite (link)', 'sqlite.'._LOG_ERREUR);
2882 2882
 
2883 2883
 			return false;
2884 2884
 		}
@@ -2924,7 +2924,7 @@  discard block
 block discarded – undo
2924 2924
 			try {
2925 2925
 				$r = $this->link->query($query);
2926 2926
 			} catch (\PDOException $e) {
2927
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2927
+				spip_log('PDOException: '.$e->getMessage(), 'sqlite.'._LOG_DEBUG);
2928 2928
 				$r = false;
2929 2929
 			}
2930 2930
 			// sauvegarde de la requete (elle y est deja dans $r->queryString)
@@ -2945,11 +2945,11 @@  discard block
 block discarded – undo
2945 2945
 
2946 2946
 			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2947 2947
 			if ($e and $e instanceof \PDOException) {
2948
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2949
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2948
+				$err = strip_tags($e->getMessage()).' in '.$e->getFile().' line '.$e->getLine();
2949
+				spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2950 2950
 			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2951
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2952
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2951
+				$err = strip_tags($err['message']).' in '.$err['file'].' line '.$err['line'];
2952
+				spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2953 2953
 			} else {
2954 2954
 				$err = '';
2955 2955
 			}
@@ -3027,15 +3027,15 @@  discard block
 block discarded – undo
3027 3027
 		// Correction Create Database
3028 3028
 		// Create Database -> requete ignoree
3029 3029
 		if (strpos($this->query, 'CREATE DATABASE') === 0) {
3030
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3030
+			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.'._LOG_AVERTISSEMENT);
3031 3031
 			$this->query = 'SELECT 1';
3032 3032
 		}
3033 3033
 
3034 3034
 		// Correction Insert Ignore
3035 3035
 		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3036 3036
 		if (strpos($this->query, 'INSERT IGNORE') === 0) {
3037
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3038
-			$this->query = 'INSERT ' . substr($this->query, '13');
3037
+			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.'._LOG_DEBUG);
3038
+			$this->query = 'INSERT '.substr($this->query, '13');
3039 3039
 		}
3040 3040
 
3041 3041
 		// Correction des dates avec INTERVAL
@@ -3063,7 +3063,7 @@  discard block
 block discarded – undo
3063 3063
 		if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3064 3064
 			spip_log(
3065 3065
 				"'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3066
-				'sqlite.' . _LOG_ERREUR
3066
+				'sqlite.'._LOG_ERREUR
3067 3067
 			);
3068 3068
 			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3069 3069
 		}
@@ -3086,8 +3086,8 @@  discard block
 block discarded – undo
3086 3086
 		} else {
3087 3087
 			$suite = '';
3088 3088
 		}
3089
-		$pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3090
-		$this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3089
+		$pref = ($this->prefixe) ? $this->prefixe.'_' : '';
3090
+		$this->query = preg_replace('/([,\s])spip_/S', '\1'.$pref, $this->query).$suite;
3091 3091
 
3092 3092
 		// Correction zero AS x
3093 3093
 		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
Please login to merge, or discard this patch.