Completed
Push — spip-3.0 ( 484b62...e817f1 )
by cam
34:33
created
ecrire/inc_version.php 1 patch
Indentation   +55 added lines, -55 removed lines patch added patch discarded remove patch
@@ -24,7 +24,7 @@  discard block
 block discarded – undo
24 24
 if (!defined('_DIR_RESTREINT_ABS')) define('_DIR_RESTREINT_ABS', 'ecrire/');
25 25
 # sommes-nous dans ecrire/ ?
26 26
 define('_DIR_RESTREINT',
27
- (!is_dir(_DIR_RESTREINT_ABS) ? "" : _DIR_RESTREINT_ABS));
27
+    (!is_dir(_DIR_RESTREINT_ABS) ? "" : _DIR_RESTREINT_ABS));
28 28
 # ou inversement ?
29 29
 define('_DIR_RACINE', _DIR_RESTREINT ? '' : '../');
30 30
 
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
 // Son emplacement absolu si on le trouve
67 67
 if (@file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php')
68 68
 OR (@file_exists($f = _ROOT_RESTREINT . _NOM_CONFIG . '.php'))) {
69
-	define('_FILE_OPTIONS', $f);
69
+    define('_FILE_OPTIONS', $f);
70 70
 } else define('_FILE_OPTIONS', '');
71 71
 
72 72
 // les modules par defaut pour la traduction.
@@ -81,23 +81,23 @@  discard block
 block discarded – undo
81 81
 // Inclure l'ecran de securite
82 82
 if (!defined('_ECRAN_SECURITE')
83 83
 AND @file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . 'ecran_securite.php'))
84
-	include $f;
84
+    include $f;
85 85
 
86 86
 /*
87 87
  * Détecteur de robot d'indexation
88 88
  */
89 89
 if (!defined('_IS_BOT')){
90
-	define('_IS_BOT',
91
-		isset($_SERVER['HTTP_USER_AGENT'])
92
-		AND preg_match(
93
-			// mots generiques
94
-			',bot|slurp|crawler|spider|webvac|yandex|'
95
-			// MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot
96
-			. 'MSIE 6\.0|'
97
-			// UA plus cibles
98
-			. '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|facebook|flipboard|hootsuite|FunWebProducts|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|MetaURI|Moreover|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti'
99
-			. ',i', (string)$_SERVER['HTTP_USER_AGENT'])
100
-	);
90
+    define('_IS_BOT',
91
+        isset($_SERVER['HTTP_USER_AGENT'])
92
+        AND preg_match(
93
+            // mots generiques
94
+            ',bot|slurp|crawler|spider|webvac|yandex|'
95
+            // MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot
96
+            . 'MSIE 6\.0|'
97
+            // UA plus cibles
98
+            . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|facebook|flipboard|hootsuite|FunWebProducts|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|MetaURI|Moreover|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti'
99
+            . ',i', (string)$_SERVER['HTTP_USER_AGENT'])
100
+    );
101 101
 }
102 102
 
103 103
 //
@@ -265,24 +265,24 @@  discard block
 block discarded – undo
265 265
 
266 266
 // Liste des statuts.
267 267
 $liste_des_statuts = array(
268
-	"info_administrateurs" => '0minirezo',
269
-	"info_redacteurs" =>'1comite',
270
-	"info_visiteurs" => '6forum',
271
-	"texte_statut_poubelle" => '5poubelle'
268
+    "info_administrateurs" => '0minirezo',
269
+    "info_redacteurs" =>'1comite',
270
+    "info_visiteurs" => '6forum',
271
+    "texte_statut_poubelle" => '5poubelle'
272 272
 );
273 273
 
274 274
 $liste_des_etats = array(
275
-	'texte_statut_en_cours_redaction' => 'prepa',
276
-	'texte_statut_propose_evaluation' => 'prop',
277
-	'texte_statut_publie' => 'publie',
278
-	'texte_statut_poubelle' => 'poubelle',
279
-	'texte_statut_refuse' => 'refuse'
275
+    'texte_statut_en_cours_redaction' => 'prepa',
276
+    'texte_statut_propose_evaluation' => 'prop',
277
+    'texte_statut_publie' => 'publie',
278
+    'texte_statut_poubelle' => 'poubelle',
279
+    'texte_statut_refuse' => 'refuse'
280 280
 );
281 281
 
282 282
 // liste des methodes d'authentifications
283 283
 $liste_des_authentifications = array(
284
-	'spip'=>'spip',
285
-	'ldap'=>'ldap'
284
+    'spip'=>'spip',
285
+    'ldap'=>'ldap'
286 286
 );
287 287
 
288 288
 // Experimental : pour supprimer systematiquement l'affichage des numeros
@@ -341,10 +341,10 @@  discard block
 block discarded – undo
341 341
 // ===> on execute en neutralisant les messages d'erreur
342 342
 
343 343
 spip_initialisation_core(
344
-	(_DIR_RACINE  . _NOM_PERMANENTS_INACCESSIBLES),
345
-	(_DIR_RACINE  . _NOM_PERMANENTS_ACCESSIBLES),
346
-	(_DIR_RACINE  . _NOM_TEMPORAIRES_INACCESSIBLES),
347
-	(_DIR_RACINE  . _NOM_TEMPORAIRES_ACCESSIBLES)
344
+    (_DIR_RACINE  . _NOM_PERMANENTS_INACCESSIBLES),
345
+    (_DIR_RACINE  . _NOM_PERMANENTS_ACCESSIBLES),
346
+    (_DIR_RACINE  . _NOM_TEMPORAIRES_INACCESSIBLES),
347
+    (_DIR_RACINE  . _NOM_TEMPORAIRES_ACCESSIBLES)
348 348
 );
349 349
 
350 350
 
@@ -354,14 +354,14 @@  discard block
 block discarded – undo
354 354
 // donc il faut avoir tout fini ici avant de charger les plugins
355 355
 
356 356
 if (@is_readable(_CACHE_PLUGINS_OPT) AND @is_readable(_CACHE_PLUGINS_PATH)){
357
-	// chargement optimise precompile
358
-	include_once(_CACHE_PLUGINS_OPT);
357
+    // chargement optimise precompile
358
+    include_once(_CACHE_PLUGINS_OPT);
359 359
 } else {
360
-	spip_initialisation_suite();
361
-	include_spip('inc/plugin');
362
-	// generer les fichiers php precompiles
363
-	// de chargement des plugins et des pipelines
364
-	actualise_plugins_actifs();
360
+    spip_initialisation_suite();
361
+    include_spip('inc/plugin');
362
+    // generer les fichiers php precompiles
363
+    // de chargement des plugins et des pipelines
364
+    actualise_plugins_actifs();
365 365
 }
366 366
 // Initialisations non critiques surchargeables par les plugins
367 367
 spip_initialisation_suite();
@@ -370,11 +370,11 @@  discard block
 block discarded – undo
370 370
 defined('_LOG_FILTRE_GRAVITE') || define('_LOG_FILTRE_GRAVITE', _LOG_INFO_IMPORTANTE);
371 371
 
372 372
 if (!defined('_OUTILS_DEVELOPPEURS'))
373
-	define('_OUTILS_DEVELOPPEURS',false);
373
+    define('_OUTILS_DEVELOPPEURS',false);
374 374
 
375 375
 // charger systematiquement inc/autoriser dans l'espace restreint
376 376
 if (test_espace_prive())
377
-	include_spip('inc/autoriser');
377
+    include_spip('inc/autoriser');
378 378
 //
379 379
 // Installer Spip si pas installe... sauf si justement on est en train
380 380
 //
@@ -384,18 +384,18 @@  discard block
 block discarded – undo
384 384
 OR _request('action') == 'converser'
385 385
 OR _request('action') == 'test_dirs')) {
386 386
 
387
-	// Si on peut installer, on lance illico
388
-	if (test_espace_prive()) {
389
-		include_spip('inc/headers');
390
-		redirige_url_ecrire("install");
391
-	} else {
392
-	// Si on est dans le site public, dire que qq s'en occupe
393
-		include_spip('inc/minipres');
394
-		utiliser_langue_visiteur();
395
-		echo minipres(_T('info_travaux_titre'), "<p style='text-align: center;'>"._T('info_travaux_texte')."</p>");
396
-		exit;
397
-	}
398
-	// autrement c'est une install ad hoc (spikini...), on sait pas faire
387
+    // Si on peut installer, on lance illico
388
+    if (test_espace_prive()) {
389
+        include_spip('inc/headers');
390
+        redirige_url_ecrire("install");
391
+    } else {
392
+    // Si on est dans le site public, dire que qq s'en occupe
393
+        include_spip('inc/minipres');
394
+        utiliser_langue_visiteur();
395
+        echo minipres(_T('info_travaux_titre'), "<p style='text-align: center;'>"._T('info_travaux_texte')."</p>");
396
+        exit;
397
+    }
398
+    // autrement c'est une install ad hoc (spikini...), on sait pas faire
399 399
 }
400 400
 
401 401
 
@@ -403,11 +403,11 @@  discard block
 block discarded – undo
403 403
 // La globale $spip_header_silencieux permet de rendre le header minimal pour raisons de securite
404 404
 if (!defined('_HEADER_COMPOSED_BY')) define('_HEADER_COMPOSED_BY', "Composed-By: SPIP");
405 405
 if (!headers_sent()) {
406
-	header("Vary: Cookie, Accept-Encoding");
407
-	if (!isset($GLOBALS['spip_header_silencieux']) OR !$GLOBALS['spip_header_silencieux'])
408
-		header(_HEADER_COMPOSED_BY . " $spip_version_affichee @ www.spip.net" . (isset($GLOBALS['meta']['plugin_header'])?(" + ".$GLOBALS['meta']['plugin_header']):""));
409
-	else // header minimal
410
-		header(_HEADER_COMPOSED_BY . " @ www.spip.net");
406
+    header("Vary: Cookie, Accept-Encoding");
407
+    if (!isset($GLOBALS['spip_header_silencieux']) OR !$GLOBALS['spip_header_silencieux'])
408
+        header(_HEADER_COMPOSED_BY . " $spip_version_affichee @ www.spip.net" . (isset($GLOBALS['meta']['plugin_header'])?(" + ".$GLOBALS['meta']['plugin_header']):""));
409
+    else // header minimal
410
+        header(_HEADER_COMPOSED_BY . " @ www.spip.net");
411 411
 }
412 412
 
413 413
 spip_log($_SERVER['REQUEST_METHOD'].' '.self() . ' - '._FILE_CONNECT,_LOG_DEBUG);
Please login to merge, or discard this patch.
ecrire/charsets/translitcomplexe.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -45,7 +45,7 @@
 block discarded – undo
45 45
 );
46 46
 
47 47
 foreach($translit_c as $u=>$t)
48
-	$trans[$u] = $t;
48
+    $trans[$u] = $t;
49 49
 $GLOBALS['CHARSET']['translitcomplexe'] = $trans;
50 50
 
51 51
 ?>
Please login to merge, or discard this patch.
ecrire/charsets/iso-8859-6.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -34,7 +34,7 @@
 block discarded – undo
34 34
 );
35 35
 
36 36
 foreach ($mod as $num=>$val)
37
-	$trans[$num]=$val;
37
+    $trans[$num]=$val;
38 38
 
39 39
 $GLOBALS['CHARSET']['iso-8859-6'] = $trans;
40 40
 
Please login to merge, or discard this patch.
ecrire/req/sqlite_fonctions.php 1 patch
Indentation   +186 added lines, -186 removed lines patch added patch discarded remove patch
@@ -23,82 +23,82 @@  discard block
 block discarded – undo
23 23
 // http://doc.spip.org/@_sqlite_init_functions
24 24
 function _sqlite_init_functions(&$sqlite){
25 25
 	
26
-	if (!$sqlite) return false;
26
+    if (!$sqlite) return false;
27 27
 
28 28
 	
29
-	$fonctions = array(
30
-		'CONCAT'		=> array( '_sqlite_func_concat'			,-1),
31
-		'CEIL'      => array( '_sqlite_func_ceil', 1), // absent de sqlite2
29
+    $fonctions = array(
30
+        'CONCAT'		=> array( '_sqlite_func_concat'			,-1),
31
+        'CEIL'      => array( '_sqlite_func_ceil', 1), // absent de sqlite2
32 32
 		
33
-		'DATE_FORMAT'	=> array( '_sqlite_func_strftime'		,2),
34
-		'DAYOFMONTH'	=> array( '_sqlite_func_dayofmonth'		,1),
33
+        'DATE_FORMAT'	=> array( '_sqlite_func_strftime'		,2),
34
+        'DAYOFMONTH'	=> array( '_sqlite_func_dayofmonth'		,1),
35 35
 
36
-		'EXTRAIRE_MULTI' => array( '_sqlite_func_extraire_multi', 2), // specifique a SPIP/sql_multi()
37
-		'EXP'			=> array( 'exp'							,1),//exponentielle
38
-		'FIND_IN_SET'	=> array( '_sqlite_func_find_in_set'	,2),
39
-		'FLOOR'      => array( '_sqlite_func_floor', 1), // absent de sqlite2
36
+        'EXTRAIRE_MULTI' => array( '_sqlite_func_extraire_multi', 2), // specifique a SPIP/sql_multi()
37
+        'EXP'			=> array( 'exp'							,1),//exponentielle
38
+        'FIND_IN_SET'	=> array( '_sqlite_func_find_in_set'	,2),
39
+        'FLOOR'      => array( '_sqlite_func_floor', 1), // absent de sqlite2
40 40
 
41
-		'IF'			=> array( '_sqlite_func_if' 			,3),
42
-		'INSERT'		=> array( '_sqlite_func_insert'			,4),		
43
-		'INSTR'			=> array( '_sqlite_func_instr'			,2),
41
+        'IF'			=> array( '_sqlite_func_if' 			,3),
42
+        'INSERT'		=> array( '_sqlite_func_insert'			,4),		
43
+        'INSTR'			=> array( '_sqlite_func_instr'			,2),
44 44
 
45
-		'LEAST'			=> array( '_sqlite_func_least'			,3),
46
-		'_LEFT'			=> array( '_sqlite_func_left'			,2),
45
+        'LEAST'			=> array( '_sqlite_func_least'			,3),
46
+        '_LEFT'			=> array( '_sqlite_func_left'			,2),
47 47
 #		'LENGTH'		=> array( 'strlen'						,1), // present v1.0.4
48 48
 #		'LOWER'			=> array( 'strtolower'					,1), // present v2.4
49 49
 #		'LTRIM'			=> array( 'ltrim'						,1), // present en theorie
50 50
 
51
-		'NOW'			=> array( '_sqlite_func_now'			,0),
51
+        'NOW'			=> array( '_sqlite_func_now'			,0),
52 52
 		
53
-		'MD5'			=> array( 'md5'							,1),
54
-		'MONTH'			=> array( '_sqlite_func_month'			,1),
53
+        'MD5'			=> array( 'md5'							,1),
54
+        'MONTH'			=> array( '_sqlite_func_month'			,1),
55 55
 		
56
-		'PREG_REPLACE'	=> array( '_sqlite_func_preg_replace'	,3),	
56
+        'PREG_REPLACE'	=> array( '_sqlite_func_preg_replace'	,3),	
57 57
 		
58
-		'RAND'			=> array( '_sqlite_func_rand'			,0), // sinon random() v2.4
59
-		'REGEXP'		=> array( '_sqlite_func_regexp_match'	,2), // critere REGEXP supporte a partir de v3.3.2
60
-		//'REGEXP_MATCH'	=> array( '_sqlite_func_regexp_match'	,2), // critere REGEXP supporte a partir de v3.3.2
58
+        'RAND'			=> array( '_sqlite_func_rand'			,0), // sinon random() v2.4
59
+        'REGEXP'		=> array( '_sqlite_func_regexp_match'	,2), // critere REGEXP supporte a partir de v3.3.2
60
+        //'REGEXP_MATCH'	=> array( '_sqlite_func_regexp_match'	,2), // critere REGEXP supporte a partir de v3.3.2
61 61
 
62
-		'RIGHT'			=> array( '_sqlite_func_right'			,2),
62
+        'RIGHT'			=> array( '_sqlite_func_right'			,2),
63 63
 #		'RTRIM'			=> array( 'rtrim'						,1), // present en theorie
64 64
 
65
-		'SETTYPE'		=> array( 'settype'						,2), // CAST present en v3.2.3
66
-		'SQRT'			=> array( 'sqrt'						,1), 
67
-		'SUBSTRING'		=> array( '_sqlite_func_substring'						/*,3*/), // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
65
+        'SETTYPE'		=> array( 'settype'						,2), // CAST present en v3.2.3
66
+        'SQRT'			=> array( 'sqrt'						,1), 
67
+        'SUBSTRING'		=> array( '_sqlite_func_substring'						/*,3*/), // peut etre appelee avec 2 ou 3 arguments, index base 1 et non 0
68 68
 		
69
-		'TO_DAYS'		=> array( '_sqlite_func_to_days'		,1),
69
+        'TO_DAYS'		=> array( '_sqlite_func_to_days'		,1),
70 70
 #		'TRIM'			=> array( 'trim'						,1), // present en theorie
71 71
 
72
-		'TIMESTAMPDIFF' => array('_sqlite_timestampdiff'		/*,3*/),
72
+        'TIMESTAMPDIFF' => array('_sqlite_timestampdiff'		/*,3*/),
73 73
 
74
-		'UNIX_TIMESTAMP'=> array( '_sqlite_func_unix_timestamp'	,1),
74
+        'UNIX_TIMESTAMP'=> array( '_sqlite_func_unix_timestamp'	,1),
75 75
 #		'UPPER'			=> array( 'strtoupper'					,1), // present v2.4		
76 76
 
77
-		'VIDE'			=> array( '_sqlite_func_vide'			,0), // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
77
+        'VIDE'			=> array( '_sqlite_func_vide'			,0), // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide()
78 78
 			
79
-		'YEAR'			=> array( '_sqlite_func_year'			,1)
80
-	);
79
+        'YEAR'			=> array( '_sqlite_func_year'			,1)
80
+    );
81 81
 	
82 82
 
83
-	foreach ($fonctions as $f=>$r){
84
-		_sqlite_add_function($sqlite, $f, $r);
85
-	}
83
+    foreach ($fonctions as $f=>$r){
84
+        _sqlite_add_function($sqlite, $f, $r);
85
+    }
86 86
 
87
-	#spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
87
+    #spip_log('functions sqlite chargees ','sqlite.'._LOG_DEBUG);
88 88
 }
89 89
 
90 90
 // permet au besoin de charger des fonctions ailleurs par _sqlite_init_functions();
91 91
 // http://doc.spip.org/@_sqlite_add_function
92 92
 function _sqlite_add_function(&$sqlite, &$f, &$r){
93
-	if (_sqlite_is_version(3, $sqlite)){
94
-		isset($r[1])
95
-			?$sqlite->sqliteCreateFunction($f, $r[0], $r[1])
96
-			:$sqlite->sqliteCreateFunction($f, $r[0]);
97
-	} else {
98
-		isset($r[1])
99
-			?sqlite_create_function($sqlite, $f, $r[0], $r[1])	
100
-			:sqlite_create_function($sqlite, $f, $r[0]);
101
-	}
93
+    if (_sqlite_is_version(3, $sqlite)){
94
+        isset($r[1])
95
+            ?$sqlite->sqliteCreateFunction($f, $r[0], $r[1])
96
+            :$sqlite->sqliteCreateFunction($f, $r[0]);
97
+    } else {
98
+        isset($r[1])
99
+            ?sqlite_create_function($sqlite, $f, $r[0], $r[1])	
100
+            :sqlite_create_function($sqlite, $f, $r[0]);
101
+    }
102 102
 }
103 103
 
104 104
 //
@@ -107,34 +107,34 @@  discard block
 block discarded – undo
107 107
 //
108 108
 
109 109
 function _sqlite_func_ceil($a) {
110
-	return ceil($a);
110
+    return ceil($a);
111 111
 }
112 112
 
113 113
 // http://doc.spip.org/@_sqlite_func_concat
114 114
 function _sqlite_func_concat () {
115
-	$args = func_get_args();
116
-	return join('',$args);
115
+    $args = func_get_args();
116
+    return join('',$args);
117 117
 }
118 118
 
119 119
 
120 120
 // http://doc.spip.org/@_sqlite_func_dayofmonth
121 121
 function _sqlite_func_dayofmonth ($d) {
122
-	return _sqlite_func_date("d",$d);
122
+    return _sqlite_func_date("d",$d);
123 123
 }
124 124
 
125 125
 
126 126
 // http://doc.spip.org/@_sqlite_func_find_in_set
127 127
 function _sqlite_func_find_in_set($num, $set) {
128
-  $rank=0;
129
-  foreach (explode(",",$set) as $v) {
130
-   if ($v == $num) return (++$rank);
131
-   $rank++;
132
-  }
133
-  return 0;
128
+    $rank=0;
129
+    foreach (explode(",",$set) as $v) {
130
+    if ($v == $num) return (++$rank);
131
+    $rank++;
132
+    }
133
+    return 0;
134 134
 }
135 135
 
136 136
 function _sqlite_func_floor($a) {
137
-	return floor($a);
137
+    return floor($a);
138 138
 }
139 139
 
140 140
 // http://doc.spip.org/@_sqlite_func_if
@@ -150,10 +150,10 @@  discard block
 block discarded – undo
150 150
  */ 
151 151
 // http://doc.spip.org/@_sqlite_func_insert
152 152
 function _sqlite_func_insert ($s, $index, $longueur, $chaine) {
153
-	return
154
-			substr($s,0, $index)
155
-		. $chaine
156
-		. substr(substr($s, $index), $longueur);
153
+    return
154
+            substr($s,0, $index)
155
+        . $chaine
156
+        . substr(substr($s, $index), $longueur);
157 157
 }
158 158
 
159 159
 
@@ -165,10 +165,10 @@  discard block
 block discarded – undo
165 165
 
166 166
 // http://doc.spip.org/@_sqlite_func_least
167 167
 function _sqlite_func_least () {
168
-	$arg_list = func_get_args();
168
+    $arg_list = func_get_args();
169 169
     $least = min($arg_list);
170
-	#spip_log("Passage avec LEAST : $least",'sqlite.'._LOG_DEBUG);
171
-	return $least;
170
+    #spip_log("Passage avec LEAST : $least",'sqlite.'._LOG_DEBUG);
171
+    return $least;
172 172
 }
173 173
 
174 174
 
@@ -180,26 +180,26 @@  discard block
 block discarded – undo
180 180
 
181 181
 // http://doc.spip.org/@_sqlite_func_now
182 182
 function _sqlite_func_now(){
183
-	static $now = null;
184
-	if (is_null($now))
185
-		$now = date("Y-m-d H:i:s");
186
-	#spip_log("Passage avec NOW : $now",'sqlite.'._LOG_DEBUG);
187
-	return $now;
183
+    static $now = null;
184
+    if (is_null($now))
185
+        $now = date("Y-m-d H:i:s");
186
+    #spip_log("Passage avec NOW : $now",'sqlite.'._LOG_DEBUG);
187
+    return $now;
188 188
 }
189 189
 
190 190
 
191 191
 // http://doc.spip.org/@_sqlite_func_month
192 192
 function _sqlite_func_month ($d) {
193
-	return _sqlite_func_date("m",$d);
193
+    return _sqlite_func_date("m",$d);
194 194
 }
195 195
 
196 196
 
197 197
 
198 198
 // http://doc.spip.org/@_sqlite_func_preg_replace
199 199
 function _sqlite_func_preg_replace($quoi, $cherche, $remplace) {
200
-	$return = preg_replace('%'.$cherche.'%', $remplace, $quoi);
201
-	#spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
202
-	return $return;
200
+    $return = preg_replace('%'.$cherche.'%', $remplace, $quoi);
201
+    #spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
202
+    return $return;
203 203
 }
204 204
 
205 205
 /**
@@ -210,51 +210,51 @@  discard block
 block discarded – undo
210 210
  * @return string, l'extrait trouve.
211 211
 **/
212 212
 function _sqlite_func_extraire_multi($quoi, $lang) {
213
-	if (!defined('_EXTRAIRE_MULTI'))
214
-		include_spip('inc/filtres');
215
-	if (!function_exists('approcher_langue'))
216
-		include_spip('inc/lang');
217
-	if (preg_match_all(_EXTRAIRE_MULTI, $quoi, $regs, PREG_SET_ORDER)) {
218
-		foreach ($regs as $reg) {
219
-			// chercher la version de la langue courante
220
-			$trads = extraire_trads($reg[1]);
221
-			if ($l = approcher_langue($trads, $lang)) {
222
-				$trad = $trads[$l];
223
-			} else {
224
-				$trad = reset($trads);
225
-			}
226
-			$quoi = str_replace($reg[0], $trad, $quoi);
227
-		}
228
-	}
229
-	return $quoi;
213
+    if (!defined('_EXTRAIRE_MULTI'))
214
+        include_spip('inc/filtres');
215
+    if (!function_exists('approcher_langue'))
216
+        include_spip('inc/lang');
217
+    if (preg_match_all(_EXTRAIRE_MULTI, $quoi, $regs, PREG_SET_ORDER)) {
218
+        foreach ($regs as $reg) {
219
+            // chercher la version de la langue courante
220
+            $trads = extraire_trads($reg[1]);
221
+            if ($l = approcher_langue($trads, $lang)) {
222
+                $trad = $trads[$l];
223
+            } else {
224
+                $trad = reset($trads);
225
+            }
226
+            $quoi = str_replace($reg[0], $trad, $quoi);
227
+        }
228
+    }
229
+    return $quoi;
230 230
 }
231 231
 
232 232
 
233 233
 // http://doc.spip.org/@_sqlite_func_rand
234 234
 function _sqlite_func_rand() {
235
-	return rand();
235
+    return rand();
236 236
 }
237 237
 
238 238
 
239 239
 // http://doc.spip.org/@_sqlite_func_right
240 240
 function _sqlite_func_right ($s, $length) {
241
-	return substr($s,0 - $length);
241
+    return substr($s,0 - $length);
242 242
 }
243 243
 
244 244
 
245 245
 // http://doc.spip.org/@_sqlite_func_regexp_match
246 246
 function _sqlite_func_regexp_match($cherche, $quoi) {
247
-	// optimiser un cas tres courant avec les requetes en base
248
-	if (!$quoi AND !strlen($quoi)) return false;
249
-	$u = $GLOBALS['meta']['pcre_u'];
250
-	$return = preg_match('%'.$cherche.'%imsS'.$u, $quoi);
251
-	#spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
252
-	return $return;
247
+    // optimiser un cas tres courant avec les requetes en base
248
+    if (!$quoi AND !strlen($quoi)) return false;
249
+    $u = $GLOBALS['meta']['pcre_u'];
250
+    $return = preg_match('%'.$cherche.'%imsS'.$u, $quoi);
251
+    #spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'sqlite.'._LOG_DEBUG);
252
+    return $return;
253 253
 }
254 254
 
255 255
 // http://doc.spip.org/@_sqlite_func_strftime
256 256
 function _sqlite_func_strftime($date, $conv){
257
-	return strftime($conv, is_int($date)?$date:strtotime($date));
257
+    return strftime($conv, is_int($date)?$date:strtotime($date));
258 258
 }
259 259
 
260 260
 /**
@@ -265,19 +265,19 @@  discard block
 block discarded – undo
265 265
  * @return int
266 266
  */
267 267
 function _sqlite_func_to_days ($d) {
268
-	static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
269
-	$result = $offset+(int)ceil(_sqlite_func_unix_timestamp($d)/(24*3600));
270
-	#spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
271
-	return $result;
268
+    static $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
269
+    $result = $offset+(int)ceil(_sqlite_func_unix_timestamp($d)/(24*3600));
270
+    #spip_log("Passage avec TO_DAYS : $d, $result",'sqlite.'._LOG_DEBUG);
271
+    return $result;
272 272
 }
273 273
 
274 274
 function _sqlite_func_substring($string,$start,$len=null){
275
-	// SQL compte a partir de 1, php a partir de 0
276
-	$start = ($start>0)?$start-1:$start;
277
-	if (is_null($len))
278
-		return substr($string,$start);
279
-	else
280
-		return substr($string,$start,$len);
275
+    // SQL compte a partir de 1, php a partir de 0
276
+    $start = ($start>0)?$start-1:$start;
277
+    if (is_null($len))
278
+        return substr($string,$start);
279
+    else
280
+        return substr($string,$start,$len);
281 281
 }
282 282
 
283 283
 /**
@@ -289,84 +289,84 @@  discard block
 block discarded – undo
289 289
  * @return int
290 290
  */
291 291
 function _sqlite_timestampdiff($unit,$date1,$date2){
292
-	// PHP >= 5.3
293
-	if (function_exists("date_diff")){
294
-		$d1 = date_create($date1);
295
-		$d2 = date_create($date2);
296
-		$diff = date_diff($d1,$d2);
297
-		$inv = $diff->invert?-1:1;
298
-		switch($unit){
299
-			case "YEAR":
300
-				return $inv*$diff->y;
301
-			case "QUARTER":
302
-				return $inv*(4*$diff->y+intval(floor($diff->m/3)));
303
-			case "MONTH":
304
-				return $inv*(12*$diff->y+$diff->m);
305
-			case "WEEK":
306
-				return $inv*intval(floor($diff->days/7));
307
-			case "DAY":
308
-				#var_dump($inv*$diff->days);
309
-				return $inv*$diff->days;
310
-			case "HOUR":
311
-				return $inv*(24*$diff->days+$diff->h);
312
-			case "MINUTE":
313
-				return $inv*((24*$diff->days+$diff->h)*60+$diff->i);
314
-			case "SECOND":
315
-				return $inv*(((24*$diff->days+$diff->h)*60+$diff->i)*60+$diff->s);
316
-			case "MICROSECOND":
317
-				return $inv*(((24*$diff->days+$diff->h)*60+$diff->i)*60+$diff->s)*1000000;
318
-		}
319
-		return 0;
320
-	}
321
-	// PHP < 5.3
322
-	else {
323
-		$d1 = strtotime($date1);
324
-		$d2 = strtotime($date2);
325
-		$diff = $d2 - $d1;
326
-		$sign = ($diff<0?-1:1);
327
-		$diff = $sign * $diff;
328
-		switch($unit){
329
-			case "YEAR":
330
-				$diff = $d2-$d1;
331
-				return $sign*(date('Y',abs($diff))-date('Y',0));
332
-			case "QUARTER":
333
-				return $sign*(4*(date('Y',abs($diff))-date('Y',0))+intval(floor((date('m',$diff)-1)/3)));
334
-			case "MONTH":
335
-				return $sign*((date('Y',$diff)-date('Y',0))*12+date('m',$diff)-1);
336
-			case "WEEK":
337
-				return intval(floor(($d2-$d1)/3600/7));
338
-			case "DAY":
339
-				return intval(floor(($d2-$d1)/3600/24));
340
-			case "HOUR":
341
-				return intval(floor(($d2-$d1)/3600));
342
-			case "MINUTE":
343
-				return intval(floor(($d2-$d1)/60));
344
-			case "SECOND":
345
-				return $d2-$d1;
346
-			case "MICROSECOND":
347
-				return $d2-$d1*1000000;
348
-		}
349
-	}
292
+    // PHP >= 5.3
293
+    if (function_exists("date_diff")){
294
+        $d1 = date_create($date1);
295
+        $d2 = date_create($date2);
296
+        $diff = date_diff($d1,$d2);
297
+        $inv = $diff->invert?-1:1;
298
+        switch($unit){
299
+            case "YEAR":
300
+                return $inv*$diff->y;
301
+            case "QUARTER":
302
+                return $inv*(4*$diff->y+intval(floor($diff->m/3)));
303
+            case "MONTH":
304
+                return $inv*(12*$diff->y+$diff->m);
305
+            case "WEEK":
306
+                return $inv*intval(floor($diff->days/7));
307
+            case "DAY":
308
+                #var_dump($inv*$diff->days);
309
+                return $inv*$diff->days;
310
+            case "HOUR":
311
+                return $inv*(24*$diff->days+$diff->h);
312
+            case "MINUTE":
313
+                return $inv*((24*$diff->days+$diff->h)*60+$diff->i);
314
+            case "SECOND":
315
+                return $inv*(((24*$diff->days+$diff->h)*60+$diff->i)*60+$diff->s);
316
+            case "MICROSECOND":
317
+                return $inv*(((24*$diff->days+$diff->h)*60+$diff->i)*60+$diff->s)*1000000;
318
+        }
319
+        return 0;
320
+    }
321
+    // PHP < 5.3
322
+    else {
323
+        $d1 = strtotime($date1);
324
+        $d2 = strtotime($date2);
325
+        $diff = $d2 - $d1;
326
+        $sign = ($diff<0?-1:1);
327
+        $diff = $sign * $diff;
328
+        switch($unit){
329
+            case "YEAR":
330
+                $diff = $d2-$d1;
331
+                return $sign*(date('Y',abs($diff))-date('Y',0));
332
+            case "QUARTER":
333
+                return $sign*(4*(date('Y',abs($diff))-date('Y',0))+intval(floor((date('m',$diff)-1)/3)));
334
+            case "MONTH":
335
+                return $sign*((date('Y',$diff)-date('Y',0))*12+date('m',$diff)-1);
336
+            case "WEEK":
337
+                return intval(floor(($d2-$d1)/3600/7));
338
+            case "DAY":
339
+                return intval(floor(($d2-$d1)/3600/24));
340
+            case "HOUR":
341
+                return intval(floor(($d2-$d1)/3600));
342
+            case "MINUTE":
343
+                return intval(floor(($d2-$d1)/60));
344
+            case "SECOND":
345
+                return $d2-$d1;
346
+            case "MICROSECOND":
347
+                return $d2-$d1*1000000;
348
+        }
349
+    }
350 350
 }
351 351
 
352 352
 // http://doc.spip.org/@_sqlite_func_unix_timestamp
353 353
 function _sqlite_func_unix_timestamp($d) {
354
-	static $mem = array();
355
-	static $n = 0;
356
-	if (isset($mem[$d])) return $mem[$d];
357
-	if ($n++>100) {$mem = array();$n=0;}
358
-
359
-	//2005-12-02 20:53:53
360
-	#spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
361
-	if (!$d) return $mem[$d] = mktime();
362
-	// une pile plus grosse n'accelere pas le calcul
363
-	return $mem[$d] = strtotime($d);
354
+    static $mem = array();
355
+    static $n = 0;
356
+    if (isset($mem[$d])) return $mem[$d];
357
+    if ($n++>100) {$mem = array();$n=0;}
358
+
359
+    //2005-12-02 20:53:53
360
+    #spip_log("Passage avec UNIX_TIMESTAMP : $d",'sqlite.'._LOG_DEBUG);
361
+    if (!$d) return $mem[$d] = mktime();
362
+    // une pile plus grosse n'accelere pas le calcul
363
+    return $mem[$d] = strtotime($d);
364 364
 }
365 365
 
366 366
 
367 367
 // http://doc.spip.org/@_sqlite_func_year
368 368
 function _sqlite_func_year ($d) {
369
-	return _sqlite_func_date("Y",$d);
369
+    return _sqlite_func_date("Y",$d);
370 370
 }
371 371
 
372 372
 /**
@@ -379,19 +379,19 @@  discard block
 block discarded – undo
379 379
  * @return int
380 380
  */
381 381
 function _sqlite_func_date($quoi,$d) {
382
-	static $mem = array();
383
-	static $n = 0;
384
-	if (isset($mem[$d])) return $mem[$d][$quoi];
385
-	if ($n++>100) {$mem = array();$n=0;}
386
-
387
-	$dec = date("Y-m-d",_sqlite_func_unix_timestamp($d));
388
-	$mem[$d] = array("Y"=>substr($dec,0,4),"m"=>substr($dec,5,2),"d"=>substr($dec,8,2));
389
-	return $mem[$d][$quoi];
382
+    static $mem = array();
383
+    static $n = 0;
384
+    if (isset($mem[$d])) return $mem[$d][$quoi];
385
+    if ($n++>100) {$mem = array();$n=0;}
386
+
387
+    $dec = date("Y-m-d",_sqlite_func_unix_timestamp($d));
388
+    $mem[$d] = array("Y"=>substr($dec,0,4),"m"=>substr($dec,5,2),"d"=>substr($dec,8,2));
389
+    return $mem[$d][$quoi];
390 390
 }
391 391
 
392 392
 // http://doc.spip.org/@_sqlite_func_vide
393 393
 function _sqlite_func_vide(){
394
-	return;
394
+    return;
395 395
 }
396 396
 
397 397
 
Please login to merge, or discard this patch.
ecrire/req/sqlite_generique.php 1 patch
Indentation   +1699 added lines, -1699 removed lines patch added patch discarded remove patch
@@ -30,95 +30,95 @@  discard block
 block discarded – undo
30 30
  */
31 31
 // http://doc.spip.org/@req_sqlite_dist
32 32
 function req_sqlite_dist($addr, $port, $login, $pass, $db = '', $prefixe = '', $sqlite_version = ''){
33
-	static $last_connect = array();
34
-
35
-	// si provient de selectdb
36
-	// un code pour etre sur que l'on vient de select_db()
37
-	if (strpos($db, $code = '@selectdb@')!==false){
38
-		foreach (array('addr', 'port', 'login', 'pass', 'prefixe') as $a){
39
-			$$a = $last_connect[$a];
40
-		}
41
-		$db = str_replace($code, '', $db);
42
-	}
43
-
44
-	/*
33
+    static $last_connect = array();
34
+
35
+    // si provient de selectdb
36
+    // un code pour etre sur que l'on vient de select_db()
37
+    if (strpos($db, $code = '@selectdb@')!==false){
38
+        foreach (array('addr', 'port', 'login', 'pass', 'prefixe') as $a){
39
+            $$a = $last_connect[$a];
40
+        }
41
+        $db = str_replace($code, '', $db);
42
+    }
43
+
44
+    /*
45 45
 	 * En sqlite, seule l'adresse du fichier est importante.
46 46
 	 * Ce sera $db le nom,
47 47
 	 * le path est $addr
48 48
 	 * (_DIR_DB si $addr est vide)
49 49
 	 */
50
-	_sqlite_init();
51
-
52
-	// determiner le dossier de la base : $addr ou _DIR_DB
53
-	$f = _DIR_DB;
54
-	if ($addr AND strpos($addr, '/')!==false)
55
-		$f = rtrim($addr, '/').'/';
56
-
57
-	// un nom de base demande et impossible d'obtenir la base, on s'en va :
58
-	// il faut que la base existe ou que le repertoire parent soit writable
59
-	if ($db AND !is_file($f .= $db.'.sqlite') AND !is_writable(dirname($f))){
60
-		spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.'._LOG_HS);
61
-		return false;
62
-	}
63
-
64
-	// charger les modules sqlite au besoin
65
-	if (!_sqlite_charger_version($sqlite_version)){
66
-		spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.'._LOG_HS);
67
-		return false;
68
-	}
69
-
70
-	// chargement des constantes
71
-	// il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
72
-	$define = "spip_sqlite".$sqlite_version."_constantes";
73
-	$define();
74
-
75
-	$ok = false;
76
-	if (!$db){
77
-		// si pas de db ->
78
-		// base temporaire tant qu'on ne connait pas son vrai nom
79
-		// pour tester la connexion
80
-		$db = "_sqlite".$sqlite_version."_install";
81
-		$tmp = _DIR_DB.$db.".sqlite";
82
-		if ($sqlite_version==3){
83
-			$ok = $link = new PDO("sqlite:$tmp");
84
-		} else {
85
-			$ok = $link = sqlite_open($tmp, _SQLITE_CHMOD, $err);
86
-		}
87
-	} else {
88
-		// Ouvrir (eventuellement creer la base)
89
-		// si pas de version fourni, on essaie la 3, sinon la 2
90
-		if ($sqlite_version==3){
91
-			$ok = $link = new PDO("sqlite:$f");
92
-		} else {
93
-			$ok = $link = sqlite_open($f, _SQLITE_CHMOD, $err);
94
-		}
95
-	}
96
-
97
-	if (!$ok){
98
-		$e = sqlite_last_error($db);
99
-		spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.'._LOG_HS);
100
-		return false;
101
-	}
102
-
103
-	if ($link){
104
-		$last_connect = array(
105
-			'addr' => $addr,
106
-			'port' => $port,
107
-			'login' => $login,
108
-			'pass' => $pass,
109
-			'db' => $db,
110
-			'prefixe' => $prefixe,
111
-		);
112
-		// etre sur qu'on definit bien les fonctions a chaque nouvelle connexion
113
-		include_spip('req/sqlite_fonctions');
114
-		_sqlite_init_functions($link);
115
-	}
116
-
117
-	return array(
118
-		'db' => $db,
119
-		'prefixe' => $prefixe ? $prefixe : $db,
120
-		'link' => $link,
121
-	);
50
+    _sqlite_init();
51
+
52
+    // determiner le dossier de la base : $addr ou _DIR_DB
53
+    $f = _DIR_DB;
54
+    if ($addr AND strpos($addr, '/')!==false)
55
+        $f = rtrim($addr, '/').'/';
56
+
57
+    // un nom de base demande et impossible d'obtenir la base, on s'en va :
58
+    // il faut que la base existe ou que le repertoire parent soit writable
59
+    if ($db AND !is_file($f .= $db.'.sqlite') AND !is_writable(dirname($f))){
60
+        spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.'._LOG_HS);
61
+        return false;
62
+    }
63
+
64
+    // charger les modules sqlite au besoin
65
+    if (!_sqlite_charger_version($sqlite_version)){
66
+        spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.'._LOG_HS);
67
+        return false;
68
+    }
69
+
70
+    // chargement des constantes
71
+    // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite
72
+    $define = "spip_sqlite".$sqlite_version."_constantes";
73
+    $define();
74
+
75
+    $ok = false;
76
+    if (!$db){
77
+        // si pas de db ->
78
+        // base temporaire tant qu'on ne connait pas son vrai nom
79
+        // pour tester la connexion
80
+        $db = "_sqlite".$sqlite_version."_install";
81
+        $tmp = _DIR_DB.$db.".sqlite";
82
+        if ($sqlite_version==3){
83
+            $ok = $link = new PDO("sqlite:$tmp");
84
+        } else {
85
+            $ok = $link = sqlite_open($tmp, _SQLITE_CHMOD, $err);
86
+        }
87
+    } else {
88
+        // Ouvrir (eventuellement creer la base)
89
+        // si pas de version fourni, on essaie la 3, sinon la 2
90
+        if ($sqlite_version==3){
91
+            $ok = $link = new PDO("sqlite:$f");
92
+        } else {
93
+            $ok = $link = sqlite_open($f, _SQLITE_CHMOD, $err);
94
+        }
95
+    }
96
+
97
+    if (!$ok){
98
+        $e = sqlite_last_error($db);
99
+        spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.'._LOG_HS);
100
+        return false;
101
+    }
102
+
103
+    if ($link){
104
+        $last_connect = array(
105
+            'addr' => $addr,
106
+            'port' => $port,
107
+            'login' => $login,
108
+            'pass' => $pass,
109
+            'db' => $db,
110
+            'prefixe' => $prefixe,
111
+        );
112
+        // etre sur qu'on definit bien les fonctions a chaque nouvelle connexion
113
+        include_spip('req/sqlite_fonctions');
114
+        _sqlite_init_functions($link);
115
+    }
116
+
117
+    return array(
118
+        'db' => $db,
119
+        'prefixe' => $prefixe ? $prefixe : $db,
120
+        'link' => $link,
121
+    );
122 122
 }
123 123
 
124 124
 
@@ -137,11 +137,11 @@  discard block
 block discarded – undo
137 137
  * 		Resultat de la requete
138 138
  */
139 139
 function spip_sqlite_query($query, $serveur = '', $requeter = true){
140
-	#spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG);
141
-	#_sqlite_init(); // fait la premiere fois dans spip_sqlite
142
-	$query = spip_sqlite::traduire_requete($query, $serveur);
143
-	if (!$requeter) return $query;
144
-	return spip_sqlite::executer_requete($query, $serveur);
140
+    #spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG);
141
+    #_sqlite_init(); // fait la premiere fois dans spip_sqlite
142
+    $query = spip_sqlite::traduire_requete($query, $serveur);
143
+    if (!$requeter) return $query;
144
+    return spip_sqlite::executer_requete($query, $serveur);
145 145
 }
146 146
 
147 147
 
@@ -150,11 +150,11 @@  discard block
 block discarded – undo
150 150
 // http://doc.spip.org/@spip_sqlite_alter
151 151
 function spip_sqlite_alter($query, $serveur = '', $requeter = true){
152 152
 
153
-	$query = spip_sqlite_query("ALTER $query", $serveur, false);
154
-	// traduire la requete pour recuperer les bons noms de table
155
-	$query = spip_sqlite::traduire_requete($query, $serveur);
153
+    $query = spip_sqlite_query("ALTER $query", $serveur, false);
154
+    // traduire la requete pour recuperer les bons noms de table
155
+    $query = spip_sqlite::traduire_requete($query, $serveur);
156 156
 
157
-	/*
157
+    /*
158 158
 		 * la il faut faire les transformations
159 159
 		 * si ALTER TABLE x (DROP|CHANGE) y
160 160
 		 *
@@ -163,230 +163,230 @@  discard block
 block discarded – undo
163 163
 		 * 3) faire chaque requete independemment
164 164
 		 */
165 165
 
166
-	// 1
167
-	if (preg_match("/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is", $query, $regs)){
168
-		$debut = $regs[1];
169
-		$table = $regs[3];
170
-		$suite = $regs[4];
171
-	} else {
172
-		spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.'._LOG_ERREUR);
173
-		return false;
174
-	}
175
-
176
-	// 2
177
-	// il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
178
-	// tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux
179
-	// ou revoir l'api de sql_alter en creant un 
180
-	// sql_alter_table($table,array($actions));
181
-	$todo = explode(',', $suite);
182
-
183
-	// on remet les morceaux dechires ensembles... que c'est laid !
184
-	$todo2 = array();
185
-	$i = 0;
186
-	$ouverte = false;
187
-	while ($do = array_shift($todo)){
188
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i].",".$do : $do;
189
-		$o = (false!==strpos($do, "("));
190
-		$f = (false!==strpos($do, ")"));
191
-		if ($o AND !$f) $ouverte = true;
192
-		elseif ($f) $ouverte = false;
193
-		if (!$ouverte) $i++;
194
-	}
195
-
196
-	// 3	
197
-	$resultats = array();
198
-	foreach ($todo2 as $do){
199
-		$do = trim($do);
200
-		if (!preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP'
201
-		                .'|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME'
202
-		                .'|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE'
203
-		                .'|ADD COLUMN|ADD'
204
-		                .')\s*([^\s]*)\s*(.*)?/i', $do, $matches)){
205
-			spip_log("SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)", 'sqlite.'._LOG_ERREUR);
206
-			return false;
207
-		}
208
-
209
-		$cle = strtoupper($matches[1]);
210
-		$colonne_origine = $matches[2];
211
-		$colonne_destination = '';
212
-
213
-		$def = $matches[3];
214
-
215
-		// eluder une eventuelle clause before|after|first inutilisable
216
-		$defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def));
217
-		$defo = $defr; // garder la def d'origine pour certains cas
218
-		// remplacer les definitions venant de mysql
219
-		$defr = _sqlite_remplacements_definitions_table($defr);
220
-
221
-		// reinjecter dans le do
222
-		$do = str_replace($def, $defr, $do);
223
-		$def = $defr;
224
-
225
-		switch ($cle) {
226
-			// suppression d'un index
227
-			case 'DROP KEY':
228
-			case 'DROP INDEX':
229
-				$nom_index = $colonne_origine;
230
-				spip_sqlite_drop_index($nom_index, $table, $serveur);
231
-				break;
232
-
233
-			// suppression d'une pk
234
-			case 'DROP PRIMARY KEY':
235
-				if (!_sqlite_modifier_table(
236
-					$table,
237
-					$colonne_origine,
238
-					array('key' => array('PRIMARY KEY' => '')),
239
-					$serveur)){
240
-					return false;
241
-				}
242
-				break;
243
-			// suppression d'une colonne
244
-			case 'DROP COLUMN':
245
-			case 'DROP':
246
-				if (!_sqlite_modifier_table(
247
-					$table,
248
-					array($colonne_origine => ""),
249
-					'',
250
-					$serveur)){
251
-					return false;
252
-				}
253
-				break;
254
-
255
-			case 'CHANGE COLUMN':
256
-			case 'CHANGE':
257
-				// recuperer le nom de la future colonne
258
-			  // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
259
-			  // en tenant compte de la cle primaire (ce qui est mieux)
260
-				$def = trim($defo);
261
-				$colonne_destination = substr($def, 0, strpos($def, ' '));
262
-				$def = substr($def, strlen($colonne_destination)+1);
263
-
264
-				if (!_sqlite_modifier_table(
265
-					$table,
266
-					array($colonne_origine => $colonne_destination),
267
-					array('field' => array($colonne_destination => $def)),
268
-					$serveur)){
269
-					return false;
270
-				}
271
-				break;
272
-
273
-			case 'MODIFY':
274
-			  // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
275
-			  // en tenant compte de la cle primaire (ce qui est mieux)
276
-				if (!_sqlite_modifier_table(
277
-					$table,
278
-					$colonne_origine,
279
-					array('field' => array($colonne_origine => $defo)),
280
-					$serveur)){
281
-					return false;
282
-				}
283
-				break;
284
-
285
-			// pas geres en sqlite2
286
-			case 'RENAME':
287
-				$do = "RENAME TO".substr($do, 6);
288
-			case 'RENAME TO':
289
-				if (_sqlite_is_version(3, '', $serveur)){
290
-					if (!spip_sqlite::executer_requete("$debut $do", $serveur)){
291
-						spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.'._LOG_ERREUR);
292
-						return false;
293
-					}
294
-					// artillerie lourde pour sqlite2 !
295
-				} else {
296
-					$table_dest = trim(substr($do, 9));
297
-					if (!_sqlite_modifier_table(array($table => $table_dest), '', '', $serveur)){
298
-						spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.'._LOG_ERREUR);
299
-						return false;
300
-					}
301
-				}
302
-				break;
303
-
304
-			// ajout d'une pk
305
-			case 'ADD PRIMARY KEY':
306
-				$pk = trim(substr($do, 16));
307
-				$pk = ($pk[0]=='(') ? substr($pk, 1, -1) : $pk;
308
-				if (!_sqlite_modifier_table(
309
-					$table,
310
-					$colonne_origine,
311
-					array('key' => array('PRIMARY KEY' => $pk)),
312
-					$serveur)){
313
-					return false;
314
-				}
315
-				break;
316
-			// ajout d'un index
317
-			case 'ADD UNIQUE KEY':
318
-			case 'ADD UNIQUE':
319
-				$unique=true;
320
-			case 'ADD INDEX':
321
-			case 'ADD KEY':
322
-				// peut etre "(colonne)" ou "nom_index (colonnes)"
323
-				// bug potentiel si qqn met "(colonne, colonne)"
324
-				//
325
-				// nom_index (colonnes)
326
-				if ($def){
327
-					$colonnes = substr($def, 1, -1);
328
-					$nom_index = $colonne_origine;
329
-				}
330
-				else {
331
-					// (colonne)
332
-					if ($colonne_origine[0]=="("){
333
-						$colonnes = substr($colonne_origine, 1, -1);
334
-						if (false!==strpos(",", $colonnes)){
335
-							spip_log(_LOG_GRAVITE_ERREUR, "SQLite : Erreur, impossible de creer un index sur plusieurs colonnes"
336
-							                              ." sans qu'il ait de nom ($table, ($colonnes))", 'sqlite');
337
-							break;
338
-						} else {
339
-							$nom_index = $colonnes;
340
-						}
341
-					}
342
-						// nom_index
343
-					else {
344
-						$nom_index = $colonnes = $colonne_origine;
345
-					}
346
-				}
347
-				spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur);
348
-				break;
349
-
350
-			// pas geres en sqlite2
351
-			case 'ADD COLUMN':
352
-				$do = "ADD".substr($do, 10);
353
-			case 'ADD':
354
-			default:
355
-				if (_sqlite_is_version(3, '', $serveur) AND !preg_match(',primary\s+key,i',$do)){
356
-					if (!spip_sqlite::executer_requete("$debut $do", $serveur)){
357
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
358
-						return false;
359
-					}
360
-					break;
361
-
362
-				}
363
-				// artillerie lourde pour sqlite2 !
364
-				// ou si la colonne est aussi primary key
365
-				// cas du add id_truc int primary key
366
-				// ajout d'une colonne qui passe en primary key directe
367
-				else {
368
-					$def = trim(substr($do, 3));
369
-					$colonne_ajoutee = substr($def, 0, strpos($def, ' '));
370
-					$def = substr($def, strlen($colonne_ajoutee)+1);
371
-					$opts = array();
372
-					if (preg_match(',primary\s+key,i',$def)){
373
-						$opts['key'] = array('PRIMARY KEY' => $colonne_ajoutee);
374
-						$def = preg_replace(',primary\s+key,i','',$def);
375
-					}
376
-					$opts['field'] = array($colonne_ajoutee => $def);
377
-					if (!_sqlite_modifier_table($table, array($colonne_ajoutee), $opts, $serveur)){
378
-						spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
379
-						return false;
380
-					}
381
-				}
382
-				break;
383
-		}
384
-		// tout est bon, ouf !
385
-		spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.'._LOG_INFO);
386
-	}
387
-
388
-	spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.'._LOG_INFO);
389
-	return true;
166
+    // 1
167
+    if (preg_match("/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is", $query, $regs)){
168
+        $debut = $regs[1];
169
+        $table = $regs[3];
170
+        $suite = $regs[4];
171
+    } else {
172
+        spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.'._LOG_ERREUR);
173
+        return false;
174
+    }
175
+
176
+    // 2
177
+    // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
178
+    // tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux
179
+    // ou revoir l'api de sql_alter en creant un 
180
+    // sql_alter_table($table,array($actions));
181
+    $todo = explode(',', $suite);
182
+
183
+    // on remet les morceaux dechires ensembles... que c'est laid !
184
+    $todo2 = array();
185
+    $i = 0;
186
+    $ouverte = false;
187
+    while ($do = array_shift($todo)){
188
+        $todo2[$i] = isset($todo2[$i]) ? $todo2[$i].",".$do : $do;
189
+        $o = (false!==strpos($do, "("));
190
+        $f = (false!==strpos($do, ")"));
191
+        if ($o AND !$f) $ouverte = true;
192
+        elseif ($f) $ouverte = false;
193
+        if (!$ouverte) $i++;
194
+    }
195
+
196
+    // 3	
197
+    $resultats = array();
198
+    foreach ($todo2 as $do){
199
+        $do = trim($do);
200
+        if (!preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP'
201
+                        .'|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME'
202
+                        .'|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE'
203
+                        .'|ADD COLUMN|ADD'
204
+                        .')\s*([^\s]*)\s*(.*)?/i', $do, $matches)){
205
+            spip_log("SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)", 'sqlite.'._LOG_ERREUR);
206
+            return false;
207
+        }
208
+
209
+        $cle = strtoupper($matches[1]);
210
+        $colonne_origine = $matches[2];
211
+        $colonne_destination = '';
212
+
213
+        $def = $matches[3];
214
+
215
+        // eluder une eventuelle clause before|after|first inutilisable
216
+        $defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def));
217
+        $defo = $defr; // garder la def d'origine pour certains cas
218
+        // remplacer les definitions venant de mysql
219
+        $defr = _sqlite_remplacements_definitions_table($defr);
220
+
221
+        // reinjecter dans le do
222
+        $do = str_replace($def, $defr, $do);
223
+        $def = $defr;
224
+
225
+        switch ($cle) {
226
+            // suppression d'un index
227
+            case 'DROP KEY':
228
+            case 'DROP INDEX':
229
+                $nom_index = $colonne_origine;
230
+                spip_sqlite_drop_index($nom_index, $table, $serveur);
231
+                break;
232
+
233
+            // suppression d'une pk
234
+            case 'DROP PRIMARY KEY':
235
+                if (!_sqlite_modifier_table(
236
+                    $table,
237
+                    $colonne_origine,
238
+                    array('key' => array('PRIMARY KEY' => '')),
239
+                    $serveur)){
240
+                    return false;
241
+                }
242
+                break;
243
+            // suppression d'une colonne
244
+            case 'DROP COLUMN':
245
+            case 'DROP':
246
+                if (!_sqlite_modifier_table(
247
+                    $table,
248
+                    array($colonne_origine => ""),
249
+                    '',
250
+                    $serveur)){
251
+                    return false;
252
+                }
253
+                break;
254
+
255
+            case 'CHANGE COLUMN':
256
+            case 'CHANGE':
257
+                // recuperer le nom de la future colonne
258
+              // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
259
+              // en tenant compte de la cle primaire (ce qui est mieux)
260
+                $def = trim($defo);
261
+                $colonne_destination = substr($def, 0, strpos($def, ' '));
262
+                $def = substr($def, strlen($colonne_destination)+1);
263
+
264
+                if (!_sqlite_modifier_table(
265
+                    $table,
266
+                    array($colonne_origine => $colonne_destination),
267
+                    array('field' => array($colonne_destination => $def)),
268
+                    $serveur)){
269
+                    return false;
270
+                }
271
+                break;
272
+
273
+            case 'MODIFY':
274
+              // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation
275
+              // en tenant compte de la cle primaire (ce qui est mieux)
276
+                if (!_sqlite_modifier_table(
277
+                    $table,
278
+                    $colonne_origine,
279
+                    array('field' => array($colonne_origine => $defo)),
280
+                    $serveur)){
281
+                    return false;
282
+                }
283
+                break;
284
+
285
+            // pas geres en sqlite2
286
+            case 'RENAME':
287
+                $do = "RENAME TO".substr($do, 6);
288
+            case 'RENAME TO':
289
+                if (_sqlite_is_version(3, '', $serveur)){
290
+                    if (!spip_sqlite::executer_requete("$debut $do", $serveur)){
291
+                        spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.'._LOG_ERREUR);
292
+                        return false;
293
+                    }
294
+                    // artillerie lourde pour sqlite2 !
295
+                } else {
296
+                    $table_dest = trim(substr($do, 9));
297
+                    if (!_sqlite_modifier_table(array($table => $table_dest), '', '', $serveur)){
298
+                        spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.'._LOG_ERREUR);
299
+                        return false;
300
+                    }
301
+                }
302
+                break;
303
+
304
+            // ajout d'une pk
305
+            case 'ADD PRIMARY KEY':
306
+                $pk = trim(substr($do, 16));
307
+                $pk = ($pk[0]=='(') ? substr($pk, 1, -1) : $pk;
308
+                if (!_sqlite_modifier_table(
309
+                    $table,
310
+                    $colonne_origine,
311
+                    array('key' => array('PRIMARY KEY' => $pk)),
312
+                    $serveur)){
313
+                    return false;
314
+                }
315
+                break;
316
+            // ajout d'un index
317
+            case 'ADD UNIQUE KEY':
318
+            case 'ADD UNIQUE':
319
+                $unique=true;
320
+            case 'ADD INDEX':
321
+            case 'ADD KEY':
322
+                // peut etre "(colonne)" ou "nom_index (colonnes)"
323
+                // bug potentiel si qqn met "(colonne, colonne)"
324
+                //
325
+                // nom_index (colonnes)
326
+                if ($def){
327
+                    $colonnes = substr($def, 1, -1);
328
+                    $nom_index = $colonne_origine;
329
+                }
330
+                else {
331
+                    // (colonne)
332
+                    if ($colonne_origine[0]=="("){
333
+                        $colonnes = substr($colonne_origine, 1, -1);
334
+                        if (false!==strpos(",", $colonnes)){
335
+                            spip_log(_LOG_GRAVITE_ERREUR, "SQLite : Erreur, impossible de creer un index sur plusieurs colonnes"
336
+                                                            ." sans qu'il ait de nom ($table, ($colonnes))", 'sqlite');
337
+                            break;
338
+                        } else {
339
+                            $nom_index = $colonnes;
340
+                        }
341
+                    }
342
+                        // nom_index
343
+                    else {
344
+                        $nom_index = $colonnes = $colonne_origine;
345
+                    }
346
+                }
347
+                spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur);
348
+                break;
349
+
350
+            // pas geres en sqlite2
351
+            case 'ADD COLUMN':
352
+                $do = "ADD".substr($do, 10);
353
+            case 'ADD':
354
+            default:
355
+                if (_sqlite_is_version(3, '', $serveur) AND !preg_match(',primary\s+key,i',$do)){
356
+                    if (!spip_sqlite::executer_requete("$debut $do", $serveur)){
357
+                        spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
358
+                        return false;
359
+                    }
360
+                    break;
361
+
362
+                }
363
+                // artillerie lourde pour sqlite2 !
364
+                // ou si la colonne est aussi primary key
365
+                // cas du add id_truc int primary key
366
+                // ajout d'une colonne qui passe en primary key directe
367
+                else {
368
+                    $def = trim(substr($do, 3));
369
+                    $colonne_ajoutee = substr($def, 0, strpos($def, ' '));
370
+                    $def = substr($def, strlen($colonne_ajoutee)+1);
371
+                    $opts = array();
372
+                    if (preg_match(',primary\s+key,i',$def)){
373
+                        $opts['key'] = array('PRIMARY KEY' => $colonne_ajoutee);
374
+                        $def = preg_replace(',primary\s+key,i','',$def);
375
+                    }
376
+                    $opts['field'] = array($colonne_ajoutee => $def);
377
+                    if (!_sqlite_modifier_table($table, array($colonne_ajoutee), $opts, $serveur)){
378
+                        spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.'._LOG_ERREUR);
379
+                        return false;
380
+                    }
381
+                }
382
+                break;
383
+        }
384
+        // tout est bon, ouf !
385
+        spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.'._LOG_INFO);
386
+    }
387
+
388
+    spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.'._LOG_INFO);
389
+    return true;
390 390
 }
391 391
 
392 392
 
@@ -404,25 +404,25 @@  discard block
 block discarded – undo
404 404
  * @return bool|SQLiteResult|string
405 405
  */
406 406
 function spip_sqlite_create($nom, $champs, $cles, $autoinc = false, $temporary = false, $serveur = '', $requeter = true){
407
-	$query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter);
408
-	if (!$query) return false;
409
-	$res = spip_sqlite_query($query, $serveur, $requeter);
410
-
411
-	// SQLite ne cree pas les KEY sur les requetes CREATE TABLE
412
-	// il faut donc les faire creer ensuite
413
-	if (!$requeter) return $res;
414
-
415
-	$ok = $res ? true : false;
416
-	if ($ok){
417
-		foreach ($cles as $k => $v){
418
-			if (preg_match(',^(KEY|UNIQUE)\s,i',$k,$m)){
419
-				$index = trim(substr($k,strlen($m[1])));
420
-				$unique = (strlen($m[1])>3);
421
-				$ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur);
422
-			}
423
-		}
424
-	}
425
-	return $ok ? true : false;
407
+    $query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter);
408
+    if (!$query) return false;
409
+    $res = spip_sqlite_query($query, $serveur, $requeter);
410
+
411
+    // SQLite ne cree pas les KEY sur les requetes CREATE TABLE
412
+    // il faut donc les faire creer ensuite
413
+    if (!$requeter) return $res;
414
+
415
+    $ok = $res ? true : false;
416
+    if ($ok){
417
+        foreach ($cles as $k => $v){
418
+            if (preg_match(',^(KEY|UNIQUE)\s,i',$k,$m)){
419
+                $index = trim(substr($k,strlen($m[1])));
420
+                $unique = (strlen($m[1])>3);
421
+                $ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur);
422
+            }
423
+        }
424
+    }
425
+    return $ok ? true : false;
426 426
 }
427 427
 
428 428
 /**
@@ -435,20 +435,20 @@  discard block
 block discarded – undo
435 435
  * @return bool true si la base est creee.
436 436
  **/
437 437
 function spip_sqlite_create_base($nom, $serveur = '', $option = true){
438
-	$f = $nom.'.sqlite';
439
-	if (strpos($nom, "/")===false)
440
-		$f = _DIR_DB.$f;
441
-	if (_sqlite_is_version(2, '', $serveur)){
442
-		$ok = sqlite_open($f, _SQLITE_CHMOD, $err);
443
-	} else {
444
-		$ok = new PDO("sqlite:$f");
445
-	}
446
-	if ($ok){
447
-		unset($ok);
448
-		return true;
449
-	}
450
-	unset($ok);
451
-	return false;
438
+    $f = $nom.'.sqlite';
439
+    if (strpos($nom, "/")===false)
440
+        $f = _DIR_DB.$f;
441
+    if (_sqlite_is_version(2, '', $serveur)){
442
+        $ok = sqlite_open($f, _SQLITE_CHMOD, $err);
443
+    } else {
444
+        $ok = new PDO("sqlite:$f");
445
+    }
446
+    if ($ok){
447
+        unset($ok);
448
+        return true;
449
+    }
450
+    unset($ok);
451
+    return false;
452 452
 }
453 453
 
454 454
 
@@ -472,15 +472,15 @@  discard block
 block discarded – undo
472 472
  * 		- string texte de la requete si $requeter vaut false
473 473
  */
474 474
 function spip_sqlite_create_view($nom, $query_select, $serveur = '', $requeter = true){
475
-	if (!$query_select) return false;
476
-	// vue deja presente
477
-	if (sql_showtable($nom, false, $serveur)){
478
-		spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", 'sqlite.'._LOG_ERREUR);
479
-		return false;
480
-	}
481
-
482
-	$query = "CREATE VIEW $nom AS ".$query_select;
483
-	return spip_sqlite_query($query, $serveur, $requeter);
475
+    if (!$query_select) return false;
476
+    // vue deja presente
477
+    if (sql_showtable($nom, false, $serveur)){
478
+        spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", 'sqlite.'._LOG_ERREUR);
479
+        return false;
480
+    }
481
+
482
+    $query = "CREATE VIEW $nom AS ".$query_select;
483
+    return spip_sqlite_query($query, $serveur, $requeter);
484 484
 }
485 485
 
486 486
 /**
@@ -495,41 +495,41 @@  discard block
 block discarded – undo
495 495
  * @return bool ou requete
496 496
  */
497 497
 function spip_sqlite_create_index($nom, $table, $champs, $unique='', $serveur = '', $requeter = true){
498
-	if (!($nom OR $table OR $champs)){
499
-		spip_log("Champ manquant pour creer un index sqlite ($nom, $table, (".join(',', $champs)."))", 'sqlite.'._LOG_ERREUR);
500
-		return false;
501
-	}
502
-
503
-	// SQLite ne differentie pas noms des index en fonction des tables
504
-	// il faut donc creer des noms uniques d'index pour une base sqlite
505
-	$nom = $table.'_'.$nom;
506
-	// enlever d'eventuelles parentheses deja presentes sur champs
507
-	if (!is_array($champs)){
508
-		if ($champs[0]=="(") $champs = substr($champs, 1, -1);
509
-		$champs = array($champs);
510
-		// supprimer l'info de longueur d'index mysql en fin de champ
511
-		$champs = preg_replace(",\(\d+\)$,","",$champs);
512
-	}
513
-
514
-	$ifnotexists = "";
515
-	$version = spip_sqlite_fetch(spip_sqlite_query("select sqlite_version() AS sqlite_version",$serveur),'',$serveur);
516
-	if (!function_exists('spip_version_compare')) include_spip('plugins/installer');
517
-
518
-	if ($version AND spip_version_compare($version['sqlite_version'],'3.3.0','>=')) {
519
-		$ifnotexists = ' IF NOT EXISTS';
520
-	} else {
521
-		/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
522
-		$a = spip_sqlite_showtable($table, $serveur);
523
-		if (isset($a['key']['KEY '.$nom])) return true;
524
-	}
525
-
526
-	$query = "CREATE ".($unique?"UNIQUE ":"")."INDEX$ifnotexists $nom ON $table (".join(',', $champs).")";
527
-	$res = spip_sqlite_query($query, $serveur, $requeter);
528
-	if (!$requeter) return $res;
529
-	if ($res)
530
-		return true;
531
-	else
532
-		return false;
498
+    if (!($nom OR $table OR $champs)){
499
+        spip_log("Champ manquant pour creer un index sqlite ($nom, $table, (".join(',', $champs)."))", 'sqlite.'._LOG_ERREUR);
500
+        return false;
501
+    }
502
+
503
+    // SQLite ne differentie pas noms des index en fonction des tables
504
+    // il faut donc creer des noms uniques d'index pour une base sqlite
505
+    $nom = $table.'_'.$nom;
506
+    // enlever d'eventuelles parentheses deja presentes sur champs
507
+    if (!is_array($champs)){
508
+        if ($champs[0]=="(") $champs = substr($champs, 1, -1);
509
+        $champs = array($champs);
510
+        // supprimer l'info de longueur d'index mysql en fin de champ
511
+        $champs = preg_replace(",\(\d+\)$,","",$champs);
512
+    }
513
+
514
+    $ifnotexists = "";
515
+    $version = spip_sqlite_fetch(spip_sqlite_query("select sqlite_version() AS sqlite_version",$serveur),'',$serveur);
516
+    if (!function_exists('spip_version_compare')) include_spip('plugins/installer');
517
+
518
+    if ($version AND spip_version_compare($version['sqlite_version'],'3.3.0','>=')) {
519
+        $ifnotexists = ' IF NOT EXISTS';
520
+    } else {
521
+        /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
522
+        $a = spip_sqlite_showtable($table, $serveur);
523
+        if (isset($a['key']['KEY '.$nom])) return true;
524
+    }
525
+
526
+    $query = "CREATE ".($unique?"UNIQUE ":"")."INDEX$ifnotexists $nom ON $table (".join(',', $champs).")";
527
+    $res = spip_sqlite_query($query, $serveur, $requeter);
528
+    if (!$requeter) return $res;
529
+    if ($res)
530
+        return true;
531
+    else
532
+        return false;
533 533
 }
534 534
 
535 535
 /**
@@ -544,90 +544,90 @@  discard block
 block discarded – undo
544 544
  * @return int
545 545
  */
546 546
 function spip_sqlite_count($r, $serveur = '', $requeter = true){
547
-	if (!$r) return 0;
548
-
549
-	if (_sqlite_is_version(3, '', $serveur)){
550
-		// select ou autre (insert, update,...) ?
551
-
552
-		// (link,requete) a compter
553
-		if (is_array($r->spipSqliteRowCount)){
554
-			list($link,$query) = $r->spipSqliteRowCount;
555
-			// amelioration possible a tester intensivement : pas de order by pour compter !
556
-			// $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query);
557
-			$query = "SELECT count(*) as zzzzsqlitecount FROM ($query)";
558
-			$l = $link->query($query);
559
-			$i = 0;
560
-			if ($l AND $z = $l->fetch())
561
-				$i = $z['zzzzsqlitecount'];
562
-			$r->spipSqliteRowCount = $i;
563
-		}
564
-		if (isset($r->spipSqliteRowCount)){
565
-			// Ce compte est faux s'il y a des limit dans la requete :(
566
-			// il retourne le nombre d'enregistrements sans le limit
567
-			return $r->spipSqliteRowCount;
568
-		} else {
569
-			return $r->rowCount();
570
-		}
571
-	} else {
572
-		return sqlite_num_rows($r);
573
-	}
547
+    if (!$r) return 0;
548
+
549
+    if (_sqlite_is_version(3, '', $serveur)){
550
+        // select ou autre (insert, update,...) ?
551
+
552
+        // (link,requete) a compter
553
+        if (is_array($r->spipSqliteRowCount)){
554
+            list($link,$query) = $r->spipSqliteRowCount;
555
+            // amelioration possible a tester intensivement : pas de order by pour compter !
556
+            // $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query);
557
+            $query = "SELECT count(*) as zzzzsqlitecount FROM ($query)";
558
+            $l = $link->query($query);
559
+            $i = 0;
560
+            if ($l AND $z = $l->fetch())
561
+                $i = $z['zzzzsqlitecount'];
562
+            $r->spipSqliteRowCount = $i;
563
+        }
564
+        if (isset($r->spipSqliteRowCount)){
565
+            // Ce compte est faux s'il y a des limit dans la requete :(
566
+            // il retourne le nombre d'enregistrements sans le limit
567
+            return $r->spipSqliteRowCount;
568
+        } else {
569
+            return $r->rowCount();
570
+        }
571
+    } else {
572
+        return sqlite_num_rows($r);
573
+    }
574 574
 }
575 575
 
576 576
 
577 577
 // http://doc.spip.org/@spip_sqlite_countsel
578 578
 function spip_sqlite_countsel($from = array(), $where = array(), $groupby = '', $having = array(), $serveur = '', $requeter = true){
579
-	$c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
580
-	$r = spip_sqlite_select("COUNT($c)", $from, $where, '', '', '',
581
-	                        $having, $serveur, $requeter);
582
-	if ((is_resource($r) or is_object($r)) && $requeter){ // ressource : sqlite2, object : sqlite3
583
-		if (_sqlite_is_version(3, '', $serveur)){
584
-			list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur);
585
-		} else {
586
-			list($r) = spip_sqlite_fetch($r, SPIP_SQLITE2_NUM, $serveur);
587
-		}
588
-
589
-	}
590
-	return $r;
579
+    $c = !$groupby ? '*' : ('DISTINCT '.(is_string($groupby) ? $groupby : join(',', $groupby)));
580
+    $r = spip_sqlite_select("COUNT($c)", $from, $where, '', '', '',
581
+                            $having, $serveur, $requeter);
582
+    if ((is_resource($r) or is_object($r)) && $requeter){ // ressource : sqlite2, object : sqlite3
583
+        if (_sqlite_is_version(3, '', $serveur)){
584
+            list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur);
585
+        } else {
586
+            list($r) = spip_sqlite_fetch($r, SPIP_SQLITE2_NUM, $serveur);
587
+        }
588
+
589
+    }
590
+    return $r;
591 591
 }
592 592
 
593 593
 
594 594
 // http://doc.spip.org/@spip_sqlite_delete
595 595
 function spip_sqlite_delete($table, $where = '', $serveur = '', $requeter = true){
596
-	$res = spip_sqlite_query(
597
-		_sqlite_calculer_expression('DELETE FROM', $table, ',')
598
-		._sqlite_calculer_expression('WHERE', $where),
599
-		$serveur, $requeter);
600
-
601
-	// renvoyer la requete inerte si demandee
602
-	if (!$requeter) return $res;
603
-
604
-	if ($res){
605
-		$link = _sqlite_link($serveur);
606
-		if (_sqlite_is_version(3, $link)){
607
-			return $res->rowCount();
608
-		} else {
609
-			return sqlite_changes($link);
610
-		}
611
-	}
612
-	else
613
-		return false;
596
+    $res = spip_sqlite_query(
597
+        _sqlite_calculer_expression('DELETE FROM', $table, ',')
598
+        ._sqlite_calculer_expression('WHERE', $where),
599
+        $serveur, $requeter);
600
+
601
+    // renvoyer la requete inerte si demandee
602
+    if (!$requeter) return $res;
603
+
604
+    if ($res){
605
+        $link = _sqlite_link($serveur);
606
+        if (_sqlite_is_version(3, $link)){
607
+            return $res->rowCount();
608
+        } else {
609
+            return sqlite_changes($link);
610
+        }
611
+    }
612
+    else
613
+        return false;
614 614
 }
615 615
 
616 616
 
617 617
 // http://doc.spip.org/@spip_sqlite_drop_table
618 618
 function spip_sqlite_drop_table($table, $exist = '', $serveur = '', $requeter = true){
619
-	if ($exist) $exist = " IF EXISTS";
620
-
621
-	/* simuler le IF EXISTS - version 2 */
622
-	if ($exist && _sqlite_is_version(2, '', $serveur)){
623
-		$a = spip_sqlite_showtable($table, $serveur);
624
-		if (!$a) return true;
625
-		$exist = '';
626
-	}
627
-	if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter))
628
-		return true;
629
-	else
630
-		return false;
619
+    if ($exist) $exist = " IF EXISTS";
620
+
621
+    /* simuler le IF EXISTS - version 2 */
622
+    if ($exist && _sqlite_is_version(2, '', $serveur)){
623
+        $a = spip_sqlite_showtable($table, $serveur);
624
+        if (!$a) return true;
625
+        $exist = '';
626
+    }
627
+    if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter))
628
+        return true;
629
+    else
630
+        return false;
631 631
 }
632 632
 
633 633
 /**
@@ -641,16 +641,16 @@  discard block
 block discarded – undo
641 641
  * @return bool|SQLiteResult|string
642 642
  */
643 643
 function spip_sqlite_drop_view($view, $exist = '', $serveur = '', $requeter = true){
644
-	if ($exist) $exist = " IF EXISTS";
644
+    if ($exist) $exist = " IF EXISTS";
645 645
 
646
-	/* simuler le IF EXISTS - version 2 */
647
-	if ($exist && _sqlite_is_version(2, '', $serveur)){
648
-		$a = spip_sqlite_showtable($view, $serveur);
649
-		if (!$a) return true;
650
-		$exist = '';
651
-	}
646
+    /* simuler le IF EXISTS - version 2 */
647
+    if ($exist && _sqlite_is_version(2, '', $serveur)){
648
+        $a = spip_sqlite_showtable($view, $serveur);
649
+        if (!$a) return true;
650
+        $exist = '';
651
+    }
652 652
 
653
-	return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter);
653
+    return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter);
654 654
 }
655 655
 
656 656
 /**
@@ -664,25 +664,25 @@  discard block
 block discarded – undo
664 664
  * @return bool ou requete
665 665
  */
666 666
 function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true){
667
-	if (!($nom OR $table)){
668
-		spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.'._LOG_ERREUR);
669
-		return false;
670
-	}
671
-
672
-	// SQLite ne differentie pas noms des index en fonction des tables
673
-	// il faut donc creer des noms uniques d'index pour une base sqlite
674
-	$index = $table.'_'.$nom;
675
-	$exist = " IF EXISTS";
676
-
677
-	/* simuler le IF EXISTS - version 2 */
678
-	if (_sqlite_is_version(2, '', $serveur)){
679
-		$a = spip_sqlite_showtable($table, $serveur);
680
-		if (!isset($a['key']['KEY '.$nom])) return true;
681
-		$exist = '';
682
-	}
683
-
684
-	$query = "DROP INDEX$exist $index";
685
-	return spip_sqlite_query($query, $serveur, $requeter);
667
+    if (!($nom OR $table)){
668
+        spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.'._LOG_ERREUR);
669
+        return false;
670
+    }
671
+
672
+    // SQLite ne differentie pas noms des index en fonction des tables
673
+    // il faut donc creer des noms uniques d'index pour une base sqlite
674
+    $index = $table.'_'.$nom;
675
+    $exist = " IF EXISTS";
676
+
677
+    /* simuler le IF EXISTS - version 2 */
678
+    if (_sqlite_is_version(2, '', $serveur)){
679
+        $a = spip_sqlite_showtable($table, $serveur);
680
+        if (!isset($a['key']['KEY '.$nom])) return true;
681
+        $exist = '';
682
+    }
683
+
684
+    $query = "DROP INDEX$exist $index";
685
+    return spip_sqlite_query($query, $serveur, $requeter);
686 686
 }
687 687
 
688 688
 /**
@@ -694,11 +694,11 @@  discard block
 block discarded – undo
694 694
  * 		erreur eventuelle
695 695
  **/
696 696
 function spip_sqlite_error($query = '', $serveur = ''){
697
-	$link = _sqlite_link($serveur);
697
+    $link = _sqlite_link($serveur);
698 698
 
699
-	if (_sqlite_is_version(3, $link)){
700
-		$errs = $link->errorInfo();
701
-		/*
699
+    if (_sqlite_is_version(3, $link)){
700
+        $errs = $link->errorInfo();
701
+        /*
702 702
 			$errs[0]
703 703
 				numero SQLState ('HY000' souvent lors d'une erreur)
704 704
 				http://www.easysoft.com/developer/interfaces/odbc/sqlstate_status_return_codes.html
@@ -708,17 +708,17 @@  discard block
 block discarded – undo
708 708
 			$errs[2]
709 709
 				Le texte du message d'erreur
710 710
 		*/
711
-		$s = '';
712
-		if (ltrim($errs[0],'0')) { // 00000 si pas d'erreur
713
-			$s = "$errs[2]";
714
-		}
715
-	} elseif ($link) {
716
-		$s = sqlite_error_string(sqlite_last_error($link));
717
-	} else {
718
-		$s = ": aucune ressource sqlite (link)";
719
-	}
720
-	if ($s) spip_log("$s - $query", 'sqlite.'._LOG_ERREUR);
721
-	return $s;
711
+        $s = '';
712
+        if (ltrim($errs[0],'0')) { // 00000 si pas d'erreur
713
+            $s = "$errs[2]";
714
+        }
715
+    } elseif ($link) {
716
+        $s = sqlite_error_string(sqlite_last_error($link));
717
+    } else {
718
+        $s = ": aucune ressource sqlite (link)";
719
+    }
720
+    if ($s) spip_log("$s - $query", 'sqlite.'._LOG_ERREUR);
721
+    return $s;
722 722
 }
723 723
 
724 724
 /**
@@ -735,222 +735,222 @@  discard block
 block discarded – undo
735 735
  * 		'HY000/1' : numéro de l'erreur SQLState / numéro d'erreur interne SQLite (en sqlite 3)
736 736
  **/
737 737
 function spip_sqlite_errno($serveur = ''){
738
-	$link = _sqlite_link($serveur);
738
+    $link = _sqlite_link($serveur);
739 739
 
740
-	if (_sqlite_is_version(3, $link)){
741
-		$t = $link->errorInfo();
742
-		$s = ltrim($t[0],'0'); // 00000 si pas d'erreur
743
-		if ($s) $s .= ' / ' . $t[1]; // ajoute l'erreur du moteur SQLite
744
-	} elseif ($link) {
745
-		$s = sqlite_last_error($link);
746
-	} else {
747
-		$s = ": aucune ressource sqlite (link)";
748
-	}
740
+    if (_sqlite_is_version(3, $link)){
741
+        $t = $link->errorInfo();
742
+        $s = ltrim($t[0],'0'); // 00000 si pas d'erreur
743
+        if ($s) $s .= ' / ' . $t[1]; // ajoute l'erreur du moteur SQLite
744
+    } elseif ($link) {
745
+        $s = sqlite_last_error($link);
746
+    } else {
747
+        $s = ": aucune ressource sqlite (link)";
748
+    }
749 749
 
750
-	if ($s) spip_log("Erreur sqlite $s", 'sqlite.'._LOG_ERREUR);
750
+    if ($s) spip_log("Erreur sqlite $s", 'sqlite.'._LOG_ERREUR);
751 751
 
752
-	return $s ? $s : 0;
752
+    return $s ? $s : 0;
753 753
 }
754 754
 
755 755
 
756 756
 // http://doc.spip.org/@spip_sqlite_explain
757 757
 function spip_sqlite_explain($query, $serveur = '', $requeter = true){
758
-	if (strpos(ltrim($query), 'SELECT')!==0) return array();
758
+    if (strpos(ltrim($query), 'SELECT')!==0) return array();
759 759
 
760
-	$query = spip_sqlite::traduire_requete($query, $serveur);
761
-	$query = 'EXPLAIN '.$query;
762
-	if (!$requeter) return $query;
763
-	// on ne trace pas ces requetes, sinon on obtient un tracage sans fin...
764
-	$r = spip_sqlite::executer_requete($query, $serveur, false);
760
+    $query = spip_sqlite::traduire_requete($query, $serveur);
761
+    $query = 'EXPLAIN '.$query;
762
+    if (!$requeter) return $query;
763
+    // on ne trace pas ces requetes, sinon on obtient un tracage sans fin...
764
+    $r = spip_sqlite::executer_requete($query, $serveur, false);
765 765
 
766
-	return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier
766
+    return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier
767 767
 }
768 768
 
769 769
 
770 770
 // http://doc.spip.org/@spip_sqlite_fetch
771 771
 function spip_sqlite_fetch($r, $t = '', $serveur = '', $requeter = true){
772 772
 
773
-	$link = _sqlite_link($serveur);
774
-	$is_v3 = _sqlite_is_version(3, $link);
775
-	if (!$t)
776
-		$t = ($is_v3 ? SPIP_SQLITE3_ASSOC : SPIP_SQLITE2_ASSOC);
777
-
778
-	$retour = false;
779
-	if ($r)
780
-		$retour = ($is_v3 ? $r->fetch($t) : sqlite_fetch_array($r, $t));
781
-
782
-	// les version 2 et 3 parfois renvoie des 'table.titre' au lieu de 'titre' tout court ! pff !
783
-	// suppression de 'table.' pour toutes les cles (c'est un peu violent !)
784
-	// c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non
785
-	if ($retour
786
-	  AND strpos(implode('',array_keys($retour)),'.')!==false){
787
-		foreach ($retour as $cle => $val){
788
-			if (($pos = strpos($cle, '.'))!==false){
789
-				$retour[substr($cle, $pos+1)] = &$retour[$cle];
790
-				unset($retour[$cle]);
791
-			}
792
-		}
793
-	}
794
-
795
-	return $retour;
773
+    $link = _sqlite_link($serveur);
774
+    $is_v3 = _sqlite_is_version(3, $link);
775
+    if (!$t)
776
+        $t = ($is_v3 ? SPIP_SQLITE3_ASSOC : SPIP_SQLITE2_ASSOC);
777
+
778
+    $retour = false;
779
+    if ($r)
780
+        $retour = ($is_v3 ? $r->fetch($t) : sqlite_fetch_array($r, $t));
781
+
782
+    // les version 2 et 3 parfois renvoie des 'table.titre' au lieu de 'titre' tout court ! pff !
783
+    // suppression de 'table.' pour toutes les cles (c'est un peu violent !)
784
+    // c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non
785
+    if ($retour
786
+      AND strpos(implode('',array_keys($retour)),'.')!==false){
787
+        foreach ($retour as $cle => $val){
788
+            if (($pos = strpos($cle, '.'))!==false){
789
+                $retour[substr($cle, $pos+1)] = &$retour[$cle];
790
+                unset($retour[$cle]);
791
+            }
792
+        }
793
+    }
794
+
795
+    return $retour;
796 796
 }
797 797
 
798 798
 
799 799
 function spip_sqlite_seek($r, $row_number, $serveur = '', $requeter = true){
800
-	if ($r){
801
-		$link = _sqlite_link($serveur);
802
-		if (_sqlite_is_version(3, $link)){
803
-			// encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind...
804
-			// je me demande si pour sqlite 3 il ne faudrait pas mieux utiliser
805
-			// les nouvelles fonctions sqlite3_xx (mais encore moins presentes...)
806
-			return false;
807
-		}
808
-		else {
809
-			return sqlite_seek($r, $row_number);
810
-		}
811
-	}
800
+    if ($r){
801
+        $link = _sqlite_link($serveur);
802
+        if (_sqlite_is_version(3, $link)){
803
+            // encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind...
804
+            // je me demande si pour sqlite 3 il ne faudrait pas mieux utiliser
805
+            // les nouvelles fonctions sqlite3_xx (mais encore moins presentes...)
806
+            return false;
807
+        }
808
+        else {
809
+            return sqlite_seek($r, $row_number);
810
+        }
811
+    }
812 812
 }
813 813
 
814 814
 
815 815
 // http://doc.spip.org/@spip_sqlite_free
816 816
 function spip_sqlite_free(&$r, $serveur = '', $requeter = true){
817
-	unset($r);
818
-	return true;
819
-	//return sqlite_free_result($r);
817
+    unset($r);
818
+    return true;
819
+    //return sqlite_free_result($r);
820 820
 }
821 821
 
822 822
 
823 823
 // http://doc.spip.org/@spip_sqlite_get_charset
824 824
 function spip_sqlite_get_charset($charset = array(), $serveur = '', $requeter = true){
825
-	//$c = !$charset ? '' : (" LIKE "._q($charset['charset']));
826
-	//return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur);
825
+    //$c = !$charset ? '' : (" LIKE "._q($charset['charset']));
826
+    //return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur);
827 827
 }
828 828
 
829 829
 
830 830
 // http://doc.spip.org/@spip_sqlite_hex
831 831
 function spip_sqlite_hex($v){
832
-	return hexdec($v);
832
+    return hexdec($v);
833 833
 }
834 834
 
835 835
 
836 836
 // http://doc.spip.org/@spip_sqlite_in
837 837
 function spip_sqlite_in($val, $valeurs, $not = '', $serveur = '', $requeter = true){
838
-	$n = $i = 0;
839
-	$in_sql = "";
840
-	while ($n = strpos($valeurs, ',', $n+1)){
841
-		if ((++$i)>=255){
842
-			$in_sql .= "($val $not IN (".
843
-			           substr($valeurs, 0, $n).
844
-			           "))\n".
845
-			           ($not ? "AND\t" : "OR\t");
846
-			$valeurs = substr($valeurs, $n+1);
847
-			$i = $n = 0;
848
-		}
849
-	}
850
-	$in_sql .= "($val $not IN ($valeurs))";
851
-
852
-	return "($in_sql)";
838
+    $n = $i = 0;
839
+    $in_sql = "";
840
+    while ($n = strpos($valeurs, ',', $n+1)){
841
+        if ((++$i)>=255){
842
+            $in_sql .= "($val $not IN (".
843
+                        substr($valeurs, 0, $n).
844
+                        "))\n".
845
+                        ($not ? "AND\t" : "OR\t");
846
+            $valeurs = substr($valeurs, $n+1);
847
+            $i = $n = 0;
848
+        }
849
+    }
850
+    $in_sql .= "($val $not IN ($valeurs))";
851
+
852
+    return "($in_sql)";
853 853
 }
854 854
 
855 855
 
856 856
 // http://doc.spip.org/@spip_sqlite_insert
857 857
 function spip_sqlite_insert($table, $champs, $valeurs, $desc = '', $serveur = '', $requeter = true){
858 858
 
859
-	$query = "INSERT INTO $table ".($champs ? "$champs VALUES $valeurs" : "DEFAULT VALUES");
860
-	if ($r = spip_sqlite_query($query, $serveur, $requeter)){
861
-		if (!$requeter) return $r;
862
-		$nb = spip_sqlite::last_insert_id($serveur);
863
-	}
864
-	else
865
-		$nb = 0;
859
+    $query = "INSERT INTO $table ".($champs ? "$champs VALUES $valeurs" : "DEFAULT VALUES");
860
+    if ($r = spip_sqlite_query($query, $serveur, $requeter)){
861
+        if (!$requeter) return $r;
862
+        $nb = spip_sqlite::last_insert_id($serveur);
863
+    }
864
+    else
865
+        $nb = 0;
866 866
 
867
-	$err = spip_sqlite_error($query, $serveur);
868
-	// cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
869
-	return isset($_GET['var_profile']) ? $r : $nb;
867
+    $err = spip_sqlite_error($query, $serveur);
868
+    // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
869
+    return isset($_GET['var_profile']) ? $r : $nb;
870 870
 
871 871
 }
872 872
 
873 873
 
874 874
 // http://doc.spip.org/@spip_sqlite_insertq
875 875
 function spip_sqlite_insertq($table, $couples = array(), $desc = array(), $serveur = '', $requeter = true){
876
-	if (!$desc) $desc = description_table($table, $serveur);
877
-	if (!$desc) die("$table insertion sans description");
878
-	$fields = isset($desc['field']) ? $desc['field'] : array();
876
+    if (!$desc) $desc = description_table($table, $serveur);
877
+    if (!$desc) die("$table insertion sans description");
878
+    $fields = isset($desc['field']) ? $desc['field'] : array();
879 879
 
880
-	foreach ($couples as $champ => $val){
881
-		$couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
882
-	}
880
+    foreach ($couples as $champ => $val){
881
+        $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
882
+    }
883 883
 
884
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
885
-	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
884
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
885
+    $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
886 886
 
887
-	$cles = $valeurs = "";
888
-	if (count($couples)){
889
-		$cles = "(".join(',', array_keys($couples)).")";
890
-		$valeurs = "(".join(',', $couples).")";
891
-	}
887
+    $cles = $valeurs = "";
888
+    if (count($couples)){
889
+        $cles = "(".join(',', array_keys($couples)).")";
890
+        $valeurs = "(".join(',', $couples).")";
891
+    }
892 892
 
893
-	return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
893
+    return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
894 894
 }
895 895
 
896 896
 
897 897
 // http://doc.spip.org/@spip_sqlite_insertq_multi
898 898
 function spip_sqlite_insertq_multi($table, $tab_couples = array(), $desc = array(), $serveur = '', $requeter = true){
899
-	if (!$desc) $desc = description_table($table, $serveur);
900
-	if (!$desc) die("$table insertion sans description");
901
-	if (!isset($desc['field']))
902
-		$desc['field'] = array();
903
-
904
-	// recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci
905
-	$maj = _sqlite_ajouter_champs_timestamp($table, array(), $desc, $serveur);
906
-
907
-	// seul le nom de la table est a traduire ici :
908
-	// le faire une seule fois au debut
909
-	$query_start = "INSERT INTO $table ";
910
-	$query_start = spip_sqlite::traduire_requete($query_start,$serveur);
911
-
912
-	// ouvrir une transaction
913
-	if ($requeter)
914
-		spip_sqlite::demarrer_transaction($serveur);
915
-
916
-	while ($couples = array_shift($tab_couples)){
917
-		foreach ($couples as $champ => $val){
918
-			$couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]);
919
-		}
920
-
921
-		// inserer les champs timestamp par defaut
922
-		$couples = array_merge($maj,$couples);
923
-
924
-		$champs = $valeurs = "";
925
-		if (count($couples)){
926
-			$champs = "(".join(',', array_keys($couples)).")";
927
-			$valeurs = "(".join(',', $couples).")";
928
-			$query = $query_start."$champs VALUES $valeurs";
929
-		}
930
-		else
931
-			$query = $query_start."DEFAULT VALUES";
899
+    if (!$desc) $desc = description_table($table, $serveur);
900
+    if (!$desc) die("$table insertion sans description");
901
+    if (!isset($desc['field']))
902
+        $desc['field'] = array();
903
+
904
+    // recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci
905
+    $maj = _sqlite_ajouter_champs_timestamp($table, array(), $desc, $serveur);
906
+
907
+    // seul le nom de la table est a traduire ici :
908
+    // le faire une seule fois au debut
909
+    $query_start = "INSERT INTO $table ";
910
+    $query_start = spip_sqlite::traduire_requete($query_start,$serveur);
911
+
912
+    // ouvrir une transaction
913
+    if ($requeter)
914
+        spip_sqlite::demarrer_transaction($serveur);
915
+
916
+    while ($couples = array_shift($tab_couples)){
917
+        foreach ($couples as $champ => $val){
918
+            $couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]);
919
+        }
920
+
921
+        // inserer les champs timestamp par defaut
922
+        $couples = array_merge($maj,$couples);
923
+
924
+        $champs = $valeurs = "";
925
+        if (count($couples)){
926
+            $champs = "(".join(',', array_keys($couples)).")";
927
+            $valeurs = "(".join(',', $couples).")";
928
+            $query = $query_start."$champs VALUES $valeurs";
929
+        }
930
+        else
931
+            $query = $query_start."DEFAULT VALUES";
932 932
 		
933
-		if ($requeter)
934
-			$retour = spip_sqlite::executer_requete($query,$serveur);
935
-
936
-		// sur le dernier couple uniquement
937
-		if (!count($tab_couples)){
938
-			$nb = 0;
939
-			if ($requeter)
940
-				$nb = spip_sqlite::last_insert_id($serveur);
941
-			else
942
-				return $query;
943
-		}
944
-
945
-		$err = spip_sqlite_error($query, $serveur);
946
-	}
947
-
948
-	if ($requeter)
949
-		spip_sqlite::finir_transaction($serveur);
950
-
951
-	// renvoie le dernier id d'autoincrement ajoute
952
-	// cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
953
-	return isset($_GET['var_profile']) ? $retour : $nb;
933
+        if ($requeter)
934
+            $retour = spip_sqlite::executer_requete($query,$serveur);
935
+
936
+        // sur le dernier couple uniquement
937
+        if (!count($tab_couples)){
938
+            $nb = 0;
939
+            if ($requeter)
940
+                $nb = spip_sqlite::last_insert_id($serveur);
941
+            else
942
+                return $query;
943
+        }
944
+
945
+        $err = spip_sqlite_error($query, $serveur);
946
+    }
947
+
948
+    if ($requeter)
949
+        spip_sqlite::finir_transaction($serveur);
950
+
951
+    // renvoie le dernier id d'autoincrement ajoute
952
+    // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage
953
+    return isset($_GET['var_profile']) ? $retour : $nb;
954 954
 }
955 955
 
956 956
 
@@ -961,7 +961,7 @@  discard block
 block discarded – undo
961 961
  * @return bool true / false
962 962
 **/
963 963
 function spip_sqlite_preferer_transaction($serveur = '', $requeter = true) {
964
-	return true;
964
+    return true;
965 965
 }
966 966
 
967 967
 /**
@@ -971,9 +971,9 @@  discard block
 block discarded – undo
971 971
  *
972 972
 **/
973 973
 function spip_sqlite_demarrer_transaction($serveur = '', $requeter = true) {
974
-	if (!$requeter) return "BEGIN TRANSACTION";
975
-	spip_sqlite::demarrer_transaction($serveur);
976
-	return true;
974
+    if (!$requeter) return "BEGIN TRANSACTION";
975
+    spip_sqlite::demarrer_transaction($serveur);
976
+    return true;
977 977
 }
978 978
 
979 979
 /**
@@ -981,40 +981,40 @@  discard block
 block discarded – undo
981 981
  *
982 982
 **/
983 983
 function spip_sqlite_terminer_transaction($serveur = '', $requeter = true) {
984
-	if (!$requeter) return "COMMIT";
985
-	spip_sqlite::finir_transaction($serveur);
986
-	return true;
984
+    if (!$requeter) return "COMMIT";
985
+    spip_sqlite::finir_transaction($serveur);
986
+    return true;
987 987
 }
988 988
 
989 989
 
990 990
 // http://doc.spip.org/@spip_sqlite_listdbs
991 991
 function spip_sqlite_listdbs($serveur = '', $requeter = true){
992
-	_sqlite_init();
992
+    _sqlite_init();
993 993
 
994
-	if (!is_dir($d = substr(_DIR_DB, 0, -1))){
995
-		return array();
996
-	}
994
+    if (!is_dir($d = substr(_DIR_DB, 0, -1))){
995
+        return array();
996
+    }
997 997
 
998
-	include_spip('inc/flock');
999
-	$bases = preg_files($d, $pattern = '(.*)\.sqlite$');
1000
-	$bds = array();
998
+    include_spip('inc/flock');
999
+    $bases = preg_files($d, $pattern = '(.*)\.sqlite$');
1000
+    $bds = array();
1001 1001
 
1002
-	foreach ($bases as $b){
1003
-		// pas de bases commencant pas sqlite 
1004
-		// (on s'en sert pour l'installation pour simuler la presence d'un serveur)
1005
-		// les bases sont de la forme _sqliteX_tmp_spip_install.sqlite
1006
-		if (strpos($b, '_sqlite')) continue;
1007
-		$bds[] = preg_replace(";.*/$pattern;iS", '$1', $b);
1008
-	}
1002
+    foreach ($bases as $b){
1003
+        // pas de bases commencant pas sqlite 
1004
+        // (on s'en sert pour l'installation pour simuler la presence d'un serveur)
1005
+        // les bases sont de la forme _sqliteX_tmp_spip_install.sqlite
1006
+        if (strpos($b, '_sqlite')) continue;
1007
+        $bds[] = preg_replace(";.*/$pattern;iS", '$1', $b);
1008
+    }
1009 1009
 
1010
-	return $bds;
1010
+    return $bds;
1011 1011
 }
1012 1012
 
1013 1013
 
1014 1014
 // http://doc.spip.org/@spip_sqlite_multi
1015 1015
 function spip_sqlite_multi($objet, $lang){
1016
-	$r = "EXTRAIRE_MULTI(" . $objet . ", '" . $lang . "') AS multi";
1017
-	return $r;
1016
+    $r = "EXTRAIRE_MULTI(" . $objet . ", '" . $lang . "') AS multi";
1017
+    return $r;
1018 1018
 }
1019 1019
 
1020 1020
 
@@ -1030,14 +1030,14 @@  discard block
 block discarded – undo
1030 1030
  **/
1031 1031
 // http://doc.spip.org/@spip_sqlite_optimize
1032 1032
 function spip_sqlite_optimize($table, $serveur = '', $requeter = true){
1033
-	static $do = false;
1034
-	if ($requeter and $do){
1035
-		return true;
1036
-	}
1037
-	if ($requeter){
1038
-		$do = true;
1039
-	}
1040
-	return spip_sqlite_query("VACUUM", $serveur, $requeter);
1033
+    static $do = false;
1034
+    if ($requeter and $do){
1035
+        return true;
1036
+    }
1037
+    if ($requeter){
1038
+        $do = true;
1039
+    }
1040
+    return spip_sqlite_query("VACUUM", $serveur, $requeter);
1041 1041
 }
1042 1042
 
1043 1043
 
@@ -1051,12 +1051,12 @@  discard block
 block discarded – undo
1051 1051
  * @return string|number
1052 1052
  */
1053 1053
 function spip_sqlite_quote($v, $type = ''){
1054
-		if (!is_array($v))
1055
-			return _sqlite_calculer_cite($v,$type);
1056
-		// si c'est un tableau, le parcourir en propageant le type
1057
-		foreach($v as $k=>$r)
1058
-			$v[$k] = spip_sqlite_quote($r, $type);
1059
-		return join(",", $v);
1054
+        if (!is_array($v))
1055
+            return _sqlite_calculer_cite($v,$type);
1056
+        // si c'est un tableau, le parcourir en propageant le type
1057
+        foreach($v as $k=>$r)
1058
+            $v[$k] = spip_sqlite_quote($r, $type);
1059
+        return join(",", $v);
1060 1060
 }
1061 1061
 
1062 1062
 
@@ -1069,67 +1069,67 @@  discard block
 block discarded – undo
1069 1069
  * @return string expression SQL
1070 1070
  **/
1071 1071
 function spip_sqlite_date_proche($champ, $interval, $unite){
1072
-	$op = (($interval <= 0) ? '>' : '<');
1073
-	return "($champ $op datetime('".date("Y-m-d H:i:s")."', '$interval $unite'))";
1072
+    $op = (($interval <= 0) ? '>' : '<');
1073
+    return "($champ $op datetime('".date("Y-m-d H:i:s")."', '$interval $unite'))";
1074 1074
 }
1075 1075
 
1076 1076
 
1077 1077
 // http://doc.spip.org/@spip_sqlite_replace
1078 1078
 function spip_sqlite_replace($table, $couples, $desc = array(), $serveur = '', $requeter = true){
1079
-	if (!$desc) $desc = description_table($table, $serveur);
1080
-	if (!$desc) die("$table insertion sans description");
1081
-	$fields = isset($desc['field']) ? $desc['field'] : array();
1079
+    if (!$desc) $desc = description_table($table, $serveur);
1080
+    if (!$desc) die("$table insertion sans description");
1081
+    $fields = isset($desc['field']) ? $desc['field'] : array();
1082 1082
 
1083
-	foreach ($couples as $champ => $val){
1084
-		$couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1085
-	}
1083
+    foreach ($couples as $champ => $val){
1084
+        $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]);
1085
+    }
1086 1086
 
1087
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1088
-	$couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1087
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1088
+    $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
1089 1089
 
1090
-	return spip_sqlite_query("REPLACE INTO $table (".join(',', array_keys($couples)).') VALUES ('.join(',', $couples).')', $serveur);
1090
+    return spip_sqlite_query("REPLACE INTO $table (".join(',', array_keys($couples)).') VALUES ('.join(',', $couples).')', $serveur);
1091 1091
 }
1092 1092
 
1093 1093
 
1094 1094
 // http://doc.spip.org/@spip_sqlite_replace_multi
1095 1095
 function spip_sqlite_replace_multi($table, $tab_couples, $desc = array(), $serveur = '', $requeter = true){
1096 1096
 
1097
-	// boucler pour trainter chaque requete independemment
1098
-	foreach ($tab_couples as $couples){
1099
-		$retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter);
1100
-	}
1101
-	// renvoie le dernier id	
1102
-	return $retour;
1097
+    // boucler pour trainter chaque requete independemment
1098
+    foreach ($tab_couples as $couples){
1099
+        $retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter);
1100
+    }
1101
+    // renvoie le dernier id	
1102
+    return $retour;
1103 1103
 }
1104 1104
 
1105 1105
 
1106 1106
 // http://doc.spip.org/@spip_sqlite_select
1107 1107
 function spip_sqlite_select($select, $from, $where = '', $groupby = '', $orderby = '', $limit = '', $having = '', $serveur = '', $requeter = true){
1108 1108
 
1109
-	// version() n'est pas connu de sqlite
1110
-	$select = str_replace('version()', 'sqlite_version()', $select);
1111
-
1112
-	// recomposer from
1113
-	$from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from));
1114
-
1115
-	$query =
1116
-		_sqlite_calculer_expression('SELECT', $select, ', ')
1117
-		._sqlite_calculer_expression('FROM', $from, ', ')
1118
-		._sqlite_calculer_expression('WHERE', $where)
1119
-		._sqlite_calculer_expression('GROUP BY', $groupby, ',')
1120
-		._sqlite_calculer_expression('HAVING', $having)
1121
-		.($orderby ? ("\nORDER BY "._sqlite_calculer_order($orderby)) : '')
1122
-		.($limit ? "\nLIMIT $limit" : '');
1123
-
1124
-	// dans un select, on doit renvoyer la requête en cas d'erreur
1125
-	$res = spip_sqlite_query($query, $serveur, $requeter);
1126
-	// texte de la requete demande ?
1127
-	if (!$requeter) return $res;
1128
-	// erreur survenue ?
1129
-	if ($res === false) {
1130
-		return spip_sqlite::traduire_requete($query, $serveur);
1131
-	}
1132
-	return $res;
1109
+    // version() n'est pas connu de sqlite
1110
+    $select = str_replace('version()', 'sqlite_version()', $select);
1111
+
1112
+    // recomposer from
1113
+    $from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from));
1114
+
1115
+    $query =
1116
+        _sqlite_calculer_expression('SELECT', $select, ', ')
1117
+        ._sqlite_calculer_expression('FROM', $from, ', ')
1118
+        ._sqlite_calculer_expression('WHERE', $where)
1119
+        ._sqlite_calculer_expression('GROUP BY', $groupby, ',')
1120
+        ._sqlite_calculer_expression('HAVING', $having)
1121
+        .($orderby ? ("\nORDER BY "._sqlite_calculer_order($orderby)) : '')
1122
+        .($limit ? "\nLIMIT $limit" : '');
1123
+
1124
+    // dans un select, on doit renvoyer la requête en cas d'erreur
1125
+    $res = spip_sqlite_query($query, $serveur, $requeter);
1126
+    // texte de la requete demande ?
1127
+    if (!$requeter) return $res;
1128
+    // erreur survenue ?
1129
+    if ($res === false) {
1130
+        return spip_sqlite::traduire_requete($query, $serveur);
1131
+    }
1132
+    return $res;
1133 1133
 }
1134 1134
 
1135 1135
 
@@ -1148,35 +1148,35 @@  discard block
 block discarded – undo
1148 1148
  * 		False en cas d'erreur.
1149 1149
 **/
1150 1150
 function spip_sqlite_selectdb($db, $serveur = '', $requeter = true){
1151
-	_sqlite_init();
1152
-
1153
-	// interdire la creation d'une nouvelle base, 
1154
-	// sauf si on est dans l'installation
1155
-	if (!is_file($f = _DIR_DB.$db.'.sqlite')
1156
-	    && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)){
1157
-		spip_log("Il est interdit de creer la base $db", 'sqlite.'._LOG_HS);
1158
-		return false;
1159
-	}
1160
-
1161
-	// se connecter a la base indiquee
1162
-	// avec les identifiants connus
1163
-	$index = $serveur ? $serveur : 0;
1164
-
1165
-	if ($link = spip_connect_db('', '', '', '', '@selectdb@'.$db, $serveur, '', '')){
1166
-		if (($db==$link['db']) && $GLOBALS['connexions'][$index] = $link)
1167
-			return $db;
1168
-	} else {
1169
-		spip_log("Impossible de selectionner la base $db", 'sqlite.'._LOG_HS);
1170
-		return false;
1171
-	}
1151
+    _sqlite_init();
1152
+
1153
+    // interdire la creation d'une nouvelle base, 
1154
+    // sauf si on est dans l'installation
1155
+    if (!is_file($f = _DIR_DB.$db.'.sqlite')
1156
+        && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)){
1157
+        spip_log("Il est interdit de creer la base $db", 'sqlite.'._LOG_HS);
1158
+        return false;
1159
+    }
1160
+
1161
+    // se connecter a la base indiquee
1162
+    // avec les identifiants connus
1163
+    $index = $serveur ? $serveur : 0;
1164
+
1165
+    if ($link = spip_connect_db('', '', '', '', '@selectdb@'.$db, $serveur, '', '')){
1166
+        if (($db==$link['db']) && $GLOBALS['connexions'][$index] = $link)
1167
+            return $db;
1168
+    } else {
1169
+        spip_log("Impossible de selectionner la base $db", 'sqlite.'._LOG_HS);
1170
+        return false;
1171
+    }
1172 1172
 
1173 1173
 }
1174 1174
 
1175 1175
 
1176 1176
 // http://doc.spip.org/@spip_sqlite_set_charset
1177 1177
 function spip_sqlite_set_charset($charset, $serveur = '', $requeter = true){
1178
-	# spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR);
1179
-	# return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas !
1178
+    # spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR);
1179
+    # return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas !
1180 1180
 }
1181 1181
 
1182 1182
 
@@ -1194,169 +1194,169 @@  discard block
 block discarded – undo
1194 1194
  *     Ressource à utiliser avec sql_fetch()
1195 1195
 **/
1196 1196
 function spip_sqlite_showbase($match, $serveur = '', $requeter = true){
1197
-	// type est le type d'entrée : table / index / view
1198
-	// on ne retourne que les tables (?) et non les vues...
1199
-	# ESCAPE non supporte par les versions sqlite <3
1200
-	#	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter);
1201
-	$match = preg_quote($match);
1202
-	$match = str_replace("\\\_", "[[TIRETBAS]]", $match);
1203
-	$match = str_replace("\\\%", "[[POURCENT]]", $match);
1204
-	$match = str_replace("_", ".", $match);
1205
-	$match = str_replace("%", ".*", $match);
1206
-	$match = str_replace("[[TIRETBAS]]", "_", $match);
1207
-	$match = str_replace("[[POURCENT]]", "%", $match);
1208
-	$match = "^$match$";
1209
-	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP "._q($match), $serveur, $requeter);
1197
+    // type est le type d'entrée : table / index / view
1198
+    // on ne retourne que les tables (?) et non les vues...
1199
+    # ESCAPE non supporte par les versions sqlite <3
1200
+    #	return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter);
1201
+    $match = preg_quote($match);
1202
+    $match = str_replace("\\\_", "[[TIRETBAS]]", $match);
1203
+    $match = str_replace("\\\%", "[[POURCENT]]", $match);
1204
+    $match = str_replace("_", ".", $match);
1205
+    $match = str_replace("%", ".*", $match);
1206
+    $match = str_replace("[[TIRETBAS]]", "_", $match);
1207
+    $match = str_replace("[[POURCENT]]", "%", $match);
1208
+    $match = "^$match$";
1209
+    return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP "._q($match), $serveur, $requeter);
1210 1210
 }
1211 1211
 
1212 1212
 define('_SQLITE_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
1213 1213
 // http://doc.spip.org/@spip_sqlite_showtable
1214 1214
 function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true){
1215
-	$query =
1216
-		'SELECT sql, type FROM'
1217
-		.' (SELECT * FROM sqlite_master UNION ALL'
1218
-		.' SELECT * FROM sqlite_temp_master)'
1219
-		." WHERE tbl_name LIKE '$nom_table'"
1220
-		." AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1221
-		.' ORDER BY substr(type,2,1), name';
1222
-
1223
-	$a = spip_sqlite_query($query, $serveur, $requeter);
1224
-	if (!$a) return "";
1225
-	if (!$requeter) return $a;
1226
-	if (!($a = spip_sqlite_fetch($a, null, $serveur))) return "";
1227
-	$vue = ($a['type']=='view'); // table | vue
1228
-
1229
-	// c'est une table
1230
-	// il faut parser le create
1231
-	if (!$vue){
1232
-		if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)){
1233
-			return "";
1234
-		} else {
1235
-			$desc = $r[1];
1236
-			// extraction d'une KEY éventuelle en prenant garde de ne pas
1237
-			// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1238
-			if (preg_match("/^(.*?),([^,]*\sKEY[ (].*)$/s", $desc, $r)){
1239
-				$namedkeys = $r[2];
1240
-				$desc = $r[1];
1241
-			}
1242
-			else
1243
-				$namedkeys = "";
1244
-
1245
-			$fields = array();
1246
-			$keys   = array();
1247
-
1248
-			// enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1249
-			// par exemple s'il contiennent une virgule.
1250
-			// /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1251
-			list($desc, $echaps) = query_echappe_textes($desc);
1252
-
1253
-			// separer toutes les descriptions de champs, separes par des virgules
1254
-			# /!\ explode peut exploser aussi DECIMAL(10,2) !
1255
-			$k_precedent = null;
1256
-			foreach (explode(",", $desc) as $v){
1257
-
1258
-				preg_match("/^\s*([^\s]+)\s+(.*)/", $v, $r);
1259
-				// Les cles de champs peuvent etre entourees
1260
-				// de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1261
-				// http://www.sqlite.org/lang_keywords.html
1262
-				$k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1263
-				if ($char = strpbrk($k[0], '\'"[`')) {
1264
-					$k = trim($k, $char);
1265
-					if ($char == '[') $k = rtrim($k, ']');
1266
-				}
1267
-				$def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1268
-
1269
-				# rustine pour DECIMAL(10,2)
1270
-				if (false !== strpos($k, ')')) {
1271
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1272
-					continue;
1273
-				}
1215
+    $query =
1216
+        'SELECT sql, type FROM'
1217
+        .' (SELECT * FROM sqlite_master UNION ALL'
1218
+        .' SELECT * FROM sqlite_temp_master)'
1219
+        ." WHERE tbl_name LIKE '$nom_table'"
1220
+        ." AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1221
+        .' ORDER BY substr(type,2,1), name';
1222
+
1223
+    $a = spip_sqlite_query($query, $serveur, $requeter);
1224
+    if (!$a) return "";
1225
+    if (!$requeter) return $a;
1226
+    if (!($a = spip_sqlite_fetch($a, null, $serveur))) return "";
1227
+    $vue = ($a['type']=='view'); // table | vue
1228
+
1229
+    // c'est une table
1230
+    // il faut parser le create
1231
+    if (!$vue){
1232
+        if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)){
1233
+            return "";
1234
+        } else {
1235
+            $desc = $r[1];
1236
+            // extraction d'une KEY éventuelle en prenant garde de ne pas
1237
+            // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1238
+            if (preg_match("/^(.*?),([^,]*\sKEY[ (].*)$/s", $desc, $r)){
1239
+                $namedkeys = $r[2];
1240
+                $desc = $r[1];
1241
+            }
1242
+            else
1243
+                $namedkeys = "";
1244
+
1245
+            $fields = array();
1246
+            $keys   = array();
1247
+
1248
+            // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1249
+            // par exemple s'il contiennent une virgule.
1250
+            // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1251
+            list($desc, $echaps) = query_echappe_textes($desc);
1252
+
1253
+            // separer toutes les descriptions de champs, separes par des virgules
1254
+            # /!\ explode peut exploser aussi DECIMAL(10,2) !
1255
+            $k_precedent = null;
1256
+            foreach (explode(",", $desc) as $v){
1257
+
1258
+                preg_match("/^\s*([^\s]+)\s+(.*)/", $v, $r);
1259
+                // Les cles de champs peuvent etre entourees
1260
+                // de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1261
+                // http://www.sqlite.org/lang_keywords.html
1262
+                $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1263
+                if ($char = strpbrk($k[0], '\'"[`')) {
1264
+                    $k = trim($k, $char);
1265
+                    if ($char == '[') $k = rtrim($k, ']');
1266
+                }
1267
+                $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1268
+
1269
+                # rustine pour DECIMAL(10,2)
1270
+                if (false !== strpos($k, ')')) {
1271
+                    $fields[$k_precedent] .= ',' . $k . ' ' . $def;
1272
+                    continue;
1273
+                }
1274 1274
 				
1275
-				$fields[$k] = $def;
1276
-				$k_precedent = $k;
1275
+                $fields[$k] = $def;
1276
+                $k_precedent = $k;
1277 1277
 				
1278
-				// la primary key peut etre dans une des descriptions de champs
1279
-				// et non en fin de table, cas encore decouvert avec Sqlite Manager
1280
-				if (stripos($r[2], 'PRIMARY KEY') !== false) {
1281
-					$keys['PRIMARY KEY'] = $k;
1282
-				}
1283
-			}
1284
-			// key inclues dans la requete
1285
-			foreach(preg_split('/\)\s*(,|$)/',$namedkeys) as $v) {
1286
-				if (preg_match("/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/",$v,$r)) {
1287
-					$k = str_replace("`", '', trim($r[1]));
1288
-					$t = trim(strtolower(str_replace("`", '', $r[2])), '"');
1289
-					if ($k && !isset($keys[$k])) $keys[$k] = $t; else $keys[] = $t;
1290
-				}
1291
-			}
1292
-			// sinon ajouter les key index
1293
-			$query =
1294
-				'SELECT name,sql FROM'
1295
-				.' (SELECT * FROM sqlite_master UNION ALL'
1296
-				.' SELECT * FROM sqlite_temp_master)'
1297
-				." WHERE tbl_name LIKE '$nom_table'"
1298
-				." AND type='index' AND name NOT LIKE 'sqlite_%'"
1299
-				.'ORDER BY substr(type,2,1), name';
1300
-			$a = spip_sqlite_query($query, $serveur, $requeter);
1301
-			while ($r = spip_sqlite_fetch($a, null, $serveur)){
1302
-				$key = str_replace($nom_table.'_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1303
-				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1304
-				$keys['KEY '.$key] = $colonnes;
1305
-			}
1306
-		}
1307
-	}
1308
-	// c'est une vue, on liste les champs disponibles simplement
1309
-	else {
1310
-		if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)){ // limit 1
1311
-			$fields = array();
1312
-			foreach ($res as $c => $v) $fields[$c] = '';
1313
-			$keys = array();
1314
-		} else {
1315
-			return "";
1316
-		}
1317
-	}
1318
-	return array('field' => $fields, 'key' => $keys);
1278
+                // la primary key peut etre dans une des descriptions de champs
1279
+                // et non en fin de table, cas encore decouvert avec Sqlite Manager
1280
+                if (stripos($r[2], 'PRIMARY KEY') !== false) {
1281
+                    $keys['PRIMARY KEY'] = $k;
1282
+                }
1283
+            }
1284
+            // key inclues dans la requete
1285
+            foreach(preg_split('/\)\s*(,|$)/',$namedkeys) as $v) {
1286
+                if (preg_match("/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/",$v,$r)) {
1287
+                    $k = str_replace("`", '', trim($r[1]));
1288
+                    $t = trim(strtolower(str_replace("`", '', $r[2])), '"');
1289
+                    if ($k && !isset($keys[$k])) $keys[$k] = $t; else $keys[] = $t;
1290
+                }
1291
+            }
1292
+            // sinon ajouter les key index
1293
+            $query =
1294
+                'SELECT name,sql FROM'
1295
+                .' (SELECT * FROM sqlite_master UNION ALL'
1296
+                .' SELECT * FROM sqlite_temp_master)'
1297
+                ." WHERE tbl_name LIKE '$nom_table'"
1298
+                ." AND type='index' AND name NOT LIKE 'sqlite_%'"
1299
+                .'ORDER BY substr(type,2,1), name';
1300
+            $a = spip_sqlite_query($query, $serveur, $requeter);
1301
+            while ($r = spip_sqlite_fetch($a, null, $serveur)){
1302
+                $key = str_replace($nom_table.'_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1303
+                $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1304
+                $keys['KEY '.$key] = $colonnes;
1305
+            }
1306
+        }
1307
+    }
1308
+    // c'est une vue, on liste les champs disponibles simplement
1309
+    else {
1310
+        if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)){ // limit 1
1311
+            $fields = array();
1312
+            foreach ($res as $c => $v) $fields[$c] = '';
1313
+            $keys = array();
1314
+        } else {
1315
+            return "";
1316
+        }
1317
+    }
1318
+    return array('field' => $fields, 'key' => $keys);
1319 1319
 
1320 1320
 }
1321 1321
 
1322 1322
 
1323 1323
 // http://doc.spip.org/@spip_sqlite_update
1324 1324
 function spip_sqlite_update($table, $champs, $where = '', $desc = '', $serveur = '', $requeter = true){
1325
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1326
-	$champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1327
-
1328
-	$set = array();
1329
-	foreach ($champs as $champ => $val)
1330
-		$set[] = $champ."=$val";
1331
-	if (!empty($set))
1332
-		return spip_sqlite_query(
1333
-			_sqlite_calculer_expression('UPDATE', $table, ',')
1334
-			._sqlite_calculer_expression('SET', $set, ',')
1335
-			._sqlite_calculer_expression('WHERE', $where),
1336
-			$serveur, $requeter);
1325
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1326
+    $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1327
+
1328
+    $set = array();
1329
+    foreach ($champs as $champ => $val)
1330
+        $set[] = $champ."=$val";
1331
+    if (!empty($set))
1332
+        return spip_sqlite_query(
1333
+            _sqlite_calculer_expression('UPDATE', $table, ',')
1334
+            ._sqlite_calculer_expression('SET', $set, ',')
1335
+            ._sqlite_calculer_expression('WHERE', $where),
1336
+            $serveur, $requeter);
1337 1337
 }
1338 1338
 
1339 1339
 
1340 1340
 // http://doc.spip.org/@spip_sqlite_updateq
1341 1341
 function spip_sqlite_updateq($table, $champs, $where = '', $desc = array(), $serveur = '', $requeter = true){
1342 1342
 
1343
-	if (!$champs) return;
1344
-	if (!$desc) $desc = description_table($table, $serveur);
1345
-	if (!$desc) die("$table insertion sans description");
1346
-	$fields = $desc['field'];
1347
-
1348
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1349
-	$champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1350
-
1351
-	$set = array();
1352
-	foreach ($champs as $champ => $val){
1353
-		$set[] = $champ.'='._sqlite_calculer_cite($val, $fields[$champ]);
1354
-	}
1355
-	return spip_sqlite_query(
1356
-		_sqlite_calculer_expression('UPDATE', $table, ',')
1357
-		._sqlite_calculer_expression('SET', $set, ',')
1358
-		._sqlite_calculer_expression('WHERE', $where),
1359
-		$serveur, $requeter);
1343
+    if (!$champs) return;
1344
+    if (!$desc) $desc = description_table($table, $serveur);
1345
+    if (!$desc) die("$table insertion sans description");
1346
+    $fields = $desc['field'];
1347
+
1348
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1349
+    $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1350
+
1351
+    $set = array();
1352
+    foreach ($champs as $champ => $val){
1353
+        $set[] = $champ.'='._sqlite_calculer_cite($val, $fields[$champ]);
1354
+    }
1355
+    return spip_sqlite_query(
1356
+        _sqlite_calculer_expression('UPDATE', $table, ',')
1357
+        ._sqlite_calculer_expression('SET', $set, ',')
1358
+        ._sqlite_calculer_expression('WHERE', $where),
1359
+        $serveur, $requeter);
1360 1360
 }
1361 1361
 
1362 1362
 
@@ -1375,13 +1375,13 @@  discard block
 block discarded – undo
1375 1375
  * @return void
1376 1376
  */
1377 1377
 function _sqlite_init(){
1378
-	if (!defined('_DIR_DB')) define('_DIR_DB', _DIR_ETC.'bases/');
1379
-	if (!defined('_SQLITE_CHMOD')) define('_SQLITE_CHMOD', _SPIP_CHMOD);
1378
+    if (!defined('_DIR_DB')) define('_DIR_DB', _DIR_ETC.'bases/');
1379
+    if (!defined('_SQLITE_CHMOD')) define('_SQLITE_CHMOD', _SPIP_CHMOD);
1380 1380
 
1381
-	if (!is_dir($d = _DIR_DB)){
1382
-		include_spip('inc/flock');
1383
-		sous_repertoire($d);
1384
-	}
1381
+    if (!is_dir($d = _DIR_DB)){
1382
+        include_spip('inc/flock');
1383
+        sous_repertoire($d);
1384
+    }
1385 1385
 }
1386 1386
 
1387 1387
 
@@ -1396,16 +1396,16 @@  discard block
 block discarded – undo
1396 1396
  * @return bool|int
1397 1397
  */
1398 1398
 function _sqlite_is_version($version = '', $link = '', $serveur = '', $requeter = true){
1399
-	if ($link==='') $link = _sqlite_link($serveur);
1400
-	if (!$link) return false;
1401
-	if ($link instanceof PDO){
1402
-		$v = 3;
1403
-	} else {
1404
-		$v = 2;
1405
-	}
1406
-
1407
-	if (!$version) return $v;
1408
-	return ($version==$v);
1399
+    if ($link==='') $link = _sqlite_link($serveur);
1400
+    if (!$link) return false;
1401
+    if ($link instanceof PDO){
1402
+        $v = 3;
1403
+    } else {
1404
+        $v = 2;
1405
+    }
1406
+
1407
+    if (!$version) return $v;
1408
+    return ($version==$v);
1409 1409
 }
1410 1410
 
1411 1411
 
@@ -1417,8 +1417,8 @@  discard block
 block discarded – undo
1417 1417
  * @return
1418 1418
  */
1419 1419
 function _sqlite_link($serveur = ''){
1420
-	$link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
1421
-	return $link;
1420
+    $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
1421
+    return $link;
1422 1422
 }
1423 1423
 
1424 1424
 
@@ -1434,41 +1434,41 @@  discard block
 block discarded – undo
1434 1434
  * @return string|array|number
1435 1435
  */
1436 1436
 function _sqlite_calculer_cite($v, $type){
1437
-	if ($type){
1438
-		if(is_null($v)
1439
-			AND stripos($type,"NOT NULL")===false) return 'NULL'; // null php se traduit en NULL SQL
1440
-
1441
-		if (sql_test_date($type) AND preg_match('/^\w+\(/', $v))
1442
-			return $v;
1443
-		if (sql_test_int($type)){
1444
-			if (is_numeric($v))
1445
-				return $v;
1446
-			elseif (ctype_xdigit(substr($v, 2)) AND strncmp($v, '0x', 2)==0)
1447
-				return hexdec(substr($v, 2));
1448
-			else
1449
-				return intval($v);
1450
-		}
1451
-	}
1452
-	else {
1453
-		// si on ne connait pas le type on le deduit de $v autant que possible
1454
-		if (is_numeric($v))
1455
-			return strval($v);
1456
-	}
1457
-
1458
-	if (function_exists('sqlite_escape_string')){
1459
-		return "'".sqlite_escape_string($v)."'";
1460
-	}
1461
-
1462
-	// trouver un link sqlite3 pour faire l'echappement
1463
-	foreach ($GLOBALS['connexions'] as $s){
1464
-		if (_sqlite_is_version(3, $l = $s['link'])){
1465
-			return $l->quote($v);
1466
-		}
1467
-	}
1468
-
1469
-	// echapper les ' en ''
1470
-	spip_log("Pas de methode sqlite_escape_string ni ->quote pour echapper","sqlite."._LOG_INFO_IMPORTANTE);
1471
-	return  ("'" . str_replace("'","''",$v) . "'");
1437
+    if ($type){
1438
+        if(is_null($v)
1439
+            AND stripos($type,"NOT NULL")===false) return 'NULL'; // null php se traduit en NULL SQL
1440
+
1441
+        if (sql_test_date($type) AND preg_match('/^\w+\(/', $v))
1442
+            return $v;
1443
+        if (sql_test_int($type)){
1444
+            if (is_numeric($v))
1445
+                return $v;
1446
+            elseif (ctype_xdigit(substr($v, 2)) AND strncmp($v, '0x', 2)==0)
1447
+                return hexdec(substr($v, 2));
1448
+            else
1449
+                return intval($v);
1450
+        }
1451
+    }
1452
+    else {
1453
+        // si on ne connait pas le type on le deduit de $v autant que possible
1454
+        if (is_numeric($v))
1455
+            return strval($v);
1456
+    }
1457
+
1458
+    if (function_exists('sqlite_escape_string')){
1459
+        return "'".sqlite_escape_string($v)."'";
1460
+    }
1461
+
1462
+    // trouver un link sqlite3 pour faire l'echappement
1463
+    foreach ($GLOBALS['connexions'] as $s){
1464
+        if (_sqlite_is_version(3, $l = $s['link'])){
1465
+            return $l->quote($v);
1466
+        }
1467
+    }
1468
+
1469
+    // echapper les ' en ''
1470
+    spip_log("Pas de methode sqlite_escape_string ni ->quote pour echapper","sqlite."._LOG_INFO_IMPORTANTE);
1471
+    return  ("'" . str_replace("'","''",$v) . "'");
1472 1472
 }
1473 1473
 
1474 1474
 
@@ -1482,19 +1482,19 @@  discard block
 block discarded – undo
1482 1482
  * @return string
1483 1483
  */
1484 1484
 function _sqlite_calculer_expression($expression, $v, $join = 'AND'){
1485
-	if (empty($v))
1486
-		return '';
1487
-
1488
-	$exp = "\n$expression ";
1489
-
1490
-	if (!is_array($v)){
1491
-		return $exp.$v;
1492
-	} else {
1493
-		if (strtoupper($join)==='AND')
1494
-			return $exp.join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
1495
-		else
1496
-			return $exp.join($join, $v);
1497
-	}
1485
+    if (empty($v))
1486
+        return '';
1487
+
1488
+    $exp = "\n$expression ";
1489
+
1490
+    if (!is_array($v)){
1491
+        return $exp.$v;
1492
+    } else {
1493
+        if (strtoupper($join)==='AND')
1494
+            return $exp.join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
1495
+        else
1496
+            return $exp.join($join, $v);
1497
+    }
1498 1498
 }
1499 1499
 
1500 1500
 
@@ -1506,31 +1506,31 @@  discard block
 block discarded – undo
1506 1506
  * @return string
1507 1507
  */
1508 1508
 function _sqlite_calculer_order($orderby){
1509
-	return (is_array($orderby)) ? join(", ", $orderby) : $orderby;
1509
+    return (is_array($orderby)) ? join(", ", $orderby) : $orderby;
1510 1510
 }
1511 1511
 
1512 1512
 
1513 1513
 // renvoie des 'nom AS alias' 
1514 1514
 // http://doc.spip.org/@_sqlite_calculer_select_as
1515 1515
 function _sqlite_calculer_select_as($args){
1516
-	$res = '';
1517
-	foreach ($args as $k => $v){
1518
-		if (substr($k, -1)=='@'){
1519
-			// c'est une jointure qui se refere au from precedent
1520
-			// pas de virgule
1521
-			$res .= '  '.$v;
1522
-		}
1523
-		else {
1524
-			if (!is_numeric($k)){
1525
-				$p = strpos($v, " ");
1526
-				if ($p)
1527
-					$v = substr($v, 0, $p)." AS '$k'".substr($v, $p);
1528
-				else $v .= " AS '$k'";
1529
-			}
1530
-			$res .= ', '.$v;
1531
-		}
1532
-	}
1533
-	return substr($res, 2);
1516
+    $res = '';
1517
+    foreach ($args as $k => $v){
1518
+        if (substr($k, -1)=='@'){
1519
+            // c'est une jointure qui se refere au from precedent
1520
+            // pas de virgule
1521
+            $res .= '  '.$v;
1522
+        }
1523
+        else {
1524
+            if (!is_numeric($k)){
1525
+                $p = strpos($v, " ");
1526
+                if ($p)
1527
+                    $v = substr($v, 0, $p)." AS '$k'".substr($v, $p);
1528
+                else $v .= " AS '$k'";
1529
+            }
1530
+            $res .= ', '.$v;
1531
+        }
1532
+    }
1533
+    return substr($res, 2);
1534 1534
 }
1535 1535
 
1536 1536
 
@@ -1542,23 +1542,23 @@  discard block
 block discarded – undo
1542 1542
  * @return array|mixed|string
1543 1543
  */
1544 1544
 function _sqlite_calculer_where($v){
1545
-	if (!is_array($v))
1546
-		return $v;
1547
-
1548
-	$op = array_shift($v);
1549
-	if (!($n = count($v)))
1550
-		return $op;
1551
-	else {
1552
-		$arg = _sqlite_calculer_where(array_shift($v));
1553
-		if ($n==1){
1554
-			return "$op($arg)";
1555
-		} else {
1556
-			$arg2 = _sqlite_calculer_where(array_shift($v));
1557
-			if ($n==2){
1558
-				return "($arg $op $arg2)";
1559
-			} else return "($arg $op ($arg2) : $v[0])";
1560
-		}
1561
-	}
1545
+    if (!is_array($v))
1546
+        return $v;
1547
+
1548
+    $op = array_shift($v);
1549
+    if (!($n = count($v)))
1550
+        return $op;
1551
+    else {
1552
+        $arg = _sqlite_calculer_where(array_shift($v));
1553
+        if ($n==1){
1554
+            return "$op($arg)";
1555
+        } else {
1556
+            $arg2 = _sqlite_calculer_where(array_shift($v));
1557
+            if ($n==2){
1558
+                return "($arg $op $arg2)";
1559
+            } else return "($arg $op ($arg2) : $v[0])";
1560
+        }
1561
+    }
1562 1562
 }
1563 1563
 
1564 1564
 
@@ -1573,23 +1573,23 @@  discard block
 block discarded – undo
1573 1573
  * @return array|bool
1574 1574
  */
1575 1575
 function _sqlite_charger_version($version = ''){
1576
-	$versions = array();
1577
-
1578
-	// version 2
1579
-	if (!$version || $version==2){
1580
-		if (charger_php_extension('sqlite')){
1581
-			$versions[] = 2;
1582
-		}
1583
-	}
1584
-
1585
-	// version 3
1586
-	if (!$version || $version==3){
1587
-		if (charger_php_extension('pdo') && charger_php_extension('pdo_sqlite')){
1588
-			$versions[] = 3;
1589
-		}
1590
-	}
1591
-	if ($version) return in_array($version, $versions);
1592
-	return $versions;
1576
+    $versions = array();
1577
+
1578
+    // version 2
1579
+    if (!$version || $version==2){
1580
+        if (charger_php_extension('sqlite')){
1581
+            $versions[] = 2;
1582
+        }
1583
+    }
1584
+
1585
+    // version 3
1586
+    if (!$version || $version==3){
1587
+        if (charger_php_extension('pdo') && charger_php_extension('pdo_sqlite')){
1588
+            $versions[] = 3;
1589
+        }
1590
+    }
1591
+    if ($version) return in_array($version, $versions);
1592
+    return $versions;
1593 1593
 }
1594 1594
 
1595 1595
 
@@ -1618,151 +1618,151 @@  discard block
 block discarded – undo
1618 1618
  */
1619 1619
 function _sqlite_modifier_table($table, $colonne, $opt = array(), $serveur = ''){
1620 1620
 
1621
-	if (is_array($table)){
1622
-		reset($table);
1623
-		list($table_origine,$table_destination) = each($table);
1624
-	} else {
1625
-		$table_origine = $table_destination = $table;
1626
-	}
1627
-	// ne prend actuellement qu'un changement
1628
-	// mais pourra etre adapte pour changer plus qu'une colonne a la fois
1629
-	if (is_array($colonne)){
1630
-		reset($colonne);
1631
-		list($colonne_origine,$colonne_destination) = each($colonne);
1632
-	} else {
1633
-		$colonne_origine = $colonne_destination = $colonne;
1634
-	}
1635
-	if (!isset($opt['field'])) $opt['field'] = array();
1636
-	if (!isset($opt['key'])) $opt['key'] = array();
1637
-
1638
-	// si les noms de tables sont differents, pas besoin de table temporaire
1639
-	// on prendra directement le nom de la future table
1640
-	$meme_table = ($table_origine==$table_destination);
1641
-
1642
-	$def_origine = sql_showtable($table_origine, false, $serveur);
1643
-	if (!$def_origine OR !isset($def_origine['field'])){
1644
-		spip_log("Alter table impossible sur $table_origine : table non trouvee",'sqlite'._LOG_ERREUR);
1645
-		return false;
1646
-	}
1647
-
1648
-
1649
-	$table_tmp = $table_origine.'_tmp';
1650
-
1651
-	// 1) creer une table temporaire avec les modifications	
1652
-	// - DROP : suppression de la colonne
1653
-	// - CHANGE : modification de la colonne
1654
-	// (foreach pour conserver l'ordre des champs)
1655
-
1656
-	// field 
1657
-	$fields = array();
1658
-	// pour le INSERT INTO plus loin
1659
-	// stocker la correspondance nouvelles->anciennes colonnes
1660
-	$fields_correspondances = array();
1661
-	foreach ($def_origine['field'] as $c => $d){
1662
-
1663
-		if ($colonne_origine && ($c==$colonne_origine)){
1664
-			// si pas DROP
1665
-			if ($colonne_destination){
1666
-				$fields[$colonne_destination] = $opt['field'][$colonne_destination];
1667
-				$fields_correspondances[$colonne_destination] = $c;
1668
-			}
1669
-		} else {
1670
-			$fields[$c] = $d;
1671
-			$fields_correspondances[$c] = $c;
1672
-		}
1673
-	}
1674
-	// cas de ADD sqlite2 (ajout du champ en fin de table):
1675
-	if (!$colonne_origine && $colonne_destination){
1676
-		$fields[$colonne_destination] = $opt['field'][$colonne_destination];
1677
-	}
1678
-
1679
-	// key...
1680
-	$keys = array();
1681
-	foreach ($def_origine['key'] as $c => $d){
1682
-		$c = str_replace($colonne_origine, $colonne_destination, $c);
1683
-		$d = str_replace($colonne_origine, $colonne_destination, $d);
1684
-		// seulement si on ne supprime pas la colonne !
1685
-		if ($d)
1686
-			$keys[$c] = $d;
1687
-	}
1688
-
1689
-	// autres keys, on merge
1690
-	$keys = array_merge($keys, $opt['key']);
1691
-	$queries = array();
1692
-
1693
-	// copier dans destination (si differente de origine), sinon tmp
1694
-	$table_copie = ($meme_table) ? $table_tmp : $table_destination;
1695
-	$autoinc = (isset($keys['PRIMARY KEY'])
1696
-					AND stripos($keys['PRIMARY KEY'],',')===false
1697
-					AND stripos($fields[$keys['PRIMARY KEY']],'default')===false);
1698
-
1699
-	if ($q = _sqlite_requete_create(
1700
-		$table_copie,
1701
-		$fields,
1702
-		$keys,
1703
-		$autoinc,
1704
-		$temporary = false,
1705
-		$ifnotexists = true,
1706
-		$serveur)){
1707
-		$queries[] = $q;
1708
-	}
1709
-
1710
-
1711
-	// 2) y copier les champs qui vont bien
1712
-	$champs_dest = join(', ', array_keys($fields_correspondances));
1713
-	$champs_ori = join(', ', $fields_correspondances);
1714
-	$queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
1715
-
1716
-	// 3) supprimer la table d'origine
1717
-	$queries[] = "DROP TABLE $table_origine";
1718
-
1719
-	// 4) renommer la table temporaire 
1720
-	// avec le nom de la table destination
1721
-	// si necessaire
1722
-	if ($meme_table){
1723
-		if (_sqlite_is_version(3, '', $serveur)){
1724
-			$queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
1725
-		} else {
1726
-			$queries[] = _sqlite_requete_create(
1727
-				$table_destination,
1728
-				$fields,
1729
-				$keys,
1730
-				$autoinc,
1731
-				$temporary = false,
1732
-				$ifnotexists = false, // la table existe puisqu'on est dans une transaction
1733
-				$serveur);
1734
-			$queries[] = "INSERT INTO $table_destination SELECT * FROM $table_copie";
1735
-			$queries[] = "DROP TABLE $table_copie";
1736
-		}
1737
-	}
1738
-
1739
-	// 5) remettre les index !
1740
-	foreach ($keys as $k => $v){
1741
-		if ($k=='PRIMARY KEY'){
1742
-		}
1743
-		else {
1744
-			// enlever KEY
1745
-			$k = substr($k, 4);
1746
-			$queries[] = "CREATE INDEX $table_destination"."_$k ON $table_destination ($v)";
1747
-		}
1748
-	}
1749
-
1750
-
1751
-	if (count($queries)){
1752
-		spip_sqlite::demarrer_transaction($serveur);
1753
-		// il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
1754
-		foreach ($queries as $q){
1755
-			if (!spip_sqlite::executer_requete($q, $serveur)){
1756
-				spip_log(_LOG_GRAVITE_ERREUR, "SQLite : ALTER TABLE table :"
1757
-																			." Erreur a l'execution de la requete : $q", 'sqlite');
1758
-				spip_sqlite::annuler_transaction($serveur);
1759
-				return false;
1760
-			}
1761
-		}
1762
-		spip_sqlite::finir_transaction($serveur);
1763
-	}
1764
-
1765
-	return true;
1621
+    if (is_array($table)){
1622
+        reset($table);
1623
+        list($table_origine,$table_destination) = each($table);
1624
+    } else {
1625
+        $table_origine = $table_destination = $table;
1626
+    }
1627
+    // ne prend actuellement qu'un changement
1628
+    // mais pourra etre adapte pour changer plus qu'une colonne a la fois
1629
+    if (is_array($colonne)){
1630
+        reset($colonne);
1631
+        list($colonne_origine,$colonne_destination) = each($colonne);
1632
+    } else {
1633
+        $colonne_origine = $colonne_destination = $colonne;
1634
+    }
1635
+    if (!isset($opt['field'])) $opt['field'] = array();
1636
+    if (!isset($opt['key'])) $opt['key'] = array();
1637
+
1638
+    // si les noms de tables sont differents, pas besoin de table temporaire
1639
+    // on prendra directement le nom de la future table
1640
+    $meme_table = ($table_origine==$table_destination);
1641
+
1642
+    $def_origine = sql_showtable($table_origine, false, $serveur);
1643
+    if (!$def_origine OR !isset($def_origine['field'])){
1644
+        spip_log("Alter table impossible sur $table_origine : table non trouvee",'sqlite'._LOG_ERREUR);
1645
+        return false;
1646
+    }
1647
+
1648
+
1649
+    $table_tmp = $table_origine.'_tmp';
1650
+
1651
+    // 1) creer une table temporaire avec les modifications	
1652
+    // - DROP : suppression de la colonne
1653
+    // - CHANGE : modification de la colonne
1654
+    // (foreach pour conserver l'ordre des champs)
1655
+
1656
+    // field 
1657
+    $fields = array();
1658
+    // pour le INSERT INTO plus loin
1659
+    // stocker la correspondance nouvelles->anciennes colonnes
1660
+    $fields_correspondances = array();
1661
+    foreach ($def_origine['field'] as $c => $d){
1662
+
1663
+        if ($colonne_origine && ($c==$colonne_origine)){
1664
+            // si pas DROP
1665
+            if ($colonne_destination){
1666
+                $fields[$colonne_destination] = $opt['field'][$colonne_destination];
1667
+                $fields_correspondances[$colonne_destination] = $c;
1668
+            }
1669
+        } else {
1670
+            $fields[$c] = $d;
1671
+            $fields_correspondances[$c] = $c;
1672
+        }
1673
+    }
1674
+    // cas de ADD sqlite2 (ajout du champ en fin de table):
1675
+    if (!$colonne_origine && $colonne_destination){
1676
+        $fields[$colonne_destination] = $opt['field'][$colonne_destination];
1677
+    }
1678
+
1679
+    // key...
1680
+    $keys = array();
1681
+    foreach ($def_origine['key'] as $c => $d){
1682
+        $c = str_replace($colonne_origine, $colonne_destination, $c);
1683
+        $d = str_replace($colonne_origine, $colonne_destination, $d);
1684
+        // seulement si on ne supprime pas la colonne !
1685
+        if ($d)
1686
+            $keys[$c] = $d;
1687
+    }
1688
+
1689
+    // autres keys, on merge
1690
+    $keys = array_merge($keys, $opt['key']);
1691
+    $queries = array();
1692
+
1693
+    // copier dans destination (si differente de origine), sinon tmp
1694
+    $table_copie = ($meme_table) ? $table_tmp : $table_destination;
1695
+    $autoinc = (isset($keys['PRIMARY KEY'])
1696
+                    AND stripos($keys['PRIMARY KEY'],',')===false
1697
+                    AND stripos($fields[$keys['PRIMARY KEY']],'default')===false);
1698
+
1699
+    if ($q = _sqlite_requete_create(
1700
+        $table_copie,
1701
+        $fields,
1702
+        $keys,
1703
+        $autoinc,
1704
+        $temporary = false,
1705
+        $ifnotexists = true,
1706
+        $serveur)){
1707
+        $queries[] = $q;
1708
+    }
1709
+
1710
+
1711
+    // 2) y copier les champs qui vont bien
1712
+    $champs_dest = join(', ', array_keys($fields_correspondances));
1713
+    $champs_ori = join(', ', $fields_correspondances);
1714
+    $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
1715
+
1716
+    // 3) supprimer la table d'origine
1717
+    $queries[] = "DROP TABLE $table_origine";
1718
+
1719
+    // 4) renommer la table temporaire 
1720
+    // avec le nom de la table destination
1721
+    // si necessaire
1722
+    if ($meme_table){
1723
+        if (_sqlite_is_version(3, '', $serveur)){
1724
+            $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
1725
+        } else {
1726
+            $queries[] = _sqlite_requete_create(
1727
+                $table_destination,
1728
+                $fields,
1729
+                $keys,
1730
+                $autoinc,
1731
+                $temporary = false,
1732
+                $ifnotexists = false, // la table existe puisqu'on est dans une transaction
1733
+                $serveur);
1734
+            $queries[] = "INSERT INTO $table_destination SELECT * FROM $table_copie";
1735
+            $queries[] = "DROP TABLE $table_copie";
1736
+        }
1737
+    }
1738
+
1739
+    // 5) remettre les index !
1740
+    foreach ($keys as $k => $v){
1741
+        if ($k=='PRIMARY KEY'){
1742
+        }
1743
+        else {
1744
+            // enlever KEY
1745
+            $k = substr($k, 4);
1746
+            $queries[] = "CREATE INDEX $table_destination"."_$k ON $table_destination ($v)";
1747
+        }
1748
+    }
1749
+
1750
+
1751
+    if (count($queries)){
1752
+        spip_sqlite::demarrer_transaction($serveur);
1753
+        // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
1754
+        foreach ($queries as $q){
1755
+            if (!spip_sqlite::executer_requete($q, $serveur)){
1756
+                spip_log(_LOG_GRAVITE_ERREUR, "SQLite : ALTER TABLE table :"
1757
+                                                                            ." Erreur a l'execution de la requete : $q", 'sqlite');
1758
+                spip_sqlite::annuler_transaction($serveur);
1759
+                return false;
1760
+            }
1761
+        }
1762
+        spip_sqlite::finir_transaction($serveur);
1763
+    }
1764
+
1765
+    return true;
1766 1766
 }
1767 1767
 
1768 1768
 
@@ -1773,59 +1773,59 @@  discard block
 block discarded – undo
1773 1773
  * @return array
1774 1774
  */
1775 1775
 function _sqlite_ref_fonctions(){
1776
-	$fonctions = array(
1777
-		'alter' => 'spip_sqlite_alter',
1778
-		'count' => 'spip_sqlite_count',
1779
-		'countsel' => 'spip_sqlite_countsel',
1780
-		'create' => 'spip_sqlite_create',
1781
-		'create_base' => 'spip_sqlite_create_base',
1782
-		'create_view' => 'spip_sqlite_create_view',
1783
-		'date_proche' => 'spip_sqlite_date_proche',
1784
-		'delete' => 'spip_sqlite_delete',
1785
-		'drop_table' => 'spip_sqlite_drop_table',
1786
-		'drop_view' => 'spip_sqlite_drop_view',
1787
-		'errno' => 'spip_sqlite_errno',
1788
-		'error' => 'spip_sqlite_error',
1789
-		'explain' => 'spip_sqlite_explain',
1790
-		'fetch' => 'spip_sqlite_fetch',
1791
-		'seek' => 'spip_sqlite_seek',
1792
-		'free' => 'spip_sqlite_free',
1793
-		'hex' => 'spip_sqlite_hex',
1794
-		'in' => 'spip_sqlite_in',
1795
-		'insert' => 'spip_sqlite_insert',
1796
-		'insertq' => 'spip_sqlite_insertq',
1797
-		'insertq_multi' => 'spip_sqlite_insertq_multi',
1798
-		'listdbs' => 'spip_sqlite_listdbs',
1799
-		'multi' => 'spip_sqlite_multi',
1800
-		'optimize' => 'spip_sqlite_optimize',
1801
-		'query' => 'spip_sqlite_query',
1802
-		'quote' => 'spip_sqlite_quote',
1803
-		'replace' => 'spip_sqlite_replace',
1804
-		'replace_multi' => 'spip_sqlite_replace_multi',
1805
-		'select' => 'spip_sqlite_select',
1806
-		'selectdb' => 'spip_sqlite_selectdb',
1807
-		'set_charset' => 'spip_sqlite_set_charset',
1808
-		'get_charset' => 'spip_sqlite_get_charset',
1809
-		'showbase' => 'spip_sqlite_showbase',
1810
-		'showtable' => 'spip_sqlite_showtable',
1811
-		'update' => 'spip_sqlite_update',
1812
-		'updateq' => 'spip_sqlite_updateq',
1813
-		'preferer_transaction' => 'spip_sqlite_preferer_transaction',
1814
-		'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
1815
-		'terminer_transaction' => 'spip_sqlite_terminer_transaction',
1816
-	);
1817
-
1818
-	// association de chaque nom http d'un charset aux couples sqlite 
1819
-	// SQLite supporte utf-8 et utf-16 uniquement.
1820
-	$charsets = array(
1821
-		'utf-8' => array('charset' => 'utf8', 'collation' => 'utf8_general_ci'),
1822
-		//'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
1823
-		//'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
1824
-	);
1825
-
1826
-	$fonctions['charsets'] = $charsets;
1827
-
1828
-	return $fonctions;
1776
+    $fonctions = array(
1777
+        'alter' => 'spip_sqlite_alter',
1778
+        'count' => 'spip_sqlite_count',
1779
+        'countsel' => 'spip_sqlite_countsel',
1780
+        'create' => 'spip_sqlite_create',
1781
+        'create_base' => 'spip_sqlite_create_base',
1782
+        'create_view' => 'spip_sqlite_create_view',
1783
+        'date_proche' => 'spip_sqlite_date_proche',
1784
+        'delete' => 'spip_sqlite_delete',
1785
+        'drop_table' => 'spip_sqlite_drop_table',
1786
+        'drop_view' => 'spip_sqlite_drop_view',
1787
+        'errno' => 'spip_sqlite_errno',
1788
+        'error' => 'spip_sqlite_error',
1789
+        'explain' => 'spip_sqlite_explain',
1790
+        'fetch' => 'spip_sqlite_fetch',
1791
+        'seek' => 'spip_sqlite_seek',
1792
+        'free' => 'spip_sqlite_free',
1793
+        'hex' => 'spip_sqlite_hex',
1794
+        'in' => 'spip_sqlite_in',
1795
+        'insert' => 'spip_sqlite_insert',
1796
+        'insertq' => 'spip_sqlite_insertq',
1797
+        'insertq_multi' => 'spip_sqlite_insertq_multi',
1798
+        'listdbs' => 'spip_sqlite_listdbs',
1799
+        'multi' => 'spip_sqlite_multi',
1800
+        'optimize' => 'spip_sqlite_optimize',
1801
+        'query' => 'spip_sqlite_query',
1802
+        'quote' => 'spip_sqlite_quote',
1803
+        'replace' => 'spip_sqlite_replace',
1804
+        'replace_multi' => 'spip_sqlite_replace_multi',
1805
+        'select' => 'spip_sqlite_select',
1806
+        'selectdb' => 'spip_sqlite_selectdb',
1807
+        'set_charset' => 'spip_sqlite_set_charset',
1808
+        'get_charset' => 'spip_sqlite_get_charset',
1809
+        'showbase' => 'spip_sqlite_showbase',
1810
+        'showtable' => 'spip_sqlite_showtable',
1811
+        'update' => 'spip_sqlite_update',
1812
+        'updateq' => 'spip_sqlite_updateq',
1813
+        'preferer_transaction' => 'spip_sqlite_preferer_transaction',
1814
+        'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
1815
+        'terminer_transaction' => 'spip_sqlite_terminer_transaction',
1816
+    );
1817
+
1818
+    // association de chaque nom http d'un charset aux couples sqlite 
1819
+    // SQLite supporte utf-8 et utf-16 uniquement.
1820
+    $charsets = array(
1821
+        'utf-8' => array('charset' => 'utf8', 'collation' => 'utf8_general_ci'),
1822
+        //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
1823
+        //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
1824
+    );
1825
+
1826
+    $fonctions['charsets'] = $charsets;
1827
+
1828
+    return $fonctions;
1829 1829
 }
1830 1830
 
1831 1831
 
@@ -1838,55 +1838,55 @@  discard block
 block discarded – undo
1838 1838
  * @return mixed
1839 1839
  */
1840 1840
 function _sqlite_remplacements_definitions_table($query, $autoinc = false){
1841
-	// quelques remplacements
1842
-	$num = "(\s*\([0-9]*\))?";
1843
-	$enum = "(\s*\([^\)]*\))?";
1844
-
1845
-	$remplace = array(
1846
-		'/enum'.$enum.'/is' => 'VARCHAR(255)',
1847
-		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
1848
-		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
1849
-		'/auto_increment/is' => '',
1850
-		'/(timestamp .* )ON .*$/is' => '\\1',
1851
-		'/character set \w+/is' => '',
1852
-		'/((big|small|medium|tiny)?int(eger)?)'.$num.'\s*unsigned/is' => '\\1 UNSIGNED',
1853
-		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
1854
-		'/((char|varchar)'.$num.'\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
1855
-		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
1856
-		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
1857
-	);
1858
-
1859
-	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
1860
-	$remplace_autocinc = array(
1861
-		'/(big|small|medium|tiny)?int(eger)?'.$num.'/is' => 'INTEGER'
1862
-	);
1863
-	// pour les int non autoincrement, il faut un DEFAULT
1864
-	$remplace_nonautocinc = array(
1865
-		'/((big|small|medium|tiny)?int(eger)?'.$num.'\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
1866
-	);
1867
-
1868
-	if (is_string($query)){
1869
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
1870
-		if ($autoinc OR preg_match(',AUTO_INCREMENT,is',$query))
1871
-			$query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
1872
-		else{
1873
-			$query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
1874
-			$query = _sqlite_collate_ci($query);
1875
-		}
1876
-	}
1877
-	elseif(is_array($query)){
1878
-		foreach($query as $k=>$q) {
1879
-			$ai = ($autoinc?$k==$autoinc:preg_match(',AUTO_INCREMENT,is',$q));
1880
-			$query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
1881
-			if ($ai)
1882
-				$query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
1883
-			else{
1884
-				$query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
1885
-				$query[$k] = _sqlite_collate_ci($query[$k]);
1886
-			}
1887
-		}
1888
-	}
1889
-	return $query;
1841
+    // quelques remplacements
1842
+    $num = "(\s*\([0-9]*\))?";
1843
+    $enum = "(\s*\([^\)]*\))?";
1844
+
1845
+    $remplace = array(
1846
+        '/enum'.$enum.'/is' => 'VARCHAR(255)',
1847
+        '/COLLATE \w+_bin/is' => 'COLLATE BINARY',
1848
+        '/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
1849
+        '/auto_increment/is' => '',
1850
+        '/(timestamp .* )ON .*$/is' => '\\1',
1851
+        '/character set \w+/is' => '',
1852
+        '/((big|small|medium|tiny)?int(eger)?)'.$num.'\s*unsigned/is' => '\\1 UNSIGNED',
1853
+        '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
1854
+        '/((char|varchar)'.$num.'\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
1855
+        '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
1856
+        '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
1857
+    );
1858
+
1859
+    // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
1860
+    $remplace_autocinc = array(
1861
+        '/(big|small|medium|tiny)?int(eger)?'.$num.'/is' => 'INTEGER'
1862
+    );
1863
+    // pour les int non autoincrement, il faut un DEFAULT
1864
+    $remplace_nonautocinc = array(
1865
+        '/((big|small|medium|tiny)?int(eger)?'.$num.'\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
1866
+    );
1867
+
1868
+    if (is_string($query)){
1869
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
1870
+        if ($autoinc OR preg_match(',AUTO_INCREMENT,is',$query))
1871
+            $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
1872
+        else{
1873
+            $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
1874
+            $query = _sqlite_collate_ci($query);
1875
+        }
1876
+    }
1877
+    elseif(is_array($query)){
1878
+        foreach($query as $k=>$q) {
1879
+            $ai = ($autoinc?$k==$autoinc:preg_match(',AUTO_INCREMENT,is',$q));
1880
+            $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
1881
+            if ($ai)
1882
+                $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
1883
+            else{
1884
+                $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
1885
+                $query[$k] = _sqlite_collate_ci($query[$k]);
1886
+            }
1887
+        }
1888
+    }
1889
+    return $query;
1890 1890
 }
1891 1891
 
1892 1892
 /**
@@ -1896,14 +1896,14 @@  discard block
 block discarded – undo
1896 1896
  * @return string
1897 1897
  */
1898 1898
 function _sqlite_collate_ci($champ){
1899
-	if (stripos($champ,"COLLATE")!==false)
1900
-		return $champ;
1901
-	if (stripos($champ,"BINARY")!==false)
1902
-		return str_ireplace("BINARY","COLLATE BINARY",$champ);
1903
-	if (preg_match(",^(char|varchar|(long|small|medium|tiny)?text),i",$champ))
1904
-		return $champ . " COLLATE NOCASE";
1905
-
1906
-	return $champ;
1899
+    if (stripos($champ,"COLLATE")!==false)
1900
+        return $champ;
1901
+    if (stripos($champ,"BINARY")!==false)
1902
+        return str_ireplace("BINARY","COLLATE BINARY",$champ);
1903
+    if (preg_match(",^(char|varchar|(long|small|medium|tiny)?text),i",$champ))
1904
+        return $champ . " COLLATE NOCASE";
1905
+
1906
+    return $champ;
1907 1907
 }
1908 1908
 
1909 1909
 
@@ -1924,61 +1924,61 @@  discard block
 block discarded – undo
1924 1924
  * @return bool|string
1925 1925
  */
1926 1926
 function _sqlite_requete_create($nom, $champs, $cles, $autoinc = false, $temporary = false, $_ifnotexists = true, $serveur = '', $requeter = true){
1927
-	$query = $keys = $s = $p = '';
1928
-
1929
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
1930
-	// sans les renseigner (laisse le compilo recuperer la description)
1931
-	if (!is_array($champs) || !is_array($cles))
1932
-		return;
1933
-
1934
-	// sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
1935
-	// il faut passer par des create index
1936
-	// Il gere par contre primary key !
1937
-	// Soit la PK est definie dans les cles, soit dans un champs
1938
-	$c = ""; // le champ de cle primaire
1939
-	if (!isset($cles[$pk = "PRIMARY KEY"]) OR !$c = $cles[$pk]){
1940
-		foreach ($champs as $k => $v){
1941
-			if (false!==stripos($v, $pk)){
1942
-				$c = $k;
1943
-				// on n'en a plus besoin dans field, vu que defini dans key
1944
-				$champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
1945
-				break;
1946
-			}
1947
-		}
1948
-	}
1949
-	if ($c) $keys = "\n\t\t$pk ($c)";
1950
-	// Pas de DEFAULT 0 sur les cles primaires en auto-increment
1951
-	if (isset($champs[$c])
1952
-		AND stripos($champs[$c],"default 0")!==false){
1953
-		$champs[$c] = trim(str_ireplace("default 0","",$champs[$c]));
1954
-	}
1955
-
1956
-	$champs = _sqlite_remplacements_definitions_table($champs, $autoinc?$c:false);
1957
-	foreach ($champs as $k => $v){
1958
-		$query .= "$s\n\t\t$k $v";
1959
-		$s = ",";
1960
-	}
1961
-
1962
-	$ifnotexists = "";
1963
-	if ($_ifnotexists){
1964
-
1965
-		$version = spip_sqlite_fetch(spip_sqlite_query("select sqlite_version() AS sqlite_version",$serveur),'',$serveur);
1966
-		if (!function_exists('spip_version_compare')) include_spip('plugins/installer');
1967
-
1968
-		if ($version AND spip_version_compare($version['sqlite_version'],'3.3.0','>=')) {
1969
-			$ifnotexists = ' IF NOT EXISTS';
1970
-		} else {
1971
-			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
1972
-			$a = spip_sqlite_showtable($table, $serveur);
1973
-			if (isset($a['key']['KEY '.$nom])) return true;
1974
-		}
1975
-
1976
-	}
1977
-
1978
-	$temporary = $temporary ? ' TEMPORARY' : '';
1979
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query".($keys ? ",$keys" : '').")\n";
1980
-
1981
-	return $q;
1927
+    $query = $keys = $s = $p = '';
1928
+
1929
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
1930
+    // sans les renseigner (laisse le compilo recuperer la description)
1931
+    if (!is_array($champs) || !is_array($cles))
1932
+        return;
1933
+
1934
+    // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
1935
+    // il faut passer par des create index
1936
+    // Il gere par contre primary key !
1937
+    // Soit la PK est definie dans les cles, soit dans un champs
1938
+    $c = ""; // le champ de cle primaire
1939
+    if (!isset($cles[$pk = "PRIMARY KEY"]) OR !$c = $cles[$pk]){
1940
+        foreach ($champs as $k => $v){
1941
+            if (false!==stripos($v, $pk)){
1942
+                $c = $k;
1943
+                // on n'en a plus besoin dans field, vu que defini dans key
1944
+                $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
1945
+                break;
1946
+            }
1947
+        }
1948
+    }
1949
+    if ($c) $keys = "\n\t\t$pk ($c)";
1950
+    // Pas de DEFAULT 0 sur les cles primaires en auto-increment
1951
+    if (isset($champs[$c])
1952
+        AND stripos($champs[$c],"default 0")!==false){
1953
+        $champs[$c] = trim(str_ireplace("default 0","",$champs[$c]));
1954
+    }
1955
+
1956
+    $champs = _sqlite_remplacements_definitions_table($champs, $autoinc?$c:false);
1957
+    foreach ($champs as $k => $v){
1958
+        $query .= "$s\n\t\t$k $v";
1959
+        $s = ",";
1960
+    }
1961
+
1962
+    $ifnotexists = "";
1963
+    if ($_ifnotexists){
1964
+
1965
+        $version = spip_sqlite_fetch(spip_sqlite_query("select sqlite_version() AS sqlite_version",$serveur),'',$serveur);
1966
+        if (!function_exists('spip_version_compare')) include_spip('plugins/installer');
1967
+
1968
+        if ($version AND spip_version_compare($version['sqlite_version'],'3.3.0','>=')) {
1969
+            $ifnotexists = ' IF NOT EXISTS';
1970
+        } else {
1971
+            /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
1972
+            $a = spip_sqlite_showtable($table, $serveur);
1973
+            if (isset($a['key']['KEY '.$nom])) return true;
1974
+        }
1975
+
1976
+    }
1977
+
1978
+    $temporary = $temporary ? ' TEMPORARY' : '';
1979
+    $q = "CREATE$temporary TABLE$ifnotexists $nom ($query".($keys ? ",$keys" : '').")\n";
1980
+
1981
+    return $q;
1982 1982
 }
1983 1983
 
1984 1984
 
@@ -1999,31 +1999,31 @@  discard block
 block discarded – undo
1999 1999
  * @return
2000 2000
  */
2001 2001
 function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur = ''){
2002
-	static $tables = array();
2003
-
2004
-	if (!isset($tables[$table])){
2005
-
2006
-		if (!$desc){
2007
-			$trouver_table = charger_fonction('trouver_table', 'base');
2008
-			$desc = $trouver_table($table, $serveur);
2009
-			// si pas de description, on ne fait rien, ou on die() ?
2010
-			if (!$desc) return $couples;
2011
-		}
2012
-
2013
-		// recherche des champs avec simplement 'TIMESTAMP'
2014
-		// cependant, il faudra peut etre etendre
2015
-		// avec la gestion de DEFAULT et ON UPDATE
2016
-		// mais ceux-ci ne sont pas utilises dans le core
2017
-		$tables[$table] = array();
2018
-
2019
-		foreach ($desc['field'] as $k => $v){
2020
-			if (strpos(strtolower(ltrim($v)), 'timestamp')===0)
2021
-				$tables[$table][$k] = "datetime('now')";
2022
-		}
2023
-	}
2024
-
2025
-	// ajout des champs type 'timestamp' absents
2026
-	return array_merge($tables[$table],$couples);
2002
+    static $tables = array();
2003
+
2004
+    if (!isset($tables[$table])){
2005
+
2006
+        if (!$desc){
2007
+            $trouver_table = charger_fonction('trouver_table', 'base');
2008
+            $desc = $trouver_table($table, $serveur);
2009
+            // si pas de description, on ne fait rien, ou on die() ?
2010
+            if (!$desc) return $couples;
2011
+        }
2012
+
2013
+        // recherche des champs avec simplement 'TIMESTAMP'
2014
+        // cependant, il faudra peut etre etendre
2015
+        // avec la gestion de DEFAULT et ON UPDATE
2016
+        // mais ceux-ci ne sont pas utilises dans le core
2017
+        $tables[$table] = array();
2018
+
2019
+        foreach ($desc['field'] as $k => $v){
2020
+            if (strpos(strtolower(ltrim($v)), 'timestamp')===0)
2021
+                $tables[$table][$k] = "datetime('now')";
2022
+        }
2023
+    }
2024
+
2025
+    // ajout des champs type 'timestamp' absents
2026
+    return array_merge($tables[$table],$couples);
2027 2027
 }
2028 2028
 
2029 2029
 
@@ -2035,69 +2035,69 @@  discard block
 block discarded – undo
2035 2035
  * @return array|bool
2036 2036
  */
2037 2037
 function spip_versions_sqlite(){
2038
-	return _sqlite_charger_version();
2038
+    return _sqlite_charger_version();
2039 2039
 }
2040 2040
 
2041 2041
 
2042 2042
 class spip_sqlite {
2043
-	static $requeteurs = array();
2044
-	static $transaction_en_cours = array();
2045
-
2046
-	function spip_sqlite(){}
2047
-
2048
-	/**
2049
-	 * Retourne une unique instance du requêteur
2050
-	 *
2051
-	 * Retourne une instance unique du requêteur pour une connexion SQLite
2052
-	 * donnée
2053
-	 *
2054
-	 * @param string $serveur
2055
-	 * 		Nom du connecteur
2056
-	 * @return sqlite_requeteur
2057
-	 * 		Instance unique du requêteur
2058
-	**/
2059
-	static function requeteur($serveur){
2060
-		if (!isset(spip_sqlite::$requeteurs[$serveur]))
2061
-			spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2062
-		return spip_sqlite::$requeteurs[$serveur];
2063
-	}
2064
-
2065
-	static function traduire_requete($query, $serveur){
2066
-		$requeteur = spip_sqlite::requeteur($serveur);
2067
-		$traducteur = new sqlite_traducteur($query, $requeteur->prefixe,$requeteur->sqlite_version);
2068
-		return $traducteur->traduire_requete();
2069
-	}
2070
-
2071
-	static function demarrer_transaction($serveur){
2072
-		spip_sqlite::executer_requete("BEGIN TRANSACTION",$serveur);
2073
-		spip_sqlite::$transaction_en_cours[$serveur] = true;
2074
-	}
2075
-
2076
-	static function executer_requete($query, $serveur, $tracer=null){
2077
-		$requeteur = spip_sqlite::requeteur($serveur);
2078
-		return $requeteur->executer_requete($query, $tracer);
2079
-	}
2080
-
2081
-	static function last_insert_id($serveur){
2082
-		$requeteur = spip_sqlite::requeteur($serveur);
2083
-		return $requeteur->last_insert_id($serveur);
2084
-	}
2085
-
2086
-	static function annuler_transaction($serveur){
2087
-		spip_sqlite::executer_requete("ROLLBACK",$serveur);
2088
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2089
-	}
2090
-
2091
-	static function finir_transaction($serveur){
2092
-		// si pas de transaction en cours, ne rien faire et le dire
2093
-		if (!isset (spip_sqlite::$transaction_en_cours[$serveur])
2094
-		  OR spip_sqlite::$transaction_en_cours[$serveur]==false)
2095
-			return false;
2096
-		// sinon fermer la transaction et retourner true
2097
-		spip_sqlite::executer_requete("COMMIT",$serveur);
2098
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2099
-		return true;
2100
-	}
2043
+    static $requeteurs = array();
2044
+    static $transaction_en_cours = array();
2045
+
2046
+    function spip_sqlite(){}
2047
+
2048
+    /**
2049
+     * Retourne une unique instance du requêteur
2050
+     *
2051
+     * Retourne une instance unique du requêteur pour une connexion SQLite
2052
+     * donnée
2053
+     *
2054
+     * @param string $serveur
2055
+     * 		Nom du connecteur
2056
+     * @return sqlite_requeteur
2057
+     * 		Instance unique du requêteur
2058
+     **/
2059
+    static function requeteur($serveur){
2060
+        if (!isset(spip_sqlite::$requeteurs[$serveur]))
2061
+            spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2062
+        return spip_sqlite::$requeteurs[$serveur];
2063
+    }
2064
+
2065
+    static function traduire_requete($query, $serveur){
2066
+        $requeteur = spip_sqlite::requeteur($serveur);
2067
+        $traducteur = new sqlite_traducteur($query, $requeteur->prefixe,$requeteur->sqlite_version);
2068
+        return $traducteur->traduire_requete();
2069
+    }
2070
+
2071
+    static function demarrer_transaction($serveur){
2072
+        spip_sqlite::executer_requete("BEGIN TRANSACTION",$serveur);
2073
+        spip_sqlite::$transaction_en_cours[$serveur] = true;
2074
+    }
2075
+
2076
+    static function executer_requete($query, $serveur, $tracer=null){
2077
+        $requeteur = spip_sqlite::requeteur($serveur);
2078
+        return $requeteur->executer_requete($query, $tracer);
2079
+    }
2080
+
2081
+    static function last_insert_id($serveur){
2082
+        $requeteur = spip_sqlite::requeteur($serveur);
2083
+        return $requeteur->last_insert_id($serveur);
2084
+    }
2085
+
2086
+    static function annuler_transaction($serveur){
2087
+        spip_sqlite::executer_requete("ROLLBACK",$serveur);
2088
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2089
+    }
2090
+
2091
+    static function finir_transaction($serveur){
2092
+        // si pas de transaction en cours, ne rien faire et le dire
2093
+        if (!isset (spip_sqlite::$transaction_en_cours[$serveur])
2094
+          OR spip_sqlite::$transaction_en_cours[$serveur]==false)
2095
+            return false;
2096
+        // sinon fermer la transaction et retourner true
2097
+        spip_sqlite::executer_requete("COMMIT",$serveur);
2098
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2099
+        return true;
2100
+    }
2101 2101
 }
2102 2102
 
2103 2103
 /*
@@ -2108,111 +2108,111 @@  discard block
 block discarded – undo
2108 2108
  * 
2109 2109
  */
2110 2110
 class sqlite_requeteur {
2111
-	var $query = ''; // la requete
2112
-	var $serveur = ''; // le serveur
2113
-	var $link = ''; // le link (ressource) sqlite
2114
-	var $prefixe = ''; // le prefixe des tables
2115
-	var $db = ''; // le nom de la base 
2116
-	var $tracer = false; // doit-on tracer les requetes (var_profile)
2117
-
2118
-	var $sqlite_version = ''; // Version de sqlite (2 ou 3)
2119
-
2120
-	/**
2121
-	 * constructeur
2122
-	 * http://doc.spip.org/@sqlite_traiter_requete
2123
-	 *
2124
-	 * @param  $query
2125
-	 * @param string $serveur
2126
-	 * @return bool
2127
-	 */
2128
-	function sqlite_requeteur($serveur = ''){
2129
-		_sqlite_init();
2130
-		$this->serveur = strtolower($serveur);
2131
-
2132
-		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)){
2133
-			spip_log("Aucune connexion sqlite (link)", 'sqlite.'._LOG_ERREUR);
2134
-			return false;
2135
-		}
2136
-
2137
-		$this->sqlite_version = _sqlite_is_version('', $this->link);
2138
-
2139
-		$this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2140
-		$this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2141
-
2142
-		// tracage des requetes ?
2143
-		$this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2144
-	}
2145
-
2146
-	/**
2147
-	 * lancer la requete $query,
2148
-	 * faire le tracage si demande
2149
-	 * http://doc.spip.org/@executer_requete
2150
-	 *
2151
-	 * @return bool|SQLiteResult
2152
-	 */
2153
-	function executer_requete($query, $tracer=null){
2154
-		if (is_null($tracer))
2155
-			$tracer = $this->tracer;
2156
-		$err = "";
2157
-		$t = 0;
2158
-		if ($tracer){
2159
-			include_spip('public/tracer');
2160
-			$t = trace_query_start();
2161
-		}
2111
+    var $query = ''; // la requete
2112
+    var $serveur = ''; // le serveur
2113
+    var $link = ''; // le link (ressource) sqlite
2114
+    var $prefixe = ''; // le prefixe des tables
2115
+    var $db = ''; // le nom de la base 
2116
+    var $tracer = false; // doit-on tracer les requetes (var_profile)
2117
+
2118
+    var $sqlite_version = ''; // Version de sqlite (2 ou 3)
2119
+
2120
+    /**
2121
+     * constructeur
2122
+     * http://doc.spip.org/@sqlite_traiter_requete
2123
+     *
2124
+     * @param  $query
2125
+     * @param string $serveur
2126
+     * @return bool
2127
+     */
2128
+    function sqlite_requeteur($serveur = ''){
2129
+        _sqlite_init();
2130
+        $this->serveur = strtolower($serveur);
2131
+
2132
+        if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)){
2133
+            spip_log("Aucune connexion sqlite (link)", 'sqlite.'._LOG_ERREUR);
2134
+            return false;
2135
+        }
2136
+
2137
+        $this->sqlite_version = _sqlite_is_version('', $this->link);
2138
+
2139
+        $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2140
+        $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2141
+
2142
+        // tracage des requetes ?
2143
+        $this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2144
+    }
2145
+
2146
+    /**
2147
+     * lancer la requete $query,
2148
+     * faire le tracage si demande
2149
+     * http://doc.spip.org/@executer_requete
2150
+     *
2151
+     * @return bool|SQLiteResult
2152
+     */
2153
+    function executer_requete($query, $tracer=null){
2154
+        if (is_null($tracer))
2155
+            $tracer = $this->tracer;
2156
+        $err = "";
2157
+        $t = 0;
2158
+        if ($tracer){
2159
+            include_spip('public/tracer');
2160
+            $t = trace_query_start();
2161
+        }
2162 2162
 		
2163
-		# spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2164
-		if ($this->link){
2165
-			// memoriser la derniere erreur PHP vue
2166
-			$e = (function_exists('error_get_last')?error_get_last():"");
2167
-			// sauver la derniere requete
2168
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2169
-
2170
-			if ($this->sqlite_version==3){
2171
-				$r = $this->link->query($query);
2172
-				// sauvegarde de la requete (elle y est deja dans $r->queryString)
2173
-				# $r->spipQueryString = $query;
2174
-
2175
-				// comptage : oblige de compter le nombre d'entrees retournees 
2176
-				// par une requete SELECT
2177
-				// aucune autre solution ne donne le nombre attendu :( !
2178
-				// particulierement s'il y a des LIMIT dans la requete.
2179
-				if (strtoupper(substr(ltrim($query), 0, 6))=='SELECT'){
2180
-					if ($r){
2181
-						// noter le link et la query pour faire le comptage *si* on en a besoin
2182
-						$r->spipSqliteRowCount = array($this->link,$query);
2183
-					}
2184
-					elseif ($r instanceof PDOStatement) {
2185
-						$r->spipSqliteRowCount = 0;
2186
-					}
2187
-				}
2188
-			}
2189
-			else {
2190
-				$r = sqlite_query($this->link, $query);
2191
-			}
2192
-
2193
-			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2194
-			if ($err = (function_exists('error_get_last')?error_get_last():"") AND $err!=$e){
2195
-				$err = strip_tags($err['message'])." in ".$err['file']." line ".$err['line'];
2196
-				spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2197
-			}
2198
-			else $err = "";
2199
-
2200
-		}
2201
-		else {
2202
-			$r = false;
2203
-		}
2204
-
2205
-		if (spip_sqlite_errno($this->serveur))
2206
-			$err .= spip_sqlite_error($query, $this->serveur);
2207
-		return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2208
-	}
2209
-
2210
-	function last_insert_id(){
2211
-		if ($this->sqlite_version==3)
2212
-			return $this->link->lastInsertId();
2213
-		else
2214
-			return sqlite_last_insert_rowid($this->link);
2215
-	}
2163
+        # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2164
+        if ($this->link){
2165
+            // memoriser la derniere erreur PHP vue
2166
+            $e = (function_exists('error_get_last')?error_get_last():"");
2167
+            // sauver la derniere requete
2168
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2169
+
2170
+            if ($this->sqlite_version==3){
2171
+                $r = $this->link->query($query);
2172
+                // sauvegarde de la requete (elle y est deja dans $r->queryString)
2173
+                # $r->spipQueryString = $query;
2174
+
2175
+                // comptage : oblige de compter le nombre d'entrees retournees 
2176
+                // par une requete SELECT
2177
+                // aucune autre solution ne donne le nombre attendu :( !
2178
+                // particulierement s'il y a des LIMIT dans la requete.
2179
+                if (strtoupper(substr(ltrim($query), 0, 6))=='SELECT'){
2180
+                    if ($r){
2181
+                        // noter le link et la query pour faire le comptage *si* on en a besoin
2182
+                        $r->spipSqliteRowCount = array($this->link,$query);
2183
+                    }
2184
+                    elseif ($r instanceof PDOStatement) {
2185
+                        $r->spipSqliteRowCount = 0;
2186
+                    }
2187
+                }
2188
+            }
2189
+            else {
2190
+                $r = sqlite_query($this->link, $query);
2191
+            }
2192
+
2193
+            // loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2194
+            if ($err = (function_exists('error_get_last')?error_get_last():"") AND $err!=$e){
2195
+                $err = strip_tags($err['message'])." in ".$err['file']." line ".$err['line'];
2196
+                spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2197
+            }
2198
+            else $err = "";
2199
+
2200
+        }
2201
+        else {
2202
+            $r = false;
2203
+        }
2204
+
2205
+        if (spip_sqlite_errno($this->serveur))
2206
+            $err .= spip_sqlite_error($query, $this->serveur);
2207
+        return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2208
+    }
2209
+
2210
+    function last_insert_id(){
2211
+        if ($this->sqlite_version==3)
2212
+            return $this->link->lastInsertId();
2213
+        else
2214
+            return sqlite_last_insert_rowid($this->link);
2215
+    }
2216 2216
 }
2217 2217
 
2218 2218
 
@@ -2222,185 +2222,185 @@  discard block
 block discarded – undo
2222 2222
  * (fonction pour proteger les textes)
2223 2223
  */
2224 2224
 class sqlite_traducteur {
2225
-	var $query = '';
2226
-	var $prefixe = ''; // le prefixe des tables
2227
-	var $sqlite_version = ''; // Version de sqlite (2 ou 3)
2225
+    var $query = '';
2226
+    var $prefixe = ''; // le prefixe des tables
2227
+    var $sqlite_version = ''; // Version de sqlite (2 ou 3)
2228 2228
 	
2229
-	// Pour les corrections a effectuer sur les requetes :
2230
-	var $textes = array(); // array(code=>'texte') trouvé
2231
-
2232
-	function sqlite_traducteur($query, $prefixe, $sqlite_version){
2233
-		$this->query = $query;
2234
-		$this->prefixe = $prefixe;
2235
-		$this->sqlite_version = $sqlite_version;
2236
-	}
2237
-
2238
-	/**
2239
-	 * transformer la requete pour sqlite
2240
-	 * enleve les textes, transforme la requete pour quelle soit
2241
-	 * bien interpretee par sqlite, puis remet les textes
2242
-	 * la fonction affecte $this->query
2243
-	 * http://doc.spip.org/@traduire_requete
2244
-	 *
2245
-	 * @return void
2246
-	 */
2247
-	function traduire_requete(){
2248
-		//
2249
-		// 1) Protection des textes en les remplacant par des codes
2250
-		//
2251
-		// enlever les 'textes' et initialiser avec
2252
-		list($this->query, $textes) = query_echappe_textes($this->query);
2253
-
2254
-		//
2255
-		// 2) Corrections de la requete
2256
-		//
2257
-		// Correction Create Database
2258
-		// Create Database -> requete ignoree
2259
-		if (strpos($this->query, 'CREATE DATABASE')===0){
2260
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.'._LOG_AVERTISSEMENT);
2261
-			$this->query = "SELECT 1";
2262
-		}
2263
-
2264
-		// Correction Insert Ignore
2265
-		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
2266
-		if (strpos($this->query, 'INSERT IGNORE')===0){
2267
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.'._LOG_DEBUG);
2268
-			$this->query = 'INSERT '.substr($this->query, '13');
2269
-		}
2270
-
2271
-		// Correction des dates avec INTERVAL
2272
-		// utiliser sql_date_proche() de preference
2273
-		if (strpos($this->query, 'INTERVAL')!==false){
2274
-			$this->query = preg_replace_callback("/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U",
2275
-			                                     array(&$this, '_remplacerDateParTime'),
2276
-			                                     $this->query);
2277
-		}
2278
-
2279
-		if (strpos($this->query, 'LEFT(')!==false){
2280
-			$this->query = str_replace('LEFT(','_LEFT(',$this->query);
2281
-		}
2282
-
2283
-		if (strpos($this->query, 'TIMESTAMPDIFF(')!==false){
2284
-			$this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims',"TIMESTAMPDIFF('\\1',",$this->query);
2285
-		}
2286
-
2287
-
2288
-		// Correction Using
2289
-		// USING (non reconnu en sqlite2)
2290
-		// problematique car la jointure ne se fait pas du coup.
2291
-		if (($this->sqlite_version==2) && (strpos($this->query, "USING")!==false)){
2292
-			spip_log("'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'", 'sqlite.'._LOG_ERREUR);
2293
-			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
2294
-		}
2295
-
2296
-		// Correction Field
2297
-		// remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
2298
-		if (strpos($this->query, 'FIELD')!==false){
2299
-			$this->query = preg_replace_callback('/FIELD\s*\(([^\)]*)\)/',
2300
-			                                     array(&$this, '_remplacerFieldParCase'),
2301
-			                                     $this->query);
2302
-		}
2303
-
2304
-		// Correction des noms de tables FROM
2305
-		// mettre les bons noms de table dans from, update, insert, replace...
2306
-		if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)){
2307
-			$suite = strstr($this->query, $regs[0]);
2308
-			$this->query = substr($this->query, 0, -strlen($suite));
2309
-		}
2310
-		else
2311
-			$suite = '';
2312
-		$pref = ($this->prefixe) ? $this->prefixe."_" : "";
2313
-		$this->query = preg_replace('/([,\s])spip_/S', '\1'.$pref, $this->query).$suite;
2314
-
2315
-		// Correction zero AS x
2316
-		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style, 
2317
-		// n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
2318
-		// il dit que x ne doit pas être un integer dans le order by !
2319
-		// on remplace du coup x par vide() dans ce cas uniquement
2320
-		//
2321
-		// rien que pour public/vertebrer.php ?
2322
-		if ((strpos($this->query, "0 AS")!==false)){
2323
-			// on ne remplace que dans ORDER BY ou GROUP BY
2324
-			if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)){
2325
-				$suite = strstr($this->query, $regs[0]);
2326
-				$this->query = substr($this->query, 0, -strlen($suite));
2327
-
2328
-				// on cherche les noms des x dans 0 AS x
2329
-				// on remplace dans $suite le nom par vide()
2330
-				preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
2331
-				foreach ($matches[1] as $m){
2332
-					$suite = str_replace($m, 'VIDE()', $suite);
2333
-				}
2334
-				$this->query .= $suite;
2335
-			}
2336
-		}
2337
-
2338
-		// Correction possible des divisions entieres
2339
-		// Le standard SQL (lequel? ou?) semble indiquer que
2340
-		// a/b=c doit donner c entier si a et b sont entiers 4/3=1.
2341
-		// C'est ce que retournent effectivement SQL Server et SQLite
2342
-		// Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
2343
-		// 
2344
-		// On peut forcer la conversion en multipliant par 1.0 avant la division
2345
-		// /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus ! 
2346
-		// cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
2347
-		//     http://www.sqlite.org/cvstrac/tktview?tn=3202
2348
-		// (4*1.0/3) n'est pas rendu dans ce cas !
2349
-		# $this->query = str_replace('/','* 1.00 / ',$this->query);
2350
-
2351
-
2352
-		// Correction critere REGEXP, non reconnu en sqlite2
2353
-		if (($this->sqlite_version==2) && (strpos($this->query, 'REGEXP')!==false)){
2354
-			$this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
2355
-		}
2356
-
2357
-		//
2358
-		// 3) Remise en place des textes d'origine
2359
-		//
2360
-		// Correction Antiquotes et echappements
2361
-		// ` => rien
2362
-		if (strpos($this->query,'`')!==false)
2363
-			$this->query = str_replace('`','', $this->query);
2364
-
2365
-		$this->query = query_reinjecte_textes($this->query, $textes);
2366
-
2367
-		return $this->query;
2368
-	}
2369
-
2370
-
2371
-	/**
2372
-	 * les callbacks
2373
-	 * remplacer DATE_ / INTERVAL par DATE...strtotime
2374
-	 * http://doc.spip.org/@_remplacerDateParTime
2375
-	 *
2376
-	 * @param  $matches
2377
-	 * @return string
2378
-	 */
2379
-	function _remplacerDateParTime($matches){
2380
-		$op = strtoupper($matches[1]=='ADD') ? '+' : '-';
2381
-		return "datetime$matches[2] '$op$matches[3] $matches[4]')";
2382
-	}
2383
-
2384
-	/**
2385
-	 * callback ou l'on remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
2386
-	 * http://doc.spip.org/@_remplacerFieldParCase
2387
-	 *
2388
-	 * @param  $matches
2389
-	 * @return string
2390
-	 */
2391
-	function _remplacerFieldParCase($matches){
2392
-		$fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
2393
-		$t = explode(',', $fields);
2394
-		$index = array_shift($t);
2395
-
2396
-		$res = '';
2397
-		$n = 0;
2398
-		foreach ($t as $v){
2399
-			$n++;
2400
-			$res .= "\nWHEN $index=$v THEN $n";
2401
-		}
2402
-		return "CASE $res ELSE 0 END ";
2403
-	}
2229
+    // Pour les corrections a effectuer sur les requetes :
2230
+    var $textes = array(); // array(code=>'texte') trouvé
2231
+
2232
+    function sqlite_traducteur($query, $prefixe, $sqlite_version){
2233
+        $this->query = $query;
2234
+        $this->prefixe = $prefixe;
2235
+        $this->sqlite_version = $sqlite_version;
2236
+    }
2237
+
2238
+    /**
2239
+     * transformer la requete pour sqlite
2240
+     * enleve les textes, transforme la requete pour quelle soit
2241
+     * bien interpretee par sqlite, puis remet les textes
2242
+     * la fonction affecte $this->query
2243
+     * http://doc.spip.org/@traduire_requete
2244
+     *
2245
+     * @return void
2246
+     */
2247
+    function traduire_requete(){
2248
+        //
2249
+        // 1) Protection des textes en les remplacant par des codes
2250
+        //
2251
+        // enlever les 'textes' et initialiser avec
2252
+        list($this->query, $textes) = query_echappe_textes($this->query);
2253
+
2254
+        //
2255
+        // 2) Corrections de la requete
2256
+        //
2257
+        // Correction Create Database
2258
+        // Create Database -> requete ignoree
2259
+        if (strpos($this->query, 'CREATE DATABASE')===0){
2260
+            spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.'._LOG_AVERTISSEMENT);
2261
+            $this->query = "SELECT 1";
2262
+        }
2263
+
2264
+        // Correction Insert Ignore
2265
+        // INSERT IGNORE -> insert (tout court et pas 'insert or replace')
2266
+        if (strpos($this->query, 'INSERT IGNORE')===0){
2267
+            spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.'._LOG_DEBUG);
2268
+            $this->query = 'INSERT '.substr($this->query, '13');
2269
+        }
2270
+
2271
+        // Correction des dates avec INTERVAL
2272
+        // utiliser sql_date_proche() de preference
2273
+        if (strpos($this->query, 'INTERVAL')!==false){
2274
+            $this->query = preg_replace_callback("/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U",
2275
+                                                    array(&$this, '_remplacerDateParTime'),
2276
+                                                    $this->query);
2277
+        }
2278
+
2279
+        if (strpos($this->query, 'LEFT(')!==false){
2280
+            $this->query = str_replace('LEFT(','_LEFT(',$this->query);
2281
+        }
2282
+
2283
+        if (strpos($this->query, 'TIMESTAMPDIFF(')!==false){
2284
+            $this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims',"TIMESTAMPDIFF('\\1',",$this->query);
2285
+        }
2286
+
2287
+
2288
+        // Correction Using
2289
+        // USING (non reconnu en sqlite2)
2290
+        // problematique car la jointure ne se fait pas du coup.
2291
+        if (($this->sqlite_version==2) && (strpos($this->query, "USING")!==false)){
2292
+            spip_log("'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'", 'sqlite.'._LOG_ERREUR);
2293
+            $this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
2294
+        }
2295
+
2296
+        // Correction Field
2297
+        // remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
2298
+        if (strpos($this->query, 'FIELD')!==false){
2299
+            $this->query = preg_replace_callback('/FIELD\s*\(([^\)]*)\)/',
2300
+                                                    array(&$this, '_remplacerFieldParCase'),
2301
+                                                    $this->query);
2302
+        }
2303
+
2304
+        // Correction des noms de tables FROM
2305
+        // mettre les bons noms de table dans from, update, insert, replace...
2306
+        if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)){
2307
+            $suite = strstr($this->query, $regs[0]);
2308
+            $this->query = substr($this->query, 0, -strlen($suite));
2309
+        }
2310
+        else
2311
+            $suite = '';
2312
+        $pref = ($this->prefixe) ? $this->prefixe."_" : "";
2313
+        $this->query = preg_replace('/([,\s])spip_/S', '\1'.$pref, $this->query).$suite;
2314
+
2315
+        // Correction zero AS x
2316
+        // pg n'aime pas 0+x AS alias, sqlite, dans le meme style, 
2317
+        // n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
2318
+        // il dit que x ne doit pas être un integer dans le order by !
2319
+        // on remplace du coup x par vide() dans ce cas uniquement
2320
+        //
2321
+        // rien que pour public/vertebrer.php ?
2322
+        if ((strpos($this->query, "0 AS")!==false)){
2323
+            // on ne remplace que dans ORDER BY ou GROUP BY
2324
+            if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)){
2325
+                $suite = strstr($this->query, $regs[0]);
2326
+                $this->query = substr($this->query, 0, -strlen($suite));
2327
+
2328
+                // on cherche les noms des x dans 0 AS x
2329
+                // on remplace dans $suite le nom par vide()
2330
+                preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
2331
+                foreach ($matches[1] as $m){
2332
+                    $suite = str_replace($m, 'VIDE()', $suite);
2333
+                }
2334
+                $this->query .= $suite;
2335
+            }
2336
+        }
2337
+
2338
+        // Correction possible des divisions entieres
2339
+        // Le standard SQL (lequel? ou?) semble indiquer que
2340
+        // a/b=c doit donner c entier si a et b sont entiers 4/3=1.
2341
+        // C'est ce que retournent effectivement SQL Server et SQLite
2342
+        // Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
2343
+        // 
2344
+        // On peut forcer la conversion en multipliant par 1.0 avant la division
2345
+        // /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus ! 
2346
+        // cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
2347
+        //     http://www.sqlite.org/cvstrac/tktview?tn=3202
2348
+        // (4*1.0/3) n'est pas rendu dans ce cas !
2349
+        # $this->query = str_replace('/','* 1.00 / ',$this->query);
2350
+
2351
+
2352
+        // Correction critere REGEXP, non reconnu en sqlite2
2353
+        if (($this->sqlite_version==2) && (strpos($this->query, 'REGEXP')!==false)){
2354
+            $this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
2355
+        }
2356
+
2357
+        //
2358
+        // 3) Remise en place des textes d'origine
2359
+        //
2360
+        // Correction Antiquotes et echappements
2361
+        // ` => rien
2362
+        if (strpos($this->query,'`')!==false)
2363
+            $this->query = str_replace('`','', $this->query);
2364
+
2365
+        $this->query = query_reinjecte_textes($this->query, $textes);
2366
+
2367
+        return $this->query;
2368
+    }
2369
+
2370
+
2371
+    /**
2372
+     * les callbacks
2373
+     * remplacer DATE_ / INTERVAL par DATE...strtotime
2374
+     * http://doc.spip.org/@_remplacerDateParTime
2375
+     *
2376
+     * @param  $matches
2377
+     * @return string
2378
+     */
2379
+    function _remplacerDateParTime($matches){
2380
+        $op = strtoupper($matches[1]=='ADD') ? '+' : '-';
2381
+        return "datetime$matches[2] '$op$matches[3] $matches[4]')";
2382
+    }
2383
+
2384
+    /**
2385
+     * callback ou l'on remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
2386
+     * http://doc.spip.org/@_remplacerFieldParCase
2387
+     *
2388
+     * @param  $matches
2389
+     * @return string
2390
+     */
2391
+    function _remplacerFieldParCase($matches){
2392
+        $fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
2393
+        $t = explode(',', $fields);
2394
+        $index = array_shift($t);
2395
+
2396
+        $res = '';
2397
+        $n = 0;
2398
+        foreach ($t as $v){
2399
+            $n++;
2400
+            $res .= "\nWHEN $index=$v THEN $n";
2401
+        }
2402
+        return "CASE $res ELSE 0 END ";
2403
+    }
2404 2404
 
2405 2405
 }
2406 2406
 
Please login to merge, or discard this patch.
ecrire/req/sqlite3.php 1 patch
Indentation   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -21,22 +21,22 @@
 block discarded – undo
21 21
 
22 22
 // http://doc.spip.org/@req_sqlite3_dist
23 23
 function req_sqlite3_dist($addr, $port, $login, $pass, $db='', $prefixe='') {
24
-	return req_sqlite_dist($addr, $port, $login, $pass, $db, $prefixe, $sqlite_version=3);
24
+    return req_sqlite_dist($addr, $port, $login, $pass, $db, $prefixe, $sqlite_version=3);
25 25
 }
26 26
 
27 27
 
28 28
 // http://doc.spip.org/@spip_sqlite3_constantes
29 29
 function spip_sqlite3_constantes(){
30
-	if (!defined('SPIP_SQLITE3_ASSOC')) {
31
-		define('SPIP_SQLITE3_ASSOC', PDO::FETCH_ASSOC);
32
-		define('SPIP_SQLITE3_NUM',   PDO::FETCH_NUM);
33
-		define('SPIP_SQLITE3_BOTH',  PDO::FETCH_BOTH);
34
-	}
30
+    if (!defined('SPIP_SQLITE3_ASSOC')) {
31
+        define('SPIP_SQLITE3_ASSOC', PDO::FETCH_ASSOC);
32
+        define('SPIP_SQLITE3_NUM',   PDO::FETCH_NUM);
33
+        define('SPIP_SQLITE3_BOTH',  PDO::FETCH_BOTH);
34
+    }
35 35
 }
36 36
 
37 37
 function spip_versions_sqlite3()
38 38
 {
39
-	return _sqlite_charger_version(3) ? 3 : false;
39
+    return _sqlite_charger_version(3) ? 3 : false;
40 40
 }
41 41
 
42 42
 ?>
Please login to merge, or discard this patch.
ecrire/req/mysql.php 1 patch
Indentation   +589 added lines, -592 removed lines patch added patch discarded remove patch
@@ -33,75 +33,75 @@  discard block
 block discarded – undo
33 33
  */
34 34
 
35 35
 function req_mysql_dist($host, $port, $login, $pass, $db='', $prefixe='') {
36
-	if (!charger_php_extension('mysql')) return false;
37
-	if ($port > 0) $host = "$host:$port";
38
-	$link = @mysql_connect($host, $login, $pass, true);
39
-	if (!$link) {
40
-		spip_log('Echec mysql_connect. Erreur : ' . mysql_error(),'mysql.'._LOG_HS);
41
-		return false;
42
-	}
43
-	$last = '';
44
-	if (!$db) {
45
-		$ok = $link;
46
-		$db = 'spip';
47
-	} else {
48
-		$ok = spip_mysql_selectdb($db);
49
-		if (defined('_MYSQL_SET_SQL_MODE') 
50
-		  OR defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
51
-		  )
52
-			mysql_query($last = "set sql_mode=''");
53
-	}
54
-	spip_log("Connexion vers $host, base $db, prefixe $prefixe " . ($ok ? "operationnelle sur $link" : 'impossible'), _LOG_DEBUG);
55
-
56
-	return !$ok ? false : array(
57
-		'db' => $db,
58
-		'last' => $last,
59
-		'prefixe' => $prefixe ? $prefixe : $db,
60
-		'link' => $GLOBALS['mysql_rappel_connexion'] ? $link : false,
61
-		);
36
+    if (!charger_php_extension('mysql')) return false;
37
+    if ($port > 0) $host = "$host:$port";
38
+    $link = @mysql_connect($host, $login, $pass, true);
39
+    if (!$link) {
40
+        spip_log('Echec mysql_connect. Erreur : ' . mysql_error(),'mysql.'._LOG_HS);
41
+        return false;
42
+    }
43
+    $last = '';
44
+    if (!$db) {
45
+        $ok = $link;
46
+        $db = 'spip';
47
+    } else {
48
+        $ok = spip_mysql_selectdb($db);
49
+        if (defined('_MYSQL_SET_SQL_MODE') 
50
+          OR defined('_MYSQL_SQL_MODE_TEXT_NOT_NULL') // compatibilite
51
+            )
52
+            mysql_query($last = "set sql_mode=''");
53
+    }
54
+    spip_log("Connexion vers $host, base $db, prefixe $prefixe " . ($ok ? "operationnelle sur $link" : 'impossible'), _LOG_DEBUG);
55
+
56
+    return !$ok ? false : array(
57
+        'db' => $db,
58
+        'last' => $last,
59
+        'prefixe' => $prefixe ? $prefixe : $db,
60
+        'link' => $GLOBALS['mysql_rappel_connexion'] ? $link : false,
61
+        );
62 62
 }
63 63
 
64 64
 $GLOBALS['spip_mysql_functions_1'] = array(
65
-		'alter' => 'spip_mysql_alter',
66
-		'count' => 'spip_mysql_count',
67
-		'countsel' => 'spip_mysql_countsel',
68
-		'create' => 'spip_mysql_create',
69
-		'create_base' => 'spip_mysql_create_base',
70
-		'create_view' => 'spip_mysql_create_view',
71
-		'date_proche' => 'spip_mysql_date_proche',
72
-		'delete' => 'spip_mysql_delete',
73
-		'drop_table' => 'spip_mysql_drop_table',
74
-		'drop_view' => 'spip_mysql_drop_view',
75
-		'errno' => 'spip_mysql_errno',
76
-		'error' => 'spip_mysql_error',
77
-		'explain' => 'spip_mysql_explain',
78
-		'fetch' => 'spip_mysql_fetch',
79
-		'seek' => 'spip_mysql_seek',
80
-		'free' => 'spip_mysql_free',
81
-		'hex' => 'spip_mysql_hex',
82
-		'in' => 'spip_mysql_in', 
83
-		'insert' => 'spip_mysql_insert',
84
-		'insertq' => 'spip_mysql_insertq',
85
-		'insertq_multi' => 'spip_mysql_insertq_multi',
86
-		'listdbs' => 'spip_mysql_listdbs',
87
-		'multi' => 'spip_mysql_multi',
88
-		'optimize' => 'spip_mysql_optimize',
89
-		'query' => 'spip_mysql_query',
90
-		'quote' => 'spip_mysql_quote',
91
-		'replace' => 'spip_mysql_replace',
92
-		'replace_multi' => 'spip_mysql_replace_multi',
93
-		'repair' => 'spip_mysql_repair',
94
-		'select' => 'spip_mysql_select',
95
-		'selectdb' => 'spip_mysql_selectdb',
96
-		'set_charset' => 'spip_mysql_set_charset',
97
-		'get_charset' => 'spip_mysql_get_charset',
98
-		'showbase' => 'spip_mysql_showbase',
99
-		'showtable' => 'spip_mysql_showtable',
100
-		'update' => 'spip_mysql_update',
101
-		'updateq' => 'spip_mysql_updateq',
102
-
103
-  // association de chaque nom http d'un charset aux couples MySQL 
104
-		'charsets' => array(
65
+        'alter' => 'spip_mysql_alter',
66
+        'count' => 'spip_mysql_count',
67
+        'countsel' => 'spip_mysql_countsel',
68
+        'create' => 'spip_mysql_create',
69
+        'create_base' => 'spip_mysql_create_base',
70
+        'create_view' => 'spip_mysql_create_view',
71
+        'date_proche' => 'spip_mysql_date_proche',
72
+        'delete' => 'spip_mysql_delete',
73
+        'drop_table' => 'spip_mysql_drop_table',
74
+        'drop_view' => 'spip_mysql_drop_view',
75
+        'errno' => 'spip_mysql_errno',
76
+        'error' => 'spip_mysql_error',
77
+        'explain' => 'spip_mysql_explain',
78
+        'fetch' => 'spip_mysql_fetch',
79
+        'seek' => 'spip_mysql_seek',
80
+        'free' => 'spip_mysql_free',
81
+        'hex' => 'spip_mysql_hex',
82
+        'in' => 'spip_mysql_in', 
83
+        'insert' => 'spip_mysql_insert',
84
+        'insertq' => 'spip_mysql_insertq',
85
+        'insertq_multi' => 'spip_mysql_insertq_multi',
86
+        'listdbs' => 'spip_mysql_listdbs',
87
+        'multi' => 'spip_mysql_multi',
88
+        'optimize' => 'spip_mysql_optimize',
89
+        'query' => 'spip_mysql_query',
90
+        'quote' => 'spip_mysql_quote',
91
+        'replace' => 'spip_mysql_replace',
92
+        'replace_multi' => 'spip_mysql_replace_multi',
93
+        'repair' => 'spip_mysql_repair',
94
+        'select' => 'spip_mysql_select',
95
+        'selectdb' => 'spip_mysql_selectdb',
96
+        'set_charset' => 'spip_mysql_set_charset',
97
+        'get_charset' => 'spip_mysql_get_charset',
98
+        'showbase' => 'spip_mysql_showbase',
99
+        'showtable' => 'spip_mysql_showtable',
100
+        'update' => 'spip_mysql_update',
101
+        'updateq' => 'spip_mysql_updateq',
102
+
103
+    // association de chaque nom http d'un charset aux couples MySQL 
104
+        'charsets' => array(
105 105
 'cp1250'=>array('charset'=>'cp1250','collation'=>'cp1250_general_ci'),
106 106
 'cp1251'=>array('charset'=>'cp1251','collation'=>'cp1251_general_ci'),
107 107
 'cp1256'=>array('charset'=>'cp1256','collation'=>'cp1256_general_ci'),
@@ -110,7 +110,7 @@  discard block
 block discarded – undo
110 110
 'iso-8859-9'=>array('charset'=>'latin5','collation'=>'latin5_turkish_ci'),
111 111
 //'iso-8859-15'=>array('charset'=>'latin1','collation'=>'latin1_swedish_ci'),
112 112
 'utf-8'=>array('charset'=>'utf8','collation'=>'utf8_general_ci'))
113
-		);
113
+        );
114 114
 
115 115
 
116 116
 /**
@@ -122,9 +122,9 @@  discard block
 block discarded – undo
122 122
  * @return resource       Ressource de résultats pour fetch()
123 123
  */
124 124
 function spip_mysql_set_charset($charset, $serveur='',$requeter=true){
125
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
126
-	spip_log("changement de charset sql : "."SET NAMES "._q($charset), _LOG_DEBUG);
127
-	return mysql_query($connexion['last'] = "SET NAMES "._q($charset));
125
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
126
+    spip_log("changement de charset sql : "."SET NAMES "._q($charset), _LOG_DEBUG);
127
+    return mysql_query($connexion['last'] = "SET NAMES "._q($charset));
128 128
 }
129 129
 
130 130
 
@@ -137,24 +137,23 @@  discard block
 block discarded – undo
137 137
  * @return array                Description du charset (son nom est dans 'charset')
138 138
  */
139 139
 function spip_mysql_get_charset($charset=array(), $serveur='',$requeter=true){
140
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
141
-	$connexion['last'] = $c = "SHOW CHARACTER SET"
142
-	. (!$charset ? '' : (" LIKE "._q($charset['charset'])));
140
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
141
+    $connexion['last'] = $c = "SHOW CHARACTER SET"
142
+    . (!$charset ? '' : (" LIKE "._q($charset['charset'])));
143 143
 
144
-	return spip_mysql_fetch(mysql_query($c), NULL, $serveur);
144
+    return spip_mysql_fetch(mysql_query($c), NULL, $serveur);
145 145
 }
146 146
 
147 147
 // obsolete, ne plus utiliser
148 148
 // http://doc.spip.org/@spip_query_db
149 149
 function spip_query_db($query, $serveur='',$requeter=true) {
150
-	return spip_mysql_query($query, $serveur, $requeter);
150
+    return spip_mysql_query($query, $serveur, $requeter);
151 151
 }
152 152
 
153 153
 // Fonction de requete generale, munie d'une trace a la demande
154 154
 
155 155
 // http://doc.spip.org/@spip_mysql_query
156 156
 /**
157
-
158 157
  * @param $query
159 158
  * @param string $serveur
160 159
  * @param bool $requeter
@@ -163,39 +162,39 @@  discard block
 block discarded – undo
163 162
  */
164 163
 function spip_mysql_query($query, $serveur='',$requeter=true) {
165 164
 
166
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
167
-	$prefixe = $connexion['prefixe'];
168
-	$link = $connexion['link'];
169
-	$db = $connexion['db'];
165
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
166
+    $prefixe = $connexion['prefixe'];
167
+    $link = $connexion['link'];
168
+    $db = $connexion['db'];
170 169
 
171
-	$query = traite_query($query, $db, $prefixe);
170
+    $query = traite_query($query, $db, $prefixe);
172 171
 
173
-	// renvoyer la requete inerte si demandee
174
-	if (!$requeter) return $query;
172
+    // renvoyer la requete inerte si demandee
173
+    if (!$requeter) return $query;
175 174
 
176
-	if (isset($_GET['var_profile'])) {
177
-		include_spip('public/tracer');
178
-		$t = trace_query_start();
179
-	} else $t = 0 ;
175
+    if (isset($_GET['var_profile'])) {
176
+        include_spip('public/tracer');
177
+        $t = trace_query_start();
178
+    } else $t = 0 ;
180 179
  
181
-	$connexion['last'] = $query;
182
-
183
-	// ajouter un debug utile dans log/mysql-slow.log ?
184
-	$debug = '';
185
-	if (defined('_DEBUG_SLOW_QUERIES') AND _DEBUG_SLOW_QUERIES){
186
-		if(isset($GLOBALS['debug']['aucasou'])){
187
-			list(,$id,, $infos) = $GLOBALS['debug']['aucasou'];
188
-			$debug .= "BOUCLE$id @ ".$infos[0] ." | ";
189
-		}
190
-		$debug .= $_SERVER['REQUEST_URI'].' + '.$GLOBALS['ip'];
191
-		$debug = ' /* '. mysql_real_escape_string(str_replace('*/','@/',$debug)). ' */';
192
-	}
193
-
194
-	$r = $link ? mysql_query($query.$debug, $link) : mysql_query($query.$debug);
195
-
196
-	if ($e = spip_mysql_errno($serveur))	// Log de l'erreur eventuelle
197
-		$e .= spip_mysql_error($query, $serveur); // et du fautif
198
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
180
+    $connexion['last'] = $query;
181
+
182
+    // ajouter un debug utile dans log/mysql-slow.log ?
183
+    $debug = '';
184
+    if (defined('_DEBUG_SLOW_QUERIES') AND _DEBUG_SLOW_QUERIES){
185
+        if(isset($GLOBALS['debug']['aucasou'])){
186
+            list(,$id,, $infos) = $GLOBALS['debug']['aucasou'];
187
+            $debug .= "BOUCLE$id @ ".$infos[0] ." | ";
188
+        }
189
+        $debug .= $_SERVER['REQUEST_URI'].' + '.$GLOBALS['ip'];
190
+        $debug = ' /* '. mysql_real_escape_string(str_replace('*/','@/',$debug)). ' */';
191
+    }
192
+
193
+    $r = $link ? mysql_query($query.$debug, $link) : mysql_query($query.$debug);
194
+
195
+    if ($e = spip_mysql_errno($serveur))	// Log de l'erreur eventuelle
196
+        $e .= spip_mysql_error($query, $serveur); // et du fautif
197
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
199 198
 }
200 199
 
201 200
 // http://doc.spip.org/@spip_mysql_alter
@@ -206,11 +205,11 @@  discard block
 block discarded – undo
206 205
  * @return array|null|resource|string
207 206
  */
208 207
 function spip_mysql_alter($query, $serveur='',$requeter=true){
209
-	// ici on supprime les ` entourant le nom de table pour permettre
210
-	// la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
211
-	// d'utiliser ceux-ci, copie-colle de phpmyadmin
212
-	$query = preg_replace(",^TABLE\s*`([^`]*)`,i","TABLE \\1",$query);
213
-	return spip_mysql_query("ALTER ".$query, $serveur, $requeter); # i.e. que PG se debrouille
208
+    // ici on supprime les ` entourant le nom de table pour permettre
209
+    // la transposition du prefixe, compte tenu que les plugins ont la mauvaise habitude
210
+    // d'utiliser ceux-ci, copie-colle de phpmyadmin
211
+    $query = preg_replace(",^TABLE\s*`([^`]*)`,i","TABLE \\1",$query);
212
+    return spip_mysql_query("ALTER ".$query, $serveur, $requeter); # i.e. que PG se debrouille
214 213
 }
215 214
 
216 215
 // http://doc.spip.org/@spip_mysql_optimize
@@ -221,8 +220,8 @@  discard block
 block discarded – undo
221 220
  * @return bool
222 221
  */
223 222
 function spip_mysql_optimize($table, $serveur='',$requeter=true){
224
-	spip_mysql_query("OPTIMIZE TABLE ". $table);
225
-	return true;
223
+    spip_mysql_query("OPTIMIZE TABLE ". $table);
224
+    return true;
226 225
 }
227 226
 
228 227
 // http://doc.spip.org/@spip_mysql_explain
@@ -233,15 +232,15 @@  discard block
 block discarded – undo
233 232
  * @return array
234 233
  */
235 234
 function spip_mysql_explain($query, $serveur='',$requeter=true){
236
-	if (strpos(ltrim($query), 'SELECT') !== 0) return array();
237
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
238
-	$prefixe = $connexion['prefixe'];
239
-	$link = $connexion['link'];
240
-	$db = $connexion['db'];
241
-
242
-	$query = 'EXPLAIN ' . traite_query($query, $db, $prefixe);
243
-	$r = $link ? mysql_query($query, $link) : mysql_query($query);
244
-	return spip_mysql_fetch($r, NULL, $serveur);
235
+    if (strpos(ltrim($query), 'SELECT') !== 0) return array();
236
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
237
+    $prefixe = $connexion['prefixe'];
238
+    $link = $connexion['link'];
239
+    $db = $connexion['db'];
240
+
241
+    $query = 'EXPLAIN ' . traite_query($query, $db, $prefixe);
242
+    $r = $link ? mysql_query($query, $link) : mysql_query($query);
243
+    return spip_mysql_fetch($r, NULL, $serveur);
245 244
 }
246 245
 // fonction  instance de sql_select, voir ses specs dans abstract.php
247 246
 // traite_query pourrait y etre fait d'avance ce serait moins cher
@@ -262,24 +261,24 @@  discard block
 block discarded – undo
262 261
  * @return array|null|resource|string
263 262
  */
264 263
 function spip_mysql_select($select, $from, $where='',
265
-			   $groupby='', $orderby='', $limit='', $having='',
266
-			   $serveur='',$requeter=true) {
267
-
268
-
269
-	$from = (!is_array($from) ? $from : spip_mysql_select_as($from));
270
-	$query = 
271
-		  calculer_mysql_expression('SELECT', $select, ', ')
272
-		. calculer_mysql_expression('FROM', $from, ', ')
273
-		. calculer_mysql_expression('WHERE', $where)
274
-		. calculer_mysql_expression('GROUP BY', $groupby, ',')
275
-		. calculer_mysql_expression('HAVING', $having)
276
-		. ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) :'')
277
-		. ($limit ? "\nLIMIT $limit" : '');
278
-
279
-	// renvoyer la requete inerte si demandee
280
-	if ($requeter === false) return $query;
281
-	$r = spip_mysql_query($query, $serveur, $requeter);
282
-	return $r ? $r : $query;
264
+                $groupby='', $orderby='', $limit='', $having='',
265
+                $serveur='',$requeter=true) {
266
+
267
+
268
+    $from = (!is_array($from) ? $from : spip_mysql_select_as($from));
269
+    $query = 
270
+            calculer_mysql_expression('SELECT', $select, ', ')
271
+        . calculer_mysql_expression('FROM', $from, ', ')
272
+        . calculer_mysql_expression('WHERE', $where)
273
+        . calculer_mysql_expression('GROUP BY', $groupby, ',')
274
+        . calculer_mysql_expression('HAVING', $having)
275
+        . ($orderby ? ("\nORDER BY " . spip_mysql_order($orderby)) :'')
276
+        . ($limit ? "\nLIMIT $limit" : '');
277
+
278
+    // renvoyer la requete inerte si demandee
279
+    if ($requeter === false) return $query;
280
+    $r = spip_mysql_query($query, $serveur, $requeter);
281
+    return $r ? $r : $query;
283 282
 }
284 283
 
285 284
 // 0+x avec un champ x commencant par des chiffres est converti par MySQL
@@ -293,7 +292,7 @@  discard block
 block discarded – undo
293 292
  */
294 293
 function spip_mysql_order($orderby)
295 294
 {
296
-	return (is_array($orderby)) ? join(", ", $orderby) :  $orderby;
295
+    return (is_array($orderby)) ? join(", ", $orderby) :  $orderby;
297 296
 }
298 297
 
299 298
 
@@ -304,23 +303,23 @@  discard block
 block discarded – undo
304 303
  */
305 304
 function calculer_mysql_where($v)
306 305
 {
307
-	if (!is_array($v))
308
-	  return $v ;
309
-
310
-	$op = array_shift($v);
311
-	if (!($n=count($v)))
312
-		return $op;
313
-	else {
314
-		$arg = calculer_mysql_where(array_shift($v));
315
-		if ($n==1) {
316
-			  return "$op($arg)";
317
-		} else {
318
-			$arg2 = calculer_mysql_where(array_shift($v));
319
-			if ($n==2) {
320
-				return "($arg $op $arg2)";
321
-			} else return "($arg $op ($arg2) : $v[0])";
322
-		}
323
-	}
306
+    if (!is_array($v))
307
+        return $v ;
308
+
309
+    $op = array_shift($v);
310
+    if (!($n=count($v)))
311
+        return $op;
312
+    else {
313
+        $arg = calculer_mysql_where(array_shift($v));
314
+        if ($n==1) {
315
+                return "$op($arg)";
316
+        } else {
317
+            $arg2 = calculer_mysql_where(array_shift($v));
318
+            if ($n==2) {
319
+                return "($arg $op $arg2)";
320
+            } else return "($arg $op ($arg2) : $v[0])";
321
+        }
322
+    }
324 323
 }
325 324
 
326 325
 // http://doc.spip.org/@calculer_mysql_expression
@@ -331,19 +330,19 @@  discard block
 block discarded – undo
331 330
  * @return string
332 331
  */
333 332
 function calculer_mysql_expression($expression, $v, $join = 'AND'){
334
-	if (empty($v))
335
-		return '';
333
+    if (empty($v))
334
+        return '';
336 335
 	
337
-	$exp = "\n$expression ";
336
+    $exp = "\n$expression ";
338 337
 	
339
-	if (!is_array($v)) {
340
-		return $exp . $v;
341
-	} else {
342
-		if (strtoupper($join) === 'AND')
343
-			return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
344
-		else
345
-			return $exp . join($join, $v);
346
-	}
338
+    if (!is_array($v)) {
339
+        return $exp . $v;
340
+    } else {
341
+        if (strtoupper($join) === 'AND')
342
+            return $exp . join("\n\t$join ", array_map('calculer_mysql_where', $v));
343
+        else
344
+            return $exp . join($join, $v);
345
+    }
347 346
 }
348 347
 
349 348
 // http://doc.spip.org/@spip_mysql_select_as
@@ -353,25 +352,25 @@  discard block
 block discarded – undo
353 352
  */
354 353
 function spip_mysql_select_as($args)
355 354
 {
356
-	$res = '';
357
-	foreach($args as $k => $v) {
358
-		if (substr($k,-1)=='@') {
359
-			// c'est une jointure qui se refere au from precedent
360
-			// pas de virgule
361
-		  $res .= '  ' . $v ;
362
-		}
363
-		else {
364
-		  if (!is_numeric($k)) {
365
-		  	$p = strpos($v, " ");
366
-			if ($p)
367
-			  $v = substr($v,0,$p) . " AS `$k`" . substr($v,$p);
368
-			else $v .= " AS `$k`";
369
-		  }
355
+    $res = '';
356
+    foreach($args as $k => $v) {
357
+        if (substr($k,-1)=='@') {
358
+            // c'est une jointure qui se refere au from precedent
359
+            // pas de virgule
360
+            $res .= '  ' . $v ;
361
+        }
362
+        else {
363
+            if (!is_numeric($k)) {
364
+                $p = strpos($v, " ");
365
+            if ($p)
366
+                $v = substr($v,0,$p) . " AS `$k`" . substr($v,$p);
367
+            else $v .= " AS `$k`";
368
+            }
370 369
 		      
371
-		  $res .= ', ' . $v ;
372
-		}
373
-	}
374
-	return substr($res,2);
370
+            $res .= ', ' . $v ;
371
+        }
372
+    }
373
+    return substr($res,2);
375 374
 }
376 375
 
377 376
 //
@@ -389,32 +388,32 @@  discard block
 block discarded – undo
389 388
  */
390 389
 function traite_query($query, $db='', $prefixe='') {
391 390
 
392
-	if ($GLOBALS['mysql_rappel_nom_base'] AND $db)
393
-		$pref = '`'. $db.'`.';
394
-	else $pref = '';
395
-
396
-	if ($prefixe)
397
-		$pref .= $prefixe . "_";
398
-
399
-	if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
400
-		$suite ='';
401
-	} else {
402
-		$suite = strstr($query, $regs[0]);
403
-		$query = substr($query, 0, -strlen($suite));
404
-		// propager le prefixe en cas de requete imbriquee
405
-		// il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
406
-		// modifier une requete qui est en fait juste du texte dans un champ
407
-		if (stripos($suite,"SELECT")!==false) {
408
-			list($suite,$textes) = query_echappe_textes($suite);
409
-			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r))
410
-		    $suite = $r[1] . traite_query($r[2], $db, $prefixe);
411
-			$suite = query_reinjecte_textes($suite, $textes);
412
-		}
413
-	}
414
-	$r = preg_replace(_SQL_PREFIXE_TABLE, '\1'.$pref, $query) . $suite;
415
-
416
-	#spip_log("traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
417
-	return $r;
391
+    if ($GLOBALS['mysql_rappel_nom_base'] AND $db)
392
+        $pref = '`'. $db.'`.';
393
+    else $pref = '';
394
+
395
+    if ($prefixe)
396
+        $pref .= $prefixe . "_";
397
+
398
+    if (!preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
399
+        $suite ='';
400
+    } else {
401
+        $suite = strstr($query, $regs[0]);
402
+        $query = substr($query, 0, -strlen($suite));
403
+        // propager le prefixe en cas de requete imbriquee
404
+        // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
405
+        // modifier une requete qui est en fait juste du texte dans un champ
406
+        if (stripos($suite,"SELECT")!==false) {
407
+            list($suite,$textes) = query_echappe_textes($suite);
408
+            if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r))
409
+            $suite = $r[1] . traite_query($r[2], $db, $prefixe);
410
+            $suite = query_reinjecte_textes($suite, $textes);
411
+        }
412
+    }
413
+    $r = preg_replace(_SQL_PREFIXE_TABLE, '\1'.$pref, $query) . $suite;
414
+
415
+    #spip_log("traite_query: " . substr($r,0, 50) . ".... $db, $prefixe", _LOG_DEBUG);
416
+    return $r;
418 417
 }
419 418
 
420 419
 /**
@@ -428,10 +427,10 @@  discard block
 block discarded – undo
428 427
  * 		False en cas d'erreur.
429 428
 **/
430 429
 function spip_mysql_selectdb($db) {
431
-	$ok = mysql_select_db($db);
432
-	if (!$ok)
433
-		spip_log('Echec mysql_selectdb. Erreur : ' . mysql_error(),'mysql.'._LOG_CRITIQUE);
434
-	return $ok;
430
+    $ok = mysql_select_db($db);
431
+    if (!$ok)
432
+        spip_log('Echec mysql_selectdb. Erreur : ' . mysql_error(),'mysql.'._LOG_CRITIQUE);
433
+    return $ok;
435 434
 }
436 435
 
437 436
 
@@ -451,12 +450,12 @@  discard block
 block discarded – undo
451 450
  * 		Liste de noms de bases de donnees
452 451
 **/
453 452
 function spip_mysql_listdbs($serveur='',$requeter=true) {
454
-	$dbs = array();
455
-	if ($res = spip_mysql_query("SHOW DATABASES")){
456
-		while($row = mysql_fetch_assoc($res))
457
-			$dbs[] = $row['Database'];
458
-	}
459
-	return $dbs;
453
+    $dbs = array();
454
+    if ($res = spip_mysql_query("SHOW DATABASES")){
455
+        while($row = mysql_fetch_assoc($res))
456
+            $dbs[] = $row['Database'];
457
+    }
458
+    return $dbs;
460 459
 }
461 460
 
462 461
 // Fonction de creation d'une table SQL nommee $nom
@@ -479,53 +478,53 @@  discard block
 block discarded – undo
479 478
  */
480 479
 function spip_mysql_create($nom, $champs, $cles, $autoinc=false, $temporary=false, $serveur='',$requeter=true) {
481 480
 
482
-	$query = ''; $keys = ''; $s = ''; $p='';
483
-
484
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
485
-	// sans les renseigner (laisse le compilo recuperer la description)
486
-	if (!is_array($champs) || !is_array($cles)) 
487
-		return;
488
-
489
-	$res = spip_mysql_query("SELECT version() as v");
490
-	if (($row = mysql_fetch_array($res)) && (version_compare($row['v'],'5.0','>='))) {
491
-		spip_mysql_query("SET sql_mode=''", $serveur);
492
-	}
493
-
494
-	foreach($cles as $k => $v) {
495
-		$keys .= "$s\n\t\t$k ($v)";
496
-		if ($k == "PRIMARY KEY")
497
-			$p = $v;
498
-		$s = ",";
499
-	}
500
-	$s = '';
481
+    $query = ''; $keys = ''; $s = ''; $p='';
482
+
483
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
484
+    // sans les renseigner (laisse le compilo recuperer la description)
485
+    if (!is_array($champs) || !is_array($cles)) 
486
+        return;
487
+
488
+    $res = spip_mysql_query("SELECT version() as v");
489
+    if (($row = mysql_fetch_array($res)) && (version_compare($row['v'],'5.0','>='))) {
490
+        spip_mysql_query("SET sql_mode=''", $serveur);
491
+    }
492
+
493
+    foreach($cles as $k => $v) {
494
+        $keys .= "$s\n\t\t$k ($v)";
495
+        if ($k == "PRIMARY KEY")
496
+            $p = $v;
497
+        $s = ",";
498
+    }
499
+    $s = '';
501 500
 	
502
-	$character_set = "";
503
-	if (@$GLOBALS['meta']['charset_sql_base'])
504
-		$character_set .= " CHARACTER SET ".$GLOBALS['meta']['charset_sql_base'];
505
-	if (@$GLOBALS['meta']['charset_collation_sql_base'])
506
-		$character_set .= " COLLATE ".$GLOBALS['meta']['charset_collation_sql_base'];
507
-
508
-	foreach($champs as $k => $v) {
509
-		$v = _mysql_remplacements_definitions_table($v);
510
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i',$v,$defs)){
511
-			if (preg_match(',(char|text),i',$defs[1])
512
-				AND !preg_match(',(binary|CHARACTER|COLLATE),i',$v) ){
513
-				$v = $defs[1] . $character_set . ' ' . substr($v,strlen($defs[1]));
514
-			}
515
-		}
516
-
517
-		$query .= "$s\n\t\t$k $v"
518
-			. (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
519
-				? " auto_increment"
520
-				: ''
521
-			);
522
-		$s = ",";
523
-	}
524
-	$temporary = $temporary ? 'TEMPORARY':'';
525
-	$q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ")".
526
-	($character_set?" DEFAULT $character_set":"")
527
-	."\n";
528
-	return spip_mysql_query($q, $serveur);
501
+    $character_set = "";
502
+    if (@$GLOBALS['meta']['charset_sql_base'])
503
+        $character_set .= " CHARACTER SET ".$GLOBALS['meta']['charset_sql_base'];
504
+    if (@$GLOBALS['meta']['charset_collation_sql_base'])
505
+        $character_set .= " COLLATE ".$GLOBALS['meta']['charset_collation_sql_base'];
506
+
507
+    foreach($champs as $k => $v) {
508
+        $v = _mysql_remplacements_definitions_table($v);
509
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i',$v,$defs)){
510
+            if (preg_match(',(char|text),i',$defs[1])
511
+                AND !preg_match(',(binary|CHARACTER|COLLATE),i',$v) ){
512
+                $v = $defs[1] . $character_set . ' ' . substr($v,strlen($defs[1]));
513
+            }
514
+        }
515
+
516
+        $query .= "$s\n\t\t$k $v"
517
+            . (($autoinc && ($p == $k) && preg_match(',\b(big|small|medium)?int\b,i', $v))
518
+                ? " auto_increment"
519
+                : ''
520
+            );
521
+        $s = ",";
522
+    }
523
+    $temporary = $temporary ? 'TEMPORARY':'';
524
+    $q = "CREATE $temporary TABLE IF NOT EXISTS $nom ($query" . ($keys ? ",$keys" : '') . ")".
525
+    ($character_set?" DEFAULT $character_set":"")
526
+    ."\n";
527
+    return spip_mysql_query($q, $serveur);
529 528
 }
530 529
 
531 530
 
@@ -538,16 +537,16 @@  discard block
 block discarded – undo
538 537
  * 		Definition SQL adaptee pour MySQL d'un champ de table
539 538
  */
540 539
 function _mysql_remplacements_definitions_table($query){
541
-	// quelques remplacements
542
-	$num = "(\s*\([0-9]*\))?";
543
-	$enum = "(\s*\([^\)]*\))?";
540
+    // quelques remplacements
541
+    $num = "(\s*\([0-9]*\))?";
542
+    $enum = "(\s*\([^\)]*\))?";
544 543
 
545
-	$remplace = array(
546
-		'/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
547
-	);
544
+    $remplace = array(
545
+        '/VARCHAR(\s*[^\s\(])/is' => 'VARCHAR(255)\\1',
546
+    );
548 547
 
549
-	$query = preg_replace(array_keys($remplace), $remplace, $query);
550
-	return $query;
548
+    $query = preg_replace(array_keys($remplace), $remplace, $query);
549
+    return $query;
551 550
 }
552 551
 
553 552
 /**
@@ -557,7 +556,7 @@  discard block
 block discarded – undo
557 556
  * @return array|null|resource|string
558 557
  */
559 558
 function spip_mysql_create_base($nom, $serveur='',$requeter=true) {
560
-  return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
559
+    return spip_mysql_query("CREATE DATABASE `$nom`", $serveur, $requeter);
561 560
 }
562 561
 
563 562
 // Fonction de creation d'une vue SQL nommee $nom
@@ -570,15 +569,15 @@  discard block
 block discarded – undo
570 569
  * @return array|bool|null|resource|string
571 570
  */
572 571
 function spip_mysql_create_view($nom, $query_select, $serveur='',$requeter=true) {
573
-	if (!$query_select) return false;
574
-	// vue deja presente
575
-	if (sql_showtable($nom, false, $serveur)) {
576
-		spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
577
-		return false;
578
-	}
572
+    if (!$query_select) return false;
573
+    // vue deja presente
574
+    if (sql_showtable($nom, false, $serveur)) {
575
+        spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", _LOG_ERREUR);
576
+        return false;
577
+    }
579 578
 	
580
-	$query = "CREATE VIEW $nom AS ". $query_select;
581
-	return spip_mysql_query($query, $serveur, $requeter);
579
+    $query = "CREATE VIEW $nom AS ". $query_select;
580
+    return spip_mysql_query($query, $serveur, $requeter);
582 581
 }
583 582
 
584 583
 
@@ -592,8 +591,8 @@  discard block
 block discarded – undo
592 591
  */
593 592
 function spip_mysql_drop_table($table, $exist='', $serveur='',$requeter=true)
594 593
 {
595
-	if ($exist) $exist =" IF EXISTS";
596
-	return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
594
+    if ($exist) $exist =" IF EXISTS";
595
+    return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
597 596
 }
598 597
 
599 598
 // supprime une vue 
@@ -606,8 +605,8 @@  discard block
 block discarded – undo
606 605
  * @return array|null|resource|string
607 606
  */
608 607
 function spip_mysql_drop_view($view, $exist='', $serveur='',$requeter=true) {
609
-	if ($exist) $exist =" IF EXISTS";
610
-	return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
608
+    if ($exist) $exist =" IF EXISTS";
609
+    return spip_mysql_query("DROP VIEW$exist $view", $serveur, $requeter);
611 610
 }
612 611
 
613 612
 /**
@@ -625,7 +624,7 @@  discard block
 block discarded – undo
625 624
 **/
626 625
 function spip_mysql_showbase($match, $serveur='',$requeter=true)
627 626
 {
628
-	return spip_mysql_query("SHOW TABLES LIKE " . _q($match), $serveur, $requeter);
627
+    return spip_mysql_query("SHOW TABLES LIKE " . _q($match), $serveur, $requeter);
629 628
 }
630 629
 
631 630
 // http://doc.spip.org/@spip_mysql_repair
@@ -637,7 +636,7 @@  discard block
 block discarded – undo
637 636
  */
638 637
 function spip_mysql_repair($table, $serveur='',$requeter=true)
639 638
 {
640
-	return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
639
+    return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
641 640
 }
642 641
 
643 642
 define('_MYSQL_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -653,70 +652,70 @@  discard block
 block discarded – undo
653 652
  */
654 653
 function spip_mysql_showtable($nom_table, $serveur='',$requeter=true)
655 654
 {
656
-	$s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
657
-	if (!$s) return '';
658
-	if (!$requeter) return $s;
659
-
660
-	list(,$a) = mysql_fetch_array($s ,MYSQL_NUM);
661
-	if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)){
662
-		$desc = $r[1];
663
-		// extraction d'une KEY éventuelle en prenant garde de ne pas
664
-		// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
665
-		if (preg_match("/^(.*?),([^,]*\sKEY[ (].*)$/s", $desc, $r)) {
666
-		  $namedkeys = $r[2];
667
-		  $desc = $r[1];
668
-		}
669
-		else 
670
-		  $namedkeys = "";
671
-
672
-		$fields = array();
673
-		foreach(preg_split("/,\s*`/",$desc) as $v) {
674
-		  preg_match("/^\s*`?([^`]*)`\s*(.*)/",$v,$r);
675
-		  $fields[strtolower($r[1])] = $r[2];
676
-		}
677
-		$keys = array();
678
-
679
-		foreach(preg_split('/\)\s*(,|$)/',$namedkeys) as $v) {
680
-		  if (preg_match("/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/",$v,$r)) {
681
-			$k = str_replace("`", '', trim($r[1]));
682
-			$t = strtolower(str_replace("`", '', $r[2]));
683
-			if ($k && !isset($keys[$k])) $keys[$k] = $t; else $keys[] = $t;
684
-		  }
685
-		}
686
-		spip_mysql_free($s);
687
-		return array('field' => $fields, 'key' => $keys);
688
-	}
689
-
690
-	$res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
691
-	if($res) {
692
-	  $nfields = array();
693
-	  $nkeys = array();
694
-	  while($val = spip_mysql_fetch($res)) {
695
-		$nfields[$val["Field"]] = $val['Type'];
696
-		if($val['Null']=='NO') {
697
-		  $nfields[$val["Field"]] .= ' NOT NULL'; 
698
-		}
699
-		if($val['Default'] === '0' || $val['Default']) {
700
-		  if(preg_match('/[A-Z_]/',$val['Default'])) {
701
-			$nfields[$val["Field"]] .= ' DEFAULT '.$val['Default'];		  
702
-		  } else {
703
-			$nfields[$val["Field"]] .= " DEFAULT '".$val['Default']."'";		  
704
-		  }
705
-		}
706
-		if($val['Extra'])
707
-		  $nfields[$val["Field"]] .= ' '.$val['Extra'];
708
-		if($val['Key'] == 'PRI') {
709
-		  $nkeys['PRIMARY KEY'] = $val["Field"];
710
-		} else if($val['Key'] == 'MUL') {
711
-		  $nkeys['KEY '.$val["Field"]] = $val["Field"];
712
-		} else if($val['Key'] == 'UNI') {
713
-		  $nkeys['UNIQUE KEY '.$val["Field"]] = $val["Field"];
714
-		}
715
-	  }
716
-	  spip_mysql_free($res);
717
-	  return array('field' => $nfields, 'key' => $nkeys);
718
-	}
719
-	return "";
655
+    $s = spip_mysql_query("SHOW CREATE TABLE `$nom_table`", $serveur, $requeter);
656
+    if (!$s) return '';
657
+    if (!$requeter) return $s;
658
+
659
+    list(,$a) = mysql_fetch_array($s ,MYSQL_NUM);
660
+    if (preg_match(_MYSQL_RE_SHOW_TABLE, $a, $r)){
661
+        $desc = $r[1];
662
+        // extraction d'une KEY éventuelle en prenant garde de ne pas
663
+        // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
664
+        if (preg_match("/^(.*?),([^,]*\sKEY[ (].*)$/s", $desc, $r)) {
665
+            $namedkeys = $r[2];
666
+            $desc = $r[1];
667
+        }
668
+        else 
669
+            $namedkeys = "";
670
+
671
+        $fields = array();
672
+        foreach(preg_split("/,\s*`/",$desc) as $v) {
673
+            preg_match("/^\s*`?([^`]*)`\s*(.*)/",$v,$r);
674
+            $fields[strtolower($r[1])] = $r[2];
675
+        }
676
+        $keys = array();
677
+
678
+        foreach(preg_split('/\)\s*(,|$)/',$namedkeys) as $v) {
679
+            if (preg_match("/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/",$v,$r)) {
680
+            $k = str_replace("`", '', trim($r[1]));
681
+            $t = strtolower(str_replace("`", '', $r[2]));
682
+            if ($k && !isset($keys[$k])) $keys[$k] = $t; else $keys[] = $t;
683
+            }
684
+        }
685
+        spip_mysql_free($s);
686
+        return array('field' => $fields, 'key' => $keys);
687
+    }
688
+
689
+    $res = spip_mysql_query("SHOW COLUMNS FROM `$nom_table`", $serveur);
690
+    if($res) {
691
+        $nfields = array();
692
+        $nkeys = array();
693
+        while($val = spip_mysql_fetch($res)) {
694
+        $nfields[$val["Field"]] = $val['Type'];
695
+        if($val['Null']=='NO') {
696
+            $nfields[$val["Field"]] .= ' NOT NULL'; 
697
+        }
698
+        if($val['Default'] === '0' || $val['Default']) {
699
+            if(preg_match('/[A-Z_]/',$val['Default'])) {
700
+            $nfields[$val["Field"]] .= ' DEFAULT '.$val['Default'];		  
701
+            } else {
702
+            $nfields[$val["Field"]] .= " DEFAULT '".$val['Default']."'";		  
703
+            }
704
+        }
705
+        if($val['Extra'])
706
+            $nfields[$val["Field"]] .= ' '.$val['Extra'];
707
+        if($val['Key'] == 'PRI') {
708
+            $nkeys['PRIMARY KEY'] = $val["Field"];
709
+        } else if($val['Key'] == 'MUL') {
710
+            $nkeys['KEY '.$val["Field"]] = $val["Field"];
711
+        } else if($val['Key'] == 'UNI') {
712
+            $nkeys['UNIQUE KEY '.$val["Field"]] = $val["Field"];
713
+        }
714
+        }
715
+        spip_mysql_free($res);
716
+        return array('field' => $nfields, 'key' => $nkeys);
717
+    }
718
+    return "";
720 719
 }
721 720
 
722 721
 //
@@ -732,18 +731,17 @@  discard block
 block discarded – undo
732 731
  * @return array
733 732
  */
734 733
 function spip_mysql_fetch($r, $t='', $serveur='',$requeter=true) {
735
-	if (!$t) $t = MYSQL_ASSOC;
736
-	if ($r) return mysql_fetch_array($r, $t);
734
+    if (!$t) $t = MYSQL_ASSOC;
735
+    if ($r) return mysql_fetch_array($r, $t);
737 736
 }
738 737
 
739 738
 function spip_mysql_seek($r, $row_number, $serveur='',$requeter=true) {
740
-	if ($r and mysql_num_rows($r)) return mysql_data_seek($r,$row_number);
739
+    if ($r and mysql_num_rows($r)) return mysql_data_seek($r,$row_number);
741 740
 }
742 741
 
743 742
 
744 743
 // http://doc.spip.org/@spip_mysql_countsel
745 744
 /**
746
-
747 745
  * @param array $from
748 746
  * @param array $where
749 747
  * @param string $groupby
@@ -754,17 +752,17 @@  discard block
 block discarded – undo
754 752
  *
755 753
  */
756 754
 function spip_mysql_countsel($from = array(), $where = array(),
757
-			     $groupby = '', $having = array(), $serveur='',$requeter=true)
755
+                    $groupby = '', $having = array(), $serveur='',$requeter=true)
758 756
 {
759
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
757
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
760 758
 
761
-	$r = spip_mysql_select("COUNT($c)", $from, $where,'', '', '', $having, $serveur, $requeter);
759
+    $r = spip_mysql_select("COUNT($c)", $from, $where,'', '', '', $having, $serveur, $requeter);
762 760
 
763
-	if (!$requeter) return $r;
764
-	if (!is_resource($r)) return 0;
765
-	list($c) = mysql_fetch_array($r, MYSQL_NUM);
766
-	mysql_free_result($r);
767
-	return $c;
761
+    if (!$requeter) return $r;
762
+    if (!is_resource($r)) return 0;
763
+    list($c) = mysql_fetch_array($r, MYSQL_NUM);
764
+    mysql_free_result($r);
765
+    return $c;
768 766
 }
769 767
 
770 768
 // Bien specifier le serveur auquel on s'adresse,
@@ -777,10 +775,10 @@  discard block
 block discarded – undo
777 775
  * @return string
778 776
  */
779 777
 function spip_mysql_error($query='', $serveur='',$requeter=true) {
780
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
781
-	$s = $link ? mysql_error($link) : mysql_error();
782
-	if ($s) spip_log("$s - $query", 'mysql.'._LOG_ERREUR);
783
-	return $s;
778
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
779
+    $s = $link ? mysql_error($link) : mysql_error();
780
+    if ($s) spip_log("$s - $query", 'mysql.'._LOG_ERREUR);
781
+    return $s;
784 782
 }
785 783
 
786 784
 // A transposer dans les portages
@@ -791,14 +789,14 @@  discard block
 block discarded – undo
791 789
  * @return int
792 790
  */
793 791
 function spip_mysql_errno($serveur='',$requeter=true) {
794
-	$link = $GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
795
-	$s = $link ? mysql_errno($link) : mysql_errno();
796
-	// 2006 MySQL server has gone away
797
-	// 2013 Lost connection to MySQL server during query
798
-	if (in_array($s, array(2006,2013)))
799
-		define('spip_interdire_cache', true);
800
-	if ($s) spip_log("Erreur mysql $s", _LOG_ERREUR);
801
-	return $s;
792
+    $link = $GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
793
+    $s = $link ? mysql_errno($link) : mysql_errno();
794
+    // 2006 MySQL server has gone away
795
+    // 2013 Lost connection to MySQL server during query
796
+    if (in_array($s, array(2006,2013)))
797
+        define('spip_interdire_cache', true);
798
+    if ($s) spip_log("Erreur mysql $s", _LOG_ERREUR);
799
+    return $s;
802 800
 }
803 801
 
804 802
 // Interface de abstract_sql
@@ -810,7 +808,7 @@  discard block
 block discarded – undo
810 808
  * @return int
811 809
  */
812 810
 function spip_mysql_count($r, $serveur='',$requeter=true) {
813
-	if ($r)	return mysql_num_rows($r);
811
+    if ($r)	return mysql_num_rows($r);
814 812
 }
815 813
 
816 814
 
@@ -822,7 +820,7 @@  discard block
 block discarded – undo
822 820
  * @return bool
823 821
  */
824 822
 function spip_mysql_free($r, $serveur='',$requeter=true) {
825
-	return (is_resource($r)?mysql_free_result($r):false);
823
+    return (is_resource($r)?mysql_free_result($r):false);
826 824
 }
827 825
 
828 826
 // http://doc.spip.org/@spip_mysql_insert
@@ -837,32 +835,32 @@  discard block
 block discarded – undo
837 835
  */
838 836
 function spip_mysql_insert($table, $champs, $valeurs, $desc='', $serveur='',$requeter=true) {
839 837
 
840
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
841
-	$prefixe = $connexion['prefixe'];
842
-	$link = $connexion['link'];
843
-	$db = $connexion['db'];
838
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
839
+    $prefixe = $connexion['prefixe'];
840
+    $link = $connexion['link'];
841
+    $db = $connexion['db'];
844 842
 
845
-	if ($prefixe) $table = preg_replace('/^spip/', $prefixe, $table);
843
+    if ($prefixe) $table = preg_replace('/^spip/', $prefixe, $table);
846 844
 	
847
-	$query ="INSERT INTO $table $champs VALUES $valeurs";
848
-	if (!$requeter) return $query;
845
+    $query ="INSERT INTO $table $champs VALUES $valeurs";
846
+    if (!$requeter) return $query;
849 847
 	
850
-	if (isset($_GET['var_profile'])) {
851
-		include_spip('public/tracer');
852
-		$t = trace_query_start();
853
-	} else $t = 0 ;
854
-
855
-	$connexion['last'] = $query;
856
-	#spip_log($query, 'mysql.'._LOG_DEBUG);
857
-	if (mysql_query($query, $link))
858
-		$r = mysql_insert_id($link);
859
-	else {
860
-	  if ($e = spip_mysql_errno($serveur))	// Log de l'erreur eventuelle
861
-		$e .= spip_mysql_error($query, $serveur); // et du fautif
862
-	}
863
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
864
-
865
-	// return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
848
+    if (isset($_GET['var_profile'])) {
849
+        include_spip('public/tracer');
850
+        $t = trace_query_start();
851
+    } else $t = 0 ;
852
+
853
+    $connexion['last'] = $query;
854
+    #spip_log($query, 'mysql.'._LOG_DEBUG);
855
+    if (mysql_query($query, $link))
856
+        $r = mysql_insert_id($link);
857
+    else {
858
+        if ($e = spip_mysql_errno($serveur))	// Log de l'erreur eventuelle
859
+        $e .= spip_mysql_error($query, $serveur); // et du fautif
860
+    }
861
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
862
+
863
+    // return $r ? $r : (($r===0) ? -1 : 0); pb avec le multi-base.
866 864
 }
867 865
 
868 866
 // http://doc.spip.org/@spip_mysql_insertq
@@ -876,15 +874,15 @@  discard block
 block discarded – undo
876 874
  */
877 875
 function spip_mysql_insertq($table, $couples=array(), $desc=array(), $serveur='',$requeter=true) {
878 876
 
879
-	if (!$desc) $desc = description_table($table, $serveur);
880
-	if (!$desc) $couples = array();
881
-	$fields =  isset($desc['field'])?$desc['field']:array();
877
+    if (!$desc) $desc = description_table($table, $serveur);
878
+    if (!$desc) $couples = array();
879
+    $fields =  isset($desc['field'])?$desc['field']:array();
882 880
 
883
-	foreach ($couples as $champ => $val) {
884
-		$couples[$champ]= spip_mysql_cite($val, $fields[$champ]);
885
-	}
881
+    foreach ($couples as $champ => $val) {
882
+        $couples[$champ]= spip_mysql_cite($val, $fields[$champ]);
883
+    }
886 884
 
887
-	return spip_mysql_insert($table, "(".join(',',array_keys($couples)).")", "(".join(',', $couples).")", $desc, $serveur, $requeter);
885
+    return spip_mysql_insert($table, "(".join(',',array_keys($couples)).")", "(".join(',', $couples).")", $desc, $serveur, $requeter);
888 886
 }
889 887
 
890 888
 
@@ -899,29 +897,29 @@  discard block
 block discarded – undo
899 897
  */
900 898
 function spip_mysql_insertq_multi($table, $tab_couples=array(), $desc=array(), $serveur='',$requeter=true) {
901 899
 
902
-	if (!$desc) $desc = description_table($table, $serveur);
903
-	if (!$desc) $tab_couples = array();
904
-	$fields =  isset($desc['field'])?$desc['field']:array();
900
+    if (!$desc) $desc = description_table($table, $serveur);
901
+    if (!$desc) $tab_couples = array();
902
+    $fields =  isset($desc['field'])?$desc['field']:array();
905 903
 	
906
-	$cles = "(" . join(',',array_keys(reset($tab_couples))) . ')';
907
-	$valeurs = array();
908
-	$r = false;
909
-
910
-	// Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
911
-	foreach ($tab_couples as $couples) {
912
-		foreach ($couples as $champ => $val){
913
-			$couples[$champ]= spip_mysql_cite($val, $fields[$champ]);
914
-		}
915
-		$valeurs[] = '(' .join(',', $couples) . ')';
916
-		if (count($valeurs)>=100){
917
-			$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
918
-			$valeurs = array();
919
-		}
920
-	}
921
-	if (count($valeurs))
922
-		$r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
923
-
924
-	return $r; // dans le cas d'une table auto_increment, le dernier insert_id
904
+    $cles = "(" . join(',',array_keys(reset($tab_couples))) . ')';
905
+    $valeurs = array();
906
+    $r = false;
907
+
908
+    // Quoter et Inserer par groupes de 100 max pour eviter un debordement de pile
909
+    foreach ($tab_couples as $couples) {
910
+        foreach ($couples as $champ => $val){
911
+            $couples[$champ]= spip_mysql_cite($val, $fields[$champ]);
912
+        }
913
+        $valeurs[] = '(' .join(',', $couples) . ')';
914
+        if (count($valeurs)>=100){
915
+            $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
916
+            $valeurs = array();
917
+        }
918
+    }
919
+    if (count($valeurs))
920
+        $r = spip_mysql_insert($table, $cles, join(', ', $valeurs), $desc, $serveur, $requeter);
921
+
922
+    return $r; // dans le cas d'une table auto_increment, le dernier insert_id
925 923
 }
926 924
 
927 925
 // http://doc.spip.org/@spip_mysql_update
@@ -935,15 +933,15 @@  discard block
 block discarded – undo
935 933
  * @return array|null|resource|string
936 934
  */
937 935
 function spip_mysql_update($table, $champs, $where='', $desc='', $serveur='',$requeter=true) {
938
-	$set = array();
939
-	foreach ($champs as $champ => $val)
940
-		$set[] = $champ . "=$val";
941
-	if (!empty($set))
942
-		return spip_mysql_query(
943
-			  calculer_mysql_expression('UPDATE', $table, ',')
944
-			. calculer_mysql_expression('SET', $set, ',')
945
-			. calculer_mysql_expression('WHERE', $where), 
946
-			$serveur, $requeter);
936
+    $set = array();
937
+    foreach ($champs as $champ => $val)
938
+        $set[] = $champ . "=$val";
939
+    if (!empty($set))
940
+        return spip_mysql_query(
941
+                calculer_mysql_expression('UPDATE', $table, ',')
942
+            . calculer_mysql_expression('SET', $set, ',')
943
+            . calculer_mysql_expression('WHERE', $where), 
944
+            $serveur, $requeter);
947 945
 }
948 946
 
949 947
 // idem, mais les valeurs sont des constantes a mettre entre apostrophes
@@ -960,18 +958,18 @@  discard block
 block discarded – undo
960 958
  */
961 959
 function spip_mysql_updateq($table, $champs, $where='', $desc=array(), $serveur='',$requeter=true) {
962 960
 
963
-	if (!$champs) return;
964
-	if (!$desc) $desc = description_table($table, $serveur);
965
-	if (!$desc) $champs = array(); else $fields =  $desc['field'];
966
-	$set = array();
967
-	foreach ($champs as $champ => $val) {
968
-		$set[] = $champ . '=' . spip_mysql_cite($val, $fields[$champ]);
969
-	}
970
-	return spip_mysql_query(
971
-			  calculer_mysql_expression('UPDATE', $table, ',')
972
-			. calculer_mysql_expression('SET', $set, ',')
973
-			. calculer_mysql_expression('WHERE', $where),
974
-			$serveur, $requeter);
961
+    if (!$champs) return;
962
+    if (!$desc) $desc = description_table($table, $serveur);
963
+    if (!$desc) $champs = array(); else $fields =  $desc['field'];
964
+    $set = array();
965
+    foreach ($champs as $champ => $val) {
966
+        $set[] = $champ . '=' . spip_mysql_cite($val, $fields[$champ]);
967
+    }
968
+    return spip_mysql_query(
969
+                calculer_mysql_expression('UPDATE', $table, ',')
970
+            . calculer_mysql_expression('SET', $set, ',')
971
+            . calculer_mysql_expression('WHERE', $where),
972
+            $serveur, $requeter);
975 973
 }
976 974
 
977 975
 // http://doc.spip.org/@spip_mysql_delete
@@ -983,18 +981,18 @@  discard block
 block discarded – undo
983 981
  * @return array|bool|int|null|resource|string
984 982
  */
985 983
 function spip_mysql_delete($table, $where='', $serveur='',$requeter=true) {
986
-	$res = spip_mysql_query(
987
-			  calculer_mysql_expression('DELETE FROM', $table, ',')
988
-			. calculer_mysql_expression('WHERE', $where),
989
-			$serveur, $requeter);
990
-	if (!$requeter) return $res;
991
-	if ($res){
992
-		$connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0];
993
-		$link = $connexion['link'];
994
-		return $link ? mysql_affected_rows($link) : mysql_affected_rows();
995
-	}
996
-	else
997
-		return false;
984
+    $res = spip_mysql_query(
985
+                calculer_mysql_expression('DELETE FROM', $table, ',')
986
+            . calculer_mysql_expression('WHERE', $where),
987
+            $serveur, $requeter);
988
+    if (!$requeter) return $res;
989
+    if ($res){
990
+        $connexion = &$GLOBALS['connexions'][$serveur ? $serveur : 0];
991
+        $link = $connexion['link'];
992
+        return $link ? mysql_affected_rows($link) : mysql_affected_rows();
993
+    }
994
+    else
995
+        return false;
998 996
 }
999 997
 
1000 998
 // http://doc.spip.org/@spip_mysql_replace
@@ -1007,7 +1005,7 @@  discard block
 block discarded – undo
1007 1005
  * @return array|null|resource|string
1008 1006
  */
1009 1007
 function spip_mysql_replace($table, $couples, $desc=array(), $serveur='',$requeter=true) {
1010
-	return spip_mysql_query("REPLACE $table (" . join(',',array_keys($couples)) . ') VALUES (' .join(',',array_map('_q', $couples)) . ')', $serveur, $requeter);
1008
+    return spip_mysql_query("REPLACE $table (" . join(',',array_keys($couples)) . ') VALUES (' .join(',',array_map('_q', $couples)) . ')', $serveur, $requeter);
1011 1009
 }
1012 1010
 
1013 1011
 
@@ -1021,19 +1019,18 @@  discard block
 block discarded – undo
1021 1019
  * @return array|null|resource|string
1022 1020
  */
1023 1021
 function spip_mysql_replace_multi($table, $tab_couples, $desc=array(), $serveur='',$requeter=true) {
1024
-	$cles = "(" . join(',',array_keys($tab_couples[0])). ')';
1025
-	$valeurs = array();
1026
-	foreach ($tab_couples as $couples) {
1027
-		$valeurs[] = '(' .join(',',array_map('_q', $couples)) . ')';
1028
-	}
1029
-	$valeurs = implode(', ',$valeurs);
1030
-	return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1022
+    $cles = "(" . join(',',array_keys($tab_couples[0])). ')';
1023
+    $valeurs = array();
1024
+    foreach ($tab_couples as $couples) {
1025
+        $valeurs[] = '(' .join(',',array_map('_q', $couples)) . ')';
1026
+    }
1027
+    $valeurs = implode(', ',$valeurs);
1028
+    return spip_mysql_query("REPLACE $table $cles VALUES $valeurs", $serveur, $requeter);
1031 1029
 }
1032 1030
 
1033 1031
 
1034 1032
 // http://doc.spip.org/@spip_mysql_multi
1035 1033
 /**
1036
-
1037 1034
  * @param $objet
1038 1035
  * @param $lang
1039 1036
  * @return string
@@ -1041,32 +1038,32 @@  discard block
 block discarded – undo
1041 1038
  */
1042 1039
 
1043 1040
 function spip_mysql_multi ($objet, $lang) {
1044
-	$lengthlang = strlen("[$lang]");
1045
-	$posmulti = "INSTR(".$objet.", '<multi>')";
1046
-	$posfinmulti = "INSTR(".$objet.", '</multi>')";
1047
-	$debutchaine = "LEFT(".$objet.", $posmulti-1)";
1048
-	$finchaine = "RIGHT(".$objet.", CHAR_LENGTH(".$objet.") -(7+$posfinmulti))";
1049
-	$chainemulti = "TRIM(SUBSTRING(".$objet.", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1050
-	$poslang = "INSTR($chainemulti,'[".$lang."]')";
1051
-	$poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1052
-	$chainelang = "TRIM(SUBSTRING(".$objet.", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1053
-	$posfinlang = "INSTR(".$chainelang.", '[')";
1054
-	$chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1055
-	//$chainelang = "LEFT($chainelang,$posfinlang-1)";
1056
-	$retour = "(TRIM(IF($posmulti = 0 , ".
1057
-		"     TRIM(".$objet."), ".
1058
-		"     CONCAT( ".
1059
-		"          $debutchaine, ".
1060
-		"          IF( ".
1061
-		"               $poslang = 0, ".
1062
-		"                     $chainemulti, ".
1063
-		"               $chainelang".
1064
-		"          ), ". 
1065
-		"          $finchaine".
1066
-		"     ) ".
1067
-		"))) AS multi";
1068
-
1069
-	return $retour;
1041
+    $lengthlang = strlen("[$lang]");
1042
+    $posmulti = "INSTR(".$objet.", '<multi>')";
1043
+    $posfinmulti = "INSTR(".$objet.", '</multi>')";
1044
+    $debutchaine = "LEFT(".$objet.", $posmulti-1)";
1045
+    $finchaine = "RIGHT(".$objet.", CHAR_LENGTH(".$objet.") -(7+$posfinmulti))";
1046
+    $chainemulti = "TRIM(SUBSTRING(".$objet.", $posmulti+7, $posfinmulti -(7+$posmulti)))";
1047
+    $poslang = "INSTR($chainemulti,'[".$lang."]')";
1048
+    $poslang = "IF($poslang=0,INSTR($chainemulti,']')+1,$poslang+$lengthlang)";
1049
+    $chainelang = "TRIM(SUBSTRING(".$objet.", $posmulti+7+$poslang-1,$posfinmulti -($posmulti+7+$poslang-1) ))";
1050
+    $posfinlang = "INSTR(".$chainelang.", '[')";
1051
+    $chainelang = "IF($posfinlang>0,LEFT($chainelang,$posfinlang-1),$chainelang)";
1052
+    //$chainelang = "LEFT($chainelang,$posfinlang-1)";
1053
+    $retour = "(TRIM(IF($posmulti = 0 , ".
1054
+        "     TRIM(".$objet."), ".
1055
+        "     CONCAT( ".
1056
+        "          $debutchaine, ".
1057
+        "          IF( ".
1058
+        "               $poslang = 0, ".
1059
+        "                     $chainemulti, ".
1060
+        "               $chainelang".
1061
+        "          ), ". 
1062
+        "          $finchaine".
1063
+        "     ) ".
1064
+        "))) AS multi";
1065
+
1066
+    return $retour;
1070 1067
 }
1071 1068
 
1072 1069
 // http://doc.spip.org/@spip_mysql_hex
@@ -1076,7 +1073,7 @@  discard block
 block discarded – undo
1076 1073
  */
1077 1074
 function spip_mysql_hex($v)
1078 1075
 {
1079
-	return "0x" . $v;
1076
+    return "0x" . $v;
1080 1077
 }
1081 1078
 
1082 1079
 /**
@@ -1085,18 +1082,18 @@  discard block
 block discarded – undo
1085 1082
  * @return array|int|string
1086 1083
  */
1087 1084
 function spip_mysql_quote($v, $type='') {
1088
-	if ($type) {
1089
-		if (!is_array($v))
1090
-			return spip_mysql_cite($v,$type);
1091
-		// si c'est un tableau, le parcourir en propageant le type
1092
-		foreach($v as $k=>$r)
1093
-			$v[$k] = spip_mysql_quote($r, $type);
1094
-		return $v;
1095
-	}
1096
-	// si on ne connait pas le type, s'en remettre a _q :
1097
-	// on ne fera pas mieux
1098
-	else
1099
-		return _q($v);
1085
+    if ($type) {
1086
+        if (!is_array($v))
1087
+            return spip_mysql_cite($v,$type);
1088
+        // si c'est un tableau, le parcourir en propageant le type
1089
+        foreach($v as $k=>$r)
1090
+            $v[$k] = spip_mysql_quote($r, $type);
1091
+        return $v;
1092
+    }
1093
+    // si on ne connait pas le type, s'en remettre a _q :
1094
+    // on ne fera pas mieux
1095
+    else
1096
+        return _q($v);
1100 1097
 }
1101 1098
 
1102 1099
 /**
@@ -1107,17 +1104,17 @@  discard block
 block discarded – undo
1107 1104
  */
1108 1105
 function spip_mysql_date_proche($champ, $interval, $unite)
1109 1106
 {
1110
-	return '('
1111
-	. $champ
1107
+    return '('
1108
+    . $champ
1112 1109
         . (($interval <= 0) ? '>' : '<')
1113 1110
         . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1114
-	. '('
1115
-	. sql_quote(date('Y-m-d H:i:s'))
1116
-	. ', INTERVAL '
1117
-	. (($interval > 0) ? $interval : (0-$interval))
1118
-	. ' '
1119
-	. $unite
1120
-	. '))';
1111
+    . '('
1112
+    . sql_quote(date('Y-m-d H:i:s'))
1113
+    . ', INTERVAL '
1114
+    . (($interval > 0) ? $interval : (0-$interval))
1115
+    . ' '
1116
+    . $unite
1117
+    . '))';
1121 1118
 }
1122 1119
 
1123 1120
 //
@@ -1133,21 +1130,21 @@  discard block
 block discarded – undo
1133 1130
  * @return string
1134 1131
  */
1135 1132
 function spip_mysql_in($val, $valeurs, $not='', $serveur='',$requeter=true) {
1136
-	$n = $i = 0;
1137
-	$in_sql ="";
1138
-	while ($n = strpos($valeurs, ',', $n+1)) {
1139
-	  if ((++$i) >= 255) {
1140
-			$in_sql .= "($val $not IN (" .
1141
-			  substr($valeurs, 0, $n) .
1142
-			  "))\n" .
1143
-			  ($not ? "AND\t" : "OR\t");
1144
-			$valeurs = substr($valeurs, $n+1);
1145
-			$i = $n = 0;
1146
-		}
1147
-	}
1148
-	$in_sql .= "($val $not IN ($valeurs))";
1149
-
1150
-	return "($in_sql)";
1133
+    $n = $i = 0;
1134
+    $in_sql ="";
1135
+    while ($n = strpos($valeurs, ',', $n+1)) {
1136
+        if ((++$i) >= 255) {
1137
+            $in_sql .= "($val $not IN (" .
1138
+                substr($valeurs, 0, $n) .
1139
+                "))\n" .
1140
+                ($not ? "AND\t" : "OR\t");
1141
+            $valeurs = substr($valeurs, $n+1);
1142
+            $i = $n = 0;
1143
+        }
1144
+    }
1145
+    $in_sql .= "($val $not IN ($valeurs))";
1146
+
1147
+    return "($in_sql)";
1151 1148
 }
1152 1149
 
1153 1150
 // pour compatibilite. Ne plus utiliser.
@@ -1159,11 +1156,11 @@  discard block
 block discarded – undo
1159 1156
  * @return string
1160 1157
  */
1161 1158
 function calcul_mysql_in($val, $valeurs, $not='') {
1162
-	if (is_array($valeurs))
1163
-		$valeurs = join(',', array_map('_q', $valeurs));
1164
-	elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
1165
-	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
1166
-	return spip_mysql_in($val, $valeurs, $not);
1159
+    if (is_array($valeurs))
1160
+        $valeurs = join(',', array_map('_q', $valeurs));
1161
+    elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
1162
+    if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
1163
+    return spip_mysql_in($val, $valeurs, $not);
1167 1164
 }
1168 1165
 
1169 1166
 // http://doc.spip.org/@spip_mysql_cite
@@ -1173,19 +1170,19 @@  discard block
 block discarded – undo
1173 1170
  * @return int|string
1174 1171
  */
1175 1172
 function spip_mysql_cite($v, $type) {
1176
-	if(is_null($v)
1177
-		AND stripos($type,"NOT NULL")===false) return 'NULL'; // null php se traduit en NULL SQL
1178
-	if (sql_test_date($type) AND preg_match('/^\w+\(/', $v))
1179
-		return $v;
1180
-	if (sql_test_int($type)) {
1181
-		if (is_numeric($v) OR (ctype_xdigit(substr($v,2))
1182
-			  AND $v[0]=='0' AND $v[1]=='x'))
1183
-			return $v;
1184
-		// si pas numerique, forcer le intval
1185
-		else
1186
-			return intval($v);
1187
-	}
1188
-	return  ("'" . addslashes($v) . "'");
1173
+    if(is_null($v)
1174
+        AND stripos($type,"NOT NULL")===false) return 'NULL'; // null php se traduit en NULL SQL
1175
+    if (sql_test_date($type) AND preg_match('/^\w+\(/', $v))
1176
+        return $v;
1177
+    if (sql_test_int($type)) {
1178
+        if (is_numeric($v) OR (ctype_xdigit(substr($v,2))
1179
+              AND $v[0]=='0' AND $v[1]=='x'))
1180
+            return $v;
1181
+        // si pas numerique, forcer le intval
1182
+        else
1183
+            return intval($v);
1184
+    }
1185
+    return  ("'" . addslashes($v) . "'");
1189 1186
 }
1190 1187
 
1191 1188
 // Ces deux fonctions n'ont pas d'equivalent exact PostGres
@@ -1203,17 +1200,17 @@  discard block
 block discarded – undo
1203 1200
  */
1204 1201
 function spip_get_lock($nom, $timeout = 0) {
1205 1202
 
1206
-	define('_LOCK_TIME', intval(time()/3600-316982));
1203
+    define('_LOCK_TIME', intval(time()/3600-316982));
1207 1204
 
1208
-	$connexion = &$GLOBALS['connexions'][0];
1209
-	$bd = $connexion['db'];
1210
-	$prefixe = $connexion['prefixe'];
1211
-	$nom = "$bd:$prefixe:$nom" .  _LOCK_TIME;
1205
+    $connexion = &$GLOBALS['connexions'][0];
1206
+    $bd = $connexion['db'];
1207
+    $prefixe = $connexion['prefixe'];
1208
+    $nom = "$bd:$prefixe:$nom" .  _LOCK_TIME;
1212 1209
 
1213
-	$connexion['last'] = $q = "SELECT GET_LOCK(" . _q($nom) . ", $timeout) AS n";
1214
-	$q = @sql_fetch(mysql_query($q));
1215
-	if (!$q) spip_log("pas de lock sql pour $nom", _LOG_ERREUR);
1216
-	return $q['n'];
1210
+    $connexion['last'] = $q = "SELECT GET_LOCK(" . _q($nom) . ", $timeout) AS n";
1211
+    $q = @sql_fetch(mysql_query($q));
1212
+    if (!$q) spip_log("pas de lock sql pour $nom", _LOG_ERREUR);
1213
+    return $q['n'];
1217 1214
 }
1218 1215
 
1219 1216
 // http://doc.spip.org/@spip_release_lock
@@ -1222,13 +1219,13 @@  discard block
 block discarded – undo
1222 1219
  */
1223 1220
 function spip_release_lock($nom) {
1224 1221
 
1225
-	$connexion = &$GLOBALS['connexions'][0];
1226
-	$bd = $connexion['db'];
1227
-	$prefixe = $connexion['prefixe'];
1228
-	$nom = "$bd:$prefixe:$nom" . _LOCK_TIME;
1222
+    $connexion = &$GLOBALS['connexions'][0];
1223
+    $bd = $connexion['db'];
1224
+    $prefixe = $connexion['prefixe'];
1225
+    $nom = "$bd:$prefixe:$nom" . _LOCK_TIME;
1229 1226
 
1230
-	$connexion['last'] = $q = "SELECT RELEASE_LOCK(" . _q($nom) . ")";
1231
-	@mysql_query($q);
1227
+    $connexion['last'] = $q = "SELECT RELEASE_LOCK(" . _q($nom) . ")";
1228
+    @mysql_query($q);
1232 1229
 }
1233 1230
 
1234 1231
 // Renvoie false si on n'a pas les fonctions mysql (pour l'install)
@@ -1237,8 +1234,8 @@  discard block
 block discarded – undo
1237 1234
  * @return bool
1238 1235
  */
1239 1236
 function spip_versions_mysql() {
1240
-	charger_php_extension('mysql');
1241
-	return function_exists('mysql_query');
1237
+    charger_php_extension('mysql');
1238
+    return function_exists('mysql_query');
1242 1239
 }
1243 1240
 
1244 1241
 // Tester si mysql ne veut pas du nom de la base dans les requetes
@@ -1250,18 +1247,18 @@  discard block
 block discarded – undo
1250 1247
  */
1251 1248
 function test_rappel_nom_base_mysql($server_db)
1252 1249
 {
1253
-	$GLOBALS['mysql_rappel_nom_base'] = true;
1254
-	sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1255
-	$ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1256
-
1257
-	if ($ok) {
1258
-		sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1259
-		return '';
1260
-	} else {
1261
-		$GLOBALS['mysql_rappel_nom_base'] = false;
1262
-		return "\$GLOBALS['mysql_rappel_nom_base'] = false; ".
1263
-		"/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1264
-	}
1250
+    $GLOBALS['mysql_rappel_nom_base'] = true;
1251
+    sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1252
+    $ok = spip_query("INSERT INTO spip_meta (nom,valeur) VALUES ('mysql_rappel_nom_base', 'test')", $server_db);
1253
+
1254
+    if ($ok) {
1255
+        sql_delete('spip_meta', "nom='mysql_rappel_nom_base'", $server_db);
1256
+        return '';
1257
+    } else {
1258
+        $GLOBALS['mysql_rappel_nom_base'] = false;
1259
+        return "\$GLOBALS['mysql_rappel_nom_base'] = false; ".
1260
+        "/* echec de test_rappel_nom_base_mysql a l'installation. */\n";
1261
+    }
1265 1262
 }
1266 1263
 
1267 1264
 // http://doc.spip.org/@test_sql_mode_mysql
@@ -1270,13 +1267,13 @@  discard block
 block discarded – undo
1270 1267
  * @return string
1271 1268
  */
1272 1269
 function test_sql_mode_mysql($server_db){
1273
-	$res = sql_select("version() as v",'','','','','','',$server_db);
1274
-	$row = sql_fetch($res,$server_db);
1275
-	if (version_compare($row['v'],'5.0.0','>=')){
1276
-		define('_MYSQL_SET_SQL_MODE',true);
1277
-		return "define('_MYSQL_SET_SQL_MODE',true);\n";
1278
-	}
1279
-	return '';
1270
+    $res = sql_select("version() as v",'','','','','','',$server_db);
1271
+    $row = sql_fetch($res,$server_db);
1272
+    if (version_compare($row['v'],'5.0.0','>=')){
1273
+        define('_MYSQL_SET_SQL_MODE',true);
1274
+        return "define('_MYSQL_SET_SQL_MODE',true);\n";
1275
+    }
1276
+    return '';
1280 1277
 }
1281 1278
 
1282 1279
 ?>
Please login to merge, or discard this patch.
ecrire/req/pg.php 1 patch
Indentation   +913 added lines, -913 removed lines patch added patch discarded remove patch
@@ -30,114 +30,114 @@  discard block
 block discarded – undo
30 30
 
31 31
 // http://doc.spip.org/@req_pg_dist
32 32
 function req_pg_dist($addr, $port, $login, $pass, $db='', $prefixe='') {
33
-	static $last_connect = array();
34
-	if (!charger_php_extension('pgsql')) return false;
33
+    static $last_connect = array();
34
+    if (!charger_php_extension('pgsql')) return false;
35 35
 	
36
-	// si provient de selectdb
37
-	if (empty($addr) && empty($port) && empty($login) && empty($pass)){
38
-		foreach (array('addr','port','login','pass','prefixe') as $a){
39
-			$$a = $last_connect[$a];
40
-		}
41
-	}
42
-	@list($host, $p) = explode(';', $addr);
43
-	if ($p >0) $port = " port=$p" ; else $port = '';
44
-	$erreurs = array();
45
-	if ($db) {
46
-		@$link = pg_connect("host=$host$port dbname=$db user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW);
47
-	} elseif (!@$link = pg_connect("host=$host$port user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
48
-			$erreurs[] = pg_last_error();
49
-	    if (@$link = pg_connect("host=$host$port dbname=$login user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
50
-	      $db = $login;
51
-	    } else {
52
-		    $erreurs[] = pg_last_error();
53
-	      $db = _DEFAULT_DB;
54
-	      $link = pg_connect("host=$host$port dbname=$db user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW);
55
-	    }
56
-	}
57
-	if (!$link) {
58
-		$erreurs[] = pg_last_error();
59
-		foreach($erreurs as $e)
60
-			spip_log('Echec pg_connect. Erreur : ' . $e,'pg.'._LOG_HS);
61
-		return false;
62
-	}
63
-
64
-	if ($link)
65
-		$last_connect = array (
66
-			'addr' => $addr,
67
-			'port' => $port,
68
-			'login' => $login,
69
-			'pass' => $pass,
70
-			'db' => $db,
71
-			'prefixe' => $prefixe,
72
-		);
36
+    // si provient de selectdb
37
+    if (empty($addr) && empty($port) && empty($login) && empty($pass)){
38
+        foreach (array('addr','port','login','pass','prefixe') as $a){
39
+            $$a = $last_connect[$a];
40
+        }
41
+    }
42
+    @list($host, $p) = explode(';', $addr);
43
+    if ($p >0) $port = " port=$p" ; else $port = '';
44
+    $erreurs = array();
45
+    if ($db) {
46
+        @$link = pg_connect("host=$host$port dbname=$db user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW);
47
+    } elseif (!@$link = pg_connect("host=$host$port user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
48
+            $erreurs[] = pg_last_error();
49
+        if (@$link = pg_connect("host=$host$port dbname=$login user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW)) {
50
+            $db = $login;
51
+        } else {
52
+            $erreurs[] = pg_last_error();
53
+            $db = _DEFAULT_DB;
54
+            $link = pg_connect("host=$host$port dbname=$db user=$login password='$pass'", PGSQL_CONNECT_FORCE_NEW);
55
+        }
56
+    }
57
+    if (!$link) {
58
+        $erreurs[] = pg_last_error();
59
+        foreach($erreurs as $e)
60
+            spip_log('Echec pg_connect. Erreur : ' . $e,'pg.'._LOG_HS);
61
+        return false;
62
+    }
63
+
64
+    if ($link)
65
+        $last_connect = array (
66
+            'addr' => $addr,
67
+            'port' => $port,
68
+            'login' => $login,
69
+            'pass' => $pass,
70
+            'db' => $db,
71
+            'prefixe' => $prefixe,
72
+        );
73 73
 		
74
-	spip_log("Connexion vers $host, base $db, prefixe $prefixe " . ($link ? 'operationnelle' : 'impossible'),'pg.'._LOG_DEBUG);
74
+    spip_log("Connexion vers $host, base $db, prefixe $prefixe " . ($link ? 'operationnelle' : 'impossible'),'pg.'._LOG_DEBUG);
75 75
 
76
-	return !$link ? false : array(
77
-		'db' => $db,
78
-		'prefixe' => $prefixe ? $prefixe : $db,
79
-		'link' => $link,
80
-		);
76
+    return !$link ? false : array(
77
+        'db' => $db,
78
+        'prefixe' => $prefixe ? $prefixe : $db,
79
+        'link' => $link,
80
+        );
81 81
 }
82 82
 
83 83
 $GLOBALS['spip_pg_functions_1'] = array(
84
-		'alter' => 'spip_pg_alter',
85
-		'count' => 'spip_pg_count',
86
-		'countsel' => 'spip_pg_countsel',
87
-		'create' => 'spip_pg_create',
88
-		'create_base' => 'spip_pg_create_base',
89
-		'create_view' => 'spip_pg_create_view',
90
-		'date_proche' => 'spip_pg_date_proche',
91
-		'delete' => 'spip_pg_delete',
92
-		'drop_table' => 'spip_pg_drop_table',
93
-		'drop_view' => 'spip_pg_drop_view',
94
-		'errno' => 'spip_pg_errno',
95
-		'error' => 'spip_pg_error',
96
-		'explain' => 'spip_pg_explain',
97
-		'fetch' => 'spip_pg_fetch',
98
-		'seek' => 'spip_pg_seek',
99
-		'free' => 'spip_pg_free',
100
-		'hex' => 'spip_pg_hex',
101
-		'in' => 'spip_pg_in',
102
-		'insert' => 'spip_pg_insert',
103
-		'insertq' => 'spip_pg_insertq',
104
-		'insertq_multi' => 'spip_pg_insertq_multi',
105
-		'listdbs' => 'spip_pg_listdbs',
106
-		'multi' => 'spip_pg_multi',
107
-		'optimize' => 'spip_pg_optimize',
108
-		'query' => 'spip_pg_query',
109
-		'quote' => 'spip_pg_quote',
110
-		'replace' => 'spip_pg_replace',
111
-		'replace_multi' => 'spip_pg_replace_multi',
112
-		'select' => 'spip_pg_select',
113
-		'selectdb' => 'spip_pg_selectdb',
114
-		'set_connect_charset' => 'spip_pg_set_connect_charset',
115
-		'showbase' => 'spip_pg_showbase',
116
-		'showtable' => 'spip_pg_showtable',
117
-		'update' => 'spip_pg_update',
118
-		'updateq' => 'spip_pg_updateq',
119
-		);
84
+        'alter' => 'spip_pg_alter',
85
+        'count' => 'spip_pg_count',
86
+        'countsel' => 'spip_pg_countsel',
87
+        'create' => 'spip_pg_create',
88
+        'create_base' => 'spip_pg_create_base',
89
+        'create_view' => 'spip_pg_create_view',
90
+        'date_proche' => 'spip_pg_date_proche',
91
+        'delete' => 'spip_pg_delete',
92
+        'drop_table' => 'spip_pg_drop_table',
93
+        'drop_view' => 'spip_pg_drop_view',
94
+        'errno' => 'spip_pg_errno',
95
+        'error' => 'spip_pg_error',
96
+        'explain' => 'spip_pg_explain',
97
+        'fetch' => 'spip_pg_fetch',
98
+        'seek' => 'spip_pg_seek',
99
+        'free' => 'spip_pg_free',
100
+        'hex' => 'spip_pg_hex',
101
+        'in' => 'spip_pg_in',
102
+        'insert' => 'spip_pg_insert',
103
+        'insertq' => 'spip_pg_insertq',
104
+        'insertq_multi' => 'spip_pg_insertq_multi',
105
+        'listdbs' => 'spip_pg_listdbs',
106
+        'multi' => 'spip_pg_multi',
107
+        'optimize' => 'spip_pg_optimize',
108
+        'query' => 'spip_pg_query',
109
+        'quote' => 'spip_pg_quote',
110
+        'replace' => 'spip_pg_replace',
111
+        'replace_multi' => 'spip_pg_replace_multi',
112
+        'select' => 'spip_pg_select',
113
+        'selectdb' => 'spip_pg_selectdb',
114
+        'set_connect_charset' => 'spip_pg_set_connect_charset',
115
+        'showbase' => 'spip_pg_showbase',
116
+        'showtable' => 'spip_pg_showtable',
117
+        'update' => 'spip_pg_update',
118
+        'updateq' => 'spip_pg_updateq',
119
+        );
120 120
 
121 121
 // Par ou ca passe une fois les traductions faites
122 122
 // http://doc.spip.org/@spip_pg_trace_query
123 123
 function spip_pg_trace_query($query, $serveur='')
124 124
 {
125
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
126
-	$prefixe = $connexion['prefixe'];
127
-	$link = $connexion['link'];
128
-	$db = $connexion['db'];
129
-
130
-	if (isset($_GET['var_profile'])) {
131
-		include_spip('public/tracer');
132
-		$t = trace_query_start();
133
-	} else $t = 0 ;
125
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
126
+    $prefixe = $connexion['prefixe'];
127
+    $link = $connexion['link'];
128
+    $db = $connexion['db'];
129
+
130
+    if (isset($_GET['var_profile'])) {
131
+        include_spip('public/tracer');
132
+        $t = trace_query_start();
133
+    } else $t = 0 ;
134 134
  
135
-	$connexion['last'] = $query;
136
-	$r = spip_pg_query_simple($link, $query);
135
+    $connexion['last'] = $query;
136
+    $r = spip_pg_query_simple($link, $query);
137 137
 
138
-	if ($e = spip_pg_errno($serveur))	// Log de l'erreur eventuelle
139
-		$e .= spip_pg_error($query, $serveur); // et du fautif
140
-	return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
138
+    if ($e = spip_pg_errno($serveur))	// Log de l'erreur eventuelle
139
+        $e .= spip_pg_error($query, $serveur); // et du fautif
140
+    return $t ? trace_query_end($query, $t, $r, $e, $serveur) : $r;
141 141
 }
142 142
 
143 143
 // Fonction de requete generale quand on est sur que c'est SQL standard.
@@ -146,26 +146,26 @@  discard block
 block discarded – undo
146 146
 // http://doc.spip.org/@spip_pg_query
147 147
 function spip_pg_query($query, $serveur='',$requeter=true)
148 148
 {
149
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
150
-	$prefixe = $connexion['prefixe'];
151
-	$link = $connexion['link'];
152
-	$db = $connexion['db'];
149
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
150
+    $prefixe = $connexion['prefixe'];
151
+    $link = $connexion['link'];
152
+    $db = $connexion['db'];
153 153
 
154
-	if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
155
-		$suite = strstr($query, $regs[0]);
156
-		$query = substr($query, 0, -strlen($suite));
157
-	} else $suite ='';
158
-	$query = preg_replace('/([,\s])spip_/', '\1'.$prefixe.'_', $query) . $suite;
154
+    if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/i', $query, $regs)) {
155
+        $suite = strstr($query, $regs[0]);
156
+        $query = substr($query, 0, -strlen($suite));
157
+    } else $suite ='';
158
+    $query = preg_replace('/([,\s])spip_/', '\1'.$prefixe.'_', $query) . $suite;
159 159
 
160
-	// renvoyer la requete inerte si demandee
161
-	if (!$requeter) return $query;
160
+    // renvoyer la requete inerte si demandee
161
+    if (!$requeter) return $query;
162 162
 
163
-	return spip_pg_trace_query($query, $serveur);
163
+    return spip_pg_trace_query($query, $serveur);
164 164
 }
165 165
 
166 166
 function spip_pg_query_simple($link, $query){
167
-	#spip_log(var_export($query,true), 'pg.'._LOG_DEBUG);
168
-	return pg_query($link, $query);
167
+    #spip_log(var_export($query,true), 'pg.'._LOG_DEBUG);
168
+    return pg_query($link, $query);
169 169
 }
170 170
 
171 171
 /*
@@ -177,176 +177,176 @@  discard block
 block discarded – undo
177 177
  * de requetes showtable intempestives
178 178
  */
179 179
 function spip_pg_ajouter_champs_timestamp($table, $couples, $desc='', $serveur=''){
180
-	static $tables = array();
180
+    static $tables = array();
181 181
 	
182
-	if (!isset($tables[$table])){
182
+    if (!isset($tables[$table])){
183 183
 		
184
-		if (!$desc){
185
-			$trouver_table = charger_fonction('trouver_table', 'base');
186
-			$desc = $trouver_table($table, $serveur);
187
-			// si pas de description, on ne fait rien, ou on die() ?
188
-			if (!$desc) return $couples;
189
-		}
184
+        if (!$desc){
185
+            $trouver_table = charger_fonction('trouver_table', 'base');
186
+            $desc = $trouver_table($table, $serveur);
187
+            // si pas de description, on ne fait rien, ou on die() ?
188
+            if (!$desc) return $couples;
189
+        }
190 190
 		
191
-		// recherche des champs avec simplement 'TIMESTAMP'
192
-		// cependant, il faudra peut etre etendre
193
-		// avec la gestion de DEFAULT et ON UPDATE
194
-		// mais ceux-ci ne sont pas utilises dans le core
195
-		$tables[$table] = array();
196
-		foreach ($desc['field'] as $k=>$v){
197
-			$v = strtolower(ltrim($v));
198
-			// ne pas ajouter de timestamp now() si un default est specifie
199
-			if (strpos($v, 'timestamp')===0 AND strpos($v, 'default')===false)
200
-				$tables[$table][] = $k;
201
-		}
202
-	}
191
+        // recherche des champs avec simplement 'TIMESTAMP'
192
+        // cependant, il faudra peut etre etendre
193
+        // avec la gestion de DEFAULT et ON UPDATE
194
+        // mais ceux-ci ne sont pas utilises dans le core
195
+        $tables[$table] = array();
196
+        foreach ($desc['field'] as $k=>$v){
197
+            $v = strtolower(ltrim($v));
198
+            // ne pas ajouter de timestamp now() si un default est specifie
199
+            if (strpos($v, 'timestamp')===0 AND strpos($v, 'default')===false)
200
+                $tables[$table][] = $k;
201
+        }
202
+    }
203 203
 	
204
-	// ajout des champs type 'timestamp' absents
205
-	foreach ($tables[$table] as $maj){
206
-		if (!array_key_exists($maj, $couples))
207
-			$couples[$maj] = "NOW()";	
208
-	}
209
-	return $couples;
204
+    // ajout des champs type 'timestamp' absents
205
+    foreach ($tables[$table] as $maj){
206
+        if (!array_key_exists($maj, $couples))
207
+            $couples[$maj] = "NOW()";	
208
+    }
209
+    return $couples;
210 210
 }
211 211
  	
212 212
 	
213 213
 // Alter en PG ne traite pas les index
214 214
 // http://doc.spip.org/@spip_pg_alter
215 215
 function spip_pg_alter($query, $serveur='',$requeter=true) {
216
-	// il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
217
-	// tout en cassant en deux alter distincts "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... 
218
-	// ou revoir l'api de sql_alter en creant un 
219
-	// sql_alter_table($table,array($actions));
220
-	if (!preg_match("/\s*((\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is", $query, $regs)){
221
-		spip_log("$query mal comprise", 'pg.'._LOG_ERREUR);
222
-		return false;
223
-	}
224
-	$debut = $regs[1];
225
-	$table = $regs[3];
226
-	$suite = $regs[4];
227
-	$todo = explode(',', $suite);
228
-	// on remet les morceaux dechires ensembles... que c'est laid !
229
-	$todo2 = array(); $i=0;
230
-	$ouverte = false;
231
-	while ($do = array_shift($todo)) {
232
-		$todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . "," . $do : $do;
233
-		$o=(false!==strpos($do,"("));
234
-		$f=(false!==strpos($do,")"));
235
-		if ($o AND !$f) $ouverte=true;
236
-		elseif ($f) $ouverte=false;
237
-		if (!$ouverte) $i++;
238
-	}
239
-	$todo=$todo2;
240
-	$query = $debut.' '.array_shift($todo);
241
-
242
-	if (!preg_match('/^\s*(IGNORE\s*)?TABLE\s+(\w+)\s+(ADD|DROP|CHANGE|MODIFY|RENAME)\s*(.*)$/is', $query, $r)) {
243
-	  spip_log("$query incompris", 'pg.'._LOG_ERREUR);
244
-	} else {
245
-	  if ($r[1]) spip_log("j'ignore IGNORE dans $query", 'pg.'._LOG_AVERTISSEMENT);
246
-	  $f = 'spip_pg_alter_' . strtolower($r[3]);
247
-	  if (function_exists($f))
248
-	    $f($r[2], $r[4], $serveur, $requeter);
249
-	  else spip_log("$query non prevu", 'pg.'._LOG_ERREUR);
250
-	}
251
-	// Alter a plusieurs args. Faudrait optimiser.
252
-	if ($todo)
253
-	  spip_pg_alter("TABLE $table " . join(',',$todo));
216
+    // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB)
217
+    // tout en cassant en deux alter distincts "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... 
218
+    // ou revoir l'api de sql_alter en creant un 
219
+    // sql_alter_table($table,array($actions));
220
+    if (!preg_match("/\s*((\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is", $query, $regs)){
221
+        spip_log("$query mal comprise", 'pg.'._LOG_ERREUR);
222
+        return false;
223
+    }
224
+    $debut = $regs[1];
225
+    $table = $regs[3];
226
+    $suite = $regs[4];
227
+    $todo = explode(',', $suite);
228
+    // on remet les morceaux dechires ensembles... que c'est laid !
229
+    $todo2 = array(); $i=0;
230
+    $ouverte = false;
231
+    while ($do = array_shift($todo)) {
232
+        $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . "," . $do : $do;
233
+        $o=(false!==strpos($do,"("));
234
+        $f=(false!==strpos($do,")"));
235
+        if ($o AND !$f) $ouverte=true;
236
+        elseif ($f) $ouverte=false;
237
+        if (!$ouverte) $i++;
238
+    }
239
+    $todo=$todo2;
240
+    $query = $debut.' '.array_shift($todo);
241
+
242
+    if (!preg_match('/^\s*(IGNORE\s*)?TABLE\s+(\w+)\s+(ADD|DROP|CHANGE|MODIFY|RENAME)\s*(.*)$/is', $query, $r)) {
243
+        spip_log("$query incompris", 'pg.'._LOG_ERREUR);
244
+    } else {
245
+        if ($r[1]) spip_log("j'ignore IGNORE dans $query", 'pg.'._LOG_AVERTISSEMENT);
246
+        $f = 'spip_pg_alter_' . strtolower($r[3]);
247
+        if (function_exists($f))
248
+        $f($r[2], $r[4], $serveur, $requeter);
249
+        else spip_log("$query non prevu", 'pg.'._LOG_ERREUR);
250
+    }
251
+    // Alter a plusieurs args. Faudrait optimiser.
252
+    if ($todo)
253
+        spip_pg_alter("TABLE $table " . join(',',$todo));
254 254
 
255 255
 }
256 256
 	      
257 257
 // http://doc.spip.org/@spip_pg_alter_change
258 258
 function spip_pg_alter_change($table, $arg, $serveur='',$requeter=true)
259 259
 {
260
-	if (!preg_match('/^`?(\w+)`?\s+`?(\w+)`?\s+(.*?)\s*(DEFAULT .*?)?(NOT\s+NULL)?\s*(DEFAULT .*?)?$/i',$arg, $r)) {
261
-	  spip_log("alter change: $arg  incompris", 'pg.'._LOG_ERREUR);
262
-	} else {
263
-	  list(,$old, $new, $type, $default, $null, $def2) = $r;
264
-	  $actions = array("ALTER $old TYPE " . mysql2pg_type($type));
265
-	  if ($null)
266
-	    $actions[]= "ALTER $old SET NOT NULL";
267
-	  else
268
-	    $actions[]= "ALTER $old DROP NOT NULL";
269
-
270
-	  if ($d = ($default ? $default : $def2))
271
-	    $actions[]= "ALTER $old SET $d";
272
-	  else
273
-	    $actions[]= "ALTER $old DROP DEFAULT";
274
-
275
-	  spip_pg_query("ALTER TABLE $table " . join(', ', $actions));
276
-
277
-	  if ($old != $new)
278
-	    spip_pg_query("ALTER TABLE $table RENAME $old TO $new", $serveur);
279
-	}
260
+    if (!preg_match('/^`?(\w+)`?\s+`?(\w+)`?\s+(.*?)\s*(DEFAULT .*?)?(NOT\s+NULL)?\s*(DEFAULT .*?)?$/i',$arg, $r)) {
261
+        spip_log("alter change: $arg  incompris", 'pg.'._LOG_ERREUR);
262
+    } else {
263
+        list(,$old, $new, $type, $default, $null, $def2) = $r;
264
+        $actions = array("ALTER $old TYPE " . mysql2pg_type($type));
265
+        if ($null)
266
+        $actions[]= "ALTER $old SET NOT NULL";
267
+        else
268
+        $actions[]= "ALTER $old DROP NOT NULL";
269
+
270
+        if ($d = ($default ? $default : $def2))
271
+        $actions[]= "ALTER $old SET $d";
272
+        else
273
+        $actions[]= "ALTER $old DROP DEFAULT";
274
+
275
+        spip_pg_query("ALTER TABLE $table " . join(', ', $actions));
276
+
277
+        if ($old != $new)
278
+        spip_pg_query("ALTER TABLE $table RENAME $old TO $new", $serveur);
279
+    }
280 280
 }
281 281
 
282 282
 // http://doc.spip.org/@spip_pg_alter_add
283 283
 function spip_pg_alter_add($table, $arg, $serveur='',$requeter=true) {
284
-	if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*(.*)$/', $arg, $r)) {
285
-		spip_log("alter add $arg  incompris", 'pg.'._LOG_ERREUR);
286
-		return NULL;
287
-	}
288
-	if (!$r[1] OR $r[1]=='COLUMN') {
289
-		preg_match('/`?(\w+)`?(.*)/',$r[2], $m);
290
-		if (preg_match('/^(.*)(BEFORE|AFTER|FIRST)(.*)$/is', $m[2], $n)) {
291
-			$m[2]=$n[1];
292
-		}
293
-		return spip_pg_query("ALTER TABLE $table ADD " . $m[1] . ' ' . mysql2pg_type($m[2]),  $serveur, $requeter);
294
-	} elseif ($r[1][0] == 'P') {
295
-		// la primary peut etre sur plusieurs champs
296
-		$r[2] = trim(str_replace('`','',$r[2]));
297
-		$m = ($r[2][0]=='(') ? substr($r[2],1,-1) : $r[2];
298
-		return spip_pg_query("ALTER TABLE $table ADD CONSTRAINT $table" .'_pkey PRIMARY KEY (' . $m . ')', $serveur, $requeter);
299
-	} else {
300
-		preg_match('/([^\s,]*)\s*(.*)?/',$r[2], $m);
301
-		// peut etre "(colonne)" ou "nom_index (colonnes)"
302
-		// bug potentiel si qqn met "(colonne, colonne)"
303
-		//
304
-		// nom_index (colonnes)
305
-		if ($m[2]) {
306
-			$colonnes = substr($m[2],1,-1);
307
-			$nom_index = $m[1];
308
-		}
309
-		else {
310
-			// (colonne)
311
-			if ($m[1][0] == "(") {
312
-				$colonnes = substr($m[1],1,-1);
313
-				if (false!==strpos(",",$colonnes)) {
314
-					spip_log(_LOG_GRAVITE_ERREUR,"PG : Erreur, impossible de creer un index sur plusieurs colonnes"
315
-						." sans qu'il ait de nom ($table, ($colonnes))", 'pg');	
316
-				} else {
317
-					$nom_index = $colonnes;
318
-				}
319
-			}
320
-			// nom_index
321
-			else {
322
-				$nom_index = $colonnes = $m[1];
323
-			}
324
-		}
325
-		return spip_pg_create_index($nom_index, $table, $colonnes, $serveur, $requeter);
326
-	}
284
+    if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*(.*)$/', $arg, $r)) {
285
+        spip_log("alter add $arg  incompris", 'pg.'._LOG_ERREUR);
286
+        return NULL;
287
+    }
288
+    if (!$r[1] OR $r[1]=='COLUMN') {
289
+        preg_match('/`?(\w+)`?(.*)/',$r[2], $m);
290
+        if (preg_match('/^(.*)(BEFORE|AFTER|FIRST)(.*)$/is', $m[2], $n)) {
291
+            $m[2]=$n[1];
292
+        }
293
+        return spip_pg_query("ALTER TABLE $table ADD " . $m[1] . ' ' . mysql2pg_type($m[2]),  $serveur, $requeter);
294
+    } elseif ($r[1][0] == 'P') {
295
+        // la primary peut etre sur plusieurs champs
296
+        $r[2] = trim(str_replace('`','',$r[2]));
297
+        $m = ($r[2][0]=='(') ? substr($r[2],1,-1) : $r[2];
298
+        return spip_pg_query("ALTER TABLE $table ADD CONSTRAINT $table" .'_pkey PRIMARY KEY (' . $m . ')', $serveur, $requeter);
299
+    } else {
300
+        preg_match('/([^\s,]*)\s*(.*)?/',$r[2], $m);
301
+        // peut etre "(colonne)" ou "nom_index (colonnes)"
302
+        // bug potentiel si qqn met "(colonne, colonne)"
303
+        //
304
+        // nom_index (colonnes)
305
+        if ($m[2]) {
306
+            $colonnes = substr($m[2],1,-1);
307
+            $nom_index = $m[1];
308
+        }
309
+        else {
310
+            // (colonne)
311
+            if ($m[1][0] == "(") {
312
+                $colonnes = substr($m[1],1,-1);
313
+                if (false!==strpos(",",$colonnes)) {
314
+                    spip_log(_LOG_GRAVITE_ERREUR,"PG : Erreur, impossible de creer un index sur plusieurs colonnes"
315
+                        ." sans qu'il ait de nom ($table, ($colonnes))", 'pg');	
316
+                } else {
317
+                    $nom_index = $colonnes;
318
+                }
319
+            }
320
+            // nom_index
321
+            else {
322
+                $nom_index = $colonnes = $m[1];
323
+            }
324
+        }
325
+        return spip_pg_create_index($nom_index, $table, $colonnes, $serveur, $requeter);
326
+    }
327 327
 }
328 328
 
329 329
 // http://doc.spip.org/@spip_pg_alter_drop
330 330
 function spip_pg_alter_drop($table, $arg, $serveur='',$requeter=true) {
331
-	if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*`?(\w*)`?/', $arg, $r))
332
-	  spip_log("alter drop: $arg  incompris", 'pg.'._LOG_ERREUR);
333
-	else {
334
-	    if (!$r[1] OR $r[1]=='COLUMN')
335
-	      return spip_pg_query("ALTER TABLE $table DROP " . $r[2],  $serveur);
336
-	    elseif ($r[1][0] == 'P')
337
-	      return spip_pg_query("ALTER TABLE $table DROP CONSTRAINT $table" . '_pkey', $serveur);
338
-	    else {
339
-		return spip_pg_query("DROP INDEX " . $table . '_' . $r[2],  $serveur);
340
-	    }
341
-	}
331
+    if (!preg_match('/^(COLUMN|INDEX|KEY|PRIMARY\s+KEY|)\s*`?(\w*)`?/', $arg, $r))
332
+        spip_log("alter drop: $arg  incompris", 'pg.'._LOG_ERREUR);
333
+    else {
334
+        if (!$r[1] OR $r[1]=='COLUMN')
335
+            return spip_pg_query("ALTER TABLE $table DROP " . $r[2],  $serveur);
336
+        elseif ($r[1][0] == 'P')
337
+            return spip_pg_query("ALTER TABLE $table DROP CONSTRAINT $table" . '_pkey', $serveur);
338
+        else {
339
+        return spip_pg_query("DROP INDEX " . $table . '_' . $r[2],  $serveur);
340
+        }
341
+    }
342 342
 }
343 343
 
344 344
 function spip_pg_alter_modify($table, $arg, $serveur='',$requeter=true) {
345
-	if (!preg_match('/^`?(\w+)`?\s+(.*)$/',$arg, $r)) {
346
-		spip_log("alter modify: $arg  incompris", 'pg.'._LOG_ERREUR);
347
-	} else {
348
-		return spip_pg_alter_change($table, $r[1].' '.$arg, $serveur='',$requeter=true);
349
-	}
345
+    if (!preg_match('/^`?(\w+)`?\s+(.*)$/',$arg, $r)) {
346
+        spip_log("alter modify: $arg  incompris", 'pg.'._LOG_ERREUR);
347
+    } else {
348
+        return spip_pg_alter_change($table, $r[1].' '.$arg, $serveur='',$requeter=true);
349
+    }
350 350
 }
351 351
 
352 352
 // attention (en pg) : 
@@ -354,17 +354,17 @@  discard block
 block discarded – undo
354 354
 // - alter table A rename X to Y = changer le nom de la colonne X en Y 
355 355
 // pour l'instant, traiter simplement RENAME TO X
356 356
 function spip_pg_alter_rename($table, $arg, $serveur='',$requeter=true) {
357
-	$rename="";
358
-	// si TO, mais pas au debut
359
-	if (!stripos($arg,'TO ')){
360
-		$rename=$arg;
361
-	}
362
-	elseif (preg_match('/^(TO)\s*`?(\w*)`?/', $arg, $r)) {
363
-		$rename=$r[2];
364
-	} else {
365
-		spip_log("alter rename: $arg  incompris", 'pg.'._LOG_ERREUR);
366
-	}
367
-	return $rename?spip_pg_query("ALTER TABLE $table RENAME TO $rename"):false;
357
+    $rename="";
358
+    // si TO, mais pas au debut
359
+    if (!stripos($arg,'TO ')){
360
+        $rename=$arg;
361
+    }
362
+    elseif (preg_match('/^(TO)\s*`?(\w*)`?/', $arg, $r)) {
363
+        $rename=$r[2];
364
+    } else {
365
+        spip_log("alter rename: $arg  incompris", 'pg.'._LOG_ERREUR);
366
+    }
367
+    return $rename?spip_pg_query("ALTER TABLE $table RENAME TO $rename"):false;
368 368
 }
369 369
 
370 370
 
@@ -380,44 +380,44 @@  discard block
 block discarded – undo
380 380
  * @return bool ou requete
381 381
  */
382 382
 function spip_pg_create_index($nom, $table, $champs, $serveur='', $requeter=true) {
383
-	if (!($nom OR $table OR $champs)) {
384
-		spip_log("Champ manquant pour creer un index pg ($nom, $table, (".@join(',',$champs)."))",'pg.'._LOG_ERREUR);
385
-		return false;
386
-	}
383
+    if (!($nom OR $table OR $champs)) {
384
+        spip_log("Champ manquant pour creer un index pg ($nom, $table, (".@join(',',$champs)."))",'pg.'._LOG_ERREUR);
385
+        return false;
386
+    }
387 387
 	
388
-	$nom = str_replace("`","",$nom);
389
-	$champs = str_replace("`","",$champs);
388
+    $nom = str_replace("`","",$nom);
389
+    $champs = str_replace("`","",$champs);
390 390
 	
391
-	// PG ne differentie pas noms des index en fonction des tables
392
-	// il faut donc creer des noms uniques d'index pour une base pg
393
-	$nom = $table.'_'.$nom;
394
-	// enlever d'eventuelles parentheses deja presentes sur champs
395
-	if (!is_array($champs)){
396
-		 if ($champs[0]=="(") $champs = substr($champs,1,-1);
397
-		 $champs = array($champs);
398
-	}
399
-	$query = "CREATE INDEX $nom ON $table (" . join(',',$champs) . ")";
400
-	if (!$requeter) return $query;
401
-	$res = spip_pg_query($query, $serveur, $requeter);
402
-	return $res;
391
+    // PG ne differentie pas noms des index en fonction des tables
392
+    // il faut donc creer des noms uniques d'index pour une base pg
393
+    $nom = $table.'_'.$nom;
394
+    // enlever d'eventuelles parentheses deja presentes sur champs
395
+    if (!is_array($champs)){
396
+            if ($champs[0]=="(") $champs = substr($champs,1,-1);
397
+            $champs = array($champs);
398
+    }
399
+    $query = "CREATE INDEX $nom ON $table (" . join(',',$champs) . ")";
400
+    if (!$requeter) return $query;
401
+    $res = spip_pg_query($query, $serveur, $requeter);
402
+    return $res;
403 403
 }
404 404
 
405 405
 
406 406
 // http://doc.spip.org/@spip_pg_explain
407 407
 function spip_pg_explain($query, $serveur='',$requeter=true){
408
-	if (strpos(ltrim($query), 'SELECT') !== 0) return array();
409
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
410
-	$prefixe = $connexion['prefixe'];
411
-	$link = $connexion['link'];
412
-	if (preg_match('/\s(SET|VALUES|WHERE)\s/i', $query, $regs)) {
413
-		$suite = strstr($query, $regs[0]);
414
-		$query = substr($query, 0, -strlen($suite));
415
-	} else $suite ='';
416
-	$query = 'EXPLAIN ' . preg_replace('/([,\s])spip_/', '\1'.$prefixe.'_', $query) . $suite;
417
-
418
-	if (!$requeter) return $query;
419
-	$r = spip_pg_query_simple($link,$query);
420
-	return spip_pg_fetch($r, NULL, $serveur);
408
+    if (strpos(ltrim($query), 'SELECT') !== 0) return array();
409
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
410
+    $prefixe = $connexion['prefixe'];
411
+    $link = $connexion['link'];
412
+    if (preg_match('/\s(SET|VALUES|WHERE)\s/i', $query, $regs)) {
413
+        $suite = strstr($query, $regs[0]);
414
+        $query = substr($query, 0, -strlen($suite));
415
+    } else $suite ='';
416
+    $query = 'EXPLAIN ' . preg_replace('/([,\s])spip_/', '\1'.$prefixe.'_', $query) . $suite;
417
+
418
+    if (!$requeter) return $query;
419
+    $r = spip_pg_query_simple($link,$query);
420
+    return spip_pg_fetch($r, NULL, $serveur);
421 421
 }
422 422
 
423 423
 
@@ -436,76 +436,76 @@  discard block
 block discarded – undo
436 436
  * 		False en cas d'erreur.
437 437
 **/
438 438
 function spip_pg_selectdb($db, $serveur='',$requeter=true) {
439
-	// se connecter a la base indiquee
440
-	// avec les identifiants connus
441
-	$index = $serveur ? strtolower($serveur) : 0;
442
-
443
-	if ($link = spip_connect_db('', '', '', '', $db, 'pg', '', '')){
444
-		if (($db==$link['db']) && $GLOBALS['connexions'][$index] = $link)
445
-			return $db;
446
-	} else
447
-		return false;
439
+    // se connecter a la base indiquee
440
+    // avec les identifiants connus
441
+    $index = $serveur ? strtolower($serveur) : 0;
442
+
443
+    if ($link = spip_connect_db('', '', '', '', $db, 'pg', '', '')){
444
+        if (($db==$link['db']) && $GLOBALS['connexions'][$index] = $link)
445
+            return $db;
446
+    } else
447
+        return false;
448 448
 }
449 449
 
450 450
 // Qu'une seule base pour le moment
451 451
 
452 452
 // http://doc.spip.org/@spip_pg_listdbs
453 453
 function spip_pg_listdbs($serveur) {
454
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
455
-	$link = $connexion['link'];
456
-	$dbs = array();
457
-	$res = spip_pg_query_simple($link, "select * From pg_database");
458
-	while ($row = pg_fetch_array($res, NULL, PGSQL_NUM))
459
-		$dbs[] = reset($row);
460
-
461
-	return $dbs;
454
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
455
+    $link = $connexion['link'];
456
+    $dbs = array();
457
+    $res = spip_pg_query_simple($link, "select * From pg_database");
458
+    while ($row = pg_fetch_array($res, NULL, PGSQL_NUM))
459
+        $dbs[] = reset($row);
460
+
461
+    return $dbs;
462 462
 }
463 463
 
464 464
 // http://doc.spip.org/@spip_pg_select
465 465
 function spip_pg_select($select, $from, $where='',
466
-			$groupby=array(), $orderby='', $limit='',
467
-                           $having='', $serveur='',$requeter=true){
468
-
469
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
470
-	$prefixe = $connexion['prefixe'];
471
-	$link = $connexion['link'];
472
-	$db = $connexion['db'];
473
-
474
-	$limit = preg_match("/^\s*(([0-9]+),)?\s*([0-9]+)\s*$/", $limit,$limatch);
475
-	if ($limit) {
476
-		$offset = $limatch[2];
477
-		$count = $limatch[3];
478
-	}
479
-
480
-	$select = spip_pg_frommysql($select);
481
-
482
-	// si pas de tri explicitement demande, le GROUP BY ne
483
-	// contient que la clef primaire.
484
-	// lui ajouter alors le champ de tri par defaut
485
-	if (preg_match("/FIELD\(([a-z]+\.[a-z]+),/i", $orderby[0], $groupbyplus)) {
486
-		$groupby[] = $groupbyplus[1];
487
-	}
488
-
489
-	$orderby = spip_pg_orderby($orderby, $select);
490
-
491
-	if ($having) {
492
-	  if (is_array($having))
493
-	    $having = join("\n\tAND ", array_map('calculer_pg_where', $having));
494
-	}
495
-	$from =  spip_pg_from($from, $prefixe);
496
-	$query =  "SELECT ". $select
497
-	  . (!$from ? '' : "\nFROM $from")
498
-	  . (!$where ? '' : ("\nWHERE " . (!is_array($where) ? calculer_pg_where($where) : (join("\n\tAND ", array_map('calculer_pg_where', $where))))))
499
-	  . spip_pg_groupby($groupby, $from, $select)
500
-	  . (!$having ? '' : "\nHAVING $having")
501
-	  . ($orderby ? ("\nORDER BY $orderby") :'')
502
-	  . (!$limit ? '' : (" LIMIT $count" . (!$offset ? '' : " OFFSET $offset")));
503
-
504
-	// renvoyer la requete inerte si demandee
505
-	if ($requeter === false) return $query;
466
+            $groupby=array(), $orderby='', $limit='',
467
+                            $having='', $serveur='',$requeter=true){
468
+
469
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
470
+    $prefixe = $connexion['prefixe'];
471
+    $link = $connexion['link'];
472
+    $db = $connexion['db'];
473
+
474
+    $limit = preg_match("/^\s*(([0-9]+),)?\s*([0-9]+)\s*$/", $limit,$limatch);
475
+    if ($limit) {
476
+        $offset = $limatch[2];
477
+        $count = $limatch[3];
478
+    }
479
+
480
+    $select = spip_pg_frommysql($select);
481
+
482
+    // si pas de tri explicitement demande, le GROUP BY ne
483
+    // contient que la clef primaire.
484
+    // lui ajouter alors le champ de tri par defaut
485
+    if (preg_match("/FIELD\(([a-z]+\.[a-z]+),/i", $orderby[0], $groupbyplus)) {
486
+        $groupby[] = $groupbyplus[1];
487
+    }
488
+
489
+    $orderby = spip_pg_orderby($orderby, $select);
490
+
491
+    if ($having) {
492
+        if (is_array($having))
493
+        $having = join("\n\tAND ", array_map('calculer_pg_where', $having));
494
+    }
495
+    $from =  spip_pg_from($from, $prefixe);
496
+    $query =  "SELECT ". $select
497
+        . (!$from ? '' : "\nFROM $from")
498
+        . (!$where ? '' : ("\nWHERE " . (!is_array($where) ? calculer_pg_where($where) : (join("\n\tAND ", array_map('calculer_pg_where', $where))))))
499
+        . spip_pg_groupby($groupby, $from, $select)
500
+        . (!$having ? '' : "\nHAVING $having")
501
+        . ($orderby ? ("\nORDER BY $orderby") :'')
502
+        . (!$limit ? '' : (" LIMIT $count" . (!$offset ? '' : " OFFSET $offset")));
503
+
504
+    // renvoyer la requete inerte si demandee
505
+    if ($requeter === false) return $query;
506 506
 	
507
-	$r = spip_pg_trace_query($query, $serveur);
508
-	return $r ? $r : $query;;
507
+    $r = spip_pg_trace_query($query, $serveur);
508
+    return $r ? $r : $query;;
509 509
 }
510 510
 
511 511
 // Le traitement des prefixes de table dans un Select se limite au FROM
@@ -514,23 +514,23 @@  discard block
 block discarded – undo
514 514
 // http://doc.spip.org/@spip_pg_from
515 515
 function spip_pg_from($from, $prefixe)
516 516
 {
517
-	if (is_array($from)) $from = spip_pg_select_as($from);
518
-	return !$prefixe ? $from : preg_replace('/(\b)spip_/','\1'.$prefixe.'_', $from);
517
+    if (is_array($from)) $from = spip_pg_select_as($from);
518
+    return !$prefixe ? $from : preg_replace('/(\b)spip_/','\1'.$prefixe.'_', $from);
519 519
 }
520 520
 
521 521
 // http://doc.spip.org/@spip_pg_orderby
522 522
 function spip_pg_orderby($order, $select)
523 523
 {
524
-	$res = array();
525
-	$arg = (is_array($order) ?  $order : preg_split('/\s*,\s*/',$order));
524
+    $res = array();
525
+    $arg = (is_array($order) ?  $order : preg_split('/\s*,\s*/',$order));
526 526
 
527
-	foreach($arg as $v) {
528
-		if (preg_match('/(case\s+.*?else\s+0\s+end)\s*AS\s+' . $v .'/', $select, $m)) {
527
+    foreach($arg as $v) {
528
+        if (preg_match('/(case\s+.*?else\s+0\s+end)\s*AS\s+' . $v .'/', $select, $m)) {
529 529
 
530
-		  $res[] = $m[1];
531
-		} else $res[]=$v;
532
-	}
533
-	return spip_pg_frommysql(join(',',$res));
530
+            $res[] = $m[1];
531
+        } else $res[]=$v;
532
+    }
533
+    return spip_pg_frommysql(join(',',$res));
534 534
 }
535 535
 
536 536
 // Conversion a l'arrach' des jointures MySQL en jointures PG
@@ -540,47 +540,47 @@  discard block
 block discarded – undo
540 540
 // http://doc.spip.org/@spip_pg_groupby
541 541
 function spip_pg_groupby($groupby, $from, $select)
542 542
 {
543
-	$join = strpos($from, ",");
544
-	// ismplifier avant de decouper
545
-	if (is_string($select))
546
-		// fct SQL sur colonne et constante apostrophee ==> la colonne
547
-		$select = preg_replace('/\w+\(\s*([^(),\']*),\s*\'[^\']*\'[^)]*\)/','\\1', $select);
548
-
549
-	if ($join OR $groupby) $join = is_array($select) ? $select : explode(", ", $select);
550
-	if ($join) {
551
-		// enlever les 0 as points, '', ...
552
-		foreach($join as $k=>$v){
553
-			$v = str_replace('DISTINCT ','',$v);
554
-			// fct SQL sur colonne et constante apostrophee ==> la colonne
555
-			$v = preg_replace('/\w+\(\s*([^(),\']*),\s*\'[^\']*\'[^)]*\)/','\\1', $v);
556
-			$v = preg_replace('/CAST\(\s*([^(),\' ]*\s+)as\s*\w+\)/','\\1', $v);
557
-			// resultat d'agregat ne sont pas a mettre dans le groupby
558
-			$v = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)(\s*AS\s+\w+)\s*,?/i','', $v);
559
-			// idem sans AS (fetch numerique)
560
-			$v = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)\s*,?/i','', $v);
561
-			// des AS simples : on garde le cote droit du AS
562
-			$v = preg_replace('/^.*\sAS\s+(\w+)\s*$/i','\\1', $v);
563
-			// ne reste plus que les vrais colonnes, ou des constantes a virer
564
-			if (preg_match(',^[\'"],',$v) OR is_numeric($v))
565
-				unset($join[$k]);
566
-			else
567
-				$join[$k] = trim($v);
568
-		}
569
-		$join = array_diff($join,array(''));
570
-		$join = implode(',',$join);
571
-	}
572
-	if (is_array($groupby)) $groupby = join(',',$groupby);
573
-	if ($join) $groupby = $groupby ? "$groupby, $join" : $join;
574
-	if (!$groupby) return '';
575
-
576
-	$groupby = spip_pg_frommysql($groupby);
577
-	// Ne pas mettre dans le Group-By des valeurs numeriques
578
-	// issue de prepare_recherche
579
-	$groupby = preg_replace('/^\s*\d+\s+AS\s+\w+\s*,?\s*/i','', $groupby);
580
-	$groupby = preg_replace('/,\s*\d+\s+AS\s+\w+\s*/i','', $groupby);
581
-	$groupby = preg_replace('/\s+AS\s+\w+\s*/i','', $groupby);
582
-
583
-	return "\nGROUP BY $groupby"; 
543
+    $join = strpos($from, ",");
544
+    // ismplifier avant de decouper
545
+    if (is_string($select))
546
+        // fct SQL sur colonne et constante apostrophee ==> la colonne
547
+        $select = preg_replace('/\w+\(\s*([^(),\']*),\s*\'[^\']*\'[^)]*\)/','\\1', $select);
548
+
549
+    if ($join OR $groupby) $join = is_array($select) ? $select : explode(", ", $select);
550
+    if ($join) {
551
+        // enlever les 0 as points, '', ...
552
+        foreach($join as $k=>$v){
553
+            $v = str_replace('DISTINCT ','',$v);
554
+            // fct SQL sur colonne et constante apostrophee ==> la colonne
555
+            $v = preg_replace('/\w+\(\s*([^(),\']*),\s*\'[^\']*\'[^)]*\)/','\\1', $v);
556
+            $v = preg_replace('/CAST\(\s*([^(),\' ]*\s+)as\s*\w+\)/','\\1', $v);
557
+            // resultat d'agregat ne sont pas a mettre dans le groupby
558
+            $v = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)(\s*AS\s+\w+)\s*,?/i','', $v);
559
+            // idem sans AS (fetch numerique)
560
+            $v = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)\s*,?/i','', $v);
561
+            // des AS simples : on garde le cote droit du AS
562
+            $v = preg_replace('/^.*\sAS\s+(\w+)\s*$/i','\\1', $v);
563
+            // ne reste plus que les vrais colonnes, ou des constantes a virer
564
+            if (preg_match(',^[\'"],',$v) OR is_numeric($v))
565
+                unset($join[$k]);
566
+            else
567
+                $join[$k] = trim($v);
568
+        }
569
+        $join = array_diff($join,array(''));
570
+        $join = implode(',',$join);
571
+    }
572
+    if (is_array($groupby)) $groupby = join(',',$groupby);
573
+    if ($join) $groupby = $groupby ? "$groupby, $join" : $join;
574
+    if (!$groupby) return '';
575
+
576
+    $groupby = spip_pg_frommysql($groupby);
577
+    // Ne pas mettre dans le Group-By des valeurs numeriques
578
+    // issue de prepare_recherche
579
+    $groupby = preg_replace('/^\s*\d+\s+AS\s+\w+\s*,?\s*/i','', $groupby);
580
+    $groupby = preg_replace('/,\s*\d+\s+AS\s+\w+\s*/i','', $groupby);
581
+    $groupby = preg_replace('/\s+AS\s+\w+\s*/i','', $groupby);
582
+
583
+    return "\nGROUP BY $groupby"; 
584 584
 }
585 585
 
586 586
 // Conversion des operateurs MySQL en PG
@@ -593,270 +593,270 @@  discard block
 block discarded – undo
593 593
 // http://doc.spip.org/@spip_pg_frommysql
594 594
 function spip_pg_frommysql($arg)
595 595
 {
596
-	if (is_array($arg)) $arg = join(", ", $arg);
596
+    if (is_array($arg)) $arg = join(", ", $arg);
597 597
 
598
-	$res = spip_pg_fromfield($arg);
598
+    $res = spip_pg_fromfield($arg);
599 599
 
600
-	$res = preg_replace('/\brand[(][)]/i','random()', $res);
600
+    $res = preg_replace('/\brand[(][)]/i','random()', $res);
601 601
 
602
-	$res = preg_replace('/\b0\.0[+]([a-zA-Z0-9_.]+)\s*/',
603
-			    'CAST(substring(\1, \'^ *[0-9.]+\') as float)',
604
-			    $res);
605
-	$res = preg_replace('/\b0[+]([a-zA-Z0-9_.]+)\s*/',
606
-			    'CAST(substring(\1, \'^ *[0-9]+\') as int)',
607
-			    $res);
608
-	$res = preg_replace('/\bconv[(]([^,]*)[^)]*[)]/i',
609
-			    'CAST(substring(\1, \'^ *[0-9]+\') as int)',
610
-			    $res);
602
+    $res = preg_replace('/\b0\.0[+]([a-zA-Z0-9_.]+)\s*/',
603
+                'CAST(substring(\1, \'^ *[0-9.]+\') as float)',
604
+                $res);
605
+    $res = preg_replace('/\b0[+]([a-zA-Z0-9_.]+)\s*/',
606
+                'CAST(substring(\1, \'^ *[0-9]+\') as int)',
607
+                $res);
608
+    $res = preg_replace('/\bconv[(]([^,]*)[^)]*[)]/i',
609
+                'CAST(substring(\1, \'^ *[0-9]+\') as int)',
610
+                $res);
611 611
 
612
-	$res = preg_replace('/UNIX_TIMESTAMP\s*[(]\s*[)]/',
613
-			    ' EXTRACT(epoch FROM NOW())', $res);
612
+    $res = preg_replace('/UNIX_TIMESTAMP\s*[(]\s*[)]/',
613
+                ' EXTRACT(epoch FROM NOW())', $res);
614 614
 	
615
-	// la fonction md5(integer) n'est pas connu en pg
616
-	// il faut donc forcer les types en text (cas de md5(id_article))
617
-	$res = preg_replace('/md5\s*[(]([^)]*)[)]/i',
618
-			    'MD5(CAST(\1 AS text))', $res);
615
+    // la fonction md5(integer) n'est pas connu en pg
616
+    // il faut donc forcer les types en text (cas de md5(id_article))
617
+    $res = preg_replace('/md5\s*[(]([^)]*)[)]/i',
618
+                'MD5(CAST(\1 AS text))', $res);
619 619
 
620
-	$res = preg_replace('/UNIX_TIMESTAMP\s*[(]([^)]*)[)]/',
621
-			    ' EXTRACT(epoch FROM \1)', $res);
620
+    $res = preg_replace('/UNIX_TIMESTAMP\s*[(]([^)]*)[)]/',
621
+                ' EXTRACT(epoch FROM \1)', $res);
622 622
 
623
-	$res = preg_replace('/\bDAYOFMONTH\s*[(]([^()]*([(][^()]*[)][^()]*)*[^)]*)[)]/',
624
-			    ' EXTRACT(day FROM \1)',
625
-			    $res);
623
+    $res = preg_replace('/\bDAYOFMONTH\s*[(]([^()]*([(][^()]*[)][^()]*)*[^)]*)[)]/',
624
+                ' EXTRACT(day FROM \1)',
625
+                $res);
626 626
 
627
-	$res = preg_replace('/\bMONTH\s*[(]([^()]*([(][^)]*[)][^()]*)*[^)]*)[)]/',
628
-			    ' EXTRACT(month FROM \1)',
629
-			    $res);
627
+    $res = preg_replace('/\bMONTH\s*[(]([^()]*([(][^)]*[)][^()]*)*[^)]*)[)]/',
628
+                ' EXTRACT(month FROM \1)',
629
+                $res);
630 630
 
631
-	$res = preg_replace('/\bYEAR\s*[(]([^()]*([(][^)]*[)][^()]*)*[^)]*)[)]/',
632
-			    ' EXTRACT(year FROM \1)',
633
-			    $res);
631
+    $res = preg_replace('/\bYEAR\s*[(]([^()]*([(][^)]*[)][^()]*)*[^)]*)[)]/',
632
+                ' EXTRACT(year FROM \1)',
633
+                $res);
634 634
 
635
-	$res = preg_replace('/TO_DAYS\s*[(]([^()]*([(][^)]*[)][()]*)*)[)]/',
636
-			    ' EXTRACT(day FROM \1 - \'0001-01-01\')',
637
-			    $res);
635
+    $res = preg_replace('/TO_DAYS\s*[(]([^()]*([(][^)]*[)][()]*)*)[)]/',
636
+                ' EXTRACT(day FROM \1 - \'0001-01-01\')',
637
+                $res);
638 638
 
639
-	$res = preg_replace("/(EXTRACT[(][^ ]* FROM *)\"([^\"]*)\"/", '\1\'\2\'', $res);
639
+    $res = preg_replace("/(EXTRACT[(][^ ]* FROM *)\"([^\"]*)\"/", '\1\'\2\'', $res);
640 640
 
641
-	$res = preg_replace('/DATE_FORMAT\s*[(]([^,]*),\s*\'%Y%m%d\'[)]/', 'to_char(\1, \'YYYYMMDD\')', $res);
641
+    $res = preg_replace('/DATE_FORMAT\s*[(]([^,]*),\s*\'%Y%m%d\'[)]/', 'to_char(\1, \'YYYYMMDD\')', $res);
642 642
 
643
-	$res = preg_replace('/DATE_FORMAT\s*[(]([^,]*),\s*\'%Y%m\'[)]/', 'to_char(\1, \'YYYYMM\')', $res);
643
+    $res = preg_replace('/DATE_FORMAT\s*[(]([^,]*),\s*\'%Y%m\'[)]/', 'to_char(\1, \'YYYYMM\')', $res);
644 644
 
645
-	$res = preg_replace('/DATE_SUB\s*[(]([^,]*),/', '(\1 -', $res);
646
-	$res = preg_replace('/DATE_ADD\s*[(]([^,]*),/', '(\1 +', $res);
647
-	$res = preg_replace('/INTERVAL\s+(\d+\s+\w+)/', 'INTERVAL \'\1\'', $res);
648
-	$res = preg_replace('/([+<>-]=?)\s*(\'\d+-\d+-\d+\s+\d+:\d+(:\d+)\')/', '\1 timestamp \2', $res);
649
-	$res = preg_replace('/(\'\d+-\d+-\d+\s+\d+:\d+:\d+\')\s*([+<>-]=?)/', 'timestamp \1 \2', $res);
645
+    $res = preg_replace('/DATE_SUB\s*[(]([^,]*),/', '(\1 -', $res);
646
+    $res = preg_replace('/DATE_ADD\s*[(]([^,]*),/', '(\1 +', $res);
647
+    $res = preg_replace('/INTERVAL\s+(\d+\s+\w+)/', 'INTERVAL \'\1\'', $res);
648
+    $res = preg_replace('/([+<>-]=?)\s*(\'\d+-\d+-\d+\s+\d+:\d+(:\d+)\')/', '\1 timestamp \2', $res);
649
+    $res = preg_replace('/(\'\d+-\d+-\d+\s+\d+:\d+:\d+\')\s*([+<>-]=?)/', 'timestamp \1 \2', $res);
650 650
 
651
-	$res = preg_replace('/([+<>-]=?)\s*(\'\d+-\d+-\d+\')/', '\1 timestamp \2', $res);
652
-	$res = preg_replace('/(\'\d+-\d+-\d+\')\s*([+<>-]=?)/', 'timestamp \1 \2', $res);
651
+    $res = preg_replace('/([+<>-]=?)\s*(\'\d+-\d+-\d+\')/', '\1 timestamp \2', $res);
652
+    $res = preg_replace('/(\'\d+-\d+-\d+\')\s*([+<>-]=?)/', 'timestamp \1 \2', $res);
653 653
 
654
-	$res = preg_replace('/(timestamp .\d+)-00-/','\1-01-', $res);
655
-	$res = preg_replace('/(timestamp .\d+-\d+)-00/','\1-01',$res);
654
+    $res = preg_replace('/(timestamp .\d+)-00-/','\1-01-', $res);
655
+    $res = preg_replace('/(timestamp .\d+-\d+)-00/','\1-01',$res);
656 656
 # correct en theorie mais produit des debordements arithmetiques
657 657
 #	$res = preg_replace("/(EXTRACT[(][^ ]* FROM *)(timestamp *'[^']*' *[+-] *timestamp *'[^']*') *[)]/", '\2', $res);
658
-	$res = preg_replace("/(EXTRACT[(][^ ]* FROM *)('[^']*')/", '\1 timestamp \2', $res);
659
-	$res = preg_replace("/\sLIKE\s+/", ' ILIKE ', $res);
660
-	return str_replace('REGEXP', '~', $res);
658
+    $res = preg_replace("/(EXTRACT[(][^ ]* FROM *)('[^']*')/", '\1 timestamp \2', $res);
659
+    $res = preg_replace("/\sLIKE\s+/", ' ILIKE ', $res);
660
+    return str_replace('REGEXP', '~', $res);
661 661
 }
662 662
 
663 663
 // http://doc.spip.org/@spip_pg_fromfield
664 664
 function spip_pg_fromfield($arg)
665 665
 {
666
-	while(preg_match('/^(.*?)FIELD\s*\(([^,]*)((,[^,)]*)*)\)/', $arg, $m)) {
667
-
668
-		preg_match_all('/,([^,]*)/', $m[3], $r, PREG_PATTERN_ORDER);
669
-		$res = '';
670
-		$n=0;
671
-		$index = $m[2];
672
-		foreach($r[1] as $v) {
673
-			$n++;
674
-			$res .= "\nwhen $index=$v then $n";
675
-		}
676
-		$arg = $m[1] . "case $res else 0 end "
677
-		  . substr($arg,strlen($m[0]));
678
-	}
679
-	return $arg;
666
+    while(preg_match('/^(.*?)FIELD\s*\(([^,]*)((,[^,)]*)*)\)/', $arg, $m)) {
667
+
668
+        preg_match_all('/,([^,]*)/', $m[3], $r, PREG_PATTERN_ORDER);
669
+        $res = '';
670
+        $n=0;
671
+        $index = $m[2];
672
+        foreach($r[1] as $v) {
673
+            $n++;
674
+            $res .= "\nwhen $index=$v then $n";
675
+        }
676
+        $arg = $m[1] . "case $res else 0 end "
677
+            . substr($arg,strlen($m[0]));
678
+    }
679
+    return $arg;
680 680
 }
681 681
 
682 682
 // http://doc.spip.org/@calculer_pg_where
683 683
 function calculer_pg_where($v)
684 684
 {
685
-	if (!is_array($v))
686
-		return spip_pg_frommysql($v);
687
-
688
-	$op = str_replace('REGEXP', '~', array_shift($v));
689
-	if (!($n=count($v)))
690
-		return $op;
691
-	else {
692
-		$arg = calculer_pg_where(array_shift($v));
693
-		if ($n==1) {
694
-			  return "$op($arg)";
695
-		} else {
696
-			$arg2 = calculer_pg_where(array_shift($v));
697
-			if ($n==2) {
698
-				return "($arg $op $arg2)";
699
-			} else return "($arg $op ($arg2) : $v[0])";
700
-		}
701
-	}
685
+    if (!is_array($v))
686
+        return spip_pg_frommysql($v);
687
+
688
+    $op = str_replace('REGEXP', '~', array_shift($v));
689
+    if (!($n=count($v)))
690
+        return $op;
691
+    else {
692
+        $arg = calculer_pg_where(array_shift($v));
693
+        if ($n==1) {
694
+                return "$op($arg)";
695
+        } else {
696
+            $arg2 = calculer_pg_where(array_shift($v));
697
+            if ($n==2) {
698
+                return "($arg $op $arg2)";
699
+            } else return "($arg $op ($arg2) : $v[0])";
700
+        }
701
+    }
702 702
 }
703 703
 
704 704
 
705 705
 // http://doc.spip.org/@calculer_pg_expression
706 706
 function calculer_pg_expression($expression, $v, $join = 'AND'){
707
-	if (empty($v))
708
-		return '';
707
+    if (empty($v))
708
+        return '';
709 709
 	
710
-	$exp = "\n$expression ";
710
+    $exp = "\n$expression ";
711 711
 	
712
-	if (!is_array($v)) $v = array($v);
712
+    if (!is_array($v)) $v = array($v);
713 713
 	
714
-	if (strtoupper($join) === 'AND')
715
-			return $exp . join("\n\t$join ", array_map('calculer_pg_where', $v));
716
-		else
717
-			return $exp . join($join, $v);
714
+    if (strtoupper($join) === 'AND')
715
+            return $exp . join("\n\t$join ", array_map('calculer_pg_where', $v));
716
+        else
717
+            return $exp . join($join, $v);
718 718
 }
719 719
 
720 720
 // http://doc.spip.org/@spip_pg_select_as
721 721
 function spip_pg_select_as($args)
722 722
 {
723
-	$argsas = "";
724
-	foreach($args as $k => $v) {
725
-		if (substr($k,-1)=='@') {
726
-			// c'est une jointure qui se refere au from precedent
727
-			// pas de virgule
728
-		  $argsas .= '  ' . $v ;
729
-		}
730
-		else {
731
-			$as = '';
732
-			//  spip_log("$k : $v", _LOG_DEBUG);
733
-			if (!is_numeric($k)) {
734
-				if (preg_match('/\.(.*)$/', $k, $r))
735
-					$v = $k;
736
-				elseif ($v != $k) {
737
-					$p = strpos($v, " ");
738
-					if ($p)
739
-					  $v = substr($v,0,$p) . " AS $k" . substr($v,$p);
740
-					else  $as = " AS $k"; 
741
-				}
742
-			}
743
-			// spip_log("subs $k : $v avec $as", _LOG_DEBUG);
744
-			// if (strpos($v, 'JOIN') === false)  $argsas .= ', ';
745
-			$argsas .= ', '. $v . $as; 
746
-		}
747
-	}
748
-	return substr($argsas,2);
723
+    $argsas = "";
724
+    foreach($args as $k => $v) {
725
+        if (substr($k,-1)=='@') {
726
+            // c'est une jointure qui se refere au from precedent
727
+            // pas de virgule
728
+            $argsas .= '  ' . $v ;
729
+        }
730
+        else {
731
+            $as = '';
732
+            //  spip_log("$k : $v", _LOG_DEBUG);
733
+            if (!is_numeric($k)) {
734
+                if (preg_match('/\.(.*)$/', $k, $r))
735
+                    $v = $k;
736
+                elseif ($v != $k) {
737
+                    $p = strpos($v, " ");
738
+                    if ($p)
739
+                        $v = substr($v,0,$p) . " AS $k" . substr($v,$p);
740
+                    else  $as = " AS $k"; 
741
+                }
742
+            }
743
+            // spip_log("subs $k : $v avec $as", _LOG_DEBUG);
744
+            // if (strpos($v, 'JOIN') === false)  $argsas .= ', ';
745
+            $argsas .= ', '. $v . $as; 
746
+        }
747
+    }
748
+    return substr($argsas,2);
749 749
 }
750 750
 
751 751
 // http://doc.spip.org/@spip_pg_fetch
752 752
 function spip_pg_fetch($res, $t='', $serveur='',$requeter=true) {
753 753
 
754
-	if ($res) $res = pg_fetch_array($res, NULL, PGSQL_ASSOC);
755
-	return $res;
754
+    if ($res) $res = pg_fetch_array($res, NULL, PGSQL_ASSOC);
755
+    return $res;
756 756
 }
757 757
 
758 758
 function spip_pg_seek($r, $row_number, $serveur='',$requeter=true) {
759
-	if ($r) return pg_result_seek($r,$row_number);
759
+    if ($r) return pg_result_seek($r,$row_number);
760 760
 }
761 761
 
762 762
 
763 763
 // http://doc.spip.org/@spip_pg_countsel
764 764
 function spip_pg_countsel($from = array(), $where = array(), $groupby=array(),
765
-			  $having = array(), $serveur='',$requeter=true) 
765
+                $having = array(), $serveur='',$requeter=true) 
766 766
 {
767
-	$c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
768
-	$r = spip_pg_select("COUNT($c)", $from, $where,'', '', '', $having, $serveur, $requeter);
769
-	if (!$requeter) return $r;
770
-	if (!is_resource($r)) return 0;
771
-	list($c) = pg_fetch_array($r, NULL, PGSQL_NUM);
772
-	return $c;
767
+    $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby)));
768
+    $r = spip_pg_select("COUNT($c)", $from, $where,'', '', '', $having, $serveur, $requeter);
769
+    if (!$requeter) return $r;
770
+    if (!is_resource($r)) return 0;
771
+    list($c) = pg_fetch_array($r, NULL, PGSQL_NUM);
772
+    return $c;
773 773
 }
774 774
 
775 775
 // http://doc.spip.org/@spip_pg_count
776 776
 function spip_pg_count($res, $serveur='',$requeter=true) {
777
-	return !$res ? 0 : pg_numrows($res);
777
+    return !$res ? 0 : pg_numrows($res);
778 778
 }
779 779
   
780 780
 // http://doc.spip.org/@spip_pg_free
781 781
 function spip_pg_free($res, $serveur='',$requeter=true) {
782
-  // rien a faire en postgres
782
+    // rien a faire en postgres
783 783
 }
784 784
 
785 785
 // http://doc.spip.org/@spip_pg_delete
786 786
 function spip_pg_delete($table, $where='', $serveur='',$requeter=true) {
787 787
 
788
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
789
-	$prefixe = $connexion['prefixe'];
790
-	$link = $connexion['link'];
791
-	$db = $connexion['db'];
792
-	if ($prefixe) $table = preg_replace('/^spip/', $prefixe, $table);
788
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
789
+    $prefixe = $connexion['prefixe'];
790
+    $link = $connexion['link'];
791
+    $db = $connexion['db'];
792
+    if ($prefixe) $table = preg_replace('/^spip/', $prefixe, $table);
793 793
 	
794
-	$query = calculer_pg_expression('DELETE FROM', $table, ',')
795
-			. calculer_pg_expression('WHERE', $where, 'AND');
794
+    $query = calculer_pg_expression('DELETE FROM', $table, ',')
795
+            . calculer_pg_expression('WHERE', $where, 'AND');
796 796
 			
797
-	// renvoyer la requete inerte si demandee
798
-	if (!$requeter) return $query;
797
+    // renvoyer la requete inerte si demandee
798
+    if (!$requeter) return $query;
799 799
 	
800
-	$res = spip_pg_trace_query($query, $serveur);
801
-	if ($res)
802
-		return pg_affected_rows($res);
803
-	else
804
-		return false;
800
+    $res = spip_pg_trace_query($query, $serveur);
801
+    if ($res)
802
+        return pg_affected_rows($res);
803
+    else
804
+        return false;
805 805
 }
806 806
 
807 807
 // http://doc.spip.org/@spip_pg_insert
808 808
 function spip_pg_insert($table, $champs, $valeurs, $desc=array(), $serveur='',$requeter=true) {
809
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
810
-	$prefixe = $connexion['prefixe'];
811
-	$link = $connexion['link'];
812
-	$db = $connexion['db'];
813
-
814
-	if (!$desc) $desc = description_table($table, $serveur);
815
-	$seq = spip_pg_sequence($table,true);
816
-	// si pas de cle primaire dans l'insertion, renvoyer curval
817
-	if (!preg_match(",\b$seq\b,",$champs)){
818
-		$seq = spip_pg_sequence($table);
819
-		if ($prefixe)
820
-			$seq = preg_replace('/^spip/', $prefixe, $seq);
821
-		$seq = "currval('$seq')";
822
-	}
823
-
824
-
825
-	if ($prefixe) {
826
-		$table = preg_replace('/^spip/', $prefixe, $table);
827
-	}
828
-	$ret = !$seq ? '' : (" RETURNING $seq");
829
-	$ins = (strlen($champs)<3)
830
-	  ? " DEFAULT VALUES"
831
-	  : "$champs VALUES $valeurs";
832
-	$q ="INSERT INTO $table $ins $ret";
833
-	if (!$requeter) return $q;
834
-	$connexion['last'] = $q;
835
-	$r = spip_pg_query_simple($link, $q);
809
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
810
+    $prefixe = $connexion['prefixe'];
811
+    $link = $connexion['link'];
812
+    $db = $connexion['db'];
813
+
814
+    if (!$desc) $desc = description_table($table, $serveur);
815
+    $seq = spip_pg_sequence($table,true);
816
+    // si pas de cle primaire dans l'insertion, renvoyer curval
817
+    if (!preg_match(",\b$seq\b,",$champs)){
818
+        $seq = spip_pg_sequence($table);
819
+        if ($prefixe)
820
+            $seq = preg_replace('/^spip/', $prefixe, $seq);
821
+        $seq = "currval('$seq')";
822
+    }
823
+
824
+
825
+    if ($prefixe) {
826
+        $table = preg_replace('/^spip/', $prefixe, $table);
827
+    }
828
+    $ret = !$seq ? '' : (" RETURNING $seq");
829
+    $ins = (strlen($champs)<3)
830
+      ? " DEFAULT VALUES"
831
+      : "$champs VALUES $valeurs";
832
+    $q ="INSERT INTO $table $ins $ret";
833
+    if (!$requeter) return $q;
834
+    $connexion['last'] = $q;
835
+    $r = spip_pg_query_simple($link, $q);
836 836
 #	spip_log($q,'pg.'._LOG_DEBUG);
837
-	if ($r) {
838
-		if (!$ret) return 0;
839
-		if ($r2 = pg_fetch_array($r, NULL, PGSQL_NUM))
840
-			return $r2[0];
841
-	}
842
-	return false;
837
+    if ($r) {
838
+        if (!$ret) return 0;
839
+        if ($r2 = pg_fetch_array($r, NULL, PGSQL_NUM))
840
+            return $r2[0];
841
+    }
842
+    return false;
843 843
 }
844 844
 
845 845
 // http://doc.spip.org/@spip_pg_insertq
846 846
 function spip_pg_insertq($table, $couples=array(), $desc=array(), $serveur='',$requeter=true) {
847 847
 
848
-	if (!$desc) $desc = description_table($table, $serveur);
849
-	if (!$desc) die("$table insertion sans description");
850
-	$fields =  $desc['field'];
848
+    if (!$desc) $desc = description_table($table, $serveur);
849
+    if (!$desc) die("$table insertion sans description");
850
+    $fields =  $desc['field'];
851 851
 	
852
-	foreach ($couples as $champ => $val) {
853
-		$couples[$champ]=  spip_pg_cite($val, $fields[$champ]);
854
-	}
852
+    foreach ($couples as $champ => $val) {
853
+        $couples[$champ]=  spip_pg_cite($val, $fields[$champ]);
854
+    }
855 855
 
856
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
857
-	$couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
856
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
857
+    $couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
858 858
 	
859
-	return spip_pg_insert($table, "(".join(',',array_keys($couples)).")", "(".join(',', $couples).")", $desc, $serveur, $requeter);
859
+    return spip_pg_insert($table, "(".join(',',array_keys($couples)).")", "(".join(',', $couples).")", $desc, $serveur, $requeter);
860 860
 }
861 861
 
862 862
 
@@ -864,148 +864,148 @@  discard block
 block discarded – undo
864 864
 // http://doc.spip.org/@spip_pg_insertq_multi
865 865
 function spip_pg_insertq_multi($table, $tab_couples=array(), $desc=array(), $serveur='',$requeter=true) {
866 866
 
867
-	if (!$desc) $desc = description_table($table, $serveur);
868
-	if (!$desc) die("$table insertion sans description");
869
-	$fields =  isset($desc['field'])?$desc['field']:array();
867
+    if (!$desc) $desc = description_table($table, $serveur);
868
+    if (!$desc) die("$table insertion sans description");
869
+    $fields =  isset($desc['field'])?$desc['field']:array();
870 870
 	
871
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
872
-	// une premiere fois pour ajouter maj dans les cles
873
-	$c = isset($tab_couples[0]) ? $tab_couples[0] : array();
874
-	$les_cles = spip_pg_ajouter_champs_timestamp($table, $c, $desc, $serveur);
871
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
872
+    // une premiere fois pour ajouter maj dans les cles
873
+    $c = isset($tab_couples[0]) ? $tab_couples[0] : array();
874
+    $les_cles = spip_pg_ajouter_champs_timestamp($table, $c, $desc, $serveur);
875 875
 	
876
-	$cles = "(" . join(',',array_keys($les_cles)). ')';
877
-	$valeurs = array();
878
-	foreach ($tab_couples as $couples) {
879
-		foreach ($couples as $champ => $val){
880
-			$couples[$champ]= spip_pg_cite($val, $fields[$champ]);
881
-		}
882
-		// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
883
-		$couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
876
+    $cles = "(" . join(',',array_keys($les_cles)). ')';
877
+    $valeurs = array();
878
+    foreach ($tab_couples as $couples) {
879
+        foreach ($couples as $champ => $val){
880
+            $couples[$champ]= spip_pg_cite($val, $fields[$champ]);
881
+        }
882
+        // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
883
+        $couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
884 884
 		
885
-		$valeurs[] = '(' .join(',', $couples) . ')';
886
-	}
887
-	$valeurs = implode(', ',$valeurs);
885
+        $valeurs[] = '(' .join(',', $couples) . ')';
886
+    }
887
+    $valeurs = implode(', ',$valeurs);
888 888
 	
889
-	return	spip_pg_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
889
+    return	spip_pg_insert($table, $cles, $valeurs, $desc, $serveur, $requeter);
890 890
 }
891 891
 
892 892
 
893 893
 // http://doc.spip.org/@spip_pg_update
894 894
 function spip_pg_update($table, $couples, $where='', $desc='', $serveur='',$requeter=true) {
895 895
 
896
-	if (!$couples) return;
897
-	$connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
898
-	$prefixe = $connexion['prefixe'];
899
-	$link = $connexion['link'];
900
-	$db = $connexion['db'];
901
-	if ($prefixe) $table = preg_replace('/^spip/', $prefixe, $table);
896
+    if (!$couples) return;
897
+    $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
898
+    $prefixe = $connexion['prefixe'];
899
+    $link = $connexion['link'];
900
+    $db = $connexion['db'];
901
+    if ($prefixe) $table = preg_replace('/^spip/', $prefixe, $table);
902 902
 
903
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
904
-	$couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
903
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
904
+    $couples = spip_pg_ajouter_champs_timestamp($table, $couples, $desc, $serveur);
905 905
 
906
-	$set = array();
907
-	foreach ($couples as $champ => $val) {
908
-		$set[] = $champ . '=' . $val; 
909
-	}
906
+    $set = array();
907
+    foreach ($couples as $champ => $val) {
908
+        $set[] = $champ . '=' . $val; 
909
+    }
910 910
 
911
-	$query = calculer_pg_expression('UPDATE', $table, ',')
912
-		. calculer_pg_expression('SET', $set, ',')
913
-		. calculer_pg_expression('WHERE', $where, 'AND');
911
+    $query = calculer_pg_expression('UPDATE', $table, ',')
912
+        . calculer_pg_expression('SET', $set, ',')
913
+        . calculer_pg_expression('WHERE', $where, 'AND');
914 914
 		
915
-	// renvoyer la requete inerte si demandee
916
-	if (!$requeter) return $query;
915
+    // renvoyer la requete inerte si demandee
916
+    if (!$requeter) return $query;
917 917
 	
918
-	return spip_pg_trace_query($query, $serveur);
918
+    return spip_pg_trace_query($query, $serveur);
919 919
 }
920 920
 
921 921
 // idem, mais les valeurs sont des constantes a mettre entre apostrophes
922 922
 // sauf les expressions de date lorsqu'il s'agit de fonctions SQL (NOW etc)
923 923
 // http://doc.spip.org/@spip_pg_updateq
924 924
 function spip_pg_updateq($table, $couples, $where='', $desc=array(), $serveur='',$requeter=true) {
925
-	if (!$couples) return;
926
-	if (!$desc) $desc = description_table($table, $serveur);
927
-	$fields = $desc['field'];
928
-	foreach ($couples as $k => $val) {
929
-		$couples[$k] = spip_pg_cite($val, $fields[$k]);
930
-	}
931
-
932
-	return spip_pg_update($table, $couples, $where, $desc, $serveur, $requeter);
925
+    if (!$couples) return;
926
+    if (!$desc) $desc = description_table($table, $serveur);
927
+    $fields = $desc['field'];
928
+    foreach ($couples as $k => $val) {
929
+        $couples[$k] = spip_pg_cite($val, $fields[$k]);
930
+    }
931
+
932
+    return spip_pg_update($table, $couples, $where, $desc, $serveur, $requeter);
933 933
 }
934 934
 
935 935
 
936 936
 // http://doc.spip.org/@spip_pg_replace
937 937
 function spip_pg_replace($table, $values, $desc, $serveur='',$requeter=true) {
938
-	if (!$values) {spip_log("replace vide $table",'pg.'._LOG_AVERTISSEMENT); return 0;}
939
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
940
-	$prefixe = $connexion['prefixe'];
941
-	$link = $connexion['link'];
942
-	$db = $connexion['db'];
943
-
944
-	if (!$desc) $desc = description_table($table, $serveur);
945
-	if (!$desc) die("$table insertion sans description");
946
-	$prim = $desc['key']['PRIMARY KEY'];
947
-	$ids = preg_split('/,\s*/', $prim);
948
-	$noprims = $prims = array();
949
-	foreach($values as $k=>$v) {
950
-		$values[$k] = $v = spip_pg_cite($v, $desc['field'][$k]);
951
-
952
-		if (!in_array($k, $ids))
953
-			$noprims[$k]= "$k=$v";
954
-		else $prims[$k]= "$k=$v";
955
-	}
956
-
957
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
958
-	$values = spip_pg_ajouter_champs_timestamp($table, $values, $desc, $serveur);
938
+    if (!$values) {spip_log("replace vide $table",'pg.'._LOG_AVERTISSEMENT); return 0;}
939
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
940
+    $prefixe = $connexion['prefixe'];
941
+    $link = $connexion['link'];
942
+    $db = $connexion['db'];
943
+
944
+    if (!$desc) $desc = description_table($table, $serveur);
945
+    if (!$desc) die("$table insertion sans description");
946
+    $prim = $desc['key']['PRIMARY KEY'];
947
+    $ids = preg_split('/,\s*/', $prim);
948
+    $noprims = $prims = array();
949
+    foreach($values as $k=>$v) {
950
+        $values[$k] = $v = spip_pg_cite($v, $desc['field'][$k]);
951
+
952
+        if (!in_array($k, $ids))
953
+            $noprims[$k]= "$k=$v";
954
+        else $prims[$k]= "$k=$v";
955
+    }
956
+
957
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
958
+    $values = spip_pg_ajouter_champs_timestamp($table, $values, $desc, $serveur);
959 959
 	
960
-	$where = join(' AND ', $prims);
961
-	if (!$where) {
962
-		return spip_pg_insert($table, "(".join(',',array_keys($values)).")", "(".join(',', $values).")", $desc, $serveur);
963
-	}
964
-	$couples = join(',', $noprims);
965
-
966
-	$seq = spip_pg_sequence($table);
967
-	if ($prefixe) {
968
-		$table = preg_replace('/^spip/', $prefixe, $table);
969
-		$seq = preg_replace('/^spip/', $prefixe, $seq);
970
-	}
971
-
972
-	$connexion['last'] = $q = "UPDATE $table SET $couples WHERE $where";
973
-	if ($couples) {
974
-	  $couples = spip_pg_query_simple($link, $q);
960
+    $where = join(' AND ', $prims);
961
+    if (!$where) {
962
+        return spip_pg_insert($table, "(".join(',',array_keys($values)).")", "(".join(',', $values).")", $desc, $serveur);
963
+    }
964
+    $couples = join(',', $noprims);
965
+
966
+    $seq = spip_pg_sequence($table);
967
+    if ($prefixe) {
968
+        $table = preg_replace('/^spip/', $prefixe, $table);
969
+        $seq = preg_replace('/^spip/', $prefixe, $seq);
970
+    }
971
+
972
+    $connexion['last'] = $q = "UPDATE $table SET $couples WHERE $where";
973
+    if ($couples) {
974
+        $couples = spip_pg_query_simple($link, $q);
975 975
 #	  spip_log($q,'pg.'._LOG_DEBUG);
976
-	  if (!$couples) return false;
977
-	  $couples = pg_affected_rows($couples);
978
-	}
979
-	if (!$couples) {
980
-		$ret = !$seq ? '' :
981
-		  (" RETURNING nextval('$seq') < $prim");
982
-		$connexion['last'] = $q = "INSERT INTO $table (" . join(',',array_keys($values)) . ') VALUES (' .join(',', $values) . ")$ret";
983
-		$couples = spip_pg_query_simple($link, $q);
984
-	    if (!$couples) {
985
-		return false;
986
-	    } elseif ($ret) {
987
-	      $r = pg_fetch_array($couples, NULL, PGSQL_NUM);
988
-	      if ($r[0]) {
989
-		$connexion['last'] = $q = "SELECT setval('$seq', $prim) from $table";
990
-		// Le code de SPIP met parfois la sequence a 0 (dans l'import)
991
-		// MySQL n'en dit rien, on fait pareil pour PG
992
-		$r = @pg_query($link, $q);
993
-	      }
994
-	    }
995
-	}
996
-
997
-	return $couples;
976
+        if (!$couples) return false;
977
+        $couples = pg_affected_rows($couples);
978
+    }
979
+    if (!$couples) {
980
+        $ret = !$seq ? '' :
981
+          (" RETURNING nextval('$seq') < $prim");
982
+        $connexion['last'] = $q = "INSERT INTO $table (" . join(',',array_keys($values)) . ') VALUES (' .join(',', $values) . ")$ret";
983
+        $couples = spip_pg_query_simple($link, $q);
984
+        if (!$couples) {
985
+        return false;
986
+        } elseif ($ret) {
987
+            $r = pg_fetch_array($couples, NULL, PGSQL_NUM);
988
+            if ($r[0]) {
989
+        $connexion['last'] = $q = "SELECT setval('$seq', $prim) from $table";
990
+        // Le code de SPIP met parfois la sequence a 0 (dans l'import)
991
+        // MySQL n'en dit rien, on fait pareil pour PG
992
+        $r = @pg_query($link, $q);
993
+            }
994
+        }
995
+    }
996
+
997
+    return $couples;
998 998
 }
999 999
 
1000 1000
 
1001 1001
 // http://doc.spip.org/@spip_pg_replace_multi
1002 1002
 function spip_pg_replace_multi($table, $tab_couples, $desc=array(), $serveur='',$requeter=true) {
1003
-	// boucler pour traiter chaque requete independemment
1004
-	foreach ($tab_couples as $couples){
1005
-		$retour = spip_pg_replace($table, $couples, $desc, $serveur,$requeter);
1006
-	}
1007
-	// renvoie le dernier id 
1008
-	return $retour; 
1003
+    // boucler pour traiter chaque requete independemment
1004
+    foreach ($tab_couples as $couples){
1005
+        $retour = spip_pg_replace($table, $couples, $desc, $serveur,$requeter);
1006
+    }
1007
+    // renvoie le dernier id 
1008
+    return $retour; 
1009 1009
 }
1010 1010
 
1011 1011
 
@@ -1016,15 +1016,15 @@  discard block
 block discarded – undo
1016 1016
 // http://doc.spip.org/@spip_pg_sequence
1017 1017
 function spip_pg_sequence($table,$raw=false)
1018 1018
 {
1019
-	global $tables_principales;
1020
-	include_spip('base/serial');
1021
-	if (!isset($tables_principales[$table])) return false;
1022
-	$desc = $tables_principales[$table];
1023
-	$prim = @$desc['key']['PRIMARY KEY'];
1024
-	if (!preg_match('/^\w+$/', $prim)
1025
-	OR strpos($desc['field'][$prim], 'int') === false)
1026
-		return '';
1027
-	else  {	return $raw?$prim:$table . '_' . $prim . "_seq";}
1019
+    global $tables_principales;
1020
+    include_spip('base/serial');
1021
+    if (!isset($tables_principales[$table])) return false;
1022
+    $desc = $tables_principales[$table];
1023
+    $prim = @$desc['key']['PRIMARY KEY'];
1024
+    if (!preg_match('/^\w+$/', $prim)
1025
+    OR strpos($desc['field'][$prim], 'int') === false)
1026
+        return '';
1027
+    else  {	return $raw?$prim:$table . '_' . $prim . "_seq";}
1028 1028
 }
1029 1029
 
1030 1030
 // Explicite les conversions de Mysql d'une valeur $v de type $t
@@ -1032,60 +1032,60 @@  discard block
 block discarded – undo
1032 1032
 
1033 1033
 // http://doc.spip.org/@spip_pg_cite
1034 1034
 function spip_pg_cite($v, $t){
1035
-	if(is_null($v)) return 'NULL'; // null php se traduit en NULL SQL
1036
-
1037
-	if (sql_test_date($t)) {
1038
-		if ($v AND (strpos("0123456789", $v[0]) === false))
1039
-			return spip_pg_frommysql($v);
1040
-		else {
1041
-			if (strncmp($v,'0000',4)==0)
1042
-				$v = "0001" . substr($v,4);
1043
-			if (strpos($v, "-00-00") === 4)
1044
-				$v = substr($v,0,4)."-01-01".substr($v,10);
1045
-			return "timestamp '$v'";
1046
-		}
1047
-	}
1048
-	elseif (!sql_test_int($t))
1049
-		return   ("'" . pg_escape_string($v) . "'");
1050
-	elseif (is_numeric($v) OR (strpos($v, 'CAST(') === 0))
1051
-		return $v;
1052
-	elseif ($v[0]== '0' AND $v[1]!=='x' AND  ctype_xdigit(substr($v,1)))
1053
-		return  substr($v,1);
1054
-	else {
1055
-		spip_log("Warning: '$v'  n'est pas de type $t", 'pg.'._LOG_AVERTISSEMENT);
1056
-		return intval($v);
1057
-	}
1035
+    if(is_null($v)) return 'NULL'; // null php se traduit en NULL SQL
1036
+
1037
+    if (sql_test_date($t)) {
1038
+        if ($v AND (strpos("0123456789", $v[0]) === false))
1039
+            return spip_pg_frommysql($v);
1040
+        else {
1041
+            if (strncmp($v,'0000',4)==0)
1042
+                $v = "0001" . substr($v,4);
1043
+            if (strpos($v, "-00-00") === 4)
1044
+                $v = substr($v,0,4)."-01-01".substr($v,10);
1045
+            return "timestamp '$v'";
1046
+        }
1047
+    }
1048
+    elseif (!sql_test_int($t))
1049
+        return   ("'" . pg_escape_string($v) . "'");
1050
+    elseif (is_numeric($v) OR (strpos($v, 'CAST(') === 0))
1051
+        return $v;
1052
+    elseif ($v[0]== '0' AND $v[1]!=='x' AND  ctype_xdigit(substr($v,1)))
1053
+        return  substr($v,1);
1054
+    else {
1055
+        spip_log("Warning: '$v'  n'est pas de type $t", 'pg.'._LOG_AVERTISSEMENT);
1056
+        return intval($v);
1057
+    }
1058 1058
 }
1059 1059
 
1060 1060
 // http://doc.spip.org/@spip_pg_hex
1061 1061
 function spip_pg_hex($v)
1062 1062
 {
1063
-	return "CAST(x'" . $v . "' as bigint)";
1063
+    return "CAST(x'" . $v . "' as bigint)";
1064 1064
 }
1065 1065
 
1066 1066
 function spip_pg_quote($v, $type='')
1067 1067
 {
1068
-	if (!is_array($v))
1069
-		return spip_pg_cite($v,$type);
1070
-	// si c'est un tableau, le parcourir en propageant le type
1071
-	foreach($v as $k=>$r)
1072
-		$v[$k] = spip_pg_quote($r, $type);
1073
-	return join(",", $v);
1068
+    if (!is_array($v))
1069
+        return spip_pg_cite($v,$type);
1070
+    // si c'est un tableau, le parcourir en propageant le type
1071
+    foreach($v as $k=>$r)
1072
+        $v[$k] = spip_pg_quote($r, $type);
1073
+    return join(",", $v);
1074 1074
 }
1075 1075
 
1076 1076
 function spip_pg_date_proche($champ, $interval, $unite)
1077 1077
 {
1078
-	return '('
1079
-	. $champ
1078
+    return '('
1079
+    . $champ
1080 1080
         . (($interval <= 0) ? '>' : '<')
1081 1081
         . (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
1082
-	. '('
1083
-	. sql_quote(date('Y-m-d H:i:s'))
1084
-	. ', INTERVAL '
1085
-	. (($interval > 0) ? $interval : (0-$interval))
1086
-	. ' '
1087
-	. $unite
1088
-	. '))';
1082
+    . '('
1083
+    . sql_quote(date('Y-m-d H:i:s'))
1084
+    . ', INTERVAL '
1085
+    . (($interval > 0) ? $interval : (0-$interval))
1086
+    . ' '
1087
+    . $unite
1088
+    . '))';
1089 1089
 }
1090 1090
 
1091 1091
 // http://doc.spip.org/@spip_pg_in
@@ -1093,59 +1093,59 @@  discard block
 block discarded – undo
1093 1093
 //
1094 1094
 // IN (...) souvent limite a 255  elements, d'ou cette fonction assistante
1095 1095
 //
1096
-	// s'il n'y a pas de valeur, eviter de produire un IN vide: PG rale.
1097
-	if (!$valeurs) return $not ? '0=0' : '0=1';
1098
-	if (strpos($valeurs, "CAST(x'") !== false)
1099
-		return "($val=" . join("OR $val=", explode(',',$valeurs)).')';
1100
-	$n = $i = 0;
1101
-	$in_sql ="";
1102
-	while ($n = strpos($valeurs, ',', $n+1)) {
1103
-	  if ((++$i) >= 255) {
1104
-			$in_sql .= "($val $not IN (" .
1105
-			  substr($valeurs, 0, $n) .
1106
-			  "))\n" .
1107
-			  ($not ? "AND\t" : "OR\t");
1108
-			$valeurs = substr($valeurs, $n+1);
1109
-			$i = $n = 0;
1110
-		}
1111
-	}
1112
-	$in_sql .= "($val $not IN ($valeurs))";
1113
-
1114
-	return "($in_sql)";
1096
+    // s'il n'y a pas de valeur, eviter de produire un IN vide: PG rale.
1097
+    if (!$valeurs) return $not ? '0=0' : '0=1';
1098
+    if (strpos($valeurs, "CAST(x'") !== false)
1099
+        return "($val=" . join("OR $val=", explode(',',$valeurs)).')';
1100
+    $n = $i = 0;
1101
+    $in_sql ="";
1102
+    while ($n = strpos($valeurs, ',', $n+1)) {
1103
+        if ((++$i) >= 255) {
1104
+            $in_sql .= "($val $not IN (" .
1105
+                substr($valeurs, 0, $n) .
1106
+                "))\n" .
1107
+                ($not ? "AND\t" : "OR\t");
1108
+            $valeurs = substr($valeurs, $n+1);
1109
+            $i = $n = 0;
1110
+        }
1111
+    }
1112
+    $in_sql .= "($val $not IN ($valeurs))";
1113
+
1114
+    return "($in_sql)";
1115 1115
 }
1116 1116
 
1117 1117
 // http://doc.spip.org/@spip_pg_error
1118 1118
 function spip_pg_error($query='', $serveur, $requeter=true) {
1119
-	$link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1120
-	$s = $link ? pg_last_error($link) : pg_last_error();
1121
-	if ($s) {
1122
-		$s = str_replace('ERROR', 'errcode: 1000 ', $s);
1123
-		spip_log("$s - $query", 'pg.'._LOG_ERREUR);
1124
-	}
1125
-	return $s;
1119
+    $link = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0]['link'];
1120
+    $s = $link ? pg_last_error($link) : pg_last_error();
1121
+    if ($s) {
1122
+        $s = str_replace('ERROR', 'errcode: 1000 ', $s);
1123
+        spip_log("$s - $query", 'pg.'._LOG_ERREUR);
1124
+    }
1125
+    return $s;
1126 1126
 }
1127 1127
 
1128 1128
 // http://doc.spip.org/@spip_pg_errno
1129 1129
 function spip_pg_errno($serveur='') {
1130
-  // il faudrait avoir la derniere ressource retournee et utiliser
1131
-  // http://fr2.php.net/manual/fr/function.pg-result-error.php
1132
-	return 0;
1130
+    // il faudrait avoir la derniere ressource retournee et utiliser
1131
+    // http://fr2.php.net/manual/fr/function.pg-result-error.php
1132
+    return 0;
1133 1133
 }
1134 1134
 
1135 1135
 // http://doc.spip.org/@spip_pg_drop_table
1136 1136
 function spip_pg_drop_table($table, $exist='', $serveur='',$requeter=true)
1137 1137
 {
1138
-	if ($exist) $exist =" IF EXISTS";
1139
-	if (spip_pg_query("DROP TABLE$exist $table", $serveur, $requeter))
1140
-		return true;
1141
-	else return false;
1138
+    if ($exist) $exist =" IF EXISTS";
1139
+    if (spip_pg_query("DROP TABLE$exist $table", $serveur, $requeter))
1140
+        return true;
1141
+    else return false;
1142 1142
 }
1143 1143
 
1144 1144
 // supprime une vue 
1145 1145
 // http://doc.spip.org/@spip_pg_drop_view
1146 1146
 function spip_pg_drop_view($view, $exist='', $serveur='',$requeter=true) {
1147
-	if ($exist) $exist =" IF EXISTS";
1148
-	return spip_pg_query("DROP VIEW$exist $view", $serveur, $requeter);
1147
+    if ($exist) $exist =" IF EXISTS";
1148
+    return spip_pg_query("DROP VIEW$exist $view", $serveur, $requeter);
1149 1149
 }
1150 1150
 
1151 1151
 /**
@@ -1163,39 +1163,39 @@  discard block
 block discarded – undo
1163 1163
 **/
1164 1164
 function spip_pg_showbase($match, $serveur='',$requeter=true)
1165 1165
 {
1166
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1167
-	$link = $connexion['link'];
1168
-	$connexion['last'] = $q = "SELECT tablename FROM pg_tables WHERE tablename ILIKE "._q($match);
1169
-	return spip_pg_query_simple($link, $q);
1166
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1167
+    $link = $connexion['link'];
1168
+    $connexion['last'] = $q = "SELECT tablename FROM pg_tables WHERE tablename ILIKE "._q($match);
1169
+    return spip_pg_query_simple($link, $q);
1170 1170
 }
1171 1171
 
1172 1172
 // http://doc.spip.org/@spip_pg_showtable
1173 1173
 function spip_pg_showtable($nom_table, $serveur='',$requeter=true)
1174 1174
 {
1175
-	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1176
-	$link = $connexion['link'];
1177
-	$connexion['last'] = $q = "SELECT column_name, column_default, data_type FROM information_schema.columns WHERE table_name ILIKE " . _q($nom_table);
1175
+    $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1176
+    $link = $connexion['link'];
1177
+    $connexion['last'] = $q = "SELECT column_name, column_default, data_type FROM information_schema.columns WHERE table_name ILIKE " . _q($nom_table);
1178 1178
 
1179
-	$res = spip_pg_query_simple($link, $q);
1180
-	if (!$res) return false;
1179
+    $res = spip_pg_query_simple($link, $q);
1180
+    if (!$res) return false;
1181 1181
 	
1182
-	// etrangement, $res peut ne rien contenir, mais arriver ici...
1183
-	// il faut en tenir compte dans le return
1184
-	$fields = array();
1185
-	while($field = pg_fetch_array($res, NULL, PGSQL_NUM)) {
1186
-		$fields[$field[0]] = $field[2] . (!$field[1] ? '' : (" DEFAULT " . $field[1]));
1187
-	}
1188
-	$connexion['last'] = $q = "SELECT indexdef FROM pg_indexes WHERE tablename ILIKE " . _q($nom_table);
1189
-	$res = spip_pg_query_simple($link, $q);
1190
-	$keys = array();
1191
-	while($index = pg_fetch_array($res, NULL, PGSQL_NUM)) {
1192
-		if (preg_match('/CREATE\s+(UNIQUE\s+)?INDEX\s([^\s]+).*\((.*)\)$/', $index[0],$r)) {
1193
-			$nom = str_replace($nom_table.'_','',$r[2]);
1194
-			$keys[($r[1] ? "PRIMARY KEY" : ("KEY " . $nom))] = $r[3];
1195
-		}
1196
-	}
1197
-
1198
-	return count($fields) ? array('field' => $fields, 'key' => $keys) : false;
1182
+    // etrangement, $res peut ne rien contenir, mais arriver ici...
1183
+    // il faut en tenir compte dans le return
1184
+    $fields = array();
1185
+    while($field = pg_fetch_array($res, NULL, PGSQL_NUM)) {
1186
+        $fields[$field[0]] = $field[2] . (!$field[1] ? '' : (" DEFAULT " . $field[1]));
1187
+    }
1188
+    $connexion['last'] = $q = "SELECT indexdef FROM pg_indexes WHERE tablename ILIKE " . _q($nom_table);
1189
+    $res = spip_pg_query_simple($link, $q);
1190
+    $keys = array();
1191
+    while($index = pg_fetch_array($res, NULL, PGSQL_NUM)) {
1192
+        if (preg_match('/CREATE\s+(UNIQUE\s+)?INDEX\s([^\s]+).*\((.*)\)$/', $index[0],$r)) {
1193
+            $nom = str_replace($nom_table.'_','',$r[2]);
1194
+            $keys[($r[1] ? "PRIMARY KEY" : ("KEY " . $nom))] = $r[3];
1195
+        }
1196
+    }
1197
+
1198
+    return count($fields) ? array('field' => $fields, 'key' => $keys) : false;
1199 1199
 }
1200 1200
 
1201 1201
 // Fonction de creation d'une table SQL nommee $nom
@@ -1207,104 +1207,104 @@  discard block
 block discarded – undo
1207 1207
 // http://doc.spip.org/@spip_pg_create
1208 1208
 function spip_pg_create($nom, $champs, $cles, $autoinc=false, $temporary=false, $serveur='',$requeter=true) {
1209 1209
 
1210
-	$connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1211
-	$prefixe = $connexion['prefixe'];
1212
-	$link = $connexion['link'];
1213
-	$db = $connexion['db'];
1214
-	if ($prefixe) $nom = preg_replace('/^spip/', $prefixe, $nom);
1215
-	$query = $prim = $prim_name = $v = $s = $p='';
1216
-	$keys = array();
1217
-
1218
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
1219
-	// sans les renseigner (laisse le compilo recuperer la description)
1220
-	if (!is_array($champs) || !is_array($cles)) 
1221
-		return;
1222
-
1223
-	foreach($cles as $k => $v) {
1224
-		if (strpos($k, "KEY ") === 0) {
1225
-		  $n = str_replace('`','',$k);	
1226
-		  $v = str_replace('`','"',$v);	
1227
-		  $i = $nom . preg_replace("/KEY +/", '_',$n);
1228
-		  if ($k != $n) $i = "\"$i\"";
1229
-		  $keys[] = "CREATE INDEX $i ON $nom ($v);";
1230
-		} 
1231
-		elseif (strpos($k, "UNIQUE ") === 0) {
1232
-			$k = preg_replace("/^UNIQUE +/", '',$k);
1233
-			$prim .= "$s\n\t\tCONSTRAINT " . str_replace('`','"',$k) ." UNIQUE ($v)";
1234
-		}
1235
-		else {
1236
-			$prim .= "$s\n\t\t" . str_replace('`','"',$k) ." ($v)";
1237
-		}
1238
-		if ($k == "PRIMARY KEY")
1239
-			$prim_name = $v;
1240
-		$s = ",";
1241
-	}
1242
-	$s = '';
1210
+    $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
1211
+    $prefixe = $connexion['prefixe'];
1212
+    $link = $connexion['link'];
1213
+    $db = $connexion['db'];
1214
+    if ($prefixe) $nom = preg_replace('/^spip/', $prefixe, $nom);
1215
+    $query = $prim = $prim_name = $v = $s = $p='';
1216
+    $keys = array();
1217
+
1218
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
1219
+    // sans les renseigner (laisse le compilo recuperer la description)
1220
+    if (!is_array($champs) || !is_array($cles)) 
1221
+        return;
1222
+
1223
+    foreach($cles as $k => $v) {
1224
+        if (strpos($k, "KEY ") === 0) {
1225
+            $n = str_replace('`','',$k);	
1226
+            $v = str_replace('`','"',$v);	
1227
+            $i = $nom . preg_replace("/KEY +/", '_',$n);
1228
+            if ($k != $n) $i = "\"$i\"";
1229
+            $keys[] = "CREATE INDEX $i ON $nom ($v);";
1230
+        } 
1231
+        elseif (strpos($k, "UNIQUE ") === 0) {
1232
+            $k = preg_replace("/^UNIQUE +/", '',$k);
1233
+            $prim .= "$s\n\t\tCONSTRAINT " . str_replace('`','"',$k) ." UNIQUE ($v)";
1234
+        }
1235
+        else {
1236
+            $prim .= "$s\n\t\t" . str_replace('`','"',$k) ." ($v)";
1237
+        }
1238
+        if ($k == "PRIMARY KEY")
1239
+            $prim_name = $v;
1240
+        $s = ",";
1241
+    }
1242
+    $s = '';
1243 1243
 	
1244
-	$character_set = "";
1245
-	if (@$GLOBALS['meta']['charset_sql_base'])
1246
-		$character_set .= " CHARACTER SET ".$GLOBALS['meta']['charset_sql_base'];
1247
-	if (@$GLOBALS['meta']['charset_collation_sql_base'])
1248
-		$character_set .= " COLLATE ".$GLOBALS['meta']['charset_collation_sql_base'];
1249
-
1250
-	foreach($champs as $k => $v) {
1251
-		$k = str_replace('`','"',$k);
1252
-		if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i',$v,$defs)){
1253
-			if (preg_match(',(char|text),i',$defs[1]) AND !preg_match(',binary,i',$defs[1]) ){
1254
-				$v = $defs[1] . $character_set . ' ' . substr($v,strlen($defs[1]));
1255
-			}
1256
-		}
1257
-
1258
-		$query .= "$s\n\t\t$k "
1259
-			. (($autoinc && ($prim_name == $k) && preg_match(',\b(big|small|medium|tiny)?int\b,i', $v))
1260
-				? " bigserial"
1261
-			   : mysql2pg_type($v)
1262
-			);
1263
-		$s = ",";
1264
-	}
1265
-	$temporary = $temporary ? 'TEMPORARY':'';
1266
-
1267
-	// En l'absence de "if not exists" en PG, on neutralise les erreurs
1268
-
1269
-	$q = "CREATE $temporary TABLE $nom ($query" . ($prim ? ",$prim" : '') . ")".
1270
-	($character_set?" DEFAULT $character_set":"")
1271
-	."\n";
1272
-
1273
-	if (!$requeter) return $q;
1274
-	$connexion['last'] = $q;
1275
-	$r = @pg_query($link, $q);
1276
-
1277
-	if (!$r)
1278
-		spip_log("Impossible de creer cette table: $q",'pg.'._LOG_ERREUR);
1279
-	else {
1280
-		foreach($keys as $index) {pg_query($link, $index);}
1281
-	} 
1282
-	return $r;
1244
+    $character_set = "";
1245
+    if (@$GLOBALS['meta']['charset_sql_base'])
1246
+        $character_set .= " CHARACTER SET ".$GLOBALS['meta']['charset_sql_base'];
1247
+    if (@$GLOBALS['meta']['charset_collation_sql_base'])
1248
+        $character_set .= " COLLATE ".$GLOBALS['meta']['charset_collation_sql_base'];
1249
+
1250
+    foreach($champs as $k => $v) {
1251
+        $k = str_replace('`','"',$k);
1252
+        if (preg_match(',([a-z]*\s*(\(\s*[0-9]*\s*\))?(\s*binary)?),i',$v,$defs)){
1253
+            if (preg_match(',(char|text),i',$defs[1]) AND !preg_match(',binary,i',$defs[1]) ){
1254
+                $v = $defs[1] . $character_set . ' ' . substr($v,strlen($defs[1]));
1255
+            }
1256
+        }
1257
+
1258
+        $query .= "$s\n\t\t$k "
1259
+            . (($autoinc && ($prim_name == $k) && preg_match(',\b(big|small|medium|tiny)?int\b,i', $v))
1260
+                ? " bigserial"
1261
+               : mysql2pg_type($v)
1262
+            );
1263
+        $s = ",";
1264
+    }
1265
+    $temporary = $temporary ? 'TEMPORARY':'';
1266
+
1267
+    // En l'absence de "if not exists" en PG, on neutralise les erreurs
1268
+
1269
+    $q = "CREATE $temporary TABLE $nom ($query" . ($prim ? ",$prim" : '') . ")".
1270
+    ($character_set?" DEFAULT $character_set":"")
1271
+    ."\n";
1272
+
1273
+    if (!$requeter) return $q;
1274
+    $connexion['last'] = $q;
1275
+    $r = @pg_query($link, $q);
1276
+
1277
+    if (!$r)
1278
+        spip_log("Impossible de creer cette table: $q",'pg.'._LOG_ERREUR);
1279
+    else {
1280
+        foreach($keys as $index) {pg_query($link, $index);}
1281
+    } 
1282
+    return $r;
1283 1283
 }
1284 1284
 
1285 1285
 
1286 1286
 function spip_pg_create_base($nom, $serveur='',$requeter=true) {
1287
-  return spip_pg_query("CREATE DATABASE $nom", $serveur, $requeter);
1287
+    return spip_pg_query("CREATE DATABASE $nom", $serveur, $requeter);
1288 1288
 }
1289 1289
 
1290 1290
 // Fonction de creation d'une vue SQL nommee $nom
1291 1291
 // http://doc.spip.org/@spip_pg_create_view
1292 1292
 function spip_pg_create_view($nom, $query_select, $serveur='',$requeter=true) {
1293
-	if (!$query_select) return false;
1294
-	// vue deja presente
1295
-	if (sql_showtable($nom, false, $serveur)) {
1296
-		if ($requeter) spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",'pg.'._LOG_ERREUR);
1297
-		return false;
1298
-	}
1293
+    if (!$query_select) return false;
1294
+    // vue deja presente
1295
+    if (sql_showtable($nom, false, $serveur)) {
1296
+        if ($requeter) spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)",'pg.'._LOG_ERREUR);
1297
+        return false;
1298
+    }
1299 1299
 	
1300
-	$query = "CREATE VIEW $nom AS ". $query_select;
1301
-	return spip_pg_query($query, $serveur, $requeter);
1300
+    $query = "CREATE VIEW $nom AS ". $query_select;
1301
+    return spip_pg_query($query, $serveur, $requeter);
1302 1302
 }
1303 1303
 
1304 1304
 
1305 1305
 // http://doc.spip.org/@spip_pg_set_connect_charset
1306 1306
 function spip_pg_set_connect_charset($charset, $serveur='',$requeter=true){
1307
-	spip_log("changement de charset sql a ecrire en PG",'pg.'._LOG_ERREUR);
1307
+    spip_log("changement de charset sql a ecrire en PG",'pg.'._LOG_ERREUR);
1308 1308
 }
1309 1309
 
1310 1310
 
@@ -1318,7 +1318,7 @@  discard block
 block discarded – undo
1318 1318
 **/
1319 1319
 // http://doc.spip.org/@spip_sqlite_optimize
1320 1320
 function spip_pg_optimize($table, $serveur='',$requeter=true){
1321
-	return spip_pg_query("VACUUM ". $table, $serveur, $requeter);
1321
+    return spip_pg_query("VACUUM ". $table, $serveur, $requeter);
1322 1322
 }
1323 1323
 
1324 1324
 // Selectionner la sous-chaine dans $objet
@@ -1326,12 +1326,12 @@  discard block
 block discarded – undo
1326 1326
 
1327 1327
 // http://doc.spip.org/@spip_pg_multi
1328 1328
 function spip_pg_multi ($objet, $lang) {
1329
-	$r = "regexp_replace("
1330
-	  . $objet
1331
-	  . ",'<multi>.*[[]"
1332
-	  . $lang
1333
-	  . "[]]([^[]*).*</multi>', E'\\\\1') AS multi";
1334
-	return $r;
1329
+    $r = "regexp_replace("
1330
+        . $objet
1331
+        . ",'<multi>.*[[]"
1332
+        . $lang
1333
+        . "[]]([^[]*).*</multi>', E'\\\\1') AS multi";
1334
+    return $r;
1335 1335
 }
1336 1336
 
1337 1337
 // Palanquee d'idiosyncrasies MySQL dans les creations de table
@@ -1339,34 +1339,34 @@  discard block
 block discarded – undo
1339 1339
 
1340 1340
 // http://doc.spip.org/@mysql2pg_type
1341 1341
 function mysql2pg_type($v){
1342
-	$remplace = array(
1343
-		'/auto_increment/i' => '', // non reconnu
1344
-		'/bigint/i' => 'bigint',
1345
-		'/mediumint/i' => 'mediumint',
1346
-		'/smallint/i'=> 'smallint',
1347
-		"/tinyint/i" => 'int',
1348
-		'/int\s*[(]\s*\d+\s*[)]/i' => 'int',
1349
-		"/longtext/i" => 'text',
1350
-		"/mediumtext/i" => 'text',
1351
-		"/tinytext/i" => 'text',
1352
-		"/longblob/i" => 'text',
1353
-		"/0000-00-00/" =>'0001-01-01',
1354
-		"/datetime/i" => 'timestamp',
1355
-		"/unsigned/i" => '',
1356
-		"/double/i" => 'double precision',
1357
-		'/VARCHAR\((\d+)\)\s+BINARY/i' => 'varchar(\1)',
1358
-		"/ENUM *[(][^)]*[)]/i" => "varchar(255)",
1359
-		'/(timestamp .* )ON .*$/is' => '\\1',
1360
-	);
1342
+    $remplace = array(
1343
+        '/auto_increment/i' => '', // non reconnu
1344
+        '/bigint/i' => 'bigint',
1345
+        '/mediumint/i' => 'mediumint',
1346
+        '/smallint/i'=> 'smallint',
1347
+        "/tinyint/i" => 'int',
1348
+        '/int\s*[(]\s*\d+\s*[)]/i' => 'int',
1349
+        "/longtext/i" => 'text',
1350
+        "/mediumtext/i" => 'text',
1351
+        "/tinytext/i" => 'text',
1352
+        "/longblob/i" => 'text',
1353
+        "/0000-00-00/" =>'0001-01-01',
1354
+        "/datetime/i" => 'timestamp',
1355
+        "/unsigned/i" => '',
1356
+        "/double/i" => 'double precision',
1357
+        '/VARCHAR\((\d+)\)\s+BINARY/i' => 'varchar(\1)',
1358
+        "/ENUM *[(][^)]*[)]/i" => "varchar(255)",
1359
+        '/(timestamp .* )ON .*$/is' => '\\1',
1360
+    );
1361 1361
 	
1362
-  return preg_replace(array_keys($remplace),array_values($remplace),$v);
1362
+    return preg_replace(array_keys($remplace),array_values($remplace),$v);
1363 1363
 }
1364 1364
 
1365 1365
 // Renvoie false si on n'a pas les fonctions pg (pour l'install)
1366 1366
 // http://doc.spip.org/@spip_versions_pg
1367 1367
 function spip_versions_pg(){
1368
-	charger_php_extension('pgsql');
1369
-	return function_exists('pg_connect');	
1368
+    charger_php_extension('pgsql');
1369
+    return function_exists('pg_connect');	
1370 1370
 }
1371 1371
 
1372 1372
 ?>
Please login to merge, or discard this patch.
ecrire/req/sqlite2.php 1 patch
Indentation   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -19,20 +19,20 @@
 block discarded – undo
19 19
 
20 20
 // http://doc.spip.org/@req_sqlite2_dist
21 21
 function req_sqlite2_dist($addr, $port, $login, $pass, $db='', $prefixe='') {	
22
-	return req_sqlite_dist($addr, $port, $login, $pass, $db, $prefixe, $sqlite_version=2);
22
+    return req_sqlite_dist($addr, $port, $login, $pass, $db, $prefixe, $sqlite_version=2);
23 23
 }
24 24
 
25 25
 // http://doc.spip.org/@spip_sqlite2_constantes
26 26
 function spip_sqlite2_constantes(){
27
-	if (!defined('SPIP_SQLITE2_ASSOC')) {
28
-		define('SPIP_SQLITE2_ASSOC', SQLITE_ASSOC);
29
-		define('SPIP_SQLITE2_NUM',   SQLITE_NUM);
30
-		define('SPIP_SQLITE2_BOTH',  SQLITE_BOTH);
31
-	}
27
+    if (!defined('SPIP_SQLITE2_ASSOC')) {
28
+        define('SPIP_SQLITE2_ASSOC', SQLITE_ASSOC);
29
+        define('SPIP_SQLITE2_NUM',   SQLITE_NUM);
30
+        define('SPIP_SQLITE2_BOTH',  SQLITE_BOTH);
31
+    }
32 32
 }
33 33
 
34 34
 function spip_versions_sqlite2()
35 35
 {
36
-	return _sqlite_charger_version(2) ? 2 : false;
36
+    return _sqlite_charger_version(2) ? 2 : false;
37 37
 }
38 38
 ?>
Please login to merge, or discard this patch.