107 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
 | 
						|
 | 
						|
namespace frontend\modules\api\models;
 | 
						|
 | 
						|
 | 
						|
use backend\modules\card\models\UserCard;
 | 
						|
use common\classes\Debug;
 | 
						|
use yii\base\Model;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class ProfileSearchForm
 | 
						|
 * @property integer $limit
 | 
						|
 * @property integer $offset
 | 
						|
 * @property integer $id
 | 
						|
 * @package frontend\modules\api\models
 | 
						|
 */
 | 
						|
class ProfileSearchForm extends Model
 | 
						|
{
 | 
						|
    public $limit = 10;
 | 
						|
    public $offset = 0;
 | 
						|
    public $skills;
 | 
						|
 | 
						|
    public $position_id;
 | 
						|
    public $id;
 | 
						|
 | 
						|
    public function rules()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            [['id', 'limit', 'offset', 'position_id'], 'safe'],
 | 
						|
            [['skills'], 'checkIsArray'],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    public function exclude($arr)
 | 
						|
    {
 | 
						|
        $ex = ['fio', 'passport', 'resume', 'link_vk', 'link_telegram', 'email', 'salary'];
 | 
						|
        foreach ($ex as $remove) {
 | 
						|
            if (isset($arr[$remove])) {
 | 
						|
                unset($arr[$remove]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return $arr;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public function checkIsArray()
 | 
						|
    {
 | 
						|
        if (!is_array($this->_task)) {
 | 
						|
            $this->addError('_task', 'X is not array!');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function byId()
 | 
						|
    {
 | 
						|
        if ($this->id) {
 | 
						|
            return $this->exclude(UserCard::find()
 | 
						|
                ->where(['id' => $this->id])
 | 
						|
                ->with(['skillValues'])
 | 
						|
                ->with(['achievements'])
 | 
						|
                ->asArray()
 | 
						|
                ->one());
 | 
						|
        }
 | 
						|
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    public function byParams()
 | 
						|
    {
 | 
						|
        $model = UserCard::find();
 | 
						|
 | 
						|
 | 
						|
        if ($this->skills) {
 | 
						|
            $model->joinWith(['skillValues']);
 | 
						|
            $this->skills = explode(',', $this->skills);
 | 
						|
            $model->where(['card_skill.skill_id' => $this->skills]);
 | 
						|
            $model->having('COUNT(DISTINCT skill_id) = ' . count($this->skills));
 | 
						|
        } else {
 | 
						|
            $model->joinWith('skillValues');
 | 
						|
        }
 | 
						|
 | 
						|
        $model->joinWith('achievements');
 | 
						|
 | 
						|
        $model->andFilterWhere(['position_id' => $this->position_id]);
 | 
						|
 | 
						|
        $model->andWhere(['status' => [4, 12]]);
 | 
						|
        $model->andWhere(['deleted_at' => null]);
 | 
						|
 | 
						|
        $model->groupBy('card_skill.card_id');
 | 
						|
 | 
						|
        $res = $model->limit($this->limit)
 | 
						|
            ->offset($this->offset)->orderBy('updated_at DESC')->asArray()->all();
 | 
						|
 | 
						|
        if(!$res){
 | 
						|
            return [];
 | 
						|
        }
 | 
						|
 | 
						|
        $resArr = [];
 | 
						|
        foreach ($res as $re){
 | 
						|
            $resArr[] = $this->exclude($re);
 | 
						|
        }
 | 
						|
 | 
						|
        return $resArr;
 | 
						|
    }
 | 
						|
 | 
						|
} |