Commit 91fc49014d0e5423ff7574485a89f173096bb8d7
1 parent
c2a935a6
Import fix
Showing
1 changed file
with
601 additions
and
547 deletions
Show diff stats
common/modules/product/models/Import.php
1 | 1 | <?php |
2 | - | |
3 | -namespace common\modules\product\models; | |
4 | - | |
5 | -use common\models\EventsToProducts; | |
6 | -use common\modules\product\helpers\ProductHelper; | |
7 | -use common\modules\product\models\Category; | |
8 | -use common\modules\product\models\CategoryName; | |
9 | -use common\modules\product\models\ProductImage; | |
10 | -use common\modules\product\models\ProductVariantType; | |
11 | -use common\modules\rubrication\models\TaxGroup; | |
12 | -use common\modules\rubrication\models\TaxOption; | |
13 | -use common\modules\rubrication\models\TaxValueString; | |
14 | -use Yii; | |
15 | -use common\modules\product\models\Brand; | |
16 | -use common\modules\product\models\BrandName; | |
17 | -use common\modules\product\models\Product; | |
18 | -use common\modules\product\models\ProductVariant; | |
19 | -use common\modules\product\models\RemoteProducts; | |
20 | -use yii\base\Model; | |
21 | -use yii\helpers\ArrayHelper; | |
22 | - | |
23 | -class Import extends Model { | |
24 | - public $file; | |
25 | - public $type; | |
26 | - | |
27 | - public $errors = []; | |
28 | - public $output = []; | |
29 | - | |
30 | - /** | |
31 | - * @inheritdoc | |
32 | - */ | |
33 | - public function rules() | |
34 | - { | |
35 | - return [ | |
36 | - [['type'], 'required'], | |
37 | - [['type'], 'string'], | |
38 | -// [['file'], 'safe'], | |
39 | - [['file'], 'file', 'extensions' => 'csv'], | |
40 | - ]; | |
41 | - } | |
42 | - | |
43 | - /** | |
44 | - * @inheritdoc | |
45 | - */ | |
46 | - public function attributeLabels() | |
2 | + | |
3 | + namespace common\modules\product\models; | |
4 | + | |
5 | + use common\models\EventsToProducts; | |
6 | + use common\modules\product\helpers\ProductHelper; | |
7 | + use common\modules\product\models\Category; | |
8 | + use common\modules\product\models\CategoryName; | |
9 | + use common\modules\product\models\ProductImage; | |
10 | + use common\modules\product\models\ProductVariantType; | |
11 | + use common\modules\rubrication\models\TaxGroup; | |
12 | + use common\modules\rubrication\models\TaxOption; | |
13 | + use common\modules\rubrication\models\TaxValueString; | |
14 | + use Yii; | |
15 | + use common\modules\product\models\Brand; | |
16 | + use common\modules\product\models\BrandName; | |
17 | + use common\modules\product\models\Product; | |
18 | + use common\modules\product\models\ProductVariant; | |
19 | + use common\modules\product\models\RemoteProducts; | |
20 | + use yii\base\Model; | |
21 | + use yii\helpers\ArrayHelper; | |
22 | + | |
23 | + class Import extends Model | |
47 | 24 | { |
48 | - return [ | |
49 | - 'file' => Yii::t('product', 'File'), | |
50 | - ]; | |
51 | - } | |
52 | - | |
53 | - public function getType() { | |
54 | - if (!$this->type) { | |
55 | - $this->type = 'products'; | |
56 | - } | |
57 | - return $this->type; | |
58 | - } | |
59 | - | |
60 | - public function goPrices($from = 0, $limit = null) { | |
61 | - set_time_limit(0); | |
62 | - $new_products = $linked_products = 0; | |
63 | - | |
64 | - | |
65 | - if ( !($handle = $this->getProductsFile('uploadFilePrices')) ) { | |
66 | - $this->errors[] = 'File not found'; | |
67 | - return FALSE; | |
68 | - } | |
69 | - | |
70 | - if (file_exists(Yii::getAlias('@uploadDir/goPrices.lock'))) { | |
71 | - return 'Task already executed'; | |
25 | + public $file; | |
26 | + public $type; | |
27 | + | |
28 | + public $errors = []; | |
29 | + public $output = []; | |
30 | + | |
31 | + /** | |
32 | + * @inheritdoc | |
33 | + */ | |
34 | + public function rules() | |
35 | + { | |
36 | + return [ | |
37 | + [ | |
38 | + [ 'type' ], | |
39 | + 'required', | |
40 | + ], | |
41 | + [ | |
42 | + [ 'type' ], | |
43 | + 'string', | |
44 | + ], | |
45 | + // [['file'], 'safe'], | |
46 | + [ | |
47 | + [ 'file' ], | |
48 | + 'file', | |
49 | + 'extensions' => 'csv', | |
50 | + ], | |
51 | + ]; | |
72 | 52 | } |
73 | - $ff = fopen(Yii::getAlias('@uploadDir/goPrices.lock'), 'w+'); | |
74 | - fclose($ff); | |
75 | - | |
76 | - $filesize = filesize(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFilePrices')); | |
77 | - if ($from) { | |
78 | - fseek($handle, $from); | |
79 | - | |
53 | + | |
54 | + /** | |
55 | + * @inheritdoc | |
56 | + */ | |
57 | + public function attributeLabels() | |
58 | + { | |
59 | + return [ | |
60 | + 'file' => Yii::t('product', 'File'), | |
61 | + ]; | |
80 | 62 | } |
81 | - | |
82 | - $j = 0; | |
83 | - | |
84 | - $is_utf = (preg_match('//u', file_get_contents(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFilePrices'), null, null, null, 1000000))); | |
85 | - | |
86 | - | |
87 | - if($from == 0){ | |
88 | - ProductStock::updateAll(['quantity' => 0 ]); | |
89 | - ProductVariant::updateAll(['status' => 1 ]); | |
63 | + | |
64 | + public function getType() | |
65 | + { | |
66 | + if (!$this->type) { | |
67 | + $this->type = 'products'; | |
68 | + } | |
69 | + return $this->type; | |
90 | 70 | } |
91 | - | |
92 | - | |
93 | - | |
94 | - while (empty($limit) || $j++ < $limit) | |
71 | + | |
72 | + public function goPrices($from = 0, $limit = null) | |
95 | 73 | { |
96 | - | |
97 | - | |
98 | - if(!(($data = fgetcsv ($handle, 10000, ";")) !== FALSE)){ | |
99 | - break; | |
74 | + set_time_limit(0); | |
75 | + $new_products = $linked_products = 0; | |
76 | + | |
77 | + if (!( $handle = $this->getProductsFile('uploadFilePrices') )) { | |
78 | + $this->errors[] = 'File not found'; | |
79 | + return false; | |
100 | 80 | } |
101 | - | |
102 | - foreach ($data as &$value) | |
103 | - { | |
104 | - if (!$is_utf) { | |
105 | - $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); | |
106 | - } | |
107 | - $value = trim ($value); | |
81 | + | |
82 | + if (file_exists(Yii::getAlias('@uploadDir/goPrices.lock'))) { | |
83 | + return 'Task already executed'; | |
108 | 84 | } |
109 | - | |
110 | - // ะดะฐะฝะฝัะต ัััะพะบ | |
111 | - $modification_code = @$data[0]; | |
112 | - $price = floatval(@$data[1]); | |
113 | - $price_promo = floatval(@$data[2]); | |
114 | - $count = intval(@$data[3]); | |
115 | - $city_name = @$data[4]; | |
116 | - $product_title = @$data[5]; | |
117 | - | |
118 | - if (empty ($modification_code)) { | |
119 | - continue; | |
85 | + $ff = fopen(Yii::getAlias('@uploadDir/goPrices.lock'), 'w+'); | |
86 | + fclose($ff); | |
87 | + | |
88 | + $filesize = filesize(Yii::getAlias('@uploadDir') . '/' . Yii::getAlias('@uploadFilePrices')); | |
89 | + if ($from) { | |
90 | + fseek($handle, $from); | |
91 | + | |
120 | 92 | } |
121 | - // ัะพะฒะฐัั ะฒ ะฟััะธ | |
122 | -// if (empty ($city_name)) | |
123 | -// { | |
124 | -// $this->saveNotFoundRecord ( | |
125 | -// [$modification_code, $product_title], | |
126 | -// Yii::getAlias('@uploadFilePricesAway') | |
127 | -// ); | |
128 | -// | |
129 | -// $this->output[] = 'ะขะพะฒะฐั '. $product_title . ' ะฒ ะฟััะธ'; | |
130 | -// | |
131 | -// continue; | |
132 | -// } | |
133 | - | |
134 | - if ( ($productVariant = ProductVariant::find()->filterWhere(['sku' => $modification_code])->one()) === null ) { | |
135 | - // 'ะะตั ะดะฐะฝะพะน ะผะพะดะธัะธะบะฐัะธะธ ะฒ ะฑะฐะทะต'; | |
136 | -// $this->saveNotFoundRecord ( | |
137 | -// [$modification_code, $product_title], | |
138 | -// Yii::getAlias('@uploadFilePricesNoVariant') | |
139 | -// ); | |
140 | - | |
141 | - $this->output[] = 'ะะปั ัะพะฒะฐัะฐ '. $product_title . ' ะฝะต ะฝะฐะนะดะตะฝะพ ัะพะพัะฒะตััะฒะธะต'; | |
142 | - | |
143 | - continue; | |
93 | + | |
94 | + $j = 0; | |
95 | + | |
96 | + $is_utf = ( preg_match( | |
97 | + '//u', | |
98 | + file_get_contents( | |
99 | + Yii::getAlias('@uploadDir') . '/' . Yii::getAlias('@uploadFilePrices'), | |
100 | + null, | |
101 | + null, | |
102 | + null, | |
103 | + 1000000 | |
104 | + ) | |
105 | + ) ); | |
106 | + | |
107 | + if ($from == 0) { | |
108 | + ProductStock::updateAll([ 'quantity' => 0 ]); | |
109 | + ProductVariant::updateAll([ 'status' => 1 ]); | |
144 | 110 | } |
145 | - | |
146 | - | |
147 | - | |
148 | - | |
149 | - // ===== Set stock ==== | |
150 | - if ( $city_name ) { | |
151 | - if ( ($stock = Stock::find()->filterWhere(['name' => trim($city_name)])->one()) === null ) { | |
152 | - | |
111 | + | |
112 | + while (empty( $limit ) || $j++ < $limit) { | |
113 | + | |
114 | + if (!( ( $data = fgetcsv($handle, 10000, ";") ) !== false )) { | |
115 | + break; | |
116 | + } | |
117 | + | |
118 | + foreach ($data as &$value) { | |
119 | + if (!$is_utf) { | |
120 | + $value = iconv('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); | |
121 | + } | |
122 | + $value = trim($value); | |
123 | + } | |
124 | + | |
125 | + // ะดะฐะฝะฝัะต ัััะพะบ | |
126 | + $modification_code = @$data[ 0 ]; | |
127 | + $price = floatval(@$data[ 1 ]); | |
128 | + $price_promo = floatval(@$data[ 2 ]); | |
129 | + $count = intval(@$data[ 3 ]); | |
130 | + $city_name = @$data[ 4 ]; | |
131 | + $product_title = @$data[ 5 ]; | |
132 | + | |
133 | + if (empty ( $modification_code )) { | |
134 | + continue; | |
135 | + } | |
136 | + // ัะพะฒะฐัั ะฒ ะฟััะธ | |
137 | + // if (empty ($city_name)) | |
138 | + // { | |
139 | + // $this->saveNotFoundRecord ( | |
140 | + // [$modification_code, $product_title], | |
141 | + // Yii::getAlias('@uploadFilePricesAway') | |
142 | + // ); | |
143 | + // | |
144 | + // $this->output[] = 'ะขะพะฒะฐั '. $product_title . ' ะฒ ะฟััะธ'; | |
145 | + // | |
146 | + // continue; | |
147 | + // } | |
148 | + | |
149 | + if (( $productVariant = ProductVariant::find() | |
150 | + ->filterWhere([ 'sku' => $modification_code ]) | |
151 | + ->one() ) === null | |
152 | + ) { | |
153 | + // 'ะะตั ะดะฐะฝะพะน ะผะพะดะธัะธะบะฐัะธะธ ะฒ ะฑะฐะทะต'; | |
154 | + // $this->saveNotFoundRecord ( | |
155 | + // [$modification_code, $product_title], | |
156 | + // Yii::getAlias('@uploadFilePricesNoVariant') | |
157 | + // ); | |
158 | + | |
159 | + $this->output[] = 'ะะปั ัะพะฒะฐัะฐ ' . $product_title . ' ะฝะต ะฝะฐะนะดะตะฝะพ ัะพะพัะฒะตััะฒะธะต'; | |
160 | + | |
161 | + continue; | |
162 | + } | |
163 | + | |
164 | + // ===== Set stock ==== | |
165 | + if (!$city_name) { | |
166 | + if (!$count) { | |
167 | + continue; | |
168 | + } | |
169 | + $city_name = 'ะกะบะปะฐะด'; | |
170 | + } | |
171 | + if (( $stock = Stock::find() | |
172 | + ->filterWhere([ 'name' => trim($city_name) ]) | |
173 | + ->one() ) === null | |
174 | + ) { | |
175 | + | |
153 | 176 | // Create stock |
154 | 177 | $stock = new Stock(); |
155 | 178 | $stock->name = trim($city_name); |
156 | 179 | $stock->save(); |
157 | 180 | } |
158 | - | |
159 | - $productStock = ProductStock::find()->where(['product_variant_id' => $productVariant->product_variant_id, 'stock_id' => $stock->stock_id])->one(); | |
160 | - if(!$productStock instanceof ProductStock) { | |
181 | + | |
182 | + $productStock = ProductStock::find() | |
183 | + ->where( | |
184 | + [ | |
185 | + 'product_variant_id' => $productVariant->product_variant_id, | |
186 | + 'stock_id' => $stock->stock_id, | |
187 | + ] | |
188 | + ) | |
189 | + ->one(); | |
190 | + if (!$productStock instanceof ProductStock) { | |
161 | 191 | $productStock = new ProductStock; |
162 | 192 | $productStock->product_variant_id = $productVariant->product_variant_id; |
163 | 193 | $productStock->stock_id = $stock->stock_id; |
164 | 194 | $productStock->product_id = $productVariant->product_id; |
165 | 195 | } |
166 | 196 | $productStock->quantity = $count; |
167 | - | |
197 | + | |
168 | 198 | $productStock->save(); |
169 | - $productStocks = ProductStock::find()->where(['product_variant_id' => $productVariant->product_variant_id])->andWhere(['<>', 'stock_id', $stock->stock_id])->all(); | |
170 | - | |
199 | + $productStocks = ProductStock::find() | |
200 | + ->where([ 'product_variant_id' => $productVariant->product_variant_id ]) | |
201 | + ->andWhere( | |
202 | + [ | |
203 | + '<>', | |
204 | + 'stock_id', | |
205 | + $stock->stock_id, | |
206 | + ] | |
207 | + ) | |
208 | + ->all(); | |
209 | + | |
171 | 210 | $quantity = array_sum(ArrayHelper::getColumn($productStocks, 'quantity')) + $count; |
172 | - } else { | |
173 | - if ($count == 0) { | |
174 | - continue; | |
211 | + | |
212 | + if ($price_promo) { | |
213 | + $productVariant->price_old = $price; | |
214 | + $productVariant->price = $price_promo; | |
175 | 215 | } else { |
176 | - $productStocks = ProductStock::find()->where(['product_variant_id' => $productVariant->product_variant_id])->all(); | |
177 | - | |
178 | - $quantity = array_sum(ArrayHelper::getColumn($productStocks, 'quantity')) + $count; | |
216 | + $productVariant->price = $price; | |
217 | + $productVariant->price_old = $price_promo; | |
179 | 218 | } |
219 | + | |
220 | + $productVariant->stock = $quantity; | |
221 | + $productVariant->status = 0; | |
222 | + $productVariant->save(); | |
223 | + | |
224 | + $this->output[] = '<font style="color:blue">ะขะพะฒะฐั ' . $product_title . ' ััะฟะตัะฝะพ ัะพั ัะฐะฝะตะฝ</font>'; | |
180 | 225 | } |
181 | - | |
182 | - if ($price_promo) { | |
183 | - $productVariant->price_old = $price; | |
184 | - $productVariant->price = $price_promo; | |
185 | - } else { | |
186 | - $productVariant->price = $price; | |
187 | - $productVariant->price_old = $price_promo; | |
226 | + | |
227 | + $result = [ | |
228 | + 'end' => feof($handle), | |
229 | + 'from' => ftell($handle), | |
230 | + 'totalsize' => $filesize, | |
231 | + 'items' => $this->output, | |
232 | + | |
233 | + ]; | |
234 | + | |
235 | + fclose($handle); | |
236 | + | |
237 | + if ($result[ 'end' ]) { | |
238 | + unlink(Yii::getAlias('@uploadDir') . '/' . Yii::getAlias('@uploadFilePrices')); | |
188 | 239 | } |
189 | - | |
190 | - $productVariant->stock = $quantity; | |
191 | - $productVariant->status = 0; | |
192 | - $productVariant->save(); | |
193 | - | |
194 | - $this->output[] = '<font style="color:blue">ะขะพะฒะฐั '. $product_title .' ััะฟะตัะฝะพ ัะพั ัะฐะฝะตะฝ</font>'; | |
195 | - } | |
196 | - | |
197 | - $result = [ | |
198 | - 'end' => feof($handle), | |
199 | - 'from' => ftell($handle), | |
200 | - 'totalsize' => $filesize, | |
201 | - 'items' => $this->output, | |
202 | - | |
203 | - ]; | |
204 | - | |
205 | - fclose ($handle); | |
206 | - | |
207 | - if ($result['end']) { | |
208 | - unlink(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFilePrices')); | |
209 | - } | |
210 | - unlink(Yii::getAlias('@uploadDir/goPrices.lock')); | |
211 | - return $result; | |
212 | - } | |
213 | - | |
214 | - public function goProducts($from = 0, $limit = null) { | |
215 | - | |
216 | - set_time_limit(0); | |
217 | - $new_products = $linked_products = 0; | |
218 | - | |
219 | - | |
220 | - if ( !($handle = $this->getProductsFile('uploadFileProducts')) ) { | |
221 | - $this->errors[] = 'File not found'; | |
222 | - return FALSE; | |
223 | - } | |
224 | - if (file_exists(Yii::getAlias('@uploadDir/goProducts.lock'))) { | |
225 | - return 'Task already executed'; | |
240 | + unlink(Yii::getAlias('@uploadDir/goPrices.lock')); | |
241 | + return $result; | |
226 | 242 | } |
227 | - $ff = fopen(Yii::getAlias('@uploadDir/goProducts.lock'), 'w+'); | |
228 | - fclose($ff); | |
229 | - | |
230 | - $filesize = filesize(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts')); | |
231 | - | |
232 | - | |
233 | - if ($from) { | |
234 | - fseek($handle, $from); | |
235 | - } | |
236 | - | |
237 | - $j = 0; | |
238 | - | |
239 | - $is_utf = (preg_match('//u', file_get_contents(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts'), null, null, null, 1000000))); | |
240 | - | |
241 | - $result_items = []; | |
242 | - | |
243 | - | |
244 | - | |
245 | - while ( empty($limit) || $j++ < $limit) | |
243 | + | |
244 | + public function goProducts($from = 0, $limit = null) | |
246 | 245 | { |
247 | - if(!(($data = fgetcsv ($handle, 10000, ";")) !== FALSE)){ | |
248 | - break; | |
249 | - } | |
250 | - | |
251 | - foreach ($data as &$value) | |
252 | - { | |
253 | - if (!$is_utf) { | |
254 | - $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); | |
255 | - } | |
256 | - $value = trim ($value); | |
257 | - } | |
258 | - | |
259 | - // ะฑัะดะตั ะฒัะตะณะดะฐ 19 ัะปะตะผะตะฝัะพะฒ | |
260 | - for ($i = 0; $i <= 18; $i++) | |
261 | - { | |
262 | - if (! isset ($data[$i])) | |
263 | - { | |
264 | - $data[$i] = null; | |
265 | - } | |
246 | + | |
247 | + set_time_limit(0); | |
248 | + $new_products = $linked_products = 0; | |
249 | + | |
250 | + if (!( $handle = $this->getProductsFile('uploadFileProducts') )) { | |
251 | + $this->errors[] = 'File not found'; | |
252 | + return false; | |
266 | 253 | } |
267 | - | |
268 | - | |
269 | - // 1 ะััะฟะฟะฐ (ะบะฐัะตะณะพัะธั) | |
270 | - $catalog_names = explode(',',$data[0]); | |
271 | - | |
272 | - if (empty ($catalog_names)) | |
273 | - { | |
274 | - $result_items[] = "ะะต ัะบะฐะทะฐะฝะฐ ะบะฐัะตะณะพัะธั (ัััะพะบะฐ $j) "; | |
275 | - continue; | |
254 | + if (file_exists(Yii::getAlias('@uploadDir/goProducts.lock'))) { | |
255 | + return 'Task already executed'; | |
276 | 256 | } |
277 | - | |
278 | - // 2 ะัะตะฝะด | |
279 | - $brand_name = $data[1]; | |
280 | - if (empty ($brand_name)) | |
281 | - { | |
282 | - $result_items[] = "ะะต ัะบะฐะทะฐะฝ ะฑัะตะฝะด (ัััะพะบะฐ $j)"; | |
283 | - continue; | |
257 | + $ff = fopen(Yii::getAlias('@uploadDir/goProducts.lock'), 'w+'); | |
258 | + fclose($ff); | |
259 | + | |
260 | + $filesize = filesize(Yii::getAlias('@uploadDir') . '/' . Yii::getAlias('@uploadFileProducts')); | |
261 | + | |
262 | + if ($from) { | |
263 | + fseek($handle, $from); | |
284 | 264 | } |
285 | - | |
286 | - // 3 ะะฐะทะฒะฐะฝะธะต ัะพะฒะฐัะฐ | |
287 | - $product_name = $data[2]; | |
288 | - if (empty ($product_name)) | |
289 | - { | |
290 | - $result_items[] = "ะะต ัะบะฐะทะฐะฝะพ ะฝะฐะธะผะตะฝะพะฒะฐะฝะธะต ัะพะฒะฐัะฐ (ัััะพะบะฐ $j)"; | |
291 | - continue; | |
292 | - } | |
293 | - | |
294 | - // 4 ะะฟะธัะฐะฝะธะต ะฃะบั | |
295 | - $product_body_uk = $data[3]; | |
296 | - | |
297 | - // 5 ะะฟะธัะฐะฝะธะต ะ ัั | |
298 | - $product_body_ru = $data[4]; | |
299 | - | |
300 | - // 6 ะคะธะปััั [god:2013-2014]*[pol:ะผัะถัะบะพะน]*[naznacenie-germo-beg:ะะปั ะฒะตัะตะน]*[material-germo-bag:ะฝะตั]*[value-germo-bag:ะฝะตั]*[weight-germo-bag:ะฝะตั]*[ipx-germo-bag:ะฝะตั]*[in-pacage-bag:ะฝะตั]*[size-germo-bag:ะฝะตั]*[rekomend-germo-bag:ะฝะตั] | |
301 | - $filters = explode ('*', $data[5]); | |
302 | - | |
303 | - // 11 ะฆะตะฝะฐ ะฐะบัะธั | |
304 | - $product_cost_old = floatval($data[7]); | |
305 | - $product_cost = ''; | |
306 | - // 10 ะฆะตะฝะฐ | |
307 | - if ($product_cost_old) { | |
308 | - $product_cost_old = floatval($data[6]); | |
309 | - $product_cost = floatval($data[7]); | |
310 | - } | |
311 | - | |
312 | - // 12 ะะบัะธั | |
313 | - $product_akciya = (bool)$data[8]; | |
314 | - | |
315 | - // 13 ะกะพะฟัะด. ะขะพะฒ. | |
316 | - $similar = explode (',', $data[9]); | |
317 | - | |
318 | - // 14 ะะพะฒะธะฝะบะธ | |
319 | - $product_new = (bool)$data[10]; | |
320 | - | |
321 | - // 15 ะขะพะฟ ะฟัะพะดะฐะถ | |
322 | - $product_top = (bool)$data[11]; | |
323 | - | |
324 | - | |
325 | - // 17 ะะะะะ ะะะ | |
326 | - $product_video = $data[12]; | |
327 | - | |
328 | - // 18 ะะฐะปะปะตัะตั ัะพัะพ | |
329 | - if (trim($data[13])) { | |
330 | - $fotos = explode (',', trim($data[13])); | |
331 | - } | |
332 | - | |
333 | - // 19 ะจััะธั ะบะพะด ัะพะฒะฐัะฐ. | |
334 | - // ัะฐััะธััะพะฒะฐะป - ััะพ ะผะพะดะธัะธะบะฐัะธะธ ัะพะฒะฐัะฐ! | |
335 | - | |
336 | - $product_image = explode ('=', $data[14]); | |
337 | - $product_image = @$product_image[3]; | |
338 | - | |
339 | - if ( ($_product = Product::find()->filterWhere(['name' => trim($product_name)])->one()) === null ) { | |
340 | - $_product = new Product(); | |
341 | - } | |
342 | - | |
343 | - $is_new_product = empty($_product->product_id); | |
344 | - $category_id = []; | |
345 | - foreach($catalog_names as $catalog_name){ | |
346 | - | |
347 | - // ==== Set category ==== | |
348 | - if ( ($category = Category::find()->filterWhere([ 'name' => trim($catalog_name)])->one()) === null ) { | |
349 | - // Create category | |
350 | - $category = new Category(); | |
351 | - $category->name = trim($catalog_name); | |
352 | - $category->save(); | |
353 | - } | |
354 | - | |
355 | - $category_id[] = $category->category_id; | |
356 | - } | |
357 | - | |
358 | - | |
359 | - $_product->categories = $category_id; | |
360 | - | |
361 | - // ===== Set brand ==== | |
362 | - if ( $brand_name ) { | |
363 | - if ( ($brand = Brand::find()->filterWhere(['name' => trim($brand_name)])->one()) !== null ) { | |
364 | - $_product->brand_id = $brand->brand_id; | |
365 | - } else { | |
366 | - // Create brand | |
367 | - $brand = new Brand(); | |
368 | - $brand->name = trim($brand_name); | |
369 | - $brand->save(); | |
370 | - $_product->brand_id = $brand->brand_id; | |
265 | + | |
266 | + $j = 0; | |
267 | + | |
268 | + $is_utf = ( preg_match( | |
269 | + '//u', | |
270 | + file_get_contents( | |
271 | + Yii::getAlias('@uploadDir') . '/' . Yii::getAlias('@uploadFileProducts'), | |
272 | + null, | |
273 | + null, | |
274 | + null, | |
275 | + 1000000 | |
276 | + ) | |
277 | + ) ); | |
278 | + | |
279 | + $result_items = []; | |
280 | + | |
281 | + while (empty( $limit ) || $j++ < $limit) { | |
282 | + if (!( ( $data = fgetcsv($handle, 10000, ";") ) !== false )) { | |
283 | + break; | |
371 | 284 | } |
372 | - } | |
373 | - | |
374 | - $_product->name = $product_name; | |
375 | - $_product->video = $product_video; | |
376 | - $_product->description = $product_body_ru; | |
377 | - $_product->is_top = $product_top; | |
378 | - $_product->akciya = $product_akciya; | |
379 | - $_product->is_new = $product_new; | |
380 | - | |
381 | - if (!$_product->save()) { | |
382 | - $result_items[] = 'Product #'. $_product->name .' not saved' . " (ัััะพะบะฐ $j)"; | |
383 | - continue; | |
384 | - } | |
385 | - | |
386 | - | |
387 | - | |
388 | - if (!empty($fotos)) { | |
389 | - foreach($fotos as $foto) { | |
390 | - $source_image = Yii::getAlias('@uploadDir') . '/product_images/'. urlencode($foto); | |
391 | - | |
392 | - if (file_exists($source_image)) { | |
393 | - if (($productImage = ProductImage::find()->andFilterWhere(['image'=> $foto])->andFilterWhere(['product_id' => $_product->product_id])->one()) === null) { | |
394 | - copy($source_image, Yii::getAlias('@productsDir') . "/" . $foto); | |
395 | - $productImage = new ProductImage(); | |
396 | - $productImage->product_id = $_product->product_id; | |
397 | - $productImage->image = $foto; | |
398 | - $productImage->save(); | |
399 | - } | |
285 | + | |
286 | + foreach ($data as &$value) { | |
287 | + if (!$is_utf) { | |
288 | + $value = iconv('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); | |
400 | 289 | } |
290 | + $value = trim($value); | |
401 | 291 | } |
402 | - } | |
403 | - | |
404 | - | |
405 | - // ะฝัะถะฝะพ ะดะปั ะฟัะพััะฐะฒะปะตะฝะธั ั ะฐัะฐะบัะตัะธััะธะบ ะพัะฝะพัััะธั ัั ะบ ะผะพะดะธัะธะบะฐัะธัะผ | |
406 | - $MOD_ARRAY = []; | |
407 | - | |
408 | - for ($i = 14; $i < count ($data); $i ++) | |
409 | - { | |
410 | - if (! empty ($data[$i])) | |
411 | - { | |
412 | - $mod_arr = explode ('=', $data[$i]); | |
413 | - $mod_art = $mod_arr[0]; | |
414 | - $variant_filters = explode ('*', $mod_arr[1]); | |
415 | - $mod_color = $mod_arr[2]; | |
416 | - $mod_image = $mod_arr[3]; | |
417 | - $mod_stock = isset($mod_arr[4]) ?$mod_arr[4]:1; | |
418 | - $mod_cost = isset($product_cost) ? floatval($product_cost) : 0; | |
419 | - $mod_old_cost = floatval($product_cost_old); | |
420 | - | |
421 | - // Check product variant | |
422 | - if ( ($_productVariant = ProductVariant::find()->andFilterWhere([ 'sku'=> $mod_art])->andFilterWhere(['product_id' => $_product->product_id])->one()) === null ) { | |
423 | - $_productVariant = new ProductVariant(); | |
424 | - $_productVariant->product_id = $_product->product_id; | |
425 | - } | |
426 | - $_productVariant->product_unit_id = 1; | |
427 | - | |
428 | - $_productVariant->sku = $mod_art; | |
429 | - $_productVariant->price = $mod_cost; | |
430 | - $_productVariant->price_old = $mod_old_cost; | |
431 | - $_productVariant->stock = $mod_stock; | |
432 | - | |
433 | - $product_variant_type_name = ''; | |
434 | - if (! empty ($mod_color)) { | |
435 | - $product_variant_type_name = 'ะฆะฒะตั'; | |
436 | - $_productVariant->name = $mod_color; | |
292 | + | |
293 | + // ะฑัะดะตั ะฒัะตะณะดะฐ 19 ัะปะตะผะตะฝัะพะฒ | |
294 | + for ($i = 0; $i <= 18; $i++) { | |
295 | + if (!isset ( $data[ $i ] )) { | |
296 | + $data[ $i ] = null; | |
437 | 297 | } |
438 | - | |
439 | - if (! empty ($variant_filters)) { | |
440 | - | |
441 | - $variants_options = $this->saveFilters($variant_filters,1,$category_id); | |
442 | - | |
298 | + } | |
299 | + | |
300 | + // 1 ะััะฟะฟะฐ (ะบะฐัะตะณะพัะธั) | |
301 | + $catalog_names = explode(',', $data[ 0 ]); | |
302 | + | |
303 | + if (empty ( $catalog_names )) { | |
304 | + $result_items[] = "ะะต ัะบะฐะทะฐะฝะฐ ะบะฐัะตะณะพัะธั (ัััะพะบะฐ $j) "; | |
305 | + continue; | |
306 | + } | |
307 | + | |
308 | + // 2 ะัะตะฝะด | |
309 | + $brand_name = $data[ 1 ]; | |
310 | + if (empty ( $brand_name )) { | |
311 | + $result_items[] = "ะะต ัะบะฐะทะฐะฝ ะฑัะตะฝะด (ัััะพะบะฐ $j)"; | |
312 | + continue; | |
313 | + } | |
314 | + | |
315 | + // 3 ะะฐะทะฒะฐะฝะธะต ัะพะฒะฐัะฐ | |
316 | + $product_name = $data[ 2 ]; | |
317 | + if (empty ( $product_name )) { | |
318 | + $result_items[] = "ะะต ัะบะฐะทะฐะฝะพ ะฝะฐะธะผะตะฝะพะฒะฐะฝะธะต ัะพะฒะฐัะฐ (ัััะพะบะฐ $j)"; | |
319 | + continue; | |
320 | + } | |
321 | + | |
322 | + // 4 ะะฟะธัะฐะฝะธะต ะฃะบั | |
323 | + $product_body_uk = $data[ 3 ]; | |
324 | + | |
325 | + // 5 ะะฟะธัะฐะฝะธะต ะ ัั | |
326 | + $product_body_ru = $data[ 4 ]; | |
327 | + | |
328 | + // 6 ะคะธะปััั [god:2013-2014]*[pol:ะผัะถัะบะพะน]*[naznacenie-germo-beg:ะะปั ะฒะตัะตะน]*[material-germo-bag:ะฝะตั]*[value-germo-bag:ะฝะตั]*[weight-germo-bag:ะฝะตั]*[ipx-germo-bag:ะฝะตั]*[in-pacage-bag:ะฝะตั]*[size-germo-bag:ะฝะตั]*[rekomend-germo-bag:ะฝะตั] | |
329 | + $filters = explode('*', $data[ 5 ]); | |
330 | + | |
331 | + // 11 ะฆะตะฝะฐ ะฐะบัะธั | |
332 | + $product_cost_old = floatval($data[ 7 ]); | |
333 | + $product_cost = ''; | |
334 | + // 10 ะฆะตะฝะฐ | |
335 | + if ($product_cost_old) { | |
336 | + $product_cost_old = floatval($data[ 6 ]); | |
337 | + $product_cost = floatval($data[ 7 ]); | |
338 | + } | |
339 | + | |
340 | + // 12 ะะบัะธั | |
341 | + $product_akciya = (bool) $data[ 8 ]; | |
342 | + | |
343 | + // 13 ะกะพะฟัะด. ะขะพะฒ. | |
344 | + $similar = explode(',', $data[ 9 ]); | |
345 | + | |
346 | + // 14 ะะพะฒะธะฝะบะธ | |
347 | + $product_new = (bool) $data[ 10 ]; | |
348 | + | |
349 | + // 15 ะขะพะฟ ะฟัะพะดะฐะถ | |
350 | + $product_top = (bool) $data[ 11 ]; | |
351 | + | |
352 | + // 17 ะะะะะ ะะะ | |
353 | + $product_video = $data[ 12 ]; | |
354 | + | |
355 | + // 18 ะะฐะปะปะตัะตั ัะพัะพ | |
356 | + if (trim($data[ 13 ])) { | |
357 | + $fotos = explode(',', trim($data[ 13 ])); | |
358 | + } | |
359 | + | |
360 | + // 19 ะจััะธั ะบะพะด ัะพะฒะฐัะฐ. | |
361 | + // ัะฐััะธััะพะฒะฐะป - ััะพ ะผะพะดะธัะธะบะฐัะธะธ ัะพะฒะฐัะฐ! | |
362 | + | |
363 | + $product_image = explode('=', $data[ 14 ]); | |
364 | + $product_image = @$product_image[ 3 ]; | |
365 | + | |
366 | + if (( $_product = Product::find() | |
367 | + ->filterWhere([ 'name' => trim($product_name) ]) | |
368 | + ->one() ) === null | |
369 | + ) { | |
370 | + $_product = new Product(); | |
371 | + } | |
372 | + | |
373 | + $is_new_product = empty( $_product->product_id ); | |
374 | + $category_id = []; | |
375 | + foreach ($catalog_names as $catalog_name) { | |
376 | + | |
377 | + // ==== Set category ==== | |
378 | + if (( $category = Category::find() | |
379 | + ->filterWhere([ 'name' => trim($catalog_name) ]) | |
380 | + ->one() ) === null | |
381 | + ) { | |
382 | + // Create category | |
383 | + $category = new Category(); | |
384 | + $category->name = trim($catalog_name); | |
385 | + $category->save(); | |
443 | 386 | } |
444 | - | |
445 | - | |
446 | - if (isset($variants_options) && !empty($variants_options)) { | |
447 | - $_productVariant->options = $variants_options; | |
387 | + | |
388 | + $category_id[] = $category->category_id; | |
389 | + } | |
390 | + | |
391 | + $_product->categories = $category_id; | |
392 | + | |
393 | + // ===== Set brand ==== | |
394 | + if ($brand_name) { | |
395 | + if (( $brand = Brand::find() | |
396 | + ->filterWhere([ 'name' => trim($brand_name) ]) | |
397 | + ->one() ) !== null | |
398 | + ) { | |
399 | + $_product->brand_id = $brand->brand_id; | |
400 | + } else { | |
401 | + // Create brand | |
402 | + $brand = new Brand(); | |
403 | + $brand->name = trim($brand_name); | |
404 | + $brand->save(); | |
405 | + $_product->brand_id = $brand->brand_id; | |
448 | 406 | } |
449 | - | |
450 | - | |
451 | - // ===== Set variant type ==== | |
452 | - if ( $product_variant_type_name ) { | |
453 | - if ( ($product_variant_type = ProductVariantType::find()->filterWhere([ 'name'=> $product_variant_type_name])->one()) !== null ) { | |
454 | - $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; | |
455 | - } else { | |
456 | - $product_variant_type = new ProductVariantType(); | |
457 | - $product_variant_type->name = $product_variant_type_name; | |
458 | - $product_variant_type->save(); | |
459 | - $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; | |
407 | + } | |
408 | + | |
409 | + $_product->name = $product_name; | |
410 | + $_product->video = $product_video; | |
411 | + $_product->description = $product_body_ru; | |
412 | + $_product->is_top = $product_top; | |
413 | + $_product->akciya = $product_akciya; | |
414 | + $_product->is_new = $product_new; | |
415 | + | |
416 | + if (!$_product->save()) { | |
417 | + $result_items[] = 'Product #' . $_product->name . ' not saved' . " (ัััะพะบะฐ $j)"; | |
418 | + continue; | |
419 | + } | |
420 | + | |
421 | + if (!empty( $fotos )) { | |
422 | + foreach ($fotos as $foto) { | |
423 | + $source_image = Yii::getAlias('@uploadDir') . '/product_images/' . urlencode($foto); | |
424 | + | |
425 | + if (file_exists($source_image)) { | |
426 | + if (( $productImage = ProductImage::find() | |
427 | + ->andFilterWhere([ 'image' => $foto ]) | |
428 | + ->andFilterWhere( | |
429 | + [ 'product_id' => $_product->product_id ] | |
430 | + ) | |
431 | + ->one() ) === null | |
432 | + ) { | |
433 | + copy($source_image, Yii::getAlias('@productsDir') . "/" . $foto); | |
434 | + $productImage = new ProductImage(); | |
435 | + $productImage->product_id = $_product->product_id; | |
436 | + $productImage->image = $foto; | |
437 | + $productImage->save(); | |
438 | + } | |
460 | 439 | } |
461 | 440 | } |
462 | - | |
463 | - $_productVariant->save(); | |
464 | - | |
465 | - $MOD_ARRAY[] = $_productVariant->product_variant_id; | |
466 | - | |
467 | - if ($mod_image) { | |
468 | - $source_image = Yii::getAlias('@productsDir') . '/'. urlencode($mod_image); | |
469 | - if (file_exists($source_image)) { | |
470 | - if (($variantImage = ProductImage::find()->andFilterWhere([ 'image' => $mod_image])->andFilterWhere(['product_variant_id' => $_productVariant->product_variant_id])->one()) === null) { | |
471 | -// copy($source_image, Yii::getAlias('@productsDir') . "/" . $mod_image); | |
472 | - $variantImage = new ProductImage(); | |
473 | - $variantImage->product_id = $_product->product_id; | |
474 | - $variantImage->product_variant_id = $_productVariant->product_variant_id; | |
475 | - $variantImage->image = $mod_image; | |
476 | - $variantImage->save(); | |
441 | + } | |
442 | + | |
443 | + // ะฝัะถะฝะพ ะดะปั ะฟัะพััะฐะฒะปะตะฝะธั ั ะฐัะฐะบัะตัะธััะธะบ ะพัะฝะพัััะธั ัั ะบ ะผะพะดะธัะธะบะฐัะธัะผ | |
444 | + $MOD_ARRAY = []; | |
445 | + | |
446 | + for ($i = 14; $i < count($data); $i++) { | |
447 | + if (!empty ( $data[ $i ] )) { | |
448 | + $mod_arr = explode('=', $data[ $i ]); | |
449 | + $mod_art = $mod_arr[ 0 ]; | |
450 | + $variant_filters = explode('*', $mod_arr[ 1 ]); | |
451 | + $mod_color = $mod_arr[ 2 ]; | |
452 | + $mod_image = $mod_arr[ 3 ]; | |
453 | + $mod_stock = isset( $mod_arr[ 4 ] ) ? $mod_arr[ 4 ] : 1; | |
454 | + $mod_cost = isset( $product_cost ) ? floatval($product_cost) : 0; | |
455 | + $mod_old_cost = floatval($product_cost_old); | |
456 | + | |
457 | + // Check product variant | |
458 | + if (( $_productVariant = ProductVariant::find() | |
459 | + ->andFilterWhere([ 'sku' => $mod_art ]) | |
460 | + ->andFilterWhere( | |
461 | + [ 'product_id' => $_product->product_id ] | |
462 | + ) | |
463 | + ->one() ) === null | |
464 | + ) { | |
465 | + $_productVariant = new ProductVariant(); | |
466 | + $_productVariant->product_id = $_product->product_id; | |
467 | + } | |
468 | + $_productVariant->product_unit_id = 1; | |
469 | + | |
470 | + $_productVariant->sku = $mod_art; | |
471 | + $_productVariant->price = $mod_cost; | |
472 | + $_productVariant->price_old = $mod_old_cost; | |
473 | + $_productVariant->stock = $mod_stock; | |
474 | + | |
475 | + $product_variant_type_name = ''; | |
476 | + if (!empty ( $mod_color )) { | |
477 | + $product_variant_type_name = 'ะฆะฒะตั'; | |
478 | + $_productVariant->name = $mod_color; | |
479 | + } | |
480 | + | |
481 | + if (!empty ( $variant_filters )) { | |
482 | + | |
483 | + $variants_options = $this->saveFilters($variant_filters, 1, $category_id); | |
484 | + | |
485 | + } | |
486 | + | |
487 | + if (isset( $variants_options ) && !empty( $variants_options )) { | |
488 | + $_productVariant->options = $variants_options; | |
489 | + } | |
490 | + | |
491 | + // ===== Set variant type ==== | |
492 | + if ($product_variant_type_name) { | |
493 | + if (( $product_variant_type = ProductVariantType::find() | |
494 | + ->filterWhere( | |
495 | + [ 'name' => $product_variant_type_name ] | |
496 | + ) | |
497 | + ->one() ) !== null | |
498 | + ) { | |
499 | + $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; | |
500 | + } else { | |
501 | + $product_variant_type = new ProductVariantType(); | |
502 | + $product_variant_type->name = $product_variant_type_name; | |
503 | + $product_variant_type->save(); | |
504 | + $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; | |
505 | + } | |
506 | + } | |
507 | + | |
508 | + $_productVariant->save(); | |
509 | + | |
510 | + $MOD_ARRAY[] = $_productVariant->product_variant_id; | |
511 | + | |
512 | + if ($mod_image) { | |
513 | + $source_image = Yii::getAlias('@productsDir') . '/' . urlencode($mod_image); | |
514 | + if (file_exists($source_image)) { | |
515 | + if (( $variantImage = ProductImage::find() | |
516 | + ->andFilterWhere([ 'image' => $mod_image ]) | |
517 | + ->andFilterWhere( | |
518 | + [ 'product_variant_id' => $_productVariant->product_variant_id ] | |
519 | + ) | |
520 | + ->one() ) === null | |
521 | + ) { | |
522 | + // copy($source_image, Yii::getAlias('@productsDir') . "/" . $mod_image); | |
523 | + $variantImage = new ProductImage(); | |
524 | + $variantImage->product_id = $_product->product_id; | |
525 | + $variantImage->product_variant_id = $_productVariant->product_variant_id; | |
526 | + $variantImage->image = $mod_image; | |
527 | + $variantImage->save(); | |
528 | + } | |
477 | 529 | } |
478 | 530 | } |
479 | 531 | } |
480 | 532 | } |
533 | + | |
534 | + if (!empty ( $filters )) { | |
535 | + | |
536 | + $options = $this->saveFilters($filters, 0, $category_id); | |
537 | + | |
538 | + } | |
539 | + | |
540 | + if (isset( $options ) && !empty( $options )) { | |
541 | + $_product->options = $options; | |
542 | + } | |
543 | + | |
544 | + $_product->save(); | |
545 | + | |
546 | + $result_items[] = "Product {$_product->name} #{$_product->product_id} saved (" . ( $is_new_product ? 'new product' : 'exists product' ) . ")" . " (ัััะพะบะฐ $j)"; | |
481 | 547 | } |
482 | - | |
483 | - | |
484 | - | |
485 | - if (! empty ($filters)) { | |
486 | - | |
487 | - $options = $this->saveFilters($filters,0,$category_id); | |
488 | - | |
489 | - } | |
490 | - | |
491 | - | |
492 | - if (isset($options) && !empty($options)) { | |
493 | - $_product->options = $options; | |
548 | + | |
549 | + $result = [ | |
550 | + 'end' => feof($handle), | |
551 | + 'from' => ftell($handle), | |
552 | + 'totalsize' => $filesize, | |
553 | + 'items' => $result_items, | |
554 | + | |
555 | + ]; | |
556 | + | |
557 | + fclose($handle); | |
558 | + | |
559 | + if ($result[ 'end' ]) { | |
560 | + unlink(Yii::getAlias('@uploadDir') . '/' . Yii::getAlias('@uploadFileProducts')); | |
494 | 561 | } |
495 | - | |
496 | - $_product->save(); | |
497 | - | |
498 | - $result_items[] = "Product {$_product->name} #{$_product->product_id} saved (". ($is_new_product ? 'new product' : 'exists product') .")" . " (ัััะพะบะฐ $j)"; | |
562 | + unlink(Yii::getAlias('@uploadDir/goProducts.lock')); | |
563 | + return $result; | |
499 | 564 | } |
500 | - | |
501 | - $result = [ | |
502 | - 'end' => feof($handle), | |
503 | - 'from' => ftell($handle), | |
504 | - 'totalsize' => $filesize, | |
505 | - 'items' => $result_items, | |
506 | - | |
507 | - ]; | |
508 | - | |
509 | - fclose ($handle); | |
510 | - | |
511 | - if ($result['end']) { | |
512 | - unlink(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts')); | |
565 | + | |
566 | + private function getProductsFile($file_type) | |
567 | + { | |
568 | + $filename = Yii::getAlias('@uploadDir') . '/' . Yii::getAlias('@' . $file_type); | |
569 | + if (!is_file($filename)) { | |
570 | + $this->errors[] = "File $filename not found"; | |
571 | + return false; | |
572 | + } | |
573 | + return fopen($filename, 'r'); | |
513 | 574 | } |
514 | - unlink(Yii::getAlias('@uploadDir/goProducts.lock')); | |
515 | - return $result; | |
516 | - } | |
517 | - | |
518 | - | |
519 | - | |
520 | - private function getProductsFile($file_type) { | |
521 | - $filename = Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@'. $file_type); | |
522 | - if (!is_file($filename)) { | |
523 | - $this->errors[] = "File $filename not found"; | |
524 | - return FALSE; | |
575 | + | |
576 | + private function saveNotFoundRecord(array $line, $filename) | |
577 | + { | |
578 | + $str = implode(';', $line) . "\n"; | |
579 | + $str = iconv("UTF-8//TRANSLIT//IGNORE", "windows-1251", $str); | |
580 | + | |
581 | + $fg = fopen(Yii::getAlias('@uploadDir') . '/' . $filename, 'a+'); | |
582 | + fputs($fg, $str); | |
583 | + fclose($fg); | |
525 | 584 | } |
526 | - return fopen ($filename, 'r'); | |
527 | - } | |
528 | - | |
529 | - private function saveNotFoundRecord (array $line, $filename) | |
530 | - { | |
531 | - $str = implode (';', $line)."\n"; | |
532 | - $str = iconv ("UTF-8//TRANSLIT//IGNORE", "windows-1251", $str); | |
533 | - | |
534 | - $fg = fopen (Yii::getAlias('@uploadDir') .'/'. $filename, 'a+'); | |
535 | - fputs ($fg, $str); | |
536 | - fclose ($fg); | |
537 | - } | |
538 | - | |
539 | - | |
540 | - /** | |
541 | - * @param $filters array of filters like [['pol'='ะผัะถัะบะพะน'],['god' = '2013'],['volume'='25 ะป']*['size'='49 x 30 x 20ัะผ'],['composition'='600D ะฟะพะปะธัััะตั']] | |
542 | - * @param $level 0 for products and 1 for product variant | |
543 | - * @param $catalog_names array catalogs id | |
544 | - * @return array | |
545 | - */ | |
546 | - private function saveFilters($filters, $level,$catalog_names){ | |
547 | - $options = []; | |
548 | - foreach($filters as $filter) { | |
549 | - | |
550 | - preg_match_all('/\[(.*):(.*)\]/',$filter,$filter); | |
551 | - | |
552 | - if (empty($filter[1][0])) { | |
553 | - continue; | |
554 | - } | |
555 | - $filter_name = trim($filter[1][0]); | |
556 | - | |
557 | - $taxGroup = TaxGroup::find()->where(['alias'=>$filter_name])->one(); | |
558 | - if(!$taxGroup instanceof TaxGroup){ | |
559 | - $taxGroup = new TaxGroup(); | |
560 | - $taxGroup->alias = $filter_name; | |
561 | - $taxGroup->level = $level; | |
562 | - $taxGroup->name = $filter_name; | |
563 | - $taxGroup->module = 'string'; | |
564 | - $taxGroup->hierarchical = FALSE; | |
565 | - $taxGroup->categories = $catalog_names; | |
566 | - $taxGroup->is_filter = FALSE; | |
567 | - $taxGroup->save(); | |
568 | - } | |
569 | - | |
570 | - $filters_options = explode(',',$filter[2][0]); | |
571 | - | |
572 | - foreach($filters_options as $filter_options){ | |
573 | - $value = TaxValueString::find()->innerJoinWith('taxOption')->andWhere(['value'=>$filter_options])->andWhere(['tax_option.tax_group_id' => $taxGroup->tax_group_id])->one(); | |
574 | - | |
575 | - if (!$value instanceof TaxValueString) { | |
576 | - // Create option | |
577 | - $option = new TaxOption(); | |
578 | - $option->tax_group_id = $taxGroup->tax_group_id; | |
579 | - $option->name = $filter_options; | |
580 | - $option->save(); | |
581 | - | |
582 | - $value = new TaxValueString(); | |
583 | - $value->tax_option_id = $option->tax_option_id; | |
584 | - $value->value = $filter_options; | |
585 | - $value->save(); | |
586 | - | |
587 | - $option->default_value = $value->tax_value_id; | |
588 | - $option->save(); | |
585 | + | |
586 | + /** | |
587 | + * @param $filters array of filters like [['pol'='ะผัะถัะบะพะน'],['god' = '2013'],['volume'='25 | |
588 | + * ะป']*['size'='49 x 30 x 20ัะผ'],['composition'='600D ะฟะพะปะธัััะตั']] | |
589 | + * @param $level 0 for products and 1 for product variant | |
590 | + * @param $catalog_names array catalogs id | |
591 | + * | |
592 | + * @return array | |
593 | + */ | |
594 | + private function saveFilters($filters, $level, $catalog_names) | |
595 | + { | |
596 | + $options = []; | |
597 | + foreach ($filters as $filter) { | |
598 | + | |
599 | + preg_match_all('/\[(.*):(.*)\]/', $filter, $filter); | |
600 | + | |
601 | + if (empty( $filter[ 1 ][ 0 ] )) { | |
602 | + continue; | |
603 | + } | |
604 | + $filter_name = trim($filter[ 1 ][ 0 ]); | |
605 | + | |
606 | + $taxGroup = TaxGroup::find() | |
607 | + ->where([ 'alias' => $filter_name ]) | |
608 | + ->one(); | |
609 | + if (!$taxGroup instanceof TaxGroup) { | |
610 | + $taxGroup = new TaxGroup(); | |
611 | + $taxGroup->alias = $filter_name; | |
612 | + $taxGroup->level = $level; | |
613 | + $taxGroup->name = $filter_name; | |
614 | + $taxGroup->module = 'string'; | |
615 | + $taxGroup->hierarchical = false; | |
616 | + $taxGroup->categories = $catalog_names; | |
617 | + $taxGroup->is_filter = false; | |
618 | + $taxGroup->save(); | |
619 | + } | |
620 | + | |
621 | + $filters_options = explode(',', $filter[ 2 ][ 0 ]); | |
622 | + | |
623 | + foreach ($filters_options as $filter_options) { | |
624 | + $value = TaxValueString::find() | |
625 | + ->innerJoinWith('taxOption') | |
626 | + ->andWhere([ 'value' => $filter_options ]) | |
627 | + ->andWhere([ 'tax_option.tax_group_id' => $taxGroup->tax_group_id ]) | |
628 | + ->one(); | |
629 | + | |
630 | + if (!$value instanceof TaxValueString) { | |
631 | + // Create option | |
632 | + $option = new TaxOption(); | |
633 | + $option->tax_group_id = $taxGroup->tax_group_id; | |
634 | + $option->name = $filter_options; | |
635 | + $option->save(); | |
636 | + | |
637 | + $value = new TaxValueString(); | |
638 | + $value->tax_option_id = $option->tax_option_id; | |
639 | + $value->value = $filter_options; | |
640 | + $value->save(); | |
641 | + | |
642 | + $option->default_value = $value->tax_value_id; | |
643 | + $option->save(); | |
644 | + } | |
645 | + $options[] = $value->tax_option_id; | |
646 | + | |
589 | 647 | } |
590 | - $options[] = $value->tax_option_id; | |
591 | - | |
648 | + | |
592 | 649 | } |
593 | - | |
594 | - | |
650 | + | |
651 | + return $options; | |
595 | 652 | } |
596 | - | |
597 | - return $options; | |
598 | - } | |
599 | -} | |
600 | 653 | \ No newline at end of file |
654 | + } | |
601 | 655 | \ No newline at end of file | ... | ... |