Commit aa518ad34e489d4b9c6111c423aa9eda1cde5022

Authored by Mihail
1 parent 74072a2a

finishing with converter and dynamic form

backend/components/parsers/CustomCsvParser.php
@@ -17,14 +17,12 @@ class CustomCsvParser extends \yii\multiparser\CsvParser { @@ -17,14 +17,12 @@ class CustomCsvParser extends \yii\multiparser\CsvParser {
17 public function setupConverter() 17 public function setupConverter()
18 { 18 {
19 19
20 -  
21 if ($this->hasHeaderRow) { 20 if ($this->hasHeaderRow) {
22 // если у файла есть заголовок, то в результате имеем ассоциативный массив 21 // если у файла есть заголовок, то в результате имеем ассоциативный массив
23 $this->converter_conf['hasKey'] = 1; 22 $this->converter_conf['hasKey'] = 1;
24 } 23 }
25 24
26 $this->converter = \Yii::createObject($this->converter_conf); 25 $this->converter = \Yii::createObject($this->converter_conf);
27 - \common\components\CustomVarDamp::dumpAndDie($this);  
28 26
29 } 27 }
30 28
backend/components/parsers/config.php
@@ -11,6 +11,7 @@ @@ -11,6 +11,7 @@
11 ,]], 11 ,]],
12 12
13 'basic_column' => [ 13 'basic_column' => [
  14 + Null => 'Пусто',
14 "BRAND" => 'Бренд', 15 "BRAND" => 'Бренд',
15 "ARTICLE"=> 'Артикул', 16 "ARTICLE"=> 'Артикул',
16 "PRICE" => 'Цена', 17 "PRICE" => 'Цена',
backend/controllers/ParserController.php
@@ -120,7 +120,9 @@ public function actionWrite() @@ -120,7 +120,9 @@ public function actionWrite()
120 //CustomVarDamp::dumpAndDie($model); 120 //CustomVarDamp::dumpAndDie($model);
121 if ($model->validate()) { 121 if ($model->validate()) {
122 $arr = $model->toArray(); 122 $arr = $model->toArray();
123 - CustomVarDamp::dumpAndDie($arr); 123 + $data = json_decode( Yii::$app->getCache()->get( 'parser_data' ),true );
  124 +
  125 + CustomVarDamp::dumpAndDie(DynamicFormHelper::CreateAssocArray($data, $arr));
124 } 126 }
125 127
126 128
common/components/CustomVarDamp.php
@@ -17,10 +17,16 @@ class CustomVarDamp extends BaseVarDumper { @@ -17,10 +17,16 @@ class CustomVarDamp extends BaseVarDumper {
17 echo "</pre>"; 17 echo "</pre>";
18 die; 18 die;
19 } 19 }
20 - public static function dump($var, $depth = 10, $highlight = false) 20 + public static function dump($var, $step = '', $depth = 10, $highlight = false)
21 { 21 {
22 echo "<pre>"; 22 echo "<pre>";
  23 + if ($step) {
  24 + echo "-------------- {$step} -------------";
  25 + }
23 echo static::dumpAsString($var, $depth, $highlight); 26 echo static::dumpAsString($var, $depth, $highlight);
  27 + if ($step) {
  28 + echo "-------------- {$step} -------------";
  29 + }
24 echo "</pre>"; 30 echo "</pre>";
25 31
26 } 32 }
vendor/yiisoft/multiparser/CSVConverter.php
@@ -12,9 +12,9 @@ namespace yii\multiparser; @@ -12,9 +12,9 @@ namespace yii\multiparser;
12 class CSVConverter 12 class CSVConverter
13 { 13 {
14 14
15 - protected static $method_prefix = 'convertTo'; 15 + const METHOD_PREFIX = 'convertTo';
16 16
17 - public static $configuration = []; 17 + public $configuration = [];
18 18
19 protected static function convertToFloat($value) 19 protected static function convertToFloat($value)
20 { 20 {
@@ -50,6 +50,7 @@ class CSVConverter @@ -50,6 +50,7 @@ class CSVConverter
50 50
51 protected static function convertToString($value) 51 protected static function convertToString($value)
52 { 52 {
  53 +
53 $res = ''; 54 $res = '';
54 if (is_array($value)) { 55 if (is_array($value)) {
55 56
@@ -72,14 +73,14 @@ class CSVConverter @@ -72,14 +73,14 @@ class CSVConverter
72 */ 73 */
73 public static function __callStatic( $name, $value ) 74 public static function __callStatic( $name, $value )
74 { 75 {
75 - $method_name = self::$method_prefix . $name;  
76 - if ( is_callable( $method_name ) ) { 76 + $method_name = self::METHOD_PREFIX . $name;
  77 + if ( method_exists( self::class ,$method_name ) ) {
77 78
78 - self::$method_name( $value ); 79 + return self::$method_name( $value[0] );
79 80
80 } else{ 81 } else{
81 // если такого метода конвертации не предусмотрено, то возвращаем не конвертируя 82 // если такого метода конвертации не предусмотрено, то возвращаем не конвертируя
82 - return $value; 83 + return $value[0];
83 84
84 } 85 }
85 } 86 }
@@ -90,13 +91,12 @@ class CSVConverter @@ -90,13 +91,12 @@ class CSVConverter
90 * @return mixed 91 * @return mixed
91 * конвертирует массив по полученным настройкам, вызывая последовательно функции конвертации (указанные в конфигурации) 92 * конвертирует массив по полученным настройкам, вызывая последовательно функции конвертации (указанные в конфигурации)
92 */ 93 */
93 - public static function convertByConfiguration( $arr ) 94 + public function convertByConfiguration( $arr )
94 { 95 {
95 $result = $arr; 96 $result = $arr;
96 97
97 - $hasKey = isset( self::$configuration['hasKey'] );  
98 -  
99 - foreach ( self::$configuration as $key => $value ) { 98 + $hasKey = isset( $this->configuration['hasKey'] );
  99 + foreach ( $this->configuration as $key => $value ) {
100 100
101 if ( $hasKey ){ 101 if ( $hasKey ){
102 // у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности 102 // у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности
@@ -118,7 +118,7 @@ class CSVConverter @@ -118,7 +118,7 @@ class CSVConverter
118 } 118 }
119 119
120 } else { 120 } else {
121 - // нет заголовка - мы можем конвертировать только с року в целом 121 + // нет заголовка - мы можем конвертировать только строку в целом
122 $result = self::$key( $arr ); 122 $result = self::$key( $arr );
123 } 123 }
124 124
vendor/yiisoft/multiparser/CsvParser.php
@@ -59,6 +59,7 @@ class CsvParser implements ParserInterface @@ -59,6 +59,7 @@ class CsvParser implements ParserInterface
59 $this->file->setCsvControl($this->delimiter); 59 $this->file->setCsvControl($this->delimiter);
60 $this->file->setFlags(\SplFileObject::READ_CSV); 60 $this->file->setFlags(\SplFileObject::READ_CSV);
61 $this->file->setFlags(\SplFileObject::SKIP_EMPTY); 61 $this->file->setFlags(\SplFileObject::SKIP_EMPTY);
  62 +
62 if ($this->auto_detect_first_line) { 63 if ($this->auto_detect_first_line) {
63 $this->shiftToFirstValuableLine(); 64 $this->shiftToFirstValuableLine();
64 } 65 }
@@ -78,6 +79,7 @@ class CsvParser implements ParserInterface @@ -78,6 +79,7 @@ class CsvParser implements ParserInterface
78 $this->converter_conf['hasKey'] = 1; 79 $this->converter_conf['hasKey'] = 1;
79 } 80 }
80 $this->converter->configuration = $this->converter_conf; 81 $this->converter->configuration = $this->converter_conf;
  82 +
81 } 83 }
82 } 84 }
83 85
@@ -119,6 +121,7 @@ class CsvParser implements ParserInterface @@ -119,6 +121,7 @@ class CsvParser implements ParserInterface
119 */ 121 */
120 public function read() 122 public function read()
121 { 123 {
  124 +
122 $return = []; 125 $return = [];
123 126
124 $current_line = 0; 127 $current_line = 0;
@@ -126,7 +129,6 @@ class CsvParser implements ParserInterface @@ -126,7 +129,6 @@ class CsvParser implements ParserInterface
126 129
127 while (($row = $this->readRow()) !== FALSE) { 130 while (($row = $this->readRow()) !== FALSE) {
128 $current_line++; 131 $current_line++;
129 -  
130 if ($this->hasHeaderRow) { 132 if ($this->hasHeaderRow) {
131 if ($this->keys === NULL) { 133 if ($this->keys === NULL) {
132 $this->keys = array_values($row); 134 $this->keys = array_values($row);
@@ -168,8 +170,9 @@ class CsvParser implements ParserInterface @@ -168,8 +170,9 @@ class CsvParser implements ParserInterface
168 $row = $this->file->fgetcsv(); 170 $row = $this->file->fgetcsv();
169 if (is_array($row)) { 171 if (is_array($row)) {
170 // попытаемся конвертировать прочитанные занчения согдасно конфигурации котнвертера значений 172 // попытаемся конвертировать прочитанные занчения согдасно конфигурации котнвертера значений
  173 + // \common\components\CustomVarDamp::dump($row,1);
171 $row = $this->convert($row); 174 $row = $this->convert($row);
172 - 175 + // \common\components\CustomVarDamp::dump($row,2);
173 if ($this->first_column) { 176 if ($this->first_column) {
174 177
175 $row = array_slice($row, $this->first_column); 178 $row = array_slice($row, $this->first_column);
@@ -193,11 +196,9 @@ class CsvParser implements ParserInterface @@ -193,11 +196,9 @@ class CsvParser implements ParserInterface
193 $result = $arr; 196 $result = $arr;
194 $converter = $this->converter; 197 $converter = $this->converter;
195 198
196 - //\common\components\CustomVarDamp::dumpAndDie($this);  
197 -  
198 if (!is_null($converter)) { 199 if (!is_null($converter)) {
199 200
200 - $result = $converter::convertByConfiguration($arr); 201 + $result = $converter->convertByConfiguration( $arr );
201 202
202 } 203 }
203 204
vendor/yiisoft/multiparser/DynamicFormHelper.php
@@ -11,6 +11,7 @@ namespace yii\multiparser; @@ -11,6 +11,7 @@ namespace yii\multiparser;
11 use yii\base\DynamicModel; 11 use yii\base\DynamicModel;
12 use yii\grid\GridView; 12 use yii\grid\GridView;
13 use yii\grid\SerialColumn; 13 use yii\grid\SerialColumn;
  14 +use yii\helpers\ArrayHelper;
14 15
15 /** 16 /**
16 * Class DynamicFormHelper 17 * Class DynamicFormHelper
@@ -20,6 +21,8 @@ use yii\grid\SerialColumn; @@ -20,6 +21,8 @@ use yii\grid\SerialColumn;
20 class DynamicFormHelper 21 class DynamicFormHelper
21 { 22 {
22 23
  24 + const KEY_PREFIX = 'attr_';
  25 + private static $key_array;
23 26
24 /** 27 /**
25 * @param $source - int or array 28 * @param $source - int or array
@@ -36,7 +39,7 @@ class DynamicFormHelper @@ -36,7 +39,7 @@ class DynamicFormHelper
36 39
37 $i = 0; 40 $i = 0;
38 while ($source > $i) { 41 while ($source > $i) {
39 - $arr_keys[] = "attr_{$i}"; 42 + $arr_keys[] = self::KEY_PREFIX . $i;
40 $i++; 43 $i++;
41 } 44 }
42 array_flip($arr_keys); 45 array_flip($arr_keys);
@@ -58,7 +61,6 @@ class DynamicFormHelper @@ -58,7 +61,6 @@ class DynamicFormHelper
58 $columns_config[] = ['header' => $form->field($header_model, $key, ['inputOptions' => ['label' => '']])->dropDownList($arr_header_values), 'attribute' => $i]; 61 $columns_config[] = ['header' => $form->field($header_model, $key, ['inputOptions' => ['label' => '']])->dropDownList($arr_header_values), 'attribute' => $i];
59 $i++; 62 $i++;
60 } 63 }
61 -  
62 $dynamic_grid_view = GridView::widget( ['dataProvider' => $dataProvider, 64 $dynamic_grid_view = GridView::widget( ['dataProvider' => $dataProvider,
63 'columns' => $columns_config ] ); 65 'columns' => $columns_config ] );
64 66
@@ -66,6 +68,18 @@ class DynamicFormHelper @@ -66,6 +68,18 @@ class DynamicFormHelper
66 68
67 } 69 }
68 70
  71 + public static function CreateAssocArray ($value_arr, $key_array)
  72 + {
  73 +
  74 + self::$key_array = $key_array;
  75 + $result = array_map(
  76 + function ($value) {
69 77
  78 + return array_combine( self::$key_array, $value );
  79 +
  80 + },
  81 + $value_arr);
  82 + return $result;
  83 + }
70 84
71 } 85 }
72 \ No newline at end of file 86 \ No newline at end of file
vendor/yiisoft/multiparser/Encoder.php
@@ -20,7 +20,7 @@ class Encoder @@ -20,7 +20,7 @@ class Encoder
20 { 20 {
21 21
22 $old_content = file_get_contents($filePath); 22 $old_content = file_get_contents($filePath);
23 - $encode_content = self::encode( $in_charset, $out_charset, $old_content ); 23 + $encode_content = self::encodeString( $old_content, $in_charset, $out_charset );
24 $file = @fopen($filePath, "w"); 24 $file = @fopen($filePath, "w");
25 fwrite($file, $encode_content); 25 fwrite($file, $encode_content);
26 @fclose($file); 26 @fclose($file);
@@ -28,16 +28,16 @@ class Encoder @@ -28,16 +28,16 @@ class Encoder
28 28
29 public static function encodeArray( $array, $in_charset = '', $out_charset = '') 29 public static function encodeArray( $array, $in_charset = '', $out_charset = '')
30 { 30 {
31 - if (isset($in_charset))  
32 - self::$in_charset = isset($in_charset); 31 + if ($in_charset)
  32 + self::$in_charset = $in_charset;
33 33
34 - if (isset($out_charset)) 34 + if ($out_charset)
35 self::$out_charset = $out_charset; 35 self::$out_charset = $out_charset;
36 36
37 $result = array_map( 37 $result = array_map(
38 - function ( $array) { 38 + function ($value) {
39 39
40 - return self::encodeString( $array, self::$in_charset, self::$out_charset ); 40 + return self::encodeString( $value, self::$in_charset, self::$out_charset );
41 41
42 }, 42 },
43 $array); 43 $array);
@@ -47,10 +47,10 @@ class Encoder @@ -47,10 +47,10 @@ class Encoder
47 47
48 public static function encodeString( $source, $in_charset = '', $out_charset = '' ){ 48 public static function encodeString( $source, $in_charset = '', $out_charset = '' ){
49 49
50 - if (isset($in_charset))  
51 - self::$in_charset = isset($in_charset); 50 + if ($in_charset)
  51 + self::$in_charset = $in_charset;
52 52
53 - if (isset($out_charset)) 53 + if ($out_charset)
54 self::$out_charset = $out_charset; 54 self::$out_charset = $out_charset;
55 55
56 return iconv( self::$in_charset, self::$out_charset, $source ); 56 return iconv( self::$in_charset, self::$out_charset, $source );