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/SBogers10/sdo-schoonmaak.komma.pro/app/KommaApp/Languages/LanguageService.php
<?php


namespace App\KommaApp\Languages;

use App\KommaApp\Languages\Models\Language;
use App\KommaApp\Kms\Core\AbstractTranslatableModel;
use App\KommaApp\Pages\Models\Page;
use App\KommaApp\Routes\Models\Route;

/**
 * Can fill some models with their respective translation models.
 * And in the future will be able to set and change the users site language
 *
 * Class LanguageService
 * @package App\KommaApp\Core
 */
class LanguageService
{

    /**
     * @param Page $page
     * @param AbstractTranslatableModel|null $model
     * @return object
     */
    public function getOtherLanguagesRoutes(Page $page, AbstractTranslatableModel $model = null)
    {
        // Load route because we want to use the route column to get all related routes
        $page->load('translation.route');

        $languageSwitch = [];

        $availableTranslationIds = [];

        // First inject language route on available site languages into the language switch
        foreach (\App::getSite()->languages as $language)
        {
            $alias = '';
            if($language->id == \App::getSite()->default_language_id) $alias = '';
            else $alias = $language->iso_2;

            $languageSwitch[$language->id] = (object)[
                'iso'   => $language->iso_2,
                'route' => $alias
            ];
            $availableTranslationIds[] = $language->id;
        }

        // Then inject page route
        $pageTranslationRoutes = Route::where('route', $page->translation->route->route)
            ->whereIn('language_id', $availableTranslationIds)
            ->get();


        foreach ($pageTranslationRoutes as $translationRoute)
        {
            // Inject the page translation
            $languageSwitch[$translationRoute->language_id]->route = $translationRoute->alias;

            // Then check if there is model defined
            if(isset($model)){

                // If that model has a translation of this current loop, append it to the route
                $modelLanguage = $model->translations->where('language_id', '=', $translationRoute->language_id)->first();
                debug($modelLanguage);
                if(isset($modelLanguage)) $languageSwitch[$translationRoute->language_id]->route .= '/' . $modelLanguage->slug;
            }
        }

        return $languageSwitch;
    }
}