Blame view

frontend/controllers/CompanyController.php 19.9 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 ]);
                      }
90930c7c   Yarik   test
59
60
                  }
              }
c20d5820   Yarik   test
61
              return $result;
90930c7c   Yarik   test
62
63
          }
  
fa284ab0   Yarik   test
64
65
66
67
68
69
70
71
72
73
74
75
76
77
          /**
           * @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
78
          }
d36bdac6   Administrator   17.02.16
79
  
5014e10b   Yarik   test
80
          public function actionCommon($company_id, $type = 'implementer')
fa284ab0   Yarik   test
81
          {
225c5168   Yarik   test
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
              /**
               * @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
97
                  'query' => $company->getPortfolios(),
225c5168   Yarik   test
98
              ]);
fa284ab0   Yarik   test
99
  
225c5168   Yarik   test
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
              $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
116
117
                  'query'      => $company->getComments()
                                          ->with('rating')
b9a54f61   Yarik   test
118
                                          ->with('user'),
225c5168   Yarik   test
119
120
121
122
123
124
125
126
127
128
                  'sort'       => new Sort([
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                      ],
                  ]),
                  'pagination' => new Pagination([
                      'pageSize'  => 4,
                      'pageParam' => '',
                  ]),
              ]);
fa284ab0   Yarik   test
129
130
  
              return $this->render('common', [
225c5168   Yarik   test
131
132
133
134
                  'company'         => $company,
                  'projectProvider' => $projectProvider,
                  'blogProvider'    => $blogProvider,
                  'commentProvider' => $commentProvider,
fa284ab0   Yarik   test
135
136
              ]);
          }
d36bdac6   Administrator   17.02.16
137
  
76f36646   Yarik   test
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
          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
154
                  'company'      => $company,
76f36646   Yarik   test
155
156
157
158
                  'dataProvider' => $dataProvider,
              ]);
          }
  
5014e10b   Yarik   test
159
          public function actionPortfolio($company_id, $type = 'implementer')
fa284ab0   Yarik   test
160
          {
38ffb9db   Yarik   test
161
162
163
164
165
166
167
168
169
170
171
              $company = User::find()
                             ->where([
                                 'id' => $company_id,
                             ])
                             ->joinWith([
                                 'portfolios' => function($query) {
                                     $query->indexBy('portfolio_id');
                                 },
                                 'portfolios.specializations',
                             ])
                             ->one();
fa284ab0   Yarik   test
172
173
174
175
  
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
38ffb9db   Yarik   test
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
  
              $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
195
196
197
                  'pagination' => [
                      'pageSize' => 9,
                  ],
239b3249   Yarik   test
198
                  'sort'       => new Sort([
38ffb9db   Yarik   test
199
200
201
202
                      'defaultOrder' => [
                          'portfolio_id' => SORT_DESC,
                      ],
                  ]),
fa284ab0   Yarik   test
203
204
205
206
207
208
              ]);
  
              return $this->render('portfolio', [
                  'company'   => $company,
                  'filters'   => $filters,
                  'portfolio' => $portfolio,
fa284ab0   Yarik   test
209
              ]);
d36bdac6   Administrator   17.02.16
210
211
          }
  
f0a961be   Yarik   test
212
          public function actionPortfolioFilter($company_id, $filter, $type = 'implementer')
fa284ab0   Yarik   test
213
          {
38ffb9db   Yarik   test
214
215
216
217
218
219
220
221
222
223
224
              $company = User::find()
                             ->where([
                                 'id' => $company_id,
                             ])
                             ->joinWith([
                                 'portfolios' => function($query) {
                                     $query->indexBy('portfolio_id');
                                 },
                                 'portfolios.specializations',
                             ])
                             ->one();
fa284ab0   Yarik   test
225
226
227
228
  
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
38ffb9db   Yarik   test
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
  
              $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
250
251
252
253
254
255
256
257
258
259
                  'pagination' => [
                      'pageSize' => 9,
                  ],
              ]);
  
              return $this->render('portfolio', [
                  'company'   => $company,
                  'filters'   => $filters,
                  'portfolio' => $portfolio,
                  'filter_id' => $filter,
fa284ab0   Yarik   test
260
261
              ]);
          }
d36bdac6   Administrator   17.02.16
262
  
38ffb9db   Yarik   test
263
          public function actionPortfolioView($company_id, $portfolio_id, $portfolio_user = NULL, $type = 'implementer')
fa284ab0   Yarik   test
264
265
266
267
          {
              $user = User::findOne($company_id);
              $portfolio = $user->getPortfolios()
                                ->where([ 'portfolio_id' => $portfolio_id ])
239b3249   Yarik   test
268
269
270
271
272
273
274
275
                                ->with([
                                    'portfolioUsers' => function($query) {
                                        /**
                                         * @var ActiveQuery $query
                                         */
                                        $query->andWhere([ 'status' => 1 ]);
                                    },
                                ])
38ffb9db   Yarik   test
276
                                ->with('portfolioUsers.gallery')
fa284ab0   Yarik   test
277
                                ->one();
e82beebc   Yarik   test
278
279
280
              if(empty($portfolio)) {
                  throw new NotFoundHttpException('Портфолио не найдено');
              }
38ffb9db   Yarik   test
281
282
              if(!empty( $portfolio_user )) {
                  $portfolio_user = PortfolioUser::find()
239b3249   Yarik   test
283
284
285
286
                                                 ->where([
                                                     'portfolio_user_id' => $portfolio_user,
                                                     'status'            => 1,
                                                 ])
38ffb9db   Yarik   test
287
288
289
                                                 ->with('gallery')
                                                 ->with('user')
                                                 ->one();
239b3249   Yarik   test
290
291
292
293
294
295
296
297
                  if(empty( $portfolio_user )) {
                      $this->redirect([
                          'portfolio-view',
                          'performer_id' => $company_id,
                          'portfolio_id' => $portfolio_id,
                          'type'         => $type,
                      ]);
                  }
38ffb9db   Yarik   test
298
299
300
              } else {
                  $portfolio->updateCounters([ 'view_count' => 1 ]);
              }
fa284ab0   Yarik   test
301
              return $this->render('portfolio-view', [
38ffb9db   Yarik   test
302
303
304
                  'user'           => $user,
                  'portfolio'      => $portfolio,
                  'portfolio_user' => $portfolio_user,
fa284ab0   Yarik   test
305
306
              ]);
          }
d36bdac6   Administrator   17.02.16
307
  
5014e10b   Yarik   test
308
          public function actionTeam($company_id, $type = 'implementer')
fa284ab0   Yarik   test
309
310
          {
              $company = User::findOne($company_id);
fa284ab0   Yarik   test
311
312
313
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
a020aad3   Yarik   test
314
              $comments = new ActiveDataProvider([
225c5168   Yarik   test
315
                  'query'      => $company->getComments(),
a020aad3   Yarik   test
316
                  'pagination' => [
225c5168   Yarik   test
317
                      'pageSize' => 4,
a020aad3   Yarik   test
318
319
                  ],
              ]);
fa284ab0   Yarik   test
320
321
              $query = Team::find()
                           ->where([ 'user_id' => $company_id ]);
a020aad3   Yarik   test
322
323
324
325
326
              $team = new ActiveDataProvider([
                  'query'      => $query,
                  'pagination' => [
                      'pageSize' => 9,
                  ],
fa284ab0   Yarik   test
327
              ]);
fa284ab0   Yarik   test
328
              return $this->render('team', [
a020aad3   Yarik   test
329
330
331
                  'company'  => $company,
                  'team'     => $team,
                  'comments' => $comments,
fa284ab0   Yarik   test
332
              ]);
d36bdac6   Administrator   17.02.16
333
334
          }
  
5014e10b   Yarik   test
335
          public function actionBlogList($company_id, $type = 'implementer')
fa284ab0   Yarik   test
336
337
          {
              $company = User::findOne($company_id);
d36bdac6   Administrator   17.02.16
338
  
fa284ab0   Yarik   test
339
340
341
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
d36bdac6   Administrator   17.02.16
342
  
42931736   Yarik   test
343
              $blog = new ActiveDataProvider([
f0a961be   Yarik   test
344
                  'query'      => $company->getBlog(),
42931736   Yarik   test
345
346
347
                  'pagination' => new Pagination([
                      'pageSize' => 5,
                  ]),
f0a961be   Yarik   test
348
                  'sort'       => new Sort([
42931736   Yarik   test
349
350
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
f0a961be   Yarik   test
351
                          'name'     => SORT_ASC,
42931736   Yarik   test
352
353
                      ],
                  ]),
fa284ab0   Yarik   test
354
              ]);
f6ea8941   Administrator   09.02.16
355
  
fa284ab0   Yarik   test
356
              return $this->render('blog-list', [
f0a961be   Yarik   test
357
358
                  'company' => $company,
                  'blog'    => $blog,
fa284ab0   Yarik   test
359
              ]);
d36bdac6   Administrator   17.02.16
360
361
          }
  
5014e10b   Yarik   test
362
          public function actionBlogView($company_id, $link, $type = 'implementer')
fa284ab0   Yarik   test
363
364
          {
              $company = User::findOne($company_id);
d36bdac6   Administrator   17.02.16
365
  
fa284ab0   Yarik   test
366
367
368
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
4ff3ca88   Yarik   test
369
370
371
372
373
374
375
              $article = Blog::find()
                             ->where([
                                 'link'    => $link,
                                 'user_id' => $company_id,
                             ])
                             ->with('comments')
                             ->one();
e82beebc   Yarik   test
376
377
378
              if(empty($article)) {
                  throw new NotFoundHttpException('Запись не найдена');
              }
4ff3ca88   Yarik   test
379
              $article->updateCounters([ 'view_count' => 1 ]);
d36bdac6   Administrator   17.02.16
380
  
fa284ab0   Yarik   test
381
382
383
              return $this->render('blog-view', [
                  'company' => $company,
                  'article' => $article,
d36bdac6   Administrator   17.02.16
384
  
fa284ab0   Yarik   test
385
386
              ]);
          }
eb7e82fb   Administrator   29.02.16
387
  
5014e10b   Yarik   test
388
          public function actionReview($company_id, $type = 'implementer')
fa284ab0   Yarik   test
389
390
          {
              $company = User::findOne($company_id);
eb7e82fb   Administrator   29.02.16
391
  
ad9c004b   Yarik   test
392
393
394
395
              if(empty($company)) {
                  throw new NotFoundHttpException('Company not found');
              }
  
fa284ab0   Yarik   test
396
397
398
              return $this->render('review', [
                  'company' => $company,
              ]);
eb7e82fb   Administrator   29.02.16
399
400
          }
  
5014e10b   Yarik   test
401
          public function actionVacancyList($company_id, $type = 'implementer')
fa284ab0   Yarik   test
402
          {
eb7e82fb   Administrator   29.02.16
403
  
fa284ab0   Yarik   test
404
              $company = User::findOne($company_id);
eb7e82fb   Administrator   29.02.16
405
  
fa284ab0   Yarik   test
406
407
408
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
eb7e82fb   Administrator   29.02.16
409
  
fa284ab0   Yarik   test
410
              $query = $company->getVacancies();
eb7e82fb   Administrator   29.02.16
411
  
fa284ab0   Yarik   test
412
              $provider = new ActiveDataProvider([
a020aad3   Yarik   test
413
414
415
416
                  'query'      => $query,
                  'pagination' => [
                      'pageSize' => 5,
                  ],
fa284ab0   Yarik   test
417
418
419
420
421
422
423
                  'sort'       => [
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                          'name'     => SORT_ASC,
                      ],
                  ],
              ]);
eb7e82fb   Administrator   29.02.16
424
  
fa284ab0   Yarik   test
425
              return $this->render('vacancy-list', [
a020aad3   Yarik   test
426
427
                  'company'  => $company,
                  'provider' => $provider,
fa284ab0   Yarik   test
428
              ]);
eb7e82fb   Administrator   29.02.16
429
  
fa284ab0   Yarik   test
430
          }
eb7e82fb   Administrator   29.02.16
431
  
5014e10b   Yarik   test
432
          public function actionVacancyView($company_id, $link, $type = 'implementer')
fa284ab0   Yarik   test
433
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
467
468
469
470
471
          {
              $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();
  
              return $this->render('vacancy-view', [
                  'company'           => $company,
                  'vacancy'           => $vacancy,
                  'similar_vacancies' => $similar_vacancies,
              ]);
          }
fbdb1f1c   Yarik   test
472
  
5014e10b   Yarik   test
473
          public function actionGallery($company_id, $type = 'implementer')
fa284ab0   Yarik   test
474
475
          {
              $company = User::findOne($company_id);
f6ea8941   Administrator   09.02.16
476
  
fa284ab0   Yarik   test
477
478
479
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
cda2c1c9   Administrator   add yii jquery
480
  
f0a961be   Yarik   test
481
482
483
484
485
              $gallery = new ActiveDataProvider([
                  'query'      => $company->getGalleries(),
                  'pagination' => [
                      'pageSize' => 5,
                  ],
fa284ab0   Yarik   test
486
              ]);
fbdb1f1c   Yarik   test
487
  
fa284ab0   Yarik   test
488
              $videos = Fields::getData($company->id, Gallery::className(), 'youtube');
d36bdac6   Administrator   17.02.16
489
  
fa284ab0   Yarik   test
490
              $this->layout = 'gallery-company';
f6ea8941   Administrator   09.02.16
491
  
fa284ab0   Yarik   test
492
              return $this->render('gallery', [
38ffb9db   Yarik   test
493
494
495
                  'company' => $company,
                  'gallery' => $gallery,
                  'videos'  => $videos,
fa284ab0   Yarik   test
496
              ]);
d36bdac6   Administrator   17.02.16
497
          }
76f36646   Yarik   test
498
499
500
  
          public function beforeAction($action)
          {
f0a961be   Yarik   test
501
502
              if(!empty( \Yii::$app->request->get('type') )) {
                  $action->controller->view->params[ 'type' ] = \Yii::$app->request->get('type');
76f36646   Yarik   test
503
              }
f0a961be   Yarik   test
504
              if(!empty( \Yii::$app->request->get('company_id') )) {
f7b97c9e   Yarik   test
505
                  $user = User::findOne(\Yii::$app->request->get('company_id'));
f0a961be   Yarik   test
506
                  if(!empty( $user ) && $user->type == 1) {
f7b97c9e   Yarik   test
507
                      $queryParams = \Yii::$app->request->queryParams;
f0a961be   Yarik   test
508
509
510
                      unset( $queryParams[ 'company_id' ] );
                      $queryParams[ 'performer_id' ] = $user->id;
                      return $this->redirect(array_merge([ 'performer/' . $action->id ], $queryParams));
f7b97c9e   Yarik   test
511
512
                  }
              }
76f36646   Yarik   test
513
514
              return parent::beforeAction($action);
          }
fbdb1f1c   Yarik   test
515
      }