ProductController.php 13 KB

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