label($isEnabled ? __('Disable Maintenance') : __('Enable Maintenance')) ->color($isEnabled ? 'danger' : 'success') ->icon($isEnabled ? 'heroicon-o-lock-open' : 'heroicon-o-lock-closed') ->requiresConfirmation() ->modalHeading($isEnabled ? __('Disable Maintenance Mode?') : __('Enable Maintenance Mode?')) ->modalDescription($isEnabled ? __('Are you sure you want to disable maintenance mode? Users will be able to access the site.') : __('Are you sure you want to enable maintenance mode? Users will not be able to access the site.')) ->action(function () use ($isEnabled) { $newState = ! $isEnabled; WebsiteSetting::updateOrCreate( ['key' => 'maintenance_enabled'], ['value' => $newState ? '1' : '0'], ); Notification::make() ->title($newState ? __('Maintenance mode enabled') : __('Maintenance mode disabled')) ->success() ->send(); $this->redirect(request()->header('Referer') ?? route('filament.housekeeping.pages.dashboard')); }); } public function previewMaintenanceAction(): Action { return Action::make('previewMaintenance') ->label(__('Preview Page')) ->icon('heroicon-o-eye') ->color('info') ->url(route('maintenance.show', ['preview' => '1']), true); } public function editMaintenanceMessageAction(): Action { return Action::make('editMaintenanceMessage') ->label(__('Edit Message')) ->icon('heroicon-o-pencil') ->color('warning') ->form([ Textarea::make('message') ->label(__('Maintenance Message')) ->default(fn () => setting('maintenance_message')) ->rows(5) ->required(), ]) ->action(function (array $data) { WebsiteSetting::updateOrCreate( ['key' => 'maintenance_message'], ['value' => $data['message']], ); Notification::make() ->title(__('Maintenance message updated')) ->success() ->send(); }); } public function scheduleMaintenanceAction(): Action { $scheduledAt = setting('maintenance_scheduled_at'); $isScheduled = $scheduledAt && strtotime((string) $scheduledAt) > time(); return Action::make('scheduleMaintenance') ->label($isScheduled ? __('Cancel Schedule') : __('Schedule')) ->icon($isScheduled ? 'heroicon-o-x-circle' : 'heroicon-o-clock') ->color($isScheduled ? 'danger' : 'info') ->form($isScheduled ? [] : [ DateTimePicker::make('scheduled_at') ->label(__('Start Time')) ->required() ->minDate(now()) ->helperText(__('When should maintenance mode start?')), TextInput::make('duration') ->label(__('Duration (minutes)')) ->numeric() ->default(30) ->minValue(1) ->helperText(__('How long should maintenance last?')), ]) ->modalHeading($isScheduled ? __('Cancel Scheduled Maintenance?') : __('Schedule Maintenance')) ->modalDescription($isScheduled ? __('Are you sure you want to cancel the scheduled maintenance?') : __('Schedule when maintenance mode should automatically start.')) ->action(function (array $data) use ($isScheduled) { if ($isScheduled) { WebsiteSetting::where('key', 'maintenance_scheduled_at')->delete(); WebsiteSetting::where('key', 'maintenance_duration_minutes')->delete(); Notification::make() ->title(__('Scheduled maintenance cancelled')) ->success() ->send(); } else { WebsiteSetting::updateOrCreate( ['key' => 'maintenance_scheduled_at'], ['value' => $data['scheduled_at']], ); WebsiteSetting::updateOrCreate( ['key' => 'maintenance_duration_minutes'], ['value' => $data['duration']], ); $startTime = Carbon::parse($data['scheduled_at'])->format('M d, Y H:i'); Notification::make() ->title(__('Maintenance scheduled')) ->body(__('Maintenance will start at :time for :duration minutes', ['time' => $startTime, 'duration' => $data['duration']])) ->success() ->send(); } }); } }