Blame view

vendor/yiisoft/multiparser/Converter.php 5.27 KB
74072a2a   Mihail   add first version...
1
2
3
4
5
6
7
8
9
  <?php
  /**
  * Created by PhpStorm.
   * User: Cibermag
  * Date: 31.08.2015
  * Time: 12:50
  */
  
  namespace yii\multiparser;
93e39994   Mihail   fixed parser and ...
10
  use common\components\CustomVarDamp;
28253169   Mihail   add converter as ...
11
  use yii\base\Behavior;
d3cf6647   Mihail   add multiply pric...
12
  use yii\base\ErrorException;
74072a2a   Mihail   add first version...
13
14
  
  // класс который содержит преобразователи значений (фильтры) используемые при парсинге
28253169   Mihail   add converter as ...
15
  class Converter extends Behavior
74072a2a   Mihail   add first version...
16
17
  {
  
aa518ad3   Mihail   finishing with co...
18
      const METHOD_PREFIX = 'convertTo';
74072a2a   Mihail   add first version...
19
  
8894c93a   Mihail   add Importers fil...
20
      //public  $configuration = [];
74072a2a   Mihail   add first version...
21
  
8894c93a   Mihail   add Importers fil...
22
      public static function convertToFloat($value)
74072a2a   Mihail   add first version...
23
      {
74072a2a   Mihail   add first version...
24
25
26
27
28
29
30
31
32
33
34
35
36
37
          if ($value == '') {
              $value = 0;
          }
          $value = trim(str_replace(",", ".", $value));
          $value = preg_replace("/[^0-9.]+/", "", strtoupper($value));
  
          if ($value == '') {
              return '';
          }
          $value = round( (float)$value, 2 );
  
          return $value;
      }
  
8894c93a   Mihail   add Importers fil...
38
      public static function convertToInteger($value)
74072a2a   Mihail   add first version...
39
40
41
42
43
44
45
46
47
48
49
50
51
52
      {
          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...
53
      public static function convertToEncode($value)
74072a2a   Mihail   add first version...
54
      {
df629228   Mihail   console csv parsing
55
          $res = $value;
74072a2a   Mihail   add first version...
56
57
58
59
60
61
62
63
64
          if (is_array($value)) {
  
              $res = Encoder::encodeArray($value);
  
          }elseif ( is_string($value) ) {
  
              $res = Encoder::encodeString($value);
  
          }
74072a2a   Mihail   add first version...
65
66
67
          return $res;
      }
  
74072a2a   Mihail   add first version...
68
69
70
71
72
73
74
75
  
      /**
       * @param $name - имя метода конвертации
       * @param $value - значение на конвертацию
       * @return mixed
       */
      public static function __callStatic( $name, $value )
      {
aa518ad3   Mihail   finishing with co...
76
          $method_name =  self::METHOD_PREFIX . $name;
74072a2a   Mihail   add first version...
77
  
34d480b7   Mihail   temp commit - wor...
78
79
          if ( method_exists( static::class, $method_name ) ) {
              return static::$method_name( $value[0] );
74072a2a   Mihail   add first version...
80
81
82
  
          } else{
              // если такого метода конвертации не предусмотрено, то возвращаем не конвертируя
aa518ad3   Mihail   finishing with co...
83
              return $value[0];
74072a2a   Mihail   add first version...
84
85
86
87
  
          }
      }
  
28253169   Mihail   add converter as ...
88
89
90
91
92
      public function __call($name, $params)
      {
          return self::__callStatic( $name, $params );
      }
  
74072a2a   Mihail   add first version...
93
94
  
      /**
8894c93a   Mihail   add Importers fil...
95
96
       * @param $arr - массив для конвертирования
       * @param $configuration - массив конфигурация конвертирования
74072a2a   Mihail   add first version...
97
98
99
       * @return mixed
       * конвертирует массив по полученным настройкам, вызывая последовательно функции конвертации (указанные в конфигурации)
       */
8894c93a   Mihail   add Importers fil...
100
      public static function convertByConfiguration( $arr, $configuration  )
74072a2a   Mihail   add first version...
101
      {
d3cf6647   Mihail   add multiply pric...
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
          if( $hasKey = isset( $configuration['hasKey'] ) )
              unset( $configuration['hasKey'] );
  
          if ( isset( $configuration['configuration'] ) ) {
              $arr_config = $configuration['configuration'];
              unset( $configuration['configuration'] );
          } else{
              throw new ErrorException('Не указан обязательный параметр конфигурационного файла - converter_conf[configuration]');
          }
  
              // проставим аттрибуды из конфига{}{}
          foreach ($configuration as $key_setting => $setting) {
              if( property_exists( static::class, $key_setting ) )
                  static::$$key_setting = $setting;
          }
  
          foreach ( $arr_config as $key => $value ) {
74072a2a   Mihail   add first version...
119
120
121
              if ( $hasKey ){
                  //  у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности
                  if ( is_array( $value ) ) {
34d480b7   Mihail   temp commit - wor...
122
123
124
                      //если пустой массив то конвертируем всю строку
                      if (count( $value ) === 0 ){
  
df629228   Mihail   console csv parsing
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])) {
                              // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
df629228   Mihail   console csv parsing
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])) {
                          // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
df629228   Mihail   console csv parsing
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
                  // нет заголовка - мы можем конвертировать только строку в целом
df629228   Mihail   console csv parsing
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
156
      }
  
  
d21c5c5f   Mihail   XMLparser - read ...
157
  
74072a2a   Mihail   add first version...
158
  }