Blame view

frontend/controllers/SiteController.php 14.9 KB
c237629a   Anastasia   first commit
1
2
3
  <?php
      namespace frontend\controllers;
      
f53044e7   alex   123
4
      use artbox\core\models\Alias;
c237629a   Anastasia   first commit
5
      use artbox\core\models\Feedback;
f53044e7   alex   123
6
      use artbox\core\models\Language;
b60a88b8   Anastasia   - main page
7
      use common\models\Comment;
ed4cbcdd   Anastasia   - main package of...
8
      use common\models\Package;
cc2da9cc   Anastasia   - question page
9
      use common\models\Question;
b60a88b8   Anastasia   - main page
10
      use common\models\Service;
c237629a   Anastasia   first commit
11
12
13
      use common\models\Settings;
      use common\models\slider\Slide;
      use Yii;
cc2da9cc   Anastasia   - question page
14
      use yii\data\ActiveDataProvider;
b60a88b8   Anastasia   - main page
15
16
      use yii\db\ActiveQuery;
      use yii\db\Expression;
c237629a   Anastasia   first commit
17
      use yii\filters\VerbFilter;
d578e98d   Anastasia   alias
18
19
      use yii\helpers\ArrayHelper;
      use yii\helpers\Json;
c237629a   Anastasia   first commit
20
21
22
23
      use yii\swiftmailer\Mailer;
      use yii\web\BadRequestHttpException;
      use yii\web\Controller;
      use yii\web\Response;
f53044e7   alex   123
24
      use yii\helpers\VarDumper as d;
c237629a   Anastasia   first commit
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
      
      /**
       * Site controller
       */
      class SiteController extends Controller
      {
          /**
           * @inheritdoc
           */
          public function actions()
          {
              return [
                  'error' => [
                      'class' => 'yii\web\ErrorAction',
                  ],
              ];
          }
          
          /**
           * @inheritdoc
           */
          public function behaviors()
          {
              return [
                  'verbs' => [
                      'class'   => VerbFilter::className(),
                      'actions' => [
                          'feedback' => [ 'post' ],
                      ],
                  ],
              ];
          }
          
          /**
           * Displays homepage.
           *
           * @return mixed
           */
          public function actionIndex()
          {
74783874   Anastasia   - debug
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
              $slides = Slide::find()
                             ->with('language')
                             ->where([ 'status' => true ])
                             ->orderBy('sort')
                             ->with('language.image')
                             ->all();
              $services = Service::find()
                                 ->where(
                                     [
                                         'is not',
                                         'image_id',
                                         null,
                                     ]
                                 )
                                 ->andWhere(
                                     [
                                         'status' => true,
                                         'level'  => 0,
                                     ]
                                 )
                                 ->with(
                                     [
                                         'image',
                                         'language.alias',
                                         'services' => function (ActiveQuery $query) {
                                             $query->where([ 'status' => true ])
                                                   ->with([ 'language.alias' ]);
                                         },
                                     ]
                                 )
                                 ->orderBy([ new Expression('sort ASC NULLS LAST') ])
                                 ->all();
              $comments = Comment::find()
                                 ->where(
                                     [
                                         'status'  => true,
                                         'on_main' => true,
                                     ]
                                 )
                                 ->limit(6)
                                 ->all();
01e892e9   alex   подкорректировал ...
106
  
74783874   Anastasia   - debug
107
108
109
110
111
112
113
114
115
116
117
              $package = Package::find()
                                ->with(
                                    [
                                        'language.alias',
                                        'image',
                                    ]
                                )
                                ->where([ 'status' => true ])
                                ->orderBy('sort')
                                ->limit(3)
                                ->all();
b60a88b8   Anastasia   - main page
118
              $settings = Settings::getInstance();
74783874   Anastasia   - debug
119
120
              return $this->render(
                  'index',
b60a88b8   Anastasia   - main page
121
                  [
74783874   Anastasia   - debug
122
123
124
125
126
                      'slides'   => $slides,
                      'services' => $services,
                      'comments' => $comments,
                      'settings' => $settings,
                      'package'  => $package,
b60a88b8   Anastasia   - main page
127
                  ]
74783874   Anastasia   - debug
128
              );
c237629a   Anastasia   first commit
129
130
131
132
133
134
135
136
137
138
          }
          
          /**
           * Displays contact page.
           *
           * @return mixed
           */
          public function actionContact()
          {
              $contact = new Feedback();
b53dc2b2   Anastasia   - bug fix
139
              $settings = Settings::getInstance();
c237629a   Anastasia   first commit
140
141
142
              return $this->render(
                  'contact',
                  [
74783874   Anastasia   - debug
143
144
                      'contact'  => $contact,
                      'settings' => $settings,
c237629a   Anastasia   first commit
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
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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
                  ]
              );
          }
          
          /**
           * Displays about page.
           *
           * @return mixed
           */
          public function actionAbout()
          {
              return $this->render('about');
          }
          
          /**
           * Action to view robots.txt file dinamycli
           *
           * @return string
           */
          public function actionRobots()
          {
              $response = \Yii::$app->response;
              /**
               * @var Settings $settings
               */
              $settings = Settings::find()
                                  ->one();
              $temp = tmpfile();
              fwrite($temp, $settings->robots);
              $meta = stream_get_meta_data($temp);
              $response->format = $response::FORMAT_RAW;
              $response->headers->set('Content-Type', 'text/plain');
              return $this->renderFile($meta[ 'uri' ]);
          }
          
          public function actionFeedback()
          {
              Yii::$app->response->format = Response::FORMAT_JSON;
              
              /**
               * @var Mailer $mailer
               */
              $mailer = \Yii::$app->get('smtpmailer');
              $settings = Settings::getInstance();
              
              if (empty(Yii::$app->request->post())) {
                  throw new BadRequestHttpException();
              } else {
                  $model = new Feedback();
                  if ($model->load(Yii::$app->request->post()) && $model->save()) {
                      
                      $mailer->compose(
                          'feedback',
                          [
                              'model' => $model,
                          ]
                      )
                             ->setFrom('artbox@domain.com')
                             ->setTo($settings->email)
                             ->setSubject(\Yii::t('app', 'Feedback'))
                             ->send();
                      
                      return [
                          'success' => true,
                          'message' => 'Success message',
                          'alert'   => '<div class="alert alert-success">
              <h3>Success</h3>
              <p>
                Success text
              </p>
            </div>',
                      ];
                  } else {
                      return [
                          'success' => false,
                          'error'   => $model->errors,
                      ];
                  }
              }
          }
74783874   Anastasia   - debug
225
226
227
228
229
230
231
232
233
234
235
236
237
          public function actionPrices()
          {
              $services = Service::find()
                                 ->innerJoinWith(
                                     [
                                         'prices' => function (ActiveQuery $query) {
                                             $query->where([ 'price.status' => true ])
                                                   ->with('language');
                                         },
                                     ]
                                 )
                                 ->with('language.alias')
                                 ->all();
43a24059   Anastasia   - servives
238
              
74783874   Anastasia   - debug
239
240
241
242
243
244
              return $this->render(
                  'prices',
                  [
                      'services' => $services,
                  ]
              );
43a24059   Anastasia   - servives
245
          }
b60a88b8   Anastasia   - main page
246
          
74783874   Anastasia   - debug
247
248
          public function actionPage1()
          {
b60a88b8   Anastasia   - main page
249
250
              return $this->render('page1');
          }
17604d85   alex   Merge branch 'mas...
251
  
74783874   Anastasia   - debug
252
253
          public function actionPage2()
          {
b60a88b8   Anastasia   - main page
254
255
              return $this->render('page2');
          }
8509f2d0   Виталий   sidebar menu chil...
256
  
74783874   Anastasia   - debug
257
258
          public function actionPage22()
          {
8509f2d0   Виталий   sidebar menu chil...
259
260
261
              return $this->render('page2-2');
          }
  
74783874   Anastasia   - debug
262
263
          public function actionPage23()
          {
8509f2d0   Виталий   sidebar menu chil...
264
265
              return $this->render('page2-3');
          }
17604d85   alex   Merge branch 'mas...
266
  
74783874   Anastasia   - debug
267
268
          public function actionPage3()
          {
b60a88b8   Anastasia   - main page
269
270
              return $this->render('page3');
          }
17604d85   alex   Merge branch 'mas...
271
  
74783874   Anastasia   - debug
272
273
          public function actionPage4()
          {
b60a88b8   Anastasia   - main page
274
275
              return $this->render('page4');
          }
17604d85   alex   Merge branch 'mas...
276
  
74783874   Anastasia   - debug
277
278
          public function actionPage5()
          {
5c877232   Виталий   comments-page
279
              return $this->render('page5');
28f4ab6b   Anastasia   add pages
280
          }
17604d85   alex   Merge branch 'mas...
281
  
74783874   Anastasia   - debug
282
283
          public function actionPage6()
          {
5c877232   Виталий   comments-page
284
              return $this->render('page6');
28f4ab6b   Anastasia   add pages
285
          }
d5d041dd   alex   Изменил несколько...
286
  
cc2da9cc   Anastasia   - question page
287
          
d5d041dd   alex   Изменил несколько...
288
289
  
          # Вопрос/ответ
74783874   Anastasia   - debug
290
291
          public function actionQuestions($service_id = null)
          {
f53044e7   alex   123
292
              Language::getCurrent();
cc2da9cc   Anastasia   - question page
293
              
74783874   Anastasia   - debug
294
              if (\Yii::$app->request->isAjax) {
cc2da9cc   Anastasia   - question page
295
296
297
                  Yii::$app->response->format = Response::FORMAT_JSON;
                  $model = new Question();
                  $model->scenario = Question::SCENARIO_QUESTION;
74783874   Anastasia   - debug
298
                  if ($model->load(\Yii::$app->request->post()) and $model->save()) {
cc2da9cc   Anastasia   - question page
299
                      return [
74783874   Anastasia   - debug
300
301
                          'status'  => true,
                          'message' => 'Спасибо за Ваш вопрос',
cc2da9cc   Anastasia   - question page
302
                      ];
74783874   Anastasia   - debug
303
                  } else {
cc2da9cc   Anastasia   - question page
304
                      return [
74783874   Anastasia   - debug
305
306
                          'status'  => false,
                          'message' => 'Ошибка',
cc2da9cc   Anastasia   - question page
307
308
309
                      ];
                  }
              }
74783874   Anastasia   - debug
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
              $dataProvider = new ActiveDataProvider(
                  [
                      'query'      => Question::find()
                                              ->where([ 'status' => true ])
                                              ->andFilterWhere([ 'service_id' => $service_id ])
                                              ->with([ 'doctor.language' ]),
                      'pagination' => [
                          'pageSize' => 10,
                      ],
                  ]
              );
              $services = Service::find()
                                 ->where([ 'status' => true ])
                                 ->andWhere([ 'parent_id' => null ])
                                 ->with('language')
                                 ->all();
d578e98d   Anastasia   alias
326
              $route = [];
74783874   Anastasia   - debug
327
328
329
330
331
332
333
              foreach ($services as $service) {
                  $route[] = Json::encode(
                      [
                          'site/questions',
                          'service_id' => $service->id,
                      ]
                  );
d578e98d   Anastasia   alias
334
              }
cb16bae6   Anastasia   - alias on questi...
335
              $route [] = '{"0":"site/questions"}';
74783874   Anastasia   - debug
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
              $alias = Alias::find()
                            ->where([ 'route' => $route ])
                            ->andWhere([ 'language_id' => Language::getCurrent()->id ])
                            ->indexBy('route')
                            ->asArray()
                            ->all();
              return $this->render(
                  'questions',
                  [
                      'dataProvider' => $dataProvider,
                      'services'     => $services,
                      'service_id'   => $service_id,
                      'alias'        => $alias,
                  ]
              );
cc2da9cc   Anastasia   - question page
351
          }
01e892e9   alex   подкорректировал ...
352
  
74783874   Anastasia   - debug
353
354
          public function actionComments($service_id = null)
          {
17604d85   alex   Merge branch 'mas...
355
  
74783874   Anastasia   - debug
356
              if (\Yii::$app->request->isAjax) {
fab1487f   Anastasia   - comments
357
358
                  Yii::$app->response->format = Response::FORMAT_JSON;
                  $model = new Comment();
01e892e9   alex   подкорректировал ...
359
                  #if ($model->load(\Yii::$app->request->post()) and $model->save()){
74783874   Anastasia   - debug
360
361
362
363
364
                  if ($model->load(\Yii::$app->request->post())) {
                      if (!$model->entity_id) {
                          $model->entity_id = 0;
                      }
                      $model->entity = Service::className();
01e892e9   alex   подкорректировал ...
365
                      $model->save();
fab1487f   Anastasia   - comments
366
                      return [
74783874   Anastasia   - debug
367
368
                          'status'  => true,
                          'message' => 'Спасибо за Ваш отзыв. После проверки модератором он появиться на сайте',
fab1487f   Anastasia   - comments
369
                      ];
74783874   Anastasia   - debug
370
                  } else {
fab1487f   Anastasia   - comments
371
                      return [
74783874   Anastasia   - debug
372
373
                          'status'  => false,
                          'message' => 'Ошибка',
fab1487f   Anastasia   - comments
374
375
376
                      ];
                  }
              }
01e892e9   alex   подкорректировал ...
377
  
01e892e9   alex   подкорректировал ...
378
379
380
              # подкоректировал логику для сохранрения в БД/выдачи вопросов с категории "Общие вопросы"
              # закрепил за ними entity_id=0
              if($service_id==null)$service_id=0;
fab1487f   Anastasia   - comments
381
              $dataProvider = new ActiveDataProvider([
01e892e9   alex   подкорректировал ...
382
383
384
                                                         'query' => Comment::find()
                                                             ->where(['status' => true])
                                                             ->andWhere(['entity' => Service::className()])
098b35d6   alex   закрыл сайт в noi...
385
386
387
                                                             ->andFilterWhere(['entity_id' => $service_id])//'SELECT * FROM \"comment\" WHERE (\"status\"=TRUE) AND (\"entity\"=\'common\\models\\Service\')'
                                                             ->orderBy(['id'=>SORT_DESC]),
                                                          'pagination' => [
fab1487f   Anastasia   - comments
388
389
                                                             'pageSize' => 10,
                                                         ],
098b35d6   alex   закрыл сайт в noi...
390
  
fab1487f   Anastasia   - comments
391
392
                                                     ]);
              $services = Service::find()->where(['status' => true])->andWhere(['parent_id' => null])->all();
01e892e9   alex   подкорректировал ...
393
  
fab1487f   Anastasia   - comments
394
395
396
397
398
              return $this->render('comments', [
                  'dataProvider' => $dataProvider,
                  'services'  => $services,
                  'service_id' => $service_id
              ]);
74783874   Anastasia   - debug
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
              if ($service_id == null) {
                  $service_id = 0;
              }
              $dataProvider = new ActiveDataProvider(
                  [
                      'query'      => Comment::find()
                                             ->where([ 'status' => true ])
                                             ->andWhere([ 'entity' => Service::className() ])
                                             ->andFilterWhere([ 'entity_id' => $service_id ]),
                      //'SELECT * FROM \"comment\" WHERE (\"status\"=TRUE) AND (\"entity\"=\'common\\models\\Service\')'
                      'pagination' => [
                          'pageSize' => 10,
                      ],
                  ]
              );
              $services = Service::find()
                                 ->where([ 'status' => true ])
                                 ->andWhere([ 'parent_id' => null ])
                                 ->with('language')
                                 ->all();
17604d85   alex   Merge branch 'mas...
419
  
74783874   Anastasia   - debug
420
421
422
423
424
425
426
427
              return $this->render(
                  'comments',
                  [
                      'dataProvider' => $dataProvider,
                      'services'     => $services,
                      'service_id'   => $service_id,
                  ]
              );
fab1487f   Anastasia   - comments
428
          }
c237629a   Anastasia   first commit
429
      }