#!/usr/local/bin/perl
# list_groups.cgi
# Lists all the groups with quotas on some filesystem
require './quota-lib.pl';
&ReadParse();
$f = $in{'dir'};
$whatfailed = $text{'lgroups_failed'};
&can_edit_filesys($f) ||
&error($text{'lgroups_eallow'});
$form = 0;
# List quotas
&ui_print_header(undef, $text{'lgroups_title'}, "", "list_groups");
$n = &filesystem_groups($f);
$bsize = &block_size($f);
$fsbsize = &block_size($f);
if ($n > $config{'display_max'} && !$access{'ro'}) {
print "",&text('lgroups_toomany', $f),"
\n";
}
elsif ($n) {
my $threshold_pc = $config{'threshold_pc'} || 101;
$threshold_pc = 101 if $threshold_pc < 1 or $threshold_pc > 101;
print &ui_subheading(&text('lgroups_quotas', $f));
&show_buttons();
if (!$access{'ro'}) {
print &ui_form_start("edit_group_mass.cgi", "post");
print &ui_hidden('dir', $f),"\n";
}
# Generate select links
@links = ( &select_all_link("d", $form),
&select_invert_link("d", $form) );
if (!$access{'ro'}) {
print &ui_links_row(\@links);
}
# Generate first header (with blocks and files)
local @hcols;
local @tds;
if (!$access{'ro'}) {
push(@hcols, "");
push(@tds, "width=5");
}
push(@hcols, "");
push(@tds, "");
($binfo, $finfo) = &filesystem_info($f, \%group, $n, $fsbsize);
$show_pc_hblocks = $threshold_pc != 101 &&
$config{'pc_show'} >= 1;
$show_pc_sblocks = $threshold_pc != 101 &&
$config{'pc_show'}%2 == 0;
$cols1 = 3 + ($show_pc_hblocks ? 1 : 0) +
($show_pc_sblocks ? 1 : 0) +
($config{'show_grace'} ? 1 : 0);
$cols2 = 3 + ($config{'show_grace'} ? 1 : 0);
push(@hcols, ($bsize ? $text{'lusers_space'} :
$text{'lusers_blocks'}).
($access{'diskspace'} ? " ($binfo)" : ""));
push(@tds, "colspan=$cols1 align=center");
push(@hcols, $text{'lusers_files'}.
($access{'diskspace'} ? " ($finfo)" : ""));
push(@tds, "colspan=$cols2 align=center");
print &ui_columns_start(\@hcols, 100, 0, \@tds);
# Generate second header (with used/soft/hard)
local @hcols;
local @tds;
if (!$access{'ro'}) {
push(@hcols, "");
push(@tds, "width=5");
}
push(@hcols, $text{'lgroups_group'});
if ($show_pc_hblocks) {
push(@hcols, $text{'lusers_pc_hblocks'});
}
if ($show_pc_sblocks) {
push(@hcols, $text{'lusers_pc_sblocks'});
}
push(@hcols, $text{'lusers_used'}, $text{'lusers_soft'},
$text{'lusers_hard'},
$config{'show_grace'} ? ( $text{'lusers_grace'} ) : ( ));
push(@hcols, $text{'lusers_used'}, $text{'lusers_soft'},
$text{'lusers_hard'},
$config{'show_grace'} ? ( $text{'lusers_grace'} ) : ( ));
print &ui_columns_header(\@hcols, \@tds);
# Sort groups
@order = (0 .. $n-1);
if ($config{'sort_mode'} == 0) {
@order = sort { $group{$b,'ublocks'} <=> $group{$a,'ublocks'} }
@order;
}
elsif ($config{'sort_mode'} == 3) {
@order = sort { $group{$b,'hblocks'} <=> $group{$a,'hblocks'} }
@order;
}
elsif ($config{'sort_mode'} == 4) {
@order = sort { $group{$b,'sblocks'} <=> $group{$a,'sblocks'} }
@order;
}
elsif ($config{'sort_mode'} == 2) {
@order = sort { $group{$a,'group'} cmp $group{$b,'group'} }
@order;
}
elsif ($config{'sort_mode'} == 5) {
@order = sort { &to_percent($group{$b,'ublocks'},
$group{$b,'hblocks'}) <=>
&to_percent($group{$a,'ublocks'},
$group{$a,'hblocks'}) } @order;
}
elsif ($config{'sort_mode'} == 6) {
@order = sort { &to_percent($group{$b,'ublocks'},
$group{$b,'sblocks'}) <=>
&to_percent($group{$a,'ublocks'},
$group{$a,'sblocks'}) } @order;
}
# Generate table of groups
foreach $i (@order) {
next if (!&can_edit_group($group{$i,'group'}));
local @cols;
if ($access{'ro'}) {
push(@cols, $group{$i,'group'});
}
else {
push(@cols, "$group{$i,'group'}".
"");
}
my $pc_hblocks=0;
my $pc_sblocks=0;
if($group{$i,'hblocks'}) {
$pc_hblocks = 100 * $group{$i,'ublocks'};
$pc_hblocks/= $group{$i,'hblocks'};
$pc_hblocks = int($pc_hblocks);
}
if($group{$i,'sblocks'}) {
$pc_sblocks = 100 * $group{$i,'ublocks'};
$pc_sblocks/= $group{$i,'sblocks'};
$pc_sblocks = int($pc_sblocks);
}
if ($show_pc_hblocks) {
if ($pc_hblocks > $threshold_pc) {
push(@cols, "".
&html_escape($pc_hblocks)."%");
}
else {
push(@cols, &html_escape($pc_hblocks)."%");
}
}
if ($show_pc_sblocks) {
if ($pc_sblocks > $threshold_pc) {
push(@cols, "".
&html_escape($pc_sblocks)."%");
}
else {
push(@cols, &html_escape($pc_sblocks)."%");
}
}local $ublocks = $group{$i,'ublocks'};
if ($bsize) {
$ublocks = &nice_size($ublocks*$bsize);
}
if ($group{$i,'hblocks'} &&
$group{$i,'ublocks'} > $group{$i,'hblocks'}) {
push(@cols, "".
&html_escape($ublocks)."");
}
elsif ($group{$i,'sblocks'} &&
$group{$i,'ublocks'} > $group{$i,'sblocks'}) {
push(@cols, "".
&html_escape($ublocks)."");
}
else {
push(@cols, &html_escape($ublocks));
}
push(@cols, &nice_limit($group{$i,'sblocks'}, $bsize));
push(@cols, &nice_limit($group{$i,'hblocks'}, $bsize));
push(@cols, $group{$i,'gblocks'}) if ($config{'show_grace'});
push(@cols, $group{$i,'ufiles'});
push(@cols, &nice_limit($group{$i,'sfiles'}, $bsize, 1));
push(@cols, &nice_limit($group{$i,'hfiles'}, $bsize, 1));
push(@cols, $group{$i,'gfiles'}) if ($config{'show_grace'});
if ($access{'ro'}) {
print &ui_columns_row(\@cols, \@tds);
}
else {
print &ui_checked_columns_row(\@cols, \@tds, "d",
$group{$i,'group'});
}
}
print &ui_columns_end();
if (!$access{'ro'}) {
print &ui_links_row(\@links);
print &ui_submit($text{'lgroups_mass'}, "mass"),"
\n";
print &ui_form_end();
}
}
else {
print "",&text('lgroups_noquota', $f),"
\n";
}
&show_buttons();
if ($access{'default'}) {
print "
\n"; @dquot = split(/\s+/, $config{"gsync_$f"}); print "
\n"; } # Show form for email notifications if ($access{'email'} && &foreign_check("cron") && &foreign_check("mailboxes")) { print "| \n"; } if ($access{'ggrace'}) { print "\n"; $form++; } else { print " | \n"; } print " |