--- loncom/homework/lonhomework.pm 2006/12/13 22:48:07 1.263 +++ loncom/homework/lonhomework.pm 2007/10/05 18:08:40 1.275 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.263 2006/12/13 22:48:07 albertel Exp $ +# $Id: lonhomework.pm,v 1.275 2007/10/05 18:08:40 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -96,7 +96,6 @@ sub get_target { return ('grade','webgrade'); } if ( defined($env{'form.submitted'}) && - ( !defined($env{'form.resetdata'})) && ( !defined($env{'form.newrandomization'}))) { return ('grade', 'web'); } else { @@ -113,7 +112,10 @@ sub get_target { return ('web'); } } else { - if ( $env{'form.problemmode'} eq &mt('View') || + if ($env{'form.problemstate'} eq 'WEB_GRADE') { + #$env{'form.webgrade'} = 'yes'; + return ('grade','webgrade','answer'); + } elsif ( $env{'form.problemmode'} eq &mt('View') || $env{'form.problemmode'} eq &mt('Discard Edits and View')) { if ( defined($env{'form.submitted'}) && (!defined($env{'form.resetdata'})) && @@ -186,7 +188,6 @@ sub proctor_checked_in { return 0; } -$Apache::lonxml::browse=''; sub check_ip_acc { my ($acc)=@_; &Apache::lonxml::debug("acc is $acc"); @@ -194,7 +195,8 @@ sub check_ip_acc { return 1; } my $allowed=0; - my $ip=$ENV{'REMOTE_ADDR'}; + my $ip=$env{'request.host'} || $ENV{'REMOTE_ADDR'}; + my $name; foreach my $pattern (split(',',$acc)) { $pattern =~ s/^\s*//; @@ -434,7 +436,7 @@ sub check_access { $date = &mt("an indeterminate date"); $passed = 0; } else { if (time < $date) { $passed = 0; } else { $passed = 1; } - $date = localtime $date; + $date = &Apache::lonlocal::locallocaltime($date); } if (!$passed) { $type=$temp; last; } } @@ -663,9 +665,19 @@ sub handle_save_or_undo { if ((!$error) && (!copy($filebak,$file))) { $error=1; } if ((!$error) && (!move($filetmp,$filebak))) { $error=1; } if (!$error) { - &Apache::lonxml::info("

".&mt("Undid changes, Switched")." $filebak ".&mt("and")." $file

"); + &Apache::lonxml::info("

". + &mt("Undid changes, Switched [_1] and [_2]", + ''.$filebak. + '', + ''.$file. + '')."

"); } else { - &Apache::lonxml::info("

".&mt("Unable to undo, unable to switch")." $filebak ".&mt("and")." $file

"); + &Apache::lonxml::info("

". + &mt("Unable to undo, unable to switch [_1] and [_2]", + ''. + $filebak.'', + ''. + $file.'')."

"); $error=1; } } else { @@ -673,20 +685,29 @@ sub handle_save_or_undo { my $fs=Apache::File->new(">$filebak"); if (defined($fs)) { print $fs $$problem; - &Apache::lonxml::info("".&mt("Making Backup to"). - " $filebak"); + &Apache::lonxml::info("".&mt("Making Backup to [_1]", + ''. + $filebak.''). + ""); } else { - &Apache::lonxml::info("".&mt("Unable to make backup")." $filebak"); + &Apache::lonxml::info("". + &mt("Unable to make backup [_1]", + ''. + $filebak.'').""); $error=2; } my $fh=Apache::File->new(">$file"); if (defined($fh)) { print $fh $$result; - &Apache::lonxml::info("".&mt("Saving Modifications to"). - " $file"); + &Apache::lonxml::info("".&mt("Saving Modifications to [_1]", + ''. + $file.'' ).""); } else { - &Apache::lonxml::info("". - &mt("Unable to write to")." $file"); + &Apache::lonxml::info(''. + &mt("Unable to write to [_1]", + ''. + $file.''). + ''); $error|=4; } } @@ -760,13 +781,21 @@ sub analyze { $answer_part); my $concatanswer= join("\0",@{ $answer_part }); if (($concatanswer eq '') || ($concatanswer=~/^\@/)) { - $answer_part = [''.&mt('Error').'']; + $answer_part = [''.&mt('Error').'']; } $seedexample{join("\0",$part,$i,@{$answer_part})}= $thisseed; $i++; } } + if (!keys(%{ $analyze{$part.'.answer'} })) { + my $answer_part = + [''.&mt('Error').'']; + $seedexample{join("\0",$part,0,@{$answer_part})}= + $thisseed; + push( @{ $overall{$part.'.answer'}[0] }, + $answer_part); + } } } } @@ -840,9 +869,18 @@ sub editxmlmode { if ($cols > 80) { $cols = 80; } if ($cols < 70) { $cols = 70; } if ($rows < 20) { $rows = 20; } + my $js = + &Apache::edit::js_change_detection(). + &Apache::loncommon::resize_textarea_js(); + my $only_body = ($env{'environment.remote'} eq 'off')? 0 : 1; my $start_page = - &Apache::loncommon::start_page("EditXML $file", - &Apache::edit::js_change_detection()); + &Apache::loncommon::start_page(&mt("EditXML [_1]",$file),$js, + {'no_auto_mt_title' => 1, + 'only_body' => $only_body, + 'add_entries' => { + 'onresize' => q[resize_textarea('LC_editxmltext','LC_aftertextarea')], + 'onload' => q[resize_textarea('LC_editxmltext','LC_aftertextarea')], + }}); $result.=$start_page. &renderpage($request,$file,['no_output_web'],1). @@ -859,10 +897,14 @@ sub editxmlmode {
' . $xml_help . ' -
- - + +
+ + +
'.&Apache::loncommon::end_page(); &Apache::lonxml::add_messages(\$result); $request->print($result); @@ -879,6 +921,7 @@ sub renderpage { my @targets = @{$targets || [&get_target()]}; &Apache::lonhomework::showhashsubset(\%env,'form.'); &Apache::lonxml::debug("Running targets ".join(':',@targets)); + my $overall_result; foreach my $target (@targets) { # FIXME need to do something intelligent when a problem goes @@ -916,7 +959,7 @@ sub renderpage { &Apache::lonxml::debug("Should be parsing now"); $result .= &Apache::lonxml::xmlparse($request, $target, $problem, &setup_vars($target),%mystyle); - undef($Apache::lonhomework::parsing_a_problem); + &finished_parsing(); if (!$output) { $result = ''; } #$request->print("Result follows:"); if ($target eq 'modified') { @@ -947,6 +990,11 @@ sub renderpage { } } +sub finished_parsing { + undef($Apache::lonhomework::parsing_a_problem); + undef($Apache::lonhomework::parsing_a_task); +} + # with no arg it returns a HTML