diff --git a/app/Http/Controllers/User/DashboardController.php b/app/Http/Controllers/User/DashboardController.php index 81313d79..28f255ff 100644 --- a/app/Http/Controllers/User/DashboardController.php +++ b/app/Http/Controllers/User/DashboardController.php @@ -11,17 +11,6 @@ final class DashboardController extends Controller { - public function dashboard(): View - { - return view('user.dashboard', [ - 'user' => $user = User::scopes('withCounts')->find(Auth::id()), - 'articles' => $user->articles() - ->orderByDesc('created_at') - ->orderBy('submitted_at') - ->paginate(5), - ]); - } - public function threads(): View { return view('user.threads', [ diff --git a/app/Livewire/Pages/Account/Dashboard.php b/app/Livewire/Pages/Account/Dashboard.php new file mode 100644 index 00000000..cab41b90 --- /dev/null +++ b/app/Livewire/Pages/Account/Dashboard.php @@ -0,0 +1,35 @@ +scopes('withCounts') + ->find(Auth::id()); + } + + public function render(): View + { + return view('livewire.pages.account.dashboard', [ + 'articles' => $this->user->articles() + ->orderByDesc('created_at') + ->orderBy('submitted_at') + ->paginate(12), + ])->title(__('pages/account.dashboard.title', ['username' => $this->user->username])); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 159864eb..23ea1e0c 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -90,16 +90,6 @@ final class User extends Authenticatable implements FeaturableInterface, Filamen 'settings' => 'array', ]; - protected $appends = [ - 'profile_photo_url', - 'roles_label', - 'is_sponsor', - ]; - - protected $withCount = [ - 'transactions', - ]; - public function hasProvider(string $provider): bool { foreach ($this->providers as $p) { diff --git a/lang/en/pages/account.php b/lang/en/pages/account.php new file mode 100644 index 00000000..f7c28107 --- /dev/null +++ b/lang/en/pages/account.php @@ -0,0 +1,17 @@ + [ + 'title' => 'Dashboard ~ @:username', + 'stats' => [ + 'discussions' => 'Total Posts / Discussions', + 'experience' => 'Total Experience', + 'thread_reply' => 'Total Reply', + 'thread_resolved' => 'Thread Solved', + ], + ], + +]; diff --git a/lang/fr/pages/account.php b/lang/fr/pages/account.php new file mode 100644 index 00000000..4dd63fee --- /dev/null +++ b/lang/fr/pages/account.php @@ -0,0 +1,17 @@ + [ + 'title' => 'Tableau de bord ~ @:username', + 'stats' => [ + 'discussions' => 'Total Article / Discussion', + 'experience' => 'Total Expérience', + 'thread_reply' => 'Total Réponse', + 'thread_resolved' => 'Sujets Résolus', + ], + ], + +]; diff --git a/resources/views/components/user/page-heading.blade.php b/resources/views/components/user/page-heading.blade.php index 454fa468..b93cbf9d 100644 --- a/resources/views/components/user/page-heading.blade.php +++ b/resources/views/components/user/page-heading.blade.php @@ -11,8 +11,8 @@
- + {{ $button }} - +
diff --git a/resources/views/components/user/sidebar.blade.php b/resources/views/components/user/sidebar.blade.php index 80374d2d..48e8030f 100644 --- a/resources/views/components/user/sidebar.blade.php +++ b/resources/views/components/user/sidebar.blade.php @@ -3,20 +3,15 @@ ]) diff --git a/resources/views/components/user/stats.blade.php b/resources/views/components/user/stats.blade.php index b2e31660..898b784f 100644 --- a/resources/views/components/user/stats.blade.php +++ b/resources/views/components/user/stats.blade.php @@ -3,29 +3,51 @@ ])
-
-
Total Articles/Discussions
-
- {{ number_format($user->articles_count + $user->discussions_count) }} +
+
+ {{ __('pages/account.dashboard.stats.discussions') }} +
+
+ {{ \Illuminate\Support\Number::format($user->articles_count + $user->discussions_count) }}
+ +
-
-
Total Réponses
-
- {{ number_format($user->replies_count) }} +
+
+ {{ __('pages/account.dashboard.stats.thread_reply') }} +
+
+ {{ \Illuminate\Support\Number::format($user->replies_count) }}
+ +
-
-
Sujets Résolus
-
- {{ number_format($user->solutions_count) }} +
+
+ {{ __('pages/account.dashboard.stats.thread_resolved') }} +
+
+ {{ \Illuminate\Support\Number::format($user->solutions_count) }}
+ +
-
-
Total Experience
-
0
+
+
+ {{ __('pages/account.dashboard.stats.experience') }} +
+
+ 0 +
+ +
diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php index 63300f21..cde95e6e 100644 --- a/resources/views/errors/minimal.blade.php +++ b/resources/views/errors/minimal.blade.php @@ -51,7 +51,7 @@

- + {{ __('global.navigation.articles') }} diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index d3362cf8..8446ffb5 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -69,7 +69,7 @@ class="mx-auto mt-8 grid max-w-xl gap-10 lg:mt-10 lg:max-w-none lg:grid-flow-col

- + {{ __('pages/home.view_posts') }} diff --git a/resources/views/livewire/articles/_form.blade.php b/resources/views/livewire/articles/_form.blade.php index 261089c1..46b632d2 100644 --- a/resources/views/livewire/articles/_form.blade.php +++ b/resources/views/livewire/articles/_form.blade.php @@ -2,7 +2,7 @@ @@ -95,27 +95,24 @@ class="prose prose-green text-gray-500 dark:text-gray-400 dark:prose-invert lg:m
title . '" par ' . ($article->user->twitter() ? '@' . $article->user->twitter() : $article->user->name) . ' #caparledev - ') }}&url={{ urlencode(route('articles.show', $article)) }}" - class="inline-flex items-center gap-2 py-2 px-4 bg-white border-0 ring-1 ring-gray-200 dark:ring-white/20 rounded-lg shadow-sm text-sm text-gray-700 hover:text-gray-900 dark:text-gray-400 hover:bg-white/50 dark:hover:bg-white/10 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-green-500 dark:bg-gray-800 dark:focus:ring-offset-gray-900" + class="inline-flex items-center py-2 px-4 bg-white border-0 ring-1 ring-gray-200 dark:ring-white/20 rounded-lg shadow-sm text-sm text-gray-700 hover:text-gray-900 dark:text-gray-400 hover:bg-white/50 dark:hover:bg-white/10 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-green-500 dark:bg-gray-800 dark:focus:ring-offset-gray-900" target="_blank" > title . '" par ' . $article->user->name . ' - ') }}" - class="inline-flex items-center gap-2 py-2 px-4 bg-white border-0 ring-1 ring-gray-200 dark:ring-white/20 rounded-lg shadow-sm text-sm text-gray-700 hover:text-gray-900 dark:text-gray-400 hover:bg-white/50 dark:hover:bg-white/10 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-green-500 dark:bg-gray-800 dark:focus:ring-offset-gray-900" + class="inline-flex items-center py-2 px-4 bg-white border-0 ring-1 ring-gray-200 dark:ring-white/20 rounded-lg shadow-sm text-sm text-gray-700 hover:text-gray-900 dark:text-gray-400 hover:bg-white/50 dark:hover:bg-white/10 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-green-500 dark:bg-gray-800 dark:focus:ring-offset-gray-900" target="_blank" > title . '" par ' . $article->user->name . ' - ') }}" - class="inline-flex items-center gap-2 py-2 px-4 bg-white border-0 ring-1 ring-gray-200 dark:ring-white/20 rounded-lg shadow-sm text-sm text-gray-700 hover:text-gray-900 dark:text-gray-400 hover:bg-white/50 dark:hover:bg-white/10 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-green-500 dark:bg-gray-800 dark:focus:ring-offset-gray-900" + class="inline-flex items-center py-2 px-4 bg-white border-0 ring-1 ring-gray-200 dark:ring-white/20 rounded-lg shadow-sm text-sm text-gray-700 hover:text-gray-900 dark:text-gray-400 hover:bg-white/50 dark:hover:bg-white/10 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-green-500 dark:bg-gray-800 dark:focus:ring-offset-gray-900" target="_blank" >
diff --git a/resources/views/livewire/pages/articles/tag.blade.php b/resources/views/livewire/pages/articles/tag.blade.php index 9f76390d..4468da08 100644 --- a/resources/views/livewire/pages/articles/tag.blade.php +++ b/resources/views/livewire/pages/articles/tag.blade.php @@ -11,7 +11,7 @@ class="size-4 text-gray-400 dark:text-gray-500" aria-hidden="true" /> - + {{ __('global.navigation.articles') }} diff --git a/resources/views/partials/_navigation.blade.php b/resources/views/partials/_navigation.blade.php index d481b8a2..4fa379b6 100644 --- a/resources/views/partials/_navigation.blade.php +++ b/resources/views/partials/_navigation.blade.php @@ -4,8 +4,8 @@ :title="__('global.navigation.forum')" />
- +
@unless (Auth::user()->hasTwitterAccount()) diff --git a/routes/features/account.php b/routes/features/account.php new file mode 100644 index 00000000..31b7ef64 --- /dev/null +++ b/routes/features/account.php @@ -0,0 +1,27 @@ +as('user.')->middleware('auth')->group(function (): void { + Route::get('/', [User\SettingController::class, 'profile'])->name('settings'); + Route::put('/', [User\SettingController::class, 'update'])->name('settings.update'); + Route::view('/customization', 'user.settings.customization')->name('customization')->middleware('verified'); + Route::view('/notifications', 'user.settings.notifications')->name('notifications')->middleware('verified'); + Route::get('/password', [User\SettingController::class, 'password'])->name('password')->middleware('verified'); + Route::put('/password', [User\SettingController::class, 'updatePassword'])->name('password.update'); +}); + +// User +Route::prefix('dashboard')->middleware(['auth', 'verified'])->group(function (): void { + Route::get('/', Account\Dashboard::class)->name('dashboard'); + // Route::get('/', [User\DashboardController::class, 'dashboard'])->name('dashboard'); + Route::get('/threads', [User\DashboardController::class, 'threads'])->name('threads.me'); + Route::get('/discussions', [User\DashboardController::class, 'discussions'])->name('discussions.me'); +}); + +Route::get('/user/{username?}', [User\ProfileController::class, 'show'])->name('profile'); diff --git a/routes/features/article.php b/routes/features/article.php new file mode 100644 index 00000000..b0e5b0b2 --- /dev/null +++ b/routes/features/article.php @@ -0,0 +1,14 @@ +name('index'); +Route::get('/tags/{tag:slug}', Articles\SingleTag::class)->name('tag'); +Route::get('/{article}', Articles\SinglePost::class)->name('show'); + +Route::get('/new', [ArticlesController::class, 'create'])->name('new'); +Route::get('/{article}/edit', [ArticlesController::class, 'edit'])->name('edit'); diff --git a/routes/forum.php b/routes/features/forum.php similarity index 100% rename from routes/forum.php rename to routes/features/forum.php diff --git a/routes/web.php b/routes/web.php index aa1adaa2..d4a537cb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,7 +2,6 @@ declare(strict_types=1); -use App\Http\Controllers\ArticlesController; use App\Http\Controllers\DiscussionController; use App\Http\Controllers\FileUploadController; use App\Http\Controllers\HomeController; @@ -12,8 +11,6 @@ use App\Http\Controllers\SlackController; use App\Http\Controllers\SponsoringController; use App\Http\Controllers\SubscriptionController; -use App\Http\Controllers\User; -use App\Livewire\Pages\Articles; use Illuminate\Support\Facades\Route; Route::get('/', HomeController::class)->name('home'); @@ -35,14 +32,7 @@ Route::get('auth/{provider}/callback', [OAuthController::class, 'handleProviderCallback']); // Articles -Route::prefix('articles')->group(function (): void { - Route::get('/', Articles\Index::class)->name('articles'); - Route::get('/tags/{tag:slug}', Articles\SingleTag::class)->name('articles.tag'); - Route::get('/{article}', Articles\SinglePost::class)->name('articles.show'); - - Route::get('/new', [ArticlesController::class, 'create'])->name('articles.new'); - Route::get('/{article}/edit', [ArticlesController::class, 'edit'])->name('articles.edit'); -}); +Route::prefix('articles')->as('articles.')->group(base_path('routes/features/article.php')); // Discussions Route::prefix('discussions')->as('discussions.')->group(function (): void { @@ -53,7 +43,7 @@ }); // Forum -Route::prefix('forum')->as('forum.')->group(base_path('routes/forum.php')); +Route::prefix('forum')->as('forum.')->group(base_path('routes/features/forum.php')); // Replies Route::get('replyable/{id}/{type}', [ReplyAbleController::class, 'redirect'])->name('replyable'); @@ -63,24 +53,6 @@ ->name('subscriptions.unsubscribe'); Route::get('subscribeable/{id}/{type}', [SubscriptionController::class, 'redirect'])->name('subscriptions.redirect'); -// Settings -Route::prefix('settings')->as('user.')->middleware('auth')->group(function (): void { - Route::get('/', [User\SettingController::class, 'profile'])->name('settings'); - Route::put('/', [User\SettingController::class, 'update'])->name('settings.update'); - Route::view('/customization', 'user.settings.customization')->name('customization')->middleware('verified'); - Route::view('/notifications', 'user.settings.notifications')->name('notifications')->middleware('verified'); - Route::get('/password', [User\SettingController::class, 'password'])->name('password')->middleware('verified'); - Route::put('/password', [User\SettingController::class, 'updatePassword'])->name('password.update'); -}); - -// User -Route::prefix('dashboard')->middleware(['auth', 'verified'])->group(function (): void { - Route::get('/', [User\DashboardController::class, 'dashboard'])->name('dashboard'); - Route::get('/threads', [User\DashboardController::class, 'threads'])->name('threads.me'); - Route::get('/discussions', [User\DashboardController::class, 'discussions'])->name('discussions.me'); -}); -Route::get('/user/{username?}', [User\ProfileController::class, 'show'])->name('profile'); - // Notifications Route::view('notifications', 'user.notifications')->name('notifications')->middleware('auth'); @@ -88,3 +60,5 @@ Route::get('sponsors', [SponsoringController::class, 'sponsors'])->name('sponsors'); Route::get('callback-payment', NotchPayCallBackController::class)->name('notchpay-callback'); + +require __DIR__.'/features/account.php';