--- loncom/homework/lonhomework.pm 2004/02/13 21:27:22 1.164
+++ loncom/homework/lonhomework.pm 2004/05/27 22:25:16 1.177
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Homework handler
#
-# $Id: lonhomework.pm,v 1.164 2004/02/13 21:27:22 albertel Exp $
+# $Id: lonhomework.pm,v 1.177 2004/05/27 22:25:16 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -47,6 +47,7 @@ use Apache::externalresponse();
use Apache::rankresponse();
use Apache::matchresponse();
use Apache::chemresponse();
+use Apache::drawimage();
use Apache::Constants qw(:common);
use HTML::Entities();
use Apache::loncommon();
@@ -201,6 +202,18 @@ sub check_access {
my $passed;
if ($ENV{'request.state'} eq "construct") {
+ if ($ENV{'form.problemstate'}) {
+ if ($ENV{'form.problemstate'} =~ /^CANNOT_ANSWER/) {
+ if ( ! ($ENV{'form.problemstate'} eq 'CANNOT_ANSWER_correct' &&
+ lc($Apache::lonhomework::problemstatus) eq 'no')) {
+ return ('CANNOT_ANSWER',
+ &mt('is in this state due to author settings.'));
+ }
+ } else {
+ return ($ENV{'form.problemstate'},
+ &mt('is in this state due to author settings.'));
+ }
+ }
&Apache::lonxml::debug("in construction ignoring dates");
$status='CAN_ANSWER';
$datemsg=&mt('is in under construction');
@@ -279,7 +292,26 @@ sub check_access {
$status = 'CANNOT_ANSWER';
}
}
-
+ if ($status eq 'CAN_ANSWER') {
+ my $interval=&Apache::lonnet::EXT("resource.$id.interval");
+ &Apache::lonxml::debug("looking for interval $interval");
+ if ($interval) {
+ my $first_access=&Apache::lonnet::get_first_access('map');
+ &Apache::lonxml::debug("looking for accesstime $first_access");
+ if (!$first_access) {
+ $status='NOT_YET_VIEWED';
+ $datemsg=' '.$interval.' seconds';
+ } else {
+ my $newdate=localtime($first_access+$interval);
+ if (time > ($first_access+$interval)) {
+ $status='CLOSED';
+ $datemsg = &mt("was due on")." $newdate".&mt(", and answers will be available on")." $date";
+ } else {
+ $datemsg = &mt("is due at")." $newdate";
+ }
+ }
+ }
+ }
#if (($status ne 'CLOSED') && ($Apache::lonhomework::type eq 'exam') &&
# (!$Apache::lonhomework::history{"resource.0.outtoken"})) {
# return ('UNCHECKEDOUT','needs to be checked out');
@@ -386,29 +418,29 @@ sub handle_save_or_undo {
if ((!$error) && (!copy($filebak,$file))) { $error=1; }
if ((!$error) && (!move($filetmp,$filebak))) { $error=1; }
if (!$error) {
- $request->print("
".&mt("Undid changes, Switched")." $filebak ".&mt("and")." $file
");
+ &Apache::lonxml::info("".&mt("Undid changes, Switched")." $filebak ".&mt("and")." $file
");
} else {
- $request->print("".&mt("Unable to undo, unable to switch")." $filebak ".&mt("and")." $file
");
+ &Apache::lonxml::info("".&mt("Unable to undo, unable to switch")." $filebak ".&mt("and")." $file
");
$error=1;
}
} else {
my $fs=Apache::File->new(">$filebak");
if (defined($fs)) {
print $fs $$problem;
- $request->print("".&mt("Making Backup to").
- " $filebak
");
+ &Apache::lonxml::info("".&mt("Making Backup to").
+ " $filebak");
} else {
- $request->print("".&mt("Unable to make backup")." $filebak");
+ &Apache::lonxml::info("".&mt("Unable to make backup")." $filebak");
$error=2;
}
my $fh=Apache::File->new(">$file");
if (defined($fh)) {
print $fh $$result;
- $request->print("".&mt("Saving Modifications to").
- " $file
");
+ &Apache::lonxml::info("".&mt("Saving Modifications to").
+ " $file");
} else {
- $request->print("".
- &mt("Unable to write to")." $file");
+ &Apache::lonxml::info("".
+ &mt("Unable to write to")." $file");
$error|=4;
}
}
@@ -419,16 +451,16 @@ sub analyze_header {
my ($request) = @_;
my $result.='
'.&mt("Analyzing a problem").'
-
+ '.&Apache::lonxml::message_location().'
';
+ &Apache::lonxml::add_messages(\$result);
$request->print($result);
$request->rflush();
}
@@ -451,7 +483,8 @@ sub analyze {
my %prog_state=
&Apache::lonhtmlcommon::Create_PrgWin($request,&mt('Analyze Progress'),
&mt('Getting Problem Variants'),
- $ENV{'form.numtoanalyze'});
+ $ENV{'form.numtoanalyze'},
+ 'inline',undef);
for(my $i=1;$i<$ENV{'form.numtoanalyze'}+1;$i++) {
&Apache::lonhtmlcommon::Increment_PrgWin($request,\%prog_state,
&mt('last problem'));
@@ -476,6 +509,7 @@ sub analyze {
}
&Apache::lonhtmlcommon::Update_PrgWin($request,\%prog_state,
&mt('Analyzing Results'));
+ $request->print('
'.&mt('List of possible answers').': ');
foreach my $part (sort(keys(%allparts))) {
if (defined(@{ $overall{$part.'.answer'} })) {
my $num_cols=scalar(@{ $overall{$part.'.answer'}->[0] });
@@ -536,21 +570,23 @@ sub editxmlmode {
if ($cols > 80) { $cols = 80; }
if ($cols < 70) { $cols = 70; }
if ($rows < 20) { $rows = 20; }
- $result.='
+ $result.=''.
+ &Apache::lonxml::message_location().'
';
+ &Apache::lonxml::add_messages(\$result);
$request->print($result);
}
return '';
@@ -562,6 +598,7 @@ sub renderpage {
my (@targets) = &get_target();
&Apache::lonhomework::showhashsubset(\%ENV,'form.');
&Apache::lonxml::debug("Running targets ".join(':',@targets));
+ my $overall_result;
foreach my $target (@targets) {
#my $t0 = [&gettimeofday()];
my $problem=&Apache::lonnet::getfile($file);
@@ -593,12 +630,16 @@ sub renderpage {
#$result =~ s:::;
#$result.="
Spent $td seconds processing target $target\n";
#}
- $request->print($result);
- $request->rflush();
+# $request->print($result);
+ $overall_result.=$result;
+# $request->rflush();
}
#$request->print(":Result ends");
#my $td=&tv_interval($t0);
}
+ &Apache::lonxml::add_messages(\$overall_result);
+ $request->print($overall_result);
+ $request->rflush();
}
# with no arg it returns a HTML