HEX
Server: Apache
System: Linux srv-plesk28.ps.kz 5.14.0-284.18.1.el9_2.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jun 29 17:06:27 EDT 2023 x86_64
User: greencl1 (10085)
PHP: 8.1.33
Disabled: apache_setenv,dl,eval,exec,openlog,passthru,pcntl_exec,pcntl_fork,popen,posix_getpwuid,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,socket_create,socket_create_listen,socket_create_pair,syslog,system,socket_listen,stream_socket_server
Upload Files
File: /var/www/vhosts/greenclinic.kz/test.greenclinic.kz/plugins/rainlab/translate/classes/Translator.php
<?php namespace RainLab\Translate\Classes;

use App;
use Schema;
use Session;
use Request;
use Config;
use RainLab\Translate\Models\Locale;

/**
 * Translate class
 *
 * @package rainlab\translate
 * @author Alexey Bobkov, Samuel Georges
 */
class Translator
{
    use \October\Rain\Support\Traits\Singleton;

    const SESSION_LOCALE = 'rainlab.translate.locale';

    const SESSION_CONFIGURED = 'rainlab.translate.configured';

    /**
     * @var string The locale to use on the front end.
     */
    protected $activeLocale;

    /**
     * @var string The default locale if no active is set.
     */
    protected $defaultLocale;

    /**
     * @var boolean Determine if translate plugin is configured and ready to be used.
     */
    protected $isConfigured;

    /**
     * Initialize the singleton
     * @return void
     */
    public function init()
    {
        $this->defaultLocale = $this->isConfigured() ? array_get(Locale::getDefault(), 'code', 'en') : 'en';
        $this->activeLocale = $this->defaultLocale;
    }

    /**
     * Changes the locale in the application and optionally stores it in the session.
     * @param   string  $locale   Locale to use
     * @param   boolean $remember Set to false to not store in the session.
     * @return  boolean Returns true if the locale exists and is set.
     */
    public function setLocale($locale, $remember = true)
    {
        if (!Locale::isValid($locale)) {
            return false;
        }

        App::setLocale($locale);
        $this->activeLocale = $locale;

        if ($remember) {
            $this->setSessionLocale($locale);
        }

        return true;
    }

    /**
     * Returns the active locale set by this instance.
     * @param  boolean $fromSession Look in the session.
     * @return string
     */
    public function getLocale($fromSession = false)
    {
        if ($fromSession && ($locale = $this->getSessionLocale())) {
            return $locale;
        }

        return $this->activeLocale;
    }

    /**
     * Returns the default locale as set by the application.
     * @return string
     */
    public function getDefaultLocale()
    {
        return $this->defaultLocale;
    }

    /**
     * Check if this plugin is installed and the database is available,
     * stores the result in the session for efficiency.
     * @return boolean
     */
    public function isConfigured()
    {
        if ($this->isConfigured !== null) {
            return $this->isConfigured;
        }

        if (Session::has(self::SESSION_CONFIGURED)) {
            $result = true;
        }
        elseif (App::hasDatabase() && Schema::hasTable('rainlab_translate_locales')) {
            Session::put(self::SESSION_CONFIGURED, true);
            $result = true;
        }
        else {
            $result = false;
        }

        return $this->isConfigured = $result;
    }

    //
    // Request handling
    //

    /**
     * Sets the locale based on the first URI segment.
     * @return bool
     */
    public function loadLocaleFromRequest()
    {
        $locale = Request::segment(1);

        if (!Locale::isValid($locale)) {
            return false;
        }

        $this->setLocale($locale);
        return true;
    }

    /**
     * Returns the current path prefixed with language code.
     *
     * @param string $locale optional language code, default to the system default language
     * @return string
     */
    public function getCurrentPathInLocale($locale = null)
    {
        return $this->getPathInLocale(Request::path(), $locale);
    }

    /**
     * Returns the path prefixed with language code.
     *
     * @param string $path Path to rewrite, already translate, with or without locale prefixed
     * @param string $locale optional language code, default to the system default language
     * @param boolean $prefixDefaultLocale should we prefix the path when the locale = default locale
     * @return string
     */
    public function getPathInLocale($path, $locale = null, $prefixDefaultLocale = null)
    {
        $prefixDefaultLocale = (is_null($prefixDefaultLocale))
            ? Config::get('rainlab.translate::prefixDefaultLocale')
            : $prefixDefaultLocale;

        $segments = explode('/', $path);

        $segments = array_values(array_filter($segments, function ($v) {
            return $v != '';
        }));

        if (is_null($locale) || !Locale::isValid($locale)) {
            $locale = $this->defaultLocale;
        }

        if (count($segments) == 0 || Locale::isValid($segments[0])) {
            $segments[0] = $locale;
        } else {
            array_unshift($segments, $locale);
        }

        // If we don't want te default locale to be prefixed
        // AND the first segment equals the defaultlocale
        if (
            !$prefixDefaultLocale
            && isset($segments[0])
            && $segments[0] == $this->defaultLocale
        ) {
            // remove the first element (which is the default locale)
            array_shift($segments);
        };

        return implode('/', $segments);
    }

    //
    // Session handling
    //

    /**
     * Looks at the session storage to find a locale.
     * @return bool
     */
    public function loadLocaleFromSession()
    {
        $locale = $this->getSessionLocale();

        if (!$locale) {
            return false;
        }

        $this->setLocale($locale);
        return true;
    }

    protected function getSessionLocale()
    {
        if (!Session::has(self::SESSION_LOCALE)) {
            return null;
        }

        return Session::get(self::SESSION_LOCALE);
    }

    protected function setSessionLocale($locale)
    {
        Session::put(self::SESSION_LOCALE, $locale);
    }
}