Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Multilingual/Service/Detector.php
Строк: 108
<?php

namespace ConcreteCoreMultilingualService;

use 
ConcreteCoreMultilingualPageSectionSection;
use 
ConcreteCorePagePage;
use 
Session;
use 
Cookie;
use 
Config;

defined('C5_EXECUTE') or die("Access Denied.");

class 
Detector
{
    protected static 
$enabled;

    
/**
     * Returns the preferred section based on session, cookie,
     * user object, default browser (if allowed), and finally
     * site preferences.
     * Since the user's language is not a locale but a language,
     * attempts to determine best section for the given language.
     *
     * @return Section
     */
    
public static function getPreferredSection()
    {
        
$locale false;
        
// they have a language in a certain session going already
        
if (Session::has('multilingual_default_locale')) {
            
$locale Session::get('multilingual_default_locale');
        } elseif (
Cookie::has('multilingual_default_locale')) {
            
$locale Cookie::get('multilingual_default_locale');
        }

        if (
$locale) {
            
$home Section::getByLocale($locale);
            if (
$home) {
                return 
$home;
            }
        }

        
$u = new User();
        if (
$u->isRegistered()) {
            
$userDefaultLanguage $u->getUserDefaultLanguage();
            if (
$userDefaultLanguage) {
                
$home Section::getByLocaleOrLanguage($userDefaultLanguage);
                if (
$home) {
                    return 
$home;
                }
            }
        }

        if (
Config::get('concrete.multilingual.use_browser_detected_locale')) {
            
$home false;
            
$locales PunicMisc::getBrowserLocales();
            foreach (
array_keys($locales) as $locale) {
                
$home Section::getByLocaleOrLanguage($locale);
                if (
$home) {
                    break;
                }
            }

            if (
$home) {
                return 
$home;
            }
        }

        return 
Section::getByLocale(Config::get('concrete.multilingual.default_locale'));
    }

    public static function 
setupSiteInterfaceLocalization(Page $c null)
    {
        if (
User::isLoggedIn() && Config::get('concrete.multilingual.keep_users_locale')) {
            return;
        }
        if (!
$c) {
            
$c Page::getCurrentPage();
        }
        
// don't translate dashboard pages
        
$dh Core::make('helper/concrete/dashboard');
        if (
$dh->inDashboard($c)) {
            return;
        }

        
$ms Section::getBySectionOfSite($c);
        if (!
is_object($ms)) {
            
$ms = static::getPreferredSection();
        }

        if (!
$ms) {
            return;
        }

        
$locale $ms->getLocale();

        if (
strlen($locale)) {
            
Localization::changeLocale($locale);
        }
    }

    public static function 
isEnabled()
    {
        if (!isset(
self::$enabled)) {
            
$app Core::make('app');
            if (!
$app->isInstalled()) {
                return 
false;
            }
            
$db Database::connection();
            
$count $db->GetOne('select count(cID) from MultilingualSections');
            
self::$enabled $count 0;
        }

        return 
self::$enabled;
    }
}
Онлайн: 3
Реклама