diff --git a/app/Http/Controllers/BlogController.php b/app/Http/Controllers/BlogController.php
index 78dc382..1df4fd2 100644
--- a/app/Http/Controllers/BlogController.php
+++ b/app/Http/Controllers/BlogController.php
@@ -25,7 +25,7 @@ public function index(Request $request)
'views',
'created_at',
])
- ->with('user:id,name,username')
+ ->with(['user:id,name,username', 'user.roles:id,name'])
->withCount(['reactions', 'comments'])
->where('is_published', true);
@@ -56,13 +56,13 @@ public function show(Blog $blog)
{
abort_unless($blog->is_published, 404);
- $blog->load('user:id,name,username,image_path');
+ $blog->load(['user:id,name,username,image_path', 'user.roles:id,name']);
$blog->increment('views');
$reactionsCount = $blog->reactions()->count();
$reactors = $blog->reactions()
- ->with('user:id,name,username,image_path,institution')
+ ->with(['user:id,name,username,image_path,institution', 'user.roles:id,name'])
->latest('id')
->limit(50)
->get()
@@ -71,7 +71,7 @@ public function show(Blog $blog)
->values();
$comments = $blog->comments()
- ->with('user:id,name,username,image_path,institution')
+ ->with(['user:id,name,username,image_path,institution', 'user.roles:id,name'])
->latest()
->get();
@@ -131,7 +131,7 @@ public function storeComment(Request $request, Blog $blog)
'content' => trim($validated['content']),
]);
- $comment->load('user:id,name,username,image_path,institution');
+ $comment->load(['user:id,name,username,image_path,institution', 'user.roles:id,name']);
$blog->loadMissing('user:id,name,email,receive_emails');
if ($blog->user && $blog->user_id !== $userId && $blog->user->email && $blog->user->receive_emails !== false) {
diff --git a/app/Http/Controllers/ResourceController.php b/app/Http/Controllers/ResourceController.php
index 91c1f5c..656bc35 100644
--- a/app/Http/Controllers/ResourceController.php
+++ b/app/Http/Controllers/ResourceController.php
@@ -38,7 +38,7 @@ public function show($id)
$completionsCount = ResourceCompletion::where('resource_id', $id)->count();
$completers = ResourceCompletion::where('resource_id', $id)
- ->with('user:id,name,username,image_path,institution')
+ ->with(['user:id,name,username,image_path,institution', 'user.roles:id,name'])
->latest()
->take(10)
->get()
diff --git a/app/Http/Controllers/UserProfileController.php b/app/Http/Controllers/UserProfileController.php
index 5f6968f..987ca59 100644
--- a/app/Http/Controllers/UserProfileController.php
+++ b/app/Http/Controllers/UserProfileController.php
@@ -94,6 +94,29 @@ public function show(string $username)
])
->filter(fn ($item) => $item['title'] !== null);
+ // Suggested / Discover community members: 2 contributors + 2 general users
+ $contributorUsers = User::where('id', '!=', $user->id)
+ ->whereNotNull('username')
+ ->whereHas('roles')
+ ->select(['id', 'name', 'username', 'title', 'institution', 'image_path', 'about'])
+ ->with('roles:id,name')
+ ->inRandomOrder()
+ ->take(2)
+ ->get();
+
+ $excludedIds = $contributorUsers->pluck('id')->push($user->id)->all();
+ $remainingNeeded = 4 - $contributorUsers->count();
+
+ $randomUsers = User::whereNotIn('id', $excludedIds)
+ ->whereNotNull('username')
+ ->select(['id', 'name', 'username', 'title', 'institution', 'image_path', 'about'])
+ ->with('roles:id,name')
+ ->inRandomOrder()
+ ->take($remainingNeeded)
+ ->get();
+
+ $suggestedUsers = $contributorUsers->concat($randomUsers)->shuffle()->values();
+
return Inertia::render('User/Show', [
'profileUser' => [
'id' => $user->id,
@@ -125,6 +148,7 @@ public function show(string $username)
'reactions' => $recentReactions->values(),
'comments' => $recentComments->values(),
],
+ 'suggestedUsers' => $suggestedUsers,
]);
}
}
diff --git a/app/Models/User.php b/app/Models/User.php
index 3417c47..1f02793 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -51,6 +51,7 @@ class User extends Authenticatable
'instagram',
'github',
];
+
protected static function booted(): void
{
static::created(function (User $user) {
diff --git a/resources/js/components/BlogCard.vue b/resources/js/components/BlogCard.vue
index 50e58c0..3fa5bc7 100644
--- a/resources/js/components/BlogCard.vue
+++ b/resources/js/components/BlogCard.vue
@@ -1,6 +1,6 @@
+
+
+
+
+ {{ user.name }}
+
+ {{ subtitle || user.institution || user.title }}
+
+
+ {{ user.name?.charAt(0) || 'U' }}
+
+
- {{ reactor.name }} -
-- {{ reactor.institution }} -
-- {{ completer.name }} -
-- {{ completer.institution }} -
-+ {{ person.name }} +
+ ++ {{ person.title || person.institution }} +
++ @{{ person.username }} +
+