#!/usr/local/bin/perl
# Show a table of all project attributes
require './rbac-lib.pl';
&ui_print_header(undef, $text{'projects_title'}, "", "projects", 0, 0, 0,
&help_search_link("resource_controls", "man"));
$projects = &list_projects();
@canprojects = @$projects;
if (@canprojects) {
print "$text{'projects_add'}
\n";
print &ui_columns_start(
[ $text{'projects_name'},
$text{'projects_desc'},
$text{'projects_users'},
$text{'projects_groups'} ]);
foreach $p (sort { $a->{'name'} cmp $b->{'name'} } @canprojects) {
print &ui_columns_row(
[ "$p->{'name'}",
$p->{'desc'},
&nice_user_list("users", $p->{'users'}),
&nice_user_list("groups", $p->{'groups'}),
]);
}
print &ui_columns_end();
}
else {
print "$text{'projects_none'}
\n";
}
print "$text{'projects_add'}
\n";
&ui_print_footer("", $text{"index_return"});
# nice_user_list(mode, * or !* or user,user)
sub nice_user_list
{
local $mode = $_[0];
local @users = split(/,/, $_[1]);
local %users = map { $_, 1 } @users;
if ($users{'*'} && @users == 1) {
return $text{'projects_all'.$mode};
}
elsif (@users == 0 || $users{'!*'} && @users == 1) {
return $text{'projects_none'.$mode};
}
elsif ($users{'*'}) {
# All except some
return &text('projects_except'.$mode,
join(", ", map { /^\!(.*)/; "$1" }
grep { /^\!/ } @users[1..$#users]));
}
elsif ($users{'!*'}) {
# Only some
return &text('projects_only'.$mode,
join(", ", map { "$_" }
grep { !/^\!/ } @users[1..$#users]));
}
else {
# Only listed
return &text('projects_only'.$mode,
join(", ", map { "$_" } @users));
}
}