first commit

This commit is contained in:
2026-10-09 08:21:06 +02:00
parent db7456df87
commit d259c62304
3761 changed files with 896046 additions and 0 deletions
@@ -0,0 +1,17 @@
<?php
namespace App\Support\Plugins\Dashboard;
use App\Support\Sidebar\Item;
use Vanguard\Plugins\Plugin;
class Dashboard extends Plugin
{
public function sidebar(): Item
{
return Item::create(__('Dashboard'))
->route('dashboard')
->icon('fas fa-home')
->active('/');
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Support\Plugins\Dashboard\Widgets;
use App\Repositories\User\UserRepository;
use App\Support\Enum\UserStatus;
use Vanguard\Plugins\Widget;
class BannedUsers extends Widget
{
/**
* {@inheritdoc}
*/
public ?string $width = '3';
/**
* {@inheritdoc}
*/
protected string|\Closure|array $permissions = 'users.manage';
public function __construct(protected readonly UserRepository $users) {}
/**
* {@inheritdoc}
*/
public function component(): string
{
return 'StatWidget';
}
/**
* {@inheritdoc}
*/
public function data(): array
{
return [
'label' => __('Banned Users'),
'count' => $this->users->countByStatus(UserStatus::BANNED),
'icon' => 'fa fa-user-slash',
'tone' => 'danger',
];
}
}
@@ -0,0 +1,47 @@
<?php
namespace App\Support\Plugins\Dashboard\Widgets;
use App\Models\User;
use App\Repositories\User\UserRepository;
use Vanguard\Plugins\Widget;
class LatestRegistrations extends Widget
{
/**
* {@inheritdoc}
*/
public ?string $width = '4';
/**
* {@inheritdoc}
*/
protected string|\Closure|array $permissions = 'users.manage';
public function __construct(protected readonly UserRepository $users) {}
/**
* {@inheritdoc}
*/
public function component(): string
{
return 'LatestRegistrationsWidget';
}
/**
* {@inheritdoc}
*/
public function data(): array
{
return [
'users' => $this->users->latest(6)->map(fn (User $user) => [
'id' => $user->id,
'name' => $user->present()->nameOrEmail,
'avatar' => $user->present()->avatar,
'registeredAt' => $user->created_at->diffForHumans(),
'url' => route('users.show', $user),
])->all(),
'viewAllUrl' => route('users.index'),
];
}
}
@@ -0,0 +1,42 @@
<?php
namespace App\Support\Plugins\Dashboard\Widgets;
use App\Repositories\User\UserRepository;
use Vanguard\Plugins\Widget;
class NewUsers extends Widget
{
/**
* {@inheritdoc}
*/
public ?string $width = '3';
/**
* {@inheritdoc}
*/
protected string|\Closure|array $permissions = 'users.manage';
public function __construct(protected readonly UserRepository $users) {}
/**
* {@inheritdoc}
*/
public function component(): string
{
return 'StatWidget';
}
/**
* {@inheritdoc}
*/
public function data(): array
{
return [
'label' => __('New Users'),
'count' => $this->users->newUsersCount(),
'icon' => 'fa fa-user-plus',
'tone' => 'success',
];
}
}
@@ -0,0 +1,64 @@
<?php
namespace App\Support\Plugins\Dashboard\Widgets;
use App\Repositories\User\UserRepository;
use Carbon\Carbon;
use Vanguard\Plugins\Widget;
class RegistrationHistory extends Widget
{
/**
* {@inheritdoc}
*/
public ?string $width = '8';
protected string|\Closure|array $permissions = 'users.manage';
/**
* @var array Count of new users per month.
*/
protected array $usersPerMonth;
public function __construct(protected UserRepository $users) {}
/**
* {@inheritdoc}
*/
public function component(): string
{
return 'RegistrationHistoryWidget';
}
/**
* {@inheritdoc}
*/
public function data(): array
{
$usersPerMonth = $this->getUsersPerMonth();
return [
'title' => __('Registration History'),
'labels' => array_keys($usersPerMonth),
'values' => array_values($usersPerMonth),
// Kept as separate keys so the existing de/sr translations apply.
'units' => [
'new' => __('new'),
'user' => __('user'),
'users' => __('users'),
],
];
}
private function getUsersPerMonth(): array
{
if (isset($this->usersPerMonth)) {
return $this->usersPerMonth;
}
return $this->usersPerMonth = $this->users->countOfNewUsersPerMonthPerRole(
Carbon::now()->subYear()->startOfMonth(),
Carbon::now()->endOfMonth()
);
}
}
@@ -0,0 +1,42 @@
<?php
namespace App\Support\Plugins\Dashboard\Widgets;
use App\Repositories\User\UserRepository;
use Vanguard\Plugins\Widget;
class TotalUsers extends Widget
{
/**
* {@inheritdoc}
*/
public ?string $width = '3';
/**
* {@inheritdoc}
*/
protected string|\Closure|array $permissions = 'users.manage';
public function __construct(protected readonly UserRepository $users) {}
/**
* {@inheritdoc}
*/
public function component(): string
{
return 'StatWidget';
}
/**
* {@inheritdoc}
*/
public function data(): array
{
return [
'label' => __('Total Users'),
'count' => $this->users->count(),
'icon' => 'fa fa-users',
'tone' => 'primary',
];
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Support\Plugins\Dashboard\Widgets;
use App\Repositories\User\UserRepository;
use App\Support\Enum\UserStatus;
use Vanguard\Plugins\Widget;
class UnconfirmedUsers extends Widget
{
/**
* {@inheritdoc}
*/
public ?string $width = '3';
/**
* {@inheritdoc}
*/
protected string|\Closure|array $permissions = 'users.manage';
public function __construct(protected readonly UserRepository $users) {}
/**
* {@inheritdoc}
*/
public function component(): string
{
return 'StatWidget';
}
/**
* {@inheritdoc}
*/
public function data(): array
{
return [
'label' => __('Unconfirmed Users'),
'count' => $this->users->countByStatus(UserStatus::UNCONFIRMED),
'icon' => 'fa fa-user',
'tone' => 'info',
];
}
}
@@ -0,0 +1,64 @@
<?php
namespace App\Support\Plugins\Dashboard\Widgets;
use App\Models\User;
use Illuminate\Support\Facades\Route;
use Vanguard\Plugins\Widget;
class UserActions extends Widget
{
public function __construct()
{
$this->permissions(function (User $user) {
return $user->hasRole('User');
});
}
/**
* {@inheritdoc}
*/
public function component(): string
{
return 'UserActionsWidget';
}
/**
* {@inheritdoc}
*/
public function data(): array
{
$actions = [
[
'label' => __('Update Profile'),
'icon' => 'fas fa-user',
'url' => route('profile'),
],
];
if (config('session.driver') === 'database') {
$actions[] = [
'label' => __('My Sessions'),
'icon' => 'fa fa-list',
'url' => route('profile.sessions'),
];
}
// Contributed by the activity-log plugin, so it may not be installed.
if (Route::has('profile.activity')) {
$actions[] = [
'label' => __('Activity Log'),
'icon' => 'fas fa-server',
'url' => route('profile.activity'),
];
}
$actions[] = [
'label' => __('Logout'),
'icon' => 'fas fa-sign-out-alt',
'url' => route('auth.logout'),
];
return ['actions' => $actions];
}
}
@@ -0,0 +1,48 @@
<?php
namespace App\Support\Plugins\Dashboard\Widgets;
use App\Repositories\User\UserRepository;
use App\Support\Enum\UserStatus;
use Illuminate\Contracts\Auth\Authenticatable;
use Vanguard\Plugins\Widget;
class UsersAwaitingApproval extends Widget
{
/**
* {@inheritdoc}
*/
protected string|\Closure|array $permissions = 'users.manage';
public ?string $width = '12';
public function __construct(protected readonly UserRepository $users) {}
public function authorize(Authenticatable $user): bool
{
if (! setting('approval.enabled')) {
return false;
}
return parent::authorize($user);
}
/**
* {@inheritdoc}
*/
public function component(): string
{
return 'ApprovalNoticeWidget';
}
/**
* {@inheritdoc}
*/
public function data(): array
{
return [
'count' => $this->users->countByStatus(UserStatus::WAITING_APPROVAL),
'reviewUrl' => route('users.index', ['status' => UserStatus::WAITING_APPROVAL]),
];
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Support\Plugins;
use App\Support\Sidebar\Item;
use Vanguard\Plugins\Plugin;
class RolesAndPermissions extends Plugin
{
public function sidebar(): Item
{
$roles = Item::create(__('Roles'))
->route('roles.index')
->active('roles*')
->permissions('roles.manage');
$permissions = Item::create(__('Permissions'))
->route('permissions.index')
->active('permissions*')
->permissions('permissions.manage');
return Item::create(__('Roles & Permissions'))
->href('#roles-dropdown')
->icon('fas fa-users-cog')
->permissions(['roles.manage', 'permissions.manage'])
->addChildren([
$roles,
$permissions,
]);
}
}
+45
View File
@@ -0,0 +1,45 @@
<?php
namespace App\Support\Plugins;
use App\Models\User;
use App\Support\Sidebar\Item;
use Vanguard\Plugins\Plugin;
class Settings extends Plugin
{
public function sidebar(): Item
{
$general = Item::create(__('General'))
->route('settings.general')
->active('settings')
->permissions('settings.general');
$authAndRegistration = Item::create(__('Auth & Registration'))
->route('settings.auth')
->active('settings/auth')
->permissions('settings.auth');
$notifications = Item::create(__('Notifications'))
->route('settings.notifications')
->active('settings/notifications')
->permissions(function (User $user) {
return $user->hasPermission('settings.notifications');
});
return Item::create(__('Settings'))
->href('#settings-dropdown')
->icon('fas fa-cogs')
->permissions(function (User $user) {
return $user->hasPermission(
['settings.general', 'settings.auth', 'settings.notifications'],
allRequired: false
);
})
->addChildren([
$general,
$authAndRegistration,
$notifications,
]);
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Support\Plugins;
use App\Support\Sidebar\Item;
use Vanguard\Plugins\Plugin;
class Users extends Plugin
{
public function sidebar(): Item
{
return Item::create(__('Users'))
->route('users.index')
->icon('fas fa-users')
->active('users*')
->permissions('users.manage');
}
}