#!/usr/local/bin/perl
# edit_log.cgi
# Show a form for creating or editing a log
require './logrotate-lib.pl';
&ReadParse();
$conf = &get_config();
if ($in{'global'}) {
&ui_print_header(undef, $text{'global_title'}, "", "global");
$lconf = $conf;
}
elsif ($in{'new'}) {
&ui_print_header(undef, $text{'edit_title2'}, "", "create");
}
else {
&ui_print_header(undef, $text{'edit_title1'}, "", "edit");
$log = $conf->[$in{'idx'}];
$lconf = $log->{'members'};
}
print &ui_form_start("save_log.cgi", "post");
print &ui_hidden("new", $in{'new'}),"\n";
print &ui_hidden("idx", $in{'idx'}),"\n";
print &ui_hidden("global", $in{'global'}),"\n";
if (!$in{'global'}) {
print &ui_table_start($text{'edit_header'}, "width=100%", 2);
print &ui_table_row($text{'edit_file'},
&ui_textarea("file",
join("\n", @{$log->{'name'}}), 3, 60)." ".
&file_chooser_button("file"));
}
else {
print &ui_table_start($text{'global_header'}, "width=100%", 2);
}
$period = &get_period($lconf);
$defperiod = &get_period($conf) if (!$in{'global'});
$dptext = $text{"period_".$defperiod} || $text{'period_never'};
print &ui_table_row($text{'edit_sched'},
&ui_select("sched", $period,
[ [ '', &deftext($dptext) ],
[ 'daily', $text{'period_daily'} ],
[ 'weekly', $text{'period_weekly'} ],
[ 'monthly', $text{'period_monthly'} ] ]));
$size = &find_value("size", $lconf);
print &ui_table_row($text{'edit_size'},
&ui_opt_textbox("size", $size, 10,
&deftext(&find_default("size") ||
$text{'period_never'})).
" ".$text{'period_bytes'});
print &ui_table_hr();
$rotate = &find_value("rotate", $lconf);
print &ui_table_row($text{'edit_rotate'},
&ui_opt_textbox("rotate", $rotate, 5,
&deftext(&find_default("rotate"))));
&yesno_option("compress", "nocompress", $lconf);
&yesno_option("delaycompress", "nodelaycompress", $lconf);
&yesno_option("copytruncate", "nocopytruncate", $lconf);
&yesno_option("ifempty", "notifempty", $lconf);
&yesno_option("missingok", "nomissingok", $lconf);
print &ui_table_hr();
$create = &find_value("create", $lconf);
$nocreate = &find("nocreate", $lconf);
($mode, $user, $group) = split(/\s+/, $create);
$dcr = &find_default("create");
@crinputs = ( "createmode", "createuser", "creategroup" );
print &ui_table_row($text{'edit_create'},
&ui_radio("create", defined($create) ? 2 : $nocreate ? 1 : 0,
[ [ 2, &text('edit_createas',
&ui_textbox("createmode", $mode, 4, !defined($create)),
&ui_user_textbox("createuser", $user, 0,
!defined($create)),
&ui_group_textbox("creategroup", $group, 0,
!defined($create)))."
",
&js_disable_inputs([ ], \@crinputs, "onClick") ],
[ 1, $text{'edit_createno'}."
",
&js_disable_inputs(\@crinputs, [ ], "onClick") ],
[ 0, &deftext($dcr ne '' ? $dcr :
defined($dcr) ? $text{'edit_createsame'} :
$text{'edit_createno'}),
&js_disable_inputs(\@crinputs, [ ], "onClick") ] ]));
$olddir = &find_value("olddir", $lconf);
$noolddir = &find("noolddir", $lconf);
print &ui_table_row($text{'edit_olddir'},
&ui_radio("olddir", $olddir ? 2 : $noolddir ? 1 : 0,
[ [ 2, $text{'edit_olddirto'}." ".
&ui_textbox("olddirto", $olddir, 30, !$olddir)." ".
&file_chooser_button("olddirto", 1)."
",
&js_disable_inputs([ ], [ "olddirto" ], "onClick") ],
[ 1, $text{'edit_olddirsame'}."
",
&js_disable_inputs([ "olddirto" ], [ ], "onClick") ],
[ 0, &deftext(&find_default("olddir") ||
$text{'edit_olddirsame'}),
&js_disable_inputs([ "olddirto" ], [ ], "onClick") ] ]));
$ext = &find_value("extension", $lconf);
print &ui_table_row($text{'edit_ext'},
&ui_opt_textbox("ext", $ext, 10,
&deftext(&find_default("ext"))));
print &ui_table_hr();
$mail = &find_value("mail", $lconf);
$nomail = &find("nomail", $lconf);
$mmode = $mail ? 2 : $nomail ? 1 : 0;
print &ui_table_row($text{'edit_mail'},
&ui_radio("mail", $mmode,
[ [ 2, $text{'edit_mailto'}." ".
&ui_textbox("mailto", $mail, 30, $mmode != 2).
"
",
&js_disable_inputs([ ], [ "mailto" ], "onClick") ],
[ 1, $text{'edit_mailno'}."
",
&js_disable_inputs([ "mailto" ], [ ], "onClick") ],
[ 0, &deftext(&find_default("mail") ||
$text{'edit_mailno'}),
&js_disable_inputs([ "mailto" ], [ ], "onClick") ] ]));
$mailfirst = &find("mailfirst", $lconf);
$maillast = &find("maillast", $lconf);
print &ui_table_row($text{'edit_mailfl'},
&ui_radio("mailfirst", $mailfirst ? 2 : $maillast ? 1 : 0,
[ [ 2, $text{'edit_mailfirst'}."
" ],
[ 1, $text{'edit_maillast'}."
" ],
[ 0, &deftext(defined(
&find_default("mailfirst")) ?
$text{'edit_mailfirst'} :
$text{'edit_maillast'}) ] ]));
if (&get_logrotate_version() < 3.6) {
$errors = &find_value("errors", $lconf);
print &ui_table_row($text{'edit_errors'},
&ui_opt_textbox("errors", $errors, 30,
&deftext(&find_default("errors") ||
$text{'edit_errorsno'})."
",
$text{'edit_errorsto'}));
}
print &ui_table_hr();
$pre = &find_value("prerotate", $lconf);
print &ui_table_row($text{'edit_pre'},
&ui_textarea("pre", $pre, 3, 60));
$post = &find_value("postrotate", $lconf);
print &ui_table_row($text{'edit_post'},
&ui_textarea("post", $post, 3, 60));
if (&get_logrotate_version() >= 3.4) {
&yesno_option("sharedscripts", "nosharedscripts", $lconf);
}
print &ui_table_end();
if ($in{'global'}) {
print &ui_form_end([ [ 'save', $text{'save'} ] ], "100%");
}
elsif ($in{'new'}) {
print &ui_form_end([ [ 'create', $text{'create'} ] ], "100%");
}
else {
print &ui_form_end([ [ 'save', $text{'save'} ],
[ 'now', $text{'edit_now'} ],
[ 'delete', $text{'delete'} ] ], "100%");
}
&ui_print_footer("", $text{'index_return'});
# yesno_option(name1, name2, &conf)
sub yesno_option
{
local $y = &find($_[0], $_[2]);
local $n = &find($_[1], $_[2]);
local $yd = &find_default($_[0]);
local $nd = &find_default($_[1]);
print &ui_table_row($text{'edit_'.$_[0]},
&ui_radio($_[0], $y ? 2 : $n ? 1 : 0,
[ [ 2, $text{'yes'} ],
[ 1, $text{'no'} ],
[ 0, &deftext(defined($yd) ? $text{'yes'} : $text{'no'}) ] ]), 1);
}
# find_default(name, [global])
sub find_default
{
if ($in{'global'} || $_[1]) {
# Return global hard-coded default
return $global_default{$_[0]};
}
else {
# Look at global first
local $rv = &find_value($_[0], $conf);
return $rv if (defined($rv));
return &find_default($_[0], 1);
}
}
sub deftext
{
return $_[0] ? &text('edit_default', $_[0]) : $text{'default'};
}