3 # Edit or create a filesystem backup
5 require './fsdump-lib.pl';
6 &foreign_require("cron", "cron-lib.pl");
10 # Adding a new backup of some type
11 $access{'edit'} || &error($text{'dump_ecannot1'});
12 &error_setup($text{'edit_err'});
13 $in{'dir'} || &error($text{'edit_edir'});
14 if ($supports_tar && ($config{'always_tar'} || $in{'forcetar'})) {
15 # Always use tar format
19 # Work out filesystem type
20 $fs = &directory_filesystem($in{'dir'});
21 @supp = &supported_filesystems();
22 if (&indexof($fs, @supp) < 0) {
24 $fs = "tar"; # fall back to tar mode
27 &error(&text('edit_efs', uc($fs)));
31 &ui_print_header(undef, $text{'edit_title'}, "", "edit");
32 $dump = { 'dir' => $in{'dir'},
34 'rsh' => &has_command("ssh"),
35 $config{'simple_sched'} ?
36 ( 'special' => 'daily' ) :
41 'weekdays' => '*' ) };
44 # Editing an existing backup
45 $dump = &get_dump($in{'id'});
46 $access{'edit'} && &can_edit_dir($dump) ||
47 &error($text{'dump_ecannot2'});
48 &ui_print_header(undef, $text{'edit_title2'}, "", "create");
51 @tds = ( "width=30%" );
52 print &ui_form_start("save_dump.cgi", "post");
53 print &ui_hidden("id", $in{'id'}),"\n";
54 print &ui_hidden("fs", $dump->{'fs'}),"\n";
55 print &ui_hidden_table_start(&text('edit_header', uc($dump->{'fs'})),
56 "width=100%", 2, "source", 1);
58 print &ui_table_row($text{'dump_format'},
59 $dump->{'fs'} eq 'tar' ? $text{'dump_tar'}
60 : &text('dump_dumpfs', uc($dump->{'fs'})),
63 if (!&multiple_directory_support($dump->{'fs'})) {
65 print &ui_table_row(&hlink($text{'dump_dir'}, "dir"),
66 &ui_textbox("dir", $dump->{'dir'}, 50)."\n".
67 &file_chooser_button("dir", 1),
71 # Multiple directories
72 print &ui_table_row(&hlink($text{'dump_dirs'}, "dirs"),
73 &ui_textarea("dir", join("\n", &dump_directories($dump)),
78 &dump_form($dump, \@tds);
79 print &ui_hidden_table_end();
81 print &ui_hidden_table_start($text{'edit_header3'}, "width=100%", 4, "opts", 0);
82 if (defined(&dump_options_form)) {
83 &dump_options_form($dump, \@tds);
86 if (defined(&verify_dump)) {
87 # Add option to verify, if supported
88 print &ui_table_row(&hlink($text{'dump_reverify'},"reverify"),
89 &ui_yesno_radio("reverify",
90 int($dump->{'reverify'})),
94 # Extra command-line parameters
95 if ($access{'extra'}) {
96 print &ui_table_row(&hlink($text{'dump_extra'}, "extra"),
97 &ui_textbox("extra", $dump->{'extra'}, 60), 3,
101 # Before and after commands
102 if ($access{'cmds'}) {
103 print &ui_table_row(&hlink($text{'dump_before'},"before"),
104 &ui_textbox("before", $dump->{'before'}, 60)." ".
105 &ui_checkbox("beforefok", 1, $text{'dump_fok'},
106 !$dump->{'beforefok'}),
109 print &ui_table_row(&hlink($text{'dump_after'},"after"),
110 &ui_textbox("after", $dump->{'after'}, 60)." ".
111 &ui_checkbox("afterfok", 1, $text{'dump_fok2'},
112 !$dump->{'afterfok'}),
115 print &ui_hidden_table_end();
117 print &ui_hidden_table_start($text{'edit_header2'}, "width=100%", 4,
120 # Show input for selecting when to run a dump, which can be never, on schedule
121 # or after some other dump
122 @dlist = grep { $_->{'id'} ne $in{'id'} } &list_dumps();
124 $follow = &ui_select("follow", $dump->{'follow'},
125 [ map { [ $_->{'id'}, &follow_desc($_) ] } @dlist ]);
127 print &ui_table_row(&hlink($text{'edit_enabled'}, "enabled"),
128 &ui_radio("enabled", $dump->{'follow'} ? 2 :
129 $dump->{'enabled'} ? 1 : 0,
130 [ [ 0, $text{'edit_enabled_no'}."<br>" ],
132 ( [ 2, $text{'edit_enabled_af'}." ".$follow."<br>" ] ) : ( ),
133 [ 1, $text{'edit_enabled_yes'} ] ]), 3, \@tds);
135 # Email address to send output to
136 print &ui_table_row(&hlink($text{'edit_email'}, "email"),
137 &ui_textbox("email", $dump->{'email'}, 30), 3, \@tds);
139 # Subject line for email message
140 print &ui_table_row(&hlink($text{'edit_subject'}, "subject"),
141 &ui_opt_textbox("subject", $dump->{'subject'},
142 40, $text{'default'}), 3, \@tds);
144 if (!$config{'simple_sched'} || ($dump && !$dump->{'special'})) {
145 # Complex Cron time input
146 print &ui_table_row(undef,
147 "<table border width=100%>".
148 &capture_function_output(\&cron::show_times_input, $dump).
154 print &ui_hidden("special_def", 1),"\n";
155 print &ui_table_row(&hlink($text{'edit_special'}, "special"),
156 &ui_select("special", $dump->{'special'},
157 [ map { [ $_, $cron::text{'edit_special_'.$_} ] }
158 ('hourly', 'daily', 'weekly', 'monthly', 'yearly') ]),
161 print &ui_hidden_table_end();
164 print &ui_form_end([ [ "save", $text{'save'} ],
165 [ "savenow", $text{'edit_savenow'} ],
166 [ "restore", $text{'edit_restore'} ],
167 [ "delete", $text{'delete'} ] ]);
170 print &ui_form_end([ [ "create", $text{'create'} ],
171 [ "savenow", $text{'edit_createnow'} ] ]);
174 &ui_print_footer("", $text{'index_return'});
179 local @dirs = &dump_directories($_[0]);
180 return &text(defined($_[0]->{'level'}) ? 'edit_tolevel' : 'edit_to',
181 $dirs[0], &dump_dest($_[0]), $_[0]->{'level'});