Blame view

frontend/controllers/CompanyController.php 16.1 KB
fbdb1f1c   Yarik   test
1
  <?php
fa284ab0   Yarik   test
2
3
4
5
6
7
8
9
10
11
12
13
14
15
      namespace frontend\controllers;
  
      use common\models\Blog;
      use common\models\Fields;
      use common\models\Gallery;
      use common\models\Portfolio;
      use common\models\PortfolioSpecialization;
      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
16
      use yii\data\Sort;
fa284ab0   Yarik   test
17
18
19
20
      use yii\helpers\ArrayHelper;
      use yii\web\BadRequestHttpException;
      use yii\web\Controller;
      use common\models\User;
225c5168   Yarik   test
21
      use yii\web\NotFoundHttpException;
fbdb1f1c   Yarik   test
22
23
  
      /**
fa284ab0   Yarik   test
24
       * Site controller
fbdb1f1c   Yarik   test
25
       */
fa284ab0   Yarik   test
26
      class CompanyController extends Controller
fbdb1f1c   Yarik   test
27
      {
fbdb1f1c   Yarik   test
28
  
fa284ab0   Yarik   test
29
30
31
32
          public $layout = 'company';
  
          public $defaultAction = 'common';
  
90930c7c   Yarik   test
33
34
35
36
37
38
39
40
41
42
43
44
          public function afterAction($action, $result)
          {
              if(!empty( $action->controller->actionParams[ 'company_id' ] )) {
                  $company_id = $action->controller->actionParams[ 'company_id' ];
                  $user = User::findOne($company_id);
                  if(!empty( $user->userInfo )) {
                      $user->userInfo->updateCounters([ 'view_count' => 1 ]);
                  }
              }
              return parent::afterAction($action, $result);
          }
  
fa284ab0   Yarik   test
45
46
47
48
49
50
51
52
53
54
55
56
57
58
          /**
           * @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
59
          }
d36bdac6   Administrator   17.02.16
60
  
5014e10b   Yarik   test
61
          public function actionCommon($company_id, $type = 'implementer')
fa284ab0   Yarik   test
62
          {
225c5168   Yarik   test
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
              /**
               * @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([
                  'query' => $company->getProjects(),
              ]);
fa284ab0   Yarik   test
80
  
225c5168   Yarik   test
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
              $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
97
98
                  'query'      => $company->getComments()
                                          ->with('rating')
b9a54f61   Yarik   test
99
                                          ->with('user'),
225c5168   Yarik   test
100
101
102
103
104
105
106
107
108
109
                  'sort'       => new Sort([
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                      ],
                  ]),
                  'pagination' => new Pagination([
                      'pageSize'  => 4,
                      'pageParam' => '',
                  ]),
              ]);
fa284ab0   Yarik   test
110
111
  
              return $this->render('common', [
225c5168   Yarik   test
112
113
114
115
                  'company'         => $company,
                  'projectProvider' => $projectProvider,
                  'blogProvider'    => $blogProvider,
                  'commentProvider' => $commentProvider,
fa284ab0   Yarik   test
116
117
              ]);
          }
d36bdac6   Administrator   17.02.16
118
  
76f36646   Yarik   test
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
          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', [
                  'company'         => $company,
                  'dataProvider' => $dataProvider,
              ]);
          }
  
5014e10b   Yarik   test
140
          public function actionPortfolio($company_id, $type = 'implementer')
fa284ab0   Yarik   test
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
          {
              $company = User::findOne($company_id);
  
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
              $projects = ArrayHelper::getColumn($company->portfolios, 'portfolio_id');
  
              $filters = PortfolioSpecialization::find()
                                                ->select([
                                                    "specialization_id",
                                                    "COUNT('specialization_id') AS count",
                                                ])
                                                ->where([ "portfolio_id" => $projects ])
                                                ->groupBy("specialization_id")
                                                ->all();
  
              $portfolio = new ArrayDataProvider([
                  'allModels'  => $company->getPortfolios()
                                          ->orderBy('portfolio_id')
                                          ->all(),
                  'pagination' => [
                      'pageSize' => 9,
                  ],
              ]);
  
              return $this->render('portfolio', [
                  'company'   => $company,
                  'filters'   => $filters,
                  'portfolio' => $portfolio,
                  'count'     => count($company->portfolios),
              ]);
d36bdac6   Administrator   17.02.16
173
174
          }
  
5014e10b   Yarik   test
175
          public function actionPortfolioFilter($performer_id, $filter, $type = 'implementer')
fa284ab0   Yarik   test
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
          {
              $company = User::findOne($performer_id);
  
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
              $portfolios = ArrayHelper::getColumn($company->portfolios, 'portfolio_id');
  
              $filters = PortfolioSpecialization::find()
                                                ->select([
                                                    "specialization_id",
                                                    "COUNT('specialization_id') AS count",
                                                ])
                                                ->where([ "portfolio_id" => $portfolios ])
                                                ->groupBy("specialization_id")
                                                ->all();
  
              $filter_result = PortfolioSpecialization::find()
                                                      ->where([
                                                          'specialization_id' => $filter,
                                                          'portfolio_id'      => $portfolios,
                                                      ])
                                                      ->all();
  
              $portfolio = new ArrayDataProvider([
                  'allModels'  => Portfolio::find()
                                           ->where([ 'portfolio_id' => ArrayHelper::getColumn($filter_result, 'portfolio_id') ])
                                           ->all(),
                  'pagination' => [
                      'pageSize' => 9,
                  ],
              ]);
  
              return $this->render('portfolio', [
                  'company'   => $company,
                  'filters'   => $filters,
                  'portfolio' => $portfolio,
                  'filter_id' => $filter,
                  'count'     => count($company->portfolios),
              ]);
          }
d36bdac6   Administrator   17.02.16
217
  
5014e10b   Yarik   test
218
          public function actionPortfolioView($company_id, $portfolio_id, $type = 'implementer')
fa284ab0   Yarik   test
219
220
221
222
223
224
225
226
227
228
229
          {
              $user = User::findOne($company_id);
              $portfolio = $user->getPortfolios()
                                ->where([ 'portfolio_id' => $portfolio_id ])
                                ->one();
              $portfolio->updateCounters([ 'view_count' => 1 ]);
              return $this->render('portfolio-view', [
                  'user'      => $user,
                  'portfolio' => $portfolio,
              ]);
          }
d36bdac6   Administrator   17.02.16
230
  
5014e10b   Yarik   test
231
          public function actionTeam($company_id, $type = 'implementer')
fa284ab0   Yarik   test
232
233
          {
              $company = User::findOne($company_id);
fa284ab0   Yarik   test
234
235
236
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
a020aad3   Yarik   test
237
              $comments = new ActiveDataProvider([
225c5168   Yarik   test
238
                  'query'      => $company->getComments(),
a020aad3   Yarik   test
239
                  'pagination' => [
225c5168   Yarik   test
240
                      'pageSize' => 4,
a020aad3   Yarik   test
241
242
                  ],
              ]);
fa284ab0   Yarik   test
243
244
              $query = Team::find()
                           ->where([ 'user_id' => $company_id ]);
a020aad3   Yarik   test
245
246
247
248
249
              $team = new ActiveDataProvider([
                  'query'      => $query,
                  'pagination' => [
                      'pageSize' => 9,
                  ],
fa284ab0   Yarik   test
250
              ]);
fa284ab0   Yarik   test
251
              return $this->render('team', [
a020aad3   Yarik   test
252
253
254
                  'company'  => $company,
                  'team'     => $team,
                  'comments' => $comments,
fa284ab0   Yarik   test
255
              ]);
d36bdac6   Administrator   17.02.16
256
257
          }
  
5014e10b   Yarik   test
258
          public function actionBlogList($company_id, $type = 'implementer')
fa284ab0   Yarik   test
259
260
          {
              $company = User::findOne($company_id);
d36bdac6   Administrator   17.02.16
261
  
fa284ab0   Yarik   test
262
263
264
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
d36bdac6   Administrator   17.02.16
265
  
42931736   Yarik   test
266
267
268
269
270
271
272
273
274
275
276
              $blog = new ActiveDataProvider([
                  'query' => $company->getBlog(),
                  'pagination' => new Pagination([
                      'pageSize' => 5,
                  ]),
                  'sort' => new Sort([
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                          'name' => SORT_ASC,
                      ],
                  ]),
fa284ab0   Yarik   test
277
              ]);
f6ea8941   Administrator   09.02.16
278
  
fa284ab0   Yarik   test
279
280
281
              return $this->render('blog-list', [
                  'company'    => $company,
                  'blog'       => $blog,
fa284ab0   Yarik   test
282
              ]);
d36bdac6   Administrator   17.02.16
283
284
          }
  
5014e10b   Yarik   test
285
          public function actionBlogView($company_id, $link, $type = 'implementer')
fa284ab0   Yarik   test
286
287
          {
              $company = User::findOne($company_id);
d36bdac6   Administrator   17.02.16
288
  
fa284ab0   Yarik   test
289
290
291
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
d36bdac6   Administrator   17.02.16
292
  
4ff3ca88   Yarik   test
293
294
295
296
297
298
299
300
              $article = Blog::find()
                             ->where([
                                 'link'    => $link,
                                 'user_id' => $company_id,
                             ])
                             ->with('comments')
                             ->one();
              $article->updateCounters([ 'view_count' => 1 ]);
d36bdac6   Administrator   17.02.16
301
  
fa284ab0   Yarik   test
302
303
304
              return $this->render('blog-view', [
                  'company' => $company,
                  'article' => $article,
d36bdac6   Administrator   17.02.16
305
  
fa284ab0   Yarik   test
306
307
              ]);
          }
eb7e82fb   Administrator   29.02.16
308
  
5014e10b   Yarik   test
309
          public function actionReview($company_id, $type = 'implementer')
fa284ab0   Yarik   test
310
311
          {
              $company = User::findOne($company_id);
eb7e82fb   Administrator   29.02.16
312
  
fa284ab0   Yarik   test
313
314
315
              return $this->render('review', [
                  'company' => $company,
              ]);
eb7e82fb   Administrator   29.02.16
316
317
          }
  
5014e10b   Yarik   test
318
          public function actionVacancyList($company_id, $type = 'implementer')
fa284ab0   Yarik   test
319
          {
eb7e82fb   Administrator   29.02.16
320
  
fa284ab0   Yarik   test
321
              $company = User::findOne($company_id);
eb7e82fb   Administrator   29.02.16
322
  
fa284ab0   Yarik   test
323
324
325
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
eb7e82fb   Administrator   29.02.16
326
  
fa284ab0   Yarik   test
327
              $query = $company->getVacancies();
eb7e82fb   Administrator   29.02.16
328
  
fa284ab0   Yarik   test
329
              $provider = new ActiveDataProvider([
a020aad3   Yarik   test
330
331
332
333
                  'query'      => $query,
                  'pagination' => [
                      'pageSize' => 5,
                  ],
fa284ab0   Yarik   test
334
335
336
337
338
339
340
                  'sort'       => [
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                          'name'     => SORT_ASC,
                      ],
                  ],
              ]);
eb7e82fb   Administrator   29.02.16
341
  
fa284ab0   Yarik   test
342
              return $this->render('vacancy-list', [
a020aad3   Yarik   test
343
344
                  'company'  => $company,
                  'provider' => $provider,
fa284ab0   Yarik   test
345
              ]);
eb7e82fb   Administrator   29.02.16
346
  
fa284ab0   Yarik   test
347
          }
eb7e82fb   Administrator   29.02.16
348
  
5014e10b   Yarik   test
349
          public function actionVacancyView($company_id, $link, $type = 'implementer')
fa284ab0   Yarik   test
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
          {
              $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
389
  
5014e10b   Yarik   test
390
          public function actionGallery($company_id, $type = 'implementer')
fa284ab0   Yarik   test
391
392
          {
              $company = User::findOne($company_id);
f6ea8941   Administrator   09.02.16
393
  
fa284ab0   Yarik   test
394
395
396
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
cda2c1c9   Administrator   add yii jquery
397
  
fa284ab0   Yarik   test
398
399
              $query = Gallery::find()
                              ->where([ 'user_id' => $company_id ]);
cda2c1c9   Administrator   add yii jquery
400
  
fa284ab0   Yarik   test
401
              $countQuery = clone $query;
cda2c1c9   Administrator   add yii jquery
402
  
fa284ab0   Yarik   test
403
404
405
406
              $pagination = new Pagination([
                  'totalCount' => $countQuery->count(),
                  'pageSize'   => 5,
              ]);
cda2c1c9   Administrator   add yii jquery
407
  
fa284ab0   Yarik   test
408
409
410
              $gallery = $query->offset($pagination->offset)
                               ->limit($pagination->limit)
                               ->all();
cda2c1c9   Administrator   add yii jquery
411
  
fa284ab0   Yarik   test
412
413
414
              $gallery = new ArrayDataProvider([
                  'allModels' => $gallery,
              ]);
fbdb1f1c   Yarik   test
415
  
fa284ab0   Yarik   test
416
              $videos = Fields::getData($company->id, Gallery::className(), 'youtube');
d36bdac6   Administrator   17.02.16
417
  
fa284ab0   Yarik   test
418
              $this->layout = 'gallery-company';
f6ea8941   Administrator   09.02.16
419
  
fa284ab0   Yarik   test
420
421
422
423
424
425
              return $this->render('gallery', [
                  'company'    => $company,
                  'gallery'    => $gallery,
                  'pagination' => $pagination,
                  'videos'     => $videos,
              ]);
d36bdac6   Administrator   17.02.16
426
          }
76f36646   Yarik   test
427
428
429
430
431
432
  
          public function beforeAction($action)
          {
              if(!empty(\Yii::$app->request->get('type'))) {
                  $action->controller->view->params['type'] = \Yii::$app->request->get('type');
              }
f7b97c9e   Yarik   test
433
434
435
436
437
438
439
440
441
              if(!empty(\Yii::$app->request->get('company_id'))) {
                  $user = User::findOne(\Yii::$app->request->get('company_id'));
                  if(!empty($user) && $user->type == 1) {
                      $queryParams = \Yii::$app->request->queryParams;
                      unset($queryParams['company_id']);
                      $queryParams['performer_id'] = $user->id;
                      return $this->redirect(array_merge(['performer/'.$action->id], $queryParams));
                  }
              }
76f36646   Yarik   test
442
443
              return parent::beforeAction($action);
          }
fbdb1f1c   Yarik   test
444
      }