# The LearningOnline Network # Internal Server Error Handler # # $Id: lonerrorhandler.pm,v 1.24 2013/08/12 16:51:58 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA 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. # # LON-CAPA 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 LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # package Apache::lonerrorhandler; use strict; use Apache::Constants qw(:common); use Apache::loncommon(); use Apache::lonnet; use Apache::lonmsg(); use Apache::lonacc(); use Apache::lonlocal; sub handler { my $r = shift; &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK if $r->header_only; &Apache::lonacc::get_posted_cgi($r); if (!$Apache::lonlocal::lh) { &Apache::lonlocal::get_language_handle($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=(<dir_config('lonDefDomain'); my $sysmail; my $notify = 1; my %domconfig = &Apache::lonnet::get_dom('configuration',['contacts']); if (ref($domconfig{'contacts'}) eq 'HASH') { if ($domconfig{'contacts'}{'reporterrors'} == 0) { $notify = 0; } } if ($notify) { $sysmail = 'errorrecord@loncapa.org'; } 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('

'.&mt('Report submitted').'

'.&mt('Thank you!')); } else { $r->print('

'.&mt('Warning: Report not submitted').'

'. '' .&mt('The administrators of the domain [_1] have not set' .' any e-mail addresses for receipt of your error report.' ,''.$defdom.'') .''); } } else { # ------------------------------------------------------------- Get environment my $envkey; my $env=''; my $syllabus=''; foreach $envkey (keys(%env)) { if ($envkey =~ /^form\.(.+)\.filename$/) { my $item = $1; if (exists($env{'form.'.$item.'.mimetype'})) { if (exists($env{'form.'.$item})) { my $size = (length($env{'form.'.$item}))/(1024.0 * 1024.0); $env{'form.'.$item} = &mt('File (contents not shown) - size was [_1] MB.',sprintf("%.4f",$size)); } } } } 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('

' .&mt('Somewhere something went wrong') .'

' .'

'.&mt('Please help us to find out what.').'

' .'

'.&mt('Please take a moment to fill out the form below.').' ' .&mt('Your information, together with internal debugging information, ' .'will be e-mailed to the system and server administrators.') .'

'.&mt('Please describe what you did just before this screen came up').'

'.&mt('Is this problem reproducible?').'

'.&mt('Do you have any guesses why this might have happened?').'

'.&mt('Thank you for your help!').'

'.&mt('Internal info:'). '
'.
$syllabus.'
'); # -------------------------- Better terminate this in case something was sticky $r->child_terminate(); } $r->print(&Apache::loncommon::end_page()); return OK; } 1; __END__ =pod =head1 NAME Apache::lonerrorhandler.pm =head1 SYNOPSIS Handles errors. This is part of the LearningOnline Network with CAPA project described at http://www.lon-capa.org. =head1 OVERVIEW None =cut