Skip to content

Commit

Permalink
Move messages count to domain, remove logic building html
Browse files Browse the repository at this point in the history
  • Loading branch information
danon committed Sep 18, 2023
1 parent 1a5a1ab commit 60255f9
Show file tree
Hide file tree
Showing 9 changed files with 70 additions and 24 deletions.
1 change: 1 addition & 0 deletions app/Domain/User/MenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 3 additions & 1 deletion app/Domain/User/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ class User
{
public function __construct(
public bool $loggedIn,
public ?int $id
public ?int $id,
public ?int $privateMessages,
public ?int $privateMessagesUnread,
)
{
}
Expand Down
3 changes: 2 additions & 1 deletion app/Domain/User/UserMenu.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public function settingsMenu(): array
/**
* @return MenuItem[]
*/
public function accountMenu(): array
public function accountMenu(User $user): array
{
return [
new MenuItem(
Expand All @@ -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(
Expand Down
27 changes: 16 additions & 11 deletions app/Http/Controllers/User/Menu/AccountMenu.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@

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;

trait AccountMenu
{
public function getSideMenu(): Builder
{
$menuItems = (new UserMenu())->accountMenu();
$menuItems = (new UserMenu())->accountMenu($this->laravelUser());

/** @var Menu $menu */
$menu = app(Menu::class);
Expand All @@ -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("<i class=\"$menuItem->htmlIcon\"></i>");
'id' => $menuItem->htmlId ?? '',
'class' => $menuItem->htmlClass ?? '',
'route' => $menuItem->route,
'icon' => $menuItem->htmlIcon,
'subscript' => $menuItem->subscript
]);
}

$user = auth()->user();
$menu
->find('btn-pm')
->append(' <small>(' . $user->pm_unread . '/' . $user->pm . ')</small>');
});
}

private function laravelUser(): User
{
/** @var Authenticatable|\Coyote\User $user */
$user = auth()->user();
return new LaravelUser($user);
}
}
12 changes: 12 additions & 0 deletions app/Http/Controllers/User/Menu/Guest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php
namespace Coyote\Http\Controllers\User\Menu;

use Coyote\Domain\User\User;

class Guest extends User
{
public function __construct()
{
parent::__construct(false, null, null, null);
}
}
15 changes: 15 additions & 0 deletions app/Http/Controllers/User/Menu/LaravelUser.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php
namespace Coyote\Http\Controllers\User\Menu;

use Coyote\Domain\User\User;

class LaravelUser extends User
{
public function __construct(\Coyote\User $user)
{
parent::__construct(true,
$user->id,
$user->pm,
$user->pm_unread);
}
}
9 changes: 6 additions & 3 deletions app/Http/Controllers/User/Menu/ProfileNavigation.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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, [
Expand All @@ -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();
}
}
6 changes: 3 additions & 3 deletions app/Http/Controllers/User/Menu/SettingsMenu.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ public function getSideMenu(): Builder
$builder
->add($menuItem->title, [
'id' => $menuItem->htmlId,
'route' => $menuItem->route
])
->prepend("<i class=\"$menuItem->htmlIcon\"></i>");
'route' => $menuItem->route,
'icon' => $menuItem->htmlIcon,
]);
}
});
}
Expand Down
17 changes: 12 additions & 5 deletions resources/views/user/base.twig
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@
<menu class="col-md-2">
<ul class="side-menu">
{% for item in side_menu.roots() %}
<li {{ forms.attr(item.attr) }}>
<a href="{{ item.url }}">{{ item.title|raw }}</a>
<li id="{{ item.attr.id }}">
<a href="{{ item.url }}">
<i class="{{ item.attr.icon }}"></i>
{{ item.title }}
<small>{{ item.attr.subscript }}</small>
</a>
</li>
{% endfor %}
</ul>
Expand All @@ -25,10 +29,13 @@

{% if not user('is_confirm') %}
<p class="alert alert-warning">
Twój adres e-mail <strong>nie został potwierdzony</strong>. Nie będziesz dostawał żadnych powiadomień na email.
Nie będziemy mogli również wygenerować Ci nowego hasła.<br>
Twój adres e-mail <strong>nie został potwierdzony</strong>. Nie będziesz dostawał
żadnych powiadomień na email. Nie będziemy mogli również wygenerować Ci nowego hasła.

<br>

<a class="alert-link" href="{{ url('Confirm') }}">Kliknij, aby wygenerować</a> link aktywacyjny umożliwiający potwierdzenie adresu e-mail.
<a class="alert-link" href="{{ url('Confirm') }}">Kliknij, aby wygenerować</a> link
aktywacyjny umożliwiający potwierdzenie adresu e-mail.
</p>
{% endif %}

Expand Down

0 comments on commit 60255f9

Please sign in to comment.