Language.php 3.12 KB
<?php

namespace thread\modules\sys\models;

use Yii;
//
use thread\app\base\models\{
    ActiveRecord
};
use thread\app\model\interfaces\LanguageModel;
use thread\modules\sys\Sys as ParentModule;

/**
 * Class Language
 *
 * @package thread\modules\sys\models
 * @author FilamentV <vortex.filament@gmail.com>
 * @copyright (c), Thread
 */
class Language extends ActiveRecord implements LanguageModel
{
    /**
     * @return string
     */
    public static function getDb()
    {
        return ParentModule::getDb();
    }

    /**
     * @return string
     */
    public static function tableName()
    {
        return '{{%system_languages}}';
    }

    /**
     * @return array
     */
    public function rules()
    {
        return [
            [['alias', 'label'], 'string', 'max' => 50],
            [['local'], 'string', 'max' => 5],
            [['img_flag'], 'string', 'max' => 225],
            [['alias', 'local', 'label'], 'required'],
            [['created_at', 'updated_at'], 'integer'],
            [['published', 'deleted', 'by_default'], 'in', 'range' => array_keys(static::statusKeyRange())],
        ];
    }

    /**
     * @return array
     */
    public function scenarios()
    {
        return [
            'published' => ['published'],
            'deleted' => ['deleted'],
            'backend' => ['published', 'deleted', 'alias', 'local', 'label', 'img_flag', 'by_default'],
        ];
    }

    /**
     * @return array
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'created_at' => Yii::t('app', 'Create time'),
            'updated_at' => Yii::t('app', 'Update time'),
            'published' => Yii::t('app', 'Published'),
            'deleted' => Yii::t('app', 'Deleted'),
            'alias' => Yii::t('app', 'Alias'),
            'local' => Yii::t('app', 'Local'),
            'label' => Yii::t('app', 'Label'),
            'img_flag' => Yii::t('app', 'Image link'),
            'by_default' => Yii::t('app', 'Default'),
        ];
    }

    /**
     * @return mixed
     */
    public function getLanguages(): array
    {
        return self::findBase()->enabled()->all();
    }

    /**
     * @return mixed
     */
    public function getCurrent(): array
    {
        return self::findBase()->andWhere(['local' => \Yii::$app->language])->asArray()->one();
    }

    /**
     * @return mixed
     */
    public function getBaseUploadPath()
    {
        return Yii::$app->getModule('sys')->getBaseUploadPath('languages', $this);
    }

    /**
     * @return mixed
     */
    public function getBaseUploadUrl()
    {
        return Yii::$app->getModule('sys')->getBaseUploadUrl('languages', $this);
    }

    /**
     * @return null|string
     */
    public function getImageLink()
    {
        $image = null;
        if (!empty($this->img_flag) && is_file($this->getBaseUploadPath() . '/' . $this->img_flag)) {
            $image = $this->getBaseUploadUrl() . '/' . $this->img_flag;
        }
        return $image;
    }

    /**
     * @param $id
     */
    public static function getById($id)
    {
        return self::find()->byID($id)->one();
    }

}