<?php
namespace Plugin\CategoryOption\EventSubscriber;
use Eccube\Controller\AbstractController;
use Eccube\Event\TemplateEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Plugin\CategoryOption\Repository\CategoryOptionRepository;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Eccube\Common\EccubeConfig;
use Plugin\CategoryOption\Service\CategoryFileUploader;
use Symfony\Component\Asset\Packages;
class CategorySubscriber extends AbstractController implements EventSubscriberInterface
{
protected $CategoryOptionRepository;
protected $eccubeConfig;
protected $CategoryFileUploader;
protected $packages;
public function __construct(
CategoryOptionRepository $CategoryOptionRepository,
EccubeConfig $eccubeConfig,
CategoryFileUploader $CategoryFileUploader,
Packages $packages
)
{
$this->CategoryOptionRepository = $CategoryOptionRepository;
$this->eccubeConfig = $eccubeConfig;
$this->CategoryFileUploader = $CategoryFileUploader;
$this->packages = $packages;
}
protected function getCategory($category_id) {
$Category = $this->CategoryOptionRepository->getCategory($category_id);
if(empty($Category)){
//無いとき
$Category = $this->CategoryOptionRepository->newCategory($category_id);
}
return $Category;
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
'@admin/Product/category.twig' => 'onTemplateAdminCategory',
'Product/list.twig' => 'onTemplateProductList',
EccubeEvents::ADMIN_PRODUCT_CATEGORY_INDEX_COMPLETE => 'onAdminCategoryEditComplete',
];
}
public function onTemplateProductList(TemplateEvent $event){
$CategoryOption = "";
if(isset($event->getParameters()["Category"])){
$CategoryOption = $this->CategoryOptionRepository->getCategory($event->getParameters()["Category"]->getId());
}
$event->setParameter('CategoryOption', $CategoryOption);
}
public function onTemplateAdminCategory(TemplateEvent $event)
{
$event->addSnippet('@CategoryOption/admin/Category/category_option.twig');
}
public function onAdminCategoryEditComplete(EventArgs $event){
$form = $event->getArgument('form');
if(empty($form->get("name")->getData())){
//更新時
$editForm = $event->getArgument('editForm');
$CategoryOption = $this->getCategory($event->getArgument('TargetCategory')->getId());
foreach($editForm as $f){
if(!in_array($f->getName(),["img","description"],true)){
continue;
}
if($f->getName() === "img"){
if(empty($editForm->get("hidden_".$f->getName())->getData())){
//隠しパラメータ
$CategoryOption->setImg("");
}
if(!empty($f->getData())){
$filename = $this->CategoryFileUploader->upload($f->getData());
$CategoryOption->setImg($filename);
}
}elseif($f->getName() === "description"){
$CategoryOption->setDescription($f->getData());
}
}
}else{
$CategoryOption = $this->getCategory($event->getArgument('TargetCategory')->getId());
foreach($form as $f){
if(!in_array($f->getName(),["img","description"],true)){
continue;
}
if($f->getName() === "img"){
if(empty($form->get("hidden_".$f->getName())->getData())){
//隠しパラメータ
$CategoryOption->setImg("");
}
if(!empty($f->getData())){
$filename = $this->CategoryFileUploader->upload($f->getData());
$CategoryOption->setImg($filename);
}
}elseif($f->getName() === "description"){
$CategoryOption->setDescription($f->getData());
}
}
}
$this->entityManager->persist($CategoryOption);
$this->entityManager->flush($CategoryOption);
}
}