--- loncom/homework/lonhomework.pm 2002/01/17 12:23:31 1.69
+++ loncom/homework/lonhomework.pm 2002/02/27 20:23:26 1.71
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Homework handler
#
-# $Id: lonhomework.pm,v 1.69 2002/01/17 12:23:31 harris41 Exp $
+# $Id: lonhomework.pm,v 1.71 2002/02/27 20:23:26 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -218,32 +218,37 @@ sub setupheader {
sub handle_save_or_undo {
my ($request,$problem,$result) = @_;
- my $fileout = &Apache::lonnet::filelocation("",$request->uri);
- my $filesave=$fileout.".bak";
+ my $file = &Apache::lonnet::filelocation("",$request->uri);
+ my $filebak =$file.".bak";
+ my $filetmp =$file.".tmp";
my $error=0;
if ($ENV{'form.Undo'} eq 'undo') {
- if (copy($filesave,$fileout)) {
- $request->print("Undid changes, Copied $filesave to $fileout
");
+ my $error=0;
+ if (!copy($file,$filetmp)) { $error=1; }
+ if ((!$error) && (!copy($filebak,$file))) { $error=1; }
+ if ((!$error) && (!move($filetmp,$filebak))) { $error=1; }
+ if (!$error) {
+ $request->print("
Undid changes, Switched $filebak and $file
");
} else {
- $request->print("Unable to undo, unable to copy $filesave to $fileout
");
+ $request->print("Unable to undo, unable to switch $filebak and $file
");
$error=1;
}
} else {
- my $fs=Apache::File->new(">$filesave");
+ my $fs=Apache::File->new(">$filebak");
if (defined($fs)) {
print $fs $$problem;
- $request->print("Making Backup to $filesave
");
+ $request->print("Making Backup to $filebak
");
} else {
- $request->print("Unable to make backup $filesave");
+ $request->print("Unable to make backup $filebak");
$error=2;
}
- my $fh=Apache::File->new(">$fileout");
+ my $fh=Apache::File->new(">$file");
if (defined($fh)) {
print $fh $$result;
- $request->print("Saving Modifications to $fileout
");
+ $request->print("Saving Modifications to $file
");
} else {
- $request->print("Unable to write to $fileout");
+ $request->print("Unable to write to $file");
$error|=4;
}
}
@@ -286,6 +291,7 @@ sub renderpage {
my ($request,$file) = @_;
my (@targets) = &get_target();
+ &Apache::lonxml::debug("Running targets ".join(':',@targets));
foreach my $target (@targets) {
#my $t0 = [&gettimeofday()];
my $problem=&Apache::lonnet::getfile($file);
@@ -314,6 +320,7 @@ sub renderpage {
&Apache::lonxml::error("Unable to find default_homework.lcpm");
$default='';
}
+ &Apache::lonxml::debug("Should be parsing now");
$result = &Apache::lonxml::xmlparse($target, $problem,
$default.&setup_vars($target),%mystyle);
@@ -428,6 +435,14 @@ sub handler {
$Apache::lonhomework::browse= &Apache::lonnet::allowed('bre',$ENV{'request.filename'});
$Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});
&Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:");
+ # some times multiple problemmodes are submitted, need to select
+ # the last one
+ if ( defined @{ $ENV{'form.problemmode'} } ) {
+ &Apache::lonxml::debug("Problem Modes ".join(':',@{ $ENV{'form.problemmode'} }));
+ my @modes=@{ $ENV{'form.problemmode'} };
+ undef $ENV{'form.problemmode'};
+ $ENV{'form.problemmode'}=$modes[-1];
+ }
&Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'});
my $file=&Apache::lonnet::filelocation("",$request->uri);