<?php
namespace Plugin\AddOnForCategory42\EventSubscriber\Controller;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormFactoryInterface;
use Eccube\Event\TemplateEvent;
use Eccube\Event\EventArgs;
use Eccube\Event\EccubeEvents;
use Eccube\Repository\CategoryRepository;
use Plugin\AddOnForCategory42\Repository\AddOnForCategoryRepository;
class ProductControllerSubscriber implements EventSubscriberInterface
{
private $categoryRepository;
private $addOnForCategoryRepository;
/**
* ProductRepository constructor.
*
* @param CategoryRepository $categoryRepository
* @param AddOnForCategoryRepository $addOnForCategoryRepository
*/
public function __construct(
CategoryRepository $categoryRepository,
AddOnForCategoryRepository $addOnForCategoryRepository
) {
$this->categoryRepository = $categoryRepository;
$this->addOnForCategoryRepository = $addOnForCategoryRepository;
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
EccubeEvents::FRONT_PRODUCT_INDEX_SEARCH => 'FrontProductIndexSearch',
];
}
public function FrontProductIndexSearch(EventArgs $event)
{
$qb = $event->getArgument('qb');
$searchData = $event->getArgument('searchData');
if ($searchData['category_id']) {
$Category = $this->categoryRepository->find($searchData['category_id']);
$AddOnForCategory = $this->addOnForCategoryRepository->findOneBy(['Category' => $Category]);
if($AddOnForCategory){
$qb
->leftJoin('c.AddOnForCategory', 'a')
->andWhere('a.private_flg != true');
}
} else {
$qb
->leftJoin('p.ProductCategories', 'pct')
->leftJoin('pct.Category', 'c')
->leftJoin('c.AddOnForCategory', 'a')
->andWhere('a.private_flg != true');
}
}
}