/home/techb158/immovalet.com/platform/plugins/ecommerce/src/Http/Controllers
Edit: /home/techb158/immovalet.com/platform/plugins/ecommerce/src/Http/Controllers/ProductController.php (9600B)
setTitle(trans('plugins/ecommerce::products.name'));
Assets::addScripts(['bootstrap-editable'])
->addStyles(['bootstrap-editable']);
return $dataTable->renderTable();
}
/**
* @param FormBuilder $formBuilder
* @return string
*/
public function create(FormBuilder $formBuilder)
{
page_title()->setTitle(trans('plugins/ecommerce::products.create'));
Assets::addStyles(['datetimepicker'])
->addScripts([
'moment',
'datetimepicker',
'jquery-ui',
'input-mask',
'blockui',
])
->addStylesDirectly(['vendor/core/plugins/ecommerce/css/ecommerce.css'])
->addScriptsDirectly([
'vendor/core/plugins/ecommerce/libraries/bootstrap-confirmation/bootstrap-confirmation.min.js',
'vendor/core/plugins/ecommerce/js/edit-product.js',
]);
return $formBuilder->create(ProductForm::class)->renderForm();
}
/**
* @param int $id
* @param FormBuilder $formBuilder
* @return string
*/
public function edit($id, FormBuilder $formBuilder)
{
$product = $this->productRepository->findOrFail($id);
if ($product->is_variation) {
abort(404);
}
page_title()->setTitle(trans('plugins/ecommerce::products.edit', ['name' => $product->name]));
Assets::addStyles(['datetimepicker'])
->addScripts([
'moment',
'datetimepicker',
'jquery-ui',
'input-mask',
'blockui',
])
->addStylesDirectly(['vendor/core/plugins/ecommerce/css/ecommerce.css'])
->addScriptsDirectly([
'vendor/core/plugins/ecommerce/libraries/bootstrap-confirmation/bootstrap-confirmation.min.js',
'vendor/core/plugins/ecommerce/js/edit-product.js',
]);
return $formBuilder
->create(ProductForm::class, ['model' => $product])
->renderForm();
}
/**
* @param ProductRequest $request
* @param StoreProductService $service
* @param BaseHttpResponse $response
* @param ProductVariationInterface $variationRepository
* @param ProductVariationItemInterface $productVariationItemRepository
* @param GroupedProductInterface $groupedProductRepository
* @param StoreAttributesOfProductService $storeAttributesOfProductService
* @param StoreProductTagService $storeProductTagService
* @return BaseHttpResponse
* @throws Exception
*/
public function store(
ProductRequest $request,
StoreProductService $service,
BaseHttpResponse $response,
ProductVariationInterface $variationRepository,
ProductVariationItemInterface $productVariationItemRepository,
GroupedProductInterface $groupedProductRepository,
StoreAttributesOfProductService $storeAttributesOfProductService,
StoreProductTagService $storeProductTagService
) {
$product = $this->productRepository->getModel();
$product = $service->execute($request, $product);
$storeProductTagService->execute($request, $product);
$addedAttributes = $request->input('added_attributes', []);
if ($request->input('is_added_attributes') == 1 && $addedAttributes) {
$storeAttributesOfProductService->execute($product, array_keys($addedAttributes));
$variation = $variationRepository->create([
'configurable_product_id' => $product->id,
]);
foreach ($addedAttributes as $attribute) {
$productVariationItemRepository->createOrUpdate([
'attribute_id' => $attribute,
'variation_id' => $variation->id,
]);
}
$variation = $variation->toArray();
$variation['variation_default_id'] = $variation['id'];
$variation['sku'] = $product->sku;
$variation['auto_generate_sku'] = true;
$variation['images'] = $request->input('images', []);
$this->postSaveAllVersions([$variation['id'] => $variation], $variationRepository, $product->id, $response);
}
if ($request->has('grouped_products')) {
$groupedProductRepository->createGroupedProducts($product->id, array_map(function ($item) {
return [
'id' => $item,
'qty' => 1,
];
}, array_filter(explode(',', $request->input('grouped_products', '')))));
}
return $response
->setPreviousUrl(route('products.index'))
->setNextUrl(route('products.edit', $product->id))
->setMessage(trans('core/base::notices.create_success_message'));
}
/**
* @param int $id
* @param ProductRequest $request
* @param StoreProductService $service
* @param GroupedProductInterface $groupedProductRepository
* @param BaseHttpResponse $response
* @param ProductVariationInterface $variationRepository
* @param ProductVariationItemInterface $productVariationItemRepository
* @param StoreProductTagService $storeProductTagService
* @return BaseHttpResponse|JsonResponse|RedirectResponse
*/
public function update(
$id,
ProductRequest $request,
StoreProductService $service,
GroupedProductInterface $groupedProductRepository,
BaseHttpResponse $response,
ProductVariationInterface $variationRepository,
ProductVariationItemInterface $productVariationItemRepository,
StoreProductTagService $storeProductTagService
) {
$product = $this->productRepository->findOrFail($id);
$product = $service->execute($request, $product);
$storeProductTagService->execute($request, $product);
$variationRepository
->getModel()
->where('configurable_product_id', $product->id)
->update(['is_default' => 0]);
$defaultVariation = $variationRepository->findById($request->input('variation_default_id'));
if ($defaultVariation) {
$defaultVariation->is_default = true;
$defaultVariation->save();
}
$addedAttributes = $request->input('added_attributes', []);
if ($request->input('is_added_attributes') == 1 && $addedAttributes) {
$result = $variationRepository->getVariationByAttributesOrCreate($id, $addedAttributes);
/**
* @var Collection $variation
*/
$variation = $result['variation'];
foreach ($addedAttributes as $attribute) {
$productVariationItemRepository->createOrUpdate([
'attribute_id' => $attribute,
'variation_id' => $variation->id,
]);
}
$variation = $variation->toArray();
$variation['variation_default_id'] = $variation['id'];
$product->productAttributeSets()->sync(array_keys($addedAttributes));
$variation['sku'] = $product->sku;
$variation['auto_generate_sku'] = true;
$this->postSaveAllVersions([$variation['id'] => $variation], $variationRepository, $product->id, $response);
} elseif ($product->variations()->count() === 0) {
$product->productAttributeSets()->detach();
$product->productAttributes()->detach();
}
if ($request->has('grouped_products')) {
$groupedProductRepository->createGroupedProducts($product->id, array_map(function ($item) {
return [
'id' => $item,
'qty' => 1,
];
}, array_filter(explode(',', $request->input('grouped_products', '')))));
}
$relatedProductIds = $product->variations()->pluck('product_id')->all();
$this->productRepository->update([['id', 'IN', $relatedProductIds]], ['status' => $product->status]);
return $response
->setPreviousUrl(route('products.index'))
->setMessage(trans('core/base::notices.update_success_message'));
}
}