]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Декодирование писем и просмотр origin/feature_fomichev_erp-447_decode_flowwow_emails_body
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 8 Aug 2025 14:57:42 +0000 (17:57 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 8 Aug 2025 14:57:42 +0000 (17:57 +0300)
erp24/controllers/MarketplaceFlowwowEmailsController.php
erp24/services/MarketplaceService.php
erp24/views/marketplace-flowwow-emails/decode-bodies.php [new file with mode: 0644]
erp24/views/marketplace-flowwow-emails/index.php
erp24/views/marketplace-flowwow-emails/view-body.php [new file with mode: 0644]

index c40d9c8bc5631871c276ebf282dc3874f529e3b7..c30c9fbbad760811bd3af6403bbe1da6595c03a1 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace app\controllers;
 
+use Yii;
+use yii\data\ActiveDataProvider;
 use yii_app\records\MarketplaceFlowwowEmails;
 use yii_app\records\MarketplaceFlowwowEmailsSearch;
 use yii\web\Controller;
@@ -60,6 +62,47 @@ class MarketplaceFlowwowEmailsController extends Controller
         ]);
     }
 
+    public function actionDecodeBodies()
+    {
+        if (Yii::$app->request->isPost) {
+            $emails = MarketplaceFlowwowEmails::find()->all();
+            foreach ($emails as $email) {
+                $decoded = quoted_printable_decode($email->body);
+                if ($email->body !== $decoded) {
+                    $email->body = $decoded;
+                    $email->save(false, ['body']);
+                }
+            }
+            Yii::$app->session->setFlash('success', 'Декодирование завершено');
+            return $this->refresh();
+        }
+
+        $dataProvider = new ActiveDataProvider([
+            'query' => MarketplaceFlowwowEmails::find()->orderBy(['id' => SORT_DESC]),
+            'pagination' => ['pageSize' => 20],
+        ]);
+
+        return $this->render('decode-bodies', [
+            'dataProvider' => $dataProvider,
+        ]);
+    }
+
+
+    public function actionViewBody($id)
+    {
+        $model = MarketplaceFlowwowEmails::findOne($id);
+        if (!$model) {
+            throw new NotFoundHttpException('Письмо не найдено');
+        }
+
+        $decodedBody = quoted_printable_decode($model->body);
+
+        return $this->render('view-body', [
+            'model' => $model,
+            'body' => $decodedBody,
+        ]);
+    }
+
     /**
      * Creates a new MarketplaceFlowwowEmails model.
      * If creation is successful, the browser will be redirected to the 'view' page.
index f10ae78617121f268d0f3f79f8a1552e69801050..2a3e4d1b5dc52ebefbae48b6f6784f6d7a110bd4 100644 (file)
@@ -1639,7 +1639,7 @@ class MarketplaceService
                                 'from' => $from,
                                 'to' => $to,
                                 'date' => $date,
-                                'body' => $htmlMessage,
+                                'body' => quoted_printable_decode($htmlMessage),
                             ];
 
                             $output = MarketplaceService::processMessage($message);
diff --git a/erp24/views/marketplace-flowwow-emails/decode-bodies.php b/erp24/views/marketplace-flowwow-emails/decode-bodies.php
new file mode 100644 (file)
index 0000000..79b68d3
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+use yii\helpers\Html;
+use yii\grid\GridView;
+
+/** @var $dataProvider yii\data\ActiveDataProvider */
+
+$this->title = 'Декодирование писем Flowwow';
+$this->params['breadcrumbs'][] = $this->title;
+?>
+<div class="marketplace-flowwow-emails-decode p-4">
+    <h1><?= Html::encode($this->title) ?></h1>
+
+    <?php if (Yii::$app->session->hasFlash('success')): ?>
+        <div class="alert alert-success"><?= Yii::$app->session->getFlash('success') ?></div>
+    <?php endif; ?>
+
+    <p>
+        <?= Html::a('Назад к письмам', ['/marketplace-flowwow-emails/index'], ['class' => 'btn btn-primary my-4']) ?>
+        <?= Html::beginForm(['decode-bodies'], 'post') ?>
+        <?= Html::submitButton('Декодировать все письма', ['class' => 'btn btn-primary', 'data-confirm' => 'Вы уверены? Будет перезаписано тело писем!']) ?>
+        <?= Html::endForm() ?>
+    </p>
+
+    <h3>Последние письма:</h3>
+    <?= GridView::widget([
+        'dataProvider' => $dataProvider,
+        'columns' => [
+            'id',
+            'subject',
+            'from',
+            'to',
+            'date',
+            [
+                'label' => 'Действия',
+                'format' => 'raw',
+                'value' => function($model) {
+                    return Html::a('Просмотр', ['view-body', 'id' => $model->id], ['target' => '_blank', 'class' => 'btn btn-xs btn-success']);
+                }
+            ],
+        ],
+    ]) ?>
+</div>
index c7c69c74de29220c26a4299ae6d2bd49d0b1da30..f5687ac8a4f009bb9e3f4b016cf61a7f4f6b3232 100644 (file)
@@ -16,7 +16,8 @@ $this->params['breadcrumbs'][] = $this->title;
 <div class="marketplace-flowwow-emails-index p-4">
 
     <?= Html::a('к Заказам', ['/marketplace-orders/index'], ['class' => 'btn btn-primary my-4']) ?>
-    <h1><?= Html::encode($this->title) ?></h1>
+    <?= Html::a('Декодировать', ['/marketplace-flowwow-emails/decode-bodies'], ['class' => 'btn btn-primary my-4']) ?>
+        <h1><?= Html::encode($this->title) ?></h1>
 
 
 
@@ -51,7 +52,13 @@ $this->params['breadcrumbs'][] = $this->title;
             'from',
             'to',
             'date',
-            //'body:ntext',
+            [
+                'label' => 'Просмотр письма',
+                'format' => 'raw',
+                'value' => function($model) {
+                    return Html::a('Просмотр', ['view-body', 'id' => $model->id], ['target' => '_blank', 'class' => 'btn btn-xs btn-success']);
+                }
+            ],
             'created_at',
             [
                 'template' => '{view}',
diff --git a/erp24/views/marketplace-flowwow-emails/view-body.php b/erp24/views/marketplace-flowwow-emails/view-body.php
new file mode 100644 (file)
index 0000000..7354cc4
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+
+use yii\helpers\Html;
+
+/** @var $model app\models\MarketplaceFlowwowEmails */
+/** @var $body string */
+
+$this->title = 'Просмотр тела письма: ' . $model->subject;
+$this->params['breadcrumbs'][] = ['label' => 'Декодирование писем', 'url' => ['decode-bodies']];
+$this->params['breadcrumbs'][] = $this->title;
+
+?>
+<div class="marketplace-flowwow-emails-view-body p-4">
+    <h1><?= Html::encode($this->title) ?></h1>
+    <div>
+        <?= Html::a('Назад', ['decode-bodies'], ['class' => 'btn btn-primary']) ?>
+    </div>
+    <hr>
+    <iframe srcdoc="<?= htmlspecialchars($body) ?>" width="100%" height="800" frameborder="0" style="background:#fff"></iframe>
+
+</div>