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