app/Plugin/PiaMailmagHistory/EventSubscriber/ProductEditWidgetSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. namespace Plugin\PiaMailmagHistory\EventSubscriber;
  3. use Eccube\Event\TemplateEvent;
  4. use Plugin\PiaMailmagHistory\Repository\PiaMailmagReleaseDateRepository;
  5. use Plugin\PiaMailmagHistory\Service\PiaMailmagHistoryService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. class ProductEditWidgetSubscriber implements EventSubscriberInterface
  8. {
  9.     /**
  10.      * @var PiaMailmagHistoryService
  11.      */
  12.     private $piaMailmagHistoryService;
  13.     /**
  14.      * @var PiaMailmagReleaseDateRepository
  15.      */
  16.     private $releaseDateRepository;
  17.     public function __construct(
  18.         PiaMailmagHistoryService $piaMailmagHistoryService,
  19.         PiaMailmagReleaseDateRepository $releaseDateRepository
  20.     ) {
  21.         $this->piaMailmagHistoryService $piaMailmagHistoryService;
  22.         $this->releaseDateRepository $releaseDateRepository;
  23.     }
  24.     public static function getSubscribedEvents()
  25.     {
  26.         return [
  27.             '@admin/Product/product.twig' => 'onAdminProductEdit',
  28.         ];
  29.     }
  30.     /**
  31.      * 管理画面商品編集ページに商品メルマガ配信ウィジェットを追加
  32.      */
  33.     public function onAdminProductEdit(TemplateEvent $event)
  34.     {
  35.         $parameters $event->getParameters();
  36.         $product $parameters['Product'] ?? null;
  37.         if (!$product || !$product->getId()) {
  38.             return;
  39.         }
  40.         $productId $product->getId();
  41.         $ReleaseDate $this->releaseDateRepository->findByProductId($productId);
  42.         $parameters['pia_mailmag_product_id'] = $productId;
  43.         $parameters['pia_mailmag_release_date'] = $ReleaseDate $ReleaseDate->getReleaseDate() : null;
  44.         $parameters['pia_mailmag_boxes'] = $this->piaMailmagHistoryService->getBoxes($productId);
  45.         $event->setParameters($parameters);
  46.         $source $event->getSource();
  47.         // 「商品名」欄の直前(商品ID・商品購入履歴のすぐ下)にウィジェットを挿入する。
  48.         // 商品編集フォームは非常に縦長のため、auto_renderループの位置(拡張項目群の直前)だと
  49.         // 埋もれて見つけにくいので、V3と同様にフォーム最上部付近に表示する。
  50.         $marker "'admin.product.name'|trans";
  51.         $markerPos strpos($source$marker);
  52.         if (false !== $markerPos) {
  53.             $rowStart strrpos(substr($source0$markerPos), '<div class="row">');
  54.             if (false !== $rowStart) {
  55.                 $include "{{ include('@PiaMailmagHistory/admin/Product/mailmag_widget.twig') }}\n";
  56.                 $source substr($source0$rowStart).$include.substr($source$rowStart);
  57.             }
  58.         }
  59.         $event->setSource($source);
  60.     }
  61. }