Blame view

frontend/controllers/CompanyController.php 20 KB
fbdb1f1c   Yarik   test
1
  <?php
fa284ab0   Yarik   test
2
3
4
5
6
7
8
      namespace frontend\controllers;
  
      use common\models\Blog;
      use common\models\Fields;
      use common\models\Gallery;
      use common\models\Portfolio;
      use common\models\PortfolioSpecialization;
38ffb9db   Yarik   test
9
10
      use common\models\PortfolioUser;
      use common\models\Specialization;
fa284ab0   Yarik   test
11
12
13
14
15
16
17
      use common\models\Team;
      use common\models\Vacancy;
      use common\models\VacancySpecialization;
      use Yii;
      use yii\data\ActiveDataProvider;
      use yii\data\ArrayDataProvider;
      use yii\data\Pagination;
225c5168   Yarik   test
18
      use yii\data\Sort;
239b3249   Yarik   test
19
      use yii\db\ActiveQuery;
fa284ab0   Yarik   test
20
21
22
23
      use yii\helpers\ArrayHelper;
      use yii\web\BadRequestHttpException;
      use yii\web\Controller;
      use common\models\User;
225c5168   Yarik   test
24
      use yii\web\NotFoundHttpException;
fbdb1f1c   Yarik   test
25
26
  
      /**
fa284ab0   Yarik   test
27
       * Site controller
fbdb1f1c   Yarik   test
28
       */
fa284ab0   Yarik   test
29
      class CompanyController extends Controller
fbdb1f1c   Yarik   test
30
      {
fbdb1f1c   Yarik   test
31
  
fa284ab0   Yarik   test
32
33
34
35
          public $layout = 'company';
  
          public $defaultAction = 'common';
  
90930c7c   Yarik   test
36
37
          public function afterAction($action, $result)
          {
c20d5820   Yarik   test
38
              $result = parent::afterAction($action, $result);
90930c7c   Yarik   test
39
40
41
42
              if(!empty( $action->controller->actionParams[ 'company_id' ] )) {
                  $company_id = $action->controller->actionParams[ 'company_id' ];
                  $user = User::findOne($company_id);
                  if(!empty( $user->userInfo )) {
272ce289   Yarik   test
43
44
45
46
47
48
49
50
51
52
53
54
55
                      if($user->userInfo->is_freelancer xor $user->userInfo->is_customer) {
                          $type = $action->controller->actionParams['type'];
                          $get = \Yii::$app->request->get();
                          if(!empty($type)) {
                              if($user->userInfo->is_freelancer && $type == 'customer') {
                                  $get['type'] = 'implementer';
                                  $this->redirect(array_merge([$action->id], $get));
                              } elseif($user->userInfo->is_customer && $type == 'implementer') {
                                  $get['type'] = 'customer';
                                  $this->redirect(array_merge([$action->id], $get));
                              }
                          }
                      }
c20d5820   Yarik   test
56
57
58
                      if($user->id != \Yii::$app->user->id) {
                          $user->userInfo->updateCounters([ 'view_count' => 1 ]);
                      }
9b93120e   Alex Savenko   review fix
59
                      $user->updateRating();
90930c7c   Yarik   test
60
61
                  }
              }
c20d5820   Yarik   test
62
              return $result;
90930c7c   Yarik   test
63
64
          }
  
fa284ab0   Yarik   test
65
66
67
68
69
70
71
72
73
74
75
76
77
78
          /**
           * @inheritdoc
           */
          public function actions()
          {
              return [
                  'error'   => [
                      'class' => 'yii\web\ErrorAction',
                  ],
                  'captcha' => [
                      'class'           => 'yii\captcha\CaptchaAction',
                      'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : NULL,
                  ],
              ];
d36bdac6   Administrator   17.02.16
79
          }
d36bdac6   Administrator   17.02.16
80
  
5014e10b   Yarik   test
81
          public function actionCommon($company_id, $type = 'implementer')
fa284ab0   Yarik   test
82
          {
225c5168   Yarik   test
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
              /**
               * @var User $company
               */
              if(!$company = User::find()
                                 ->where([ 'id' => $company_id ])
                                 ->with('teams')
                                 ->with('teams.department')
                                 ->with('userInfo')
                                 ->with('companyInfo')
                                 ->one()
              ) {
                  throw new NotFoundHttpException('Компания не найдена');
              }
  
              $projectProvider = new ActiveDataProvider([
004b2298   Yarik   test
98
                  'query' => $company->getPortfolios(),
225c5168   Yarik   test
99
              ]);
fa284ab0   Yarik   test
100
  
225c5168   Yarik   test
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
              $blogProvider = new ActiveDataProvider([
                  'query'      => $company->getBlog()
                                          ->with('comments'),
                  'sort'       => new Sort([
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                          'name'     => SORT_ASC,
                      ],
                  ]),
                  'pagination' => new Pagination([
                      'pageSize'  => 2,
                      'pageParam' => '',
                  ]),
              ]);
  
              $commentProvider = new ActiveDataProvider([
110087c2   Yarik   test
117
118
                  'query'      => $company->getComments()
                                          ->with('rating')
b9a54f61   Yarik   test
119
                                          ->with('user'),
225c5168   Yarik   test
120
121
122
123
124
125
126
127
128
129
                  'sort'       => new Sort([
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                      ],
                  ]),
                  'pagination' => new Pagination([
                      'pageSize'  => 4,
                      'pageParam' => '',
                  ]),
              ]);
fa284ab0   Yarik   test
130
131
  
              return $this->render('common', [
225c5168   Yarik   test
132
133
134
135
                  'company'         => $company,
                  'projectProvider' => $projectProvider,
                  'blogProvider'    => $blogProvider,
                  'commentProvider' => $commentProvider,
fa284ab0   Yarik   test
136
137
              ]);
          }
d36bdac6   Administrator   17.02.16
138
  
76f36646   Yarik   test
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
          public function actionProjects($company_id, $type = 'implementer')
          {
              $company = User::findOne($company_id);
  
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
  
              $dataProvider = new ActiveDataProvider([
                  'query'      => $company->getProjects(),
                  'pagination' => [
                      'pageSize' => 10,
                  ],
              ]);
  
              return $this->render('project-list', [
f0a961be   Yarik   test
155
                  'company'      => $company,
76f36646   Yarik   test
156
157
158
159
                  'dataProvider' => $dataProvider,
              ]);
          }
  
5014e10b   Yarik   test
160
          public function actionPortfolio($company_id, $type = 'implementer')
fa284ab0   Yarik   test
161
          {
38ffb9db   Yarik   test
162
163
164
165
166
167
168
169
170
171
172
              $company = User::find()
                             ->where([
                                 'id' => $company_id,
                             ])
                             ->joinWith([
                                 'portfolios' => function($query) {
                                     $query->indexBy('portfolio_id');
                                 },
                                 'portfolios.specializations',
                             ])
                             ->one();
fa284ab0   Yarik   test
173
174
175
176
  
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
38ffb9db   Yarik   test
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
  
              $filters = Specialization::find()
                                       ->select([
                                           'count' => 'COUNT(portfolio_specialization.specialization_id)',
                                           'portfolio_specialization.specialization_id',
                                           'specialization.specialization_name',
                                       ])
                                       ->join('INNER JOIN', 'portfolio_specialization', 'specialization.specialization_id = portfolio_specialization.specialization_id')
                                       ->where([ 'portfolio_specialization.portfolio_id' => array_keys($company->portfolios) ])
                                       ->groupBy([
                                           'portfolio_specialization.specialization_id',
                                           'specialization.specialization_name',
                                       ])
                                       ->indexBy('specialization_id')
                                       ->asArray()
                                       ->all();
  
              $portfolio = new ActiveDataProvider([
                  'query'      => $company->getPortfolios(),
fa284ab0   Yarik   test
196
197
198
                  'pagination' => [
                      'pageSize' => 9,
                  ],
239b3249   Yarik   test
199
                  'sort'       => new Sort([
38ffb9db   Yarik   test
200
201
202
203
                      'defaultOrder' => [
                          'portfolio_id' => SORT_DESC,
                      ],
                  ]),
fa284ab0   Yarik   test
204
205
206
207
208
209
              ]);
  
              return $this->render('portfolio', [
                  'company'   => $company,
                  'filters'   => $filters,
                  'portfolio' => $portfolio,
fa284ab0   Yarik   test
210
              ]);
d36bdac6   Administrator   17.02.16
211
212
          }
  
f0a961be   Yarik   test
213
          public function actionPortfolioFilter($company_id, $filter, $type = 'implementer')
fa284ab0   Yarik   test
214
          {
38ffb9db   Yarik   test
215
216
217
218
219
220
221
222
223
224
225
              $company = User::find()
                             ->where([
                                 'id' => $company_id,
                             ])
                             ->joinWith([
                                 'portfolios' => function($query) {
                                     $query->indexBy('portfolio_id');
                                 },
                                 'portfolios.specializations',
                             ])
                             ->one();
fa284ab0   Yarik   test
226
227
228
229
  
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
38ffb9db   Yarik   test
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
  
              $filters = Specialization::find()
                                       ->select([
                                           'count' => 'COUNT(portfolio_specialization.specialization_id)',
                                           'portfolio_specialization.specialization_id',
                                           'specialization.specialization_name',
                                       ])
                                       ->join('INNER JOIN', 'portfolio_specialization', 'specialization.specialization_id = portfolio_specialization.specialization_id')
                                       ->where([ 'portfolio_specialization.portfolio_id' => array_keys($company->portfolios) ])
                                       ->groupBy([
                                           'portfolio_specialization.specialization_id',
                                           'specialization.specialization_name',
                                       ])
                                       ->indexBy('specialization_id')
                                       ->asArray()
                                       ->all();
  
              $portfolio = new ActiveDataProvider([
                  'query'      => $company->getPortfolios()
                                          ->joinWith('specializations')
                                          ->where([ 'portfolio_specialization.specialization_id' => $filter ]),
fa284ab0   Yarik   test
251
252
253
254
255
256
257
258
259
260
                  'pagination' => [
                      'pageSize' => 9,
                  ],
              ]);
  
              return $this->render('portfolio', [
                  'company'   => $company,
                  'filters'   => $filters,
                  'portfolio' => $portfolio,
                  'filter_id' => $filter,
fa284ab0   Yarik   test
261
262
              ]);
          }
d36bdac6   Administrator   17.02.16
263
  
38ffb9db   Yarik   test
264
          public function actionPortfolioView($company_id, $portfolio_id, $portfolio_user = NULL, $type = 'implementer')
fa284ab0   Yarik   test
265
266
267
268
          {
              $user = User::findOne($company_id);
              $portfolio = $user->getPortfolios()
                                ->where([ 'portfolio_id' => $portfolio_id ])
239b3249   Yarik   test
269
270
271
272
273
274
275
276
                                ->with([
                                    'portfolioUsers' => function($query) {
                                        /**
                                         * @var ActiveQuery $query
                                         */
                                        $query->andWhere([ 'status' => 1 ]);
                                    },
                                ])
38ffb9db   Yarik   test
277
                                ->with('portfolioUsers.gallery')
fa284ab0   Yarik   test
278
                                ->one();
e82beebc   Yarik   test
279
280
281
              if(empty($portfolio)) {
                  throw new NotFoundHttpException('Портфолио не найдено');
              }
38ffb9db   Yarik   test
282
283
              if(!empty( $portfolio_user )) {
                  $portfolio_user = PortfolioUser::find()
239b3249   Yarik   test
284
285
286
287
                                                 ->where([
                                                     'portfolio_user_id' => $portfolio_user,
                                                     'status'            => 1,
                                                 ])
38ffb9db   Yarik   test
288
289
290
                                                 ->with('gallery')
                                                 ->with('user')
                                                 ->one();
239b3249   Yarik   test
291
292
293
294
295
296
297
298
                  if(empty( $portfolio_user )) {
                      $this->redirect([
                          'portfolio-view',
                          'performer_id' => $company_id,
                          'portfolio_id' => $portfolio_id,
                          'type'         => $type,
                      ]);
                  }
38ffb9db   Yarik   test
299
300
301
              } else {
                  $portfolio->updateCounters([ 'view_count' => 1 ]);
              }
fa284ab0   Yarik   test
302
              return $this->render('portfolio-view', [
38ffb9db   Yarik   test
303
304
305
                  'user'           => $user,
                  'portfolio'      => $portfolio,
                  'portfolio_user' => $portfolio_user,
fa284ab0   Yarik   test
306
307
              ]);
          }
d36bdac6   Administrator   17.02.16
308
  
5014e10b   Yarik   test
309
          public function actionTeam($company_id, $type = 'implementer')
fa284ab0   Yarik   test
310
311
          {
              $company = User::findOne($company_id);
fa284ab0   Yarik   test
312
313
314
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
a020aad3   Yarik   test
315
              $comments = new ActiveDataProvider([
225c5168   Yarik   test
316
                  'query'      => $company->getComments(),
a020aad3   Yarik   test
317
                  'pagination' => [
225c5168   Yarik   test
318
                      'pageSize' => 4,
a020aad3   Yarik   test
319
320
                  ],
              ]);
fa284ab0   Yarik   test
321
322
              $query = Team::find()
                           ->where([ 'user_id' => $company_id ]);
a020aad3   Yarik   test
323
324
325
326
327
              $team = new ActiveDataProvider([
                  'query'      => $query,
                  'pagination' => [
                      'pageSize' => 9,
                  ],
fa284ab0   Yarik   test
328
              ]);
fa284ab0   Yarik   test
329
              return $this->render('team', [
a020aad3   Yarik   test
330
331
332
                  'company'  => $company,
                  'team'     => $team,
                  'comments' => $comments,
fa284ab0   Yarik   test
333
              ]);
d36bdac6   Administrator   17.02.16
334
335
          }
  
5014e10b   Yarik   test
336
          public function actionBlogList($company_id, $type = 'implementer')
fa284ab0   Yarik   test
337
338
          {
              $company = User::findOne($company_id);
d36bdac6   Administrator   17.02.16
339
  
fa284ab0   Yarik   test
340
341
342
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
d36bdac6   Administrator   17.02.16
343
  
42931736   Yarik   test
344
              $blog = new ActiveDataProvider([
f0a961be   Yarik   test
345
                  'query'      => $company->getBlog(),
42931736   Yarik   test
346
347
348
                  'pagination' => new Pagination([
                      'pageSize' => 5,
                  ]),
f0a961be   Yarik   test
349
                  'sort'       => new Sort([
42931736   Yarik   test
350
351
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
f0a961be   Yarik   test
352
                          'name'     => SORT_ASC,
42931736   Yarik   test
353
354
                      ],
                  ]),
fa284ab0   Yarik   test
355
              ]);
f6ea8941   Administrator   09.02.16
356
  
fa284ab0   Yarik   test
357
              return $this->render('blog-list', [
f0a961be   Yarik   test
358
359
                  'company' => $company,
                  'blog'    => $blog,
fa284ab0   Yarik   test
360
              ]);
d36bdac6   Administrator   17.02.16
361
362
          }
  
5014e10b   Yarik   test
363
          public function actionBlogView($company_id, $link, $type = 'implementer')
fa284ab0   Yarik   test
364
365
          {
              $company = User::findOne($company_id);
d36bdac6   Administrator   17.02.16
366
  
fa284ab0   Yarik   test
367
368
369
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
4ff3ca88   Yarik   test
370
371
372
373
374
375
376
              $article = Blog::find()
                             ->where([
                                 'link'    => $link,
                                 'user_id' => $company_id,
                             ])
                             ->with('comments')
                             ->one();
e82beebc   Yarik   test
377
378
379
              if(empty($article)) {
                  throw new NotFoundHttpException('Запись не найдена');
              }
4ff3ca88   Yarik   test
380
              $article->updateCounters([ 'view_count' => 1 ]);
d36bdac6   Administrator   17.02.16
381
  
fa284ab0   Yarik   test
382
383
384
              return $this->render('blog-view', [
                  'company' => $company,
                  'article' => $article,
d36bdac6   Administrator   17.02.16
385
  
fa284ab0   Yarik   test
386
387
              ]);
          }
eb7e82fb   Administrator   29.02.16
388
  
5014e10b   Yarik   test
389
          public function actionReview($company_id, $type = 'implementer')
fa284ab0   Yarik   test
390
391
          {
              $company = User::findOne($company_id);
eb7e82fb   Administrator   29.02.16
392
  
ad9c004b   Yarik   test
393
394
395
396
              if(empty($company)) {
                  throw new NotFoundHttpException('Company not found');
              }
  
fa284ab0   Yarik   test
397
398
399
              return $this->render('review', [
                  'company' => $company,
              ]);
eb7e82fb   Administrator   29.02.16
400
401
          }
  
5014e10b   Yarik   test
402
          public function actionVacancyList($company_id, $type = 'implementer')
fa284ab0   Yarik   test
403
          {
eb7e82fb   Administrator   29.02.16
404
  
fa284ab0   Yarik   test
405
              $company = User::findOne($company_id);
eb7e82fb   Administrator   29.02.16
406
  
fa284ab0   Yarik   test
407
408
409
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
eb7e82fb   Administrator   29.02.16
410
  
fa284ab0   Yarik   test
411
              $query = $company->getVacancies();
eb7e82fb   Administrator   29.02.16
412
  
fa284ab0   Yarik   test
413
              $provider = new ActiveDataProvider([
a020aad3   Yarik   test
414
415
416
417
                  'query'      => $query,
                  'pagination' => [
                      'pageSize' => 5,
                  ],
fa284ab0   Yarik   test
418
419
420
421
422
423
424
                  'sort'       => [
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                          'name'     => SORT_ASC,
                      ],
                  ],
              ]);
eb7e82fb   Administrator   29.02.16
425
  
fa284ab0   Yarik   test
426
              return $this->render('vacancy-list', [
a020aad3   Yarik   test
427
428
                  'company'  => $company,
                  'provider' => $provider,
fa284ab0   Yarik   test
429
              ]);
eb7e82fb   Administrator   29.02.16
430
  
fa284ab0   Yarik   test
431
          }
eb7e82fb   Administrator   29.02.16
432
  
5014e10b   Yarik   test
433
          public function actionVacancyView($company_id, $link, $type = 'implementer')
fa284ab0   Yarik   test
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
          {
              $company = User::findOne($company_id);
              $vacancy = $company->getVacancies()
                                 ->where([ 'link' => $link ])
                                 ->with([
                                     'employments',
                                     'specializations',
                                 ])
                                 ->one();
  
              $specialization_id = $vacancy->getSpecializations()
                                           ->select('specialization_id')
                                           ->column();
  
              $vacancy_id = VacancySpecialization::find()
                                                 ->where([ 'specialization_id' => $specialization_id ])
                                                 ->select('vacancy_id')
                                                 ->column();
  
              $similar_vacancies = Vacancy::find()
                                          ->where([
                                              'city'       => $vacancy->city,
                                              'vacancy_id' => $vacancy_id,
                                          ])
                                          ->andFilterWhere([
                                              '<>',
                                              'vacancy_id',
                                              $vacancy->vacancy_id,
                                          ])
                                          ->orderBy([ 'vacancy_id' => SORT_DESC ])
                                          ->limit(3)
                                          ->all();
  
c6c14d3c   Alex Savenko   vacancy counters ...
467
468
469
470
              $vacancy->updateCounters(
                  ['view_count' => 1]
              );
  
fa284ab0   Yarik   test
471
472
473
474
475
476
              return $this->render('vacancy-view', [
                  'company'           => $company,
                  'vacancy'           => $vacancy,
                  'similar_vacancies' => $similar_vacancies,
              ]);
          }
fbdb1f1c   Yarik   test
477
  
5014e10b   Yarik   test
478
          public function actionGallery($company_id, $type = 'implementer')
fa284ab0   Yarik   test
479
480
          {
              $company = User::findOne($company_id);
f6ea8941   Administrator   09.02.16
481
  
fa284ab0   Yarik   test
482
483
484
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
cda2c1c9   Administrator   add yii jquery
485
  
f0a961be   Yarik   test
486
487
488
489
490
              $gallery = new ActiveDataProvider([
                  'query'      => $company->getGalleries(),
                  'pagination' => [
                      'pageSize' => 5,
                  ],
fa284ab0   Yarik   test
491
              ]);
fbdb1f1c   Yarik   test
492
  
fa284ab0   Yarik   test
493
              $videos = Fields::getData($company->id, Gallery::className(), 'youtube');
d36bdac6   Administrator   17.02.16
494
  
fa284ab0   Yarik   test
495
              $this->layout = 'gallery-company';
f6ea8941   Administrator   09.02.16
496
  
fa284ab0   Yarik   test
497
              return $this->render('gallery', [
38ffb9db   Yarik   test
498
499
500
                  'company' => $company,
                  'gallery' => $gallery,
                  'videos'  => $videos,
fa284ab0   Yarik   test
501
              ]);
d36bdac6   Administrator   17.02.16
502
          }
76f36646   Yarik   test
503
504
505
  
          public function beforeAction($action)
          {
f0a961be   Yarik   test
506
507
              if(!empty( \Yii::$app->request->get('type') )) {
                  $action->controller->view->params[ 'type' ] = \Yii::$app->request->get('type');
76f36646   Yarik   test
508
              }
f0a961be   Yarik   test
509
              if(!empty( \Yii::$app->request->get('company_id') )) {
f7b97c9e   Yarik   test
510
                  $user = User::findOne(\Yii::$app->request->get('company_id'));
f0a961be   Yarik   test
511
                  if(!empty( $user ) && $user->type == 1) {
f7b97c9e   Yarik   test
512
                      $queryParams = \Yii::$app->request->queryParams;
f0a961be   Yarik   test
513
514
515
                      unset( $queryParams[ 'company_id' ] );
                      $queryParams[ 'performer_id' ] = $user->id;
                      return $this->redirect(array_merge([ 'performer/' . $action->id ], $queryParams));
f7b97c9e   Yarik   test
516
517
                  }
              }
76f36646   Yarik   test
518
519
              return parent::beforeAction($action);
          }
fbdb1f1c   Yarik   test
520
      }