HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers54/csbinstallatietechniek.nl/database/seeds/SamplePages.php
<?php

use Illuminate\Support\Facades\App;
use Illuminate\Support\Str;
use Komma\KMS\Globalization\Languages\Models\Language;
use App\Pages\Models\Page;
use App\Pages\Models\PageTranslation;
use App\Routes\RouteService;
use Komma\KMS\Sites\Models\Site;
use Komma\KMS\Sites\SiteServiceInterface;

;

use Illuminate\Database\Seeder;

class SamplePages extends Seeder
{
    /**
     *
     */
    public function run()
    {
        $routeService = new RouteService();
        $siteService = App::make(SiteServiceInterface::class); //Returns a singleton that is used throughout the whole app

        $mainSite = Site::where('name', '=', 'Main company')->first();
        $subsidiarySite = Site::where('name', '=', 'Subsidiary company')->first();

        if (!$mainSite || !$subsidiarySite) {
            throw new RuntimeException('No main or subsidiary site found. Did you forgot to run the core package seeds / migrations?');
        }

        $mainSiteRoot = new Page(['active' => '0', 'site_id' => $mainSite->id]);
        $mainSiteRoot->makeRoot();
        $mainSiteRoot->save();

        $subsidiarySiteRoot = new Page(['active' => '0', 'site_id' => $subsidiarySite->id]);
        $subsidiarySiteRoot->makeRoot();
        $subsidiarySiteRoot->save();

        $mainSitePages = [
            [
                'code_name' => 'home',
                'nl'        => "Home",
                'de'        => "Home",
                'en'        => "Home",
            ],
            [
                'code_name' => 'about',
                'nl'        => "Over ons",
                'de'        => "Über uns",
                'en'        => "About us",
                'children'  => [
                    [
                        'code_name' => 'the_team',
                        'nl'        => 'Het team',
                        'de'        => 'Das team',
                        'en'        => 'The Team',
                    ],
                    [
                        'code_name' => 'location',
                        'nl'        => 'Locatie',
                        'de'        => 'Standort',
                        'en'        => 'Location',
                        'children'  => [
                            [
                                'code_name' => 'location_a',
                                'nl'        => 'Locatie A',
                                'de'        => 'Standort A',
                                'en'        => 'Location A',
                                'children'  => [],
                            ],
                            [
                                'code_name' => 'location_b',
                                'nl'        => 'Locatie B',
                                'de'        => 'Standort B',
                                'en'        => 'Location B',
                                'children'  => [],
                            ],
                        ],
                    ],
                    [
                        'code_name' => 'what_we_do',
                        'nl'        => 'Wat we doen',
                        'de'        => 'Was wir machen',
                        'en'        => 'What we do',
                    ],
                ],
            ],
            [
                'code_name' => 'posts',
                'nl'        => "Blog",
                'en'        => "Blog",
                'de'        => "Blog",
            ],
            [
                'code_name' => 'contact',
                'nl'        => "Contact",
                'de'        => "Kontakt",
                'en'        => "Contact",
            ],
            [
                'code_name' => 'privacy',
                'nl'        => "Privacy",
                'de'        => "Privacy",
                'en'        => "Privacy",
            ],
            [
                'code_name' => 'legal',
                'nl'        => "Disclaimer",
                'de'        => "Haftungsausschluss",
                'en'        => "Disclaimer",
            ],
        ];

        $subSidiarySitePages = [
            [
                'code_name' => 'home',
                'nl'        => "Thuis",
                'de'        => "House",
                'en'        => "Home",
            ],
            [
                'code_name' => 'about',
                'nl'        => "Over ons",
                'de'        => "Über uns",
                'en'        => "About us",
            ],
        ];


        $siteService->setCurrentSiteBySlug($mainSite->slug);
        foreach ($mainSitePages as $pageData) {
            $page = $this->createPage($pageData, $mainSiteRoot, $mainSite, $routeService);
        }

        $siteService->setCurrentSiteBySlug($subsidiarySite->slug);
        foreach ($subSidiarySitePages as $pageData) {
            $page = $this->createPage($pageData, $subsidiarySiteRoot, $subsidiarySite, $routeService);
        }
    }

    /**
     * Create a category from the array data you pass it.
     *
     * @param $pageData
     * @param  Page  $parent
     * @param  Site  $site
     * @param  RouteService  $routeService
     * @return Page
     */
    private function createPage(array $pageData, Page $parent, Site $site, RouteService $routeService): Page
    {
        $page = new Page();

        $page->code_name = $pageData['code_name'];
        $page->active = 1;
        $page->site_id = $site->id;
        $page->makeLastChildOf($parent); //Also saves

        foreach ($pageData as $key => $value) {
            switch ($key) {
                case 'code_name':
                    break;
                case 'children':
                    foreach ($value as $childCategoryData) {
                        $this->createPage($childCategoryData, $page, $site, $routeService);
                    }
                    break;
                default:
                    $language = Language::where('iso_2', '=', $key)->first();
                    if (!$language) {
                        break;
                    }
                    $translation = new PageTranslation();
                    $translation->language()->associate($language);
                    $translation->translatable()->associate($page);
                    $translation->slug = Str::slug($value);
                    $translation->name = $value;
                    $translation->meta_title = $value;
                    $translation->description = '[]';
                    $translation->save();
                    $routeService->createOrUpdateRoutesForModelsTranslationsIfChanged($page);
            }
        }

        return $page;
    }
}