ReportController.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Http\Controllers\Account;
  3. use App\Models\Answer;
  4. use App\Models\Article;
  5. use App\Models\Question;
  6. use App\Models\Report;
  7. use Illuminate\Http\Request;
  8. use App\Http\Controllers\Controller;
  9. class ReportController extends Controller
  10. {
  11. /**
  12. * 举报问题、文章、回答等
  13. * @param \Illuminate\Http\Request $request
  14. * @return
  15. */
  16. public function store(Request $request)
  17. {
  18. $requestData = $request->all();
  19. $source_id = $requestData['source_id'];
  20. $source_type = $requestData['source_type'];
  21. $subject = '';
  22. if ($source_type == 'question') {
  23. $source = Question::find($source_id);
  24. $subject = $source->title;
  25. } else if ($source_type == 'article') {
  26. $source = Article::find($source_id);
  27. $subject = $source->title;
  28. } else if ($source_type == 'answer') {
  29. $source = Answer::find($source_id);
  30. $subject = str_limit(strip_tags($source->content), 255);
  31. }
  32. if ( !$source) {
  33. abort(404);
  34. }
  35. // 同一类型、同一用户举报限制三次
  36. $count = Report::where('user_id',$request->user()->id)->where('source_type',get_class($source))->where('source_id',$source_id)->count();
  37. if ($count >= 3){
  38. if ($source_type == 'question'){
  39. return $this->error(route('ask.question.detail',['id'=>$source_id]),'您已举报超过三次,请耐心等待管理员处理');
  40. }elseif ($source_type == 'article'){
  41. return $this->error(route('blog.article.detail',['id'=>$source_id]),'您已举报超过三次,请耐心等待管理员处理');
  42. }elseif ($source_type == 'answer'){
  43. return $this->error(route('ask.question.detail',['id'=>$source->question_id]),'您已举报超过三次,请耐心等待管理员处理');
  44. }
  45. }
  46. $data = [
  47. 'user_id' => $request->user()->id,
  48. 'source_id' => $source_id,
  49. 'subject' => $subject,
  50. 'source_type' => get_class($source),
  51. 'report_type' => $request->input('report_type'),
  52. 'reason' => $request->input('reason', ''),
  53. ];
  54. Report::create($data);
  55. if ($source_type == 'question'){
  56. return $this->success(route('ask.question.detail',['id'=>$source_id]),'举报成功!');
  57. }elseif ($source_type == 'article'){
  58. return $this->success(route('blog.article.detail',['id'=>$source_id]),'举报成功!');
  59. }elseif ($source_type == 'answer'){
  60. return $this->success(route('ask.question.detail',['id'=>$source->question_id]),'举报成功!');
  61. }
  62. }
  63. }