version 1.157, 2003/11/08 10:44:58
|
version 1.165, 2004/02/16 17:20:39
|
Line 24
|
Line 24
|
# /home/httpd/html/adm/gpl.txt |
# /home/httpd/html/adm/gpl.txt |
# |
# |
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
|
# Guy Albertelli |
|
# 11/30 Gerd Kortemeyer |
|
# 6/1,8/17,8/18 Gerd Kortemeyer |
|
# 7/18 Jeremy Bowers |
|
|
|
package Apache::lonhomework; |
package Apache::lonhomework; |
use strict; |
use strict; |
Line 174 sub check_ip_acc {
|
Line 170 sub check_ip_acc {
|
use Socket; |
use Socket; |
my $netaddr=inet_aton($ip); |
my $netaddr=inet_aton($ip); |
($name)=gethostbyaddr($netaddr,AF_INET); |
($name)=gethostbyaddr($netaddr,AF_INET); |
} |
} |
if ($name =~ /\Q$pattern\E$/i) { $allowed=1; } |
if ($name =~ /\Q$pattern\E$/i) { $allowed=1; } |
} elsif ($pattern =~ /\d+\.\d+\.\d+\.\d+/) { |
} elsif ($pattern =~ /\d+\.\d+\.\d+\.\d+/) { |
#127.0.0.1 |
#127.0.0.1 |
Line 205 sub check_access {
|
Line 201 sub check_access {
|
my $passed; |
my $passed; |
|
|
if ($ENV{'request.state'} eq "construct") { |
if ($ENV{'request.state'} eq "construct") { |
|
if (defined($ENV{'form.problemstatus'})) { |
|
if ($ENV{'form.problemstate'} =~ /^CANNOT_ANSWER/) { |
|
return ('CANNOT_ANSWER','is in this state by royal decree.'); |
|
} else { |
|
return ($ENV{'form.problemstate'}, |
|
'is in this state by royal decree.'); |
|
} |
|
} |
&Apache::lonxml::debug("in construction ignoring dates"); |
&Apache::lonxml::debug("in construction ignoring dates"); |
$status='CAN_ANSWER'; |
$status='CAN_ANSWER'; |
$datemsg=&mt('is in under construction'); |
$datemsg=&mt('is in under construction'); |
return ($status,$datemsg); |
# return ($status,$datemsg); |
} |
} |
|
|
&Apache::lonxml::debug("checking for part :$id:"); |
&Apache::lonxml::debug("checking for part :$id:"); |
&Apache::lonxml::debug("time:".time); |
&Apache::lonxml::debug("time:".time); |
|
|
my $allowed=&check_ip_acc(&Apache::lonnet::EXT("resource.$id.acc")); |
|
if (!$allowed) { |
|
$status='INVALID_ACCESS'; |
|
$date=&mt("can not be accessed from your location."); |
|
return($status,$date); |
|
} |
|
|
|
foreach $temp ("opendate","duedate","answerdate") { |
if ($ENV{'request.state'} ne "construct") { |
$lastdate = $date; |
my $allowed=&check_ip_acc(&Apache::lonnet::EXT("resource.$id.acc")); |
$date = &Apache::lonnet::EXT("resource.$id.$temp"); |
if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { |
my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type"); |
$status='INVALID_ACCESS'; |
if ($thistype =~ /^(con_lost|no_such_host)/ || |
$date=&mt("can not be accessed from your location."); |
$date =~ /^(con_lost|no_such_host)/) { |
|
$status='UNAVAILABLE'; |
|
$date=&mt("may open later."); |
|
return($status,$date); |
return($status,$date); |
} |
} |
if ($thistype eq 'date_interval') { |
|
if ($temp eq 'opendate') { |
foreach $temp ("opendate","duedate","answerdate") { |
$date=&Apache::lonnet::EXT("resource.$id.duedate")-$date; |
$lastdate = $date; |
} |
$date = &Apache::lonnet::EXT("resource.$id.$temp"); |
if ($temp eq 'answerdate') { |
my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type"); |
$date=&Apache::lonnet::EXT("resource.$id.duedate")+$date; |
if ($thistype =~ /^(con_lost|no_such_host)/ || |
|
$date =~ /^(con_lost|no_such_host)/) { |
|
$status='UNAVAILABLE'; |
|
$date=&mt("may open later."); |
|
return($status,$date); |
|
} |
|
if ($thistype eq 'date_interval') { |
|
if ($temp eq 'opendate') { |
|
$date=&Apache::lonnet::EXT("resource.$id.duedate")-$date; |
|
} |
|
if ($temp eq 'answerdate') { |
|
$date=&Apache::lonnet::EXT("resource.$id.duedate")+$date; |
|
} |
} |
} |
|
&Apache::lonxml::debug("found :$date: for :$temp:"); |
|
if ($date eq '') { |
|
$date = &mt("an unknown date"); $passed = 0; |
|
} elsif ($date eq 'con_lost') { |
|
$date = &mt("an indeterminate date"); $passed = 0; |
|
} else { |
|
if (time < $date) { $passed = 0; } else { $passed = 1; } |
|
$date = localtime $date; |
|
} |
|
if (!$passed) { $type=$temp; last; } |
} |
} |
&Apache::lonxml::debug("found :$date: for :$temp:"); |
&Apache::lonxml::debug("have :$type:$passed:"); |
if ($date eq '') { |
if ($passed) { |
$date = &mt("an unknown date"); $passed = 0; |
$status='SHOW_ANSWER'; |
} elsif ($date eq 'con_lost') { |
$datemsg=$date; |
$date = &mt("an indeterminate date"); $passed = 0; |
} elsif ($type eq 'opendate') { |
} else { |
$status='CLOSED'; |
if (time < $date) { $passed = 0; } else { $passed = 1; } |
$datemsg = &mt("will open on")." $date"; |
$date = localtime $date; |
} elsif ($type eq 'duedate') { |
|
$status='CAN_ANSWER'; |
|
$datemsg = &mt("is due at")." $date"; |
|
} elsif ($type eq 'answerdate') { |
|
$status='CLOSED'; |
|
$datemsg = &mt("was due on")." $lastdate".&mt(", and answers will be available on")." $date"; |
} |
} |
if (!$passed) { $type=$temp; last; } |
|
} |
|
&Apache::lonxml::debug("have :$type:$passed:"); |
|
if ($passed) { |
|
$status='SHOW_ANSWER'; |
|
$datemsg=$date; |
|
} elsif ($type eq 'opendate') { |
|
$status='CLOSED'; |
|
$datemsg = &mt("will open on")." $date"; |
|
} elsif ($type eq 'duedate') { |
|
$status='CAN_ANSWER'; |
|
$datemsg = &mt("is due at")." $date"; |
|
} elsif ($type eq 'answerdate') { |
|
$status='CLOSED'; |
|
$datemsg = &mt("was due on")." $lastdate".&mt(", and answers will be available on")." $date"; |
|
} |
} |
if ($status eq 'CAN_ANSWER') { |
if ($status eq 'CAN_ANSWER') { |
#check #tries, and if correct. |
#check #tries, and if correct. |
my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; |
my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; |
my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); |
my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); |
if ( $tries eq '' ) { $tries = '0'; } |
if ( $tries eq '' ) { $tries = '0'; } |
if ( $maxtries eq '' ) { $maxtries = '2'; } |
if ( $maxtries eq '' && |
if ($tries >= $maxtries) { $status = 'CANNOT_ANSWER'; } |
$ENV{'request.state'} ne 'construct') { $maxtries = '2'; } |
|
if ($maxtries && $tries >= $maxtries) { $status = 'CANNOT_ANSWER'; } |
# if (correct and show prob status) or excused then CANNOT_ANSWER |
# if (correct and show prob status) or excused then CANNOT_ANSWER |
if(($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/ |
if(($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/ |
&& |
&& |
Line 494 sub analyze {
|
Line 501 sub analyze {
|
} |
} |
$request->print('</table>'); |
$request->print('</table>'); |
} else { |
} else { |
$request->print('<p>'.&mt('Part').' '.$part.' '. |
$request->print('<p>'.&mt('Response').' '.$part.' '. |
&mt('is not analyzable at this time').'</p>'); |
&mt('is not analyzable at this time').'</p>'); |
} |
} |
} |
} |
if (scalar(keys(%allparts)) == 0 ) { |
if (scalar(keys(%allparts)) == 0 ) { |
$request->print('<p>'.&mt('Found no analyzable parts in this problem, currently only Numerical, Formula and String response styles are supported.').'</p>'); |
$request->print('<p>'.&mt('Found no analyzable respones in this problem, currently only Numerical, Formula and String response styles are supported.').'</p>'); |
} |
} |
&Apache::lonhtmlcommon::Close_PrgWin($request,\%prog_state); |
&Apache::lonhtmlcommon::Close_PrgWin($request,\%prog_state); |
&analyze_footer($request); |
&analyze_footer($request); |
Line 528 sub editxmlmode {
|
Line 535 sub editxmlmode {
|
&renderpage($request,$file); |
&renderpage($request,$file); |
} else { |
} else { |
my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem); |
my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem); |
my $xml_help = Apache::loncommon::helpLatexCheatsheet("Problem_Editor_XML_Index", |
my $xml_help = '<table><tr><td>'. |
"Problem Editing Help"); |
&Apache::loncommon::helpLatexCheatsheet("Problem_Editor_XML_Index", |
|
"Problem Editing Help"). |
|
'</td><td>'. |
|
&Apache::loncommon::help_open_faq(5). |
|
&Apache::loncommon::help_open_bug('Authoring').'</td></tr></table>'; |
if ($cols > 80) { $cols = 80; } |
if ($cols > 80) { $cols = 80; } |
if ($cols < 70) { $cols = 70; } |
if ($cols < 70) { $cols = 70; } |
if ($rows < 20) { $rows = 20; } |
if ($rows < 20) { $rows = 20; } |
Line 557 sub renderpage {
|
Line 568 sub renderpage {
|
my ($request,$file) = @_; |
my ($request,$file) = @_; |
|
|
my (@targets) = &get_target(); |
my (@targets) = &get_target(); |
|
&Apache::lonhomework::showhashsubset(\%ENV,'form.'); |
&Apache::lonxml::debug("Running targets ".join(':',@targets)); |
&Apache::lonxml::debug("Running targets ".join(':',@targets)); |
foreach my $target (@targets) { |
foreach my $target (@targets) { |
#my $t0 = [&gettimeofday()]; |
#my $t0 = [&gettimeofday()]; |
Line 652 sub newproblem {
|
Line 664 sub newproblem {
|
$errormsg='<p><font color="red">'.&mt('You did not select a template.').'</font></p>'."\n"; |
$errormsg='<p><font color="red">'.&mt('You did not select a template.').'</font></p>'."\n"; |
} |
} |
my $instructions; |
my $instructions; |
|
my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1); |
if ($templatelist) { $instructions=&mt(", select a template from the pull-down menu below.").'<br />'.&mt("Then");} |
if ($templatelist) { $instructions=&mt(", select a template from the pull-down menu below.").'<br />'.&mt("Then");} |
my %lt=&Apache::lonlocal::texthash( 'create' => 'Creating a new', |
my %lt=&Apache::lonlocal::texthash( 'create' => 'Creating a new', |
'resource' => 'resource', |
'resource' => 'resource', |
Line 662 sub newproblem {
|
Line 675 sub newproblem {
|
'Create' => 'Create', |
'Create' => 'Create', |
'button' => 'button'); |
'button' => 'button'); |
$request->print(<<ENDNEWPROBLEM); |
$request->print(<<ENDNEWPROBLEM); |
<body bgcolor="#FFFFFF"> |
$bodytag |
<h1>$lt{'create'} $extension $lt{'resource'}</h1> |
<h1>$lt{'create'} $extension $lt{'resource'}</h1> |
$errormsg |
$errormsg |
$lt{'requested'} <tt>$shownurl</tt> $lt{'not exist'}. |
$lt{'requested'} <tt>$shownurl</tt> $lt{'not exist'}. |
Line 704 sub handler {
|
Line 717 sub handler {
|
my $request=$_[0]; |
my $request=$_[0]; |
|
|
$Apache::lonxml::debug=$ENV{'user.debug'}; |
$Apache::lonxml::debug=$ENV{'user.debug'}; |
|
|
if (&setupheader($request)) { return OK; } |
if (&setupheader($request)) { return OK; } |
$ENV{'request.uri'}=$request->uri; |
$ENV{'request.uri'}=$request->uri; |
|
|