app/Plugin/CustomPrice/Event.php line 75

Open in your IDE?
  1. <?php
  2. namespace Plugin\CustomPrice;
  3. use Eccube\Event\TemplateEvent;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Plugin\CustomPrice\Entity\CustomPriceConfig;
  7. use Eccube\Event\EccubeEvents;
  8. use Eccube\Event\EventArgs;
  9. use Plugin\CustomPrice\Entity\CustomProductPrice;
  10. use Plugin\CustomPrice\Entity\CustomPrice;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. class Event implements EventSubscriberInterface
  13. {
  14.     private $entityManager;
  15.     public function __construct(
  16.         EntityManagerInterface $entityManager
  17.     ) {
  18.         $this->entityManager $entityManager;
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return [
  23.             'Product/detail.twig' => 'onProductdetail',
  24.             '@admin/Product/product.twig' => 'onTemplateAdminProduct',
  25.             '@admin/Order/edit.twig' => 'onTemplateAdminOrderEdit',
  26.             '@admin/Order/shipping.twig' => 'onTemplateAdminOrderEdit',
  27.             '@admin/Setting/System/masterdata.twig' => 'onTemplateAdminMasterdata',
  28.             EccubeEvents::ADMIN_PRODUCT_EDIT_COMPLETE => 'onAdminProductEditComplete'
  29.         ];
  30.     }
  31.     public function onProductdetail(TemplateEvent $event)
  32.     {
  33.         $twig '@CustomPrice/Product/detail.twig';
  34.         // $Product = $event->getParameter('Product');
  35.         // $minPrice = null;
  36.         // $maxPrice = null;
  37.         // $maxTotal = null;
  38.         // $minTotal = null;
  39.         
  40.         // if ($Product->getCustomProductPrice() !== null && !empty($Product->getCustomProductPrice()->getPrices())) {
  41.         //     $customPriceRepo = $this->entityManager->getRepository(CustomPrice::class);
  42.         //     $minPrice = $customPriceRepo->findMinPrice($Product->getCustomProductPrice()->getPrices());
  43.         //     $maxPrice = $customPriceRepo->findMaxPrice($Product->getCustomProductPrice()->getPrices());
  44.         //     $maxTotal = $customPriceRepo->findMaxTotal($Product->getCustomProductPrice()->getPrices());
  45.         //     $minTotal = $customPriceRepo->findMinTotal($Product->getCustomProductPrice()->getPrices());
  46.         // }
  47.       
  48.         // // 計算された価格をテンプレート変数として設定
  49.         // $event->setParameter('minPrice', $minPrice);
  50.         // $event->setParameter('maxPrice', $maxPrice);
  51.         // $event->setParameter('maxTotal', $maxTotal);
  52.         // $event->setParameter('minTotal', $minTotal);
  53.         $event->addSnippet($twig);
  54.     }
  55.     public function onTemplateAdminProduct(TemplateEvent $event)
  56.     {
  57.         $customPriceConfigs $this->entityManager->getRepository(CustomPriceConfig::class)->findAll();
  58.         $event->setParameter('customPriceConfigs'$customPriceConfigs);
  59.         $event->addSnippet('@CustomPrice/admin/Product/product_add_price.twig');
  60.     }
  61.     public function onTemplateAdminOrderEdit(TemplateEvent $event)
  62.     {
  63.         $source $event->getSource();
  64.         $parameters $event->getParameters();
  65.         if (preg_match('/<p\sclass="mb-0\sfw-bold">(.*?\{\{\sOrderItem\.product_name\s\}\}.*?)<\/p>/s'$source$result)) {
  66.             $search $result[0];
  67.             $replace $search "{{ include('@CustomPrice/admin/Order/orderitem_option.twig') }}";
  68.             $source str_replace($search$replace$source);
  69.         }
  70.         $event->setSource($source);
  71.     }
  72.     public function onAdminProductEditComplete(EventArgs $event)
  73.     {
  74.         $form $event->getArgument('form');
  75.         $product $event->getArgument('Product');
  76.         $customPriceConfigId $form->get('customPriceConfig')->getData();
  77.         if ($customPriceConfigId) {
  78.             $customPriceConfig $this->entityManager->getRepository(CustomPriceConfig::class)->find($customPriceConfigId);
  79.             // 製品IDとカスタム価格設定IDに基づいて、既存のCustomProductPriceエンティティを検索します。
  80.             $customProductPrice $this->entityManager->getRepository(CustomProductPrice::class)->findOneBy([
  81.                 'Product' => $product,
  82.                 //'CustomPriceConfig' => $customPriceConfig
  83.             ]);
  84.             // 既存のエンティティが見つからなければ新規作成
  85.             if (!$customProductPrice) {
  86.                 $customProductPrice = new CustomProductPrice();
  87.                 $customProductPrice->setProduct($product);
  88.             }
  89.             // フォームから受け取ったその他のデータでエンティティを更新します。
  90.             $customProductPrice->setCustomPriceConfig($customPriceConfig)
  91.             ->setHangmanFlag($form->get('hangmanFlag')->getData())
  92.             ->setMountings($form->get('mountings')->getData());
  93.             if (!empty($customPriceConfigId)) {
  94.                 $customPriceTotal $form->get('customPriceTotal' $customPriceConfigId)->getData();
  95.                 $customProductPrice->setPrices($customPriceTotal);
  96.             } else {
  97.                 $customProductPrice->setPrices([]);
  98.             }
  99.             // ここで$customProductPriceを永続化し、フラッシュする必要があります。
  100.             $this->entityManager->persist($customProductPrice);
  101.             $this->entityManager->flush();
  102.         } else {
  103.             $CustomProductPrice $this->entityManager->getRepository(CustomProductPrice::class)->findOneBy(["Product" => $product->getId()]);
  104.             if ($CustomProductPrice) {
  105.                 $this->entityManager->remove($CustomProductPrice);
  106.                 $this->entityManager->flush();
  107.             }
  108.         }
  109.     }
  110.     public function onTemplateAdminMasterdata(TemplateEvent $event)
  111.     {
  112.         $source $event->getSource();
  113.         $parameters $event->getParameters();
  114.         // 特定の<td>要素にマッチするパターンを定義
  115.         $pattern '/<td\sclass="align-middle text-center">\s*{{\s*form_widget\(data\.name\)\s*}}\s*{{\s*form_errors\(data\.name\)\s*}}\s*<\/td>/s';
  116.         if (preg_match($pattern$source$result)) {
  117.             $search $result[0];
  118.             // 挿入したい内容を定義
  119.             $insertContent "{{ include('@CustomPrice/admin/Setting/System/masterdata.twig') }}";
  120.             // マッチした内容に新しい内容を追加して変更
  121.             $replace $search $insertContent;
  122.             // ソース内の元のマッチを変更されたバージョンに置き換え
  123.             $source str_replace($search$replace$source);
  124.             $event->setSource($source);
  125.         }
  126.         $event->addSnippet('@CustomPrice/admin/Setting/System/masterdata_js.twig');
  127.     }
  128. }