Blame view

common/components/parsers/CustomConverter.php 4.3 KB
28253169   Mihail   add converter as ...
1
  <?php
bedb55fe   Mihail   fixed Image class
2
  namespace common\components\parsers;
34d480b7   Mihail   temp commit - wor...
3
  use common\components\CustomVarDamp;
28253169   Mihail   add converter as ...
4
  use yii\multiparser\Converter;
34d480b7   Mihail   temp commit - wor...
5
  use backend\models\Details;
28253169   Mihail   add converter as ...
6
7
8
9
10
11
12
13
  
  class CustomConverter extends Converter {
  
      /**
       * @param $value_arr - двумерный массив значений, которому нужно присвоить ключи
       * @param $key_array - ключи для вложенного массива
       * @return array - таблица с проименованными колонками
       */
d3cf6647   Mihail   add multiply pric...
14
15
16
      public static $sign;
      public static $multiplier;
  
0bec979b   Mihail   finish with xml a...
17
      public static function convertToAssocArray ( array $value_arr, array $key_array, $key_prefix = '' )
28253169   Mihail   add converter as ...
18
      {
8894c93a   Mihail   add Importers fil...
19
          // очистка служебного префикса в массиве заголовков
28253169   Mihail   add converter as ...
20
          if ($key_prefix) {
e9b63b6a   Mihail   fixed error in Co...
21
22
23
24
25
26
              // @todo оптимизировать - два переворота массива - избыточно
              $key_array = array_flip( $key_array );
  
              array_walk( $key_array,  function ( &$value, $key, $key_prefix ){ $value = str_replace( $key_prefix, '',$value ); }, $key_prefix );
  
              $key_array = array_flip( $key_array );
8894c93a   Mihail   add Importers fil...
27
28
              //уберем пустые элементы
              $key_array = array_filter($key_array,  function ($value){ return $value !==''; });
28253169   Mihail   add converter as ...
29
30
          }
  
0bec979b   Mihail   finish with xml a...
31
          array_walk( $value_arr,
e9b63b6a   Mihail   fixed error in Co...
32
              function ( &$value, $key, $key_array ) {
28253169   Mihail   add converter as ...
33
                  $res = $value;
0bec979b   Mihail   finish with xml a...
34
35
                  foreach ($res as $sub_key => $sub_value) {
                      if (isset($key_array[$sub_key])) {
28253169   Mihail   add converter as ...
36
                          // если такой ключ в базовом массиве (массиве ключей) есть, то заменим новым, иначе просто удалим
0bec979b   Mihail   finish with xml a...
37
                          $new_key = $key_array[$sub_key];
28253169   Mihail   add converter as ...
38
                          if( !array_key_exists( $new_key , $res ) ){
0bec979b   Mihail   finish with xml a...
39
                              $res[ $new_key ] = $value[$sub_key];
28253169   Mihail   add converter as ...
40
41
                          }
                      }
0bec979b   Mihail   finish with xml a...
42
43
                      unset( $res[$sub_key] );
                      $value = $res;
28253169   Mihail   add converter as ...
44
45
                  }
  
28253169   Mihail   add converter as ...
46
              },
0bec979b   Mihail   finish with xml a...
47
48
49
               $key_array);
  
          return $value_arr;
28253169   Mihail   add converter as ...
50
51
      }
  
dd60c760   Mihail   add menu and chec...
52
53
      /**
       * @param $value_arr - двумерный массив к которому нужно добавить колонки
0bec979b   Mihail   finish with xml a...
54
       * @param $add_array - массив с колонками (ключи) и значениями колонок
dd60c760   Mihail   add menu and chec...
55
56
57
       * @return mixed
       */
      public function addColumns ( array $value_arr ,  array $add_array )
8894c93a   Mihail   add Importers fil...
58
59
60
      {
          $i = 0;
          while ($i < count($value_arr)) {
9dd0fbe4   Mihail   add writing data ...
61
62
63
              foreach ($add_array as $add_key => $add_value) {
                  $value_arr[$i][$add_key] = $add_value;
              }
8894c93a   Mihail   add Importers fil...
64
65
              $i++;
          }
8894c93a   Mihail   add Importers fil...
66
67
          return $value_arr;
      }
34d480b7   Mihail   temp commit - wor...
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
  
      public static function convertToDetails ( array $row )
      {
          // присвоим полный артикул
          $row['FULL_ARTICLE'] = $row['ARTICLE'];
  
          $details_model = new Details();
          // проверим все ли обязательные колонки были указаны пользователем
          $details_model->load(['Details' => $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;
      }
  
d3cf6647   Mihail   add multiply pric...
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
      public function ConvertToMultiply ( array $row )
      {
          $PRICE = $row[ 'PRICE' ];
          $sign = self::$sign;
          $multiplier = self::$multiplier;
          //CustomVarDamp::dumpAndDie(self);
          if (isset($sign)) {
              if ($sign == '+') {
                  if ($multiplier > 0) {
                      $PRICE += $multiplier;
                  }
              }
              else if ($sign == '-') {
                  if ($multiplier > 0) {
                      $PRICE -= $multiplier;
                  }
              }
              else if ($sign == '*') {
                  if ($multiplier > 0) {
                      $PRICE *= $multiplier;
                  }
              }
              else if ($sign == '/') {
                  if ($multiplier > 0) {
                      $PRICE /= $multiplier;
                  }
              }
          }
  
          $row[ 'PRICE' ] = $PRICE;
  
          return $row;
  
      }
34d480b7   Mihail   temp commit - wor...
122
123
  
  
28253169   Mihail   add converter as ...
124
  }