Commit 7f6a9301d6a5f24190ed0e0f1871415e27dd20d2
1 parent
f68e7edd
add mails classes
Showing
7 changed files
with
192 additions
and
42 deletions
Show diff stats
backend/controllers/RgGrupController.php
| @@ -195,8 +195,8 @@ class RgGrupController extends BaseController | @@ -195,8 +195,8 @@ class RgGrupController extends BaseController | ||
| 195 | 195 | ||
| 196 | public function actionMail() | 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 | $mail_saver->saveAttachmentsTo(); | 200 | $mail_saver->saveAttachmentsTo(); |
| 201 | } | 201 | } |
| 202 | 202 |
backend/views/cart/index.php
| @@ -10,6 +10,7 @@ use kartik\date\DatePicker; | @@ -10,6 +10,7 @@ use kartik\date\DatePicker; | ||
| 10 | 10 | ||
| 11 | $this->title = Yii::t('app', 'Заказы'); | 11 | $this->title = Yii::t('app', 'Заказы'); |
| 12 | $this->params['breadcrumbs'][] = $this->title; | 12 | $this->params['breadcrumbs'][] = $this->title; |
| 13 | + | ||
| 13 | ?> | 14 | ?> |
| 14 | <div class="cart-bills-index"> | 15 | <div class="cart-bills-index"> |
| 15 | 16 | ||
| @@ -25,6 +26,13 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -25,6 +26,13 @@ $this->params['breadcrumbs'][] = $this->title; | ||
| 25 | 26 | ||
| 26 | 'id', | 27 | 'id', |
| 27 | 'account_id', | 28 | 'account_id', |
| 29 | + ['label' =>'Информация', | ||
| 30 | + 'value' =>function ($data) { | ||
| 31 | + $info = $data->scode . ' /n'; | ||
| 32 | + $info .= $data->name; | ||
| 33 | + return $info; | ||
| 34 | + }, | ||
| 35 | + ], | ||
| 28 | 'sum', | 36 | 'sum', |
| 29 | [ | 37 | [ |
| 30 | 'label' =>'Статус', | 38 | 'label' =>'Статус', |
| @@ -34,17 +42,18 @@ $this->params['breadcrumbs'][] = $this->title; | @@ -34,17 +42,18 @@ $this->params['breadcrumbs'][] = $this->title; | ||
| 34 | 'manager_name', | 42 | 'manager_name', |
| 35 | [ | 43 | [ |
| 36 | 'label' =>'Дата', | 44 | 'label' =>'Дата', |
| 45 | + 'value' =>function ($data) { | ||
| 46 | + return date('Y-m-d', $data->dt); | ||
| 47 | + }, | ||
| 37 | 'attribute' => 'dt', | 48 | 'attribute' => 'dt', |
| 38 | 'filter' => DatePicker::widget([ | 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 | 'type' => DatePicker::TYPE_RANGE, | 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 |
| 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 | \ No newline at end of file | 55 | \ No newline at end of file |
common/components/parsers/MailAttachmentsSaver.php renamed to common/components/mail/MailAttachmentsSaver.php
| @@ -6,31 +6,32 @@ | @@ -6,31 +6,32 @@ | ||
| 6 | * Time: 10:53 | 6 | * Time: 10:53 |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | -namespace common\components\parsers; | 9 | +namespace common\components\mail; |
| 10 | 10 | ||
| 11 | 11 | ||
| 12 | use common\components\CustomVarDamp; | 12 | use common\components\CustomVarDamp; |
| 13 | 13 | ||
| 14 | class MailAttachmentsSaver | 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 | /* if emails are returned, cycle through each... */ | 33 | /* if emails are returned, cycle through each... */ |
| 34 | + | ||
| 34 | if ($emails) { | 35 | if ($emails) { |
| 35 | 36 | ||
| 36 | /* begin output var */ | 37 | /* begin output var */ |
| @@ -38,14 +39,10 @@ class MailAttachmentsSaver | @@ -38,14 +39,10 @@ class MailAttachmentsSaver | ||
| 38 | 39 | ||
| 39 | /* put the newest emails on top */ | 40 | /* put the newest emails on top */ |
| 40 | rsort($emails); | 41 | rsort($emails); |
| 41 | - | 42 | + // CustomVarDamp::dump($emails); |
| 42 | foreach ($emails as $email_number) { | 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 | $attachments = array(); | 46 | $attachments = array(); |
| 50 | if (isset($structure->parts) && count($structure->parts)) { | 47 | if (isset($structure->parts) && count($structure->parts)) { |
| 51 | for ($i = 0; $i < count($structure->parts); $i++) { | 48 | for ($i = 0; $i < count($structure->parts); $i++) { |
| @@ -74,7 +71,7 @@ class MailAttachmentsSaver | @@ -74,7 +71,7 @@ class MailAttachmentsSaver | ||
| 74 | } | 71 | } |
| 75 | 72 | ||
| 76 | if ($attachments[$i]['is_attachment']) { | 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 | if ($structure->parts[$i]->encoding == 3) { // 3 = BASE64 | 75 | if ($structure->parts[$i]->encoding == 3) { // 3 = BASE64 |
| 79 | $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']); | 76 | $attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']); |
| 80 | } elseif ($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE | 77 | } elseif ($structure->parts[$i]->encoding == 4) { // 4 = QUOTED-PRINTABLE |
| @@ -83,16 +80,21 @@ class MailAttachmentsSaver | @@ -83,16 +80,21 @@ class MailAttachmentsSaver | ||
| 83 | } | 80 | } |
| 84 | } | 81 | } |
| 85 | 82 | ||
| 86 | - CustomVarDamp::dumpAndDie($attachments); | ||
| 87 | - | ||
| 88 | if (count($attachments) != 0) { | 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,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 | \ No newline at end of file | 110 | \ No newline at end of file |
| 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 | \ No newline at end of file | 51 | \ No newline at end of file |
common/models/CartBillsSearch.php
| @@ -13,7 +13,7 @@ use common\models\CartBillsView; | @@ -13,7 +13,7 @@ use common\models\CartBillsView; | ||
| 13 | */ | 13 | */ |
| 14 | class CartBillsSearch extends CartBillsView | 14 | class CartBillsSearch extends CartBillsView |
| 15 | { | 15 | { |
| 16 | - | 16 | + public $date_to; |
| 17 | /** | 17 | /** |
| 18 | * @inheritdoc | 18 | * @inheritdoc |
| 19 | */ | 19 | */ |
| @@ -21,7 +21,7 @@ class CartBillsSearch extends CartBillsView | @@ -21,7 +21,7 @@ class CartBillsSearch extends CartBillsView | ||
| 21 | { | 21 | { |
| 22 | return [ | 22 | return [ |
| 23 | [['id', 'account_id', 'status'], 'integer'], | 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,8 +50,7 @@ class CartBillsSearch extends CartBillsView | ||
| 50 | ]); | 50 | ]); |
| 51 | 51 | ||
| 52 | $this->load($params); | 52 | $this->load($params); |
| 53 | - //$timestamp= mktime($hours,$minutes,$seconds,$month,$day,$year); | ||
| 54 | - CustomVarDamp::dumpAndDie(date_timestamp_get($params['data1'])); | 53 | + |
| 55 | if (!$this->validate()) { | 54 | if (!$this->validate()) { |
| 56 | // uncomment the following line if you do not want to return any records when validation fails | 55 | // uncomment the following line if you do not want to return any records when validation fails |
| 57 | // $query->where('0=1'); | 56 | // $query->where('0=1'); |
| @@ -61,10 +60,20 @@ class CartBillsSearch extends CartBillsView | @@ -61,10 +60,20 @@ class CartBillsSearch extends CartBillsView | ||
| 61 | $query->andFilterWhere([ | 60 | $query->andFilterWhere([ |
| 62 | 'id' => $this->id, | 61 | 'id' => $this->id, |
| 63 | 'account_id' => $this->account_id, | 62 | 'account_id' => $this->account_id, |
| 64 | - 'timestamp' => $this->dt, | ||
| 65 | 'status_id' => $this->status, | 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 | // $query->andFilterWhere(['like', 'f1', $this->f1]) | 77 | // $query->andFilterWhere(['like', 'f1', $this->f1]) |
| 69 | // ->andFilterWhere(['like', 'f2', $this->f2]) | 78 | // ->andFilterWhere(['like', 'f2', $this->f2]) |
| 70 | // ->andFilterWhere(['like', 'f3', $this->f3]) | 79 | // ->andFilterWhere(['like', 'f3', $this->f3]) |
| @@ -73,4 +82,9 @@ class CartBillsSearch extends CartBillsView | @@ -73,4 +82,9 @@ class CartBillsSearch extends CartBillsView | ||
| 73 | 82 | ||
| 74 | return $dataProvider; | 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,6 +2,8 @@ | ||
| 2 | namespace console\controllers; | 2 | namespace console\controllers; |
| 3 | 3 | ||
| 4 | use common\components\CustomVarDamp; | 4 | use common\components\CustomVarDamp; |
| 5 | +use common\components\mail\ImapMailReader; | ||
| 6 | +use common\components\mail\MailAttachmentsSaver; | ||
| 5 | use yii\console\Controller; | 7 | use yii\console\Controller; |
| 6 | use yii\helpers\Console; | 8 | use yii\helpers\Console; |
| 7 | use common\components\PriceWriter; | 9 | use common\components\PriceWriter; |
| @@ -118,4 +120,26 @@ class ParserController extends Controller | @@ -118,4 +120,26 @@ class ParserController extends Controller | ||
| 118 | \Yii::info('2', 'parser'); | 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 | \ No newline at end of file | 146 | \ No newline at end of file |