<?php
/*
商品登録
Plugin/SDream/
├─ EventSubscriber/
│ └─ Admin
│ └─ ProductSyncSubscriber.php
│
├─ Service/
│ └─ DisplayProductSyncService.php
│
└─ Resource/config/services.yaml
*/
namespace Plugin\SDream\EventSubscriber\Admin;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Plugin\SDream\Service\DisplayProductSyncService;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
class ProductSyncSubscriber implements EventSubscriberInterface
{
private $syncService;
private LoggerInterface $logger;
private FlashBagInterface $flashBag;
public function __construct(
DisplayProductSyncService $syncService,
LoggerInterface $logger,
FlashBagInterface $flashBag
)
{
$this->syncService = $syncService;
$this->logger = $logger;
$this->flashBag = $flashBag;
}
public static function getSubscribedEvents()
{
return [
EccubeEvents::ADMIN_PRODUCT_EDIT_COMPLETE => 'onProductEditComplete',
];
}
public function onProductEditComplete(EventArgs $event)
{
$this->logger->info('onProductEditComplete called');
$Product = $event->getArgument('Product');
// 管理画面に表示
$result = $this->syncService->syncToDisplaySite($Product);
$session = $event->getRequest()->getSession();
$session->set('display_sync_count', $result['updated']);
/*
if ($result['updated'] > 0) {
//$this->logger->info('onProductEditComplete updated');
$codeList = implode(', ', $result['codes']);
$event->getRequest()->getSession()->getFlashBag()
->add('admin',
"表示サイトを {$result['updated']} 件更新しました。<br>更新コード: {$codeList}"
);
} else {
$event->getRequest()->getSession()->getFlashBag()
->add('error',
"表示サイトの更新件数は0件です。商品コード構成が正しいか確認ください。なお価格が同額である場合は更新されません。"
);
}
*/
}
/*
イベントが拾えないので、KernelEvents::CONTROLLERを使う方法へ変更
->>> ProductClassSyncSubscriber.php
EccubeEvents::ADMIN_PRODUCT_PRODUCT_CLASS_EDIT_UPDATE => 'onProductClassEditComplete',
public function onProductClassEditComplete(EventArgs $event)
{
$this->logger->info('onProductClassEditComplete called');
$ProductClass = $event->getArgument('ProductClass');
$Product = $ProductClass->getProduct();
$result = $this->syncService->syncToDisplaySite($Product);
if ($result['updated'] > 0) {
$event->getRequest()->getSession()->getFlashBag()
->add('admin', "表示サイトを {$result['updated']} 件更新しました。");
}
}
*/
}