seedPageConfigs(); $this->seedDynamicPages(); }); DynamicPage::resetCache(); PageConfig::resetCache(); } private function seedPageConfigs(): void { $filePath = database_path('seeders/data/page_configs.json'); if (! File::exists($filePath)) { return; } /** @var array>|null $configs */ $configs = json_decode(File::get($filePath), true); if (! is_array($configs)) { return; } foreach ($configs as $configData) { $view = $configData['view'] ?? null; if (! is_string($view)) { continue; } /** @var PageConfig $pageConfig */ $pageConfig = PageConfig::withTrashed() ->firstOrNew(['view' => $view]); $pageConfig->deleted_at = null; if (isset($configData['label']) && is_array($configData['label'])) { /** @var array $label */ $label = $configData['label']; $pageConfig->setTranslations('label', $label); } if (isset($configData['config']) && is_array($configData['config'])) { /** @var array $config */ $config = $configData['config']; $pageConfig->setTranslations('config', $config); } $pageConfig->saveQuietly(); } } private function seedDynamicPages(): void { $filePath = database_path('seeders/data/dynamic_pages.json'); if (! File::exists($filePath)) { return; } /** @var array>|null $pages */ $pages = json_decode(File::get($filePath), true); if (! is_array($pages)) { return; } foreach ($pages as $pageData) { $idKey = isset($pageData['id_key']) && is_string($pageData['id_key']) ? $pageData['id_key'] : null; $isRoot = (bool) ($pageData['isRoot'] ?? false); $dynamicPage = $this->resolveDynamicPage( $idKey, $isRoot ); $this->populateDynamicPage( $dynamicPage, $pageData, $idKey, $isRoot ); $dynamicPage->saveQuietly(); } } private function resolveDynamicPage(?string $idKey, bool $isRoot): DynamicPage { $dynamicPage = null; if ($isRoot) { $dynamicPage = DynamicPage::withTrashed() ->where('isRoot', true) ->first(); } if (! $dynamicPage && $idKey) { $dynamicPage = DynamicPage::withTrashed() ->where('id_key', $idKey) ->first(); } $page = $dynamicPage ?? new DynamicPage(); $page->deleted_at = null; return $page; } /** * @param array $pageData */ private function populateDynamicPage( DynamicPage $page, array $pageData, ?string $idKey, bool $isRoot ): void { $configId = null; if (! empty($pageData['config_view']) && is_string($pageData['config_view'])) { $configId = PageConfig::withTrashed() ->where('view', $pageData['config_view'])->value('id'); } $page->id_key = (string) $idKey; $page->config_id = is_numeric($configId) ? (int) $configId : null; $page->page_id = null; $page->status = isset($pageData['status']) ? PageStatusEnum::from((int) $pageData['status']) : PageStatusEnum::published; $page->isLocked = (bool) ($pageData['isLocked'] ?? true); $page->isRoot = $isRoot; if (isset($pageData['title']) && is_array($pageData['title'])) { /** @var array $title */ $title = $pageData['title']; $page->setTranslations( 'title', $title ); } if (isset($pageData['slug']) && is_array($pageData['slug'])) { /** @var array $slug */ $slug = $pageData['slug']; $page->setTranslations( 'slug', $slug ); } if (isset($pageData['content']) && is_array($pageData['content'])) { /** @var array $content */ $content = $pageData['content']; $page->setTranslations( 'content', $content ); } } }