diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/variations.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/variations.blade.php index e462c9099..18a2d4eff 100755 --- a/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/variations.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/products/accordians/variations.blade.php @@ -19,6 +19,16 @@ @stop +@php + $variantImages = []; + + foreach ($product->variants as $variant) { + foreach ($variant->images as $image) { + $variantImages[$variant->id] = $image; + } + } +@endphp + {!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.variations.before', ['product' => $product]) !!} @@ -96,6 +106,7 @@ {{ __('admin::app.catalog.products.sku') }} {{ __('admin::app.catalog.products.name') }} + {{ __('admin::app.catalog.products.images') }} @foreach ($product->super_attributes as $attribute) + +
+
+ +
+ + +
+ + +
1) { + this.$emit('onImageSelected', imageInput) + } + } else { + imageInput.value = ""; + + alert('Only images (.jpeg, .jpg, .png, ..) are allowed.'); + } + } + }, + + readFile: function(image, index) { + var imageInput = this.$refs.imageInput; + + var reader = new FileReader(); + + reader.onload = (e) => { + var dataIndex = this.imageData.indexOf(this.imageData[index]); + + if (dataIndex >= 0) { + this.imageData.splice(dataIndex, 1, e.target.result); + } else { + this.imageData.push(e.target.result); + } + } + + reader.readAsDataURL(image); + + this.new_image[imageInput.length-1] = 1; + }, + } }); @endpush \ No newline at end of file diff --git a/packages/Webkul/Product/src/Repositories/ProductImageRepository.php b/packages/Webkul/Product/src/Repositories/ProductImageRepository.php index 8fb9da070..0ed830d0c 100755 --- a/packages/Webkul/Product/src/Repositories/ProductImageRepository.php +++ b/packages/Webkul/Product/src/Repositories/ProductImageRepository.php @@ -6,9 +6,35 @@ use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Illuminate\Http\UploadedFile; use Webkul\Core\Eloquent\Repository; +use Illuminate\Container\Container as App; +use Webkul\Product\Repositories\ProductRepository; class ProductImageRepository extends Repository { + /** + * ProductRepository object + * + * @return Object + */ + protected $productRepository; + + /** + * Create a new repository instance. + * + * @param \Webkul\Product\Repositories\ProductRepository $productRepository + * @param \Illuminate\Container\Container $app + * + * @return void + */ + public function __construct( + ProductRepository $productRepository, + App $app + ) { + parent::__construct($app); + + $this->productRepository = $productRepository; + } + /** * Specify Model class name * @@ -48,6 +74,10 @@ class ProductImageRepository extends Repository } } + if (isset($data['variants'])) { + $this->uploadVariantImages($data['variants']); + } + foreach ($previousImageIds as $imageId) { if ($imageModel = $this->find($imageId)) { Storage::delete($imageModel->path); @@ -56,4 +86,44 @@ class ProductImageRepository extends Repository } } } + + /** + * @param array $variants + * @return void + */ + public function uploadVariantImages($variants) + { + foreach ($variants as $variantsId => $variant) { + $product = $this->productRepository->findOrFail($variantsId); + $previousVariantImageIds = $product->images()->pluck('id'); + + if (isset($variant['images'])) { + foreach ($variant['images'] as $imageId => $image) { + $file = 'variants.' . $product->id .'.'. 'images.' . $imageId; + $dir = 'product/' . $product->id; + + if ($image instanceof UploadedFile) { + if (request()->hasFile($file)) { + $this->create([ + 'path' => request()->file($file)->store($dir), + 'product_id' => $product->id, + ]); + } + } else { + if (is_numeric($index = $previousVariantImageIds->search($imageId))) { + $previousVariantImageIds->forget($index); + } + } + } + } + + foreach ($previousVariantImageIds as $imageId) { + if ($imageModel = $this->find($imageId)) { + Storage::delete($imageModel->path); + + $this->delete($imageId); + } + } + } + } } \ No newline at end of file