This commit is contained in:
2026-03-20 21:17:26 +01:00
parent 1a62fcb81d
commit 29c3ff8572
229 changed files with 13147 additions and 2577 deletions

View File

@@ -8,6 +8,8 @@ use App\Http\Controllers\Dashboard\ArtworkController as DashboardArtworkControll
use App\Http\Controllers\Web\ArtworkPageController;
use App\Http\Controllers\ArtworkDownloadController;
use App\Http\Controllers\Web\BrowseGalleryController;
use App\Http\Controllers\Web\FeaturedArtworksController;
use App\Http\Controllers\Web\DailyUploadsController;
use App\Http\Controllers\Web\DiscoverController;
use App\Http\Controllers\Web\ExploreController;
use App\Http\Controllers\Web\BlogController;
@@ -27,15 +29,26 @@ use App\Http\Controllers\RSS\ExploreFeedController;
use App\Http\Controllers\RSS\TagFeedController;
use App\Http\Controllers\RSS\CreatorFeedController;
use App\Http\Controllers\RSS\BlogFeedController;
use App\Http\Controllers\Web\StaffApplicationAdminController;
use App\Http\Controllers\Studio\StudioController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\Community\LatestController;
use App\Http\Controllers\User\MembersController;
use App\Http\Controllers\User\TodayDownloadsController;
use App\Http\Controllers\User\MonthlyCommentatorsController;
use App\Models\Artwork;
use Inertia\Inertia;
Route::get('/', [HomeController::class, 'index'])->name('index');
Route::get('/home', [HomeController::class, 'index']);
// ── PUBLIC GALLERIES / LISTS ─────────────────────────────────────────────────
Route::get('/featured', [FeaturedArtworksController::class, 'index'])->name('featured');
Route::get('/uploads/latest', [LatestController::class, 'index'])->name('uploads.latest');
Route::get('/uploads/daily', [DailyUploadsController::class, 'index'])->name('uploads.daily');
Route::get('/members/photos', [MembersController::class, 'photos'])->name('members.photos');
Route::get('/downloads/today', [TodayDownloadsController::class, 'index'])->name('downloads.today');
Route::get('/comments/monthly', [MonthlyCommentatorsController::class, 'index'])->name('comments.monthly');
// ── DISCOVER (/discover/*) ────────────────────────────────────────────────────
Route::prefix('discover')->name('discover.')->group(function () {
Route::get('/', fn () => redirect('/discover/trending', 301));
@@ -54,8 +67,8 @@ Route::prefix('discover')->name('discover.')->group(function () {
// ── EXPLORE (/explore/*) ──────────────────────────────────────────────────────
Route::prefix('explore')->name('explore.')->group(function () {
Route::get('/', [ExploreController::class, 'index'])->name('index');
Route::get('/members', fn () => redirect('/members', 301))->name('members.redirect');
Route::get('/memebers', fn () => redirect('/members', 301))->name('memebers.redirect');
Route::get('/members', fn () => redirect()->route('creators.top', request()->query(), 301))->name('members.redirect');
Route::get('/memebers', fn () => redirect()->route('creators.top', request()->query(), 301))->name('memebers.redirect');
Route::get('/{type}', [ExploreController::class, 'byType'])
->where('type', 'artworks|wallpapers|skins|photography|other')
->name('type');
@@ -95,11 +108,13 @@ Route::get('/staff', [StaffController::class, 'index'])->name('st
Route::get('/contact', [ApplicationController::class, 'show'])->name('contact.show');
Route::post('/contact', [ApplicationController::class, 'submit'])->middleware('throttle:6,1')->name('contact.submit');
// ── ADMIN: Staff applications ─────────────────────────────────────────────────
Route::middleware(['auth'])->prefix('admin')->name('admin.')->group(function () {
Route::get('/applications', [StaffApplicationAdminController::class, 'index'])->name('applications.index');
Route::get('/applications/{staffApplication}', [StaffApplicationAdminController::class, 'show'])->name('applications.show');
});
$cpPrefix = trim((string) config('cpad.webroot', config('cp.webroot', 'cp')), '/');
// ── LEGACY RSS (.xml feeds — old site compatibility) ──────────────────────────
Route::get('/rss/latest-uploads.xml', [RssFeedController::class, 'latestUploads'])->name('rss.uploads');
Route::get('/rss/latest-skins.xml', [RssFeedController::class, 'latestSkins'])->name('rss.skins');
Route::get('/rss/latest-wallpapers.xml', [RssFeedController::class, 'latestWallpapers'])->name('rss.wallpapers');
Route::get('/rss/latest-photos.xml', [RssFeedController::class, 'latestPhotos'])->name('rss.photos');
// ── RSS 2.0 feeds (/rss/*) ────────────────────────────────────────────────────
Route::middleware('throttle:60,1')->group(function () {
@@ -139,6 +154,9 @@ Route::prefix('creators')->name('creators.')->group(function () {
Route::get('/rising', [DiscoverController::class, 'risingCreators'])->name('rising');
});
Route::get('/leaderboard', \App\Http\Controllers\Web\LeaderboardPageController::class)
->name('leaderboard');
// ── STORIES (/stories/*) ──────────────────────────────────────────────────────
Route::prefix('stories')->name('stories.')->group(function () {
Route::get('/', [StoryController::class, 'index'])->name('index');
@@ -214,6 +232,10 @@ Route::prefix('news')->name('news.')->group(function () {
Route::get('/rss/news', [NewsRssController::class, 'feed'])->name('news.rss');
// ── PROFILES (@username) ──────────────────────────────────────────────────────
Route::get('/@{username}/gallery', [ProfileController::class, 'showGalleryByUsername'])
->where('username', '[A-Za-z0-9_-]{3,20}')
->name('profile.gallery');
Route::get('/@{username}', [ProfileController::class, 'showByUsername'])
->where('username', '[A-Za-z0-9_-]{3,20}')
->name('profile.show');
@@ -247,7 +269,9 @@ Route::middleware(['auth', \App\Http\Middleware\NoIndexDashboard::class])->prefi
Route::get('/followers', [\App\Http\Controllers\Dashboard\FollowerController::class, 'index'])->name('followers');
Route::get('/following', [\App\Http\Controllers\Dashboard\FollowingController::class, 'index'])->name('following');
Route::get('/comments', [\App\Http\Controllers\Dashboard\CommentController::class, 'index'])->name('comments');
Route::get('/comments', fn () => redirect()->route('dashboard.comments.received', request()->query(), 302))->name('comments');
Route::get('/comments/received', [\App\Http\Controllers\Dashboard\CommentController::class, 'received'])->name('comments.received');
Route::get('/notifications', [\App\Http\Controllers\Dashboard\NotificationController::class, 'index'])->name('notifications');
Route::get('/gallery', [\App\Http\Controllers\Dashboard\DashboardGalleryController::class, 'index'])->name('gallery');
Route::get('/awards', [\App\Http\Controllers\Dashboard\DashboardAwardsController::class, 'index'])->name('awards');
});
@@ -270,8 +294,8 @@ Route::middleware(['auth', 'ensure.onboarding.complete'])->prefix('studio')->nam
// ── SETTINGS / PROFILE EDIT ───────────────────────────────────────────────────
Route::middleware(['auth', 'normalize.username', 'ensure.onboarding.complete'])->group(function () {
Route::get('/profile', fn () => redirect()->route('dashboard.profile', [], 301))->name('legacy.profile.redirect');
Route::get('/settings', [ProfileController::class, 'edit'])->name('settings');
Route::get('/profile/edit', [ProfileController::class, 'edit'])->name('profile.edit');
Route::get('/settings', fn () => redirect()->route('dashboard.profile', [], 302))->name('settings');
Route::get('/profile/edit', fn () => redirect()->route('dashboard.profile', [], 302))->name('profile.edit');
Route::match(['post','put','patch'], '/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
Route::match(['post', 'put'], '/profile/password', [ProfileController::class, 'password'])->name('profile.password');
@@ -365,48 +389,6 @@ Route::get('/search', [\App\Http\Controllers\Web\SearchController::class, 'index
Route::view('/data-deletion', 'privacy.data-deletion')->name('privacy.data_deletion');
Route::view('/blank', 'blank')->name('blank');
// ── ADMIN ─────────────────────────────────────────────────────────────────────
Route::middleware(['auth'])->prefix('admin')->name('admin.')->group(function () {
Route::get('uploads/moderation', fn () => Inertia::render('Admin/UploadQueue'))
->middleware('admin.moderation')
->name('uploads.moderation');
Route::get('usernames/moderation', fn () => Inertia::render('Admin/UsernameQueue'))
->middleware('admin.moderation')
->name('usernames.moderation');
Route::resource('artworks', \App\Http\Controllers\Admin\ArtworkController::class)->except(['show']);
Route::get('reports', fn () => view('admin.reports.queue'))
->middleware('admin.moderation')
->name('reports.queue');
Route::get('reports/tags', [\App\Http\Controllers\Admin\TagInteractionReportController::class, 'index'])
->middleware('admin.moderation')
->name('reports.tags');
Route::middleware('admin.moderation')->prefix('early-growth')->name('early-growth.')->group(function () {
Route::get('/', [\App\Http\Controllers\Admin\EarlyGrowthAdminController::class, 'index'])->name('index');
Route::delete('/cache', [\App\Http\Controllers\Admin\EarlyGrowthAdminController::class, 'flushCache'])->name('cache.flush');
Route::get('/status', [\App\Http\Controllers\Admin\EarlyGrowthAdminController::class, 'status'])->name('status');
});
Route::middleware('admin.moderation')->prefix('stories')->name('stories.')->group(function () {
Route::get('/review', [\App\Http\Controllers\Admin\StoryAdminController::class, 'review'])->name('review');
Route::get('/', [\App\Http\Controllers\Admin\StoryAdminController::class, 'index'])->name('index');
Route::get('/create', [\App\Http\Controllers\Admin\StoryAdminController::class, 'create'])->name('create');
Route::post('/', [\App\Http\Controllers\Admin\StoryAdminController::class, 'store'])->name('store');
Route::get('/{story}', [\App\Http\Controllers\Admin\StoryAdminController::class, 'show'])->name('show');
Route::post('/{story}/approve', [\App\Http\Controllers\Admin\StoryAdminController::class, 'approve'])->name('approve');
Route::post('/{story}/reject', [\App\Http\Controllers\Admin\StoryAdminController::class, 'reject'])->name('reject');
Route::get('/{story}/edit', [\App\Http\Controllers\Admin\StoryAdminController::class, 'edit'])->name('edit');
Route::put('/{story}', [\App\Http\Controllers\Admin\StoryAdminController::class, 'update'])->name('update');
Route::delete('/{story}', [\App\Http\Controllers\Admin\StoryAdminController::class, 'destroy'])->name('destroy');
Route::post('/{story}/publish', [\App\Http\Controllers\Admin\StoryAdminController::class, 'publish'])->name('publish');
Route::get('/moderation/comments', [\App\Http\Controllers\Admin\StoryAdminController::class, 'moderateComments'])->name('comments.moderation');
});
});
// ── MESSAGES ──────────────────────────────────────────────────────────────────
Route::middleware(['auth', 'ensure.onboarding.complete'])
->get('/messages/attachments/{id}', [\App\Http\Controllers\Api\Messaging\AttachmentController::class, 'show'])
@@ -419,8 +401,6 @@ Route::middleware(['auth', 'ensure.onboarding.complete'])->prefix('messages')->n
});
// ── COMMUNITY ACTIVITY ────────────────────────────────────────────────────────
Route::match(['get', 'post'], '/community/chat', [\App\Http\Controllers\Community\ChatController::class, 'index'])
->name('community.chat');
Route::get('/community/activity', [\App\Http\Controllers\Web\CommunityActivityController::class, 'index'])
->name('community.activity');