Handle hostnames with upper-case letters
[webmin.git] / rbac / list_projects.cgi
1 #!/usr/local/bin/perl
2 # Show a table of all project attributes
3
4 require './rbac-lib.pl';
5 &ui_print_header(undef, $text{'projects_title'}, "", "projects", 0, 0, 0,
6                  &help_search_link("resource_controls", "man"));
7
8 $projects = &list_projects();
9 @canprojects = @$projects;
10 if (@canprojects) {
11         print "<a href='edit_project.cgi?new=1'>$text{'projects_add'}</a><br>\n";
12         print &ui_columns_start(
13                 [ $text{'projects_name'},
14                   $text{'projects_desc'},
15                   $text{'projects_users'},
16                   $text{'projects_groups'} ]);
17         foreach $p (sort { $a->{'name'} cmp $b->{'name'} } @canprojects) {
18                 print &ui_columns_row(
19                         [ "<a href='edit_project.cgi?idx=$p->{'index'}'>$p->{'name'}</a>",
20                           $p->{'desc'},
21                           &nice_user_list("users", $p->{'users'}),
22                           &nice_user_list("groups", $p->{'groups'}),
23                         ]);
24                 }
25         print &ui_columns_end();
26         }
27 else {
28         print "<b>$text{'projects_none'}</b><p>\n";
29         }
30 print "<a href='edit_project.cgi?new=1'>$text{'projects_add'}</a><br>\n";
31
32 &ui_print_footer("", $text{"index_return"});
33
34 # nice_user_list(mode, * or !* or user,user)
35 sub nice_user_list
36 {
37 local $mode = $_[0];
38 local @users = split(/,/, $_[1]);
39 local %users = map { $_, 1 } @users;
40 if ($users{'*'} && @users == 1) {
41         return $text{'projects_all'.$mode};
42         }
43 elsif (@users == 0 || $users{'!*'} && @users == 1) {
44         return $text{'projects_none'.$mode};
45         }
46 elsif ($users{'*'}) {
47         # All except some
48         return &text('projects_except'.$mode,
49                      join(", ", map { /^\!(.*)/; "<tt>$1</tt>" }
50                           grep { /^\!/ } @users[1..$#users]));
51         }
52 elsif ($users{'!*'}) {
53         # Only some
54         return &text('projects_only'.$mode,
55                      join(", ", map { "<tt>$_</tt>" }
56                           grep { !/^\!/ } @users[1..$#users]));
57         }
58 else {
59         # Only listed
60         return &text('projects_only'.$mode,
61                      join(", ", map { "<tt>$_</tt>" } @users));
62         }
63 }