Files
biiproject-kit-v1/app/Models/DashboardWidgetPreference.php

60 lines
2.2 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class DashboardWidgetPreference extends Model
{
protected $fillable = ['user_id', 'widget_key', 'visible', 'sort_order'];
protected $casts = ['visible' => 'boolean'];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
/**
* Return merged widget config: defaults overlaid with user prefs.
*
* @return array<string, array{label: string, visible: bool, sort_order: int, permission: string|null}>
*/
public static function forUser(int $userId): array
{
$defaults = self::defaults();
$prefs = self::where('user_id', $userId)
->get()
->keyBy('widget_key');
foreach ($defaults as $key => &$widget) {
if ($prefs->has($key)) {
$widget['visible'] = $prefs[$key]->visible;
$widget['sort_order'] = $prefs[$key]->sort_order;
}
}
uasort($defaults, fn ($a, $b) => $a['sort_order'] <=> $b['sort_order']);
return $defaults;
}
/**
* All available widgets with their defaults.
*/
public static function defaults(): array
{
return [
'cpu' => ['label' => 'CPU Load', 'visible' => true, 'sort_order' => 1, 'permission' => null],
'ram' => ['label' => 'Memory', 'visible' => true, 'sort_order' => 2, 'permission' => null],
'disk' => ['label' => 'Storage', 'visible' => true, 'sort_order' => 3, 'permission' => null],
'live_users' => ['label' => 'Live Users', 'visible' => true, 'sort_order' => 4, 'permission' => null],
'queues' => ['label' => 'Queue Stats', 'visible' => true, 'sort_order' => 5, 'permission' => null],
'activity_feed' => ['label' => 'Activity Feed', 'visible' => true, 'sort_order' => 6, 'permission' => 'view health and logs'],
'ai_insight' => ['label' => 'AI Security Insight','visible' => true, 'sort_order' => 7, 'permission' => 'view ai log analysis'],
];
}
}