<?php
/*
* Plugin Name : CustomerPlusAddonSearch
*
* Copyright (C) BraTech Co., Ltd. All Rights Reserved.
* http://www.bratech.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Plugin\CustomerPlusAddonSearch;
use Doctrine\ORM\EntityManagerInterface;
use Eccube\Event\EccubeEvents;
use Eccube\Event\TemplateEvent;
use Eccube\Event\EventArgs;
use Plugin\CustomerPlus4\Entity\CustomerItem;
use Plugin\CustomerPlusAddonSearch\Service\CustomerPlusAddonSearchService;
use Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class CustomerPlusAddonSearchEvent implements EventSubscriberInterface
{
private $entityManager;
private $customerPlusAddonService;
private $requestStack;
public function __construct(
EntityManagerInterface $entityManager,
CustomerPlusAddonSearchService $customerPlusAddonService,
RequestStack $requestStack
)
{
$this->entityManager = $entityManager;
$this->customerPlusAddonService = $customerPlusAddonService;
$this->requestStack = $requestStack;
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
'@admin/Customer/index.twig' => 'onTemplateAdminCustomer',
'@admin/Order/index.twig' => 'onTemplateAdminOrder',
'@admin/Order/edit.twig' => 'onTemplateAdminOrderEdit',
EccubeEvents::ADMIN_ORDER_EDIT_SEARCH_CUSTOMER_SEARCH => 'hookAdminOrderEditSearchCustomerSearch',
'@MailMagazine4/admin/index.twig' => 'onTemplateAdminCustomer',
'@MailMagazine4/admin/history_condition.twig' => 'onTemplateMailmagazineHistoryCondition',
];
}
public function onTemplateAdminCustomer(TemplateEvent $event)
{
if(!$this->customerPlusAddonService->checkInstallPlugin('CustomerPlus4'))return;
$parameters = $event->getParameters();
$CustomerItems = $this->customerPlusAddonService->getEnabledCustomerPlusForm('customer');
$AdminCustomerItems = $this->customerPlusAddonService->getCustomerPlusForm('admin_customer');
$CustomerItems = array_merge($CustomerItems, $AdminCustomerItems);
$parameters['CustomerItems'] = $CustomerItems;
$event->setParameters($parameters);
if($event->getView() == '@MailMagazine4/admin/index.twig'){
$twig = '@CustomerPlusAddonSearch/admin/ext_search_mailmagazine.twig';
}else{
$twig = '@CustomerPlusAddonSearch/admin/ext_search.twig';
}
$event->addSnippet($twig);
$js = '@CustomerPlusAddonSearch/admin/ext_search.js';
$event->addAsset($js);
}
public function onTemplateAdminOrder(TemplateEvent $event)
{
if(!$this->customerPlusAddonService->checkInstallPlugin('CustomerPlus4'))return;
$parameters = $event->getParameters();
$CustomerItems = $this->customerPlusAddonService->getEnabledCustomerPlusForm('order');
$AdminCustomerItems = $this->customerPlusAddonService->getCustomerPlusForm('admin_order');
$CustomerItems = array_merge($CustomerItems, $AdminCustomerItems);
$parameters['CustomerItems'] = $CustomerItems;
$event->setParameters($parameters);
$twig = '@CustomerPlusAddonSearch/admin/ext_search.twig';
$event->addSnippet($twig);
$js = '@CustomerPlusAddonSearch/admin/ext_search.js';
$event->addAsset($js);
}
public function onTemplateAdminOrderEdit(TemplateEvent $event)
{
if(!$this->customerPlusAddonService->checkInstallPlugin('CustomerPlus4'))return;
$parameters = $event->getParameters();
$CustomerItems = $this->customerPlusAddonService->getEnabledCustomerPlusForm('customer');
$AdminCustomerItems = $this->customerPlusAddonService->getCustomerPlusForm('admin_customer');
$CustomerItems = array_merge($CustomerItems, $AdminCustomerItems);
$parameters['CustomerItems'] = $CustomerItems;
$event->setParameters($parameters);
$twig = '@CustomerPlusAddonSearch/admin/Order/ext_search.twig';
$event->addSnippet($twig);
$source = $event->getSource();
if(preg_match("/admin\_search\_customer\_multi\'\)\.val\(\)/",$source, $result)){
$search = $result[0];
$replace = $search . ",{{ include('@CustomerPlusAddonSearch/admin/Order/ext_js.twig') }}";
$source = str_replace($search, $replace, $source);
}
$event->setSource($source);
}
public function hookAdminOrderEditSearchCustomerSearch(EventArgs $event)
{
if(!$this->customerPlusAddonService->checkInstallPlugin('CustomerPlus4'))return;
$qb = $event->getArgument('qb');
$request = $this->requestStack->getMasterRequest();
$CustomerItems = $this->customerPlusAddonService->getEnabledCustomerPlusForm('customer');
$AdminCustomerItems = $this->customerPlusAddonService->getCustomerPlusForm('admin_customer');
$CustomerItems = array_merge($CustomerItems, $AdminCustomerItems);
foreach($CustomerItems as $CustomerItem){
if($CustomerItem->getInputType() == \Plugin\CustomerPlus4\Entity\CustomerItem::DATE_TYPE){
$start = $request->get('customerplus_'.$CustomerItem->getId().'_date_start');
$end = $request->get('customerplus_'.$CustomerItem->getId().'_date_end');
if(strlen($start) > 0)$searchData['customerplus_'.$CustomerItem->getId().'_date_start'] = new \DateTime($start);
if(strlen($end) > 0)$searchData['customerplus_'.$CustomerItem->getId().'_date_end'] = new \DateTime($end);
}else{
$searchData['customerplus_'.$CustomerItem->getId()] = $request->get('customerplus_'.$CustomerItem->getId());
}
}
$this->customerPlusAddonService->createQueryBuilder($qb, $searchData);
$event->setArgument('qb',$qb);
}
public function onTemplateMailmagazineHistoryCondition(TemplateEvent $event)
{
if(!$this->customerPlusAddonService->checkInstallPlugin('CustomerPlus4'))return;
$parameters = $event->getParameters();
$CustomerItems = $this->customerPlusAddonService->getEnabledCustomerPlusForm('customer');
$AdminCustomerItems = $this->customerPlusAddonService->getCustomerPlusForm('admin_customer');
$CustomerItems = array_merge($CustomerItems, $AdminCustomerItems);
$parameters['CustomerItems'] = $CustomerItems;
$searchData = $parameters['search_data'];
foreach($CustomerItems as $CustomerItem){
if($CustomerItem->getInputType() >= CustomerItem::SELECT_TYPE){
if(isset($searchData['customerplus_'.$CustomerItem->getId()]) && is_array($searchData['customerplus_'.$CustomerItem->getId()])){
$customerItemOptionRepository = $this->entityManager->getRepository('Plugin\CustomerPlus4\Entity\CustomerItemOption');
$val = [];
foreach($searchData['customerplus_'.$CustomerItem->getId()] as $id){
$option = $customerItemOptionRepository->find($id);
if($option){
$val[] = $option->getText();
}
}
if(count($val) != 0){
$searchData['customerplus_'.$CustomerItem->getId()] = implode(', ', $val);
}else{
$searchData['customerplus_'.$CustomerItem->getId()] = null;
}
}
}
}
$parameters['search_data'] = $searchData;
$event->setParameters($parameters);
$twig = '@CustomerPlusAddonSearch/admin/mailmagazine_history_condition_add.twig';
$event->addSnippet($twig);
}
}