From 6f678cadf80aa79d026b852b7bdcf9943caa5dc4 Mon Sep 17 00:00:00 2001 From: Mihail Date: Thu, 5 Nov 2015 17:11:37 +0200 Subject: [PATCH] refactored SaveMailAttachments and add mail.log --- console/config/main.php | 23 +++++++++++++++-------- console/controllers/ParserController.php | 49 +++++++++++++++++++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 22 deletions(-) diff --git a/console/config/main.php b/console/config/main.php index 1e734ea..3060c92 100644 --- a/console/config/main.php +++ b/console/config/main.php @@ -18,16 +18,23 @@ return [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], - [ - 'class' => 'yii\log\FileTarget', - 'logFile' => __DIR__ . '/../runtime/logs/parser.log', - 'levels' => ['info', 'error'], - 'categories' => ['yii\base\ErrorException:*', 'parser'], - 'logVars' => [], - ], + [ + 'class' => 'yii\log\FileTarget', + 'logFile' => __DIR__ . '/../runtime/logs/parser.log', + 'levels' => ['info', 'error'], + 'categories' => ['yii\base\ErrorException:*', 'parser'], + 'logVars' => [], + ], + [ + 'class' => 'yii\log\FileTarget', + 'logFile' => __DIR__ . '/../runtime/logs/mail.log', + 'levels' => ['info', 'error'], + 'categories' => ['yii\base\ErrorException:*', 'mail'], + 'logVars' => [], + ], + ], ], ], - ], 'params' => $params, ]; diff --git a/console/controllers/ParserController.php b/console/controllers/ParserController.php index f98fe59..c45e410 100644 --- a/console/controllers/ParserController.php +++ b/console/controllers/ParserController.php @@ -131,6 +131,30 @@ class ParserController extends Controller $importer_id_prefix = ImportersFiles::FILES_PREFIX; // подключимся к ящику $mail_reader = new ImapMailReader( '{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'tsurkanovm@gmail.com', 'Wtvr@2000' ); + + // 1. получим все вложения + $files = $this->getMailAttachments( $mail_reader, $importer_id_prefix ); + + // 2. если в вложениях есть архивы - распакуем их и дополним итоговый массив + $this->UnpackFiles( $files ); + + if ( !$files ) { + // нет файлов в ящиках (не было вложений в письмах) + \Yii::info('Вложений не найдено', 'mail'); + return; + } + + // 3. переименуем, зарегистрируем прайсы и перенесем извлеченные файлы + // укажем папку куда нужно перенести все извлеченные вложения + $new_destination = \Yii::getAlias('@auto_upload') . '/'; + + $this->registerAndReplaceFiles( $files, $new_destination ); + + + } + + private function getMailAttachments ($mail_reader, $importer_id_prefix = '') + { // получим все внутренние ящики (по ярлыкам) $mailboxes = $mail_reader->getListMailboxes(); // очистим массив в котором в итоге окажуться все файлы вложений, а также распакованные файлы из архивов @@ -156,14 +180,13 @@ class ParserController extends Controller // ящик не имеет писем с вложениями continue; } - } - if ( !$files ) { - // нет файлов в ящиках (не было вложений в письмах) - return; - } + return $files; + } + private function UnpackFiles ( &$files, $importer_id_prefix = '') + { // если в вложениях встречаются архивы - распакуем // иициируем фабрику архиваторов $arch_creator = new ArchiveCreator(); @@ -193,10 +216,13 @@ class ParserController extends Controller $files = array_merge( $files, $arch_reader->getExtractedFiles()); } - // укажем папку куда нужно скопировать все извлеченные вложения - $new_destination = \Yii::getAlias('@auto_upload') . '/'; + } + + private function registerAndReplaceFiles ( &$files, $new_destination ) + { foreach ( $files as $name => $ext ) { - // имена файлов для расширения csv нужно поменять, для остальных оставляем оригинальные имена вложений (плюс ид поставщика если письмо от поставщика) + // имена файлов для расширения csv нужно поменять, + // для остальных оставляем оригинальные имена вложений (плюс ид поставщика если письмо от поставщика) $file_name = pathinfo( $name, PATHINFO_BASENAME ); if( $ext == 'csv' ){ // определим ид поставщика по имени файла @@ -215,17 +241,12 @@ class ParserController extends Controller $files_model->throwStringErrorException(); } } - } if( rename( $name, $new_destination . $file_name ) ){ - \Yii::info('Вложение {$name} сохранено', 'mail'); - + \Yii::info("Вложение {$name} сохранено", 'mail'); } else{ new \ErrorException("Нет возможности переписать файл {$name}"); } - } - - } } \ No newline at end of file -- libgit2 0.21.4