You've already forked Atomcms-edit
Initial commit
This commit is contained in:
Executable
+149
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
|
||||
namespace App\Livewire;
|
||||
|
||||
use App\Models\Miscellaneous\WebsiteSetting;
|
||||
use Carbon\Carbon;
|
||||
use Filament\Actions\Action;
|
||||
use Filament\Actions\Concerns\InteractsWithActions;
|
||||
use Filament\Actions\Contracts\HasActions;
|
||||
use Filament\Forms\Components\DateTimePicker;
|
||||
use Filament\Forms\Components\Textarea;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Forms\Concerns\InteractsWithForms;
|
||||
use Filament\Forms\Contracts\HasForms;
|
||||
use Filament\Notifications\Notification;
|
||||
use Livewire\Component;
|
||||
|
||||
class MaintenanceToggle extends Component implements HasActions, HasForms
|
||||
{
|
||||
use InteractsWithActions;
|
||||
use InteractsWithForms;
|
||||
|
||||
public function render()
|
||||
{
|
||||
return view('livewire.maintenance-toggle');
|
||||
}
|
||||
|
||||
public function toggleMaintenanceAction(): Action
|
||||
{
|
||||
$isEnabled = (bool) setting('maintenance_enabled');
|
||||
|
||||
return Action::make('toggleMaintenance')
|
||||
->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();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user