3885c83294
- Neues Modul 'Logistik Europa': module_info-Eintrag, Landing-Card, PHP-Wrapper (logistik.php, modul-logistik.php), Engine-Skelett mit Enums + Helpern (travelCost, latePenalty, Bonus, Dijkstra, Polyline-Interpolation), Test-Harness, Kompetenzen-Draft, 5 Seed-Dateien (locations, vehicle-types, cargo-types, railnet, contract-templates), 3 Level-Einträge in game_levels, Phase 0 durch die Logistik-Instanz geliefert und Atlas-Review bestanden - Heli-Fix: heli-game.php mit BASE_PATH (production-sicher) + Asset-Pfad-Injection, geo_waypoints-Tabelle per Seed-Script auffindbar gemacht - Waypoints-Regen-Tool: regen-waypoints-sql.php synchronisiert waypoints.sql aus DB (70 Einträge) - Design-System: .ggs-level-grid / .ggs-level-card als Standard gepromotet (Klimas Muster, iPad-hover-safe) - Inbox-Nachrichten: Kickoff-Briefings für Heli und Logistik, Asset-Map für Heli, DALL-E-Pipeline-Anleitung, Koordinations- nachrichten an Fluss, Klima, Glossar, Lehrplan Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
62 lines
2.1 KiB
PHP
62 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* Regeneriert App/assets/data/waypoints.sql aus der aktuellen geo_waypoints-Tabelle.
|
|
* Aufruf: http://localhost/geograsim/App/php/regen-waypoints-sql.php
|
|
*
|
|
* Nutzung: nach Updates an Koordinaten/Namen in der DB, damit das Seed-File
|
|
* wieder synchron ist. Keine Destruktivität — überschreibt nur die SQL-Datei.
|
|
*/
|
|
require_once __DIR__ . '/config/db.php';
|
|
|
|
header('Content-Type: text/plain; charset=utf-8');
|
|
|
|
$db = getDB();
|
|
$rows = $db->query("SELECT wp_key, name, lat, lon, region, wp_type, info
|
|
FROM geo_waypoints
|
|
ORDER BY region, wp_type, name")->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
if (!$rows) {
|
|
exit("Keine Waypoints in DB — Abbruch.\n");
|
|
}
|
|
|
|
$esc = fn(?string $s) => $s === null ? 'NULL' : "'" . str_replace("'", "''", $s) . "'";
|
|
|
|
$sql = "CREATE TABLE IF NOT EXISTS geo_waypoints (\n";
|
|
$sql .= " id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,\n";
|
|
$sql .= " wp_key VARCHAR(32) NOT NULL UNIQUE,\n";
|
|
$sql .= " name VARCHAR(100) NOT NULL,\n";
|
|
$sql .= " lat DECIMAL(8,5) NOT NULL,\n";
|
|
$sql .= " lon DECIMAL(8,5) NOT NULL,\n";
|
|
$sql .= " region VARCHAR(32) DEFAULT 'vorarlberg',\n";
|
|
$sql .= " wp_type ENUM('base','city','village','peak','target','pass') DEFAULT 'village',\n";
|
|
$sql .= " info VARCHAR(255),\n";
|
|
$sql .= " updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n";
|
|
$sql .= ") ENGINE=InnoDB;\n\n";
|
|
$sql .= "DELETE FROM geo_waypoints;\n\n";
|
|
$sql .= "INSERT INTO geo_waypoints (wp_key, name, lat, lon, region, wp_type, info) VALUES\n";
|
|
|
|
$lines = [];
|
|
foreach ($rows as $r) {
|
|
$lines[] = sprintf(
|
|
"(%s,%s,%s,%s,%s,%s,%s)",
|
|
$esc($r['wp_key']),
|
|
$esc($r['name']),
|
|
$r['lat'],
|
|
$r['lon'],
|
|
$esc($r['region']),
|
|
$esc($r['wp_type']),
|
|
$esc($r['info'])
|
|
);
|
|
}
|
|
$sql .= implode(",\n", $lines) . ";\n";
|
|
|
|
$target = __DIR__ . '/../assets/data/waypoints.sql';
|
|
$bytes = file_put_contents($target, $sql);
|
|
|
|
if ($bytes === false) {
|
|
exit("Fehler: Konnte $target nicht schreiben.\n");
|
|
}
|
|
|
|
$count = count($rows);
|
|
echo "OK — $count Waypoints nach $target geschrieben ($bytes Bytes).\n";
|