--- loncom/interface/lonerrorhandler.pm	2005/02/17 08:29:42	1.5
+++ loncom/interface/lonerrorhandler.pm	2007/12/04 04:43:21	1.14
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Internal Server Error Handler
 #
-# $Id: lonerrorhandler.pm,v 1.5 2005/02/17 08:29:42 albertel Exp $
+# $Id: lonerrorhandler.pm,v 1.14 2007/12/04 04:43:21 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -30,68 +30,130 @@ package Apache::lonerrorhandler;
 
 use strict;
 use Apache::Constants qw(:common);
-use Apache::loncommon;
+use Apache::loncommon();
+use Apache::lonnet;
+use Apache::lonmsg();
+use Apache::lonacc();
+use Apache::lonlocal;
 
 sub handler {
     my $r = shift;
-    $r->content_type('text/html');
+    &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;
     return OK if $r->header_only;
 
+    &Apache::lonacc::get_posted_cgi($r);
+
+    my $title = $env{'form.sendinfo'} ? 'Sending Error Report'
+                                      : 'Could Not Process Request';
+    $r->print(&Apache::loncommon::start_page($title));
+
+    if ($env{'form.sendinfo'}) {
+	my $repro='no';
+# ------------------------------------------------------------------ Mail stuff
+	if ($env{'form.reproducible'}) {
+	    $repro='yes';
+	}
+        my %lt = &Apache::lonlocal::texthash (
+                     msg => 'LON-CAPA Error Message',
+                     rep => 'Reproducible',
+                     ver => 'Version',
+                     syl => 'Syllabus',
+                     pri => 'Prior Action',
+                     gue => 'Guesses',
+                     env => 'Environment',
+                 );
+	my $message=(<<ENDMESSAGE);
+$lt{'msg'}
+$lt{'rep'}: $repro
+$lt{'ver'}: $env{'form.version'}
+$lt{'syl'}:
+$env{'form.syllabus'}
+
+$lt{'pri'}:
+$env{'form.prioraction'}
+
+$lt{'gue'}:
+$env{'form.guesses'}
+
+$lt{'env'}:
+$env{'form.environment'}
+ENDMESSAGE
+        my $sysmail = $r->dir_config('lonSysEMail');
+        my $defdom = $r->dir_config('lonDefDomain');
+        my $origmail = $r->dir_config('lonAdmEMail');
+        my $recipients = &Apache::loncommon::build_recipient_list($sysmail,
+                                             'errormail',$defdom,$origmail);
+        if ($recipients ne '') {
+            &Apache::lonmsg::sendemail($recipients,'ERROR REPORT',$message);
+	    $r->print('<h2>'.&mt('Report submitted').'</h2>'.&mt('Thank you!'));
+        } else {
+            $r->print('<h2>'.&mt('Warning: Report not submitted').'</h2>'.
+                      '<span class="LC_error">'.&mt("The administrators of
+                      the domain ($defdom) have not set any e-mail addresses
+                      for receipt of your error report.").'</span>');
+        }
+    } else {
 # ------------------------------------------------------------- Get environment
-     my $envkey;
-     my $env='';
- 
-     foreach $envkey (sort keys %ENV) {
- 	$env.="$envkey: $ENV{$envkey}\n";
-     }
-
-     $env=~s/\"/\'\'/g;
-     my $recipients=$r->dir_config('lonAdmEMail').','.
-                     $r->dir_config('lonSysEMail'); 
-
-     my $version=$r->dir_config('lonVersion');
-
-     my $req=$r->as_string();
-     $req=~s/\"/\'\'/g;
-
-    my $html=&Apache::lonxml::xmlbegin();
-    my $bodytag=&Apache::loncommon::bodytag('Could Not Process Request');
-# --------------------------------------------------- Print login screen header
-    $r->print(<<ENDDOCUMENT);
-$html
-<head>
-<title>The LearningOnline Network with CAPA</title>
-</head>
-$bodytag
-<h2>Somewhere something went wrong - please help us to find out what.</h2>
-Please take a moment to fill out the form below. Your information, together
-with internal debugging information, will be emailed to the system and server
-administrators.
-<form action="mailto:$recipients" method=get enctype="text/plain">
-<input type=submit value="Send Information">
-<h3>Please describe what you did just before this screen came up</h3>
-<input type=hidden name=req value="$req">
-<textarea name=prioraction cols=50 rows=5>
+	my $envkey;
+	my $env='';
+	my $syllabus='';
+
+	foreach $envkey (sort(keys(%env))) {
+	    $env.="$envkey: $env{$envkey}\n";
+	}
+	foreach $envkey (sort(keys(%ENV))) {
+	    $env.="$envkey: $ENV{$envkey}\n";
+	    if ($envkey=~/REDIRECT\_(REQUEST_URI|SCRIPT|ERROR)/) {
+		$syllabus.="\n$1:\n$ENV{$envkey}";
+	    }
+	}
+
+	$env=~s/\"/\'\'/g;
+
+	my $version=$r->dir_config('lonVersion');
+
+# ----------------------------------------------------------- Print error form
+	$r->print('<h2>'.
+&mt('Somewhere something went wrong - please help us to find out what.').'</h2>'.
+&mt('Please take a moment to fill out the form below.').' '.&mt('Your information,
+ together with internal debugging information, will be emailed to the system and 
+server administrators.').'
+<form action="/adm/errorhandler" method="post">
+<input type="submit" value="'.&mt('Send Information').'" />
+<h3>'.&mt('Please describe what you did just before this screen came up').'</h3>
+<textarea name="prioraction" cols="50" rows="5">
 </textarea>
-<h3>Is this problem reproducible?</h3>
-<input type=checkbox name=reproducible value=yes> Yes!
-<h3>Do you have any guesses why this might have happened?</h3>
-<textarea name=guesses cols=50 rows=5>
+<h3>'.&mt('Is this problem reproducible?').'</h3>
+<label>
+<input type="checkbox" name="reproducible" value="yes" /> '.&mt('Yes!').'
+</label>
+<h3>'.&mt('Do you have any guesses why this might have happened?').'</h3>
+<textarea name="guesses" cols="50" rows="5">
 </textarea>
-<input type=hidden name=version value="$version">
-<input type=hidden name=environment value="$env"><p>
-<input type=submit value="Send Information">
+<input type="hidden" name="version" value="'.$version.'" />
+<input type="hidden" name="environment" value="'.$env.'" />
+<input type="hidden" name="syllabus" value="'.$syllabus.'" />
+<input type="hidden" name="sendinfo" value="1" />
+<p>
+<input type="submit" value="'.&mt('Send Information').'" />
+</p>
 </form>
-<h1>Thank you for your help!</h1>
-</body>
-</html>
-ENDDOCUMENT
+<h1>'.&mt('Thank you for your help!').'</h1>
+<font size="-1">
+<pre>
+'.&mt('Internal info:').
+$syllabus.'
+</pre>
+</font>
+');
 # -------------------------- Better terminate this in case something was sticky
-    $r->child_terminate();
 
+        $r->child_terminate();
+    }
+    $r->print(&Apache::loncommon::end_page());
     return OK;
-} 
+}
 
 1;
 __END__