39 lines
1.5 KiB
PHP
39 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Modules\Administration\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\User;
|
|
use Illuminate\Support\Facades\Schema;
|
|
use Modules\Audit\Models\AuditLog;
|
|
use Modules\Media\Models\Media;
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
final class DashboardController extends Controller
|
|
{
|
|
public function __invoke()
|
|
{
|
|
return view('administration::dashboard', [
|
|
'userCount' => User::count(),
|
|
'roleCount' => Schema::hasTable('roles') ? Role::count() : 0,
|
|
'mediaCount' => Schema::hasTable('media') ? Media::count() : 0,
|
|
'auditCount' => Schema::hasTable('audit_logs') ? AuditLog::count() : 0,
|
|
'recentAudit' => Schema::hasTable('audit_logs') ? AuditLog::query()->latest('created_at')->limit(8)->get() : collect(),
|
|
'modules' => $this->modules(),
|
|
]);
|
|
}
|
|
|
|
private function modules(): array
|
|
{
|
|
$statuses = json_decode((string) file_get_contents(base_path('modules_statuses.json')), true) ?: [];
|
|
$modules = [];
|
|
foreach (glob(base_path('Modules/*/module.json')) ?: [] as $manifest) {
|
|
$data = json_decode((string) file_get_contents($manifest), true) ?: [];
|
|
$name = $data['name'] ?? basename(dirname($manifest));
|
|
$modules[] = ['name' => $name, 'version' => $data['version'] ?? '1.0.0', 'enabled' => (bool) ($statuses[$name] ?? false)];
|
|
}
|
|
usort($modules, fn ($a, $b) => strcasecmp($a['name'], $b['name']));
|
|
return $modules;
|
|
}
|
|
}
|