Blame view

vendor/yiisoft/multiparser/Converter.php 4.58 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;
74072a2a   Mihail   add first version...
12
13
  
  // класс который содержит преобразователи значений (фильтры) используемые при парсинге
28253169   Mihail   add converter as ...
14
  class Converter extends Behavior
74072a2a   Mihail   add first version...
15
16
  {
  
aa518ad3   Mihail   finishing with co...
17
      const METHOD_PREFIX = 'convertTo';
74072a2a   Mihail   add first version...
18
  
8894c93a   Mihail   add Importers fil...
19
      //public  $configuration = [];
74072a2a   Mihail   add first version...
20
  
8894c93a   Mihail   add Importers fil...
21
      public static function convertToFloat($value)
74072a2a   Mihail   add first version...
22
      {
74072a2a   Mihail   add first version...
23
24
25
26
27
28
29
30
31
32
33
34
35
36
          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...
37
      public static function convertToInteger($value)
74072a2a   Mihail   add first version...
38
39
40
41
42
43
44
45
46
47
48
49
50
51
      {
          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;
      }
  
8894c93a   Mihail   add Importers fil...
52
      public static function convertToString($value)
74072a2a   Mihail   add first version...
53
      {
df629228   Mihail   console csv parsing
54
          $res = $value;
74072a2a   Mihail   add first version...
55
56
57
58
59
60
61
62
63
          if (is_array($value)) {
  
              $res = Encoder::encodeArray($value);
  
          }elseif ( is_string($value) ) {
  
              $res = Encoder::encodeString($value);
  
          }
74072a2a   Mihail   add first version...
64
65
66
          return $res;
      }
  
74072a2a   Mihail   add first version...
67
68
69
70
71
72
73
74
  
      /**
       * @param $name - имя метода конвертации
       * @param $value - значение на конвертацию
       * @return mixed
       */
      public static function __callStatic( $name, $value )
      {
aa518ad3   Mihail   finishing with co...
75
          $method_name =  self::METHOD_PREFIX . $name;
74072a2a   Mihail   add first version...
76
  
34d480b7   Mihail   temp commit - wor...
77
78
          if ( method_exists( static::class, $method_name ) ) {
              return static::$method_name( $value[0] );
74072a2a   Mihail   add first version...
79
80
81
  
          } else{
              // если такого метода конвертации не предусмотрено, то возвращаем не конвертируя
aa518ad3   Mihail   finishing with co...
82
              return $value[0];
74072a2a   Mihail   add first version...
83
84
85
86
  
          }
      }
  
28253169   Mihail   add converter as ...
87
88
89
90
91
      public function __call($name, $params)
      {
          return self::__callStatic( $name, $params );
      }
  
74072a2a   Mihail   add first version...
92
93
  
      /**
8894c93a   Mihail   add Importers fil...
94
95
       * @param $arr - массив для конвертирования
       * @param $configuration - массив конфигурация конвертирования
74072a2a   Mihail   add first version...
96
97
98
       * @return mixed
       * конвертирует массив по полученным настройкам, вызывая последовательно функции конвертации (указанные в конфигурации)
       */
8894c93a   Mihail   add Importers fil...
99
      public static function convertByConfiguration( $arr, $configuration  )
74072a2a   Mihail   add first version...
100
      {
8894c93a   Mihail   add Importers fil...
101
102
          $hasKey = isset( $configuration['hasKey'] );
          foreach ( $configuration['configuration'] as $key => $value ) {
74072a2a   Mihail   add first version...
103
104
105
              if ( $hasKey ){
                  //  у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности
                  if ( is_array( $value ) ) {
34d480b7   Mihail   temp commit - wor...
106
107
108
                      //если пустой массив то конвертируем всю строку
                      if (count( $value ) === 0 ){
  
df629228   Mihail   console csv parsing
109
                          $arr = self::$key( $arr );
34d480b7   Mihail   temp commit - wor...
110
111
112
                          continue;
                      }
                      // иначе конвертируем каждую ячейку в отдельности
74072a2a   Mihail   add first version...
113
114
115
                      foreach ($value as $sub_value) {
                          if (isset($arr[$sub_value])) {
                              // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
df629228   Mihail   console csv parsing
116
                              $arr[$sub_value] = self::$key( $arr[$sub_value] );
74072a2a   Mihail   add first version...
117
118
119
120
121
122
123
                          }
  
                      }
                  } else {
  
                      if (isset($arr[$value])) {
                          // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
df629228   Mihail   console csv parsing
124
125
                          $arr[$value] = self::$key( $arr[$value] );
                      //    CustomVarDamp::dump($result);
74072a2a   Mihail   add first version...
126
127
128
129
130
                      }
  
                  }
  
              } else {
aa518ad3   Mihail   finishing with co...
131
                  // нет заголовка - мы можем конвертировать только строку в целом
df629228   Mihail   console csv parsing
132
                  $arr = self::$key( $arr );
74072a2a   Mihail   add first version...
133
134
135
136
              }
  
          }
  
df629228   Mihail   console csv parsing
137
          return $arr;
74072a2a   Mihail   add first version...
138
139
140
      }
  
  
d21c5c5f   Mihail   XMLparser - read ...
141
  
74072a2a   Mihail   add first version...
142
  }