From aa518ad34e489d4b9c6111c423aa9eda1cde5022 Mon Sep 17 00:00:00 2001 From: Mihail Date: Fri, 11 Sep 2015 14:45:53 +0300 Subject: [PATCH] finishing with converter and dynamic form --- backend/components/parsers/CustomCsvParser.php | 2 -- backend/components/parsers/config.php | 1 + backend/controllers/ParserController.php | 4 +++- common/components/CustomVarDamp.php | 8 +++++++- vendor/yiisoft/multiparser/CSVConverter.php | 22 +++++++++++----------- vendor/yiisoft/multiparser/CsvParser.php | 11 ++++++----- vendor/yiisoft/multiparser/DynamicFormHelper.php | 18 ++++++++++++++++-- vendor/yiisoft/multiparser/Encoder.php | 18 +++++++++--------- 8 files changed, 53 insertions(+), 31 deletions(-) diff --git a/backend/components/parsers/CustomCsvParser.php b/backend/components/parsers/CustomCsvParser.php index 190fd91..55f3153 100644 --- a/backend/components/parsers/CustomCsvParser.php +++ b/backend/components/parsers/CustomCsvParser.php @@ -17,14 +17,12 @@ class CustomCsvParser extends \yii\multiparser\CsvParser { public function setupConverter() { - if ($this->hasHeaderRow) { // если у файла есть заголовок, то в результате имеем ассоциативный массив $this->converter_conf['hasKey'] = 1; } $this->converter = \Yii::createObject($this->converter_conf); - \common\components\CustomVarDamp::dumpAndDie($this); } diff --git a/backend/components/parsers/config.php b/backend/components/parsers/config.php index b98cbfb..a4b5009 100644 --- a/backend/components/parsers/config.php +++ b/backend/components/parsers/config.php @@ -11,6 +11,7 @@ ,]], 'basic_column' => [ + Null => 'Пусто', "BRAND" => 'Бренд', "ARTICLE"=> 'Артикул', "PRICE" => 'Цена', diff --git a/backend/controllers/ParserController.php b/backend/controllers/ParserController.php index 4b86f2a..633d432 100644 --- a/backend/controllers/ParserController.php +++ b/backend/controllers/ParserController.php @@ -120,7 +120,9 @@ public function actionWrite() //CustomVarDamp::dumpAndDie($model); if ($model->validate()) { $arr = $model->toArray(); - CustomVarDamp::dumpAndDie($arr); + $data = json_decode( Yii::$app->getCache()->get( 'parser_data' ),true ); + + CustomVarDamp::dumpAndDie(DynamicFormHelper::CreateAssocArray($data, $arr)); } diff --git a/common/components/CustomVarDamp.php b/common/components/CustomVarDamp.php index adb1aff..4d45831 100644 --- a/common/components/CustomVarDamp.php +++ b/common/components/CustomVarDamp.php @@ -17,10 +17,16 @@ class CustomVarDamp extends BaseVarDumper { echo ""; die; } - public static function dump($var, $depth = 10, $highlight = false) + public static function dump($var, $step = '', $depth = 10, $highlight = false) { echo "
";
+        if ($step) {
+            echo "-------------- {$step} -------------";
+        }
         echo static::dumpAsString($var, $depth, $highlight);
+        if ($step) {
+            echo "-------------- {$step} -------------";
+        }
         echo "
"; } diff --git a/vendor/yiisoft/multiparser/CSVConverter.php b/vendor/yiisoft/multiparser/CSVConverter.php index dbbe6a2..8f535ff 100644 --- a/vendor/yiisoft/multiparser/CSVConverter.php +++ b/vendor/yiisoft/multiparser/CSVConverter.php @@ -12,9 +12,9 @@ namespace yii\multiparser; class CSVConverter { - protected static $method_prefix = 'convertTo'; + const METHOD_PREFIX = 'convertTo'; - public static $configuration = []; + public $configuration = []; protected static function convertToFloat($value) { @@ -50,6 +50,7 @@ class CSVConverter protected static function convertToString($value) { + $res = ''; if (is_array($value)) { @@ -72,14 +73,14 @@ class CSVConverter */ public static function __callStatic( $name, $value ) { - $method_name = self::$method_prefix . $name; - if ( is_callable( $method_name ) ) { + $method_name = self::METHOD_PREFIX . $name; + if ( method_exists( self::class ,$method_name ) ) { - self::$method_name( $value ); + return self::$method_name( $value[0] ); } else{ // если такого метода конвертации не предусмотрено, то возвращаем не конвертируя - return $value; + return $value[0]; } } @@ -90,13 +91,12 @@ class CSVConverter * @return mixed * конвертирует массив по полученным настройкам, вызывая последовательно функции конвертации (указанные в конфигурации) */ - public static function convertByConfiguration( $arr ) + public function convertByConfiguration( $arr ) { $result = $arr; - $hasKey = isset( self::$configuration['hasKey'] ); - - foreach ( self::$configuration as $key => $value ) { + $hasKey = isset( $this->configuration['hasKey'] ); + foreach ( $this->configuration as $key => $value ) { if ( $hasKey ){ // у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности @@ -118,7 +118,7 @@ class CSVConverter } } else { - // нет заголовка - мы можем конвертировать только с року в целом + // нет заголовка - мы можем конвертировать только строку в целом $result = self::$key( $arr ); } diff --git a/vendor/yiisoft/multiparser/CsvParser.php b/vendor/yiisoft/multiparser/CsvParser.php index 284a789..bb70d41 100644 --- a/vendor/yiisoft/multiparser/CsvParser.php +++ b/vendor/yiisoft/multiparser/CsvParser.php @@ -59,6 +59,7 @@ class CsvParser implements ParserInterface $this->file->setCsvControl($this->delimiter); $this->file->setFlags(\SplFileObject::READ_CSV); $this->file->setFlags(\SplFileObject::SKIP_EMPTY); + if ($this->auto_detect_first_line) { $this->shiftToFirstValuableLine(); } @@ -78,6 +79,7 @@ class CsvParser implements ParserInterface $this->converter_conf['hasKey'] = 1; } $this->converter->configuration = $this->converter_conf; + } } @@ -119,6 +121,7 @@ class CsvParser implements ParserInterface */ public function read() { + $return = []; $current_line = 0; @@ -126,7 +129,6 @@ class CsvParser implements ParserInterface while (($row = $this->readRow()) !== FALSE) { $current_line++; - if ($this->hasHeaderRow) { if ($this->keys === NULL) { $this->keys = array_values($row); @@ -168,8 +170,9 @@ class CsvParser implements ParserInterface $row = $this->file->fgetcsv(); if (is_array($row)) { // попытаемся конвертировать прочитанные занчения согдасно конфигурации котнвертера значений + // \common\components\CustomVarDamp::dump($row,1); $row = $this->convert($row); - + // \common\components\CustomVarDamp::dump($row,2); if ($this->first_column) { $row = array_slice($row, $this->first_column); @@ -193,11 +196,9 @@ class CsvParser implements ParserInterface $result = $arr; $converter = $this->converter; - //\common\components\CustomVarDamp::dumpAndDie($this); - if (!is_null($converter)) { - $result = $converter::convertByConfiguration($arr); + $result = $converter->convertByConfiguration( $arr ); } diff --git a/vendor/yiisoft/multiparser/DynamicFormHelper.php b/vendor/yiisoft/multiparser/DynamicFormHelper.php index 249aaeb..786a59e 100644 --- a/vendor/yiisoft/multiparser/DynamicFormHelper.php +++ b/vendor/yiisoft/multiparser/DynamicFormHelper.php @@ -11,6 +11,7 @@ namespace yii\multiparser; use yii\base\DynamicModel; use yii\grid\GridView; use yii\grid\SerialColumn; +use yii\helpers\ArrayHelper; /** * Class DynamicFormHelper @@ -20,6 +21,8 @@ use yii\grid\SerialColumn; class DynamicFormHelper { + const KEY_PREFIX = 'attr_'; + private static $key_array; /** * @param $source - int or array @@ -36,7 +39,7 @@ class DynamicFormHelper $i = 0; while ($source > $i) { - $arr_keys[] = "attr_{$i}"; + $arr_keys[] = self::KEY_PREFIX . $i; $i++; } array_flip($arr_keys); @@ -58,7 +61,6 @@ class DynamicFormHelper $columns_config[] = ['header' => $form->field($header_model, $key, ['inputOptions' => ['label' => '']])->dropDownList($arr_header_values), 'attribute' => $i]; $i++; } - $dynamic_grid_view = GridView::widget( ['dataProvider' => $dataProvider, 'columns' => $columns_config ] ); @@ -66,6 +68,18 @@ class DynamicFormHelper } + public static function CreateAssocArray ($value_arr, $key_array) + { + + self::$key_array = $key_array; + $result = array_map( + function ($value) { + return array_combine( self::$key_array, $value ); + + }, + $value_arr); + return $result; + } } \ No newline at end of file diff --git a/vendor/yiisoft/multiparser/Encoder.php b/vendor/yiisoft/multiparser/Encoder.php index 7661b6a..1565ef3 100644 --- a/vendor/yiisoft/multiparser/Encoder.php +++ b/vendor/yiisoft/multiparser/Encoder.php @@ -20,7 +20,7 @@ class Encoder { $old_content = file_get_contents($filePath); - $encode_content = self::encode( $in_charset, $out_charset, $old_content ); + $encode_content = self::encodeString( $old_content, $in_charset, $out_charset ); $file = @fopen($filePath, "w"); fwrite($file, $encode_content); @fclose($file); @@ -28,16 +28,16 @@ class Encoder public static function encodeArray( $array, $in_charset = '', $out_charset = '') { - if (isset($in_charset)) - self::$in_charset = isset($in_charset); + if ($in_charset) + self::$in_charset = $in_charset; - if (isset($out_charset)) + if ($out_charset) self::$out_charset = $out_charset; $result = array_map( - function ( $array) { + function ($value) { - return self::encodeString( $array, self::$in_charset, self::$out_charset ); + return self::encodeString( $value, self::$in_charset, self::$out_charset ); }, $array); @@ -47,10 +47,10 @@ class Encoder public static function encodeString( $source, $in_charset = '', $out_charset = '' ){ - if (isset($in_charset)) - self::$in_charset = isset($in_charset); + if ($in_charset) + self::$in_charset = $in_charset; - if (isset($out_charset)) + if ($out_charset) self::$out_charset = $out_charset; return iconv( self::$in_charset, self::$out_charset, $source ); -- libgit2 0.21.4