app/Plugin/SDream/EventSubscriber/OrderMailSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. /*
  3.     役割:受信時のメール制御
  4.         
  5.         現時点:不定貫用メール
  6. */
  7. namespace Plugin\SDream\EventSubscriber;
  8. use Eccube\Event\EccubeEvents;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Eccube\Event\EventArgs;
  11. use Twig\Environment;
  12. use Psr\Log\LoggerInterface;
  13. class OrderMailSubscriber implements EventSubscriberInterface
  14. {
  15.     private Environment $twig;
  16.     private LoggerInterface $logger;
  17.     public function __construct(
  18.         Environment $twig,
  19.         LoggerInterface $logger
  20.     ) {
  21.         $this->twig $twig;
  22.         $this->logger $logger;
  23.     }
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             EccubeEvents::MAIL_ORDER => 'onMailOrder',
  28.         ];
  29.     }
  30.     public function onMailOrder(EventArgs $event): void
  31.     {
  32.         $this->logger->info('onMailOrder called');
  33.         $message $event->getArgument('message');
  34.         $Order   $event->getArgument('Order');
  35.         $this->logger->info('[SDream] MAIL_ORDER event fired', [
  36.             'order_id' => $Order $Order->getId() : null,
  37.             'has_variable_weight' => $Order $Order->hasVariableWeight() : null,
  38.         ]);
  39.         /* デバッグ用
  40.         // 送信先を削除して、この後のメール送信を一時的に止める
  41.         //  顧客メール → 送信されない
  42.         //  管理者通知 → 送信されない
  43.         //  ★注文処理自体 → 正常完了
  44.         $message->to();
  45.         $message->bcc();
  46.         */
  47.         //イベント発火を確認        
  48.         if (!$Order || !$this->isVariableWeightOrder($Order)) {
  49.             return;
  50.         }        
  51.         //app/Plugin/SDream/Resource/template/mail/variable_weight_order.twig
  52.         $textTemplate '@SDream/mail/variable_weight_order.twig';
  53.         if (!$this->twig->getLoader()->exists($textTemplate)) {
  54.             $this->logger->warning('[SDream] mail textTemplate not found', [
  55.                 'textTemplate' => $textTemplate
  56.             ]);
  57.             return;
  58.         }
  59.         $htmlTemplate  '@SDream/mail/variable_weight_order_html.twig';
  60.         if (!$this->twig->getLoader()->exists($htmlTemplate )) {
  61.             $this->logger->warning('[SDream] mail htmlTemplate not found', [
  62.                 'htmlTemplate' => $htmlTemplate 
  63.             ]);
  64.             return;
  65.         }
  66.         // 不定貫用テンプレートに差し替え
  67.         $textBody $this->twig->render($textTemplate, [
  68.             'Order' => $Order
  69.         ]);
  70.         $htmlBody $this->twig->render($htmlTemplate, [
  71.             'Order' => $Order
  72.         ]);
  73.         //Bodyはオブジェクトで渡す 
  74.         $textBody preg_replace("/\r\n|\r|\n/""\r\n"$textBody);
  75.         $message->text($textBody);//text
  76.         $message->html($htmlBody);//html
  77.         // 件名変更
  78.         $message->subject(
  79.             '【仮注文内容のご確認】 '.$message->getSubject()
  80.         );
  81.         
  82.     }
  83.     private function isVariableWeightOrder($Order): bool
  84.     {
  85.         foreach ($Order->getOrderItems() as $item) {
  86.             $pc $item->getProductClass();
  87.             if (!$pc) continue;
  88.             $product $pc->getProduct();
  89.             if (!$product) continue;
  90.             if (method_exists($product'getFirmvariableattribute')) {
  91.                 if ((int)$product->getFirmvariableattribute() === 1) {
  92.                     return true;
  93.                 }
  94.             }
  95.         }
  96.         return false;
  97.     }
  98. }