<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Eccube\Controller;
use Eccube\Entity\BaseInfo;
use Eccube\Entity\CustomerLevel;
use Eccube\Entity\Master\ProductStatus;
use Eccube\Entity\Product;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Eccube\Form\Type\AddCartType;
use Eccube\Form\Type\Master\ProductListMaxType;
use Eccube\Form\Type\Master\ProductListOrderByType;
use Eccube\Form\Type\SearchProductType;
use Eccube\Repository\BaseInfoRepository;
use Eccube\Repository\CustomerFavoriteProductRepository;
use Eccube\Repository\Master\ProductListMaxRepository;
use Eccube\Repository\ProductRepository;
use Eccube\Repository\CustomerShopRepository;
use Eccube\Repository\CustomerLevelRepository;
use Eccube\Repository\CustomerRepository;
use Eccube\Service\CartService;
use Eccube\Service\PurchaseFlow\PurchaseContext;
use Eccube\Service\PurchaseFlow\PurchaseFlow;
use Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination;
use Knp\Component\Pager\Paginator;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Eccube\Repository\MemberRepository;
use Eccube\Repository\CategoryRepository;
use Eccube\Repository\Master\ProductStatusRepository;
use Eccube\Repository\Master\SaleTypeRepository;
use Eccube\Repository\ProductClassRepository;
use Eccube\Repository\PluginnewRepository;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Plugin\ProductReview4\Repository\ProductReviewStatusRepository;
class ProductController extends AbstractController
{
/**
* @var PurchaseFlow
*/
protected $purchaseFlow;
/**
* @var CustomerFavoriteProductRepository
*/
protected $customerFavoriteProductRepository;
/**
* @var CartService
*/
protected $cartService;
/**
* @var ProductRepository
*/
protected $productRepository;
/**
* @var ProductClassRepository
*/
protected $productClassRepository;
/**
* @var BaseInfo
*/
protected $BaseInfo;
/**
* @var AuthenticationUtils
*/
protected $helper;
/**
* @var CustomerShopRepository
*/
protected $customerShopRepository;
/**
* @var ProductListMaxRepository
*/
protected $productListMaxRepository;
private $title = '';
/**
* @var MemberRepository
*/
protected $memberRepository;
/**
* @var ProductStatusRepository
*/
protected $productStatusRepository;
/**
* @var SaleTypeRepository
*/
protected $saleTypeRepository;
/**
* @var CategoryRepository
*/
protected $categoryRepository;
/**
* @var ProductReviewStatusRepository
*/
protected $productReviewStatusRepository;
/**
* @var PluginnewRepository
*/
protected $pluginnewRepository;
/**
* ProductController constructor.
*
* @param PurchaseFlow $cartPurchaseFlow
* @param CustomerFavoriteProductRepository $customerFavoriteProductRepository
* @param CartService $cartService
* @param ProductRepository $productRepository
* @param BaseInfoRepository $baseInfoRepository
* @param AuthenticationUtils $helper
* @param ProductListMaxRepository $productListMaxRepository
*/
public function __construct(
PurchaseFlow $cartPurchaseFlow,
CustomerFavoriteProductRepository $customerFavoriteProductRepository,
CartService $cartService,
ProductRepository $productRepository,
BaseInfoRepository $baseInfoRepository,
AuthenticationUtils $helper,
ProductListMaxRepository $productListMaxRepository,
CustomerShopRepository $customerShopRepository,
ProductClassRepository $productClassRepository,
MemberRepository $memberRepository,
ProductStatusRepository $productStatusRepository,
SaleTypeRepository $saleTypeRepository,
CategoryRepository $categoryRepository,
ProductReviewStatusRepository $productReviewStatusRepository,
PluginnewRepository $pluginnewRepository,
CustomerLevelRepository $customerLevelRepository
) {
$this->purchaseFlow = $cartPurchaseFlow;
$this->customerFavoriteProductRepository = $customerFavoriteProductRepository;
$this->cartService = $cartService;
$this->productRepository = $productRepository;
$this->productClassRepository = $productClassRepository;
$this->BaseInfo = $baseInfoRepository->get();
$this->helper = $helper;
$this->productListMaxRepository = $productListMaxRepository;
$this->customerShopRepository = $customerShopRepository;
$this->customerLevelRepository =$customerLevelRepository;
$this->memberRepository = $memberRepository;
$this->productStatusRepository = $productStatusRepository;
$this->saleTypeRepository = $saleTypeRepository;
$this->categoryRepository = $categoryRepository;
$this->productReviewStatusRepository = $productReviewStatusRepository;
$this->pluginnewRepository =$pluginnewRepository;
}
/**
* 商品一覧画面.
*
* @Route("/products/list", name="product_list")
* @Template("Product/list.twig")
*/
public function index(Request $request, Paginator $paginator)
{
// Doctrine SQLFilter
if ($this->BaseInfo->isOptionNostockHidden()) {
$this->entityManager->getFilters()->enable('option_nostock_hidden');
}
// handleRequestは空のqueryの場合は無視するため
if ($request->getMethod() === 'GET') {
$request->query->set('pageno', $request->query->get('pageno', ''));
}
// searchForm
/* @var $builder \Symfony\Component\Form\FormBuilderInterface */
$builder = $this->formFactory->createNamedBuilder('', SearchProductType::class);
if ($request->getMethod() === 'GET') {
$builder->setMethod('GET');
}
$event = new EventArgs(
[
'builder' => $builder,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_INITIALIZE, $event);
/* @var $searchForm \Symfony\Component\Form\FormInterface */
$searchForm = $builder->getForm();
$searchForm->handleRequest($request);
// paginator
$searchData = $searchForm->getData();
$qb = $this->productRepository->getQueryBuilderBySearchData($searchData);
$event = new EventArgs(
[
'searchData' => $searchData,
'qb' => $qb,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_SEARCH, $event);
$searchData = $event->getArgument('searchData');
$query = $qb->getQuery()
->useResultCache(true, $this->eccubeConfig['eccube_result_cache_lifetime_short']);
/** @var SlidingPagination $pagination */
$pagination = $paginator->paginate(
$query,
!empty($searchData['pageno']) ? $searchData['pageno'] : 1,
!empty($searchData['disp_number']) ? $searchData['disp_number']->getId() : $this->productListMaxRepository->findOneBy([], ['sort_no' => 'ASC'])->getId()
);
$ids = [];
foreach ($pagination as $Product) {
$ids[] = $Product->getId();
}
$ProductsAndClassCategories = $this->productRepository->findProductsWithSortedClassCategories($ids, 'p.id');
// addCart form
$forms = [];
foreach ($pagination as $Product) {
/* @var $builder \Symfony\Component\Form\FormBuilderInterface */
$builder = $this->formFactory->createNamedBuilder(
'',
AddCartType::class,
null,
[
'product' => $ProductsAndClassCategories[$Product->getId()],
'allow_extra_fields' => true,
]
);
$addCartForm = $builder->getForm();
$forms[$Product->getId()] = $addCartForm->createView();
}
// 表示件数
$builder = $this->formFactory->createNamedBuilder(
'disp_number',
ProductListMaxType::class,
null,
[
'required' => false,
'allow_extra_fields' => true,
]
);
if ($request->getMethod() === 'GET') {
$builder->setMethod('GET');
}
$event = new EventArgs(
[
'builder' => $builder,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_DISP, $event);
$dispNumberForm = $builder->getForm();
$dispNumberForm->handleRequest($request);
// ソート順
$builder = $this->formFactory->createNamedBuilder(
'orderby',
ProductListOrderByType::class,
null,
[
'required' => false,
'allow_extra_fields' => true,
]
);
if ($request->getMethod() === 'GET') {
$builder->setMethod('GET');
}
$event = new EventArgs(
[
'builder' => $builder,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_ORDER, $event);
$orderByForm = $builder->getForm();
$orderByForm->handleRequest($request);
$Category = $searchForm->get('category_id')->getData();
$tops = $this->productRepository->findProductsByTop("Y");
// $forms2 = [];
// foreach ($tops as $Product) {
// /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
// $builder = $this->formFactory->createNamedBuilder(
// '',
// AddCartType::class,
// null,
// [
// 'product' => $ProductsAndClassCategories[$Product->getId()],
// 'allow_extra_fields' => true,
// ]
// );
// $addCartForm = $builder->getForm();
// $forms2[$Product->getId()] = $addCartForm->createView();
// }
return [
'tops' => $tops,
'subtitle' => $this->getPageTitle($searchData),
'pagination' => $pagination,
'search_form' => $searchForm->createView(),
'disp_number_form' => $dispNumberForm->createView(),
'order_by_form' => $orderByForm->createView(),
'forms' => $forms,
'Category' => $Category,
];
}
/**
* 商品詳細画面.
*
* @Route("/products/detail/{id}", name="product_detail", methods={"GET"}, requirements={"id" = "\d+"})
* @Template("Product/detail.twig")
* @ParamConverter("Product", options={"repository_method" = "findWithSortedClassCategories"})
*
* @param Request $request
* @param Product $Product
*
* @return array
*/
public function detail(Request $request, Product $Product)
{
if (!$this->checkVisibility($Product)) {
throw new NotFoundHttpException();
}
$builder = $this->formFactory->createNamedBuilder(
'',
AddCartType::class,
null,
[
'product' => $Product,
'id_add_product_id' => false,
]
);
$event = new EventArgs(
[
'builder' => $builder,
'Product' => $Product,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_DETAIL_INITIALIZE, $event);
$is_favorite = false;
if ($this->isGranted('ROLE_USER')) {
$Customer = $this->getUser();
$is_favorite = $this->customerFavoriteProductRepository->isFavorite($Customer, $Product);
}
$favorite_count = $this->customerFavoriteProductRepository->getFavoriteCount($Product);
//计算能获取的积分
$points_rate=0;
if ($this->isGranted('ROLE_USER')) {
$CustomerShop = $this->customerShopRepository->getCustomerShopByCustomer($this->getUser());
if($CustomerShop && $CustomerShop->getStatus() == "Y"){
}
else{
$customerLevel = $this->customerLevelRepository->getCustomerLevelByCustomer($this->getUser());
if ($customerLevel) {
$points_rate = $customerLevel->getCustomerLevelDetail()->getDiscount();
}
}
}
// edit by gzy 判断是否是商户用户
$is_shop = false;
$discount = 0;
$user_login = "N";
if ($this->isGranted('ROLE_USER')) {
$CustomerShop = $this->customerShopRepository->getCustomerShopByCustomer($this->getUser());
if($CustomerShop && $CustomerShop->getStatus() == "Y"){
$is_shop = true;
$discount = $CustomerShop->getCustomerShopLevel()->getDiscount();
}
$user_login = "Y";
}
return [
'title' => $this->title,
'subtitle' => $Product->getName(),
'form' => $builder->getForm()->createView(),
'favorite_count' => $favorite_count,
'Product' => $Product,
'is_favorite' => $is_favorite,
'is_shop' => $is_shop,
'discount' =>$discount,
'points_rate' =>$points_rate,
'user_login' => $user_login
];
}
/**
* お気に入り追加.
*
* @Route("/products/add_favorite/{id}", name="product_add_favorite", requirements={"id" = "\d+"})
*/
public function addFavorite(Request $request, Product $Product)
{
$this->checkVisibility($Product);
$event = new EventArgs(
[
'Product' => $Product,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_FAVORITE_ADD_INITIALIZE, $event);
if ($this->isGranted('ROLE_USER')) {
$Customer = $this->getUser();
$this->customerFavoriteProductRepository->addFavorite($Customer, $Product);
$this->session->getFlashBag()->set('product_detail.just_added_favorite', $Product->getId());
$event = new EventArgs(
[
'Product' => $Product,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_FAVORITE_ADD_COMPLETE, $event);
return $this->redirectToRoute('product_detail', ['id' => $Product->getId()]);
} else {
// 非会員の場合、ログイン画面を表示
// ログイン後の画面遷移先を設定
$this->setLoginTargetPath($this->generateUrl('product_add_favorite', ['id' => $Product->getId()], UrlGeneratorInterface::ABSOLUTE_URL));
$this->session->getFlashBag()->set('eccube.add.favorite', true);
$event = new EventArgs(
[
'Product' => $Product,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_FAVORITE_ADD_COMPLETE, $event);
return $this->redirectToRoute('mypage_login');
}
}
/**
* カートに追加.
*
* @Route("/products/add_cart/{id}", name="product_add_cart", methods={"POST"}, requirements={"id" = "\d+"})
*/
public function addCart(Request $request, Product $Product)
{
// エラーメッセージの配列
$errorMessages = [];
if (!$this->checkVisibility($Product)) {
throw new NotFoundHttpException();
}
$builder = $this->formFactory->createNamedBuilder(
'',
AddCartType::class,
null,
[
'product' => $Product,
'id_add_product_id' => false,
]
);
$event = new EventArgs(
[
'builder' => $builder,
'Product' => $Product,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_CART_ADD_INITIALIZE, $event);
/* @var $form \Symfony\Component\Form\FormInterface */
$form = $builder->getForm();
$form->handleRequest($request);
if (!$form->isValid()) {
throw new NotFoundHttpException();
}
$addCartData = $form->getData();
log_info(
'カート追加処理開始',
[
'product_id' => $Product->getId(),
'product_class_id' => $addCartData['product_class_id'],
'quantity' => $addCartData['quantity'],
]
);
// カートへ追加
$this->cartService->addProduct($addCartData['product_class_id'], $addCartData['quantity']);
// 明細の正規化
$Carts = $this->cartService->getCarts();
foreach ($Carts as $Cart) {
$result = $this->purchaseFlow->validate($Cart, new PurchaseContext($Cart, $this->getUser()));
// 復旧不可のエラーが発生した場合は追加した明細を削除.
if ($result->hasError()) {
$this->cartService->removeProduct($addCartData['product_class_id']);
foreach ($result->getErrors() as $error) {
$errorMessages[] = $error->getMessage();
}
}
foreach ($result->getWarning() as $warning) {
$errorMessages[] = $warning->getMessage();
}
}
$this->cartService->save();
log_info(
'カート追加処理完了',
[
'product_id' => $Product->getId(),
'product_class_id' => $addCartData['product_class_id'],
'quantity' => $addCartData['quantity'],
]
);
$event = new EventArgs(
[
'form' => $form,
'Product' => $Product,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_PRODUCT_CART_ADD_COMPLETE, $event);
if ($event->getResponse() !== null) {
return $event->getResponse();
}
if ($request->isXmlHttpRequest()) {
// ajaxでのリクエストの場合は結果をjson形式で返す。
// 初期化
$done = null;
$messages = [];
if (empty($errorMessages)) {
// エラーが発生していない場合
$done = true;
array_push($messages, trans('front.product.add_cart_complete'));
} else {
// エラーが発生している場合
$done = false;
$messages = $errorMessages;
}
return $this->json(['done' => $done, 'messages' => $messages]);
} else {
// ajax以外でのリクエストの場合はカート画面へリダイレクト
foreach ($errorMessages as $errorMessage) {
$this->addRequestError($errorMessage);
}
return $this->redirectToRoute('cart');
}
}
/**
* ページタイトルの設定
*
* @param null|array $searchData
*
* @return str
*/
protected function getPageTitle($searchData)
{
if (isset($searchData['name']) && !empty($searchData['name'])) {
return trans('front.product.search_result');
} elseif (isset($searchData['category_id']) && $searchData['category_id']) {
return $searchData['category_id']->getName();
} else {
return trans('front.product.all_products');
}
}
/**
* 閲覧可能な商品かどうかを判定
*
* @param Product $Product
*
* @return boolean 閲覧可能な場合はtrue
*/
protected function checkVisibility(Product $Product)
{
$is_admin = $this->session->has('_security_admin');
// 管理ユーザの場合はステータスやオプションにかかわらず閲覧可能.
if (!$is_admin) {
// 在庫なし商品の非表示オプションが有効な場合.
// if ($this->BaseInfo->isOptionNostockHidden()) {
// if (!$Product->getStockFind()) {
// return false;
// }
// }
// 公開ステータスでない商品は表示しない.
if ($Product->getStatus()->getId() !== ProductStatus::DISPLAY_SHOW) {
return false;
}
}
return true;
}
/**
* @Route("/products/createProduct", name="products_create_product", methods={"POST"})
*/
public function createProduct(Request $request)
{
$json_data = $request->getContent();
log_info(
'createProduct:json_data',
[
'json_data' => $json_data,
]
);
$datas = json_decode($json_data, true);
$ret = [];
foreach ($datas as $data) {
$name = $data["name"];
$note = $data["note"];
$description_list = $data["description_list"];
$description_detail = $data["description_detail"];
$search_word = $data["search_word"];
$free_area = $data["free_area"];
$product_code = $data["product_code"];
$stock = $data["stock"];
$stock_unlimited = $data["stock_unlimited"];
$price01 = $data["price01"];
$price02 = $data["price02"];
$category_id_ec4 = $data["category_id_ec4"];
$file_name_arr = $data["file_name_arr"];
$keys = $data["keys"];
$values = $data["values"];
$Product = new \Eccube\Entity\Product();
$Member = $this->memberRepository->findOneBy(['id' => 1]);
$Product->setCreator($Member);
$ProductStatus = $this->productStatusRepository->findOneBy(['id' => 1]);
$Product->setStatus($ProductStatus);
$Product->setCreateDate(new \DateTime());
$Product->setUpdateDate(new \DateTime());
$Product->setName($name);
$Product->setNote($note);
$Product->setDescriptionList($description_list);
$Product->setDescriptionDetail($description_detail);
$Product->setSearchWord($search_word);
$Product->setFreeArea($free_area);
$this->entityManager->persist($Product);
$this->entityManager->flush();
$ProductClass = new \Eccube\Entity\ProductClass();
$SaleType = $this->saleTypeRepository->findOneBy(['id' => 1]);
$ProductClass->setSaleType($SaleType);
$ProductClass->setCreator($Member);
$ProductClass->setVisible(1);
$ProductClass->setCreateDate(new \DateTime());
$ProductClass->setUpdateDate(new \DateTime());
$ProductClass->setCurrencyCode("JPY");
$ProductClass->setProduct($Product);
$ProductClass->setCode($product_code);
$ProductClass->setStock($stock);
$ProductClass->setStockUnlimited($stock_unlimited);
$ProductClass->setPrice01($price01);
$ProductClass->setPrice02($price02);
$this->entityManager->persist($ProductClass);
$this->entityManager->flush();
$ProductStock = new \Eccube\Entity\ProductStock();
$ProductStock->setCreateDate(new \DateTime());
$ProductStock->setUpdateDate(new \DateTime());
$ProductStock->setProductClass($ProductClass);
$ProductStock->setCreator($Member);
$ProductStock->setStock($stock);
$this->entityManager->persist($ProductStock);
$this->entityManager->flush();
$index = 1;
foreach ($file_name_arr as $file_name) {
$ProductImage = new \Eccube\Entity\ProductImage();
$ProductImage->setCreator($Member);
$ProductImage->setCreateDate(new \DateTime());
$ProductImage->setSortNo($index);
$ProductImage->setProduct($Product);
$ProductImage->setFileName($file_name);
$index += 1;
$this->entityManager->persist($ProductImage);
$this->entityManager->flush();
}
$Category = $this->categoryRepository->findOneBy(['id' => $category_id_ec4]);
if($Category){
$ProductCategory = new \Eccube\Entity\ProductCategory();
$ProductCategory->setProduct($Product);
$ProductCategory->setProductId($Product->getId());
$ProductCategory->setCategory($Category);
$ProductCategory->setCategoryId($Category->getId());
$this->entityManager->persist($ProductCategory);
$this->entityManager->flush();
}
else{
$Category = $this->categoryRepository->findOneBy(['id' => 7]);
$ProductCategory = new \Eccube\Entity\ProductCategory();
$ProductCategory->setProduct($Product);
$ProductCategory->setProductId($Product->getId());
$ProductCategory->setCategory($Category);
$ProductCategory->setCategoryId($Category->getId());
$this->entityManager->persist($ProductCategory);
$this->entityManager->flush();
$ret[] = $category_id_ec4;
}
$index = 1;
$key_index = 0;
foreach ($keys as $key) {
$ProductOptionName = new \Plugin\ProductOption4\Entity\ProductOptionName();
$ProductOptionName->setShowFlg(1);
$ProductOptionName->setUid(1);
$ProductOptionName->setProduct($Product);
$ProductOptionName->setName($key);
$ProductOptionName->setRank($index);
$ProductOptionName->setCreateDate(new \DateTime());
$ProductOptionName->setUpdateDate(new \DateTime());
$this->entityManager->persist($ProductOptionName);
$this->entityManager->flush();
foreach ($values[$key_index] as $v) {
$ProductOptionCategory = new \Plugin\ProductOption4\Entity\ProductOptionCategory();
$ProductOptionCategory->setProductOptionName($ProductOptionName);
$ProductOptionCategory->setName($v);
$ProductOptionCategory->setCode($product_code . "-" . strval($index));
$ProductOptionCategory->setVisible(1);
$ProductOptionCategory->setPrice(0);
$ProductOptionCategory->setRank($index);
$ProductOptionCategory->setCreateDate(new \DateTime());
$ProductOptionCategory->setUpdateDate(new \DateTime());
$this->entityManager->persist($ProductOptionCategory);
$this->entityManager->flush();
$index += 1;
}
$key_index += 1;
}
}
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
if(count($ret) > 0){
$response->setContent(json_encode($ret));
}
else{
$response->setContent(json_encode("Y"));
}
return $response;
}
/**
* @Route("/products/ec4autoFavReview", name="products_fav_review", methods={"POST"})
*/
public function ec4autoFavReview(Request $request)
{
$json_data = $request->getContent();
log_info(
'ec4autoFavReview:json_data',
[
'json_data' => $json_data,
]
);
$datas = json_decode($json_data, true);
foreach ($datas as $data) {
// $reviewer_url = $data["reviewer_url"];
$product_id = $data["product_id"];
$reviewer_name = $data["reviewer_name"];
$title = $data["title"];
$comment = $data["comment"];
$recommend_level = $data["recommend_level"];
$fav = $data["fav"];
$Product = $this->productRepository->findOneBy(['id' => $product_id]);
for ($i = 1; $i <= $fav; $i++) {
$CustomerFavoriteProduct = new \Eccube\Entity\CustomerFavoriteProduct();
$CustomerFavoriteProduct->setProduct($Product);
$CustomerFavoriteProduct->setCreateDate(new \DateTime());
$CustomerFavoriteProduct->setUpdateDate(new \DateTime());
$this->entityManager->persist($CustomerFavoriteProduct);
$this->entityManager->flush();
}
$ProductReview = new \Plugin\ProductReview4\Entity\ProductReview();
$ProductReview->setProduct($Product);
$ProductReviewStatus = $this->productReviewStatusRepository->findOneBy(['id' => 1]);
$ProductReview->setStatus($ProductReviewStatus);
$ProductReview->setReviewerName($reviewer_name);
// $ProductReview->setReviewerUrl($reviewer_url);
$ProductReview->setTitle($title);
$ProductReview->setComment($comment);
$ProductReview->setRecommendLevel($recommend_level);
$ProductReview->setCreateDate(new \DateTime());
$ProductReview->setUpdateDate(new \DateTime());
$this->entityManager->persist($ProductReview);
$this->entityManager->flush();
}
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->setContent(json_encode("Y"));
return $response;
}
/**
* @Route("/products/udpateGigaStock", name="products_udpate_giga_stock", methods={"POST"})
*/
public function udpateGigaStock(Request $request)
{
try {
$json_data = $request->getContent();
$datas = json_decode($json_data, true);
// log_info(
// 'udpateGigaStock:json_data',
// [
// 'json_data' => $json_data,
// ]
// );
foreach ($datas as $data) {
$ret = "Y";
$product_code = $data['product_code'];
$stock = $data['stock'];
log_info(
'udpateGigaStock:product_code',
[
'product_code' => $product_code,
]
);
log_info(
'udpateGigaStock:stock',
[
'stock' => $stock,
]
);
$productClass = $this->productClassRepository->findOneBy([
'code' => $product_code,
]);
if($productClass && !empty($productClass)){
// log_info(
// 'udpateGigaStock:productClass',
// [
// 'productClass' => $productClass->getId(),
// ]
// );
$productClass->setStock($stock);
$ProductStock = $productClass->getProductStock();
if($ProductStock){
$ProductStock->setStock($stock);
$this->entityManager->persist($ProductStock);
}
$this->entityManager->flush();
}
else{
log_info(
'udpateGigaStock:nonono',
[
'nonono' => "nonono productClass",
]
);
$ret = "No Product in this site.";
}
}
$ret = array(
'status' => $ret
);
} catch (\Exception $e) {
log_info(
'udpateGigaStock:eeeeeeee',
[
'eeeeeeee' => json_encode($e),
]
);
$ret = array(
'status' => "N",
'eee' => $e
);
}
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->setContent(json_encode($ret));
return $response;
}
/**
* query getNews
* @Route("/products/getNews", name="products_news")
*/
public function getNews(Request $request) {
$Pluginnews = $this->pluginnewRepository->getNews();
$rets = [];
foreach ($Pluginnews as $Pluginnew) {
$ret = array(
'name'=>$Pluginnew->getName()
);
$rets[] = $ret;
}
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->setContent(json_encode($rets));
return $response;
}
/**
* @Route("/products/setNews", name="products_set_news", methods={"POST"})
*/
public function setNews(Request $request)
{
$json_data = $request->getContent();
$datas = json_decode($json_data, true);
foreach ($datas as $data) {
$Pluginnew = new \Eccube\Entity\Pluginnew();
$Pluginnew->setName($data["name"]);
$Pluginnew->setCreateDate(new \DateTime());
$Pluginnew->setUpdateDate(new \DateTime());
$this->entityManager->persist($Pluginnew);
$this->entityManager->flush();
}
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->setContent(json_encode("Y"));
return $response;
}
/**
* @Route("/products/createRakutenCategory", name="products_create_rakuten_category", methods={"POST"})
*/
public function createRakutenCategory(Request $request)
{
$json_data = $request->getContent();
log_info(
'createRakutenCategory:json_data',
[
'json_data' => $json_data,
]
);
$datas = json_decode($json_data, true);
$ret = [];
foreach ($datas as $data) {
$code = $data["code"];
$name1 = $data["name1"];
$name2 = $data["name2"];
$name3 = $data["name3"];
$project = $data["project"];
$bitian = $data["bitian"];
$RakutenCategory = new \Eccube\Entity\RakutenCategory();
$RakutenCategory->setCode($code);
$RakutenCategory->setName1($name1);
$RakutenCategory->setName2($name2);
$RakutenCategory->setName3($name3);
$RakutenCategory->setProject($project);
$RakutenCategory->setBitian($bitian);
$this->entityManager->persist($RakutenCategory);
$this->entityManager->flush();
}
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
if(count($ret) > 0){
$response->setContent(json_encode($ret));
}
else{
$response->setContent(json_encode("Y"));
}
return $response;
}
}