CompanyController.php 8.94 KB
<?php
namespace frontend\controllers;


use common\models\Blog;
use common\models\Fields;
use common\models\Gallery;
use common\models\Portfolio;
use common\models\PortfolioSpecialization;
use common\models\Team;
use Yii;
use yii\data\ActiveDataProvider;
use yii\data\ArrayDataProvider;
use yii\data\Pagination;
use yii\helpers\ArrayHelper;
use yii\web\BadRequestHttpException;
use yii\web\Controller;
use common\models\User;
/**
 * Site controller
 */
class CompanyController extends Controller
{
    public $layout = 'company';

    public $defaultAction = 'common';

    /**
     * @inheritdoc
     */
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }

    public function actionIndex()
    {
        $this->redirect('site/index');
    }

    public function actionCommon($company_id)
    {
        $company = User::findOne($company_id);

        $educations = Fields::getData($company->id,$company->className(),'education');
        $phones = Fields::getData($company->id,$company->className(),'phone');
        $sites = Fields::getData($company->id,$company->className(),'site');
        $soft = implode(', ',ArrayHelper::getColumn(Fields::getData($company->id,$company->className(),'soft'), 'soft'));

        return $this->render('common',[
            'company' => $company,
            'educations' => $educations,
            'phones' => $phones,
            'sites' => $sites,
            'soft' => $soft
        ]);
    }

    public function actionPortfolio($company_id)
    {
        $company = User::findOne($company_id);

        if(!$company instanceof User){
            throw new BadRequestHttpException('Пользователь не найден');
        }
        $projects = ArrayHelper::getColumn($company->portfolios,'portfolio_id');


        $filters = PortfolioSpecialization::find()->select(["specialization_id","COUNT('specialization_id') AS count"])
            ->where(["portfolio_id"=>$projects ])->groupBy("specialization_id")->all();

        $portfolio = new ArrayDataProvider([
            'allModels' => $company->getPortfolios()->orderBy('portfolio_id')->all(),
            'pagination' => [
                'pageSize' => 9,
            ],
        ]);

        return $this->render('portfolio',[
            'company' => $company,
            'filters' => $filters,
            'portfolio' => $portfolio,
            'count' => count($company->portfolios)
        ]);
    }

    public function actionPortfolioFilter($performer_id, $filter){
        $company = User::findOne($performer_id);

        if(!$company instanceof User){
            throw new BadRequestHttpException('Пользователь не найден');
        }
        $portfolios = ArrayHelper::getColumn($company->portfolios,'portfolio_id');


        $filters = PortfolioSpecialization::find()->select(["specialization_id","COUNT('specialization_id') AS count"])
            ->where(["portfolio_id"=>$portfolios ])->groupBy("specialization_id")->all();


        $filter_result = PortfolioSpecialization::find()
            ->where(['specialization_id'=>$filter,
                'portfolio_id'=>$portfolios
            ])->all();


        $portfolio = new ArrayDataProvider([
            'allModels' => Portfolio::find()->where(['portfolio_id'=>ArrayHelper::getColumn($filter_result,'portfolio_id')])->all(),
            'pagination' => [
                'pageSize' => 9,
            ],
        ]);

        return $this->render('portfolio',[
            'company' => $company,
            'filters' => $filters,
            'portfolio' => $portfolio,
            'filter_id' => $filter,
            'count' => count($company->portfolios)
        ]);
    }

    public function actionPortfolioView($company_id , $portfolio_id)
    {
        $user = User::findOne($company_id);
        $portfolio = $user->getPortfolios()
            ->where([ 'portfolio_id' => $portfolio_id ])
            ->one();
        $portfolio->updateCounters([ 'view_count' => 1 ]);
        return $this->render('portfolio-view', [
            'user'      => $user,
            'portfolio' => $portfolio,
        ]);
    }

    public function actionTeam($company_id)
    {
        $company = User::findOne($company_id);

        if(!$company instanceof User){
            throw new BadRequestHttpException('Пользователь не найден');
        }


        $query = Team::find()->where(['user_id'=>$company_id]);

        $countQuery = clone $query;

        $pagination = new Pagination(['totalCount' => $countQuery->count(),
            'pageSize' => 9,
        ]);

        $team = $query->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

        $team = new ArrayDataProvider([
            'allModels' => $team,
        ]);


        return $this->render('team',[
            'company' => $company,
            'team' => $team,
            'pagination' => $pagination
        ]);
    }

    public function actionBlogList($company_id)
    {
        $company = User::findOne($company_id);

        if(!$company instanceof User){
            throw new BadRequestHttpException('Пользователь не найден');
        }


        $query = Blog::find(['user_id'=>$company_id]);

        $countQuery = clone $query;

        $pagination = new Pagination(['totalCount' => $countQuery->count(),
            'pageSize' => 5,
        ]);

        $article = $query->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

        $blog = new ArrayDataProvider([
            'allModels' => $article,
        ]);


        return $this->render('blog-list',[
            'company' => $company,
            'blog' => $blog,
            'pagination' => $pagination
        ]);
    }


    public function actionBlogView($company_id, $link)
    {
        $company = User::findOne($company_id);

        if(!$company instanceof User){
            throw new BadRequestHttpException('Пользователь не найден');
        }


        $article = Blog::findOne(['link'=>$link,'user_id'=>$company_id]);
        $article->view_count ++;
        $article->save();


        return $this->render('blog-view',[
            'company' => $company,
            'article' =>$article,

        ]);
    }

    public function actionReview($company_id)
    {
        $company = User::findOne($company_id);

        return $this->render('review',[
            'company' => $company
        ]);
    }

    public function actionVacancyList($company_id)
    {

        $company = User::findOne($company_id);

        if(!$company instanceof User){
            throw new BadRequestHttpException('Пользователь не найден');
        }


        $query = $company->getVacancies();

        $countQuery = clone $query;

        $pagination = new Pagination(['totalCount' => $countQuery->count(),
            'pageSize' => 5,
        ]);

        $vacancy = $query->offset($pagination->offset)
            ->limit($pagination->limit);


        $provider = new ActiveDataProvider([
            'query' => $vacancy,
            'pagination' => false,
            'sort' => [
                'defaultOrder' => [
                    'date_add' => SORT_DESC,
                    'name' => SORT_ASC,
                ]
            ],
        ]);



        return $this->render('vacancy-list',[
            'company' => $company,
            'provider' => $provider,
            'pagination' => $pagination
        ]);

    }

    public function actionVacancyView($company_id, $link)
    {
        $company = User::findOne($company_id);
        $vacancy = $company->getVacancies()->where(['link' => $link])->with(['employments'])->one();

        return $this->render('vacancy-view',[
            'company' => $company,
            'vacancy' => $vacancy,
        ]);
    }


    public function actionGallery($company_id)
    {
        $company = User::findOne($company_id);

        if(!$company instanceof User){
            throw new BadRequestHttpException('Пользователь не найден');
        }


        $query = Gallery::find()->where(['user_id'=>$company_id]);

        $countQuery = clone $query;

        $pagination = new Pagination(['totalCount' => $countQuery->count(),
            'pageSize' => 5,
        ]);

        $gallery = $query->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();

        $gallery = new ArrayDataProvider([
            'allModels' => $gallery,
        ]);

        $videos = Fields::getData($company->id,Gallery::className(),'youtube');

        $this->layout = 'gallery-company';

        return $this->render('gallery',[
            'company' => $company,
            'gallery' =>$gallery,
            'pagination' => $pagination,
            'videos' => $videos
        ]);
    }
}