From d27be2e639362f8c1446184944b2670dcfa2f2d2 Mon Sep 17 00:00:00 2001 From: Daniel Wilkowski Date: Mon, 18 Sep 2023 12:31:24 +0200 Subject: [PATCH] Move messages count to domain, remove logic building html --- app/Domain/User/MenuItem.php | 1 + app/Domain/User/User.php | 4 ++- app/Domain/User/UserMenu.php | 3 ++- .../Controllers/User/Menu/AccountMenu.php | 27 +++++++++++-------- app/Http/Controllers/User/Menu/Guest.php | 12 +++++++++ .../Controllers/User/Menu/LaravelUser.php | 15 +++++++++++ .../User/Menu/ProfileNavigation.php | 9 ++++--- .../Controllers/User/Menu/SettingsMenu.php | 6 ++--- resources/views/user/base.twig | 17 ++++++++---- 9 files changed, 70 insertions(+), 24 deletions(-) create mode 100644 app/Http/Controllers/User/Menu/Guest.php create mode 100644 app/Http/Controllers/User/Menu/LaravelUser.php diff --git a/app/Domain/User/MenuItem.php b/app/Domain/User/MenuItem.php index 2e9d7234a5..78889b1c7c 100644 --- a/app/Domain/User/MenuItem.php +++ b/app/Domain/User/MenuItem.php @@ -10,6 +10,7 @@ class MenuItem public function __construct( public string $title, public string $routeName, + public ?string $subscript = null, array $routeArguments = [], public ?string $htmlId = null, public ?string $htmlClass = null, diff --git a/app/Domain/User/User.php b/app/Domain/User/User.php index bed67f238d..f0c42b9e27 100644 --- a/app/Domain/User/User.php +++ b/app/Domain/User/User.php @@ -5,7 +5,9 @@ class User { public function __construct( public bool $loggedIn, - public ?int $id + public ?int $id, + public ?int $privateMessages, + public ?int $privateMessagesUnread, ) { } diff --git a/app/Domain/User/UserMenu.php b/app/Domain/User/UserMenu.php index 09976b6162..baa14cfc44 100644 --- a/app/Domain/User/UserMenu.php +++ b/app/Domain/User/UserMenu.php @@ -70,7 +70,7 @@ public function settingsMenu(): array /** * @return MenuItem[] */ - public function accountMenu(): array + public function accountMenu(User $user): array { return [ new MenuItem( @@ -87,6 +87,7 @@ public function accountMenu(): array new MenuItem( 'Wiadomości prywatne', 'user.pm', + subscript: "($user->privateMessagesUnread/$user->privateMessages)", htmlId: 'btn-pm', htmlIcon: 'fa-envelope'), new MenuItem( diff --git a/app/Http/Controllers/User/Menu/AccountMenu.php b/app/Http/Controllers/User/Menu/AccountMenu.php index 94931d9982..5e381d42c3 100644 --- a/app/Http/Controllers/User/Menu/AccountMenu.php +++ b/app/Http/Controllers/User/Menu/AccountMenu.php @@ -2,7 +2,9 @@ namespace Coyote\Http\Controllers\User\Menu; +use Coyote\Domain\User\User; use Coyote\Domain\User\UserMenu; +use Illuminate\Contracts\Auth\Authenticatable; use Lavary\Menu\Builder; use Lavary\Menu\Menu; @@ -10,7 +12,7 @@ trait AccountMenu { public function getSideMenu(): Builder { - $menuItems = (new UserMenu())->accountMenu(); + $menuItems = (new UserMenu())->accountMenu($this->laravelUser()); /** @var Menu $menu */ $menu = app(Menu::class); @@ -19,17 +21,20 @@ public function getSideMenu(): Builder foreach ($menuItems as $menuItem) { $menu ->add($menuItem->title, [ - 'id' => $menuItem->htmlId ?? '', - 'class' => $menuItem->htmlClass ?? '', - 'route' => $menuItem->route - ]) - ->prepend("htmlIcon\">"); + 'id' => $menuItem->htmlId ?? '', + 'class' => $menuItem->htmlClass ?? '', + 'route' => $menuItem->route, + 'icon' => $menuItem->htmlIcon, + 'subscript' => $menuItem->subscript + ]); } - - $user = auth()->user(); - $menu - ->find('btn-pm') - ->append(' (' . $user->pm_unread . '/' . $user->pm . ')'); }); } + + private function laravelUser(): User + { + /** @var Authenticatable|\Coyote\User $user */ + $user = auth()->user(); + return new LaravelUser($user); + } } diff --git a/app/Http/Controllers/User/Menu/Guest.php b/app/Http/Controllers/User/Menu/Guest.php new file mode 100644 index 0000000000..4c4c4bb1aa --- /dev/null +++ b/app/Http/Controllers/User/Menu/Guest.php @@ -0,0 +1,12 @@ +id, + $user->pm, + $user->pm_unread); + } +} diff --git a/app/Http/Controllers/User/Menu/ProfileNavigation.php b/app/Http/Controllers/User/Menu/ProfileNavigation.php index a7a8b55b25..2d3893a820 100644 --- a/app/Http/Controllers/User/Menu/ProfileNavigation.php +++ b/app/Http/Controllers/User/Menu/ProfileNavigation.php @@ -4,6 +4,7 @@ use Coyote\Domain\User\User; use Coyote\Domain\User\UserMenu; +use Illuminate\Contracts\Auth\Authenticatable; use Lavary\Menu\Builder; use Lavary\Menu\Menu; @@ -17,7 +18,7 @@ public function getUserMenu(): Builder /** @var Menu $menu */ $menu = app(Menu::class); - return $menu->make('user.top', function (Builder $menu) use ($menuItems) { + return $menu->make('user.top', function (Builder $menu) use ($menuItems): void { foreach ($menuItems as $menuItem) { $menu ->add($menuItem->title, [ @@ -34,8 +35,10 @@ public function getUserMenu(): Builder private function laravelUser(): User { if (auth()->check()) { - return new User(true, auth()->user()->id); + /** @var Authenticatable|\Coyote\User $user */ + $user = auth()->user(); + return new LaravelUser($user); } - return new User(false, null); + return new Guest(); } } diff --git a/app/Http/Controllers/User/Menu/SettingsMenu.php b/app/Http/Controllers/User/Menu/SettingsMenu.php index db8ddb1ecd..d3d2c74b31 100644 --- a/app/Http/Controllers/User/Menu/SettingsMenu.php +++ b/app/Http/Controllers/User/Menu/SettingsMenu.php @@ -20,9 +20,9 @@ public function getSideMenu(): Builder $builder ->add($menuItem->title, [ 'id' => $menuItem->htmlId, - 'route' => $menuItem->route - ]) - ->prepend("htmlIcon\">"); + 'route' => $menuItem->route, + 'icon' => $menuItem->htmlIcon, + ]); } }); } diff --git a/resources/views/user/base.twig b/resources/views/user/base.twig index dff92a4cc9..69c4dcddb2 100644 --- a/resources/views/user/base.twig +++ b/resources/views/user/base.twig @@ -9,8 +9,12 @@ @@ -25,10 +29,13 @@ {% if not user('is_confirm') %}

- Twój adres e-mail nie został potwierdzony. Nie będziesz dostawał żadnych powiadomień na email. - Nie będziemy mogli również wygenerować Ci nowego hasła.
+ Twój adres e-mail nie został potwierdzony. Nie będziesz dostawał + żadnych powiadomień na email. Nie będziemy mogli również wygenerować Ci nowego hasła. + +
- Kliknij, aby wygenerować link aktywacyjny umożliwiający potwierdzenie adresu e-mail. + Kliknij, aby wygenerować link + aktywacyjny umożliwiający potwierdzenie adresu e-mail.

{% endif %}