Files
Atomcms-edit/app/Filament/Resources/User/Users/RelationManagers/SettingsRelationManager.php
T
2026-05-09 17:32:17 +02:00

193 lines
8.7 KiB
PHP
Executable File

<?php
namespace App\Filament\Resources\User\Users\RelationManagers;
use App\Filament\Traits\TranslatableResource;
use App\Models\User;
use Carbon\CarbonInterval;
use Filament\Actions\Action;
use Filament\Actions\EditAction;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class SettingsRelationManager extends RelationManager
{
use TranslatableResource;
#[\Override]
protected static string $relationship = 'settings';
protected static string $translateIdentifier = 'settings';
#[\Override]
public function form(Schema $schema): Schema
{
return $schema
->components([
Tabs::make('Settings')
->schema([
Tab::make(__('filament::resources.tabs.Account Data'))
->schema([
TextInput::make('achievement_score')
->label(__('filament::resources.inputs.achievement_score'))
->disabled()
->required(),
TextInput::make('respects_received')
->label(__('filament::resources.inputs.respects_received'))
->disabled()
->required(),
Select::make('can_trade')
->native(false)
->label(__('filament::resources.inputs.can_trade'))
->options([
'0' => __('filament::resources.common.No'),
'1' => __('filament::resources.common.Yes'),
])
->required(),
Select::make('block_following')
->native(false)
->label(__('filament::resources.inputs.block_following'))
->options([
'0' => __('filament::resources.common.No'),
'1' => __('filament::resources.common.Yes'),
])
->required(),
Select::make('block_friendrequests')
->native(false)
->label(__('filament::resources.inputs.block_friendrequests'))
->options([
'0' => __('filament::resources.common.No'),
'1' => __('filament::resources.common.Yes'),
])
->required(),
Select::make('block_roominvites')
->native(false)
->label(__('filament::resources.inputs.block_roominvites'))
->options([
'0' => __('filament::resources.common.No'),
'1' => __('filament::resources.common.Yes'),
])
->required(),
TextInput::make('max_rooms')
->label(__('filament::resources.inputs.max_rooms'))
->numeric()
->required(),
TextInput::make('max_friends')
->label(__('filament::resources.inputs.max_friends'))
->numeric()
->required(),
])
->columns(['sm' => 2]),
Tab::make(__('filament::resources.tabs.Extra Settings'))
->schema([
Select::make('old_chat')
->native(false)
->label(__('filament::resources.inputs.old_chat'))
->options([
'0' => __('filament::resources.common.No'),
'1' => __('filament::resources.common.Yes'),
])
->required(),
Select::make('block_camera_follow')
->native(false)
->label(__('filament::resources.inputs.block_camera_follow'))
->options([
'0' => __('filament::resources.common.No'),
'1' => __('filament::resources.common.Yes'),
])
->required(),
Select::make('ignore_bots')
->native(false)
->label(__('filament::resources.inputs.ignore_bots'))
->options([
'0' => __('filament::resources.common.No'),
'1' => __('filament::resources.common.Yes'),
])
->required(),
Select::make('ignore_pets')
->native(false)
->label(__('filament::resources.inputs.ignore_pets'))
->options([
'0' => __('filament::resources.common.No'),
'1' => __('filament::resources.common.Yes'),
])
->required(),
])->columns(['sm' => 2]),
])->columnSpanFull(),
]);
}
public function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('achievement_score')
->label(__('filament::resources.columns.achievement_score'))
->toggleable(),
TextColumn::make('respects_received')
->label(__('filament::resources.columns.respects_received'))
->toggleable(),
TextColumn::make('online_time')
->label(__('filament::resources.columns.online_time'))
->formatStateUsing(fn (string $state) => __(':m minutes', ['m' => round(CarbonInterval::seconds($state)->totalMinutes)]))
->toggleable(),
IconColumn::make('can_trade')
->label(__('filament::resources.columns.can_trade'))
->icon(fn (string $state) => $state === '1' ? 'heroicon-o-check-circle' : 'heroicon-o-x-circle')
->colors([
'success' => '1',
'danger' => '0',
]),
IconColumn::make('can_change_name')
->label(__('filament::resources.columns.can_change_name'))
->icon(fn (string $state) => $state === '1' ? 'heroicon-o-check-circle' : 'heroicon-o-x-circle')
->colors([
'success' => '1',
'danger' => '0',
]),
])
->filters([
//
])
->headerActions([
Action::make('helper')
->label('Settings Tip')
->icon('heroicon-o-exclamation-triangle')
->tooltip('You can only change the offline user settings.')
->extraAttributes(['style' => 'cursor: default !important']),
])
->recordActions([
EditAction::make()
->disabled(function (RelationManager $livewire): bool {
/** @var User $user */
$user = $livewire->getOwnerRecord();
return $user->online;
}),
])
->toolbarActions([]);
}
}