3 # Display a form for editing or creating a group
5 require './user-lib.pl';
8 # Get group and show page header
11 $access{'gcreate'} == 1 || &error($text{'gedit_ecreate'});
12 &ui_print_header(undef, $text{'gedit_title2'}, "", "create_group");
15 @glist = &list_groups();
16 ($ginfo_hash) = grep { $_->{'group'} eq $n } @glist;
17 $ginfo_hash || &error($text{'gedit_egone'});
18 %group = %$ginfo_hash;
19 &can_edit_group(\%access, \%group) ||
20 &error($text{'gedit_eedit'});
21 &ui_print_header(undef, $text{'gedit_title'}, "", "edit_group");
23 @ulist = &list_users();
25 &build_group_used(\%gused);
28 print &ui_form_start("save_group.cgi", "post");
29 print &ui_hidden("old", $n) if ($n ne "");
30 print &ui_table_start($text{'gedit_details'}, "width=100%", 2, [ "width=30%" ]);
33 print &ui_table_row(&hlink($text{'gedit_group'}, "ggroup"),
34 $n eq "" ? &ui_textbox("group", undef, 20)
35 : "<tt>".&html_escape($group{'group'})."</tt>");
39 # Existing group, just show field to edit
40 $gidfield = &ui_textbox("gid", $group{'gid'}, 10);
43 # Work out which GID modes are available
45 $defgid = &allocate_gid(\%gused);
46 if ($access{'autogid'}) {
47 push(@gidmodes, [ 1, $text{'gedit_gid_def'} ]);
49 if ($access{'calcgid'}) {
50 push(@gidmodes, [ 2, $text{'gedit_gid_calc'} ]);
52 if ($access{'usergid'}) {
53 push(@gidmodes, [ 0, &ui_textbox("gid", $defgid, 10) ]);
56 $gidfield = &ui_hidden("gid_def", $gidmodes[0]->[0]).
60 $gidfield = &ui_radio("gid_def", $config{'gid_mode'},
64 print &ui_table_row(&hlink($text{'gedit_gid'}, "ggid"), $gidfield);
66 # Group password (rarely used, but..)
67 print &ui_table_row(&hlink($text{'pass'}, "gpasswd"),
68 &ui_radio_table("passmode", $group{'pass'} eq "" ? 0 : 1,
69 [ [ 0, $text{'none2'} ],
70 [ 1, $text{'encrypted'},
71 &ui_textbox("encpass", $group{'pass'}, 20) ],
73 &ui_textbox("pass", undef, 15) ] ]));
76 @ulist = &sort_users(\@ulist, $config{'sort_mode'});
77 if ($config{'membox'} == 0) {
78 # Nicer left/right chooser
79 print &ui_table_row(&hlink($text{'gedit_members'}, "gmembers"),
80 &ui_multi_select("members",
82 sort { lc($a) cmp lc($b) }
83 split(/,/ , &html_escape($group{'members'})) ],
84 [ map { [ $_->{'user'}, &html_escape($_->{'user'}) ] } @ulist ],
86 $text{'gedit_allu'}, $text{'gedit_selu'}, 150));
90 print &ui_table_row(&hlink($text{'gedit_members'}, "gmembers"),
91 &ui_textarea("members",
92 join("\n", split(/,/ , $group{'members'})),
96 # Primary members (read-only)
98 @upri = grep { $_->{'gid'} == $group{'gid'} } @ulist;
102 if (&can_edit_user(\%access, $u)) {
103 push(@uprilinks, "<a href='edit_user.cgi?".
104 "user=$u->{'user'}'>".&html_escape($u->{'user'})."</a>");
107 push(@uprilinks, $u->{'user'});
110 $upri = &ui_links_row(\@uprilinks);
113 $upri = $text{'gedit_prinone'};
115 print &ui_table_row(&hlink($text{'gedit_pri'}, "gpri"), $upri, 3);
118 print &ui_table_end();
120 # Section for on-change and on-create events
122 if ($access{'chgid'} == 1 || $access{'mothers'} == 1) {
123 print &ui_table_start($text{'onsave'}, "width=100%", 2,
126 # Change file GIDs on save
127 if ($access{'chgid'} == 1) {
129 &hlink($text{'chgid'}, "gchgid"),
130 &ui_radio("chgid", 0,
131 [ [ 0, $text{'no'} ],
132 [ 1, $text{'gedit_homedirs'} ],
133 [ 2, $text{'gedit_allfiles'} ] ]));
136 # Update in other modules?
137 if ($access{'mothers'} == 1) {
139 &hlink($text{'gedit_mothers'}, "others"),
140 &ui_radio("others", $config{'default_other'},
141 [ [ 1, $text{'yes'} ],
142 [ 0, $text{'no'} ] ]));
145 print &ui_table_end();
149 if ($access{'cothers'} == 1) {
150 print &ui_table_start($text{'uedit_oncreate'}, "width=100%", 2,
153 # Create in other modules?
155 &hlink($text{'gedit_cothers'}, "others"),
156 &ui_radio("others", $config{'default_other'},
157 [ [ 1, $text{'yes'} ],
158 [ 0, $text{'no'} ] ]));
160 print &ui_table_end();
164 # Save/delete/create buttons
167 [ undef, $text{'save'} ],
168 $access{'gdelete'} ? ( [ 'delete', $text{'delete'} ] ) : ( ),
172 print &ui_form_end([ [ undef, $text{'create'} ] ]);
175 &ui_print_footer("index.cgi?mode=groups", $text{'index_return'});