Blame view

vendor/yiisoft/multiparser/Converter.php 5.61 KB
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
  }