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 | ... | ... |