--- loncom/homework/lonhomework.pm 2003/09/19 12:26:56 1.148 +++ loncom/homework/lonhomework.pm 2004/01/28 15:45:44 1.161 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.148 2003/09/19 12:26:56 albertel Exp $ +# $Id: lonhomework.pm,v 1.161 2004/01/28 15:45:44 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -24,11 +24,7 @@ # /home/httpd/html/adm/gpl.txt # # 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; use strict; @@ -90,8 +86,8 @@ sub get_target { return ('web'); } } else { - if ( $ENV{'form.problemmode'} eq 'View' || - $ENV{'form.problemmode'} eq 'Discard Edits and View') { + if ( $ENV{'form.problemmode'} eq &mt('View') || + $ENV{'form.problemmode'} eq &mt('Discard Edits and View')) { if ( defined($ENV{'form.submitted'}) && (!defined($ENV{'form.resetdata'})) && (!defined($ENV{'form.newrandomization'}))) { @@ -99,9 +95,9 @@ sub get_target { } else { return ('web','answer'); } - } elsif ( $ENV{'form.problemmode'} eq 'Edit' ) { + } elsif ( $ENV{'form.problemmode'} eq &mt('Edit') ) { if ( $ENV{'form.submitted'} eq 'edit' ) { - if ( $ENV{'form.submit'} eq 'Submit Changes and View' ) { + if ( $ENV{'form.submit'} eq &mt('Submit Changes and View') ) { return ('modified','web','answer'); } else { return ('modified','edit'); @@ -147,6 +143,51 @@ sub send_footer { $Apache::lonxml::browse=''; +sub check_ip_acc { + my ($acc)=@_; + if (!defined($acc) || $acc =~ /^\s*$/) { return 1; } + my $allowed=0; + my $ip=$ENV{'REMOTE_ADDR'}; + my $name; + foreach my $pattern (split(',',$acc)) { + if ($pattern =~ /\*$/) { + #35.8.* + $pattern=~s/\*//; + if ($ip =~ /^\Q$pattern\E/) { $allowed=1; } + } elsif ($pattern =~ /(\d+\.\d+\.\d+)\.\[(\d+)-(\d+)\]$/) { + #35.8.3.[34-56] + my $low=$2; + my $high=$3; + $pattern=$1; + if ($ip =~ /^\Q$pattern\E/) { + my $last=(split(/\./,$ip))[3]; + if ($last <=$high && $last >=$low) { $allowed=1; } + } + } elsif ($pattern =~ /^\*/) { + #*.msu.edu + $pattern=~s/\*//; + if (!defined($name)) { + use Socket; + my $netaddr=inet_aton($ip); + ($name)=gethostbyaddr($netaddr,AF_INET); + } + if ($name =~ /\Q$pattern\E$/i) { $allowed=1; } + } elsif ($pattern =~ /\d+\.\d+\.\d+\.\d+/) { + #127.0.0.1 + if ($ip =~ /^\Q$pattern\E/) { $allowed=1; } + } else { + #some.name.com + if (!defined($name)) { + use Socket; + my $netaddr=inet_aton($ip); + ($name)=gethostbyaddr($netaddr,AF_INET); + } + if ($name =~ /\Q$pattern\E$/i) { $allowed=1; } + } + if ($allowed) { last; } + } + return $allowed; +} # JB, 9/24/2002: Any changes in this function may require a change # in lonnavmaps::resource::getDateStatus. sub check_access { @@ -168,6 +209,14 @@ sub check_access { &Apache::lonxml::debug("checking for part :$id:"); &Apache::lonxml::debug("time:".time); + + my $allowed=&check_ip_acc(&Apache::lonnet::EXT("resource.$id.acc")); + if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { + $status='INVALID_ACCESS'; + $date=&mt("can not be accessed from your location."); + return($status,$date); + } + foreach $temp ("opendate","duedate","answerdate") { $lastdate = $date; $date = &Apache::lonnet::EXT("resource.$id.$temp"); @@ -307,11 +356,10 @@ sub setuppermissions { sub setupheader { my $request=$_[0]; if ($ENV{'browser.mathml'}) { - $request->content_type('text/xml'); + &Apache::loncommon::content_type($request,'text/xml'); } else { - $request->content_type('text/html'); + &Apache::loncommon::content_type($request,'text/html'); } - $request->content_encoding('UTF-8'); if (!$Apache::lonxml::debug && ($ENV{'REQUEST_METHOD'} eq 'GET')) { &Apache::loncommon::no_cache($request); } @@ -327,7 +375,9 @@ sub handle_save_or_undo { my $filetmp =$file.".tmp"; my $error=0; - if ($ENV{'form.Undo'} eq 'undo') { + &Apache::lonnet::correct_line_ends($result); + + if ($ENV{'form.Undo'} eq &mt('undo')) { my $error=0; if (!copy($file,$filetmp)) { $error=1; } if ((!$error) && (!copy($filebak,$file))) { $error=1; } @@ -445,9 +495,7 @@ sub analyze { } } if (scalar(keys(%allparts)) == 0 ) { - $request->print('
'.&mt('Found no analyzable parts in this problem, - currently only Numerical, Formula and String response - styles are supported.').'
'); + $request->print(''.&mt('Found no analyzable parts in this problem, currently only Numerical, Formula and String response styles are supported.').'
'); } &Apache::lonhtmlcommon::Close_PrgWin($request,\%prog_state); &analyze_footer($request); @@ -470,14 +518,18 @@ sub editxmlmode { if (!$error) { $problem=&Apache::lonnet::getfile($file); } } &Apache::lonhomework::showhashsubset(\%ENV,'^form'); - if ( $ENV{'form.submit'} eq 'Submit Changes and View' ) { + if ( $ENV{'form.submit'} eq &mt('Submit Changes and View') ) { &Apache::lonhomework::showhashsubset(\%ENV,'^form'); $ENV{'form.problemmode'}='View'; &renderpage($request,$file); } else { my ($rows,$cols) = &Apache::edit::textarea_sizes(\$problem); - my $xml_help = Apache::loncommon::helpLatexCheatsheet("Problem_Editor_XML_Index", - "Problem Editing Help"); + my $xml_help = ''. + &Apache::loncommon::helpLatexCheatsheet("Problem_Editor_XML_Index", + "Problem Editing Help"). + ' | '. + &Apache::loncommon::help_open_faq(5). + &Apache::loncommon::help_open_bug('Authoring').' |
'.&mt('You did not select a template.').'
'."\n"; } my $instructions; + my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1); if ($templatelist) { $instructions=&mt(", select a template from the pull-down menu below.").'$lt{'createnew'} $extension$instructions $lt{'click'} "$lt{'Create'} $extension" $lt{'button'}.
@@ -650,7 +706,6 @@ sub handler { my $request=$_[0]; $Apache::lonxml::debug=$ENV{'user.debug'}; - if (&setupheader($request)) { return OK; } $ENV{'request.uri'}=$request->uri; @@ -686,9 +741,9 @@ sub handler { my ($symb) = &Apache::lonxml::whichuser(); &Apache::lonxml::debug('symb is '.$symb); if ($ENV{'request.state'} eq "construct" || $symb eq '') { - if ($ENV{'form.resetdata'} eq 'Reset Submissions' || - $ENV{'form.resetdata'} eq 'New Problem Variation' || - $ENV{'form.newrandomization'} eq 'New Randomization') { + if ($ENV{'form.resetdata'} eq &mt('Reset Submissions') || + $ENV{'form.resetdata'} eq &mt('New Problem Variation') || + $ENV{'form.newrandomization'} eq &mt('New Randomization')) { my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser(); &Apache::lonnet::tmpreset($symb,'',$domain,$name); &Apache::lonxml::debug("Attempt reset"); @@ -703,9 +758,9 @@ sub handler { #&view_or_edit_menu($request); $ENV{'form.problemmode'}='View'; &renderpage($request,$file); - } elsif ($ENV{'form.problemmode'} eq 'EditXML') { + } elsif ($ENV{'form.problemmode'} eq &mt('EditXML')) { &editxmlmode($request,$file); - } elsif ($ENV{'form.problemmode'} eq 'Calculate answers') { + } elsif ($ENV{'form.problemmode'} eq &mt('Calculate answers')) { &analyze($request,$file); } else { &renderpage($request,$file);