getArticles() as $i => $data) { CmsArticle::query()->updateOrCreate( ['slug' => $data['slug']], array_merge($data, ['order' => $i + 1]), ); } } /** * @return array> */ private function getArticles(): array { /** @var array> $articlesDe */ $articlesDe = Lang::get('b2in.articles', [], 'de'); /** @var array> $articlesEn */ $articlesEn = Lang::get('b2in.articles', [], 'en'); if (! is_array($articlesDe) || $articlesDe === []) { return []; } if (! is_array($articlesEn)) { $articlesEn = []; } // Kein ksort: die Reihenfolge in der Lang-Datei bestimmt die Reihenfolge im Magazin – // im CMS ueber `order`, im Lang-Fallback ueber die Array-Reihenfolge. Beide Wege stimmen // damit ueberein. $out = []; foreach ($articlesDe as $id => $rowDe) { if (! is_array($rowDe)) { continue; } $slug = CmsArticle::slugForLangArticle($id, $rowDe); if ($slug === null) { continue; } $rowEn = $articlesEn[$id] ?? $rowDe; if (! is_array($rowEn)) { $rowEn = $rowDe; } $out[] = [ 'slug' => $slug, 'title' => [ 'de' => (string) ($rowDe['title'] ?? ''), 'en' => (string) ($rowEn['title'] ?? ''), ], 'subtitle' => [ 'de' => (string) ($rowDe['subtitle'] ?? ''), 'en' => (string) ($rowEn['subtitle'] ?? ''), ], 'image' => (string) ($rowDe['image'] ?? ''), 'category' => (string) ($rowDe['category'] ?? ''), 'world' => (string) ($rowDe['world'] ?? CmsArticle::WORLD_INTERIOR), 'date_label' => (string) ($rowDe['date'] ?? ''), 'read_time' => (string) ($rowDe['readTime'] ?? ''), 'author' => is_array($rowDe['author'] ?? null) ? $rowDe['author'] : [], 'content' => [ 'de' => is_array($rowDe['content'] ?? null) ? $rowDe['content'] : [], 'en' => is_array($rowEn['content'] ?? null) ? $rowEn['content'] : [], ], 'is_published' => ($rowDe['published'] ?? true) !== false, ]; } return $out; } }