Commit fe1397b32ad0cdd5e060936a133d65ba0f5d0d27

Authored by Administrator
2 parents e4e4ce76 ead5cb60

Merge branch 'master' of gitlab.artweb.com.ua:root/test_1

Conflicts:
	backend/components/parsers/CustomCsvParser.php
	backend/components/parsers/config.php
	backend/config/main.php
	backend/controllers/CheckPriceController.php
	backend/controllers/ParserController.php
	backend/views/layouts/column.php
	backend/views/parser/index.php
	backend/views/parser/server-files.php
	backend/web/css/plugins/daterangepicker/daterangepicker-bs3.css
	backend/web/css/plugins/daterangepicker/daterangepicker.js
	backend/web/css/plugins/daterangepicker/moment.js
	backend/web/css/plugins/daterangepicker/moment.min.js
	console/config/main.php
	console/migrations/m150925_111922_add_foreign_key_ImportFiles.php
	framework/core/Convert.php
	framework/lang/da.yml
	framework/lang/fr.yml
	framework/lang/nb.yml
	vendor/yiisoft/multiparser/Converter.php
	vendor/yiisoft/multiparser/CsvParser.php
	vendor/yiisoft/multiparser/YiiMultiparser.php
backend/components/parsers/CustomCsvParser.php
... ... @@ -9,6 +9,8 @@
9 9 namespace backend\components\parsers;
10 10  
11 11  
  12 +use common\components\CustomVarDamp;
  13 +
12 14 class CustomCsvParser extends \yii\multiparser\CsvParser {
13 15  
14 16 public $last_line = 10;
... ... @@ -33,9 +35,8 @@ class CustomCsvParser extends \yii\multiparser\CsvParser {
33 35 */
34 36 protected function convert($arr)
35 37 {
36   - $result = \Yii::$app->multiparser->convertByConfiguration( $arr, $this->converter_conf );
37   -
38   - return $result;
  38 + $arr = \Yii::$app->multiparser->convertByConfiguration($arr, $this->converter_conf);
  39 + return $arr;
39 40  
40 41 }
41 42  
... ...
backend/components/parsers/config.php
1 1 <?php
2 2 return [
3   - 'global' =>
4   - ['ini' => ['upload_max_filesize' => '20M',
5   - 'post_max_size integer' => '30M',
6   - ]],
7 3 'csv' =>
8 4 ['web' =>
9 5 ['class' => 'backend\components\parsers\CustomCsvParser',
... ... @@ -22,6 +18,27 @@
22 18 "ADD_BOX"=> 'В пути',
23 19 "GROUP" => 'Группа RG'
24 20 ],
  21 + 'console' =>
  22 + ['class' => 'backend\components\parsers\CustomCsvParser',
  23 + 'auto_detect_first_line' => true,
  24 + 'hasHeaderRow' => true,
  25 + 'converter_conf' => ['class' => ' backend\components\parsers\CustomConverter',
  26 + 'hasKey' => 1,
  27 + 'configuration' => ["string" => 'DESCR',
  28 + "float" => 'PRICE',
  29 + "integer" => ['BOX','ADD_BOX']
  30 + ]
  31 + ],],
  32 +
  33 + 'basic_column' => [
  34 + "BRAND" => 'Бренд',
  35 + "ARTICLE"=> 'Артикул',
  36 + "PRICE" => 'Цена',
  37 + "DESCR" => 'Наименование',
  38 + "BOX" => 'Колво',
  39 + "ADD_BOX"=> 'В пути',
  40 + "GROUP" => 'Группа RG'
  41 + ],
25 42 ],
26 43 'xml' =>
27 44 ['web' =>
... ...
backend/config/main.php
... ... @@ -28,7 +28,7 @@ return [
28 28 ],
29 29 ],
30 30 'errorHandler' => [
31   - 'errorAction' => 'site/error',
  31 + 'errorAction' => 'parser/error',
32 32 ],
33 33 'request'=>[
34 34  
... ...
backend/controllers/CheckPriceController.php
... ... @@ -8,8 +8,8 @@ use yii\filters\AccessControl;
8 8 use backend\components\base\BaseController;
9 9 use yii\filters\VerbFilter;
10 10 use backend\models\Details;
11   -use backend\models\ImporterFiles;
12   -use backend\models\Importer;
  11 +use backend\models\ImportersFiles;
  12 +use backend\models\Importers;
13 13 use yii\base\ErrorException;
14 14  
15 15 use common\components\CustomVarDamp;
... ... @@ -66,7 +66,11 @@ class CheckPriceController extends BaseController
66 66 }
67 67  
68 68 //$query = (new Query())->select('*')->from('{{%importer_files}}')->where(['not', ['time_end' => null]])->orderBy(['upload_time' => SORT_DESC]);
  69 +<<<<<<< HEAD
69 70 $query = Importer::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]);
  71 +=======
  72 + $query = Importers::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]);
  73 +>>>>>>> ead5cb60ac983cdb680ec70731de195b537be6cd
70 74  
71 75 $provider = new ActiveDataProvider([
72 76 'query' => $query,
... ...
backend/controllers/ParserController.php
... ... @@ -299,7 +299,7 @@ class ParserController extends BaseController
299 299 }
300 300 } else {
301 301 // Yii::$app->log->
302   - // не дошли до конца по этому остаки вернем в кеш
  302 + // не дошли до конца по этому остатки вернем в кеш
303 303 Yii::$app->cache->set( 'files_to_parse',json_encode( $arr_id_files ) );
304 304 }
305 305 }
... ...
backend/models/Importers.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\models;
  4 +
  5 +use Yii;
  6 +use backend\components\base\BaseActiveRecord;
  7 +
  8 +/**
  9 + * This is the model class for table "{{%importer}}".
  10 + *
  11 + * @property integer $id
  12 + * @property string $code
  13 + * @property string $name
  14 + * @property string $name_price
  15 + * @property string $currency_id
  16 + * @property string $delivery
  17 + * @property string $email
  18 + * @property string $info
  19 + * @property integer $active
  20 + * @property integer $PARSER_IS_ACTIVE
  21 + * @property string $PARSER_COLUMN_COUNT
  22 + * @property string $PARSER_FIELD_BRAND
  23 + * @property string $PARSER_FIELD_ARTICLE
  24 + * @property integer $PARSER_FIELD_ARTICLE_PREFIX
  25 + * @property string $PARSER_FIELD_PRICE
  26 + * @property string $PARSER_FIELD_DESCR
  27 + * @property string $PARSER_FIELD_BOX
  28 + * @property string $PARSER_FIELD_ADD_BOX
  29 + * @property string $PARSER_FIELD_GROUP_RG
  30 + * @property string $PARSER_FIELD_SIGN
  31 + * @property double $PARSER_FIELD_MULTIPLIER
  32 + * @property string $price_date_update
  33 + */
  34 +class Importers extends BaseActiveRecord
  35 +{
  36 +
  37 + public function rules()
  38 + {
  39 + return [
  40 + [['code', 'name', 'currency_id', 'delivery', 'price_date_update'], 'required'],
  41 + [['name_price', 'email', 'PARSER_FIELD_SIGN', 'info'], 'safe'],
  42 + [['currency_id', 'active', 'PARSER_IS_ACTIVE', 'PARSER_COLUMN_COUNT', 'PARSER_FIELD_BRAND', 'PARSER_FIELD_ARTICLE', 'PARSER_FIELD_ARTICLE_PREFIX', 'PARSER_FIELD_PRICE', 'PARSER_FIELD_DESCR', 'PARSER_FIELD_BOX', 'PARSER_FIELD_ADD_BOX', 'PARSER_FIELD_GROUP_RG'], 'integer'],
  43 + [['info'], 'string'],
  44 + [['PARSER_FIELD_MULTIPLIER'], 'number'],
  45 + [['code', 'name', 'name_price', 'delivery', 'email'], 'string', 'max' => 254],
  46 + [['PARSER_FIELD_SIGN'], 'string', 'max' => 1],
  47 + // [['price_date_update'], 'string', 'max' => 15],
  48 + [['code'], 'unique'],
  49 + [['name'], 'unique']
  50 + ];
  51 + }
  52 +
  53 + /**
  54 + * @inheritdoc
  55 + */
  56 + public function attributeLabels()
  57 + {
  58 + return [
  59 + 'id' => Yii::t('app', 'ID'),
  60 + 'code' => Yii::t('app', 'Code'),
  61 + 'name' => Yii::t('app', 'Name'),
  62 + 'name_price' => Yii::t('app', 'Name Price'),
  63 + 'currency_id' => Yii::t('app', 'Currency ID'),
  64 + 'delivery' => Yii::t('app', 'Delivery'),
  65 + 'email' => Yii::t('app', 'Email'),
  66 + 'info' => Yii::t('app', 'Info'),
  67 + 'active' => Yii::t('app', 'Active'),
  68 + 'PARSER_IS_ACTIVE' => Yii::t('app', 'Parser Is Active'),
  69 + 'PARSER_COLUMN_COUNT' => Yii::t('app', 'Parser Column Count'),
  70 + 'PARSER_FIELD_BRAND' => Yii::t('app', 'Parser Field Brand'),
  71 + 'PARSER_FIELD_ARTICLE' => Yii::t('app', 'Parser Field Article'),
  72 + 'PARSER_FIELD_ARTICLE_PREFIX' => Yii::t('app', 'Parser Field Article Prefix'),
  73 + 'PARSER_FIELD_PRICE' => Yii::t('app', 'Parser Field Price'),
  74 + 'PARSER_FIELD_DESCR' => Yii::t('app', 'Parser Field Descr'),
  75 + 'PARSER_FIELD_BOX' => Yii::t('app', 'Parser Field Box'),
  76 + 'PARSER_FIELD_ADD_BOX' => Yii::t('app', 'Parser Field Add Box'),
  77 + 'PARSER_FIELD_GROUP_RG' => Yii::t('app', 'Parser Field Group Rg'),
  78 + 'PARSER_FIELD_SIGN' => Yii::t('app', 'Parser Field Sign'),
  79 + 'PARSER_FIELD_MULTIPLIER' => Yii::t('app', 'Parser Field Multiplier'),
  80 + 'price_date_update' => Yii::t('app', 'Price Date Update'),
  81 + ];
  82 + }
  83 +
  84 +
  85 + public function getKeys ()
  86 + {
  87 + // возьмем только поля описанные в fields() - там как раз наши настройки парсера
  88 + $arr = $this->toArray();
  89 + // отсортируем по ключам с учетом преобразования в число
  90 + asort($arr, SORT_NUMERIC);
  91 + // уберем нулевые колонки
  92 + $arr = array_filter($arr, function($val){
  93 + return $val <> '0';
  94 + });
  95 + // нам нужны именно ключи
  96 + $arr = array_keys($arr);
  97 + return $arr;
  98 +
  99 + }
  100 +
  101 + public function fields()
  102 + {
  103 + return [
  104 + 'BRAND' => 'PARSER_FIELD_BRAND',
  105 + 'ARTICLE' => 'PARSER_FIELD_ARTICLE',
  106 + 'PRICE' => 'PARSER_FIELD_PRICE',
  107 + 'DESCR' => 'PARSER_FIELD_DESCR',
  108 + 'BOX' => 'PARSER_FIELD_BOX',
  109 + 'ADD_BOX' => 'PARSER_FIELD_ADD_BOX',
  110 + 'GROUP_RG' => 'PARSER_FIELD_GROUP_RG'
  111 + ];
  112 +
  113 + }
  114 +
  115 +
  116 +}
... ...
backend/views/parser/error.php 0 → 100644
  1 +<?php
  2 +
  3 +/* @var $this yii\web\View */
  4 +/* @var $name string */
  5 +/* @var $message string */
  6 +/* @var $exception Exception */
  7 +
  8 +use yii\helpers\Html;
  9 +
  10 +$this->title = $name;
  11 +?>
  12 +<div class="site-error">
  13 +
  14 + <h1><?= Html::encode($this->title) ?></h1>
  15 +
  16 + <div class="alert alert-danger">
  17 + <?= nl2br(Html::encode($message)) ?>
  18 + </div>
  19 +
  20 + <p>
  21 +
  22 + </p>
  23 + <p>
  24 + </p>
  25 +
  26 +</div>
... ...
backend/views/parser/index.php
1 1 <?php
2 2 use yii\widgets\ActiveForm;
3 3 use yii\helpers\Html;
4   -use backend\models\Importer;
  4 +use backend\models\Importers;
5 5 use yii\helpers\ArrayHelper;
6 6 if ( $model->mode ) {
7 7 // авто загрузка
... ... @@ -27,7 +27,7 @@ if ( $model-&gt;mode ) {
27 27 <h3>Загрузка прайсов поставщиков</h3>
28 28  
29 29  
30   - <?= $form->field($model, 'importer_id')->dropDownList(ArrayHelper::map( Importer::find()->all(), 'id','name' )); ?>
  30 + <?= $form->field($model, 'importer_id')->dropDownList(ArrayHelper::map( Importers::find()->all(), 'id','name' )); ?>
31 31  
32 32 <?php if ( !$mode ) {
33 33 echo $form->field($model, 'delete_price')->checkbox(['label' => 'Загрузить с удалением старого прайса']);
... ...
backend/views/parser/server-files.php
1 1 <?php
2 2 use yii\helpers\Html;
  3 +use yii\helpers\Url;
3 4 use yii\grid\GridView;
4 5 use yii\grid\SerialColumn;
5 6 use yii\grid\ActionColumn;
... ... @@ -44,7 +45,7 @@ Pjax::begin([&#39;id&#39; =&gt; &#39;server_files_grid&#39;]);
44 45  
45 46 ]] );?>
46 47  
47   -
  48 + <?= Html::a('Загрузить файлы', ['parse'],['class' => 'btn btn-success']) ?>
48 49  
49 50 </div>
50 51 <?php
... ...
common/components/PriceWriter.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: Cibermag
  5 + * Date: 30.09.2015
  6 + * Time: 9:34
  7 + */
  8 +
  9 +namespace common\components;
  10 +
  11 +
  12 +use yii\base\ErrorException;
  13 +use backend\models\ImportersFiles;
  14 +use backend\models\Importers;
  15 +use backend\models\Details;
  16 +
  17 +class PriceWriter {
  18 + public $mode;
  19 + public $configuration;
  20 + public $data;
  21 + // public $errors = [];
  22 +
  23 + public function writeDataToDB ()
  24 + {
  25 + // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles)
  26 + // id загруженного файла получим из конфигурации
  27 + $files_model = ImportersFiles::findOne( $this->configuration['record_id'] );
  28 +
  29 + //$files_model->load(['ImportersFiles' => $this->configuration->toArray()]);
  30 + $update_date = date('Y-m-d H:i:s');
  31 + $files_model->time_start = $update_date;
  32 + // запишем дату начала загрузки
  33 + if (!$files_model->save()) {
  34 + $this->errors[] = implode( ', ', $files_model->getErrors());
  35 + return false;
  36 + //CustomVarDamp::dumpAndDie($files_model->implode ( ', ', getErrors())());
  37 + }
  38 +
  39 +
  40 + // 2. запишем полученные данные в таблицу товаров (Details)
  41 + $details_model = new Details();
  42 + // преобразуем числовые значения
  43 + foreach ($this->data as &$row) {
  44 + $row['PRICE'] = \Yii::$app->multiparser->convertToFloat($row['PRICE']);
  45 + $row['BOX'] = \Yii::$app->multiparser->convertToInteger($row['BOX']);
  46 + // присвоим полный артикул
  47 + $row['FULL_ARTICLE'] = $row['ARTICLE'];
  48 + if(isset($row['ADD_BOX']))
  49 + $row['ADD_BOX'] = \Yii::$app->multiparser->convertToInteger($row['ADD_BOX']);
  50 +
  51 + // проверим все ли обязательные колонки были указаны пользователем
  52 + $details_model->load(['Details' => $row]);
  53 +
  54 + if (!$details_model->validate())
  55 + break;
  56 + }
  57 +
  58 + if ($details_model->hasErrors()) {
  59 + //@todo предоставить более детальную информацию об ошибке
  60 + throw new \ErrorException('Ошибка записи товаров');
  61 + }
  62 + else{
  63 + // дополним данные значением импортера и даты обновления цены
  64 + $this->data = \Yii::$app->multiparser->addColumns($this->data, ['IMPORT_ID' => $this->configuration['importer_id'], 'timestamp' => $update_date]);
  65 +
  66 + try {
  67 + //@todo add transaction
  68 + // попытаемся вставить данные в БД с апдейтом по ключам
  69 + $details_model->ManualInsert($this->data);
  70 +
  71 + // 3. зафиксируем дату конца загрузки в файлах поставщика
  72 +
  73 + $files_model->time_end = date('Y-m-d H:i:s');
  74 + // CustomVarDamp::dumpAndDie($files_model);
  75 + if (!$files_model->save()) {
  76 + throw new \ErrorException(implode( ', ', $files_model->getErrors()));
  77 +// $this->errors[] = $files_model->implode ( ', ', getErrors());
  78 +// return false;
  79 + // CustomVarDamp::dumpAndDie($files_model->implode ( ', ', getErrors())());
  80 + }
  81 +
  82 + // 4. зафиксируем дату загрузки в таблице поставщиков
  83 + $imp_model = Importers::findOne($this->configuration['importer_id']);
  84 + $imp_model->price_date_update = $update_date;
  85 +
  86 + if (!$imp_model->save()) {
  87 +// $this->errors[] = $imp_model->implode ( ', ', getErrors())();
  88 +// return false;
  89 + throw new \ErrorException(implode( ', ', $imp_model->getErrors()));
  90 + // CustomVarDamp::dumpAndDie($imp_model->implode ( ', ', getErrors())());
  91 + }
  92 +
  93 +
  94 + } catch (ErrorException $e) {
  95 + //CustomVarDamp::dump($e->getMessage());
  96 + throw new \ErrorException( $e->getMessage() );
  97 + }
  98 + }
  99 +
  100 +
  101 + return true;
  102 + }
  103 +}
0 104 \ No newline at end of file
... ...
common/models/WAccounts.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\models;
  4 +
  5 +use Yii;
  6 +
  7 +/**
  8 + * This is the model class for table "w_accounts".
  9 + *
  10 + * @property integer $id
  11 + * @property integer $if_manager
  12 + * @property string $email
  13 + * @property string $pass
  14 + * @property integer $margin_id
  15 + * @property string $name
  16 + * @property string $phones
  17 + * @property integer $country
  18 + * @property integer $city
  19 + * @property string $address
  20 + * @property string $comment
  21 + * @property integer $rating
  22 + * @property string $dt
  23 + * @property integer $is_active
  24 + * @property integer $is_firm
  25 + * @property string $last_loginin
  26 + * @property string $firm_inn
  27 + * @property string $firm_bank
  28 + * @property double $balance
  29 + * @property integer $office_id
  30 + * @property integer $is_scribe
  31 + * @property integer $set_manager_id
  32 + * @property string $phones2
  33 + * @property string $phones3
  34 + * @property integer $car
  35 + * @property integer $mod
  36 + * @property string $snumb
  37 + * @property integer $deliveries
  38 + * @property integer $scode
  39 + * @property string $firm_ur_adr
  40 + * @property string $firm_fiz_adr
  41 + * @property string $firm_code_eg
  42 + * @property string $firm_rs
  43 + * @property string $firm_mfo
  44 + * @property string $firm_site
  45 + * @property string $company
  46 + */
  47 +class WAccounts extends \yii\db\ActiveRecord
  48 +{
  49 + /**
  50 + * @inheritdoc
  51 + */
  52 + public static function tableName()
  53 + {
  54 + return 'w_accounts';
  55 + }
  56 +
  57 + /**
  58 + * @inheritdoc
  59 + */
  60 + public function rules()
  61 + {
  62 + return [
  63 + [['if_manager', 'margin_id', 'country', 'city', 'rating', 'dt', 'is_active', 'is_firm', 'office_id', 'is_scribe', 'set_manager_id', 'car', 'mod', 'deliveries', 'scode'], 'integer'],
  64 + [['email', 'pass', 'name', 'phones', 'comment', 'dt', 'set_manager_id'], 'required'],
  65 + [['comment'], 'string'],
  66 + [['balance'], 'number'],
  67 + [['email', 'name', 'firm_site'], 'string', 'max' => 150],
  68 + [['pass'], 'string', 'max' => 30],
  69 + [['phones', 'phones2', 'phones3'], 'string', 'max' => 50],
  70 + [['address', 'firm_inn', 'firm_bank'], 'string', 'max' => 254],
  71 + [['last_loginin'], 'string', 'max' => 15],
  72 + [['snumb', 'firm_ur_adr', 'firm_fiz_adr', 'firm_code_eg', 'firm_rs', 'firm_mfo', 'company'], 'string', 'max' => 255],
  73 + [['email'], 'unique']
  74 + ];
  75 + }
  76 +
  77 + /**
  78 + * @inheritdoc
  79 + */
  80 + public function attributeLabels()
  81 + {
  82 + return [
  83 + 'id' => Yii::t('app', 'ID'),
  84 + 'if_manager' => Yii::t('app', 'If Manager'),
  85 + 'email' => Yii::t('app', 'Email'),
  86 + 'pass' => Yii::t('app', 'Pass'),
  87 + 'margin_id' => Yii::t('app', 'Margin ID'),
  88 + 'name' => Yii::t('app', 'Name'),
  89 + 'phones' => Yii::t('app', 'Phones'),
  90 + 'country' => Yii::t('app', 'Country'),
  91 + 'city' => Yii::t('app', 'City'),
  92 + 'address' => Yii::t('app', 'Address'),
  93 + 'comment' => Yii::t('app', 'Comment'),
  94 + 'rating' => Yii::t('app', 'Rating'),
  95 + 'dt' => Yii::t('app', 'Dt'),
  96 + 'is_active' => Yii::t('app', 'Is Active'),
  97 + 'is_firm' => Yii::t('app', 'Is Firm'),
  98 + 'last_loginin' => Yii::t('app', 'Last Loginin'),
  99 + 'firm_inn' => Yii::t('app', 'Firm Inn'),
  100 + 'firm_bank' => Yii::t('app', 'Firm Bank'),
  101 + 'balance' => Yii::t('app', 'Balance'),
  102 + 'office_id' => Yii::t('app', 'Office ID'),
  103 + 'is_scribe' => Yii::t('app', 'Is Scribe'),
  104 + 'set_manager_id' => Yii::t('app', 'Set Manager ID'),
  105 + 'phones2' => Yii::t('app', 'Phones2'),
  106 + 'phones3' => Yii::t('app', 'Phones3'),
  107 + 'car' => Yii::t('app', 'Car'),
  108 + 'mod' => Yii::t('app', 'Mod'),
  109 + 'snumb' => Yii::t('app', 'Snumb'),
  110 + 'deliveries' => Yii::t('app', 'Deliveries'),
  111 + 'scode' => Yii::t('app', 'Scode'),
  112 + 'firm_ur_adr' => Yii::t('app', 'Firm Ur Adr'),
  113 + 'firm_fiz_adr' => Yii::t('app', 'Firm Fiz Adr'),
  114 + 'firm_code_eg' => Yii::t('app', 'Firm Code Eg'),
  115 + 'firm_rs' => Yii::t('app', 'Firm Rs'),
  116 + 'firm_mfo' => Yii::t('app', 'Firm Mfo'),
  117 + 'firm_site' => Yii::t('app', 'Firm Site'),
  118 + 'company' => Yii::t('app', 'Company'),
  119 + ];
  120 + }
  121 +}
... ...
common/models/WAccountsSearch.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\models;
  4 +
  5 +use Yii;
  6 +use yii\base\Model;
  7 +use yii\data\ActiveDataProvider;
  8 +use common\models\WAccounts;
  9 +
  10 +/**
  11 + * WAccountsSearch represents the model behind the search form about `common\models\WAccounts`.
  12 + */
  13 +class WAccountsSearch extends WAccounts
  14 +{
  15 + /**
  16 + * @inheritdoc
  17 + */
  18 + public function rules()
  19 + {
  20 + return [
  21 + [['id', 'if_manager', 'margin_id', 'country', 'city', 'rating', 'dt', 'is_active', 'is_firm', 'office_id', 'is_scribe', 'set_manager_id', 'car', 'mod', 'deliveries', 'scode'], 'integer'],
  22 + [['email', 'pass', 'name', 'phones', 'address', 'comment', 'last_loginin', 'firm_inn', 'firm_bank', 'phones2', 'phones3', 'snumb', 'firm_ur_adr', 'firm_fiz_adr', 'firm_code_eg', 'firm_rs', 'firm_mfo', 'firm_site', 'company'], 'safe'],
  23 + [['balance'], 'number'],
  24 + ];
  25 + }
  26 +
  27 + /**
  28 + * @inheritdoc
  29 + */
  30 + public function scenarios()
  31 + {
  32 + // bypass scenarios() implementation in the parent class
  33 + return Model::scenarios();
  34 + }
  35 +
  36 + /**
  37 + * Creates data provider instance with search query applied
  38 + *
  39 + * @param array $params
  40 + *
  41 + * @return ActiveDataProvider
  42 + */
  43 + public function search($params)
  44 + {
  45 + $query = WAccounts::find();
  46 +
  47 + $dataProvider = new ActiveDataProvider([
  48 + 'query' => $query,
  49 + ]);
  50 +
  51 + $this->load($params);
  52 +
  53 + if (!$this->validate()) {
  54 + // uncomment the following line if you do not want to return any records when validation fails
  55 + // $query->where('0=1');
  56 + return $dataProvider;
  57 + }
  58 +
  59 + $query->andFilterWhere([
  60 + 'id' => $this->id,
  61 + 'if_manager' => $this->if_manager,
  62 + 'margin_id' => $this->margin_id,
  63 + 'country' => $this->country,
  64 + 'city' => $this->city,
  65 + 'rating' => $this->rating,
  66 + 'dt' => $this->dt,
  67 + 'is_active' => $this->is_active,
  68 + 'is_firm' => $this->is_firm,
  69 + 'balance' => $this->balance,
  70 + 'office_id' => $this->office_id,
  71 + 'is_scribe' => $this->is_scribe,
  72 + 'set_manager_id' => $this->set_manager_id,
  73 + 'car' => $this->car,
  74 + 'mod' => $this->mod,
  75 + 'deliveries' => $this->deliveries,
  76 + 'scode' => $this->scode,
  77 + ]);
  78 +
  79 + $query->andFilterWhere(['like', 'email', $this->email])
  80 + ->andFilterWhere(['like', 'pass', $this->pass])
  81 + ->andFilterWhere(['like', 'name', $this->name])
  82 + ->andFilterWhere(['like', 'phones', $this->phones])
  83 + ->andFilterWhere(['like', 'address', $this->address])
  84 + ->andFilterWhere(['like', 'comment', $this->comment])
  85 + ->andFilterWhere(['like', 'last_loginin', $this->last_loginin])
  86 + ->andFilterWhere(['like', 'firm_inn', $this->firm_inn])
  87 + ->andFilterWhere(['like', 'firm_bank', $this->firm_bank])
  88 + ->andFilterWhere(['like', 'phones2', $this->phones2])
  89 + ->andFilterWhere(['like', 'phones3', $this->phones3])
  90 + ->andFilterWhere(['like', 'snumb', $this->snumb])
  91 + ->andFilterWhere(['like', 'firm_ur_adr', $this->firm_ur_adr])
  92 + ->andFilterWhere(['like', 'firm_fiz_adr', $this->firm_fiz_adr])
  93 + ->andFilterWhere(['like', 'firm_code_eg', $this->firm_code_eg])
  94 + ->andFilterWhere(['like', 'firm_rs', $this->firm_rs])
  95 + ->andFilterWhere(['like', 'firm_mfo', $this->firm_mfo])
  96 + ->andFilterWhere(['like', 'firm_site', $this->firm_site])
  97 + ->andFilterWhere(['like', 'company', $this->company]);
  98 +
  99 + return $dataProvider;
  100 + }
  101 +}
... ...
common/models/WDicCities.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\models;
  4 +
  5 +use Yii;
  6 +
  7 +/**
  8 + * This is the model class for table "w_dic_cities".
  9 + *
  10 + * @property integer $id
  11 + * @property string $name
  12 + * @property integer $is_active
  13 + * @property integer $parent
  14 + */
  15 +class WDicCities extends \yii\db\ActiveRecord
  16 +{
  17 + /**
  18 + * @inheritdoc
  19 + */
  20 + public static function tableName()
  21 + {
  22 + return 'w_dic_cities';
  23 + }
  24 +
  25 + /**
  26 + * @inheritdoc
  27 + */
  28 + public function rules()
  29 + {
  30 + return [
  31 + [['name', 'parent'], 'required'],
  32 + [['is_active', 'parent'], 'integer'],
  33 + [['name'], 'string', 'max' => 254],
  34 + [['parent', 'name'], 'unique', 'targetAttribute' => ['parent', 'name'], 'message' => 'The combination of Name and Parent has already been taken.']
  35 + ];
  36 + }
  37 +
  38 + /**
  39 + * @inheritdoc
  40 + */
  41 + public function attributeLabels()
  42 + {
  43 + return [
  44 + 'id' => Yii::t('app', 'ID'),
  45 + 'name' => Yii::t('app', 'Name'),
  46 + 'is_active' => Yii::t('app', 'Is Active'),
  47 + 'parent' => Yii::t('app', 'Parent'),
  48 + ];
  49 + }
  50 +}
... ...
console/.gitignore 0 → 100644
  1 +/old_migrations
0 2 \ No newline at end of file
... ...
console/config/main.php
... ... @@ -18,8 +18,14 @@ return [
18 18 'class' => 'yii\log\FileTarget',
19 19 'levels' => ['error', 'warning'],
20 20 ],
21   - ],
  21 + [
  22 + 'class' => 'yii\log\FileTarget',
  23 + 'logFile' => 'C:\xampp\htdocs\ital\console\runtime\logs\parser.log',
  24 + 'levels' => ['info', 'error'],
  25 + // 'categories' => ['parser'],
  26 + ],
22 27 ],
23 28 ],
24 29 'params' => $params,
  30 +]
25 31 ];
... ...
console/controllers/ParserController.php 0 → 100644
  1 +<?php
  2 +namespace console\controllers;
  3 +
  4 +use yii\console\Controller;
  5 +use yii\helpers\Console;
  6 +use common\components\PriceWriter;
  7 +use backend\models\ImportersFiles;
  8 +
  9 +class ParserController extends Controller{
  10 + public function actionParseCSV ()
  11 + {
  12 + \common\components\CustomVarDamp::dumpAndDie(45);
  13 + if( $arr_id_files = Yii::$app->cache->get( 'files_to_parse' ) ) {
  14 + $arr_id_files = json_decode( $arr_id_files );
  15 + foreach ( $arr_id_files as $file_name ) {
  16 + $file_path = Yii::getAlias('@auto_upload') . '/' . $file_name . '.csv';
  17 + $config = ['record_id' => $file_name,
  18 + 'importer_id' => ImportersFiles::findOne(['id' => $file_name])->id,
  19 + 'parser_config' => ['keys' => ['DESCR', 'ARTICLE', 'BRAND', 'PRICE', 'BOX']]
  20 + ];
  21 + if( $this->parseFileConsole( $file_path, $config ) ){
  22 + unlink( $file_path );
  23 + if (isset( $arr_id_files[$file_path] ) ) {
  24 + unset($arr_id_files[$file_path]);
  25 + }
  26 + } else {
  27 + // Yii::$app->log->
  28 + // не дошли до конца по этому остаки вернем в кеш
  29 + Yii::$app->cache->set( 'files_to_parse',json_encode( $arr_id_files ) );
  30 + }
  31 + }
  32 + if ( !count( $arr_id_files ) ) {
  33 + Yii::$app->cache->delete( 'files_to_parse' );
  34 + }
  35 + }
  36 + }
  37 + public function actionParseXML ()
  38 + {
  39 +
  40 + }
  41 + protected function parseFileConsole( $file_path, $configuration ){
  42 + $parser_config = [];
  43 + if ( isset( $configuration['parser_config'] ) ) {
  44 + $parser_config = $configuration['parser_config'];
  45 + }
  46 +
  47 + $data = Yii::$app->multiparser->parse( $file_path, $parser_config );
  48 +
  49 + $writer = new PriceWriter();
  50 + $writer->configuration = $configuration;
  51 + $writer->data = $data;
  52 + $writer->mode = 1; //console-режим
  53 + if ( $writer->writeDataToDB() ){
  54 + Console::output('It is working');
  55 + return true;
  56 + }
  57 +
  58 + return false;
  59 + }
  60 +
  61 + public function actionTest ()
  62 + {
  63 + // Console::output('It is working ');
  64 + \Yii::warning('1');
  65 + \Yii::info('2');
  66 +// \Yii::info('3');
  67 +// \Yii::warning('4');
  68 +
  69 + }
  70 +}
0 71 \ No newline at end of file
... ...
console/migrations/m150925_111922_add_foreign_key_ImportFiles.php
... ... @@ -2,17 +2,29 @@
2 2  
3 3 use yii\db\Schema;
4 4 use yii\db\Migration;
  5 +use backend\models\ImportersFiles;
5 6  
6 7 class m150925_111922_add_foreign_key_ImportFiles extends Migration
7 8 {
8   - public function up()
  9 + public function safeUp()
9 10 {
10   - $this->addForeignKey('importer_fk', '{{%importer_files}}', 'importer_id', '{{%importer}}', 'id');
  11 + // сначала отберем записи которых нет уже в поставщиках
  12 + $id_arr = (new \yii\db\Query())
  13 + ->select(['{{%importers_files}}.id'])
  14 + ->from('{{%importers_files}}')
  15 + ->leftJoin('{{%importers}}', 'importer_id = {{%importers}}.id')
  16 + ->where(['name' => null])
  17 + ->all();
  18 + $id_arr = array_column($id_arr,'id');
  19 + // удалим их
  20 + $this->delete('{{%importers_files}}',['id' => $id_arr]);
  21 +
  22 + $this->addForeignKey('importer_fk', '{{%importers_files}}', 'importer_id', '{{%importers}}', 'id');
11 23 }
12 24  
13 25 public function down()
14 26 {
15   - $this->dropForeignKey('importer_fk', '{{%importer_files}}');
  27 + $this->dropForeignKey('importer_fk', '{{%importers_files}}');
16 28 }
17 29  
18 30 }
... ...
console/migrations/m150929_110456_addTempTableUser.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Schema;
  4 +use yii\db\Migration;
  5 +
  6 +class m150929_110456_addTempTableUser extends Migration
  7 +{
  8 + public function up()
  9 + {
  10 + $tableOptions = null;
  11 + if ($this->db->driverName === 'mysql') {
  12 + // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
  13 + $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
  14 + }
  15 +
  16 + $this->createTable('user', [
  17 + 'id' => $this->primaryKey(),
  18 + 'username' => $this->string()->notNull()->unique(),
  19 + 'auth_key' => $this->string(32)->notNull(),
  20 + 'password_hash' => $this->string()->notNull(),
  21 + 'password_reset_token' => $this->string()->unique(),
  22 + 'email' => $this->string()->notNull()->unique(),
  23 +
  24 + 'status' => $this->smallInteger()->notNull()->defaultValue(10),
  25 + 'created_at' => $this->integer()->notNull(),
  26 + 'updated_at' => $this->integer()->notNull(),
  27 + ], $tableOptions);
  28 +
  29 + $user_array = [
  30 + 'username' => 'admin',
  31 + 'auth_key' => 'admin',
  32 + 'password_hash' => Yii::$app->security->generatePasswordHash('admin'),
  33 + 'password_reset_token' => 'admin',
  34 + 'email'=> 'admin@test.com',
  35 + 'status' => '10',
  36 + 'created_at'=>'000000',
  37 + 'updated_at' => '000000'
  38 + ];
  39 + $this->insert('user', $user_array);
  40 + }
  41 +
  42 + public function down()
  43 + {
  44 + $this->dropTable('user');
  45 + }
  46 +}
... ...
console/migrations/m150929_113358_change_Importer_dataPrice.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Schema;
  4 +use yii\db\Migration;
  5 +
  6 +class m150929_113358_change_Importer_dataPrice extends Migration
  7 +{
  8 + public function safeUp()
  9 + {
  10 + // увеличим размерность строки, так как при преобразовании из таймстампа в дату может не хватить символов
  11 + $this->alterColumn('{{%importers}}','price_date_update','VARCHAR(80)' );
  12 + // конвертем в дату
  13 + $this->update('{{%importers}}',['price_date_update'=> new yii\db\Expression('FROM_UNIXTIME(price_date_update)')]);
  14 + // а из даты в таймстамп
  15 + $this->alterColumn('{{%importers}}','price_date_update','TIMESTAMP NOT NULL' );
  16 + $this->createIndex('price_date', '{{%importers}}', 'price_date_update', false);
  17 +
  18 + }
  19 +
  20 +
  21 + public function safedown()
  22 + {
  23 + $this->alterColumn('{{%importers}}','price_date','varchar(15)' );
  24 + $this->dropIndex('price_date', '{{%importers}}');
  25 + }
  26 +
  27 +}
... ...
framework/core/Convert.php
... ... @@ -166,63 +166,63 @@ class Convert {
166 166 }
167 167  
168 168 /**
169   - * Converts an XML string to a PHP array
170   - * See http://phpsecurity.readthedocs.org/en/latest/Injection-Attacks.html#xml-external-entity-injection
171   - *
172   - * @uses recursiveXMLToArray()
173   - * @param string $val
174   - * @param boolean $disableDoctypes Disables the use of DOCTYPE, and will trigger an error if encountered.
175   - * false by default.
176   - * @param boolean $disableExternals Disables the loading of external entities. false by default.
177   - * @return array
178   - */
179   - public static function xml2array($val, $disableDoctypes = false, $disableExternals = false) {
180   - // Check doctype
181   - if($disableDoctypes && preg_match('/\<\!DOCTYPE.+]\>/', $val)) {
182   - throw new InvalidArgumentException('XML Doctype parsing disabled');
183   - }
  169 + * Converts an XML string to a PHP array
  170 + * See http://phpsecurity.readthedocs.org/en/latest/Injection-Attacks.html#xml-external-entity-injection
  171 + *
  172 + * @uses recursiveXMLToArray()
  173 + * @param string $val
  174 + * @param boolean $disableDoctypes Disables the use of DOCTYPE, and will trigger an error if encountered.
  175 + * false by default.
  176 + * @param boolean $disableExternals Disables the loading of external entities. false by default.
  177 + * @return array
  178 + */
  179 + public static function xml2array($val, $disableDoctypes = false, $disableExternals = false) {
  180 + // Check doctype
  181 + if($disableDoctypes && preg_match('/\<\!DOCTYPE.+]\>/', $val)) {
  182 + throw new InvalidArgumentException('XML Doctype parsing disabled');
  183 + }
184 184  
185   - // Disable external entity loading
186   - if($disableExternals) $oldVal = libxml_disable_entity_loader($disableExternals);
187   - try {
188   - $xml = new SimpleXMLElement($val);
189   - $result = self::recursiveXMLToArray($xml);
190   - } catch(Exception $ex) {
191   - if($disableExternals) libxml_disable_entity_loader($oldVal);
192   - throw $ex;
193   - }
194   - if($disableExternals) libxml_disable_entity_loader($oldVal);
195   - return $result;
196   - }
  185 + // Disable external entity loading
  186 + if($disableExternals) $oldVal = libxml_disable_entity_loader($disableExternals);
  187 + try {
  188 + $xml = new SimpleXMLElement($val);
  189 + $result = self::recursiveXMLToArray($xml);
  190 + } catch(Exception $ex) {
  191 + if($disableExternals) libxml_disable_entity_loader($oldVal);
  192 + throw $ex;
  193 + }
  194 + if($disableExternals) libxml_disable_entity_loader($oldVal);
  195 + return $result;
  196 + }
197 197  
198   - /**
199   - * Convert a XML string to a PHP array recursively. Do not
200   - * call this function directly, Please use {@link Convert::xml2array()}
201   - *
202   - * @param SimpleXMLElement
203   - *
204   - * @return mixed
205   - */
206   - protected static function recursiveXMLToArray($xml) {
207   - if(is_object($xml) && get_class($xml) == 'SimpleXMLElement') {
208   - $attributes = $xml->attributes();
209   - foreach($attributes as $k => $v) {
210   - if($v) $a[$k] = (string) $v;
211   - }
212   - $x = $xml;
213   - $xml = get_object_vars($xml);
214   - }
215   - if(is_array($xml)) {
216   - if(count($xml) == 0) return (string) $x; // for CDATA
217   - foreach($xml as $key => $value) {
218   - $r[$key] = self::recursiveXMLToArray($value);
219   - }
220   - if(isset($a)) $r['@'] = $a; // Attributes
221   - return $r;
222   - }
223   -
224   - return (string) $xml;
225   - }
  198 + /**
  199 + * Convert a XML string to a PHP array recursively. Do not
  200 + * call this function directly, Please use {@link Convert::xml2array()}
  201 + *
  202 + * @param SimpleXMLElement
  203 + *
  204 + * @return mixed
  205 + */
  206 + protected static function recursiveXMLToArray($xml) {
  207 + if(is_object($xml) && get_class($xml) == 'SimpleXMLElement') {
  208 + $attributes = $xml->attributes();
  209 + foreach($attributes as $k => $v) {
  210 + if($v) $a[$k] = (string) $v;
  211 + }
  212 + $x = $xml;
  213 + $xml = get_object_vars($xml);
  214 + }
  215 + if(is_array($xml)) {
  216 + if(count($xml) == 0) return (string) $x; // for CDATA
  217 + foreach($xml as $key => $value) {
  218 + $r[$key] = self::recursiveXMLToArray($value);
  219 + }
  220 + if(isset($a)) $r['@'] = $a; // Attributes
  221 + return $r;
  222 + }
  223 +
  224 + return (string) $xml;
  225 + }
226 226  
227 227 /**
228 228 * Create a link if the string is a valid URL
... ...
framework/lang/fr.yml
... ... @@ -403,7 +403,11 @@ fr:
403 403 DELETE: Supprime
404 404 DELETEDRECORDS: '{count} enregistrements supprimés.'
405 405 EMPTYBEFOREIMPORT: 'Remplacer les données'
  406 +<<<<<<< HEAD
406 407 IMPORT: 'Importer de CSV'
  408 +=======
  409 + IMPORT: 'Importers de CSV'
  410 +>>>>>>> ead5cb60ac983cdb680ec70731de195b537be6cd
407 411 IMPORTEDRECORDS: '{count} enregistrements importés.'
408 412 NOCSVFILE: 'Veuillez choisir un fichier CSV à importer'
409 413 NOIMPORT: 'Rien à importer'
... ... @@ -417,9 +421,15 @@ fr:
417 421 IMPORTSPECTITLE: 'Spécification de %s'
418 422 ModelAdmin_Tools_ss:
419 423 FILTER: Filtrer
  424 +<<<<<<< HEAD
420 425 IMPORT: Importer
421 426 ModelSidebar_ss:
422 427 IMPORT_TAB_HEADER: Importer
  428 +=======
  429 + IMPORT: Importers
  430 + ModelSidebar_ss:
  431 + IMPORT_TAB_HEADER: Importers
  432 +>>>>>>> ead5cb60ac983cdb680ec70731de195b537be6cd
423 433 SEARCHLISTINGS: Rechercher
424 434 MoneyField:
425 435 FIELDLABELAMOUNT: Quantité
... ...
vendor/yiisoft/multiparser/Converter.php
... ... @@ -7,6 +7,7 @@
7 7 */
8 8  
9 9 namespace yii\multiparser;
  10 +use common\components\CustomVarDamp;
10 11 use yii\base\Behavior;
11 12  
12 13 // класс который содержит преобразователи значений (фильтры) используемые при парсинге
... ... @@ -19,7 +20,6 @@ class Converter extends Behavior
19 20  
20 21 public static function convertToFloat($value)
21 22 {
22   - echo 1;
23 23 if ($value == '') {
24 24 $value = 0;
25 25 }
... ... @@ -51,8 +51,6 @@ class Converter extends Behavior
51 51  
52 52 public static function convertToString($value)
53 53 {
54   -
55   -
56 54 $res = '';
57 55 if (is_array($value)) {
58 56  
... ... @@ -101,7 +99,7 @@ class Converter extends Behavior
101 99 public static function convertByConfiguration( $arr, $configuration )
102 100 {
103 101 $result = $arr;
104   - //\common\components\CustomVarDamp::dumpAndDie($configuration);
  102 + // \common\components\CustomVarDamp::dumpAndDie( $result );
105 103 $hasKey = isset( $configuration['hasKey'] );
106 104 foreach ( $configuration['configuration'] as $key => $value ) {
107 105  
... ... @@ -111,7 +109,7 @@ class Converter extends Behavior
111 109 foreach ($value as $sub_value) {
112 110 if (isset($arr[$sub_value])) {
113 111 // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
114   - $result[$arr[$sub_value]] = self::$key( $arr[$sub_value] );
  112 + $result[$sub_value] = self::$key( $arr[$sub_value] );
115 113 }
116 114  
117 115 }
... ... @@ -119,7 +117,7 @@ class Converter extends Behavior
119 117  
120 118 if (isset($arr[$value])) {
121 119 // конвертируем только те ячейки которые сопоставлены в прочитанном массиве с колонками в конфигурационном файле
122   - $result[$arr[$value]] = self::$key( $arr[$value] );
  120 + $result[$value] = self::$key( $arr[$value] );
123 121 }
124 122  
125 123 }
... ...
vendor/yiisoft/multiparser/CsvParser.php
... ... @@ -3,6 +3,7 @@
3 3  
4 4 */
5 5 namespace yii\multiparser;
  6 +use common\components\CustomVarDamp;
6 7  
7 8  
8 9 /**
... ... @@ -97,7 +98,7 @@ class CsvParser implements ParserInterface
97 98  
98 99 while (!$finish) {
99 100 $j = 0;
100   - $row = $this->readRow();
  101 + $row = $this->file->fgetcsv();;
101 102 if ($row === false) {
102 103 continue;
103 104 }
... ... @@ -129,7 +130,7 @@ class CsvParser implements ParserInterface
129 130 $empty_lines = 0;
130 131 while ( $empty_lines < 3 ) {
131 132 // прочтем строку из файла. Если там есть значения - то в ней массив, иначе - false
132   - $row = $this->readRow();
  133 + $row = $this->readRow( $current_line );
133 134  
134 135 if ($row === false) {
135 136 //счетчик пустых строк
... ... @@ -139,19 +140,10 @@ class CsvParser implements ParserInterface
139 140 // строка не пустая, имеем прочитанный массив значений
140 141 $current_line++;
141 142 if ($this->hasHeaderRow) {
  143 + // в файле есть заголовок, но он еще не назначен, назначим
142 144 if ($this->keys === NULL) {
143 145 $this->keys = array_values($row);
144   - } else {
145   -
146   - if (count($this->keys) !== count($row)) {
147   -//
148   - throw new \ErrorException("Invalid columns detected on line # {$current_line}", 0, 1, $this->file->getBasename(), $current_line);
149   - }
150   -
151   - $return[] = array_combine($this->keys, $row);
152 146 }
153   - } else {
154   - $return[] = $row;
155 147 }
156 148 // если у нас установлен лимит, при его достижении прекращаем парсинг
157 149 if (($this->last_line) && ($current_line > $this->last_line)) {
... ... @@ -159,6 +151,8 @@ class CsvParser implements ParserInterface
159 151 }
160 152 // обнуляем счетчик, так как считаюся пустые строки ПОДРЯД
161 153 $empty_lines = 0;
  154 +
  155 + $return[] = $row;
162 156 }
163 157  
164 158 $this->closeHandler();
... ... @@ -174,16 +168,24 @@ class CsvParser implements ParserInterface
174 168 /**
175 169 * @return array - одномерный массив результата парсинга строки
176 170 */
177   - protected function readRow()
  171 + protected function readRow( $current_line )
178 172 {
179   -
180 173 $row = $this->file->fgetcsv();
181   -
182 174 if (is_array($row)) {
183   - // попытаемся конвертировать прочитанные занчения согдасно конфигурации котнвертера значений
  175 + // если есть заголовок, то перед конвертацией его нужно назначить
  176 + if ($this->hasHeaderRow && $this->keys !== NULL) {
  177 +
  178 + if (count($this->keys) !== count($row)) {
  179 +//
  180 + throw new \ErrorException("Ошибка парсинга файла в строке # {$current_line}. Не соответсвие числа ключевых колонок (заголовка) - числу колонок с данными", 0, 1, $this->file->getBasename(), $current_line);
  181 + }
  182 +
  183 + $row = array_combine($this->keys, $row);
  184 + }
  185 + // попытаемся конвертировать прочитанные значения согласно конфигурации котнвертера значений
184 186 $row = $this->convert($row);
185   - // \common\components\CustomVarDamp::dump($row);
186   - if ($this->first_column) {
  187 + // обрежем массив к первой значимой колонке
  188 + if ( $this->first_column ) {
187 189  
188 190 $row = array_slice($row, $this->first_column);
189 191  
... ...
vendor/yiisoft/multiparser/YiiMultiparser.php
... ... @@ -39,14 +39,5 @@ public $configuration;
39 39  
40 40 }
41 41  
42   - public function init()
43   - {
44   - if( isset($this->configuration['glob']) && isset($this->configuration['glob']['ini'])){
45   - foreach ($this->configuration['glob']['ini'] as $ini_setting => $ini_setting_value) {
46   - ini_set( $ini_setting, $ini_setting_value );
47   - }
48   - }
49   -
50   - }
51 42  
52 43 }
53 44 \ No newline at end of file
... ...