28253169
Mihail
add converter as ...
|
1
|
<?php
|
bedb55fe
Mihail
fixed Image class
|
2
|
namespace common\components\parsers;
|
ffd4b834
Mihail
add articul filte...
|
3
|
|
34d480b7
Mihail
temp commit - wor...
|
4
|
use common\components\CustomVarDamp;
|
28253169
Mihail
add converter as ...
|
5
|
use yii\multiparser\Converter;
|
34d480b7
Mihail
temp commit - wor...
|
6
|
use backend\models\Details;
|
706a1491
Mihail
add form, model a...
|
7
|
use backend\models\DetailsCrosses;
|
ffd4b834
Mihail
add articul filte...
|
8
|
use backend\models\ImportersPrefix;
|
28253169
Mihail
add converter as ...
|
9
|
|
ffd4b834
Mihail
add articul filte...
|
10
11
|
class CustomConverter extends Converter
{
|
28253169
Mihail
add converter as ...
|
12
13
14
15
16
17
|
/**
* @param $value_arr - двумерный массив значений, которому нужно присвоить ключи
* @param $key_array - ключи для вложенного массива
* @return array - таблица с проименованными колонками
*/
|
d3cf6647
Mihail
add multiply pric...
|
18
19
|
public static $sign;
public static $multiplier;
|
ffd4b834
Mihail
add articul filte...
|
20
|
public static $importer_id;
|
3da8b25f
Mihail
fixed issues with...
|
21
|
public static $brand;
|
d3cf6647
Mihail
add multiply pric...
|
22
|
|
ffd4b834
Mihail
add articul filte...
|
23
|
public static function convertToAssocArray(array $value_arr, array $key_array, $key_prefix = '')
|
28253169
Mihail
add converter as ...
|
24
|
{
|
8894c93a
Mihail
add Importers fil...
|
25
|
// очистка служебного префикса в массиве заголовков
|
28253169
Mihail
add converter as ...
|
26
|
if ($key_prefix) {
|
e9b63b6a
Mihail
fixed error in Co...
|
27
|
// @todo оптимизировать - два переворота массива - избыточно
|
ffd4b834
Mihail
add articul filte...
|
28
|
$key_array = array_flip($key_array);
|
e9b63b6a
Mihail
fixed error in Co...
|
29
|
|
ffd4b834
Mihail
add articul filte...
|
30
31
32
|
array_walk($key_array, function (&$value, $key, $key_prefix) {
$value = str_replace($key_prefix, '', $value);
}, $key_prefix);
|
e9b63b6a
Mihail
fixed error in Co...
|
33
|
|
ffd4b834
Mihail
add articul filte...
|
34
|
$key_array = array_flip($key_array);
|
8894c93a
Mihail
add Importers fil...
|
35
|
//уберем пустые элементы
|
ffd4b834
Mihail
add articul filte...
|
36
37
38
|
$key_array = array_filter($key_array, function ($value) {
return $value !== '';
});
|
28253169
Mihail
add converter as ...
|
39
40
|
}
|
ffd4b834
Mihail
add articul filte...
|
41
42
|
array_walk($value_arr,
function (&$value, $key, $key_array) {
|
28253169
Mihail
add converter as ...
|
43
|
$res = $value;
|
0bec979b
Mihail
finish with xml a...
|
44
45
|
foreach ($res as $sub_key => $sub_value) {
if (isset($key_array[$sub_key])) {
|
28253169
Mihail
add converter as ...
|
46
|
// если такой ключ в базовом массиве (массиве ключей) есть, то заменим новым, иначе просто удалим
|
0bec979b
Mihail
finish with xml a...
|
47
|
$new_key = $key_array[$sub_key];
|
ffd4b834
Mihail
add articul filte...
|
48
49
|
if (!array_key_exists($new_key, $res)) {
$res[$new_key] = $value[$sub_key];
|
28253169
Mihail
add converter as ...
|
50
51
|
}
}
|
ffd4b834
Mihail
add articul filte...
|
52
|
unset($res[$sub_key]);
|
0bec979b
Mihail
finish with xml a...
|
53
|
$value = $res;
|
28253169
Mihail
add converter as ...
|
54
55
|
}
|
28253169
Mihail
add converter as ...
|
56
|
},
|
ffd4b834
Mihail
add articul filte...
|
57
|
$key_array);
|
0bec979b
Mihail
finish with xml a...
|
58
59
|
return $value_arr;
|
28253169
Mihail
add converter as ...
|
60
61
|
}
|
dd60c760
Mihail
add menu and chec...
|
62
63
|
/**
* @param $value_arr - двумерный массив к которому нужно добавить колонки
|
0bec979b
Mihail
finish with xml a...
|
64
|
* @param $add_array - массив с колонками (ключи) и значениями колонок
|
dd60c760
Mihail
add menu and chec...
|
65
66
|
* @return mixed
*/
|
ffd4b834
Mihail
add articul filte...
|
67
|
public function addColumns(array $value_arr, array $add_array)
|
8894c93a
Mihail
add Importers fil...
|
68
69
70
|
{
$i = 0;
while ($i < count($value_arr)) {
|
9dd0fbe4
Mihail
add writing data ...
|
71
72
73
|
foreach ($add_array as $add_key => $add_value) {
$value_arr[$i][$add_key] = $add_value;
}
|
8894c93a
Mihail
add Importers fil...
|
74
75
|
$i++;
}
|
8894c93a
Mihail
add Importers fil...
|
76
77
|
return $value_arr;
}
|
34d480b7
Mihail
temp commit - wor...
|
78
|
|
ffd4b834
Mihail
add articul filte...
|
79
|
public static function convertToDetails(array $row)
|
34d480b7
Mihail
temp commit - wor...
|
80
81
82
83
84
85
86
87
|
{
// присвоим полный артикул
$row['FULL_ARTICLE'] = $row['ARTICLE'];
$details_model = new Details();
// проверим все ли обязательные колонки были указаны пользователем
$details_model->load(['Details' => $row]);
|
ffd4b834
Mihail
add articul filte...
|
88
|
if (!$details_model->validate()) {
|
34d480b7
Mihail
temp commit - wor...
|
89
|
$errors = '';
|
ffd4b834
Mihail
add articul filte...
|
90
91
|
foreach ($details_model->errors as $key => $arr_errors) {
$errors .= "Аттрибут $key - " . implode(' , ', $arr_errors);
|
34d480b7
Mihail
temp commit - wor...
|
92
|
}
|
ffd4b834
Mihail
add articul filte...
|
93
|
throw new \ErrorException($errors);
|
34d480b7
Mihail
temp commit - wor...
|
94
95
96
97
|
}
return $row;
}
|
706a1491
Mihail
add form, model a...
|
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
public static function convertToCrosses( array $row )
{
$details_model = new DetailsCrosses();
// проверим все ли обязательные колонки были указаны пользователем
$details_model->load(['DetailsCrosses' => $row]);
if (!$details_model->validate()) {
$errors = '';
foreach ($details_model->errors as $key => $arr_errors) {
$errors .= "Аттрибут $key - " . implode(' , ', $arr_errors);
}
throw new \ErrorException($errors);
}
return $row;
}
|
ffd4b834
Mihail
add articul filte...
|
114
|
public function ConvertToMultiply(array $row)
|
d3cf6647
Mihail
add multiply pric...
|
115
|
{
|
ffd4b834
Mihail
add articul filte...
|
116
|
$PRICE = $row['PRICE'];
|
d3cf6647
Mihail
add multiply pric...
|
117
118
119
120
121
122
123
124
|
$sign = self::$sign;
$multiplier = self::$multiplier;
//CustomVarDamp::dumpAndDie(self);
if (isset($sign)) {
if ($sign == '+') {
if ($multiplier > 0) {
$PRICE += $multiplier;
}
|
ffd4b834
Mihail
add articul filte...
|
125
|
} else if ($sign == '-') {
|
d3cf6647
Mihail
add multiply pric...
|
126
127
128
|
if ($multiplier > 0) {
$PRICE -= $multiplier;
}
|
ffd4b834
Mihail
add articul filte...
|
129
|
} else if ($sign == '*') {
|
d3cf6647
Mihail
add multiply pric...
|
130
131
132
|
if ($multiplier > 0) {
$PRICE *= $multiplier;
}
|
ffd4b834
Mihail
add articul filte...
|
133
|
} else if ($sign == '/') {
|
d3cf6647
Mihail
add multiply pric...
|
134
135
136
137
138
139
|
if ($multiplier > 0) {
$PRICE /= $multiplier;
}
}
}
|
ffd4b834
Mihail
add articul filte...
|
140
141
142
143
144
145
|
$row['PRICE'] = $PRICE;
return $row;
}
|
706a1491
Mihail
add form, model a...
|
146
|
public static function convertToArticle( $value, $importer_id = '' )
|
ffd4b834
Mihail
add articul filte...
|
147
|
{
|
706a1491
Mihail
add form, model a...
|
148
149
150
151
152
|
if(isset( $importer_id )){
self::$importer_id = $importer_id;
}
if (is_array($value)) {
|
ffd4b834
Mihail
add articul filte...
|
153
|
|
706a1491
Mihail
add form, model a...
|
154
|
$row = $value;
|
ffd4b834
Mihail
add articul filte...
|
155
156
157
158
159
160
|
// 1. Уберем префикс который разделен пробелом (если он есть)
$words = explode(" ", $row['ARTICLE']);
if (count($words) > 1) {
array_shift($words);
$row['ARTICLE'] = implode(" ", $words);
}
|
706a1491
Mihail
add form, model a...
|
161
162
163
|
if( isset( $row['BRAND'] ) && isset( self::$importer_id ) ){
// 2. Уберем брендовый префикс (если он есть)
|
3da8b25f
Mihail
fixed issues with...
|
164
|
self::$brand = $row['BRAND'];
|
706a1491
Mihail
add form, model a...
|
165
166
|
$prefix = '';
// запрос закешируем
|
3da8b25f
Mihail
fixed issues with...
|
167
|
$prefix = ImportersPrefix::getDb()->cache( function ($db) {
|
706a1491
Mihail
add form, model a...
|
168
|
return ImportersPrefix::find()->where([ 'importer_id' => self::$importer_id,
|
3da8b25f
Mihail
fixed issues with...
|
169
|
'brand' => self::$brand ])->one();
|
ffd4b834
Mihail
add articul filte...
|
170
|
});
|
d3cf6647
Mihail
add multiply pric...
|
171
|
|
706a1491
Mihail
add form, model a...
|
172
173
174
|
if ($prefix) {
$row['BRAND'] = str_replace($prefix, "", $row['BRAND']);
}
|
ffd4b834
Mihail
add articul filte...
|
175
|
}
|
706a1491
Mihail
add form, model a...
|
176
177
178
179
180
181
182
183
184
185
186
|
return $row;
} else {
$words = explode( " ", $value );
if ( count( $words ) > 1) {
array_shift( $words );
$value = implode( " ", $words );
}
return $value;
|
ffd4b834
Mihail
add articul filte...
|
187
|
}
|
ffd4b834
Mihail
add articul filte...
|
188
189
190
191
|
}
public static function convertToBrand($value)
{
|
3da8b25f
Mihail
fixed issues with...
|
192
|
$res = parent::convertToEncode($value);;
|
ffd4b834
Mihail
add articul filte...
|
193
194
195
196
197
198
199
200
201
|
$res = trim(strtoupper($res));
$res = str_replace("Ä", "A", str_replace("Ö", "O", str_replace("Ü", "U", str_replace("Ë", "E", str_replace("Ò", "O", $res)))));
$res = str_replace(array('@', '#', '~', '"', "'", "?", "!"), '', $res);
return $res;
}
public static function convertToString($value)
{
|
3da8b25f
Mihail
fixed issues with...
|
202
|
$value = parent::convertToEncode($value);
|
d3cf6647
Mihail
add multiply pric...
|
203
|
|
ffd4b834
Mihail
add articul filte...
|
204
|
return str_replace(array('!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '-', '~', '`', '"', "'", ' ', '№', '%', ';', ':', '[', ']', '{', '}', '*', '?', '/', '\'', '|', '.', ',', '<', '>', '\\'), '', $value);
|
d3cf6647
Mihail
add multiply pric...
|
205
|
}
|
34d480b7
Mihail
temp commit - wor...
|
206
207
|
|
28253169
Mihail
add converter as ...
|
208
|
}
|