--- loncom/homework/lonhomework.pm 2005/11/08 21:09:08 1.221
+++ loncom/homework/lonhomework.pm 2005/11/21 21:51:29 1.226
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Homework handler
#
-# $Id: lonhomework.pm,v 1.221 2005/11/08 21:09:08 albertel Exp $
+# $Id: lonhomework.pm,v 1.226 2005/11/21 21:51:29 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -166,17 +166,24 @@ sub send_footer {
}
sub proctor_checked_in {
- my ($slot_name,$slot)=@_;
- my @allowed=split(",",$slot->{'proctor'});
- my $version=$Apache::lonhomework::history{'resource.version'};
- foreach my $possible (@allowed) {
- if ($Apache::lonhomework::history{"resource.$version.checkedin"} eq
- $possible &&
- $Apache::lonhomework::history{"resource.$version.checkedin.slot"}
- eq $slot_name) {
+ my ($slot_name,$slot,$type)=@_;
+ my @possible_proctors=split(",",$slot->{'proctor'});
+
+ my $key;
+ if ($type eq 'Task') {
+ my $version=$Apache::lonhomework::history{'resource.version'};
+ $key ="resource.$version.checkedin";
+ } elsif ($type eq 'problem') {
+ $key ='resource.0.checkedin';
+ }
+
+ foreach my $possible (@possible_proctors) {
+ if ($Apache::lonhomework::history{$key} eq $possible
+ && $Apache::lonhomework::history{$key.'.slot'} eq $slot_name) {
return 1;
}
}
+
return 0;
}
@@ -230,13 +237,19 @@ sub check_ip_acc {
return $allowed;
}
-sub check_task_access {
+sub check_slot_access {
+ my ($id,$type)=@_;
+
# does it pass normal muster
- # yes we really do want the default args passing
- my ($status,$datemsg)=&check_access;
+ my ($status,$datemsg)=&check_access($id);
+
+ my $useslots = &Apache::lonnet::EXT("resource.$id.useslots");
+ if ($useslots ne 'resource') {
+ return ($status,$datemsg);
+ }
+
if ($status eq 'SHOW_ANSWER' ||
$status eq 'CLOSED' ||
- $status eq 'CANNOT_ANSWER' ||
$status eq 'INVALID_ACCESS' ||
$status eq 'UNAVAILABLE') {
return ($status,$datemsg);
@@ -244,12 +257,15 @@ sub check_task_access {
if ($env{'request.state'} eq "construct") {
return ($status,$datemsg);
}
- my $version=$Apache::lonhomework::history{'resource.version'};
- if ($Apache::lonhomework::history{"resource.$version.checkedin"} &&
- $Apache::lonhomework::history{"resource.$version.status"} eq 'pass') {
- return ('SHOW_ANSWER');
+
+ if ($type eq 'Task') {
+ my $version=$Apache::lonhomework::history{'resource.version'};
+ if ($Apache::lonhomework::history{"resource.$version.checkedin"} &&
+ $Apache::lonhomework::history{"resource.$version.status"} eq 'pass') {
+ return ('SHOW_ANSWER');
+ }
}
- my ($id)=@_;
+
my @slots=
(split(':',&Apache::lonnet::EXT("resource.$id.availablestudent")),
split(':',&Apache::lonnet::EXT("resource.$id.available")));
@@ -274,18 +290,38 @@ sub check_task_access {
}
}
if ($slotstatus eq 'NEEDS_CHECKIN' &&
- &proctor_checked_in($slot_name,$returned_slot)) {
+ &proctor_checked_in($slot_name,$returned_slot,$type)) {
&Apache::lonxml::debug("protoctor checked in");
$slotstatus='CAN_ANSWER';
}
- if ( $slotstatus eq 'NOT_IN_A_SLOT' &&
- $Apache::lonhomework::history{"resource.$version.checkedin"}) {
- if ($Apache::lonhomework::history{"resource.$version.status"} eq 'fail') {
+
+ my ($pass_status,$checkedin);
+ if ($type eq 'Task') {
+ my $version=$Apache::lonhomework::history{'resource.version'};
+ $pass_status =
+ $Apache::lonhomework::history{"resource.$version.status"} eq 'fail';
+ $checkedin =
+ $Apache::lonhomework::history{"resource.$version.checkedin"};
+ } elsif ($type eq 'problem') {
+ $pass_status = 1;
+ $checkedin = $Apache::lonhomework::history{"resource.0.checkedin"};
+ }
+
+ if ($slotstatus eq 'NOT_IN_A_SLOT'
+ && $checkedin ) {
+
+ if ($pass_status) {
return ('SHOW_ANSWER');
} else {
return ('WAITING_FOR_GRADE');
}
+
}
+ if ( $status eq 'CANNOT_ANSWER' &&
+ ($slotstatus ne 'NEEDS_CHECKIN' && $slotstatus ne 'NOT_IN_A_SLOT')) {
+ return ($status,$datemsg);
+ }
+
return ($slotstatus,$datemsg,$slot_name,$returned_slot);
}
@@ -297,7 +333,6 @@ sub check_access {
my $status;
my $datemsg = '';
my $lastdate = '';
- my $temp;
my $type;
my $passed;
@@ -334,7 +369,7 @@ sub check_access {
return($status,$date);
}
- foreach $temp ("opendate","duedate","answerdate") {
+ foreach my $temp ("opendate","duedate","answerdate") {
$lastdate = $date;
$date = &Apache::lonnet::EXT("resource.$id.$temp");
my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type");
@@ -766,8 +801,10 @@ sub renderpage {
$target = 'web'; $output=0;
}
my $problem=&Apache::lonnet::getfile($file);
+ my $result;
if ($problem eq -1) {
- &Apache::lonxml::error(" ".&mt('Unable to find')." $file");
+ my $filename=(split('/',$file))[-1];
+ $result.=" ".&mt('Unable to find')." $filename";
$problem='';
}
@@ -777,8 +814,8 @@ sub renderpage {
if ($target eq 'web') {&Apache::lonhomework::showhashsubset(\%env,'^form');}
&Apache::lonxml::debug("Should be parsing now");
- my $result = &Apache::lonxml::xmlparse($request, $target, $problem,
- &setup_vars($target),%mystyle);
+ $result .= &Apache::lonxml::xmlparse($request, $target, $problem,
+ &setup_vars($target),%mystyle);
undef($Apache::lonhomework::parsing_a_problem);
if (!$output) { $result = ''; }
#$request->print("Result follows:");
@@ -917,7 +954,7 @@ EDITMENU
sub handler {
#my $t0 = [&gettimeofday()];
my $request=$_[0];
-
+ $Apache::lonxml::request=$request;
$Apache::lonxml::debug=$env{'user.debug'};
$env{'request.uri'}=$request->uri;
&setuppermissions();
@@ -937,10 +974,6 @@ sub handler {
if ($Apache::lonhomework::browse ne 'F' &&
$env{'request.state'} ne "construct") {
#should know where we are, so ask
- if ( &Apache::lonnet::mod_perl_version() == 2 ) {
- &Apache::lonnet::cleanenv();
- }
- &Apache::lonnet::logthis(&Apache::lonnet::mod_perl_version());
$request->internal_redirect('/adm/ambiguous'); return OK;
}
}