4 require './rbac-lib.pl';
5 $access{'projects'} || &error($text{'projects_ecannot'});
7 $projects = &list_projects();
9 &ui_print_header(undef, $text{'project_title1'}, "");
12 %taken = map { $_->{'id'}, 1 } @$projects;
13 for($id=$config{'base_id'}; $taken{$id}; $id++) { }
14 $project = { 'id' => $id };
17 &ui_print_header(undef, $text{'project_title2'}, "");
18 $project = $projects->[$in{'idx'}];
21 print &ui_form_start("save_project.cgi", "post");
22 print &ui_hidden("idx", $in{'idx'}),"\n";
23 print &ui_hidden("new", $in{'new'}),"\n";
24 print &ui_table_start($text{'project_header'}, "width=100%", 2);
26 print &ui_table_row($text{'project_name'},
27 &ui_textbox("name", $project->{'name'}, 20));
29 print &ui_table_row($text{'project_id'},
30 &ui_textbox("id", $project->{'id'}, 5));
32 print &ui_table_row($text{'project_desc'},
33 &ui_textbox("desc", $project->{'desc'}, 60));
35 print &ui_table_row($text{'project_users'},
36 &project_members_input("users", $project->{'users'}));
38 print &ui_table_row($text{'project_groups'},
39 &project_members_input("groups", $project->{'groups'}));
41 # Work out which resources this project has
42 foreach $a (keys %{$project->{'attr'}}) {
43 $v = $project->{'attr'}->{$a};
44 if ($a eq "project.pool") {
45 # Special case for project pool
48 elsif ($a eq "rcap.max-rss") {
49 # Special case for max RSS
53 while($v =~ /^\(([^,]+),([^,]+),([^,]+)\),?(.*)$/) {
54 push(@res, [ $a, $1, $2, $3 ]);
63 print &ui_table_row($text{'project_pool'},
64 &ui_opt_textbox("pool", $pool, 40, $text{'default'}));
66 print &ui_table_row($text{'project_maxrss'},
67 &ui_radio("maxrss_def", $maxrss ? 0 : 1,
68 [ [ 1, $text{'default'} ],
69 [ 0, &ui_bytesbox("maxrss", $maxrss) ] ]));
71 print &ui_table_end(),"<p>\n";
73 # Show table for resources
74 print &ui_table_start($text{'project_header2'}, "width=100%", 2);
75 print "<td colspan=2>";
76 print &ui_columns_start([ $text{'project_rctl'},
77 $text{'project_priv'},
78 $text{'project_limit'},
79 $text{'project_action'} ], "100%");
81 foreach $a (@res, [ ], [ ], [ ]) {
82 print &ui_columns_row([
83 &ui_select("rctl_$i", $a->[0],
84 [ [ "", " " ], map { [ $_ ] } &list_rctls() ], 0, 0, 1),
85 &ui_select("priv_$i", $a->[1],
86 [ [ "", $text{'project_nopriv'} ],
87 [ "privileged", $text{'project_privileged'} ],
88 [ "system", $text{'project_system'} ],
89 [ "basic", $text{'project_basic'} ] ],
90 0, 0, $a->[1] ? 1 : 0),
91 &ui_textbox("limit_$i", $a->[2], 10),
92 &ui_select("action_$i", $a->[3],
93 [ [ "none", $text{'project_none'} ],
94 [ "deny", $text{'project_deny'} ],
95 map { [ "signal=$_->[0]", &text('project_signal', $_->[0], $_->[1]) ] } &list_rctl_signals() ],
96 0, 0, $a->[3] ? 1 : 0),
100 print &ui_columns_end();
103 print &ui_table_end();
105 print &ui_form_end([ [ "create", $text{'create'} ] ]);
108 print &ui_form_end([ [ "save", $text{'save'} ],
109 [ "delete", $text{'delete'} ] ]);
112 &ui_print_footer("list_projects.cgi", $text{'projects_return'});