diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index c775d9377..832cb88c9 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -2,12 +2,25 @@ namespace App\Http\Controllers; +use Auth; use Illuminate\Http\Request; +use App\{Avatar, Profile, Report, Status, User}; class ReportController extends Controller { + protected $profile; + + public function __construct() + { + $this->middleware('auth'); + } + public function showForm(Request $request) { + $this->validate($request, [ + 'type' => 'required|alpha_dash', + 'id' => 'required|integer|min:1' + ]); return view('report.form'); } @@ -35,4 +48,92 @@ class ReportController extends Controller { return view('report.spam.profile'); } + + public function sensitiveCommentForm(Request $request) + { + return view('report.sensitive.comment'); + } + + public function sensitivePostForm(Request $request) + { + return view('report.sensitive.post'); + } + + public function sensitiveProfileForm(Request $request) + { + return view('report.sensitive.profile'); + } + + public function abusiveCommentForm(Request $request) + { + return view('report.abusive.comment'); + } + + public function abusivePostForm(Request $request) + { + return view('report.abusive.post'); + } + + public function abusiveProfileForm(Request $request) + { + return view('report.abusive.profile'); + } + + public function formStore(Request $request) + { + $this->validate($request, [ + 'report' => 'required|alpha_dash', + 'type' => 'required|alpha_dash', + 'id' => 'required|integer|min:1', + 'msg' => 'nullable|string|max:150' + ]); + + $profile = Auth::user()->profile; + $reportType = $request->input('report'); + $object_id = $request->input('id'); + $object_type = $request->input('type'); + $msg = $request->input('msg'); + $object = null; + $types = ['spam', 'sensitive', 'abusive']; + + if(!in_array($reportType, $types)) { + return redirect('/timeline')->with('error', 'Invalid report type'); + } + + switch ($object_type) { + case 'post': + $object = Status::findOrFail($object_id); + $object_type = 'App\Status'; + $exists = Report::whereUserId(Auth::id()) + ->whereObjectId($object->id) + ->whereObjectType('App\Status') + ->count(); + break; + + default: + return redirect('/timeline')->with('error', 'Invalid report type'); + break; + } + + if($exists !== 0) { + return redirect('/timeline')->with('error', 'You have already reported this!'); + } + + if($object->profile_id == $profile->id) { + return redirect('/timeline')->with('error', 'You cannot report your own content!'); + } + + $report = new Report; + $report->profile_id = $profile->id; + $report->user_id = Auth::id(); + $report->object_id = $object->id; + $report->object_type = $object_type; + $report->reported_profile_id = $object->profile_id; + $report->type = $request->input('report'); + $report->message = $request->input('msg'); + $report->save(); + + return redirect('/timeline')->with('status', 'Report successfully sent!'); + } + }