ProduitController.php 11 KB

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