Handle hostnames with upper-case letters
[webmin.git] / rbac / edit_project.cgi
1 #!/usr/local/bin/perl
2 # Show one project
3
4 require './rbac-lib.pl';
5 $access{'projects'} || &error($text{'projects_ecannot'});
6 &ReadParse();
7 $projects = &list_projects();
8 if ($in{'new'}) {
9         &ui_print_header(undef, $text{'project_title1'}, "");
10
11         # Pick a free ID
12         %taken = map { $_->{'id'}, 1 } @$projects;
13         for($id=$config{'base_id'}; $taken{$id}; $id++) { }
14         $project = { 'id' => $id };
15         }
16 else {
17         &ui_print_header(undef, $text{'project_title2'}, "");
18         $project = $projects->[$in{'idx'}];
19         }
20
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);
25
26 print &ui_table_row($text{'project_name'},
27                     &ui_textbox("name", $project->{'name'}, 20));
28
29 print &ui_table_row($text{'project_id'},
30                     &ui_textbox("id", $project->{'id'}, 5));
31
32 print &ui_table_row($text{'project_desc'},
33                     &ui_textbox("desc", $project->{'desc'}, 60));
34
35 print &ui_table_row($text{'project_users'},
36                     &project_members_input("users", $project->{'users'}));
37
38 print &ui_table_row($text{'project_groups'},
39                     &project_members_input("groups", $project->{'groups'}));
40
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
46                 $pool = $v;
47                 }
48         elsif ($a eq "rcap.max-rss") {
49                 # Special case for max RSS
50                 $maxrss = $v;
51                 }
52         elsif ($v) {
53                 while($v =~ /^\(([^,]+),([^,]+),([^,]+)\),?(.*)$/) {
54                         push(@res, [ $a, $1, $2, $3 ]);
55                         $v = $4;
56                         }
57                 }
58         else {
59                 push(@res, [ $a ]);
60                 }
61         }
62
63 print &ui_table_row($text{'project_pool'},
64                     &ui_opt_textbox("pool", $pool, 40, $text{'default'}));
65
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) ] ]));
70
71 print &ui_table_end(),"<p>\n";
72
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%");
80 $i = 0;
81 foreach $a (@res, [ ], [ ], [ ]) {
82         print &ui_columns_row([
83                 &ui_select("rctl_$i", $a->[0],
84                    [ [ "", "&nbsp;" ], 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),
97                 ]);
98         $i++;
99         }
100 print &ui_columns_end();
101
102 print "</td>\n";
103 print &ui_table_end();
104 if ($in{'new'}) {
105         print &ui_form_end([ [ "create", $text{'create'} ] ]);
106         }
107 else {
108         print &ui_form_end([ [ "save", $text{'save'} ],
109                              [ "delete", $text{'delete'} ] ]);
110         }
111
112 &ui_print_footer("list_projects.cgi", $text{'projects_return'});
113