forked from alexjustesen/speedtest-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUpdateGeneralSettings.php
More file actions
120 lines (100 loc) · 3.04 KB
/
UpdateGeneralSettings.php
File metadata and controls
120 lines (100 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
namespace App\Console\Commands;
use App\Helpers\TimeZoneHelper;
use App\Settings\GeneralSettings;
use Cron\CronExpression;
use Illuminate\Console\Command;
use function Laravel\Prompts\confirm;
use function Laravel\Prompts\text;
class UpdateGeneralSettings extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'app:update-general-settings';
/**
* The console command description.
*
* @var string
*/
protected $description = 'CLI to update the general settings.';
/**
* Execute the console command.
*/
public function handle()
{
$settings = new GeneralSettings();
$this->updateSiteName($settings);
$this->updateTimeZone($settings);
$this->updateSchedule($settings);
$this->resetSevers($settings);
$this->line('✅ Settings updated!');
}
protected function resetSevers($settings): void
{
$confirmed = confirm(
label: 'Do you want to reset the server list?',
default: false,
yes: 'Yes, reset it',
no: 'No, keep it'
);
if ($confirmed) {
$settings->speedtest_server = [];
$settings->save();
}
}
protected function updateSchedule($settings): void
{
$cron = text(
label: 'What is the schedule?',
placeholder: '0 * * * *',
default: $settings->speedtest_schedule,
required: true,
validate: fn (string $value) => match (true) {
! CronExpression::isValidExpression($value) => 'The schedule expression is invalid.',
default => null
}
);
if ($cron) {
$settings->speedtest_schedule = $cron;
$settings->save();
}
}
protected function updateSiteName($settings): void
{
$name = text(
label: 'What is the site name?',
placeholder: 'Speedtest Tracker',
default: $settings->site_name,
required: true,
validate: fn (string $value) => match (true) {
strlen($value) < 2 => 'The site name must be at least 2 characters.',
strlen($value) > 50 => 'The site name must not exceed 50 characters.',
default => null
}
);
if ($name) {
$settings->site_name = $name;
$settings->save();
}
}
protected function updateTimeZone($settings): void
{
$timezone = text(
label: 'What is the time zone?',
placeholder: 'UTC',
default: $settings->timezone,
required: true,
validate: fn (string $value) => match (true) {
! TimeZoneHelper::validate($value) => 'The time zone must be a valid time zone.',
default => null
}
);
if ($timezone) {
$settings->timezone = $timezone;
$settings->save();
}
}
}