ProductController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. <?php
  2. namespace Packages\Product\Http\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use Facade\Ignition\Support\Packagist\Package;
  5. use Illuminate\Database\Eloquent\Builder;
  6. use Illuminate\Support\Facades\Facade;
  7. use Illuminate\Support\Facades\File;
  8. use Illuminate\Support\Facades\Storage;
  9. use Illuminate\Support\Str;
  10. use Packages\Product\Http\Requests\ProductRequest;
  11. use Packages\Product\Http\Requests\ProductRequestEdit;
  12. use Packages\Product\Models\Product;
  13. use Illuminate\Http\Request;
  14. use App\Models\Category;
  15. use App\Models\Upload;
  16. use phpDocumentor\Reflection\Types\Compound;
  17. class ProductController extends Controller
  18. {
  19. public function __construct()
  20. {
  21. }
  22. // *******************************************show page product ************
  23. public function index()
  24. {
  25. $categories = Category::orderBy('id', 'DESC')->get();
  26. $products = Product::query()->orderBy('id', 'DESC');
  27. if (request()->has('productCategory') && request('productCategory') != '')
  28. $products = $products->whereHas('categories', function (Builder $query) {
  29. $query->whereRaw('id = ?', [request('productCategory')]);
  30. });
  31. if (request()->has('productStatus') && request('productStatus') != '')
  32. $products = $products->whereRaw('status = ?', [request('productStatus')]);
  33. if (request()->has('productName') && request('productName') != '')
  34. $products = $products->whereRaw('title = ?', [request('productName')]);
  35. if (request()->has('creatorId') && request('creatorId') != '')
  36. $products = $products->whereHas('user', function (Builder $query) {
  37. $query->whereRaw('name= ?', [request('creatorId')]);
  38. });
  39. $products = $products->paginate();
  40. return view('product::index', compact('products', 'categories'));
  41. }
  42. //**************************************************** page create products *****************
  43. public function create()
  44. {
  45. $categories = Category::orderBy('parent_id')->where('parent_id', 0)->get();
  46. return view('product::product.create', compact('categories'));
  47. }
  48. // *********************************************************save products ******************
  49. public function store(ProductRequest $request)
  50. {
  51. /*foreach ($request->file('gallery_image') as $item) {
  52. echo '<pre>';
  53. print_r($item);
  54. echo '</pre>';
  55. }
  56. die();*/
  57. $request->merge([
  58. 'price' => preg_replace('/[^0-9]+/', '', $request->price),
  59. 'sale_price' => preg_replace('/[^0-9]+/', '', $request->sale_price),
  60. ]);
  61. $data = [
  62. 'title' => $request->title,
  63. 'slug' => $request->slug,
  64. 'sku' => $request->sku,
  65. 'ReleaseStatus' => $request->ReleaseStatus,
  66. 'price' => $request->price,
  67. 'sale_price' => $request->sale_price,
  68. 'type' => $request->type,
  69. 'status' => $request->status,
  70. 'discription' => $request->discription,
  71. 'creator_id' => auth()->user()->id
  72. ];
  73. // \DB::enableQueryLog();
  74. $product = Product::create($data);
  75. $product->categories()->sync($request->categories);
  76. // dd(\DB::getQueryLog());
  77. if ($request->has('gallery_image')) {
  78. $file = $request->only('gallery_image', 'captionGallery', 'descriptionGallery');
  79. $type = 'gallery_image';
  80. $diskName = 'product';
  81. $this->uploadGallery($file, $diskName, $product, $type);
  82. }
  83. if ($request->has('featured_image')) {
  84. $info = $request->only(['featureDescription', 'featureCaption']);
  85. $file = $request->file('featured_image');
  86. $type = 'featured_image';
  87. $diskName = 'product';
  88. $this->uploadFeature($file, $diskName, $product, $type, $info);
  89. }
  90. $msg = 'ذخیره محصول با موفقیت انجام شد ';
  91. return redirect(route('products.edit', $product->id))->with('success', $msg);
  92. }
  93. // ******************************************************edit page product*********************************************
  94. public function edit(Product $product)
  95. {
  96. $categories = Category::where('parent_id', 0)->orderBy('title')->get();
  97. return view('product::product.edit', compact('product', 'categories'));
  98. }
  99. // *******************************************update page product*****************************************
  100. public function update(ProductRequestEdit $request, Product $product)
  101. {
  102. $request->merge([
  103. 'price' => preg_replace('/[^0-9]+/', '', $request->price),
  104. 'sale_price' => preg_replace('/[^0-9]+/', '', $request->sale_price),
  105. ]);
  106. // 'categories' => $request->categories,
  107. $data = [
  108. 'title' => $request->title,
  109. 'slug' => $request->slug,
  110. 'sku' => $request->sku,
  111. 'price' => $request->price,
  112. 'sale_price' => $request->sale_price,
  113. 'type' => $request->type,
  114. 'ReleaseStatus' => $request->ReleaseStatus,
  115. 'status' => $request->status,
  116. 'discription' => $request->discription,
  117. 'creator_id' => auth()->user()->id,
  118. ];
  119. $product->update($data);
  120. $product->categories()->sync($request->categories);
  121. if ($request->has('gallery_image')) {
  122. $file = $request->only('gallery_image', 'captionGallery', 'descriptionGallery');
  123. $type = 'gallery_image';
  124. $diskName = 'product';
  125. $this->updateGallery($file, $diskName, $product, $type);
  126. }
  127. if ($request->has('featured_image')) {
  128. $info = $request->only(['featureDescription', 'featureCaption']);
  129. $file = $request->file('featured_image');
  130. $type = 'featured_image';
  131. $diskName = 'product';
  132. $this->uploadFeature($file, $diskName, $product, $type, $info);
  133. }
  134. $msg = 'ویرایش محصول با موفقیت انجام شد ';
  135. return redirect(route('products.index'))->with('success', $msg);
  136. }
  137. //***************************** delete products*****************************************
  138. public function destroy(Product $product)
  139. {
  140. $product->delete();
  141. {
  142. return back();
  143. }
  144. }
  145. //****************upload images in the product************************
  146. public function uploadFeature($file, $diskName, $product, $type,$info)
  147. {
  148. $fileExtension = $file->getClientOriginalExtension();
  149. $fileMimeType = $file->getMimeType();
  150. $afterDiskRoot = '/' . jdate()->format('Y') . '/' . jdate()->format('m');
  151. $fileName = jdate(time())->format('Ymd') . '_' . $file->getClientOriginalName();
  152. $filePath = storage_path('app/public/' . $diskName . $afterDiskRoot . '/' . $fileName);
  153. if (File::exists($filePath)) {
  154. $fileName = time() . '_' . $fileName;
  155. }
  156. $upload = $file->storeAs($afterDiskRoot, $fileName, $diskName);
  157. $uploadData = [
  158. 'name' => $fileName,
  159. 'path' => $upload,
  160. 'mime_type' => $fileMimeType,
  161. 'extension' => $fileExtension,
  162. 'type' => $type,
  163. 'descriptionImg' => $info['featureDescription'],
  164. 'caption' => $info['featureCaption'],
  165. ];
  166. $uploaded = $product->uploads()->create($uploadData);
  167. }
  168. public function updateFeature($file, $diskName, $product, $type,$info)
  169. {
  170. $fileExtension = $file->getClientOriginalExtension();
  171. $fileMimeType = $file->getMimeType();
  172. $afterDiskRoot = '/' . jdate()->format('Y') . '/' . jdate()->format('m');
  173. $fileName = jdate(time())->format('Ymd') . '_' . $file->getClientOriginalName();
  174. $filePath = storage_path('app/public/' . $diskName . $afterDiskRoot . '/' . $fileName);
  175. if (File::exists($filePath)) {
  176. $fileName = time() . '_' . $fileName;
  177. }
  178. $upload = $file->storeAs($afterDiskRoot, $fileName, $diskName);
  179. $uploadData = [
  180. 'name' => $fileName,
  181. 'path' => $upload,
  182. 'mime_type' => $fileMimeType,
  183. 'extension' => $fileExtension,
  184. 'type' => $type,
  185. 'descriptionImg' => $info['featureDescription'],
  186. 'caption' => $info['featureCaption'],
  187. ];
  188. $uploaded = $product->uploads()->update($uploadData);
  189. }
  190. //************************delete image in th product**********************
  191. public function destroyFile(Upload $upload)
  192. {
  193. $upload->delete();
  194. $msg = 'حذف عکس محصول با موفقیت انجام شد ';
  195. session()->flash('image_deleted',$msg);
  196. return redirect()->back();
  197. }
  198. public function uploadGallery($files, $diskName, $product, $type)
  199. {
  200. // dd($files);
  201. foreach ($files['gallery_image'] as $key => $file) {
  202. $fileExtension = $file->getClientOriginalExtension();
  203. $fileMimeType = $file->getMimeType();
  204. $afterDiskRoot = '/' . jdate()->format('Y') . '/' . jdate()->format('m');
  205. $fileName = jdate(time())->format('Ymd') . '_' . $file->getClientOriginalName();
  206. $filePath = storage_path('app/public/' . $diskName . $afterDiskRoot . '/' . $fileName);
  207. if (File::exists($filePath)) {
  208. $fileName = time() . '_' . $fileName;
  209. }
  210. $upload = $file->storeAs($afterDiskRoot, $fileName, $diskName);
  211. $uploadData = [
  212. 'name' => $fileName,
  213. 'path' => $upload,
  214. 'mime_type' => $fileMimeType,
  215. 'extension' => $fileExtension,
  216. 'type' => $type,
  217. 'descriptionImg' => $files['descriptionGallery'][$key],
  218. 'caption' => $files['captionGallery'][$key],
  219. ];
  220. $uploaded = $product->uploads()->create($uploadData);
  221. }
  222. }
  223. public function updateGallery($files, $diskName, $product, $type)
  224. {
  225. // dd($files);
  226. foreach ($files['gallery_image'] as $key => $file) {
  227. $fileExtension = $file->getClientOriginalExtension();
  228. $fileMimeType = $file->getMimeType();
  229. $afterDiskRoot = '/' . jdate()->format('Y') . '/' . jdate()->format('m');
  230. $fileName = jdate(time())->format('Ymd') . '_' . $file->getClientOriginalName();
  231. $filePath = storage_path('app/public/' . $diskName . $afterDiskRoot . '/' . $fileName);
  232. if (File::exists($filePath)) {
  233. $fileName = time() . '_' . $fileName;
  234. }
  235. $upload = $file->storeAs($afterDiskRoot, $fileName, $diskName);
  236. $uploadData = [
  237. 'name' => $fileName,
  238. 'path' => $upload,
  239. 'mime_type' => $fileMimeType,
  240. 'extension' => $fileExtension,
  241. 'type' => $type,
  242. 'descriptionImg' => $files['descriptionGallery'][$key],
  243. 'caption' => $files['captionGallery'][$key],
  244. ];
  245. $uploaded = $product->uploads()->update($uploadData);
  246. }
  247. }
  248. }