<?php
/**
 * Created by Error202
 * Date: 26.08.2018
 */

namespace core\components;

use yii\db\ActiveQuery;
use Yii;

/**
 * Translate trait.
 * Modify ActiveRecord query for translate support
 *
 * @mixin ActiveQuery
 */
trait LanguageTranslateTrait
{
    /**
     * @var string the name of the lang field of the translation table. Default to 'language'.
     */
    public $languageField = 'language';

    /**
     * Scope for querying by languages
     *
     * @param string $language
     * @param bool $abridge
     *
     * @return $this
     */
    public function localized($language = null, $abridge = true)
    {
        $language = $language ?: Yii::$app->language;
        if (!isset($this->with['translations'])) {
            $this->with([
                'translation' => function ($query) use ($language, $abridge) {
                    /** @var ActiveQuery $query */
                    $query->where([$this->languageField => $abridge ? substr($language, 0, 2) : $language]);
                }
            ]);
        }

        return $this;
    }

    /**
     * Scope for querying by all languages
     * @return $this
     */
    public function multilingual()
    {
        if (isset($this->with['translation'])) {
            unset($this->with['translation']);
        }
        $this->with('translations');

        return $this;
    }
}