Blame view

frontend/controllers/CompanyController.php 15.6 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
          public $layout = 'company';
  
          public $defaultAction = 'common';
  
          /**
           * @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
47
          }
d36bdac6   Administrator   17.02.16
48
  
5014e10b   Yarik   test
49
          public function actionCommon($company_id, $type = 'implementer')
fa284ab0   Yarik   test
50
          {
225c5168   Yarik   test
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
              /**
               * @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
68
  
225c5168   Yarik   test
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
              $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
85
86
87
                  'query'      => $company->getComments()
                                          ->with('rating')
                                          ->with('author'),
225c5168   Yarik   test
88
89
90
91
92
93
94
95
96
97
                  'sort'       => new Sort([
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                      ],
                  ]),
                  'pagination' => new Pagination([
                      'pageSize'  => 4,
                      'pageParam' => '',
                  ]),
              ]);
fa284ab0   Yarik   test
98
99
  
              return $this->render('common', [
225c5168   Yarik   test
100
101
102
103
                  'company'         => $company,
                  'projectProvider' => $projectProvider,
                  'blogProvider'    => $blogProvider,
                  'commentProvider' => $commentProvider,
fa284ab0   Yarik   test
104
105
              ]);
          }
d36bdac6   Administrator   17.02.16
106
  
76f36646   Yarik   test
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
          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
128
          public function actionPortfolio($company_id, $type = 'implementer')
fa284ab0   Yarik   test
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
          {
              $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
161
162
          }
  
5014e10b   Yarik   test
163
          public function actionPortfolioFilter($performer_id, $filter, $type = 'implementer')
fa284ab0   Yarik   test
164
165
166
167
168
169
170
171
172
173
174
175
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
          {
              $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
205
  
5014e10b   Yarik   test
206
          public function actionPortfolioView($company_id, $portfolio_id, $type = 'implementer')
fa284ab0   Yarik   test
207
208
209
210
211
212
213
214
215
216
217
          {
              $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
218
  
5014e10b   Yarik   test
219
          public function actionTeam($company_id, $type = 'implementer')
fa284ab0   Yarik   test
220
221
          {
              $company = User::findOne($company_id);
fa284ab0   Yarik   test
222
223
224
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
a020aad3   Yarik   test
225
              $comments = new ActiveDataProvider([
225c5168   Yarik   test
226
                  'query'      => $company->getComments(),
a020aad3   Yarik   test
227
                  'pagination' => [
225c5168   Yarik   test
228
                      'pageSize' => 4,
a020aad3   Yarik   test
229
230
                  ],
              ]);
fa284ab0   Yarik   test
231
232
              $query = Team::find()
                           ->where([ 'user_id' => $company_id ]);
a020aad3   Yarik   test
233
234
235
236
237
              $team = new ActiveDataProvider([
                  'query'      => $query,
                  'pagination' => [
                      'pageSize' => 9,
                  ],
fa284ab0   Yarik   test
238
              ]);
fa284ab0   Yarik   test
239
              return $this->render('team', [
a020aad3   Yarik   test
240
241
242
                  'company'  => $company,
                  'team'     => $team,
                  'comments' => $comments,
fa284ab0   Yarik   test
243
              ]);
d36bdac6   Administrator   17.02.16
244
245
          }
  
5014e10b   Yarik   test
246
          public function actionBlogList($company_id, $type = 'implementer')
fa284ab0   Yarik   test
247
248
          {
              $company = User::findOne($company_id);
d36bdac6   Administrator   17.02.16
249
  
fa284ab0   Yarik   test
250
251
252
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
d36bdac6   Administrator   17.02.16
253
  
42931736   Yarik   test
254
255
256
257
258
259
260
261
262
263
264
              $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
265
              ]);
f6ea8941   Administrator   09.02.16
266
  
fa284ab0   Yarik   test
267
268
269
              return $this->render('blog-list', [
                  'company'    => $company,
                  'blog'       => $blog,
fa284ab0   Yarik   test
270
              ]);
d36bdac6   Administrator   17.02.16
271
272
          }
  
5014e10b   Yarik   test
273
          public function actionBlogView($company_id, $link, $type = 'implementer')
fa284ab0   Yarik   test
274
275
          {
              $company = User::findOne($company_id);
d36bdac6   Administrator   17.02.16
276
  
fa284ab0   Yarik   test
277
278
279
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
d36bdac6   Administrator   17.02.16
280
  
4ff3ca88   Yarik   test
281
282
283
284
285
286
287
288
              $article = Blog::find()
                             ->where([
                                 'link'    => $link,
                                 'user_id' => $company_id,
                             ])
                             ->with('comments')
                             ->one();
              $article->updateCounters([ 'view_count' => 1 ]);
d36bdac6   Administrator   17.02.16
289
  
fa284ab0   Yarik   test
290
291
292
              return $this->render('blog-view', [
                  'company' => $company,
                  'article' => $article,
d36bdac6   Administrator   17.02.16
293
  
fa284ab0   Yarik   test
294
295
              ]);
          }
eb7e82fb   Administrator   29.02.16
296
  
5014e10b   Yarik   test
297
          public function actionReview($company_id, $type = 'implementer')
fa284ab0   Yarik   test
298
299
          {
              $company = User::findOne($company_id);
eb7e82fb   Administrator   29.02.16
300
  
fa284ab0   Yarik   test
301
302
303
              return $this->render('review', [
                  'company' => $company,
              ]);
eb7e82fb   Administrator   29.02.16
304
305
          }
  
5014e10b   Yarik   test
306
          public function actionVacancyList($company_id, $type = 'implementer')
fa284ab0   Yarik   test
307
          {
eb7e82fb   Administrator   29.02.16
308
  
fa284ab0   Yarik   test
309
              $company = User::findOne($company_id);
eb7e82fb   Administrator   29.02.16
310
  
fa284ab0   Yarik   test
311
312
313
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
eb7e82fb   Administrator   29.02.16
314
  
fa284ab0   Yarik   test
315
              $query = $company->getVacancies();
eb7e82fb   Administrator   29.02.16
316
  
fa284ab0   Yarik   test
317
              $provider = new ActiveDataProvider([
a020aad3   Yarik   test
318
319
320
321
                  'query'      => $query,
                  'pagination' => [
                      'pageSize' => 5,
                  ],
fa284ab0   Yarik   test
322
323
324
325
326
327
328
                  'sort'       => [
                      'defaultOrder' => [
                          'date_add' => SORT_DESC,
                          'name'     => SORT_ASC,
                      ],
                  ],
              ]);
eb7e82fb   Administrator   29.02.16
329
  
fa284ab0   Yarik   test
330
              return $this->render('vacancy-list', [
a020aad3   Yarik   test
331
332
                  'company'  => $company,
                  'provider' => $provider,
fa284ab0   Yarik   test
333
              ]);
eb7e82fb   Administrator   29.02.16
334
  
fa284ab0   Yarik   test
335
          }
eb7e82fb   Administrator   29.02.16
336
  
5014e10b   Yarik   test
337
          public function actionVacancyView($company_id, $link, $type = 'implementer')
fa284ab0   Yarik   test
338
339
340
341
342
343
344
345
346
347
348
349
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
          {
              $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
377
  
5014e10b   Yarik   test
378
          public function actionGallery($company_id, $type = 'implementer')
fa284ab0   Yarik   test
379
380
          {
              $company = User::findOne($company_id);
f6ea8941   Administrator   09.02.16
381
  
fa284ab0   Yarik   test
382
383
384
              if(!$company instanceof User) {
                  throw new BadRequestHttpException('Пользователь не найден');
              }
cda2c1c9   Administrator   add yii jquery
385
  
fa284ab0   Yarik   test
386
387
              $query = Gallery::find()
                              ->where([ 'user_id' => $company_id ]);
cda2c1c9   Administrator   add yii jquery
388
  
fa284ab0   Yarik   test
389
              $countQuery = clone $query;
cda2c1c9   Administrator   add yii jquery
390
  
fa284ab0   Yarik   test
391
392
393
394
              $pagination = new Pagination([
                  'totalCount' => $countQuery->count(),
                  'pageSize'   => 5,
              ]);
cda2c1c9   Administrator   add yii jquery
395
  
fa284ab0   Yarik   test
396
397
398
              $gallery = $query->offset($pagination->offset)
                               ->limit($pagination->limit)
                               ->all();
cda2c1c9   Administrator   add yii jquery
399
  
fa284ab0   Yarik   test
400
401
402
              $gallery = new ArrayDataProvider([
                  'allModels' => $gallery,
              ]);
fbdb1f1c   Yarik   test
403
  
fa284ab0   Yarik   test
404
              $videos = Fields::getData($company->id, Gallery::className(), 'youtube');
d36bdac6   Administrator   17.02.16
405
  
fa284ab0   Yarik   test
406
              $this->layout = 'gallery-company';
f6ea8941   Administrator   09.02.16
407
  
fa284ab0   Yarik   test
408
409
410
411
412
413
              return $this->render('gallery', [
                  'company'    => $company,
                  'gallery'    => $gallery,
                  'pagination' => $pagination,
                  'videos'     => $videos,
              ]);
d36bdac6   Administrator   17.02.16
414
          }
76f36646   Yarik   test
415
416
417
418
419
420
  
          public function beforeAction($action)
          {
              if(!empty(\Yii::$app->request->get('type'))) {
                  $action->controller->view->params['type'] = \Yii::$app->request->get('type');
              }
f7b97c9e   Yarik   test
421
422
423
424
425
426
427
428
429
              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
430
431
              return parent::beforeAction($action);
          }
fbdb1f1c   Yarik   test
432
      }