Apache-SdnFw
view release on metacpan or search on metacpan
lib/Apache/SdnFw/template/object/group.pm view on Meta::CPAN
v => [ $s->{in}{group_id} ]);
$s->add_action(function => 'display',
params => "group_id=$s->{in}{group_id}");
$s->tt('group/copy.tt', { s => $s, list => \@list });
}
sub group_permission {
my $s = shift;
return unless($s->check_in_id());
if ($s->{in}{f} eq 'save') {
my %exist = $s->db_q("
SELECT action_id, group_id
FROM group_actions
WHERE group_id=?
",'keyval',
v => [ $s->{in}{group_id} ]);
my %everyone = $s->db_q("
SELECT a.action_id, count(ga.group_id)
FROM actions a
LEFT JOIN group_actions ga ON a.action_id=ga.action_id
GROUP BY 1
HAVING count(ga.group_id)=0
",'keyval');
$s->{dbh}->begin_work;
foreach my $k (keys %{$s->{in}}) {
if ($k =~ m/^a:(\d+)$/) {
my $action_id = $1;
next if (defined($everyone{$action_id}));
if (defined($exist{$action_id})) {
# it is still checked so
# delete it so we know not to delete it below
delete $exist{$action_id};
} else {
#$s->notify("Add $action_id");
$s->db_insert('group_actions',{
group_id => $s->{in}{group_id},
action_id => $action_id,
});
}
}
}
# delete any actions that were not checked but still defined
foreach my $action_id (keys %exist) {
#$s->notify("Delete $action_id");
$s->db_q("DELETE FROM group_actions
WHERE group_id=?
AND action_id=?
",undef,
v => [ $s->{in}{group_id}, $action_id ]);
}
$s->{dbh}->commit;
$s->notify("Permissions updated");
$s->redirect();
return;
}
my @list = $s->db_q("
SELECT COALESCE(oc.name,'z_unclassified') as object_cat,
o.name as object_name, o.code, a.name as action_name, a.action_id,
CASE WHEN ga.group_id IS NOT NULL THEN TRUE ELSE NULL END as checked
FROM objects o
LEFT JOIN object_cats oc ON o.object_cat_id=oc.object_cat_id
JOIN groups g ON g.group_id=?
JOIN actions a ON o.code=a.a_object
LEFT JOIN group_actions ga ON a.action_id=ga.action_id
AND ga.group_id=g.group_id
ORDER BY object_cat, object_name, action_name
",'arrayhash',
v => [ $s->{in}{group_id} ]);
$s->add_action(function => 'display');
$s->tt('group/edit_permission.tt', { s => $s, list => \@list });
}
sub delete {
my $s = shift;
return unless($s->check_in_id());
unless($s->{in}{confirm}) {
$s->confirm("Are you sure");
return;
}
$s->{dbh}->begin_work;
$s->db_q("DELETE FROM group_actions WHERE group_id=?", undef, v => [ $s->{in}{group_id} ]);
$s->db_q("DELETE FROM employee_groups WHERE group_id=?", undef, v => [ $s->{in}{group_id} ]);
$s->db_q("DELETE FROM groups WHERE group_id=?", undef, v => [ $s->{in}{group_id} ]);
$s->{dbh}->commit;
$s->redirect(function => 'list');
}
1;
( run in 0.824 second using v1.01-cache-2.11-cpan-0d23b851a93 )