version 1.68, 2002/01/03 22:16:53
|
version 1.78, 2002/05/23 21:12:44
|
Line 31
|
Line 31
|
|
|
package Apache::lonhomework; |
package Apache::lonhomework; |
use strict; |
use strict; |
use Apache::style; |
use Apache::style(); |
use Apache::lonxml; |
use Apache::lonxml(); |
use Apache::lonnet; |
use Apache::lonnet(); |
use Apache::lonplot; |
use Apache::lonplot(); |
use Apache::inputtags; |
use Apache::inputtags(); |
use Apache::structuretags; |
use Apache::structuretags(); |
use Apache::randomlabel; |
use Apache::randomlabel(); |
use Apache::response; |
use Apache::response(); |
use Apache::hint; |
use Apache::hint(); |
use Apache::outputtags; |
use Apache::outputtags(); |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
|
use HTML::Entities(); |
#use Time::HiRes qw( gettimeofday tv_interval ); |
#use Time::HiRes qw( gettimeofday tv_interval ); |
|
|
sub BEGIN { |
BEGIN { |
&Apache::lonxml::register_insert(); |
&Apache::lonxml::register_insert(); |
} |
} |
|
|
Line 60 sub get_target {
|
Line 61 sub get_target {
|
return ('web'); |
return ('web'); |
} |
} |
} elsif ($ENV{'request.state'} eq "construct") { |
} elsif ($ENV{'request.state'} eq "construct") { |
|
if ( defined($ENV{'form.grade_target'}) ) { |
|
return ($ENV{'form.grade_target'}); |
|
} |
if ( defined($ENV{'form.preview'})) { |
if ( defined($ENV{'form.preview'})) { |
if ( defined($ENV{'form.submitted'})) { |
if ( defined($ENV{'form.submitted'})) { |
return ('grade', 'web'); |
return ('grade', 'web'); |
Line 128 sub check_access {
|
Line 132 sub check_access {
|
my $type; |
my $type; |
my $passed; |
my $passed; |
&Apache::lonxml::debug("checking for part :$id:"); |
&Apache::lonxml::debug("checking for part :$id:"); |
|
&Apache::lonxml::debug("time:".time); |
foreach $temp ("opendate","duedate","answerdate") { |
foreach $temp ("opendate","duedate","answerdate") { |
$lastdate = $date; |
$lastdate = $date; |
$date = &Apache::lonnet::EXT("resource.$id.$temp"); |
$date = &Apache::lonnet::EXT("resource.$id.$temp"); |
Line 189 sub showhash {
|
Line 194 sub showhash {
|
my (%hash) = @_; |
my (%hash) = @_; |
my $resultkey; |
my $resultkey; |
foreach $resultkey (sort keys %hash) { |
foreach $resultkey (sort keys %hash) { |
&Apache::lonxml::debug("$resultkey ---- $hash{$resultkey}"); |
if (ref($hash{$resultkey})) { |
|
if ($hash{$resultkey} =~ /ARRAY/ ) { |
|
my $string="$resultkey ---- ("; |
|
foreach my $elm (@{ $hash{$resultkey} }) { |
|
$string.="$elm,"; |
|
} |
|
chop($string); |
|
&Apache::lonxml::debug("$string)"); |
|
} else { |
|
&Apache::lonxml::debug("$resultkey ---- $hash{$resultkey}"); |
|
} |
|
} else { |
|
&Apache::lonxml::debug("$resultkey ---- $hash{$resultkey}"); |
|
} |
} |
} |
&Apache::lonxml::debug("\n<br />restored values^</br>\n"); |
&Apache::lonxml::debug("\n<br />restored values^</br>\n"); |
return ''; |
return ''; |
Line 218 sub setupheader {
|
Line 236 sub setupheader {
|
|
|
sub handle_save_or_undo { |
sub handle_save_or_undo { |
my ($request,$problem,$result) = @_; |
my ($request,$problem,$result) = @_; |
my $fileout = &Apache::lonnet::filelocation("",$request->uri); |
my $file = &Apache::lonnet::filelocation("",$request->uri); |
my $filesave=$fileout.".bak"; |
my $filebak =$file.".bak"; |
|
my $filetmp =$file.".tmp"; |
my $error=0; |
my $error=0; |
|
|
if ($ENV{'form.Undo'} eq 'undo') { |
if ($ENV{'form.Undo'} eq 'undo') { |
if (copy($filesave,$fileout)) { |
my $error=0; |
$request->print("<b>Undid changes, Copied $filesave to $fileout<br /></b>"); |
if (!copy($file,$filetmp)) { $error=1; } |
|
if ((!$error) && (!copy($filebak,$file))) { $error=1; } |
|
if ((!$error) && (!move($filetmp,$filebak))) { $error=1; } |
|
if (!$error) { |
|
$request->print("<p><b>Undid changes, Switched $filebak and $file</b></p>"); |
} else { |
} else { |
$request->print("<font color=\"red\" size=\"+1\"><b>Unable to undo, unable to copy $filesave to $fileout<br /></b></font>"); |
$request->print("<p><font color=\"red\" size=\"+1\"><b>Unable to undo, unable to switch $filebak and $file</b></font></p>"); |
$error=1; |
$error=1; |
} |
} |
} else { |
} else { |
my $fs=Apache::File->new(">$filesave"); |
my $fs=Apache::File->new(">$filebak"); |
if (defined($fs)) { |
if (defined($fs)) { |
print $fs $$problem; |
print $fs $$problem; |
$request->print("<b>Making Backup to $filesave</b><br />"); |
$request->print("<b>Making Backup to $filebak</b><br />"); |
} else { |
} else { |
$request->print("<font color=\"red\" size=\"+1\"><b>Unable to make backup $filesave</b></font>"); |
$request->print("<font color=\"red\" size=\"+1\"><b>Unable to make backup $filebak</b></font>"); |
$error=2; |
$error=2; |
} |
} |
my $fh=Apache::File->new(">$fileout"); |
my $fh=Apache::File->new(">$file"); |
if (defined($fh)) { |
if (defined($fh)) { |
print $fh $$result; |
print $fh $$result; |
$request->print("<b>Saving Modifications to $fileout</b><br />"); |
$request->print("<b>Saving Modifications to $file</b><br />"); |
} else { |
} else { |
$request->print("<font color=\"red\" size=\"+1\"><b>Unable to write to $fileout</b></font>"); |
$request->print("<font color=\"red\" size=\"+1\"><b>Unable to write to $file</b></font>"); |
$error|=4; |
$error|=4; |
} |
} |
} |
} |
return $error; |
return $error; |
} |
} |
|
|
|
sub analyze { |
|
my ($request,$file) = @_; |
|
&Apache::lonxml::debug("Analyze"); |
|
my $result=&Apache::lonnet::ssi($request->uri,('grade_target' => 'analyze')); |
|
&Apache::lonxml::debug(":$result:"); |
|
(my $garbage,$result)=split(/_HASH_REF__/,$result,2); |
|
&showhash(&Apache::lonnet::str2hash($result)); |
|
return $result; |
|
} |
|
|
sub editxmlmode { |
sub editxmlmode { |
my ($request,$file) = @_; |
my ($request,$file) = @_; |
my $result; |
my $result; |
Line 276 sub editxmlmode {
|
Line 309 sub editxmlmode {
|
<input type="submit" name="Undo" value="undo" /> |
<input type="submit" name="Undo" value="undo" /> |
<hr /> |
<hr /> |
<textarea rows="'.$rows.'" cols="'.$cols.'" name="editxmltext">'. |
<textarea rows="'.$rows.'" cols="'.$cols.'" name="editxmltext">'. |
$problem.'</textarea> |
&HTML::Entities::encode($problem).'</textarea> |
</form></body></html>'; |
</form></body></html>'; |
$request->print($result); |
$request->print($result); |
return ''; |
return ''; |
Line 286 sub renderpage {
|
Line 319 sub renderpage {
|
my ($request,$file) = @_; |
my ($request,$file) = @_; |
|
|
my (@targets) = &get_target(); |
my (@targets) = &get_target(); |
|
&Apache::lonxml::debug("Running targets ".join(':',@targets)); |
foreach my $target (@targets) { |
foreach my $target (@targets) { |
#my $t0 = [&gettimeofday()]; |
#my $t0 = [&gettimeofday()]; |
my $problem=&Apache::lonnet::getfile($file); |
my $problem=&Apache::lonnet::getfile($file); |
Line 298 sub renderpage {
|
Line 332 sub renderpage {
|
my $result = ''; |
my $result = ''; |
&Apache::inputtags::initialize_inputtags; |
&Apache::inputtags::initialize_inputtags; |
&Apache::edit::initialize_edit; |
&Apache::edit::initialize_edit; |
|
if ($target eq 'analyze') { %Apache::lonhomework::anaylze=(); } |
if ($target eq 'web') { |
if ($target eq 'web') { |
if (&Apache::lonnet::symbread() eq '') { |
my ($symb)=&Apache::lonxml::whichuser(); |
|
if ($symb eq '') { |
if ($ENV{'request.state'} eq "construct") { |
if ($ENV{'request.state'} eq "construct") { |
} else { |
} else { |
$request->print("Browsing or <a href=\"/adm/ambiguous\">ambiguous</a> reference, submissions ignored<br />"); |
$request->print("Browsing or <a href=\"/adm/ambiguous\">ambiguous</a> reference, submissions ignored<br />"); |
Line 314 sub renderpage {
|
Line 350 sub renderpage {
|
&Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>"); |
&Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>"); |
$default=''; |
$default=''; |
} |
} |
$result = &Apache::lonxml::xmlparse($target, $problem, |
&Apache::lonxml::debug("Should be parsing now"); |
|
$result = &Apache::lonxml::xmlparse($request, $target, $problem, |
$default.&setup_vars($target),%mystyle); |
$default.&setup_vars($target),%mystyle); |
|
|
#$request->print("Result follows:"); |
#$request->print("Result follows:"); |
if ($target eq 'modified') { |
if ($target eq 'modified') { |
&handle_save_or_undo($request,\$problem,\$result); |
&handle_save_or_undo($request,\$problem,\$result); |
} else { |
} else { |
|
if ($target eq 'analyze') { |
|
$result=&Apache::lonnet::hashref2str(\%Apache::lonhomework::analyze); |
|
undef(%Apache::lonhomework::analyze); |
|
} |
#my $td=&tv_interval($t0); |
#my $td=&tv_interval($t0); |
#if ( $Apache::lonxml::debug) { |
#if ( $Apache::lonxml::debug) { |
#$result =~ s:</body>::; |
#$result =~ s:</body>::; |
Line 428 sub handler {
|
Line 469 sub handler {
|
$Apache::lonhomework::browse= &Apache::lonnet::allowed('bre',$ENV{'request.filename'}); |
$Apache::lonhomework::browse= &Apache::lonnet::allowed('bre',$ENV{'request.filename'}); |
$Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}); |
$Apache::lonhomework::viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}); |
&Apache::lonxml::debug("Permissions:$Apache::lonhomework::browse:$Apache::lonhomework::viewgrades:"); |
&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'}) && |
|
ref($ENV{'form.problemmode'}) ) { |
|
my $mode=$ENV{'form.problemmode'}->[-1]; |
|
undef $ENV{'form.problemmode'}; |
|
$ENV{'form.problemmode'}=$mode; |
|
} |
&Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); |
&Apache::lonxml::debug("Problem Mode ".$ENV{'form.problemmode'}); |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
|
|
Line 453 sub handler {
|
Line 502 sub handler {
|
&renderpage($request,$file); |
&renderpage($request,$file); |
} elsif ($ENV{'form.problemmode'} eq 'EditXML') { |
} elsif ($ENV{'form.problemmode'} eq 'EditXML') { |
&editxmlmode($request,$file); |
&editxmlmode($request,$file); |
|
} elsif ($ENV{'form.problemmode'} eq 'Answer Distribution') { |
|
&analyze($request,$file); |
} else { |
} else { |
&renderpage($request,$file); |
&renderpage($request,$file); |
} |
} |
Line 462 sub handler {
|
Line 513 sub handler {
|
} |
} |
} else { |
} else { |
# just render the page normally outside of construction space |
# just render the page normally outside of construction space |
|
&Apache::lonxml::debug("not construct"); |
&renderpage($request,$file); |
&renderpage($request,$file); |
} |
} |
#my $td=&tv_interval($t0); |
#my $td=&tv_interval($t0); |