Commit 6f678cadf80aa79d026b852b7bdcf9943caa5dc4

Authored by Mihail
1 parent cd99b534

refactored SaveMailAttachments and add mail.log

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