Article.php 2.91 KB
<?php

namespace frontend\modules\news\models;

use yii\helpers\Url;
//
use thread\app\model\interfaces\BaseFrontModel;
use thread\modules\seo\interfaces\{
    SeoFrontModel
};

/**
 * Class Article
 *
 * @package frontend\modules\news\models
 * @author FilamentV <vortex.filament@gmail.com>
 * @copyright (c), Thread
 */
class Article extends \thread\modules\news\models\Article implements BaseFrontModel, SeoFrontModel
{

    /**
     *
     * @return array
     */
    public function behaviors()
    {
        return [];
    }

    /**
     *
     * @return array
     */
    public function scenarios()
    {
        return [];
    }

    /**
     *
     * @return array
     */
    public function attributeLabels()
    {
        return [];
    }

    /**
     *
     * @return array
     */
    public function rules()
    {
        return [];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getGroup()
    {
        return $this->hasOne(Group::class, ['id' => 'group_id']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getLang()
    {
        return $this->hasOne(ArticleLang::class, ['rid' => 'id']);
    }

    /**
     * @return mixed
     */
    public static function find()
    {
        //TODAY
        $today = new \DateTime('today');
        $today->getTimestamp();

        return parent::find()->enabled()->innerJoinWith(["lang"])->andWhere(['<=', 'time_start_of_published', $today->getTimestamp()])->orderBy([self::tableName() . '.published_time' => SORT_DESC]);
    }

    /**
     * @return mixed
     */
    public static function findBase()
    {
        return self::find();
    }

    /**
     * @return mixed
     */
    public static function findSeo()
    {
        return self::find();
    }

    /**
     * @return mixed
     */
    public static function findSeoNews()
    {
        return self::find();
    }

    /**
     * @return mixed
     */
    public static function findSeoImage()
    {
        return self::find();
    }

    /**
     * @param $id
     * @return mixed
     */
    public static function findById($id)
    {
        return self::find()->byId($id);
    }

    /**
     * @param $alias
     * @return mixed
     */
    public static function findByAlias($alias)
    {
        return self::find()->byAlias($alias);
    }

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

    /**
     * @param $alias
     * @return mixed
     */
    public static function getByAlias($alias)
    {
        return self::findByAlias($alias)->one();
    }

    /**
     * @return mixed
     */
    public static function getAllWithLabel()
    {
        return self::find()->all();
    }

    /**
     *
     * @return string
     */
    public function getUrl($scheme = false)
    {
        return Url::toRoute(['/news/article/index', 'alias' => $this->alias], $scheme);
    }

}