diff --git a/useradmin/config.info b/useradmin/config.info index 8ae3eb5d7..2739273ee 100644 --- a/useradmin/config.info +++ b/useradmin/config.info @@ -35,6 +35,7 @@ default_other=Create and update in other modules,1,1-Yes,0-No line4=Display options,11 display_max=Maximum number of users or groups to display,0 +display_max_auto=Use paginated table to display users and groups?,1,1-Yes,0-No sort_mode=Sort users and groups by,4,0-Order in file,1-Username,2-Real name,3-Surname,4-Shell,5-UID or GID,6-Home directory last_count=Number of previous logins to display,3,Unlimited last_show=Show last login in user list?,1,1-Yes,0-No diff --git a/useradmin/index.cgi b/useradmin/index.cgi index 2d21250c8..85e90716c 100755 --- a/useradmin/index.cgi +++ b/useradmin/index.cgi @@ -40,7 +40,8 @@ if ($can_users) { print &ui_tabs_start_tab("mode", "users"); } -if (@ulist > $config{'display_max'}) { +if (!$config{'display_max_auto'} && + @ulist > $config{'display_max'}) { # Display advanced search form print "$text{'index_toomany'}
\n"; print &ui_form_start("search_user.cgi"); @@ -123,7 +124,8 @@ if ($can_groups) { print &ui_tabs_start_tab("mode", "groups"); } -if (@glist > $config{'display_max'}) { +if (!$config{'display_max_auto'} && + @glist > $config{'display_max'}) { # Display group search form print "$text{'index_gtoomany'}
\n";
print &ui_form_start("search_group.cgi");
diff --git a/useradmin/prefs.info b/useradmin/prefs.info
index 61bb2a2cf..cf4fed993 100644
--- a/useradmin/prefs.info
+++ b/useradmin/prefs.info
@@ -1 +1 @@
-allowed=display_max,sort_mode,last_count_def,last_count,last_show,display_mode,passwd_stars,random_password,extra_real,secmode,membox
+allowed=display_max,display_max_auto,sort_mode,last_count_def,last_count,last_show,display_mode,passwd_stars,random_password,extra_real,secmode,membox
diff --git a/useradmin/user-lib.pl b/useradmin/user-lib.pl
index 351b9bd84..580dce215 100755
--- a/useradmin/user-lib.pl
+++ b/useradmin/user-lib.pl
@@ -2324,6 +2324,16 @@ while(@ginfo = &my_getgrent()) {
}
&my_endgrent();
+my $upagination = $config{'display_max_auto'};
+if ($upagination) {
+ my $upagination_opts = \%in;
+ $upagination_opts->{'top_offset_px'} = 125;
+ $upagination_opts->{'bottom_offset_px'} = 125;
+ $upagination_opts->{'_form-exports'} =
+ { 'mode' => 'users', 'colspan' => 6 };
+ $upagination = &ui_paginations($users, $upagination_opts);
+ }
+
# Work out if any users can be edited
local $anyedit;
foreach my $u (@$users) {
@@ -2347,6 +2357,10 @@ if ($anyedit) {
&select_invert_link("d", $_[1]));
}
push(@linksrow, @$links);
+if ($upagination) {
+ push(@{$rightlinks},
+ " $upagination->{'search-form-data'}");
+ }
local @grid = ( &ui_links_row(\@linksrow), &ui_links_row($rightlinks) );
print &ui_grid_table(\@grid, 2, 100, [ "align=left", "align=right" ]);
@@ -2370,41 +2384,53 @@ if ($lshow) {
}
}
local $u;
-foreach $u (@$users) {
- $u->{'real'} =~ s/,.*$// if ($config{'extra_real'} ||
- $u->{'real'} =~ /,$/);
- local @cols;
- push(@cols, "") if ($anyedit && $u->{'noedit'});
- push(@cols, &user_link($u));
- push(@cols, $u->{'uid'});
- push(@cols, &html_escape($gidgrp{$u->{'gid'}} || $u->{'gid'}));
- push(@cols, &html_escape($u->{'real'}));
- push(@cols, &html_escape($u->{'home'}));
- push(@cols, &html_escape($u->{'shell'}));
- if ($lshow) {
- # Show last login, in local format after Unix time conversion
- my $ll = $llogin->{$u->{'user'}};
- if (defined(&mailboxes::parse_mail_date)) {
- my $tm = &mailboxes::parse_mail_date($ll);
- if ($tm) {
- $ll = &make_date($tm);
+if (@$users) {
+ foreach $u (@$users) {
+ $u->{'real'} =~ s/,.*$// if ($config{'extra_real'} ||
+ $u->{'real'} =~ /,$/);
+ local @cols;
+ push(@cols, "") if ($anyedit && $u->{'noedit'});
+ push(@cols, &user_link($u));
+ push(@cols, $u->{'uid'});
+ push(@cols, &html_escape($gidgrp{$u->{'gid'}} || $u->{'gid'}));
+ push(@cols, &html_escape($u->{'real'}));
+ push(@cols, &html_escape($u->{'home'}));
+ push(@cols, &html_escape($u->{'shell'}));
+ if ($lshow) {
+ # Show last login, in local format after Unix time conversion
+ my $ll = $llogin->{$u->{'user'}};
+ if (defined(&mailboxes::parse_mail_date)) {
+ my $tm = &mailboxes::parse_mail_date($ll);
+ if ($tm) {
+ $ll = &make_date($tm);
+ }
}
+ push(@cols, &html_escape($ll));
+ }
+ if ($u->{'noedit'}) {
+ print &ui_columns_row(\@cols, \@tds);
+ }
+ else {
+ print &ui_checked_columns_row(\@cols, \@tds, "d", $u->{'user'});
}
- push(@cols, &html_escape($ll));
- }
- if ($u->{'noedit'}) {
- print &ui_columns_row(\@cols, \@tds);
- }
- else {
- print &ui_checked_columns_row(\@cols, \@tds, "d", $u->{'user'});
}
}
+else {
+ print $upagination->{'search-no-results'};
+ }
print &ui_columns_end();
+print $upagination->{'paginator-form-data'}
+ if ($upagination);
print &ui_links_row(\@linksrow);
if ($anyedit) {
print $buttons;
print &ui_form_end();
}
+if ($upagination) {
+ print $upagination->{'paginator-form'};
+ print $upagination->{'search-form'};
+ print $upagination->{"client-height-script"};
+ }
}
=head2 groups_table(&groups, [form], [no-buttons], [&otherlinks], [&rightlinks])
@@ -2429,6 +2455,15 @@ foreach my $g (@$groups) {
}
$anyedit = 0 if ($noboxes);
+my $gpagination = $config{'display_max_auto'};
+if ($gpagination) {
+ my $gpagination_opts = \%in;
+ $gpagination_opts->{'top_offset_px'} = 125;
+ $gpagination_opts->{'bottom_offset_px'} = 125;
+ $gpagination_opts->{'_form-exports'} = { 'mode' => 'groups', 'colspan' => 4 };
+ $gpagination = &ui_paginations($groups, $gpagination_opts);
+ }
+
local @linksrow;
if ($anyedit && $access{'gdelete'}) {
print &ui_form_start("mass_delete_group.cgi", "post");
@@ -2436,6 +2471,10 @@ if ($anyedit && $access{'gdelete'}) {
&select_invert_link("gd", $formno) );
}
push(@linksrow, @$links);
+if ($gpagination) {
+ push(@{$rightlinks},
+ " $gpagination->{'search-form-data'}");
+ }
local @grid = ( &ui_links_row(\@linksrow), &ui_links_row($rightlinks) );
print &ui_grid_table(\@grid, 2, 100, [ "align=left", "align=right" ]);
@@ -2448,33 +2487,45 @@ print &ui_columns_start([
$anydesc ? ( $text{'gedit_desc'} ) : ( ),
$text{'gedit_members'} ], 100, 0, \@tds);
local $g;
-foreach $g (@$groups) {
- local $members = join(" ", split(/,/, $g->{'members'}));
- local @cols;
- if ($anyedit && ($g->{'noedit'} || !$access{'gdelete'})) {
- # Need an explicitly blank first column
- push(@cols, "");
- }
- push(@cols, &group_link($g));
- push(@cols, $g->{'gid'});
- if ($anydesc) {
- push(@cols, &html_escape($g->{'desc'}));
- }
- push(@cols, &html_escape($members));
- if ($g->{'noedit'} || !$access{'gdelete'}) {
- print &ui_columns_row(\@cols, \@tds);
- }
- else {
- print &ui_checked_columns_row(\@cols, \@tds, "gd",
- $g->{'group'});
+if (@$groups) {
+ foreach $g (@$groups) {
+ local $members = join(" ", split(/,/, $g->{'members'}));
+ local @cols;
+ if ($anyedit && ($g->{'noedit'} || !$access{'gdelete'})) {
+ # Need an explicitly blank first column
+ push(@cols, "");
+ }
+ push(@cols, &group_link($g));
+ push(@cols, $g->{'gid'});
+ if ($anydesc) {
+ push(@cols, &html_escape($g->{'desc'}));
+ }
+ push(@cols, &html_escape($members));
+ if ($g->{'noedit'} || !$access{'gdelete'}) {
+ print &ui_columns_row(\@cols, \@tds);
+ }
+ else {
+ print &ui_checked_columns_row(\@cols, \@tds, "gd",
+ $g->{'group'});
+ }
}
}
+else {
+ print $gpagination->{'search-no-results'};
+ }
print &ui_columns_end();
+print $gpagination->{'paginator-form-data'}
+ if ($gpagination);
print &ui_links_row(\@linksrow);
if ($anyedit && $access{'gdelete'}) {
print &ui_submit($text{'index_gmass'}, "delete"),"
\n";
print &ui_form_end();
}
+if ($gpagination) {
+ print $gpagination->{'paginator-form'};
+ print $gpagination->{'search-form'};
+ print $gpagination->{"client-height-script"};
+ }
}
=head2 date_input(day, month, year, prefix)