예제 #1
0
 /**
  * Add product trigger.
  *
  * @param FilterResponseEvent $event
  */
 public function onRenderAdminProduct(FilterResponseEvent $event)
 {
     log_info('EventLegacy: product maker hook into product management start');
     $app = $this->app;
     if (!$this->app->isGranted('ROLE_ADMIN')) {
         log_info('EventLegacy: invalid role!');
         return;
     }
     $request = $event->getRequest();
     $response = $event->getResponse();
     $id = $request->attributes->get('id');
     list($html, $form) = $this->getHtml($request, $response, $id);
     $response->setContent($html);
     $event->setResponse($response);
     if ($form->isSubmitted()) {
         // RedirectResponseかどうかで判定する.
         if (!$response instanceof RedirectResponse) {
             return;
         }
         if ($form->isValid()) {
             log_info('EventLegacy: Product maker register begin');
             /*
              * @var ArrayCollection
              */
             $arrMaker = $this->app['eccube.plugin.maker.repository.maker']->findBy(array(), array('rank' => 'DESC'));
             $Maker = $form->get('maker')->getData();
             $makerUrl = $form->get('maker_url')->getData();
             $ProductMaker = null;
             if ($id) {
                 $ProductMaker = $app['eccube.plugin.maker.repository.product_maker']->find($id);
             }
             if (!$ProductMaker) {
                 $ProductMaker = new ProductMaker();
             }
             // Get product id after add new
             if (empty($id)) {
                 $location = explode('/', $response->headers->get('location'));
                 $url = explode('/', $this->app->url('admin_product_product_edit', array('id' => '0')));
                 $diffs = array_values(array_diff($location, $url));
                 $id = $diffs[0];
             }
             if (count($arrMaker) > 0 && $Maker) {
                 $ProductMaker->setId($id)->setMakerUrl($makerUrl)->setDelFlg(Constant::DISABLED)->setMaker($Maker);
                 $app['orm.em']->persist($ProductMaker);
                 $app['orm.em']->flush($ProductMaker);
                 log_info('EventLegacy: Product maker register success', array('Product id' => $id));
                 return;
             }
             if ($ProductMaker->getId()) {
                 // 削除
                 // ※setIdはなんだか違う気がする
                 $app['orm.em']->remove($ProductMaker);
                 $app['orm.em']->flush($ProductMaker);
                 log_info('EventLegacy: Product maker removed', array('Product maker id' => $ProductMaker->getId()));
             }
         }
     }
     log_info('EventLegacy: product maker hook into product management end');
     return;
 }
예제 #2
0
 /**
  * Create maker
  *
  * @param Maker   $Maker
  * @param Product $Product
  *
  * @return ProductMaker
  */
 protected function createProductMaker(Maker $Maker, $Product = null)
 {
     /**
      * @var Generator $faker
      */
     $faker = $this->getFaker();
     if (!$Product) {
         // New product
         /**
          * @var Generator $faker
          */
         $faker = $this->getFaker();
         $formData = $this->createFormData();
         $formData['plg_maker'] = '';
         $formData['plg_maker_url'] = '';
         /**
          * @var Client $client
          */
         $client = $this->client;
         $client->request('POST', $this->app->url('admin_product_product_new'), array('admin_product' => $formData));
         $this->assertTrue($client->getResponse()->isRedirection());
         $arrTmp = explode('/', $client->getResponse()->getTargetUrl());
         $productId = $arrTmp[count($arrTmp) - 2];
         $client->followRedirect();
         $Product = $this->app['eccube.repository.product']->find($productId);
     }
     $ProductMaker = new ProductMaker();
     $ProductMaker->setMaker($Maker);
     $ProductMaker->setMakerUrl($faker->url);
     $ProductMaker->setDelFlg(Constant::DISABLED);
     $ProductMaker->setId($Product->getId());
     $this->app['orm.em']->persist($ProductMaker);
     $this->app['orm.em']->flush($ProductMaker);
     return $ProductMaker;
 }