d8c1a2e0
Yarik
Big commit artbox
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?php
namespace common\models;
use common\modules\product\models\ProductVariant;
use yii\base\Component;
use yii\web\NotFoundHttpException;
class Basket extends Component
{
public $session;
|
d55d2fe0
Yarik
Multilanguage
|
14
|
public function __construct(array $config = [])
|
d8c1a2e0
Yarik
Big commit artbox
|
15
16
17
|
{
$this->session = \Yii::$app->session;
if(!$this->session->has('basket')) {
|
d55d2fe0
Yarik
Multilanguage
|
18
|
$this->session->set('basket', []);
|
d8c1a2e0
Yarik
Big commit artbox
|
19
20
21
22
|
}
parent::__construct($config);
}
|
cc658b4c
Yarik
Big commit
|
23
|
public function add(int $product_variant_id)
|
d8c1a2e0
Yarik
Big commit artbox
|
24
25
26
|
{
$data = $this->getData();
if(array_key_exists($product_variant_id, $data)) {
|
cc658b4c
Yarik
Big commit
|
27
|
$data[ $product_variant_id ][ 'count' ] = 1;
|
d55d2fe0
Yarik
Multilanguage
|
28
29
|
if($data[ $product_variant_id ][ 'count' ] <= 0) {
unset( $data[ $product_variant_id ] );
|
d8c1a2e0
Yarik
Big commit artbox
|
30
31
|
}
} else {
|
cc658b4c
Yarik
Big commit
|
32
33
34
35
36
|
if($this->findModel($product_variant_id)) {
$data[ $product_variant_id ] = [
'count' => 1,
];
}
|
d8c1a2e0
Yarik
Big commit artbox
|
37
38
39
|
}
$this->setData($data);
}
|
d55d2fe0
Yarik
Multilanguage
|
40
|
|
cc658b4c
Yarik
Big commit
|
41
|
private function set(int $product_variant_id, int $count)
|
d8c1a2e0
Yarik
Big commit artbox
|
42
43
44
45
|
{
$data = $this->getData();
if(array_key_exists($product_variant_id, $data)) {
$data[ $product_variant_id ][ 'count' ] = $count;
|
d55d2fe0
Yarik
Multilanguage
|
46
47
|
if($data[ $product_variant_id ][ 'count' ] <= 0) {
unset( $data[ $product_variant_id ] );
|
d8c1a2e0
Yarik
Big commit artbox
|
48
|
}
|
cc658b4c
Yarik
Big commit
|
49
50
51
52
53
54
|
} elseif($count > 0) {
if($this->findModel($product_variant_id)) {
$data[ $product_variant_id ] = [
'count' => $count,
];
}
|
d8c1a2e0
Yarik
Big commit artbox
|
55
56
57
58
|
}
$this->setData($data);
}
|
d55d2fe0
Yarik
Multilanguage
|
59
60
|
public function delete(int $product_variant_id)
{
|
cc658b4c
Yarik
Big commit
|
61
62
63
|
$this->set($product_variant_id, 0);
}
|
d8c1a2e0
Yarik
Big commit artbox
|
64
65
66
67
68
|
public function getData(): array
{
return $this->session->get('basket');
}
|
d55d2fe0
Yarik
Multilanguage
|
69
70
|
public function getItem(int $product_variant_id)
{
|
d8c1a2e0
Yarik
Big commit artbox
|
71
|
$data = $this->getData();
|
d55d2fe0
Yarik
Multilanguage
|
72
73
|
if(!empty( $data[ $product_variant_id ] )) {
return $data[ $product_variant_id ];
|
d8c1a2e0
Yarik
Big commit artbox
|
74
75
76
77
78
79
80
81
82
83
|
} else {
return false;
}
}
public function setData(array $data)
{
$this->session->set('basket', $data);
}
|
d55d2fe0
Yarik
Multilanguage
|
84
85
|
public function getCount(): int
{
|
d8c1a2e0
Yarik
Big commit artbox
|
86
87
88
89
90
91
|
$data = $this->getData();
return count($data);
}
public function findModel(int $product_variant_id): ProductVariant
{
|
cc658b4c
Yarik
Big commit
|
92
93
94
|
/**
* @var ProductVariant $model
*/
|
d8c1a2e0
Yarik
Big commit artbox
|
95
|
$model = ProductVariant::find()
|
d55d2fe0
Yarik
Multilanguage
|
96
97
|
->where([ 'product_variant.product_variant_id' => $product_variant_id ])
->joinWith('lang', true, 'INNER JOIN')
|
d8c1a2e0
Yarik
Big commit artbox
|
98
99
|
->one();
if(empty( $model )) {
|
d55d2fe0
Yarik
Multilanguage
|
100
|
throw new NotFoundHttpException(\Yii::t('app', 'Product not found'));
|
d8c1a2e0
Yarik
Big commit artbox
|
101
102
103
104
105
106
107
108
|
} else {
return $model;
}
}
public function findModels(array $product_variant_ids)
{
return ProductVariant::find()
|
d55d2fe0
Yarik
Multilanguage
|
109
110
|
->where([ 'product_variant.product_variant_id' => $product_variant_ids ])
->joinWith('lang', true, 'INNER JOIN')
|
d8c1a2e0
Yarik
Big commit artbox
|
111
112
113
114
115
116
117
|
->with([
'product',
'image',
])
->all();
}
|
cc658b4c
Yarik
Big commit
|
118
119
120
121
122
|
public function clear()
{
$this->setData([]);
}
|
d8c1a2e0
Yarik
Big commit artbox
|
123
|
}
|