CategoryController.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Models\Category;
  5. use App\Models\Product;
  6. use App\Models\CategoryTranslation;
  7. use App\Utility\CategoryUtility;
  8. use Illuminate\Support\Str;
  9. use Cache;
  10. class CategoryController extends Controller
  11. {
  12. /**
  13. * Display a listing of the resource.
  14. *
  15. * @return \Illuminate\Http\Response
  16. */
  17. public function index(Request $request)
  18. {
  19. $sort_search =null;
  20. $categories = Category::orderBy('order_level', 'desc');
  21. if ($request->has('search')){
  22. $sort_search = $request->search;
  23. $categories = $categories->where('name', 'like', '%'.$sort_search.'%');
  24. }
  25. $categories = $categories->paginate(15);
  26. return view('backend.product.categories.index', compact('categories', 'sort_search'));
  27. }
  28. /**
  29. * Show the form for creating a new resource.
  30. *
  31. * @return \Illuminate\Http\Response
  32. */
  33. public function create()
  34. {
  35. $categories = Category::where('parent_id', 0)
  36. ->with('childrenCategories')
  37. ->get();
  38. return view('backend.product.categories.create', compact('categories'));
  39. }
  40. /**
  41. * Store a newly created resource in storage.
  42. *
  43. * @param \Illuminate\Http\Request $request
  44. * @return \Illuminate\Http\Response
  45. */
  46. public function store(Request $request)
  47. {
  48. $category = new Category;
  49. $category->name = $request->name;
  50. $category->order_level = 0;
  51. if($request->order_level != null) {
  52. $category->order_level = $request->order_level;
  53. }
  54. $category->digital = $request->digital;
  55. $category->banner = $request->banner;
  56. $category->icon = $request->icon;
  57. $category->meta_title = $request->meta_title;
  58. $category->meta_description = $request->meta_description;
  59. if ($request->parent_id != "0") {
  60. $category->parent_id = $request->parent_id;
  61. $parent = Category::find($request->parent_id);
  62. $category->level = $parent->level + 1 ;
  63. }
  64. if ($request->slug != null) {
  65. $category->slug = preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', $request->slug));
  66. }
  67. else {
  68. $category->slug = preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', $request->name)).'-'.Str::random(5);
  69. }
  70. if ($request->commision_rate != null) {
  71. $category->commision_rate = $request->commision_rate;
  72. }
  73. $category->save();
  74. $category->attributes()->sync($request->filtering_attributes);
  75. $category_translation = CategoryTranslation::firstOrNew(['lang' => env('DEFAULT_LANGUAGE'), 'category_id' => $category->id]);
  76. $category_translation->name = $request->name;
  77. $category_translation->save();
  78. flash(translate('Category has been inserted successfully'))->success();
  79. return redirect()->route('categories.index');
  80. }
  81. /**
  82. * Display the specified resource.
  83. *
  84. * @param int $id
  85. * @return \Illuminate\Http\Response
  86. */
  87. public function show($id)
  88. {
  89. //
  90. }
  91. /**
  92. * Show the form for editing the specified resource.
  93. *
  94. * @param int $id
  95. * @return \Illuminate\Http\Response
  96. */
  97. public function edit(Request $request, $id)
  98. {
  99. $lang = $request->lang;
  100. $category = Category::findOrFail($id);
  101. $categories = Category::where('parent_id', 0)
  102. ->with('childrenCategories')
  103. ->whereNotIn('id', CategoryUtility::children_ids($category->id, true))->where('id', '!=' , $category->id)
  104. ->orderBy('name','asc')
  105. ->get();
  106. return view('backend.product.categories.edit', compact('category', 'categories', 'lang'));
  107. }
  108. /**
  109. * Update the specified resource in storage.
  110. *
  111. * @param \Illuminate\Http\Request $request
  112. * @param int $id
  113. * @return \Illuminate\Http\Response
  114. */
  115. public function update(Request $request, $id)
  116. {
  117. $category = Category::findOrFail($id);
  118. if($request->lang == env("DEFAULT_LANGUAGE")){
  119. $category->name = $request->name;
  120. }
  121. if($request->order_level != null) {
  122. $category->order_level = $request->order_level;
  123. }
  124. $category->digital = $request->digital;
  125. $category->banner = $request->banner;
  126. $category->icon = $request->icon;
  127. $category->meta_title = $request->meta_title;
  128. $category->meta_description = $request->meta_description;
  129. $previous_level = $category->level;
  130. if ($request->parent_id != "0") {
  131. $category->parent_id = $request->parent_id;
  132. $parent = Category::find($request->parent_id);
  133. $category->level = $parent->level + 1 ;
  134. }
  135. else{
  136. $category->parent_id = 0;
  137. $category->level = 0;
  138. }
  139. if($category->level > $previous_level){
  140. CategoryUtility::move_level_down($category->id);
  141. }
  142. elseif ($category->level < $previous_level) {
  143. CategoryUtility::move_level_up($category->id);
  144. }
  145. if ($request->slug != null) {
  146. $category->slug = strtolower($request->slug);
  147. }
  148. else {
  149. $category->slug = preg_replace('/[^A-Za-z0-9\-]/', '', str_replace(' ', '-', $request->name)).'-'.Str::random(5);
  150. }
  151. if ($request->commision_rate != null) {
  152. $category->commision_rate = $request->commision_rate;
  153. }
  154. $category->save();
  155. $category->attributes()->sync($request->filtering_attributes);
  156. $category_translation = CategoryTranslation::firstOrNew(['lang' => $request->lang, 'category_id' => $category->id]);
  157. $category_translation->name = $request->name;
  158. $category_translation->save();
  159. Cache::forget('featured_categories');
  160. flash(translate('Category has been updated successfully'))->success();
  161. return back();
  162. }
  163. /**
  164. * Remove the specified resource from storage.
  165. *
  166. * @param int $id
  167. * @return \Illuminate\Http\Response
  168. */
  169. public function destroy($id)
  170. {
  171. $category = Category::findOrFail($id);
  172. $category->attributes()->detach();
  173. // Category Translations Delete
  174. foreach ($category->category_translations as $key => $category_translation) {
  175. $category_translation->delete();
  176. }
  177. foreach (Product::where('category_id', $category->id)->get() as $product) {
  178. $product->category_id = null;
  179. $product->save();
  180. }
  181. CategoryUtility::delete_category($id);
  182. Cache::forget('featured_categories');
  183. flash(translate('Category has been deleted successfully'))->success();
  184. return redirect()->route('categories.index');
  185. }
  186. public function updateFeatured(Request $request)
  187. {
  188. $category = Category::findOrFail($request->id);
  189. $category->featured = $request->status;
  190. $category->save();
  191. Cache::forget('featured_categories');
  192. return 1;
  193. }
  194. }