*/ private const DEFAULT_LAYOUT = [ 'counters' => [0, 0], 'transfers' => [0, 1], 'recent' => [0, 2], 'top_clients_by_storage' => [1, 0], 'largest_files' => [1, 1], 'system' => [1, 2], 'news' => [1, 3], 'expired_files' => [0, 3], 'api' => [1, 4], ]; public function isEnabled(User $user, string $widgetKey): bool { $row = DashboardWidgetPreference::query() ->where('user_id', $user->id) ->where('widget_key', $widgetKey) ->first(); return $row->enabled ?? true; } public function columnsFor(User $user): int { return $user->dashboard_columns ?? self::DEFAULT_COLUMNS; } /** * @param list $permittedKeys Only widget keys the viewer * actually holds permission for * — never reveal the layout of * one they can't see at all. * @return array */ public function layoutFor(User $user, array $permittedKeys): array { $rows = DashboardWidgetPreference::query() ->where('user_id', $user->id) ->whereIn('widget_key', $permittedKeys) ->get() ->keyBy('widget_key'); $layout = []; foreach ($permittedKeys as $key) { $row = $rows->get($key); [$defaultColumn, $defaultPosition] = self::DEFAULT_LAYOUT[$key] ?? [0, 0]; $layout[$key] = [ 'enabled' => $row->enabled ?? true, 'column_index' => $row->column_index ?? $defaultColumn, 'position' => $row->position ?? $defaultPosition, ]; } return $layout; } }