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 {
$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;
protected function convertGuide($guide): string {
$html = '';
foreach ($guide as $part) {
- $html .= '<p>'.$part['type'].'</p>'."\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 '<h'.$l.'>'.$this->childrenToString($part).'</h'.$l.'>';
+ case 'image':
+ $url = $this->storeImage($part['image']);
+ return '<img src="'.htmlspecialchars($url)
+ .'" alt="'.htmlspecialchars($part['image']['alternativeText'])
+ .'">';
+ case 'link':
+ return '<a href="'.htmlspecialchars($part['url']).'">'.$this->childrenToString($part).'</a>';
+ case 'paragraph':
+ return '<p>'.$this->childrenToString($part).'</p>';
+ 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;