Completed
Push — master ( 7db589...259043 )
by cam
04:09
created
ecrire/base/upgrade.php 1 patch
Indentation   +279 added lines, -279 removed lines patch added patch discarded remove patch
@@ -17,17 +17,17 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 if (!defined('_UPGRADE_TIME_OUT')) {
24
-	/**
25
-	 * Durée en secondes pour relancer les scripts de mises à jour, x secondes
26
-	 * avant que la durée d'exécution du script provoque un timeout
27
-	 *
28
-	 * @var int
29
-	 **/
30
-	define('_UPGRADE_TIME_OUT', 20);
24
+    /**
25
+     * Durée en secondes pour relancer les scripts de mises à jour, x secondes
26
+     * avant que la durée d'exécution du script provoque un timeout
27
+     *
28
+     * @var int
29
+     **/
30
+    define('_UPGRADE_TIME_OUT', 20);
31 31
 }
32 32
 
33 33
 /**
@@ -50,40 +50,40 @@  discard block
 block discarded – undo
50 50
  * @return void
51 51
  */
52 52
 function base_upgrade_dist($titre = '', $reprise = '') {
53
-	if (!$titre) {
54
-		return;
55
-	} // anti-testeur automatique
56
-	if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) {
57
-		if (!is_numeric(_request('reinstall'))) {
58
-			include_spip('base/create');
59
-			spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE);
60
-			creer_base();
61
-		}
62
-
63
-		// quand on rentre par ici, c'est toujours une mise a jour de SPIP
64
-		// lancement de l'upgrade SPIP
65
-		$res = maj_base();
66
-
67
-		if ($res) {
68
-			// on arrete tout ici !
69
-			exit;
70
-		}
71
-	}
72
-	spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE);
73
-
74
-	// supprimer quelques fichiers temporaires qui peuvent se retrouver invalides
75
-	@spip_unlink(_CACHE_RUBRIQUES);
76
-	@spip_unlink(_CACHE_PIPELINES);
77
-	@spip_unlink(_CACHE_PLUGINS_PATH);
78
-	@spip_unlink(_CACHE_PLUGINS_OPT);
79
-	@spip_unlink(_CACHE_PLUGINS_FCT);
80
-	@spip_unlink(_CACHE_CHEMIN);
81
-	@spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz');
82
-
83
-	include_spip('inc/auth');
84
-	auth_synchroniser_distant();
85
-	$config = charger_fonction('config', 'inc');
86
-	$config();
53
+    if (!$titre) {
54
+        return;
55
+    } // anti-testeur automatique
56
+    if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) {
57
+        if (!is_numeric(_request('reinstall'))) {
58
+            include_spip('base/create');
59
+            spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE);
60
+            creer_base();
61
+        }
62
+
63
+        // quand on rentre par ici, c'est toujours une mise a jour de SPIP
64
+        // lancement de l'upgrade SPIP
65
+        $res = maj_base();
66
+
67
+        if ($res) {
68
+            // on arrete tout ici !
69
+            exit;
70
+        }
71
+    }
72
+    spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE);
73
+
74
+    // supprimer quelques fichiers temporaires qui peuvent se retrouver invalides
75
+    @spip_unlink(_CACHE_RUBRIQUES);
76
+    @spip_unlink(_CACHE_PIPELINES);
77
+    @spip_unlink(_CACHE_PLUGINS_PATH);
78
+    @spip_unlink(_CACHE_PLUGINS_OPT);
79
+    @spip_unlink(_CACHE_PLUGINS_FCT);
80
+    @spip_unlink(_CACHE_CHEMIN);
81
+    @spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz');
82
+
83
+    include_spip('inc/auth');
84
+    auth_synchroniser_distant();
85
+    $config = charger_fonction('config', 'inc');
86
+    $config();
87 87
 }
88 88
 
89 89
 /**
@@ -114,51 +114,51 @@  discard block
 block discarded – undo
114 114
  */
115 115
 function maj_base($version_cible = 0, $redirect = '', $debut_page = true) {
116 116
 
117
-	$version_installee = $GLOBALS['meta']['version_installee'] ?? null;
118
-
119
-	spip_log(
120
-		"Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'],
121
-		'maj.' . _LOG_INFO_IMPORTANTE
122
-	);
123
-	if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) {
124
-		sql_replace(
125
-			'spip_meta',
126
-			array(
127
-				'nom' => 'version_installee',
128
-				'valeur' => $GLOBALS['spip_version_base'],
129
-				'impt' => 'non'
130
-			)
131
-		);
132
-		return false;
133
-	}
134
-	if (!upgrade_test()) {
135
-		return true;
136
-	}
137
-
138
-	$cible = ($version_cible ? $version_cible : $GLOBALS['spip_version_base']);
139
-
140
-	if ($version_installee < 2021010100) {
141
-		include_spip('maj/legacy/v21');
142
-		include_spip('maj/legacy/v30');
143
-		include_spip('maj/legacy/v31');
144
-		include_spip('maj/legacy/v32');
145
-		include_spip('maj/legacy/v40');
146
-	}
147
-
148
-	include_spip('maj/2021');
149
-
150
-	ksort($GLOBALS['maj']);
151
-	$res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page);
152
-	if ($res) {
153
-		if (!is_array($res)) {
154
-			spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_INFO_ERREUR);
155
-		} else {
156
-			echo _T('avis_operation_echec') . ' ' . join(' ', $res);
157
-			echo install_fin_html();
158
-		}
159
-	}
160
-
161
-	return $res;
117
+    $version_installee = $GLOBALS['meta']['version_installee'] ?? null;
118
+
119
+    spip_log(
120
+        "Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'],
121
+        'maj.' . _LOG_INFO_IMPORTANTE
122
+    );
123
+    if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) {
124
+        sql_replace(
125
+            'spip_meta',
126
+            array(
127
+                'nom' => 'version_installee',
128
+                'valeur' => $GLOBALS['spip_version_base'],
129
+                'impt' => 'non'
130
+            )
131
+        );
132
+        return false;
133
+    }
134
+    if (!upgrade_test()) {
135
+        return true;
136
+    }
137
+
138
+    $cible = ($version_cible ? $version_cible : $GLOBALS['spip_version_base']);
139
+
140
+    if ($version_installee < 2021010100) {
141
+        include_spip('maj/legacy/v21');
142
+        include_spip('maj/legacy/v30');
143
+        include_spip('maj/legacy/v31');
144
+        include_spip('maj/legacy/v32');
145
+        include_spip('maj/legacy/v40');
146
+    }
147
+
148
+    include_spip('maj/2021');
149
+
150
+    ksort($GLOBALS['maj']);
151
+    $res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page);
152
+    if ($res) {
153
+        if (!is_array($res)) {
154
+            spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_INFO_ERREUR);
155
+        } else {
156
+            echo _T('avis_operation_echec') . ' ' . join(' ', $res);
157
+            echo install_fin_html();
158
+        }
159
+    }
160
+
161
+    return $res;
162 162
 }
163 163
 
164 164
 /**
@@ -200,52 +200,52 @@  discard block
 block discarded – undo
200 200
  */
201 201
 function maj_plugin($nom_meta_base_version, $version_cible, $maj, $table_meta = 'meta') {
202 202
 
203
-	if ($table_meta !== 'meta') {
204
-		installer_table_meta($table_meta);
205
-	}
206
-
207
-	$current_version = null;
208
-
209
-	if ((!isset($GLOBALS[$table_meta][$nom_meta_base_version]))
210
-		|| (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '='))
211
-	) {
212
-		// $maj['create'] contient les directives propres a la premiere creation de base
213
-		// c'est une operation derogatoire qui fait aboutir directement dans la version_cible
214
-		if (isset($maj['create'])) {
215
-			if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) {
216
-				// installation : on ne fait que l'operation create
217
-				$maj = array('init' => $maj['create']);
218
-				// et on lui ajoute un appel a inc/config
219
-				// pour creer les metas par defaut
220
-				$config = charger_fonction('config', 'inc');
221
-				$maj[$version_cible] = array(array($config));
222
-			}
223
-			// dans tous les cas enlever cet index du tableau
224
-			unset($maj['create']);
225
-		}
226
-		// si init, deja dans le bon ordre
227
-		if (!isset($maj['init'])) {
228
-			include_spip('inc/plugin'); // pour spip_version_compare
229
-			uksort($maj, 'spip_version_compare');
230
-		}
231
-
232
-		// la redirection se fait par defaut sur la page d'administration des plugins
233
-		// sauf lorsque nous sommes sur l'installation de SPIP
234
-		// ou define _REDIRECT_MAJ_PLUGIN
235
-		$redirect = (defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin'));
236
-		if (defined('_ECRIRE_INSTALL')) {
237
-			$redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape'));
238
-		}
239
-
240
-		$res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect);
241
-		if ($res) {
242
-			if (!is_array($res)) {
243
-				spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_INFO_ERREUR);
244
-			} else {
245
-				echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>';
246
-			}
247
-		}
248
-	}
203
+    if ($table_meta !== 'meta') {
204
+        installer_table_meta($table_meta);
205
+    }
206
+
207
+    $current_version = null;
208
+
209
+    if ((!isset($GLOBALS[$table_meta][$nom_meta_base_version]))
210
+        || (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '='))
211
+    ) {
212
+        // $maj['create'] contient les directives propres a la premiere creation de base
213
+        // c'est une operation derogatoire qui fait aboutir directement dans la version_cible
214
+        if (isset($maj['create'])) {
215
+            if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) {
216
+                // installation : on ne fait que l'operation create
217
+                $maj = array('init' => $maj['create']);
218
+                // et on lui ajoute un appel a inc/config
219
+                // pour creer les metas par defaut
220
+                $config = charger_fonction('config', 'inc');
221
+                $maj[$version_cible] = array(array($config));
222
+            }
223
+            // dans tous les cas enlever cet index du tableau
224
+            unset($maj['create']);
225
+        }
226
+        // si init, deja dans le bon ordre
227
+        if (!isset($maj['init'])) {
228
+            include_spip('inc/plugin'); // pour spip_version_compare
229
+            uksort($maj, 'spip_version_compare');
230
+        }
231
+
232
+        // la redirection se fait par defaut sur la page d'administration des plugins
233
+        // sauf lorsque nous sommes sur l'installation de SPIP
234
+        // ou define _REDIRECT_MAJ_PLUGIN
235
+        $redirect = (defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin'));
236
+        if (defined('_ECRIRE_INSTALL')) {
237
+            $redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape'));
238
+        }
239
+
240
+        $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect);
241
+        if ($res) {
242
+            if (!is_array($res)) {
243
+                spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_INFO_ERREUR);
244
+            } else {
245
+                echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>';
246
+            }
247
+        }
248
+    }
249 249
 }
250 250
 
251 251
 /**
@@ -262,17 +262,17 @@  discard block
 block discarded – undo
262 262
  * @return void
263 263
  */
264 264
 function relance_maj($meta, $table, $redirect = '') {
265
-	include_spip('inc/headers');
266
-	if (!$redirect) {
267
-		// recuperer la valeur installee en cours
268
-		// on la tronque numeriquement, elle ne sert pas reellement
269
-		// sauf pour verifier que ce n'est pas oui ou non
270
-		// sinon is_numeric va echouer sur un numero de version 1.2.3
271
-		$installee = intval($GLOBALS[$table][$meta]);
272
-		$redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
273
-	}
274
-	echo redirige_formulaire($redirect);
275
-	exit();
265
+    include_spip('inc/headers');
266
+    if (!$redirect) {
267
+        // recuperer la valeur installee en cours
268
+        // on la tronque numeriquement, elle ne sert pas reellement
269
+        // sauf pour verifier que ce n'est pas oui ou non
270
+        // sinon is_numeric va echouer sur un numero de version 1.2.3
271
+        $installee = intval($GLOBALS[$table][$meta]);
272
+        $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
273
+    }
274
+    echo redirige_formulaire($redirect);
275
+    exit();
276 276
 }
277 277
 
278 278
 /**
@@ -285,26 +285,26 @@  discard block
 block discarded – undo
285 285
  * @return void
286 286
  */
287 287
 function maj_debut_page($installee, $meta, $table) {
288
-	static $done = false;
289
-	if ($done) {
290
-		return;
291
-	}
292
-	include_spip('inc/minipres');
293
-	@ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
294
-	$timeout = _UPGRADE_TIME_OUT * 2;
295
-	$titre = _T('titre_page_upgrade');
296
-	$balise_img = charger_filtre('balise_img');
297
-	$titre .= $balise_img(chemin_image('loader.svg'),'','loader');
298
-	echo(install_debut_html($titre));
299
-	// script de rechargement auto sur timeout
300
-	$redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
301
-	echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')');
302
-	echo "<div style='text-align: left'>\n";
303
-	if (ob_get_level()) {
304
-		ob_flush();
305
-	}
306
-	flush();
307
-	$done = true;
288
+    static $done = false;
289
+    if ($done) {
290
+        return;
291
+    }
292
+    include_spip('inc/minipres');
293
+    @ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure
294
+    $timeout = _UPGRADE_TIME_OUT * 2;
295
+    $titre = _T('titre_page_upgrade');
296
+    $balise_img = charger_filtre('balise_img');
297
+    $titre .= $balise_img(chemin_image('loader.svg'),'','loader');
298
+    echo(install_debut_html($titre));
299
+    // script de rechargement auto sur timeout
300
+    $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true);
301
+    echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')');
302
+    echo "<div style='text-align: left'>\n";
303
+    if (ob_get_level()) {
304
+        ob_flush();
305
+    }
306
+    flush();
307
+    $done = true;
308 308
 }
309 309
 
310 310
 
@@ -348,63 +348,63 @@  discard block
 block discarded – undo
348 348
  *    - tableau vide sinon.
349 349
  */
350 350
 function maj_while($installee, $cible, $maj, $meta = '', $table = 'meta', $redirect = '', $debut_page = false) {
351
-	# inclusions pour que les procedures d'upgrade disposent des fonctions de base
352
-	include_spip('base/create');
353
-	include_spip('base/abstract_sql');
354
-	$trouver_table = charger_fonction('trouver_table', 'base');
355
-	include_spip('inc/plugin'); // pour spip_version_compare
356
-	$n = 0;
357
-	$time = time();
358
-
359
-	if (!defined('_TIME_OUT')) {
360
-		/**
361
-		 * Définir le timeout qui peut-être utilisé dans les fonctions
362
-		 * de mises à jour qui durent trop longtemps
363
-		 *
364
-		 * À utiliser tel que : `if (time() >= _TIME_OUT)`
365
-		 *
366
-		 * @var int
367
-		 */
368
-		define('_TIME_OUT', $time + _UPGRADE_TIME_OUT);
369
-	}
370
-
371
-	foreach ($maj as $v => $operations) {
372
-		// si une maj pour cette version
373
-		if ($v == 'init' or
374
-			(spip_version_compare($v, $installee, '>')
375
-				and spip_version_compare($v, $cible, '<='))
376
-		) {
377
-			if ($debut_page) {
378
-				maj_debut_page($v, $meta, $table);
379
-			}
380
-			echo "MAJ $v";
381
-			$etape = serie_alter($v, $operations, $meta, $table, $redirect);
382
-			$trouver_table(''); // vider le cache des descriptions de table
383
-			# echec sur une etape en cours ?
384
-			# on sort
385
-			if ($etape) {
386
-				return array($v, $etape);
387
-			}
388
-			$n = time() - $time;
389
-			spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE);
390
-			if ($meta) {
391
-				ecrire_meta($meta, $installee = $v, 'oui', $table);
392
-			}
393
-			echo '<br />';
394
-		}
395
-		if (time() >= _TIME_OUT) {
396
-			relance_maj($meta, $table, $redirect);
397
-		}
398
-	}
399
-	$trouver_table(''); // vider le cache des descriptions de table
400
-	// indispensable pour les chgt de versions qui n'ecrivent pas en base
401
-	// tant pis pour la redondance eventuelle avec ci-dessus
402
-	if ($meta) {
403
-		ecrire_meta($meta, $cible, 'oui', $table);
404
-	}
405
-	spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE);
406
-
407
-	return array();
351
+    # inclusions pour que les procedures d'upgrade disposent des fonctions de base
352
+    include_spip('base/create');
353
+    include_spip('base/abstract_sql');
354
+    $trouver_table = charger_fonction('trouver_table', 'base');
355
+    include_spip('inc/plugin'); // pour spip_version_compare
356
+    $n = 0;
357
+    $time = time();
358
+
359
+    if (!defined('_TIME_OUT')) {
360
+        /**
361
+         * Définir le timeout qui peut-être utilisé dans les fonctions
362
+         * de mises à jour qui durent trop longtemps
363
+         *
364
+         * À utiliser tel que : `if (time() >= _TIME_OUT)`
365
+         *
366
+         * @var int
367
+         */
368
+        define('_TIME_OUT', $time + _UPGRADE_TIME_OUT);
369
+    }
370
+
371
+    foreach ($maj as $v => $operations) {
372
+        // si une maj pour cette version
373
+        if ($v == 'init' or
374
+            (spip_version_compare($v, $installee, '>')
375
+                and spip_version_compare($v, $cible, '<='))
376
+        ) {
377
+            if ($debut_page) {
378
+                maj_debut_page($v, $meta, $table);
379
+            }
380
+            echo "MAJ $v";
381
+            $etape = serie_alter($v, $operations, $meta, $table, $redirect);
382
+            $trouver_table(''); // vider le cache des descriptions de table
383
+            # echec sur une etape en cours ?
384
+            # on sort
385
+            if ($etape) {
386
+                return array($v, $etape);
387
+            }
388
+            $n = time() - $time;
389
+            spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE);
390
+            if ($meta) {
391
+                ecrire_meta($meta, $installee = $v, 'oui', $table);
392
+            }
393
+            echo '<br />';
394
+        }
395
+        if (time() >= _TIME_OUT) {
396
+            relance_maj($meta, $table, $redirect);
397
+        }
398
+    }
399
+    $trouver_table(''); // vider le cache des descriptions de table
400
+    // indispensable pour les chgt de versions qui n'ecrivent pas en base
401
+    // tant pis pour la redondance eventuelle avec ci-dessus
402
+    if ($meta) {
403
+        ecrire_meta($meta, $cible, 'oui', $table);
404
+    }
405
+    spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE);
406
+
407
+    return array();
408 408
 }
409 409
 
410 410
 /**
@@ -427,52 +427,52 @@  discard block
 block discarded – undo
427 427
  * @return int
428 428
  */
429 429
 function serie_alter($serie, $q = array(), $meta = '', $table = 'meta', $redirect = '') {
430
-	$meta2 = $meta . '_maj_' . $serie;
431
-	$etape = 0;
432
-	if (isset($GLOBALS[$table][$meta2])) {
433
-		$etape = intval($GLOBALS[$table][$meta2]);
434
-	}
435
-	foreach ($q as $i => $r) {
436
-		if ($i >= $etape) {
437
-			$msg = "maj $table $meta2 etape $i";
438
-			if (is_array($r)
439
-				and function_exists($f = array_shift($r))
440
-			) {
441
-				// note: $r (arguments de la fonction $f) peut avoir des données tabulaires
442
-				spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE);
443
-				// pour les fonctions atomiques sql_xx
444
-				// on enregistre le meta avant de lancer la fonction,
445
-				// de maniere a eviter de boucler sur timeout
446
-				// mais pour les fonctions complexes,
447
-				// il faut les rejouer jusqu'a achevement.
448
-				// C'est a elle d'assurer qu'elles progressent a chaque rappel
449
-				if (strncmp($f, 'sql_', 4) == 0) {
450
-					ecrire_meta($meta2, $i + 1, 'non', $table);
451
-				}
452
-				echo " <span title='$i'>.</span>";
453
-				call_user_func_array($f, $r);
454
-				// si temps imparti depasse, on relance sans ecrire en meta
455
-				// car on est peut etre sorti sur timeout si c'est une fonction longue
456
-				if (time() >= _TIME_OUT) {
457
-					relance_maj($meta, $table, $redirect);
458
-				}
459
-				ecrire_meta($meta2, $i + 1, 'non', $table);
460
-				spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE);
461
-			} else {
462
-				if (!is_array($r)) {
463
-					spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR);
464
-				} else {
465
-					spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR);
466
-				}
467
-				// en cas d'erreur serieuse, on s'arrete
468
-				// mais on permet de passer par dessus en rechargeant la page.
469
-				return $i + 1;
470
-			}
471
-		}
472
-	}
473
-	effacer_meta($meta2, $table);
474
-
475
-	return 0;
430
+    $meta2 = $meta . '_maj_' . $serie;
431
+    $etape = 0;
432
+    if (isset($GLOBALS[$table][$meta2])) {
433
+        $etape = intval($GLOBALS[$table][$meta2]);
434
+    }
435
+    foreach ($q as $i => $r) {
436
+        if ($i >= $etape) {
437
+            $msg = "maj $table $meta2 etape $i";
438
+            if (is_array($r)
439
+                and function_exists($f = array_shift($r))
440
+            ) {
441
+                // note: $r (arguments de la fonction $f) peut avoir des données tabulaires
442
+                spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE);
443
+                // pour les fonctions atomiques sql_xx
444
+                // on enregistre le meta avant de lancer la fonction,
445
+                // de maniere a eviter de boucler sur timeout
446
+                // mais pour les fonctions complexes,
447
+                // il faut les rejouer jusqu'a achevement.
448
+                // C'est a elle d'assurer qu'elles progressent a chaque rappel
449
+                if (strncmp($f, 'sql_', 4) == 0) {
450
+                    ecrire_meta($meta2, $i + 1, 'non', $table);
451
+                }
452
+                echo " <span title='$i'>.</span>";
453
+                call_user_func_array($f, $r);
454
+                // si temps imparti depasse, on relance sans ecrire en meta
455
+                // car on est peut etre sorti sur timeout si c'est une fonction longue
456
+                if (time() >= _TIME_OUT) {
457
+                    relance_maj($meta, $table, $redirect);
458
+                }
459
+                ecrire_meta($meta2, $i + 1, 'non', $table);
460
+                spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE);
461
+            } else {
462
+                if (!is_array($r)) {
463
+                    spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR);
464
+                } else {
465
+                    spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR);
466
+                }
467
+                // en cas d'erreur serieuse, on s'arrete
468
+                // mais on permet de passer par dessus en rechargeant la page.
469
+                return $i + 1;
470
+            }
471
+        }
472
+    }
473
+    effacer_meta($meta2, $table);
474
+
475
+    return 0;
476 476
 }
477 477
 
478 478
 /**
@@ -481,16 +481,16 @@  discard block
 block discarded – undo
481 481
  * @return bool True si possible.
482 482
  **/
483 483
 function upgrade_test() {
484
-	sql_drop_table('spip_test', true);
485
-	sql_create('spip_test', array('a' => 'int'));
486
-	sql_alter('TABLE spip_test ADD b INT');
487
-	sql_insertq('spip_test', array('b' => 1), array('field' => array('b' => 'int')));
488
-	$result = sql_select('b', 'spip_test');
489
-	// ne pas garder le resultat de la requete sinon sqlite3
490
-	// ne peut pas supprimer la table spip_test lors du sql_alter qui suit
491
-	// car cette table serait alors 'verouillee'
492
-	$result = $result ? true : false;
493
-	sql_alter('TABLE spip_test DROP b');
494
-
495
-	return $result;
484
+    sql_drop_table('spip_test', true);
485
+    sql_create('spip_test', array('a' => 'int'));
486
+    sql_alter('TABLE spip_test ADD b INT');
487
+    sql_insertq('spip_test', array('b' => 1), array('field' => array('b' => 'int')));
488
+    $result = sql_select('b', 'spip_test');
489
+    // ne pas garder le resultat de la requete sinon sqlite3
490
+    // ne peut pas supprimer la table spip_test lors du sql_alter qui suit
491
+    // car cette table serait alors 'verouillee'
492
+    $result = $result ? true : false;
493
+    sql_alter('TABLE spip_test DROP b');
494
+
495
+    return $result;
496 496
 }
Please login to merge, or discard this patch.