package template;

use baseq;

@ISA = qw ( baseq );

####################################################################
####         Konstruktor der Fragenklasse
####         Argumente  : parent, umfid, Fragentext, Fragentyp
####         Returnwert : -
####################################################################
sub init {
	my $that = shift;
	my $class = ref($that) || $that;
	my $self = baseq->init(@_);
	bless $self, $class;	
   	    $self->{template}    = $self->{id}+0;
            $self->{knr}	 = $self->{parent}->{knr}+0;
	    $self->{tmpbeschr}   = "Neues Template";
            $self->{htmlbodytag}  = 'text="#000000" bgcolor="#ffffff"';
	    $self->{htmloben}     = "";
	    $self->{htmlmitte}    = "";	
	    $self->{htmlunten}    = "";	
	    $self->{qtface}   = "Helvetica";	
	    $self->{qtsize}   = "+2";
	    $self->{qtcolor}  = "#000000";
	    $self->{atface}   = "Helvetica";	
	    $self->{atsize}   = "+1";
	    $self->{atcolor}  = "#000000";
	    $self->{stface}   = "Helvetica";	
	    $self->{stsize}   = "+0";
	    $self->{stcolor}  = "#000000";
	return $self;
}

####################################################################
####         Konstruktor der Fragenklasse
####         Argumente  : parent, umfid, fid
####         Returnwert : -
####################################################################
sub loadtmp {
   my $self = shift;
   my $force=shift;
   if ($self->{template} eq "") {$self->{template}=0}
   if ( (defined $self->{parent}->{template}) && ($self->{template} == $self->{parent}->{template})  && ! $force ) {
        ( $self->{htmlbodytag}, $self->{tmpbeschr},$self->{htmloben}, $self->{htmlmitte}, $self->{htmlunten},
       	$self->{qtface}, $self->{qtsize}, $self->{qtcolor},
	$self->{atface}, $self->{atsize}, $self->{atcolor},
	$self->{stface}, $self->{stsize}, $self->{stcolor}  ) = $self->{parent}->copytemplate;

	$self->{RHfontcolor}=$self->{parent}->{RHfontcolor};
	$self->{RLfontcolor}=$self->{parent}->{RLfontcolor};
   }
   else {
	my $sql = "select bodytag, beschr, oben, mitte, unten, qtface, qtsize, qtcolor, ".
		  "atface, atsize, atcolor, stface, stsize, stcolor from template where nr=$self->{template}";
	( $self->{htmlbodytag}, $self->{tmpbeschr},$self->{htmloben}, $self->{htmlmitte}, $self->{htmlunten},
       	$self->{qtface}, $self->{qtsize}, $self->{qtcolor},
	$self->{atface}, $self->{atsize}, $self->{atcolor},
	$self->{stface}, $self->{stsize}, $self->{stcolor}  ) = $self->sqlselect($sql);
        $sql="select hexcode, name from farben where knr=0 or knr=$self->{knr} order by knr,nr";
	my $sth=$self->sqlprepare($sql);
	my @Lcolor; my %Hcolor; my $hex; my $name;
	while ( ($hex, $name)=$sth->fetchrow_array) {push (@Lcolor, $hex); $Hcolor{$hex}=$name;}
        $self->{RHfontcolor}=\%Hcolor;
	$self->{RLfontcolor}=\@Lcolor;
   }
   return ;
}

####################################################################
####         Ermittelt eine neue fid und speichert sich
####         Argumente  : -
####         Returnwert : -
####################################################################
sub copytemplate {
	my $self = shift;
        return ( $self->{htmlbodytag}, $self->{tmpbeschr},
	$self->{htmloben}, $self->{htmlmitte}, $self->{htmlunten},
       	$self->{qtface}, $self->{qtsize}, $self->{qtcolor},
	$self->{atface}, $self->{atsize}, $self->{atcolor},
	$self->{stface}, $self->{stsize}, $self->{stcolor}  );
}

####################################################################
####         Ermittelt eine neue fid und speichert sich
####         Argumente  : -
####         Returnwert : -
####################################################################
sub new {
	my $self = shift;
	my $sql1 = "select max(nr) from template";
	$self->{template} = ($self->sqlselect($sql1))+1;
        my $sql2 = "insert into template values ( $self->{template} , $self->{knr} , '$self->{tmpbeschr}', ".
		   "'$self->{htmlbodytag}', '$self->{htmloben}', '$self->{htmlmitte}', '$self->{htmlunten}', ".
		   "'$self->{qtface}', '$self->{qtsize}', '$self->{qtcolor}', ".
		   "'$self->{atface}', '$self->{atsize}', '$self->{atcolor}', ".
		   "'$self->{stface}', '$self->{stsize}', '$self->{stcolor}'  )";
	$self->sqldo($sql2);
}

####################################################################
####         Speichert sich mit Update
####         Argumente  : evtl Fragentext und Fragentyp
####         Returnwert : -
####################################################################
sub store {
	my $self = shift;
	my $sql = "update template set knr=$self->{knr} , beschr='$self->{tmpbeschr}', ".
		  "bodytag='$self->{htmlbodytag}', oben='$self->{htmloben}', mitte='$self->{htmlmitte}', unten='$self->{htmlunten}', ".
		  "qtface='$self->{qtface}', qtsize='$self->{qtsize}', qtcolor='$self->{qtcolor}', ".
		  "atface='$self->{atface}', atsize='$self->{atsize}', atcolor='$self->{atcolor}', ".
		  "stface='$self->{stface}', stsize='$self->{stsize}', stcolor='$self->{stcolor}' ".
		  "where nr=$self->{template}";
	$self->sqldo($sql);
}

####################################################################
####         Löscht sich und alle seine Antworten der Probanden
####	     aus der DB
####         Argumente  : -
####         Returnwert : -
####################################################################
sub delete {
	my $self = shift;
	my $sql  = "delete from template where nr=$self->{template}";
        $self->sqldo($sql);
}

####################################################################
####         Schreibt ins Logfile
####         Argumente  : Emergency und Logtext
####         Returnwert : -
####################################################################
sub log {
	my ($self, $emer, $TEXT) = @_;
        $self->printlog($emer, "T[$self->{template}] $TEXT");
}

####################################################################
####         Gibt den Text im Questionfont zurück
####         Argumente  : Text
####         Returnwert : -
####################################################################

sub qfont {
	my $self = shift;
        return "<FONT FACE=\"$self->{qtface}\" SIZE=\"$self->{qtsize}\" COLOR=\"$self->{qtcolor}\">".shift()."</FONT>";
}

####################################################################
####         Gibt den Text im Antwortfont zurück
####         Argumente  : Text
####         Returnwert : -
####################################################################

sub afont {
	my $self = shift;
        return "<FONT FACE=\"$self->{atface}\" SIZE=\"$self->{atsize}\" COLOR=\"$self->{atcolor}\">".shift()."</FONT>";
}

####################################################################
####         Gibt den Text im Standardfont zurück
####         Argumente  : Text
####         Returnwert : Text mit Font-Tags
####################################################################
sub sfont {
	my $self = shift;
        return "<FONT FACE=\"$self->{stface}\" SIZE=\"$self->{stsize}\" COLOR=\"$self->{stcolor}\">".shift()."</FONT>";
}


####################################################################
####         Schreibt HTML
####         Argumente  : Der Inhalt als HTML
####         Returnwert : -
####################################################################
sub printhtml {
	my ($self, $TITLE, $INHALT, $FILE) = @_;
	if ($self->{warntext} ne "") {$self->{warntext}.="<HR>";}
        $META="<META NAME=\"Author\" Content=\"prorara.web\">\n";	
	$INHALT=$self->{htmloben}."\n".$self->{warntext}."\n".$self->{htmlmitte}."\n".$INHALT."\n".$self->{htmlunten}."\n";
	$TITLE= "<HTML>\n<HEAD>\n".$META."<TITLE>$TITLE</TITLE>\n</HEAD>\n<BODY ".$self->{htmlbodytag}.">\n";
	my $THEHIDDEN = $self->HD("umfid",$baseq::VARS{umfid}).
                $self->HD("fid",$baseq::VARS{fid}).
	        $self->HD("knr",$baseq::VARS{knr}).
	        $self->HD("pin",$baseq::VARS{pin}).
                $self->HD("pass",$baseq::VARS{pass});

        if ($FILE eq "") {print "Content-type: text/html\n\n".$TITLE.
				"<FORM METHOD=\"$baseq::POST\" ENCTYPE=\"application/x-www-form-urlencoded\">\n".
				$THEHIDDEN.$INHALT."</FORM>\n</BODY>\n</HTML>\n";
	}
	else {
	       	open (FILE, ">$FILE") or $self->log (2, "Konnte '$FILE' nicht öffnen");
		print FILE $TITLE.$INHALT."</BODY>\n</HTML>\n";
		close FILE;
        }
}


####################################################################
####         nimmt die Änderungen aus dem Formular an
####         Argumente  : Zeiger auf Variablen
####         Returnwert : -
####################################################################

sub getbearb {
	my $self = shift;
	if ($baseq::VARS{tbut} eq $self->trans("BU13")){$self->htmlbearb;}
	elsif ($baseq::VARS{tbut} eq $self->trans("BU17") ){$self->htmlbearb;}
	elsif ($baseq::VARS{tbut} eq $self->trans("BU22") ){$self->templateansicht;}
	elsif ($baseq::VARS{tbut} eq $self->trans("BU1") ){
		$self->{tmpbeschr}=$self->fclean($baseq::VARS{tbeschr});
		$self->{htmlbodytag}=$self->tclean($baseq::VARS{tbodytag});
		$self->{htmloben}=$self->tclean($baseq::VARS{toben});
		$self->{htmlmitte}=$self->tclean($baseq::VARS{tmitte});
		$self->{htmlunten}=$self->tclean($baseq::VARS{tunten});
		$self->{qtface}=$self->fclean($baseq::VARS{tqtface});	
		$self->{qtsize}=$self->fclean($baseq::VARS{tqtsize});	
		$self->{qtcolor}=$self->fclean($baseq::VARS{tqtcolor});	
		$self->{atface}=$self->fclean($baseq::VARS{tatface});	
		$self->{atsize}=$self->fclean($baseq::VARS{tatsize});	
		$self->{atcolor}=$self->fclean($baseq::VARS{tatcolor});	
		$self->{stface}=$self->fclean($baseq::VARS{tstface});	
		$self->{stsize}=$self->fclean($baseq::VARS{tstsize});	
		$self->{stcolor}=$self->fclean($baseq::VARS{tstcolor});	
	    $self->store;
		$self->loadtmp(1);
        $self->htmlbearb;
	}
        elsif  ($baseq::VARS{tbut} eq $self->trans("BU23") ){$self->getfarben;}
	elsif  ($baseq::VARS{tbut} eq $self->trans("BU21") ){$self->farbenbearb;}
        else {$self->htmlbearb;}
}


####################################################################
####         Gibt das Template zur Bearbeitung aus
####         Argumente  : Text
####         Returnwert : Text mit Font-Tags
####################################################################
sub htmlbearb {
	my $self = shift;
	$self->{warntext}="Template: ".$self->{tmpbeschr};
	$self->printhtml("Template ändern","<TABLE>".
	$self->TR(["Beschreibung:",$self->TF("tbeschr",$self->{tmpbeschr},80) ]).	
	$self->TR(["BODY-Tag:",$self->TF("tbodytag",$self->{htmlbodytag},80) ]).	
	"</TABLE>\n".
	"Oben:\n<TEXTAREA NAME=\"toben\" COLUMNS=40 ROWS=8>".$self->{htmloben}."</TEXTAREA>\n".
	"Mitte:\n<TEXTAREA NAME=\"tmitte\" COLUMNS=40 ROWS=8>".$self->{htmlmitte}."</TEXTAREA>\n".	
	"Unten:\n<TEXTAREA NAME=\"tunten\" COLUMNS=40 ROWS=8>".$self->{htmlunten}."</TEXTAREA>\n".	
        "<TABLE>\n".
	$self->TR(["&nbsp;","Typ","Gr&ouml;&szlig;e","Farbe"]).
	$self->TR(["Fragen:",
		   $self->DDfface("tqtface",$self->{qtface}),
                   $self->TF("tqtsize",$self->{qtsize},10),
                   $self->DDfcolor("tqtcolor",$self->{qtcolor}) ]).
	$self->TR(["Antworten:",
		   $self->DDfface("tatface",$self->{atface}),
                   $self->TF("tatsize",$self->{atsize},10),
                   $self->DDfcolor("tatcolor",$self->{atcolor}) ]).
	$self->TR(["Standard:",
		   $self->DDfface("tstface",$self->{stface}),
                   $self->TF("tstsize",$self->{stsize},10),
                   $self->DDfcolor("tstcolor",$self->{stcolor}) ]).

      	"</TABLE>\n".$self->HD("ktemplate",$self->{template}).
	
	$self->SMrow( ["tbut","kbut","tbut"], ["BU1","BU13","BU22"] ) );
       	$self->exit;
}

####################################################################
####         Gibt die Farbpalette zur Bearbeitung aus
####         Argumente  : -
####         Returnwert : -
####################################################################
sub farbenbearb {
	my $self = shift;
	$self->{warntext}="Bitte bearbeiten Sie Ihre Farbeinstellungen";
        my $HTML="<TABLE cellspacing=5>\n"; my $hex; my $name; my @Lhex; my @Lname;
	$SQL="select hexcode, name from farben where knr=$self->{knr} order by nr";
	my $sth=$self->sqlprepare($SQL);
        while (($hex, $name)=$sth->fetchrow_array){push @Lhex,$hex; push @Lname, $name;}
        my $stcolor=$self->{stcolor}; unshift @Lhex,""; unshift @Lname,""; # ab 1 beginnen....
	for (my $x=1; $x<(@Lhex+5); $x++) {
	  $self->{stcolor}=@Lhex[$x];
	  $HTML.=$self->TR([ $self->sfont("Beispiel"),
			    $self->TF("thex$x",$Lhex[$x],7),
			    $self->TF("tname$x",$Lname[$x],30) ]);
	}
 	$self->{stcolor}=$stcolor;
	$HTML.= "</TABLE>\n".
	$self->HD("ktemplate",$self->{id}).
	$self->SMrow( ["tbut","kbut"] , ["BU23","BU13"] );

	$self->printhtml($self->trans("TI14"),$HTML);
	$self->exit;
}

####################################################################
####         Gibt die Farbpalette zur Bearbeitung aus
####         Argumente  : -
####         Returnwert : -
####################################################################
sub getfarben {
	my $self=shift;
        my ($a,$b);
	my $SQL="delete from farben where knr=$self->{knr}";
        $self->sqldo($SQL);
	my $key; my $valu; my @Lhex; my @Lname; my $x;
	while (($key, $valu)= each %baseq::VARS ) {
	  $x=0;($x)=$key=~/^thex(\d+)$/;
	  if ($valu ne "") {$Lhex[$x]=$valu;}
	  $x=0;($x)=$key=~/^tname(\d+)$/;
	  if ($valu ne "") {$Lname[$x]=$valu;}
	}
	for ($x=1; $x<(@Lhex); $x++) {
             $a=$self->fclean($Lhex[$x]); $b=$self->fclean($Lname[$x]);
	     $self->sqldo("insert into farben values ($self->{knr}, $x, '$a', '$b')");
	}
        $self->farbenbearb;
}

####################################################################
####         Gibt das Template zur Bearbeitung aus
####         Argumente  : Text
####         Returnwert : Text mit Font-Tags
####################################################################
sub templateansicht {
	my $self = shift;
	$self->{warntext}="Template: ".$self->{tmpbeschr};
	$self->printhtml($self->trans("TI15"),$self->qfont("Bitte sagen uns ihre Meinung !")."<BR><TABLE><TR><TD>".
	$self->afont(
	$self->RB("U1F1","U1F1A1")."&nbsp;Antwort Nummer 1:".
	$self->TF("U1F1A1T","",50)."<BR>".
	$self->RB("U1F1","U1F1A2")."&nbsp;Die 2te Antwort<BR>".
	$self->RB("U1F1","U1F1A3")."&nbsp;Die 3te Antwort<BR>"	).
	"</TD><TD>&nbsp;</TD></TR>\n".
	"</TABLE><BR>\n".
	$self->HD("ktemplate",$self->{template}).
	"<BR>".$self->SM("tbut", "BU13")."&nbsp;&nbsp;&nbsp;".
	$self->sfont("Text in Standardfarbe")  );
	$self->exit;
}

####################################################################
####         gibt eine DropDownliste der Schriftfarben zurueck
####         Argumente  : -
####         Returnwert : HTMLstring
####################################################################
sub DDfcolor {
  $self=shift;
  $name=shift;
  $sel=shift;		
  return $self->DD($name,$self->{RLfontcolor},$sel,$self->{RHfontcolor}); 
}

####################################################################
####         gibt eine DropDownliste der Schriftstile zurueck
####         Argumente  : -
####         Returnwert : HTMLstring
####################################################################
sub DDfface {
  $self=shift;
  $name=shift;
  $sel=shift;		
  return $self->DD($name,$self->{RLfontface},$sel); 
}
