diff --git a/app/Filament/Server/Resources/ScheduleResource.php b/app/Filament/Server/Resources/ScheduleResource.php index 5cec5f275..04b86fe92 100644 --- a/app/Filament/Server/Resources/ScheduleResource.php +++ b/app/Filament/Server/Resources/ScheduleResource.php @@ -14,6 +14,7 @@ use Filament\Forms\Components\Section; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; +use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Form; use Filament\Forms\Set; use Filament\Resources\Resource; @@ -66,15 +67,26 @@ class ScheduleResource extends Resource ->columns(10) ->schema([ TextInput::make('name') - ->columnSpan(10) + ->columnSpan(fn ($operation) => $operation !== 'view' ? 10 : 5) ->label('Schedule Name') ->placeholder('A human readable identifier for this schedule.') ->autocomplete(false) ->required(), + ToggleButtons::make('Status') + ->formatStateUsing(fn (Schedule $schedule) => !$schedule->is_active ? 'inactive' : ($schedule->is_processing ? 'processing' : 'active')) + ->options(fn (Schedule $schedule) => !$schedule->is_active ? ['inactive' => 'Inactive'] : ($schedule->is_processing ? ['processing' => 'Processing'] : ['active' => 'Active'])) + ->colors([ + 'inactive' => 'danger', + 'processing' => 'warning', + 'active' => 'success', + ]) + ->visibleOn('view') + ->columnSpan(5), Toggle::make('only_when_online') ->label('Only when Server is Online?') ->hintIconTooltip('Only execute this schedule when the server is in a running state.') ->hintIcon('tabler-question-mark') + ->inline(false) ->columnSpan(5) ->required() ->default(1), @@ -82,6 +94,7 @@ class ScheduleResource extends Resource ->label('Enable Schedule?') ->hintIconTooltip('This schedule will be executed automatically if enabled.') ->hintIcon('tabler-question-mark') + ->inline(false) ->columnSpan(5) ->required() ->default(1), diff --git a/app/Filament/Server/Resources/ScheduleResource/Pages/ViewSchedule.php b/app/Filament/Server/Resources/ScheduleResource/Pages/ViewSchedule.php index 7e965bb58..a9dd654ea 100644 --- a/app/Filament/Server/Resources/ScheduleResource/Pages/ViewSchedule.php +++ b/app/Filament/Server/Resources/ScheduleResource/Pages/ViewSchedule.php @@ -2,8 +2,13 @@ namespace App\Filament\Server\Resources\ScheduleResource\Pages; +use App\Facades\Activity; use App\Filament\Server\Resources\ScheduleResource; +use App\Models\Permission; +use App\Models\Schedule; +use App\Services\Schedules\ProcessScheduleService; use Filament\Actions; +use Filament\Facades\Filament; use Filament\Resources\Pages\ViewRecord; class ViewSchedule extends ViewRecord @@ -13,6 +18,21 @@ class ViewSchedule extends ViewRecord protected function getHeaderActions(): array { return [ + Actions\Action::make('runNow') + ->authorize(fn () => auth()->user()->can(Permission::ACTION_SCHEDULE_UPDATE, Filament::getTenant())) + ->label(fn (Schedule $schedule) => $schedule->tasks->count() === 0 ? 'No tasks' : ($schedule->is_processing ? 'Processing' : 'Run now')) + ->color(fn (Schedule $schedule) => $schedule->tasks->count() === 0 || $schedule->is_processing ? 'warning' : 'primary') + ->disabled(fn (Schedule $schedule) => $schedule->tasks->count() === 0 || $schedule->is_processing) + ->action(function (ProcessScheduleService $service, Schedule $schedule) { + $service->handle($schedule, true); + + Activity::event('server:schedule.execute') + ->subject($schedule) + ->property('name', $schedule->name) + ->log(); + + $this->fillForm(); + }), Actions\EditAction::make(), ]; }