You've already forked Epicnabbo-Catalogus-Updated-Daily
🆙 More fixes 🆙
This commit is contained in:
+13
-13
@@ -15,6 +15,9 @@ use Filament\Schemas\Schema;
|
|||||||
use Filament\Tables\Columns\IconColumn;
|
use Filament\Tables\Columns\IconColumn;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use App\Models\Game\Player\UserBadge;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
class BadgesRelationManager extends RelationManager
|
class BadgesRelationManager extends RelationManager
|
||||||
{
|
{
|
||||||
@@ -41,7 +44,7 @@ class BadgesRelationManager extends RelationManager
|
|||||||
public function table(Table $table): Table
|
public function table(Table $table): Table
|
||||||
{
|
{
|
||||||
return $table
|
return $table
|
||||||
->modifyQueryUsing(fn ($query) => $query->latest('id'))
|
->modifyQueryUsing(fn (Builder $query) => $query->latest('id'))
|
||||||
->columns([
|
->columns([
|
||||||
TextColumn::make('id')
|
TextColumn::make('id')
|
||||||
->label(__('filament::resources.columns.id')),
|
->label(__('filament::resources.columns.id')),
|
||||||
@@ -56,10 +59,10 @@ class BadgesRelationManager extends RelationManager
|
|||||||
|
|
||||||
IconColumn::make('slot_id')
|
IconColumn::make('slot_id')
|
||||||
->label(__('filament::resources.columns.equipped'))
|
->label(__('filament::resources.columns.equipped'))
|
||||||
->icon(fn ($record) => $record->slot_id > 0 ? 'heroicon-o-check-circle' : 'heroicon-o-x-circle')
|
->icon(fn (UserBadge $record) => $record->slot_id > 0 ? 'heroicon-o-check-circle' : 'heroicon-o-x-circle')
|
||||||
->colors([
|
->colors([
|
||||||
'success' => fn (string $state) => $state > 0,
|
'success' => fn ($state) => (int) $state > 0,
|
||||||
'danger' => fn (string $state) => $state <= 0,
|
'danger' => fn ($state) => (int) $state <= 0,
|
||||||
]),
|
]),
|
||||||
])
|
])
|
||||||
->filters([
|
->filters([
|
||||||
@@ -71,7 +74,7 @@ class BadgesRelationManager extends RelationManager
|
|||||||
$user = $livewire->getOwnerRecord();
|
$user = $livewire->getOwnerRecord();
|
||||||
$hasRconEnabled = config('hotel.rcon.enabled');
|
$hasRconEnabled = config('hotel.rcon.enabled');
|
||||||
|
|
||||||
if (! $user->online) {
|
if (! ($user instanceof User) || ! $user->online) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +89,7 @@ class BadgesRelationManager extends RelationManager
|
|||||||
$rcon = app(RconService::class);
|
$rcon = app(RconService::class);
|
||||||
$data = $action->getFormData();
|
$data = $action->getFormData();
|
||||||
|
|
||||||
$rcon->sendSafelyFromDashboard('sendBadge', [$user, $data['badge_code']], 'RCON: Failed to send the badge');
|
$rcon->sendSafelyFromDashboard('sendBadge', [$user, (string) ($data['badge_code'] ?? '')], 'RCON: Failed to send the badge');
|
||||||
}
|
}
|
||||||
|
|
||||||
$action->cancel();
|
$action->cancel();
|
||||||
@@ -97,17 +100,16 @@ class BadgesRelationManager extends RelationManager
|
|||||||
->before(fn (DeleteAction $action, RelationManager $livewire) => self::onDeleteBadgeAction($action, $livewire)),
|
->before(fn (DeleteAction $action, RelationManager $livewire) => self::onDeleteBadgeAction($action, $livewire)),
|
||||||
])
|
])
|
||||||
->toolbarActions([
|
->toolbarActions([
|
||||||
DeleteBulkAction::make()
|
DeleteBulkAction::make(),
|
||||||
->before(fn (DeleteBulkAction $action, RelationManager $livewire) => self::onDeleteBadgeAction($action, $livewire)),
|
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function onDeleteBadgeAction(DeleteAction|DeleteBulkAction $action, RelationManager $livewire): void
|
public static function onDeleteBadgeAction(DeleteAction $action, RelationManager $livewire): void
|
||||||
{
|
{
|
||||||
$user = $livewire->getOwnerRecord();
|
$user = $livewire->getOwnerRecord();
|
||||||
$hasRconEnabled = config('hotel.rcon.enabled');
|
$hasRconEnabled = config('hotel.rcon.enabled');
|
||||||
|
|
||||||
if (! $user->online) {
|
if (! ($user instanceof User) || ! $user->online) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,9 +122,7 @@ class BadgesRelationManager extends RelationManager
|
|||||||
->send();
|
->send();
|
||||||
} else {
|
} else {
|
||||||
$rcon = app(RconService::class);
|
$rcon = app(RconService::class);
|
||||||
$badge = $action instanceof DeleteAction
|
$badge = $action->getRecord()?->badge_code ?? '';
|
||||||
? $action->getRecord()?->badge_code
|
|
||||||
: $action->getRecords()->map(fn ($record) => $record->badge_code)->join(';');
|
|
||||||
|
|
||||||
$rcon->sendSafelyFromDashboard('removeBadge', [$user, $badge], 'RCON: Failed to remove the badge');
|
$rcon->sendSafelyFromDashboard('removeBadge', [$user, $badge], 'RCON: Failed to remove the badge');
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-1
@@ -5,6 +5,7 @@ namespace App\Filament\Resources\User\Users\RelationManagers;
|
|||||||
use App\Filament\Resources\Hotel\ChatlogPrivates\ChatlogPrivateResource;
|
use App\Filament\Resources\Hotel\ChatlogPrivates\ChatlogPrivateResource;
|
||||||
use Filament\Resources\RelationManagers\RelationManager;
|
use Filament\Resources\RelationManagers\RelationManager;
|
||||||
use Filament\Schemas\Schema;
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
class ChatLogPrivateRelationManager extends RelationManager
|
class ChatLogPrivateRelationManager extends RelationManager
|
||||||
@@ -20,7 +21,27 @@ class ChatLogPrivateRelationManager extends RelationManager
|
|||||||
|
|
||||||
public function table(Table $table): Table
|
public function table(Table $table): Table
|
||||||
{
|
{
|
||||||
return $table->columns(ChatlogPrivateResource::getTable())
|
return $table->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(),
|
||||||
|
])
|
||||||
->defaultSort('timestamp', 'desc');
|
->defaultSort('timestamp', 'desc');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-1
@@ -5,6 +5,7 @@ namespace App\Filament\Resources\User\Users\RelationManagers;
|
|||||||
use App\Filament\Resources\Hotel\ChatlogRooms\ChatlogRoomResource;
|
use App\Filament\Resources\Hotel\ChatlogRooms\ChatlogRoomResource;
|
||||||
use Filament\Resources\RelationManagers\RelationManager;
|
use Filament\Resources\RelationManagers\RelationManager;
|
||||||
use Filament\Schemas\Schema;
|
use Filament\Schemas\Schema;
|
||||||
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Table;
|
use Filament\Tables\Table;
|
||||||
|
|
||||||
class ChatLogRelationManager extends RelationManager
|
class ChatLogRelationManager extends RelationManager
|
||||||
@@ -20,7 +21,32 @@ class ChatLogRelationManager extends RelationManager
|
|||||||
|
|
||||||
public function table(Table $table): Table
|
public function table(Table $table): Table
|
||||||
{
|
{
|
||||||
return $table->columns(ChatlogRoomResource::getTable())
|
return $table->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(),
|
||||||
|
])
|
||||||
->defaultSort('timestamp', 'desc');
|
->defaultSort('timestamp', 'desc');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ class UserResource extends Resource
|
|||||||
$formData['currency_5'] = $record->currency('diamonds');
|
$formData['currency_5'] = $record->currency('diamonds');
|
||||||
$formData['currency_101'] = $record->currency('points');
|
$formData['currency_101'] = $record->currency('points');
|
||||||
|
|
||||||
if ($record->settings && is_object($record->settings)) {
|
if ($record->settings) {
|
||||||
$formData['allow_change_username'] = (bool) data_get($record->settings, 'can_change_name', false);
|
$formData['allow_change_username'] = (bool) data_get($record->settings, 'can_change_name', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -275,4 +275,36 @@ class RconService
|
|||||||
{
|
{
|
||||||
$this->closeConnection();
|
$this->closeConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function sendSafelyFromDashboard(string $action, array $args, string $errorMessage): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
switch ($action) {
|
||||||
|
case 'sendBadge':
|
||||||
|
/** @var \App\Models\User $user */
|
||||||
|
$user = $args[0];
|
||||||
|
/** @var string $badge */
|
||||||
|
$badge = (string) ($args[1] ?? '');
|
||||||
|
$this->giveBadge($user, $badge);
|
||||||
|
break;
|
||||||
|
case 'removeBadge':
|
||||||
|
// No direct RCON command defined for removing badges; use alert for now
|
||||||
|
/** @var \App\Models\User $user */
|
||||||
|
$user = $args[0];
|
||||||
|
/** @var string $badge */
|
||||||
|
$badge = (string) ($args[1] ?? '');
|
||||||
|
$this->alertUser($user, sprintf('Badge %s removed.', $badge));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
\Filament\Notifications\Notification::make()
|
||||||
|
->danger()
|
||||||
|
->title('RCON Error')
|
||||||
|
->body($errorMessage)
|
||||||
|
->persistent()
|
||||||
|
->send();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,5 +23,6 @@ parameters:
|
|||||||
- '#Unsafe usage of new static#'
|
- '#Unsafe usage of new static#'
|
||||||
- '#uses generic trait .*HasFactory but does not specify its types#'
|
- '#uses generic trait .*HasFactory but does not specify its types#'
|
||||||
- '#extends generic class .*Factory but does not specify its types#'
|
- '#extends generic class .*Factory but does not specify its types#'
|
||||||
|
- '#return type with generic class .*Builder does not specify its types#'
|
||||||
|
|
||||||
reportUnmatchedIgnoredErrors: false
|
reportUnmatchedIgnoredErrors: false
|
||||||
|
|||||||
@@ -73,3 +73,4 @@
|
|||||||
[2026-01-19 22:24:30] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd
|
[2026-01-19 22:24:30] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd
|
||||||
[2026-01-19 22:25:56] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd
|
[2026-01-19 22:25:56] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd
|
||||||
[2026-01-19 22:29:19] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd
|
[2026-01-19 22:29:19] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd
|
||||||
|
[2026-01-20 16:11:03] production.ERROR: RCON connection failed: Kan geen verbinding maken omdat de doelcomputer de verbinding actief heeft geweigerd
|
||||||
|
|||||||
Reference in New Issue
Block a user