Language.php 2.84 KB
<?php

namespace common\models;

use Yii;

/**
 * This is the model class for table "language".
 *
 * @property integer $language_id
 * @property string $language_code
 * @property string $is_default
 * @property string $language_name
 * @property string $status
 * @property string $country_code
 */
class Language extends \yii\db\ActiveRecord
{

    //Переменная, для хранения текущего объекта языка
    static $current = null;

    //Получение текущего объекта языка
    static function getCurrent()
    {
        if (self::$current === null) {
            self::$current = self::getDefaultLang();
        }

        return self::$current;
    }

    //Установка текущего объекта языка и локаль пользователя
    static function setCurrent($lang_code = null)
    {
        $language = self::getLangByUrl($lang_code);
        self::$current = ($language === null) ? self::getDefaultLang() : $language;
        // задаем
        Yii::$app->language = self::$current->language_code;
        Yii::$app->params['language_id'] = self::$current->language_id;
    }

    //Получения объекта языка по умолчанию
    static function getDefaultLang()
    {
        return Language::find()->where('is_default = :default', [':default' => 1])->one();
    }

    //Получения объекта языка по буквенному идентификатору
    static function getLangByUrl($lang_code = null)
    {
        if ($lang_code === null) {
            return null;
        } else {
            $language = Language::find()->where('language_code = :what', [':what' => $lang_code])->one();
            return $language === null ? null : $language;
        }
    }

    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'language';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['language_code', 'language_name', 'country_code'], 'required'],
            [['language_code', 'country_code'], 'string', 'max' => 4]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'language_id' => Yii::t('app/Lang', 'Language ID'),
            'language_code' => Yii::t('app/Lang', 'Lang Code'),
            'is_default' => Yii::t('app/Lang', 'Default lang'),
            'language_name' => Yii::t('app/Lang', 'Language Name'),
            'status' => Yii::t('app/Lang', 'Language Status'),
            'country_code' => Yii::t('app/Lang', 'Country Code'),
        ];
    }

    public static function getActiveLanguages()
    {
        return Language::find()->where(['>=', 'language_id', 1])->andWhere(['status' => 1])->orderBy('is_default DESC')->indexBy('language_id')->all();
    }

}