From d57e97bb42657dbf43b64616809feb1d50aee8ec Mon Sep 17 00:00:00 2001 From: Remco Date: Tue, 20 Jan 2026 18:26:07 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=86=99=20More=20fixes=20=F0=9F=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebsiteDrawBadgeResource.php | 8 +- .../BadgeTextEditorResource.php | 16 +++- .../CatalogItemsRelationManager.php | 34 +++++--- .../ChatlogPrivateResource.php | 62 ++++++++------ .../ChatlogRooms/ChatlogRoomResource.php | 80 ++++++++++++------- .../EmulatorTexts/EmulatorTextResource.php | 2 +- .../Resources/User/Users/Pages/ListUsers.php | 3 +- .../SettingsRelationManager.php | 2 +- Updated_Cms/storage/logs/laravel.log | 6 ++ 9 files changed, 139 insertions(+), 74 deletions(-) diff --git a/Updated_Cms/app/Filament/Resources/Atom/WebsiteDrawBadges/WebsiteDrawBadgeResource.php b/Updated_Cms/app/Filament/Resources/Atom/WebsiteDrawBadges/WebsiteDrawBadgeResource.php index 09fdac3122..8a0d6f94f4 100644 --- a/Updated_Cms/app/Filament/Resources/Atom/WebsiteDrawBadges/WebsiteDrawBadgeResource.php +++ b/Updated_Cms/app/Filament/Resources/Atom/WebsiteDrawBadges/WebsiteDrawBadgeResource.php @@ -16,6 +16,7 @@ use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\ToggleColumn; use Filament\Tables\Table; use Illuminate\Support\Facades\DB; +use App\Models\WebsiteDrawBadge as WebsiteDrawBadgeModel; class WebsiteDrawBadgeResource extends Resource { @@ -87,7 +88,12 @@ class WebsiteDrawBadgeResource extends Resource ->dateTime(), ImageColumn::make('badge_url') ->label(__('Badge')) - ->getStateUsing(fn ($record) => config('app.url') . $record->badge_url) + ->getStateUsing(function (WebsiteDrawBadgeModel $record): string { + $appUrl = config('app.url'); + $appUrl = is_string($appUrl) ? $appUrl : ''; + $badgeUrl = is_string($record->badge_url) ? $record->badge_url : ''; + return $appUrl . $badgeUrl; + }) ->extraAttributes(['style' => 'image-rendering: pixelated']) ->size(40), ToggleColumn::make('published') diff --git a/Updated_Cms/app/Filament/Resources/Hotel/BadgeTextEditors/BadgeTextEditorResource.php b/Updated_Cms/app/Filament/Resources/Hotel/BadgeTextEditors/BadgeTextEditorResource.php index 5b97b1a9ea..7b3c151dd2 100644 --- a/Updated_Cms/app/Filament/Resources/Hotel/BadgeTextEditors/BadgeTextEditorResource.php +++ b/Updated_Cms/app/Filament/Resources/Hotel/BadgeTextEditors/BadgeTextEditorResource.php @@ -62,8 +62,9 @@ class BadgeTextEditorResource extends Resource ->columns([ ImageColumn::make('badge_key') ->label('Badge Image') - ->getStateUsing(function ($record) use ($badgesPath) { - $badgeName = str_replace('badge_desc_', '', $record->badge_key); + ->getStateUsing(function (WebsiteBadge $record) use ($badgesPath): string { + $badgeKey = is_string($record->badge_key) ? $record->badge_key : ''; + $badgeName = str_replace('badge_desc_', '', $badgeKey); return asset($badgesPath . $badgeName . '.gif'); }) @@ -71,7 +72,11 @@ class BadgeTextEditorResource extends Resource ->height(50), TextColumn::make('badge_name') ->label('Badge Code & Name') - ->formatStateUsing(fn ($record) => $record->badge_key . ' : ' . $record->badge_name) + ->formatStateUsing(function (WebsiteBadge $record): string { + $key = is_string($record->badge_key) ? $record->badge_key : ''; + $name = is_string($record->badge_name) ? $record->badge_name : ''; + return $key . ' : ' . $name; + }) ->searchable(query: function ($query, $search): void { $query->where('badge_key', 'like', "%{$search}%") ->orWhere('badge_name', 'like', "%{$search}%"); @@ -79,7 +84,10 @@ class BadgeTextEditorResource extends Resource ->sortable(), TextColumn::make('badge_description') ->label('Badge Description') - ->getStateUsing(fn ($record) => Str::limit($record->badge_description, 65)) + ->getStateUsing(function (WebsiteBadge $record): string { + $desc = is_string($record->badge_description) ? $record->badge_description : ''; + return Str::limit($desc, 65); + }) ->searchable(), ]) ->filters([]) diff --git a/Updated_Cms/app/Filament/Resources/Hotel/CatalogPages/RelationManagers/CatalogItemsRelationManager.php b/Updated_Cms/app/Filament/Resources/Hotel/CatalogPages/RelationManagers/CatalogItemsRelationManager.php index 5e76951c00..6eecb8ce24 100644 --- a/Updated_Cms/app/Filament/Resources/Hotel/CatalogPages/RelationManagers/CatalogItemsRelationManager.php +++ b/Updated_Cms/app/Filament/Resources/Hotel/CatalogPages/RelationManagers/CatalogItemsRelationManager.php @@ -23,6 +23,7 @@ use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Filters\TernaryFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; +use App\Models\Game\Furniture\CatalogItem; class CatalogItemsRelationManager extends RelationManager { @@ -227,7 +228,10 @@ class CatalogItemsRelationManager extends RelationManager ->recordTitleAttribute('catalog_name') ->columns([ ImageColumn::make('icon') - ->getStateUsing(fn ($record) => url($record->itemBase?->icon())) + ->getStateUsing(function (CatalogItem $record): string { + $icon = $record->itemBase?->icon(); + return is_string($icon) && $icon !== '' ? url($icon) : ''; + }) ->size('25px') ->label('Icon') @@ -278,11 +282,16 @@ class CatalogItemsRelationManager extends RelationManager ]) ->filters([ SelectFilter::make('type') - ->query(fn (Builder $query, array $data): Builder => empty($data['values']) - ? $query - : $query->whereHas('itemBase', function (Builder $query) use ($data): void { - $query->whereIn('type', $data['values']); - })) + ->query(function (Builder $query, array $data): Builder { + $values = $data['values'] ?? null; + if (! is_array($values) || $values === []) { + return $query; + } + + return $query->whereHas('itemBase', function (Builder $query) use ($values): void { + $query->whereIn('type', $values); + }); + }) ->options( fn () => ItemBase::query() ->select('type') @@ -313,7 +322,7 @@ class CatalogItemsRelationManager extends RelationManager ->icon('heroicon-m-cube') ->modalWidth('3xl') ->modalHeading('Edit Item Base') - ->fillForm(function ($record) { + ->fillForm(function (CatalogItem $record): array { $itemBase = $record->itemBase; if (! $itemBase) { return []; @@ -440,7 +449,7 @@ class CatalogItemsRelationManager extends RelationManager ->nullable() ->dehydrateStateUsing(fn ($state) => $state ?? ''), ]) - ->action(function (array $data, $record): void { + ->action(function (array $data, CatalogItem $record): void { // Transform any null or empty values to empty strings $data = collect($data)->map(function ($value) { if ($value === null || $value === '') { @@ -453,9 +462,14 @@ class CatalogItemsRelationManager extends RelationManager return $value; })->toArray(); - $record->itemBase->forceFill($data)->save(); + $itemBase = $record->itemBase; + if ($itemBase) { + $itemBase->forceFill($data)->save(); + } }) - ->visible(fn ($record) => $record->itemBase !== null), + ->visible(function (CatalogItem $record): bool { + return $record->itemBase !== null; + }), DeleteAction::make(), ]) ->toolbarActions([ diff --git a/Updated_Cms/app/Filament/Resources/Hotel/ChatlogPrivates/ChatlogPrivateResource.php b/Updated_Cms/app/Filament/Resources/Hotel/ChatlogPrivates/ChatlogPrivateResource.php index 6ecb5d3fca..89fb245fe5 100644 --- a/Updated_Cms/app/Filament/Resources/Hotel/ChatlogPrivates/ChatlogPrivateResource.php +++ b/Updated_Cms/app/Filament/Resources/Hotel/ChatlogPrivates/ChatlogPrivateResource.php @@ -34,12 +34,24 @@ class ChatlogPrivateResource extends Resource ->components([ TextInput::make('sender') ->disabled() - ->formatStateUsing(fn ($record) => $record->sender?->username) + ->formatStateUsing(function ($record): string { + if (! ($record instanceof \App\Models\ChatlogPrivate)) { + return ''; + } + $username = $record->sender?->username; + return is_string($username) ? $username : ''; + }) ->label(__('filament::resources.inputs.sender')), TextInput::make('receiver') ->disabled() - ->formatStateUsing(fn ($record) => $record->receiver?->username) + ->formatStateUsing(function ($record): string { + if (! ($record instanceof \App\Models\ChatlogPrivate)) { + return ''; + } + $username = $record->receiver?->username; + return is_string($username) ? $username : ''; + }) ->label(__('filament::resources.inputs.receiver')), Textarea::make('message') @@ -54,7 +66,27 @@ class ChatlogPrivateResource extends Resource { return $table ->defaultSort('timestamp', 'desc') - ->columns(self::getTable()) + ->columns([ + TextColumn::make('sender.username') + ->label(__('filament::resources.columns.sender')) + ->toggleable() + ->searchable(isIndividual: true), + + TextColumn::make('receiver.username') + ->label(__('filament::resources.columns.receiver')) + ->toggleable() + ->searchable(isIndividual: true), + + TextColumn::make('message') + ->label(__('filament::resources.columns.message')) + ->limit(40) + ->searchable(isIndividual: true), + + TextColumn::make('timestamp') + ->label(__('filament::resources.columns.executed_at')) + ->dateTime('Y-m-d H:i') + ->toggleable(), + ]) ->filters([]) ->recordActions([ ViewAction::make(), @@ -62,29 +94,9 @@ class ChatlogPrivateResource extends Resource ->toolbarActions([]); } - public static function getTable(): array + public static function getTable(): mixed { - return [ - TextColumn::make('sender.username') - ->label(__('filament::resources.columns.sender')) - ->toggleable() - ->searchable(isIndividual: true), - - TextColumn::make('receiver.username') - ->label(__('filament::resources.columns.receiver')) - ->toggleable() - ->searchable(isIndividual: true), - - TextColumn::make('message') - ->label(__('filament::resources.columns.message')) - ->limit(40) - ->searchable(isIndividual: true), - - TextColumn::make('timestamp') - ->label(__('filament::resources.columns.executed_at')) - ->dateTime('Y-m-d H:i') - ->toggleable(), - ]; + return []; } public static function getPages(): array diff --git a/Updated_Cms/app/Filament/Resources/Hotel/ChatlogRooms/ChatlogRoomResource.php b/Updated_Cms/app/Filament/Resources/Hotel/ChatlogRooms/ChatlogRoomResource.php index 9e0f86b9c9..136e45bdc5 100644 --- a/Updated_Cms/app/Filament/Resources/Hotel/ChatlogRooms/ChatlogRoomResource.php +++ b/Updated_Cms/app/Filament/Resources/Hotel/ChatlogRooms/ChatlogRoomResource.php @@ -34,18 +34,36 @@ class ChatlogRoomResource extends Resource ->components([ TextInput::make('room') ->label(__('filament::resources.inputs.room')) - ->formatStateUsing(fn ($record) => $record->room?->name) + ->formatStateUsing(function ($record): string { + if (! ($record instanceof \App\Models\ChatlogRoom)) { + return ''; + } + $name = $record->room?->name; + return is_string($name) ? $name : ''; + }) ->columnSpanFull() ->disabled(), TextInput::make('sender') ->label(__('filament::resources.inputs.sender')) - ->formatStateUsing(fn ($record) => $record->sender?->username) + ->formatStateUsing(function ($record): string { + if (! ($record instanceof \App\Models\ChatlogRoom)) { + return ''; + } + $username = $record->sender?->username; + return is_string($username) ? $username : ''; + }) ->disabled(), TextInput::make('receiver') ->label(__('filament::resources.inputs.receiver')) - ->formatStateUsing(fn ($record) => $record->receiver?->username) + ->formatStateUsing(function ($record): string { + if (! ($record instanceof \App\Models\ChatlogRoom)) { + return ''; + } + $username = $record->receiver?->username; + return is_string($username) ? $username : ''; + }) ->disabled(), Textarea::make('message') @@ -60,7 +78,32 @@ class ChatlogRoomResource extends Resource { return $table ->defaultSort('timestamp', 'desc') - ->columns(self::getTable()) + ->columns([ + TextColumn::make('room.name') + ->label(__('filament::resources.columns.room')) + ->toggleable() + ->searchable(isIndividual: true), + + TextColumn::make('sender.username') + ->label(__('filament::resources.columns.sender')) + ->toggleable() + ->searchable(isIndividual: true), + + TextColumn::make('receiver.username') + ->label(__('filament::resources.columns.receiver')) + ->toggleable() + ->searchable(isIndividual: true), + + TextColumn::make('message') + ->label(__('filament::resources.columns.message')) + ->limit(40) + ->searchable(isIndividual: true), + + TextColumn::make('timestamp') + ->label(__('filament::resources.columns.executed_at')) + ->dateTime('Y-m-d H:i') + ->toggleable(), + ]) ->filters([ // ]) @@ -70,34 +113,9 @@ class ChatlogRoomResource extends Resource ->toolbarActions([]); } - public static function getTable(): array + public static function getTable(): mixed { - return [ - TextColumn::make('room.name') - ->label(__('filament::resources.columns.room')) - ->toggleable() - ->searchable(isIndividual: true), - - TextColumn::make('sender.username') - ->label(__('filament::resources.columns.sender')) - ->toggleable() - ->searchable(isIndividual: true), - - TextColumn::make('receiver.username') - ->label(__('filament::resources.columns.receiver')) - ->toggleable() - ->searchable(isIndividual: true), - - TextColumn::make('message') - ->label(__('filament::resources.columns.message')) - ->limit(40) - ->searchable(isIndividual: true), - - TextColumn::make('timestamp') - ->label(__('filament::resources.columns.executed_at')) - ->dateTime('Y-m-d H:i') - ->toggleable(), - ]; + return []; } public static function getPages(): array diff --git a/Updated_Cms/app/Filament/Resources/Hotel/EmulatorTexts/EmulatorTextResource.php b/Updated_Cms/app/Filament/Resources/Hotel/EmulatorTexts/EmulatorTextResource.php index 0bc2120e0d..f64561a34f 100644 --- a/Updated_Cms/app/Filament/Resources/Hotel/EmulatorTexts/EmulatorTextResource.php +++ b/Updated_Cms/app/Filament/Resources/Hotel/EmulatorTexts/EmulatorTextResource.php @@ -37,7 +37,7 @@ class EmulatorTextResource extends Resource ->label(__('filament::resources.inputs.key')) ->required() ->maxLength(100) - ->unique(ignoreRecord: true), + ->unique('emulator_texts', 'key', ignoreRecord: true), TextInput::make('value') ->label(__('filament::resources.inputs.value')) diff --git a/Updated_Cms/app/Filament/Resources/User/Users/Pages/ListUsers.php b/Updated_Cms/app/Filament/Resources/User/Users/Pages/ListUsers.php index decc694a8c..b80bd11e82 100644 --- a/Updated_Cms/app/Filament/Resources/User/Users/Pages/ListUsers.php +++ b/Updated_Cms/app/Filament/Resources/User/Users/Pages/ListUsers.php @@ -48,7 +48,8 @@ class ListUsers extends ListRecords ->default(false), ]) ->action(function (array $data): void { - $allUsersId = collect($data['users'] ?? [])->values(); + $usersVal = $data['users'] ?? []; + $allUsersId = collect(is_array($usersVal) ? $usersVal : [])->values(); $senderId = !empty($data['as_staff']) ? null : auth()->id(); if ($allUsersId->isEmpty()) { diff --git a/Updated_Cms/app/Filament/Resources/User/Users/RelationManagers/SettingsRelationManager.php b/Updated_Cms/app/Filament/Resources/User/Users/RelationManagers/SettingsRelationManager.php index d6988f1851..5bfc4fe23b 100644 --- a/Updated_Cms/app/Filament/Resources/User/Users/RelationManagers/SettingsRelationManager.php +++ b/Updated_Cms/app/Filament/Resources/User/Users/RelationManagers/SettingsRelationManager.php @@ -146,7 +146,7 @@ class SettingsRelationManager extends RelationManager TextColumn::make('online_time') ->label(__('filament::resources.columns.online_time')) - ->formatStateUsing(fn (string $state) => __(':m minutes', ['m' => round(CarbonInterval::seconds($state)->totalMinutes)])) + ->formatStateUsing(fn (string $state) => __(':m minutes', ['m' => round(CarbonInterval::seconds((int) $state)->totalMinutes)])) ->toggleable(), IconColumn::make('can_trade') diff --git a/Updated_Cms/storage/logs/laravel.log b/Updated_Cms/storage/logs/laravel.log index 06669b8369..69514ac60a 100644 --- a/Updated_Cms/storage/logs/laravel.log +++ b/Updated_Cms/storage/logs/laravel.log @@ -93,3 +93,9 @@ [2026-01-20 16:37:44] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd [2026-01-20 16:37:44] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd [2026-01-20 16:46:43] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd +[2026-01-20 17:17:42] production.ERROR: Cannot use App\Models\WebsiteBadge as WebsiteBadge because the name is already in use {"exception":"[object] (Symfony\\Component\\ErrorHandler\\Error\\FatalError(code: 0): Cannot use App\\Models\\WebsiteBadge as WebsiteBadge because the name is already in use at C:/Github/Epicnabbo-Catalogus-2025FullPack-Updated-Daily/Updated_Cms/app/Filament/Resources/Hotel/BadgeTextEditors/BadgeTextEditorResource.php:20) +[stacktrace] +#0 {main} +"} +[2026-01-20 17:19:05] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd +[2026-01-20 17:19:06] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd