4   my @groups = sort { lc $a->{name} cmp lc $b->{name} } values %{ $auth->read_groups() };
 
   7   print $form->parse_html_template("admin/edit_groups", { 'GROUPS'     => \@groups,
 
   8                                                           'num_groups' => scalar @groups });
 
  10   $lxdebug->leave_sub();
 
  14   $lxdebug->enter_sub();
 
  16   delete $form->{group_id};
 
  17   $form->{message} = $locale->text("The group has been added.");
 
  21   $lxdebug->leave_sub();
 
  25   $lxdebug->enter_sub();
 
  27   $form->isblank('name', $locale->text('The group name is missing.'));
 
  29   my $groups = $auth->read_groups();
 
  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."));
 
  40   if ($form->{group_id} && $groups->{$form->{group_id}}) {
 
  41     $group = $groups->{$form->{group_id}};
 
  47   $group->{name}        = $form->{name};
 
  48   $group->{description} = $form->{description};
 
  49   $group->{rights}      = {};
 
  51   map { $group->{rights}->{$_} = $form->{"${_}_granted"} ? 1 : 0 } SL::Auth::all_rights();
 
  53   my $is_new = !$form->{group_id};
 
  55   $auth->save_group($group);
 
  57   $form->{message} ||= $locale->text('The group has been saved.');
 
  66   $lxdebug->leave_sub();
 
  70   $lxdebug->enter_sub();
 
  72   my $groups = $auth->read_groups();
 
  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."));
 
  78   $group = $groups->{$form->{group_id}};
 
  80   my %all_users   = $auth->read_all_users();
 
  81   my %users_by_id = map { $_->{id} => $_ } values %all_users;
 
  83   my @members     = sort { lc $a->{login} cmp lc $b->{login} } @users_by_id{ @{ $group->{members} } };
 
  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;
 
  90       "description" => $_->[1],
 
  91       "is_section"  => '--' eq substr($_->[0], 0, 2),
 
  92       "granted"     => defined $group->{rights}->{$_->[0]} ? $group->{rights}->{$_->[0]} : 0,
 
  94   } SL::Auth::all_rights_full();
 
  97   print $form->parse_html_template("admin/edit_group", { "USERS_IN_GROUP"     => \@members,
 
  98                                                          "USERS_NOT_IN_GROUP" => \@non_members,
 
 100                                                          "name"               => $group->{name},
 
 101                                                          "description"        => $group->{description} });
 
 103   $lxdebug->leave_sub();
 
 107   $lxdebug->enter_sub();
 
 109   my $groups = $auth->read_groups();
 
 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."));
 
 115   if ($form->{confirmed}) {
 
 116     $auth->delete_group($form->{"group_id"});
 
 118     $form->{message} = $locale->text("The group has been deleted.");
 
 124     print $form->parse_html_template("admin/delete_group_confirm", $groups->{$form->{group_id}});
 
 127   $lxdebug->leave_sub();
 
 131   $lxdebug->enter_sub();
 
 133   $form->isblank('user_id_not_in_group', $locale->text('No user has been selected.'));
 
 135   my $groups = $auth->read_groups();
 
 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.'));
 
 141   $group = $groups->{$form->{group_id}};
 
 142   push @{ $group->{members} }, $form->{user_id_not_in_group};
 
 144   $auth->save_group($group);
 
 146   $form->{message} = $locale->text('The user has been added to this group.');
 
 149   $lxdebug->leave_sub();
 
 152 sub remove_from_group {
 
 153   $lxdebug->enter_sub();
 
 155   $form->isblank('user_id_in_group', $locale->text('No user has been selected.'));
 
 157   my $groups = $auth->read_groups();
 
 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.'));
 
 163   $group            = $groups->{$form->{group_id}};
 
 164   $group->{members} = [ grep { $_ ne $form->{user_id_in_group} } @{ $group->{members} } ];
 
 166   $auth->save_group($group);
 
 168   $form->{message} = $locale->text('The user has been removed from this group.');
 
 171   $lxdebug->leave_sub();
 
 174 sub edit_group_membership {
 
 175   $lxdebug->enter_sub();
 
 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 } ];
 
 181   my @headings = map { { 'title' => $_ } } map { $_->{name} } @{ $groups };
 
 183   foreach my $group (@{ $groups }) {
 
 184     $group->{members_h} = { map { $_ => 1 } @{ $group->{members} } };
 
 189   foreach my $user (sort { lc $a->{login} cmp lc $b->{login} } values %users) {
 
 192       'login'           => $user->{login},
 
 193       'name'            => $user->{name},
 
 194       'repeat_headings' => (scalar(@rows) % 20) == 0,
 
 198     foreach my $group (@{ $groups }) {
 
 199       push @{ $row->{GROUPS} }, {
 
 200         'id'        => $group->{id},
 
 201         'is_member' => $group->{members_h}->{$user->{id}},
 
 208   $form->{title} = $locale->text('Edit group membership');
 
 210   print $form->parse_html_template('admin/edit_group_membership', { 'HEADINGS' => \@headings, 'USERS' => \@rows });
 
 212   $lxdebug->leave_sub();
 
 215 sub save_group_membership {
 
 216   $lxdebug->enter_sub();
 
 218   my %users  = $auth->read_all_users();
 
 219   my $groups = $auth->read_groups();
 
 221   foreach my $group (values %{ $groups }) {
 
 222     $group->{members} = [ ];
 
 224     foreach my $user (values %users) {
 
 225       push @{ $group->{members} }, $user->{id} if ($form->{"u_$user->{id}_g_$group->{id}"});
 
 228     $auth->save_group($group);
 
 231   $form->{message} = $locale->text('The group memberships have been saved.');
 
 235   $lxdebug->leave_sub();