Collection of smaller v4 fixes (#1684)

Co-authored-by: RMartinOscar <40749467+RMartinOscar@users.noreply.github.com>
Co-authored-by: notCharles <charles@pelican.dev>
This commit is contained in:
Boy132 2025-09-15 23:28:57 +02:00 committed by GitHub
parent cba8717188
commit d5d50d4150
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
58 changed files with 329 additions and 675 deletions

View File

@ -0,0 +1,27 @@
<?php
namespace App\Enums;
use Filament\Support\Contracts\HasColor;
use Filament\Support\Contracts\HasLabel;
enum ScheduleStatus: string implements HasColor, HasLabel
{
case Inactive = 'inactive';
case Processing = 'processing';
case Active = 'active';
public function getColor(): string
{
return match ($this) {
self::Inactive => 'danger',
self::Processing => 'warning',
self::Active => 'success',
};
}
public function getLabel(): string
{
return trans('server/schedule.schedule_status.' . $this->value);
}
}

View File

@ -73,9 +73,8 @@ class GSLTokenSchema implements FeatureSchemaInterface
} }
}, },
]) ])
->hintIcon('tabler-code') ->hintIcon('tabler-code', fn () => implode('|', $serverVariable->variable->rules))
->label(fn () => $serverVariable->variable->name) ->label(fn () => $serverVariable->variable->name)
->hintIconTooltip(fn () => implode('|', $serverVariable->variable->rules))
->prefix(fn () => '{{' . $serverVariable->variable->env_variable . '}}') ->prefix(fn () => '{{' . $serverVariable->variable->env_variable . '}}')
->helperText(fn () => empty($serverVariable->variable->description) ? '—' : $serverVariable->variable->description), ->helperText(fn () => empty($serverVariable->variable->description) ? '—' : $serverVariable->variable->description),
]) ])

View File

@ -153,14 +153,12 @@ class Settings extends Page implements HasSchemas
->schema([ ->schema([
TextInput::make('APP_LOGO') TextInput::make('APP_LOGO')
->label(trans('admin/setting.general.app_logo')) ->label(trans('admin/setting.general.app_logo'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/setting.general.app_logo_help'))
->hintIconTooltip(trans('admin/setting.general.app_logo_help'))
->default(env('APP_LOGO')) ->default(env('APP_LOGO'))
->placeholder('/pelican.svg'), ->placeholder('/pelican.svg'),
TextInput::make('APP_FAVICON') TextInput::make('APP_FAVICON')
->label(trans('admin/setting.general.app_favicon')) ->label(trans('admin/setting.general.app_favicon'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/setting.general.app_favicon_help'))
->hintIconTooltip(trans('admin/setting.general.app_favicon_help'))
->required() ->required()
->default(env('APP_FAVICON', '/pelican.ico')) ->default(env('APP_FAVICON', '/pelican.ico'))
->placeholder('/pelican.ico'), ->placeholder('/pelican.ico'),

View File

@ -143,7 +143,7 @@ class DatabaseHostResource extends Resource
->maxValue(65535), ->maxValue(65535),
TextInput::make('max_databases') TextInput::make('max_databases')
->label(trans('admin/databasehost.max_database')) ->label(trans('admin/databasehost.max_database'))
->helpertext(trans('admin/databasehost.max_databases_help')) ->helperText(trans('admin/databasehost.max_databases_help'))
->numeric(), ->numeric(),
TextInput::make('name') TextInput::make('name')
->label(trans('admin/databasehost.display_name')) ->label(trans('admin/databasehost.display_name'))

View File

@ -143,7 +143,7 @@ class CreateDatabaseHost extends CreateRecord
->maxValue(65535), ->maxValue(65535),
TextInput::make('max_databases') TextInput::make('max_databases')
->label(trans('admin/databasehost.max_database')) ->label(trans('admin/databasehost.max_database'))
->helpertext(trans('admin/databasehost.max_databases_help')) ->helperText(trans('admin/databasehost.max_databases_help'))
->placeholder(trans('admin/databasehost.unlimited')) ->placeholder(trans('admin/databasehost.unlimited'))
->numeric(), ->numeric(),
TextInput::make('name') TextInput::make('name')

View File

@ -102,8 +102,7 @@ class CreateEgg extends CreateRecord
->columnSpan(['default' => 1, 'sm' => 1, 'md' => 1, 'lg' => 1]), ->columnSpan(['default' => 1, 'sm' => 1, 'md' => 1, 'lg' => 1]),
Toggle::make('force_outgoing_ip') Toggle::make('force_outgoing_ip')
->label(trans('admin/egg.force_ip')) ->label(trans('admin/egg.force_ip'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/egg.force_ip_help')),
->hintIconTooltip(trans('admin/egg.force_ip_help')),
Hidden::make('script_is_privileged') Hidden::make('script_is_privileged')
->default(1), ->default(1),
TagsInput::make('tags') TagsInput::make('tags')
@ -111,8 +110,7 @@ class CreateEgg extends CreateRecord
->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 2]), ->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 2]),
TextInput::make('update_url') TextInput::make('update_url')
->label(trans('admin/egg.update_url')) ->label(trans('admin/egg.update_url'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/egg.update_url_help'))
->hintIconTooltip(trans('admin/egg.update_url_help'))
->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 2]) ->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 2])
->url(), ->url(),
KeyValue::make('docker_images') KeyValue::make('docker_images')
@ -203,8 +201,7 @@ class CreateEgg extends CreateRecord
->maxLength(255) ->maxLength(255)
->prefix('{{') ->prefix('{{')
->suffix('}}') ->suffix('}}')
->hintIcon('tabler-code') ->hintIcon('tabler-code', fn ($state) => "{{{$state}}}")
->hintIconTooltip(fn ($state) => "{{{$state}}}")
->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id'))) ->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')))
->rules(EggVariable::getRulesForField('env_variable')) ->rules(EggVariable::getRulesForField('env_variable'))
->validationMessages([ ->validationMessages([

View File

@ -97,8 +97,7 @@ class EditEgg extends EditRecord
Toggle::make('force_outgoing_ip') Toggle::make('force_outgoing_ip')
->inline(false) ->inline(false)
->label(trans('admin/egg.force_ip')) ->label(trans('admin/egg.force_ip'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/egg.force_ip_help')),
->hintIconTooltip(trans('admin/egg.force_ip_help')),
Hidden::make('script_is_privileged') Hidden::make('script_is_privileged')
->helperText('The docker images available to servers using this egg.'), ->helperText('The docker images available to servers using this egg.'),
TagsInput::make('tags') TagsInput::make('tags')
@ -107,8 +106,7 @@ class EditEgg extends EditRecord
TextInput::make('update_url') TextInput::make('update_url')
->label(trans('admin/egg.update_url')) ->label(trans('admin/egg.update_url'))
->url() ->url()
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/egg.update_url_help'))
->hintIconTooltip(trans('admin/egg.update_url_help'))
->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 2]), ->columnSpan(['default' => 1, 'sm' => 1, 'md' => 2, 'lg' => 2]),
KeyValue::make('docker_images') KeyValue::make('docker_images')
->label(trans('admin/egg.docker_images')) ->label(trans('admin/egg.docker_images'))
@ -192,8 +190,7 @@ class EditEgg extends EditRecord
->maxLength(255) ->maxLength(255)
->prefix('{{') ->prefix('{{')
->suffix('}}') ->suffix('}}')
->hintIcon('tabler-code') ->hintIcon('tabler-code', fn ($state) => "{{{$state}}}")
->hintIconTooltip(fn ($state) => "{{{$state}}}")
->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id'))) ->unique(modifyRuleUsing: fn (Unique $rule, Get $get) => $rule->where('egg_id', $get('../../id')))
->rules(EggVariable::getRulesForField('env_variable')) ->rules(EggVariable::getRulesForField('env_variable'))
->validationMessages([ ->validationMessages([

View File

@ -226,8 +226,7 @@ class CreateNode extends CreateRecord
->label(trans('admin/node.maintenance_mode'))->inline() ->label(trans('admin/node.maintenance_mode'))->inline()
->columnSpan(1) ->columnSpan(1)
->default(false) ->default(false)
->hinticon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/node.maintenance_mode_help'))
->hintIconTooltip(trans('admin/node.maintenance_mode_help'))
->options([ ->options([
true => trans('admin/node.enabled'), true => trans('admin/node.enabled'),
false => trans('admin/node.disabled'), false => trans('admin/node.disabled'),
@ -254,8 +253,7 @@ class CreateNode extends CreateRecord
TextInput::make('upload_size') TextInput::make('upload_size')
->label(trans('admin/node.upload_limit')) ->label(trans('admin/node.upload_limit'))
->helperText(trans('admin/node.upload_limit_help.0')) ->helperText(trans('admin/node.upload_limit_help.0'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/node.upload_limit_help.1'))
->hintIconTooltip(trans('admin/node.upload_limit_help.1'))
->columnSpan(1) ->columnSpan(1)
->numeric()->required() ->numeric()->required()
->default(256) ->default(256)
@ -417,7 +415,7 @@ class CreateNode extends CreateRecord
protected function getRedirectUrlParameters(): array protected function getRedirectUrlParameters(): array
{ {
return [ return [
'tab' => '-configuration-file-tab', 'tab' => 'configuration-file::data::tab',
]; ];
} }

View File

@ -311,8 +311,7 @@ class EditNode extends EditRecord
'lg' => 1, 'lg' => 1,
]) ])
->label(trans('admin/node.upload_limit')) ->label(trans('admin/node.upload_limit'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/node.upload_limit_help.0') . trans('admin/node.upload_limit_help.1'))
->hintIconTooltip(trans('admin/node.upload_limit_help.0') . trans('admin/node.upload_limit_help.1'))
->numeric()->required() ->numeric()->required()
->minValue(1) ->minValue(1)
->maxValue(1024) ->maxValue(1024)
@ -366,8 +365,7 @@ class EditNode extends EditRecord
]) ])
->label(trans('admin/node.maintenance_mode')) ->label(trans('admin/node.maintenance_mode'))
->inline() ->inline()
->hinticon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/node.maintenance_mode_help'))
->hintIconTooltip(trans('admin/node.maintenance_mode_help'))
->stateCast(new BooleanStateCast(false, true)) ->stateCast(new BooleanStateCast(false, true))
->options([ ->options([
1 => trans('admin/node.enabled'), 1 => trans('admin/node.enabled'),

View File

@ -42,7 +42,7 @@ class AllocationsRelationManager extends RelationManager
return $table return $table
->recordTitleAttribute('address') ->recordTitleAttribute('address')
->checkIfRecordIsSelectableUsing(fn (Allocation $allocation) => $allocation->server_id === null) ->checkIfRecordIsSelectableUsing(fn (Allocation $allocation) => $allocation->server_id === null)
->paginationPageOptions(['10', '20', '50', '100', '200', '500']) ->paginationPageOptions([10, 20, 50, 100, 200, 500])
->searchable() ->searchable()
->heading('') ->heading('')
->selectCurrentPageOnly() //Prevent people from trying to nuke 30,000 ports at once.... -,- ->selectCurrentPageOnly() //Prevent people from trying to nuke 30,000 ports at once.... -,-

View File

@ -193,7 +193,7 @@ class RoleResource extends Resource
]) ])
->schema([ ->schema([
CheckboxList::make(strtolower($model) . '_list') CheckboxList::make(strtolower($model) . '_list')
->label('') ->hiddenLabel()
->options($options) ->options($options)
->columns() ->columns()
->gridDirection('row') ->gridDirection('row')

View File

@ -169,8 +169,7 @@ class CreateServer extends CreateRecord
TextInput::make('password') TextInput::make('password')
->label(trans('admin/user.password')) ->label(trans('admin/user.password'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/user.password_help'))
->hintIconTooltip(trans('admin/user.password_help'))
->password(), ->password(),
]) ])
->createOptionUsing(function ($data, UserCreationService $service) { ->createOptionUsing(function ($data, UserCreationService $service) {
@ -521,8 +520,7 @@ class CreateServer extends CreateRecord
->hidden(fn (Get $get) => $get('unlimited_mem')) ->hidden(fn (Get $get) => $get('unlimited_mem'))
->label(trans('admin/server.memory_limit'))->inlineLabel() ->label(trans('admin/server.memory_limit'))->inlineLabel()
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB') ->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/server.memory_helper'))
->hintIconToolTip(trans('admin/server.memory_helper'))
->default(0) ->default(0)
->required() ->required()
->columnSpan(2) ->columnSpan(2)

View File

@ -288,8 +288,7 @@ class EditServer extends EditRecord
->hidden(fn (Get $get) => $get('unlimited_mem')) ->hidden(fn (Get $get) => $get('unlimited_mem'))
->label(trans('admin/server.memory_limit'))->inlineLabel() ->label(trans('admin/server.memory_limit'))->inlineLabel()
->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB') ->suffix(config('panel.use_binary_prefix') ? 'MiB' : 'MB')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/server.memory_helper'))
->hintIconToolTip(trans('admin/server.memory_helper'))
->required() ->required()
->columnSpan(2) ->columnSpan(2)
->numeric() ->numeric()
@ -567,10 +566,10 @@ class EditServer extends EditRecord
Action::make('change_egg') Action::make('change_egg')
->label(trans('admin/server.change_egg')) ->label(trans('admin/server.change_egg'))
->action(function (array $data, Server $server, EggChangerService $service) { ->action(function (array $data, Server $server, EggChangerService $service) {
$service->handle($server, $data['egg_id'], $data['keepOldVariables']); $service->handle($server, $data['egg_id'], $data['keep_old_variables']);
// Use redirect instead of fillForm to prevent server variables from duplicating // Use redirect instead of fillForm to prevent server variables from duplicating
$this->redirect($this->getUrl(['record' => $server, 'tab' => '-egg-tab']), true); $this->redirect($this->getUrl(['record' => $server, 'tab' => 'egg::data::tab']), true);
}) })
->schema(fn (Server $server) => [ ->schema(fn (Server $server) => [
Select::make('egg_id') Select::make('egg_id')
@ -580,7 +579,7 @@ class EditServer extends EditRecord
->searchable() ->searchable()
->preload() ->preload()
->required(), ->required(),
Toggle::make('keepOldVariables') Toggle::make('keep_old_variables')
->label(trans('admin/server.keep_old_variables')) ->label(trans('admin/server.keep_old_variables'))
->default(true), ->default(true),
]) ])
@ -793,7 +792,7 @@ class EditServer extends EditRecord
Action::make('transfer') Action::make('transfer')
->label(trans('admin/server.transfer')) ->label(trans('admin/server.transfer'))
->disabled(fn (Server $server) => Node::count() <= 1 || $server->isInConflictState()) ->disabled(fn (Server $server) => Node::count() <= 1 || $server->isInConflictState())
->modalheading(trans('admin/server.transfer')) ->modalHeading(trans('admin/server.transfer'))
->schema($this->transferServer()) ->schema($this->transferServer())
->action(function (TransferServerService $transfer, Server $server, $data) { ->action(function (TransferServerService $transfer, Server $server, $data) {
try { try {

View File

@ -130,26 +130,23 @@ class DatabasesRelationManager extends RelationManager
Select::make('database_host_id') Select::make('database_host_id')
->label(trans('admin/databasehost.model_label')) ->label(trans('admin/databasehost.model_label'))
->required() ->required()
->placeholder(trans('admin/databasehost.table.select_placeholder'))
->options(fn () => DatabaseHost::query() ->options(fn () => DatabaseHost::query()
->whereHas('nodes', fn ($query) => $query->where('nodes.id', $this->getOwnerRecord()->node_id)) ->whereHas('nodes', fn ($query) => $query->where('nodes.id', $this->getOwnerRecord()->node_id))
->pluck('name', 'id') ->pluck('name', 'id')
) )
->default(fn () => (DatabaseHost::query()->first())?->id) ->selectablePlaceholder(false)
->selectablePlaceholder(false), ->default(fn () => (DatabaseHost::query()->first())?->id),
TextInput::make('database') TextInput::make('database')
->label(trans('admin/server.name')) ->label(trans('admin/server.name'))
->alphaDash() ->alphaDash()
->prefix(fn () => 's' . $this->getOwnerRecord()->id . '_') ->prefix(fn () => 's' . $this->getOwnerRecord()->id . '_')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/databasehost.table.name_helper')),
->hintIconTooltip(trans('admin/databasehost.table.name_helper')),
TextInput::make('remote') TextInput::make('remote')
->columnSpan(1) ->columnSpan(1)
->regex('/^[\w\-\/.%:]+$/') ->regex('/^[\w\-\/.%:]+$/')
->label(trans('admin/databasehost.table.remote')) ->label(trans('admin/databasehost.table.remote'))
->default('%') ->default('%')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('admin/databasehost.table.remote_helper')),
->hintIconTooltip(trans('admin/databasehost.table.remote_helper')),
]), ]),
]); ]);
} }

View File

@ -71,7 +71,7 @@ class ServerResource extends Resource
} }
return CheckboxList::make('mounts') return CheckboxList::make('mounts')
->label('') ->hiddenLabel()
->relationship('mounts') ->relationship('mounts')
->live() ->live()
->options(fn () => $allowedMounts->mapWithKeys(fn ($mount) => [$mount->id => $mount->name])) ->options(fn () => $allowedMounts->mapWithKeys(fn ($mount) => [$mount->id => $mount->name]))

View File

@ -140,8 +140,7 @@ class UserResource extends Resource
->maxLength(255), ->maxLength(255),
TextInput::make('password') TextInput::make('password')
->label(trans('admin/user.password')) ->label(trans('admin/user.password'))
->hintIcon(fn ($operation) => $operation === 'create' ? 'tabler-question-mark' : null) ->hintIcon(fn ($operation) => $operation === 'create' ? 'tabler-question-mark' : null, fn ($operation) => $operation === 'create' ? trans('admin/user.password_help') : null)
->hintIconTooltip(fn ($operation) => $operation === 'create' ? trans('admin/user.password_help') : null)
->password(), ->password(),
CheckboxList::make('roles') CheckboxList::make('roles')
->hidden(fn (?User $user) => $user && $user->isRootAdmin()) ->hidden(fn (?User $user) => $user && $user->isRootAdmin())

View File

@ -216,7 +216,7 @@ class ListServers extends ListRecords
cache()->forget("servers.$server->uuid.status"); cache()->forget("servers.$server->uuid.status");
$this->redirect(self::getUrl(['activeTab' => $this->activeTab])); $this->redirect(self::getUrl(['tab' => $this->activeTab]));
} catch (ConnectionException) { } catch (ConnectionException) {
Notification::make() Notification::make()
->title(trans('exceptions.node.error_connecting', ['node' => $server->node->name])) ->title(trans('exceptions.node.error_connecting', ['node' => $server->node->name]))
@ -233,26 +233,26 @@ class ListServers extends ListRecords
->color('primary') ->color('primary')
->icon('tabler-player-play-filled') ->icon('tabler-player-play-filled')
->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_START, $server)) ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_START, $server))
->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isStartable()) ->visible(fn (Server $server) => !$server->isInConflictState() && $server->retrieveStatus()->isStartable())
->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'start']), ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'start']),
Action::make('restart') Action::make('restart')
->color('gray') ->color('gray')
->icon('tabler-reload') ->icon('tabler-reload')
->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_RESTART, $server)) ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_RESTART, $server))
->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isRestartable()) ->visible(fn (Server $server) => !$server->isInConflictState() && $server->retrieveStatus()->isRestartable())
->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'restart']), ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'restart']),
Action::make('stop') Action::make('stop')
->color('danger') ->color('danger')
->icon('tabler-player-stop-filled') ->icon('tabler-player-stop-filled')
->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server)) ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server))
->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isStoppable()) ->visible(fn (Server $server) => !$server->isInConflictState() && $server->retrieveStatus()->isStoppable())
->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'stop']), ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'stop']),
Action::make('kill') Action::make('kill')
->color('danger') ->color('danger')
->icon('tabler-alert-square') ->icon('tabler-alert-square')
->tooltip('This can result in data corruption and/or data loss!') ->tooltip('This can result in data corruption and/or data loss!')
->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server)) ->authorize(fn (Server $server) => auth()->user()->can(Permission::ACTION_CONTROL_STOP, $server))
->visible(fn (Server $server) => !$server->isInConflictState() & $server->retrieveStatus()->isKillable()) ->visible(fn (Server $server) => !$server->isInConflictState() && $server->retrieveStatus()->isKillable())
->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'kill']), ->dispatch('powerAction', fn (Server $server) => ['server' => $server, 'action' => 'kill']),
]; ];

View File

@ -130,8 +130,7 @@ class ImportEggAction extends Action
->searchable() ->searchable()
->preload() ->preload()
->live() ->live()
->hintIcon('tabler-refresh') ->hintIcon('tabler-refresh', trans('admin/egg.import.refresh'))
->hintIconTooltip(trans('admin/egg.import.refresh'))
->hintAction(function () { ->hintAction(function () {
Artisan::call(UpdateEggIndexCommand::class); Artisan::call(UpdateEggIndexCommand::class);
}) })
@ -144,7 +143,7 @@ class ImportEggAction extends Action
} }
}), }),
Repeater::make('urls') Repeater::make('urls')
->label('') ->hiddenLabel()
->itemLabel(fn (array $state) => str($state['url'])->afterLast('/egg-')->beforeLast('.')->headline()) ->itemLabel(fn (array $state) => str($state['url'])->afterLast('/egg-')->beforeLast('.')->headline())
->hint(trans('admin/egg.import.url_help')) ->hint(trans('admin/egg.import.url_help'))
->addActionLabel(trans('admin/egg.import.add_url')) ->addActionLabel(trans('admin/egg.import.add_url'))

View File

@ -46,9 +46,7 @@ class StartupVariable extends Field
$this->prefix(fn (StartupVariable $component) => '{{' . $component->getVariableEnv() . '}}'); $this->prefix(fn (StartupVariable $component) => '{{' . $component->getVariableEnv() . '}}');
$this->hintIcon('tabler-code'); $this->hintIcon('tabler-code', fn (StartupVariable $component) => implode('|', $component->getVariableRules()));
$this->hintIconTooltip(fn (StartupVariable $component) => implode('|', $component->getVariableRules()));
$this->helperText(fn (StartupVariable $component) => !$component->getVariableDesc() ? '—' : $component->getVariableDesc()); $this->helperText(fn (StartupVariable $component) => !$component->getVariableDesc() ? '—' : $component->getVariableDesc());
@ -90,11 +88,11 @@ class StartupVariable extends Field
public function fromRecord(): static public function fromRecord(): static
{ {
$this->variableName(fn (ServerVariable $record) => $record->variable->name); $this->variableName(fn (?ServerVariable $record) => $record?->variable->name);
$this->variableDesc(fn (ServerVariable $record) => $record->variable->description); $this->variableDesc(fn (?ServerVariable $record) => $record?->variable->description);
$this->variableEnv(fn (ServerVariable $record) => $record->variable->env_variable); $this->variableEnv(fn (?ServerVariable $record) => $record?->variable->env_variable);
$this->variableDefault(fn (ServerVariable $record) => $record->variable->default_value); $this->variableDefault(fn (?ServerVariable $record) => $record?->variable->default_value);
$this->variableRules(fn (ServerVariable $record) => $record->variable->rules); $this->variableRules(fn (?ServerVariable $record) => $record?->variable->rules);
return $this; return $this;
} }

View File

@ -27,6 +27,7 @@ use Filament\Infolists\Components\TextEntry;
use Filament\Forms\Components\Repeater; use Filament\Forms\Components\Repeater;
use Filament\Schemas\Components\Section; use Filament\Schemas\Components\Section;
use Filament\Forms\Components\Select; use Filament\Forms\Components\Select;
use Filament\Schemas\Components\StateCasts\BooleanStateCast;
use Filament\Schemas\Components\Tabs; use Filament\Schemas\Components\Tabs;
use Filament\Schemas\Components\Tabs\Tab; use Filament\Schemas\Components\Tabs\Tab;
use Filament\Forms\Components\TagsInput; use Filament\Forms\Components\TagsInput;
@ -150,6 +151,7 @@ class EditProfile extends BaseEditProfile
->avatar() ->avatar()
->acceptedFileTypes(['image/png']) ->acceptedFileTypes(['image/png'])
->directory('avatars') ->directory('avatars')
->disk('public')
->getUploadedFileNameForStorageUsing(fn () => $this->getUser()->id . '.png') ->getUploadedFileNameForStorageUsing(fn () => $this->getUser()->id . '.png')
->hintAction(function (FileUpload $fileUpload) { ->hintAction(function (FileUpload $fileUpload) {
$path = $fileUpload->getDirectory() . '/' . $this->getUser()->id . '.png'; $path = $fileUpload->getDirectory() . '/' . $this->getUser()->id . '.png';
@ -176,9 +178,9 @@ class EditProfile extends BaseEditProfile
$unlink = array_key_exists($id, $this->getUser()->oauth ?? []); $unlink = array_key_exists($id, $this->getUser()->oauth ?? []);
$actions[] = Action::make("oauth_$id") $actions[] = Action::make("oauth_$id")
->label(($unlink ? trans('profile.unlink') : trans('profile.link')) . $name) ->label(trans('profile.' . ($unlink ? 'unlink' : 'link'), ['name' => $name]))
->icon($unlink ? 'tabler-unlink' : 'tabler-link') ->icon($unlink ? 'tabler-unlink' : 'tabler-link')
->color(Color::generateV3Palette($schema->getHexColor())) ->color(Color::hex($schema->getHexColor()))
->action(function (UserUpdateService $updateService) use ($id, $name, $unlink) { ->action(function (UserUpdateService $updateService) use ($id, $name, $unlink) {
if ($unlink) { if ($unlink) {
$oauth = auth()->user()->oauth; $oauth = auth()->user()->oauth;
@ -232,7 +234,7 @@ class EditProfile extends BaseEditProfile
Action::make('create') Action::make('create')
->label(trans('filament-actions::create.single.modal.actions.create.label')) ->label(trans('filament-actions::create.single.modal.actions.create.label'))
->disabled(fn (Get $get) => empty($get('description'))) ->disabled(fn (Get $get) => empty($get('description')))
->successRedirectUrl(self::getUrl(['tab' => '-api-keys-tab'], panel: 'app')) ->successRedirectUrl(self::getUrl(['tab' => 'api-keys::data::tab'], panel: 'app'))
->action(function (Get $get, Action $action, User $user) { ->action(function (Get $get, Action $action, User $user) {
$token = $user->createToken( $token = $user->createToken(
$get('description'), $get('description'),
@ -315,7 +317,7 @@ class EditProfile extends BaseEditProfile
Action::make('create') Action::make('create')
->label(trans('filament-actions::create.single.modal.actions.create.label')) ->label(trans('filament-actions::create.single.modal.actions.create.label'))
->disabled(fn (Get $get) => empty($get('name')) || empty($get('public_key'))) ->disabled(fn (Get $get) => empty($get('name')) || empty($get('public_key')))
->successRedirectUrl(self::getUrl(['tab' => '-ssh-keys-tab'], panel: 'app')) ->successRedirectUrl(self::getUrl(['tab' => 'ssh-keys::data::tab'], panel: 'app'))
->action(function (Get $get, Action $action, User $user, KeyCreationService $service) { ->action(function (Get $get, Action $action, User $user, KeyCreationService $service) {
try { try {
$sshKey = $service->handle($user, $get('name'), $get('public_key')); $sshKey = $service->handle($user, $get('name'), $get('public_key'));
@ -422,11 +424,11 @@ class EditProfile extends BaseEditProfile
ToggleButtons::make('top_navigation') ToggleButtons::make('top_navigation')
->label(trans('profile.navigation')) ->label(trans('profile.navigation'))
->inline() ->inline()
->required()
->options([ ->options([
true => trans('profile.top'), 1 => trans('profile.top'),
false => trans('profile.side'), 0 => trans('profile.side'),
]), ])
->stateCast(new BooleanStateCast(false, true)),
]), ]),
Section::make(trans('profile.console')) Section::make(trans('profile.console'))
->collapsible() ->collapsible()
@ -501,8 +503,7 @@ class EditProfile extends BaseEditProfile
TextInput::make('console_graph_period') TextInput::make('console_graph_period')
->label(trans('profile.graph_period')) ->label(trans('profile.graph_period'))
->suffix(trans('profile.seconds')) ->suffix(trans('profile.seconds'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('profile.graph_period_helper'))
->hintIconTooltip(trans('profile.graph_period_helper'))
->columnSpan(2) ->columnSpan(2)
->numeric() ->numeric()
->default(30) ->default(30)
@ -562,11 +563,11 @@ class EditProfile extends BaseEditProfile
protected function mutateFormDataBeforeFill(array $data): array protected function mutateFormDataBeforeFill(array $data): array
{ {
$data['console_font'] = $this->getUser()->getCustomization(CustomizationKey::ConsoleFont); $data['console_font'] = $this->getUser()->getCustomization(CustomizationKey::ConsoleFont);
$data['console_font_size'] = $this->getUser()->getCustomization(CustomizationKey::ConsoleFontSize); $data['console_font_size'] = (int) $this->getUser()->getCustomization(CustomizationKey::ConsoleFontSize);
$data['console_rows'] = $this->getUser()->getCustomization(CustomizationKey::ConsoleRows); $data['console_rows'] = (int) $this->getUser()->getCustomization(CustomizationKey::ConsoleRows);
$data['console_graph_period'] = $this->getUser()->getCustomization(CustomizationKey::ConsoleGraphPeriod); $data['console_graph_period'] = (int) $this->getUser()->getCustomization(CustomizationKey::ConsoleGraphPeriod);
$data['dashboard_layout'] = $this->getUser()->getCustomization(CustomizationKey::DashboardLayout); $data['dashboard_layout'] = $this->getUser()->getCustomization(CustomizationKey::DashboardLayout);
$data['top_navigation'] = $this->getUser()->getCustomization(CustomizationKey::TopNavigation); $data['top_navigation'] = (bool) $this->getUser()->getCustomization(CustomizationKey::TopNavigation);
return $data; return $data;
} }

View File

@ -35,7 +35,8 @@ class Login extends BaseLogin
]; ];
if ($captchaComponent = $this->getCaptchaComponent()) { if ($captchaComponent = $this->getCaptchaComponent()) {
$components[] = $captchaComponent; $components[] = $captchaComponent
->hidden(fn () => filled($this->userUndertakingMultiFactorAuthentication));
} }
return $schema return $schema
@ -78,7 +79,7 @@ class Login extends BaseLogin
$actions[] = Action::make("oauth_$id") $actions[] = Action::make("oauth_$id")
->label($schema->getName()) ->label($schema->getName())
->icon($schema->getIcon()) ->icon($schema->getIcon())
->color(Color::generateV3Palette($schema->getHexColor())) ->color(Color::hex($schema->getHexColor()))
->url(route('auth.oauth.redirect', ['driver' => $id], false)); ->url(route('auth.oauth.redirect', ['driver' => $id], false));
} }

View File

@ -50,7 +50,7 @@ class Settings extends ServerFormPage
]) ])
->schema([ ->schema([
TextInput::make('name') TextInput::make('name')
->label(trans('server/setting.server_info.server_name')) ->label(trans('server/setting.server_info.name'))
->disabled(fn (Server $server) => !auth()->user()->can(Permission::ACTION_SETTINGS_RENAME, $server)) ->disabled(fn (Server $server) => !auth()->user()->can(Permission::ACTION_SETTINGS_RENAME, $server))
->required() ->required()
->columnSpan([ ->columnSpan([
@ -109,42 +109,42 @@ class Settings extends ServerFormPage
]) ])
->schema([ ->schema([
TextInput::make('cpu') TextInput::make('cpu')
->label('') ->hiddenLabel()
->prefix(trans('server/setting.server_info.limits.cpu')) ->prefix(trans('server/setting.server_info.limits.cpu'))
->prefixIcon('tabler-cpu') ->prefixIcon('tabler-cpu')
->columnSpan(1) ->columnSpan(1)
->disabled() ->disabled()
->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/setting.server_info.limits.unlimited') : format_number($server->cpu) . '%'), ->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/setting.server_info.limits.unlimited') : format_number($server->cpu) . '%'),
TextInput::make('memory') TextInput::make('memory')
->label('') ->hiddenLabel()
->prefix(trans('server/setting.server_info.limits.memory')) ->prefix(trans('server/setting.server_info.limits.memory'))
->prefixIcon('tabler-device-desktop-analytics') ->prefixIcon('tabler-device-desktop-analytics')
->columnSpan(1) ->columnSpan(1)
->disabled() ->disabled()
->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/setting.server_info.limits.unlimited') : convert_bytes_to_readable($server->memory * 2 ** 20)), ->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/setting.server_info.limits.unlimited') : convert_bytes_to_readable($server->memory * 2 ** 20)),
TextInput::make('disk') TextInput::make('disk')
->label('') ->hiddenLabel()
->prefix(trans('server/setting.server_info.limits.disk')) ->prefix(trans('server/setting.server_info.limits.disk'))
->prefixIcon('tabler-device-sd-card') ->prefixIcon('tabler-device-sd-card')
->columnSpan(1) ->columnSpan(1)
->disabled() ->disabled()
->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/setting.server_info.limits.unlimited') : convert_bytes_to_readable($server->disk * 2 ** 20)), ->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/setting.server_info.limits.unlimited') : convert_bytes_to_readable($server->disk * 2 ** 20)),
TextInput::make('backup_limit') TextInput::make('backup_limit')
->label('') ->hiddenLabel()
->prefix(trans('server/setting.server_info.limits.backups')) ->prefix(trans('server/setting.server_info.limits.backups'))
->prefixIcon('tabler-file-zip') ->prefixIcon('tabler-file-zip')
->columnSpan(1) ->columnSpan(1)
->disabled() ->disabled()
->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/backup.empty') : $server->backups->count() . ' ' .trans('server/setting.server_info.limits.of', ['max' => $state])), ->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/backup.empty') : $server->backups->count() . ' ' .trans('server/setting.server_info.limits.of', ['max' => $state])),
TextInput::make('database_limit') TextInput::make('database_limit')
->label('') ->hiddenLabel()
->prefix(trans('server/setting.server_info.limits.databases')) ->prefix(trans('server/setting.server_info.limits.databases'))
->prefixIcon('tabler-database') ->prefixIcon('tabler-database')
->columnSpan(1) ->columnSpan(1)
->disabled() ->disabled()
->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/database.empty') : $server->databases->count() . ' ' . trans('server/setting.server_info.limits.of', ['max' => $state])), ->formatStateUsing(fn ($state, Server $server) => !$state ? trans('server/database.empty') : $server->databases->count() . ' ' . trans('server/setting.server_info.limits.of', ['max' => $state])),
TextInput::make('allocation_limit') TextInput::make('allocation_limit')
->label('') ->hiddenLabel()
->prefix(trans('server/setting.server_info.limits.allocations')) ->prefix(trans('server/setting.server_info.limits.allocations'))
->prefixIcon('tabler-network') ->prefixIcon('tabler-network')
->columnSpan(1) ->columnSpan(1)

View File

@ -86,7 +86,7 @@ class BackupResource extends Resource
TextInput::make('name') TextInput::make('name')
->label(trans('server/backup.actions.create.name')) ->label(trans('server/backup.actions.create.name'))
->columnSpanFull(), ->columnSpanFull(),
TextArea::make('ignored') Textarea::make('ignored')
->label(trans('server/backup.actions.create.ignored')) ->label(trans('server/backup.actions.create.ignored'))
->columnSpanFull(), ->columnSpanFull(),
Toggle::make('is_locked') Toggle::make('is_locked')

View File

@ -178,8 +178,7 @@ class DatabaseResource extends Resource
->label(trans('server/database.name')) ->label(trans('server/database.name'))
->columnSpan(1) ->columnSpan(1)
->prefix('s'. $server->id . '_') ->prefix('s'. $server->id . '_')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('server/database.name_hint')),
->hintIconTooltip(trans('server/database.name_hint')),
TextInput::make('remote') TextInput::make('remote')
->label(trans('server/database.connections_from')) ->label(trans('server/database.connections_from'))
->columnSpan(1) ->columnSpan(1)

View File

@ -25,6 +25,7 @@ use Filament\Panel;
use Filament\Resources\Pages\Page; use Filament\Resources\Pages\Page;
use Filament\Resources\Pages\PageRegistration; use Filament\Resources\Pages\PageRegistration;
use Filament\Schemas\Components\Section; use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Utilities\Get;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Enums\Alignment; use Filament\Support\Enums\Alignment;
use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Contracts\Filesystem\FileNotFoundException;
@ -155,6 +156,7 @@ class EditFiles extends Page
}), }),
CodeEditor::make('editor') CodeEditor::make('editor')
->hiddenLabel() ->hiddenLabel()
->language(fn (Get $get) => $get('lang'))
->default(function () { ->default(function () {
try { try {
return $this->getDaemonFileRepository()->getContent($this->path, config('panel.files.max_edit_size')); return $this->getDaemonFileRepository()->getContent($this->path, config('panel.files.max_edit_size'));

View File

@ -86,10 +86,11 @@ class ListFiles extends ListRecords
$files = File::get($server, $this->path); $files = File::get($server, $this->path);
return $table return $table
->paginated() ->paginated([25, 50, 100, 150, 200])
->paginationMode(PaginationMode::Simple) ->paginationMode(PaginationMode::Simple)
->defaultPaginationPageOption(50)
->deferLoading()
->searchable() ->searchable()
->defaultPaginationPageOption(25)
->query(fn () => $files->orderByDesc('is_directory')) ->query(fn () => $files->orderByDesc('is_directory'))
->defaultSort('name') ->defaultSort('name')
->columns([ ->columns([
@ -333,7 +334,7 @@ class ListFiles extends ListRecords
])->iconSize(IconSize::Large), ])->iconSize(IconSize::Large),
DeleteAction::make() DeleteAction::make()
->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_DELETE, $server)) ->authorize(fn () => auth()->user()->can(Permission::ACTION_FILE_DELETE, $server))
->label('') ->hiddenLabel()
->icon('tabler-trash')->iconSize(IconSize::Large) ->icon('tabler-trash')->iconSize(IconSize::Large)
->requiresConfirmation() ->requiresConfirmation()
->modalHeading(fn (File $file) => trans('filament-actions::delete.single.modal.heading', ['label' => $file->name . ' ' . ($file->is_directory ? 'folder' : 'file')])) ->modalHeading(fn (File $file) => trans('filament-actions::delete.single.modal.heading', ['label' => $file->name . ' ' . ($file->is_directory ? 'folder' : 'file')]))
@ -433,7 +434,7 @@ class ListFiles extends ListRecords
$this->getDaemonFileRepository()->putContent($path, $data['editor'] ?? ''); $this->getDaemonFileRepository()->putContent($path, $data['editor'] ?? '');
Activity::event('server:file.write') Activity::event('server:file.write')
->property('file', join_paths($path, $data['name'])) ->property('file', $path)
->log(); ->log();
} catch (FileExistsException) { } catch (FileExistsException) {
AlertBanner::make('file_already_exists') AlertBanner::make('file_already_exists')

View File

@ -2,6 +2,7 @@
namespace App\Filament\Server\Resources\Schedules\Pages; namespace App\Filament\Server\Resources\Schedules\Pages;
use App\Enums\ScheduleStatus;
use App\Facades\Activity; use App\Facades\Activity;
use App\Filament\Server\Resources\Schedules\ScheduleResource; use App\Filament\Server\Resources\Schedules\ScheduleResource;
use App\Models\Permission; use App\Models\Permission;
@ -27,11 +28,11 @@ class ViewSchedule extends ViewRecord
protected function getDefaultHeaderActions(): array protected function getDefaultHeaderActions(): array
{ {
return [ return [
Action::make('runNow') Action::make('run_now')
->authorize(fn () => auth()->user()->can(Permission::ACTION_SCHEDULE_UPDATE, Filament::getTenant())) ->authorize(fn () => auth()->user()->can(Permission::ACTION_SCHEDULE_UPDATE, Filament::getTenant()))
->label(fn (Schedule $schedule) => $schedule->tasks->count() === 0 ? trans('server/schedule.no_tasks') : ($schedule->is_processing ? trans('server/schedule.processing') : trans('server/schedule.run_now'))) ->label(fn (Schedule $schedule) => $schedule->tasks->count() === 0 ? trans('server/schedule.no_tasks') : ($schedule->status === ScheduleStatus::Processing ? ScheduleStatus::Processing->getLabel() : trans('server/schedule.run_now')))
->color(fn (Schedule $schedule) => $schedule->tasks->count() === 0 || $schedule->is_processing ? 'warning' : 'primary') ->color(fn (Schedule $schedule) => $schedule->tasks->count() === 0 || $schedule->status === ScheduleStatus::Processing ? 'warning' : 'primary')
->disabled(fn (Schedule $schedule) => $schedule->tasks->count() === 0 || $schedule->is_processing) ->disabled(fn (Schedule $schedule) => $schedule->tasks->count() === 0 || $schedule->status === ScheduleStatus::Processing)
->action(function (ProcessScheduleService $service, Schedule $schedule) { ->action(function (ProcessScheduleService $service, Schedule $schedule) {
$service->handle($schedule, true); $service->handle($schedule, true);

View File

@ -2,6 +2,7 @@
namespace App\Filament\Server\Resources\Schedules; namespace App\Filament\Server\Resources\Schedules;
use App\Enums\ScheduleStatus;
use App\Filament\Components\Actions\ImportScheduleAction; use App\Filament\Components\Actions\ImportScheduleAction;
use App\Filament\Server\Resources\Schedules\Pages\ListSchedules; use App\Filament\Server\Resources\Schedules\Pages\ListSchedules;
use App\Filament\Server\Resources\Schedules\Pages\CreateSchedule; use App\Filament\Server\Resources\Schedules\Pages\CreateSchedule;
@ -102,28 +103,21 @@ class ScheduleResource extends Resource
->required(), ->required(),
Toggle::make('only_when_online') Toggle::make('only_when_online')
->label(trans('server/schedule.only_online')) ->label(trans('server/schedule.only_online'))
->hintIconTooltip(trans('server/schedule.only_online_hint')) ->hintIcon('tabler-question-mark', trans('server/schedule.only_online_hint'))
->hintIcon('tabler-question-mark')
->inline(false) ->inline(false)
->required() ->required()
->default(1), ->default(1),
Toggle::make('is_active') Toggle::make('is_active')
->label(trans('server/schedule.enabled')) ->label(trans('server/schedule.enabled'))
->hintIconTooltip(trans('server/schedule.enabled_hint')) ->hintIcon('tabler-question-mark', trans('server/schedule.enabled_hint'))
->hintIcon('tabler-question-mark')
->inline(false) ->inline(false)
->hiddenOn('view') ->hiddenOn('view')
->required() ->required()
->default(1), ->default(1),
ToggleButtons::make('Status') ToggleButtons::make('status')
->formatStateUsing(fn (Schedule $schedule) => !$schedule->is_active ? 'inactive' : ($schedule->is_processing ? 'processing' : 'active')) ->enum(ScheduleStatus::class)
->options(fn (Schedule $schedule) => !$schedule->is_active ? ['inactive' => trans('server/schedule.inactive')] : ($schedule->is_processing ? ['processing' => trans('server/schedule.processing')] : ['active' => trans('server/schedule.active')])) ->formatStateUsing(fn (?Schedule $schedule) => $schedule?->status->value ?? 'new')
->colors([ ->options(fn (?Schedule $schedule) => [$schedule?->status->value ?? 'new' => $schedule?->status->getLabel() ?? 'New'])
'new' => 'primary',
'inactive' => 'danger',
'processing' => 'warning',
'active' => 'success',
])
->visibleOn('view'), ->visibleOn('view'),
Section::make('Cron') Section::make('Cron')
->label(trans('server/schedule.cron')) ->label(trans('server/schedule.cron'))
@ -162,7 +156,7 @@ class ScheduleResource extends Resource
&& $get('cron_day_of_week') == '*' ? 'success' : 'primary') && $get('cron_day_of_week') == '*' ? 'success' : 'primary')
->schema([ ->schema([
TextInput::make('x') TextInput::make('x')
->label('') ->hiddenLabel()
->numeric() ->numeric()
->minValue(1) ->minValue(1)
->maxValue(60) ->maxValue(60)
@ -184,7 +178,7 @@ class ScheduleResource extends Resource
&& $get('cron_day_of_week') == '*' ? 'success' : 'primary') && $get('cron_day_of_week') == '*' ? 'success' : 'primary')
->schema([ ->schema([
TextInput::make('x') TextInput::make('x')
->label('') ->hiddenLabel()
->numeric() ->numeric()
->minValue(1) ->minValue(1)
->maxValue(24) ->maxValue(24)
@ -206,7 +200,7 @@ class ScheduleResource extends Resource
&& $get('cron_day_of_week') == '*' ? 'success' : 'primary') && $get('cron_day_of_week') == '*' ? 'success' : 'primary')
->schema([ ->schema([
TextInput::make('x') TextInput::make('x')
->label('') ->hiddenLabel()
->numeric() ->numeric()
->minValue(1) ->minValue(1)
->maxValue(24) ->maxValue(24)
@ -228,7 +222,7 @@ class ScheduleResource extends Resource
&& $get('cron_day_of_week') == '*' ? 'success' : 'primary') && $get('cron_day_of_week') == '*' ? 'success' : 'primary')
->schema([ ->schema([
TextInput::make('x') TextInput::make('x')
->label('') ->hiddenLabel()
->numeric() ->numeric()
->minValue(1) ->minValue(1)
->maxValue(24) ->maxValue(24)
@ -250,7 +244,7 @@ class ScheduleResource extends Resource
&& $get('cron_day_of_week') != '*' ? 'success' : 'primary') && $get('cron_day_of_week') != '*' ? 'success' : 'primary')
->schema([ ->schema([
Select::make('x') Select::make('x')
->label('') ->hiddenLabel()
->prefix(trans('server/schedule.time.every')) ->prefix(trans('server/schedule.time.every'))
->options([ ->options([
'1' => trans('server/schedule.time.monday'), '1' => trans('server/schedule.time.monday'),
@ -344,7 +338,9 @@ class ScheduleResource extends Resource
->state(fn (Schedule $schedule) => $schedule->cron_minute . ' ' . $schedule->cron_hour . ' ' . $schedule->cron_day_of_month . ' ' . $schedule->cron_month . ' ' . $schedule->cron_day_of_week), ->state(fn (Schedule $schedule) => $schedule->cron_minute . ' ' . $schedule->cron_hour . ' ' . $schedule->cron_day_of_month . ' ' . $schedule->cron_month . ' ' . $schedule->cron_day_of_week),
TextColumn::make('status') TextColumn::make('status')
->label(trans('server/schedule.status')) ->label(trans('server/schedule.status'))
->state(fn (Schedule $schedule) => !$schedule->is_active ? trans('server/schedule.inactive') : ($schedule->is_processing ? trans('server/schedule.processing') : trans('server/schedule.active'))), ->state(fn (Schedule $schedule) => $schedule->status->getLabel())
->color(fn (Schedule $schedule) => $schedule->status->getColor())
->badge(),
IconColumn::make('only_when_online') IconColumn::make('only_when_online')
->label(trans('server/schedule.online_only')) ->label(trans('server/schedule.online_only'))
->boolean() ->boolean()
@ -359,7 +355,7 @@ class ScheduleResource extends Resource
->placeholder(trans('server/schedule.never')) ->placeholder(trans('server/schedule.never'))
->since() ->since()
->sortable() ->sortable()
->state(fn (Schedule $schedule) => $schedule->is_active ? $schedule->next_run_at : null), ->state(fn (Schedule $schedule) => $schedule->status === ScheduleStatus::Active ? $schedule->next_run_at : null),
]) ])
->recordActions([ ->recordActions([
ViewAction::make(), ViewAction::make(),

View File

@ -109,7 +109,7 @@ class UserResource extends Resource
->icon($data['icon']) ->icon($data['icon'])
->schema([ ->schema([
CheckboxList::make($data['name']) CheckboxList::make($data['name'])
->label('') ->hiddenLabel()
->bulkToggleable() ->bulkToggleable()
->columns(2) ->columns(2)
->options($options) ->options($options)

View File

@ -58,7 +58,7 @@ class OAuthController extends Controller
if ($request->user()) { if ($request->user()) {
$this->linkUser($request->user(), $driver, $oauthUser); $this->linkUser($request->user(), $driver, $oauthUser);
return redirect(EditProfile::getUrl(['tab' => '-oauth-tab'], panel: 'app')); return redirect(EditProfile::getUrl(['tab' => 'oauth::data::tab'], panel: 'app'));
} }
$user = User::whereJsonContains('oauth->'. $driver->getId(), $oauthUser->getId())->first(); $user = User::whereJsonContains('oauth->'. $driver->getId(), $oauthUser->getId())->first();

View File

@ -29,8 +29,7 @@ class CacheStep
->schema([ ->schema([
ToggleButtons::make('env_cache.CACHE_STORE') ToggleButtons::make('env_cache.CACHE_STORE')
->label(trans('installer.cache.driver')) ->label(trans('installer.cache.driver'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.cache.driver_help'))
->hintIconTooltip(trans('installer.cache.driver_help'))
->required() ->required()
->inline() ->inline()
->options(self::CACHE_DRIVERS) ->options(self::CACHE_DRIVERS)
@ -52,29 +51,25 @@ class CacheStep
TextInput::make('env_cache.REDIS_HOST') TextInput::make('env_cache.REDIS_HOST')
->label(trans('installer.cache.fields.host')) ->label(trans('installer.cache.fields.host'))
->placeholder('127.0.0.1') ->placeholder('127.0.0.1')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.cache.fields.host_help'))
->hintIconTooltip(trans('installer.cache.fields.host_help'))
->required(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis') ->required(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis')
->default(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis' ? config('database.redis.default.host') : null) ->default(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis' ? config('database.redis.default.host') : null)
->visible(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis'), ->visible(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis'),
TextInput::make('env_cache.REDIS_PORT') TextInput::make('env_cache.REDIS_PORT')
->label(trans('installer.cache.fields.port')) ->label(trans('installer.cache.fields.port'))
->placeholder('6379') ->placeholder('6379')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.cache.fields.port_help'))
->hintIconTooltip(trans('installer.cache.fields.port_help'))
->required(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis') ->required(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis')
->default(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis' ? config('database.redis.default.port') : null) ->default(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis' ? config('database.redis.default.port') : null)
->visible(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis'), ->visible(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis'),
TextInput::make('env_cache.REDIS_USERNAME') TextInput::make('env_cache.REDIS_USERNAME')
->label(trans('installer.cache.fields.username')) ->label(trans('installer.cache.fields.username'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.cache.fields.username_help'))
->hintIconTooltip(trans('installer.cache.fields.username_help'))
->default(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis' ? config('database.redis.default.username') : null) ->default(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis' ? config('database.redis.default.username') : null)
->visible(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis'), ->visible(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis'),
TextInput::make('env_cache.REDIS_PASSWORD') TextInput::make('env_cache.REDIS_PASSWORD')
->label(trans('installer.cache.fields.password')) ->label(trans('installer.cache.fields.password'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.cache.fields.password_help'))
->hintIconTooltip(trans('installer.cache.fields.password_help'))
->password() ->password()
->revealable() ->revealable()
->default(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis' ? config('database.redis.default.password') : null) ->default(fn (Get $get) => $get('env_cache.CACHE_STORE') === 'redis' ? config('database.redis.default.password') : null)

View File

@ -30,8 +30,7 @@ class DatabaseStep
->schema([ ->schema([
ToggleButtons::make('env_database.DB_CONNECTION') ToggleButtons::make('env_database.DB_CONNECTION')
->label(trans('installer.database.driver')) ->label(trans('installer.database.driver'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.database.driver_help'))
->hintIconTooltip(trans('installer.database.driver_help'))
->required() ->required()
->inline() ->inline()
->options(self::DATABASE_DRIVERS) ->options(self::DATABASE_DRIVERS)
@ -63,22 +62,19 @@ class DatabaseStep
TextInput::make('env_database.DB_DATABASE') TextInput::make('env_database.DB_DATABASE')
->label(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite' ? trans('installer.database.fields.path') : trans('installer.database.fields.name')) ->label(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite' ? trans('installer.database.fields.path') : trans('installer.database.fields.name'))
->placeholder(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite' ? 'database.sqlite' : 'panel') ->placeholder(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite' ? 'database.sqlite' : 'panel')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite' ? trans('installer.database.fields.path_help') : trans('installer.database.fields.name_help'))
->hintIconTooltip(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite' ? trans('installer.database.fields.path_help') : trans('installer.database.fields.name_help'))
->required() ->required()
->default('database.sqlite'), ->default('database.sqlite'),
TextInput::make('env_database.DB_HOST') TextInput::make('env_database.DB_HOST')
->label(trans('installer.database.fields.host')) ->label(trans('installer.database.fields.host'))
->placeholder('127.0.0.1') ->placeholder('127.0.0.1')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.database.fields.host_help'))
->hintIconTooltip(trans('installer.database.fields.host_help'))
->required(fn (Get $get) => $get('env_database.DB_CONNECTION') !== 'sqlite') ->required(fn (Get $get) => $get('env_database.DB_CONNECTION') !== 'sqlite')
->hidden(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite'), ->hidden(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite'),
TextInput::make('env_database.DB_PORT') TextInput::make('env_database.DB_PORT')
->label(trans('installer.database.fields.port')) ->label(trans('installer.database.fields.port'))
->placeholder('3306') ->placeholder('3306')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.database.fields.port_help'))
->hintIconTooltip(trans('installer.database.fields.port_help'))
->numeric() ->numeric()
->minValue(1) ->minValue(1)
->maxValue(65535) ->maxValue(65535)
@ -87,14 +83,12 @@ class DatabaseStep
TextInput::make('env_database.DB_USERNAME') TextInput::make('env_database.DB_USERNAME')
->label(trans('installer.database.fields.username')) ->label(trans('installer.database.fields.username'))
->placeholder('pelican') ->placeholder('pelican')
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.database.fields.username_help'))
->hintIconTooltip(trans('installer.database.fields.username_help'))
->required(fn (Get $get) => $get('env_database.DB_CONNECTION') !== 'sqlite') ->required(fn (Get $get) => $get('env_database.DB_CONNECTION') !== 'sqlite')
->hidden(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite'), ->hidden(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite'),
TextInput::make('env_database.DB_PASSWORD') TextInput::make('env_database.DB_PASSWORD')
->label(trans('installer.database.fields.password')) ->label(trans('installer.database.fields.password'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.database.fields.password_help'))
->hintIconTooltip(trans('installer.database.fields.password_help'))
->password() ->password()
->revealable() ->revealable()
->hidden(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite'), ->hidden(fn (Get $get) => $get('env_database.DB_CONNECTION') === 'sqlite'),

View File

@ -17,14 +17,12 @@ class EnvironmentStep
->schema([ ->schema([
TextInput::make('env_general.APP_NAME') TextInput::make('env_general.APP_NAME')
->label(trans('installer.environment.fields.app_name')) ->label(trans('installer.environment.fields.app_name'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.environment.fields.app_name_help'))
->hintIconTooltip(trans('installer.environment.fields.app_name_help'))
->required() ->required()
->default(config('app.name')), ->default(config('app.name')),
TextInput::make('env_general.APP_URL') TextInput::make('env_general.APP_URL')
->label(trans('installer.environment.fields.app_url')) ->label(trans('installer.environment.fields.app_url'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.environment.fields.app_url_help'))
->hintIconTooltip(trans('installer.environment.fields.app_url_help'))
->required() ->required()
->default(url('')), ->default(url('')),
Fieldset::make('admin_user') Fieldset::make('admin_user')

View File

@ -30,8 +30,7 @@ class QueueStep
->schema([ ->schema([
ToggleButtons::make('env_queue.QUEUE_CONNECTION') ToggleButtons::make('env_queue.QUEUE_CONNECTION')
->label(trans('installer.queue.driver')) ->label(trans('installer.queue.driver'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.queue.driver_help'))
->hintIconTooltip(trans('installer.queue.driver_help'))
->required() ->required()
->inline() ->inline()
->options(self::QUEUE_DRIVERS) ->options(self::QUEUE_DRIVERS)

View File

@ -23,8 +23,7 @@ class SessionStep
->schema([ ->schema([
ToggleButtons::make('env_session.SESSION_DRIVER') ToggleButtons::make('env_session.SESSION_DRIVER')
->label(trans('installer.session.driver')) ->label(trans('installer.session.driver'))
->hintIcon('tabler-question-mark') ->hintIcon('tabler-question-mark', trans('installer.session.driver_help'))
->hintIconTooltip(trans('installer.session.driver_help'))
->required() ->required()
->inline() ->inline()
->options(self::SESSION_DRIVERS) ->options(self::SESSION_DRIVERS)

View File

@ -92,7 +92,7 @@ class ActivityLog extends Model implements HasIcon, HasLabel
public function actor(): MorphTo public function actor(): MorphTo
{ {
return $this->morphTo()->withTrashed(); return $this->morphTo()->withTrashed()->withoutGlobalScopes();
} }
/** /**

View File

@ -6,8 +6,10 @@ use Carbon\Carbon;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Exception; use Exception;
use App\Contracts\Validatable; use App\Contracts\Validatable;
use App\Enums\ScheduleStatus;
use App\Helpers\Utilities; use App\Helpers\Utilities;
use App\Traits\HasValidation; use App\Traits\HasValidation;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasMany;
@ -27,6 +29,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
* @property bool $only_when_online * @property bool $only_when_online
* @property Carbon|null $last_run_at * @property Carbon|null $last_run_at
* @property Carbon|null $next_run_at * @property Carbon|null $next_run_at
* @property ScheduleStatus $status
* @property Carbon $created_at * @property Carbon $created_at
* @property Carbon $updated_at * @property Carbon $updated_at
* @property Server $server * @property Server $server
@ -107,6 +110,13 @@ class Schedule extends Model implements Validatable
]; ];
} }
protected function status(): Attribute
{
return Attribute::make(
get: fn () => !$this->is_active ? ScheduleStatus::Inactive : ($this->is_processing ? ScheduleStatus::Processing : ScheduleStatus::Active),
);
}
/** /**
* Returns the schedule's execution crontab entry as a string. * Returns the schedule's execution crontab entry as a string.
* *

View File

@ -111,7 +111,7 @@ class AppServiceProvider extends ServiceProvider
'primary' => Color::Blue, 'primary' => Color::Blue,
'success' => Color::Green, 'success' => Color::Green,
'warning' => Color::Amber, 'warning' => Color::Amber,
'blurple' => Color::generateV3Palette('#5865F2'), 'blurple' => Color::hex('#5865F2'),
]); ]);
FilamentView::registerRenderHook( FilamentView::registerRenderHook(

View File

@ -16,7 +16,7 @@ class AdminPanelProvider extends PanelProvider
->path('admin') ->path('admin')
->homeUrl('/') ->homeUrl('/')
->breadcrumbs(false) ->breadcrumbs(false)
->sidebarCollapsibleOnDesktop() ->sidebarCollapsibleOnDesktop(fn () => !$panel->hasTopNavigation())
->userMenuItems([ ->userMenuItems([
Action::make('exit_admin') Action::make('exit_admin')
->label(fn () => trans('profile.exit_admin')) ->label(fn () => trans('profile.exit_admin'))

View File

@ -12,7 +12,6 @@
"aws/aws-sdk-php": "^3.351", "aws/aws-sdk-php": "^3.351",
"calebporzio/sushi": "^2.5", "calebporzio/sushi": "^2.5",
"dedoc/scramble": "^0.12.10", "dedoc/scramble": "^0.12.10",
"doctrine/dbal": "~3.6.0",
"filament/filament": "~4.0", "filament/filament": "~4.0",
"guzzlehttp/guzzle": "^7.9", "guzzlehttp/guzzle": "^7.9",
"laravel/framework": "^12.23", "laravel/framework": "^12.23",

522
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "09abbfbce5021c591de46868e3abfc3f", "content-hash": "179b8bb70681716cab28fac53ba87943",
"packages": [ "packages": [
{ {
"name": "amphp/amp", "name": "amphp/amp",
@ -936,16 +936,16 @@
}, },
{ {
"name": "aws/aws-sdk-php", "name": "aws/aws-sdk-php",
"version": "3.356.12", "version": "3.356.17",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aws/aws-sdk-php.git", "url": "https://github.com/aws/aws-sdk-php.git",
"reference": "0068088fed44e2bed3a2e82f2c7a0bb9e356b3c3" "reference": "d0357fbe2535bb7d832e594a4ff2ff8da29d229c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/0068088fed44e2bed3a2e82f2c7a0bb9e356b3c3", "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d0357fbe2535bb7d832e594a4ff2ff8da29d229c",
"reference": "0068088fed44e2bed3a2e82f2c7a0bb9e356b3c3", "reference": "d0357fbe2535bb7d832e594a4ff2ff8da29d229c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -958,7 +958,7 @@
"guzzlehttp/psr7": "^2.4.5", "guzzlehttp/psr7": "^2.4.5",
"mtdowling/jmespath.php": "^2.8.0", "mtdowling/jmespath.php": "^2.8.0",
"php": ">=8.1", "php": ">=8.1",
"psr/http-message": "^2.0" "psr/http-message": "^1.0 || ^2.0"
}, },
"require-dev": { "require-dev": {
"andrewsville/php-token-reflection": "^1.4", "andrewsville/php-token-reflection": "^1.4",
@ -1027,9 +1027,9 @@
"support": { "support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions", "forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues", "issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.356.12" "source": "https://github.com/aws/aws-sdk-php/tree/3.356.17"
}, },
"time": "2025-09-05T18:10:41+00:00" "time": "2025-09-12T18:07:37+00:00"
}, },
{ {
"name": "blade-ui-kit/blade-heroicons", "name": "blade-ui-kit/blade-heroicons",
@ -1297,26 +1297,26 @@
}, },
{ {
"name": "carbonphp/carbon-doctrine-types", "name": "carbonphp/carbon-doctrine-types",
"version": "1.0.0", "version": "3.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
"reference": "3c430083d0b41ceed84ecccf9dac613241d7305d" "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/3c430083d0b41ceed84ecccf9dac613241d7305d", "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
"reference": "3c430083d0b41ceed84ecccf9dac613241d7305d", "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.8 || ^8.0" "php": "^8.1"
}, },
"conflict": { "conflict": {
"doctrine/dbal": ">=3.7.0" "doctrine/dbal": "<4.0.0 || >=5.0.0"
}, },
"require-dev": { "require-dev": {
"doctrine/dbal": ">=2.0.0", "doctrine/dbal": "^4.0.0",
"nesbot/carbon": "^2.71.0 || ^3.0.0", "nesbot/carbon": "^2.71.0 || ^3.0.0",
"phpunit/phpunit": "^10.3" "phpunit/phpunit": "^10.3"
}, },
@ -1346,7 +1346,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
"source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/1.0.0" "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0"
}, },
"funding": [ "funding": [
{ {
@ -1362,7 +1362,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-10-01T12:35:29+00:00" "time": "2024-02-09T16:56:22+00:00"
}, },
{ {
"name": "chillerlan/php-qrcode", "name": "chillerlan/php-qrcode",
@ -1674,16 +1674,16 @@
}, },
{ {
"name": "dedoc/scramble", "name": "dedoc/scramble",
"version": "v0.12.31", "version": "v0.12.34",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/dedoc/scramble.git", "url": "https://github.com/dedoc/scramble.git",
"reference": "ff8fd4295ccf9d9e4dcea98a193e13f9acd1f071" "reference": "fdedbaac3271b466182d4029651aa90eac53cee5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/dedoc/scramble/zipball/ff8fd4295ccf9d9e4dcea98a193e13f9acd1f071", "url": "https://api.github.com/repos/dedoc/scramble/zipball/fdedbaac3271b466182d4029651aa90eac53cee5",
"reference": "ff8fd4295ccf9d9e4dcea98a193e13f9acd1f071", "reference": "fdedbaac3271b466182d4029651aa90eac53cee5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1742,7 +1742,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/dedoc/scramble/issues", "issues": "https://github.com/dedoc/scramble/issues",
"source": "https://github.com/dedoc/scramble/tree/v0.12.31" "source": "https://github.com/dedoc/scramble/tree/v0.12.34"
}, },
"funding": [ "funding": [
{ {
@ -1750,7 +1750,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-08-24T11:19:04+00:00" "time": "2025-09-09T14:36:44+00:00"
}, },
{ {
"name": "dflydev/dot-access-data", "name": "dflydev/dot-access-data",
@ -1827,212 +1827,6 @@
}, },
"time": "2024-07-08T12:26:09+00:00" "time": "2024-07-08T12:26:09+00:00"
}, },
{
"name": "doctrine/cache",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
"reference": "1ca8f21980e770095a31456042471a57bc4c68fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb",
"reference": "1ca8f21980e770095a31456042471a57bc4c68fb",
"shasum": ""
},
"require": {
"php": "~7.1 || ^8.0"
},
"conflict": {
"doctrine/common": ">2.2,<2.4"
},
"require-dev": {
"cache/integration-tests": "dev-master",
"doctrine/coding-standard": "^9",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psr/cache": "^1.0 || ^2.0 || ^3.0",
"symfony/cache": "^4.4 || ^5.4 || ^6",
"symfony/var-exporter": "^4.4 || ^5.4 || ^6"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
}
],
"description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
"homepage": "https://www.doctrine-project.org/projects/cache.html",
"keywords": [
"abstraction",
"apcu",
"cache",
"caching",
"couchdb",
"memcached",
"php",
"redis",
"xcache"
],
"support": {
"issues": "https://github.com/doctrine/cache/issues",
"source": "https://github.com/doctrine/cache/tree/2.2.0"
},
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
"type": "tidelift"
}
],
"time": "2022-05-20T20:07:39+00:00"
},
{
"name": "doctrine/dbal",
"version": "3.6.7",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "8e0e268052b4a8974cb00215bb2892787021614f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/8e0e268052b4a8974cb00215bb2892787021614f",
"reference": "8e0e268052b4a8974cb00215bb2892787021614f",
"shasum": ""
},
"require": {
"composer-runtime-api": "^2",
"doctrine/cache": "^1.11|^2.0",
"doctrine/deprecations": "^0.5.3|^1",
"doctrine/event-manager": "^1|^2",
"php": "^7.4 || ^8.0",
"psr/cache": "^1|^2|^3",
"psr/log": "^1|^2|^3"
},
"require-dev": {
"doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2023.1",
"phpstan/phpstan": "1.10.34",
"phpstan/phpstan-strict-rules": "^1.5",
"phpunit/phpunit": "9.6.12",
"psalm/plugin-phpunit": "0.18.4",
"slevomat/coding-standard": "8.13.1",
"squizlabs/php_codesniffer": "3.7.2",
"symfony/cache": "^5.4|^6.0",
"symfony/console": "^4.4|^5.4|^6.0",
"vimeo/psalm": "4.30.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
},
"bin": [
"bin/doctrine-dbal"
],
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\DBAL\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
}
],
"description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
"homepage": "https://www.doctrine-project.org/projects/dbal.html",
"keywords": [
"abstraction",
"database",
"db2",
"dbal",
"mariadb",
"mssql",
"mysql",
"oci8",
"oracle",
"pdo",
"pgsql",
"postgresql",
"queryobject",
"sasql",
"sql",
"sqlite",
"sqlserver",
"sqlsrv"
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
"source": "https://github.com/doctrine/dbal/tree/3.6.7"
},
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
"type": "tidelift"
}
],
"time": "2023-09-19T20:15:41+00:00"
},
{ {
"name": "doctrine/deprecations", "name": "doctrine/deprecations",
"version": "1.1.5", "version": "1.1.5",
@ -2081,97 +1875,6 @@
}, },
"time": "2025-04-07T20:06:18+00:00" "time": "2025-04-07T20:06:18+00:00"
}, },
{
"name": "doctrine/event-manager",
"version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/event-manager.git",
"reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e",
"reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e",
"shasum": ""
},
"require": {
"php": "^8.1"
},
"conflict": {
"doctrine/common": "<2.9"
},
"require-dev": {
"doctrine/coding-standard": "^12",
"phpstan/phpstan": "^1.8.8",
"phpunit/phpunit": "^10.5",
"vimeo/psalm": "^5.24"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
},
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
},
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
},
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
}
],
"description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
"homepage": "https://www.doctrine-project.org/projects/event-manager.html",
"keywords": [
"event",
"event dispatcher",
"event manager",
"event system",
"events"
],
"support": {
"issues": "https://github.com/doctrine/event-manager/issues",
"source": "https://github.com/doctrine/event-manager/tree/2.0.1"
},
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager",
"type": "tidelift"
}
],
"time": "2024-05-22T20:47:39+00:00"
},
{ {
"name": "doctrine/inflector", "name": "doctrine/inflector",
"version": "2.1.0", "version": "2.1.0",
@ -2473,16 +2176,16 @@
}, },
{ {
"name": "filament/actions", "name": "filament/actions",
"version": "v4.0.8", "version": "v4.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filamentphp/actions.git", "url": "https://github.com/filamentphp/actions.git",
"reference": "aad259842f1888602130cc78d989aa2250149c6b" "reference": "fd48fa35095a2b5bb0d5264bd132c36a2adc6b09"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filamentphp/actions/zipball/aad259842f1888602130cc78d989aa2250149c6b", "url": "https://api.github.com/repos/filamentphp/actions/zipball/fd48fa35095a2b5bb0d5264bd132c36a2adc6b09",
"reference": "aad259842f1888602130cc78d989aa2250149c6b", "reference": "fd48fa35095a2b5bb0d5264bd132c36a2adc6b09",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2518,20 +2221,20 @@
"issues": "https://github.com/filamentphp/filament/issues", "issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament" "source": "https://github.com/filamentphp/filament"
}, },
"time": "2025-09-07T19:30:06+00:00" "time": "2025-09-15T11:16:33+00:00"
}, },
{ {
"name": "filament/filament", "name": "filament/filament",
"version": "v4.0.8", "version": "v4.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filamentphp/panels.git", "url": "https://github.com/filamentphp/panels.git",
"reference": "0c697fbeb399d2655ad7dc55f8827e72ba25e438" "reference": "18bb60f075a76147e7397b34011160e36fa1e948"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filamentphp/panels/zipball/0c697fbeb399d2655ad7dc55f8827e72ba25e438", "url": "https://api.github.com/repos/filamentphp/panels/zipball/18bb60f075a76147e7397b34011160e36fa1e948",
"reference": "0c697fbeb399d2655ad7dc55f8827e72ba25e438", "reference": "18bb60f075a76147e7397b34011160e36fa1e948",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2575,20 +2278,20 @@
"issues": "https://github.com/filamentphp/filament/issues", "issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament" "source": "https://github.com/filamentphp/filament"
}, },
"time": "2025-09-07T19:30:10+00:00" "time": "2025-09-15T11:16:32+00:00"
}, },
{ {
"name": "filament/forms", "name": "filament/forms",
"version": "v4.0.8", "version": "v4.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filamentphp/forms.git", "url": "https://github.com/filamentphp/forms.git",
"reference": "d6be629b717861d14c7f603f416dde9d25a4f4d0" "reference": "6ac60ebf4321944bbfba91b23c138201986a71b8"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filamentphp/forms/zipball/d6be629b717861d14c7f603f416dde9d25a4f4d0", "url": "https://api.github.com/repos/filamentphp/forms/zipball/6ac60ebf4321944bbfba91b23c138201986a71b8",
"reference": "d6be629b717861d14c7f603f416dde9d25a4f4d0", "reference": "6ac60ebf4321944bbfba91b23c138201986a71b8",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2625,20 +2328,20 @@
"issues": "https://github.com/filamentphp/filament/issues", "issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament" "source": "https://github.com/filamentphp/filament"
}, },
"time": "2025-09-07T19:30:05+00:00" "time": "2025-09-15T12:50:58+00:00"
}, },
{ {
"name": "filament/infolists", "name": "filament/infolists",
"version": "v4.0.8", "version": "v4.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filamentphp/infolists.git", "url": "https://github.com/filamentphp/infolists.git",
"reference": "050bd1423579be7fcc76bdcd06448c61ab787d23" "reference": "881bc4899d87604ffb49ff3611685f520658d469"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filamentphp/infolists/zipball/050bd1423579be7fcc76bdcd06448c61ab787d23", "url": "https://api.github.com/repos/filamentphp/infolists/zipball/881bc4899d87604ffb49ff3611685f520658d469",
"reference": "050bd1423579be7fcc76bdcd06448c61ab787d23", "reference": "881bc4899d87604ffb49ff3611685f520658d469",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2670,20 +2373,20 @@
"issues": "https://github.com/filamentphp/filament/issues", "issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament" "source": "https://github.com/filamentphp/filament"
}, },
"time": "2025-09-07T19:30:04+00:00" "time": "2025-09-11T14:01:29+00:00"
}, },
{ {
"name": "filament/notifications", "name": "filament/notifications",
"version": "v4.0.8", "version": "v4.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filamentphp/notifications.git", "url": "https://github.com/filamentphp/notifications.git",
"reference": "8dac65801cb62eb291a06617f56c81d4e9740ad3" "reference": "c4792d807c37a2e7640ad7ad9b189fc3e09b3dcb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filamentphp/notifications/zipball/8dac65801cb62eb291a06617f56c81d4e9740ad3", "url": "https://api.github.com/repos/filamentphp/notifications/zipball/c4792d807c37a2e7640ad7ad9b189fc3e09b3dcb",
"reference": "8dac65801cb62eb291a06617f56c81d4e9740ad3", "reference": "c4792d807c37a2e7640ad7ad9b189fc3e09b3dcb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2717,20 +2420,20 @@
"issues": "https://github.com/filamentphp/filament/issues", "issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament" "source": "https://github.com/filamentphp/filament"
}, },
"time": "2025-09-07T19:30:09+00:00" "time": "2025-09-09T20:21:33+00:00"
}, },
{ {
"name": "filament/schemas", "name": "filament/schemas",
"version": "v4.0.8", "version": "v4.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filamentphp/schemas.git", "url": "https://github.com/filamentphp/schemas.git",
"reference": "20b97f2850dc90a605e1b754ddad7fcdacd00dbc" "reference": "a54e9f3386eaba867dfb1274685392ccc86fb620"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filamentphp/schemas/zipball/20b97f2850dc90a605e1b754ddad7fcdacd00dbc", "url": "https://api.github.com/repos/filamentphp/schemas/zipball/a54e9f3386eaba867dfb1274685392ccc86fb620",
"reference": "20b97f2850dc90a605e1b754ddad7fcdacd00dbc", "reference": "a54e9f3386eaba867dfb1274685392ccc86fb620",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2762,20 +2465,20 @@
"issues": "https://github.com/filamentphp/filament/issues", "issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament" "source": "https://github.com/filamentphp/filament"
}, },
"time": "2025-09-07T19:30:03+00:00" "time": "2025-09-15T11:19:20+00:00"
}, },
{ {
"name": "filament/support", "name": "filament/support",
"version": "v4.0.8", "version": "v4.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filamentphp/support.git", "url": "https://github.com/filamentphp/support.git",
"reference": "65c9039bdc005326325c8702d9ff92e65f2fe88d" "reference": "93a25877d8ee4663132fd3df297f78352e212049"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filamentphp/support/zipball/65c9039bdc005326325c8702d9ff92e65f2fe88d", "url": "https://api.github.com/repos/filamentphp/support/zipball/93a25877d8ee4663132fd3df297f78352e212049",
"reference": "65c9039bdc005326325c8702d9ff92e65f2fe88d", "reference": "93a25877d8ee4663132fd3df297f78352e212049",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2820,20 +2523,20 @@
"issues": "https://github.com/filamentphp/filament/issues", "issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament" "source": "https://github.com/filamentphp/filament"
}, },
"time": "2025-09-07T19:30:25+00:00" "time": "2025-09-15T11:16:50+00:00"
}, },
{ {
"name": "filament/tables", "name": "filament/tables",
"version": "v4.0.8", "version": "v4.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filamentphp/tables.git", "url": "https://github.com/filamentphp/tables.git",
"reference": "a8582dfdea9e198a1b0bbd3ba4e1881f62e3bd1a" "reference": "dfd85c5bad70f0819a44f14ee2d1a6a3da442cc4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filamentphp/tables/zipball/a8582dfdea9e198a1b0bbd3ba4e1881f62e3bd1a", "url": "https://api.github.com/repos/filamentphp/tables/zipball/dfd85c5bad70f0819a44f14ee2d1a6a3da442cc4",
"reference": "a8582dfdea9e198a1b0bbd3ba4e1881f62e3bd1a", "reference": "dfd85c5bad70f0819a44f14ee2d1a6a3da442cc4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2865,20 +2568,20 @@
"issues": "https://github.com/filamentphp/filament/issues", "issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament" "source": "https://github.com/filamentphp/filament"
}, },
"time": "2025-09-07T19:30:25+00:00" "time": "2025-09-15T11:19:39+00:00"
}, },
{ {
"name": "filament/widgets", "name": "filament/widgets",
"version": "v4.0.8", "version": "v4.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/filamentphp/widgets.git", "url": "https://github.com/filamentphp/widgets.git",
"reference": "f761a52df367f8bde47d9d2518c3c0b646155345" "reference": "35e245262210a944a1a1707fb0ec9857362f527e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/filamentphp/widgets/zipball/f761a52df367f8bde47d9d2518c3c0b646155345", "url": "https://api.github.com/repos/filamentphp/widgets/zipball/35e245262210a944a1a1707fb0ec9857362f527e",
"reference": "f761a52df367f8bde47d9d2518c3c0b646155345", "reference": "35e245262210a944a1a1707fb0ec9857362f527e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2909,7 +2612,7 @@
"issues": "https://github.com/filamentphp/filament/issues", "issues": "https://github.com/filamentphp/filament/issues",
"source": "https://github.com/filamentphp/filament" "source": "https://github.com/filamentphp/filament"
}, },
"time": "2025-09-04T14:12:52+00:00" "time": "2025-09-12T09:56:30+00:00"
}, },
{ {
"name": "firebase/php-jwt", "name": "firebase/php-jwt",
@ -4564,16 +4267,16 @@
}, },
{ {
"name": "league/csv", "name": "league/csv",
"version": "9.24.1", "version": "9.25.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/thephpleague/csv.git", "url": "https://github.com/thephpleague/csv.git",
"reference": "e0221a3f16aa2a823047d59fab5809d552e29bc8" "reference": "f856f532866369fb1debe4e7c5a1db185f40ef86"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/e0221a3f16aa2a823047d59fab5809d552e29bc8", "url": "https://api.github.com/repos/thephpleague/csv/zipball/f856f532866369fb1debe4e7c5a1db185f40ef86",
"reference": "e0221a3f16aa2a823047d59fab5809d552e29bc8", "reference": "f856f532866369fb1debe4e7c5a1db185f40ef86",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4589,7 +4292,7 @@
"phpstan/phpstan-deprecation-rules": "^1.2.1", "phpstan/phpstan-deprecation-rules": "^1.2.1",
"phpstan/phpstan-phpunit": "^1.4.2", "phpstan/phpstan-phpunit": "^1.4.2",
"phpstan/phpstan-strict-rules": "^1.6.2", "phpstan/phpstan-strict-rules": "^1.6.2",
"phpunit/phpunit": "^10.5.16 || ^11.5.22", "phpunit/phpunit": "^10.5.16 || ^11.5.22 || ^12.3.6",
"symfony/var-dumper": "^6.4.8 || ^7.3.0" "symfony/var-dumper": "^6.4.8 || ^7.3.0"
}, },
"suggest": { "suggest": {
@ -4651,7 +4354,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-06-25T14:53:51+00:00" "time": "2025-09-11T08:29:08+00:00"
}, },
{ {
"name": "league/flysystem", "name": "league/flysystem",
@ -7061,55 +6764,6 @@
], ],
"time": "2025-04-30T15:16:02+00:00" "time": "2025-04-30T15:16:02+00:00"
}, },
{
"name": "psr/cache",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
"reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
"reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
"shasum": ""
},
"require": {
"php": ">=8.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Cache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for caching libraries",
"keywords": [
"cache",
"psr",
"psr-6"
],
"support": {
"source": "https://github.com/php-fig/cache/tree/3.0.0"
},
"time": "2021-02-03T23:26:27+00:00"
},
{ {
"name": "psr/clock", "name": "psr/clock",
"version": "1.0.0", "version": "1.0.0",
@ -13326,16 +12980,16 @@
}, },
{ {
"name": "larastan/larastan", "name": "larastan/larastan",
"version": "v3.6.1", "version": "v3.7.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/larastan/larastan.git", "url": "https://github.com/larastan/larastan.git",
"reference": "3c223047e374befd1b64959784685d6ecccf66aa" "reference": "2e653fd19585a825e283b42f38378b21ae481cc7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/larastan/larastan/zipball/3c223047e374befd1b64959784685d6ecccf66aa", "url": "https://api.github.com/repos/larastan/larastan/zipball/2e653fd19585a825e283b42f38378b21ae481cc7",
"reference": "3c223047e374befd1b64959784685d6ecccf66aa", "reference": "2e653fd19585a825e283b42f38378b21ae481cc7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -13349,7 +13003,7 @@
"illuminate/pipeline": "^11.44.2 || ^12.4.1", "illuminate/pipeline": "^11.44.2 || ^12.4.1",
"illuminate/support": "^11.44.2 || ^12.4.1", "illuminate/support": "^11.44.2 || ^12.4.1",
"php": "^8.2", "php": "^8.2",
"phpstan/phpstan": "^2.1.11" "phpstan/phpstan": "^2.1.23"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "^13", "doctrine/coding-standard": "^13",
@ -13403,7 +13057,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/larastan/larastan/issues", "issues": "https://github.com/larastan/larastan/issues",
"source": "https://github.com/larastan/larastan/tree/v3.6.1" "source": "https://github.com/larastan/larastan/tree/v3.7.1"
}, },
"funding": [ "funding": [
{ {
@ -13411,7 +13065,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-08-25T07:24:56+00:00" "time": "2025-09-10T19:42:11+00:00"
}, },
{ {
"name": "laravel/pail", "name": "laravel/pail",
@ -14381,16 +14035,16 @@
}, },
{ {
"name": "phpstan/phpstan", "name": "phpstan/phpstan",
"version": "2.1.22", "version": "2.1.25",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phpstan/phpstan.git", "url": "https://github.com/phpstan/phpstan.git",
"reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4" "reference": "4087d28bd252895874e174d65e26b2c202ed893a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/41600c8379eb5aee63e9413fe9e97273e25d57e4", "url": "https://api.github.com/repos/phpstan/phpstan/zipball/4087d28bd252895874e174d65e26b2c202ed893a",
"reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4", "reference": "4087d28bd252895874e174d65e26b2c202ed893a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -14435,7 +14089,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2025-08-04T19:17:37+00:00" "time": "2025-09-12T14:26:42+00:00"
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
@ -16400,7 +16054,7 @@
], ],
"aliases": [], "aliases": [],
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": [], "stability-flags": {},
"prefer-stable": true, "prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
@ -16411,7 +16065,7 @@
"ext-pdo": "*", "ext-pdo": "*",
"ext-zip": "*" "ext-zip": "*"
}, },
"platform-dev": [], "platform-dev": {},
"platform-overrides": { "platform-overrides": {
"php": "8.2" "php": "8.2"
}, },

View File

@ -1,6 +1,5 @@
<?php <?php
use App\Models\User;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
@ -18,16 +17,6 @@ return new class extends Migration
$table->boolean('mfa_email_enabled')->default(false); $table->boolean('mfa_email_enabled')->default(false);
}); });
User::chunk(100, function ($users) {
foreach ($users as $user) {
$user->update([
'mfa_app_secret' => $user->use_totp ? $user->totp_secret : null,
'mfa_app_recovery_codes' => null,
'mfa_email_enabled' => false,
]);
}
});
Schema::table('users', function (Blueprint $table) { Schema::table('users', function (Blueprint $table) {
$table->dropColumn('use_totp'); $table->dropColumn('use_totp');
$table->dropColumn('totp_secret'); $table->dropColumn('totp_secret');

View File

@ -5,7 +5,6 @@ return [
'model_label' => 'Database Host', 'model_label' => 'Database Host',
'model_label_plural' => 'Database Hosts', 'model_label_plural' => 'Database Hosts',
'table' => [ 'table' => [
'select_placeholder' => 'Select Database Host',
'database' => 'Database', 'database' => 'Database',
'name' => 'Name', 'name' => 'Name',
'host' => 'Host', 'host' => 'Host',

View File

@ -11,9 +11,11 @@ return [
'name' => 'Name', 'name' => 'Name',
'cron' => 'Cron', 'cron' => 'Cron',
'status' => 'Status', 'status' => 'Status',
'schedule_status' => [
'inactive' => 'Inactive', 'inactive' => 'Inactive',
'processing' => 'Processing', 'processing' => 'Processing',
'active' => 'Active', 'active' => 'Active',
],
'no_tasks' => 'No Tasks', 'no_tasks' => 'No Tasks',
'run_now' => 'Run Now', 'run_now' => 'Run Now',
'online_only' => 'Only When Online', 'online_only' => 'Only When Online',

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long