package pivot;

use umfrage;
#use strict;

@ISA = qw ( umfrage );

####################################################################
####         Pivotiert die Ergebnisse einer Umfrage
####         Argumente  : -
####         Returnwert : 0=aktuell, 1=noch nicht aktiv, 2=vorbei
####################################################################
sub pivotprint {
	my $self=shift();
	my $fra=$self->loadfragen;
	my %hash; my $beschr;my $txt="";
	$hash{0}{-pin}="pin";
	foreach (@$fra) {$beschr.=$_->pivot(\%hash);}
	foreach $hpin (sort keys %hash) {
		my @text=();
		foreach $part (sort keys %{$hash{0}} ) {
			$ttxt=$hash{$hpin}{$part};
			if ($ttxt eq "") {$ttxt="0";}
			push @text, $ttxt;
		}
		$txt.=join(",",@text)."\n";
	}
	$beschr.="\n\nAlle Sammelbegriffe\n================\n";
	my $sth=$self->sqlprepare("select ID,name from pivotname where umfid=".$self->{id}." order by ID");
    while (my @x=$sth->fetchrow_array) {
		$beschr.="$x[0]\t$x[1]\n";
	}
	print "Content-type: text/plain\n\n".$txt.$beschr;
	$self->exit;
}

####################################################################
####         Handling der Buttons
####         Argumente  : -
####         Returnwert : 0=aktuell, 1=noch nicht aktiv, 2=vorbei
####################################################################
sub getbearb {
	my $self=shift;
	
	if ($baseq::VARS{pbut} eq $self->trans("BU63")) {
			my $ID=$self->newgroup($baseq::VARS{newgroup});
			$self->fromgroup;
			$self->togroup($ID);
			$self->showfrage($baseq::VARS{fid});
	}	
	
	elsif ($baseq::VARS{pbut} eq $self->trans("BU64")) {
			$self->fromgroup;
			$self->togroup($baseq::VARS{selgroup});
			$self->showfrage($baseq::VARS{fid});
	}	

	elsif ($baseq::VARS{pbut} eq $self->trans("BU65")) {
			$self->showgroup($baseq::VARS{selgr});
	}	

	elsif ($baseq::VARS{pbut} eq $self->trans("BU66")) {
			$self->showfrage($baseq::VARS{selfrage});
	}	

	elsif ($baseq::VARS{pbut} eq $self->trans("BU67")) {
			$self->pivotprint;
	}	

	elsif ($baseq::VARS{pbut} eq $self->trans("BU68")) {
			$self->fromgroup;
			$self->showgroup($baseq::VARS{grpid});
	}	

	elsif ($baseq::VARS{pbut} eq $self->trans("BU69")) {
			$self->delgroup($baseq::VARS{grpid});
			$self->showlist;
	}	

	elsif ($baseq::VARS{pbut} eq $self->trans("BU70")) {
			$self->renamegroup($baseq::VARS{grpid}, $baseq::VARS{newgrpname});
			$self->showlist;
	}	

	elsif ($baseq::VARS{pbut} eq $self->trans("BU71")) {
			$self->joingroups($baseq::VARS{joingrpa}, $baseq::VARS{joingrpb});
			$self->showgroup($baseq::VARS{joingrpa});
	}	

	else {$self->showlist}
}
####################################################################
####         Zeigt die Textantworten
####         Argumente  : -
####         Returnwert : 0=aktuell, 1=noch nicht aktiv, 2=vorbei
####################################################################
sub showfrage {
	my $self=shift;
	my $frage=shift;
	my $f=frage->init($self,$frage);
	$f->load();
	my ($fid,$ref) = $f->createantarrayref;
	$baseq::VARS{fid}=$fid;
	my $html;
	$sth =$self->sqlprepare("select a.aid,a.pin,a.text from ergebnis a left join pivot b using(umfid,fid,aid,pin) ".
							"where a.umfid=".$self->{id}." and a.fid=$fid and a.text != '' and b.pin is NULL order by a.pin");
	while ( my ($aid, $pin, $txt) = $sth->fetchrow_array ) {
		$ref->[$aid]->slurptextant($pin, $txt);  
	}
	$html.=$f->qfont($f->{id}.") ".$f->{name})."<BR>\n".$f->grafikdetails.
	    "<HR>\n<TABLE>\n".
		$self->TR([$self->sfont("Suchmuster"),$self->TF("pattern","") ]).
		"</TABLE>\n".
		$self->standardbut;
	$self->printhtml("Textliste",$html);
}

####################################################################
####         Zeigt die Textantworten
####         Argumente  : -
####         Returnwert : 0=aktuell, 1=noch nicht aktiv, 2=vorbei
####################################################################
sub showgroup {
	my $self=shift;
	my $ID=shift;
	$self->{grpid}=$ID;
	my $name=$self->sqlselect("select name from pivotname where ID=$ID");
	my $html=$self->qfont($ID.") ".$name)."<BR>\n";
	$sth =$self->sqlprepare("select b.fid,b.aid,b.pin,c.text from pivot b left join ergebnis c ".
							"using(umfid, fid, aid ,pin) where b.ID=$ID order by b.fid,b.aid,b.pin");
	while ( my ($fid, $aid, $pin, $txt) = $sth->fetchrow_array ) {
		my $IDX="U".$self->{id}."F".$fid."A".$aid."PIN".$pin;
		$html.=$self->CB($IDX,1, $baseq::VARS{$IDX}) ."F:".$fid." A:".$aid." Pin:".$pin.": ".$txt."<BR>\n";
		
	}
	$html.=
	    "<HR>\n<TABLE>\n".
		$self->TR([$self->SM("pbut","BU68"),$self->SM("pbut","BU69")]).
		$self->TR([$self->TF("newgrpname",$baseq::VARS{newgrpname}), $self->SM("pbut","BU70")] ).
		"</TABLE>\n".
		$self->standardbut;
	$self->printhtml("Textliste",$html);
}



sub newgroup {
	my $self=shift;
	my $name=shift;
	my $fid=$baseq::VARS{fid}+0;
	my ($max)=$self->sqlselect("select max(ID)+1 from pivotname");
	if ($max==0) {$max=100000}
	$self->sqldo("insert into pivotname (ID, umfid, fid, name) values ($max,$self->{id},$fid,'$name')");
	return $max;
}

sub renamegroup {
	my ($self, $grpid, $grpname) = @_;
	$grpid+=0;
	my $sql="update pivotname set name='$grpname' where ID=$grpid";
	$self->sqldo($sql);
}

sub joingroups {
	my ($self, $G1, $G2) = @_; #verschiebe G2 zu G1 und loesche G2
	return if $G1 == $G2 || $G1 == 0 || $G2 == 0;	
	$self->sqldo("update pivot set ID=$G1 where ID=$G2");
	$self->sqldo("delete from pivotname where ID=$G2");
	return;
}

sub delgroup {
	my $self=shift;
	my $ID=shift;
	$self->sqldo("delete from pivot where ID=$ID");
	$self->sqldo("delete from pivotname where ID=$ID");
}

sub togroup {
	my ($self, $ID) = @_;
	my $fid=$baseq::VARS{fid}+0;
	foreach (keys %baseq::VARS) {
		if (/^U(\d+)F(\d+)A(\d+)PIN(\d+)$/) {
			$self->sqldo("insert into pivot (ID, umfid, fid, aid, pin) values($ID,$self->{id},$fid,$3,$4)");
		}
	}
	$self->autogroup($ID);
}

sub autogroup {
	my ($self, $ID) = @_;
	my $fid=$baseq::VARS{fid};
	my $txt=$baseq::VARS{pattern};
	return if $txt eq "";
	my $sth=$self->sqlprepare("select umfid,fid,aid, pin from ergebnis where umfid=$self->{id} and fid=$fid and text like '%$txt%'");
	while (my @X=$sth->fetchrow_array) { 
	   $self->sqldo("insert into pivot (ID, umfid, fid, aid, pin) values ($ID,".join(",",@X).")");
	}
}

sub fromgroup {
	my $self = shift;
	foreach (keys %baseq::VARS) {
		if (/^U(\d+)F(\d+)A(\d+)PIN(\d+)$/) {
			$self->sqldo("delete from pivot where umfid=$1 and fid=$2 and aid=$3 and pin=$4");
		}
	}
}

sub showlist {
	my $self=shift;
	$self->printhtml("Textliste",$self->standardbut);
}

sub DDgroup {
	my ($self, $htname)=@_;
	my $whereplus;
	my $sth=$self->sqlprepare("select ID, name from pivotname where umfid=$self->{id} $whereplus order by ID");
	my (@L,%H);
	while (($ID, $name) = $sth->fetchrow_array) {
		push @L, $ID;
		$name=~s/<[^>]+[>\$]//g;
		$H{$ID}=$ID.") ".$name;
	}
	return $self->DD($htname,\@L,$baseq::VARS{$htname},\%H);
}

sub DDfrage {
	my $self=shift;
	my $sth=$self->sqlprepare("select distinct x.fid, x.frage from fragen x left join ergebnis using(umfid,fid) where text != '' and x.umfid=".$self->{id}." and (x.typ='E' or x.typ='M' or x.typ='T') order by fid");
	my (@L,%H);
	while (($ID, $name) = $sth->fetchrow_array) {
		push @L, $ID;
		$name=~s/<[^>]+[>\$]//g;
		$H{$ID}=$ID.") ".substr($name,0,60);
	}
	return $self->DD("selfrage",\@L,$baseq::VARS{selfrage},\%H);
}

sub standardbut {
	my $self=shift;
	return 
	"<HR>\n<TABLE>\n".
		$self->TR([$self->SM("pbut","BU63"),$self->TF("newgroup","") ]).
		$self->TR([$self->SM("pbut","BU64"),$self->DDgroup("selgroup") ]).
		$self->TR([$self->SM("pbut","BU65"),$self->DDgroup("selgr") ]).
	    $self->TR([$self->DDgroup("joingrpa"), $self->DDgroup("joingrpb"), $self->SM("pbut","BU71") ]).
		$self->TR([$self->SM("pbut","BU66"),$self->DDfrage,$self->SM("pbut","BU67") ]).
	"</TABLE>\n";
}
