#
# Copyright 2008 Samuel Borsutzky
#
# This file is part of PerlForms.
#
# PerlForms 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 3 of the License, or
# (at your option) any later version.
#
# PerlForms 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 PerlForms. If not, see <http://www.gnu.org/licenses/>.
#
#
#
package PerlForms::Permission;
use strict;
use base qw(NagUtil::Object);
sub show {
my($self)=shift if(ref($_[0]));
my(%arg)=@_;
my($url,$urlb);
# $url=$self->{req}->{prg}."/".$what;
# my$what_obj=NagUtil::Class->new(req=>$self->{req},what=>$arg{class});
my$what_obj=$self->newobj(what=>$arg{class});
my($sql)="
select
pe.id,
b.id,
b.name
from
benutzer b,
permission pe
where
b.id=pe.benutzer_id
and pe.class='".$arg{class}."'
and pe.object_id=".$arg{$what_obj->abkuerz}."
";
my($data)=$self->{req}->storage->{db}->exec($sql) || die;
### List Head
my$list=$self->newlist(
req=>$self->{req},
obj=>$self->{obj},
thing=>$self,
);
### liste
$list->table(cols=>["user"]);
my($line);
foreach $line (@{$data}) {
print(" <tr>\n");
print(" <td>\n");
print(" ".$line->[2]."\n");
print(" </td>\n");
$list->link_edit(
attrib=>[
["pe",$line->[0]]
]
);
print(" </tr>\n");
}
};
sub form {
my($self)=shift if(ref($_[0]));
my(%arg)=@_;
my($act)="add";
if(!defined($arg{$self->{obj}->abkuerz}) || $arg{$self->{obj}->abkuerz}!~/\d/) {
die("Need a valid ".$self->{obj}->abkuerz);
}
# my$what_obj=NagUtil::Class->new(req=>$self->{req},what=>$arg{class});
my$what_obj=$self->newobj(what=>$arg{class});
my($data);
if(defined($self->{req}->storage->{db}) and defined($arg{$self->{obj}->abkuerz})) {
my($sql)="
select
b.name,
pe.perm_read,
pe.perm_add,
pe.perm_edit,
pe.perm_delete,
pe.perm_grant
from
benutzer b,
permission pe
where
pe.id=".$arg{pe}."
";
$data=$self->{req}->storage->{db}->exec($sql) || die("SQL-Query failed: ".$sql);
$act="mod";
}
# Formularkopf
require PerlForms::HTML::Form;
my($form)=new Form(%arg,act=>$act,obj=>$self->{obj});
print("<input type=\"hidden\" name=\"class\" value=\"".$arg{class}."\"></input>\n");
print("<input type=\"hidden\" name=\"".$what_obj->abkuerz."\" value=\"".$arg{$what_obj->abkuerz}."\"></input>\n");
print(" <tr>\n");
if(defined($data->[0]->[0]) && $data->[0]->[0]=~/\w/) {
print(" <td>User</td>\n");
print(" <td>".$data->[0]->[0]."</td>\n");
} else {
$form->select(
tables=>["benutzer"],
req=>$self->{req}
);
}
print(" </tr>\n");
print(" <tr>\n");
print(" <td>Read</td>\n");
print(" <td><input type=\"checkbox\" name=\"read\" value=\"");
print(defined($data->[0]->[1])?$data->[0]->[1]:0);
print("\"></td>\n");
print(" </tr>\n");
print(" <tr>\n");
print(" <td>Add</td>\n");
print(" <td><input type=\"checkbox\" name=\"add\" value=\"");
print(defined($data->[0]->[2])?$data->[0]->[2]:0);
print("\"></td>\n");
print(" </tr>\n");
print(" <tr>\n");
print(" <td>Edit</td>\n");
print(" <td><input type=\"checkbox\" name=\"edit\" value=\"");
print(defined($data->[0]->[3])?$data->[0]->[3]:0);
print("\"></td>\n");
print(" </tr>\n");
print(" <tr>\n");
print(" <td>Delete</td>\n");
print(" <td><input type=\"checkbox\" name=\"delete\" value=\"");
print(defined($data->[0]->[4])?$data->[0]->[4]:0);
print("\"></td>\n");
print(" </tr>\n");
print(" <tr>\n");
print(" <td>Grant</td>\n");
print(" <td><input type=\"checkbox\" name=\"grant\" value=\"");
print(defined($data->[0]->[5])?$data->[0]->[5]:0);
print("\"></td>\n");
print(" </tr>\n");
};
sub add {
my($self)=shift if(ref($_[0]));
my(%arg)=@_;
# require NagUtil::Class;
# my($what_obj)=new NagUtil::Class(req=>$self->{req},what=>$arg{class});
my$what_obj=$self->newobj(what=>$arg{class});
my($sql)="insert into permission(class,object_id,benutzer_id";
$sql.=",perm_read" if(defined($arg{perm_read}) and $arg{perm_read}=~/\d/);
$sql.=",perm_add" if(defined($arg{perm_add}) and $arg{perm_add}=~/\d/);
$sql.=",perm_edit" if(defined($arg{perm_edit}) and $arg{perm_edit}=~/\d/);
$sql.=",perm_delete" if(defined($arg{perm_delete}) and $arg{perm_delete}=~/\d/);
$sql.=",perm_grant" if(defined($arg{perm_grant}) and $arg{perm_grant}=~/\d/);
$sql.=") values('".$arg{class}."',".$arg{$what_obj->abkuerz}.",".$arg{b};
$sql.=",".$arg{perm_read} if(defined($arg{perm_read}) and $arg{perm_read}=~/\d/);
$sql.=",".$arg{perm_add} if(defined($arg{perm_add}) and $arg{perm_add}=~/\d/);
$sql.=",".$arg{perm_edit} if(defined($arg{perm_edit}) and $arg{perm_edit}=~/\d/);
$sql.=",".$arg{perm_delete} if(defined($arg{perm_delete}) and $arg{perm_delete}=~/\d/);
$sql.=",".$arg{perm_grant} if(defined($arg{perm_grant}) and $arg{perm_grant}=~/\d/);
$sql.=")";
$sql=~s/\(,/\(/g;
$self->{req}->storage->{db}->{dbh}->prepare($sql)->execute or $self->faultt(msg=>"SQL-Query failed: ".$sql);
$self->ui->refresh(
what=>$self->{obj}->what,
attrib=>[
["class",$arg{class}],
[$what_obj->abkuerz,$arg{$what_obj->abkuerz}]
]
);
}
package Main;
1;