Umstellung der Benutzerverwaltung von Dateien im Verzeichnis "users" auf die Verwendu...
[kivitendo-erp.git] / bin / mozilla / admin_groups.pl
1 sub edit_groups {
2   $lxdebug->enter_sub();
3
4   my @groups = sort { lc $a->{name} cmp lc $b->{name} } values %{ $auth->read_groups() };
5
6   $form->header();
7   print $form->parse_html_template("admin/edit_groups", { 'GROUPS'     => \@groups,
8                                                           'num_groups' => scalar @groups });
9
10   $lxdebug->leave_sub();
11 }
12
13 sub add_group {
14   $lxdebug->enter_sub();
15
16   delete $form->{group_id};
17   $form->{message} = $locale->text("The group has been added.");
18
19   save_group();
20
21   $lxdebug->leave_sub();
22 }
23
24 sub save_group {
25   $lxdebug->enter_sub();
26
27   $form->isblank('name', $locale->text('The group name is missing.'));
28
29   my $groups = $auth->read_groups();
30
31   foreach my $group (values %{$groups}) {
32     if (($form->{group_id} != $group->{id})
33         && ($form->{name} eq $group->{name})) {
34       $form->show_generic_error($locale->text("A group with that name does already exist."));
35     }
36   }
37
38   my $group;
39
40   if ($form->{group_id} && $groups->{$form->{group_id}}) {
41     $group = $groups->{$form->{group_id}};
42
43   } else {
44     $group = { };
45   }
46
47   $group->{name}        = $form->{name};
48   $group->{description} = $form->{description};
49   $group->{rights}      = {};
50
51   map { $group->{rights}->{$_} = $form->{"${_}_granted"} ? 1 : 0 } SL::Auth::all_rights();
52
53   my $is_new = !$form->{group_id};
54
55   $auth->save_group($group);
56
57   $form->{message} ||= $locale->text('The group has been saved.');
58
59   if ($is_new) {
60     edit_groups();
61
62   } else {
63     edit_group();
64   }
65
66   $lxdebug->leave_sub();
67 }
68
69 sub edit_group {
70   $lxdebug->enter_sub();
71
72   my $groups = $auth->read_groups();
73
74   if (!$form->{group_id} || !$groups->{$form->{group_id}}) {
75     $form->show_generic_error($locale->text("No group has been selected, or the group does not exist anymore."));
76   }
77
78   $group = $groups->{$form->{group_id}};
79
80   my %all_users   = $auth->read_all_users();
81   my %users_by_id = map { $_->{id} => $_ } values %all_users;
82
83   my @members     = sort { lc $a->{login} cmp lc $b->{login} } @users_by_id{ @{ $group->{members} } };
84
85   my %grouped     = map { $_ => 1 } @{ $group->{members} };
86   my @non_members = sort { lc $a->{login} cmp lc $b->{login} } grep { !$grouped{$_->{id}} } values %all_users;
87
88   my @rights = map {
89     { "right"       => $_->[0],
90       "description" => $_->[1],
91       "is_section"  => '--' eq substr($_->[0], 0, 2),
92       "granted"     => defined $group->{rights}->{$_->[0]} ? $group->{rights}->{$_->[0]} : 0,
93     }
94   } SL::Auth::all_rights_full();
95
96   $form->header();
97   print $form->parse_html_template("admin/edit_group", { "USERS_IN_GROUP"     => \@members,
98                                                          "USERS_NOT_IN_GROUP" => \@non_members,
99                                                          "RIGHTS"             => \@rights,
100                                                          "name"               => $group->{name},
101                                                          "description"        => $group->{description} });
102
103   $lxdebug->leave_sub();
104 }
105
106 sub delete_group {
107   $lxdebug->enter_sub();
108
109   my $groups = $auth->read_groups();
110
111   if (!$form->{group_id} || !$groups->{$form->{group_id}}) {
112     $form->show_generic_error($locale->text("No group has been selected, or the group does not exist anymore."));
113   }
114
115   if ($form->{confirmed}) {
116     $auth->delete_group($form->{"group_id"});
117
118     $form->{message} = $locale->text("The group has been deleted.");
119     edit_groups();
120
121   } else {
122
123     $form->header();
124     print $form->parse_html_template("admin/delete_group_confirm", $groups->{$form->{group_id}});
125   }
126
127   $lxdebug->leave_sub();
128 }
129
130 sub add_to_group {
131   $lxdebug->enter_sub();
132
133   $form->isblank('user_id_not_in_group', $locale->text('No user has been selected.'));
134
135   my $groups = $auth->read_groups();
136
137   if (!$form->{group_id} || !$groups->{$form->{group_id}}) {
138     $form->show_generic_error($locale->text('No group has been selected, or the group does not exist anymore.'));
139   }
140
141   $group = $groups->{$form->{group_id}};
142   push @{ $group->{members} }, $form->{user_id_not_in_group};
143
144   $auth->save_group($group);
145
146   $form->{message} = $locale->text('The user has been added to this group.');
147   edit_group();
148
149   $lxdebug->leave_sub();
150 }
151
152 sub remove_from_group {
153   $lxdebug->enter_sub();
154
155   $form->isblank('user_id_in_group', $locale->text('No user has been selected.'));
156
157   my $groups = $auth->read_groups();
158
159   if (!$form->{group_id} || !$groups->{$form->{group_id}}) {
160     $form->show_generic_error($locale->text('No group has been selected, or the group does not exist anymore.'));
161   }
162
163   $group            = $groups->{$form->{group_id}};
164   $group->{members} = [ grep { $_ ne $form->{user_id_in_group} } @{ $group->{members} } ];
165
166   $auth->save_group($group);
167
168   $form->{message} = $locale->text('The user has been removed from this group.');
169   edit_group();
170
171   $lxdebug->leave_sub();
172 }
173
174 sub edit_group_membership {
175   $lxdebug->enter_sub();
176
177   my %users  = $auth->read_all_users();
178   my $groups = $auth->read_groups();
179   $groups    = [ sort { lc $a->{name} cmp lc $b->{name} } values %{ $groups } ];
180
181   my @headings = map { { 'title' => $_ } } map { $_->{name} } @{ $groups };
182
183   foreach my $group (@{ $groups }) {
184     $group->{members_h} = { map { $_ => 1 } @{ $group->{members} } };
185   }
186
187   my @rows;
188
189   foreach my $user (sort { lc $a->{login} cmp lc $b->{login} } values %users) {
190     my $row = {
191       'id'              => $user->{id},
192       'login'           => $user->{login},
193       'name'            => $user->{name},
194       'repeat_headings' => (scalar(@rows) % 20) == 0,
195       'GROUPS'          => [],
196     };
197
198     foreach my $group (@{ $groups }) {
199       push @{ $row->{GROUPS} }, {
200         'id'        => $group->{id},
201         'is_member' => $group->{members_h}->{$user->{id}},
202       };
203     }
204
205     push @rows, $row;
206   }
207
208   $form->{title} = $locale->text('Edit group membership');
209   $form->header();
210   print $form->parse_html_template('admin/edit_group_membership', { 'HEADINGS' => \@headings, 'USERS' => \@rows });
211
212   $lxdebug->leave_sub();
213 }
214
215 sub save_group_membership {
216   $lxdebug->enter_sub();
217
218   my %users  = $auth->read_all_users();
219   my $groups = $auth->read_groups();
220
221   foreach my $group (values %{ $groups }) {
222     $group->{members} = [ ];
223
224     foreach my $user (values %users) {
225       push @{ $group->{members} }, $user->{id} if ($form->{"u_$user->{id}_g_$group->{id}"});
226     }
227
228     $auth->save_group($group);
229   }
230
231   $form->{message} = $locale->text('The group memberships have been saved.');
232
233   edit_groups();
234
235   $lxdebug->leave_sub();
236 }
237
238 1;