#!/usr/local/bin/perl # edit_dump.cgi # Edit or create a filesystem backup require './fsdump-lib.pl'; &foreign_require("cron", "cron-lib.pl"); &ReadParse(); if (!$in{'id'}) { # Adding a new backup of some type $access{'edit'} || &error($text{'dump_ecannot1'}); &error_setup($text{'edit_err'}); $in{'dir'} || &error($text{'edit_edir'}); if ($supports_tar && ($config{'always_tar'} || $in{'forcetar'})) { # Always use tar format $fs = "tar"; } else { # Work out filesystem type $fs = &directory_filesystem($in{'dir'}); @supp = &supported_filesystems(); if (&indexof($fs, @supp) < 0) { if ($supports_tar) { $fs = "tar"; # fall back to tar mode } else { &error(&text('edit_efs', uc($fs))); } } } &ui_print_header(undef, $text{'edit_title'}, "", "edit"); $dump = { 'dir' => $in{'dir'}, 'fs' => $fs, $config{'simple_sched'} ? ( 'special' => 'daily' ) : ( 'mins' => '0', 'hours' => '0', 'days' => '*', 'months' => '*', 'weekdays' => '*' ) }; } else { # Editing an existing backup $dump = &get_dump($in{'id'}); $access{'edit'} && &can_edit_dir($dump) || &error($text{'dump_ecannot2'}); &ui_print_header(undef, $text{'edit_title2'}, "", "create"); } print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
",&text('edit_header', uc($dump->{'fs'})), "
\n"; print "\n"; print "\n"; if (!&multiple_directory_support($dump->{'fs'})) { # One directory print "\n"; printf "\n", $dump->{'dir'}, &file_chooser_button("dir", 1); } else { # Multiple directories print "\n"; print "\n"; } &dump_form($dump); if (defined(&dump_options_form)) { &new_header($text{'edit_header3'}); &dump_options_form($dump); } if (defined(&verify_dump)) { # Add option to verify, if supported print "\n"; print "\n"; } if ($access{'extra'}) { print "\n"; printf "\n", $dump->{'extra'}; } if ($access{'cmds'}) { print "\n"; printf "\n", $dump->{'before'}; print "\n"; printf "\n", $dump->{'after'}; } &new_header($text{'edit_header2'}); # Show input for selecting when to run a dump, which can be never, on schedule # or after some other dump @dlist = grep { $_->{'id'} ne $in{'id'} } &list_dumps(); if (@dlist) { $follow = &ui_select("follow", $dump->{'follow'}, [ map { [ $_->{'id'}, &text(defined($_->{'level'}) ? 'edit_tolevel' : 'edit_to', $_->{'dir'}, &dump_dest($_), $_->{'level'}) ] } @dlist ]); } print "\n"; print "\n"; # Email address to send output to print "\n"; printf "\n", $dump->{'email'}; # Subject line for email message print "\n"; printf "\n", $dump->{'subject'}; if (!$config{'simple_sched'} || ($dump && !$dump->{'special'})) { # Complex Cron time input print "
$text{'dump_format'}",$dump->{'fs'} eq 'tar' ? $text{'dump_tar'} : &text('dump_dumpfs', uc($dump->{'fs'})),"
",&hlink($text{'dump_dir'}, "dir"),"". " %s
", &hlink($text{'dump_dirs'}, "dirs"),"
",&hlink($text{'dump_reverify'},"reverify"), "",&ui_yesno_radio("reverify", int($dump->{'reverify'})),"
",&hlink($text{'dump_extra'}, "extra"),"
",&hlink($text{'dump_before'},"before"),"
",&hlink($text{'dump_after'},"after"),"
",&hlink($text{'edit_enabled'}, "enabled"), "", &ui_radio("enabled", $dump->{'follow'} ? 2 : $dump->{'enabled'} ? 1 : 0, [ [ 0, $text{'edit_enabled_no'}."
" ], @dlist ? ( [ 2, $text{'edit_enabled_af'}." ".$follow."
" ] ) : ( ), [ 1, $text{'edit_enabled_yes'} ] ]),"
",&hlink($text{'edit_email'}, "email"),"
",&hlink($text{'edit_subject'}, "subject")," %s\n", $dump->{'subject'} ? "" : "checked", $text{'default'}; printf "\n", $dump->{'subject'} ? "checked" : ""; printf "
\n"; print "\n"; &foreign_call("cron", "show_times_input", $dump); print "
\n"; } else { # Simple input print &ui_hidden("special_def", 1),"\n"; print "
",&hlink($text{'edit_special'}, "special"),"",&ui_select("special", $dump->{'special'}, [ map { [ $_, $cron::text{'edit_special_'.$_} ] } ('hourly', 'daily', 'weekly', 'monthly', 'yearly') ]), "
\n"; } print "\n"; print "\n"; if ($in{'id'}) { print "\n"; print "\n"; print "\n"; print "\n"; } else { print "\n"; print "\n"; } print "
\n"; &ui_print_footer("", $text{'index_return'});