Commit 6ee76396a6d383e7409014fe449633fbd4f3dc95
1 parent
ea380599
refactored SaveMailAttachments and add mail.log
Showing
2 changed files
with
50 additions
and
22 deletions
 
Show diff stats
console/config/main.php
| @@ -18,16 +18,23 @@ return [ | @@ -18,16 +18,23 @@ return [ | ||
| 18 | 'class' => 'yii\log\FileTarget', | 18 | 'class' => 'yii\log\FileTarget', | 
| 19 | 'levels' => ['error', 'warning'], | 19 | 'levels' => ['error', 'warning'], | 
| 20 | ], | 20 | ], | 
| 21 | - [ | ||
| 22 | - 'class' => 'yii\log\FileTarget', | ||
| 23 | - 'logFile' => __DIR__ . '/../runtime/logs/parser.log', | ||
| 24 | - 'levels' => ['info', 'error'], | ||
| 25 | - 'categories' => ['yii\base\ErrorException:*', 'parser'], | ||
| 26 | - 'logVars' => [], | ||
| 27 | - ], | 21 | + [ | 
| 22 | + 'class' => 'yii\log\FileTarget', | ||
| 23 | + 'logFile' => __DIR__ . '/../runtime/logs/parser.log', | ||
| 24 | + 'levels' => ['info', 'error'], | ||
| 25 | + 'categories' => ['yii\base\ErrorException:*', 'parser'], | ||
| 26 | + 'logVars' => [], | ||
| 27 | + ], | ||
| 28 | + [ | ||
| 29 | + 'class' => 'yii\log\FileTarget', | ||
| 30 | + 'logFile' => __DIR__ . '/../runtime/logs/mail.log', | ||
| 31 | + 'levels' => ['info', 'error'], | ||
| 32 | + 'categories' => ['yii\base\ErrorException:*', 'mail'], | ||
| 33 | + 'logVars' => [], | ||
| 34 | + ], | ||
| 35 | + ], | ||
| 28 | ], | 36 | ], | 
| 29 | ], | 37 | ], | 
| 30 | - ], | ||
| 31 | 'params' => $params, | 38 | 'params' => $params, | 
| 32 | ]; | 39 | ]; | 
| 33 | 40 | 
console/controllers/ParserController.php
| @@ -131,6 +131,30 @@ class ParserController extends Controller | @@ -131,6 +131,30 @@ class ParserController extends Controller | ||
| 131 | $importer_id_prefix = ImportersFiles::FILES_PREFIX; | 131 | $importer_id_prefix = ImportersFiles::FILES_PREFIX; | 
| 132 | // подключимся к ящику | 132 | // подключимся к ящику | 
| 133 | $mail_reader = new ImapMailReader( '{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'tsurkanovm@gmail.com', 'Wtvr@2000' ); | 133 | $mail_reader = new ImapMailReader( '{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'tsurkanovm@gmail.com', 'Wtvr@2000' ); | 
| 134 | + | ||
| 135 | + // 1. получим все вложения | ||
| 136 | + $files = $this->getMailAttachments( $mail_reader, $importer_id_prefix ); | ||
| 137 | + | ||
| 138 | + // 2. если в вложениях есть архивы - распакуем их и дополним итоговый массив | ||
| 139 | + $this->UnpackFiles( $files ); | ||
| 140 | + | ||
| 141 | + if ( !$files ) { | ||
| 142 | + // нет файлов в ящиках (не было вложений в письмах) | ||
| 143 | + \Yii::info('Вложений не найдено', 'mail'); | ||
| 144 | + return; | ||
| 145 | + } | ||
| 146 | + | ||
| 147 | + // 3. переименуем, зарегистрируем прайсы и перенесем извлеченные файлы | ||
| 148 | + // укажем папку куда нужно перенести все извлеченные вложения | ||
| 149 | + $new_destination = \Yii::getAlias('@auto_upload') . '/'; | ||
| 150 | + | ||
| 151 | + $this->registerAndReplaceFiles( $files, $new_destination ); | ||
| 152 | + | ||
| 153 | + | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + private function getMailAttachments ($mail_reader, $importer_id_prefix = '') | ||
| 157 | + { | ||
| 134 | // получим все внутренние ящики (по ярлыкам) | 158 | // получим все внутренние ящики (по ярлыкам) | 
| 135 | $mailboxes = $mail_reader->getListMailboxes(); | 159 | $mailboxes = $mail_reader->getListMailboxes(); | 
| 136 | // очистим массив в котором в итоге окажуться все файлы вложений, а также распакованные файлы из архивов | 160 | // очистим массив в котором в итоге окажуться все файлы вложений, а также распакованные файлы из архивов | 
| @@ -156,14 +180,13 @@ class ParserController extends Controller | @@ -156,14 +180,13 @@ class ParserController extends Controller | ||
| 156 | // ящик не имеет писем с вложениями | 180 | // ящик не имеет писем с вложениями | 
| 157 | continue; | 181 | continue; | 
| 158 | } | 182 | } | 
| 159 | - | ||
| 160 | } | 183 | } | 
| 161 | 184 | ||
| 162 | - if ( !$files ) { | ||
| 163 | - // нет файлов в ящиках (не было вложений в письмах) | ||
| 164 | - return; | ||
| 165 | - } | 185 | + return $files; | 
| 186 | + } | ||
| 166 | 187 | ||
| 188 | + private function UnpackFiles ( &$files, $importer_id_prefix = '') | ||
| 189 | + { | ||
| 167 | // если в вложениях встречаются архивы - распакуем | 190 | // если в вложениях встречаются архивы - распакуем | 
| 168 | // иициируем фабрику архиваторов | 191 | // иициируем фабрику архиваторов | 
| 169 | $arch_creator = new ArchiveCreator(); | 192 | $arch_creator = new ArchiveCreator(); | 
| @@ -193,10 +216,13 @@ class ParserController extends Controller | @@ -193,10 +216,13 @@ class ParserController extends Controller | ||
| 193 | $files = array_merge( $files, $arch_reader->getExtractedFiles()); | 216 | $files = array_merge( $files, $arch_reader->getExtractedFiles()); | 
| 194 | } | 217 | } | 
| 195 | 218 | ||
| 196 | - // укажем папку куда нужно скопировать все извлеченные вложения | ||
| 197 | - $new_destination = \Yii::getAlias('@auto_upload') . '/'; | 219 | + } | 
| 220 | + | ||
| 221 | + private function registerAndReplaceFiles ( &$files, $new_destination ) | ||
| 222 | + { | ||
| 198 | foreach ( $files as $name => $ext ) { | 223 | foreach ( $files as $name => $ext ) { | 
| 199 | - // имена файлов для расширения csv нужно поменять, для остальных оставляем оригинальные имена вложений (плюс ид поставщика если письмо от поставщика) | 224 | + // имена файлов для расширения csv нужно поменять, | 
| 225 | + // для остальных оставляем оригинальные имена вложений (плюс ид поставщика если письмо от поставщика) | ||
| 200 | $file_name = pathinfo( $name, PATHINFO_BASENAME ); | 226 | $file_name = pathinfo( $name, PATHINFO_BASENAME ); | 
| 201 | if( $ext == 'csv' ){ | 227 | if( $ext == 'csv' ){ | 
| 202 | // определим ид поставщика по имени файла | 228 | // определим ид поставщика по имени файла | 
| @@ -215,17 +241,12 @@ class ParserController extends Controller | @@ -215,17 +241,12 @@ class ParserController extends Controller | ||
| 215 | $files_model->throwStringErrorException(); | 241 | $files_model->throwStringErrorException(); | 
| 216 | } | 242 | } | 
| 217 | } | 243 | } | 
| 218 | - | ||
| 219 | } | 244 | } | 
| 220 | if( rename( $name, $new_destination . $file_name ) ){ | 245 | if( rename( $name, $new_destination . $file_name ) ){ | 
| 221 | - \Yii::info('Вложение {$name} сохранено', 'mail'); | ||
| 222 | - | 246 | + \Yii::info("Вложение {$name} сохранено", 'mail'); | 
| 223 | } else{ | 247 | } else{ | 
| 224 | new \ErrorException("Нет возможности переписать файл {$name}"); | 248 | new \ErrorException("Нет возможности переписать файл {$name}"); | 
| 225 | } | 249 | } | 
| 226 | - | ||
| 227 | } | 250 | } | 
| 228 | - | ||
| 229 | - | ||
| 230 | } | 251 | } | 
| 231 | } | 252 | } | 
| 232 | \ No newline at end of file | 253 | \ No newline at end of file |