TicketCategoryController.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Ticket;
  5. use App\Models\TicketCategory;
  6. use Illuminate\Http\Request;
  7. class TicketCategoryController extends Controller
  8. {
  9. const READ_PERMISSION = "admin.tickets.read";
  10. const WRITE_PERMISSION = "admin.tickets.write";
  11. /**
  12. *
  13. * Display a listing of the resource.
  14. *
  15. * @return \Illuminate\Http\Response
  16. */
  17. public function index()
  18. {
  19. $this->checkPermission(self::READ_PERMISSION);
  20. $categories = TicketCategory::all();
  21. return view('admin.ticket.category')->with("categories",$categories);
  22. }
  23. /**
  24. * Store a newly created resource in storage.
  25. *
  26. * @param \Illuminate\Http\Request $request
  27. * @return \Illuminate\Http\Response
  28. */
  29. public function store(Request $request)
  30. {
  31. $this->checkPermission(self::WRITE_PERMISSION);
  32. $request->validate([
  33. 'name' => 'required|string|max:191',
  34. ]);
  35. TicketCategory::create($request->all());
  36. return redirect(route("admin.ticket.category.index"))->with("success",__("Category created"));
  37. }
  38. /**
  39. * Update the specified resource in storage.
  40. *
  41. * @param \Illuminate\Http\Request $request
  42. * @return \Illuminate\Http\Response
  43. */
  44. public function update(Request $request)
  45. {
  46. $this->checkPermission(self::WRITE_PERMISSION);
  47. $request->validate([
  48. 'category' => 'required|int',
  49. 'name' => 'required|string|max:191',
  50. ]);
  51. $category = TicketCategory::where("id",$request->category)->firstOrFail();
  52. $category->name = $request->name;
  53. $category->save();
  54. return redirect()->back()->with("success",__("Category name updated"));
  55. }
  56. /**
  57. * Remove the specified resource from storage.
  58. *
  59. * @param int $id
  60. * @return \Illuminate\Http\Response
  61. */
  62. public function destroy($id)
  63. {
  64. $this->checkPermission(self::WRITE_PERMISSION);
  65. $category = TicketCategory::where("id",$id)->firstOrFail();
  66. if($category->id == 5 ){ //cannot delete "other" category
  67. return back()->with("error","You cannot delete that category");
  68. }
  69. $tickets = Ticket::where("ticketcategory_id",$category->id)->get();
  70. foreach($tickets as $ticket){
  71. $ticket->ticketcategory_id = "5";
  72. $ticket->save();
  73. }
  74. $category->delete();
  75. return redirect()
  76. ->route('admin.ticket.category.index')
  77. ->with('success', __('Category removed'));
  78. }
  79. public function datatable()
  80. {
  81. $query = TicketCategory::withCount("tickets");
  82. return datatables($query)
  83. ->addColumn('name', function ( TicketCategory $category) {
  84. return $category->name;
  85. })
  86. ->editColumn('tickets', function ( TicketCategory $category) {
  87. return $category->tickets_count;
  88. })
  89. ->addColumn('actions', function (TicketCategory $category) {
  90. return '
  91. <form class="d-inline" onsubmit="return submitResult();" method="post" action="'.route('admin.ticket.category.destroy', $category->id).'">
  92. '.csrf_field().'
  93. '.method_field('DELETE').'
  94. <button data-content="'.__('Delete').'" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm btn-danger mr-1"><i class="fas fa-trash"></i></button>
  95. </form>
  96. ';
  97. })
  98. ->editColumn('created_at', function (TicketCategory $category) {
  99. return $category->created_at ? $category->created_at->diffForHumans() : '';
  100. })
  101. ->rawColumns(['actions'])
  102. ->make();
  103. }
  104. }