From 532f3bdb3f2e7b9091410c00dc9f0781dc8b8d43 Mon Sep 17 00:00:00 2001 From: NekoCH <96158157+ex-hentai@users.noreply.github.com> Date: Sun, 21 Sep 2025 18:07:38 +0800 Subject: [PATCH] migration script # Conflicts: # app/Filament/Resources/Torrent/AnnounceLogResource.php --- app/Filament/Clusters/Plugin.php | 2 +- app/Filament/Custom/Widgets/StatTable.php | 2 +- app/Filament/PageList.php | 9 +- app/Filament/PageListSingle.php | 6 +- app/Filament/Pages/AnnounceMonitor.php | 10 +- app/Filament/Pages/Dashboard.php | 3 +- app/Filament/Pages/RunCommand.php | 4 +- .../Resources/Oauth/AccessTokenResource.php | 34 +-- .../Resources/Oauth/AuthCodeResource.php | 34 +-- .../Resources/Oauth/ClientResource.php | 48 +++-- .../ClientResource/Pages/ManageClients.php | 3 +- .../Resources/Oauth/ProviderResource.php | 83 +++---- .../Pages/ManageProviders.php | 3 +- .../Resources/Oauth/RefreshTokenResource.php | 32 +-- .../Resources/Section/AudioCodecResource.php | 15 +- .../Pages/EditAudioCodec.php | 3 +- .../Pages/ListAudioCodecs.php | 3 +- .../Resources/Section/CategoryResource.php | 71 +++--- .../CategoryResource/Pages/EditCategory.php | 3 +- .../CategoryResource/Pages/ListCategories.php | 3 +- .../Resources/Section/CodecResource.php | 54 +++-- .../Section/CodecResource/Pages/EditCodec.php | 3 +- .../CodecResource/Pages/ListCodecs.php | 3 +- .../Resources/Section/IconResource.php | 68 +++--- .../Section/IconResource/Pages/EditIcon.php | 3 +- .../Section/IconResource/Pages/ListIcons.php | 3 +- .../Resources/Section/MediaResource.php | 15 +- .../Section/MediaResource/Pages/EditMedia.php | 3 +- .../Section/MediaResource/Pages/ListMedia.php | 3 +- .../Resources/Section/ProcessingResource.php | 15 +- .../Pages/EditProcessing.php | 3 +- .../Pages/ListProcessings.php | 3 +- .../Resources/Section/SecondIconResource.php | 67 +++--- .../Pages/EditSecondIcon.php | 3 +- .../Pages/ListSecondIcons.php | 3 +- .../Resources/Section/SectionResource.php | 94 ++++---- .../SectionResource/Pages/EditSection.php | 3 +- .../SectionResource/Pages/ListSections.php | 3 +- .../Resources/Section/SourceResource.php | 15 +- .../SourceResource/Pages/EditSource.php | 3 +- .../SourceResource/Pages/ListSources.php | 3 +- .../Resources/Section/StandardResource.php | 15 +- .../StandardResource/Pages/EditStandard.php | 3 +- .../StandardResource/Pages/ListStandards.php | 3 +- .../Resources/Section/TeamResource.php | 15 +- .../Section/TeamResource/Pages/EditTeam.php | 3 +- .../Section/TeamResource/Pages/ListTeams.php | 3 +- .../Resources/System/AgentAllowResource.php | 77 ++++--- .../Pages/EditAgentAllow.php | 3 +- .../Pages/ListAgentAllows.php | 16 +- .../DeniesRelationManager.php | 41 ++-- .../Resources/System/AgentDenyResource.php | 58 ++--- .../AgentDenyResource/Pages/EditAgentDeny.php | 3 +- .../Pages/ListAgentDenies.php | 3 +- .../System/DownloadSpeedResource.php | 36 ++-- .../Pages/ManageDownloadSpeeds.php | 3 +- .../Resources/System/ExamResource.php | 134 +++++++----- .../System/ExamResource/Pages/CreateExam.php | 3 +- .../System/ExamResource/Pages/EditExam.php | 6 +- .../System/ExamResource/Pages/ListExams.php | 3 +- app/Filament/Resources/System/IspResource.php | 36 ++-- .../System/IspResource/Pages/ManageIsps.php | 3 +- .../Resources/System/MedalResource.php | 97 +++++---- .../System/MedalResource/Pages/EditMedal.php | 3 +- .../System/MedalResource/Pages/ListMedals.php | 3 +- .../System/MessageTemplateResource.php | 53 +++-- .../Pages/ManageMessageTemplates.php | 3 +- .../Resources/System/PluginResource.php | 51 +++-- .../PluginResource/Pages/ManagePlugins.php | 3 +- .../Resources/System/PluginStoreResource.php | 44 ++-- .../Pages/EditPluginStore.php | 3 +- .../System/SeedBoxRecordResource.php | 108 ++++++---- .../Pages/CreateSeedBoxRecord.php | 3 +- .../Pages/EditSeedBoxRecord.php | 6 +- .../Pages/ListSeedBoxRecords.php | 15 +- .../Resources/System/SettingResource.php | 45 ++-- .../SettingResource/Pages/EditSetting.php | 165 +++++++------- .../Resources/System/TorrentStateResource.php | 37 ++-- .../Resources/System/TrackerUrlResource.php | 55 +++-- .../Pages/ManageTrackerUrls.php | 3 +- .../Resources/System/UploadSpeedResource.php | 36 ++-- .../Pages/ManageUploadSpeeds.php | 3 +- .../System/UsernameChangeLogResource.php | 47 ++-- .../Resources/Torrent/AnnounceLogResource.php | 174 ++++++++------- .../Pages/EditAnnounceLog.php | 3 +- .../Resources/Torrent/TagResource.php | 85 ++++---- .../Torrent/TagResource/Pages/EditTag.php | 3 +- .../Torrent/TagResource/Pages/ListTags.php | 3 +- .../Torrent/TorrentDenyReasonResource.php | 42 ++-- .../Pages/ManageTorrentDenyReasons.php | 6 +- .../Torrent/TorrentOperationLogResource.php | 49 +++-- .../Resources/Torrent/TorrentResource.php | 185 +++++++++------- .../TorrentResource/Pages/EditTorrent.php | 3 +- .../Resources/User/AttendanceLogResource.php | 57 ++--- .../Pages/ManageAttendanceLogs.php | 3 +- .../Resources/User/BonusLogResource.php | 47 ++-- app/Filament/Resources/User/ClaimResource.php | 63 +++--- .../User/ClaimResource/Pages/EditClaim.php | 3 +- .../Resources/User/ExamUserResource.php | 107 +++++---- .../ExamUserResource/Pages/EditExamUser.php | 3 +- .../ExamUserResource/Pages/ViewExamUser.php | 24 ++- .../Resources/User/HitAndRunResource.php | 101 +++++---- .../HitAndRunResource/Pages/EditHitAndRun.php | 3 +- .../HitAndRunResource/Pages/ViewHitAndRun.php | 9 +- .../Resources/User/InviteResource.php | 73 ++++--- .../User/InviteResource/Pages/EditInvite.php | 3 +- .../Resources/User/LoginLogResource.php | 42 ++-- app/Filament/Resources/User/TokenResource.php | 45 ++-- .../Resources/User/TorrentBuyLogResource.php | 50 +++-- .../Pages/EditTorrentBuyLog.php | 3 +- .../Resources/User/UserMedalResource.php | 98 +++++---- .../UserMedalResource/Pages/EditUserMedal.php | 3 +- .../Resources/User/UserMetaResource.php | 50 +++-- .../UserMetaResource/Pages/CreateUserMeta.php | 3 +- .../UserMetaResource/Pages/EditUserMeta.php | 6 +- .../UserMetaResource/Pages/ListUserMetas.php | 3 +- .../Resources/User/UserModifyLogResource.php | 50 +++-- .../Pages/ManageUserModifyLogs.php | 3 +- app/Filament/Resources/User/UserResource.php | 204 ++++++++++-------- .../User/UserResource/Pages/CreateUser.php | 6 +- .../User/UserResource/Pages/EditUser.php | 6 +- .../User/UserResource/Pages/ListUsers.php | 9 +- .../User/UserResource/Pages/UserProfile.php | 126 ++++++----- .../User/UserResource/Pages/ViewUser.php | 3 +- .../MedalsRelationManager.php | 32 +-- app/Filament/Widgets/AccountInfo.php | 2 +- .../AnnounceMonitor/MaxUploadedUser.php | 8 +- app/Filament/Widgets/LatestTorrents.php | 12 +- app/Filament/Widgets/LatestUsers.php | 13 +- app/Filament/Widgets/TorrentTrend.php | 2 +- app/Filament/Widgets/UserTrend.php | 2 +- 131 files changed, 2177 insertions(+), 1644 deletions(-) diff --git a/app/Filament/Clusters/Plugin.php b/app/Filament/Clusters/Plugin.php index a2d886bd..10423ab2 100644 --- a/app/Filament/Clusters/Plugin.php +++ b/app/Filament/Clusters/Plugin.php @@ -6,5 +6,5 @@ use Filament\Clusters\Cluster; class Plugin extends Cluster { - protected static ?string $navigationIcon = 'heroicon-o-squares-2x2'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-squares-2x2'; } diff --git a/app/Filament/Custom/Widgets/StatTable.php b/app/Filament/Custom/Widgets/StatTable.php index f05c7b84..2441d641 100644 --- a/app/Filament/Custom/Widgets/StatTable.php +++ b/app/Filament/Custom/Widgets/StatTable.php @@ -7,7 +7,7 @@ use Filament\Widgets\Widget; class StatTable extends Widget { - protected static string $view = 'filament.widgets.stat-table'; + protected string $view = 'filament.widgets.stat-table'; protected function getHeader(): string { diff --git a/app/Filament/PageList.php b/app/Filament/PageList.php index 952a8179..70b7ab8e 100644 --- a/app/Filament/PageList.php +++ b/app/Filament/PageList.php @@ -2,15 +2,18 @@ namespace App\Filament; +use Filament\Support\Enums\Width; +use Closure; +use Filament\Tables\Enums\FiltersLayout; use Filament\Resources\Pages\ListRecords; use Filament\Tables\Filters\Layout; use Illuminate\Database\Eloquent\Model; class PageList extends ListRecords { - protected ?string $maxContentWidth = 'full'; + protected Width|string|null $maxContentWidth = 'full'; - protected function getTableRecordUrlUsing(): ?\Closure + protected function getTableRecordUrlUsing(): ?Closure { return function (Model $record): ?string { return null; @@ -19,6 +22,6 @@ class PageList extends ListRecords protected function getTableFiltersLayout(): ?string { - return \Filament\Tables\Enums\FiltersLayout::AboveContent; + return FiltersLayout::AboveContent; } } diff --git a/app/Filament/PageListSingle.php b/app/Filament/PageListSingle.php index 55dfe17f..4f3c7ee4 100644 --- a/app/Filament/PageListSingle.php +++ b/app/Filament/PageListSingle.php @@ -2,6 +2,8 @@ namespace App\Filament; +use Filament\Support\Enums\Width; +use Filament\Tables\Enums\FiltersLayout; use Closure; use Filament\Resources\Pages\ManageRecords; use Filament\Tables\Filters\Layout; @@ -9,11 +11,11 @@ use Illuminate\Database\Eloquent\Model; class PageListSingle extends ManageRecords { - protected ?string $maxContentWidth = 'full'; + protected Width|string|null $maxContentWidth = 'full'; protected function getTableFiltersLayout(): ?string { - return \Filament\Tables\Enums\FiltersLayout::AboveContent; + return FiltersLayout::AboveContent; } protected function getTableRecordActionUsing(): ?Closure diff --git a/app/Filament/Pages/AnnounceMonitor.php b/app/Filament/Pages/AnnounceMonitor.php index da767eda..77f712a2 100644 --- a/app/Filament/Pages/AnnounceMonitor.php +++ b/app/Filament/Pages/AnnounceMonitor.php @@ -1,19 +1,21 @@ schema([ + return $schema + ->components([ // ]); } @@ -45,32 +49,32 @@ class AccessTokenResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->searchable(), - Tables\Columns\TextColumn::make('user.username') + TextColumn::make('id')->searchable(), + TextColumn::make('user.username') ->label(__('label.username')) ->formatStateUsing(fn ($record) => username_for_admin($record->user_id)), - Tables\Columns\TextColumn::make('client.name') + TextColumn::make('client.name') ->label(__('oauth.client')), - Tables\Columns\TextColumn::make('expires_at') + TextColumn::make('expires_at') ->label(__('label.expire_at')) ]) ->filters([ // ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ - 'index' => Pages\ManageAccessTokens::route('/'), + 'index' => ManageAccessTokens::route('/'), ]; } } diff --git a/app/Filament/Resources/Oauth/AuthCodeResource.php b/app/Filament/Resources/Oauth/AuthCodeResource.php index 0333c55f..5a5d99cd 100644 --- a/app/Filament/Resources/Oauth/AuthCodeResource.php +++ b/app/Filament/Resources/Oauth/AuthCodeResource.php @@ -2,11 +2,15 @@ namespace App\Filament\Resources\Oauth; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Oauth\AuthCodeResource\Pages\ManageAuthCodes; use App\Filament\Resources\Oauth\AuthCodeResource\Pages; use App\Filament\Resources\Oauth\AuthCodeResource\RelationManagers; use Laravel\Passport\AuthCode; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -17,9 +21,9 @@ class AuthCodeResource extends Resource { protected static ?string $model = AuthCode::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'Oauth'; + protected static string | \UnitEnum | null $navigationGroup = 'Oauth'; protected static ?int $navigationSort = 2; @@ -33,10 +37,10 @@ class AuthCodeResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -45,31 +49,31 @@ class AuthCodeResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('user_id') + TextColumn::make('id'), + TextColumn::make('user_id') ->label(__('label.username')) ->formatStateUsing(fn ($record) => username_for_admin($record->user_id)), - Tables\Columns\TextColumn::make('client.name') + TextColumn::make('client.name') ->label(__('oauth.client')), - Tables\Columns\TextColumn::make('expires_at') + TextColumn::make('expires_at') ->label(__('label.expire_at')) ]) ->filters([ // ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ - 'index' => Pages\ManageAuthCodes::route('/'), + 'index' => ManageAuthCodes::route('/'), ]; } } diff --git a/app/Filament/Resources/Oauth/ClientResource.php b/app/Filament/Resources/Oauth/ClientResource.php index 7ea20ad7..c404cc57 100644 --- a/app/Filament/Resources/Oauth/ClientResource.php +++ b/app/Filament/Resources/Oauth/ClientResource.php @@ -2,13 +2,21 @@ namespace App\Filament\Resources\Oauth; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Radio; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\IconColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Oauth\ClientResource\Pages\ManageClients; use App\Filament\OptionsTrait; use App\Filament\PageListSingle; use App\Filament\Resources\Oauth\ClientResource\Pages; use App\Filament\Resources\Oauth\ClientResource\RelationManagers; use App\Models\OauthClient; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -21,9 +29,9 @@ class ClientResource extends Resource protected static ?string $model = OauthClient::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'Oauth'; + protected static string | \UnitEnum | null $navigationGroup = 'Oauth'; protected static ?int $navigationSort = 1; @@ -37,13 +45,13 @@ class ClientResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->label(__('label.name'))->required(), - Forms\Components\TextInput::make('redirect')->label(__('oauth.redirect'))->required(), - Forms\Components\Radio::make('skips_authorization') + return $schema + ->components([ + TextInput::make('name')->label(__('label.name'))->required(), + TextInput::make('redirect')->label(__('oauth.redirect'))->required(), + Radio::make('skips_authorization') ->options(self::getYesNoOptions()) ->inline() ->default(0) @@ -56,11 +64,11 @@ class ClientResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->label(__('label.name')), - Tables\Columns\TextColumn::make('secret')->label(__('oauth.secret')), - Tables\Columns\TextColumn::make('redirect')->label(__('oauth.redirect')), - Tables\Columns\IconColumn::make('skips_authorization') + TextColumn::make('id'), + TextColumn::make('name')->label(__('label.name')), + TextColumn::make('secret')->label(__('oauth.secret')), + TextColumn::make('redirect')->label(__('oauth.redirect')), + IconColumn::make('skips_authorization') ->boolean() ->label(__('oauth.skips_authorization')) , @@ -69,19 +77,19 @@ class ClientResource extends Resource ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ - 'index' => Pages\ManageClients::route('/'), + 'index' => ManageClients::route('/'), ]; } } diff --git a/app/Filament/Resources/Oauth/ClientResource/Pages/ManageClients.php b/app/Filament/Resources/Oauth/ClientResource/Pages/ManageClients.php index 0ba567f3..1f39805b 100644 --- a/app/Filament/Resources/Oauth/ClientResource/Pages/ManageClients.php +++ b/app/Filament/Resources/Oauth/ClientResource/Pages/ManageClients.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Oauth\ClientResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageListSingle; use App\Filament\Resources\Oauth\ClientResource; use Filament\Pages\Actions; @@ -14,7 +15,7 @@ class ManageClients extends PageListSingle protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/Oauth/ProviderResource.php b/app/Filament/Resources/Oauth/ProviderResource.php index 957a3387..11e1e72b 100644 --- a/app/Filament/Resources/Oauth/ProviderResource.php +++ b/app/Filament/Resources/Oauth/ProviderResource.php @@ -2,12 +2,21 @@ namespace App\Filament\Resources\Oauth; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Toggle; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\IconColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Oauth\ProviderResource\Pages\ManageProviders; use App\Filament\Resources\Oauth\ProviderResource\Pages; use App\Filament\Resources\Oauth\ProviderResource\RelationManagers; use App\Models\OauthProvider; use App\Models\User; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; @@ -20,9 +29,9 @@ class ProviderResource extends Resource { protected static ?string $model = OauthProvider::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'Oauth'; + protected static string | \UnitEnum | null $navigationGroup = 'Oauth'; protected static ?int $navigationSort = 5; @@ -36,64 +45,64 @@ class ProviderResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name') + return $schema + ->components([ + TextInput::make('name') ->label(__('label.name')) ->required() , - Forms\Components\TextInput::make('client_id') + TextInput::make('client_id') ->label(__('oauth.client_id')) ->required() , - Forms\Components\TextInput::make('client_secret') + TextInput::make('client_secret') ->label(__('oauth.secret')) ->required() , - Forms\Components\TextInput::make('authorization_endpoint_url') + TextInput::make('authorization_endpoint_url') ->label(__('oauth.authorization_endpoint_url')) ->required() , - Forms\Components\TextInput::make('token_endpoint_url') + TextInput::make('token_endpoint_url') ->label(__('oauth.token_endpoint_url')) ->required() , - Forms\Components\TextInput::make('user_info_endpoint_url') + TextInput::make('user_info_endpoint_url') ->label(__('oauth.user_info_endpoint_url')) ->required() , - Forms\Components\TextInput::make('id_claim') + TextInput::make('id_claim') ->label(__('oauth.id_claim')) ->required() , - Forms\Components\TextInput::make('email_claim') + TextInput::make('email_claim') ->label(__('oauth.email_claim')) ->required() , - Forms\Components\TextInput::make('username_claim') + TextInput::make('username_claim') ->label(__('oauth.username_claim')) , - Forms\Components\TextInput::make('level_claim') + TextInput::make('level_claim') ->label(__('oauth.level_claim')) , - Forms\Components\TextInput::make('level_limit') + TextInput::make('level_limit') ->numeric() ->label(__('oauth.level_limit')) ->helperText(__('oauth.level_limit_help')) , - Forms\Components\TextInput::make('priority') + TextInput::make('priority') ->label(__('label.priority')) ->default(0) ->numeric() ->helperText(__('label.priority_help')) , - Forms\Components\Toggle::make('enabled') + Toggle::make('enabled') ->label(__('label.enabled')) , - Forms\Components\TextInput::make('redirect') + TextInput::make('redirect') ->default(fn ($record) => OauthProvider::getCallbackUrl($record->uuid ?? self::getNewUuid())) ->disabled() ->label(__('oauth.redirect')) @@ -113,31 +122,31 @@ class ProviderResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->label(__('label.name')), - Tables\Columns\TextColumn::make('client_id')->label(__('oauth.client_id')), - Tables\Columns\TextColumn::make('client_secret')->label(__('oauth.secret')), - Tables\Columns\TextColumn::make('authorization_endpoint_url')->label(__('oauth.authorization_endpoint_url')), - Tables\Columns\TextColumn::make('uuid') + TextColumn::make('id'), + TextColumn::make('name')->label(__('label.name')), + TextColumn::make('client_id')->label(__('oauth.client_id')), + TextColumn::make('client_secret')->label(__('oauth.secret')), + TextColumn::make('authorization_endpoint_url')->label(__('oauth.authorization_endpoint_url')), + TextColumn::make('uuid') ->label(__('oauth.redirect')) ->formatStateUsing(fn ($state) => url("/oauth/callback/$state")) , - Tables\Columns\TextColumn::make('priority')->label(__('label.priority')), - Tables\Columns\TextColumn::make('updated_at')->label(__('label.updated_at')), - Tables\Columns\TextColumn::make('level_limit')->label(__('oauth.level_limit')), - Tables\Columns\IconColumn::make('enabled')->boolean()->label(__('label.enabled')), + TextColumn::make('priority')->label(__('label.priority')), + TextColumn::make('updated_at')->label(__('label.updated_at')), + TextColumn::make('level_limit')->label(__('oauth.level_limit')), + IconColumn::make('enabled')->boolean()->label(__('label.enabled')), ]) ->defaultSort('priority', 'desc') ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), ]), ]); } @@ -145,7 +154,7 @@ class ProviderResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageProviders::route('/'), + 'index' => ManageProviders::route('/'), ]; } } diff --git a/app/Filament/Resources/Oauth/ProviderResource/Pages/ManageProviders.php b/app/Filament/Resources/Oauth/ProviderResource/Pages/ManageProviders.php index aafe307e..a3305ae8 100644 --- a/app/Filament/Resources/Oauth/ProviderResource/Pages/ManageProviders.php +++ b/app/Filament/Resources/Oauth/ProviderResource/Pages/ManageProviders.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Oauth\ProviderResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageListSingle; use App\Filament\Resources\Oauth\ProviderResource; use Filament\Actions; @@ -14,7 +15,7 @@ class ManageProviders extends PageListSingle protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/Oauth/RefreshTokenResource.php b/app/Filament/Resources/Oauth/RefreshTokenResource.php index 63328a5b..ad181a7b 100644 --- a/app/Filament/Resources/Oauth/RefreshTokenResource.php +++ b/app/Filament/Resources/Oauth/RefreshTokenResource.php @@ -2,11 +2,15 @@ namespace App\Filament\Resources\Oauth; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Oauth\RefreshTokenResource\Pages\ManageRefreshTokens; use App\Filament\Resources\Oauth\RefreshTokenResource\Pages; use App\Filament\Resources\Oauth\RefreshTokenResource\RelationManagers; use Laravel\Passport\RefreshToken; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -17,9 +21,9 @@ class RefreshTokenResource extends Resource { protected static ?string $model = RefreshToken::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'Oauth'; + protected static string | \UnitEnum | null $navigationGroup = 'Oauth'; protected static ?int $navigationSort = 4; @@ -33,10 +37,10 @@ class RefreshTokenResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -45,33 +49,33 @@ class RefreshTokenResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id') + TextColumn::make('id') ->label(__('oauth.refresh_token')) ->searchable() , - Tables\Columns\TextColumn::make('access_token_id') + TextColumn::make('access_token_id') ->label(__('oauth.access_token')) ->searchable() , - Tables\Columns\TextColumn::make('expires_at') + TextColumn::make('expires_at') ->label(__('label.expire_at')) ]) ->filters([ // ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ - 'index' => Pages\ManageRefreshTokens::route('/'), + 'index' => ManageRefreshTokens::route('/'), ]; } } diff --git a/app/Filament/Resources/Section/AudioCodecResource.php b/app/Filament/Resources/Section/AudioCodecResource.php index 4f481994..eff9f3bd 100644 --- a/app/Filament/Resources/Section/AudioCodecResource.php +++ b/app/Filament/Resources/Section/AudioCodecResource.php @@ -2,11 +2,14 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use App\Filament\Resources\Section\AudioCodecResource\Pages\ListAudioCodecs; +use App\Filament\Resources\Section\AudioCodecResource\Pages\CreateAudioCodec; +use App\Filament\Resources\Section\AudioCodecResource\Pages\EditAudioCodec; use App\Filament\Resources\Section\AudioCodecResource\Pages; use App\Filament\Resources\Section\AudioCodecResource\RelationManagers; use App\Models\AudioCodec; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,9 +22,9 @@ class AudioCodecResource extends CodecResource protected static ?int $navigationSort = 4; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return parent::form($form); + return parent::form($schema); } public static function table(Table $table): Table @@ -39,9 +42,9 @@ class AudioCodecResource extends CodecResource public static function getPages(): array { return [ - 'index' => Pages\ListAudioCodecs::route('/'), - 'create' => Pages\CreateAudioCodec::route('/create'), - 'edit' => Pages\EditAudioCodec::route('/{record}/edit'), + 'index' => ListAudioCodecs::route('/'), + 'create' => CreateAudioCodec::route('/create'), + 'edit' => EditAudioCodec::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/AudioCodecResource/Pages/EditAudioCodec.php b/app/Filament/Resources/Section/AudioCodecResource/Pages/EditAudioCodec.php index a7b5f6ea..5d907631 100644 --- a/app/Filament/Resources/Section/AudioCodecResource/Pages/EditAudioCodec.php +++ b/app/Filament/Resources/Section/AudioCodecResource/Pages/EditAudioCodec.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\AudioCodecResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Section\AudioCodecResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -14,7 +15,7 @@ class EditAudioCodec extends EditCodec protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/Section/AudioCodecResource/Pages/ListAudioCodecs.php b/app/Filament/Resources/Section/AudioCodecResource/Pages/ListAudioCodecs.php index 71784938..1fcd90d0 100644 --- a/app/Filament/Resources/Section/AudioCodecResource/Pages/ListAudioCodecs.php +++ b/app/Filament/Resources/Section/AudioCodecResource/Pages/ListAudioCodecs.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\AudioCodecResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\AudioCodecResource; use App\Models\AudioCodec; @@ -16,7 +17,7 @@ class ListAudioCodecs extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Section/CategoryResource.php b/app/Filament/Resources/Section/CategoryResource.php index 096fb9d6..c3d0b1a3 100644 --- a/app/Filament/Resources/Section/CategoryResource.php +++ b/app/Filament/Resources/Section/CategoryResource.php @@ -2,6 +2,18 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Exception; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Section\CategoryResource\Pages\ListCategories; +use App\Filament\Resources\Section\CategoryResource\Pages\CreateCategory; +use App\Filament\Resources\Section\CategoryResource\Pages\EditCategory; use App\Filament\Resources\Section\CategoryResource\Pages; use App\Filament\Resources\Section\CategoryResource\RelationManagers; use App\Models\Category; @@ -12,7 +24,6 @@ use App\Models\Torrent; use App\Repositories\SearchBoxRepository; use Filament\Facades\Filament; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -24,9 +35,9 @@ class CategoryResource extends Resource { protected static ?string $model = Category::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'Section'; + protected static string | \UnitEnum | null $navigationGroup = 'Section'; protected static ?int $navigationSort = 2; @@ -40,11 +51,11 @@ class CategoryResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\Select::make('mode') + return $schema + ->components([ + Select::make('mode') ->options(SearchBox::listModeOptions()) ->label(__('label.search_box.label')) ->rules([ @@ -61,22 +72,22 @@ class CategoryResource extends Resource } ]) , - Forms\Components\TextInput::make('name')->required()->label(__('label.search_box.taxonomy.name'))->required(), - Forms\Components\TextInput::make('image') + TextInput::make('name')->required()->label(__('label.search_box.taxonomy.name'))->required(), + TextInput::make('image') ->label(__('label.search_box.taxonomy.image')) ->helperText(__('label.search_box.taxonomy.image_help')) ->required() , - Forms\Components\Select::make('icon_id') + Select::make('icon_id') ->options(Icon::query()->pluck('name', 'id')->toArray()) ->label(__('label.search_box.taxonomy.icon_id')) ->required() , - Forms\Components\TextInput::make('class_name') + TextInput::make('class_name') ->label(__('label.search_box.taxonomy.class_name')) ->helperText(__('label.search_box.taxonomy.class_name_help')) , - Forms\Components\TextInput::make('sort_index') + TextInput::make('sort_index') ->default(0) ->label(__('label.priority')) ->helperText(__('label.priority_help')) @@ -89,38 +100,38 @@ class CategoryResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('search_box.name')->label(__('label.search_box.label')), - Tables\Columns\TextColumn::make('name')->label(__('label.search_box.taxonomy.name'))->searchable(), - Tables\Columns\TextColumn::make('icon.name')->label(__('label.search_box.taxonomy.icon_id')), - Tables\Columns\TextColumn::make('image')->label(__('label.search_box.taxonomy.image')), - Tables\Columns\TextColumn::make('class_name')->label(__('label.search_box.taxonomy.class_name')), - Tables\Columns\TextColumn::make('sort_index')->label(__('label.priority'))->sortable(), + TextColumn::make('id'), + TextColumn::make('search_box.name')->label(__('label.search_box.label')), + TextColumn::make('name')->label(__('label.search_box.taxonomy.name'))->searchable(), + TextColumn::make('icon.name')->label(__('label.search_box.taxonomy.icon_id')), + TextColumn::make('image')->label(__('label.search_box.taxonomy.image')), + TextColumn::make('class_name')->label(__('label.search_box.taxonomy.class_name')), + TextColumn::make('sort_index')->label(__('label.priority'))->sortable(), ]) ->defaultSort('sort_index', 'desc') ->filters([ - Tables\Filters\SelectFilter::make('mode') + SelectFilter::make('mode') ->options(SearchBox::query()->pluck('name', 'id')->toArray()) ->label(__('label.search_box.label')) , ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make()->using(function (NexusModel $record) { + ->recordActions([ + EditAction::make(), + DeleteAction::make()->using(function (NexusModel $record) { try { $rep = new SearchBoxRepository(); $rep->deleteCategory($record->id); - } catch (\Exception $exception) { + } catch (Exception $exception) { Filament::notify('danger', $exception->getMessage() ?: class_basename($exception)); } }), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make()->using(function (Collection $records) { + ->toolbarActions([ + DeleteBulkAction::make()->using(function (Collection $records) { try { $rep = new SearchBoxRepository(); $rep->deleteCategory($records->pluck('id')->toArray()); - } catch (\Exception $exception) { + } catch (Exception $exception) { Filament::notify('danger', $exception->getMessage() ?: class_basename($exception)); } }), @@ -137,9 +148,9 @@ class CategoryResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListCategories::route('/'), - 'create' => Pages\CreateCategory::route('/create'), - 'edit' => Pages\EditCategory::route('/{record}/edit'), + 'index' => ListCategories::route('/'), + 'create' => CreateCategory::route('/create'), + 'edit' => EditCategory::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/CategoryResource/Pages/EditCategory.php b/app/Filament/Resources/Section/CategoryResource/Pages/EditCategory.php index 55d8fd74..508abdf0 100644 --- a/app/Filament/Resources/Section/CategoryResource/Pages/EditCategory.php +++ b/app/Filament/Resources/Section/CategoryResource/Pages/EditCategory.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\CategoryResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\EditRedirectIndexTrait; use App\Filament\Resources\Section\CategoryResource; use Filament\Pages\Actions; @@ -17,7 +18,7 @@ class EditCategory extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/Section/CategoryResource/Pages/ListCategories.php b/app/Filament/Resources/Section/CategoryResource/Pages/ListCategories.php index 7de14fe3..a69e727d 100644 --- a/app/Filament/Resources/Section/CategoryResource/Pages/ListCategories.php +++ b/app/Filament/Resources/Section/CategoryResource/Pages/ListCategories.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\CategoryResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\CategoryResource; use App\Models\Category; @@ -16,7 +17,7 @@ class ListCategories extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Section/CodecResource.php b/app/Filament/Resources/Section/CodecResource.php index 2631535b..5da14fb3 100644 --- a/app/Filament/Resources/Section/CodecResource.php +++ b/app/Filament/Resources/Section/CodecResource.php @@ -2,13 +2,23 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Select; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Section\CodecResource\Pages\ListCodecs; +use App\Filament\Resources\Section\CodecResource\Pages\CreateCodec; +use App\Filament\Resources\Section\CodecResource\Pages\EditCodec; use App\Filament\Resources\Section\CodecResource\Pages; use App\Filament\Resources\Section\CodecResource\RelationManagers; use App\Models\Codec; use App\Models\Icon; use App\Models\SearchBox; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,23 +29,23 @@ class CodecResource extends Resource { protected static ?string $model = Codec::class; - protected static ?string $navigationIcon = 'heroicon-o-bookmark'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-bookmark'; - protected static ?string $navigationGroup = 'Section'; + protected static string | \UnitEnum | null $navigationGroup = 'Section'; protected static ?int $navigationSort = 3; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->required()->label(__('label.search_box.taxonomy.name'))->required(), - Forms\Components\TextInput::make('sort_index') + return $schema + ->components([ + TextInput::make('name')->required()->label(__('label.search_box.taxonomy.name'))->required(), + TextInput::make('sort_index') ->default(0) ->label(__('label.priority')) ->helperText(__('label.priority_help')) , - Forms\Components\Select::make('mode') + Select::make('mode') ->options(SearchBox::query()->pluck('name', 'id')->toArray()) ->label(__('label.search_box.taxonomy.mode')) ->helperText(__('label.search_box.taxonomy.mode_help')) @@ -47,17 +57,17 @@ class CodecResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('search_box.name') + TextColumn::make('id'), + TextColumn::make('search_box.name') ->label(__('label.search_box.label')) ->formatStateUsing(fn ($record) => $record->search_box->name ?? 'All') , - Tables\Columns\TextColumn::make('name')->label(__('label.search_box.taxonomy.name'))->searchable(), - Tables\Columns\TextColumn::make('sort_index')->label(__('label.search_box.taxonomy.sort_index'))->sortable(), + TextColumn::make('name')->label(__('label.search_box.taxonomy.name'))->searchable(), + TextColumn::make('sort_index')->label(__('label.search_box.taxonomy.sort_index'))->sortable(), ]) ->defaultSort('sort_index', 'desc') ->filters([ - Tables\Filters\SelectFilter::make('mode') + SelectFilter::make('mode') ->options(SearchBox::query()->pluck('name', 'id')->toArray()) ->label(__('label.search_box.taxonomy.mode')) ->query(function (Builder $query, array $data) { @@ -69,12 +79,12 @@ class CodecResource extends Resource }) , ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } @@ -88,9 +98,9 @@ class CodecResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListCodecs::route('/'), - 'create' => Pages\CreateCodec::route('/create'), - 'edit' => Pages\EditCodec::route('/{record}/edit'), + 'index' => ListCodecs::route('/'), + 'create' => CreateCodec::route('/create'), + 'edit' => EditCodec::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/CodecResource/Pages/EditCodec.php b/app/Filament/Resources/Section/CodecResource/Pages/EditCodec.php index 7724af66..29d329c5 100644 --- a/app/Filament/Resources/Section/CodecResource/Pages/EditCodec.php +++ b/app/Filament/Resources/Section/CodecResource/Pages/EditCodec.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\CodecResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\EditRedirectIndexTrait; use App\Filament\Resources\Section\CodecResource; use Filament\Pages\Actions; @@ -16,7 +17,7 @@ class EditCodec extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/Section/CodecResource/Pages/ListCodecs.php b/app/Filament/Resources/Section/CodecResource/Pages/ListCodecs.php index 5e5c01ca..aca909ea 100644 --- a/app/Filament/Resources/Section/CodecResource/Pages/ListCodecs.php +++ b/app/Filament/Resources/Section/CodecResource/Pages/ListCodecs.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\CodecResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\CodecResource; use App\Models\Codec; @@ -16,7 +17,7 @@ class ListCodecs extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Section/IconResource.php b/app/Filament/Resources/Section/IconResource.php index fad77bb3..baad40b1 100644 --- a/app/Filament/Resources/Section/IconResource.php +++ b/app/Filament/Resources/Section/IconResource.php @@ -2,13 +2,23 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use Filament\Forms\Components\Textarea; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Radio; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Section\IconResource\Pages\ListIcons; +use App\Filament\Resources\Section\IconResource\Pages\CreateIcon; +use App\Filament\Resources\Section\IconResource\Pages\EditIcon; use App\Filament\OptionsTrait; use App\Filament\EditRedirectIndexTrait; use App\Filament\Resources\Section\IconResource\Pages; use App\Filament\Resources\Section\IconResource\RelationManagers; use App\Models\Icon; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -21,9 +31,9 @@ class IconResource extends Resource protected static ?string $model = Icon::class; - protected static ?string $navigationIcon = 'heroicon-o-ticket'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-ticket'; - protected static ?string $navigationGroup = 'Section'; + protected static string | \UnitEnum | null $navigationGroup = 'Section'; protected static ?int $navigationSort = 10; @@ -37,40 +47,40 @@ class IconResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\Textarea::make('tip') + return $schema + ->components([ + Textarea::make('tip') ->default(nexus_trans('label.icon.desc')) ->disabled() ->columnSpanFull() ->rows(18) , - Forms\Components\TextInput::make('name') + TextInput::make('name') ->label(__('label.name')) ->required() , - Forms\Components\TextInput::make('folder') + TextInput::make('folder') ->label(__('label.icon.folder')) ->required() ->helperText(__('label.icon.folder_help')) , - Forms\Components\Radio::make('multilang') + Radio::make('multilang') ->label(__('label.icon.multilang')) ->options(self::$yesOrNo) ->required() ->helperText(__('label.icon.multilang_help')) , - Forms\Components\Radio::make('secondicon') + Radio::make('secondicon') ->label(__('label.icon.secondicon')) ->options(self::$yesOrNo) ->required() ->helperText(__('label.icon.secondicon_help')) , - Forms\Components\TextInput::make('cssfile')->label(__('label.icon.cssfile'))->helperText(__('label.icon.cssfile_help')), - Forms\Components\TextInput::make('designer')->label(__('label.icon.designer'))->helperText(__('label.icon.designer_help')), - Forms\Components\Textarea::make('comment')->label(__('label.icon.comment'))->helperText(__('label.icon.comment_help')), + TextInput::make('cssfile')->label(__('label.icon.cssfile'))->helperText(__('label.icon.cssfile_help')), + TextInput::make('designer')->label(__('label.icon.designer'))->helperText(__('label.icon.designer_help')), + Textarea::make('comment')->label(__('label.icon.comment'))->helperText(__('label.icon.comment_help')), ]); } @@ -78,23 +88,23 @@ class IconResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->label(__('label.name')), - Tables\Columns\TextColumn::make('folder')->label(__('label.icon.folder')), - Tables\Columns\TextColumn::make('multilang')->label(__('label.icon.multilang')), - Tables\Columns\TextColumn::make('secondicon')->label(__('label.icon.secondicon')), - Tables\Columns\TextColumn::make('cssfile')->label(__('label.icon.cssfile')), - Tables\Columns\TextColumn::make('designer')->label(__('label.icon.designer')), + TextColumn::make('id'), + TextColumn::make('name')->label(__('label.name')), + TextColumn::make('folder')->label(__('label.icon.folder')), + TextColumn::make('multilang')->label(__('label.icon.multilang')), + TextColumn::make('secondicon')->label(__('label.icon.secondicon')), + TextColumn::make('cssfile')->label(__('label.icon.cssfile')), + TextColumn::make('designer')->label(__('label.icon.designer')), ]) ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } @@ -108,9 +118,9 @@ class IconResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListIcons::route('/'), - 'create' => Pages\CreateIcon::route('/create'), - 'edit' => Pages\EditIcon::route('/{record}/edit'), + 'index' => ListIcons::route('/'), + 'create' => CreateIcon::route('/create'), + 'edit' => EditIcon::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/IconResource/Pages/EditIcon.php b/app/Filament/Resources/Section/IconResource/Pages/EditIcon.php index d3dfc2fc..17d8d057 100644 --- a/app/Filament/Resources/Section/IconResource/Pages/EditIcon.php +++ b/app/Filament/Resources/Section/IconResource/Pages/EditIcon.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\IconResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\EditRedirectIndexTrait; use App\Filament\Resources\Section\IconResource; use Filament\Pages\Actions; @@ -18,7 +19,7 @@ class EditIcon extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/Section/IconResource/Pages/ListIcons.php b/app/Filament/Resources/Section/IconResource/Pages/ListIcons.php index 39db72c7..08e2d963 100644 --- a/app/Filament/Resources/Section/IconResource/Pages/ListIcons.php +++ b/app/Filament/Resources/Section/IconResource/Pages/ListIcons.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\IconResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\IconResource; use Filament\Pages\Actions; @@ -14,7 +15,7 @@ class ListIcons extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/Section/MediaResource.php b/app/Filament/Resources/Section/MediaResource.php index 54937be5..074215b0 100644 --- a/app/Filament/Resources/Section/MediaResource.php +++ b/app/Filament/Resources/Section/MediaResource.php @@ -2,11 +2,14 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use App\Filament\Resources\Section\MediaResource\Pages\ListMedia; +use App\Filament\Resources\Section\MediaResource\Pages\CreateMedia; +use App\Filament\Resources\Section\MediaResource\Pages\EditMedia; use App\Filament\Resources\Section\MediaResource\Pages; use App\Filament\Resources\Section\MediaResource\RelationManagers; use App\Models\Media; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,9 +22,9 @@ class MediaResource extends CodecResource protected static ?int $navigationSort = 8; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return parent::form($form); + return parent::form($schema); } public static function table(Table $table): Table @@ -39,9 +42,9 @@ class MediaResource extends CodecResource public static function getPages(): array { return [ - 'index' => Pages\ListMedia::route('/'), - 'create' => Pages\CreateMedia::route('/create'), - 'edit' => Pages\EditMedia::route('/{record}/edit'), + 'index' => ListMedia::route('/'), + 'create' => CreateMedia::route('/create'), + 'edit' => EditMedia::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/MediaResource/Pages/EditMedia.php b/app/Filament/Resources/Section/MediaResource/Pages/EditMedia.php index d18af24b..74f2654f 100644 --- a/app/Filament/Resources/Section/MediaResource/Pages/EditMedia.php +++ b/app/Filament/Resources/Section/MediaResource/Pages/EditMedia.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\MediaResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Section\MediaResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -14,7 +15,7 @@ class EditMedia extends EditCodec protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/Section/MediaResource/Pages/ListMedia.php b/app/Filament/Resources/Section/MediaResource/Pages/ListMedia.php index e93c2182..b5fbcb34 100644 --- a/app/Filament/Resources/Section/MediaResource/Pages/ListMedia.php +++ b/app/Filament/Resources/Section/MediaResource/Pages/ListMedia.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\MediaResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\MediaResource; use App\Models\Media; @@ -17,7 +18,7 @@ class ListMedia extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Section/ProcessingResource.php b/app/Filament/Resources/Section/ProcessingResource.php index 00f2d54b..cb1de72d 100644 --- a/app/Filament/Resources/Section/ProcessingResource.php +++ b/app/Filament/Resources/Section/ProcessingResource.php @@ -2,11 +2,14 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use App\Filament\Resources\Section\ProcessingResource\Pages\ListProcessings; +use App\Filament\Resources\Section\ProcessingResource\Pages\CreateProcessing; +use App\Filament\Resources\Section\ProcessingResource\Pages\EditProcessing; use App\Filament\Resources\Section\ProcessingResource\Pages; use App\Filament\Resources\Section\ProcessingResource\RelationManagers; use App\Models\Processing; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,9 +22,9 @@ class ProcessingResource extends CodecResource protected static ?int $navigationSort = 9; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return parent::form($form); + return parent::form($schema); } public static function table(Table $table): Table @@ -39,9 +42,9 @@ class ProcessingResource extends CodecResource public static function getPages(): array { return [ - 'index' => Pages\ListProcessings::route('/'), - 'create' => Pages\CreateProcessing::route('/create'), - 'edit' => Pages\EditProcessing::route('/{record}/edit'), + 'index' => ListProcessings::route('/'), + 'create' => CreateProcessing::route('/create'), + 'edit' => EditProcessing::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/ProcessingResource/Pages/EditProcessing.php b/app/Filament/Resources/Section/ProcessingResource/Pages/EditProcessing.php index 224f6e7f..7cccaea7 100644 --- a/app/Filament/Resources/Section/ProcessingResource/Pages/EditProcessing.php +++ b/app/Filament/Resources/Section/ProcessingResource/Pages/EditProcessing.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\ProcessingResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Section\ProcessingResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -14,7 +15,7 @@ class EditProcessing extends EditCodec protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/Section/ProcessingResource/Pages/ListProcessings.php b/app/Filament/Resources/Section/ProcessingResource/Pages/ListProcessings.php index cc1058e7..20c8c87a 100644 --- a/app/Filament/Resources/Section/ProcessingResource/Pages/ListProcessings.php +++ b/app/Filament/Resources/Section/ProcessingResource/Pages/ListProcessings.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\ProcessingResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\ProcessingResource; use App\Models\Processing; @@ -17,7 +18,7 @@ class ListProcessings extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Section/SecondIconResource.php b/app/Filament/Resources/Section/SecondIconResource.php index c4311670..82067485 100644 --- a/app/Filament/Resources/Section/SecondIconResource.php +++ b/app/Filament/Resources/Section/SecondIconResource.php @@ -2,6 +2,18 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Select; +use Filament\Schemas\Components\Section; +use Filament\Schemas\Components\Utilities\Get; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Section\SecondIconResource\Pages\ListSecondIcons; +use App\Filament\Resources\Section\SecondIconResource\Pages\CreateSecondIcon; +use App\Filament\Resources\Section\SecondIconResource\Pages\EditSecondIcon; use App\Filament\Resources\Section\SecondIconResource\Pages; use App\Filament\Resources\Section\SecondIconResource\RelationManagers; use App\Models\SearchBox; @@ -9,7 +21,6 @@ use App\Models\SecondIcon; use App\Models\Setting; use App\Repositories\SearchBoxRepository; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -21,9 +32,9 @@ class SecondIconResource extends Resource { protected static ?string $model = SecondIcon::class; - protected static ?string $navigationIcon = 'heroicon-o-ticket'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-ticket'; - protected static ?string $navigationGroup = 'Section'; + protected static string | \UnitEnum | null $navigationGroup = 'Section'; protected static ?int $navigationSort = 11; @@ -37,7 +48,7 @@ class SecondIconResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { $searchBoxRep = new SearchBoxRepository(); $torrentMode = Setting::get('main.browsecat'); @@ -45,39 +56,39 @@ class SecondIconResource extends Resource $torrentTaxonomySchema = $searchBoxRep->listTaxonomyFormSchema($torrentMode); $specialTaxonomySchema = $searchBoxRep->listTaxonomyFormSchema($specialMode); $modeOptions = SearchBox::listModeOptions(); - return $form - ->schema([ - Forms\Components\TextInput::make('name') + return $schema + ->components([ + TextInput::make('name') ->label(__('label.name')) ->required() ->helperText(__('label.second_icon.name_help')) , - Forms\Components\TextInput::make('image') + TextInput::make('image') ->label(__('label.second_icon.image')) ->required() ->helperText(__('label.second_icon.image_help')) , - Forms\Components\TextInput::make('class_name') + TextInput::make('class_name') ->label(__('label.second_icon.class_name')) ->helperText(__('label.second_icon.class_name_help')) , - Forms\Components\Select::make('mode') + Select::make('mode') ->options($modeOptions) ->label(__('label.search_box.taxonomy.mode')) ->helperText(__('label.search_box.taxonomy.mode_help')) ->reactive() , - Forms\Components\Section::make(__('label.second_icon.select_section')) + Section::make(__('label.second_icon.select_section')) ->id("taxonomy_$torrentMode") ->schema($torrentTaxonomySchema) ->columns(4) - ->hidden(fn (\Filament\Forms\Get $get) => $get('mode') != $torrentMode) + ->hidden(fn (Get $get) => $get('mode') != $torrentMode) , - Forms\Components\Section::make(__('label.second_icon.select_section')) + Section::make(__('label.second_icon.select_section')) ->id("taxonomy_$specialMode") ->schema($specialTaxonomySchema) ->columns(4) - ->hidden(fn (\Filament\Forms\Get $get) => $get('mode') != $specialMode) + ->hidden(fn (Get $get) => $get('mode') != $specialMode) , ]); @@ -88,18 +99,18 @@ class SecondIconResource extends Resource public static function table(Table $table): Table { $columns = [ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('search_box.name') + TextColumn::make('id'), + TextColumn::make('search_box.name') ->label(__('label.search_box.label')) ->formatStateUsing(fn ($record) => $record->search_box->name ?? 'All') , - Tables\Columns\TextColumn::make('name')->label(__('label.name')), - Tables\Columns\TextColumn::make('image')->label(__('label.second_icon.image')), - Tables\Columns\TextColumn::make('class_name')->label(__('label.second_icon.class_name')), + TextColumn::make('name')->label(__('label.name')), + TextColumn::make('image')->label(__('label.second_icon.image')), + TextColumn::make('class_name')->label(__('label.second_icon.class_name')), ]; $taxonomyList = self::listTaxonomy(); foreach (SearchBox::$taxonomies as $torrentField => $taxonomyTableModel) { - $columns[] = Tables\Columns\TextColumn::make($torrentField)->formatStateUsing(function ($state) use ($taxonomyList, $torrentField) { + $columns[] = TextColumn::make($torrentField)->formatStateUsing(function ($state) use ($taxonomyList, $torrentField) { return $taxonomyList[$torrentField]->get($state); }); } @@ -108,12 +119,12 @@ class SecondIconResource extends Resource ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } @@ -138,9 +149,9 @@ class SecondIconResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListSecondIcons::route('/'), - 'create' => Pages\CreateSecondIcon::route('/create'), - 'edit' => Pages\EditSecondIcon::route('/{record}/edit'), + 'index' => ListSecondIcons::route('/'), + 'create' => CreateSecondIcon::route('/create'), + 'edit' => EditSecondIcon::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/SecondIconResource/Pages/EditSecondIcon.php b/app/Filament/Resources/Section/SecondIconResource/Pages/EditSecondIcon.php index 2fbaf710..6f1f2d69 100644 --- a/app/Filament/Resources/Section/SecondIconResource/Pages/EditSecondIcon.php +++ b/app/Filament/Resources/Section/SecondIconResource/Pages/EditSecondIcon.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\SecondIconResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\EditRedirectIndexTrait; use App\Filament\Resources\Section\SecondIconResource; use App\Models\SearchBox; @@ -18,7 +19,7 @@ class EditSecondIcon extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/Section/SecondIconResource/Pages/ListSecondIcons.php b/app/Filament/Resources/Section/SecondIconResource/Pages/ListSecondIcons.php index 6cdda38b..f54e2666 100644 --- a/app/Filament/Resources/Section/SecondIconResource/Pages/ListSecondIcons.php +++ b/app/Filament/Resources/Section/SecondIconResource/Pages/ListSecondIcons.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\SecondIconResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\SecondIconResource; use App\Models\SecondIcon; @@ -16,7 +17,7 @@ class ListSecondIcons extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Section/SectionResource.php b/app/Filament/Resources/Section/SectionResource.php index a8001f47..d9340891 100644 --- a/app/Filament/Resources/Section/SectionResource.php +++ b/app/Filament/Resources/Section/SectionResource.php @@ -2,6 +2,23 @@ namespace App\Filament\Resources\Section; +use Filament\Forms\Components\TextInput; +use Filament\Schemas\Schema; +use Filament\Forms\Components\CheckboxList; +use Filament\Forms\Components\Textarea; +use Filament\Schemas\Components\Section; +use Filament\Forms\Components\Toggle; +use Filament\Forms\Components\Repeater; +use Filament\Forms\Components\Select; +use Closure; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\BooleanColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Section\SectionResource\Pages\ListSections; +use App\Filament\Resources\Section\SectionResource\Pages\CreateSection; +use App\Filament\Resources\Section\SectionResource\Pages\EditSection; use App\Filament\Resources\Section\SectionResource\Pages; use App\Filament\Resources\Section\SectionResource\RelationManagers; use App\Http\Middleware\Locale; @@ -9,7 +26,6 @@ use App\Models\Forum; use App\Models\SearchBox; use App\Models\TorrentCustomField; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -27,9 +43,9 @@ class SectionResource extends Resource protected static ?string $label = 'Section'; - protected static ?string $navigationIcon = 'heroicon-o-view-columns'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-view-columns'; - protected static ?string $navigationGroup = 'Section'; + protected static string | \UnitEnum | null $navigationGroup = 'Section'; protected static ?int $navigationSort = 1; @@ -47,18 +63,18 @@ class SectionResource extends Resource { $localeSchema = []; foreach (Locale::$languageMaps as $lang => $locale) { - $localeSchema[] = Forms\Components\TextInput::make("$name.$lang")->required()->label($lang); + $localeSchema[] = TextInput::make("$name.$lang")->required()->label($lang); } return $localeSchema; } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { $displayTextLocalSchema = self::buildLocalSchema('display_text'); $sectionNameLocalSchema = self::buildLocalSchema('section_name'); - return $form - ->schema([ - Forms\Components\TextInput::make('name') + return $schema + ->components([ + TextInput::make('name') ->label(__('label.search_box.name')) ->rules(function ($record) { return [ @@ -68,53 +84,53 @@ class SectionResource extends Resource ]; }) , - Forms\Components\TextInput::make('catsperrow') + TextInput::make('catsperrow') ->label(__('label.search_box.catsperrow')) ->helperText(__('label.search_box.catsperrow_help')) ->integer() ->required() ->default(8) , - Forms\Components\TextInput::make('catpadding') + TextInput::make('catpadding') ->label(__('label.search_box.catpadding')) ->helperText(__('label.search_box.catpadding_help')) ->integer() ->required() ->default(3) , - Forms\Components\CheckboxList::make('custom_fields') + CheckboxList::make('custom_fields') ->options(TorrentCustomField::getCheckboxOptions()) ->label(__('label.search_box.custom_fields')) ->columns(4) , - Forms\Components\TextInput::make('custom_fields_display_name') + TextInput::make('custom_fields_display_name') ->label(__('label.search_box.custom_fields_display_name')) , - Forms\Components\Textarea::make('custom_fields_display') + Textarea::make('custom_fields_display') ->label(__('label.search_box.custom_fields_display')) ->helperText(__('label.search_box.custom_fields_display_help')) , - Forms\Components\CheckboxList::make('other') + CheckboxList::make('other') ->options(SearchBox::listExtraText()) ->columns(2) ->label(__('label.search_box.other')) , - Forms\Components\Section::make(__('label.search_box.section_name')) + Section::make(__('label.search_box.section_name')) ->schema($sectionNameLocalSchema) ->columns(count($sectionNameLocalSchema)) , - Forms\Components\Toggle::make('showsubcat')->label(__('label.search_box.showsubcat'))->columnSpan(['sm' => 'full']), - Forms\Components\Section::make(__('label.search_box.showsubcat'))->schema([ - Forms\Components\Repeater::make('extra.' . SearchBox::EXTRA_TAXONOMY_LABELS) + Toggle::make('showsubcat')->label(__('label.search_box.showsubcat'))->columnSpan(['sm' => 'full']), + Section::make(__('label.search_box.showsubcat'))->schema([ + Repeater::make('extra.' . SearchBox::EXTRA_TAXONOMY_LABELS) ->schema([ - Forms\Components\Select::make('torrent_field')->options(SearchBox::getSubCatOptions())->label(__('label.search_box.torrent_field')), - Forms\Components\Section::make(__('label.search_box.taxonomy_display_text'))->schema($displayTextLocalSchema)->columns(count($displayTextLocalSchema)), + Select::make('torrent_field')->options(SearchBox::getSubCatOptions())->label(__('label.search_box.torrent_field')), + Section::make(__('label.search_box.taxonomy_display_text'))->schema($displayTextLocalSchema)->columns(count($displayTextLocalSchema)), ]) ->label(__('label.search_box.taxonomies')) ->rules([ function () { - return function (string $attribute, $value, \Closure $fail) { + return function (string $attribute, $value, Closure $fail) { $fields = []; foreach ($value as $item) { if (!in_array($item['torrent_field'], $fields)) { @@ -135,26 +151,26 @@ class SectionResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->label(__('label.search_box.name')), - Tables\Columns\BooleanColumn::make('showsubcat')->label(__('label.search_box.showsubcat')), - Tables\Columns\BooleanColumn::make('showsource'), - Tables\Columns\BooleanColumn::make('showmedium'), - Tables\Columns\BooleanColumn::make('showcodec'), - Tables\Columns\BooleanColumn::make('showstandard'), - Tables\Columns\BooleanColumn::make('showprocessing'), - Tables\Columns\BooleanColumn::make('showteam'), - Tables\Columns\BooleanColumn::make('showaudiocodec'), + TextColumn::make('id'), + TextColumn::make('name')->label(__('label.search_box.name')), + BooleanColumn::make('showsubcat')->label(__('label.search_box.showsubcat')), + BooleanColumn::make('showsource'), + BooleanColumn::make('showmedium'), + BooleanColumn::make('showcodec'), + BooleanColumn::make('showstandard'), + BooleanColumn::make('showprocessing'), + BooleanColumn::make('showteam'), + BooleanColumn::make('showaudiocodec'), ]) ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } @@ -168,9 +184,9 @@ class SectionResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListSections::route('/'), - 'create' => Pages\CreateSection::route('/create'), - 'edit' => Pages\EditSection::route('/{record}/edit'), + 'index' => ListSections::route('/'), + 'create' => CreateSection::route('/create'), + 'edit' => EditSection::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/SectionResource/Pages/EditSection.php b/app/Filament/Resources/Section/SectionResource/Pages/EditSection.php index 7d740114..f8a6f359 100644 --- a/app/Filament/Resources/Section/SectionResource/Pages/EditSection.php +++ b/app/Filament/Resources/Section/SectionResource/Pages/EditSection.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\SectionResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Section\SectionResource; use App\Models\SearchBox; use Filament\Pages\Actions; @@ -14,7 +15,7 @@ class EditSection extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/Section/SectionResource/Pages/ListSections.php b/app/Filament/Resources/Section/SectionResource/Pages/ListSections.php index d7241151..7f7b0973 100644 --- a/app/Filament/Resources/Section/SectionResource/Pages/ListSections.php +++ b/app/Filament/Resources/Section/SectionResource/Pages/ListSections.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\SectionResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\SectionResource; use Filament\Pages\Actions; @@ -14,7 +15,7 @@ class ListSections extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Section/SourceResource.php b/app/Filament/Resources/Section/SourceResource.php index 4466d7ab..872c9299 100644 --- a/app/Filament/Resources/Section/SourceResource.php +++ b/app/Filament/Resources/Section/SourceResource.php @@ -2,11 +2,14 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use App\Filament\Resources\Section\SourceResource\Pages\ListSources; +use App\Filament\Resources\Section\SourceResource\Pages\CreateSource; +use App\Filament\Resources\Section\SourceResource\Pages\EditSource; use App\Filament\Resources\Section\SourceResource\Pages; use App\Filament\Resources\Section\SourceResource\RelationManagers; use App\Models\Source; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,9 +22,9 @@ class SourceResource extends CodecResource protected static ?int $navigationSort = 7; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return parent::form($form); + return parent::form($schema); } public static function table(Table $table): Table @@ -40,9 +43,9 @@ class SourceResource extends CodecResource public static function getPages(): array { return [ - 'index' => Pages\ListSources::route('/'), - 'create' => Pages\CreateSource::route('/create'), - 'edit' => Pages\EditSource::route('/{record}/edit'), + 'index' => ListSources::route('/'), + 'create' => CreateSource::route('/create'), + 'edit' => EditSource::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/SourceResource/Pages/EditSource.php b/app/Filament/Resources/Section/SourceResource/Pages/EditSource.php index f4415df7..d2e19079 100644 --- a/app/Filament/Resources/Section/SourceResource/Pages/EditSource.php +++ b/app/Filament/Resources/Section/SourceResource/Pages/EditSource.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\SourceResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Section\SourceResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -14,7 +15,7 @@ class EditSource extends EditCodec protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/Section/SourceResource/Pages/ListSources.php b/app/Filament/Resources/Section/SourceResource/Pages/ListSources.php index 6d46c51c..b1d877aa 100644 --- a/app/Filament/Resources/Section/SourceResource/Pages/ListSources.php +++ b/app/Filament/Resources/Section/SourceResource/Pages/ListSources.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\SourceResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\SourceResource; use App\Models\Source; @@ -17,7 +18,7 @@ class ListSources extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Section/StandardResource.php b/app/Filament/Resources/Section/StandardResource.php index 35209766..20cb4431 100644 --- a/app/Filament/Resources/Section/StandardResource.php +++ b/app/Filament/Resources/Section/StandardResource.php @@ -2,11 +2,14 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use App\Filament\Resources\Section\StandardResource\Pages\ListStandards; +use App\Filament\Resources\Section\StandardResource\Pages\CreateStandard; +use App\Filament\Resources\Section\StandardResource\Pages\EditStandard; use App\Filament\Resources\Section\StandardResource\Pages; use App\Filament\Resources\Section\StandardResource\RelationManagers; use App\Models\Standard; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,9 +22,9 @@ class StandardResource extends CodecResource protected static ?int $navigationSort = 5; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return parent::form($form); + return parent::form($schema); } public static function table(Table $table): Table @@ -39,9 +42,9 @@ class StandardResource extends CodecResource public static function getPages(): array { return [ - 'index' => Pages\ListStandards::route('/'), - 'create' => Pages\CreateStandard::route('/create'), - 'edit' => Pages\EditStandard::route('/{record}/edit'), + 'index' => ListStandards::route('/'), + 'create' => CreateStandard::route('/create'), + 'edit' => EditStandard::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/StandardResource/Pages/EditStandard.php b/app/Filament/Resources/Section/StandardResource/Pages/EditStandard.php index 28e484c8..84fe2f8f 100644 --- a/app/Filament/Resources/Section/StandardResource/Pages/EditStandard.php +++ b/app/Filament/Resources/Section/StandardResource/Pages/EditStandard.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\StandardResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Section\StandardResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -14,7 +15,7 @@ class EditStandard extends EditCodec protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/Section/StandardResource/Pages/ListStandards.php b/app/Filament/Resources/Section/StandardResource/Pages/ListStandards.php index 05f2575d..b5801aae 100644 --- a/app/Filament/Resources/Section/StandardResource/Pages/ListStandards.php +++ b/app/Filament/Resources/Section/StandardResource/Pages/ListStandards.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\StandardResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\StandardResource; use App\Models\Codec; @@ -17,7 +18,7 @@ class ListStandards extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Section/TeamResource.php b/app/Filament/Resources/Section/TeamResource.php index 3531b6ef..858e4f12 100644 --- a/app/Filament/Resources/Section/TeamResource.php +++ b/app/Filament/Resources/Section/TeamResource.php @@ -2,11 +2,14 @@ namespace App\Filament\Resources\Section; +use Filament\Schemas\Schema; +use App\Filament\Resources\Section\TeamResource\Pages\ListTeams; +use App\Filament\Resources\Section\TeamResource\Pages\CreateTeam; +use App\Filament\Resources\Section\TeamResource\Pages\EditTeam; use App\Filament\Resources\Section\TeamResource\Pages; use App\Filament\Resources\Section\TeamResource\RelationManagers; use App\Models\Team; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,9 +22,9 @@ class TeamResource extends CodecResource protected static ?int $navigationSort = 6; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return parent::form($form); + return parent::form($schema); } public static function table(Table $table): Table @@ -39,9 +42,9 @@ class TeamResource extends CodecResource public static function getPages(): array { return [ - 'index' => Pages\ListTeams::route('/'), - 'create' => Pages\CreateTeam::route('/create'), - 'edit' => Pages\EditTeam::route('/{record}/edit'), + 'index' => ListTeams::route('/'), + 'create' => CreateTeam::route('/create'), + 'edit' => EditTeam::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/Section/TeamResource/Pages/EditTeam.php b/app/Filament/Resources/Section/TeamResource/Pages/EditTeam.php index e5ae6516..2ff649fc 100644 --- a/app/Filament/Resources/Section/TeamResource/Pages/EditTeam.php +++ b/app/Filament/Resources/Section/TeamResource/Pages/EditTeam.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\TeamResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Section\TeamResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -14,7 +15,7 @@ class EditTeam extends EditCodec protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/Section/TeamResource/Pages/ListTeams.php b/app/Filament/Resources/Section/TeamResource/Pages/ListTeams.php index 6b6168f8..5623742f 100644 --- a/app/Filament/Resources/Section/TeamResource/Pages/ListTeams.php +++ b/app/Filament/Resources/Section/TeamResource/Pages/ListTeams.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Section\TeamResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Section\TeamResource; use App\Models\Standard; @@ -17,7 +18,7 @@ class ListTeams extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/System/AgentAllowResource.php b/app/Filament/Resources/System/AgentAllowResource.php index 3f32d8a6..c71f1cc9 100644 --- a/app/Filament/Resources/System/AgentAllowResource.php +++ b/app/Filament/Resources/System/AgentAllowResource.php @@ -2,12 +2,23 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Radio; +use Filament\Forms\Components\Textarea; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\AgentAllowResource\RelationManagers\DeniesRelationManager; +use App\Filament\Resources\System\AgentAllowResource\Pages\ListAgentAllows; +use App\Filament\Resources\System\AgentAllowResource\Pages\CreateAgentAllow; +use App\Filament\Resources\System\AgentAllowResource\Pages\EditAgentAllow; use App\Filament\OptionsTrait; use App\Filament\Resources\System\AgentAllowResource\Pages; use App\Filament\Resources\System\AgentAllowResource\RelationManagers; use App\Models\AgentAllow; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -20,9 +31,9 @@ class AgentAllowResource extends Resource protected static ?string $model = AgentAllow::class; - protected static ?string $navigationIcon = 'heroicon-o-check'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-check'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 4; @@ -37,24 +48,24 @@ class AgentAllowResource extends Resource } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('family')->required()->label(__('label.agent_allow.family')), - Forms\Components\TextInput::make('start_name')->required()->label(__('label.agent_allow.start_name')), - Forms\Components\TextInput::make('peer_id_start')->required()->label(__('label.agent_allow.peer_id_start')), - Forms\Components\TextInput::make('peer_id_pattern')->required()->label(__('label.agent_allow.peer_id_pattern')), - Forms\Components\Radio::make('peer_id_matchtype')->options(self::$matchTypes)->required()->label(__('label.agent_allow.peer_id_matchtype')), - Forms\Components\TextInput::make('peer_id_match_num')->integer()->required()->label(__('label.agent_allow.peer_id_match_num')), - Forms\Components\TextInput::make('agent_start')->required()->label(__('label.agent_allow.agent_start')), - Forms\Components\TextInput::make('agent_pattern')->required()->label(__('label.agent_allow.agent_pattern')), - Forms\Components\Radio::make('agent_matchtype')->options(self::$matchTypes)->required()->label(__('label.agent_allow.agent_matchtype')), - Forms\Components\TextInput::make('agent_match_num')->required()->label(__('label.agent_allow.agent_match_num')), - Forms\Components\Radio::make('exception')->options(self::$yesOrNo)->required()->label(__('label.agent_allow.exception')), - Forms\Components\Radio::make('allowhttps')->options(self::$yesOrNo)->required()->label(__('label.agent_allow.allowhttps')), + return $schema + ->components([ + TextInput::make('family')->required()->label(__('label.agent_allow.family')), + TextInput::make('start_name')->required()->label(__('label.agent_allow.start_name')), + TextInput::make('peer_id_start')->required()->label(__('label.agent_allow.peer_id_start')), + TextInput::make('peer_id_pattern')->required()->label(__('label.agent_allow.peer_id_pattern')), + Radio::make('peer_id_matchtype')->options(self::$matchTypes)->required()->label(__('label.agent_allow.peer_id_matchtype')), + TextInput::make('peer_id_match_num')->integer()->required()->label(__('label.agent_allow.peer_id_match_num')), + TextInput::make('agent_start')->required()->label(__('label.agent_allow.agent_start')), + TextInput::make('agent_pattern')->required()->label(__('label.agent_allow.agent_pattern')), + Radio::make('agent_matchtype')->options(self::$matchTypes)->required()->label(__('label.agent_allow.agent_matchtype')), + TextInput::make('agent_match_num')->required()->label(__('label.agent_allow.agent_match_num')), + Radio::make('exception')->options(self::$yesOrNo)->required()->label(__('label.agent_allow.exception')), + Radio::make('allowhttps')->options(self::$yesOrNo)->required()->label(__('label.agent_allow.allowhttps')), - Forms\Components\Textarea::make('comment')->label(__('label.comment')), + Textarea::make('comment')->label(__('label.comment')), ]); } @@ -62,42 +73,42 @@ class AgentAllowResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('family')->searchable()->label(__('label.agent_allow.family')), - Tables\Columns\TextColumn::make('start_name')->searchable()->label(__('label.agent_allow.start_name')), - Tables\Columns\TextColumn::make('peer_id_start')->label(__('label.agent_allow.peer_id_start')), - Tables\Columns\TextColumn::make('agent_start')->label(__('label.agent_allow.agent_start')), + TextColumn::make('id')->sortable(), + TextColumn::make('family')->searchable()->label(__('label.agent_allow.family')), + TextColumn::make('start_name')->searchable()->label(__('label.agent_allow.start_name')), + TextColumn::make('peer_id_start')->label(__('label.agent_allow.peer_id_start')), + TextColumn::make('agent_start')->label(__('label.agent_allow.agent_start')), ]) ->defaultSort('id', 'desc') ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make()->using(function ($record) { + ->recordActions([ + EditAction::make(), + DeleteAction::make()->using(function ($record) { $record->delete(); clear_agent_allow_deny_cache(); return redirect(self::getUrl()); }) ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getRelations(): array { return [ - RelationManagers\DeniesRelationManager::class, + DeniesRelationManager::class, ]; } public static function getPages(): array { return [ - 'index' => Pages\ListAgentAllows::route('/'), - 'create' => Pages\CreateAgentAllow::route('/create'), - 'edit' => Pages\EditAgentAllow::route('/{record}/edit'), + 'index' => ListAgentAllows::route('/'), + 'create' => CreateAgentAllow::route('/create'), + 'edit' => EditAgentAllow::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/System/AgentAllowResource/Pages/EditAgentAllow.php b/app/Filament/Resources/System/AgentAllowResource/Pages/EditAgentAllow.php index 9c446219..cf5848a2 100644 --- a/app/Filament/Resources/System/AgentAllowResource/Pages/EditAgentAllow.php +++ b/app/Filament/Resources/System/AgentAllowResource/Pages/EditAgentAllow.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\AgentAllowResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\System\AgentAllowResource; use App\Models\NexusModel; use Filament\Pages\Actions; @@ -14,7 +15,7 @@ class EditAgentAllow extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make()->using(function ($record) { + DeleteAction::make()->using(function ($record) { $record->delete(); clear_agent_allow_deny_cache(); return redirect(AgentAllowResource::getUrl()); diff --git a/app/Filament/Resources/System/AgentAllowResource/Pages/ListAgentAllows.php b/app/Filament/Resources/System/AgentAllowResource/Pages/ListAgentAllows.php index e8aa2827..e2cd7511 100644 --- a/app/Filament/Resources/System/AgentAllowResource/Pages/ListAgentAllows.php +++ b/app/Filament/Resources/System/AgentAllowResource/Pages/ListAgentAllows.php @@ -2,6 +2,10 @@ namespace App\Filament\Resources\System\AgentAllowResource\Pages; +use Filament\Actions\CreateAction; +use Filament\Actions\Action; +use Filament\Forms\Components\TextInput; +use Exception; use App\Filament\PageList; use App\Filament\Resources\System\AgentAllowResource; use App\Repositories\AgentAllowRepository; @@ -16,12 +20,12 @@ class ListAgentAllows extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), - Actions\Action::make('check') + CreateAction::make(), + Action::make('check') ->label(__('admin.resources.agent_allow.check_modal_btn')) - ->form([ - Forms\Components\TextInput::make('peer_id')->required(), - Forms\Components\TextInput::make('agent')->required(), + ->schema([ + TextInput::make('peer_id')->required(), + TextInput::make('agent')->required(), ]) ->modalHeading(__('admin.resources.agent_allow.check_modal_header')) ->action(function ($data) { @@ -29,7 +33,7 @@ class ListAgentAllows extends PageList try { $result = $agentAllowRep->checkClient($data['peer_id'], $data['agent']); send_admin_success_notification(__('admin.resources.agent_allow.check_pass_msg', ['id' => $result->id])); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } }) diff --git a/app/Filament/Resources/System/AgentAllowResource/RelationManagers/DeniesRelationManager.php b/app/Filament/Resources/System/AgentAllowResource/RelationManagers/DeniesRelationManager.php index f32c2806..b1c8e991 100644 --- a/app/Filament/Resources/System/AgentAllowResource/RelationManagers/DeniesRelationManager.php +++ b/app/Filament/Resources/System/AgentAllowResource/RelationManagers/DeniesRelationManager.php @@ -2,8 +2,15 @@ namespace App\Filament\Resources\System\AgentAllowResource\RelationManagers; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Textarea; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\CreateAction; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables\Table; use Filament\Tables; @@ -16,14 +23,14 @@ class DeniesRelationManager extends RelationManager protected static ?string $recordTitleAttribute = 'name'; - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->required()->maxLength(255)->label(__('label.name')), - Forms\Components\TextInput::make('peer_id')->required()->maxLength(255)->label(__('label.agent_deny.peer_id')), - Forms\Components\TextInput::make('agent')->required()->maxLength(255)->label(__('label.agent_deny.agent')), - Forms\Components\Textarea::make('comment')->label(__('label.comment')), + return $schema + ->components([ + TextInput::make('name')->required()->maxLength(255)->label(__('label.name')), + TextInput::make('peer_id')->required()->maxLength(255)->label(__('label.agent_deny.peer_id')), + TextInput::make('agent')->required()->maxLength(255)->label(__('label.agent_deny.agent')), + Textarea::make('comment')->label(__('label.comment')), ]); } @@ -31,22 +38,22 @@ class DeniesRelationManager extends RelationManager { return $table ->columns([ - Tables\Columns\TextColumn::make('name')->label(__('label.name')), - Tables\Columns\TextColumn::make('peer_id')->label(__('label.agent_deny.peer_id')), - Tables\Columns\TextColumn::make('agent')->label(__('label.agent_deny.agent')), + TextColumn::make('name')->label(__('label.name')), + TextColumn::make('peer_id')->label(__('label.agent_deny.peer_id')), + TextColumn::make('agent')->label(__('label.agent_deny.agent')), ]) ->filters([ // ]) ->headerActions([ - Tables\Actions\CreateAction::make(), + CreateAction::make(), ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } } diff --git a/app/Filament/Resources/System/AgentDenyResource.php b/app/Filament/Resources/System/AgentDenyResource.php index f0abad1f..0a1ddee3 100644 --- a/app/Filament/Resources/System/AgentDenyResource.php +++ b/app/Filament/Resources/System/AgentDenyResource.php @@ -2,11 +2,21 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Textarea; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\AgentDenyResource\Pages\ListAgentDenies; +use App\Filament\Resources\System\AgentDenyResource\Pages\CreateAgentDeny; +use App\Filament\Resources\System\AgentDenyResource\Pages\EditAgentDeny; use App\Filament\Resources\System\AgentDenyResource\Pages; use App\Filament\Resources\System\AgentDenyResource\RelationManagers; use App\Models\AgentDeny; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -17,9 +27,9 @@ class AgentDenyResource extends Resource { protected static ?string $model = AgentDeny::class; - protected static ?string $navigationIcon = 'heroicon-o-no-symbol'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-no-symbol'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 5; @@ -33,16 +43,16 @@ class AgentDenyResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\Select::make('family_id')->label('Allow family') + return $schema + ->components([ + Select::make('family_id')->label('Allow family') ->relationship('family', 'family')->required()->label(__('label.agent_allow.family')), - Forms\Components\TextInput::make('name')->required()->label(__('label.name')), - Forms\Components\TextInput::make('peer_id')->required()->label(__('label.agent_deny.peer_id')), - Forms\Components\TextInput::make('agent')->required()->label(__('label.agent_deny.agent')), - Forms\Components\Textarea::make('comment')->label(__('label.comment')), + TextInput::make('name')->required()->label(__('label.name')), + TextInput::make('peer_id')->required()->label(__('label.agent_deny.peer_id')), + TextInput::make('agent')->required()->label(__('label.agent_deny.agent')), + Textarea::make('comment')->label(__('label.comment')), ]); } @@ -50,26 +60,26 @@ class AgentDenyResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('family.family')->label(__('label.agent_allow.family')), - Tables\Columns\TextColumn::make('name')->searchable()->label(__('label.name')), - Tables\Columns\TextColumn::make('peer_id')->searchable()->label(__('label.agent_deny.peer_id')), - Tables\Columns\TextColumn::make('agent')->searchable()->label(__('label.agent_deny.agent')), + TextColumn::make('id')->sortable(), + TextColumn::make('family.family')->label(__('label.agent_allow.family')), + TextColumn::make('name')->searchable()->label(__('label.name')), + TextColumn::make('peer_id')->searchable()->label(__('label.agent_deny.peer_id')), + TextColumn::make('agent')->searchable()->label(__('label.agent_deny.agent')), ]) ->defaultSort('id', 'desc') ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make()->using(function ($record) { + ->recordActions([ + EditAction::make(), + DeleteAction::make()->using(function ($record) { $record->delete(); clear_agent_allow_deny_cache(); return redirect(self::getUrl()); }) ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } @@ -83,9 +93,9 @@ class AgentDenyResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListAgentDenies::route('/'), - 'create' => Pages\CreateAgentDeny::route('/create'), - 'edit' => Pages\EditAgentDeny::route('/{record}/edit'), + 'index' => ListAgentDenies::route('/'), + 'create' => CreateAgentDeny::route('/create'), + 'edit' => EditAgentDeny::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/System/AgentDenyResource/Pages/EditAgentDeny.php b/app/Filament/Resources/System/AgentDenyResource/Pages/EditAgentDeny.php index e3bf1575..23b6374e 100644 --- a/app/Filament/Resources/System/AgentDenyResource/Pages/EditAgentDeny.php +++ b/app/Filament/Resources/System/AgentDenyResource/Pages/EditAgentDeny.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\AgentDenyResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\System\AgentDenyResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditAgentDeny extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make()->using(function ($record) { + DeleteAction::make()->using(function ($record) { $record->delete(); clear_agent_allow_deny_cache(); return redirect(AgentDenyResource::getUrl()); diff --git a/app/Filament/Resources/System/AgentDenyResource/Pages/ListAgentDenies.php b/app/Filament/Resources/System/AgentDenyResource/Pages/ListAgentDenies.php index 512f4348..66d49b58 100644 --- a/app/Filament/Resources/System/AgentDenyResource/Pages/ListAgentDenies.php +++ b/app/Filament/Resources/System/AgentDenyResource/Pages/ListAgentDenies.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\AgentDenyResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\System\AgentDenyResource; use Filament\Pages\Actions; @@ -14,7 +15,7 @@ class ListAgentDenies extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/System/DownloadSpeedResource.php b/app/Filament/Resources/System/DownloadSpeedResource.php index 139a525a..a4f98a83 100644 --- a/app/Filament/Resources/System/DownloadSpeedResource.php +++ b/app/Filament/Resources/System/DownloadSpeedResource.php @@ -2,11 +2,17 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\DownloadSpeedResource\Pages\ManageDownloadSpeeds; use App\Filament\Resources\System\DownloadSpeedResource\Pages; use App\Filament\Resources\System\DownloadSpeedResource\RelationManagers; use App\Models\DownloadSpeed; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -17,9 +23,9 @@ class DownloadSpeedResource extends Resource { protected static ?string $model = DownloadSpeed::class; - protected static ?string $navigationIcon = 'heroicon-o-arrow-down-tray'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-arrow-down-tray'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 6; @@ -33,11 +39,11 @@ class DownloadSpeedResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->label(__('label.name')) + return $schema + ->components([ + TextInput::make('name')->label(__('label.name')) ]); } @@ -45,25 +51,25 @@ class DownloadSpeedResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->label(__('label.name')), + TextColumn::make('id'), + TextColumn::make('name')->label(__('label.name')), ]) ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ - 'index' => Pages\ManageDownloadSpeeds::route('/'), + 'index' => ManageDownloadSpeeds::route('/'), ]; } } diff --git a/app/Filament/Resources/System/DownloadSpeedResource/Pages/ManageDownloadSpeeds.php b/app/Filament/Resources/System/DownloadSpeedResource/Pages/ManageDownloadSpeeds.php index e1ea1ee3..673a388a 100644 --- a/app/Filament/Resources/System/DownloadSpeedResource/Pages/ManageDownloadSpeeds.php +++ b/app/Filament/Resources/System/DownloadSpeedResource/Pages/ManageDownloadSpeeds.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\DownloadSpeedResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\Resources\System\DownloadSpeedResource; use Filament\Pages\Actions; use Filament\Resources\Pages\ManageRecords; @@ -13,7 +14,7 @@ class ManageDownloadSpeeds extends ManageRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/System/ExamResource.php b/app/Filament/Resources/System/ExamResource.php index 827eba31..950523a6 100644 --- a/app/Filament/Resources/System/ExamResource.php +++ b/app/Filament/Resources/System/ExamResource.php @@ -2,6 +2,25 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Schemas\Components\Section; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Select; +use Filament\Schemas\Components\Utilities\Get; +use Filament\Forms\Components\Repeater; +use Filament\Forms\Components\Hidden; +use Filament\Forms\Components\Radio; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\CheckboxList; +use Filament\Forms\Components\Textarea; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\BooleanColumn; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use App\Filament\Resources\System\ExamResource\Pages\ListExams; +use App\Filament\Resources\System\ExamResource\Pages\CreateExam; +use App\Filament\Resources\System\ExamResource\Pages\EditExam; use App\Filament\OptionsTrait; use App\Filament\Resources\System\ExamResource\Pages; use App\Filament\Resources\System\ExamResource\RelationManagers; @@ -9,7 +28,6 @@ use App\Models\Exam; use App\Repositories\ExamRepository; use App\Repositories\UserRepository; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -23,9 +41,9 @@ class ExamResource extends Resource protected static ?string $model = Exam::class; - protected static ?string $navigationIcon = 'heroicon-o-exclamation-triangle'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-exclamation-triangle'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 1; @@ -41,14 +59,14 @@ class ExamResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { $userRep = new UserRepository(); - return $form - ->schema([ - Forms\Components\Section::make(__('label.exam.section_base_info'))->schema([ - Forms\Components\TextInput::make('name')->required()->columnSpan(['sm' => 2])->label(__('label.name')), - Forms\Components\Select::make('type') + return $schema + ->components([ + Section::make(__('label.exam.section_base_info'))->schema([ + TextInput::make('name')->required()->columnSpan(['sm' => 2])->label(__('label.name')), + Select::make('type') ->required() ->columnSpanFull() ->label(__('exam.type')) @@ -56,74 +74,74 @@ class ExamResource extends Resource ->helperText(__('exam.type_help')) ->reactive() , - Forms\Components\TextInput::make('success_reward_bonus') + TextInput::make('success_reward_bonus') ->columnSpanFull() ->required() ->label(__('exam.success_reward_bonus')) - ->hidden(fn (\Filament\Forms\Get $get) => $get('type') != Exam::TYPE_TASK) + ->hidden(fn (Get $get) => $get('type') != Exam::TYPE_TASK) , - Forms\Components\TextInput::make('fail_deduct_bonus') + TextInput::make('fail_deduct_bonus') ->columnSpanFull() ->required() ->label(__('exam.fail_deduct_bonus')) - ->hidden(fn (\Filament\Forms\Get $get) => $get('type') != Exam::TYPE_TASK) + ->hidden(fn (Get $get) => $get('type') != Exam::TYPE_TASK) , - Forms\Components\TextInput::make('max_user_count') + TextInput::make('max_user_count') ->columnSpanFull() ->required() ->numeric() ->label(__('exam.max_user_count')) - ->hidden(fn (\Filament\Forms\Get $get) => $get('type') != Exam::TYPE_TASK) + ->hidden(fn (Get $get) => $get('type') != Exam::TYPE_TASK) , - Forms\Components\Repeater::make('indexes')->schema([ - Forms\Components\Select::make('index') + Repeater::make('indexes')->schema([ + Select::make('index') ->options(Exam::listIndex(true)) ->label(__('label.exam.index_required_label')) ->rules([Rule::in(array_keys(Exam::$indexes))]) ->required(), - Forms\Components\TextInput::make('require_value') + TextInput::make('require_value') ->label(__('label.exam.index_required_value')) ->placeholder(__('label.exam.index_placeholder')) ->integer() ->required(), - Forms\Components\Hidden::make('checked')->default(true), + Hidden::make('checked')->default(true), ]) ->label(__('label.exam.index_formatted')) ->required(), - Forms\Components\Radio::make('status') + Radio::make('status') ->options(self::getEnableDisableOptions()) ->inline() ->required() ->label(__('label.status')) ->columnSpan(['sm' => 2]), - Forms\Components\Radio::make('is_discovered') + Radio::make('is_discovered') ->options(self::IS_DISCOVERED_OPTIONS) ->label(__('label.exam.is_discovered')) ->inline() ->required() ->columnSpan(['sm' => 2]), - Forms\Components\TextInput::make('background_color') + TextInput::make('background_color') ->required() ->label(__('exam.background_color')) ->columnSpan(['sm' => 2]), - Forms\Components\TextInput::make('priority') + TextInput::make('priority') ->columnSpan(['sm' => 2]) ->integer() ->label(__("label.priority")) ->helperText(__('label.exam.priority_help')), ])->columns(2), - Forms\Components\Section::make(__('label.exam.section_time'))->schema([ - Forms\Components\DateTimePicker::make('begin')->label(__('label.begin')), - Forms\Components\DateTimePicker::make('end')->label(__('label.end')), - Forms\Components\TextInput::make('duration') + Section::make(__('label.exam.section_time'))->schema([ + DateTimePicker::make('begin')->label(__('label.begin')), + DateTimePicker::make('end')->label(__('label.end')), + TextInput::make('duration') ->integer() ->columnSpan(['sm' => 2]) ->label(__('label.duration')) ->helperText(__('label.exam.duration_help')), - Forms\Components\Select::make('recurring') + Select::make('recurring') ->options(Exam::listRecurringOptions()) ->label(__('exam.recurring')) ->helperText(__('exam.recurring_help')) @@ -131,22 +149,22 @@ class ExamResource extends Resource , ])->columns(2), - Forms\Components\Section::make(__('label.exam.section_target_user'))->schema([ - Forms\Components\CheckboxList::make('filters.classes') + Section::make(__('label.exam.section_target_user'))->schema([ + CheckboxList::make('filters.classes') ->options($userRep->listClass())->columnSpan(['sm' => 2]) ->columns(4) ->label(__('label.user.class')), - Forms\Components\DateTimePicker::make('filters.register_time_range.0')->label(__("label.exam.register_time_range.begin")), - Forms\Components\DateTimePicker::make('filters.register_time_range.1')->label(__("label.exam.register_time_range.end")), - Forms\Components\TextInput::make('filters.register_days_range.0')->numeric()->label(__("label.exam.register_days_range.begin")), - Forms\Components\TextInput::make('filters.register_days_range.1')->numeric()->label(__("label.exam.register_days_range.end")), - Forms\Components\CheckboxList::make('filters.donate_status') + DateTimePicker::make('filters.register_time_range.0')->label(__("label.exam.register_time_range.begin")), + DateTimePicker::make('filters.register_time_range.1')->label(__("label.exam.register_time_range.end")), + TextInput::make('filters.register_days_range.0')->numeric()->label(__("label.exam.register_days_range.begin")), + TextInput::make('filters.register_days_range.1')->numeric()->label(__("label.exam.register_days_range.end")), + CheckboxList::make('filters.donate_status') ->options(self::$yesOrNo) ->label(__('label.exam.donated')), ])->columns(2), - Forms\Components\Textarea::make('description')->columnSpan(['sm' => 2])->label(__('label.description')), + Textarea::make('description')->columnSpan(['sm' => 2])->label(__('label.description')), ]); } @@ -154,33 +172,33 @@ class ExamResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('name')->searchable()->label(__('label.name')), - Tables\Columns\TextColumn::make('typeText')->label(__('exam.type')), - Tables\Columns\TextColumn::make('indexFormatted')->label(__('label.exam.index_formatted'))->html(), - Tables\Columns\TextColumn::make('begin')->label(__('label.begin')), - Tables\Columns\TextColumn::make('end')->label(__('label.end')), - Tables\Columns\TextColumn::make('durationText')->label(__('label.duration')), - Tables\Columns\TextColumn::make('recurringText')->label(__('exam.recurring')), - Tables\Columns\TextColumn::make('filterFormatted')->label(__('label.exam.filter_formatted'))->html()->extraAttributes([]), - Tables\Columns\BooleanColumn::make('is_discovered')->label(__('label.exam.is_discovered')), - Tables\Columns\TextColumn::make('priority')->label(__('label.priority')), - Tables\Columns\TextColumn::make('statusText')->label(__('label.status')), + TextColumn::make('id')->sortable(), + TextColumn::make('name')->searchable()->label(__('label.name')), + TextColumn::make('typeText')->label(__('exam.type')), + TextColumn::make('indexFormatted')->label(__('label.exam.index_formatted'))->html(), + TextColumn::make('begin')->label(__('label.begin')), + TextColumn::make('end')->label(__('label.end')), + TextColumn::make('durationText')->label(__('label.duration')), + TextColumn::make('recurringText')->label(__('exam.recurring')), + TextColumn::make('filterFormatted')->label(__('label.exam.filter_formatted'))->html()->extraAttributes([]), + BooleanColumn::make('is_discovered')->label(__('label.exam.is_discovered')), + TextColumn::make('priority')->label(__('label.priority')), + TextColumn::make('statusText')->label(__('label.status')), ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\SelectFilter::make('type')->options(Exam::listTypeOptions())->label(__("exam.type")), - Tables\Filters\SelectFilter::make('is_discovered')->options(self::IS_DISCOVERED_OPTIONS)->label(__("label.exam.is_discovered")), - Tables\Filters\SelectFilter::make('status')->options(self::getEnableDisableOptions())->label(__("label.status")), + SelectFilter::make('type')->options(Exam::listTypeOptions())->label(__("exam.type")), + SelectFilter::make('is_discovered')->options(self::IS_DISCOVERED_OPTIONS)->label(__("label.exam.is_discovered")), + SelectFilter::make('status')->options(self::getEnableDisableOptions())->label(__("label.status")), ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make()->using(function ($record) { + ->recordActions([ + EditAction::make(), + DeleteAction::make()->using(function ($record) { $rep = new ExamRepository(); $rep->delete($record->id); }), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -195,9 +213,9 @@ class ExamResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListExams::route('/'), - 'create' => Pages\CreateExam::route('/create'), - 'edit' => Pages\EditExam::route('/{record}/edit'), + 'index' => ListExams::route('/'), + 'create' => CreateExam::route('/create'), + 'edit' => EditExam::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/System/ExamResource/Pages/CreateExam.php b/app/Filament/Resources/System/ExamResource/Pages/CreateExam.php index 4dcd6e02..ce0a0d94 100644 --- a/app/Filament/Resources/System/ExamResource/Pages/CreateExam.php +++ b/app/Filament/Resources/System/ExamResource/Pages/CreateExam.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\ExamResource\Pages; +use Exception; use App\Filament\Resources\System\ExamResource; use App\Repositories\ExamRepository; use Filament\Pages\Actions; @@ -28,7 +29,7 @@ class CreateExam extends CreateRecord return; } $this->redirect($this->getResource()::getUrl('index')); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log($exception->getMessage() . "\n" . $exception->getTraceAsString(), "error"); send_admin_fail_notification($exception->getMessage()); } diff --git a/app/Filament/Resources/System/ExamResource/Pages/EditExam.php b/app/Filament/Resources/System/ExamResource/Pages/EditExam.php index 55fe2008..959ad3eb 100644 --- a/app/Filament/Resources/System/ExamResource/Pages/EditExam.php +++ b/app/Filament/Resources/System/ExamResource/Pages/EditExam.php @@ -2,6 +2,8 @@ namespace App\Filament\Resources\System\ExamResource\Pages; +use Filament\Actions\DeleteAction; +use Exception; use App\Filament\Resources\System\ExamResource; use App\Repositories\ExamRepository; use Filament\Pages\Actions; @@ -14,7 +16,7 @@ class EditExam extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } @@ -26,7 +28,7 @@ class EditExam extends EditRecord $this->record = $examRep->update($data, $this->record->id); send_admin_success_notification(); $this->redirect($this->getResource()::getUrl('index')); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } } diff --git a/app/Filament/Resources/System/ExamResource/Pages/ListExams.php b/app/Filament/Resources/System/ExamResource/Pages/ListExams.php index 1fad6b0d..9e62779e 100644 --- a/app/Filament/Resources/System/ExamResource/Pages/ListExams.php +++ b/app/Filament/Resources/System/ExamResource/Pages/ListExams.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\ExamResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\System\ExamResource; use Filament\Pages\Actions; @@ -14,7 +15,7 @@ class ListExams extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/System/IspResource.php b/app/Filament/Resources/System/IspResource.php index 140d7f60..d29ff47e 100644 --- a/app/Filament/Resources/System/IspResource.php +++ b/app/Filament/Resources/System/IspResource.php @@ -2,11 +2,17 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\IspResource\Pages\ManageIsps; use App\Filament\Resources\System\IspResource\Pages; use App\Filament\Resources\System\IspResource\RelationManagers; use App\Models\Isp; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -17,9 +23,9 @@ class IspResource extends Resource { protected static ?string $model = Isp::class; - protected static ?string $navigationIcon = 'heroicon-o-globe-alt'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-globe-alt'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 7; @@ -33,11 +39,11 @@ class IspResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->label(__('label.name')) + return $schema + ->components([ + TextInput::make('name')->label(__('label.name')) ]); } @@ -45,25 +51,25 @@ class IspResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->label(__('label.name')), + TextColumn::make('id'), + TextColumn::make('name')->label(__('label.name')), ]) ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ - 'index' => Pages\ManageIsps::route('/'), + 'index' => ManageIsps::route('/'), ]; } } diff --git a/app/Filament/Resources/System/IspResource/Pages/ManageIsps.php b/app/Filament/Resources/System/IspResource/Pages/ManageIsps.php index 0f4eca50..e60b901f 100644 --- a/app/Filament/Resources/System/IspResource/Pages/ManageIsps.php +++ b/app/Filament/Resources/System/IspResource/Pages/ManageIsps.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\IspResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\Resources\System\IspResource; use Filament\Pages\Actions; use Filament\Resources\Pages\ManageRecords; @@ -13,7 +14,7 @@ class ManageIsps extends ManageRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/System/MedalResource.php b/app/Filament/Resources/System/MedalResource.php index f282a316..94f89b81 100644 --- a/app/Filament/Resources/System/MedalResource.php +++ b/app/Filament/Resources/System/MedalResource.php @@ -2,11 +2,24 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Radio; +use Filament\Forms\Components\Toggle; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\Textarea; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\ImageColumn; +use Filament\Tables\Columns\IconColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\MedalResource\Pages\ListMedals; +use App\Filament\Resources\System\MedalResource\Pages\CreateMedal; +use App\Filament\Resources\System\MedalResource\Pages\EditMedal; use App\Filament\Resources\System\MedalResource\Pages; use App\Filament\Resources\System\MedalResource\RelationManagers; use App\Models\Medal; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -18,9 +31,9 @@ class MedalResource extends Resource { protected static ?string $model = Medal::class; - protected static ?string $navigationIcon = 'heroicon-o-check-badge'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-check-badge'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 2; @@ -35,69 +48,69 @@ class MedalResource extends Resource } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->required()->label(__('label.name')), - Forms\Components\TextInput::make('price')->required()->integer()->label(__('label.price')), - Forms\Components\TextInput::make('image_large')->required()->label(__('label.medal.image_large')), - Forms\Components\TextInput::make('image_small')->required()->label(__('label.medal.image_small')), - Forms\Components\Radio::make('get_type') + return $schema + ->components([ + TextInput::make('name')->required()->label(__('label.name')), + TextInput::make('price')->required()->integer()->label(__('label.price')), + TextInput::make('image_large')->required()->label(__('label.medal.image_large')), + TextInput::make('image_small')->required()->label(__('label.medal.image_small')), + Radio::make('get_type') ->options(Medal::listGetTypes(true)) ->inline() ->label(__('label.medal.get_type')) ->required() , - Forms\Components\Toggle::make('display_on_medal_page') + Toggle::make('display_on_medal_page') ->label(__('label.medal.display_on_medal_page')) ->required() , - Forms\Components\TextInput::make('duration') + TextInput::make('duration') ->integer() ->label(__('label.medal.duration')) ->helperText(__('label.medal.duration_help')) , - Forms\Components\TextInput::make('inventory') + TextInput::make('inventory') ->integer() ->label(__('medal.fields.inventory')) ->helperText(__('medal.fields.inventory_help')) , - Forms\Components\DateTimePicker::make('sale_begin_time') + DateTimePicker::make('sale_begin_time') ->label(__('medal.fields.sale_begin_time')) ->helperText(__('medal.fields.sale_begin_time_help')) , - Forms\Components\DateTimePicker::make('sale_end_time') + DateTimePicker::make('sale_end_time') ->label(__('medal.fields.sale_end_time')) ->helperText(__('medal.fields.sale_end_time_help')) , - Forms\Components\TextInput::make('bonus_addition_factor') + TextInput::make('bonus_addition_factor') ->label(__('medal.fields.bonus_addition_factor')) ->helperText(__('medal.fields.bonus_addition_factor_help')) ->numeric() ->minValue(0) ->default(0) , - Forms\Components\TextInput::make('bonus_addition_duration') + TextInput::make('bonus_addition_duration') ->label(__('medal.fields.bonus_addition_duration')) ->helperText(__('medal.fields.bonus_addition_duration_help')) ->numeric() ->minValue(0) ->default(0) , - Forms\Components\TextInput::make('gift_fee_factor') + TextInput::make('gift_fee_factor') ->label(__('medal.fields.gift_fee_factor')) ->helperText(__('medal.fields.gift_fee_factor_help')) ->numeric() ->default(0) , - Forms\Components\TextInput::make('priority') + TextInput::make('priority') ->label(__('label.priority')) ->helperText(__('label.priority_help')) ->numeric() ->default(0) , - Forms\Components\Textarea::make('description') + Textarea::make('description') ->label(__('label.description')) , ]); @@ -107,36 +120,36 @@ class MedalResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('name')->label(__('label.name'))->searchable(), - Tables\Columns\ImageColumn::make('image_large')->height(60)->label(__('label.medal.image_large')), - Tables\Columns\TextColumn::make('getTypeText')->label('Get type')->label(__('label.medal.get_type')), - Tables\Columns\IconColumn::make('display_on_medal_page')->label(__('label.medal.display_on_medal_page'))->boolean(), - Tables\Columns\TextColumn::make('sale_begin_end_time') + TextColumn::make('id')->sortable(), + TextColumn::make('name')->label(__('label.name'))->searchable(), + ImageColumn::make('image_large')->height(60)->label(__('label.medal.image_large')), + TextColumn::make('getTypeText')->label('Get type')->label(__('label.medal.get_type')), + IconColumn::make('display_on_medal_page')->label(__('label.medal.display_on_medal_page'))->boolean(), + TextColumn::make('sale_begin_end_time') ->label(__('medal.fields.sale_begin_end_time')) ->formatStateUsing(fn ($record) => new HtmlString(sprintf('%s ~
%s', $record->sale_begin_time ?? nexus_trans('nexus.no_limit'), $record->sale_end_time ?? nexus_trans('nexus.no_limit')))) , - Tables\Columns\TextColumn::make('bonus_addition_factor')->label(__('medal.fields.bonus_addition_factor')), - Tables\Columns\TextColumn::make('bonus_addition_duration')->label(__('medal.fields.bonus_addition_duration')), - Tables\Columns\TextColumn::make('gift_fee_factor')->label(__('medal.fields.gift_fee_factor')), - Tables\Columns\TextColumn::make('price')->label(__('label.price'))->formatStateUsing(fn ($state) => number_format($state)), + TextColumn::make('bonus_addition_factor')->label(__('medal.fields.bonus_addition_factor')), + TextColumn::make('bonus_addition_duration')->label(__('medal.fields.bonus_addition_duration')), + TextColumn::make('gift_fee_factor')->label(__('medal.fields.gift_fee_factor')), + TextColumn::make('price')->label(__('label.price'))->formatStateUsing(fn ($state) => number_format($state)), - Tables\Columns\TextColumn::make('duration')->label(__('label.medal.duration')), + TextColumn::make('duration')->label(__('label.medal.duration')), - Tables\Columns\TextColumn::make('inventoryText') + TextColumn::make('inventoryText') ->label(__('medal.fields.inventory')) , - Tables\Columns\TextColumn::make('users_count')->label(__('medal.fields.users_count')), - Tables\Columns\TextColumn::make('priority')->label(__('label.priority')), + TextColumn::make('users_count')->label(__('medal.fields.users_count')), + TextColumn::make('priority')->label(__('label.priority')), ]) ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), + ->recordActions([ + EditAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]) ->modifyQueryUsing(fn (Builder $query) => $query->orderBy("priority", 'desc')->orderBy('id', 'desc')) ; @@ -152,9 +165,9 @@ class MedalResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListMedals::route('/'), - 'create' => Pages\CreateMedal::route('/create'), - 'edit' => Pages\EditMedal::route('/{record}/edit'), + 'index' => ListMedals::route('/'), + 'create' => CreateMedal::route('/create'), + 'edit' => EditMedal::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/System/MedalResource/Pages/EditMedal.php b/app/Filament/Resources/System/MedalResource/Pages/EditMedal.php index 9f4a8a24..3fc77e48 100644 --- a/app/Filament/Resources/System/MedalResource/Pages/EditMedal.php +++ b/app/Filament/Resources/System/MedalResource/Pages/EditMedal.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\MedalResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\System\MedalResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditMedal extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/System/MedalResource/Pages/ListMedals.php b/app/Filament/Resources/System/MedalResource/Pages/ListMedals.php index 22079fd6..5cfc4380 100644 --- a/app/Filament/Resources/System/MedalResource/Pages/ListMedals.php +++ b/app/Filament/Resources/System/MedalResource/Pages/ListMedals.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\MedalResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\System\MedalResource; use App\Models\Medal; @@ -16,7 +17,7 @@ class ListMedals extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/System/MessageTemplateResource.php b/app/Filament/Resources/System/MessageTemplateResource.php index 09f0be47..4040ff8a 100644 --- a/app/Filament/Resources/System/MessageTemplateResource.php +++ b/app/Filament/Resources/System/MessageTemplateResource.php @@ -2,6 +2,16 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\Textarea; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\MessageTemplateResource\Pages\ManageMessageTemplates; use App\Enums\MessageTemplateNameEnum; use App\Filament\Resources\System\MessageTemplateResource\Pages; use App\Filament\Resources\System\MessageTemplateResource\RelationManagers; @@ -9,7 +19,6 @@ use App\Models\Language; use App\Models\MessageTemplate; use App\Models\Setting; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; @@ -21,9 +30,9 @@ class MessageTemplateResource extends Resource { protected static ?string $model = MessageTemplate::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 2; @@ -37,24 +46,24 @@ class MessageTemplateResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { $languages = Language::all(); $default = $languages->first(fn ($item) => $item->site_lang_folder == Setting::getDefaultLang()); - return $form - ->schema([ - Forms\Components\Select::make('name') + return $schema + ->components([ + Select::make('name') ->label(__('label.name')) ->options(MessageTemplate::listAllNames()) ->columnSpanFull() ->required(), - Forms\Components\Select::make('language_id') + Select::make('language_id') ->label(__('label.language')) ->options($languages->pluck('lang_name', 'id')) ->default($default ? $default->id : null) ->columnSpanFull() ->required(), - Forms\Components\Textarea::make('content') + Textarea::make('content') ->label(__('label.content')) ->helperText(new HtmlString(__('message-template.content_help')."
".__('message-template.register_welcome_content_help'))) ->columnSpanFull() @@ -68,35 +77,35 @@ class MessageTemplateResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name') + TextColumn::make('id'), + TextColumn::make('name') ->label(__('label.name')) ->formatStateUsing(fn ($state) => $state->label()) , - Tables\Columns\TextColumn::make('language.lang_name') + TextColumn::make('language.lang_name') ->label(__('label.language')) , - Tables\Columns\TextColumn::make('updated_at') + TextColumn::make('updated_at') ->label(__('label.updated_at')) , ]) ->filters([ - Tables\Filters\SelectFilter::make('name') + SelectFilter::make('name') ->label(__('label.name')) ->options(MessageTemplate::listAllNames()) , - Tables\Filters\SelectFilter::make('language_id') + SelectFilter::make('language_id') ->label(__('label.language')) ->options(Language::all()->pluck('lang_name', 'id')) , ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), ]), ]); } @@ -104,7 +113,7 @@ class MessageTemplateResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageMessageTemplates::route('/'), + 'index' => ManageMessageTemplates::route('/'), ]; } } diff --git a/app/Filament/Resources/System/MessageTemplateResource/Pages/ManageMessageTemplates.php b/app/Filament/Resources/System/MessageTemplateResource/Pages/ManageMessageTemplates.php index bf0d82e1..e3ad874c 100644 --- a/app/Filament/Resources/System/MessageTemplateResource/Pages/ManageMessageTemplates.php +++ b/app/Filament/Resources/System/MessageTemplateResource/Pages/ManageMessageTemplates.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\MessageTemplateResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageListSingle; use App\Filament\Resources\System\MessageTemplateResource; use Filament\Actions; @@ -14,7 +15,7 @@ class ManageMessageTemplates extends PageListSingle protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/System/PluginResource.php b/app/Filament/Resources/System/PluginResource.php index eec15ff5..657af06f 100644 --- a/app/Filament/Resources/System/PluginResource.php +++ b/app/Filament/Resources/System/PluginResource.php @@ -2,12 +2,19 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\PluginResource\Pages\ManagePlugins; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\Action; use App\Filament\Resources\System\PluginResource\Pages; use App\Filament\Resources\System\PluginResource\RelationManagers; use App\Jobs\ManagePlugin; use App\Models\Plugin; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,9 +26,9 @@ class PluginResource extends Resource { protected static ?string $model = Plugin::class; - protected static ?string $navigationIcon = 'heroicon-o-plus-circle'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-plus-circle'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 99; @@ -37,12 +44,12 @@ class PluginResource extends Resource protected static bool $shouldRegisterNavigation = false; - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('package_name')->label(__('plugin.labels.package_name')), - Forms\Components\TextInput::make('remote_url')->label(__('plugin.labels.remote_url')), + return $schema + ->components([ + TextInput::make('package_name')->label(__('plugin.labels.package_name')), + TextInput::make('remote_url')->label(__('plugin.labels.remote_url')), ]); } @@ -50,36 +57,36 @@ class PluginResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('package_name')->label(__('plugin.labels.package_name')), - Tables\Columns\TextColumn::make('remote_url')->label(__('plugin.labels.remote_url')), - Tables\Columns\TextColumn::make('installed_version')->label(__('plugin.labels.installed_version')), - Tables\Columns\TextColumn::make('statusText')->label(__('label.status')), - Tables\Columns\TextColumn::make('updated_at')->label(__('plugin.labels.updated_at')), + TextColumn::make('id'), + TextColumn::make('package_name')->label(__('plugin.labels.package_name')), + TextColumn::make('remote_url')->label(__('plugin.labels.remote_url')), + TextColumn::make('installed_version')->label(__('plugin.labels.installed_version')), + TextColumn::make('statusText')->label(__('label.status')), + TextColumn::make('updated_at')->label(__('plugin.labels.updated_at')), ]) ->filters([ // ]) - ->actions(self::getActions()) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->recordActions(self::getActions()) + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ - 'index' => Pages\ManagePlugins::route('/'), + 'index' => ManagePlugins::route('/'), ]; } private static function getActions() { $actions = []; - $actions[] = Tables\Actions\EditAction::make(); + $actions[] = EditAction::make(); $actions[] = self::buildInstallAction(); $actions[] = self::buildUpdateAction(); - $actions[] = Tables\Actions\DeleteAction::make('delete') + $actions[] = DeleteAction::make('delete') ->hidden(fn ($record) => !in_array($record->status, Plugin::$showDeleteBtnStatus)) ->using(function ($record) { $record->update(['status' => Plugin::STATUS_PRE_DELETE]); @@ -90,7 +97,7 @@ class PluginResource extends Resource private static function buildInstallAction() { - return Tables\Actions\Action::make('install') + return Action::make('install') ->label(__('plugin.actions.install')) ->icon('heroicon-o-arrow-down') ->requiresConfirmation() @@ -104,7 +111,7 @@ class PluginResource extends Resource private static function buildUpdateAction() { - return Tables\Actions\Action::make('update') + return Action::make('update') ->label(__('plugin.actions.update')) ->icon('heroicon-o-arrow-up') ->requiresConfirmation() diff --git a/app/Filament/Resources/System/PluginResource/Pages/ManagePlugins.php b/app/Filament/Resources/System/PluginResource/Pages/ManagePlugins.php index b2da0e1d..e0e33ec6 100644 --- a/app/Filament/Resources/System/PluginResource/Pages/ManagePlugins.php +++ b/app/Filament/Resources/System/PluginResource/Pages/ManagePlugins.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\PluginResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageListSingle; use App\Filament\Resources\System\PluginResource; use Filament\Pages\Actions; @@ -14,7 +15,7 @@ class ManagePlugins extends PageListSingle protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/System/PluginStoreResource.php b/app/Filament/Resources/System/PluginStoreResource.php index 18ccaa59..4ced5528 100644 --- a/app/Filament/Resources/System/PluginStoreResource.php +++ b/app/Filament/Resources/System/PluginStoreResource.php @@ -2,14 +2,18 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\Layout\Stack; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\ViewAction; +use Filament\Infolists\Components\TextEntry; +use App\Filament\Resources\System\PluginStoreResource\Pages\ListPluginStores; use App\Filament\Resources\System\PluginStoreResource\Pages; use App\Filament\Resources\System\PluginStoreResource\RelationManagers; use App\Livewire\InstallPluginModal; use App\Models\Plugin; use App\Models\PluginStore; use Filament\Forms; -use Filament\Forms\Form; -use Filament\Infolists\Infolist; use Filament\Resources\Resource; use Filament\Support\Enums\FontWeight; use Filament\Tables; @@ -26,9 +30,9 @@ use Livewire\Livewire; class PluginStoreResource extends Resource { - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 99; @@ -37,10 +41,10 @@ class PluginStoreResource extends Resource return PluginStore::getHasNewVersionCount() ?: ''; } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -49,15 +53,15 @@ class PluginStoreResource extends Resource { return $table ->columns([ - Tables\Columns\Layout\Stack::make([ - Tables\Columns\Layout\Stack::make([ - Tables\Columns\TextColumn::make(self::getColumnLabelKey("title")) + Stack::make([ + Stack::make([ + TextColumn::make(self::getColumnLabelKey("title")) ->weight(FontWeight::Bold) , - Tables\Columns\TextColumn::make(self::getColumnLabelKey("description")), + TextColumn::make(self::getColumnLabelKey("description")), ]), - Tables\Columns\Layout\Stack::make([ - Tables\Columns\TextColumn::make('version') + Stack::make([ + TextColumn::make('version') ->formatStateUsing(function (PluginStore $record) { $installedVersion = $record->installed_version; $latestVersion = $record->version; @@ -82,8 +86,8 @@ class PluginStoreResource extends Resource ->filters([ // ]) - ->actions([ - Tables\Actions\ViewAction::make() + ->recordActions([ + ViewAction::make() ->modalHeading(nexus_trans("plugin.labels.introduce")) ->modalContent(fn (PluginStore $record) => $record->getFullDescription()) ->extraModalFooterActions([ @@ -93,7 +97,7 @@ class PluginStoreResource extends Resource , ]) , - Tables\Actions\Action::make("install") + Action::make("install") ->label(function(PluginStore $record) { if ($record->hasNewVersion()) { return sprintf('%s(new: %s)', nexus_trans("plugin.actions.update"), $record->version); @@ -102,10 +106,10 @@ class PluginStoreResource extends Resource }) ->modalHeading(fn (PluginStore $record) => sprintf("%s: %s", nexus_trans("plugin.actions.install_or_update"), data_get($record, self::getColumnLabelKey("title")))) ->modalContent(function (PluginStore $record) { - $infolist = new Infolist(); + $infolist = new Schema(); $infolist->record = $record; - $infolist->schema([ - Infolists\Components\TextEntry::make('plugin_id') + $infolist->components([ + TextEntry::make('plugin_id') ->label(fn () => nexus_trans("plugin.labels.install_title", ['web_root' => base_path()])) ->html(true) ->formatStateUsing(function (PluginStore $record) { @@ -155,7 +159,7 @@ class PluginStoreResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListPluginStores::route('/'), + 'index' => ListPluginStores::route('/'), // 'create' => Pages\CreatePluginStore::route('/create'), // 'edit' => Pages\EditPluginStore::route('/{record}/edit'), ]; diff --git a/app/Filament/Resources/System/PluginStoreResource/Pages/EditPluginStore.php b/app/Filament/Resources/System/PluginStoreResource/Pages/EditPluginStore.php index ca9140e8..d31307b3 100644 --- a/app/Filament/Resources/System/PluginStoreResource/Pages/EditPluginStore.php +++ b/app/Filament/Resources/System/PluginStoreResource/Pages/EditPluginStore.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\PluginStoreResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\System\PluginStoreResource; use Filament\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditPluginStore extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/System/SeedBoxRecordResource.php b/app/Filament/Resources/System/SeedBoxRecordResource.php index 8b82e319..34689d04 100644 --- a/app/Filament/Resources/System/SeedBoxRecordResource.php +++ b/app/Filament/Resources/System/SeedBoxRecordResource.php @@ -2,6 +2,23 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Toggle; +use Filament\Forms\Components\Textarea; +use Filament\Tables\Columns\TextColumn; +use Exception; +use Filament\Tables\Columns\IconColumn; +use Filament\Tables\Columns\BadgeColumn; +use Filament\Tables\Filters\Filter; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\EditAction; +use Filament\Actions\Action; +use Filament\Forms\Components\Radio; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\SeedBoxRecordResource\Pages\ListSeedBoxRecords; +use App\Filament\Resources\System\SeedBoxRecordResource\Pages\CreateSeedBoxRecord; +use App\Filament\Resources\System\SeedBoxRecordResource\Pages\EditSeedBoxRecord; use App\Filament\OptionsTrait; use App\Filament\Resources\System\SeedBoxRecordResource\Pages; use App\Filament\Resources\System\SeedBoxRecordResource\RelationManagers; @@ -10,7 +27,6 @@ use App\Models\SeedBoxRecord; use App\Repositories\SeedBoxRepository; use Filament\Facades\Filament; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -25,9 +41,9 @@ class SeedBoxRecordResource extends Resource protected static ?string $model = SeedBoxRecord::class; - protected static ?string $navigationIcon = 'heroicon-o-archive-box'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-archive-box'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 8; @@ -41,21 +57,21 @@ class SeedBoxRecordResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('operator')->label(__('label.seed_box_record.operator')), - Forms\Components\TextInput::make('bandwidth')->label(__('label.seed_box_record.bandwidth'))->integer(), - Forms\Components\TextInput::make('asn')->label(__('label.seed_box_record.asn'))->integer(), + return $schema + ->components([ + TextInput::make('operator')->label(__('label.seed_box_record.operator')), + TextInput::make('bandwidth')->label(__('label.seed_box_record.bandwidth'))->integer(), + TextInput::make('asn')->label(__('label.seed_box_record.asn'))->integer(), // Forms\Components\TextInput::make('ip_begin')->label(__('label.seed_box_record.ip_begin')), // Forms\Components\TextInput::make('ip_end')->label(__('label.seed_box_record.ip_end')), - Forms\Components\TextInput::make('ip')->label(__('label.seed_box_record.ip'))->helperText(__('label.seed_box_record.ip_help')), - Forms\Components\Toggle::make('is_allowed') + TextInput::make('ip')->label(__('label.seed_box_record.ip'))->helperText(__('label.seed_box_record.ip_help')), + Toggle::make('is_allowed') ->label(__('label.seed_box_record.is_allowed')) ->helperText(__('label.seed_box_record.is_allowed_help')) , - Forms\Components\Textarea::make('comment')->label(__('label.comment')), + Textarea::make('comment')->label(__('label.comment')), ])->columns(1); } @@ -63,18 +79,18 @@ class SeedBoxRecordResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('typeText')->label(__('label.seed_box_record.type')), - Tables\Columns\TextColumn::make('uid')->searchable(), - Tables\Columns\TextColumn::make('user.username') + TextColumn::make('id'), + TextColumn::make('typeText')->label(__('label.seed_box_record.type')), + TextColumn::make('uid')->searchable(), + TextColumn::make('user.username') ->label(__('label.username')) ->searchable() ->formatStateUsing(fn ($record) => username_for_admin($record->uid)) , - Tables\Columns\TextColumn::make('operator')->label(__('label.seed_box_record.operator'))->searchable(), - Tables\Columns\TextColumn::make('bandwidth')->label(__('label.seed_box_record.bandwidth')), - Tables\Columns\TextColumn::make('asn')->label(__('label.seed_box_record.asn')), - Tables\Columns\TextColumn::make('ipRange') + TextColumn::make('operator')->label(__('label.seed_box_record.operator'))->searchable(), + TextColumn::make('bandwidth')->label(__('label.seed_box_record.bandwidth')), + TextColumn::make('asn')->label(__('label.seed_box_record.asn')), + TextColumn::make('ipRange') ->label(__('label.seed_box_record.ip')) ->searchable(true, function (Builder $query, $search) { try { @@ -83,14 +99,14 @@ class SeedBoxRecordResource extends Resource return $query->orWhere(function (Builder $query) use ($ipNumeric) { return $query->where('ip_begin_numeric', '<=', $ipNumeric)->where('ip_end_numeric', '>=', $ipNumeric); }); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log("Invalid IP: $search, error: " . $exception->getMessage()); } }) , - Tables\Columns\TextColumn::make('comment')->label(__('label.comment'))->searchable(), - Tables\Columns\IconColumn::make('is_allowed')->boolean()->label(__('label.seed_box_record.is_allowed')), - Tables\Columns\BadgeColumn::make('status') + TextColumn::make('comment')->label(__('label.comment'))->searchable(), + IconColumn::make('is_allowed')->boolean()->label(__('label.seed_box_record.is_allowed')), + BadgeColumn::make('status') ->colors([ 'success' => SeedBoxRecord::STATUS_ALLOWED, 'warning' => SeedBoxRecord::STATUS_UNAUDITED, @@ -101,9 +117,9 @@ class SeedBoxRecordResource extends Resource ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('id') - ->form([ - Forms\Components\TextInput::make('id') + Filter::make('id') + ->schema([ + TextInput::make('id') ->label('ID') ->placeholder('ID') , @@ -111,9 +127,9 @@ class SeedBoxRecordResource extends Resource return $query->when($data['id'], fn (Builder $query, $id) => $query->where("id", $id)); }) , - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label('UID') ->placeholder('UID') , @@ -121,26 +137,26 @@ class SeedBoxRecordResource extends Resource return $query->when($data['uid'], fn (Builder $query, $uid) => $query->where("uid", $uid)); }) , - Tables\Filters\SelectFilter::make('type')->options(SeedBoxRecord::listTypes('text'))->label(__('label.seed_box_record.type')), - Tables\Filters\SelectFilter::make('is_allowed')->options(self::getYesNoOptions())->label(__('label.seed_box_record.is_allowed')), - Tables\Filters\SelectFilter::make('status')->options(SeedBoxRecord::listStatus('text'))->label(__('label.seed_box_record.status')), + SelectFilter::make('type')->options(SeedBoxRecord::listTypes('text'))->label(__('label.seed_box_record.type')), + SelectFilter::make('is_allowed')->options(self::getYesNoOptions())->label(__('label.seed_box_record.is_allowed')), + SelectFilter::make('status')->options(SeedBoxRecord::listStatus('text'))->label(__('label.seed_box_record.status')), ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\Action::make('audit') + ->recordActions([ + EditAction::make(), + Action::make('audit') ->label(__('admin.resources.seed_box_record.toggle_status')) - ->mountUsing(fn (Forms\ComponentContainer $form, NexusModel $record) => $form->fill([ + ->mountUsing(fn (Schema $schema, NexusModel $record) => $schema->fill([ 'status' => $record->status, ])) - ->form([ - Forms\Components\Radio::make('status') + ->schema([ + Radio::make('status') ->options(SeedBoxRecord::listStatus('text')) ->inline() ->label(__('label.seed_box_record.status')) ->required() , - Forms\Components\TextInput::make('reason') + TextInput::make('reason') ->label(__('label.reason')) , ]) @@ -148,14 +164,14 @@ class SeedBoxRecordResource extends Resource $rep = new SeedBoxRepository(); try { $rep->updateStatus($record, $data['status'], $data['reason']); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification(class_basename($exception)); } }) , ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } @@ -169,9 +185,9 @@ class SeedBoxRecordResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListSeedBoxRecords::route('/'), - 'create' => Pages\CreateSeedBoxRecord::route('/create'), - 'edit' => Pages\EditSeedBoxRecord::route('/{record}/edit'), + 'index' => ListSeedBoxRecords::route('/'), + 'create' => CreateSeedBoxRecord::route('/create'), + 'edit' => EditSeedBoxRecord::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/System/SeedBoxRecordResource/Pages/CreateSeedBoxRecord.php b/app/Filament/Resources/System/SeedBoxRecordResource/Pages/CreateSeedBoxRecord.php index 33be0343..c48d559a 100644 --- a/app/Filament/Resources/System/SeedBoxRecordResource/Pages/CreateSeedBoxRecord.php +++ b/app/Filament/Resources/System/SeedBoxRecordResource/Pages/CreateSeedBoxRecord.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\SeedBoxRecordResource\Pages; +use Exception; use App\Filament\Resources\System\SeedBoxRecordResource; use App\Models\SeedBoxRecord; use App\Repositories\SeedBoxRepository; @@ -33,7 +34,7 @@ class CreateSeedBoxRecord extends CreateRecord return; } $this->redirect($this->getResource()::getUrl('index')); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } } diff --git a/app/Filament/Resources/System/SeedBoxRecordResource/Pages/EditSeedBoxRecord.php b/app/Filament/Resources/System/SeedBoxRecordResource/Pages/EditSeedBoxRecord.php index de4a958a..74fed110 100644 --- a/app/Filament/Resources/System/SeedBoxRecordResource/Pages/EditSeedBoxRecord.php +++ b/app/Filament/Resources/System/SeedBoxRecordResource/Pages/EditSeedBoxRecord.php @@ -2,6 +2,8 @@ namespace App\Filament\Resources\System\SeedBoxRecordResource\Pages; +use Filament\Actions\DeleteAction; +use Exception; use App\Filament\Resources\System\SeedBoxRecordResource; use App\Repositories\SeedBoxRepository; use Filament\Pages\Actions; @@ -14,7 +16,7 @@ class EditSeedBoxRecord extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } @@ -26,7 +28,7 @@ class EditSeedBoxRecord extends EditRecord $this->record = $rep->update($data, $this->record->id); send_admin_success_notification(); $this->redirect($this->getResource()::getUrl('index')); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } } diff --git a/app/Filament/Resources/System/SeedBoxRecordResource/Pages/ListSeedBoxRecords.php b/app/Filament/Resources/System/SeedBoxRecordResource/Pages/ListSeedBoxRecords.php index e709a9b8..2c7c9850 100644 --- a/app/Filament/Resources/System/SeedBoxRecordResource/Pages/ListSeedBoxRecords.php +++ b/app/Filament/Resources/System/SeedBoxRecordResource/Pages/ListSeedBoxRecords.php @@ -2,6 +2,9 @@ namespace App\Filament\Resources\System\SeedBoxRecordResource\Pages; +use Filament\Actions\CreateAction; +use Filament\Actions\Action; +use Filament\Forms\Components\TextInput; use App\Filament\PageList; use App\Filament\Resources\System\SeedBoxRecordResource; use App\Repositories\SeedBoxRepository; @@ -18,12 +21,12 @@ class ListSeedBoxRecords extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), - Actions\Action::make('check') + CreateAction::make(), + Action::make('check') ->label(__('admin.resources.seed_box_record.check_modal_btn')) - ->form([ - Forms\Components\TextInput::make('ip')->required()->label('IP'), - Forms\Components\TextInput::make('uid')->required()->label('UID'), + ->schema([ + TextInput::make('ip')->required()->label('IP'), + TextInput::make('uid')->required()->label('UID'), ]) ->modalHeading(__('admin.resources.seed_box_record.check_modal_header')) ->action(function (array $data) { @@ -38,7 +41,7 @@ class ListSeedBoxRecords extends PageList // } }) ->registerModalActions([ - Actions\Action::make('checkResult') + Action::make('checkResult') ->modalHeading(function () { if (self::$checkResult !== null) { if (self::$checkResult['result']) { diff --git a/app/Filament/Resources/System/SettingResource.php b/app/Filament/Resources/System/SettingResource.php index 8022a8a4..c2ca76d1 100644 --- a/app/Filament/Resources/System/SettingResource.php +++ b/app/Filament/Resources/System/SettingResource.php @@ -2,12 +2,19 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Textarea; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\BadgeColumn; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\EditAction; +use App\Filament\Resources\System\SettingResource\Pages\EditSetting; use App\Filament\OptionsTrait; use App\Filament\Resources\System\SettingResource\Pages; use App\Filament\Resources\System\SettingResource\RelationManagers; use App\Models\Setting; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -20,9 +27,9 @@ class SettingResource extends Resource protected static ?string $model = Setting::class; - protected static ?string $navigationIcon = 'heroicon-o-cog'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-cog'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 1000; @@ -37,13 +44,13 @@ class SettingResource extends Resource } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->required()->disabled()->columnSpan(['sm' => 2]), - Forms\Components\Textarea::make('value')->required()->columnSpan(['sm' => 2]) - ->afterStateHydrated(function (Forms\Components\Textarea $component, $state) { + return $schema + ->components([ + TextInput::make('name')->required()->disabled()->columnSpan(['sm' => 2]), + Textarea::make('value')->required()->columnSpan(['sm' => 2]) + ->afterStateHydrated(function (Textarea $component, $state) { $arr = json_decode($state, true); if (is_array($arr)) { $component->disabled(); @@ -56,19 +63,19 @@ class SettingResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->searchable(), - Tables\Columns\TextColumn::make('value')->limit(), - Tables\Columns\BadgeColumn::make('autoload')->colors(['success' => 'yes', 'warning' => 'no']), - Tables\Columns\TextColumn::make('updated_at'), + TextColumn::make('id'), + TextColumn::make('name')->searchable(), + TextColumn::make('value')->limit(), + BadgeColumn::make('autoload')->colors(['success' => 'yes', 'warning' => 'no']), + TextColumn::make('updated_at'), ]) ->filters([ - Tables\Filters\SelectFilter::make('autoload')->options(self::$yesOrNo), + SelectFilter::make('autoload')->options(self::$yesOrNo), ]) - ->actions([ - Tables\Actions\EditAction::make(), + ->recordActions([ + EditAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -85,7 +92,7 @@ class SettingResource extends Resource return [ // 'index' => Pages\ListSettings::route('/'), // 'create' => Pages\CreateSetting::route('/create'), - 'index' => Pages\EditSetting::route('/'), + 'index' => EditSetting::route('/'), ]; } } diff --git a/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php b/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php index d2bebdf8..c2068ebc 100644 --- a/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php +++ b/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php @@ -2,6 +2,17 @@ namespace App\Filament\Resources\System\SettingResource\Pages; +use Filament\Forms\Contracts\HasForms; +use Filament\Forms\Concerns\InteractsWithForms; +use Filament\Schemas\Schema; +use Filament\Schemas\Components\Tabs; +use Filament\Schemas\Components\Tabs\Tab; +use Filament\Forms\Components\Radio; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\CheckboxList; +use Filament\Forms\Components\Repeater; +use Filament\Schemas\Components\Section; use App\Auth\Permission; use App\Filament\OptionsTrait; use App\Filament\Resources\System\SettingResource; @@ -20,13 +31,13 @@ use Illuminate\Support\HtmlString; use Meilisearch\Contracts\Index\Settings; use Nexus\Database\NexusDB; -class EditSetting extends Page implements Forms\Contracts\HasForms +class EditSetting extends Page implements HasForms { - use Forms\Concerns\InteractsWithForms, OptionsTrait; + use InteractsWithForms, OptionsTrait; protected static string $resource = SettingResource::class; - protected static string $view = 'filament.resources.system.setting-resource.pages.edit-hit-and-run'; + protected string $view = 'filament.resources.system.setting-resource.pages.edit-hit-and-run'; public ?array $data = []; @@ -41,10 +52,10 @@ class EditSetting extends Page implements Forms\Contracts\HasForms $this->fillForm(); } - public function form(Forms\Form $form): Forms\Form + public function form(Schema $schema): Schema { - return $form - ->schema($this->getFormSchema()) + return $schema + ->components($this->getFormSchema()) ->statePath('data'); } @@ -59,7 +70,7 @@ class EditSetting extends Page implements Forms\Contracts\HasForms protected function getFormSchema(): array { return [ - Forms\Components\Tabs::make('Heading') + Tabs::make('Heading') ->tabs($this->getTabs()) ]; } @@ -109,7 +120,7 @@ class EditSetting extends Page implements Forms\Contracts\HasForms private function getTabs(): array { $tabs = []; - $tabs[] = Forms\Components\Tabs\Tab::make(__('label.setting.hr.tab_header')) + $tabs[] = Tab::make(__('label.setting.hr.tab_header')) ->id('hr') ->schema($this->getHitAndRunSchema()) ->columns(2) @@ -120,102 +131,102 @@ class EditSetting extends Page implements Forms\Contracts\HasForms // ->columns(2) // ; - $tabs[] = Forms\Components\Tabs\Tab::make(__('label.setting.backup.tab_header')) + $tabs[] = Tab::make(__('label.setting.backup.tab_header')) ->id('backup') ->schema([ - Forms\Components\Radio::make('backup.enabled')->options(self::$yesOrNo)->inline(true)->label(__('label.enabled'))->helperText(__('label.setting.backup.enabled_help')), - Forms\Components\Radio::make('backup.frequency')->options(['daily' => 'daily', 'hourly' => 'hourly'])->inline(true)->label(__('label.setting.backup.frequency'))->helperText(__('label.setting.backup.frequency_help')), - Forms\Components\Select::make('backup.hour')->options(range(0, 23))->label(__('label.setting.backup.hour'))->helperText(__('label.setting.backup.hour_help')), - Forms\Components\Select::make('backup.minute')->options(range(0, 59))->label(__('label.setting.backup.minute'))->helperText(__('label.setting.backup.minute_help')), + Radio::make('backup.enabled')->options(self::$yesOrNo)->inline(true)->label(__('label.enabled'))->helperText(__('label.setting.backup.enabled_help')), + Radio::make('backup.frequency')->options(['daily' => 'daily', 'hourly' => 'hourly'])->inline(true)->label(__('label.setting.backup.frequency'))->helperText(__('label.setting.backup.frequency_help')), + Select::make('backup.hour')->options(range(0, 23))->label(__('label.setting.backup.hour'))->helperText(__('label.setting.backup.hour_help')), + Select::make('backup.minute')->options(range(0, 59))->label(__('label.setting.backup.minute'))->helperText(__('label.setting.backup.minute_help')), // Forms\Components\TextInput::make('backup.google_drive_client_id')->label(__('label.setting.backup.google_drive_client_id')), // Forms\Components\TextInput::make('backup.google_drive_client_secret')->label(__('label.setting.backup.google_drive_client_secret')), // Forms\Components\TextInput::make('backup.google_drive_refresh_token')->label(__('label.setting.backup.google_drive_refresh_token')), // Forms\Components\TextInput::make('backup.google_drive_folder_id')->label(__('label.setting.backup.google_drive_folder_id')), - Forms\Components\TextInput::make('backup.export_path')->label(__('label.setting.backup.export_path'))->helperText(new HtmlString(__('label.setting.backup.export_path_help', ['default_path' => ToolRepository::getBackupExportPathDefault()]))), - Forms\Components\TextInput::make('backup.retention_count')->numeric()->label(__('label.setting.backup.retention_count'))->helperText(new HtmlString(__('label.setting.backup.retention_count_help', ['default_count' => ToolRepository::BACKUP_RETENTION_COUNT_DEFAULT]))), - Forms\Components\Radio::make('backup.via_ftp')->options(self::$yesOrNo)->inline(true)->label(__('label.setting.backup.via_ftp'))->helperText(new HtmlString(__('label.setting.backup.via_ftp_help'))), - Forms\Components\Radio::make('backup.via_sftp')->options(self::$yesOrNo)->inline(true)->label(__('label.setting.backup.via_sftp'))->helperText(new HtmlString(__('label.setting.backup.via_sftp_help'))), + TextInput::make('backup.export_path')->label(__('label.setting.backup.export_path'))->helperText(new HtmlString(__('label.setting.backup.export_path_help', ['default_path' => ToolRepository::getBackupExportPathDefault()]))), + TextInput::make('backup.retention_count')->numeric()->label(__('label.setting.backup.retention_count'))->helperText(new HtmlString(__('label.setting.backup.retention_count_help', ['default_count' => ToolRepository::BACKUP_RETENTION_COUNT_DEFAULT]))), + Radio::make('backup.via_ftp')->options(self::$yesOrNo)->inline(true)->label(__('label.setting.backup.via_ftp'))->helperText(new HtmlString(__('label.setting.backup.via_ftp_help'))), + Radio::make('backup.via_sftp')->options(self::$yesOrNo)->inline(true)->label(__('label.setting.backup.via_sftp'))->helperText(new HtmlString(__('label.setting.backup.via_sftp_help'))), ])->columns(2); - $tabs[] = Forms\Components\Tabs\Tab::make(__('label.setting.seed_box.tab_header')) + $tabs[] = Tab::make(__('label.setting.seed_box.tab_header')) ->id('seed_box') ->schema([ - Forms\Components\Radio::make('seed_box.enabled')->options(self::$yesOrNo)->inline(true)->label(__('label.enabled'))->helperText(__('label.setting.seed_box.enabled_help')), - Forms\Components\TextInput::make('seed_box.not_seed_box_max_speed')->label(__('label.setting.seed_box.not_seed_box_max_speed'))->helperText(__('label.setting.seed_box.not_seed_box_max_speed_help'))->integer(), - Forms\Components\Radio::make('seed_box.no_promotion')->options(self::$yesOrNo)->inline(true)->label(__('label.setting.seed_box.no_promotion'))->helperText(__('label.setting.seed_box.no_promotion_help')), - Forms\Components\TextInput::make('seed_box.max_uploaded')->label(__('label.setting.seed_box.max_uploaded'))->helperText(__('label.setting.seed_box.max_uploaded_help'))->integer(), - Forms\Components\TextInput::make('seed_box.max_uploaded_duration')->label(__('label.setting.seed_box.max_uploaded_duration'))->helperText(__('label.setting.seed_box.max_uploaded_duration_help'))->integer(), + Radio::make('seed_box.enabled')->options(self::$yesOrNo)->inline(true)->label(__('label.enabled'))->helperText(__('label.setting.seed_box.enabled_help')), + TextInput::make('seed_box.not_seed_box_max_speed')->label(__('label.setting.seed_box.not_seed_box_max_speed'))->helperText(__('label.setting.seed_box.not_seed_box_max_speed_help'))->integer(), + Radio::make('seed_box.no_promotion')->options(self::$yesOrNo)->inline(true)->label(__('label.setting.seed_box.no_promotion'))->helperText(__('label.setting.seed_box.no_promotion_help')), + TextInput::make('seed_box.max_uploaded')->label(__('label.setting.seed_box.max_uploaded'))->helperText(__('label.setting.seed_box.max_uploaded_help'))->integer(), + TextInput::make('seed_box.max_uploaded_duration')->label(__('label.setting.seed_box.max_uploaded_duration'))->helperText(__('label.setting.seed_box.max_uploaded_duration_help'))->integer(), ])->columns(2); $id = "meilisearch"; - $tabs[] = Forms\Components\Tabs\Tab::make(__("label.setting.$id.tab_header")) + $tabs[] = Tab::make(__("label.setting.$id.tab_header")) ->id($id) ->schema($this->getTabMeilisearchSchema($id)) ->columns(2) ; $id = "image_hosting"; - $tabs[] = Forms\Components\Tabs\Tab::make(__("label.setting.$id.tab_header")) + $tabs[] = Tab::make(__("label.setting.$id.tab_header")) ->id($id) ->schema($this->getTabImageHostingSchema($id)) ->columns(2) ; $id = "permission"; - $tabs[] = Forms\Components\Tabs\Tab::make(__("label.setting.$id.tab_header")) + $tabs[] = Tab::make(__("label.setting.$id.tab_header")) ->id($id) ->schema($this->getTabPermissionSchema($id)) ->columns(2) ; - $tabs[] = Forms\Components\Tabs\Tab::make(__('label.setting.system.tab_header')) + $tabs[] = Tab::make(__('label.setting.system.tab_header')) ->id('system') ->schema([ - Forms\Components\Radio::make('system.change_username_card_allow_characters_outside_the_alphabets') + Radio::make('system.change_username_card_allow_characters_outside_the_alphabets') ->options(self::$yesOrNo) ->inline(true) ->label(__('label.setting.system.change_username_card_allow_characters_outside_the_alphabets')) , - Forms\Components\TextInput::make('system.change_username_min_interval_in_days') + TextInput::make('system.change_username_min_interval_in_days') ->integer() ->label(__('label.setting.system.change_username_min_interval_in_days')) , - Forms\Components\TextInput::make('system.maximum_number_of_medals_can_be_worn') + TextInput::make('system.maximum_number_of_medals_can_be_worn') ->integer() ->label(__('label.setting.system.maximum_number_of_medals_can_be_worn')) , - Forms\Components\TextInput::make('system.cookie_valid_days') + TextInput::make('system.cookie_valid_days') ->integer() ->label(__('label.setting.system.cookie_valid_days')) , - Forms\Components\TextInput::make('system.maximum_upload_speed') + TextInput::make('system.maximum_upload_speed') ->integer() ->label(__('label.setting.system.maximum_upload_speed')) ->helperText(__('label.setting.system.maximum_upload_speed_help')) , - Forms\Components\Radio::make('system.is_invite_pre_email_and_username') + Radio::make('system.is_invite_pre_email_and_username') ->options(self::$yesOrNo) ->inline(true) ->label(__('label.setting.system.is_invite_pre_email_and_username')) ->helperText(__('label.setting.system.is_invite_pre_email_and_username_help')) , - Forms\Components\Radio::make('system.is_record_announce_log') + Radio::make('system.is_record_announce_log') ->options(self::$yesOrNo) ->inline(true) ->label(__('label.setting.system.is_record_announce_log')) ->helperText(__('label.setting.system.is_record_announce_log_help')) , - Forms\Components\Radio::make('system.is_record_seeding_bonus_log') + Radio::make('system.is_record_seeding_bonus_log') ->options(self::$yesOrNo) ->inline(true) ->label(__('label.setting.system.is_record_seeding_bonus_log')) ->helperText(__('label.setting.system.is_record_seeding_bonus_log_help')) , - Forms\Components\Select::make('system.access_admin_class_min') + Select::make('system.access_admin_class_min') ->options(User::listClass(User::CLASS_VIP)) ->label(__('label.setting.system.access_admin_class_min')) ->helperText(__('label.setting.system.access_admin_class_min_help')) , - Forms\Components\TextInput::make('system.alarm_email_receiver') + TextInput::make('system.alarm_email_receiver') ->label(__('label.setting.system.alarm_email_receiver')) ->helperText(__('label.setting.system.alarm_email_receiver_help')) , @@ -228,13 +239,13 @@ class EditSetting extends Page implements Forms\Contracts\HasForms private function getHitAndRunSchema() { $default = [ - Forms\Components\Radio::make('hr.mode')->options(HitAndRun::listModes(true))->inline(true)->label(__('label.setting.hr.mode')), - Forms\Components\TextInput::make('hr.inspect_time')->helperText(__('label.setting.hr.inspect_time_help'))->label(__('label.setting.hr.inspect_time'))->integer(), - Forms\Components\TextInput::make('hr.seed_time_minimum')->helperText(__('label.setting.hr.seed_time_minimum_help'))->label(__('label.setting.hr.seed_time_minimum'))->integer(), - Forms\Components\TextInput::make('hr.leech_time_minimum')->helperText(__('label.setting.hr.leech_time_minimum_help'))->label(__('label.setting.hr.leech_time_minimum'))->integer(), - Forms\Components\TextInput::make('hr.ignore_when_ratio_reach')->helperText(__('label.setting.hr.ignore_when_ratio_reach_help'))->label(__('label.setting.hr.ignore_when_ratio_reach'))->integer(), - Forms\Components\TextInput::make('hr.ban_user_when_counts_reach')->helperText(__('label.setting.hr.ban_user_when_counts_reach_help'))->label(__('label.setting.hr.ban_user_when_counts_reach'))->integer(), - Forms\Components\TextInput::make('hr.include_rate')->helperText(__('label.setting.hr.include_rate_help'))->label(__('label.setting.hr.include_rate'))->numeric(), + Radio::make('hr.mode')->options(HitAndRun::listModes(true))->inline(true)->label(__('label.setting.hr.mode')), + TextInput::make('hr.inspect_time')->helperText(__('label.setting.hr.inspect_time_help'))->label(__('label.setting.hr.inspect_time'))->integer(), + TextInput::make('hr.seed_time_minimum')->helperText(__('label.setting.hr.seed_time_minimum_help'))->label(__('label.setting.hr.seed_time_minimum'))->integer(), + TextInput::make('hr.leech_time_minimum')->helperText(__('label.setting.hr.leech_time_minimum_help'))->label(__('label.setting.hr.leech_time_minimum'))->integer(), + TextInput::make('hr.ignore_when_ratio_reach')->helperText(__('label.setting.hr.ignore_when_ratio_reach_help'))->label(__('label.setting.hr.ignore_when_ratio_reach'))->integer(), + TextInput::make('hr.ban_user_when_counts_reach')->helperText(__('label.setting.hr.ban_user_when_counts_reach_help'))->label(__('label.setting.hr.ban_user_when_counts_reach'))->integer(), + TextInput::make('hr.include_rate')->helperText(__('label.setting.hr.include_rate_help'))->label(__('label.setting.hr.include_rate'))->numeric(), ]; return apply_filter("hit_and_run_setting_schema", $default); } @@ -242,42 +253,42 @@ class EditSetting extends Page implements Forms\Contracts\HasForms private function getRequireSeedSectionSchema(): array { return [ - Forms\Components\Radio::make('require_seed_section.enabled')->options(self::$yesOrNo)->label(__('label.enabled'))->helperText(__('label.setting.require_seed_section.enabled_help')), - Forms\Components\TextInput::make('require_seed_section.menu_title')->label(__('label.setting.require_seed_section.menu_title'))->helperText(__('label.setting.require_seed_section.menu_title_help')), - Forms\Components\TextInput::make('require_seed_section.seeder_lte')->label(__('label.setting.require_seed_section.seeder_lte'))->helperText(__('label.setting.require_seed_section.seeder_lte_help'))->integer(), - Forms\Components\TextInput::make('require_seed_section.seeder_gte')->label(__('label.setting.require_seed_section.seeder_gte'))->helperText(__('label.setting.require_seed_section.seeder_gte_help'))->integer(), - Forms\Components\CheckboxList::make('require_seed_section.require_tags')->label(__('label.setting.require_seed_section.require_tags'))->helperText(__('label.setting.require_seed_section.require_tags_help'))->options(Tag::query()->pluck('name', 'id'))->columns(4), - Forms\Components\Select::make('require_seed_section.promotion_state')->label(__('label.setting.require_seed_section.promotion_state'))->helperText(__('label.setting.require_seed_section.promotion_state_help'))->options(Torrent::listPromotionTypes(true)), - Forms\Components\TextInput::make('require_seed_section.daily_seed_time_min')->label(__('label.setting.require_seed_section.daily_seed_time_min'))->helperText(__('label.setting.require_seed_section.daily_seed_time_min_help'))->integer(), - Forms\Components\TextInput::make('require_seed_section.torrent_count_max')->label(__('label.setting.require_seed_section.torrent_count_max'))->helperText(__('label.setting.require_seed_section.torrent_count_max_help'))->integer(), - Forms\Components\Repeater::make('require_seed_section.bonus_reward') + Radio::make('require_seed_section.enabled')->options(self::$yesOrNo)->label(__('label.enabled'))->helperText(__('label.setting.require_seed_section.enabled_help')), + TextInput::make('require_seed_section.menu_title')->label(__('label.setting.require_seed_section.menu_title'))->helperText(__('label.setting.require_seed_section.menu_title_help')), + TextInput::make('require_seed_section.seeder_lte')->label(__('label.setting.require_seed_section.seeder_lte'))->helperText(__('label.setting.require_seed_section.seeder_lte_help'))->integer(), + TextInput::make('require_seed_section.seeder_gte')->label(__('label.setting.require_seed_section.seeder_gte'))->helperText(__('label.setting.require_seed_section.seeder_gte_help'))->integer(), + CheckboxList::make('require_seed_section.require_tags')->label(__('label.setting.require_seed_section.require_tags'))->helperText(__('label.setting.require_seed_section.require_tags_help'))->options(Tag::query()->pluck('name', 'id'))->columns(4), + Select::make('require_seed_section.promotion_state')->label(__('label.setting.require_seed_section.promotion_state'))->helperText(__('label.setting.require_seed_section.promotion_state_help'))->options(Torrent::listPromotionTypes(true)), + TextInput::make('require_seed_section.daily_seed_time_min')->label(__('label.setting.require_seed_section.daily_seed_time_min'))->helperText(__('label.setting.require_seed_section.daily_seed_time_min_help'))->integer(), + TextInput::make('require_seed_section.torrent_count_max')->label(__('label.setting.require_seed_section.torrent_count_max'))->helperText(__('label.setting.require_seed_section.torrent_count_max_help'))->integer(), + Repeater::make('require_seed_section.bonus_reward') ->label(__('label.setting.require_seed_section.bonus_reward')) ->helperText(__('label.setting.require_seed_section.bonus_reward_help')) ->schema([ - Forms\Components\TextInput::make('seeders') + TextInput::make('seeders') ->label(__('label.setting.require_seed_section.seeders')) ->required() ->integer() ->columnSpan(2) , - Forms\Components\Repeater::make('seed_time_reward') + Repeater::make('seed_time_reward') ->label(__('label.setting.require_seed_section.seed_time_reward')) ->schema([ - Forms\Components\TextInput::make('begin')->label(__('label.setting.require_seed_section.seed_time_reward_begin'))->helperText(__('label.setting.require_seed_section.seed_time_reward_begin_help')), - Forms\Components\TextInput::make('end')->label(__('label.setting.require_seed_section.seed_time_reward_end'))->helperText(__('label.setting.require_seed_section.seed_time_reward_end_help')), - Forms\Components\TextInput::make('window')->label(__('label.setting.require_seed_section.seed_time_reward_window'))->helperText(__('label.setting.require_seed_section.seed_time_reward_window_help')), - Forms\Components\TextInput::make('reward')->label(__('label.setting.require_seed_section.seed_time_reward_reward'))->helperText(__('label.setting.require_seed_section.seed_time_reward_reward_help')), + TextInput::make('begin')->label(__('label.setting.require_seed_section.seed_time_reward_begin'))->helperText(__('label.setting.require_seed_section.seed_time_reward_begin_help')), + TextInput::make('end')->label(__('label.setting.require_seed_section.seed_time_reward_end'))->helperText(__('label.setting.require_seed_section.seed_time_reward_end_help')), + TextInput::make('window')->label(__('label.setting.require_seed_section.seed_time_reward_window'))->helperText(__('label.setting.require_seed_section.seed_time_reward_window_help')), + TextInput::make('reward')->label(__('label.setting.require_seed_section.seed_time_reward_reward'))->helperText(__('label.setting.require_seed_section.seed_time_reward_reward_help')), ]) ->columns(4) ->columnSpan(5) , - Forms\Components\Repeater::make('data_traffic_reward') + Repeater::make('data_traffic_reward') ->label(__('label.setting.require_seed_section.data_traffic_reward')) ->schema([ - Forms\Components\TextInput::make('begin')->label(__('label.setting.require_seed_section.data_traffic_reward_begin'))->helperText(__('label.setting.require_seed_section.data_traffic_reward_begin_help')), - Forms\Components\TextInput::make('end')->label(__('label.setting.require_seed_section.data_traffic_reward_end'))->helperText(__('label.setting.require_seed_section.data_traffic_reward_end_help')), - Forms\Components\TextInput::make('window')->label(__('label.setting.require_seed_section.data_traffic_reward_window'))->helperText(__('label.setting.require_seed_section.data_traffic_reward_window_help')), - Forms\Components\TextInput::make('reward')->label(__('label.setting.require_seed_section.data_traffic_reward_reward'))->helperText(__('label.setting.require_seed_section.data_traffic_reward_reward_help')), + TextInput::make('begin')->label(__('label.setting.require_seed_section.data_traffic_reward_begin'))->helperText(__('label.setting.require_seed_section.data_traffic_reward_begin_help')), + TextInput::make('end')->label(__('label.setting.require_seed_section.data_traffic_reward_end'))->helperText(__('label.setting.require_seed_section.data_traffic_reward_end_help')), + TextInput::make('window')->label(__('label.setting.require_seed_section.data_traffic_reward_window'))->helperText(__('label.setting.require_seed_section.data_traffic_reward_window_help')), + TextInput::make('reward')->label(__('label.setting.require_seed_section.data_traffic_reward_reward'))->helperText(__('label.setting.require_seed_section.data_traffic_reward_reward_help')), ]) ->columns(4) ->columnSpan(5) @@ -294,7 +305,7 @@ class EditSetting extends Page implements Forms\Contracts\HasForms $schema = []; $name = "$id.enabled"; - $schema[] = Forms\Components\Radio::make($name) + $schema[] = Radio::make($name) ->options(self::$yesOrNo) ->inline(true) ->label(__('label.enabled')) @@ -302,7 +313,7 @@ class EditSetting extends Page implements Forms\Contracts\HasForms ; $name = "$id.search_description"; - $schema[] = Forms\Components\Radio::make($name) + $schema[] = Radio::make($name) ->options(self::$yesOrNo) ->inline(true) ->label(__("label.setting.$name")) @@ -310,7 +321,7 @@ class EditSetting extends Page implements Forms\Contracts\HasForms ; $name = "$id.default_search_mode"; - $schema[] = Forms\Components\Radio::make($name) + $schema[] = Radio::make($name) ->options(SearchBox::listSearchModes()) ->inline(true) ->label(__("label.setting.$name")) @@ -324,7 +335,7 @@ class EditSetting extends Page implements Forms\Contracts\HasForms { $schema = []; $name = "$id.driver"; - $schema[] = Forms\Components\Radio::make($name) + $schema[] = Radio::make($name) ->options(['local' => 'local', 'chevereto' => 'chevereto', 'lsky' => 'lsky']) ->inline(true) ->label(__("label.setting.$name")) @@ -337,19 +348,19 @@ class EditSetting extends Page implements Forms\Contracts\HasForms $driverId = sprintf("%s_%s", $id, $driverName); $driverSchemas = []; $field = "upload_api_endpoint"; - $driverSchemas[] = Forms\Components\TextInput::make("$driverId.$field") + $driverSchemas[] = TextInput::make("$driverId.$field") ->label(__("label.setting.$id.$field")) ; $field = "upload_token"; - $driverSchemas[] = Forms\Components\TextInput::make("$driverId.$field") + $driverSchemas[] = TextInput::make("$driverId.$field") ->label(__("label.setting.$id.$field")) ; $field = "base_url"; - $driverSchemas[] = Forms\Components\TextInput::make("$driverId.$field") + $driverSchemas[] = TextInput::make("$driverId.$field") ->label(__("label.setting.$id.$field")) ; - $driverSection = Forms\Components\Section::make($driverName)->schema($driverSchemas); + $driverSection = Section::make($driverName)->schema($driverSchemas); $schema[] = $driverSection; //lsky @@ -357,18 +368,18 @@ class EditSetting extends Page implements Forms\Contracts\HasForms $driverId = sprintf("%s_%s", $id, $driverName); $driverSchemas = []; $field = "upload_api_endpoint"; - $driverSchemas[] = Forms\Components\TextInput::make("$driverId.$field") + $driverSchemas[] = TextInput::make("$driverId.$field") ->label(__("label.setting.$id.$field")) ; $field = "upload_token"; - $driverSchemas[] = Forms\Components\TextInput::make("$driverId.$field") + $driverSchemas[] = TextInput::make("$driverId.$field") ->label(__("label.setting.$id.$field")) ; $field = "base_url"; - $driverSchemas[] = Forms\Components\TextInput::make("$driverId.$field") + $driverSchemas[] = TextInput::make("$driverId.$field") ->label(__("label.setting.$id.$field")) ; - $driverSection = Forms\Components\Section::make($driverName)->schema($driverSchemas); + $driverSection = Section::make($driverName)->schema($driverSchemas); $schema[] = $driverSection; @@ -380,7 +391,7 @@ class EditSetting extends Page implements Forms\Contracts\HasForms $schema = []; $name = "$id.user_token_allowed"; - $schema[] = Forms\Components\CheckboxList::make($name) + $schema[] = CheckboxList::make($name) ->options(TokenRepository::listUserTokenPermissions()) ->label(__("label.setting.{$name}")) ->helperText(__("label.setting.{$name}_help")) diff --git a/app/Filament/Resources/System/TorrentStateResource.php b/app/Filament/Resources/System/TorrentStateResource.php index fb8c3c91..c9acdbf3 100644 --- a/app/Filament/Resources/System/TorrentStateResource.php +++ b/app/Filament/Resources/System/TorrentStateResource.php @@ -2,13 +2,18 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\DateTimePicker; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\EditAction; +use App\Filament\Resources\System\TorrentStateResource\Pages\ManageTorrentStates; use App\Filament\Resources\System\TorrentStateResource\Pages; use App\Filament\Resources\System\TorrentStateResource\RelationManagers; use App\Models\Setting; use App\Models\Torrent; use App\Models\TorrentState; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -20,9 +25,9 @@ class TorrentStateResource extends Resource { protected static ?string $model = TorrentState::class; - protected static ?string $navigationIcon = 'heroicon-o-megaphone'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-megaphone'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 9; @@ -36,17 +41,17 @@ class TorrentStateResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\Select::make('global_sp_state') + return $schema + ->components([ + Select::make('global_sp_state') ->options(Torrent::listPromotionTypes(true)) ->label(__('label.torrent_state.global_sp_state')) ->required(), - Forms\Components\DateTimePicker::make('begin') + DateTimePicker::make('begin') ->label(__('label.begin')), - Forms\Components\DateTimePicker::make('deadline') + DateTimePicker::make('deadline') ->label(__('label.deadline')), ])->columns(1); } @@ -55,15 +60,15 @@ class TorrentStateResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('global_sp_state_text')->label(__('label.torrent_state.global_sp_state')), - Tables\Columns\TextColumn::make('begin')->label(__('label.begin')), - Tables\Columns\TextColumn::make('deadline')->label(__('label.deadline')), + TextColumn::make('global_sp_state_text')->label(__('label.torrent_state.global_sp_state')), + TextColumn::make('begin')->label(__('label.begin')), + TextColumn::make('deadline')->label(__('label.deadline')), ]) ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make()->after(function () { + ->recordActions([ + EditAction::make()->after(function () { do_log("cache_del: global_promotion_state"); NexusDB::cache_del(Setting::TORRENT_GLOBAL_STATE_CACHE_KEY); do_log("publish_model_event: global_promotion_state_updated"); @@ -71,7 +76,7 @@ class TorrentStateResource extends Resource }), // Tables\Actions\DeleteAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -79,7 +84,7 @@ class TorrentStateResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageTorrentStates::route('/'), + 'index' => ManageTorrentStates::route('/'), ]; } } diff --git a/app/Filament/Resources/System/TrackerUrlResource.php b/app/Filament/Resources/System/TrackerUrlResource.php index 7b4ef1d6..77e75655 100644 --- a/app/Filament/Resources/System/TrackerUrlResource.php +++ b/app/Filament/Resources/System/TrackerUrlResource.php @@ -2,12 +2,21 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Radio; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\IconColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\TrackerUrlResource\Pages\ManageTrackerUrls; use App\Filament\OptionsTrait; use App\Filament\Resources\System\TrackerUrlResource\Pages; use App\Filament\Resources\System\TrackerUrlResource\RelationManagers; use App\Models\TrackerUrl; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; @@ -20,9 +29,9 @@ class TrackerUrlResource extends Resource protected static ?string $model = TrackerUrl::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 10; @@ -36,24 +45,24 @@ class TrackerUrlResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('url')->required(), - Forms\Components\Radio::make('is_default') + return $schema + ->components([ + TextInput::make('url')->required(), + Radio::make('is_default') ->label(__('label.is_default')) ->options(self::getYesNoOptions()) ->required(true) ->inline() , - Forms\Components\Radio::make('enabled') + Radio::make('enabled') ->label(__('label.enabled')) ->options(self::getEnableDisableOptions(1, 0)) ->required(true) ->inline() , - Forms\Components\TextInput::make('priority') + TextInput::make('priority') ->label(__('label.priority'))->numeric() ->default(0) ->helperText(__('label.priority_help')) @@ -74,35 +83,35 @@ class TrackerUrlResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id') + TextColumn::make('id') , - Tables\Columns\TextColumn::make('url') + TextColumn::make('url') , - Tables\Columns\IconColumn::make('is_default') + IconColumn::make('is_default') ->label(__('label.is_default')) ->boolean() , - Tables\Columns\IconColumn::make('enabled') + IconColumn::make('enabled') ->label(__('label.enabled')) ->boolean() , - Tables\Columns\TextColumn::make('priority') + TextColumn::make('priority') ->label(__('label.priority')) , - Tables\Columns\TextColumn::make('updated_at') + TextColumn::make('updated_at') ->label(__('label.updated_at')) , ]) ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), ]), ]); } @@ -110,7 +119,7 @@ class TrackerUrlResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageTrackerUrls::route('/'), + 'index' => ManageTrackerUrls::route('/'), ]; } } diff --git a/app/Filament/Resources/System/TrackerUrlResource/Pages/ManageTrackerUrls.php b/app/Filament/Resources/System/TrackerUrlResource/Pages/ManageTrackerUrls.php index 722e07ff..69cab50d 100644 --- a/app/Filament/Resources/System/TrackerUrlResource/Pages/ManageTrackerUrls.php +++ b/app/Filament/Resources/System/TrackerUrlResource/Pages/ManageTrackerUrls.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\TrackerUrlResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageListSingle; use App\Filament\Resources\System\TrackerUrlResource; use Filament\Actions; @@ -14,7 +15,7 @@ class ManageTrackerUrls extends PageListSingle protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/System/UploadSpeedResource.php b/app/Filament/Resources/System/UploadSpeedResource.php index fdf486f2..4821b9a8 100644 --- a/app/Filament/Resources/System/UploadSpeedResource.php +++ b/app/Filament/Resources/System/UploadSpeedResource.php @@ -2,11 +2,17 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\System\UploadSpeedResource\Pages\ManageUploadSpeeds; use App\Filament\Resources\System\UploadSpeedResource\Pages; use App\Filament\Resources\System\UploadSpeedResource\RelationManagers; use App\Models\UploadSpeed; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -17,9 +23,9 @@ class UploadSpeedResource extends Resource { protected static ?string $model = UploadSpeed::class; - protected static ?string $navigationIcon = 'heroicon-o-arrow-up-tray'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-arrow-up-tray'; - protected static ?string $navigationGroup = 'System'; + protected static string | \UnitEnum | null $navigationGroup = 'System'; protected static ?int $navigationSort = 5; @@ -33,11 +39,11 @@ class UploadSpeedResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->label(__('label.name')) + return $schema + ->components([ + TextInput::make('name')->label(__('label.name')) ]); } @@ -45,25 +51,25 @@ class UploadSpeedResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->label(__('label.name')), + TextColumn::make('id'), + TextColumn::make('name')->label(__('label.name')), ]) ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ - 'index' => Pages\ManageUploadSpeeds::route('/'), + 'index' => ManageUploadSpeeds::route('/'), ]; } } diff --git a/app/Filament/Resources/System/UploadSpeedResource/Pages/ManageUploadSpeeds.php b/app/Filament/Resources/System/UploadSpeedResource/Pages/ManageUploadSpeeds.php index c444823b..409dcc6f 100644 --- a/app/Filament/Resources/System/UploadSpeedResource/Pages/ManageUploadSpeeds.php +++ b/app/Filament/Resources/System/UploadSpeedResource/Pages/ManageUploadSpeeds.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\System\UploadSpeedResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\Resources\System\UploadSpeedResource; use Filament\Pages\Actions; use Filament\Resources\Pages\ManageRecords; @@ -13,7 +14,7 @@ class ManageUploadSpeeds extends ManageRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/System/UsernameChangeLogResource.php b/app/Filament/Resources/System/UsernameChangeLogResource.php index 26c715b8..6c1a4aab 100644 --- a/app/Filament/Resources/System/UsernameChangeLogResource.php +++ b/app/Filament/Resources/System/UsernameChangeLogResource.php @@ -2,11 +2,16 @@ namespace App\Filament\Resources\System; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use App\Filament\Resources\System\UsernameChangeLogResource\Pages\ManageUsernameChangeLogs; use App\Filament\Resources\System\UsernameChangeLogResource\Pages; use App\Filament\Resources\System\UsernameChangeLogResource\RelationManagers; use App\Models\UsernameChangeLog; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -18,9 +23,9 @@ class UsernameChangeLogResource extends Resource { protected static ?string $model = UsernameChangeLog::class; - protected static ?string $navigationIcon = 'heroicon-o-pencil-square'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-pencil-square'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 100; @@ -34,10 +39,10 @@ class UsernameChangeLogResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -46,28 +51,28 @@ class UsernameChangeLogResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('changeTypeText')->label(__('username-change-log.labels.change_type')), - Tables\Columns\TextColumn::make('uid')->searchable(), - Tables\Columns\TextColumn::make('user.username')->searchable()->label(__('label.username')), - Tables\Columns\TextColumn::make('username_old')->searchable()->label(__('username-change-log.labels.username_old')), - Tables\Columns\TextColumn::make('username_new') + TextColumn::make('id')->sortable(), + TextColumn::make('changeTypeText')->label(__('username-change-log.labels.change_type')), + TextColumn::make('uid')->searchable(), + TextColumn::make('user.username')->searchable()->label(__('label.username')), + TextColumn::make('username_old')->searchable()->label(__('username-change-log.labels.username_old')), + TextColumn::make('username_new') ->searchable() ->label(__('username-change-log.labels.username_new')) ->formatStateUsing(fn ($record) => new HtmlString(get_username($record->uid, false, true, true, true))) , - Tables\Columns\TextColumn::make('operator') + TextColumn::make('operator') ->searchable() ->label(__('label.operator')) , - Tables\Columns\TextColumn::make('created_at')->label(__('label.created_at'))->formatStateUsing(fn ($state) => format_datetime($state)), + TextColumn::make('created_at')->label(__('label.created_at'))->formatStateUsing(fn ($state) => format_datetime($state)), ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label('UID') ->placeholder('UID') , @@ -75,13 +80,13 @@ class UsernameChangeLogResource extends Resource return $query->when($data['uid'], fn (Builder $query, $uid) => $query->where("uid", $uid)); }) , - Tables\Filters\SelectFilter::make('change_type')->options(UsernameChangeLog::listChangeType())->label(__('username-change-log.labels.change_type')), + SelectFilter::make('change_type')->options(UsernameChangeLog::listChangeType())->label(__('username-change-log.labels.change_type')), ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), // Tables\Actions\DeleteAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -89,7 +94,7 @@ class UsernameChangeLogResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageUsernameChangeLogs::route('/'), + 'index' => ManageUsernameChangeLogs::route('/'), ]; } } diff --git a/app/Filament/Resources/Torrent/AnnounceLogResource.php b/app/Filament/Resources/Torrent/AnnounceLogResource.php index 1befaa3f..059cbe66 100644 --- a/app/Filament/Resources/Torrent/AnnounceLogResource.php +++ b/app/Filament/Resources/Torrent/AnnounceLogResource.php @@ -2,6 +2,17 @@ namespace App\Filament\Resources\Torrent; +use Filament\Schemas\Schema; +use Filament\Schemas\Components\Tabs; +use Filament\Schemas\Components\Tabs\Tab; +use Filament\Schemas\Components\Fieldset; +use Filament\Infolists\Components\TextEntry; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Select; +use Filament\Actions\ViewAction; +use App\Filament\Resources\Torrent\AnnounceLogResource\Pages\ListAnnounceLogs; use App\Filament\Resources\Torrent\AnnounceLogResource\Pages; use App\Filament\Resources\Torrent\AnnounceLogResource\RelationManagers; use App\Models\AnnounceLog; @@ -15,18 +26,15 @@ use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; use Filament\Infolists; -use Filament\Infolists\Infolist; -use Filament\Infolists\Components\Tabs; -use Filament\Infolists\Components\Fieldset; class AnnounceLogResource extends Resource { protected static ?string $model = AnnounceLog::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'Torrent'; + protected static string | \UnitEnum | null $navigationGroup = 'Torrent'; protected static ?int $navigationSort = 5; @@ -48,78 +56,78 @@ class AnnounceLogResource extends Resource return Setting::getIsRecordAnnounceLog() && config('clickhouse.connection.host') != ''; } - public static function infolist(Infolist $infolist): Infolist + public static function infolist(Schema $schema): Schema { - return $infolist - ->schema([ + return $schema + ->components([ Tabs::make('Tabs') ->tabs([ - Tabs\Tab::make(__('announce-log.tab_primary')) + Tab::make(__('announce-log.tab_primary')) ->schema([ Fieldset::make(__('announce-log.fieldset_basic')) ->schema([ - Infolists\Components\TextEntry::make('timestamp')->label(__('announce-log.timestamp')), - Infolists\Components\TextEntry::make('user_id')->label(__('announce-log.user_id'))->copyable(), - Infolists\Components\TextEntry::make('torrent_id')->label(__('announce-log.torrent_id'))->copyable(), - Infolists\Components\TextEntry::make('torrent_size')->label(__('announce-log.torrent_size'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('seeder_count')->label(__('announce-log.seeder_count')), - Infolists\Components\TextEntry::make('leecher_count')->label(__('announce-log.leecher_count')), - Infolists\Components\TextEntry::make('promotion_state')->label(__('announce-log.promotion_state'))->formatStateUsing(fn($state) => Torrent::$promotionTypes[$state]['text'] ?? ''), - Infolists\Components\TextEntry::make('promotion_state_desc')->label(__('announce-log.promotion_state_desc')), - Infolists\Components\TextEntry::make('event')->label(__('announce-log.event')), - Infolists\Components\TextEntry::make('left')->label(__('announce-log.left'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('announce_time')->label(__('announce-log.announce_time')), - Infolists\Components\TextEntry::make('speed')->label(__('announce-log.speed'))->formatStateUsing(fn($state) => mksize($state) . "/s"), + TextEntry::make('timestamp')->label(__('announce-log.timestamp')), + TextEntry::make('user_id')->label(__('announce-log.user_id'))->copyable(), + TextEntry::make('torrent_id')->label(__('announce-log.torrent_id'))->copyable(), + TextEntry::make('torrent_size')->label(__('announce-log.torrent_size'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('seeder_count')->label(__('announce-log.seeder_count')), + TextEntry::make('leecher_count')->label(__('announce-log.leecher_count')), + TextEntry::make('promotion_state')->label(__('announce-log.promotion_state'))->formatStateUsing(fn($state) => Torrent::$promotionTypes[$state]['text'] ?? ''), + TextEntry::make('promotion_state_desc')->label(__('announce-log.promotion_state_desc')), + TextEntry::make('event')->label(__('announce-log.event')), + TextEntry::make('left')->label(__('announce-log.left'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('announce_time')->label(__('announce-log.announce_time')), + TextEntry::make('speed')->label(__('announce-log.speed'))->formatStateUsing(fn($state) => mksize($state) . "/s"), ])->columns(4), Fieldset::make(__('announce-log.fieldset_uploaded')) ->schema([ - Infolists\Components\TextEntry::make('uploaded_offset')->label(__('announce-log.uploaded_offset'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('uploaded_total_last')->label(__('announce-log.uploaded_total_last'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('uploaded_total')->label(__('announce-log.uploaded_total'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('uploaded_increment')->label(__('announce-log.uploaded_increment'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('up_factor')->label(__('announce-log.up_factor')), - Infolists\Components\TextEntry::make('up_factor_desc')->label(__('announce-log.up_factor_desc')), - Infolists\Components\TextEntry::make('uploaded_increment_for_user')->label(__('announce-log.uploaded_increment_for_user'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('uploaded_offset')->label(__('announce-log.uploaded_offset'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('uploaded_total_last')->label(__('announce-log.uploaded_total_last'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('uploaded_total')->label(__('announce-log.uploaded_total'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('uploaded_increment')->label(__('announce-log.uploaded_increment'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('up_factor')->label(__('announce-log.up_factor')), + TextEntry::make('up_factor_desc')->label(__('announce-log.up_factor_desc')), + TextEntry::make('uploaded_increment_for_user')->label(__('announce-log.uploaded_increment_for_user'))->formatStateUsing(fn($state) => mksize($state)), ])->columns(4), Fieldset::make(__('announce-log.fieldset_downloaded')) ->schema([ - Infolists\Components\TextEntry::make('downloaded_offset')->label(__('announce-log.downloaded_offset'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('downloaded_total_last')->label(__('announce-log.downloaded_total_last'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('downloaded_total')->label(__('announce-log.downloaded_total'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('downloaded_increment')->label(__('announce-log.downloaded_increment'))->formatStateUsing(fn($state) => mksize($state)), - Infolists\Components\TextEntry::make('down_factor')->label(__('announce-log.down_factor')), - Infolists\Components\TextEntry::make('down_factor_desc')->label(__('announce-log.down_factor_desc')), - Infolists\Components\TextEntry::make('downloaded_increment_for_user')->label(__('announce-log.downloaded_increment_for_user'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('downloaded_offset')->label(__('announce-log.downloaded_offset'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('downloaded_total_last')->label(__('announce-log.downloaded_total_last'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('downloaded_total')->label(__('announce-log.downloaded_total'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('downloaded_increment')->label(__('announce-log.downloaded_increment'))->formatStateUsing(fn($state) => mksize($state)), + TextEntry::make('down_factor')->label(__('announce-log.down_factor')), + TextEntry::make('down_factor_desc')->label(__('announce-log.down_factor_desc')), + TextEntry::make('downloaded_increment_for_user')->label(__('announce-log.downloaded_increment_for_user'))->formatStateUsing(fn($state) => mksize($state)), ])->columns(4), ]), - Tabs\Tab::make(__('announce-log.tab_secondary')) + Tab::make(__('announce-log.tab_secondary')) ->schema([ Fieldset::make(__('announce-log.fieldset_client')) ->schema([ - Infolists\Components\TextEntry::make('port')->label(__('announce-log.port')), - Infolists\Components\TextEntry::make('agent')->label(__('announce-log.agent')), - Infolists\Components\TextEntry::make('peer_id')->label(__('announce-log.peer_id'))->copyable(), - Infolists\Components\TextEntry::make('client_select')->label(__('announce-log.client_select')), + TextEntry::make('port')->label(__('announce-log.port')), + TextEntry::make('agent')->label(__('announce-log.agent')), + TextEntry::make('peer_id')->label(__('announce-log.peer_id'))->copyable(), + TextEntry::make('client_select')->label(__('announce-log.client_select')), ])->columns(4), Fieldset::make(__('announce-log.fieldset_location')) ->schema([ - Infolists\Components\TextEntry::make('ip')->label(__('announce-log.ip'))->copyable()->limit(25), - Infolists\Components\TextEntry::make('ipv4')->label(__('announce-log.ipv4'))->copyable(), - Infolists\Components\TextEntry::make('ipv6')->label(__('announce-log.ipv6'))->copyable()->limit(25), - Infolists\Components\TextEntry::make('continent')->label(__('announce-log.continent')), - Infolists\Components\TextEntry::make('country')->label(__('announce-log.country')), - Infolists\Components\TextEntry::make('city')->label(__('announce-log.city')), + TextEntry::make('ip')->label(__('announce-log.ip'))->copyable()->limit(25), + TextEntry::make('ipv4')->label(__('announce-log.ipv4'))->copyable(), + TextEntry::make('ipv6')->label(__('announce-log.ipv6'))->copyable()->limit(25), + TextEntry::make('continent')->label(__('announce-log.continent')), + TextEntry::make('country')->label(__('announce-log.country')), + TextEntry::make('city')->label(__('announce-log.city')), ])->columns(4), Fieldset::make(__('announce-log.fieldset_request')) ->schema([ - Infolists\Components\TextEntry::make('scheme')->label(__('announce-log.scheme')), - Infolists\Components\TextEntry::make('host')->label(__('announce-log.host')), - Infolists\Components\TextEntry::make('path')->label(__('announce-log.path')), - Infolists\Components\TextEntry::make('request_id')->label(__('announce-log.request_id'))->copyable()->limit(25), - Infolists\Components\TextEntry::make('batch_no')->label(__('announce-log.batch_no'))->copyable(), + TextEntry::make('scheme')->label(__('announce-log.scheme')), + TextEntry::make('host')->label(__('announce-log.host')), + TextEntry::make('path')->label(__('announce-log.path')), + TextEntry::make('request_id')->label(__('announce-log.request_id'))->copyable()->limit(25), + TextEntry::make('batch_no')->label(__('announce-log.batch_no'))->copyable(), ])->columns(4), ]), @@ -131,93 +139,93 @@ class AnnounceLogResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('timestamp')->label(__('announce-log.timestamp'))->sortable(), - Tables\Columns\TextColumn::make('user_id')->label(__('announce-log.user_id')), - Tables\Columns\TextColumn::make('torrent_id')->label(__('announce-log.torrent_id')), - Tables\Columns\TextColumn::make('peer_id')->label(__('announce-log.peer_id')), - Tables\Columns\TextColumn::make('torrent_size') + TextColumn::make('timestamp')->label(__('announce-log.timestamp'))->sortable(), + TextColumn::make('user_id')->label(__('announce-log.user_id')), + TextColumn::make('torrent_id')->label(__('announce-log.torrent_id')), + TextColumn::make('peer_id')->label(__('announce-log.peer_id')), + TextColumn::make('torrent_size') ->label(__('announce-log.torrent_size')) ->formatStateUsing(fn ($state): string => mksize($state)) , - Tables\Columns\TextColumn::make('uploaded_total') + TextColumn::make('uploaded_total') ->label(__('announce-log.uploaded_total')) ->formatStateUsing(fn ($state): string => mksize($state)) ->sortable() , - Tables\Columns\TextColumn::make('uploaded_increment') + TextColumn::make('uploaded_increment') ->label(__('announce-log.uploaded_increment')) ->formatStateUsing(fn ($state): string => mksize($state)) ->sortable() , - Tables\Columns\TextColumn::make('downloaded_total') + TextColumn::make('downloaded_total') ->label(__('announce-log.downloaded_total')) ->formatStateUsing(fn ($state): string => mksize($state)) ->sortable() , - Tables\Columns\TextColumn::make('downloaded_increment') + TextColumn::make('downloaded_increment') ->label(__('announce-log.downloaded_increment')) ->formatStateUsing(fn ($state): string => mksize($state)) ->sortable() , - Tables\Columns\TextColumn::make('left') + TextColumn::make('left') ->label(__('announce-log.left')) ->formatStateUsing(fn ($state): string => mksize($state)) ->sortable() , - Tables\Columns\TextColumn::make('announce_time') + TextColumn::make('announce_time') ->label(__('announce-log.announce_time')) ->sortable() , - Tables\Columns\TextColumn::make('event')->label(__('announce-log.event')), - Tables\Columns\TextColumn::make('ip')->label('IP'), + TextColumn::make('event')->label(__('announce-log.event')), + TextColumn::make('ip')->label('IP'), // Tables\Columns\TextColumn::make('agent')->label(__('announce-log.agent')), ]) ->filters([ - Tables\Filters\Filter::make('user_id') - ->form([ - Forms\Components\TextInput::make('user_id') + Filter::make('user_id') + ->schema([ + TextInput::make('user_id') ->label(__('announce-log.user_id')) ->numeric() ->minValue(1) , ]) , - Tables\Filters\Filter::make('torrent_id') - ->form([ - Forms\Components\TextInput::make('torrent_id') + Filter::make('torrent_id') + ->schema([ + TextInput::make('torrent_id') ->label(__('announce-log.torrent_id')) ->numeric() ->minValue(1) , ]) , - Tables\Filters\Filter::make('peer_id') - ->form([ - Forms\Components\TextInput::make('peer_id') + Filter::make('peer_id') + ->schema([ + TextInput::make('peer_id') ->label(__('announce-log.peer_id')) , ]) , - Tables\Filters\Filter::make('ip') - ->form([ - Forms\Components\TextInput::make('ip') + Filter::make('ip') + ->schema([ + TextInput::make('ip') ->label('IP') , ]) , - Tables\Filters\Filter::make('event') - ->form([ - Forms\Components\Select::make('event') + Filter::make('event') + ->schema([ + Select::make('event') ->label(__('announce-log.event')) ->options(AnnounceLog::listEvents()) , ]) , ]) - ->actions([ - Tables\Actions\ViewAction::make()->modalWidth('5xl'), + ->recordActions([ + ViewAction::make()->modalWidth('5xl'), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\BulkActionGroup::make([ // Tables\Actions\DeleteBulkAction::make(), // ]), @@ -234,7 +242,7 @@ class AnnounceLogResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListAnnounceLogs::route('/'), + 'index' => ListAnnounceLogs::route('/'), // 'create' => Pages\CreateAnnounceLog::route('/create'), // 'edit' => Pages\EditAnnounceLog::route('/{record}/edit'), ]; diff --git a/app/Filament/Resources/Torrent/AnnounceLogResource/Pages/EditAnnounceLog.php b/app/Filament/Resources/Torrent/AnnounceLogResource/Pages/EditAnnounceLog.php index 021f2f08..f5761415 100644 --- a/app/Filament/Resources/Torrent/AnnounceLogResource/Pages/EditAnnounceLog.php +++ b/app/Filament/Resources/Torrent/AnnounceLogResource/Pages/EditAnnounceLog.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Torrent\AnnounceLogResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Torrent\AnnounceLogResource; use Filament\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditAnnounceLog extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/Torrent/TagResource.php b/app/Filament/Resources/Torrent/TagResource.php index 74697224..75052316 100644 --- a/app/Filament/Resources/Torrent/TagResource.php +++ b/app/Filament/Resources/Torrent/TagResource.php @@ -2,12 +2,23 @@ namespace App\Filament\Resources\Torrent; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\Textarea; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Torrent\TagResource\Pages\ListTags; +use App\Filament\Resources\Torrent\TagResource\Pages\CreateTag; +use App\Filament\Resources\Torrent\TagResource\Pages\EditTag; +use Filament\Actions\Action; +use Filament\Actions\EditAction; use App\Filament\Resources\Torrent\TagResource\Pages; use App\Filament\Resources\Torrent\TagResource\RelationManagers; use App\Models\SearchBox; use App\Models\Tag; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -18,9 +29,9 @@ class TagResource extends Resource { protected static ?string $model = Tag::class; - protected static ?string $navigationIcon = 'heroicon-o-tag'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-tag'; - protected static ?string $navigationGroup = 'Torrent'; + protected static string | \UnitEnum | null $navigationGroup = 'Torrent'; protected static ?int $navigationSort = 2; @@ -34,24 +45,24 @@ class TagResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->required()->label(__('label.name')), - Forms\Components\TextInput::make('color')->required()->label(__('label.tag.color')), - Forms\Components\TextInput::make('font_color')->required()->label(__('label.tag.font_color')), - Forms\Components\TextInput::make('font_size')->required()->label(__('label.tag.font_size')), - Forms\Components\TextInput::make('margin')->required()->label(__('label.tag.margin')), - Forms\Components\TextInput::make('padding')->required()->label(__('label.tag.padding')), - Forms\Components\TextInput::make('border_radius')->required()->label(__('label.tag.border_radius')), - Forms\Components\TextInput::make('priority')->integer()->required()->label(__('label.priority'))->default(0), - Forms\Components\Select::make('mode') + return $schema + ->components([ + TextInput::make('name')->required()->label(__('label.name')), + TextInput::make('color')->required()->label(__('label.tag.color')), + TextInput::make('font_color')->required()->label(__('label.tag.font_color')), + TextInput::make('font_size')->required()->label(__('label.tag.font_size')), + TextInput::make('margin')->required()->label(__('label.tag.margin')), + TextInput::make('padding')->required()->label(__('label.tag.padding')), + TextInput::make('border_radius')->required()->label(__('label.tag.border_radius')), + TextInput::make('priority')->integer()->required()->label(__('label.priority'))->default(0), + Select::make('mode') ->options(SearchBox::query()->pluck('name', 'id')->toArray()) ->label(__('label.search_box.taxonomy.mode')) ->helperText(__('label.search_box.taxonomy.mode_help')) , - Forms\Components\Textarea::make('description')->label(__('label.description')), + Textarea::make('description')->label(__('label.description')), ]); } @@ -59,26 +70,26 @@ class TagResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('search_box.name') + TextColumn::make('id'), + TextColumn::make('search_box.name') ->label(__('label.search_box.label')) ->formatStateUsing(fn ($record) => $record->search_box->name ?? 'All') , - Tables\Columns\TextColumn::make('name')->label(__('label.name'))->searchable(), - Tables\Columns\TextColumn::make('color')->label(__('label.tag.color')), - Tables\Columns\TextColumn::make('font_color')->label(__('label.tag.font_color')), - Tables\Columns\TextColumn::make('font_size')->label(__('label.tag.font_size')), - Tables\Columns\TextColumn::make('margin')->label(__('label.tag.margin')), - Tables\Columns\TextColumn::make('padding')->label(__('label.tag.padding')), - Tables\Columns\TextColumn::make('border_radius')->label(__('label.tag.border_radius')), - Tables\Columns\TextColumn::make('priority')->label(__('label.priority'))->sortable(), - Tables\Columns\TextColumn::make('torrents_count')->label(__('label.tag.torrents_count')), - Tables\Columns\TextColumn::make('torrents_sum_size')->label(__('label.tag.torrents_sum_size'))->formatStateUsing(fn ($state) => mksize($state)), + TextColumn::make('name')->label(__('label.name'))->searchable(), + TextColumn::make('color')->label(__('label.tag.color')), + TextColumn::make('font_color')->label(__('label.tag.font_color')), + TextColumn::make('font_size')->label(__('label.tag.font_size')), + TextColumn::make('margin')->label(__('label.tag.margin')), + TextColumn::make('padding')->label(__('label.tag.padding')), + TextColumn::make('border_radius')->label(__('label.tag.border_radius')), + TextColumn::make('priority')->label(__('label.priority'))->sortable(), + TextColumn::make('torrents_count')->label(__('label.tag.torrents_count')), + TextColumn::make('torrents_sum_size')->label(__('label.tag.torrents_sum_size'))->formatStateUsing(fn ($state) => mksize($state)), // Tables\Columns\TextColumn::make('updated_at')->dateTime()->label(__('label.updated_at')), ]) ->defaultSort('priority', 'desc') ->filters([ - Tables\Filters\SelectFilter::make('mode') + SelectFilter::make('mode') ->options(SearchBox::query()->pluck('name', 'id')->toArray()) ->label(__('label.search_box.taxonomy.mode')) ->query(function (Builder $query, array $data) { @@ -90,9 +101,9 @@ class TagResource extends Resource }) , ]) - ->actions(self::getActions()) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->recordActions(self::getActions()) + ->toolbarActions([ + DeleteBulkAction::make(), ]); } @@ -106,22 +117,22 @@ class TagResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListTags::route('/'), - 'create' => Pages\CreateTag::route('/create'), - 'edit' => Pages\EditTag::route('/{record}/edit'), + 'index' => ListTags::route('/'), + 'create' => CreateTag::route('/create'), + 'edit' => EditTag::route('/{record}/edit'), ]; } private static function getActions(): array { $actions = []; - $actions[] = Tables\Actions\Action::make('detach_torrents') + $actions[] = Action::make('detach_torrents') ->label(__('admin.resources.tag.detach_torrents')) ->requiresConfirmation() ->action(function ($record) { $record->torrent_tags()->delete(); }); - $actions[] = Tables\Actions\EditAction::make(); + $actions[] = EditAction::make(); return $actions; } } diff --git a/app/Filament/Resources/Torrent/TagResource/Pages/EditTag.php b/app/Filament/Resources/Torrent/TagResource/Pages/EditTag.php index 14cbd034..f4cb62da 100644 --- a/app/Filament/Resources/Torrent/TagResource/Pages/EditTag.php +++ b/app/Filament/Resources/Torrent/TagResource/Pages/EditTag.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Torrent\TagResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Torrent\TagResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditTag extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } diff --git a/app/Filament/Resources/Torrent/TagResource/Pages/ListTags.php b/app/Filament/Resources/Torrent/TagResource/Pages/ListTags.php index a633a44c..ffb0c42e 100644 --- a/app/Filament/Resources/Torrent/TagResource/Pages/ListTags.php +++ b/app/Filament/Resources/Torrent/TagResource/Pages/ListTags.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Torrent\TagResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageList; use App\Filament\Resources\Torrent\TagResource; use App\Models\Tag; @@ -16,7 +17,7 @@ class ListTags extends PageList protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } diff --git a/app/Filament/Resources/Torrent/TorrentDenyReasonResource.php b/app/Filament/Resources/Torrent/TorrentDenyReasonResource.php index 2ce8de96..8cf061ff 100644 --- a/app/Filament/Resources/Torrent/TorrentDenyReasonResource.php +++ b/app/Filament/Resources/Torrent/TorrentDenyReasonResource.php @@ -2,11 +2,17 @@ namespace App\Filament\Resources\Torrent; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\EditAction; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\Torrent\TorrentDenyReasonResource\Pages\ManageTorrentDenyReasons; use App\Filament\Resources\Torrent\TorrentDenyReasonResource\Pages; use App\Filament\Resources\Torrent\TorrentDenyReasonResource\RelationManagers; use App\Models\TorrentDenyReason; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -17,9 +23,9 @@ class TorrentDenyReasonResource extends Resource { protected static ?string $model = TorrentDenyReason::class; - protected static ?string $navigationIcon = 'heroicon-o-no-symbol'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-no-symbol'; - protected static ?string $navigationGroup = 'Torrent'; + protected static string | \UnitEnum | null $navigationGroup = 'Torrent'; protected static ?int $navigationSort = 3; @@ -33,12 +39,12 @@ class TorrentDenyReasonResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name')->required()->label(__('label.name')), - Forms\Components\TextInput::make('priority')->integer()->label(__('label.priority'))->default(0), + return $schema + ->components([ + TextInput::make('name')->required()->label(__('label.name')), + TextInput::make('priority')->integer()->label(__('label.priority'))->default(0), ])->columns(1); } @@ -46,28 +52,28 @@ class TorrentDenyReasonResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->label(__('label.name')), - Tables\Columns\TextColumn::make('priority')->label(__('label.priority'))->sortable(), - Tables\Columns\TextColumn::make('created_at')->label(__('label.created_at')), + TextColumn::make('id'), + TextColumn::make('name')->label(__('label.name')), + TextColumn::make('priority')->label(__('label.priority'))->sortable(), + TextColumn::make('created_at')->label(__('label.created_at')), ]) ->defaultSort('priority', 'desc') ->filters([ // ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + ->recordActions([ + EditAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ - 'index' => Pages\ManageTorrentDenyReasons::route('/'), + 'index' => ManageTorrentDenyReasons::route('/'), ]; } } diff --git a/app/Filament/Resources/Torrent/TorrentDenyReasonResource/Pages/ManageTorrentDenyReasons.php b/app/Filament/Resources/Torrent/TorrentDenyReasonResource/Pages/ManageTorrentDenyReasons.php index 7edd98be..1c39cf4b 100644 --- a/app/Filament/Resources/Torrent/TorrentDenyReasonResource/Pages/ManageTorrentDenyReasons.php +++ b/app/Filament/Resources/Torrent/TorrentDenyReasonResource/Pages/ManageTorrentDenyReasons.php @@ -2,20 +2,22 @@ namespace App\Filament\Resources\Torrent\TorrentDenyReasonResource\Pages; +use Filament\Support\Enums\Width; +use Filament\Actions\CreateAction; use App\Filament\Resources\Torrent\TorrentDenyReasonResource; use Filament\Pages\Actions; use Filament\Resources\Pages\ManageRecords; class ManageTorrentDenyReasons extends ManageRecords { - protected ?string $maxContentWidth = 'full'; + protected Width|string|null $maxContentWidth = 'full'; protected static string $resource = TorrentDenyReasonResource::class; protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/Torrent/TorrentOperationLogResource.php b/app/Filament/Resources/Torrent/TorrentOperationLogResource.php index e08978a5..d02082f8 100644 --- a/app/Filament/Resources/Torrent/TorrentOperationLogResource.php +++ b/app/Filament/Resources/Torrent/TorrentOperationLogResource.php @@ -2,12 +2,17 @@ namespace App\Filament\Resources\Torrent; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use App\Filament\Resources\Torrent\TorrentOperationLogResource\Pages\ManageTorrentOperationLogs; use App\Filament\Resources\Torrent\TorrentOperationLogResource\Pages; use App\Filament\Resources\Torrent\TorrentOperationLogResource\RelationManagers; use App\Models\Torrent; use App\Models\TorrentOperationLog; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -18,9 +23,9 @@ class TorrentOperationLogResource extends Resource { protected static ?string $model = TorrentOperationLog::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'Torrent'; + protected static string | \UnitEnum | null $navigationGroup = 'Torrent'; protected static ?int $navigationSort = 4; @@ -34,10 +39,10 @@ class TorrentOperationLogResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -46,58 +51,58 @@ class TorrentOperationLogResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('user.username') + TextColumn::make('id')->sortable(), + TextColumn::make('user.username') ->formatStateUsing(fn ($record) => username_for_admin($record->uid)) ->label(__('label.user.label')) , - Tables\Columns\TextColumn::make('torrent.name') + TextColumn::make('torrent.name') ->formatStateUsing(fn ($record) => torrent_name_for_admin($record->torrent)) ->label(__('label.torrent.label')) , - Tables\Columns\TextColumn::make('action_type_text') + TextColumn::make('action_type_text') ->label(__('torrent-operation-log.fields.action_type')) , - Tables\Columns\TextColumn::make('comment') + TextColumn::make('comment') ->label(__('label.comment')) , - Tables\Columns\TextColumn::make('created_at') + TextColumn::make('created_at') ->formatStateUsing(fn ($state) => format_datetime($state)) ->label(__('label.created_at')) , ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->placeholder('UID') , ])->query(function (Builder $query, array $data) { return $query->when($data['uid'], fn (Builder $query, $value) => $query->where("uid", $value)); }) , - Tables\Filters\Filter::make('torrent_id') - ->form([ - Forms\Components\TextInput::make('torrent_id') + Filter::make('torrent_id') + ->schema([ + TextInput::make('torrent_id') ->placeholder('Torrent ID') , ])->query(function (Builder $query, array $data) { return $query->when($data['torrent_id'], fn (Builder $query, $value) => $query->where("torrent_id", $value)); }) , - Tables\Filters\SelectFilter::make('action_type') + SelectFilter::make('action_type') ->options(TorrentOperationLog::listStaticProps(TorrentOperationLog::$actionTypes, 'torrent.operation_log.%s.type_text', true)) ->label(__('torrent-operation-log.fields.action_type')) ->multiple() , ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), // Tables\Actions\DeleteAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -105,7 +110,7 @@ class TorrentOperationLogResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageTorrentOperationLogs::route('/'), + 'index' => ManageTorrentOperationLogs::route('/'), ]; } } diff --git a/app/Filament/Resources/Torrent/TorrentResource.php b/app/Filament/Resources/Torrent/TorrentResource.php index b6ec2bc0..d83d935a 100644 --- a/app/Filament/Resources/Torrent/TorrentResource.php +++ b/app/Filament/Resources/Torrent/TorrentResource.php @@ -2,6 +2,28 @@ namespace App\Filament\Resources\Torrent; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\IconColumn; +use Filament\Tables\Columns\BadgeColumn; +use App\Filament\Resources\Torrent\TorrentResource\Pages\ListTorrents; +use App\Filament\Resources\Torrent\TorrentResource\Pages\CreateTorrent; +use App\Filament\Resources\Torrent\TorrentResource\Pages\EditTorrent; +use Filament\Actions\BulkAction; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\DateTimePicker; +use Exception; +use Filament\Forms\Components\Radio; +use Filament\Forms\Components\Checkbox; +use Filament\Forms\Components\CheckboxList; +use Filament\Actions\DeleteBulkAction; +use Filament\Forms\Components\Textarea; +use Filament\Actions\DeleteAction; +use Filament\Schemas\Components\Utilities\Get; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use Filament\Forms\Components\DatePicker; use App\Filament\OptionsTrait; use App\Filament\Resources\Torrent\TorrentResource\Pages; use App\Filament\Resources\Torrent\TorrentResource\RelationManagers; @@ -19,7 +41,6 @@ use Elasticsearch\Endpoints\Search; use Filament\Facades\Filament; use Filament\Forms; use Filament\Pages\Actions\Action; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -39,9 +60,9 @@ class TorrentResource extends Resource protected static ?string $model = Torrent::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'Torrent'; + protected static string | \UnitEnum | null $navigationGroup = 'Torrent'; protected static ?int $navigationSort = 1; @@ -57,10 +78,10 @@ class TorrentResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -78,45 +99,45 @@ class TorrentResource extends Resource $showApproval = self::shouldShowApproval(); return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('basic_category.name')->label(__('label.torrent.category')), - Tables\Columns\TextColumn::make('name')->formatStateUsing(fn ($record) => torrent_name_for_admin($record, true)) + TextColumn::make('id')->sortable(), + TextColumn::make('basic_category.name')->label(__('label.torrent.category')), + TextColumn::make('name')->formatStateUsing(fn ($record) => torrent_name_for_admin($record, true)) ->label(__('label.name')) ->searchable(query: function (Builder $query, string $search) { return $query->where("name", "like", "%{$search}%")->orWhere("small_descr", "like", "%{$search}%"); }), - Tables\Columns\TextColumn::make('posStateText')->label(__('label.torrent.pos_state')), - Tables\Columns\TextColumn::make('spStateText')->label(__('label.torrent.sp_state')), - Tables\Columns\TextColumn::make('pickInfoText') + TextColumn::make('posStateText')->label(__('label.torrent.pos_state')), + TextColumn::make('spStateText')->label(__('label.torrent.sp_state')), + TextColumn::make('pickInfoText') ->label(__('label.torrent.picktype')) ->formatStateUsing(fn ($record) => $record->pickInfo['text']) , - Tables\Columns\IconColumn::make('hr') + IconColumn::make('hr') ->label(__('label.torrent.hr')) ->boolean() , - Tables\Columns\TextColumn::make('size') + TextColumn::make('size') ->label(__('label.torrent.size')) ->formatStateUsing(fn ($state) => mksize($state)) ->sortable() , - Tables\Columns\TextColumn::make('seeders')->label(__('label.torrent.seeders'))->sortable(), - Tables\Columns\TextColumn::make('leechers')->label(__('label.torrent.leechers'))->sortable(), - Tables\Columns\BadgeColumn::make('approval_status') + TextColumn::make('seeders')->label(__('label.torrent.seeders'))->sortable(), + TextColumn::make('leechers')->label(__('label.torrent.leechers'))->sortable(), + BadgeColumn::make('approval_status') ->visible($showApproval) ->label(__('label.torrent.approval_status')) ->colors(array_flip(Torrent::listApprovalStatus(true, 'badge_color'))) ->formatStateUsing(fn ($record) => $record->approvalStatusText), - Tables\Columns\TextColumn::make('added')->label(__('label.added'))->dateTime(), - Tables\Columns\TextColumn::make('user.username') + TextColumn::make('added')->label(__('label.added'))->dateTime(), + TextColumn::make('user.username') ->label(__('label.torrent.owner')) ->formatStateUsing(fn ($record) => username_for_admin($record->owner)) , ]) ->defaultSort('id', 'desc') ->filters(self::getFilters()) - ->actions(self::getActions()) - ->bulkActions(self::getBulkActions()) + ->recordActions(self::getActions()) + ->toolbarActions(self::getBulkActions()) ; } @@ -136,9 +157,9 @@ class TorrentResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListTorrents::route('/'), - 'create' => Pages\CreateTorrent::route('/create'), - 'edit' => Pages\EditTorrent::route('/{record}/edit'), + 'index' => ListTorrents::route('/'), + 'create' => CreateTorrent::route('/create'), + 'edit' => EditTorrent::route('/{record}/edit'), ]; } @@ -147,15 +168,15 @@ class TorrentResource extends Resource $user = Auth::user(); $actions = []; if (user_can('torrentsticky')) { - $actions[] = Tables\Actions\BulkAction::make('posState') + $actions[] = BulkAction::make('posState') ->label(__('admin.resources.torrent.bulk_action_pos_state')) ->form([ - Forms\Components\Select::make('pos_state') + Select::make('pos_state') ->label(__('label.torrent.pos_state')) ->options(Torrent::listPosStates(true)) ->required() , - Forms\Components\DateTimePicker::make('pos_state_until') + DateTimePicker::make('pos_state_until') ->label(__('label.deadline')) , ]) @@ -165,7 +186,7 @@ class TorrentResource extends Resource try { $torrentRep = new TorrentRepository(); $torrentRep->setPosState($idArr, $data['pos_state'], $data['pos_state_until']); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); Filament::notify('danger', class_basename($exception)); } @@ -174,20 +195,20 @@ class TorrentResource extends Resource } if (user_can('torrentonpromotion')) { - $actions[] = Tables\Actions\BulkAction::make('sp_state') + $actions[] = BulkAction::make('sp_state') ->label(__('admin.resources.torrent.bulk_action_sp_state')) ->form([ - Forms\Components\Select::make('sp_state') + Select::make('sp_state') ->label(__('label.torrent.sp_state')) ->options(Torrent::listPromotionTypes(true)) ->required() , - Forms\Components\Select::make('promotion_time_type') + Select::make('promotion_time_type') ->label(__('label.torrent.promotion_time_type')) ->options(Torrent::listPromotionTimeTypes(true)) ->required() , - Forms\Components\DateTimePicker::make('promotion_until') + DateTimePicker::make('promotion_until') ->label(__('label.deadline')) , ]) @@ -197,7 +218,7 @@ class TorrentResource extends Resource try { $torrentRep = new TorrentRepository(); $torrentRep->setSpState($idArr, $data['sp_state'], $data['promotion_time_type'], $data['promotion_until']); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); Filament::notify('danger', $exception->getMessage()); } @@ -206,10 +227,10 @@ class TorrentResource extends Resource } if (user_can('torrentmanage') && ($user->picker == 'yes' || $user->class >= User::CLASS_SYSOP)) { - $actions[] = Tables\Actions\BulkAction::make('recommend') + $actions[] = BulkAction::make('recommend') ->label(__('admin.resources.torrent.bulk_action_recommend')) ->form([ - Forms\Components\Radio::make('picktype') + Radio::make('picktype') ->label(__('admin.resources.torrent.bulk_action_recommend')) ->inline() ->options(Torrent::listPickInfo(true)) @@ -225,7 +246,7 @@ class TorrentResource extends Resource try { $torrentRep = new TorrentRepository(); $torrentRep->setPickType($idArr, $data['picktype']); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); Filament::notify('danger', class_basename($exception)); } @@ -234,7 +255,7 @@ class TorrentResource extends Resource } if (user_can('torrentmanage')) { - $actions[] = Tables\Actions\BulkAction::make('remove_tag') + $actions[] = BulkAction::make('remove_tag') ->label(__('admin.resources.torrent.bulk_action_remove_tag')) ->requiresConfirmation() ->icon('heroicon-o-minus-circle') @@ -243,18 +264,18 @@ class TorrentResource extends Resource try { $torrentRep = new TorrentRepository(); $torrentRep->syncTags($idArr); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); Filament::notify('danger', class_basename($exception)); } }) ->deselectRecordsAfterCompletion(); - $actions[] = Tables\Actions\BulkAction::make('attach_tag') + $actions[] = BulkAction::make('attach_tag') ->label(__('admin.resources.torrent.bulk_action_attach_tag')) ->form([ - Forms\Components\Checkbox::make('remove')->label(__('admin.resources.torrent.bulk_action_attach_tag_remove_old')), - Forms\Components\CheckboxList::make('tags') + Checkbox::make('remove')->label(__('admin.resources.torrent.bulk_action_attach_tag_remove_old')), + CheckboxList::make('tags') ->label(__('label.tag.label')) ->columns(4) ->options(TagRepository::createBasicQuery()->pluck('name', 'id')->toArray()) @@ -270,17 +291,17 @@ class TorrentResource extends Resource try { $torrentRep = new TorrentRepository(); $torrentRep->syncTags($idArr, $data['tags'], $data['remove'] ?? false); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); Filament::notify('danger', class_basename($exception)); } }) ->deselectRecordsAfterCompletion(); - $actions[] = Tables\Actions\BulkAction::make('hr') + $actions[] = BulkAction::make('hr') ->label(__('admin.resources.torrent.bulk_action_hr')) ->form([ - Forms\Components\Radio::make('hr') + Radio::make('hr') ->label(__('admin.resources.torrent.bulk_action_hr')) ->inline() ->options(self::getYesNoOptions()) @@ -296,7 +317,7 @@ class TorrentResource extends Resource try { $torrentRep = new TorrentRepository(); $torrentRep->setHr($idArr, $data['hr']); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); Filament::notify('danger', class_basename($exception)); } @@ -306,7 +327,7 @@ class TorrentResource extends Resource // $actions[] = self::getBulkActionChangeCategory(); if (user_can('torrent-delete')) { - $actions[] = Tables\Actions\DeleteBulkAction::make('bulk-delete')->using(function (Collection $records) { + $actions[] = DeleteBulkAction::make('bulk-delete')->using(function (Collection $records) { deletetorrent($records->pluck('id')->toArray()); }); } @@ -317,43 +338,43 @@ class TorrentResource extends Resource { $actions = []; if (self::shouldShowApproval() && user_can('torrent-approval')) { - $actions[] = Tables\Actions\Action::make('approval') + $actions[] = \Filament\Actions\Action::make('approval') ->label(__('admin.resources.torrent.action_approval')) - ->form([ - Forms\Components\Radio::make('approval_status') + ->schema([ + Radio::make('approval_status') ->label(__('label.torrent.approval_status')) ->inline() ->required() ->options(Torrent::listApprovalStatus(true)) , - Forms\Components\Textarea::make('comment')->label(__('label.comment')), + Textarea::make('comment')->label(__('label.comment')), ]) ->action(function (Torrent $record, array $data) { $torrentRep = new TorrentRepository(); try { $data['torrent_id'] = $record->id; $torrentRep->approval(Auth::user(), $data); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log($exception->getMessage(), 'error'); } }); } if (user_can('torrent-delete')) { - $actions[] = Tables\Actions\DeleteAction::make('delete')->using(function ($record) { + $actions[] = DeleteAction::make('delete')->using(function ($record) { deletetorrent($record->id); }); } return $actions; } - private static function getBulkActionChangeCategory(): Tables\Actions\BulkAction + private static function getBulkActionChangeCategory(): BulkAction { $searchBoxRep = new SearchBoxRepository(); - return Tables\Actions\BulkAction::make('changeCategory') + return BulkAction::make('changeCategory') ->label(__('admin.resources.torrent.bulk_action_change_category')) ->form([ - Forms\Components\Select::make('section_id') + Select::make('section_id') ->label(__('searchbox.section')) ->helperText(new HtmlString(__('admin.resources.torrent.bulk_action_change_category_section_help'))) ->options(function() { @@ -369,12 +390,12 @@ class TorrentResource extends Resource ->required() , $searchBoxRep->buildSearchBoxFormSchema(SearchBox::getBrowseSearchBox(), 'section_info') - ->hidden(function (Forms\Get $get) { + ->hidden(function (Get $get) { return $get('section_id') != SearchBox::getBrowseMode(); }) , $searchBoxRep->buildSearchBoxFormSchema(SearchBox::getSpecialSearchBox(), 'section_info') - ->hidden(function (Forms\Get $get) { + ->hidden(function (Get $get) { return $get('section_id') != SearchBox::getSpecialMode(); }) , @@ -385,7 +406,7 @@ class TorrentResource extends Resource $newSectionId = $data['section_id']; try { $torrentRep->changeCategory($records, $newSectionId, $data['section_info']['section'][$newSectionId]); - } catch (\Exception $exception) { + } catch (Exception $exception) { do_log($exception->getMessage(), 'error'); } }); @@ -400,9 +421,9 @@ class TorrentResource extends Resource private static function getFilters() { $filters = [ - Tables\Filters\Filter::make('owner') - ->form([ - Forms\Components\TextInput::make('owner') + Filter::make('owner') + ->schema([ + TextInput::make('owner') ->label(__('label.torrent.owner')) ->placeholder('UID') , @@ -411,60 +432,60 @@ class TorrentResource extends Resource }) , - Tables\Filters\SelectFilter::make('visible') + SelectFilter::make('visible') ->options(self::$yesOrNo) ->label(__('label.torrent.visible')) , - Tables\Filters\SelectFilter::make('hr') + SelectFilter::make('hr') ->options(self::getYesNoOptions()) ->label(__('label.torrent.hr')) , - Tables\Filters\SelectFilter::make('pos_state') + SelectFilter::make('pos_state') ->options(Torrent::listPosStates(true)) ->label(__('label.torrent.pos_state')) ->multiple() , - Tables\Filters\SelectFilter::make('sp_state') + SelectFilter::make('sp_state') ->options(Torrent::listPromotionTypes(true)) ->label(__('label.torrent.sp_state')) ->multiple() , - Tables\Filters\SelectFilter::make('picktype') + SelectFilter::make('picktype') ->options(Torrent::listPickInfo(true)) ->label(__('label.torrent.picktype')) ->multiple() , - Tables\Filters\SelectFilter::make('approval_status') + SelectFilter::make('approval_status') ->options(Torrent::listApprovalStatus(true)) ->label(__('label.torrent.approval_status')) ->multiple() , - Tables\Filters\SelectFilter::make('tags') + SelectFilter::make('tags') ->relationship('tags', 'name') ->label(__('label.tag.label')) ->multiple() , - Tables\Filters\SelectFilter::make('category') + SelectFilter::make('category') ->options(Category::query()->pluck('name', 'id')->toArray()) ->label(__('label.torrent.category')) ->multiple() , ]; foreach (SearchBox::$taxonomies as $torrentField => $tableModel) { - $filters[] = Tables\Filters\SelectFilter::make($torrentField) + $filters[] = SelectFilter::make($torrentField) ->options(NexusDB::table($tableModel['table'])->orderBy('sort_index')->orderBy('id')->pluck('name', 'id')) ->multiple() ; } - $filters[] = Tables\Filters\Filter::make('added_begin') - ->form([ - Forms\Components\DatePicker::make('added_begin') + $filters[] = Filter::make('added_begin') + ->schema([ + DatePicker::make('added_begin') ->maxDate(now()) ->label(__('label.torrent.added_begin')) , @@ -472,9 +493,9 @@ class TorrentResource extends Resource return $query->when($data['added_begin'], fn (Builder $query, $value) => $query->where("added", '>=', $value)); }) ; - $filters[] = Tables\Filters\Filter::make('added_end') - ->form([ - Forms\Components\DatePicker::make('added_end') + $filters[] = Filter::make('added_end') + ->schema([ + DatePicker::make('added_end') ->maxDate(now()) ->label(__('label.torrent.added_end')) , @@ -482,9 +503,9 @@ class TorrentResource extends Resource return $query->when($data['added_end'], fn (Builder $query, $value) => $query->where("added", '<=', $value)); }) ; - $filters[] = Tables\Filters\Filter::make('size_begin') - ->form([ - Forms\Components\TextInput::make('size_begin') + $filters[] = Filter::make('size_begin') + ->schema([ + TextInput::make('size_begin') ->numeric() ->placeholder('GB') ->label(__('label.torrent.size_begin')) @@ -493,9 +514,9 @@ class TorrentResource extends Resource return $query->when($data['size_begin'], fn (Builder $query, $value) => $query->where("size", '>=', $value * 1024 * 1024 * 1024)); }) ; - $filters[] = Tables\Filters\Filter::make('size_end') - ->form([ - Forms\Components\TextInput::make('size_end') + $filters[] = Filter::make('size_end') + ->schema([ + TextInput::make('size_end') ->numeric() ->placeholder('GB') ->label(__('label.torrent.size_end')) diff --git a/app/Filament/Resources/Torrent/TorrentResource/Pages/EditTorrent.php b/app/Filament/Resources/Torrent/TorrentResource/Pages/EditTorrent.php index 69241f89..bed81702 100644 --- a/app/Filament/Resources/Torrent/TorrentResource/Pages/EditTorrent.php +++ b/app/Filament/Resources/Torrent/TorrentResource/Pages/EditTorrent.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Torrent\TorrentResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\Torrent\TorrentResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditTorrent extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/AttendanceLogResource.php b/app/Filament/Resources/User/AttendanceLogResource.php index b22b3bf2..ab055581 100644 --- a/app/Filament/Resources/User/AttendanceLogResource.php +++ b/app/Filament/Resources/User/AttendanceLogResource.php @@ -2,13 +2,20 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\IconColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use Filament\Forms\Components\DatePicker; +use App\Filament\Resources\User\AttendanceLogResource\Pages\ManageAttendanceLogs; use App\Filament\OptionsTrait; use App\Filament\Resources\User\AttendanceLogResource\Pages; use App\Filament\Resources\User\AttendanceLogResource\RelationManagers; use App\Models\AttendanceLog; use Carbon\Carbon; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -21,9 +28,9 @@ class AttendanceLogResource extends Resource protected static ?string $model = AttendanceLog::class; - protected static ?string $navigationIcon = 'heroicon-o-pencil-square'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-pencil-square'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 11; @@ -37,10 +44,10 @@ class AttendanceLogResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -49,34 +56,34 @@ class AttendanceLogResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('uid')->formatStateUsing(fn ($state) => username_for_admin($state)), - Tables\Columns\TextColumn::make('date')->label(__('attendance.fields.date'))->sortable(), - Tables\Columns\TextColumn::make('points')->label(__('attendance.fields.points')), - Tables\Columns\IconColumn::make('is_retroactive') + TextColumn::make('id')->sortable(), + TextColumn::make('uid')->formatStateUsing(fn ($state) => username_for_admin($state)), + TextColumn::make('date')->label(__('attendance.fields.date'))->sortable(), + TextColumn::make('points')->label(__('attendance.fields.points')), + IconColumn::make('is_retroactive') ->label(__('attendance.fields.is_retroactive')) ->boolean(true) , - Tables\Columns\TextColumn::make('created_at')->label(__('label.created_at')), + TextColumn::make('created_at')->label(__('label.created_at')), ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('id') - ->form([ - Forms\Components\TextInput::make('id') + Filter::make('id') + ->schema([ + TextInput::make('id') ->placeholder('UID') , ])->query(function (Builder $query, array $data) { return $query->when($data['id'], fn (Builder $query, $value) => $query->where("uid", $value)); }) , - Tables\Filters\SelectFilter::make('is_retroactive') + SelectFilter::make('is_retroactive') ->options(self::getYesNoOptions()) ->label(__('attendance.fields.is_retroactive')) , - Tables\Filters\Filter::make('date') - ->form([ - Forms\Components\DatePicker::make('date') + Filter::make('date') + ->schema([ + DatePicker::make('date') ->maxDate(now()) ->label(__('attendance.fields.date')) , @@ -84,9 +91,9 @@ class AttendanceLogResource extends Resource return $query->when($data['date'], fn (Builder $query, $value) => $query->where("date", $value)); }) , - Tables\Filters\Filter::make('created_at') - ->form([ - Forms\Components\DatePicker::make('created_at') + Filter::make('created_at') + ->schema([ + DatePicker::make('created_at') ->label(__('label.created_at')) , ])->query(function (Builder $query, array $data) { @@ -98,16 +105,16 @@ class AttendanceLogResource extends Resource }) , ]) - ->actions([ + ->recordActions([ ]) - ->bulkActions([ + ->toolbarActions([ ]); } public static function getPages(): array { return [ - 'index' => Pages\ManageAttendanceLogs::route('/'), + 'index' => ManageAttendanceLogs::route('/'), ]; } } diff --git a/app/Filament/Resources/User/AttendanceLogResource/Pages/ManageAttendanceLogs.php b/app/Filament/Resources/User/AttendanceLogResource/Pages/ManageAttendanceLogs.php index dd589814..ae799f7a 100644 --- a/app/Filament/Resources/User/AttendanceLogResource/Pages/ManageAttendanceLogs.php +++ b/app/Filament/Resources/User/AttendanceLogResource/Pages/ManageAttendanceLogs.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\User\AttendanceLogResource\Pages; +use Filament\Actions\CreateAction; use App\Filament\PageListSingle; use App\Filament\Resources\User\AttendanceLogResource; use Filament\Pages\Actions; @@ -14,7 +15,7 @@ class ManageAttendanceLogs extends PageListSingle protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } } diff --git a/app/Filament/Resources/User/BonusLogResource.php b/app/Filament/Resources/User/BonusLogResource.php index fa949bfb..b1524696 100644 --- a/app/Filament/Resources/User/BonusLogResource.php +++ b/app/Filament/Resources/User/BonusLogResource.php @@ -2,11 +2,16 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use App\Filament\Resources\User\BonusLogResource\Pages\ManageBonusLogs; use App\Filament\Resources\User\BonusLogResource\Pages; use App\Filament\Resources\User\BonusLogResource\RelationManagers; use App\Models\BonusLogs; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,9 +24,9 @@ class BonusLogResource extends Resource { protected static ?string $model = BonusLogs::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 10; @@ -35,10 +40,10 @@ class BonusLogResource extends Resource return sprintf('%s(%s)', get_model_label(static::getModel()), __('bonus-log.exclude_seeding_bonus')); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -47,38 +52,38 @@ class BonusLogResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('uid') + TextColumn::make('id')->sortable(), + TextColumn::make('uid') ->formatStateUsing(fn ($state) => username_for_admin($state)) ->label(__('label.username')) , - Tables\Columns\TextColumn::make('business_type_text') + TextColumn::make('business_type_text') ->label(__('bonus-log.fields.business_type')) , - Tables\Columns\TextColumn::make('old_total_value') + TextColumn::make('old_total_value') ->label(__('bonus-log.fields.old_total_value')) ->formatStateUsing(fn ($state) => $state >= 0 ? number_format($state) : '-') , - Tables\Columns\TextColumn::make('value') + TextColumn::make('value') ->formatStateUsing(fn ($record) => $record->old_total_value > $record->new_total_value ? "-" . number_format($record->value) : "+" . number_format($record->value)) ->label(__('bonus-log.fields.value')) , - Tables\Columns\TextColumn::make('new_total_value') + TextColumn::make('new_total_value') ->label(__('bonus-log.fields.new_total_value')) ->formatStateUsing(fn ($state) => $state >= 0 ? number_format($state) : '-') , - Tables\Columns\TextColumn::make('comment') + TextColumn::make('comment') ->label(__('label.comment')) , - Tables\Columns\TextColumn::make('created_at') + TextColumn::make('created_at') ->label(__('label.created_at')) , ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label(__('label.username')) ->placeholder('UID') , @@ -86,7 +91,7 @@ class BonusLogResource extends Resource return $query->when($data['uid'], fn (Builder $query, $value) => $query->where("uid", $value)); }) , - Tables\Filters\SelectFilter::make('business_type') + SelectFilter::make('business_type') ->options(BonusLogs::listStaticProps(Arr::except(BonusLogs::$businessTypes, BonusLogs::$businessTypeBonus), 'bonus-log.business_types', true)) ->label(__('bonus-log.fields.business_type')) , @@ -101,11 +106,11 @@ class BonusLogResource extends Resource // ->default() // , ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), // Tables\Actions\DeleteAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -113,7 +118,7 @@ class BonusLogResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageBonusLogs::route('/'), + 'index' => ManageBonusLogs::route('/'), ]; } } diff --git a/app/Filament/Resources/User/ClaimResource.php b/app/Filament/Resources/User/ClaimResource.php index e1ddc843..8c36aa4e 100644 --- a/app/Filament/Resources/User/ClaimResource.php +++ b/app/Filament/Resources/User/ClaimResource.php @@ -2,11 +2,18 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\BooleanColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use App\Filament\Resources\User\ClaimResource\Pages\ListClaims; +use App\Filament\Resources\User\ClaimResource\Pages\CreateClaim; +use App\Filament\Resources\User\ClaimResource\Pages\EditClaim; use App\Filament\Resources\User\ClaimResource\Pages; use App\Filament\Resources\User\ClaimResource\RelationManagers; use App\Models\Claim; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -19,9 +26,9 @@ class ClaimResource extends Resource { protected static ?string $model = Claim::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 4; @@ -35,10 +42,10 @@ class ClaimResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -47,27 +54,27 @@ class ClaimResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('uid')->searchable(), - Tables\Columns\TextColumn::make('user.username') + TextColumn::make('id')->sortable(), + TextColumn::make('uid')->searchable(), + TextColumn::make('user.username') ->label(__('label.user.label')) ->searchable() ->formatStateUsing(fn ($record) => new HtmlString(get_username($record->uid, false, true, true, true))) , - Tables\Columns\TextColumn::make('torrent.name')->limit(40)->label(__('label.torrent.label'))->searchable(), - Tables\Columns\TextColumn::make('torrent.size')->label(__('label.torrent.size'))->formatStateUsing(fn (Model $record) => mksize($record->torrent->size)), - Tables\Columns\TextColumn::make('torrent.added')->label(__('label.torrent.ttl'))->formatStateUsing(fn (Model $record) => mkprettytime(abs($record->torrent->added->diffInSeconds()))), - Tables\Columns\TextColumn::make('created_at')->label(__('label.created_at'))->dateTime(), - Tables\Columns\TextColumn::make('last_settle_at')->label(__('label.claim.last_settle_at'))->dateTime(), - Tables\Columns\TextColumn::make('seedTimeThisMonth')->label(__('label.claim.seed_time_this_month')), - Tables\Columns\TextColumn::make('uploadedThisMonth')->label(__('label.claim.uploaded_this_month')), - Tables\Columns\BooleanColumn::make('isReachedThisMonth')->label(__('label.claim.is_reached_this_month')), + TextColumn::make('torrent.name')->limit(40)->label(__('label.torrent.label'))->searchable(), + TextColumn::make('torrent.size')->label(__('label.torrent.size'))->formatStateUsing(fn (Model $record) => mksize($record->torrent->size)), + TextColumn::make('torrent.added')->label(__('label.torrent.ttl'))->formatStateUsing(fn (Model $record) => mkprettytime(abs($record->torrent->added->diffInSeconds()))), + TextColumn::make('created_at')->label(__('label.created_at'))->dateTime(), + TextColumn::make('last_settle_at')->label(__('label.claim.last_settle_at'))->dateTime(), + TextColumn::make('seedTimeThisMonth')->label(__('label.claim.seed_time_this_month')), + TextColumn::make('uploadedThisMonth')->label(__('label.claim.uploaded_this_month')), + BooleanColumn::make('isReachedThisMonth')->label(__('label.claim.is_reached_this_month')), ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label('UID') ->placeholder('UID') , @@ -75,9 +82,9 @@ class ClaimResource extends Resource return $query->when($data['uid'], fn (Builder $query, $uid) => $query->where("uid", $uid)); }) , - Tables\Filters\Filter::make('torrent_id') - ->form([ - Forms\Components\TextInput::make('torrent_id') + Filter::make('torrent_id') + ->schema([ + TextInput::make('torrent_id') ->label(__('claim.fields.torrent_id')) ->placeholder(__('claim.fields.torrent_id')) , @@ -86,10 +93,10 @@ class ClaimResource extends Resource }) , ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -109,9 +116,9 @@ class ClaimResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListClaims::route('/'), - 'create' => Pages\CreateClaim::route('/create'), - 'edit' => Pages\EditClaim::route('/{record}/edit'), + 'index' => ListClaims::route('/'), + 'create' => CreateClaim::route('/create'), + 'edit' => EditClaim::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/User/ClaimResource/Pages/EditClaim.php b/app/Filament/Resources/User/ClaimResource/Pages/EditClaim.php index 3d42d0e6..2c241bd4 100644 --- a/app/Filament/Resources/User/ClaimResource/Pages/EditClaim.php +++ b/app/Filament/Resources/User/ClaimResource/Pages/EditClaim.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\User\ClaimResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\ClaimResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditClaim extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/ExamUserResource.php b/app/Filament/Resources/User/ExamUserResource.php index fd0d95df..58a7126f 100644 --- a/app/Filament/Resources/User/ExamUserResource.php +++ b/app/Filament/Resources/User/ExamUserResource.php @@ -2,6 +2,21 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\BooleanColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\ViewAction; +use Filament\Actions\BulkAction; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\Textarea; +use Filament\Schemas\Components\Grid; +use Filament\Schemas\Components\Group; +use Filament\Infolists\Components\TextEntry; +use App\Filament\Resources\User\ExamUserResource\Pages\ListExamUsers; +use App\Filament\Resources\User\ExamUserResource\Pages\ViewExamUser; use App\Filament\Resources\User\ExamUserResource\Pages; use App\Filament\Resources\User\ExamUserResource\RelationManagers; use App\Models\Exam; @@ -10,9 +25,7 @@ use App\Repositories\ExamRepository; use App\Repositories\HitAndRunRepository; use Carbon\Carbon; use Filament\Forms; -use Filament\Forms\Form; use Filament\Infolists\Components\ViewEntry; -use Filament\Infolists\Infolist; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -28,9 +41,9 @@ class ExamUserResource extends Resource { protected static ?string $model = ExamUser::class; - protected static ?string $navigationIcon = 'heroicon-o-shield-check'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-shield-check'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 2; @@ -44,10 +57,10 @@ class ExamUserResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ ]); } @@ -56,26 +69,26 @@ class ExamUserResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('uid')->searchable(), - Tables\Columns\TextColumn::make('user.username') + TextColumn::make('id')->sortable(), + TextColumn::make('uid')->searchable(), + TextColumn::make('user.username') ->label(__('label.username')) ->searchable() ->formatStateUsing(fn ($record) => new HtmlString(get_username($record->uid, false, true, true, true))) , - Tables\Columns\TextColumn::make('exam.name')->label(__('label.exam.label')), - Tables\Columns\TextColumn::make('exam.typeText')->label(__('exam.type')), - Tables\Columns\TextColumn::make('begin')->label(__('label.begin'))->dateTime(), - Tables\Columns\TextColumn::make('end')->label(__('label.end'))->dateTime(), - Tables\Columns\BooleanColumn::make('is_done')->label(__('label.exam_user.is_done')), - Tables\Columns\TextColumn::make('statusText')->label(__('label.status')), - Tables\Columns\TextColumn::make('created_at')->dateTime()->label(__('label.created_at')), + TextColumn::make('exam.name')->label(__('label.exam.label')), + TextColumn::make('exam.typeText')->label(__('exam.type')), + TextColumn::make('begin')->label(__('label.begin'))->dateTime(), + TextColumn::make('end')->label(__('label.end'))->dateTime(), + BooleanColumn::make('is_done')->label(__('label.exam_user.is_done')), + TextColumn::make('statusText')->label(__('label.status')), + TextColumn::make('created_at')->dateTime()->label(__('label.created_at')), ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label('UID') ->placeholder('UID') , @@ -83,7 +96,7 @@ class ExamUserResource extends Resource return $query->when($data['uid'], fn (Builder $query, $uid) => $query->where("uid", $uid)); }) , - Tables\Filters\SelectFilter::make('exam_type') + SelectFilter::make('exam_type') ->options(Exam::listTypeOptions()) ->label(__('exam.type')) ->query(function (Builder $query, array $data) { @@ -94,18 +107,18 @@ class ExamUserResource extends Resource }); }) , - Tables\Filters\SelectFilter::make('exam_id') + SelectFilter::make('exam_id') ->options(Exam::query()->pluck('name', 'id')->toArray()) ->label(__('label.exam.label')) , - Tables\Filters\SelectFilter::make('status')->options(ExamUser::listStatus(true))->label(__("label.status")), - Tables\Filters\SelectFilter::make('is_done')->options(['0' => 'No', '1' => 'yes'])->label(__('label.exam_user.is_done')), + SelectFilter::make('status')->options(ExamUser::listStatus(true))->label(__("label.status")), + SelectFilter::make('is_done')->options(['0' => 'No', '1' => 'yes'])->label(__('label.exam_user.is_done')), ]) - ->actions([ - Tables\Actions\ViewAction::make(), + ->recordActions([ + ViewAction::make(), ]) ->groupedBulkActions([ - Tables\Actions\BulkAction::make('Avoid')->action(function (Collection $records) { + BulkAction::make('Avoid')->action(function (Collection $records) { $idArr = $records->pluck('id')->toArray(); $rep = new ExamRepository(); $rep->avoidExamUserBulk(['id' => $idArr], Auth::user()); @@ -115,13 +128,13 @@ class ExamUserResource extends Resource ->label(__('admin.resources.exam_user.bulk_action_avoid_label')) ->icon('heroicon-o-x-mark'), - Tables\Actions\BulkAction::make('UpdateEnd') + BulkAction::make('UpdateEnd') ->form([ - Forms\Components\DateTimePicker::make('end') + DateTimePicker::make('end') ->required() ->label(__('label.end')) , - Forms\Components\Textarea::make('reason') + Textarea::make('reason') ->label(__('label.reason')) , ]) @@ -142,44 +155,44 @@ class ExamUserResource extends Resource ]); } - public static function infolist(Infolist $infolist): Infolist + public static function infolist(Schema $schema): Schema { - return $infolist - ->schema([ - Components\Grid::make(2)->schema([ - Components\Group::make([ - Infolists\Components\TextEntry::make('id'), - Infolists\Components\TextEntry::make('statusText') + return $schema + ->components([ + Grid::make(2)->schema([ + Group::make([ + TextEntry::make('id'), + TextEntry::make('statusText') ->label(__("label.status")) , - Infolists\Components\TextEntry::make('uid') + TextEntry::make('uid') ->formatStateUsing(fn ($record) => username_for_admin($record->uid)) ->label(__("label.username")) , - Infolists\Components\TextEntry::make('exam.name') + TextEntry::make('exam.name') // ->formatStateUsing(fn ($record) => $record->torrent->name) ->label(__("label.exam.label")) , - Infolists\Components\TextEntry::make('begin') + TextEntry::make('begin') ->label(__("label.begin")) , - Infolists\Components\TextEntry::make('end') + TextEntry::make('end') ->label(__("label.end")) , - Infolists\Components\TextEntry::make('isDoneText') + TextEntry::make('isDoneText') ->label(__("label.exam_user.is_done")) , - Infolists\Components\TextEntry::make('created_at') + TextEntry::make('created_at') ->label(__("label.created_at")) , - Infolists\Components\TextEntry::make('updated_at') + TextEntry::make('updated_at') ->label(__("label.updated_at")) , ]) ->columnSpan(1) ->columns(2) , - Components\Group::make([ + Group::make([ ViewEntry::make('progressFormatted') ->label('进度') ->view('filament.resources.user.exam-user-resource.pages.detail-v3') @@ -231,10 +244,10 @@ class ExamUserResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListExamUsers::route('/'), + 'index' => ListExamUsers::route('/'), // 'create' => Pages\CreateExamUser::route('/create'), // 'edit' => Pages\EditExamUser::route('/{record}/edit'), - 'view' => Pages\ViewExamUser::route('/{record}'), + 'view' => ViewExamUser::route('/{record}'), ]; } } diff --git a/app/Filament/Resources/User/ExamUserResource/Pages/EditExamUser.php b/app/Filament/Resources/User/ExamUserResource/Pages/EditExamUser.php index e8adae16..7d5da860 100644 --- a/app/Filament/Resources/User/ExamUserResource/Pages/EditExamUser.php +++ b/app/Filament/Resources/User/ExamUserResource/Pages/EditExamUser.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\User\ExamUserResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\ExamUserResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditExamUser extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/ExamUserResource/Pages/ViewExamUser.php b/app/Filament/Resources/User/ExamUserResource/Pages/ViewExamUser.php index 92970608..482af209 100644 --- a/app/Filament/Resources/User/ExamUserResource/Pages/ViewExamUser.php +++ b/app/Filament/Resources/User/ExamUserResource/Pages/ViewExamUser.php @@ -2,6 +2,12 @@ namespace App\Filament\Resources\User\ExamUserResource\Pages; +use Filament\Actions\Action; +use Exception; +use Filament\Schemas\Schema; +use Filament\Forms\Components\DateTimePicker; +use Filament\Forms\Components\Textarea; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\ExamUserResource; use App\Models\Exam; use App\Repositories\ExamRepository; @@ -75,7 +81,7 @@ class ViewExamUser extends ViewRecord protected function getHeaderActions(): array { return [ - Actions\Action::make('Avoid') + Action::make('Avoid') ->requiresConfirmation() ->action(function () { $examRep = new ExamRepository(); @@ -83,22 +89,22 @@ class ViewExamUser extends ViewRecord $examRep->avoidExamUser($this->record->id); send_admin_success_notification(); $this->record = $this->resolveRecord($this->record->id); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } }) ->label(__('admin.resources.exam_user.action_avoid')), - Actions\Action::make('UpdateEnd') - ->mountUsing(fn (Forms\ComponentContainer $form) => $form->fill([ + Action::make('UpdateEnd') + ->mountUsing(fn (Schema $schema) => $schema->fill([ 'end' => $this->record->end, ])) - ->form([ - Forms\Components\DateTimePicker::make('end') + ->schema([ + DateTimePicker::make('end') ->required() ->label(__('label.end')) , - Forms\Components\Textarea::make('reason') + Textarea::make('reason') ->label(__('label.reason')) , ]) @@ -108,13 +114,13 @@ class ViewExamUser extends ViewRecord $examRep->updateExamUserEnd($this->record, Carbon::parse($data['end']), $data['reason'] ?? ""); send_admin_success_notification(); $this->record = $this->resolveRecord($this->record->id); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } }) ->label(__('admin.resources.exam_user.action_update_end')), - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/HitAndRunResource.php b/app/Filament/Resources/User/HitAndRunResource.php index ca9b09d0..1ccc8fcb 100644 --- a/app/Filament/Resources/User/HitAndRunResource.php +++ b/app/Filament/Resources/User/HitAndRunResource.php @@ -2,6 +2,18 @@ namespace App\Filament\Resources\User; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use Filament\Forms\Components\DatePicker; +use Filament\Actions\ViewAction; +use Filament\Actions\BulkAction; +use Filament\Actions\DeleteBulkAction; +use Filament\Schemas\Schema; +use Filament\Infolists\Components\TextEntry; +use App\Filament\Resources\User\HitAndRunResource\Pages\ListHitAndRuns; +use App\Filament\Resources\User\HitAndRunResource\Pages\ViewHitAndRun; use App\Filament\Resources\User\HitAndRunResource\Pages; use App\Filament\Resources\User\HitAndRunResource\RelationManagers; use App\Models\HitAndRun; @@ -9,7 +21,6 @@ use App\Models\User; use App\Repositories\HitAndRunRepository; use Filament\Forms; use Filament\Forms\Form; -use Filament\Infolists\Infolist; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -26,9 +37,9 @@ class HitAndRunResource extends Resource { protected static ?string $model = HitAndRun::class; - protected static ?string $navigationIcon = 'heroicon-o-beaker'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-beaker'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 3; @@ -46,28 +57,28 @@ class HitAndRunResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('uid')->searchable(), - Tables\Columns\TextColumn::make('user.username') + TextColumn::make('id')->sortable(), + TextColumn::make('uid')->searchable(), + TextColumn::make('user.username') ->searchable() ->label(__('label.username')) ->formatStateUsing(fn ($record) => new HtmlString(get_username($record->uid, false, true, true, true))) , - Tables\Columns\TextColumn::make('torrent.name')->limit(30)->label(__('label.torrent.label')), - Tables\Columns\TextColumn::make('snatch.uploadText')->label(__('label.uploaded')), - Tables\Columns\TextColumn::make('snatch.downloadText')->label(__('label.downloaded')), - Tables\Columns\TextColumn::make('snatch.shareRatio')->label(__('label.ratio')), - Tables\Columns\TextColumn::make('seedTimeRequired')->label(__('label.seed_time_required')), - Tables\Columns\TextColumn::make('inspectTimeLeft')->label(__('label.inspect_time_left')), - Tables\Columns\TextColumn::make('statusText')->label(__('label.status')), - Tables\Columns\TextColumn::make('created_at')->label(__('label.created_at')), + TextColumn::make('torrent.name')->limit(30)->label(__('label.torrent.label')), + TextColumn::make('snatch.uploadText')->label(__('label.uploaded')), + TextColumn::make('snatch.downloadText')->label(__('label.downloaded')), + TextColumn::make('snatch.shareRatio')->label(__('label.ratio')), + TextColumn::make('seedTimeRequired')->label(__('label.seed_time_required')), + TextColumn::make('inspectTimeLeft')->label(__('label.inspect_time_left')), + TextColumn::make('statusText')->label(__('label.status')), + TextColumn::make('created_at')->label(__('label.created_at')), ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label('UID') ->placeholder('UID') , @@ -76,10 +87,10 @@ class HitAndRunResource extends Resource return $query->when($data['uid'], fn (Builder $query, $uid) => $query->where("uid", $uid)); }) , - Tables\Filters\SelectFilter::make('status')->options(HitAndRun::listStatus(true))->label(__('label.status')), - Tables\Filters\Filter::make('created_at_begin') - ->form([ - Forms\Components\DatePicker::make('created_at_begin') + SelectFilter::make('status')->options(HitAndRun::listStatus(true))->label(__('label.status')), + Filter::make('created_at_begin') + ->schema([ + DatePicker::make('created_at_begin') ->maxDate(now()) ->label(__('label.created_at_begin')) , @@ -87,9 +98,9 @@ class HitAndRunResource extends Resource return $query->when($data['created_at_begin'], fn (Builder $query, $value) => $query->where("created_at", '>=', $value)); }) , - Tables\Filters\Filter::make('created_at_end') - ->form([ - Forms\Components\DatePicker::make('created_at_end') + Filter::make('created_at_end') + ->schema([ + DatePicker::make('created_at_end') ->maxDate(now()) ->label(__('label.created_at_end')) , @@ -98,11 +109,11 @@ class HitAndRunResource extends Resource }) , ]) - ->actions([ - Tables\Actions\ViewAction::make(), + ->recordActions([ + ViewAction::make(), ]) ->groupedBulkActions([ - Tables\Actions\BulkAction::make('Pardon')->action(function (Collection $records) { + BulkAction::make('Pardon')->action(function (Collection $records) { $idArr = $records->pluck('id')->toArray(); $rep = new HitAndRunRepository(); $rep->bulkPardon(['id' => $idArr], Auth::user()); @@ -111,49 +122,49 @@ class HitAndRunResource extends Resource ->label(__('admin.resources.hit_and_run.bulk_action_pardon')) ->icon('heroicon-o-x-mark') , - Tables\Actions\DeleteBulkAction::make('bulkDelete') + DeleteBulkAction::make('bulkDelete') ]); } - public static function infolist(Infolist $infolist): Infolist + public static function infolist(Schema $schema): Schema { - return $infolist - ->schema([ - Infolists\Components\TextEntry::make('id'), - Infolists\Components\TextEntry::make('statusText') + return $schema + ->components([ + TextEntry::make('id'), + TextEntry::make('statusText') ->label(__("label.status")) , - Infolists\Components\TextEntry::make('uid') + TextEntry::make('uid') ->formatStateUsing(fn ($record) => username_for_admin($record->uid)) ->label(__("label.username")) , - Infolists\Components\TextEntry::make('torrent_id') + TextEntry::make('torrent_id') ->formatStateUsing(fn ($record) => $record->torrent->name) ->label(__("label.torrent.label")) , - Infolists\Components\TextEntry::make('snatch.uploadedText') + TextEntry::make('snatch.uploadedText') ->label(__("label.uploaded")) , - Infolists\Components\TextEntry::make('snatch.downloadedText') + TextEntry::make('snatch.downloadedText') ->label(__("label.downloaded")) , - Infolists\Components\TextEntry::make('snatch.shareRatio') + TextEntry::make('snatch.shareRatio') ->label(__("label.ratio")) , - Infolists\Components\TextEntry::make('seedTimeRequired') + TextEntry::make('seedTimeRequired') ->label(__("label.seed_time_required")) , - Infolists\Components\TextEntry::make('inspectTimeLeft') + TextEntry::make('inspectTimeLeft') ->label(__("label.inspect_time_left")) , - Infolists\Components\TextEntry::make('comment') + TextEntry::make('comment') ->formatStateUsing(fn ($record) => new HtmlString(nl2br($record->comment))) ->label(__("label.comment")) , - Infolists\Components\TextEntry::make('created_at') + TextEntry::make('created_at') ->label(__("label.created_at")) , - Infolists\Components\TextEntry::make('updated_at') + TextEntry::make('updated_at') ->label(__("label.updated_at")) , ])->columns(4); @@ -175,10 +186,10 @@ class HitAndRunResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListHitAndRuns::route('/'), + 'index' => ListHitAndRuns::route('/'), // 'create' => Pages\CreateHitAndRun::route('/create'), // 'edit' => Pages\EditHitAndRun::route('/{record}/edit'), - 'view' => Pages\ViewHitAndRun::route('/{record}'), + 'view' => ViewHitAndRun::route('/{record}'), ]; } } diff --git a/app/Filament/Resources/User/HitAndRunResource/Pages/EditHitAndRun.php b/app/Filament/Resources/User/HitAndRunResource/Pages/EditHitAndRun.php index 3a2fdb38..82e6bdb6 100644 --- a/app/Filament/Resources/User/HitAndRunResource/Pages/EditHitAndRun.php +++ b/app/Filament/Resources/User/HitAndRunResource/Pages/EditHitAndRun.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\User\HitAndRunResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\HitAndRunResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditHitAndRun extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/HitAndRunResource/Pages/ViewHitAndRun.php b/app/Filament/Resources/User/HitAndRunResource/Pages/ViewHitAndRun.php index a2d1ef7c..c80e5d60 100644 --- a/app/Filament/Resources/User/HitAndRunResource/Pages/ViewHitAndRun.php +++ b/app/Filament/Resources/User/HitAndRunResource/Pages/ViewHitAndRun.php @@ -2,6 +2,9 @@ namespace App\Filament\Resources\User\HitAndRunResource\Pages; +use Filament\Actions\Action; +use Exception; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\HitAndRunResource; use App\Models\HitAndRun; use App\Repositories\HitAndRunRepository; @@ -82,7 +85,7 @@ class ViewHitAndRun extends ViewRecord { $actions = []; if (in_array($this->record->status, HitAndRun::CAN_PARDON_STATUS)) { - $actions[] = Actions\Action::make('Pardon') + $actions[] = Action::make('Pardon') ->requiresConfirmation() ->action(function () { $hitAndRunRep = new HitAndRunRepository(); @@ -90,14 +93,14 @@ class ViewHitAndRun extends ViewRecord $hitAndRunRep->pardon($this->record->id, Auth::user()); send_admin_success_notification(); $this->record = $this->resolveRecord($this->record->id); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } }) ->label(__('admin.resources.hit_and_run.action_pardon')) ; } - $actions[] = Actions\DeleteAction::make(); + $actions[] = DeleteAction::make(); return $actions; } diff --git a/app/Filament/Resources/User/InviteResource.php b/app/Filament/Resources/User/InviteResource.php index 3988f50e..b9842784 100644 --- a/app/Filament/Resources/User/InviteResource.php +++ b/app/Filament/Resources/User/InviteResource.php @@ -2,12 +2,21 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\IconColumn; +use App\Filament\Resources\User\InviteResource\Pages\ListInvites; +use App\Filament\Resources\User\InviteResource\Pages\CreateInvite; +use App\Filament\Resources\User\InviteResource\Pages\EditInvite; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use Filament\Forms\Components\DatePicker; use App\Filament\OptionsTrait; use App\Filament\Resources\User\InviteResource\Pages; use App\Filament\Resources\User\InviteResource\RelationManagers; use App\Models\Invite; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -20,9 +29,9 @@ class InviteResource extends Resource protected static ?string $model = Invite::class; - protected static ?string $navigationIcon = 'heroicon-o-user-plus'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-user-plus'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 7; @@ -36,10 +45,10 @@ class InviteResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -48,51 +57,51 @@ class InviteResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('inviter') + TextColumn::make('id')->sortable(), + TextColumn::make('inviter') ->label(__('invite.fields.inviter')) ->formatStateUsing(fn ($state) => username_for_admin($state)) , - Tables\Columns\TextColumn::make('invitee') + TextColumn::make('invitee') ->label(__('invite.fields.invitee')) ->searchable() , - Tables\Columns\TextColumn::make('hash') + TextColumn::make('hash') , - Tables\Columns\TextColumn::make('time_invited') + TextColumn::make('time_invited') ->label(__('invite.fields.time_invited')) , - Tables\Columns\IconColumn::make('valid') + IconColumn::make('valid') ->label(__('invite.fields.valid')) ->boolean() , - Tables\Columns\TextColumn::make('invitee_register_uid') + TextColumn::make('invitee_register_uid') ->label(__('invite.fields.invitee_register_uid')) ->searchable() , - Tables\Columns\TextColumn::make('invitee_register_email') + TextColumn::make('invitee_register_email') ->label(__('invite.fields.invitee_register_email')) ->searchable() , - Tables\Columns\TextColumn::make('invitee_register_username') + TextColumn::make('invitee_register_username') ->label(__('invite.fields.invitee_register_username')) ->searchable() , - Tables\Columns\TextColumn::make('expired_at') + TextColumn::make('expired_at') ->label(__('invite.fields.expired_at')) ->formatStateUsing(fn ($state) => format_datetime($state)) , - Tables\Columns\TextColumn::make('created_at') + TextColumn::make('created_at') ->label(__('label.created_at')) ->formatStateUsing(fn ($state) => format_datetime($state)) , ]) ->defaultSort('id', 'desc') ->filters(self::getFilters()) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -107,18 +116,18 @@ class InviteResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListInvites::route('/'), - 'create' => Pages\CreateInvite::route('/create'), - 'edit' => Pages\EditInvite::route('/{record}/edit'), + 'index' => ListInvites::route('/'), + 'create' => CreateInvite::route('/create'), + 'edit' => EditInvite::route('/{record}/edit'), ]; } private static function getFilters() { $filters = []; - $filters[] = Tables\Filters\Filter::make('inviter') - ->form([ - Forms\Components\TextInput::make('inviter') + $filters[] = Filter::make('inviter') + ->schema([ + TextInput::make('inviter') ->label(__('invite.fields.inviter')) ->placeholder('UID') , @@ -126,13 +135,13 @@ class InviteResource extends Resource return $query->when($data['inviter'], fn (Builder $query, $value) => $query->where("inviter", $value)); }) ; - $filters[] = Tables\Filters\SelectFilter::make('valid') + $filters[] = SelectFilter::make('valid') ->options(self::getYesNoOptions()) ->label(__('invite.fields.valid')) ; - $filters[] = Tables\Filters\Filter::make('time_invited_begin') - ->form([ - Forms\Components\DatePicker::make('time_invited_begin') + $filters[] = Filter::make('time_invited_begin') + ->schema([ + DatePicker::make('time_invited_begin') ->maxDate(now()) ->label(__('invite.fields.time_invited_begin')) , @@ -140,9 +149,9 @@ class InviteResource extends Resource return $query->when($data['time_invited_begin'], fn (Builder $query, $value) => $query->where("time_invited", '>=', $value)); }) ; - $filters[] = Tables\Filters\Filter::make('time_invited_end') - ->form([ - Forms\Components\DatePicker::make('time_invited_end') + $filters[] = Filter::make('time_invited_end') + ->schema([ + DatePicker::make('time_invited_end') ->maxDate(now()) ->label(__('invite.fields.time_invited_end')) , diff --git a/app/Filament/Resources/User/InviteResource/Pages/EditInvite.php b/app/Filament/Resources/User/InviteResource/Pages/EditInvite.php index 77fa6859..b04a0973 100644 --- a/app/Filament/Resources/User/InviteResource/Pages/EditInvite.php +++ b/app/Filament/Resources/User/InviteResource/Pages/EditInvite.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\User\InviteResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\InviteResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditInvite extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/LoginLogResource.php b/app/Filament/Resources/User/LoginLogResource.php index e4aacab5..04262b16 100644 --- a/app/Filament/Resources/User/LoginLogResource.php +++ b/app/Filament/Resources/User/LoginLogResource.php @@ -2,11 +2,15 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use App\Filament\Resources\User\LoginLogResource\Pages\ManageLoginLogs; use App\Filament\Resources\User\LoginLogResource\Pages; use App\Filament\Resources\User\LoginLogResource\RelationManagers; use App\Models\LoginLog; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -17,9 +21,9 @@ class LoginLogResource extends Resource { protected static ?string $model = LoginLog::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 9; @@ -33,10 +37,10 @@ class LoginLogResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -45,22 +49,22 @@ class LoginLogResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('uid') + TextColumn::make('id')->sortable(), + TextColumn::make('uid') ->formatStateUsing(fn ($state) => username_for_admin($state)) ->label(__('label.username')) , - Tables\Columns\TextColumn::make('ip')->searchable(), - Tables\Columns\TextColumn::make('country')->label(__('label.country'))->searchable(), - Tables\Columns\TextColumn::make('city')->label(__('label.city'))->searchable(), - Tables\Columns\TextColumn::make('client')->label(__('label.client')), - Tables\Columns\TextColumn::make('created_at')->label(__('label.created_at')), + TextColumn::make('ip')->searchable(), + TextColumn::make('country')->label(__('label.country'))->searchable(), + TextColumn::make('city')->label(__('label.city'))->searchable(), + TextColumn::make('client')->label(__('label.client')), + TextColumn::make('created_at')->label(__('label.created_at')), ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label(__('label.username')) ->placeholder('UID') , @@ -69,11 +73,11 @@ class LoginLogResource extends Resource }) , ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), // Tables\Actions\DeleteAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -81,7 +85,7 @@ class LoginLogResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageLoginLogs::route('/'), + 'index' => ManageLoginLogs::route('/'), ]; } } diff --git a/app/Filament/Resources/User/TokenResource.php b/app/Filament/Resources/User/TokenResource.php index 15c69e9f..38ceb5a4 100644 --- a/app/Filament/Resources/User/TokenResource.php +++ b/app/Filament/Resources/User/TokenResource.php @@ -2,11 +2,16 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Actions\DeleteAction; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\DeleteBulkAction; +use App\Filament\Resources\User\TokenResource\Pages\ManageTokens; use App\Filament\Resources\User\TokenResource\Pages; use App\Filament\Resources\User\TokenResource\RelationManagers; use App\Models\PersonalAccessToken; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; @@ -18,9 +23,9 @@ class TokenResource extends Resource { protected static ?string $model = PersonalAccessToken::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 6; @@ -34,10 +39,10 @@ class TokenResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -46,31 +51,31 @@ class TokenResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('name')->label(__('label.name')), - Tables\Columns\TextColumn::make('abilities') + TextColumn::make('id'), + TextColumn::make('name')->label(__('label.name')), + TextColumn::make('abilities') ->label(__('token.permission')) ->formatStateUsing(fn ($record): string => $record->abilitiesText) , - Tables\Columns\TextColumn::make('token')->label(__('token.token')), - Tables\Columns\TextColumn::make('tokenable_id') + TextColumn::make('token')->label(__('token.token')), + TextColumn::make('tokenable_id') ->label(__('label.username')) ->formatStateUsing(fn ($state) => username_for_admin($state)) , - Tables\Columns\TextColumn::make('last_used_at')->label(__('token.last_used_at')), - Tables\Columns\TextColumn::make('expires_at')->label(__('label.expire_at')), - Tables\Columns\TextColumn::make('created_at')->label(__('label.created_at')), + TextColumn::make('last_used_at')->label(__('token.last_used_at')), + TextColumn::make('expires_at')->label(__('label.expire_at')), + TextColumn::make('created_at')->label(__('label.created_at')), ]) ->filters([ // ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), ]), ]); } @@ -78,7 +83,7 @@ class TokenResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageTokens::route('/'), + 'index' => ManageTokens::route('/'), ]; } } diff --git a/app/Filament/Resources/User/TorrentBuyLogResource.php b/app/Filament/Resources/User/TorrentBuyLogResource.php index 37fa4597..c6545cf3 100644 --- a/app/Filament/Resources/User/TorrentBuyLogResource.php +++ b/app/Filament/Resources/User/TorrentBuyLogResource.php @@ -2,11 +2,17 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use App\Filament\Resources\User\TorrentBuyLogResource\Pages\ListTorrentBuyLogs; +use App\Filament\Resources\User\TorrentBuyLogResource\Pages\CreateTorrentBuyLog; +use App\Filament\Resources\User\TorrentBuyLogResource\Pages\EditTorrentBuyLog; use App\Filament\Resources\User\TorrentBuyLogResource\Pages; use App\Filament\Resources\User\TorrentBuyLogResource\RelationManagers; use App\Models\TorrentBuyLog; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -17,9 +23,9 @@ class TorrentBuyLogResource extends Resource { protected static ?string $model = TorrentBuyLog::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 10; @@ -33,10 +39,10 @@ class TorrentBuyLogResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -45,29 +51,29 @@ class TorrentBuyLogResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('uid') + TextColumn::make('id')->sortable(), + TextColumn::make('uid') ->formatStateUsing(fn ($state) => username_for_admin($state)) ->label(__('label.username')) , - Tables\Columns\TextColumn::make('torrent_id') + TextColumn::make('torrent_id') ->formatStateUsing(fn ($record) => torrent_name_for_admin($record->torrent)) ->label(__('label.torrent.label')) , - Tables\Columns\TextColumn::make('price') + TextColumn::make('price') ->formatStateUsing(fn ($state) => number_format($state)) ->label(__('label.price')) , - Tables\Columns\TextColumn::make('created_at') + TextColumn::make('created_at') ->formatStateUsing(fn ($state) => format_datetime($state)) ->label(__('label.created_at')) , ]) ->defaultSort('id','desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label(__('label.username')) ->placeholder('UID') , @@ -75,9 +81,9 @@ class TorrentBuyLogResource extends Resource return $query->when($data['uid'], fn (Builder $query, $value) => $query->where("uid", $value)); }) , - Tables\Filters\Filter::make('torrent_id') - ->form([ - Forms\Components\TextInput::make('torrent_id') + Filter::make('torrent_id') + ->schema([ + TextInput::make('torrent_id') ->label(__('label.torrent.label')) ->placeholder('Torrent ID') , @@ -86,10 +92,10 @@ class TorrentBuyLogResource extends Resource }) , ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\DeleteBulkAction::make(), ]); } @@ -104,9 +110,9 @@ class TorrentBuyLogResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListTorrentBuyLogs::route('/'), - 'create' => Pages\CreateTorrentBuyLog::route('/create'), - 'edit' => Pages\EditTorrentBuyLog::route('/{record}/edit'), + 'index' => ListTorrentBuyLogs::route('/'), + 'create' => CreateTorrentBuyLog::route('/create'), + 'edit' => EditTorrentBuyLog::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/User/TorrentBuyLogResource/Pages/EditTorrentBuyLog.php b/app/Filament/Resources/User/TorrentBuyLogResource/Pages/EditTorrentBuyLog.php index 275864c5..572532f9 100644 --- a/app/Filament/Resources/User/TorrentBuyLogResource/Pages/EditTorrentBuyLog.php +++ b/app/Filament/Resources/User/TorrentBuyLogResource/Pages/EditTorrentBuyLog.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\User\TorrentBuyLogResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\TorrentBuyLogResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditTorrentBuyLog extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/UserMedalResource.php b/app/Filament/Resources/User/UserMedalResource.php index ec99e715..16948f7c 100644 --- a/app/Filament/Resources/User/UserMedalResource.php +++ b/app/Filament/Resources/User/UserMedalResource.php @@ -2,6 +2,21 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\ImageColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\DeleteAction; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\DeleteBulkAction; +use Filament\Actions\BulkAction; +use Exception; +use Filament\Forms\Components\DateTimePicker; +use App\Filament\Resources\User\UserMedalResource\Pages\ListUserMedals; +use App\Filament\Resources\User\UserMedalResource\Pages\CreateUserMedal; +use App\Filament\Resources\User\UserMedalResource\Pages\EditUserMedal; use App\Filament\OptionsTrait; use App\Filament\Resources\User\UserMedalResource\Pages; use App\Filament\Resources\User\UserMedalResource\RelationManagers; @@ -11,7 +26,6 @@ use App\Models\UserMedal; use App\Repositories\MedalRepository; use Carbon\Carbon; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -26,9 +40,9 @@ class UserMedalResource extends Resource protected static ?string $model = UserMedal::class; - protected static ?string $navigationIcon = 'heroicon-o-flag'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-flag'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 5; @@ -42,10 +56,10 @@ class UserMedalResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -54,25 +68,25 @@ class UserMedalResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('uid')->searchable(), - Tables\Columns\TextColumn::make('user.username') + TextColumn::make('id')->sortable(), + TextColumn::make('uid')->searchable(), + TextColumn::make('user.username') ->label(__('label.username')) ->searchable() ->formatStateUsing(fn ($record) => new HtmlString(get_username($record->uid, false, true, true, true))) , - Tables\Columns\TextColumn::make('medal.name')->label(__('label.medal.label'))->searchable(), - Tables\Columns\ImageColumn::make('medal.image_large')->label(__('label.image')), - Tables\Columns\TextColumn::make('expire_at')->label(__('label.expire_at')), - Tables\Columns\TextColumn::make('bonus_addition_expire_at')->label(__('medal.bonus_addition_expire_at')), - Tables\Columns\TextColumn::make('wearingStatusText')->label(__('label.status')), - Tables\Columns\TextColumn::make('created_at')->label(__('label.created_at')), + TextColumn::make('medal.name')->label(__('label.medal.label'))->searchable(), + ImageColumn::make('medal.image_large')->label(__('label.image')), + TextColumn::make('expire_at')->label(__('label.expire_at')), + TextColumn::make('bonus_addition_expire_at')->label(__('medal.bonus_addition_expire_at')), + TextColumn::make('wearingStatusText')->label(__('label.status')), + TextColumn::make('created_at')->label(__('label.created_at')), ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label('UID') ->placeholder('UID') , @@ -80,11 +94,11 @@ class UserMedalResource extends Resource return $query->when($data['uid'], fn (Builder $query, $uid) => $query->where("uid", $uid)); }) , - Tables\Filters\SelectFilter::make('medal_id') + SelectFilter::make('medal_id') ->options(Medal::query()->pluck('name', 'id')->toArray()) ->label(__('medal.label')) , - Tables\Filters\SelectFilter::make('is_expired') + SelectFilter::make('is_expired') ->options(self::getYesNoOptions()) ->label(__('medal.is_expired')) ->query(function (Builder $query, array $data) { @@ -100,7 +114,7 @@ class UserMedalResource extends Resource } }) , - Tables\Filters\SelectFilter::make('is_bonus_addition_expired') + SelectFilter::make('is_bonus_addition_expired') ->options(self::getYesNoOptions()) ->label(__('medal.is_bonus_addition_expired')) ->query(function (Builder $query, array $data) { @@ -116,41 +130,41 @@ class UserMedalResource extends Resource } }) , - Tables\Filters\SelectFilter::make('status') + SelectFilter::make('status') ->options(UserMedal::listWearingStatusLabels()) ->label(__('label.status')) , ]) - ->actions([ - Tables\Actions\DeleteAction::make()->using(function (NexusModel $record) { + ->recordActions([ + DeleteAction::make()->using(function (NexusModel $record) { $record->delete(); clear_user_cache($record->uid); }) ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ + ->toolbarActions([ + BulkActionGroup::make([ self::buildBulkActionIncreaseExpireAt('expire_at'), self::buildBulkActionUpdateExpireAt('expire_at'), self::buildBulkActionCancelExpireAt('expire_at'), ])->label(sprintf("%s-%s", __('label.bulk'), __('label.expire_at'))), - Tables\Actions\BulkActionGroup::make([ + BulkActionGroup::make([ self::buildBulkActionIncreaseExpireAt('bonus_addition_expire_at'), self::buildBulkActionUpdateExpireAt('bonus_addition_expire_at'), self::buildBulkActionCancelExpireAt('bonus_addition_expire_at'), ])->label(sprintf("%s-%s", __('label.bulk'), __('medal.bonus_addition_expire_at'))), - Tables\Actions\DeleteBulkAction::make(), + DeleteBulkAction::make(), ]) ->selectCurrentPageOnly() ; } - private static function buildBulkActionIncreaseExpireAt(string $filed): Tables\Actions\BulkAction + private static function buildBulkActionIncreaseExpireAt(string $filed): BulkAction { - return Tables\Actions\BulkAction::make("bulkActionIncrease$filed") + return BulkAction::make("bulkActionIncrease$filed") ->label(__('medal.bulk_action_increase')) ->modalHeading(__('medal.bulk_action_increase_' . $filed)) ->form([ - Forms\Components\TextInput::make('increase_duration') + TextInput::make('increase_duration') ->label(__('medal.increase_duration')) ->helperText(__('medal.increase_duration_help')) ->integer() @@ -161,7 +175,7 @@ class UserMedalResource extends Resource $rep = new MedalRepository(); $rep->increaseExpireAt($collection, $filed, $data['increase_duration']); send_admin_success_notification(); - } catch (\Exception $e) { + } catch (Exception $e) { send_admin_fail_notification($e->getMessage()); } }) @@ -169,13 +183,13 @@ class UserMedalResource extends Resource ; } - private static function buildBulkActionUpdateExpireAt(string $filed): Tables\Actions\BulkAction + private static function buildBulkActionUpdateExpireAt(string $filed): BulkAction { - return Tables\Actions\BulkAction::make("bulkActionUpdate$filed") + return BulkAction::make("bulkActionUpdate$filed") ->label(__('medal.bulk_action_update')) ->modalHeading(__('medal.bulk_action_update_' . $filed)) ->form([ - Forms\Components\DateTimePicker::make('update_expire_at') + DateTimePicker::make('update_expire_at') ->label(__('medal.update_expire_at')) ->helperText(__('medal.update_expire_at_help')) ->required(), @@ -186,7 +200,7 @@ class UserMedalResource extends Resource $rep = new MedalRepository(); $rep->updateExpireAt($collection, $filed, $expireAt); send_admin_success_notification(); - } catch (\Exception $e) { + } catch (Exception $e) { send_admin_fail_notification($e->getMessage()); } }) @@ -194,9 +208,9 @@ class UserMedalResource extends Resource ; } - private static function buildBulkActionCancelExpireAt(string $filed): Tables\Actions\BulkAction + private static function buildBulkActionCancelExpireAt(string $filed): BulkAction { - return Tables\Actions\BulkAction::make("bulkActionCancel$filed") + return BulkAction::make("bulkActionCancel$filed") ->label(__('medal.bulk_action_cancel')) ->modalHeading(__('medal.bulk_action_cancel_' . $filed)) ->requiresConfirmation() @@ -205,7 +219,7 @@ class UserMedalResource extends Resource $rep = new MedalRepository(); $rep->cancelExpireAt($collection, $filed); send_admin_success_notification(); - } catch (\Exception $e) { + } catch (Exception $e) { send_admin_fail_notification($e->getMessage()); } }) @@ -228,9 +242,9 @@ class UserMedalResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListUserMedals::route('/'), - 'create' => Pages\CreateUserMedal::route('/create'), - 'edit' => Pages\EditUserMedal::route('/{record}/edit'), + 'index' => ListUserMedals::route('/'), + 'create' => CreateUserMedal::route('/create'), + 'edit' => EditUserMedal::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/User/UserMedalResource/Pages/EditUserMedal.php b/app/Filament/Resources/User/UserMedalResource/Pages/EditUserMedal.php index 84daf540..da6585b6 100644 --- a/app/Filament/Resources/User/UserMedalResource/Pages/EditUserMedal.php +++ b/app/Filament/Resources/User/UserMedalResource/Pages/EditUserMedal.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\User\UserMedalResource\Pages; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\UserMedalResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; @@ -13,7 +14,7 @@ class EditUserMedal extends EditRecord protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/UserMetaResource.php b/app/Filament/Resources/User/UserMetaResource.php index 6696c4e0..58ca0a63 100644 --- a/app/Filament/Resources/User/UserMetaResource.php +++ b/app/Filament/Resources/User/UserMetaResource.php @@ -2,12 +2,20 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\DeleteAction; +use App\Filament\Resources\User\UserMetaResource\Pages\ListUserMetas; +use App\Filament\Resources\User\UserMetaResource\Pages\CreateUserMeta; +use App\Filament\Resources\User\UserMetaResource\Pages\EditUserMeta; use App\Filament\Resources\User\UserMetaResource\Pages; use App\Filament\Resources\User\UserMetaResource\RelationManagers; use App\Models\NexusModel; use App\Models\UserMeta; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; @@ -20,9 +28,9 @@ class UserMetaResource extends Resource { protected static ?string $model = UserMeta::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 8; @@ -36,10 +44,10 @@ class UserMetaResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -48,28 +56,28 @@ class UserMetaResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable(), - Tables\Columns\TextColumn::make('uid') + TextColumn::make('id')->sortable(), + TextColumn::make('uid') ->searchable() ->label(__('label.username')) ->formatStateUsing(fn ($state) => username_for_admin($state)) , - Tables\Columns\TextColumn::make('meta_key_text') + TextColumn::make('meta_key_text') ->label(__('label.name')) , - Tables\Columns\TextColumn::make('deadline') + TextColumn::make('deadline') ->label(__('label.deadline')) , - Tables\Columns\TextColumn::make('created_at') + TextColumn::make('created_at') ->label(__('label.created_at')) ->formatStateUsing(fn ($state) => format_datetime($state)) , ]) ->defaultSort('id', 'desc') ->filters([ - Tables\Filters\Filter::make('uid') - ->form([ - Forms\Components\TextInput::make('uid') + Filter::make('uid') + ->schema([ + TextInput::make('uid') ->label(__('label.username')) ->placeholder('UID') , @@ -77,19 +85,19 @@ class UserMetaResource extends Resource return $query->when($data['uid'], fn (Builder $query, $value) => $query->where("uid", $value)); }) , - Tables\Filters\SelectFilter::make('meta_key') + SelectFilter::make('meta_key') ->options(UserMeta::listProps()) ->label(__('label.name')) , ]) - ->actions([ - Tables\Actions\DeleteAction::make()->using(function (NexusModel $record) { + ->recordActions([ + DeleteAction::make()->using(function (NexusModel $record) { $record->delete(); clear_user_cache($record->uid); do_log(sprintf("user: %d meta: %s was del by %s", $record->uid, $record->meta_key, Auth::user()->username)); }), ]) - ->bulkActions([ + ->toolbarActions([ ]); } @@ -103,9 +111,9 @@ class UserMetaResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListUserMetas::route('/'), - 'create' => Pages\CreateUserMeta::route('/create'), - 'edit' => Pages\EditUserMeta::route('/{record}/edit'), + 'index' => ListUserMetas::route('/'), + 'create' => CreateUserMeta::route('/create'), + 'edit' => EditUserMeta::route('/{record}/edit'), ]; } } diff --git a/app/Filament/Resources/User/UserMetaResource/Pages/CreateUserMeta.php b/app/Filament/Resources/User/UserMetaResource/Pages/CreateUserMeta.php index 29c5e4a0..80b77d9f 100644 --- a/app/Filament/Resources/User/UserMetaResource/Pages/CreateUserMeta.php +++ b/app/Filament/Resources/User/UserMetaResource/Pages/CreateUserMeta.php @@ -2,11 +2,12 @@ namespace App\Filament\Resources\User\UserMetaResource\Pages; +use Filament\Actions\Contracts\HasActions; use App\Filament\Resources\User\UserMetaResource; use Filament\Pages\Actions; use Filament\Resources\Pages\CreateRecord; -class CreateUserMeta extends CreateRecord +class CreateUserMeta extends CreateRecord implements HasActions { protected static string $resource = UserMetaResource::class; } diff --git a/app/Filament/Resources/User/UserMetaResource/Pages/EditUserMeta.php b/app/Filament/Resources/User/UserMetaResource/Pages/EditUserMeta.php index 4a2ba3cf..e5470ef3 100644 --- a/app/Filament/Resources/User/UserMetaResource/Pages/EditUserMeta.php +++ b/app/Filament/Resources/User/UserMetaResource/Pages/EditUserMeta.php @@ -2,18 +2,20 @@ namespace App\Filament\Resources\User\UserMetaResource\Pages; +use Filament\Actions\Contracts\HasActions; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\UserMetaResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; -class EditUserMeta extends EditRecord +class EditUserMeta extends EditRecord implements HasActions { protected static string $resource = UserMetaResource::class; protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/UserMetaResource/Pages/ListUserMetas.php b/app/Filament/Resources/User/UserMetaResource/Pages/ListUserMetas.php index bcc4e4b7..373c69eb 100644 --- a/app/Filament/Resources/User/UserMetaResource/Pages/ListUserMetas.php +++ b/app/Filament/Resources/User/UserMetaResource/Pages/ListUserMetas.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\User\UserMetaResource\Pages; +use Filament\Actions\Contracts\HasActions; use App\Filament\PageList; use App\Filament\Resources\User\UserMetaResource; use App\Models\UserMeta; @@ -9,7 +10,7 @@ use Filament\Pages\Actions; use Filament\Resources\Pages\ListRecords; use Illuminate\Database\Eloquent\Builder; -class ListUserMetas extends PageList +class ListUserMetas extends PageList implements HasActions { protected static string $resource = UserMetaResource::class; diff --git a/app/Filament/Resources/User/UserModifyLogResource.php b/app/Filament/Resources/User/UserModifyLogResource.php index cd39d7f0..f7d8d26f 100644 --- a/app/Filament/Resources/User/UserModifyLogResource.php +++ b/app/Filament/Resources/User/UserModifyLogResource.php @@ -2,11 +2,15 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Filters\Filter; +use Filament\Forms\Components\TextInput; +use App\Filament\Resources\User\UserModifyLogResource\Pages\ManageUserModifyLogs; use App\Filament\Resources\User\UserModifyLogResource\Pages; use App\Filament\Resources\User\UserModifyLogResource\RelationManagers; use App\Models\UserModifyLog; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; @@ -17,9 +21,9 @@ class UserModifyLogResource extends Resource { protected static ?string $model = UserModifyLog::class; - protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 100; @@ -33,10 +37,10 @@ class UserModifyLogResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ + return $schema + ->components([ // ]); } @@ -45,28 +49,28 @@ class UserModifyLogResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id'), - Tables\Columns\TextColumn::make('user_id')->label('UID'), - Tables\Columns\TextColumn::make('user.username') + TextColumn::make('id'), + TextColumn::make('user_id')->label('UID'), + TextColumn::make('user.username') ->label(nexus_trans("label.username")) ->formatStateUsing(fn ($record) => username_for_admin($record->user_id)) , - Tables\Columns\TextColumn::make('content')->label(nexus_trans("user-modify-log.content")), - Tables\Columns\TextColumn::make('created_at')->label(nexus_trans("label.created_at")), + TextColumn::make('content')->label(nexus_trans("user-modify-log.content")), + TextColumn::make('created_at')->label(nexus_trans("label.created_at")), ]) ->filters([ - Tables\Filters\Filter::make('user_id') - ->form([ - Forms\Components\TextInput::make('user_id') + Filter::make('user_id') + ->schema([ + TextInput::make('user_id') ->label(__('UID')) , ])->query(function (Builder $query, array $data) { return $query->when($data['user_id'], fn (Builder $query, $value) => $query->where("user_id", $value)); }) , - Tables\Filters\Filter::make('user') - ->form([ - Forms\Components\TextInput::make('username') + Filter::make('user') + ->schema([ + TextInput::make('username') ->label(__('label.username')) , ])->query(function (Builder $query, array $data) { @@ -75,9 +79,9 @@ class UserModifyLogResource extends Resource })); }) , - Tables\Filters\Filter::make('content') - ->form([ - Forms\Components\TextInput::make('content') + Filter::make('content') + ->schema([ + TextInput::make('content') ->label(__('user-modify-log.content')) , ])->query(function (Builder $query, array $data) { @@ -86,11 +90,11 @@ class UserModifyLogResource extends Resource , ]) ->defaultSort('id', 'desc') - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), // Tables\Actions\DeleteAction::make(), ]) - ->bulkActions([ + ->toolbarActions([ // Tables\Actions\BulkActionGroup::make([ // Tables\Actions\DeleteBulkAction::make(), // ]), @@ -100,7 +104,7 @@ class UserModifyLogResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ManageUserModifyLogs::route('/'), + 'index' => ManageUserModifyLogs::route('/'), ]; } } diff --git a/app/Filament/Resources/User/UserModifyLogResource/Pages/ManageUserModifyLogs.php b/app/Filament/Resources/User/UserModifyLogResource/Pages/ManageUserModifyLogs.php index 0df51808..746e3468 100644 --- a/app/Filament/Resources/User/UserModifyLogResource/Pages/ManageUserModifyLogs.php +++ b/app/Filament/Resources/User/UserModifyLogResource/Pages/ManageUserModifyLogs.php @@ -2,12 +2,13 @@ namespace App\Filament\Resources\User\UserModifyLogResource\Pages; +use Filament\Actions\Contracts\HasActions; use App\Filament\PageListSingle; use App\Filament\Resources\User\UserModifyLogResource; use Filament\Actions; use Filament\Resources\Pages\ManageRecords; -class ManageUserModifyLogs extends PageListSingle +class ManageUserModifyLogs extends PageListSingle implements HasActions { protected static string $resource = UserModifyLogResource::class; diff --git a/app/Filament/Resources/User/UserResource.php b/app/Filament/Resources/User/UserResource.php index 380bacf9..50384478 100644 --- a/app/Filament/Resources/User/UserResource.php +++ b/app/Filament/Resources/User/UserResource.php @@ -2,6 +2,26 @@ namespace App\Filament\Resources\User; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use App\Filament\Resources\User\UserResource\Pages\CreateUser; +use Filament\Forms\Components\Select; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\Column; +use Filament\Tables\Columns\BadgeColumn; +use Filament\Tables\Filters\Filter; +use Filament\Tables\Filters\SelectFilter; +use Filament\Actions\ViewAction; +use Filament\Schemas\Components\Group; +use Filament\Infolists\Components\TextEntry; +use Filament\Forms\Components\Radio; +use Filament\Schemas\Components\Utilities\Get; +use Filament\Forms\Components\DateTimePicker; +use Exception; +use Filament\Forms\Components\Hidden; +use App\Filament\Resources\User\UserResource\Pages\ListUsers; +use App\Filament\Resources\User\UserResource\Pages\UserProfile; +use Filament\Actions\BulkAction; use App\Filament\OptionsTrait; use App\Filament\Resources\User\UserResource\Pages; use App\Filament\Resources\User\UserResource\RelationManagers; @@ -10,12 +30,10 @@ use App\Repositories\UserRepository; use Filament\Actions\Action; use Filament\Forms; use Filament\Forms\Components\Grid; -use Filament\Forms\Form; use Filament\Resources\Resource; use Filament\Tables\Table; use Filament\Tables; use Filament\Infolists; -use Filament\Infolists\Infolist; use Filament\Infolists\Components; use Illuminate\Database\Eloquent\Builder; @@ -30,9 +48,9 @@ class UserResource extends Resource protected static ?string $model = User::class; - protected static ?string $navigationIcon = 'heroicon-o-users'; + protected static string | \BackedEnum | null $navigationIcon = 'heroicon-o-users'; - protected static ?string $navigationGroup = 'User'; + protected static string | \UnitEnum | null $navigationGroup = 'User'; protected static ?int $navigationSort = 1; @@ -56,16 +74,16 @@ class UserResource extends Resource return self::getNavigationLabel(); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('username')->required(), - Forms\Components\TextInput::make('email')->required(), - Forms\Components\TextInput::make('password')->password()->required()->visibleOn(Pages\CreateUser::class), - Forms\Components\TextInput::make('password_confirmation')->password()->required()->same('password')->visibleOn(Pages\CreateUser::class), - Forms\Components\TextInput::make('id')->integer(), - Forms\Components\Select::make('class')->options(User::listClass(User::CLASS_PEASANT, Auth::user()->class - 1)), + return $schema + ->components([ + TextInput::make('username')->required(), + TextInput::make('email')->required(), + TextInput::make('password')->password()->required()->visibleOn(CreateUser::class), + TextInput::make('password_confirmation')->password()->required()->same('password')->visibleOn(CreateUser::class), + TextInput::make('id')->integer(), + Select::make('class')->options(User::listClass(User::CLASS_PEASANT, Auth::user()->class - 1)), ]); } @@ -73,108 +91,108 @@ class UserResource extends Resource { return $table ->columns([ - Tables\Columns\TextColumn::make('id')->sortable()->searchable(), - Tables\Columns\TextColumn::make('username')->searchable()->label(__("label.user.username")) + TextColumn::make('id')->sortable()->searchable(), + TextColumn::make('username')->searchable()->label(__("label.user.username")) ->formatStateUsing(fn ($record) => new HtmlString(get_username($record->id, false, true, true, true))), - Tables\Columns\TextColumn::make('email')->searchable()->label(__("label.email")), - Tables\Columns\TextColumn::make('class')->label('Class') - ->formatStateUsing(fn(Tables\Columns\Column $column) => $column->getRecord()->classText) + TextColumn::make('email')->searchable()->label(__("label.email")), + TextColumn::make('class')->label('Class') + ->formatStateUsing(fn(Column $column) => $column->getRecord()->classText) ->sortable()->label(__("label.user.class")), - Tables\Columns\TextColumn::make('uploaded')->label('Uploaded') - ->formatStateUsing(fn(Tables\Columns\Column $column) => $column->getRecord()->uploadedText) + TextColumn::make('uploaded')->label('Uploaded') + ->formatStateUsing(fn(Column $column) => $column->getRecord()->uploadedText) ->sortable()->label(__("label.uploaded")), - Tables\Columns\TextColumn::make('downloaded')->label('Downloaded') - ->formatStateUsing(fn(Tables\Columns\Column $column) => $column->getRecord()->downloadedText) + TextColumn::make('downloaded')->label('Downloaded') + ->formatStateUsing(fn(Column $column) => $column->getRecord()->downloadedText) ->sortable()->label(__("label.downloaded")), - Tables\Columns\BadgeColumn::make('status')->colors(['success' => 'confirmed', 'warning' => 'pending'])->label(__("label.user.status")), - Tables\Columns\BadgeColumn::make('enabled')->colors(['success' => 'yes', 'danger' => 'no'])->label(__("label.user.enabled")), - Tables\Columns\BadgeColumn::make('downloadpos')->colors(['success' => 'yes', 'danger' => 'no'])->label(__("label.user.downloadpos")), - Tables\Columns\BadgeColumn::make('parked')->colors(['success' => 'yes', 'danger' => 'no'])->label(__("label.user.parked")), - Tables\Columns\TextColumn::make('added')->sortable()->dateTime('Y-m-d H:i')->label(__("label.added")), - Tables\Columns\TextColumn::make('last_access')->dateTime('Y-m-d H:i')->label(__("label.last_access")), + BadgeColumn::make('status')->colors(['success' => 'confirmed', 'warning' => 'pending'])->label(__("label.user.status")), + BadgeColumn::make('enabled')->colors(['success' => 'yes', 'danger' => 'no'])->label(__("label.user.enabled")), + BadgeColumn::make('downloadpos')->colors(['success' => 'yes', 'danger' => 'no'])->label(__("label.user.downloadpos")), + BadgeColumn::make('parked')->colors(['success' => 'yes', 'danger' => 'no'])->label(__("label.user.parked")), + TextColumn::make('added')->sortable()->dateTime('Y-m-d H:i')->label(__("label.added")), + TextColumn::make('last_access')->dateTime('Y-m-d H:i')->label(__("label.last_access")), ]) ->defaultSort('added', 'desc') ->filters([ - Tables\Filters\Filter::make('id') - ->form([ - Forms\Components\TextInput::make('id') + Filter::make('id') + ->schema([ + TextInput::make('id') ->placeholder('UID') , ])->query(function (Builder $query, array $data) { return $query->when($data['id'], fn (Builder $query, $id) => $query->where("id", $id)); }) , - Tables\Filters\SelectFilter::make('class')->options(array_column(User::$classes, 'text'))->label(__('label.user.class')), - Tables\Filters\SelectFilter::make('status')->options(['confirmed' => 'confirmed', 'pending' => 'pending'])->label(__('label.user.status')), - Tables\Filters\SelectFilter::make('enabled')->options(self::$yesOrNo)->label(__('label.user.enabled')), - Tables\Filters\SelectFilter::make('downloadpos')->options(self::$yesOrNo)->label(__('label.user.downloadpos')), - Tables\Filters\SelectFilter::make('parked')->options(self::$yesOrNo)->label(__('label.user.parked')), + SelectFilter::make('class')->options(array_column(User::$classes, 'text'))->label(__('label.user.class')), + SelectFilter::make('status')->options(['confirmed' => 'confirmed', 'pending' => 'pending'])->label(__('label.user.status')), + SelectFilter::make('enabled')->options(self::$yesOrNo)->label(__('label.user.enabled')), + SelectFilter::make('downloadpos')->options(self::$yesOrNo)->label(__('label.user.downloadpos')), + SelectFilter::make('parked')->options(self::$yesOrNo)->label(__('label.user.parked')), ]) - ->actions([ - Tables\Actions\ViewAction::make(), + ->recordActions([ + ViewAction::make(), ]) - ->bulkActions(self::getBulkActions()); + ->toolbarActions(self::getBulkActions()); } - public static function infolist(Infolist $infolist): Infolist + public static function infolist(Schema $schema): Schema { - return $infolist - ->schema([ - Components\Grid::make(2)->schema([ - Components\Group::make([ - Infolists\Components\TextEntry::make('id')->label("UID"), - Infolists\Components\TextEntry::make('username') + return $schema + ->components([ + \Filament\Schemas\Components\Grid::make(2)->schema([ + Group::make([ + TextEntry::make('id')->label("UID"), + TextEntry::make('username') ->label(__("label.user.username")) ->formatStateUsing(fn ($record) => get_username($record->id, false, true, true, true)) ->html() , - Infolists\Components\TextEntry::make('email') + TextEntry::make('email') ->label(__("label.email")) ->copyable() ->placeholder("点击复制") , - Infolists\Components\TextEntry::make('passkey')->limit(10)->copyable(), - Infolists\Components\TextEntry::make('added')->label(__("label.added")), - Infolists\Components\TextEntry::make('last_access')->label(__("label.last_access")), - Infolists\Components\TextEntry::make('inviter.username')->label(__("label.user.invite_by")), - Infolists\Components\TextEntry::make('parked')->label(__("label.user.parked")), - Infolists\Components\TextEntry::make('offer_allowed_count')->label(__("label.user.offer_allowed_count")), - Infolists\Components\TextEntry::make('seed_points')->label(__("label.user.seed_points")), - Infolists\Components\TextEntry::make('uploadedText')->label(__("label.uploaded")), - Infolists\Components\TextEntry::make('downloadedText')->label(__("label.downloaded")), - Infolists\Components\TextEntry::make('seedbonus')->label(__("label.user.seedbonus")), - Infolists\Components\TextEntry::make('seed_points')->label(__("label.user.seed_points")), + TextEntry::make('passkey')->limit(10)->copyable(), + TextEntry::make('added')->label(__("label.added")), + TextEntry::make('last_access')->label(__("label.last_access")), + TextEntry::make('inviter.username')->label(__("label.user.invite_by")), + TextEntry::make('parked')->label(__("label.user.parked")), + TextEntry::make('offer_allowed_count')->label(__("label.user.offer_allowed_count")), + TextEntry::make('seed_points')->label(__("label.user.seed_points")), + TextEntry::make('uploadedText')->label(__("label.uploaded")), + TextEntry::make('downloadedText')->label(__("label.downloaded")), + TextEntry::make('seedbonus')->label(__("label.user.seedbonus")), + TextEntry::make('seed_points')->label(__("label.user.seed_points")), ]) ->columns(6) ->columnSpan(4) , - Components\Group::make([ - Infolists\Components\TextEntry::make('status') + Group::make([ + TextEntry::make('status') ->label(__('label.user.status')) ->badge() ->colors(['success' => User::STATUS_CONFIRMED, 'warning' => User::STATUS_PENDING]) ->hintAction(self::buildActionConfirm()) , - Infolists\Components\TextEntry::make('classText') + TextEntry::make('classText') ->label(__("label.user.class")) ->hintAction(self::buildActionChangeClass()) , - Infolists\Components\TextEntry::make('enabled') + TextEntry::make('enabled') ->label(__("label.user.enabled")) ->badge() ->colors(['success' => 'yes', 'warning' => 'no']) ->hintAction(self::buildActionEnableDisable()) , - Infolists\Components\TextEntry::make('downloadpos') + TextEntry::make('downloadpos') ->label(__("label.user.downloadpos")) ->badge() ->colors(['success' => 'yes', 'warning' => 'no']) ->hintAction(self::buildActionChangeDownloadPos()) , - Infolists\Components\TextEntry::make('twoFactorAuthenticationStatus') + TextEntry::make('twoFactorAuthenticationStatus') ->label(__("label.user.two_step_authentication")) ->badge() ->colors(['success' => 'yes', 'warning' => 'no']) @@ -186,34 +204,34 @@ class UserResource extends Resource ]); } - private static function buildActionChangeClass(): Infolists\Components\Actions\Action + private static function buildActionChangeClass(): Action { - return Infolists\Components\Actions\Action::make("changeClass") + return Action::make("changeClass") ->label(__('label.change')) ->button() ->visible(fn (User $record): bool => (Auth::user()->class > $record->class)) - ->form([ - Forms\Components\Select::make('class') + ->schema([ + Select::make('class') ->options(User::listClass(User::CLASS_PEASANT, Auth::user()->class - 1)) ->default(fn (User $record) => $record->class) ->label(__('user.labels.class')) ->required() ->reactive() , - Forms\Components\Radio::make('vip_added') + Radio::make('vip_added') ->options(self::getYesNoOptions('yes', 'no')) ->default(fn (User $record) => $record->vip_added) ->label(__('user.labels.vip_added')) ->helperText(__('user.labels.vip_added_help')) - ->hidden(fn (\Filament\Forms\Get $get) => $get('class') != User::CLASS_VIP) + ->hidden(fn (Get $get) => $get('class') != User::CLASS_VIP) , - Forms\Components\DateTimePicker::make('vip_until') + DateTimePicker::make('vip_until') ->default(fn (User $record) => $record->vip_until) ->label(__('user.labels.vip_until')) ->helperText(__('user.labels.vip_until_help')) - ->hidden(fn (\Filament\Forms\Get $get) => $get('class') != User::CLASS_VIP) + ->hidden(fn (Get $get) => $get('class') != User::CLASS_VIP) , - Forms\Components\TextInput::make('reason') + TextInput::make('reason') ->label(__('admin.resources.user.actions.enable_disable_reason')) ->placeholder(__('admin.resources.user.actions.enable_disable_reason_placeholder')) , @@ -223,15 +241,15 @@ class UserResource extends Resource try { $userRep->changeClass(Auth::user(), $record, $data['class'], $data['reason'], $data); send_admin_success_notification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } }); } - private static function buildActionConfirm(): Infolists\Components\Actions\Action + private static function buildActionConfirm(): Action { - return Infolists\Components\Actions\Action::make(__('admin.resources.user.actions.confirm_btn')) + return Action::make(__('admin.resources.user.actions.confirm_btn')) ->modalHeading(__('admin.resources.user.actions.confirm_btn')) ->requiresConfirmation() ->visible(fn (User $record): bool => (Auth::user()->class > $record->class)) @@ -250,17 +268,17 @@ class UserResource extends Resource }); } - private static function buildActionEnableDisable(): Infolists\Components\Actions\Action + private static function buildActionEnableDisable(): Action { - return Infolists\Components\Actions\Action::make("changeClass") + return Action::make("changeClass") ->label(fn (User $record) => $record->enabled == 'yes' ? __('admin.resources.user.actions.disable_modal_btn') : __('admin.resources.user.actions.enable_modal_btn')) ->modalHeading(fn (User $record) => $record->enabled == 'yes' ? __('admin.resources.user.actions.disable_modal_title') : __('admin.resources.user.actions.enable_modal_title')) ->button() ->visible(fn (User $record): bool => (Auth::user()->class > $record->class)) - ->form([ - Forms\Components\TextInput::make('reason')->label(__('admin.resources.user.actions.enable_disable_reason'))->placeholder(__('admin.resources.user.actions.enable_disable_reason_placeholder')), - Forms\Components\Hidden::make('action')->default(fn (User $record) => $record->enabled == 'yes' ? 'disable' : 'enable'), - Forms\Components\Hidden::make('uid')->default(fn (User $record) => $record->id), + ->schema([ + TextInput::make('reason')->label(__('admin.resources.user.actions.enable_disable_reason'))->placeholder(__('admin.resources.user.actions.enable_disable_reason_placeholder')), + Hidden::make('action')->default(fn (User $record) => $record->enabled == 'yes' ? 'disable' : 'enable'), + Hidden::make('uid')->default(fn (User $record) => $record->id), ]) ->action(function (User $record, array $data) { $userRep = self::getRep(); @@ -271,15 +289,15 @@ class UserResource extends Resource $userRep->disableUser(Auth::user(), $data['uid'], $data['reason']); } send_admin_success_notification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } }); } - private static function buildActionChangeDownloadPos(): Infolists\Components\Actions\Action + private static function buildActionChangeDownloadPos(): Action { - return Infolists\Components\Actions\Action::make("changeDownloadPos") + return Action::make("changeDownloadPos") ->label(fn (User $record) => $record->downloadpos == 'yes' ? __('admin.resources.user.actions.disable_download_privileges_btn') : __('admin.resources.user.actions.enable_download_privileges_btn')) ->button() ->requiresConfirmation() @@ -289,16 +307,16 @@ class UserResource extends Resource try { $userRep->updateDownloadPrivileges(Auth::user(), $record->id, $record->downloadpos == 'yes' ? 'no' : 'yes'); send_admin_success_notification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } }); } - private static function buildActionCancelTwoStepAuthentication(): Infolists\Components\Actions\Action + private static function buildActionCancelTwoStepAuthentication(): Action { - return Infolists\Components\Actions\Action::make("twoStepAuthentication") + return Action::make("twoStepAuthentication") ->label(__('admin.resources.user.actions.disable_two_step_authentication')) ->button() ->visible(fn (User $record) => $record->two_step_secret != "") @@ -309,7 +327,7 @@ class UserResource extends Resource try { $userRep->removeTwoStepAuthentication(Auth::user(), $record->id); send_admin_success_notification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } }); @@ -326,11 +344,11 @@ class UserResource extends Resource public static function getPages(): array { return [ - 'index' => Pages\ListUsers::route('/'), - 'create' => Pages\CreateUser::route('/create'), + 'index' => ListUsers::route('/'), + 'create' => CreateUser::route('/create'), // 'edit' => Pages\EditUser::route('/{record}/edit'), // 'view' => Pages\ViewUser::route('/{record}'), - 'view' => Pages\UserProfile::route('/{record}'), + 'view' => UserProfile::route('/{record}'), ]; } @@ -338,7 +356,7 @@ class UserResource extends Resource { $actions = []; if (filament()->auth()->user()->class >= User::CLASS_SYSOP) { - $actions[] = Tables\Actions\BulkAction::make('confirm') + $actions[] = BulkAction::make('confirm') ->label(__('admin.resources.user.actions.confirm_bulk')) ->requiresConfirmation() ->deselectRecordsAfterCompletion() diff --git a/app/Filament/Resources/User/UserResource/Pages/CreateUser.php b/app/Filament/Resources/User/UserResource/Pages/CreateUser.php index 7a6e28a5..0f72acd2 100644 --- a/app/Filament/Resources/User/UserResource/Pages/CreateUser.php +++ b/app/Filament/Resources/User/UserResource/Pages/CreateUser.php @@ -2,13 +2,15 @@ namespace App\Filament\Resources\User\UserResource\Pages; +use Filament\Actions\Contracts\HasActions; +use Exception; use App\Filament\Resources\User\UserResource; use App\Repositories\UserRepository; use Filament\Pages\Actions; use Filament\Resources\Pages\CreateRecord; use Illuminate\Database\Eloquent\Model; -class CreateUser extends CreateRecord +class CreateUser extends CreateRecord implements HasActions { protected static string $resource = UserResource::class; @@ -20,7 +22,7 @@ class CreateUser extends CreateRecord $this->record = $userRep->store($data); send_admin_success_notification(); $this->redirect($this->getRedirectUrl()); - } catch (\Exception $exception) { + } catch (Exception $exception) { send_admin_fail_notification($exception->getMessage()); } } diff --git a/app/Filament/Resources/User/UserResource/Pages/EditUser.php b/app/Filament/Resources/User/UserResource/Pages/EditUser.php index 0a8532c0..e923b5e5 100644 --- a/app/Filament/Resources/User/UserResource/Pages/EditUser.php +++ b/app/Filament/Resources/User/UserResource/Pages/EditUser.php @@ -2,18 +2,20 @@ namespace App\Filament\Resources\User\UserResource\Pages; +use Filament\Actions\Contracts\HasActions; +use Filament\Actions\DeleteAction; use App\Filament\Resources\User\UserResource; use Filament\Pages\Actions; use Filament\Resources\Pages\EditRecord; -class EditUser extends EditRecord +class EditUser extends EditRecord implements HasActions { protected static string $resource = UserResource::class; protected function getHeaderActions(): array { return [ - Actions\DeleteAction::make(), + DeleteAction::make(), ]; } } diff --git a/app/Filament/Resources/User/UserResource/Pages/ListUsers.php b/app/Filament/Resources/User/UserResource/Pages/ListUsers.php index 0dbd3cf1..559c3b0d 100644 --- a/app/Filament/Resources/User/UserResource/Pages/ListUsers.php +++ b/app/Filament/Resources/User/UserResource/Pages/ListUsers.php @@ -2,6 +2,9 @@ namespace App\Filament\Resources\User\UserResource\Pages; +use Filament\Actions\Contracts\HasActions; +use Filament\Actions\CreateAction; +use Filament\Tables\Enums\FiltersLayout; use App\Filament\PageList; use App\Filament\Resources\User\UserResource; use Filament\Pages\Actions; @@ -9,14 +12,14 @@ use Filament\Resources\Pages\ListRecords; use Illuminate\Database\Eloquent\Model; use Filament\Tables\Filters\Layout; -class ListUsers extends PageList +class ListUsers extends PageList implements HasActions { protected static string $resource = UserResource::class; protected function getHeaderActions(): array { return [ - Actions\CreateAction::make(), + CreateAction::make(), ]; } @@ -28,7 +31,7 @@ class ListUsers extends PageList protected function getTableFiltersLayout(): ?string { - return \Filament\Tables\Enums\FiltersLayout::AboveContent; + return FiltersLayout::AboveContent; } } diff --git a/app/Filament/Resources/User/UserResource/Pages/UserProfile.php b/app/Filament/Resources/User/UserResource/Pages/UserProfile.php index fb157bdd..428bdf8e 100644 --- a/app/Filament/Resources/User/UserResource/Pages/UserProfile.php +++ b/app/Filament/Resources/User/UserResource/Pages/UserProfile.php @@ -2,6 +2,16 @@ namespace App\Filament\Resources\User\UserResource\Pages; +use Filament\Actions\Contracts\HasActions; +use Filament\Actions\Action; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\Hidden; +use Exception; +use Filament\Forms\Components\Radio; +use Filament\Schemas\Components\Utilities\Get; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\DateTimePicker; +use Filament\Actions\DeleteAction; use App\Filament\OptionsTrait; use App\Filament\Resources\User\UserResource; use App\Models\Exam; @@ -23,7 +33,7 @@ use Filament\Resources\Pages\ViewRecord; use Illuminate\Support\Facades\Auth; use Nexus\Database\NexusDB; -class UserProfile extends ViewRecord +class UserProfile extends ViewRecord implements HasActions { use InteractsWithRecord; use HasRelationManagers; @@ -71,15 +81,15 @@ class UserProfile extends ViewRecord return $actions; } - private function buildEnableDisableAction(): Actions\Action + private function buildEnableDisableAction(): Action { - return Actions\Action::make('enable_disable') + return Action::make('enable_disable') ->label($this->record->enabled == 'yes' ? __('admin.resources.user.actions.disable_modal_btn') : __('admin.resources.user.actions.enable_modal_btn')) ->modalHeading($this->record->enabled == 'yes' ? __('admin.resources.user.actions.disable_modal_title') : __('admin.resources.user.actions.enable_modal_title')) - ->form([ - Forms\Components\TextInput::make('reason')->label(__('admin.resources.user.actions.enable_disable_reason'))->placeholder(__('admin.resources.user.actions.enable_disable_reason_placeholder')), - Forms\Components\Hidden::make('action')->default($this->record->enabled == 'yes' ? 'disable' : 'enable'), - Forms\Components\Hidden::make('uid')->default($this->record->id), + ->schema([ + TextInput::make('reason')->label(__('admin.resources.user.actions.enable_disable_reason'))->placeholder(__('admin.resources.user.actions.enable_disable_reason_placeholder')), + Hidden::make('action')->default($this->record->enabled == 'yes' ? 'disable' : 'enable'), + Hidden::make('uid')->default($this->record->id), ]) // ->visible(false) // ->hidden(true) @@ -92,15 +102,15 @@ class UserProfile extends ViewRecord $userRep->disableUser(Auth::user(), $data['uid'], $data['reason']); } $this->sendSuccessNotification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { $this->sendFailNotification($exception->getMessage()); } }); } - private function buildDisableTwoStepAuthenticationAction(): Actions\Action + private function buildDisableTwoStepAuthenticationAction(): Action { - return Actions\Action::make(__('admin.resources.user.actions.disable_two_step_authentication')) + return Action::make(__('admin.resources.user.actions.disable_two_step_authentication')) ->modalHeading(__('admin.resources.user.actions.disable_two_step_authentication')) ->requiresConfirmation() ->action(function ($data) { @@ -108,18 +118,18 @@ class UserProfile extends ViewRecord try { $userRep->removeTwoStepAuthentication(Auth::user(), $this->record->id); $this->sendSuccessNotification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { $this->sendFailNotification($exception->getMessage()); } }); } - private function buildChangeBonusEtcAction(): Actions\Action + private function buildChangeBonusEtcAction(): Action { - return Actions\Action::make(__('admin.resources.user.actions.change_bonus_etc_btn')) + return Action::make(__('admin.resources.user.actions.change_bonus_etc_btn')) ->modalHeading(__('admin.resources.user.actions.change_bonus_etc_btn')) - ->form([ - Forms\Components\Radio::make('field')->options([ + ->schema([ + Radio::make('field')->options([ 'uploaded' => __('label.user.uploaded'), 'downloaded' => __('label.user.downloaded'), 'invites' => __('label.user.invites'), @@ -132,7 +142,7 @@ class UserProfile extends ViewRecord ->required() ->reactive() , - Forms\Components\Radio::make('action')->options([ + Radio::make('action')->options([ 'Increment' => __("admin.resources.user.actions.change_bonus_etc_action_increment"), 'Decrement' => __("admin.resources.user.actions.change_bonus_etc_action_decrement"), ]) @@ -140,18 +150,18 @@ class UserProfile extends ViewRecord ->inline() ->required() , - Forms\Components\TextInput::make('value')->integer()->required() + TextInput::make('value')->integer()->required() ->label(__('admin.resources.user.actions.change_bonus_etc_value_label')) ->helperText(__('admin.resources.user.actions.change_bonus_etc_value_help')) , - Forms\Components\TextInput::make('duration')->integer() + TextInput::make('duration')->integer() ->label(__('admin.resources.user.actions.change_bonus_etc_duration_label')) ->helperText(__('admin.resources.user.actions.change_bonus_etc_duration_help')) - ->hidden(fn (\Filament\Forms\Get $get) => $get('field') != 'tmp_invites') + ->hidden(fn (Get $get) => $get('field') != 'tmp_invites') , - Forms\Components\TextInput::make('reason') + TextInput::make('reason') ->label(__('admin.resources.user.actions.change_bonus_etc_reason_label')) , ]) @@ -164,7 +174,7 @@ class UserProfile extends ViewRecord $userRep->incrementDecrement(Auth::user(), $this->record->id, $data['action'], $data['field'], $data['value'], $data['reason']); } $this->sendSuccessNotification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { $this->sendFailNotification($exception->getMessage()); } }); @@ -172,11 +182,11 @@ class UserProfile extends ViewRecord private function buildResetPasswordAction() { - return Actions\Action::make(__('admin.resources.user.actions.reset_password_btn')) + return Action::make(__('admin.resources.user.actions.reset_password_btn')) ->modalHeading(__('admin.resources.user.actions.reset_password_btn')) - ->form([ - Forms\Components\TextInput::make('password')->label(__('admin.resources.user.actions.reset_password_label'))->required(), - Forms\Components\TextInput::make('password_confirmation') + ->schema([ + TextInput::make('password')->label(__('admin.resources.user.actions.reset_password_label'))->required(), + TextInput::make('password_confirmation') ->label(__('admin.resources.user.actions.reset_password_confirmation_label')) ->same('password') ->required(), @@ -186,7 +196,7 @@ class UserProfile extends ViewRecord try { $userRep->resetPassword($this->record->id, $data['password'], $data['password_confirmation']); $this->sendSuccessNotification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { $this->sendFailNotification($exception->getMessage()); } }); @@ -194,14 +204,14 @@ class UserProfile extends ViewRecord private function buildAssignExamAction() { - return Actions\Action::make(__('admin.resources.user.actions.assign_exam_btn')) + return Action::make(__('admin.resources.user.actions.assign_exam_btn')) ->modalHeading(__('admin.resources.user.actions.assign_exam_btn')) - ->form([ - Forms\Components\Select::make('exam_id') + ->schema([ + Select::make('exam_id') ->options((new ExamRepository())->listMatchExam($this->record->id)->pluck('name', 'id')) ->label(__('admin.resources.user.actions.assign_exam_exam_label'))->required(), - Forms\Components\DateTimePicker::make('begin')->label(__('admin.resources.user.actions.assign_exam_begin_label')), - Forms\Components\DateTimePicker::make('end')->label(__('admin.resources.user.actions.assign_exam_end_label')) + DateTimePicker::make('begin')->label(__('admin.resources.user.actions.assign_exam_begin_label')), + DateTimePicker::make('end')->label(__('admin.resources.user.actions.assign_exam_end_label')) ->helperText(__('admin.resources.user.actions.assign_exam_end_help')), ]) @@ -210,7 +220,7 @@ class UserProfile extends ViewRecord try { $examRep->assignToUser($this->record->id, $data['exam_id'], $data['begin'], $data['end']); $this->sendSuccessNotification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { $this->sendFailNotification($exception->getMessage()); } }); @@ -218,15 +228,15 @@ class UserProfile extends ViewRecord private function buildGrantMedalAction() { - return Actions\Action::make(__('admin.resources.user.actions.grant_medal_btn')) + return Action::make(__('admin.resources.user.actions.grant_medal_btn')) ->modalHeading(__('admin.resources.user.actions.grant_medal_btn')) - ->form([ - Forms\Components\Select::make('medal_id') + ->schema([ + Select::make('medal_id') ->options(Medal::query()->pluck('name', 'id')) ->label(__('admin.resources.user.actions.grant_medal_medal_label')) ->required(), - Forms\Components\TextInput::make('duration') + TextInput::make('duration') ->label(__('admin.resources.user.actions.grant_medal_duration_label')) ->helperText(__('admin.resources.user.actions.grant_medal_duration_help')) ->integer(), @@ -237,7 +247,7 @@ class UserProfile extends ViewRecord try { $medalRep->grantToUser($this->record->id, $data['medal_id'], $data['duration']); $this->sendSuccessNotification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { $this->sendFailNotification($exception->getMessage()); } }); @@ -245,7 +255,7 @@ class UserProfile extends ViewRecord private function buildConfirmAction() { - return Actions\Action::make(__('admin.resources.user.actions.confirm_btn')) + return Action::make(__('admin.resources.user.actions.confirm_btn')) ->modalHeading(__('admin.resources.user.actions.confirm_btn')) ->requiresConfirmation() ->action(function () { @@ -261,9 +271,9 @@ class UserProfile extends ViewRecord } - private function buildEnableDisableDownloadPrivilegesAction(): Actions\Action + private function buildEnableDisableDownloadPrivilegesAction(): Action { - return Actions\Action::make($this->record->downloadpos == 'yes' ? __('admin.resources.user.actions.disable_download_privileges_btn') : __('admin.resources.user.actions.enable_download_privileges_btn')) + return Action::make($this->record->downloadpos == 'yes' ? __('admin.resources.user.actions.disable_download_privileges_btn') : __('admin.resources.user.actions.enable_download_privileges_btn')) // ->modalHeading($this->record->enabled == 'yes' ? __('admin.resources.user.actions.disable_modal_title') : __('admin.resources.user.actions.enable_modal_title')) ->requiresConfirmation() ->action(function () { @@ -271,7 +281,7 @@ class UserProfile extends ViewRecord try { $userRep->updateDownloadPrivileges(Auth::user(), $this->record->id, $this->record->downloadpos == 'yes' ? 'no' : 'yes'); $this->sendSuccessNotification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { $this->sendFailNotification($exception->getMessage()); } }); @@ -279,13 +289,13 @@ class UserProfile extends ViewRecord private function buildGrantPropsAction() { - return Actions\Action::make(__('admin.resources.user.actions.grant_prop_btn')) + return Action::make(__('admin.resources.user.actions.grant_prop_btn')) ->modalHeading(__('admin.resources.user.actions.grant_prop_btn')) - ->form([ - Forms\Components\Select::make('meta_key') + ->schema([ + Select::make('meta_key') ->options(UserMeta::listProps()) ->label(__('admin.resources.user.actions.grant_prop_form_prop'))->required(), - Forms\Components\TextInput::make('duration')->label(__('admin.resources.user.actions.grant_prop_form_duration')) + TextInput::make('duration')->label(__('admin.resources.user.actions.grant_prop_form_duration')) ->helperText(__('admin.resources.user.actions.grant_prop_form_duration_help')), ]) @@ -294,15 +304,15 @@ class UserProfile extends ViewRecord try { $rep->addMeta($this->record, $data, $data); $this->sendSuccessNotification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { $this->sendFailNotification($exception->getMessage()); } }); } - private function buildDeleteAction(): Actions\DeleteAction + private function buildDeleteAction(): DeleteAction { - return Actions\DeleteAction::make()->using(function () { + return DeleteAction::make()->using(function () { $this->getRep()->destroy($this->record->id); return redirect(self::$resource::getUrl('index')); }); @@ -344,32 +354,32 @@ class UserProfile extends ViewRecord ->count(); } - private function buildChangeClassAction(): Actions\Action + private function buildChangeClassAction(): Action { - return Actions\Action::make('change_class') + return Action::make('change_class') ->label(__('admin.resources.user.actions.change_class_btn')) - ->form([ - Forms\Components\Select::make('class') + ->schema([ + Select::make('class') ->options(User::listClass(User::CLASS_PEASANT, Auth::user()->class - 1)) ->default($this->record->class) ->label(__('user.labels.class')) ->required() ->reactive() , - Forms\Components\Radio::make('vip_added') + Radio::make('vip_added') ->options(self::getYesNoOptions('yes', 'no')) ->default($this->record->vip_added) ->label(__('user.labels.vip_added')) ->helperText(__('user.labels.vip_added_help')) - ->hidden(fn (\Filament\Forms\Get $get) => $get('class') != User::CLASS_VIP) + ->hidden(fn (Get $get) => $get('class') != User::CLASS_VIP) , - Forms\Components\DateTimePicker::make('vip_until') + DateTimePicker::make('vip_until') ->default($this->record->vip_until) ->label(__('user.labels.vip_until')) ->helperText(__('user.labels.vip_until_help')) - ->hidden(fn (\Filament\Forms\Get $get) => $get('class') != User::CLASS_VIP) + ->hidden(fn (Get $get) => $get('class') != User::CLASS_VIP) , - Forms\Components\TextInput::make('reason') + TextInput::make('reason') ->label(__('admin.resources.user.actions.enable_disable_reason')) ->placeholder(__('admin.resources.user.actions.enable_disable_reason_placeholder')) , @@ -379,7 +389,7 @@ class UserProfile extends ViewRecord try { $userRep->changeClass(Auth::user(), $this->record, $data['class'], $data['reason'], $data); $this->sendSuccessNotification(); - } catch (\Exception $exception) { + } catch (Exception $exception) { $this->sendFailNotification($exception->getMessage()); } }); diff --git a/app/Filament/Resources/User/UserResource/Pages/ViewUser.php b/app/Filament/Resources/User/UserResource/Pages/ViewUser.php index 64857ce0..6b572000 100644 --- a/app/Filament/Resources/User/UserResource/Pages/ViewUser.php +++ b/app/Filament/Resources/User/UserResource/Pages/ViewUser.php @@ -2,11 +2,12 @@ namespace App\Filament\Resources\User\UserResource\Pages; +use Filament\Actions\Contracts\HasActions; use App\Filament\Resources\User\UserResource; use Filament\Pages\Actions; use Filament\Resources\Pages\ViewRecord; -class ViewUser extends ViewRecord +class ViewUser extends ViewRecord implements HasActions { protected static string $resource = UserResource::class; } diff --git a/app/Filament/Resources/User/UserResource/RelationManagers/MedalsRelationManager.php b/app/Filament/Resources/User/UserResource/RelationManagers/MedalsRelationManager.php index 9dd5aca5..8393bacf 100644 --- a/app/Filament/Resources/User/UserResource/RelationManagers/MedalsRelationManager.php +++ b/app/Filament/Resources/User/UserResource/RelationManagers/MedalsRelationManager.php @@ -2,25 +2,31 @@ namespace App\Filament\Resources\User\UserResource\RelationManagers; +use Filament\Actions\Contracts\HasActions; +use Filament\Schemas\Schema; +use Filament\Forms\Components\TextInput; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\ImageColumn; +use Filament\Actions\DeleteAction; +use Filament\Actions\DeleteBulkAction; use Filament\Forms; -use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables\Table; use Filament\Tables; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; -class MedalsRelationManager extends RelationManager +class MedalsRelationManager extends RelationManager implements HasActions { protected static string $relationship = 'medals'; protected static ?string $recordTitleAttribute = 'name'; - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name') + return $schema + ->components([ + TextInput::make('name') ->required() ->maxLength(255), ]); @@ -30,9 +36,9 @@ class MedalsRelationManager extends RelationManager { return $table ->columns([ - Tables\Columns\TextColumn::make('name')->label(__('label.name')), - Tables\Columns\ImageColumn::make('image_large')->label(__('label.image')), - Tables\Columns\ImageColumn::make('expire_at')->label(__('label.expire_at')), + TextColumn::make('name')->label(__('label.name')), + ImageColumn::make('image_large')->label(__('label.image')), + ImageColumn::make('expire_at')->label(__('label.expire_at')), ]) ->filters([ // @@ -40,12 +46,12 @@ class MedalsRelationManager extends RelationManager ->headerActions([ // Tables\Actions\CreateAction::make(), ]) - ->actions([ + ->recordActions([ // Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + DeleteBulkAction::make(), ]); } } diff --git a/app/Filament/Widgets/AccountInfo.php b/app/Filament/Widgets/AccountInfo.php index f4a50602..0ecd627a 100644 --- a/app/Filament/Widgets/AccountInfo.php +++ b/app/Filament/Widgets/AccountInfo.php @@ -6,7 +6,7 @@ use Filament\Widgets\Widget; class AccountInfo extends Widget { - protected static string $view = 'filament.widgets.account-info'; + protected string $view = 'filament.widgets.account-info'; protected int | string | array $columnSpan = 'full'; } diff --git a/app/Filament/Widgets/AnnounceMonitor/MaxUploadedUser.php b/app/Filament/Widgets/AnnounceMonitor/MaxUploadedUser.php index 64ec4e8e..142c1f87 100644 --- a/app/Filament/Widgets/AnnounceMonitor/MaxUploadedUser.php +++ b/app/Filament/Widgets/AnnounceMonitor/MaxUploadedUser.php @@ -2,6 +2,8 @@ namespace App\Filament\Widgets\AnnounceMonitor; +use Filament\Actions\Contracts\HasActions; +use Filament\Tables\Columns\TextColumn; use App\Models\AnnounceLog; use App\Repositories\AnnounceLogRepository; use Filament\Tables; @@ -12,7 +14,7 @@ use Illuminate\Contracts\Pagination\Paginator; use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\HtmlString; -class MaxUploadedUser extends BaseWidget +class MaxUploadedUser extends BaseWidget implements HasActions { public function table(Table $table): Table { @@ -22,11 +24,11 @@ class MaxUploadedUser extends BaseWidget ->query(AnnounceLog::query()) ->defaultPaginationPageOption(null) ->columns([ - Tables\Columns\TextColumn::make('user_id') + TextColumn::make('user_id') ->label(__('announce-log.user_id')) ->formatStateUsing(fn ($state) => username_for_admin($state)) , - Tables\Columns\TextColumn::make('uploaded_total') + TextColumn::make('uploaded_total') ->label(__('announce-log.uploaded_total')) ->formatStateUsing(fn ($state) => mksize($state)) , diff --git a/app/Filament/Widgets/LatestTorrents.php b/app/Filament/Widgets/LatestTorrents.php index 6d0db610..3952848e 100644 --- a/app/Filament/Widgets/LatestTorrents.php +++ b/app/Filament/Widgets/LatestTorrents.php @@ -2,6 +2,8 @@ namespace App\Filament\Widgets; +use Filament\Actions\Contracts\HasActions; +use Filament\Tables\Columns\TextColumn; use App\Models\Torrent; use Closure; use Filament\Tables; @@ -9,7 +11,7 @@ use Filament\Widgets\TableWidget as BaseWidget; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Database\Eloquent\Builder; -class LatestTorrents extends BaseWidget +class LatestTorrents extends BaseWidget implements HasActions { protected static ?int $sort = 2; @@ -31,16 +33,16 @@ class LatestTorrents extends BaseWidget protected function getTableColumns(): array { return [ - Tables\Columns\TextColumn::make('name') + TextColumn::make('name') ->label(__('label.name')) ->formatStateUsing(fn ($record) => torrent_name_for_admin($record, false, 30)) , - Tables\Columns\TextColumn::make('owner') + TextColumn::make('owner') ->label(__('label.torrent.owner')) ->formatStateUsing(fn ($state) => username_for_admin($state)) , - Tables\Columns\TextColumn::make('size')->formatStateUsing(fn ($state) => mksize($state))->label(__('label.torrent.size')), - Tables\Columns\TextColumn::make('added')->dateTime()->label(__('label.added')), + TextColumn::make('size')->formatStateUsing(fn ($state) => mksize($state))->label(__('label.torrent.size')), + TextColumn::make('added')->dateTime()->label(__('label.added')), ]; } } diff --git a/app/Filament/Widgets/LatestUsers.php b/app/Filament/Widgets/LatestUsers.php index c16173f3..1ea47dd7 100644 --- a/app/Filament/Widgets/LatestUsers.php +++ b/app/Filament/Widgets/LatestUsers.php @@ -2,6 +2,9 @@ namespace App\Filament\Widgets; +use Filament\Actions\Contracts\HasActions; +use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\BadgeColumn; use App\Models\User; use Closure; use Filament\Tables; @@ -9,7 +12,7 @@ use Filament\Widgets\TableWidget as BaseWidget; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Database\Eloquent\Builder; -class LatestUsers extends BaseWidget +class LatestUsers extends BaseWidget implements HasActions { protected static ?int $sort = 1; @@ -31,13 +34,13 @@ class LatestUsers extends BaseWidget protected function getTableColumns(): array { return [ - Tables\Columns\TextColumn::make('id') + TextColumn::make('id') ->label(__('label.user.username')) ->formatStateUsing(fn ($state) => username_for_admin($state)) , - Tables\Columns\TextColumn::make('email')->label(__('label.email')), - Tables\Columns\BadgeColumn::make('status')->colors(['success' => 'confirmed', 'danger' => 'pending'])->label(__('label.status')), - Tables\Columns\TextColumn::make('added')->dateTime()->label(__('label.added')), + TextColumn::make('email')->label(__('label.email')), + BadgeColumn::make('status')->colors(['success' => 'confirmed', 'danger' => 'pending'])->label(__('label.status')), + TextColumn::make('added')->dateTime()->label(__('label.added')), ]; } } diff --git a/app/Filament/Widgets/TorrentTrend.php b/app/Filament/Widgets/TorrentTrend.php index 0eb975dd..2b946790 100644 --- a/app/Filament/Widgets/TorrentTrend.php +++ b/app/Filament/Widgets/TorrentTrend.php @@ -12,7 +12,7 @@ class TorrentTrend extends LineChartWidget { protected static ?int $sort = 4; - protected static ?string $pollingInterval = null; + protected ?string $pollingInterval = null; public function getHeading(): ?string { diff --git a/app/Filament/Widgets/UserTrend.php b/app/Filament/Widgets/UserTrend.php index 6cc9eb1d..baab183e 100644 --- a/app/Filament/Widgets/UserTrend.php +++ b/app/Filament/Widgets/UserTrend.php @@ -14,7 +14,7 @@ class UserTrend extends LineChartWidget protected static ?int $sort = 3; - protected static ?string $pollingInterval = null; + protected ?string $pollingInterval = null; public function getHeading(): ?string {