public function search($type, $limit = 500) { list($criteria, $sort) = $this->getCriteriaRatingByType($type); $exp = new CActiveDataProvider($this, array( 'criteria' => $criteria, 'pagination' => array( 'pageSize' => $limit, ), 'sort' => array( 'defaultOrder' => $sort, ), )); return $exp; } public function getCriteriaRatingByType($type) { $criteria = new CDbCriteria; if ($type == 6) { $criteria->select = '*, case when t.`rating_workday` >= 10 THEN t.rating_value*1000 else rating_value end as rating_value_test'; } else { $criteria->select = '*, rating_value as rating_value_test'; } $criteria->join = 'LEFT OUTER JOIN `admin_user` `rxUser` ON (`t`.`rx_user` = `rxUser`.`uid`)'; $criteria->compare('rx_ratingtype', $type); $criteria->compare('rating_value', $this->rating_value); $sort = 'rating_value_test DESC'; if (isset($_POST['rating_date'])) { $this->resetScope(); $criteria->addCondition("rating_date='" . $_POST['rating_date'] . "'"); if ($_POST['rating_date'] >= '1506') { $sort .= ', rating_workday DESC, rx_user ASC'; } } $criteria->addCondition('t.rx_user in (select uid from admin_user WHERE admin_user.role = "USER" and admin_user.role_status = 3)'); // исключение из рейтинга определенных пользователей $criteria->addNotInCondition('t.rx_user', array('896')); if (isset($_POST['rx_area']) and (Yii::app()->user->role == User::ROLE_ADMIN or Yii::app()->user->role == User::ROLE_MODERATOR)) { $criteria->addCondition("rx_area=" . $_POST['rx_area']); return array($criteria, $sort); } else { if (Yii::app()->user->rx_area) { $criteria->addCondition("rx_area=" . Yii::app()->user->rx_area); return array($criteria, $sort); } else { $criteria->addCondition("rx_area=1"); return array($criteria, $sort); } } }