From: Daniel Karbach Date: Tue, 4 Nov 2025 15:22:18 +0000 (+0100) Subject: partial cms guide interpretation X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=1eda77a13dfbdad97ba03b419c2b0100ae6822d9;p=alttp.git partial cms guide interpretation --- diff --git a/app/Console/Commands/SyncMfnsMap.php b/app/Console/Commands/SyncMfnsMap.php index a39efb6..554e0ec 100644 --- a/app/Console/Commands/SyncMfnsMap.php +++ b/app/Console/Commands/SyncMfnsMap.php @@ -6,6 +6,8 @@ use App\Models\Technique; use App\Models\TechniqueMap; use Illuminate\Console\Command; use Illuminate\Support\Facades\Http; +use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Str; class SyncMfnsMap extends Command { @@ -43,6 +45,7 @@ class SyncMfnsMap extends Command { $tech->ext_id = $ext_id; $tech->attribution = 'Imported from Muffins Glitch Maps'; $tech->halt_sync = false; + $tech->name = Str::slug($entry['Title'], '-'); } if ($tech->halt_sync) { return; @@ -74,11 +77,53 @@ class SyncMfnsMap extends Command { protected function convertGuide($guide): string { $html = ''; foreach ($guide as $part) { - $html .= '

'.$part['type'].'

'."\n"; + $html .= $this->partToString($part)."\n"; } return $html; } + protected function partToString($part): string { + switch ($part['type']) { + case 'heading': + $l = isset($part['level']) ? $part['level'] : '3'; + return ''.$this->childrenToString($part).''; + case 'image': + $url = $this->storeImage($part['image']); + return ''.htmlspecialchars($part['image']['alternativeText'])
+					.''; + case 'link': + return ''.$this->childrenToString($part).''; + case 'paragraph': + return '

'.$this->childrenToString($part).'

'; + case 'text': + return isset($part['text']) ? htmlspecialchars($part['text']) : ''; + default: + $this->line('unknown part type '.$part['type']); + return ''; + } + } + + protected function childrenToString($part): string { + $str = ''; + if (isset($part['children'])) { + foreach ($part['children'] as $child) { + $str .= $this->partToString($child); + } + } + return $str; + } + + protected function storeImage($image): string { + $disk = Storage::disk('media'); + $path = 'alttp/mfns/'.$image['hash'].$image['ext']; + if (!$disk->exists($path)) { + $rsp = Http::get($image['url']); + $disk->put($path, $rsp->body()); + } + return $disk->url($path); + } + protected function syncMap($entry, TechniqueMap $map): void { $tile_x = 0; $tile_y = 0;