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