TicketsController.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <?php
  2. namespace App\Http\Controllers\Moderation;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Server;
  5. use App\Models\Ticket;
  6. use App\Models\TicketBlacklist;
  7. use App\Models\TicketCategory;
  8. use App\Models\TicketComment;
  9. use App\Models\User;
  10. use App\Notifications\Ticket\User\ReplyNotification;
  11. use Illuminate\Http\Request;
  12. use Illuminate\Support\Facades\Auth;
  13. class TicketsController extends Controller
  14. {
  15. public function index()
  16. {
  17. $tickets = Ticket::orderBy('id', 'desc')->paginate(10);
  18. $ticketcategories = TicketCategory::all();
  19. return view('moderator.ticket.index', compact('tickets', 'ticketcategories'));
  20. }
  21. public function show($ticket_id)
  22. {
  23. $ticket = Ticket::where('ticket_id', $ticket_id)->firstOrFail();
  24. $ticketcomments = $ticket->ticketcomments;
  25. $ticketcategory = $ticket->ticketcategory;
  26. $server = Server::where('id', $ticket->server)->first();
  27. return view('moderator.ticket.show', compact('ticket', 'ticketcategory', 'ticketcomments', 'server'));
  28. }
  29. public function close($ticket_id)
  30. {
  31. $ticket = Ticket::where('ticket_id', $ticket_id)->firstOrFail();
  32. $ticket->status = 'Closed';
  33. $ticket->save();
  34. $ticketOwner = $ticket->user;
  35. return redirect()->back()->with('success', __('A ticket has been closed, ID: #').$ticket->ticket_id);
  36. }
  37. public function delete($ticket_id)
  38. {
  39. $ticket = Ticket::where('ticket_id', $ticket_id)->firstOrFail();
  40. TicketComment::where('ticket_id', $ticket->id)->delete();
  41. $ticket->delete();
  42. return redirect()->back()->with('success', __('A ticket has been deleted, ID: #').$ticket_id);
  43. }
  44. public function reply(Request $request)
  45. {
  46. $this->validate($request, ['ticketcomment' => 'required']);
  47. $ticket = Ticket::where('id', $request->input('ticket_id'))->firstOrFail();
  48. $ticket->status = 'Answered';
  49. $ticket->update();
  50. TicketComment::create([
  51. 'ticket_id' => $request->input('ticket_id'),
  52. 'user_id' => Auth::user()->id,
  53. 'ticketcomment' => $request->input('ticketcomment'),
  54. ]);
  55. $user = User::where('id', $ticket->user_id)->firstOrFail();
  56. $newmessage = $request->input('ticketcomment');
  57. $user->notify(new ReplyNotification($ticket, $user, $newmessage));
  58. return redirect()->back()->with('success', __('Your comment has been submitted'));
  59. }
  60. public function dataTable()
  61. {
  62. $query = Ticket::query();
  63. return datatables($query)
  64. ->addColumn('category', function (Ticket $tickets) {
  65. return $tickets->ticketcategory->name;
  66. })
  67. ->editColumn('title', function (Ticket $tickets) {
  68. return '<a class="text-info" href="'.route('moderator.ticket.show', ['ticket_id' => $tickets->ticket_id]).'">'.'#'.$tickets->ticket_id.' - '.$tickets->title.'</a>';
  69. })
  70. ->editColumn('user_id', function (Ticket $tickets) {
  71. return '<a href="'.route('admin.users.show', $tickets->user->id).'">'.$tickets->user->name.'</a>';
  72. })
  73. ->addColumn('actions', function (Ticket $tickets) {
  74. return '
  75. <a data-content="'.__('View').'" data-toggle="popover" data-trigger="hover" data-placement="top" href="'.route('moderator.ticket.show', ['ticket_id' => $tickets->ticket_id]).'" class="btn btn-sm text-white btn-info mr-1"><i class="fas fa-eye"></i></a>
  76. <form class="d-inline" method="post" action="'.route('moderator.ticket.close', ['ticket_id' => $tickets->ticket_id]).'">
  77. '.csrf_field().'
  78. '.method_field('POST').'
  79. <button data-content="'.__('Close').'" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm text-white btn-warning mr-1"><i class="fas fa-times"></i></button>
  80. </form>
  81. <form class="d-inline" method="post" action="'.route('moderator.ticket.delete', ['ticket_id' => $tickets->ticket_id]).'">
  82. '.csrf_field().'
  83. '.method_field('POST').'
  84. <button data-content="'.__('Delete').'" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm text-white btn-danger mr-1"><i class="fas fa-trash"></i></button>
  85. </form>
  86. ';
  87. })
  88. ->editColumn('status', function (Ticket $tickets) {
  89. switch ($tickets->status) {
  90. case 'Open':
  91. $badgeColor = 'badge-success';
  92. break;
  93. case 'Closed':
  94. $badgeColor = 'badge-danger';
  95. break;
  96. case 'Answered':
  97. $badgeColor = 'badge-info';
  98. break;
  99. default:
  100. $badgeColor = 'badge-warning';
  101. break;
  102. }
  103. return '<span class="badge '.$badgeColor.'">'.$tickets->status.'</span>';
  104. })
  105. ->editColumn('updated_at', function (Ticket $tickets) {
  106. return $tickets->updated_at ? $tickets->updated_at->diffForHumans() : '';
  107. })
  108. ->rawColumns(['category', 'title', 'user_id', 'status', 'updated_at', 'actions'])
  109. ->make(true);
  110. }
  111. public function blacklist()
  112. {
  113. return view('moderator.ticket.blacklist');
  114. }
  115. public function blacklistAdd(Request $request)
  116. {
  117. $user = User::where('id', $request->user_id)->first();
  118. $check = TicketBlacklist::where('user_id', $user->id)->first();
  119. if ($check) {
  120. $check->reason = $request->reason;
  121. $check->status = 'True';
  122. $check->save();
  123. return redirect()->back()->with('info', __('Target User already in blacklist. Reason updated'));
  124. }
  125. TicketBlacklist::create([
  126. 'user_id' => $user->id,
  127. 'status' => 'True',
  128. 'reason' => $request->reason,
  129. ]);
  130. return redirect()->back()->with('success', __('Successfully add User to blacklist, User name: '.$user->name));
  131. }
  132. public function blacklistDelete($id)
  133. {
  134. $blacklist = TicketBlacklist::where('id', $id)->first();
  135. $blacklist->delete();
  136. return redirect()->back()->with('success', __('Successfully remove User from blacklist, User name: '.$blacklist->user->name));
  137. }
  138. public function blacklistChange($id)
  139. {
  140. $blacklist = TicketBlacklist::where('id', $id)->first();
  141. if ($blacklist->status == 'True') {
  142. $blacklist->status = 'False';
  143. } else {
  144. $blacklist->status = 'True';
  145. }
  146. $blacklist->update();
  147. return redirect()->back()->with('success', __('Successfully change status blacklist from, User name: '.$blacklist->user->name));
  148. }
  149. public function dataTableBlacklist()
  150. {
  151. $query = TicketBlacklist::with(['user']);
  152. $query->select('ticket_blacklists.*');
  153. return datatables($query)
  154. ->editColumn('user', function (TicketBlacklist $blacklist) {
  155. return '<a href="'.route('admin.users.show', $blacklist->user->id).'">'.$blacklist->user->name.'</a>';
  156. })
  157. ->editColumn('status', function (TicketBlacklist $blacklist) {
  158. switch ($blacklist->status) {
  159. case 'True':
  160. $text = 'Blocked';
  161. $badgeColor = 'badge-danger';
  162. break;
  163. default:
  164. $text = 'Unblocked';
  165. $badgeColor = 'badge-success';
  166. break;
  167. }
  168. return '<span class="badge '.$badgeColor.'">'.$text.'</span>';
  169. })
  170. ->editColumn('reason', function (TicketBlacklist $blacklist) {
  171. return $blacklist->reason;
  172. })
  173. ->addColumn('actions', function (TicketBlacklist $blacklist) {
  174. return '
  175. <form class="d-inline" method="post" action="'.route('moderator.ticket.blacklist.change', ['id' => $blacklist->id]).'">
  176. '.csrf_field().'
  177. '.method_field('POST').'
  178. <button data-content="'.__('Change Status').'" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm text-white btn-warning mr-1"><i class="fas fa-sync-alt"></i></button>
  179. </form>
  180. <form class="d-inline" method="post" action="'.route('moderator.ticket.blacklist.delete', ['id' => $blacklist->id]).'">
  181. '.csrf_field().'
  182. '.method_field('POST').'
  183. <button data-content="'.__('Delete').'" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm text-white btn-danger mr-1"><i class="fas fa-trash"></i></button>
  184. </form>
  185. ';
  186. })
  187. ->editColumn('created_at', function (TicketBlacklist $blacklist) {
  188. return $blacklist->created_at ? $blacklist->created_at->diffForHumans() : '';
  189. })
  190. ->rawColumns(['user', 'status', 'reason', 'created_at', 'actions'])
  191. ->make(true);
  192. }
  193. }