Commit 7f6a9301d6a5f24190ed0e0f1871415e27dd20d2

Authored by Mihail
1 parent f68e7edd

add mails classes

backend/controllers/RgGrupController.php
... ... @@ -195,8 +195,8 @@ class RgGrupController extends BaseController
195 195  
196 196 public function actionMail()
197 197 {
198   - //$mail_saver = new MailAttachmentsSaver('{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox', 'mt@soft-terra.com.ua', 'Wehrfyjd8');
199   - $mail_saver = new MailAttachmentsSaver('{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'price@italauto.com.ua', '67853562');
  198 + $mail_saver = new MailAttachmentsSaver('{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'tsurkanovm@gmail.com', 'Wtvr@2000');
  199 + //$mail_saver = new MailAttachmentsSaver('{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'price@italauto.com.ua', '67853562');
200 200 $mail_saver->saveAttachmentsTo();
201 201 }
202 202  
... ...
backend/views/cart/index.php
... ... @@ -10,6 +10,7 @@ use kartik\date\DatePicker;
10 10  
11 11 $this->title = Yii::t('app', 'Заказы');
12 12 $this->params['breadcrumbs'][] = $this->title;
  13 +
13 14 ?>
14 15 <div class="cart-bills-index">
15 16  
... ... @@ -25,6 +26,13 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
25 26  
26 27 'id',
27 28 'account_id',
  29 + ['label' =>'Информация',
  30 + 'value' =>function ($data) {
  31 + $info = $data->scode . ' /n';
  32 + $info .= $data->name;
  33 + return $info;
  34 + },
  35 + ],
28 36 'sum',
29 37 [
30 38 'label' =>'Статус',
... ... @@ -34,17 +42,18 @@ $this-&gt;params[&#39;breadcrumbs&#39;][] = $this-&gt;title;
34 42 'manager_name',
35 43 [
36 44 'label' =>'Дата',
  45 + 'value' =>function ($data) {
  46 + return date('Y-m-d', $data->dt);
  47 + },
37 48 'attribute' => 'dt',
38 49 'filter' => DatePicker::widget([
39   - 'name' => 'data1',
40   - // 'value' => '01-Feb-2015',
  50 + 'model' =>$searchModel,
  51 + 'language' =>'ru',
  52 + 'size' =>'xs',
  53 + 'separator' =>'по',
  54 + 'attribute' => 'dt',
41 55 'type' => DatePicker::TYPE_RANGE,
42   - 'name2' => 'data2',
43   - // 'value2' => '27-Feb-2015',
44   - 'pluginOptions' => [
45   - 'autoclose'=>true,
46   - 'format' => 'dd-M-yyyy'
47   - ]
  56 + 'attribute2' => 'date_to',
48 57 ]),
49 58 ],
50 59  
... ...
common/components/mail/ImapMailReader.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: Tsurkanov
  5 + * Date: 02.11.2015
  6 + * Time: 16:56
  7 + */
  8 +
  9 +namespace common\components\mail;
  10 +
  11 +
  12 +class ImapMailReader extends MailReader {
  13 +
  14 + function __construct( $hostname, $username, $password )
  15 + {
  16 + parent::__construct($hostname, $username, $password);
  17 + $this->connection = imap_open($hostname, $username, $password);
  18 +
  19 + if ($this->connection === false)
  20 + throw new \Exception('Cannot connect to Gmail: ' . imap_last_error());
  21 +
  22 + }
  23 +
  24 + public function getEmails( $flag )
  25 + {
  26 + return imap_search( $this->connection, $flag );
  27 + }
  28 +
  29 + /**
  30 + * @return mixed
  31 + */
  32 + public function getListMailboxes()
  33 + {
  34 + return imap_list($this->connection, $this->hostname, "*");
  35 + }
  36 +
  37 + public function getCurrentEmailStructure( $email_number )
  38 + {
  39 + return imap_fetchstructure($this->connection, $email_number);
  40 + }
  41 +
  42 + public function reOpen( $hostname )
  43 + {
  44 + imap_reopen( $this->connection, $hostname );
  45 + }
  46 +
  47 + function __destruct()
  48 + {
  49 + /* close the connection */
  50 + imap_close( $this->connection );
  51 + }
  52 +
  53 +
  54 +}
0 55 \ No newline at end of file
... ...
common/components/parsers/MailAttachmentsSaver.php renamed to common/components/mail/MailAttachmentsSaver.php
... ... @@ -6,31 +6,32 @@
6 6 * Time: 10:53
7 7 */
8 8  
9   -namespace common\components\parsers;
  9 +namespace common\components\mail;
10 10  
11 11  
12 12 use common\components\CustomVarDamp;
13 13  
14 14 class MailAttachmentsSaver
15 15 {
16   -//$hostname = '{imap.gmail.com:993/imap/ssl/novalidate-cert/norsh}Inbox';
17   - protected $connection;
  16 + protected $mail_reader;
  17 + protected $massage_type;
  18 + public $file_name_prefix;
18 19  
19   - public function __construct($hostname, $username, $password)
  20 + public function __construct( MailReader $mail_reader, $massage_type )
20 21 {
21   - $this->connection = imap_open($hostname, $username, $password);
22   - CustomVarDamp::dumpAndDie( $this->connection);
23   - if ($this->connection === false)
24   - throw new \Exception('Cannot connect to Gmail: ' . imap_last_error());
  22 + $this->mail_reader = $mail_reader;
  23 + $this->massage_type = $massage_type;
  24 +
25 25 }
26 26  
27 27  
28   - public function saveAttachmentsTo()
  28 + public function saveAttachmentsTo( $destination )
29 29 {
30 30  
31   - $emails = imap_search($this->connection, 'FROM forallthings');
  31 + $emails = $this->mail_reader->getEmails( $this->massage_type );
32 32  
33 33 /* if emails are returned, cycle through each... */
  34 +
34 35 if ($emails) {
35 36  
36 37 /* begin output var */
... ... @@ -38,14 +39,10 @@ class MailAttachmentsSaver
38 39  
39 40 /* put the newest emails on top */
40 41 rsort($emails);
41   -
  42 + // CustomVarDamp::dump($emails);
42 43 foreach ($emails as $email_number) {
43 44  
44   - /* get information specific to this email */
45   -// $overview = imap_fetch_overview($inbox, $email_number, 0);
46   -// $message = imap_fetchbody($inbox, $email_number, 2);
47   - $structure = imap_fetchstructure($this->connection, $email_number);
48   -
  45 + $structure = $this->mail_reader->getCurrentEmailStructure($email_number);
49 46 $attachments = array();
50 47 if (isset($structure->parts) && count($structure->parts)) {
51 48 for ($i = 0; $i < count($structure->parts); $i++) {
... ... @@ -74,7 +71,7 @@ class MailAttachmentsSaver
74 71 }
75 72  
76 73 if ($attachments[$i]['is_attachment']) {
77   - $attachments[$i]['attachment'] = imap_fetchbody($this->connection, $email_number, $i + 1);
  74 + $attachments[$i]['attachment'] = imap_fetchbody($this->mail_reader->connection, $email_number, $i + 1);
78 75 if ($structure->parts[$i]->encoding == 3) { // 3 = BASE64
79 76 $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);
80 77 } elseif ($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE
... ... @@ -83,16 +80,21 @@ class MailAttachmentsSaver
83 80 }
84 81 }
85 82  
86   - CustomVarDamp::dumpAndDie($attachments);
87   -
88 83 if (count($attachments) != 0) {
89 84  
  85 + foreach($attachments as $key => &$val){
  86 + if ($val['is_attachment'] == 1) {
90 87  
91   - foreach ($attachments as $at) {
  88 + if( isset($this->file_name_prefix) ){
  89 + $name = $destination . '/' . $this->file_name_prefix . mb_decode_mimeheader($val['name']);
  90 + }else{
  91 + $name = $destination . '/' . mb_decode_mimeheader($val['name']);
  92 + }
  93 + mb_internal_encoding("UTF-8");
92 94  
93   - if ($at['is_attachment'] == 1) {
94   - //die(__DIR__);
95   - file_put_contents('test.csv', $at['attachment']);
  95 + //file_put_contents(\Yii::getAlias('@temp_upload') . '/' . $name, $val['attachment']);
  96 + file_put_contents( $name, $val['attachment'] );
  97 + }
96 98  
97 99 }
98 100 }
... ... @@ -101,10 +103,7 @@ class MailAttachmentsSaver
101 103  
102 104 }
103 105  
104   - // echo $output;
105 106 }
106   - /* close the connection */
107   - imap_close($this->connection);
  107 +
108 108 }
109   - }
110 109 }
111 110 \ No newline at end of file
... ...
common/components/mail/MailReader.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: Tsurkanov
  5 + * Date: 02.11.2015
  6 + * Time: 16:47
  7 + */
  8 +
  9 +namespace common\components\mail;
  10 +
  11 +
  12 +abstract class MailReader {
  13 +
  14 + public $connection;
  15 + protected $hostname;
  16 + protected $username;
  17 + protected $password;
  18 +
  19 + /* get information specific to this email */
  20 +// $overview = imap_fetch_overview($inbox, $email_number, 0);
  21 +// $message = imap_fetchbody($inbox, $email_number, 2);
  22 +
  23 + function __construct( $hostname, $username, $password )
  24 + {
  25 + $this->hostname = $hostname;
  26 + $this->username = $username;
  27 + $this->password = $password;
  28 + }
  29 +
  30 + /**
  31 + * @return mixed
  32 + */
  33 + public function getHostname()
  34 + {
  35 + return $this->hostname;
  36 + }
  37 +
  38 +
  39 +
  40 + public abstract function getListMailboxes();
  41 +
  42 + public abstract function getEmails( $flag );
  43 +
  44 + public abstract function getCurrentEmailStructure( $email );
  45 +
  46 + public abstract function reOpen( $hostname );
  47 +
  48 +
  49 +
  50 +}
0 51 \ No newline at end of file
... ...
common/models/CartBillsSearch.php
... ... @@ -13,7 +13,7 @@ use common\models\CartBillsView;
13 13 */
14 14 class CartBillsSearch extends CartBillsView
15 15 {
16   -
  16 + public $date_to;
17 17 /**
18 18 * @inheritdoc
19 19 */
... ... @@ -21,7 +21,7 @@ class CartBillsSearch extends CartBillsView
21 21 {
22 22 return [
23 23 [['id', 'account_id', 'status'], 'integer'],
24   - [['data1,data2'], 'safe'],
  24 + [['dt', 'date_to'], 'string', 'max' => 10],
25 25 ];
26 26 }
27 27  
... ... @@ -50,8 +50,7 @@ class CartBillsSearch extends CartBillsView
50 50 ]);
51 51  
52 52 $this->load($params);
53   - //$timestamp= mktime($hours,$minutes,$seconds,$month,$day,$year);
54   - CustomVarDamp::dumpAndDie(date_timestamp_get($params['data1']));
  53 +
55 54 if (!$this->validate()) {
56 55 // uncomment the following line if you do not want to return any records when validation fails
57 56 // $query->where('0=1');
... ... @@ -61,10 +60,20 @@ class CartBillsSearch extends CartBillsView
61 60 $query->andFilterWhere([
62 61 'id' => $this->id,
63 62 'account_id' => $this->account_id,
64   - 'timestamp' => $this->dt,
65 63 'status_id' => $this->status,
66 64 ]);
67 65  
  66 + if($this->dt !== null || $this->date_to !== null){
  67 + $date_from = mktime(0,0,0,(int)substr($this->dt,4,2),(int)substr($this->dt,1,2),(int)substr($this->dt,7,4));
  68 + $date_to = mktime(23,59,59,(int)substr($this->date_to,4,2),(int)substr($this->date_to,1,2),(int)substr($this->date_to,7,4));
  69 +
  70 + $query->andFilterWhere([
  71 + 'between', 'dt', $date_from, $date_to
  72 + ]);
  73 + }
  74 +
  75 +
  76 +
68 77 // $query->andFilterWhere(['like', 'f1', $this->f1])
69 78 // ->andFilterWhere(['like', 'f2', $this->f2])
70 79 // ->andFilterWhere(['like', 'f3', $this->f3])
... ... @@ -73,4 +82,9 @@ class CartBillsSearch extends CartBillsView
73 82  
74 83 return $dataProvider;
75 84 }
  85 +
  86 + public static function findById($id){
  87 +
  88 + return CartBillsView::find()->where(['id' => $id])->one();
  89 + }
76 90 }
... ...
console/controllers/ParserController.php
... ... @@ -2,6 +2,8 @@
2 2 namespace console\controllers;
3 3  
4 4 use common\components\CustomVarDamp;
  5 +use common\components\mail\ImapMailReader;
  6 +use common\components\mail\MailAttachmentsSaver;
5 7 use yii\console\Controller;
6 8 use yii\helpers\Console;
7 9 use common\components\PriceWriter;
... ... @@ -118,4 +120,26 @@ class ParserController extends Controller
118 120 \Yii::info('2', 'parser');
119 121  
120 122 }
  123 +
  124 + public function actionSaveMailAttachments()
  125 + {
  126 + \Yii::info('Начало сохранения файлов почты', 'mail');
  127 +
  128 + $mail_reader = new ImapMailReader( '{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'tsurkanovm@gmail.com', 'Wtvr@2000' );
  129 + $mailboxes = $mail_reader->getListMailboxes();
  130 + foreach ($mailboxes as $custom_label) {
  131 + $words = explode(" ",str_replace(array($mail_reader->getHostname(),"!"),"",imap_utf7_decode($custom_label)));
  132 + $importer_id = (int)preg_replace("/[^A-Z0-9]+/","",strtoupper($words[0]));
  133 +
  134 + $mail_reader->reOpen($custom_label);
  135 + $saver = new MailAttachmentsSaver( $mail_reader, 'UNSEEN' );
  136 + $saver->file_name_parefix = $importer_id . '~!~';
  137 + $saver->saveAttachmentsTo(\Yii::getAlias('@temp_upload'));
  138 +
  139 +// $files_model = new ImportersFiles();
  140 +// $files_model->importer_id = $importer_id;
  141 + }
  142 +
  143 +
  144 + }
121 145 }
122 146 \ No newline at end of file
... ...