* php bin/stadionzeitung-publish.php --entwurf (zurückziehen: * Status wieder auf Entwurf, Snapshot wird verworfen — die Seiten * rechnen wieder live) * * Sinnvoller Zeitpunkt: am Spieltagmorgen NACH dem letzten Matchcenter-Sync, * dann steht der aktuelle Tabellenstand im Heft. */ if (PHP_SAPI !== 'cli') { exit(1); } require dirname(__DIR__) . '/app/bootstrap.php'; $slug = trim((string) ($argv[1] ?? '')); $unpublish = in_array('--entwurf', $argv, true); if ($slug === '' || str_starts_with($slug, '--')) { fwrite(STDERR, "Nutzung: php bin/stadionzeitung-publish.php [--entwurf]\n"); exit(1); } $log = static function (string $msg, string $level = 'INFO'): void { log_write('stadionzeitung', $level, $msg); echo '[' . date('c') . "] {$level} {$msg}\n"; }; $cacheFile = DATA_PATH . '/stadionzeitung.json'; $data = is_file($cacheFile) ? (json_decode((string) file_get_contents($cacheFile), true) ?: ['issues' => []]) : ['issues' => []]; $found = false; foreach ($data['issues'] as &$issue) { if (($issue['slug'] ?? '') !== $slug) { continue; } $found = true; if ($unpublish) { $issue['status'] = 'entwurf'; unset($issue['snapshot']); $log("Ausgabe '{$slug}' zurückgezogen — Status Entwurf, Snapshot verworfen (Live-Seiten rechnen wieder frisch)."); break; } if (($issue['status'] ?? 'veroeffentlicht') === 'veroeffentlicht' && isset($issue['snapshot'])) { $log("Ausgabe '{$slug}' ist bereits veröffentlicht — nichts zu tun. Zum Neu-Einfrieren erst mit --entwurf zurückziehen.", 'WARN'); exit(0); } $snapshot = stadionzeitung_build_snapshot($issue); $issue['snapshot'] = $snapshot; $issue['status'] = 'veroeffentlicht'; $issue['published_at'] = date('c'); $tables = implode(', ', array_keys($snapshot['tabellen'] ?? [])); $log("Ausgabe '{$slug}' veröffentlicht — eingefroren: Tabellen [{$tables}], " . count($snapshot['ergebnisse'] ?? []) . ' Ergebnis-Blöcke, ' . count($snapshot['vorschau'] ?? []) . ' Vorschau-Spiele, ' . count($snapshot['news'] ?? []) . ' News.'); break; } unset($issue); if (!$found) { $known = implode(', ', array_column($data['issues'], 'slug')); fwrite(STDERR, "Unbekannter Slug '{$slug}'. Bekannt: {$known}\n"); exit(1); } $payload = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); $tmp = $cacheFile . '.tmp'; file_put_contents($tmp, $payload); rename($tmp, $cacheFile); echo $unpublish ? "Fertig: /stadionzeitung/{$slug} ist wieder ein Entwurf.\n" : "Fertig: /stadionzeitung/{$slug} ist veröffentlicht und eingefroren.\n";