diff --git a/whm/gniza-whm/remotes.cgi b/whm/gniza-whm/remotes.cgi index 924c1f0..4d65341 100644 --- a/whm/gniza-whm/remotes.cgi +++ b/whm/gniza-whm/remotes.cgi @@ -295,13 +295,32 @@ sub handle_add { } GnizaWHM::UI::init_remote_dir(%init_args); + # Fork sysbackup if toggle is on + my $sysbackup_msg = ''; + if ($form->{'sysbackup_toggle'}) { + my $log_file = "/var/log/gniza/sysbackup-$name.log"; + my $pid = fork(); + if (defined $pid && $pid == 0) { + # Child: detach and exec sysbackup + close STDIN; + close STDOUT; + close STDERR; + open STDIN, '<', '/dev/null'; + open STDOUT, '>', $log_file; + open STDERR, '>&', \*STDOUT; + exec '/usr/local/bin/gniza', 'sysbackup', "--remote=$name"; + exit 1; + } + $sysbackup_msg = ' System backup started in background.' if defined $pid; + } + if ($form->{'wizard'}) { - GnizaWHM::UI::set_flash('success', "Remote '$name' created. Now set up a schedule."); + GnizaWHM::UI::set_flash('success', "Remote '$name' created. Now set up a schedule." . $sysbackup_msg); print "Status: 302 Found\r\n"; print "Location: schedules.cgi?action=add&wizard=1&remote_name=" . _uri_escape($name) . "\r\n\r\n"; exit; } - GnizaWHM::UI::set_flash('success', "Remote '$name' created successfully."); + GnizaWHM::UI::set_flash('success', "Remote '$name' created successfully." . $sysbackup_msg); print "Status: 302 Found\r\n"; print "Location: remotes.cgi\r\n\r\n"; exit; @@ -632,6 +651,19 @@ sub render_remote_form { _field($conf, 'RETENTION_COUNT', 'Snapshots to Keep', 'Default: 30'); print qq{\n\n}; + # Initial System Backup toggle (add mode only) + unless ($is_edit) { + my $sysbackup_checked = $form->{'sysbackup_toggle'} ? ' checked' : ''; + print qq{
\n
\n}; + print qq{

Initial Backup

\n}; + print qq{
\n}; + print qq{ \n}; + print qq{ \n}; + print qq{
\n}; + print qq{

Backs up WHM/cPanel config, installed packages, and cron jobs to the new remote immediately after creation. Runs in the background.

\n}; + print qq{
\n
\n}; + } + # Submit print qq{
\n}; my $btn_label = $is_edit ? 'Save Changes' : 'Create Remote';