where('group', 'home')->where('key', 'hero')->first(); if (! $row) { $this->command?->info('Hero-Slideshow: home/hero nicht im CMS – die Lang-Datei gilt.'); return; } $value = $row->getTranslations('value'); $changed = false; foreach ($value as $locale => $content) { $defaults = trans('b2in.themes.b2in.hero', [], $locale); if (! is_array($content) || ! is_array($defaults) || ! is_array($defaults['slides'] ?? null)) { continue; } if (! array_key_exists('slides', $content)) { $value[$locale] = $content + ['interval' => $defaults['interval'] ?? 7, 'slides' => $defaults['slides']]; $changed = true; continue; } $withCaptions = $this->addMissingCaptions((array) $content['slides'], $defaults['slides']); if ($withCaptions !== $content['slides']) { $value[$locale]['slides'] = $withCaptions; $changed = true; } } if (! $changed) { $this->command?->info('Hero-Slideshow: Slides bereits gepflegt, nichts geändert.'); return; } $row->value = $value; $row->save(); app(CmsContentService::class)->clearCache('home'); $this->command?->info('Hero-Slideshow: Bilder bzw. Texte der Infokarte eingetragen.'); } /** * Ergänzt `caption` bei Slides, die eines der gelieferten Bilder zeigen und noch keinen Text haben. * * @param array $slides * @param array> $defaults * @return array */ private function addMissingCaptions(array $slides, array $defaults): array { $captions = array_column($defaults, 'caption', 'image'); return array_map(function ($slide) use ($captions) { if (! is_array($slide) || array_key_exists('caption', $slide) || ! isset($captions[$slide['image'] ?? ''])) { return $slide; } return $slide + ['caption' => $captions[$slide['image']]]; }, $slides); } }