Commit 6f678cadf80aa79d026b852b7bdcf9943caa5dc4

Authored by Mihail
1 parent cd99b534

refactored SaveMailAttachments and add mail.log

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