58743b31
Mihail
init commit - bas...
|
1
2
3
|
<?php
namespace backend\controllers;
|
c4da20f0
Mihail
temp commit - tes...
|
4
5
6
|
use common\components\archives\ArchiveCreator;
use common\components\mail\ImapMailReader;
use common\components\mail\MailAttachmentsSaver;
|
91fdff80
Mihail
merge with server
|
7
|
use common\components\parsers\MailParser;
|
58743b31
Mihail
init commit - bas...
|
8
|
use Yii;
|
2fb5a757
Mihail
add menu and chec...
|
9
|
use yii\data\ActiveDataProvider;
|
58743b31
Mihail
init commit - bas...
|
10
|
use yii\filters\AccessControl;
|
54ada04a
Mihail
add base classes ...
|
11
|
use backend\components\base\BaseController;
|
58743b31
Mihail
init commit - bas...
|
12
|
use yii\filters\VerbFilter;
|
febcec0b
Mihail
final version par...
|
13
|
use backend\models\UploadFileParsingForm;
|
58743b31
Mihail
init commit - bas...
|
14
|
use yii\web\UploadedFile;
|
9bfcfcaf
Mihail
parser csv v1
|
15
|
use yii\data\ArrayDataProvider;
|
2a7a75b8
Mihail
add first version...
|
16
|
use yii\multiparser\DynamicFormHelper;
|
942bad48
Mihail
adapt project to ...
|
17
18
|
use backend\models\ImportersFiles;
use backend\models\Importers;
|
d7f6bdbb
Mihail
add Importers fil...
|
19
|
use yii\base\ErrorException;
|
f0dbd829
Mihail
add PriceWriter a...
|
20
|
use common\components\PriceWriter;
|
02e174a3
Mihail
work with custome...
|
21
|
use common\components\CustomVarDamp;
|
67adc788
Mihail
add converter int...
|
22
|
use common\components\CustomArrayHelper;
|
58743b31
Mihail
init commit - bas...
|
23
24
|
/**
|
febcec0b
Mihail
final version par...
|
25
|
* Parser controller
|
58743b31
Mihail
init commit - bas...
|
26
|
*/
|
54ada04a
Mihail
add base classes ...
|
27
|
class ParserController extends BaseController
|
58743b31
Mihail
init commit - bas...
|
28
|
{
|
2509e17e
Administrator
JSON
|
29
|
public $layout = "/column";
|
d7f6bdbb
Mihail
add Importers fil...
|
30
|
|
58743b31
Mihail
init commit - bas...
|
31
32
33
34
35
36
37
38
39
40
|
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
|
a8808843
Administrator
access in admin
|
41
42
43
44
45
|
'actions' => ['login', 'error', 'download-photo','delete-image' ],
'allow' => true,
],
[
'actions' => ['logout', 'index'],
|
58743b31
Mihail
init commit - bas...
|
46
47
48
49
50
|
'allow' => true,
'roles' => ['@'],
],
],
],
|
a8808843
Administrator
access in admin
|
51
52
53
54
55
56
|
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
|
58743b31
Mihail
init commit - bas...
|
57
58
59
|
];
}
|
58743b31
Mihail
init commit - bas...
|
60
|
|
2509e17e
Administrator
JSON
|
61
|
|
1fa22312
Mihail
add auto upload a...
|
62
|
public function actionIndex($mode = 0)
|
58743b31
Mihail
init commit - bas...
|
63
|
{
|
5be26bf2
Mihail
edit upload form
|
64
|
$model = new UploadFileParsingForm();
|
1fa22312
Mihail
add auto upload a...
|
65
66
|
// установим режим, 0 - ручная загрузка, 1 - автозагрузка
$model->mode = $mode;
|
2509e17e
Administrator
JSON
|
67
68
69
|
return $this->render('index', ['model' => $model]);
}
|
f0dbd829
Mihail
add PriceWriter a...
|
70
71
72
73
74
75
76
|
public function actionError()
{
$exception = Yii::$app->errorHandler->exception;
if ($exception !== null) {
return $this->render('error', ['message' => $exception->getMessage()]);
}
}
|
55cc05aa
Mihail
try organize ini ...
|
77
|
|
1fa22312
Mihail
add auto upload a...
|
78
|
public function actionResults($mode = 0)
|
d7f6bdbb
Mihail
add Importers fil...
|
79
|
{
|
1fa22312
Mihail
add auto upload a...
|
80
|
$model = new UploadFileParsingForm(['mode' => $mode]);
|
7a80e74c
Mihail
add DynamicFormHe...
|
81
|
$data = [];
|
febcec0b
Mihail
final version par...
|
82
|
if ($model->load(Yii::$app->request->post())) {
|
58743b31
Mihail
init commit - bas...
|
83
|
$model->file = UploadedFile::getInstance($model, 'file');
|
1fa22312
Mihail
add auto upload a...
|
84
|
// первый проход - валидируем, сохраняем файл, ложим в кеш (для ручной загрузки) отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся)
|
165348a4
Mihail
draft commit
|
85
|
if ($model->validate()) {
|
1fa22312
Mihail
add auto upload a...
|
86
|
// запишем дату загрузки файла в таблицу файлов поставщика (ImportersFiles)
|
942bad48
Mihail
adapt project to ...
|
87
|
$files_model = new ImportersFiles();
|
1fa22312
Mihail
add auto upload a...
|
88
|
// id поставщика получим из конфигурации
|
942bad48
Mihail
adapt project to ...
|
89
|
$files_model->load(['ImportersFiles' => $model->toArray()]);
|
1fa22312
Mihail
add auto upload a...
|
90
91
92
|
try {
$files_model->save();
} catch (ErrorException $e) {
|
f0dbd829
Mihail
add PriceWriter a...
|
93
|
throw $e;
|
1fa22312
Mihail
add auto upload a...
|
94
95
|
}
// получим id только что записанной записи - его запишем в название файла
|
0b2baee3
Mihail
fix errors with w...
|
96
|
$model->record_id = $files_model->find()
|
1fa22312
Mihail
add auto upload a...
|
97
98
99
100
101
|
->where(['importer_id' => $files_model->importer_id])
->orderBy(['id' => SORT_DESC])
->one()
->id;
|
0b2baee3
Mihail
fix errors with w...
|
102
|
$file_name = $model->record_id . '.' . $model->file->extension;
|
1fa22312
Mihail
add auto upload a...
|
103
104
|
if ($model->mode) {
|
ef41533d
Mihail
temp commit - wor...
|
105
|
$model->file_path = Yii::getAlias('@temp_upload') . '/' . $file_name;
|
1fa22312
Mihail
add auto upload a...
|
106
107
108
|
} else {
$model->file_path = Yii::getAlias('@manual_upload') . '/' . $file_name;
}
|
2509e17e
Administrator
JSON
|
109
|
|
2fb5a757
Mihail
add menu and chec...
|
110
|
$model->file->saveAs($model->file_path);
|
1fa22312
Mihail
add auto upload a...
|
111
112
113
|
// для авто загрузки, обработка завершена
if ($model->mode) {
$model->success = true;
|
ef41533d
Mihail
temp commit - wor...
|
114
|
|
1fa22312
Mihail
add auto upload a...
|
115
116
117
118
|
return $this->render('index', ['model' => $model]);
}
// === ручная загрузка ===========
|
d7f6bdbb
Mihail
add Importers fil...
|
119
|
//запускаем парсинг
|
a3a9066a
Mihail
add modal form fo...
|
120
|
// доп. опции для парсера
|
a0d1ac87
Mihail
add articul filte...
|
121
122
123
124
|
$options = ['converter_conf' =>
['importer_id' => $files_model->importer_id]
];
|
a3a9066a
Mihail
add modal form fo...
|
125
126
127
128
|
if( ! $model->action ) // обработка с кастомным разделителем
$options['$delimiter'] = $model->delimiter;
$data = $model->readFile( $options );
|
d7f6bdbb
Mihail
add Importers fil...
|
129
130
131
132
|
// сохраняем в кеш отпарсенные даные
Yii::$app->getCache()->set('parser_data', json_encode($data));
// сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных
Yii::$app->getCache()->set('parser_configuration', serialize($model));
|
2509e17e
Administrator
JSON
|
133
|
|
1fa22312
Mihail
add auto upload a...
|
134
135
|
} else {
// не прошла валидация форма загрузки файлов
|
c4da20f0
Mihail
temp commit - tes...
|
136
137
138
139
140
141
|
// $errors_str = '';
// foreach ($model->getErrors() as $error) {
// $errors_str .= implode( array_values($error) );
// }
// throw new ErrorException( $errors_str );
$model->throwStringErrorException();
|
58743b31
Mihail
init commit - bas...
|
142
|
}
|
d7f6bdbb
Mihail
add Importers fil...
|
143
144
|
// листаем пагинатором, или повторно вызываем - считываем из кеша отпрасенные данные
} else if (Yii::$app->getCache()->get('parser_data')) {
|
2509e17e
Administrator
JSON
|
145
|
|
d7f6bdbb
Mihail
add Importers fil...
|
146
|
$data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
|
2509e17e
Administrator
JSON
|
147
|
|
58743b31
Mihail
init commit - bas...
|
148
149
|
}
|
7a80e74c
Mihail
add DynamicFormHe...
|
150
151
152
153
154
155
156
|
$provider = new ArrayDataProvider([
'allModels' => $data,
'pagination' => [
'pageSize' => 10,
],
]);
|
40cac1b6
Mihail
add delete func i...
|
157
158
|
$last_index = end( array_flip( $data[0] ) );
$header_counts = $last_index + 1;
|
d7f6bdbb
Mihail
add Importers fil...
|
159
|
//формируем заголовок для пользователя, где он сможет выбрать соответсвие полей (выпадающий список)
|
40cac1b6
Mihail
add delete func i...
|
160
|
$header_model = DynamicFormHelper::CreateDynamicModel( $header_counts );
|
7a80e74c
Mihail
add DynamicFormHe...
|
161
|
|
7a80e74c
Mihail
add DynamicFormHe...
|
162
163
164
|
return $this->render('results',
['model' => $data,
'header_model' => $header_model,
|
d7f6bdbb
Mihail
add Importers fil...
|
165
166
|
// список колонок для выбора
'basic_column' => Yii::$app->multiparser->getConfiguration('csv', 'basic_column'),
|
7a80e74c
Mihail
add DynamicFormHe...
|
167
|
'dataProvider' => $provider]);
|
58743b31
Mihail
init commit - bas...
|
168
|
}
|
7a80e74c
Mihail
add DynamicFormHe...
|
169
|
|
d7f6bdbb
Mihail
add Importers fil...
|
170
171
|
public function actionWrite()
{
|
d7f6bdbb
Mihail
add Importers fil...
|
172
173
174
175
176
177
178
179
|
//получим колонки которые выбрал пользователь
$arr_attributes = Yii::$app->request->post()['DynamicModel'];
//соберем модель по полученным данным
$model = DynamicFormHelper::CreateDynamicModel($arr_attributes);
//добавим правила валидации (колонки должны быть те что указаны в конфиге)
foreach ($arr_attributes as $key => $value) {
$model->addRule($key, 'in', ['range' => array_keys(Yii::$app->multiparser->getConfiguration('csv', 'basic_column'))]);
}
|
7a80e74c
Mihail
add DynamicFormHe...
|
180
|
|
d7f6bdbb
Mihail
add Importers fil...
|
181
182
|
// провалидируем выбранные колонки
if ($model->validate()) {
|
33d902b8
Mihail
add converter as ...
|
183
|
|
d7f6bdbb
Mihail
add Importers fil...
|
184
185
|
// валидация успешна у нас есть соответсвие колонок, преобразуем в массив данное соответсвие для дальнейшей работы
$arr = $model->toArray();
|
492d8ac1
Mihail
finishing with co...
|
186
|
|
d7f6bdbb
Mihail
add Importers fil...
|
187
188
189
190
191
|
// получим данные из кеша
if (Yii::$app->getCache()->get('parser_data') && Yii::$app->getCache()->get('parser_configuration')) {
$data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
$configuration = unserialize(Yii::$app->getCache()->get('parser_configuration'));
} else {
|
f0dbd829
Mihail
add PriceWriter a...
|
192
|
throw new \ErrorException('Ошибка кеша');
|
d7f6bdbb
Mihail
add Importers fil...
|
193
|
}
|
7a80e74c
Mihail
add DynamicFormHe...
|
194
|
|
d7f6bdbb
Mihail
add Importers fil...
|
195
196
|
// соотнесем отпарсенные данные с соответсивем полученным от пользователя
// для этого преобразуем массив отпарсенных данных - назначим ключи согласно соответствию
|
67adc788
Mihail
add converter int...
|
197
|
$data = CustomArrayHelper::createAssocArray( $data, $arr , 'attr_' );
|
d7f6bdbb
Mihail
add Importers fil...
|
198
|
|
f0dbd829
Mihail
add PriceWriter a...
|
199
200
|
// запустим специальный класс который запишет данные в таблицы связанные с прайсами
$writer = new PriceWriter();
|
edfa67b1
Mihail
add delete price ...
|
201
202
203
204
|
$writer->setConfiguration( $configuration );
$writer->setData($data);
$writer->setMode(0); //web-режим
if ( $writer->writePriceToDB() ) {
|
d7f6bdbb
Mihail
add Importers fil...
|
205
|
|
f0dbd829
Mihail
add PriceWriter a...
|
206
207
208
209
|
$configuration['success'] = true;
// все прошло успешно - очищаем кеш
Yii::$app->getCache()->delete('parser_data');
Yii::$app->getCache()->delete('parser_configuration');
|
1fa22312
Mihail
add auto upload a...
|
210
|
|
3be5e214
Mihail
fixed issues with...
|
211
212
213
|
if( file_exists($configuration['file_path']) )
unlink($configuration['file_path']);
|
f0dbd829
Mihail
add PriceWriter a...
|
214
|
return $this->render('index', ['model' => $configuration]);
|
d7f6bdbb
Mihail
add Importers fil...
|
215
|
|
f0dbd829
Mihail
add PriceWriter a...
|
216
|
};
|
d7f6bdbb
Mihail
add Importers fil...
|
217
218
219
220
|
}
}
|
58743b31
Mihail
init commit - bas...
|
221
|
|
1fa22312
Mihail
add auto upload a...
|
222
223
|
public function actionAutoUpload()
{
|
942bad48
Mihail
adapt project to ...
|
224
|
$query = Importers::find()->where(['active' => true])->orderBy(['price_date_update' => SORT_DESC]);
|
1fa22312
Mihail
add auto upload a...
|
225
226
227
228
229
230
231
232
233
234
235
|
$provider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10,
],
]);
return $this->render('check_price',
[
'dataProvider' => $provider]);
}
|
35764921
Mihail
add action and vi...
|
236
237
238
|
public function actionServerFiles ()
{
|
ef41533d
Mihail
temp commit - wor...
|
239
240
|
$arr_id_files = [];
|
35764921
Mihail
add action and vi...
|
241
|
// получим список файлов которые ожидают к загрузке
|
ea4ecf3d
Mihail
console csv parsing
|
242
|
foreach ( glob(Yii::getAlias('@temp_upload') . '/*.csv' ) as $server_file ) {
|
35764921
Mihail
add action and vi...
|
243
|
$file_id = basename($server_file,".csv");
|
0ade45a9
Mihail
add ajax handler ...
|
244
|
$arr_id_files[] = (int) $file_id;
|
35764921
Mihail
add action and vi...
|
245
|
}
|
181d3f16
Mihail
merge with server
|
246
|
|
942bad48
Mihail
adapt project to ...
|
247
|
$query = ImportersFiles::find()->where(['in', 'id', $arr_id_files])->orderBy(['upload_time' => SORT_DESC]);
|
35764921
Mihail
add action and vi...
|
248
249
250
251
252
253
254
255
256
257
258
259
|
$provider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10,
],
]);
return $this->render('server-files',
[
'dataProvider' => $provider]);
}
|
0ade45a9
Mihail
add ajax handler ...
|
260
|
public function actionDelete ()
|
35764921
Mihail
add action and vi...
|
261
|
{
|
0ade45a9
Mihail
add ajax handler ...
|
262
|
if ( Yii::$app->request->isAjax ) {
|
35764921
Mihail
add action and vi...
|
263
|
|
942bad48
Mihail
adapt project to ...
|
264
|
$files_model = new ImportersFiles();
|
0ade45a9
Mihail
add ajax handler ...
|
265
266
267
268
|
if ( isset(Yii::$app->request->post()['id'] )) {
$id = Yii::$app->request->post()['id'];
try {
$files_model->delete($id);
|
ef41533d
Mihail
temp commit - wor...
|
269
|
unlink(Yii::getAlias('@temp_upload') . '/' . $id . '.csv' );
|
0ade45a9
Mihail
add ajax handler ...
|
270
271
272
|
// сообщим скрипту что все ОК
echo 1;
} catch (ErrorException $e) {
|
35764921
Mihail
add action and vi...
|
273
|
|
1fe29bbe
Mihail
fixed parser and ...
|
274
|
throw $e;
|
35764921
Mihail
add action and vi...
|
275
|
|
0ade45a9
Mihail
add ajax handler ...
|
276
277
|
}
}
|
35764921
Mihail
add action and vi...
|
278
279
|
}
|
35764921
Mihail
add action and vi...
|
280
|
}
|
1fe29bbe
Mihail
fixed parser and ...
|
281
|
|
ef41533d
Mihail
temp commit - wor...
|
282
283
|
public function actionLaunchCroneUploads ()
{
|
ef41533d
Mihail
temp commit - wor...
|
284
|
foreach (glob(Yii::getAlias('@temp_upload') . '/*.csv') as $server_file) {
|
1fe29bbe
Mihail
fixed parser and ...
|
285
|
|
ef41533d
Mihail
temp commit - wor...
|
286
|
$file_name = basename($server_file,".csv");
|
ea4ecf3d
Mihail
console csv parsing
|
287
|
copy( $server_file, Yii::getAlias('@auto_upload') . '/' . $file_name . '.csv' );
|
ef41533d
Mihail
temp commit - wor...
|
288
289
|
}
|
78684ed4
Mihail
add multiply pric...
|
290
|
|
ea4ecf3d
Mihail
console csv parsing
|
291
292
|
Yii::$app->session->setFlash( 'server-files', 'Файл успешно загружен' );
$this->redirect('server-files');
|
1fe29bbe
Mihail
fixed parser and ...
|
293
|
|
78684ed4
Mihail
add multiply pric...
|
294
295
|
// $csv = new \console\controllers\ParserController( 'parse-csv', $this->module );
// $csv->actionParseCsv();
|
48b58a13
Mihail
finish with xml a...
|
296
|
}
|
1fe29bbe
Mihail
fixed parser and ...
|
297
|
|
ef41533d
Mihail
temp commit - wor...
|
298
|
|
1fd14fc9
Mihail
fixed errors with...
|
299
|
|
58743b31
Mihail
init commit - bas...
|
300
|
}
|