first commit
This commit is contained in:
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user