/** * 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; }
/** * 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; }