public function copy(Application $app, Request $request, $id = null)
{
$this->isTokenValid($app);
if (!is_null($id)) {
$Product = $app['eccube.repository.product']->find($id);
if ($Product instanceof \Eccube\Entity\Product) {
$CopyProduct = clone $Product;
$CopyProduct->copy();
$Disp = $app['eccube.repository.master.disp']->find(\Eccube\Entity\Master\Disp::DISPLAY_HIDE);
$CopyProduct->setStatus($Disp);
$CopyProductCategories = $CopyProduct->getProductCategories();
foreach ($CopyProductCategories as $Category) {
$app['orm.em']->persist($Category);
}
// 規格あり商品の場合は, デフォルトの商品規格を取得し登録する.
if ($CopyProduct->hasProductClass()) {
$softDeleteFilter = $app['orm.em']->getFilters()->getFilter('soft_delete');
$softDeleteFilter->setExcludes(array('Eccube\\Entity\\ProductClass'));
$dummyClass = $app['eccube.repository.product_class']->findOneBy(array('del_flg' => \Eccube\Common\Constant::ENABLED, 'ClassCategory1' => null, 'ClassCategory2' => null, 'Product' => $Product));
$dummyClass = clone $dummyClass;
$dummyClass->setProduct($CopyProduct);
$CopyProduct->addProductClass($dummyClass);
$softDeleteFilter->setExcludes(array());
}
$CopyProductClasses = $CopyProduct->getProductClasses();
foreach ($CopyProductClasses as $Class) {
$Stock = $Class->getProductStock();
$CopyStock = clone $Stock;
$CopyStock->setProductClass($Class);
$app['orm.em']->persist($CopyStock);
$app['orm.em']->persist($Class);
}
$Images = $CopyProduct->getProductImage();
foreach ($Images as $Image) {
// 画像ファイルを新規作成
$extension = pathinfo($Image->getFileName(), PATHINFO_EXTENSION);
$filename = date('mdHis') . uniqid('_') . '.' . $extension;
try {
$fs = new Filesystem();
$fs->copy($app['config']['image_save_realdir'] . '/' . $Image->getFileName(), $app['config']['image_save_realdir'] . '/' . $filename);
} catch (\Exception $e) {
// エラーが発生しても無視する
}
$Image->setFileName($filename);
$app['orm.em']->persist($Image);
}
$Tags = $CopyProduct->getProductTag();
foreach ($Tags as $Tag) {
$app['orm.em']->persist($Tag);
}
$app['orm.em']->persist($CopyProduct);
$app['orm.em']->flush();
$event = new EventArgs(array('Product' => $Product, 'CopyProduct' => $CopyProduct, 'CopyProductCategories' => $CopyProductCategories, 'CopyProductClasses' => $CopyProductClasses, 'images' => $Images, 'Tags' => $Tags), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_PRODUCT_COPY_COMPLETE, $event);
$app->addSuccess('admin.product.copy.complete', 'admin');
return $app->redirect($app->url('admin_product_product_edit', array('id' => $CopyProduct->getId())));
} else {
$app->addError('admin.product.copy.failed', 'admin');
}
} else {
$app->addError('admin.product.copy.failed', 'admin');
}
return $app->redirect($app->url('admin_product'));
}