Blame view

frontend/controllers/CollectionController.php 3.37 KB
d8c1a2e0   Yarik   Big commit artbox
1
2
3
4
  <?php
      
      namespace frontend\controllers;
      
cc658b4c   Yarik   Big commit
5
6
7
8
      use common\models\Project;
      use common\modules\product\models\Product;
      use common\modules\product\models\ProductVariant;
      use yii\helpers\ArrayHelper;
d8c1a2e0   Yarik   Big commit artbox
9
      use yii\web\Controller;
cc658b4c   Yarik   Big commit
10
      use yii\web\NotFoundHttpException;
d8c1a2e0   Yarik   Big commit artbox
11
12
      
      /**
36d1807a   Yarik   Big commit.
13
       * Article controller
d8c1a2e0   Yarik   Big commit artbox
14
       */
36d1807a   Yarik   Big commit.
15
      class CollectionController extends Controller
d8c1a2e0   Yarik   Big commit artbox
16
17
18
      {
          
          /**
36d1807a   Yarik   Big commit.
19
           * Displays article list.
1c948efc   Yarik   Category path fixes
20
           *
d8c1a2e0   Yarik   Big commit artbox
21
22
           * @return string
           */
cc658b4c   Yarik   Big commit
23
          public function actionIndex($id)
d8c1a2e0   Yarik   Big commit artbox
24
          {
cc658b4c   Yarik   Big commit
25
26
27
28
              /**
               * @var ProductVariant $variant
               */
              $collection = $this->findCollection($id);
f95ddf61   Yarik   "current" functio...
29
30
              $variants = $collection->variants;
              $variant = current($variants);
cc658b4c   Yarik   Big commit
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
              return $this->redirect([
                  'view',
                  'collection_id' => $collection->product_id,
                  'variant_id'    => $variant->product_variant_id,
              ]);
          }
          
          public function actionView($collection_id, $variant_id)
          {
              $collection = $this->findCollection($collection_id, $variant_id);
              $variants = $collection->variants;
              $variants = ArrayHelper::index($variants, 'product_variant_id');
              $variant = $variants[ $variant_id ];
              $projects = Project::find()
                                 ->joinWith('productToProject')
d55d2fe0   Yarik   Multilanguage
46
                                 ->joinWith('lang', true, 'INNER JOIN')
cc658b4c   Yarik   Big commit
47
48
49
                                 ->with('image')
                                 ->where([ 'product_to_project.product_variant_id' => $variant->product_variant_id ])
                                 ->all();
1c948efc   Yarik   Category path fixes
50
              $referer = $this->checkReferer() ? \Yii::$app->request->referrer : NULL;
cc658b4c   Yarik   Big commit
51
52
53
54
55
              return $this->render('view', [
                  'collection' => $collection,
                  'variants'   => $variants,
                  'variant'    => $variant,
                  'projects'   => $projects,
1c948efc   Yarik   Category path fixes
56
                  'referer'    => $referer,
cc658b4c   Yarik   Big commit
57
58
59
60
61
62
63
64
65
66
67
68
              ]);
          }
          
          /**
           * @param $id
           *
           * @return Product
           * @throws NotFoundHttpException
           */
          private function findCollection($id, $variant_id = NULL)
          {
              $model = Product::find()
d55d2fe0   Yarik   Multilanguage
69
70
71
72
                              ->joinWith('variants.lang', true, 'INNER JOIN')
                              ->joinWith('lang', true, 'INNER JOIN')
                              ->joinWith('brand.lang', true, 'INNER JOIN')
                              ->with('productSpec.lang')
cc658b4c   Yarik   Big commit
73
                              ->where([ 'product.product_id' => $id ])
d55d2fe0   Yarik   Multilanguage
74
                              ->andFilterWhere([ 'product_variant.product_variant_id' => $variant_id ])
cc658b4c   Yarik   Big commit
75
76
77
78
79
                              ->one();
              if(empty( $model )) {
                  throw new NotFoundHttpException();
              }
              return $model;
d8c1a2e0   Yarik   Big commit artbox
80
          }
1c948efc   Yarik   Category path fixes
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
          
          /**
           * @param string|NULL $referer
           *
           * @return bool
           */
          private function checkReferer(string $referer = NULL)
          {
              if($referer === NULL) {
                  $referer = \Yii::$app->request->referrer;
              }
              if(!empty( $referer )) {
                  $host = \Yii::$app->request->hostInfo;
                  if(strpos($referer, $host) === 0) {
                      return true;
                  }
              }
              return false;
          }
d8c1a2e0   Yarik   Big commit artbox
100
      }