SearchController.php 5.8 KB
<?php
    namespace frontend\controllers;

    use common\models\Currency;
    use common\models\CustomerSearch;
    use common\models\Payment;
    use common\models\Specialization;
    use common\models\TenderSearch;
    use frontend\models\SearchPerformerForm;
    use frontend\models\SearchVacancyForm;
    use Yii;
    use frontend\models\Options;
    use frontend\models\OptionValues;
    use yii\base\InvalidParamException;
    use yii\data\ActiveDataProvider;
    use yii\data\Pagination;
    use yii\db\ActiveQuery;
    use yii\web\Controller;
    use frontend\models\OptionsToValues;
    use common\models\Page;
    use frontend\models\Option;

    /**
     * Site controller
     */
    class SearchController extends Controller
    {

        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 actionCommon($action)
        {
            $query = \Yii::$app->request->get('query');
            $actions = [
                1 => 'project',
                2 => 'performer',
                3 => 'customer',
            ];
            if(!array_key_exists($action, $actions)) {
                return $this->redirect([
                    '/',
                    'query' => $query,
                ]);
            } else {
                switch($action) {
                    case 1:
                        return $this->redirect([
                            'search/' . $actions[ $action ],
                            'TenderSearch[info]' => $query,
                        ]);
                        break;
                    case 2:
                        return $this->redirect([
                            'search/' . $actions[ $action ],
                            'SearchPerformerForm[search]' => $query,
                        ]);
                        break;
                    case 3:
                        return $this->redirect([
                            'search/' . $actions[ $action ],
                            'CustomerSearch[info]' => $query,
                        ]);
                        break;
                }
            }
            return false;
        }

        public function actionProject()
        {
            $model = new TenderSearch();
            $dataProvider = $model->search(Yii::$app->request->queryParams);
            $dataProvider->query->andWhere([ 'hidden' => 0 ]);
            $dataProvider->setPagination([
                'pageSize' => 10,
            ]);
            $specializations = Specialization::getSorted()->all();
            $currencies = Currency::getCurrencyDropdown();
            $payments = Payment::find()
                               ->select([
                                   'name',
                                   'payment_id',
                               ])
                               ->asArray()
                               ->indexBy('payment_id')
                               ->column();
            return $this->render('project', [
                'model'          => $model,
                'dataProvider'   => $dataProvider,
                'specializations' => $specializations,
                'currencies'     => $currencies,
                'payments'       => $payments,
            ]);
        }

        public function actionCustomer()
        {
            $model = new CustomerSearch();
            $dataProvider = $model->search(Yii::$app->request->queryParams);
            $dataProvider->setPagination([
                'pageSize' => 5,
            ]);
            $model->load(Yii::$app->request->queryParams);
            return $this->render('customer', [
                'model'        => $model,
                'dataProvider' => $dataProvider,
            ]);
        }

        public function actionPerformer()
        {
            $specialization = Specialization::specializationsList();

            $specializations = Specialization::getSorted()->all();

            $searchModel = new SearchPerformerForm();

            return $this->render('performer', [
                'dataProvider'    => $searchModel->search(Yii::$app->request->queryParams),
                'specialization'  => $specialization,
                'specializations' => $specializations,
                'model'           => $searchModel,
            ]);
        }

        public function actionVacancy()
        {
            $searchModel = new SearchVacancyForm();

            $specializations = Specialization::getSorted()->all();

            $query = $searchModel->search(Yii::$app->request->queryParams);

            $countQuery = clone $query;

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

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

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

            return $this->render('vacancy', [
                'dataProvider'   => $dataProvider,
                'specializations' => $specializations,
                'model'          => $searchModel,
                'pagination'     => $pagination,
            ]);

        }

    }