74072a2a
Mihail
add first version...
|
1
2
|
<?php
/**
|
6215a30d
Mihail
add converter int...
|
3
|
* Created by PhpStorm.
|
74072a2a
Mihail
add first version...
|
4
|
* User: Cibermag
|
6215a30d
Mihail
add converter int...
|
5
6
7
|
* Date: 31.08.2015
* Time: 12:50
*/
|
74072a2a
Mihail
add first version...
|
8
9
|
namespace yii\multiparser;
|
74072a2a
Mihail
add first version...
|
10
11
|
// класс который содержит преобразователи значений (фильтры) используемые при парсинге
|
6215a30d
Mihail
add converter int...
|
12
|
class Converter implements ConverterInterface
|
74072a2a
Mihail
add first version...
|
13
14
|
{
|
aa518ad3
Mihail
finishing with co...
|
15
|
const METHOD_PREFIX = 'convertTo';
|
74072a2a
Mihail
add first version...
|
16
|
|
8894c93a
Mihail
add Importers fil...
|
17
|
//public $configuration = [];
|
74072a2a
Mihail
add first version...
|
18
|
|
8894c93a
Mihail
add Importers fil...
|
19
|
public static function convertToFloat($value)
|
74072a2a
Mihail
add first version...
|
20
|
{
|
74072a2a
Mihail
add first version...
|
21
22
23
24
25
26
27
28
29
|
if ($value == '') {
$value = 0;
}
$value = trim(str_replace(",", ".", $value));
$value = preg_replace("/[^0-9.]+/", "", strtoupper($value));
if ($value == '') {
return '';
}
|
6215a30d
Mihail
add converter int...
|
30
|
$value = round((float)$value, 2);
|
74072a2a
Mihail
add first version...
|
31
32
33
34
|
return $value;
}
|
8894c93a
Mihail
add Importers fil...
|
35
|
public static function convertToInteger($value)
|
74072a2a
Mihail
add first version...
|
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
{
if ($value == '') {
$value = 0;
}
$value = trim(str_replace(",", ".", $value));
$value = preg_replace("/[^0-9.]+/", "", strtoupper($value));
if ($value == '') {
return '';
}
$value = round((int)$value, 2);
return $value;
}
|
3da8b25f
Mihail
fixed issues with...
|
50
|
public static function convertToEncode($value)
|
74072a2a
Mihail
add first version...
|
51
|
{
|
df629228
Mihail
console csv parsing
|
52
|
$res = $value;
|
74072a2a
Mihail
add first version...
|
53
54
55
56
|
if (is_array($value)) {
$res = Encoder::encodeArray($value);
|
6215a30d
Mihail
add converter int...
|
57
|
} elseif (is_string($value)) {
|
74072a2a
Mihail
add first version...
|
58
59
60
61
|
$res = Encoder::encodeString($value);
}
|
74072a2a
Mihail
add first version...
|
62
63
64
|
return $res;
}
|
6215a30d
Mihail
add converter int...
|
65
66
67
68
69
70
|
public static function convertToString($value)
{
$value = self::convertToEncode($value);
return str_replace(array('!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '=', '-', '~', '`', '"', "'", ' ', '№', '%', ';', ':', '[', ']', '{', '}', '*', '?', '/', '\'', '|', '.', ',', '<', '>', '\\'), '', $value);
}
|
74072a2a
Mihail
add first version...
|
71
72
73
74
75
76
|
/**
* @param $name - имя метода конвертации
* @param $value - значение на конвертацию
* @return mixed
*/
|
6215a30d
Mihail
add converter int...
|
77
|
public static function __callStatic($name, $value)
|
74072a2a
Mihail
add first version...
|
78
|
{
|
6215a30d
Mihail
add converter int...
|
79
|
$method_name = self::METHOD_PREFIX . $name;
|
74072a2a
Mihail
add first version...
|
80
|
|
6215a30d
Mihail
add converter int...
|
81
82
|
if (method_exists(static::class, $method_name)) {
return static::$method_name($value[0]);
|
74072a2a
Mihail
add first version...
|
83
|
|
6215a30d
Mihail
add converter int...
|
84
|
} else {
|
74072a2a
Mihail
add first version...
|
85
|
// если такого метода конвертации не предусмотрено, то возвращаем не конвертируя
|
aa518ad3
Mihail
finishing with co...
|
86
|
return $value[0];
|
74072a2a
Mihail
add first version...
|
87
88
89
90
|
}
}
|
28253169
Mihail
add converter as ...
|
91
92
|
public function __call($name, $params)
{
|
6215a30d
Mihail
add converter int...
|
93
|
return self::__callStatic($name, $params);
|
28253169
Mihail
add converter as ...
|
94
95
|
}
|
74072a2a
Mihail
add first version...
|
96
97
|
/**
|
8894c93a
Mihail
add Importers fil...
|
98
99
|
* @param $arr - массив для конвертирования
* @param $configuration - массив конфигурация конвертирования
|
74072a2a
Mihail
add first version...
|
100
101
102
|
* @return mixed
* конвертирует массив по полученным настройкам, вызывая последовательно функции конвертации (указанные в конфигурации)
*/
|
6215a30d
Mihail
add converter int...
|
103
|
public static function convertByConfiguration($arr, $configuration)
|
74072a2a
Mihail
add first version...
|
104
|
{
|
6215a30d
Mihail
add converter int...
|
105
106
|
if ($hasKey = isset($configuration['hasKey']))
unset($configuration['hasKey']);
|
d3cf6647
Mihail
add multiply pric...
|
107
|
|
6215a30d
Mihail
add converter int...
|
108
|
if (isset($configuration['configuration'])) {
|
d3cf6647
Mihail
add multiply pric...
|
109
|
$arr_config = $configuration['configuration'];
|
6215a30d
Mihail
add converter int...
|
110
111
112
|
unset($configuration['configuration']);
} else {
throw new \ErrorException('Не указан обязательный параметр конфигурационного файла - converter_conf[configuration]');
|
d3cf6647
Mihail
add multiply pric...
|
113
114
|
}
|
6215a30d
Mihail
add converter int...
|
115
116
|
// проставим аттрибуты из конфига{}{}
self::setAttributes($configuration);
|
d3cf6647
Mihail
add multiply pric...
|
117
|
|
6215a30d
Mihail
add converter int...
|
118
119
|
foreach ($arr_config as $key => $value) {
if ($hasKey) {
|
74072a2a
Mihail
add first version...
|
120
|
// у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности
|
6215a30d
Mihail
add converter int...
|
121
|
if (is_array($value)) {
|
34d480b7
Mihail
temp commit - wor...
|
122
|
//если пустой массив то конвертируем всю строку
|
6215a30d
Mihail
add converter int...
|
123
|
if (count($value) === 0) {
|
34d480b7
Mihail
temp commit - wor...
|
124
|
|
6215a30d
Mihail
add converter int...
|
125
|
$arr = self::$key($arr);
|
34d480b7
Mihail
temp commit - wor...
|
126
127
128
|
continue;
}
// иначе конвертируем каждую ячейку в отдельности
|
74072a2a
Mihail
add first version...
|
129
130
131
|
foreach ($value as $sub_value) {
if (isset($arr[$sub_value])) {
// конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
|
6215a30d
Mihail
add converter int...
|
132
|
$arr[$sub_value] = self::$key($arr[$sub_value]);
|
74072a2a
Mihail
add first version...
|
133
134
135
136
137
138
139
|
}
}
} else {
if (isset($arr[$value])) {
// конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
|
6215a30d
Mihail
add converter int...
|
140
141
|
$arr[$value] = self::$key($arr[$value]);
// CustomVarDamp::dump($result);
|
74072a2a
Mihail
add first version...
|
142
143
144
145
146
|
}
}
} else {
|
aa518ad3
Mihail
finishing with co...
|
147
|
// нет заголовка - мы можем конвертировать только строку в целом
|
6215a30d
Mihail
add converter int...
|
148
|
$arr = self::$key($arr);
|
74072a2a
Mihail
add first version...
|
149
150
151
152
|
}
}
|
df629228
Mihail
console csv parsing
|
153
|
return $arr;
|
74072a2a
Mihail
add first version...
|
154
155
|
}
|
6215a30d
Mihail
add converter int...
|
156
157
158
159
160
161
162
163
|
public static function setAttributes($configuration)
{
foreach ($configuration as $key_setting => $setting) {
if (property_exists(static::class, $key_setting))
static::$$key_setting = $setting;
}
}
|
74072a2a
Mihail
add first version...
|
164
|
|
d21c5c5f
Mihail
XMLparser - read ...
|
165
|
|
74072a2a
Mihail
add first version...
|
166
|
}
|