40656631ba
- Admin stats : clic sur un réseau AS affiche les IPs avec mini sparkline 14 jours + articles/livres consultés - AccessLogParser : calcul ip_data (daily + top paths) inclus dans le cache stats - Suppression du tableau statique "Répartition par réseau" (fusionné dans accordéon pays) - PHP-CS-Fixer appliqué sur l'ensemble des fichiers modifiés Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
73 lines
2.0 KiB
PHP
73 lines
2.0 KiB
PHP
#!/usr/bin/env php
|
|
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
// Runner de migrations de contenu (fichiers articles).
|
|
// Analogie avec database/migrate.php, mais pour les fichiers data/.
|
|
//
|
|
// Usage : php scripts/migrate_content.php [/chemin/vers/data]
|
|
//
|
|
// - Lit data/.content_migrations.json pour savoir ce qui a déjà tourné.
|
|
// - Active data/.maintenance pendant l'exécution (→ page 503 aux visiteurs).
|
|
// - Applique les scripts scripts/content/migration_*.php non encore appliqués.
|
|
|
|
$baseDir = dirname(__DIR__);
|
|
$dataDir = $argv[1] ?? ($baseDir . '/data');
|
|
|
|
if (!is_dir($dataDir)) {
|
|
fwrite(STDERR, "Répertoire data introuvable : $dataDir\n");
|
|
exit(1);
|
|
}
|
|
|
|
$trackFile = $dataDir . '/.content_migrations.json';
|
|
$maintenanceFlag = $dataDir . '/.maintenance';
|
|
|
|
$applied = [];
|
|
if (file_exists($trackFile)) {
|
|
$applied = json_decode((string) file_get_contents($trackFile), true) ?? [];
|
|
}
|
|
|
|
$files = glob(__DIR__ . '/content/migration_*.php') ?: [];
|
|
sort($files);
|
|
|
|
$pending = array_values(array_filter($files, fn ($f) => !isset($applied[basename($f)])));
|
|
|
|
if (empty($pending)) {
|
|
echo " (aucune migration de contenu en attente)\n";
|
|
exit(0);
|
|
}
|
|
|
|
file_put_contents($maintenanceFlag, date('Y-m-d H:i:s'));
|
|
echo "→ Mode maintenance activé\n";
|
|
|
|
$count = 0;
|
|
$errors = 0;
|
|
|
|
foreach ($pending as $file) {
|
|
$name = basename($file);
|
|
echo " → $name ... ";
|
|
try {
|
|
require $file;
|
|
$applied[$name] = date('Y-m-d H:i:s');
|
|
file_put_contents(
|
|
$trackFile,
|
|
json_encode($applied, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n"
|
|
);
|
|
echo "✓\n";
|
|
$count++;
|
|
} catch (Throwable $e) {
|
|
echo '✗ ' . $e->getMessage() . "\n";
|
|
$errors++;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (file_exists($maintenanceFlag)) {
|
|
unlink($maintenanceFlag);
|
|
}
|
|
echo "→ Mode maintenance désactivé\n";
|
|
echo "→ $count migration(s) appliquée(s)" . ($errors ? ", $errors erreur(s)" : '') . ".\n";
|
|
|
|
exit($errors > 0 ? 1 : 0);
|