#!/usr/local/bin/perl
# Show a form for backing up a single virtual server, or a bunch
require './virtual-server-lib.pl';
&ReadParse();
if ($in{'dom'}) {
$d = &get_domain($in{'dom'});
($cbmode = &can_backup_domain($d)) || &error($text{'backup_ecannot'});
$msg = &domain_in($d);
}
if ($in{'sched'}) {
&ui_print_header($msg, $text{'backup_title2'}, "");
print &ui_form_start("backup_sched.cgi", "post");
}
else {
&ui_print_header($msg, $text{'backup_title'}, "");
print &ui_form_start("backup.cgi/backup.tgz", "post");
}
@tds = ( "width=30% ");
# Work out default backup selection
$dest = $config{'backup_dest'};
$backup_fmt = $config{'backup_fmt'};
$backup_mkdir = $config{'backup_mkdir'};
$backup_errors = $config{'backup_errors'};
$backup_strftime = $config{'backup_strftime'};
$backup_onebyone = $config{'backup_onebyone'};
$backup_parent = $config{'backup_parent'};
if ($d) {
# Just one domain
if (defined($d->{'backup_dest'})) {
$dest = $d->{'backup_dest'};
}
elsif ($config{'backup_fmt'} == 0 && $dest) {
$dest .= "/$d->{'dom'}.tar.gz";
}
$backup_fmt = $d->{'backup_fmt'}
if (defined($d->{'backup_fmt'}));
$backup_mkdir = $d->{'backup_mkdir'}
if (defined($d->{'backup_mkdir'}));
$backup_errors = $d->{'backup_errors'}
if (defined($d->{'backup_errors'}));
$backup_strftime = $d->{'backup_strftime'}
if (defined($d->{'backup_strftime'}));
$backup_onebyone = $d->{'backup_onebyone'}
if (defined($d->{'backup_onebyone'}));
$backup_parent = $d->{'backup_parent'}
if (defined($d->{'backup_parent'}));
print &ui_hidden("dom", $in{'dom'}),"\n";
print &ui_hidden("doms", $in{'dom'}),"\n";
print &ui_hidden("backup_all", 0),"\n";
}
else {
# User can select which domains
print &ui_hidden_table_start($text{'backup_headerdoms'}, "width=100%",
2, "doms", 1, \@tds);
($cbmode = &can_backup_domain()) || &error($text{'backup_ecannot'});
$backup_all = int($config{'backup_all'});
@bak = split(/\s+/, $config{'backup_doms'});
@doms = &list_domains();
$dsel = &ui_radio("all", $backup_all,
[ [ 1, $text{'backup_all'} ],
[ 0, $text{'backup_sel'} ],
[ 2, $text{'backup_exc'} ] ])."<br>\n".
&servers_input("doms", \@bak, \@doms);
$dsel .= "<br>".&ui_checkbox(
"parent", 1, &hlink($text{'backup_parent'}, 'backup_parent'),
$backup_parent);
print &ui_table_row(&hlink($text{'backup_doms'}, "backup_doms"),
$dsel);
print &ui_hidden_table_end("doms");
}
# Show feature and plugin selection boxes
print &ui_hidden_table_start($text{'backup_headerfeatures'}, "width=100%", 2,
"features", 0, \@tds);
$ftable = "";
$ftable .= &ui_radio("feature_all", int($config{'backup_feature_all'}),
[ [ 1, $text{'backup_allfeatures'} ],
[ 0, $text{'backup_selfeatures'} ] ])."<br>\n";
@links = ( &select_all_link("feature"), &select_invert_link("feature") );
$ftable .= &ui_links_row(\@links);
foreach $f (&get_available_backup_features()) {
$ftable .= &ui_checkbox("feature", $f,
$text{'backup_feature_'.$f} || $text{'feature_'.$f},
$config{'backup_feature_'.$f})."\n";
local $ofunc = "show_backup_$f";
if (defined(&$ofunc)) {
local %opts = map { split(/=/, $_) }
split(/,/, $config{'backup_opts_'.$f});
$ftable .= &$ofunc(\%opts);
}
$ftable .= "<br>\n";
}
foreach $f (@backup_plugins) {
$ftable .= &ui_checkbox("feature", $f,
&plugin_call($f, "feature_backup_name") ||
&plugin_call($f, "feature_name"),
$config{'backup_feature_'.$f})."\n";
if (&plugin_defined($f, "feature_backup_opts")) {
local %opts = map { split(/=/, $_) }
split(/,/, $config{'backup_opts_'.$f});
$ftable .= &plugin_call($f, "feature_backup_opts", \%opts);
}
$ftable .= "<br>\n";
}
$ftable .= &ui_links_row(\@links);
print &ui_table_row(&hlink($text{'backup_features'}, "backup_features"),
$ftable);
if (&can_backup_virtualmin() && !defined($in{'dom'})) {
# Show virtualmin object backup options
$vtable = "";
%virts = map { $_, 1 } split(/\s+/, $config{'backup_virtualmin'});
foreach $vo (@virtualmin_backups) {
$vtable .= &ui_checkbox("virtualmin", $vo,
$text{'backup_v'.$vo}, $virts{$vo})."<br>\n";
}
print &ui_table_row(&hlink($text{'backup_virtualmin'},
"backup_virtualmin"), $vtable);
}
print &ui_hidden_table_end("features");
# Show destination fields
print &ui_hidden_table_start($text{'backup_headerdest'}, "width=100%", 2,
"dest", 1, \@tds);
print &ui_table_row(&hlink($text{'backup_dest'}, "backup_dest"),
&show_backup_destination("dest", $dest, $cbmode == 2, $d, !$d)."\n".
&ui_checkbox("strftime", 1,
&hlink($text{'backup_strftime'}, "backup_strftime"),
$backup_strftime)."<br>\n".
($d ? "" :
&ui_checkbox("onebyone", 1,
&hlink($text{'backup_onebyone'}, "backup_onebyone"),
$backup_onebyone)));
# Single/multiple file mode
if (!$d) {
print &ui_table_row(&hlink($text{'backup_fmt'}, "backup_fmt"),
&ui_radio("fmt", int($backup_fmt),
[ [ 0, $text{'backup_fmt0'} ],
$backup_fmt == 1 ?
( [ 1, $text{'backup_fmt1'} ],
[ 2, $text{'backup_fmt2'} ] ) :
( [ 2, $text{'backup_fmt1'} ] ) ])."<br>".
&ui_checkbox("mkdir", 1, $text{'backup_mkdir'},
int($backup_mkdir)));
}
elsif ($cbmode == 1) {
print &ui_table_row(&hlink($text{'backup_mkdir'}, "backup_mkdir"),
&ui_yesno_radio("mkdir", int($backup_mkdir)));
}
# Show error mode
print &ui_table_row(&hlink($text{'backup_errors'}, "backup_errors"),
&ui_radio("errors", int($backup_errors),
[ [ 0, $text{'backup_errors0'} ],
[ 1, $text{'backup_errors1'} ] ]));
# For a single domain, show option to add sub-servers
if ($d) {
print &ui_table_row(&hlink($text{'backup_parent2'}, "backup_parent2"),
&ui_yesno_radio("parent", $backup_parent ? 1 : 0));
}
print &ui_hidden_table_end("dest");
if ($in{'sched'}) {
# Show schedule inputs
print &ui_hidden_table_start($text{'backup_headersched'}, "width=100%",
2, "sched", 0, \@tds);
local $job = &find_virtualmin_cron_job($backup_cron_cmd);
# Email input
print &ui_table_row(&hlink($text{'backup_email'}, "backup_email"),
&ui_textbox("email", $config{'backup_email'}, 40).
"<br>\n".
&ui_checkbox("email_err", 1,
$text{'backup_email_err'},
$config{'backup_email_err'}).
"<br>\n".
&ui_checkbox("email_doms", 1,
$text{'backup_email_doms'},
$config{'backup_email_doms'})
);
# Enabled/disabled input
print &ui_table_row(&hlink($text{'backup_enabled'}, "backup_enabled"),
&ui_radio("enabled", $job ? 1 : 0,
[ [ 0, $text{'no'} ],
[ 1, $text{'backup_enabledyes'} ] ]));
# Times input
$job ||= { 'special' => 'daily' };
&foreign_require("cron", "cron-lib.pl");
$croninput = &capture_function_output(\&cron::show_times_input, $job);
print &ui_table_row(undef, "<table border>$croninput</table>", 2);
print &ui_hidden_table_end("sched");
print &ui_form_end([ [ "save", $text{'backup_save'} ] ]);
}
else {
print &ui_form_end([ [ "now", $text{'backup_now'} ] ]);
}
&ui_print_footer("", $text{'index_return'});
syntax highlighted by Code2HTML, v. 0.9.1