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/rentman2019.komma.pro/app/Komma/Languages/LanguageService.php
<?php

namespace App\Komma\Languages;

use App\Komma\Base\Service;
use App\Komma\Kms\Core\AbstractTranslatableModel;
use App\Komma\Languages\Models\Language;
use App\Komma\Pages\Models\Page;
use App\Komma\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
 */
class LanguageService extends Service
{
    /**
     * @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 ($this->site->languages as $language) {
            $alias = '';
            if ($language->id == $this->site->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;
    }
}