Homepage
- Add HomepageService with hero, trending (award-weighted), fresh uploads,
popular tags, creator spotlight (weekly uploads ranking), and news sections
- Add React components: HomePage, HomeHero, HomeTrending, HomeFresh,
HomeTags, HomeCreators, HomeNews (lazy-loaded below the fold)
- Wire home.blade.php with JSON props, SEO meta, JSON-LD, and hero preload
- Add HomePage.jsx to vite.config.js inputs
Profile page
- Hero banner with random user artwork as background + dark gradient overlay
- Favourites section uses real Artwork models + <x-artwork-card> for CDN URLs
- Newest artworks grid: gallery-grid → grid grid-cols-2 gap-4
Edit Profile page (user.blade.php)
- Add hero banner (featured wallpaper/photography via artwork_features,
content_type_id IN [2,3]) sourced in UserController
- Remove bg-deep from outer wrapper; card backgrounds: bg-panel → bg-nova-800
- Remove stray AI-generated tag fragment from template
Author profile links
- Fix all /@username routes in: HomepageService, MonthlyCommentatorsController,
LatestCommentsController, MyBuddiesController and corresponding blade views
Legacy view namespace
- Register View::addNamespace('legacy', resource_path('views/_legacy'))
in AppServiceProvider::boot()
- Convert all view('legacy.x') and @include('legacy.x') calls to legacy::x
- Migrate legacy views to resources/views/_legacy/ with namespace support
56 lines
2.0 KiB
PHP
56 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Community;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\ArtworkComment;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Str;
|
|
|
|
class LatestCommentsController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$hits = 20;
|
|
|
|
$query = ArtworkComment::with(['user', 'artwork'])
|
|
->whereHas('artwork', function ($q) {
|
|
$q->public()->published()->whereNull('deleted_at');
|
|
})
|
|
->orderByDesc('created_at');
|
|
|
|
$comments = $query->paginate($hits)->withQueryString();
|
|
|
|
$comments->getCollection()->transform(function (ArtworkComment $c) {
|
|
$art = $c->artwork;
|
|
$user = $c->user;
|
|
|
|
$present = $art ? \App\Services\ThumbnailPresenter::present($art, 'md') : null;
|
|
$thumb = $present ? ($present['url']) : '/gfx/sb_join.jpg';
|
|
|
|
return (object) [
|
|
'comment_id' => $c->getKey(),
|
|
'comment_description' => $c->content,
|
|
'commenter_id' => $c->user_id,
|
|
'commenter_username' => $user?->username ?? null,
|
|
'country' => $user->country ?? null,
|
|
'icon' => $user ? DB::table('user_profiles')->where('user_id', $user->id)->value('avatar_hash') : null,
|
|
'uname' => $user->username ?? $user->name ?? 'User',
|
|
'signature' => $user->signature ?? null,
|
|
'user_type' => $user->role ?? null,
|
|
'id' => $art->id ?? null,
|
|
'name' => $art->title ?? null,
|
|
'picture' => $art->file_name ?? null,
|
|
'thumb' => $thumb,
|
|
'artwork_slug' => $art->slug ?? Str::slug($art->title ?? ''),
|
|
'datetime' => $c->created_at?->toDateTimeString() ?? now()->toDateTimeString(),
|
|
];
|
|
});
|
|
|
|
$page_title = 'Latest Comments';
|
|
|
|
return view('web.comments.latest', compact('page_title', 'comments'));
|
|
}
|
|
}
|