<?php
/*
* Plugin Name : OrderPlus
*
* 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\OrderPlus42\Event;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Eccube\Event\TemplateEvent;
use Plugin\OrderPlus42\Entity\CustomItem;
use Plugin\OrderPlus42\Entity\ShippingBridge;
use Plugin\OrderPlus42\Repository\CustomItemRepository;
use Plugin\OrderPlus42\Service\OrderPlusService;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class AdminOrderEvent implements EventSubscriberInterface
{
private $container;
private $customItemRepository;
private $orderPlusService;
public function __construct(
ContainerInterface $container,
CustomItemRepository $customItemRepository,
orderPlusService $orderPlusService
)
{
$this->container = $container;
$this->customItemRepository = $customItemRepository;
$this->orderPlusService = $orderPlusService;
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
'@admin/Order/edit.twig' => 'onTemplateAdminOrderEdit',
'@admin/Order/shipping.twig' => 'onTemplateAdminOrderShipping',
EccubeEvents::ADMIN_ORDER_CSV_EXPORT_ORDER => 'hookAdminOrderCsvExport',
];
}
public function onTemplateAdminOrderEdit(TemplateEvent $event)
{
$parameters = $event->getParameters();
$source = $event->getSource();
$OrderCustomItems = $this->customItemRepository->getList(CustomItem::ORDER_CLASS);
$AdminOrderCustomItems = $this->orderPlusService->getOrderPlusForm('admin_order');
foreach($OrderCustomItems as $key => $OrderCustomItem){
foreach($AdminOrderCustomItems as $AdminOrderCustomItem){
if($OrderCustomItem->getId() == $AdminOrderCustomItem->getId())unset($OrderCustomItems[$key]);
}
}
$ShippingCustomItems = $this->customItemRepository->getList(CustomItem::SHIPPING_CLASS);
if(preg_match('/\{\{\sform\_errors\(form\.message\)\s\}\}[\n|\r\n|\r]\s*\<\/div\>[\n|\r\n|\r]\s*\<\/div\>[\n|\r\n|\r]\s*\<\/div\>[\n|\r\n|\r]\s*\<\/div\>/',$source, $result)){
$search = $result[0];
$snippet = file_get_contents($this->container->getParameter('plugin_realdir'). '/OrderPlus42/Resource/template/admin/Order/ext_order_edit.twig');
$replace = $search . $snippet;
$source = str_replace($search, $replace, $source);
}
if(preg_match('/\{\{\sform\_errors\(form\.Shipping\.DeliveryTime\)\s\}\}[\n|\r\n|\r]\s*\<\/div\>[\n|\r\n|\r]\s*\<\/div\>[\n|\r\n|\r]\s*\<\/div\>/',$source, $result)){
$search = $result[0];
$snippet = file_get_contents($this->container->getParameter('plugin_realdir'). '/OrderPlus42/Resource/template/admin/Order/ext_shipping_edit.twig');
$replace = $search . $snippet;
$source = str_replace($search, $replace, $source);
}
$event->setSource($source);
$parameters['OrderCustomItems'] = $OrderCustomItems;
$parameters['ShippingCustomItems'] = $ShippingCustomItems;
$event->setParameters($parameters);
$this->insertDatePickerJSAdmin($event);
}
public function onTemplateAdminOrderShipping(TemplateEvent $event)
{
$parameters = $event->getParameters();
$source = $event->getSource();
$ShippingCustomItems = $this->customItemRepository->getList(CustomItem::SHIPPING_CLASS);
if(preg_match('/shippingForm\.vars\.value\.creator\s\}\}\<\/span\>[\n|\r\n|\r]\s*\<\/div\>[\n|\r\n|\r]\s*\<\/div\>[\n|\r\n|\r]\s*\<\/div\>[\n|\r\n|\r]\s*\<\/div\>/',$source, $result)){
$search = $result[0];
$snippet = file_get_contents($this->container->getParameter('plugin_realdir'). '/OrderPlus42/Resource/template/admin/Order/ext_shipping.twig');
$replace = $search . $snippet;
$source = str_replace($search, $replace, $source);
}
$event->setSource($source);
$parameters['ShippingCustomItems'] = $ShippingCustomItems;
$event->setParameters($parameters);
$this->insertDatePickerJSAdmin($event);
}
public function hookAdminOrderCsvExport(EventArgs $event)
{
$ExportCsvRow = $event->getArgument('ExportCsvRow');
if ($ExportCsvRow->isDataNull()) {
$entityManager = $this->container->get('doctrine.orm.entity_manager');
$shippingReposiory = $entityManager->getRepository(ShippingBridge::class);
$OrderItem = $event->getArgument('OrderItem');
$Order = $OrderItem->getOrder();
$Shipping = $OrderItem->getShipping();
$Csv = $event->getArgument('Csv');
$csvEntityName = str_replace('\\\\', '\\', $Csv->getEntityName());
$data = null;
if($csvEntityName == 'Plugin\OrderPlus42\Entity\OrderBridge'){
$data = $Order->getPlusViewData($Csv->getFieldName());
}elseif($csvEntityName == 'Plugin\OrderPlus42\Entity\ShippingBridge'){
$plgShipping = $shippingReposiory->findOneBy(['Shipping' => $Shipping, 'custom_item_id' => $Csv->getFieldName()]);
if($plgShipping){
$data = $plgShipping->getViewValue();
}
}
$ExportCsvRow->setData($data);
}
}
private function insertDatePickerJSAdmin(TemplateEvent $event)
{
$twig = '@OrderPlus42/admin/datepicker_js.twig';
$event->addAsset($twig);
}
}