From d6b0affcb41fc05421f3ab25a3abaacf7948ac14 Mon Sep 17 00:00:00 2001 From: Ghostie Date: Thu, 2 Jan 2025 21:43:56 -0500 Subject: [PATCH] minor refactoring to friends --- app/Http/Controllers/AP/APActorController.php | 3 +- .../Controllers/AP/APOutboxController.php | 5 +-- app/Http/Controllers/HomeController.php | 18 ++++++-- app/Models/Activity.php | 5 +++ app/Models/Actor.php | 7 +-- app/Models/User.php | 36 +++++++++++++--- resources/views/home.blade.php | 4 +- resources/views/home_loggedin.blade.php | 6 ++- resources/views/users/profile.blade.php | 26 +++++++++-- resources/views/users/requests.blade.php | 43 ++++++++++++++++++- 10 files changed, 123 insertions(+), 30 deletions(-) diff --git a/app/Http/Controllers/AP/APActorController.php b/app/Http/Controllers/AP/APActorController.php index f6a39a5..5b20171 100644 --- a/app/Http/Controllers/AP/APActorController.php +++ b/app/Http/Controllers/AP/APActorController.php @@ -22,8 +22,7 @@ class APActorController extends Controller public function followers (User $user) { - $actor_id = '"' . str_replace ("/", "\/", $user->actor->actor_id) . '"'; - $followers = Activity::where ("type", "Follow")->where ("object", $actor_id); + $followers = Activity::where ("type", "Follow")->where ("object", $user->actor->actor_id); $ordered_collection = new TypeOrderedCollection (); $ordered_collection->collection = $followers->get ()->pluck ("actor")->toArray (); $ordered_collection->url = route ("ap.followers", $user->name); diff --git a/app/Http/Controllers/AP/APOutboxController.php b/app/Http/Controllers/AP/APOutboxController.php index 59a8b89..541e43b 100644 --- a/app/Http/Controllers/AP/APOutboxController.php +++ b/app/Http/Controllers/AP/APOutboxController.php @@ -165,14 +165,13 @@ class APOutboxController extends Controller $object_actor = Actor::where ("actor_id", $object)->first (); if (!$object_actor) return response ()->json ([ "error" => "object not found" ], 404); - $object_id = '"' . str_replace ("/", "\/", $object_actor->actor_id) . '"'; $follow_activity = Activity::where ("actor", $user->actor ()->first ()->actor_id) - ->where ("object", $object_id) + ->where ("object", json_encode ($object_actor->actor_id, JSON_UNESCAPED_SLASHES)) ->where ("type", "Follow") ->first (); if (!$follow_activity) - return response ()->json ([ "error" => "no follow activity found" ], 404); + return response ()->json ([ "error" => "no follow activity found. " . $user->actor ()->first ()->actor_id . " unfollowing " . $object_actor->actor_id ], 404); $unfollow_activity = TypeActivity::craft_undo ($follow_activity, $user->actor ()->first ()); $response = TypeActivity::post_activity ($unfollow_activity, $user->actor ()->first (), $object_actor); diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index b91dfe1..d3b99dd 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -47,18 +47,28 @@ class HomeController extends Controller public function requests () { $user = auth ()->user (); - $requests = []; + $received_requests = []; + $sent_requests = []; - foreach ($user->friend_requests () as $request) + foreach ($user->received_requests () as $request) { $actor = Actor::where ("actor_id", $request)->first (); if (!$actor) continue; - $requests[] = $actor; + $received_requests[] = $actor; } - return view ("users.requests", compact ("user", "requests")); + foreach ($user->sent_requests () as $request) + { + $actor = Actor::where ("actor_id", $request)->first (); + if (!$actor) + continue; + + $sent_requests[] = $actor; + } + + return view ("users.requests", compact ("user", "received_requests", "sent_requests")); } public function requests_accept (Request $request) diff --git a/app/Models/Activity.php b/app/Models/Activity.php index e4644b4..29c575b 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -20,6 +20,11 @@ class Activity extends Model "target" => "array" ]; + public function setObjectAttribute ($value) + { + $this->attributes["object"] = json_encode ($value, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION); + } + public function actor () { return $this->belongsTo (Actor::class); diff --git a/app/Models/Actor.php b/app/Models/Actor.php index fd09cf6..54adcf2 100644 --- a/app/Models/Actor.php +++ b/app/Models/Actor.php @@ -71,11 +71,8 @@ class Actor extends Model public function friends_with (Actor $actor) { - $self_id = '"' . str_replace ("/", "\/", $this->actor_id) . '"'; - $other_id = '"' . str_replace ("/", "\/", $actor->actor_id) . '"'; - - $following = Activity::where ("actor", $this->actor_id)->where ("type", "Follow")->where ("object", $other_id)->first (); - $followers = Activity::where ("actor", $actor->actor_id)->where ("type", "Follow")->where ("object", $self_id)->first (); + $following = Activity::where ("actor", $this->actor_id)->where ("type", "Follow")->where ("object", $actor->actor_id)->first (); + $followers = Activity::where ("actor", $actor->actor_id)->where ("type", "Follow")->where ("object", $this->actor_id)->first (); return $following && $followers; } diff --git a/app/Models/User.php b/app/Models/User.php index 0238c3b..78cd047 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -75,20 +75,42 @@ class User extends Authenticatable public function mutual_friends () { - $actor_id = '"' . str_replace ("/", "\/", $this->actor->actor_id) . '"'; - - $followers = Activity::where ("type", "Follow")->where ("object", $actor_id)->pluck ("actor")->toArray (); + $followers = Activity::where ("type", "Follow")->where ("object", '"' . $this->actor->actor_id . '"')->pluck ("actor")->toArray (); $following = Activity::where ("type", "Follow")->where ("actor", $this->actor->actor_id)->pluck ("object")->toArray (); return array_intersect ($followers, $following); } - public function friend_requests () + public function received_requests () { - $actor_id = '"' . str_replace ("/", "\/", $this->actor->actor_id) . '"'; + // users following me, where I am the object and I retrieve the actors + $following = Activity::where ("type", "Follow") + ->where ("object", '"' . $this->actor->actor_id . '"') // i am the object being followed + ->pluck ("actor") + ->map (fn ($actor) => json_encode ($actor, JSON_UNESCAPED_SLASHES)) + ->toArray (); - $followers = Activity::where ("type", "Follow")->where ("object", $actor_id)->pluck ("actor")->toArray (); - $following = Activity::where ("type", "Follow")->where ("actor", $this->actor->actor_id)->pluck ("object")->toArray (); + // users i am following, where I am the actor and I retrieve the objects + $followers = Activity::where ("type", "Follow") + ->whereIn ("object", $following) // actors + ->where ("actor", $this->actor->actor_id) // following me + ->pluck ("actor")->toArray (); + + return array_diff ($following, $followers); + } + + public function sent_requests () + { + // users i am following, where I am the actor and I retrieve the objects + $followers = Activity::where ("type", "Follow") + ->where ("actor", $this->actor->actor_id) // actors I follow + ->pluck ("object")->toArray (); + + // users following me, where I am the object and I retrieve the actors + $following = Activity::where ("type", "Follow") + ->whereIn ("actor", $followers) // actors + ->where ("object", '"' . $this->actor->actor_id . '"') // that following me + ->pluck ("actor")->toArray (); return array_diff ($followers, $following); } diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 93aa8e3..dcbce58 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -15,10 +15,10 @@
@foreach ($latest_users as $user)
- +

{{ $user->name }}

- + {{ $user->name }}'s profile picture diff --git a/resources/views/home_loggedin.blade.php b/resources/views/home_loggedin.blade.php index c00bbe8..0767833 100644 --- a/resources/views/home_loggedin.blade.php +++ b/resources/views/home_loggedin.blade.php @@ -1,3 +1,7 @@ +@php + +@endphp +
@@ -103,7 +107,7 @@

- {{ count (auth ()->user ()->friend_requests ()) }} + {{ count (auth ()->user ()->received_requests ()) }} Open Friend Requests

diff --git a/resources/views/users/profile.blade.php b/resources/views/users/profile.blade.php index 72b42a9..62bca0d 100644 --- a/resources/views/users/profile.blade.php +++ b/resources/views/users/profile.blade.php @@ -24,9 +24,15 @@

{{ $user->status }}

{{ $user->about_you }}

-

- online ONLINE! -

+ @if (auth ()->user () && auth ()->user ()->actor ()->first ()->is ($actor)) +

+ online YOU! +

+ @else +

+ online ONLINE! +

+ @endif
@endif @@ -57,6 +63,18 @@ Remove Friend + @elseif (in_array ($actor->actor_id, auth ()->user ()->received_requests ())) +
+ @csrf + + Accept Friend Request +
+ @elseif (in_array ($actor->actor_id, auth ()->user ()->sent_requests ())) +
+ @csrf + + Cancel Request +
@else
@csrf @@ -275,7 +293,7 @@

@if (auth ()->user () && auth ()->user ()->is ($user)) - + @csrf
diff --git a/resources/views/users/requests.blade.php b/resources/views/users/requests.blade.php index 2f94650..bda8353 100644 --- a/resources/views/users/requests.blade.php +++ b/resources/views/users/requests.blade.php @@ -14,7 +14,7 @@

- {{ count ($user->friend_requests ()) }} + {{ count ($user->received_requests ()) }} Open Friend Requests @@ -26,7 +26,7 @@ - @foreach ($requests as $frequest) + @foreach ($received_requests as $frequest)
@@ -54,6 +54,45 @@

+ +
+

+ + {{ count ($user->sent_requests ()) }} + Pending Friend Requests + +
+ + + + @foreach ($sent_requests as $frequest) + + + + + @endforeach + +
+ +

+ {{ $frequest->name }} +

+
+ + + {{ $frequest->name }} + +
+

+ Sent Request +

+ + @csrf + + + +
+