<?php
namespace EADPlataforma\Controller\Admin;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use EADPlataforma\Entity\Product;
use EADPlataforma\Entity\ProductOffer;
use EADPlataforma\Entity\ProductTeam;
use EADPlataforma\Entity\ProductPage;
use EADPlataforma\Entity\User;
use EADPlataforma\Entity\Library;
use EADPlataforma\Enum\ProductEnum;
use EADPlataforma\Enum\ProductOfferEnum;
use EADPlataforma\Enum\LibraryEnum;
use EADPlataforma\Enum\ProductPageEnum;
use EADPlataforma\Enum\TrashEnum;
use EADPlataforma\Enum\ErrorEnum;
/**
* @Route(
* path = "/admin/product/page",
* schemes = {"http|https"}
* )
* @Cache(
* maxage = "0",
* smaxage = "0",
* expires = "now",
* public = false
* )
*/
class ProductPageController extends AbstractController {
public function getEntityClass(){
return ProductPage::class;
}
/**
* @Route(
* path = "/list/paginate",
* methods = {"GET"},
* )
*/
public function getProductPagePaginate(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product", "product_page", "see"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$this->requestUtil->setRequest($request)->setData();
$columns = [
"pp.id",
"pp.status",
"pp.name",
"pp.type",
"pp.default",
"p.id AS productId",
"p.type AS productType",
"ud.name AS userDelete"
];
$productClass = Product::class;
$userClass = User::class;
$joins = [
"{$productClass} AS p" => "p.id = pp.product ",
"{$userClass} AS ud" => ["LEFT", "ud.id = pp.userDelete"]
];
$status = $this->requestUtil->getField('status');
$productId = (int)$this->requestUtil->getField('product');
$orderParam = $this->requestUtil->getField('order');
$searchText = $this->requestUtil->getField('searchText');
$limit = $this->requestUtil->getField('limit');
$offset = $this->requestUtil->getField('offset');
$filter = [];
$filterDelete = $this->requestUtil->getDeletedParam();
if(!empty($productId)){
$filter["pp.product"] = $productId;
if($this->userPermissionUtil->isMiddle($permission)){
$product = $this->em->getRepository(Product::class)->findOneBy([
"id" => $productId,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if($product){
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$product,
$this->user
);
$filter[ProductPageEnum::YES] = (
$isInTeam ? ProductPageEnum::YES : ProductPageEnum::NO
);
}
}
}
if(!is_null($status)){
$filter["pp.status"] = $status;
}
$order = ["pp.id" => "ASC"];
if(!empty($orderParam)){
$order = json_decode($orderParam, true);
}
$data = $this->repository->paginate(
"pp",
$searchText,
$columns,
$joins,
$filter,
$order,
$limit,
$offset,
$filterDelete
);
$productOfferRepository = $this->em->getRepository(ProductOffer::class);
foreach ($data["rows"] as $key => $item) {
$item = (object)$item;
$item->inUse = $productOfferRepository->count([
"deleted" => ProductOfferEnum::ITEM_NO_DELETED,
"productPage" => $item->id
]);
$data["rows"][$key] = $item;
}
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/list/all",
* methods = {"GET"}
* )
*/
public function getAllProductPage(Request $request) {
$this->requestUtil->setRequest($request)->setData();
$productId = (int)$this->requestUtil->getField('product');
$productPages = $this->repository->findBy([
"product" => $productId,
"status" => ProductPageEnum::PUBLISHED,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
$pages = [];
foreach ($productPages as $key => $productPage) {
$pages[] = $productPage->toReturn();
}
return $this->eadResponse($pages);
}
/**
* @Route(
* path = "/detail/{id}",
* methods = {"GET"},
* requirements = {"id": "\d+"}
* )
*/
public function getProductPage(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product", "product_page", "see"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$this->requestUtil->setRequest($request)->setData();
$productPageId = $request->get('id');
$productPage = $this->repository->findOneBy([
"id" => $productPageId,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if(!$productPage){
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$product = $productPage->getProduct();
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$product,
$this->user
);
if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$data = $productPage->toReturn();
$data['inUse'] = $this->em->getRepository(ProductOffer::class)->count([
"deleted" => ProductOfferEnum::ITEM_NO_DELETED,
"productPage" => $productPage->getId()
]);
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/register",
* methods = {"POST"},
* )
*/
public function registerProductPage(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product", "product_page", "create"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$this->requestUtil->setRequest($request)->setData();
$productPage = new ProductPage();
$productId = (int)$this->requestUtil->getField('product');
$product = $this->em->getRepository(Product::class)->findOneBy([
"id" => $productId,
"deleted" => ProductEnum::ITEM_NO_DELETED
]);
if($product){
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$product,
$this->user
);
if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$productPage->setProduct($product);
}
$filePhoto = $this->requestUtil->getFile('photo');
$filePhotoStand = $this->requestUtil->getFile('photoStand');
$filePhotoExpand = $this->requestUtil->getFile('photoExpand');
$fileCover = $this->requestUtil->getFile('cover');
if($this->requestUtil->issetField('status')){
$productPage->setStatus((int)$this->requestUtil->getField('status'));
}
if($this->requestUtil->issetField('type')){
$productPage->setType((int)$this->requestUtil->getField('type'));
}
if($this->requestUtil->issetField('name')){
$productPage->setName($this->requestUtil->getField('name'));
}
if($this->requestUtil->issetField('title')){
$productPage->setTitle($this->requestUtil->getField('title'));
}
if($this->requestUtil->issetField('description')){
$productPage->setDescription($this->requestUtil->getField('description'));
}
if($this->requestUtil->issetField('about')){
$productPage->setAbout($this->requestUtil->getField('about'));
}
if($this->requestUtil->issetField('overview')){
$productPage->setOverview($this->requestUtil->getField('overview'));
}
if($this->requestUtil->issetField('target')){
$productPage->setTarget($this->requestUtil->getField('target'));
}
if($this->requestUtil->issetField('aboutCertificate')){
$productPage->setAboutCertificate($this->requestUtil->getField('aboutCertificate'));
}
if($this->requestUtil->issetField('video')){
$productPage->setVideo(
$this->stringUtil->video($this->requestUtil->getField('video'))
);
}
if($this->requestUtil->issetField('library')){
$libraryRepository = $this->em->getRepository(Library::class);
$libraryId = (int)$this->requestUtil->getField('library');
if(!empty($libraryId)){
$library = $libraryRepository->findOneBy([
"id" => $libraryId,
"deleted" => LibraryEnum::ITEM_NO_DELETED
]);
if($library){
$productPage->setVideo(null);
$productPage->setLibrary($library);
}
}else{
$productPage->setLibrary(null);
}
}else{
$productPage->setLibrary(null);
}
if($this->requestUtil->issetField('autoplay')){
$productPage->setAutoplay((int)$this->requestUtil->getField('autoplay'));
}
if($this->requestUtil->issetField('externalPage')){
$productPage->setExternalPage((int)$this->requestUtil->getField('externalPage'));
}
if($this->requestUtil->issetField('externalPageLink')){
$productPage->setExternalPageLink($this->requestUtil->getField('externalPageLink'));
}
if($this->requestUtil->issetField('pageColorText')){
$productPage->setPageColorText($this->requestUtil->getField('pageColorText'));
}
if($this->requestUtil->issetField('backgroundColor')){
$productPage->setBackgroundColor($this->requestUtil->getField('backgroundColor'));
}
if($this->requestUtil->issetField('showModuleCoupon')){
$productPage->setShowModuleCoupon($this->requestUtil->getField('showModuleCoupon'));
}
if($this->requestUtil->issetField('showModuleTestimonials')){
$productPage->setShowModuleTestimonials($this->requestUtil->getField('showModuleTestimonials'));
}
if($this->requestUtil->issetField('showModuleDataBilling')){
$productPage->setShowModuleDataBilling($this->requestUtil->getField('showModuleDataBilling'));
}
if($this->requestUtil->issetField('showModuleOptionForeign')){
$productPage->setShowModuleOptionForeign($this->requestUtil->getField('showModuleOptionForeign'));
}
if($this->requestUtil->issetField('showShortageControlTime')){
$productPage->setShowShortageControlTime($this->requestUtil->getField('showShortageControlTime'));
}
if($this->requestUtil->issetField('showShortageControlVisualization')){
$productPage->setShowShortageControlVisualization($this->requestUtil->getField('showShortageControlVisualization'));
}
if($this->requestUtil->issetField('showShortageControlBuyers')){
$productPage->setShowShortageControlBuyers($this->requestUtil->getField('showShortageControlBuyers'));
}
if($this->requestUtil->issetField('showShortageControlVacancies')){
$productPage->setShowShortageControlVacancies($this->requestUtil->getField('showShortageControlVacancies'));
}
if($this->requestUtil->issetField('allowExternalConclusion')){
$productPage->setAllowExternalConclusion($this->requestUtil->getField('allowExternalConclusion'));
}
if($this->requestUtil->issetField('externalConclusionLink')){
$productPage->setExternalConclusionLink($this->requestUtil->getField('externalConclusionLink'));
}
if($this->requestUtil->issetField('showModuleHeader')){
$productPage->setShowModuleHeader($this->requestUtil->getField('showModuleHeader'));
}
if($this->requestUtil->issetField('showModuleContracts')){
$productPage->setShowModuleContracts($this->requestUtil->getField('showModuleContracts'));
}
if($this->requestUtil->issetField('shortageTimeNumber')){
$productPage->setShortageTimeNumber($this->requestUtil->getField('shortageTimeNumber'));
}
if($this->requestUtil->issetField('shortageVisualizationNumber')){
$productPage->setShortageVisualizationNumber((int)$this->requestUtil->getField('shortageVisualizationNumber'));
}
if($this->requestUtil->issetField('shortageBuyersNumber')){
$productPage->setShortageBuyersNumber((int)$this->requestUtil->getField('shortageBuyersNumber'));
}
if($this->requestUtil->issetField('shortageVacanciesNumber')){
$productPage->setShortageVacanciesNumber((int)$this->requestUtil->getField('shortageVacanciesNumber'));
}
$errors = $this->validateEntity($productPage);
if($errors){
return $this->eadResponse($errors, ErrorEnum::FIELD_EMPTY);
}
if($filePhoto){
$filePhoto = $this->fileService->setFile($filePhoto);
if($filePhoto){
$this->fileService->moveFile(ProductEnum::PATH_PRODUCT_PHOTO);
$productPage->setPhoto($this->fileService->getFileName());
}
}
if($filePhotoStand){
$filePhotoStand = $this->fileService->setFile($filePhotoStand);
if($filePhotoStand){
$this->fileService->moveFile(ProductEnum::PATH_PRODUCT_PHOTO);
$productPage->setPhotoStand($this->fileService->getFileName());
}
}
if($filePhotoExpand){
$filePhotoExpand = $this->fileService->setFile($filePhotoExpand);
if($filePhotoExpand){
$this->fileService->moveFile(ProductEnum::PATH_PRODUCT_PHOTO);
$productPage->setPhotoExpand($this->fileService->getFileName());
}
}
if($fileCover){
$fileCover = $this->fileService->setFile($fileCover);
if($fileCover){
$this->fileService->moveFile(ProductEnum::PATH_PRODUCT_COVER);
$productPage->setCover($this->fileService->getFileName());
}
}
if($productPage->getDefault() == ProductPageEnum::YES){
$productPage->setStatus(ProductPageEnum::PUBLISHED);
$this->repository->removeDefault($productPage);
}
$this->em->persist($productPage);
$this->em->flush();
$data = $productPage->toReturn();
$this->userLogService->logInsert("product_page", $productPage->getId(), $data);
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/edit/{id}",
* methods = {"POST"},
* requirements = { "id" = "\d+" }
* )
*/
public function editProductPage(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"edit"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$this->requestUtil->setRequest($request)->setData();
$productPageId = $request->get('id');
$productPage = $this->repository->findOneBy([
"id" => $productPageId,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if (!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$product = $productPage->getProduct();
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$product,
$this->user
);
if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$filePhoto = $this->requestUtil->getFile('photo');
$filePhotoStand = $this->requestUtil->getFile('photoStand');
$filePhotoExpand = $this->requestUtil->getFile('photoExpand');
$fileCover = $this->requestUtil->getFile('cover');
if($this->requestUtil->issetField('status')){
$productPage->setStatus((int)$this->requestUtil->getField('status'));
}
if($this->requestUtil->issetField('type')){
$productPage->setType((int)$this->requestUtil->getField('type'));
}
if($this->requestUtil->issetField('name')){
$productPage->setName($this->requestUtil->getField('name'));
}
if($this->requestUtil->issetField('title')){
$productPage->setTitle($this->requestUtil->getField('title'));
}
//print_r($this->requestUtil->getField('description'));exit;
if($this->requestUtil->issetField('description')){
$productPage->setDescription($this->requestUtil->getField('description'));
}
if($this->requestUtil->issetField('about')){
$productPage->setAbout($this->requestUtil->getField('about'));
}
if($this->requestUtil->issetField('overview')){
$productPage->setOverview($this->requestUtil->getField('overview'));
}
if($this->requestUtil->issetField('target')){
$productPage->setTarget($this->requestUtil->getField('target'));
}
if($this->requestUtil->issetField('aboutCertificate')){
$productPage->setAboutCertificate(
$this->requestUtil->getField('aboutCertificate')
);
}
if($this->requestUtil->issetField('video')){
$productPage->setVideo(
$this->stringUtil->video($this->requestUtil->getField('video'))
);
}
if($this->requestUtil->issetField('library')){
$libraryRepository = $this->em->getRepository(Library::class);
$libraryId = (int)$this->requestUtil->getField('library');
if(!empty($libraryId)){
$library = $libraryRepository->findOneBy([
"id" => $libraryId,
"deleted" => LibraryEnum::ITEM_NO_DELETED
]);
if($library){
$productPage->setVideo(null);
$productPage->setLibrary($library);
}
}else{
$productPage->setLibrary(null);
}
}else{
$productPage->setLibrary(null);
}
if($this->requestUtil->issetField('autoplay')){
$productPage->setAutoplay((int)$this->requestUtil->getField('autoplay'));
}
if($this->requestUtil->issetField('externalPage')){
$productPage->setExternalPage((int)$this->requestUtil->getField('externalPage'));
}
if($this->requestUtil->issetField('externalPageLink')){
$productPage->setExternalPageLink(
$this->requestUtil->getField('externalPageLink')
);
}
if($this->requestUtil->issetField('pageColorText')){
$productPage->setPageColorText($this->requestUtil->getField('pageColorText'));
}
if($this->requestUtil->issetField('backgroundColor')){
$productPage->setBackgroundColor(
$this->requestUtil->getField('backgroundColor')
);
}
if($this->requestUtil->issetField('showModuleCoupon')){
$productPage->setShowModuleCoupon($this->requestUtil->getField('showModuleCoupon'));
}
if($this->requestUtil->issetField('showModuleTestimonials')){
$productPage->setShowModuleTestimonials($this->requestUtil->getField('showModuleTestimonials'));
}
if($this->requestUtil->issetField('showModuleDataBilling')){
$productPage->setShowModuleDataBilling($this->requestUtil->getField('showModuleDataBilling'));
}
if($this->requestUtil->issetField('showModuleOptionForeign')){
$productPage->setShowModuleOptionForeign($this->requestUtil->getField('showModuleOptionForeign'));
}
if($this->requestUtil->issetField('showShortageControlTime')){
$productPage->setShowShortageControlTime($this->requestUtil->getField('showShortageControlTime'));
}
if($this->requestUtil->issetField('showShortageControlVisualization')){
$productPage->setShowShortageControlVisualization($this->requestUtil->getField('showShortageControlVisualization'));
}
if($this->requestUtil->issetField('showShortageControlBuyers')){
$productPage->setShowShortageControlBuyers($this->requestUtil->getField('showShortageControlBuyers'));
}
if($this->requestUtil->issetField('showShortageControlVacancies')){
$productPage->setShowShortageControlVacancies($this->requestUtil->getField('showShortageControlVacancies'));
}
if($this->requestUtil->issetField('allowExternalConclusion')){
$productPage->setAllowExternalConclusion($this->requestUtil->getField('allowExternalConclusion'));
}
if($this->requestUtil->issetField('externalConclusionLink')){
$productPage->setExternalConclusionLink($this->requestUtil->getField('externalConclusionLink'));
}
if($this->requestUtil->issetField('showModuleHeader')){
$productPage->setShowModuleHeader($this->requestUtil->getField('showModuleHeader'));
}
if($this->requestUtil->issetField('showModuleContracts')){
$productPage->setShowModuleContracts($this->requestUtil->getField('showModuleContracts'));
}
if($this->requestUtil->issetField('shortageTimeNumber')){
$productPage->setShortageTimeNumber($this->requestUtil->getField('shortageTimeNumber'));
}
if($this->requestUtil->issetField('shortageVisualizationNumber')){
$productPage->setShortageVisualizationNumber((int)$this->requestUtil->getField('shortageVisualizationNumber'));
}
if($this->requestUtil->issetField('shortageBuyersNumber')){
$productPage->setShortageBuyersNumber((int)$this->requestUtil->getField('shortageBuyersNumber'));
}
if($this->requestUtil->issetField('shortageVacanciesNumber')){
$productPage->setShortageVacanciesNumber((int)$this->requestUtil->getField('shortageVacanciesNumber'));
}
$errors = $this->validateEntity($productPage);
if($errors){
return $this->eadResponse($errors, ErrorEnum::FIELD_EMPTY);
}
if($filePhoto){
if($productPage->getPhoto()){
$pathComplete = $this->fileService->getFilePathComplete(
$productPage->getPhoto(),
ProductPageEnum::PATH_PRODUCT_PHOTO
);
$this->fileService->setFile($pathComplete);
$this->fileService->deleteFile();
$productPage->setPhoto(null);
}
$filePhoto = $this->fileService->setFile($filePhoto);
if($filePhoto){
$this->fileService->moveFile(ProductEnum::PATH_PRODUCT_PHOTO);
$productPage->setPhoto($this->fileService->getFileName());
}
}
if($filePhotoStand){
if($productPage->getPhotoStand()){
$pathComplete = $this->fileService->getFilePathComplete(
$productPage->getPhotoStand(),
ProductPageEnum::PATH_PRODUCT_PHOTO
);
$this->fileService->setFile($pathComplete);
$this->fileService->deleteFile();
$productPage->setPhotoStand(null);
}
$filePhotoStand = $this->fileService->setFile($filePhotoStand);
if($filePhotoStand){
$this->fileService->moveFile(ProductEnum::PATH_PRODUCT_PHOTO);
$productPage->setPhotoStand($this->fileService->getFileName());
}
}
if($filePhotoExpand){
if($productPage->getPhotoExpand()){
$pathComplete = $this->fileService->getFilePathComplete(
$productPage->getPhotoExpand(),
ProductPageEnum::PATH_PRODUCT_PHOTO
);
$this->fileService->setFile($pathComplete);
$this->fileService->deleteFile();
$productPage->setPhotoExpand(null);
}
$filePhotoExpand = $this->fileService->setFile($filePhotoExpand);
if($filePhotoExpand){
$this->fileService->moveFile(ProductEnum::PATH_PRODUCT_PHOTO);
$productPage->setPhotoExpand($this->fileService->getFileName());
}
}
if($fileCover){
if($productPage->getCover()){
$pathComplete = $this->fileService->getFilePathComplete(
$productPage->getCover(),
ProductPageEnum::PATH_PRODUCT_COVER
);
$this->fileService->setFile($pathComplete);
$this->fileService->deleteFile();
$productPage->setCover(null);
}
$fileCover = $this->fileService->setFile($fileCover);
if($fileCover){
$this->fileService->moveFile(ProductEnum::PATH_PRODUCT_COVER);
$productPage->setCover($this->fileService->getFileName());
}
}
if($productPage->getDefault() == ProductPageEnum::YES){
$productPage->setStatus(ProductPageEnum::PUBLISHED);
$product->setDescription($productPage->getDescription());
$this->repository->removeDefault($productPage);
}
$this->em->flush();
$data = $productPage->toReturn();
$this->userLogService->logUpdate("product_page", $productPage->getId(), $data);
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/edit/many/status",
* methods = {"PUT"}
* )
*/
public function editManyStatusProductPage(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"edit"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$this->requestUtil->setRequest($request)->setData();
$productPageId = $this->requestUtil->getField('productPages');
if(empty($productPageId)){
return $this->eadResponse(null, ErrorEnum::ACTION_INVALID);
};
$productPageId = json_decode($productPageId);
foreach ($productPageId as $key => $id) {
$productPage = $this->repository->findOneBy([
"id" => $id,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if($productPage) {
$product = $productPage->getProduct();
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam($product, $this->user);
if($isInTeam && $this->userPermissionUtil->isMiddle($permission) ||
$this->userPermissionUtil->isHigh($permission)){
if($this->requestUtil->issetField('status')){
$productPage->setStatus((int)$this->requestUtil->getField('status'));
}
$errors = $this->validateEntity($productPage);
if(!$errors){
$this->em->flush();
$data = $productPage->toReturn();
$this->userLogService->logUpdate(
"product_page",
$productPage->getId(),
$data
);
}
}
}
}
return $this->eadResponse([ "message" => "Success" ]);
}
/**
* @Route(
* path = "/change/default/{id}",
* methods = {"PUT"},
* requirements = { "id" = "\d+" }
* )
*/
public function setDefaultProductPage(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"edit"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$this->requestUtil->setRequest($request)->setData();
$productPageId = $request->get('id');
$productPage = $this->repository->findOneBy([
"id" => $productPageId,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if (!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$product = $productPage->getProduct();
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$product,
$this->user
);
if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$productPage->setStatus(ProductPageEnum::PUBLISHED);
$productPage->setDefault(ProductPageEnum::YES);
$product->setDescription($productPage->getDescription());
$errors = $this->validateEntity($productPage);
if($errors){
return $this->eadResponse($errors, ErrorEnum::FIELD_EMPTY);
}
if($productPage->getDefault() == ProductPageEnum::YES){
$this->repository->removeDefault($productPage);
}
$this->em->flush();
$data = $productPage->toReturn();
$this->userLogService->logUpdate("product_page", $productPage->getId(), $data);
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/copy/{id}",
* methods = {"COPY"},
* requirements = { "id" = "\d+" }
* )
*/
public function copyProductPage(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"create"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$productPageId = $request->get('id');
$productPage = $this->repository->findOneBy([
"id" => $productPageId,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if (!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$product = $productPage->getProduct();
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$product,
$this->user
);
if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$newProductPage = clone $productPage;
$date = date('Y-m-d-H-i-s');
$newProductPage->setTitle("{$newProductPage->getTitle()} - COPY ");
$newProductPage->setName("{$newProductPage->getName()} - COPY ");
$newProductPage->setStatus(ProductPageEnum::DRAFT);
$newProductPage->setDefault(ProductPageEnum::NO);
$errors = $this->validateEntity($newProductPage);
if($errors){
return $this->eadResponse($errors, ErrorEnum::FIELD_EMPTY);
}
$fileService = $this->generalService->getService('FileService');
if(!empty($newProductPage->getPhoto())){
$pathPhoto = ProductPageEnum::PATH_PRODUCT_PHOTO;
$fileService->setFile("{$pathPhoto}/{$newProductPage->getPhoto()}");
$hashImg = md5(rand() . time() . $product->getId());
$fileName = "{$hashImg}.{$fileService->getFileExtension()}";
$copyFile = "{$pathPhoto}/{$fileName}";
$fileService->copyFile($copyFile);
$newProductPage->setPhoto($fileName);
}
if(!empty($newProductPage->getPhotoStand())){
$pathPhoto = ProductPageEnum::PATH_PRODUCT_PHOTO;
$fileService->setFile("{$pathPhoto}/{$newProductPage->getPhotoStand()}");
$hashImg = md5(rand() . time() . $product->getId());
$fileName = "{$hashImg}.{$fileService->getFileExtension()}";
$copyFile = "{$pathPhoto}/{$fileName}";
$fileService->copyFile($copyFile);
$newProductPage->setPhotoStand($fileName);
}
if(!empty($newProductPage->getPhotoExpand())){
$pathPhoto = ProductPageEnum::PATH_PRODUCT_PHOTO;
$fileService->setFile("{$pathPhoto}/{$newProductPage->getPhotoExpand()}");
$hashImg = md5(rand() . time() . $product->getId());
$fileName = "{$hashImg}.{$fileService->getFileExtension()}";
$copyFile = "{$pathPhoto}/{$fileName}";
$fileService->copyFile($copyFile);
$newProductPage->setPhotoExpand($fileName);
}
if(!empty($newProductPage->getCover())){
$pathCover = ProductPageEnum::PATH_PRODUCT_COVER;
$fileService->setFile("{$pathCover}/{$newProductPage->getCover()}");
$hashImg = md5(rand() . time() . $product->getId());
$fileName = "{$hashImg}.{$fileService->getFileExtension()}";
$copyFile = "{$pathCover}/{$fileName}";
$fileService->copyFile($copyFile);
$newProductPage->setCover($fileName);
}
$this->em->persist($newProductPage);
$this->em->flush();
$data = $newProductPage->toReturn();
$this->userLogService->logInsert("product_page", $newProductPage->getId(), $data);
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/delete/cover/{id}",
* methods = {"DELETE"},
* requirements = { "id" = "\d+" }
* )
*/
public function deleteProductPageCover(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"edit"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$productPageId = $request->get('id');
$productPage = $this->repository->findOneBy([
"id" => $productPageId,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if (!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$productPage->getProduct(),
$this->user
);
if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
if($productPage->getCover()){
$pathComplete = $this->fileService->getFilePathComplete(
$productPage->getCover(),
ProductPageEnum::PATH_PRODUCT_COVER
);
$this->fileService->setFile($pathComplete);
$this->fileService->deleteFile();
$productPage->setCover(null);
}
$this->em->flush();
$data = $productPage->toReturn();
$this->userLogService->logUpdate("product_page", $productPage->getId(), $data);
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/delete/photo/{id}",
* methods = {"DELETE"},
* requirements = { "id" = "\d+" }
* )
*/
public function deleteProductPhoto(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"edit"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$productPageId = $request->get('id');
$productPage = $this->repository->findOneBy([
"id" => $productPageId,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if (!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$productPage->getProduct(),
$this->user
);
if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
if($productPage->getPhoto()){
$pathComplete = $this->fileService->getFilePathComplete(
$productPage->getPhoto(),
ProductPageEnum::PATH_PRODUCT_PHOTO
);
$this->fileService->setFile($pathComplete);
$this->fileService->deleteFile();
$productPage->setPhoto(null);
}
$this->em->flush();
$data = $productPage->toReturn();
$this->userLogService->logUpdate("product_page", $productPage->getId(), $data);
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/delete/photo/stand/{id}",
* methods = {"DELETE"},
* requirements = { "id" = "\d+" }
* )
*/
public function deleteProductPhotoStand(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"edit"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$productPageId = $request->get('id');
$productPage = $this->repository->findOneBy([
"id" => $productPageId,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if (!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$productPage->getProduct(),
$this->user
);
if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
if($productPage->getPhotoStand()){
$pathComplete = $this->fileService->getFilePathComplete(
$productPage->getPhotoStand(),
ProductPageEnum::PATH_PRODUCT_PHOTO
);
$this->fileService->setFile($pathComplete);
$this->fileService->deleteFile();
$productPage->setPhotoStand(null);
}
$this->em->flush();
$data = $productPage->toReturn();
$this->userLogService->logUpdate("product_page", $productPage->getId(), $data);
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/delete/photo/expand/{id}",
* methods = {"DELETE"},
* requirements = { "id" = "\d+" }
* )
*/
public function deleteProductPhotoExpand(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"edit"
);
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$productPageId = $request->get('id');
$productPage = $this->repository->findOneBy([
"id" => $productPageId,
"deleted" => ProductPageEnum::ITEM_NO_DELETED
]);
if (!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$isInTeam = $this->em->getRepository(ProductTeam::class)->userExistInProductTeam(
$productPage->getProduct(),
$this->user
);
if(!$isInTeam && $this->userPermissionUtil->isMiddle($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
if($productPage->getPhotoExpand()){
$pathComplete = $this->fileService->getFilePathComplete(
$productPage->getPhotoExpand(),
ProductPageEnum::PATH_PRODUCT_PHOTO
);
$this->fileService->setFile($pathComplete);
$this->fileService->deleteFile();
$productPage->setPhotoExpand(null);
}
$this->em->flush();
$data = $productPage->toReturn();
$this->userLogService->logUpdate("product_page", $productPage->getId(), $data);
return $this->eadResponse($data);
}
/**
* @Route(
* path = "/restore/many",
* methods = {"PUT"}
* )
*/
public function restoreMany(Request $request) {
$permission = $this->userPermissionUtil->getPermission("trash", "restore");
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$this->requestUtil->setRequest($request)->setData();
$restoreItems = [];
$all = (int)$this->requestUtil->getField('all');
$itemsTrash = json_decode($this->requestUtil->getField('itemIds'));
if(empty($all) && empty($itemsTrash)){
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
if($all == TrashEnum::YES){
$productPages = $this->repository->findBy([
"deleted" => ProductPageEnum::ITEM_ON_TRASH
]);
if (empty($productPages)) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
foreach ($productPages as $key => $productPage) {
$this->repository->restore($productPage);
$restoreItems[] = $productPage->getId();
}
}else{
foreach ($itemsTrash as $key => $productPageId) {
$productPage = $this->repository->findOneBy([
"id" => $productPageId,
]);
if(!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$this->repository->restore($productPage);
$restoreItems[] = $productPage->getId();
}
}
$this->userLogService->logRestoreMany('product_page', null, $restoreItems);
$this->em->flush();
return $this->eadResponse([ "restore" => 1 ]);
}
/**
* @Route(
* path = "/restore/{productPageId}",
* methods = {"PUT"},
* requirements = { "productPageId" = "\d+" }
* )
*/
public function restore(Request $request) {
$permission = $this->userPermissionUtil->getPermission("trash", "restore");
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$this->requestUtil->setRequest($request)->setData();
$productPageId = $request->get('productPageId');
$productPage = $this->repository->findOneBy([
"id" => $productPageId
]);
if(!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$this->repository->restore($productPage);
$this->em->flush();
return $this->eadResponse([ "restore" => 1 ]);
}
/**
* @Route(
* path = "/delete/many/{isTrash}",
* methods = {"DELETE"},
* defaults = { "isTrash" = 0 }
* )
*/
public function deleteMany(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"delete"
);
$isTrash = $request->get('isTrash');
if($isTrash == ProductPageEnum::YES){
$permission = $this->userPermissionUtil->getPermission("trash", "delete");
}
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$this->requestUtil->setRequest($request)->setData();
$all = (int)$this->requestUtil->getField('all');
$itemsTrash = json_decode($this->requestUtil->getField('itemIds'));
if(empty($all) && empty($itemsTrash)){
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$deleteItems = [];
if($all == TrashEnum::YES){
$productPages = $this->repository->findBy([]);
foreach ($productPages as $key => $productPage) {
$deleteItems[] = $productPage->getId();
$this->repository->delete($productPage);
}
}else{
foreach ($itemsTrash as $key => $productPageId) {
$productPage = $this->repository->findOneBy([
"id" => $productPageId
]);
if(!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$deleteItems[] = $productPageId;
$this->repository->delete($productPage);
}
}
$this->userLogService->logDeleteMany('product_page', null, $deleteItems);
$this->em->flush();
return $this->eadResponse([ "delete" => 1 ]);
}
/**
* @Route(
* path = "/delete/{productPageId}/{isTrash}",
* methods = {"DELETE"},
* requirements = { "productPageId" = "\d+" },
* defaults = { "isTrash" = 0 }
* )
*/
public function deleteProductPage(Request $request) {
$permission = $this->userPermissionUtil->getPermission(
"product",
"product_page",
"delete"
);
$isTrash = $request->get('isTrash');
if($isTrash == ProductPageEnum::YES){
$permission = $this->userPermissionUtil->getPermission("trash", "delete");
}
if($this->userPermissionUtil->isLow($permission)){
return $this->eadResponse(null, ErrorEnum::PERMISSION);
}
$productPageId = $request->get('productPageId');
$productPage = $this->repository->findOneBy([
"id" => $productPageId
]);
if (!$productPage) {
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
if ($productPage->getDefault() == ProductPageEnum::YES) {
return $this->eadResponse(null, ErrorEnum::ACTION_INVALID);
}
$offerNumber = $this->em->getRepository(ProductOffer::class)->count([
"deleted" => ProductOfferEnum::ITEM_NO_DELETED,
"productPage" => $productPage->getId()
]);
if($offerNumber > 0) {
return $this->eadResponse(null, ErrorEnum::ACTION_INVALID);
}
$this->repository->delete($productPage);
return $this->eadResponse([ "delete" => 1 ]);
}
}