Commit 6f678cadf80aa79d026b852b7bdcf9943caa5dc4
1 parent
cd99b534
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 | 18 | 'class' => 'yii\log\FileTarget', | 
| 19 | 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 | 38 | 'params' => $params, | 
| 32 | 39 | ]; | 
| 33 | 40 | ... | ... | 
console/controllers/ParserController.php
| ... | ... | @@ -131,6 +131,30 @@ class ParserController extends Controller | 
| 131 | 131 | $importer_id_prefix = ImportersFiles::FILES_PREFIX; | 
| 132 | 132 | // подключимся к ящику | 
| 133 | 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 | 159 | $mailboxes = $mail_reader->getListMailboxes(); | 
| 136 | 160 | // очистим массив в котором в итоге окажуться все файлы вложений, а также распакованные файлы из архивов | 
| ... | ... | @@ -156,14 +180,13 @@ class ParserController extends Controller | 
| 156 | 180 | // ящик не имеет писем с вложениями | 
| 157 | 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 | 192 | $arch_creator = new ArchiveCreator(); | 
| ... | ... | @@ -193,10 +216,13 @@ class ParserController extends Controller | 
| 193 | 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 | 223 | foreach ( $files as $name => $ext ) { | 
| 199 | - // имена файлов для расширения csv нужно поменять, для остальных оставляем оригинальные имена вложений (плюс ид поставщика если письмо от поставщика) | |
| 224 | + // имена файлов для расширения csv нужно поменять, | |
| 225 | + // для остальных оставляем оригинальные имена вложений (плюс ид поставщика если письмо от поставщика) | |
| 200 | 226 | $file_name = pathinfo( $name, PATHINFO_BASENAME ); | 
| 201 | 227 | if( $ext == 'csv' ){ | 
| 202 | 228 | // определим ид поставщика по имени файла | 
| ... | ... | @@ -215,17 +241,12 @@ class ParserController extends Controller | 
| 215 | 241 | $files_model->throwStringErrorException(); | 
| 216 | 242 | } | 
| 217 | 243 | } | 
| 218 | - | |
| 219 | 244 | } | 
| 220 | 245 | if( rename( $name, $new_destination . $file_name ) ){ | 
| 221 | - \Yii::info('Вложение {$name} сохранено', 'mail'); | |
| 222 | - | |
| 246 | + \Yii::info("Вложение {$name} сохранено", 'mail'); | |
| 223 | 247 | } else{ | 
| 224 | 248 | new \ErrorException("Нет возможности переписать файл {$name}"); | 
| 225 | 249 | } | 
| 226 | - | |
| 227 | 250 | } | 
| 228 | - | |
| 229 | - | |
| 230 | 251 | } | 
| 231 | 252 | } | 
| 232 | 253 | \ No newline at end of file | ... | ... | 
