#!/usr/bin/perl -w
#
# $Id: error-report-page.pl,v 1.3 1997/06/23 09:08:13 webadm Exp $
#
#
# DESCRIPTION: error-report-page.pl - German frontend for gnats
#
# URL: none yet
#
# AUTHOR: Stefan Lanz (Lanz@rz.uni-frankfurt.de)
#         Peter Sternecker (pps@rz.uni-frankfurt.de)
#         Claus Langhans (Langhans@rz.uni-frankfurt.de)
#	  Cord Beermann (cord@Wunder-Nett.org)
#
# Thanks to: Ralf Begemann (begemann@cc.fh-lippe.de)
#	     Gerold Meerkoetter (gerold@noc.fh-lippe.de)
#
# This program 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 2 of the License, or
# (at your option) any later version.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
# A Perl script is "correct" if it gets the job done before your boss fires
# you.
# ('Programming Perl Second Edition' by Larry Wall, Tom Christiansen
#   & Randal. L. Schwartz)
#
# Bugs and shortcomings
# none yet
#
### Configuration ###
#
# who is responsible for this?
$webmaster="gnats\@thalassa.cc.fh-lippe.de";
#
# where is the gnats-homedir?
$gnatshome="/var/infosystems/gnats";
#
# where are the known categories?
$categories=$gnatshome."/gnats-db/gnats-adm/categories";
#
### End of Configuration ###

# include perl-modules
use CGI::Carp;
use CGI qw(:standard);
use CGI qw(:shortcuts);

# initialize the CGI-Module and load the form-input
$query = new CGI;
$query->autoEscape(undef);

# print HTTP and HTML-Header and so on.
print $query->header;
print <<EOT1;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <LINK
REV="made" HREF="mailto:cord\@cc.fh-lippe.de"> <TITLE>L&ouml;sungsdatenbank
- neuer Problem-Report</TITLE> </HEAD>

<BODY text="#000000" bgcolor="#FFFFF7">

<!--#include virtual="/fhl/dvz/loesungen/.header" -->

<HR>
 
<H1>Die L&ouml;sungsdatenbank - neuer Problem-Report</H1>

<FORM METHOD="POST" ACTION="/cgi-bin/error-report.pl">

<p>Um uns die schnelle Bearbeitung Ihrer Fragen und Probleme zu
erm&ouml;glichen, bitten wir Sie, diese Seite auszuf&uuml;llen. Bitte lassen
Sie keine scheinbaren Kleinigkeiten weg, darauf kommt es oft an! Bevor Sie
aber eine Frage stellen, die schon beantwortet wurde, schauen Sie bitte in
die <A HREF="/fhl/dvz/loesungen/">L&ouml;sungsdatenbank</A>. Nat&uuml;rlich
steht Ihnen auch unsere <A
HREF="/fhl/dvz/loesungen/misc/benutzerberatung.html">Benutzerberatung</A>
zur Beantwortung Ihrer Fragen zur Verf&uuml;gung.  Aktuelle Probleme werden
oft auch in den <A HREF="/fhl/dvz/neu.html">Aktuellen Hinweisen der DVZ</A>
oder der Newsgruppe <A HREF="news:fhl.announce">fhl.announce</a> behandelt.
Die <A HREF="/cgi-bin/ice-form.pl">Stichwortsuche</A> bringt Sie vielleicht
Ihrem Ziel auch n&auml;her.</p>

<ol> 

<li><strong>Login-Name:</strong> Dies ist der Name, mit dem Sie sich am
System anmelden.  Sollten Sie &uuml;ber mehrere Login-Namen verf&uuml;gen,
geben Sie bitte jenen an, den Sie verwendeten, als Ihr Problem auftrat.
EOT1

# put a default in the field if given
print(pre(strong('Login'),
	  '     ',
	  $query->textfield(-name=>'MUST_Login',
			    -size=>'8',
			    -default=>$query->param('MUST_Login')
			    ),
	  )
      );
      
print <<EOT1;

<BR>

<li><strong>Nach- und Vorname</strong> Nur ausf&uuml;llen, wenn der oben
angegebene Login-Name nicht auf den UNIX-Rechnern der DVZ g&uuml;ltig ist.
EOT1

# put a default in the field if given
print(pre(strong('Name'),
	  '      ',
	  $query->textfield(-name=>'OPTION_Name',
			    -size=>'46',
			    -default=>$query->param('OPTION_Name')
			    ),
	  )
      );
      
print <<EOT1;

<BR>

<li><strong>Mailadresse:</strong> Dies ist Ihre Mailadresse. Nur
ausf&uuml;llen, wenn der oben angegebene Login-Name nicht auf den
UNIX-Rechnern der DVZ g&uuml;ltig ist.<p>
EOT1

# put a default in the field if given
print(pre(strong('Mailadresse'),
	  $query->textfield(-name=>'OPTION_Mailadresse',
			    -size=>'46',
			    -default=>$query->param('OPTION_Mailadresse')
			    ),
	  )
      );

print <<EOT1;

<BR>

<li><STRONG>Telefonnummer:</STRONG> Telefonnummer(n) unter der man Sie
tags&uuml;ber erreichen kann.

EOT1

# put a default in the field if given
print(pre(strong('Telefon'),
	  '   ',
	  $query->textfield(-name=>'OPTION_Telefon',
			    -size=>'46',
			    -default=>$query->param('OPTION_Telefon')
			    ),
	  )
      );

print <<EOT1;

<BR>

<li><STRONG>Betreff:</STRONG> Bitte geben Sie ein paar Worte an, auf die wir Bezug nehmen k&ouml;nnen.
Das Betreff erscheint in der Antwort die als e-mail verschickt wird im Subject.

EOT1

# put a default in the field if given
print(pre(strong('Betreff'),
	  '   ',
	  $query->textfield(-name=>'OPTION_betreff',
			    -size=>'46',
			    -default=>$query->param('OPTION_betreff')
			    ),
	  )
      );

print <<EOT1;

<br>

<li><STRONG>Zeitpunkt bzw. Zeitraum des Auftretens:</STRONG> Bitte Datum und
Uhrzeit angeben.  Tritt Ihr Problem st&auml;ndig, unregelm&auml;ssig oder
periodisch auf? K&ouml;nnen Sie Korrelationen mit der Tageszeit dem
Wochentag o.&auml;. erkennen?

EOT1

# put a default in the field if given
print(pre(strong('Wann'),
	  '      ',
	  $query->textfield(-name=>'OPTION_Wann',
			    -size=>'46',
			    -default=>$query->param('OPTION_Wann')
			    ),
	  )
      );

print <<EOT1;

<br>

<li><STRONG>Host, auf dem das Problem auftrat:</STRONG> Bitte geben Sie hier
den kompletten Rechnernamen an.  Mit dem <kbd>uname -n</kbd> Kommando
erhalten Sie bspw. auf UNIX den Rechnernamen.

EOT1

# put a default in the field if given
print(pre(strong('Host'),
	  '      ',
	  $query->textfield(-name=>'MUST_Host',
			    -size=>'46',
			    -default=>$query->param('MUST_Host')
			    ),
	  )
      );

print <<EOT1;

<br>

<li><STRONG>Beschreibung:</STRONG> Beschreiben Sie genau, welche Ihrer
Aktionen aus Ihrer Sicht zum Auftreten des Problems f&uuml;hrten. Was
wollten Sie erreichen?

<ul><li><STRONG>Fehlermeldungen:</STRONG> Bitte geben Sie alle
Fehlermeldungen, die Ihnen das Systen anzeigt w&ouml;rtlich wieder.  Falls
Sie mit dem X11 Window System arbeiten, k&ouml;nnen Sie angezeigte Texte
meist mit der linken Maustaste markieren und mit der mittleren Maustaste in
Ihren Fehlerbericht einf&uuml;gen.

<li><STRONG>Vorgeschichte:</STRONG> Versuchen Sie zu ergr&uuml;nden, ob Ihr
Problem eventuell nur nach einer bestimmten Vorgeschichte auftritt.
Ged&auml;chtniseffekte des Systems k&ouml;nnen eine entscheidende Rolle
spielen.

<li><STRONG>Bei Druckerproblemen</STRONG> geben Sie bitte zus&auml;tzlich
den Namen des Druckers an, die Sie benutzten.  Sollte der Drucker in Ihrer
N&auml;he stehen, so da&szlig; Sie ggf.  unmittelbar erkennen k&ouml;nnen,
da&szlig; Ihr Problem nur auf fehlendes Papier, fehlenden Toner oder
verbrauchtes Farbband zur&uuml;ckzuf&uuml;hren ist, wenden Sie sich bitte
direkt an die DVZ.  Hinweise in dieser Hinsicht erhalten Sie unter UNIX auch
durch den Befehl <kbd>lpstat -p</kbd>.

<!--li--><!--STRONG--><!--Bei Zugang &uuml;ber
W&auml;hlverbindung:--><!--/STRONG--><!--Tritt Ihr Problem im Zusammenhang mit
einer ggf. von Ihnen benutzten W&auml;hlverbindung zum Campus-Netz auf, so
geben Sie bitte die angew&auml;lte(n) Telefonnummer an.-->

<li><STRONG>Weitere Begleitumst&auml;nde:</STRONG> Geben Sie bitte alle
Begleitumst&auml;nde an, die Ihnen in irgendeiner Weise bedeutungsvoll
erscheinen.

EOT1

# put a default in the field if given
print(pre(strong('Ausf&uuml;hrliche Beschreibung').
	  ':'),
      $query->textarea(-name=>'MUST_Fehlerbeschreibung',
		       -rows=>10,
		       -columns=>50,
		       -default=>$query->param('MUST_Fehlerbeschreibung')
		       ),
      );

print <<EOT1;

<br>

<li><STRONG>Reproduzierbarkeit:</STRONG> Ist der Fehler reproduzierbar? Wenn
ja, dann geben Sie bitte an, wie man ihn reproduzieren kann.

EOT1

# put a default in the field if given
print(pre(strong('Ist der Fehler reproduzierbar?'),
	  $query->radio_group(-name=>'MUST_reproduzierbar',
			      -'values'=>['Ja','Nein'],
			      -default=>$query->param('MUST_reproduzierbar')
			      ),
	  )
      );

print <<EOT1;

<pre>Wenn ja, <strong>wie</strong>?</pre>

EOT1

# put a default in the field if given
print($query->textarea(-name=>'OPTION_wie_reproduzierbar',
		       -rows=>10,
		       -columns=>50,
		       -default=>$query->param('OPTION_wie_reproduzierbar')
		       ),
      );

print <<EOT1;

</ul>
<br>

<li><STRONG>Kategorie:</STRONG> In welche Kategorie ordnen Sie den
Fehler/die Anfrage ein,

<pre>
EOT1

# get categories
open (CAT,"< $categories") || die "open $categories:$!";
$i=0;$flag=1;
while (<CAT>) {
    chop;
    if ($_ =~ /###\s*internal/i) {
	$flag=0;
    } elsif ($_ =~ /###\s*external/i) {
	$flag=1;
    }
    s/#.*$//g; # Kommentare weg
    ($cat,$desc)=(split(/:/))[0,1];
    if ($_ ne "" && $flag == 1) {
	printf("<INPUT TYPE=\042radio\042 NAME=\042MUST_Fehlerkategorie\042 VALUE=\042%s\042", $cat);
	# put a default in the field if given
	print("CHECKED") if $query->param('MUST_Fehlerkategorie') and $query->param('MUST_Fehlerkategorie') eq $cat;
	printf("> %-25s",$desc);
	# linefeed after second category
	if ($i%2 == 1) {
	    print "<BR>\n";
	}
	$i++;
    }
}

print <<EOT1;
<INPUT TYPE="radio" NAME="MUST_Fehlerkategorie" VALUE="Anderes"> Sonstige</pre>
<br>

<li><STRONG>Priorit&auml;t:</STRONG> Welche Priorit&auml;t messen Sie dem
Fehler bei?

EOT1

# map hardcoded gnats-priorities to german terms
%values = ('low'=>' niedrig',
	   'medium'=>' mittel',
	   'high'=>' hoch');
# put a default in the field if given
print(pre("", $query->radio_group('MUST_pri',
				  ['low','medium','high'],
				  $query->param('MUST_pri'),
				  'true',
				  \%values
				  ),
	  )
      );

print <<EOT1;

</ol>

<INPUT TYPE="submit" VALUE="Fehlerbericht absenden">
</FORM>
EOT1

# print the html-Trailer.
&html_trailer;

1;

#Subroutinen fuer Fehlermeldung
sub fatalerror{
    local ($errortext) = @_;
    &html_header("Error executing script $0 (pid $$)");
    print "<h1>ERROR</h1><hr>";
    print "You got an error while executing the script <strong>$0 (pid $$)</strong> !<br>\n";
    print "Please notify $webmaster<br><br>\n";
    print "Description : <h1>$errortext</h1><br><hr>";
    &html_trailer;
    exit;
};	                

sub friendlyerror{
    local ($errortext) = @_;
    &html_header("Benutzerfehler");
    print "<h1>Fehler</h1><hr>";
#    print "User error detected executing <strong>$0 (pid $$)</strong>!<br>\n";
    print "<br><br>\n";
    print "Sie haben folgendes falsch gemacht : $errortext<br><br>";
    &html_trailer;
    exit;
};

#Subroutine fuer die Zusammensetzung einer HTML- Nachricht
sub html_header {
    local($title) = @_;
    print "Content-type: text/html\n\n";
    print qq|<html><head><title>$title</title></head>\n<BODY BGCOLOR="#ffffff"  TEXT="#000000" VLINK="#551A8B"  ALINK="#ff0000"  LINK="#0000ff">\n|;
}

# print a html footer
sub html_trailer {
    	print "<hr>\n";
	print 'Autoren: ';
	print '<A HREF="http://www.rz.uni-frankfurt.de/personal/Stefan_Lanz.html">Stefan Lanz</A>, ';
    	print '<A HREF="http://www.rz.uni-frankfurt.de/personal/Peter_Sternecker.html">Peter Sternecker</A>, ';
    	print '<A HREF="http://www.rz.uni-frankfurt.de/personal/Claus_Langhans.html">Claus Langhans</A>';
	print '<br>Erweiterung und Anpassung an lokale Gegebenheiten: ';
	print '<A HREF="http://Cord.de/">Cord Beermann</A>';
	print "</body></html>\n";
}
