<?php 
/** 
 * Copyright(c) 2019 SYSTEM_KD 
 * Date: 2019/07/15 
 */ 
 
namespace Plugin\PointExDx\EventSubscriber; 
 
 
use Eccube\Event\TemplateEvent; 
use Plugin\PointExDx\Service\TwigRenderService\TwigRenderService; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
 
class AdminShippingEventSubscriber implements EventSubscriberInterface 
{ 
 
    /** @var TwigRenderService */ 
    protected $twigRenderService; 
 
    public function __construct( 
        TwigRenderService $twigRenderService 
    ) 
    { 
        $this->twigRenderService = $twigRenderService; 
    } 
 
    public function onTemplateAdminOrderShipping(TemplateEvent $event) 
    { 
 
        $this->twigRenderService->initRenderService($event); 
 
        $insertPosition = 5; 
 
        // ポイント付与対象 
        $childTitle = $this->twigRenderService 
            ->eachChildBuilder() 
            ->findThis() 
            ->find('thead > tr > th') 
            ->eq($insertPosition) 
            ->targetFindAndIndexKey('#point_ex_nopointflg_title_', 'shippingIndex2') 
            ->setInsertModeAfter(); 
 
        $this->twigRenderService 
            ->eachBuilder() 
            ->find('[id^=table-form-field_]') 
            ->setEachIndexKey('shippingIndex2') 
            ->each($childTitle->build()); 
 
        // ボーナスポイント 
        $childTitle = $this->twigRenderService 
            ->eachChildBuilder() 
            ->findThis() 
            ->find('thead > tr > th') 
            ->eq($insertPosition) 
            ->targetFindAndIndexKey('#point_ex_bonus_title_', 'shippingIndex') 
            ->setInsertModeAfter(); 
 
        $this->twigRenderService 
            ->eachBuilder() 
            ->find('[id^=table-form-field_]') 
            ->setEachIndexKey('shippingIndex') 
            ->each($childTitle->build()); 
 
        // ポイント付与対象 
        $childItem = $this->twigRenderService 
            ->eachChildBuilder() 
            ->findThis() 
            ->find('td')->eq($insertPosition) 
            ->targetFindAndIndexKey('#point_ex_nopointflg_[dateKey]_', 'pointExIndex2') 
            ->setInsertModeAfter(); 
 
        $childShopping = $this->twigRenderService 
            ->eachChildBuilder() 
            ->findAndDataKey('#table-form-field_', 'shipping_index') 
            ->find('tbody > tr') 
            ->setEachIndexKey('pointExIndex2') 
            ->each($childItem->build()); 
 
        $this->twigRenderService 
            ->eachBuilder() 
            ->find('.point_ex_nopointflg') 
            ->each($childShopping->build()); 
 
        // ボーナスポイント 
        $childItem = $this->twigRenderService 
            ->eachChildBuilder() 
            ->findThis() 
            ->find('td')->eq($insertPosition) 
            ->targetFindAndIndexKey('#point_ex_bonus_[dateKey]_', 'pointExIndex') 
            ->setInsertModeAfter(); 
 
        $childShopping = $this->twigRenderService 
            ->eachChildBuilder() 
            ->findAndDataKey('#table-form-field_', 'shipping_index') 
            ->find('tbody > tr') 
            ->setEachIndexKey('pointExIndex') 
            ->each($childItem->build()); 
 
        $this->twigRenderService 
            ->eachBuilder() 
            ->find('.point_ex_bonus') 
            ->each($childShopping->build()); 
 
        $this->twigRenderService->addSupportSnippet( 
            '@PointExDx/admin/Order/point_ex_order_shipping.twig', 
            null, false 
        ); 
    } 
 
    /** 
     * Returns an array of event names this subscriber wants to listen to. 
     * 
     * The array keys are event names and the value can be: 
     * 
     *  * The method name to call (priority defaults to 0) 
     *  * An array composed of the method name to call and the priority 
     *  * An array of arrays composed of the method names to call and respective 
     *    priorities, or 0 if unset 
     * 
     * For instance: 
     * 
     *  * ['eventName' => 'methodName'] 
     *  * ['eventName' => ['methodName', $priority]] 
     *  * ['eventName' => [['methodName1', $priority], ['methodName2']]] 
     * 
     * @return array The event names to listen to 
     */ 
    public static function getSubscribedEvents() 
    { 
        return [ 
            '@admin/Order/shipping.twig' => ['onTemplateAdminOrderShipping'] 
        ]; 
    } 
}