use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_in log_view edit_person_acl log_update list_queues
	valid_person);
use Dbase::Help qw(Do DoSelect DoFn quote DoTime);
use Dbase::Globals qw(flag_names);
use Fehler qw(report_fehler);

sub edit_person_acls($$) {
	my($pers,$kn) = @_;
	my $chg;

	return unless valid_person($pers,1);

	while(1) {
		my $queue = line_in "$kn Queue >",4;
		unless($queue) {
			Do("update nextid set id = ".DoTime." where name = 'rtupdate'") if $chg;
			return undef;
		}
		if($queue eq '?') {
			print <<END;
l     Queues mit ACLs dieser Person auflisten
ll    alle existierenden Queues auflisten
NAME  ACLs zu Queue NAME editieren
del   alle ACLs dieser Person löschen
END
			next;
		}
		if($queue eq "H") { log_view($kn,"queue_acl","person",$pers); next; }
		if($queue eq "l") { 
			DoSelect {
				my($q,$acl) = @_;
				printf "%-20s %s\n",$q,scalar flag_names($acl,"rt_acl");
			} "select queue.name,queue_acl.acls from queue,queue_acl where queue_acl.person = $pers and queue.id = queue_acl.queue order by queue.name"
				or print "...keine gefunden.\n";
			next;
		}
		if($queue eq "ll") { list_queues($kn); next; }
		if($queue eq "del") {
			log_update("queue_acl","person",$pers,undef,"-");
			Do("delete from queue_acl where person = $pers");
		    Do("delete from ticketadr where person = $pers");
		    Do("update ticket set bearbeiter=NULL where bearbeiter = $pers");
		    Do("update ticketid set timestamp=timestamp, person=NULL where person=$pers");
			$chg++;
			next;
		}
		my $q = DoFn("select id from queue where name='${\quote $queue}'");
		if(not $q and $queue =~ /^\d+$/ and DoFn("select count(*) from queue where id=$queue")) {
			$q = $queue;
		}
		if(not $q or not DoFn("select id from queue where id=$q")) {
			print "Die Queue '$queue' gibt es nicht.\n";
		} else {
			$chg++;
			edit_person_acl($pers,$q,$kn);
		}
		next; fehler: report_fehler(4);
	}
}

1;
