Files
Atomcms-edit/app/Console/Commands/CheckScheduledMaintenance.php
T
2026-05-09 17:32:17 +02:00

63 lines
1.9 KiB
PHP
Executable File

<?php
namespace App\Console\Commands;
use App\Models\Miscellaneous\WebsiteSetting;
use Carbon\Carbon;
use Illuminate\Console\Command;
class CheckScheduledMaintenance extends Command
{
#[\Override]
protected $signature = 'maintenance:check-scheduled';
#[\Override]
protected $description = 'Check and activate scheduled maintenance mode';
public function handle(): int
{
$scheduledAt = setting('maintenance_scheduled_at');
$durationSetting = setting('maintenance_duration_minutes');
$duration = (int) (is_string($durationSetting) ? $durationSetting : '30');
$isEnabledSetting = setting('maintenance_enabled');
$isEnabled = $isEnabledSetting === '1';
if (! $scheduledAt) {
$this->info('No maintenance scheduled');
return self::SUCCESS;
}
$scheduledAtString = is_scalar($scheduledAt) ? (string) $scheduledAt : '';
$startTime = Carbon::parse($scheduledAtString);
$endTime = $startTime->copy()->addMinutes($duration);
$now = Carbon::now();
if ($now->between($startTime, $endTime) && ! $isEnabled) {
WebsiteSetting::updateOrCreate(
['key' => 'maintenance_enabled'],
['value' => '1'],
);
$this->info("Maintenance mode enabled (scheduled for {$startTime->format('Y-m-d H:i')})");
return self::SUCCESS;
}
if ($now->greaterThan($endTime) && $isEnabled) {
WebsiteSetting::where('key', 'maintenance_enabled')->delete();
$this->info("Maintenance mode disabled (schedule ended at {$endTime->format('Y-m-d H:i')})");
WebsiteSetting::where('key', 'maintenance_scheduled_at')->delete();
WebsiteSetting::where('key', 'maintenance_duration_minutes')->delete();
return self::SUCCESS;
}
$this->info('No action needed');
return self::SUCCESS;
}
}