FollowerController.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\{
  4. Follower,
  5. FollowRequest,
  6. Profile,
  7. UserFilter
  8. };
  9. use Auth;
  10. use Illuminate\Http\Request;
  11. use App\Jobs\FollowPipeline\FollowPipeline;
  12. class FollowerController extends Controller
  13. {
  14. public function __construct()
  15. {
  16. $this->middleware('auth');
  17. }
  18. public function store(Request $request)
  19. {
  20. $this->validate($request, [
  21. 'item' => 'required|integer',
  22. ]);
  23. $item = $request->input('item');
  24. $this->handleFollowRequest($item);
  25. if($request->wantsJson()) {
  26. return response()->json([
  27. 200
  28. ], 200);
  29. }
  30. return redirect()->back();
  31. }
  32. protected function handleFollowRequest($item)
  33. {
  34. $user = Auth::user()->profile;
  35. $target = Profile::where('id', '!=', $user->id)->whereNull('status')->findOrFail($item);
  36. $private = (bool) $target->is_private;
  37. $remote = (bool) $target->domain;
  38. $blocked = UserFilter::whereUserId($target->id)
  39. ->whereFilterType('block')
  40. ->whereFilterableId($user->id)
  41. ->whereFilterableType('App\Profile')
  42. ->exists();
  43. if($blocked == true) {
  44. return redirect()->back()->with('error', 'You cannot follow this user.');
  45. }
  46. $isFollowing = Follower::whereProfileId($user->id)->whereFollowingId($target->id)->count();
  47. if($private == true && $isFollowing == 0 || $remote == true) {
  48. $follow = FollowRequest::firstOrCreate([
  49. 'follower_id' => $user->id,
  50. 'following_id' => $target->id
  51. ]);
  52. } elseif ($isFollowing == 0) {
  53. $follower = new Follower();
  54. $follower->profile_id = $user->id;
  55. $follower->following_id = $target->id;
  56. $follower->save();
  57. FollowPipeline::dispatch($follower);
  58. } else {
  59. $follower = Follower::whereProfileId($user->id)->whereFollowingId($target->id)->firstOrFail();
  60. $follower->delete();
  61. }
  62. }
  63. }