1e51ef7def
- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/ - 12 code-workspace-Files - STATUS-*.md - viele M/D/R-Änderungen an bereits getrackten Files - .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
79 lines
2.4 KiB
PHP
79 lines
2.4 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Prüft, ob alle in manifest.sharedAssets deklarierten Assets im
|
|
* Plattform-Pool existieren.
|
|
*
|
|
* Pool-Pfad ist relativ zum Repo-Root: v2-platform/assets/shared/<kategorie>/<slug>.<ext>
|
|
* Wir suchen den Repo-Root, indem wir aus dem Modul-Pfad (v2-modules/<slug>) zwei Ebenen hoch gehen.
|
|
*/
|
|
function check_shared_assets(string $moduleDir, array $m, Report $r): void {
|
|
if (empty($m['sharedAssets'])) {
|
|
$r->ok("sharedAssets: keine deklariert (ok)");
|
|
return;
|
|
}
|
|
|
|
if (!is_array($m['sharedAssets'])) {
|
|
$r->fail("sharedAssets muss ein Objekt sein");
|
|
return;
|
|
}
|
|
|
|
// Repo-Root finden (v2-modules/<slug> → ..)
|
|
$repoRoot = realpath($moduleDir . '/../../');
|
|
if (!$repoRoot) {
|
|
$r->warn("Repo-Root nicht auflösbar — sharedAssets-Check übersprungen");
|
|
return;
|
|
}
|
|
|
|
$poolBase = $repoRoot . '/v2-platform/assets/shared';
|
|
if (!is_dir($poolBase)) {
|
|
$r->warn("Shared-Pool fehlt im Repository: $poolBase");
|
|
return;
|
|
}
|
|
|
|
// Erlaubte Extensions pro Kategorie
|
|
$extByCategory = [
|
|
'cities' => ['png', 'jpg', 'webp'],
|
|
'icons' => ['svg', 'png'],
|
|
'glossar' => ['png', 'svg', 'jpg'],
|
|
'bg-music' => ['mp3', 'ogg'],
|
|
'ui-sounds' => ['mp3', 'ogg', 'wav'],
|
|
];
|
|
|
|
$missing = [];
|
|
$checked = 0;
|
|
|
|
foreach ($m['sharedAssets'] as $category => $slugs) {
|
|
if (!is_array($slugs)) {
|
|
$r->fail("sharedAssets.$category muss ein Array sein");
|
|
continue;
|
|
}
|
|
$categoryDir = "$poolBase/$category";
|
|
if (!is_dir($categoryDir)) {
|
|
$r->fail("Pool-Kategorie '$category' existiert nicht: $categoryDir");
|
|
continue;
|
|
}
|
|
$exts = $extByCategory[$category] ?? ['png', 'svg', 'jpg', 'mp3'];
|
|
foreach ($slugs as $slug) {
|
|
$checked++;
|
|
$found = false;
|
|
foreach ($exts as $ext) {
|
|
if (file_exists("$categoryDir/$slug.$ext")) {
|
|
$found = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!$found) {
|
|
$missing[] = "$category/$slug (geprüfte Extensions: " . implode('|', $exts) . ")";
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($missing) {
|
|
$r->fail("Fehlende Shared-Assets — bei Atlas in _inbox/zentrale/ bestellen", $missing);
|
|
} else {
|
|
$r->ok("Alle $checked Shared-Assets im Pool gefunden");
|
|
}
|
|
}
|