Commit aa518ad34e489d4b9c6111c423aa9eda1cde5022
1 parent
74072a2a
finishing with converter and dynamic form
Showing
8 changed files
with
53 additions
and
31 deletions
Show diff stats
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
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 ); |