[ 'class' => 'yii\behaviors\TimestampBehavior', 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => [ 'created_at', 'updated_at', ], ActiveRecord::EVENT_BEFORE_UPDATE => [ 'updated_at', ], ], ], ]; } /** * @inheritdoc */ public function rules() { return [ [ [ 'url', 'local', 'name', 'created_at', 'updated_at', ], 'required', ], [ [ 'default' ], 'boolean', ], [ [ 'created_at', 'updated_at', ], 'integer', ], [ [ 'url', 'local', 'name', ], 'string', 'max' => 255, ], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => Yii::t('core', 'Language ID'), 'url' => Yii::t('core', 'Url'), 'local' => Yii::t('core', 'Local'), 'name' => Yii::t('core', 'Name'), 'default' => Yii::t('core', 'Default'), 'created_at' => Yii::t('core', 'Date Create'), 'updated_at' => Yii::t('core', 'Date Update'), ]; } /** * Get current language * * @return null|Language */ public static function getCurrent() { if (self::$current === null) { self::$current = self::getDefaultLanguage(); } return self::$current; } /** * Set current language by Url param * * @param null|string $url Language url param * * @return bool */ public static function setCurrent($url = null) { $language = self::getLanguageByUrl($url); self::$current = ( $language === null ) ? self::getDefaultLanguage() : $language; Yii::$app->language = self::getCurrent()->local; if ($language === null) { return false; } else { return true; } } /** * Get default language * * @return null|Language */ public static function getDefaultLanguage() { if (\Yii::$app->request->hasMethod('getPreferredLanguage')) { $preferred = \Yii::$app->request->getPreferredLanguage( self::find() ->select([ 'local' ]) ->where( [ 'status' => true, ] ) ->asArray() ->column() ); } if (!empty($preferred)) { return self::getLanguageByUrl(strtolower(substr($preferred, -2, 2))); } else { /** * @var null|Language $language */ $language = self::find() ->where([ 'default' => true ]) ->one(); return $language; } } /** * Get language by Url param * * @param null|string $url Language url param * * @return null|Language */ public static function getLanguageByUrl($url = null) { if ($url === null) { return null; } else { /** * @var null|Language $language */ $language = self::find() ->where( [ 'url' => $url, 'status' => true, ] ) ->one(); if ($language === null) { return null; } else { return $language; } } } /** * Get active Languages and cache them * * @return array|\artbox\core\models\Language[]|null|\yii\db\ActiveRecord[] */ public static function getActive() { if (empty(self::$active)) { self::$active = self::find() ->where([ 'status' => true ]) ->indexBy('id') ->all(); } return self::$active; } }