ProduitController.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434
  1. <?php
  2. namespace App\Http\Controllers\backend;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use App\Models\Produit;
  6. use App\Models\Categorie;
  7. use App\Models\Media;
  8. use App\Models\Promotion;
  9. use App\Models\CategorieProduit;
  10. use Illuminate\Support\Facades\Redirect;
  11. use App\Models\temporaryFile;
  12. use Illuminate\Support\Facades\Storage;
  13. class ProduitController extends Controller
  14. {
  15. public function __construct()
  16. {
  17. return $this->middleware(['auth', 'verified']);
  18. }
  19. public function Index()
  20. {
  21. $articles = Produit::paginate(5);
  22. return view("backend.produit.index", compact('articles'));
  23. }
  24. public function create()
  25. {
  26. $categories = Categorie::select('nom', 'id')->oldest('nom')->get();
  27. return view('backend.produit.add', compact('categories'));
  28. }
  29. public function store(Request $request)
  30. {
  31. request()->validate([
  32. 'nom' => 'required',
  33. 'description' => 'required',
  34. 'description' => 'required',
  35. 'image' => 'required'
  36. ]);
  37. $tmp_file = temporaryFile::where('folder', $request->image)->first();
  38. if ($tmp_file) {
  39. Storage::copy('image/tmp/' . $tmp_file->folder . '/' . $tmp_file->file, 'image/' . $tmp_file->folder . '/' . $tmp_file->file);
  40. if ($request->filled('titre_seo')) {
  41. $article = Produit::create(
  42. [
  43. 'nom' => $request->nom,
  44. 'description' => $request->description,
  45. 'titre_seo' => $request->titre_seo,
  46. 'resume_seo' => $request->resume_seo,
  47. 'mot_cle' => $request->mot_cle,
  48. 'prix' => $request->prix,
  49. 'prix_etat' => $request->prix_etat,
  50. 'image' => $tmp_file->folder . '/' . $tmp_file->file,
  51. ],
  52. );
  53. }else{
  54. $article = Produit::create(
  55. [
  56. 'nom' => $request->nom,
  57. 'description' => $request->description,
  58. 'titre_seo' => $request->nom,
  59. 'resume_seo' => strip_tags( $request->description),
  60. 'mot_cle' => $request->mot_cle,
  61. 'prix' => $request->prix,
  62. 'prix_etat' => $request->input('prix_etat', '0'),
  63. 'image' => $tmp_file->folder . '/' . $tmp_file->file,
  64. ],
  65. );
  66. }
  67. $article->categories()->sync((array)$request->input('categories'));
  68. Storage::deleteDirectory('diapo/tmp/' . $tmp_file->folder);
  69. $tmp_file->delete();
  70. }
  71. return redirect()->route('produits');
  72. }
  73. public function show($id)
  74. {
  75. $article = Produit::find($id);
  76. $diapos = Media::where('produit_id', '=', $article->id)->get();
  77. if ($article->document != null) {
  78. $size = Storage::size('document/' . $article->document);
  79. $file_size = $size * 0.0009765625;
  80. $sizeFile = number_format($file_size, 0);
  81. $infoPath = pathinfo(public_path('document/' . $article->document));
  82. $extension = $infoPath['extension'];
  83. return view('backend.produit.show', compact('article', 'diapos', 'extension', 'sizeFile'));
  84. }
  85. return view('backend.produit.show', compact('article', 'diapos'));
  86. }
  87. public function edit($id)
  88. {
  89. $article = Produit::find($id);
  90. $categories = Categorie::select('nom', 'id')->oldest('nom')->get();
  91. return view('backend.produit.edit', ['article' => $article], compact('categories'));
  92. }
  93. public function update(Request $request, $id)
  94. {
  95. request()->validate([
  96. 'nom' => 'required',
  97. 'description' => 'required',
  98. 'categories' => 'required',
  99. ]);
  100. $article = Produit::find($id);
  101. $article->nom = $request->input('nom');
  102. $article->prix = $request->input('prix');
  103. $article->prix_etat = $request->input('prix_etat', '0');
  104. // dd( $article->prix_etat);
  105. $article->description = $request->input('description');
  106. if ($request->filled('titre_seo')) {
  107. $article->titre_seo = $request->input('titre_seo');
  108. }else{
  109. $article->titre_seo = $request->input('titre');
  110. }
  111. if ($request->filled('resume_seo')) {
  112. $article->resume_seo = $request->input('resume_seo');
  113. }else{
  114. $article->resume_seo = strip_tags( $request->input('description'));
  115. }
  116. $article->mot_cle = $request->input('mot_cle');
  117. $article->categories()->sync((array)$request->input('categories'));
  118. $tmp_file = temporaryFile::where('folder', $request->image)->first();
  119. if ($tmp_file) {
  120. Storage::copy('image/tmp/' . $tmp_file->folder . '/' . $tmp_file->file, 'image/' . $tmp_file->folder . '/' . $tmp_file->file);
  121. $article->update([
  122. "image" => $tmp_file->folder . '/' . $tmp_file->file
  123. ]);
  124. Storage::deleteDirectory('diapo/tmp/' . $tmp_file->folder);
  125. $tmp_file->delete();
  126. }
  127. $article->created_at = \Carbon\Carbon::now();
  128. $article->save();
  129. return redirect()->route('produits')->with('success', 'Modifié');
  130. }
  131. public function diapo($id)
  132. {
  133. $article = Produit::find($id);
  134. return view('backend.produit.extension.diapo', ['article' => $article]);
  135. }
  136. public function updateDiapo(Request $request, $id)
  137. {
  138. request()->validate([
  139. 'diapo' => 'required',
  140. ]);
  141. $tmp_file = temporaryFile::where('folder', $request->diapo)->first();
  142. $article = Produit::find($id);
  143. if ($tmp_file) {
  144. Storage::copy('diapo/tmp/' . $tmp_file->folder . '/' . $tmp_file->file, 'diapo/' . $tmp_file->folder . '/' . $tmp_file->file);
  145. Media::create(
  146. [
  147. 'produit_id' => $article->id,
  148. 'diapo' => $tmp_file->folder . '/' . $tmp_file->file,
  149. ],
  150. );
  151. Storage::deleteDirectory('diapo/tmp/' . $tmp_file->folder);
  152. $tmp_file->delete();
  153. return back()->with('success', 'Image ajouter');
  154. }
  155. $article->save();
  156. }
  157. public function destroyMedia(Request $request, $id)
  158. {
  159. $diapo = Media::find($id);
  160. $diapo->delete();
  161. return back();
  162. }
  163. public function destroyProduit(Request $request, $id)
  164. {
  165. // $article = Produit::find($id);
  166. // $article->delete();
  167. // return back();
  168. $promo = Promotion::where('produit_id', $id)->count();
  169. if ($promo > 0) {
  170. return redirect('idara/produits')
  171. ->with('message', 'Produit existe dans une promotion');
  172. } else {
  173. $article = Produit::find($id);
  174. $article->delete();
  175. return Redirect::to('idara/produits')
  176. ->with('message', 'produit supprimée');
  177. }
  178. return back();
  179. }
  180. public function fileUploadProduit(Request $request)
  181. {
  182. if ($request->hasfile('image')) {
  183. $image = $request->file('image');
  184. $file = $image->getClientOriginalName();
  185. $folder = uniqid('post', 'true');
  186. $image->storeAs('image/tmp/' . $folder, $file, 'public');
  187. TemporaryFile::create([
  188. 'folder' => $folder,
  189. 'file' => $file
  190. ]);
  191. return $folder;
  192. }
  193. return '';
  194. }
  195. public function fileDeleteProduit()
  196. {
  197. $tmp_file = TemporaryFile::where('folder', request()->getContent())->first();
  198. if ($tmp_file) {
  199. Storage::deleteDirectory('image/tmp/' . $tmp_file->folder);
  200. $tmp_file->delete();
  201. return response('');
  202. }
  203. }
  204. public function fileUpload(Request $request)
  205. {
  206. if ($request->hasfile('diapo')) {
  207. $diapo = $request->file('diapo');
  208. $file = $diapo->getClientOriginalName();
  209. $folder = uniqid('post', 'true');
  210. $diapo->storeAs('diapo/tmp/' . $folder, $file, 'public');
  211. TemporaryFile::create([
  212. 'folder' => $folder,
  213. 'file' => $file
  214. ]);
  215. return $folder;
  216. }
  217. return '';
  218. }
  219. public function deleteUpload()
  220. {
  221. $tmp_file = TemporaryFile::where('folder', request()->getContent())->first();
  222. if ($tmp_file) {
  223. Storage::deleteDirectory('diapo/tmp/' . $tmp_file->folder);
  224. $tmp_file->delete();
  225. return response('');
  226. }
  227. }
  228. public function changeStatus(Request $request)
  229. {
  230. $article = Produit::find($request->Id);
  231. $article->etat = $request->etat;
  232. // dd( $article->etat);
  233. $article->save();
  234. return response()->json(['success' => 'Status change successfully.']);
  235. }
  236. public function homeStatus(Request $request)
  237. {
  238. $article = Produit::find($request->Id);
  239. $article->home = $request->home;
  240. $article->save();
  241. return response()->json(['success' => 'Status change successfully.']);
  242. }
  243. //doc
  244. public function editDoc($id)
  245. {
  246. $article = Produit::find($id);
  247. return view('backend.produit.extension.document', ['article' => $article]);
  248. }
  249. public function updateDoc(Request $request, $id)
  250. {
  251. request()->validate([
  252. 'document' => 'required',
  253. ]);
  254. $tmp_file = temporaryFile::where('folder', $request->document)->first();
  255. $article = Produit::find($id);
  256. if ($tmp_file) {
  257. Storage::copy('document/tmp/' . $tmp_file->folder . '/' . $tmp_file->file, 'document/' . $tmp_file->folder . '/' . $tmp_file->file);
  258. $article->update([
  259. "document" => $tmp_file->folder . '/' . $tmp_file->file
  260. ]);
  261. Storage::deleteDirectory('document/tmp/' . $tmp_file->folder);
  262. $tmp_file->delete();
  263. }
  264. $article->save();
  265. return redirect()->route('produit.idara.show', ['id' => $article])->with('success', 'Document Ajouter');
  266. }
  267. public function docUpload(Request $request)
  268. {
  269. if ($request->hasfile('document')) {
  270. $document = $request->file('document');
  271. $file = $document->getClientOriginalName();
  272. $folder = uniqid('post', 'true');
  273. $document->storeAs('document/tmp/' . $folder, $file, 'public');
  274. TemporaryFile::create([
  275. 'folder' => $folder,
  276. 'file' => $file
  277. ]);
  278. return $folder;
  279. }
  280. return '';
  281. }
  282. public function docUploadDelete()
  283. {
  284. $tmp_file = TemporaryFile::where('folder', request()->getContent())->first();
  285. if ($tmp_file) {
  286. Storage::deleteDirectory('document/tmp/' . $tmp_file->folder);
  287. $tmp_file->delete();
  288. return response('');
  289. }
  290. }
  291. public function downloadDoc(Produit $produit)
  292. {
  293. return Storage::download('document/' . $produit->document);
  294. }
  295. public function deleteDoc(Request $request)
  296. {
  297. $article = Produit::find($request->id);
  298. Storage::disk('public')->delete($article->document);
  299. Produit::where('document', $article->document)->update(['document' => (new \App\Models\Produit)->defaultDoc()]);
  300. // unlink("storage/".$presentation->image);
  301. // Presentation::select("image", $presentation->image)->delete();
  302. return back()->with("success", "Document deleted successfully.");
  303. }
  304. }