ContactController.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Auth;
  5. use App\Contact;
  6. use App\Jobs\ContactPipeline\ContactPipeline;
  7. use App\Rules\MaxMultiLine;
  8. class ContactController extends Controller
  9. {
  10. public function show(Request $request)
  11. {
  12. abort_if(!config('instance.email') && !config('instance.contact.enabled'), 404);
  13. return view('site.contact');
  14. }
  15. public function store(Request $request)
  16. {
  17. abort_if(!config('instance.contact.enabled'), 404);
  18. abort_if(!Auth::check(), 403);
  19. $this->validate($request, [
  20. 'message' => ['required', 'string', 'min:5', new MaxMultiLine('500')],
  21. 'request_response' => 'string|max:3'
  22. ]);
  23. $message = $request->input('message');
  24. $request_response = $request->input('request_response') == 'on' ? true : false;
  25. $user = Auth::user();
  26. $max = config('instance.contact.max_per_day');
  27. $contact = Contact::whereUserId($user->id)
  28. ->whereDate('created_at', '>', now()->subDays($max))
  29. ->count();
  30. if($contact >= $max) {
  31. return redirect()->back()->with('error', 'You have recently sent a message. Please try again later.');
  32. }
  33. $contact = new Contact;
  34. $contact->user_id = $user->id;
  35. $contact->response_requested = $request_response;
  36. $contact->message = $message;
  37. $contact->response = '';
  38. $contact->save();
  39. ContactPipeline::dispatchNow($contact);
  40. return redirect()->back()->with('status', 'Success - Your message has been sent to admins.');
  41. }
  42. }