PortfolioUserSearch.php 2.75 KB
<?php

    namespace common\models;

    use Yii;
    use yii\data\ActiveDataProvider;

    class PortfolioUserSearch extends PortfolioUser
    {

        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [
                    [
                        'project',
                        'position',
                    ],
                    'safe',
                ],
                [
                    [
                        'time_from',
                        'time_to',
                    ],
                    'integer',
                    'min' => 0,
                ],
                [
                    [
                        'time_to',
                    ],
                    'compare',
                    'compareAttribute' => 'time_from',
                    'operator' => '>=',
                ],
                [
                    [
                        'status',
                    ],
                    'integer',
                    'min' => 1,
                    'max' => 2,
                ],
            ];
        }

        public function search($params)
        {
            $query = PortfolioUser::find()
                                  ->where([ 'portfolio_user.user_id' => \Yii::$app->user->id ]);

            $dataProvider = new ActiveDataProvider([
                'query' => $query,
            ]);

            $this->load($params);

            if(!$this->validate()) {
                // uncomment the following line if you do not want to return any records when validation fails
                // $query->where('0=1');
                return $dataProvider;
            }

            if(!empty( $this->time_from ) && !empty( $this->time_to )) {
                $query->andWhere([
                    'between',
                    'time',
                    $this->time_from,
                    $this->time_to,
                ]);
            } elseif(!empty( $this->time_from )) {
                $query->andWhere([
                    '>=',
                    'time',
                    $this->time_from,
                ]);
            } elseif(!empty( $this->time_to )) {
                $query->andWhere([
                    '<=',
                    'time',
                    $this->time_to,
                ]);
            }

            $query->andFilterWhere(['status' => $this->status]);

            $query->andFilterWhere([
                'like',
                'LOWER(position)',
                mb_strtolower($this->position),
            ]);

            $query->andFilterWhere([
                'like',
                'LOWER(portfolio.name)',
                mb_strtolower($this->project),
            ]);

            return $dataProvider;
        }
    }