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 ); |