Files
webmin/grub2/custom_action.cgi

56 lines
1.8 KiB
Perl
Executable File

#!/usr/local/bin/perl
# Apply an action to selected custom GRUB 2 entries.
use strict;
use warnings;
require './grub2-lib.pl'; ## no critic
our (%in, %text);
&ReadParse();
&error_setup($text{'custom_err'});
my %access = &get_module_acl();
&error("$text{'eacl_np'} $text{'eacl_pmanual'}") if (!$access{'manual'});
# Per-row up/down links post an index and direction directly.
if (defined($in{'idx'}) || defined($in{'dir'})) {
defined($in{'idx'}) && $in{'idx'} =~ /^\d+\z/ ||
&error($text{'custom_eentry'});
# Keep movement inside one submenu by leaving it to the library helper.
defined($in{'dir'}) && $in{'dir'} =~ /^(up|down)\z/ ||
&error($text{'custom_emove'});
my $err = &grub2_move_custom_entry($in{'idx'}, $in{'dir'});
&error($err) if ($err);
&grub2_mark_regenerate_needed();
&webmin_log("custom_move", undef, $in{'idx'});
&redirect("index.cgi?mode=custom");
}
# Checked-table actions can receive duplicate browser values; collapse them.
my @selected = split(/\0/, defined($in{'d'}) ? $in{'d'} : "");
my %seen;
@selected = grep { defined($_) && $_ ne '' && !$seen{$_}++ } @selected;
my $err;
# Delete accepts multiple selected entries and removes them in one rewrite.
if ($in{'delete'}) {
@selected || &error($text{'delete_enone'});
$err = &grub2_delete_custom_entry_indexes(@selected);
&error($err) if ($err);
&grub2_mark_regenerate_needed();
&webmin_log("custom_delete", undef, scalar(@selected));
}
elsif ($in{'move_up'} || $in{'move_down'}) {
# Bulk move buttons are only safe for one entry at a time.
@selected == 1 || &error($text{'custom_eone'});
$err = &grub2_move_custom_entry($selected[0],
$in{'move_up'} ? "up" : "down");
&error($err) if ($err);
&grub2_mark_regenerate_needed();
&webmin_log("custom_move", undef, $selected[0]);
}
else {
&error($text{'runtime_eaction'});
}
&redirect("index.cgi?mode=custom");