'Tag', 'ip' => 'Ip', 'method' => 'Method', 'ajax' => 'Ajax', 'url' => 'url', 'statusCode' => 'Status code', 'sqlCount' => 'Total queries count', ]; } /** * Returns data provider with filled models. Filter applied if needed. * @param array $params * @param array $models * @return \yii\data\ArrayDataProvider */ public function search($params, $models) { $dataProvider = new ArrayDataProvider([ 'allModels' => $models, 'sort' => [ 'attributes' => ['method', 'ip', 'tag', 'time', 'statusCode', 'sqlCount'], ], 'pagination' => [ 'pageSize' => 10, ], ]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } $filter = new Filter(); $this->addCondition($filter, 'tag', true); $this->addCondition($filter, 'ip', true); $this->addCondition($filter, 'method'); $this->addCondition($filter, 'ajax'); $this->addCondition($filter, 'url', true); $this->addCondition($filter, 'statusCode'); $this->addCondition($filter, 'sqlCount'); $dataProvider->allModels = $filter->filter($models); return $dataProvider; } /** * Checks if the code is critical: 400 or greater, 500 or greater. * @param integer $code * @return bool */ public function isCodeCritical($code) { return in_array($code, $this->criticalCodes); } /** * @param Filter $filter * @param string $attribute * @param boolean $partial */ public function addCondition($filter, $attribute, $partial = false) { $value = $this->$attribute; if (mb_strpos($value, '>') !== false) { $value = intval(str_replace('>', '', $value)); $filter->addMatch($attribute, new matches\Greater(['value' => $value])); } elseif (mb_strpos($value, '<') !== false) { $value = intval(str_replace('<', '', $value)); $filter->addMatch($attribute, new matches\Lower(['value' => $value])); } else { $filter->addMatch($attribute, new matches\Exact(['value' => $value, 'partial' => $partial])); } } }