StatusController.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Auth, Cache;
  4. use App\Jobs\StatusPipeline\NewStatusPipeline;
  5. use Illuminate\Http\Request;
  6. use App\{Media, Profile, Status, User};
  7. use Vinkla\Hashids\Facades\Hashids;
  8. class StatusController extends Controller
  9. {
  10. public function show(Request $request, $username, int $id)
  11. {
  12. $user = Profile::whereUsername($username)->firstOrFail();
  13. $status = Status::whereProfileId($user->id)->findOrFail($id);
  14. if(!$status->media_path && $status->in_reply_to_id) {
  15. return view('status.reply', compact('user', 'status'));
  16. }
  17. return view('status.show', compact('user', 'status'));
  18. }
  19. public function store(Request $request)
  20. {
  21. if(Auth::check() == false)
  22. {
  23. abort(403);
  24. }
  25. $user = Auth::user();
  26. $this->validate($request, [
  27. 'photo' => 'required|image|max:15000',
  28. 'caption' => 'string|max:150'
  29. ]);
  30. $monthHash = hash('sha1', date('Y') . date('m'));
  31. $userHash = hash('sha1', $user->id . (string) $user->created_at);
  32. $storagePath = "public/m/{$monthHash}/{$userHash}";
  33. $path = $request->photo->store($storagePath);
  34. $profile = $user->profile;
  35. $status = new Status;
  36. $status->profile_id = $profile->id;
  37. $status->caption = $request->caption;
  38. $status->save();
  39. $media = new Media;
  40. $media->status_id = $status->id;
  41. $media->profile_id = $profile->id;
  42. $media->user_id = $user->id;
  43. $media->media_path = $path;
  44. $media->size = $request->file('photo')->getClientSize();
  45. $media->mime = $request->file('photo')->getClientMimeType();
  46. $media->save();
  47. NewStatusPipeline::dispatch($status, $media);
  48. // TODO: Parse Caption
  49. // TODO: Send to subscribers
  50. return redirect($status->url());
  51. }
  52. }