TicketController.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. namespace App\Controllers\Admin;
  3. use App\Models\Ticket;
  4. use App\Models\User;
  5. use voku\helper\AntiXSS;
  6. use App\Services\Auth;
  7. use App\Services\Mail;
  8. use App\Services\Config;
  9. use Ozdemir\Datatables\Datatables;
  10. use App\Utils\DatatablesHelper;
  11. use App\Controllers\AdminController;
  12. class TicketController extends AdminController
  13. {
  14. public function index($request, $response, $args)
  15. {
  16. $table_config['total_column'] = array("op" => "操作", "id" => "ID",
  17. "datetime" => "时间", "title" => "标题", "userid" => "用户ID",
  18. "user_name" => "用户名", "status" => "状态");
  19. $table_config['default_show_column'] = array("op", "id",
  20. "datetime", "title", "userid", "user_name", "status");
  21. $table_config['ajax_url'] = 'ticket/ajax';
  22. return $this->view()->assign('table_config', $table_config)->display('admin/ticket/index.tpl');
  23. }
  24. public function update($request, $response, $args)
  25. {
  26. $id = $args['id'];
  27. $content = $request->getParam('content');
  28. $status = $request->getParam('status');
  29. if ($content==""||$status=="") {
  30. $res['ret'] = 0;
  31. $res['msg'] = "请填全";
  32. return $this->echoJson($response, $res);
  33. }
  34. if (strpos($content, "admin")!=false||strpos($content, "user")!=false) {
  35. $res['ret'] = 0;
  36. $res['msg'] = "请求中有不正当的词语。";
  37. return $this->echoJson($response, $res);
  38. }
  39. $ticket_main=Ticket::where("id", "=", $id)->where("rootid", "=", 0)->first();
  40. //if($status==1&&$ticket_main->status!=$status)
  41. {
  42. $adminUser = User::where("id", "=", $ticket_main->userid)->get();
  43. foreach ($adminUser as $user) {
  44. $subject = Config::get('appName')."-工单被回复";
  45. $to = $user->email;
  46. $text = "您好,有人回复了<a href=\"".Config::get('baseUrl')."/user/ticket/".$ticket_main->id."/view\">工单</a>,请您查看。" ;
  47. try {
  48. Mail::send($to, $subject, 'news/warn.tpl', [
  49. "user" => $user,"text" => $text
  50. ], [
  51. ]);
  52. } catch (Exception $e) {
  53. echo $e->getMessage();
  54. }
  55. }
  56. }
  57. $antiXss = new AntiXSS();
  58. $ticket=new Ticket();
  59. $ticket->title=$antiXss->xss_clean($ticket_main->title);
  60. $ticket->content=$antiXss->xss_clean($content);
  61. $ticket->rootid=$ticket_main->id;
  62. $ticket->userid=Auth::getUser()->id;
  63. $ticket->datetime=time();
  64. $ticket_main->status=$status;
  65. $ticket_main->save();
  66. $ticket->save();
  67. $res['ret'] = 1;
  68. $res['msg'] = "提交成功";
  69. return $this->echoJson($response, $res);
  70. }
  71. public function show($request, $response, $args)
  72. {
  73. $id = $args['id'];
  74. $pageNum = 1;
  75. if (isset($request->getQueryParams()["page"])) {
  76. $pageNum = $request->getQueryParams()["page"];
  77. }
  78. $ticketset=Ticket::where("id", $id)->orWhere("rootid", "=", $id)->orderBy("datetime", "desc")->paginate(5, ['*'], 'page', $pageNum);
  79. $ticketset->setPath('/admin/ticket/'.$id."/view");
  80. return $this->view()->assign('ticketset', $ticketset)->assign("id", $id)->display('admin/ticket/view.tpl');
  81. }
  82. public function ajax($request, $response, $args)
  83. {
  84. $datatables = new Datatables(new DatatablesHelper());
  85. $datatables->query('Select ticket.id as op,ticket.id,ticket.datetime,ticket.title,ticket.userid,user.user_name,ticket.status from ticket,user where ticket.userid = user.id and ticket.rootid = 0');
  86. $datatables->edit('op', function ($data) {
  87. return '<a class="btn btn-brand" href="/admin/ticket/'.$data['id'].'/view">查看</a>';
  88. });
  89. $datatables->edit('datetime', function ($data) {
  90. return date('Y-m-d H:i:s', $data['datetime']);
  91. });
  92. $datatables->edit('status', function ($data) {
  93. return $data['status'] == 1 ? '开启' : '关闭';
  94. });
  95. $body = $response->getBody();
  96. $body->write($datatables->generate());
  97. }
  98. }