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/zelfverkopen.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 = (object)[
            'metaTranslationRoutes' => [],
            'languageMenuRoutes'    => []
        ];

        $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->languageMenuRoutes[$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)
        {
            $languageSwitch->languageMenuRoutes[$translationRoute->language_id]->route = $translationRoute->alias;
        }

        // Check if a subModel is defined like a product or a post
        if($model)
        {
//            $languageSwitch->languageSwitchRoutes[$translationRoute->languageId] = $translationRoute->alias;
        }
        // If not then we are on a page so the metaTranslation are the same as available page translations
        else
        {
            // Loop through page translations again and look up the found translations in the language menu routes
            // so now only the defined translation of the page will be add to the meta routes
            foreach ($pageTranslationRoutes as $translationRoute)
            {
                if(isset($languageSwitch->languageMenuRoutes[$translationRoute->language_id])) $languageSwitch->metaTranslationRoutes[$translationRoute->language_id] = $languageSwitch->languageMenuRoutes[$translationRoute->language_id];
            }
        }

        return $languageSwitch;
    }
}