Projekt

Allgemein

Profil

Herunterladen (6,84 KB) Statistiken
| Zweig: | Markierung: | Revision:
#=====================================================================
# LX-Office ERP
# Copyright (C) 2004
# Based on SQL-Ledger Version 2.1.9
# Web http://www.lx-office.org
#
#=====================================================================
# SQL-Ledger Accounting
# Copyright (c) 2002
#
# Author: Moritz Bunkus
# Email: mbunkus@linet-services.de
# Web: www.linet-services.de
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#======================================================================
#
# group administration module
# add/edit/delete user groups
#
#======================================================================

use List::MoreUtils qw(uniq);

use strict;

sub edit_groups {
$main::lxdebug->enter_sub();

my $form = $main::form;

my @groups = sort { lc $a->{name} cmp lc $b->{name} } values %{ $main::auth->read_groups() };

$form->header();
print $form->parse_html_template("admin/edit_groups", { 'GROUPS' => \@groups,
'num_groups' => scalar @groups });

$main::lxdebug->leave_sub();
}

sub add_group {
$main::lxdebug->enter_sub();

my $form = $main::form;
my $locale = $main::locale;

delete $form->{group_id};
$form->{message} = $locale->text("The group has been added.");

save_group();

$main::lxdebug->leave_sub();
}

sub save_group {
$main::lxdebug->enter_sub();

my $form = $main::form;
my $locale = $main::locale;

$form->isblank('name', $locale->text('The group name is missing.'));

my $groups = $main::auth->read_groups();
my %users = map { ( $_->{id} => 1 ) } values %{ { $::auth->read_all_users() } };

foreach my $group (values %{$groups}) {
if (($form->{group_id} != $group->{id})
&& ($form->{name} eq $group->{name})) {
$form->show_generic_error($locale->text("A group with that name does already exist."));
}
}

my $group;

if ($form->{group_id} && $groups->{$form->{group_id}}) {
$group = $groups->{$form->{group_id}};

} else {
$group = { };
}

$group->{name} = $form->{name};
$group->{description} = $form->{description};
$group->{rights} = { map { ( $_ => $form->{"${_}_granted"} ? 1 : 0 ) } SL::Auth::all_rights() };
$group->{members} = [ grep { $users{$_} } @{ $form->{user_ids} || [] } ];

my $is_new = !$form->{group_id};

$main::auth->save_group($group);

$form->{message} ||= $locale->text('The group has been saved.');

if ($is_new) {
edit_groups();

} else {
edit_group();
}

$main::lxdebug->leave_sub();
}

sub edit_group {
$main::lxdebug->enter_sub();

my $form = $main::form;
my $locale = $main::locale;

my $groups = $main::auth->read_groups();

if (!$form->{group_id} || !$groups->{$form->{group_id}}) {
$form->show_generic_error($locale->text("No group has been selected, or the group does not exist anymore."));
}

my $group = $groups->{$form->{group_id}};
my %all_users = $main::auth->read_all_users();
my @rights = map {
{ "right" => $_->[0],
"description" => $_->[1],
"is_section" => '--' eq substr($_->[0], 0, 2),
"granted" => defined $group->{rights}->{$_->[0]} ? $group->{rights}->{$_->[0]} : 0,
}
} SL::Auth::all_rights_full();

$form->header();
print $form->parse_html_template("admin/edit_group", { ALL_USERS => [ values %all_users ],
USER_IDS_IN_GROUP => $group->{members},
"RIGHTS" => \@rights,
"name" => $group->{name},
"description" => $group->{description} });

$main::lxdebug->leave_sub();
}

sub delete_group {
$main::lxdebug->enter_sub();

my $form = $main::form;
my $locale = $main::locale;

my $groups = $main::auth->read_groups();

if (!$form->{group_id} || !$groups->{$form->{group_id}}) {
$form->show_generic_error($locale->text("No group has been selected, or the group does not exist anymore."));
}

if ($form->{confirmed}) {
$main::auth->delete_group($form->{"group_id"});

$form->{message} = $locale->text("The group has been deleted.");
edit_groups();

} else {

$form->header();
print $form->parse_html_template("admin/delete_group_confirm", $groups->{$form->{group_id}});
}

$main::lxdebug->leave_sub();
}

sub edit_group_membership {
$main::lxdebug->enter_sub();

my $form = $main::form;
my $locale = $main::locale;

my %users = $main::auth->read_all_users();
my $groups = $main::auth->read_groups();
$groups = [ sort { lc $a->{name} cmp lc $b->{name} } values %{ $groups } ];

my @headings = map { { 'title' => $_ } } map { $_->{name} } @{ $groups };

foreach my $group (@{ $groups }) {
$group->{members_h} = { map { $_ => 1 } @{ $group->{members} } };
}

my @rows;

foreach my $user (sort { lc $a->{login} cmp lc $b->{login} } values %users) {
my $row = {
'id' => $user->{id},
'login' => $user->{login},
'name' => $user->{name},
'repeat_headings' => (scalar(@rows) % 20) == 0,
'GROUPS' => [],
};

foreach my $group (@{ $groups }) {
push @{ $row->{GROUPS} }, {
'id' => $group->{id},
'is_member' => $group->{members_h}->{$user->{id}},
};
}

push @rows, $row;
}

$form->{title} = $locale->text('Edit group membership');
$form->header();
print $form->parse_html_template('admin/edit_group_membership', { 'HEADINGS' => \@headings, 'USERS' => \@rows });

$main::lxdebug->leave_sub();
}

sub save_group_membership {
$main::lxdebug->enter_sub();

my $form = $main::form;
my $locale = $main::locale;

my %users = $main::auth->read_all_users();
my $groups = $main::auth->read_groups();

foreach my $group (values %{ $groups }) {
$group->{members} = [ ];

foreach my $user (values %users) {
push @{ $group->{members} }, $user->{id} if ($form->{"u_$user->{id}_g_$group->{id}"});
}

$main::auth->save_group($group);
}

$form->{message} = $locale->text('The group memberships have been saved.');

edit_groups();

$main::lxdebug->leave_sub();
}

1;
(4-4/47)