--- loncom/homework/lonhomework.pm 2011/09/09 16:56:35 1.328
+++ loncom/homework/lonhomework.pm 2011/12/20 22:46:06 1.334
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# The LON-CAPA Homework handler
#
-# $Id: lonhomework.pm,v 1.328 2011/09/09 16:56:35 bisitz Exp $
+# $Id: lonhomework.pm,v 1.334 2011/12/20 22:46:06 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -246,20 +246,24 @@ sub check_slot_access {
# }
my $slotstatus='NOT_IN_A_SLOT';
my ($returned_slot,$slot_name);
+ my $now = time;
+ my $num_usable_slots = 0;
foreach my $slot (@slots) {
$slot =~ s/(^\s*|\s*$)//g;
&Apache::lonxml::debug("getting $slot");
my %slot=&Apache::lonnet::get_slot($slot);
&Apache::lonhomework::showhash(%slot);
- if ($slot{'starttime'} < time &&
- $slot{'endtime'} > time &&
+ next if ($slot{'endtime'} < $now);
+ $num_usable_slots ++;
+ if ($slot{'starttime'} < $now &&
+ $slot{'endtime'} > $now &&
&Apache::loncommon::check_ip_acc($slot{'ip'})) {
&Apache::lonxml::debug("$slot is good");
$slotstatus='NEEDS_CHECKIN';
$returned_slot=\%slot;
$slot_name=$slot;
last;
- }
+ }
}
if ($slotstatus eq 'NEEDS_CHECKIN' &&
&proctor_checked_in($slot_name,$returned_slot,$type)) {
@@ -299,11 +303,36 @@ sub check_slot_access {
# However, the problem is not closed, and potentially, another slot might be
# used to gain access to it to work on it, until the due date is reached, and the
# problem then becomes CLOSED. Therefore return the slotstatus -
- # (which will be NOT_IN_SLOT).
- if (!defined($slot_name)
- && $checkedin
- && $type eq 'problem') {
- return ($slotstatus);
+ # (which will be one of: NOT_IN_A_SLOT, RESERVABLE, RESERVABLE_LATER, or NOTRESERVABLE.
+ if (!defined($slot_name) && $type eq 'problem') {
+ if ($slotstatus eq 'NOT_IN_A_SLOT') {
+ if (!$num_usable_slots) {
+ if ($env{'request.course.id'}) {
+ my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+ my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+ my ($symb)=&Apache::lonnet::whichuser();
+ $slotstatus = 'NOTRESERVABLE';
+ my ($reservable_now_order,$reservable_now,$reservable_future_order,
+ $reservable_future) =
+ &Apache::loncommon::get_future_slots($cnum,$cdom,$now,$symb);
+ if ((ref($reservable_now_order) eq 'ARRAY') && (ref($reservable_now) eq 'HASH')) {
+ if (@{$reservable_now_order} > 0) {
+ $slotstatus = 'RESERVABLE';
+ $datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'};
+ }
+ }
+ unless ($slotstatus eq 'RESERVABLE') {
+ if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) {
+ if (@{$reservable_future_order} > 0) {
+ $slotstatus = 'RESERVABLE_LATER';
+ $datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'};
+ }
+ }
+ }
+ }
+ }
+ }
+ return ($slotstatus,$datemsg);
}
if ($slotstatus eq 'NOT_IN_A_SLOT'
@@ -442,13 +471,13 @@ sub check_access {
$Apache::lonhomework::results{'resource.'.$id.'.maxtries'}=$maxtries;
if ($maxtries && $tries >= $maxtries) { $status = 'CANNOT_ANSWER'; }
# if (correct and show prob status) or excused then CANNOT_ANSWER
- if(($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/
- &&
- &show_problem_status()
- &&
- $Apache::lonhomework::history{"resource.$id.awarded"}==1)
- ||
- $Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) {
+ if ( ($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/)
+ && (&show_problem_status()) ) {
+ if (($Apache::lonhomework::history{"resource.$id.awarded"} >= 1) ||
+ (&Apache::lonnet::EXT("resource.$id.retrypartial") !~/^1|on|yes$/i)) {
+ $status = 'CANNOT_ANSWER';
+ }
+ } elsif ($Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) {
$status = 'CANNOT_ANSWER';
}
if ($status eq 'CANNOT_ANSWER'
@@ -698,7 +727,7 @@ sub analyze_header {
my $js = &Apache::structuretags::setmode_javascript();
# Breadcrumbs
- my $brcrum = [{'href' => &Apache::loncommon::authorspace(),
+ my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),
'text' => 'Construction Space'},
{'href' => '',
'text' => 'Problem Testing'},
@@ -936,7 +965,7 @@ sub editxmlmode {
&Apache::lonhtmlcommon::dragmath_js("EditMathPopup");
# Breadcrumbs
- my $brcrum = [{'href' => &Apache::loncommon::authorspace(),
+ my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),
'text' => 'Construction Space'},
{'href' => '',
'text' => 'Problem Editing'}];
@@ -1099,6 +1128,7 @@ sub get_template_list {
my $count = 0;
my $currentcategory='';
my $first = 1;
+ my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
foreach my $file (@files) {
next if ($file->[1] !~ /\S/);
if ($file->[2] ne $currentcategory) {
@@ -1122,9 +1152,9 @@ sub get_template_list {
$result.=&Apache::loncommon::help_open_topic($file->[3]);
}
my $filename=$file->[0];
- $filename=~s/^\/home\/httpd\/html//;
+ $filename=~s{^\Q$londocroot\E}{};
$result.=' '
- .''.&mt('Example').''
+ .&Apache::loncommon::modal_link($filename.'?inhibitmenu=yes',&mt('Example'),600,420,'sample')
.'
'."\n";
$count ++;
}
@@ -1158,12 +1188,10 @@ sub newproblem {
&renderpage($request,$dest);
} else {
my $url=&HTML::Entities::encode($request->uri,'<>&"');
- my $shownurl=$url;
- $shownurl=~s-^/~-/priv/-;
my $dest = &Apache::lonnet::filelocation("",$request->uri);
my $errormsg;
my $instructions;
- my $brcrum = [{'href' => &Apache::loncommon::authorspace(),
+ my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri),
'text' => 'Construction Space'},
{'href' => '',
'text' => "Create New $extension"}];
@@ -1178,7 +1206,7 @@ sub newproblem {
.'
'.&mt("To create a new $extension, select a template from the". " list below. Then click on the \"Create $extension\" button.").'