1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* TechDivision\Import\Product\Bundle\Observers\BundleSelectionPriceObserver |
5
|
|
|
* |
6
|
|
|
* NOTICE OF LICENSE |
7
|
|
|
* |
8
|
|
|
* This source file is subject to the Open Software License (OSL 3.0) |
9
|
|
|
* that is available through the world-wide-web at this URL: |
10
|
|
|
* http://opensource.org/licenses/osl-3.0.php |
11
|
|
|
* |
12
|
|
|
* PHP version 5 |
13
|
|
|
* |
14
|
|
|
* @author Tim Wagner <[email protected]> |
15
|
|
|
* @copyright 2016 TechDivision GmbH <[email protected]> |
16
|
|
|
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) |
17
|
|
|
* @link https://github.com/techdivision/import-product-bundle |
18
|
|
|
* @link http://www.techdivision.com |
19
|
|
|
*/ |
20
|
|
|
|
21
|
|
|
namespace TechDivision\Import\Product\Bundle\Observers; |
22
|
|
|
|
23
|
|
|
use TechDivision\Import\Utils\StoreViewCodes; |
24
|
|
|
use TechDivision\Import\Product\Bundle\Utils\ColumnKeys; |
25
|
|
|
use TechDivision\Import\Product\Bundle\Utils\MemberNames; |
26
|
|
|
use TechDivision\Import\Product\Observers\AbstractProductImportObserver; |
27
|
|
|
use TechDivision\Import\Product\Bundle\Services\ProductBundleProcessorInterface; |
28
|
|
|
|
29
|
|
|
/** |
30
|
|
|
* Oberserver that provides functionality for the bundle selection price replace operation. |
31
|
|
|
* |
32
|
|
|
* @author Tim Wagner <[email protected]> |
33
|
|
|
* @copyright 2016 TechDivision GmbH <[email protected]> |
34
|
|
|
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) |
35
|
|
|
* @link https://github.com/techdivision/import-product-bundle |
36
|
|
|
* @link http://www.techdivision.com |
37
|
|
|
*/ |
38
|
|
|
class BundleSelectionPriceObserver extends AbstractProductImportObserver |
39
|
|
|
{ |
40
|
|
|
|
41
|
|
|
/** |
42
|
|
|
* The product bundle processor instance. |
43
|
|
|
* |
44
|
|
|
* @var \TechDivision\Import\Product\Bundle\Services\ProductBundleProcessorInterface |
45
|
|
|
*/ |
46
|
|
|
protected $productBundleProcessor; |
47
|
|
|
|
48
|
|
|
/** |
49
|
|
|
* Initialize the observer with the passed product bundle processor instance. |
50
|
|
|
* |
51
|
|
|
* @param \TechDivision\Import\Product\Bundle\Services\ProductBundleProcessorInterface $productBundleProcessor The product bundle processor instance |
52
|
|
|
*/ |
53
|
|
|
public function __construct(ProductBundleProcessorInterface $productBundleProcessor) |
54
|
|
|
{ |
55
|
|
|
$this->productBundleProcessor = $productBundleProcessor; |
56
|
|
|
} |
57
|
|
|
|
58
|
|
|
/** |
59
|
|
|
* Return's the product bundle processor instance. |
60
|
|
|
* |
61
|
|
|
* @return \TechDivision\Import\Product\Bundle\Services\ProductBundleProcessorInterface The product bundle processor instance |
62
|
|
|
*/ |
63
|
|
|
protected function getProductBundleProcessor() |
64
|
|
|
{ |
65
|
|
|
return $this->productBundleProcessor; |
66
|
|
|
} |
67
|
|
|
|
68
|
|
|
/** |
69
|
|
|
* Process the observer's business logic. |
70
|
|
|
* |
71
|
|
|
* @return array The processed row |
72
|
|
|
*/ |
73
|
|
|
protected function process() |
74
|
|
|
{ |
75
|
|
|
|
76
|
|
|
// prepare the store view code |
77
|
|
|
$this->prepareStoreViewCode($this->getRow()); |
|
|
|
|
78
|
|
|
|
79
|
|
|
// load the store view code |
80
|
|
|
$storeViewCode = $this->getStoreViewCode(StoreViewCodes::ADMIN); |
81
|
|
|
|
82
|
|
|
// check if we're in default store |
83
|
|
|
if (!$this->isDefaultStore($storeViewCode)) { |
84
|
|
|
// prepare and initialize the bundle selection price |
85
|
|
|
$productBundleSelectionPrice = $this->initializeBundleSelectionPrice($this->prepareAttributes()); |
86
|
|
|
|
87
|
|
|
// persist the bundle selection price |
88
|
|
|
$this->persistProductBundleSelectionPrice($productBundleSelectionPrice); |
89
|
|
|
} |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
/** |
93
|
|
|
* Prepare the attributes of the entity that has to be persisted. |
94
|
|
|
* |
95
|
|
|
* @return array The prepared attributes |
96
|
|
|
*/ |
97
|
|
|
protected function prepareAttributes() |
98
|
|
|
{ |
99
|
|
|
|
100
|
|
|
// load the store view code |
101
|
|
|
$storeViewCode = $this->getStoreViewCode(StoreViewCodes::ADMIN); |
102
|
|
|
|
103
|
|
|
// load the store/website ID |
104
|
|
|
$store = $this->getStoreByStoreCode($storeViewCode); |
105
|
|
|
$websiteId = $store[MemberNames::WEBSITE_ID]; |
106
|
|
|
|
107
|
|
|
// load the default values |
108
|
|
|
$selectionPriceValue = $this->getValue(ColumnKeys::BUNDLE_VALUE_PRICE); |
109
|
|
|
|
110
|
|
|
try { |
111
|
|
|
// try to load the selection price type |
112
|
|
|
$selectionPriceType = $this->mapPriceType($this->getValue(ColumnKeys::BUNDLE_VALUE_PRICE_TYPE)); |
113
|
|
|
} catch (\Exception $e) { |
114
|
|
|
throw $this->wrapException(array(ColumnKeys::BUNDLE_VALUE_PRICE_TYPE), $e); |
|
|
|
|
115
|
|
|
} |
116
|
|
|
|
117
|
|
|
try { |
118
|
|
|
// try to load the selection ID for the child SKU |
119
|
|
|
$selectionId = $this->getChildSkuSelectionMapping($this->getValue(ColumnKeys::BUNDLE_VALUE_SKU)); |
120
|
|
|
} catch (\Exception $e) { |
121
|
|
|
throw $this->wrapException(array(ColumnKeys::BUNDLE_VALUE_SKU), $e); |
|
|
|
|
122
|
|
|
} |
123
|
|
|
|
124
|
|
|
// return the prepared bundle selection price |
125
|
|
|
return $this->initializeEntity( |
126
|
|
|
array( |
127
|
|
|
MemberNames::SELECTION_ID => $selectionId, |
128
|
|
|
MemberNames::WEBSITE_ID => $websiteId, |
129
|
|
|
MemberNames::SELECTION_PRICE_TYPE => $selectionPriceType, |
130
|
|
|
MemberNames::SELECTION_PRICE_VALUE => $selectionPriceValue |
131
|
|
|
) |
132
|
|
|
); |
133
|
|
|
} |
134
|
|
|
|
135
|
|
|
/** |
136
|
|
|
* Initialize the bundle selection price with the passed attributes and returns an instance. |
137
|
|
|
* |
138
|
|
|
* @param array $attr The bundle selection price attributes |
139
|
|
|
* |
140
|
|
|
* @return array The initialized bundle selection price |
141
|
|
|
*/ |
142
|
|
|
protected function initializeBundleSelectionPrice(array $attr) |
143
|
|
|
{ |
144
|
|
|
return $attr; |
145
|
|
|
} |
146
|
|
|
|
147
|
|
|
/** |
148
|
|
|
* Return's the mapping for the passed price type. |
149
|
|
|
* |
150
|
|
|
* @param string $priceType The price type to map |
151
|
|
|
* |
152
|
|
|
* @return integer The mapped price type |
153
|
|
|
* @throws \Exception Is thrown, if the passed price type can't be mapped |
154
|
|
|
*/ |
155
|
|
|
protected function mapPriceType($priceType) |
156
|
|
|
{ |
157
|
|
|
return $this->getSubject()->mapPriceType($priceType); |
|
|
|
|
158
|
|
|
} |
159
|
|
|
|
160
|
|
|
/** |
161
|
|
|
* Return's the selection ID for the passed child SKU. |
162
|
|
|
* |
163
|
|
|
* @param string $childSku The child SKU to return the selection ID for |
164
|
|
|
* |
165
|
|
|
* @return integer The last created selection ID |
166
|
|
|
*/ |
167
|
|
|
protected function getChildSkuSelectionMapping($childSku) |
168
|
|
|
{ |
169
|
|
|
return $this->getSubject()->getChildSkuSelectionMapping($childSku); |
|
|
|
|
170
|
|
|
} |
171
|
|
|
|
172
|
|
|
/** |
173
|
|
|
* Query whether or not the passed store view code is the default one. |
174
|
|
|
* |
175
|
|
|
* @param string $storeViewCode The store view code to be queried |
176
|
|
|
* |
177
|
|
|
* @return boolean TRUE if the passed store view code is the default one, else FALSE |
178
|
|
|
*/ |
179
|
|
|
protected function isDefaultStore($storeViewCode) |
180
|
|
|
{ |
181
|
|
|
return StoreViewCodes::ADMIN === strtolower($storeViewCode); |
182
|
|
|
} |
183
|
|
|
|
184
|
|
|
/** |
185
|
|
|
* Return's the store for the passed store code. |
186
|
|
|
* |
187
|
|
|
* @param string $storeCode The store code to return the store for |
188
|
|
|
* |
189
|
|
|
* @return array The requested store |
190
|
|
|
* @throws \Exception Is thrown, if the requested store is not available |
191
|
|
|
*/ |
192
|
|
|
protected function getStoreByStoreCode($storeCode) |
193
|
|
|
{ |
194
|
|
|
return $this->getSubject()->getStoreByStoreCode($storeCode); |
|
|
|
|
195
|
|
|
} |
196
|
|
|
|
197
|
|
|
/** |
198
|
|
|
* Persist's the passed product bundle selection price data and return's the ID. |
199
|
|
|
* |
200
|
|
|
* @param array $productBundleSelectionPrice The product bundle selection price data to persist |
201
|
|
|
* |
202
|
|
|
* @return void |
203
|
|
|
*/ |
204
|
|
|
protected function persistProductBundleSelectionPrice($productBundleSelectionPrice) |
205
|
|
|
{ |
206
|
|
|
$this->getProductBundleProcessor()->persistProductBundleSelectionPrice($productBundleSelectionPrice); |
|
|
|
|
207
|
|
|
} |
208
|
|
|
} |
209
|
|
|
|
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.
If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.
In this case you can add the
@ignore
PhpDoc annotation to the duplicate definition and it will be ignored.