Commit 90930c7c1505ca05cd82c57f114334b25dba69d6

Authored by Yarik
1 parent 0eb4e7fc

test

frontend/controllers/CompanyController.php
@@ -30,6 +30,18 @@ @@ -30,6 +30,18 @@
30 30
31 public $defaultAction = 'common'; 31 public $defaultAction = 'common';
32 32
  33 + public function afterAction($action, $result)
  34 + {
  35 + if(!empty( $action->controller->actionParams[ 'company_id' ] )) {
  36 + $company_id = $action->controller->actionParams[ 'company_id' ];
  37 + $user = User::findOne($company_id);
  38 + if(!empty( $user->userInfo )) {
  39 + $user->userInfo->updateCounters([ 'view_count' => 1 ]);
  40 + }
  41 + }
  42 + return parent::afterAction($action, $result);
  43 + }
  44 +
33 /** 45 /**
34 * @inheritdoc 46 * @inheritdoc
35 */ 47 */
frontend/models/SearchPerformerForm.php
1 <?php 1 <?php
2 2
3 -namespace frontend\models;  
4 -  
5 -use common\models\Portfolio;  
6 -use common\models\User;  
7 -use Yii;  
8 -use yii\base\Model;  
9 -use yii\data\ActiveDataProvider;  
10 -use yii\helpers\ArrayHelper;  
11 -  
12 -/**  
13 - * ContactForm is the model behind the contact form.  
14 - */  
15 -class SearchPerformerForm extends Model  
16 -{  
17 - public $city;  
18 - public $specialization;  
19 - public $working_conditions;  
20 - public $type;  
21 - public $additional_parameters;  
22 - public $rating;  
23 - public $online;  
24 - public $search; 3 + namespace frontend\models;
25 4
  5 + use common\models\Portfolio;
  6 + use common\models\User;
  7 + use Yii;
  8 + use yii\base\Model;
  9 + use yii\data\ActiveDataProvider;
  10 + use yii\helpers\ArrayHelper;
26 11
27 /** 12 /**
28 - * @inheritdoc 13 + * ContactForm is the model behind the contact form.
29 */ 14 */
30 - public function rules() 15 + class SearchPerformerForm extends Model
31 { 16 {
32 - return [  
33 - [['specialization','city', 'type','additional_parameters','working_conditions', 'rating','online','search'], 'safe'],  
34 - [  
35 - ['rating'],  
36 - 'default',  
37 - 'value' => 0,  
38 - ]  
39 -  
40 - ];  
41 - }  
42 17
43 - /**  
44 - * @inheritdoc  
45 - */  
46 - public function attributeLabels()  
47 - {  
48 - return [  
49 - 'city' => 'ะ“ะพั€ะพะด',  
50 - 'specialization' => 'ะกะฟะตั†ะธะฐะปะธะทะฐั†ะธั',  
51 - 'type' => 'ะขะธะฟ ะธัะฟะพะปะฝะธั‚ะตะปั',  
52 - 'additional_parameters' => 'ะ”ะพะฟะพะปะฝะธั‚ะตะปัŒะฝะพ',  
53 - 'working_conditions' => 'ะฃัะปะพะฒะธั ั€ะฐะฑะพั‚ั‹',  
54 - 'rating' => 'ะ ะตะนั‚ะธะฝะณ',  
55 - 'online' => 'ะกั‚ะฐั‚ัƒั',  
56 - 'search' => 'ะะฐะนั‚ะธ'  
57 - ];  
58 - } 18 + public $city;
59 19
60 - /**  
61 - * Creates data provider instance with search query applied  
62 - *  
63 - * @param array $params  
64 - *  
65 - * @return ActiveDataProvider  
66 - */  
67 - public function search($params)  
68 - { 20 + public $specialization;
69 21
70 - $this->load($params);  
71 -  
72 - $query = User::find()  
73 - ->select(['user.*', 'company_info.*','user_info.*'])  
74 - ->distinct(true)  
75 - ->joinWith(['userInfo','specializations','companyInfo'])  
76 - ->where(['user_info.is_freelancer' => 1]);  
77 -  
78 -  
79 - $dataProvider = new ActiveDataProvider([  
80 - 'query' => $query  
81 - ]);  
82 -  
83 - $dataProvider->setSort([  
84 - 'defaultOrder' => [  
85 - 'name' => SORT_ASC,  
86 - ],  
87 - 'attributes' => [  
88 - 'name' => [  
89 - 'asc' => [  
90 - 'company_info.name' => SORT_ASC,  
91 - 'firstname' => SORT_ASC,  
92 - 'lastname' => SORT_ASC,  
93 - ],  
94 - 'desc' => [  
95 - 'company_info.name' => SORT_DESC,  
96 - 'firstname' => SORT_DESC,  
97 - 'lastname' => SORT_DESC,  
98 - ],  
99 - 'default' => SORT_ASC,  
100 - 'label' => 'ะะฐะทะฒะฐะฝะธะต',  
101 - ],  
102 - 'visit' => [  
103 - 'asc' => [  
104 - 'user_info.date_visit' => SORT_ASC,  
105 - ],  
106 - 'desc' => [  
107 - 'user_info.date_visit' => SORT_DESC, 22 + public $working_conditions;
  23 +
  24 + public $type;
  25 +
  26 + public $additional_parameters;
  27 +
  28 + public $rating;
  29 +
  30 + public $online;
  31 +
  32 + public $search;
  33 +
  34 + /**
  35 + * @inheritdoc
  36 + */
  37 + public function rules()
  38 + {
  39 + return [
  40 + [
  41 + [
  42 + 'specialization',
  43 + 'city',
  44 + 'type',
  45 + 'additional_parameters',
  46 + 'working_conditions',
  47 + 'rating',
  48 + 'online',
  49 + 'search',
108 ], 50 ],
109 - 'default' => SORT_DESC,  
110 - 'label' => 'ะŸะพัะปะตะดะฝะธะน ะฒะธะทะธั‚', 51 + 'safe',
111 ], 52 ],
112 - 'city' => [  
113 - 'asc' => [  
114 - 'user_info.city' => SORT_ASC,  
115 - ],  
116 - 'desc' => [  
117 - 'user_info.city' => SORT_DESC,  
118 - ],  
119 - 'default' => SORT_ASC,  
120 - 'label' => 'ะ“ะพั€ะพะด', 53 + [
  54 + [ 'rating' ],
  55 + 'default',
  56 + 'value' => 0,
121 ], 57 ],
122 - ],  
123 - ]);  
124 58
  59 + ];
  60 + }
125 61
126 - if (!$this->validate()) { 62 + /**
  63 + * @inheritdoc
  64 + */
  65 + public function attributeLabels()
  66 + {
  67 + return [
  68 + 'city' => 'ะ“ะพั€ะพะด',
  69 + 'specialization' => 'ะกะฟะตั†ะธะฐะปะธะทะฐั†ะธั',
  70 + 'type' => 'ะขะธะฟ ะธัะฟะพะปะฝะธั‚ะตะปั',
  71 + 'additional_parameters' => 'ะ”ะพะฟะพะปะฝะธั‚ะตะปัŒะฝะพ',
  72 + 'working_conditions' => 'ะฃัะปะพะฒะธั ั€ะฐะฑะพั‚ั‹',
  73 + 'rating' => 'ะ ะตะนั‚ะธะฝะณ',
  74 + 'online' => 'ะกั‚ะฐั‚ัƒั',
  75 + 'search' => 'ะะฐะนั‚ะธ',
  76 + ];
  77 + }
127 78
  79 + /**
  80 + * Creates data provider instance with search query applied
  81 + *
  82 + * @param array $params
  83 + *
  84 + * @return ActiveDataProvider
  85 + */
  86 + public function search($params)
  87 + {
  88 +
  89 + $this->load($params);
  90 +
  91 + $query = User::find()
  92 + ->select([
  93 + 'user.*',
  94 + 'company_info.*',
  95 + 'user_info.*',
  96 + ])
  97 + ->distinct(true)
  98 + ->joinWith([
  99 + 'userInfo',
  100 + 'specializations',
  101 + 'companyInfo',
  102 + ])
  103 + ->where([ 'user_info.is_freelancer' => 1 ]);
  104 +
  105 + $dataProvider = new ActiveDataProvider([
  106 + 'query' => $query,
  107 + ]);
128 108
129 - // uncomment the following line if you do not want to any records when validation fails  
130 - // $query->where('0=1');  
131 - return $dataProvider;  
132 - } 109 + $dataProvider->setSort([
  110 + 'defaultOrder' => [
  111 + 'name' => SORT_ASC,
  112 + ],
  113 + 'attributes' => [
  114 + 'name' => [
  115 + 'asc' => [
  116 + 'company_info.name' => SORT_ASC,
  117 + 'firstname' => SORT_ASC,
  118 + 'lastname' => SORT_ASC,
  119 + ],
  120 + 'desc' => [
  121 + 'company_info.name' => SORT_DESC,
  122 + 'firstname' => SORT_DESC,
  123 + 'lastname' => SORT_DESC,
  124 + ],
  125 + 'default' => SORT_ASC,
  126 + 'label' => 'ะะฐะทะฒะฐะฝะธะต',
  127 + ],
  128 + 'visit' => [
  129 + 'asc' => [
  130 + 'user_info.date_visit' => SORT_ASC,
  131 + ],
  132 + 'desc' => [
  133 + 'user_info.date_visit' => SORT_DESC,
  134 + ],
  135 + 'default' => SORT_DESC,
  136 + 'label' => 'ะŸะพัะปะตะดะฝะธะน ะฒะธะทะธั‚',
  137 + ],
  138 + 'city' => [
  139 + 'asc' => [
  140 + 'user_info.city' => SORT_ASC,
  141 + ],
  142 + 'desc' => [
  143 + 'user_info.city' => SORT_DESC,
  144 + ],
  145 + 'default' => SORT_ASC,
  146 + 'label' => 'ะ“ะพั€ะพะด',
  147 + ],
  148 + ],
  149 + ]);
133 150
134 - $query->andFilterWhere([  
135 - 'user_info.city' => $this->city,  
136 - 'specialization.specialization_id' => $this->specialization,  
137 - 'user.type' => $this->type, 151 + if(!$this->validate()) {
138 152
139 - ]); 153 + // uncomment the following line if you do not want to any records when validation fails
  154 + // $query->where('0=1');
  155 + return $dataProvider;
  156 + }
140 157
141 - $query->andFilterWhere([  
142 - '>=', 'user_info.rating', $this->rating,  
143 - ]); 158 + $query2 = User::find()
  159 + ->select([ 'users.id' ])
  160 + ->alias('users')
  161 + ->distinct()
  162 + ->innerJoin([ 'spec' => 'user_specialization' ], 'spec.user_id = users.id')
  163 + ->asArray()
  164 + ->column();
  165 + if(empty($query2)) {
  166 + $query->where('0=1');
  167 + return $dataProvider;
  168 + }
144 169
145 - if($this->online == 1) {  
146 - $query->andWhere([  
147 - '>=',  
148 - 'user_info.date_visit',  
149 - date('Y-m-d H:i:s.u', time() - 1800), 170 + $query->andFilterWhere([
  171 + 'user_info.city' => $this->city,
  172 + 'specialization.specialization_id' => $this->specialization,
  173 + 'user.type' => $this->type,
  174 + 'user.id' => $query2,
150 ]); 175 ]);
151 - }  
152 -  
153 176
154 - if(!empty($this->working_conditions)){  
155 - foreach($this->working_conditions as $working_conditions){  
156 - if($working_conditions=='guarantee'){  
157 - $query->andWhere([  
158 - '<>',  
159 - 'user_info.guarantee',  
160 - ''  
161 - ]);  
162 - }else if($working_conditions=='prepayment'){  
163 - $query->andWhere([  
164 - 'user_info.prepayment'=>0,  
165 -  
166 - ]);  
167 - }else {  
168 - $query->andFilterWhere([  
169 - 'user_info.'.$working_conditions => 1,  
170 - ]);  
171 - } 177 + $query->andFilterWhere([
  178 + '>=',
  179 + 'user_info.rating',
  180 + $this->rating,
  181 + ]);
172 182
  183 + if($this->online == 1) {
  184 + $query->andWhere([
  185 + '>=',
  186 + 'user_info.date_visit',
  187 + date('Y-m-d H:i:s.u', time() - 1800),
  188 + ]);
173 } 189 }
174 - }  
175 - if(!empty($this->additional_parameters)){  
176 - foreach($this->additional_parameters as $additional_parameters){  
177 190
178 - switch ($additional_parameters) {  
179 - case 'with_portfolio':  
180 - $query->andFilterWhere([  
181 - 'user.id'=>ArrayHelper::toArray(Portfolio::find()->select('user_id')->column()), 191 + if(!empty( $this->working_conditions )) {
  192 + foreach($this->working_conditions as $working_conditions) {
  193 + if($working_conditions == 'guarantee') {
  194 + $query->andWhere([
  195 + '<>',
  196 + 'user_info.guarantee',
  197 + '',
182 ]); 198 ]);
183 - break;  
184 - case 'with_comments':  
185 - $query->andFilterWhere([  
186 - 'user.id'=>ArrayHelper::toArray(Portfolio::find()->select('user_id')->column()), 199 + } else if($working_conditions == 'prepayment') {
  200 + $query->andWhere([
  201 + 'user_info.prepayment' => 0,
  202 +
187 ]); 203 ]);
188 - break;  
189 - case 'only_free': 204 + } else {
190 $query->andFilterWhere([ 205 $query->andFilterWhere([
191 - 'user_info.busy'=>0, 206 + 'user_info.' . $working_conditions => 1,
192 ]); 207 ]);
193 - break; 208 + }
  209 +
  210 + }
  211 + }
  212 + if(!empty( $this->additional_parameters )) {
  213 + foreach($this->additional_parameters as $additional_parameters) {
  214 +
  215 + switch($additional_parameters) {
  216 + case 'with_portfolio':
  217 + $query->andFilterWhere([
  218 + 'user.id' => ArrayHelper::toArray(Portfolio::find()
  219 + ->select('user_id')
  220 + ->column()),
  221 + ]);
  222 + break;
  223 + case 'with_comments':
  224 + $query->andFilterWhere([
  225 + 'user.id' => ArrayHelper::toArray(Portfolio::find()
  226 + ->select('user_id')
  227 + ->column()),
  228 + ]);
  229 + break;
  230 + case 'only_free':
  231 + $query->andFilterWhere([
  232 + 'user_info.busy' => 0,
  233 + ]);
  234 + break;
  235 + }
194 } 236 }
195 } 237 }
196 - }  
197 -  
198 -  
199 238
  239 + if(!empty( $this->search )) {
200 240
201 - if(!empty( $this->search)){ 241 + $query->andFilterWhere([
  242 + 'or',
  243 + [
  244 + 'like',
  245 + 'user.firstname',
  246 + $this->search,
  247 + ],
  248 + [
  249 + 'like',
  250 + 'user.lastname',
  251 + $this->search,
  252 + ],
  253 + [
  254 + 'like',
  255 + 'company_info.name',
  256 + $this->search,
  257 + ],
  258 + ]);
  259 + }
202 260
203 - $query->andFilterWhere([  
204 - 'or',  
205 - ['like', 'user.firstname', $this->search],  
206 - ['like', 'user.lastname', $this->search],  
207 - ['like', 'company_info.name', $this->search]  
208 - ]); 261 + return $dataProvider;
209 } 262 }
210 -  
211 -  
212 -  
213 -  
214 - return $dataProvider;  
215 } 263 }
216 -}  
217 264