Blame view

frontend/controllers/PerformerController.php 15.2 KB
eb7e82fb   Administrator   29.02.16
1
2
3
4
5
6
7
8
  <?php

      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
      use common\models\PortfolioUser;

eb7e82fb   Administrator   29.02.16
10
      use Yii;

b4142e17   Yarik   test
11
      use yii\data\ActiveDataProvider;

eb7e82fb   Administrator   29.02.16
12
13
      use yii\data\ArrayDataProvider;

      use yii\data\Pagination;

42931736   Yarik   test
14
      use yii\data\Sort;

239b3249   Yarik   test
15
      use yii\db\ActiveQuery;

eb7e82fb   Administrator   29.02.16
16
17
18
19
      use yii\helpers\ArrayHelper;

      use yii\web\BadRequestHttpException;

      use yii\web\Controller;

      use common\models\User;

e82beebc   Yarik   test
20
      use yii\web\NotFoundHttpException;

eb7e82fb   Administrator   29.02.16
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  

      /**

       * Site controller

       */

      class PerformerController extends Controller

      {

  

          public $layout = 'performer';

  

          public $user;

  

          public $defaultAction = 'common';

  

          public function afterAction($action, $result)

          {

              if(!empty( $action->controller->actionParams[ 'performer_id' ] )) {

                  $performer_id = $action->controller->actionParams[ 'performer_id' ];

                  $user = User::findOne($performer_id);

                  if(!empty( $user->userInfo )) {

272ce289   Yarik   test
40
41
42
43
44
45
46
47
48
49
50
51
52
                      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));

                              }

                          }

                      }

eb7e82fb   Administrator   29.02.16
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
                      $user->userInfo->updateCounters([ 'view_count' => 1 ]);

                  }

              }

              return parent::afterAction($action, $result);

          }

  

          /**

           * @inheritdoc

           */

          public function actions()

          {

              return [

                  'error'   => [

                      'class' => 'yii\web\ErrorAction',

                  ],

                  'captcha' => [

                      'class'           => 'yii\captcha\CaptchaAction',

                      'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : NULL,

                  ],

              ];

          }

  

5014e10b   Yarik   test
75
          public function actionCommon($performer_id, $type = 'implementer')

eb7e82fb   Administrator   29.02.16
76
          {

38a6e1dd   Yarik   test
77
78
79
              $user = User::find()

                          ->where([ 'id' => $performer_id ])

                          ->with('jobs')

32ed90fd   Yarik   test
80
81
                          ->with('comments')

                          ->with('comments.rating')

38a6e1dd   Yarik   test
82
                          ->one();

eb7e82fb   Administrator   29.02.16
83
84
  

              if(!$user instanceof User) {

e82beebc   Yarik   test
85
                  throw new NotFoundHttpException('Пользователь не найден');

eb7e82fb   Administrator   29.02.16
86
87
88
              }

  

              $educations = Fields::getData($user->id, $user->className(), 'education');

225c5168   Yarik   test
89
90
              $developments = Fields::getData($user->id, $user->className(), 'development');

              $courses = Fields::getData($user->id, $user->className(), 'courses');

eb7e82fb   Administrator   29.02.16
91
92
93
              $phones = Fields::getData($user->id, $user->className(), 'phone');

              $sites = Fields::getData($user->id, $user->className(), 'site');

              $soft = implode(', ', ArrayHelper::getColumn(Fields::getData($user->id, $user->className(), 'soft'), 'soft'));

5d627502   Yarik   test
94
95
96
97
98
99
100
101
102
              $geography = $user->getPortfolios()

                                ->select([

                                    'count' => 'COUNT(*)',

                                    'city'  => 'city',

                                ])

                                ->groupBy('city')

                                ->asArray()

                                ->indexBy('city')

                                ->column();

eb7e82fb   Administrator   29.02.16
103
              return $this->render('common', [

225c5168   Yarik   test
104
105
106
107
108
109
110
                  'user'         => $user,

                  'educations'   => $educations,

                  'developments' => $developments,

                  'courses'      => $courses,

                  'phones'       => $phones,

                  'sites'        => $sites,

                  'soft'         => $soft,

5d627502   Yarik   test
111
                  'geography'    => $geography,

eb7e82fb   Administrator   29.02.16
112
113
114
115
              ]);

  

          }

  

5014e10b   Yarik   test
116
          public function actionPortfolio($performer_id, $type = 'implementer')

eb7e82fb   Administrator   29.02.16
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
          {

              $user = User::findOne($performer_id);

  

              if(!$user instanceof User) {

                  throw new BadRequestHttpException('Пользователь не найден');

              }

              $projects = ArrayHelper::getColumn($user->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([

4ff3ca88   Yarik   test
135
136
137
                  'allModels'  => $user->getPortfolios()

                                       ->orderBy('portfolio_id')

                                       ->all(),

eb7e82fb   Administrator   29.02.16
138
139
140
141
142
143
144
145
146
147
148
149
150
151
                  'pagination' => [

                      'pageSize' => 9,

                  ],

              ]);

  

              return $this->render('portfolio', [

                  'user'      => $user,

                  'filters'   => $filters,

                  'portfolio' => $portfolio,

                  'count'     => count($user->portfolios),

              ]);

  

          }

  

5014e10b   Yarik   test
152
          public function actionPortfolioFilter($performer_id, $filter, $type = 'implementer')

eb7e82fb   Administrator   29.02.16
153
154
155
156
157
158
159
160
161
162
163
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
          {

              $user = User::findOne($performer_id);

  

              if(!$user instanceof User) {

                  throw new BadRequestHttpException('Пользователь не найден');

              }

              $portfolios = ArrayHelper::getColumn($user->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', [

                  'user'      => $user,

                  'filters'   => $filters,

                  'portfolio' => $portfolio,

                  'filter_id' => $filter,

                  'count'     => count($user->portfolios),

              ]);

          }

  

38ffb9db   Yarik   test
195
          public function actionPortfolioView($performer_id, $portfolio_id, $portfolio_user = NULL, $type = 'implementer')

eb7e82fb   Administrator   29.02.16
196
197
198
199
          {

              $user = User::findOne($performer_id);

              $portfolio = $user->getPortfolios()

                                ->where([ 'portfolio_id' => $portfolio_id ])

239b3249   Yarik   test
200
201
202
203
204
205
206
207
                                ->with([

                                    'portfolioUsers' => function($query) {

                                        /**

                                         * @var ActiveQuery $query

                                         */

                                        $query->andWhere([ 'status' => 1 ]);

                                    },

                                ])

38ffb9db   Yarik   test
208
                                ->with('portfolioUsers.gallery')

eb7e82fb   Administrator   29.02.16
209
                                ->one();

e82beebc   Yarik   test
210
211
212
              if(empty($portfolio)) {

                  throw new NotFoundHttpException('Портфолио не найдено');

              }

38ffb9db   Yarik   test
213
214
              if(!empty( $portfolio_user )) {

                  $portfolio_user = PortfolioUser::find()

239b3249   Yarik   test
215
216
217
218
                                                 ->where([

                                                     'portfolio_user_id' => $portfolio_user,

                                                     'status'            => 1,

                                                 ])

38ffb9db   Yarik   test
219
220
221
                                                 ->with('gallery')

                                                 ->with('user')

                                                 ->one();

239b3249   Yarik   test
222
223
224
225
226
227
228
229
                  if(empty( $portfolio_user )) {

                      $this->redirect([

                          'portfolio-view',

                          'performer_id' => $performer_id,

                          'portfolio_id' => $portfolio_id,

                          'type'         => $type,

                      ]);

                  }

38ffb9db   Yarik   test
230
231
232
              } else {

                  $portfolio->updateCounters([ 'view_count' => 1 ]);

              }

eb7e82fb   Administrator   29.02.16
233
              return $this->render('portfolio-view', [

38ffb9db   Yarik   test
234
235
236
                  'user'           => $user,

                  'portfolio'      => $portfolio,

                  'portfolio_user' => $portfolio_user,

eb7e82fb   Administrator   29.02.16
237
238
239
              ]);

          }

  

5014e10b   Yarik   test
240
          public function actionProjects($performer_id, $type = 'implementer')

b4142e17   Yarik   test
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
          {

              $user = User::findOne($performer_id);

  

              if(!$user instanceof User) {

                  throw new BadRequestHttpException('Пользователь не найден');

              }

  

              $dataProvider = new ActiveDataProvider([

                  'query'      => $user->getProjects(),

                  'pagination' => [

                      'pageSize' => 10,

                  ],

              ]);

  

              return $this->render('project-list', [

                  'user'         => $user,

                  'dataProvider' => $dataProvider,

              ]);

          }

  

5014e10b   Yarik   test
261
          public function actionBlogList($performer_id, $type = 'implementer')

eb7e82fb   Administrator   29.02.16
262
263
264
265
266
267
268
          {

              $user = User::findOne($performer_id);

  

              if(!$user instanceof User) {

                  throw new BadRequestHttpException('Пользователь не найден');

              }

  

42931736   Yarik   test
269
              $blog = new ActiveDataProvider([

38ffb9db   Yarik   test
270
                  'query'      => $user->getBlog(),

42931736   Yarik   test
271
                  'pagination' => new Pagination([

c20d5820   Yarik   test
272
                      'pageSize' => 5,

42931736   Yarik   test
273
                  ]),

38ffb9db   Yarik   test
274
                  'sort'       => new Sort([

42931736   Yarik   test
275
276
                      'defaultOrder' => [

                          'date_add' => SORT_DESC,

38ffb9db   Yarik   test
277
                          'name'     => SORT_ASC,

42931736   Yarik   test
278
279
                      ],

                  ]),

eb7e82fb   Administrator   29.02.16
280
281
282
              ]);

  

              return $this->render('blog-list', [

38ffb9db   Yarik   test
283
284
                  'user' => $user,

                  'blog' => $blog,

eb7e82fb   Administrator   29.02.16
285
286
287
              ]);

          }

  

5014e10b   Yarik   test
288
          public function actionBlogView($performer_id, $link, $type = 'implementer')

eb7e82fb   Administrator   29.02.16
289
290
291
292
293
294
295
          {

              $user = User::findOne($performer_id);

  

              if(!$user instanceof User) {

                  throw new BadRequestHttpException('Пользователь не найден');

              }

  

4ff3ca88   Yarik   test
296
297
298
299
300
              $article = Blog::find()

                             ->where([

                                 'link'    => $link,

                                 'user_id' => $performer_id,

                             ])

38a6e1dd   Yarik   test
301
302
                             ->with('comments')

                             ->one();

e82beebc   Yarik   test
303
304
305
              if(empty($article)) {

                  throw new NotFoundHttpException('Запись не найдена');

              }

eb7e82fb   Administrator   29.02.16
306
307
308
309
310
              $article->updateCounters([ 'view_count' => 1 ]);

  

              return $this->render('blog-view', [

                  'user'    => $user,

                  'article' => $article,

eb7e82fb   Administrator   29.02.16
311
312
313
              ]);

          }

  

5014e10b   Yarik   test
314
          public function actionReview($performer_id, $type = 'implementer')

eb7e82fb   Administrator   29.02.16
315
316
317
318
319
320
321
322
323
324
325
326
          {

              $user = User::findOne($performer_id);

  

              if(!$user instanceof User) {

                  throw new BadRequestHttpException('Пользователь не найден');

              }

  

              return $this->render('review', [

                  'user' => $user,

              ]);

          }

  

5014e10b   Yarik   test
327
          public function actionWorkplace($performer_id, $type = 'implementer')

eb7e82fb   Administrator   29.02.16
328
          {

b4142e17   Yarik   test
329
330
331
332
              $user = User::find()

                          ->where([ 'id' => $performer_id ])

                          ->with('jobs')

                          ->one();

eb7e82fb   Administrator   29.02.16
333
334
335
336
337
338
339
340
341
              if(!$user instanceof User) {

                  throw new BadRequestHttpException('Пользователь не найден');

              }

  

              return $this->render('workplace', [

                  'user' => $user,

              ]);

          }

  

5014e10b   Yarik   test
342
          public function actionGallery($performer_id, $type = 'implementer')

eb7e82fb   Administrator   29.02.16
343
344
345
346
347
348
349
          {

              $user = User::findOne($performer_id);

  

              if(!$user instanceof User) {

                  throw new BadRequestHttpException('Пользователь не найден');

              }

  

f0a961be   Yarik   test
350
              $gallery = new ActiveDataProvider([

4a3f5562   Yarik   test
351
                  'query'      => $user->getGalleries()->andWhere(['not', ['photo' => '']])->andWhere(['not', ['photo' => NULL]]),

f0a961be   Yarik   test
352
353
354
                  'pagination' => [

                      'pageSize' => 5,

                  ],

eb7e82fb   Administrator   29.02.16
355
356
357
358
359
360
361
              ]);

  

              $videos = Fields::getData($user->id, Gallery::className(), 'youtube');

  

              $this->layout = 'gallery';

  

              return $this->render('gallery', [

38ffb9db   Yarik   test
362
363
364
                  'user'    => $user,

                  'gallery' => $gallery,

                  'videos'  => $videos,

eb7e82fb   Administrator   29.02.16
365
366
              ]);

          }

5014e10b   Yarik   test
367
368
369
  

          public function beforeAction($action)

          {

5d627502   Yarik   test
370
371
              if(!empty( \Yii::$app->request->get('type') )) {

                  $action->controller->view->params[ 'type' ] = \Yii::$app->request->get('type');

5014e10b   Yarik   test
372
              }

38ffb9db   Yarik   test
373
              if(!empty( \Yii::$app->request->get('performer_id') )) {

f7b97c9e   Yarik   test
374
                  $user = User::findOne(\Yii::$app->request->get('performer_id'));

38ffb9db   Yarik   test
375
                  if(!empty( $user ) && $user->type == 2) {

f7b97c9e   Yarik   test
376
                      $queryParams = \Yii::$app->request->queryParams;

38ffb9db   Yarik   test
377
378
379
                      unset( $queryParams[ 'performer_id' ] );

                      $queryParams[ 'company_id' ] = $user->id;

                      return $this->redirect(array_merge([ 'company/' . $action->id ], $queryParams));

f7b97c9e   Yarik   test
380
381
                  }

              }

5014e10b   Yarik   test
382
383
              return parent::beforeAction($action);

          }

eb7e82fb   Administrator   29.02.16
384
      }