version 1.343, 2014/01/15 14:46:27
|
version 1.344.2.4, 2016/08/08 12:07:20
|
Line 208 sub proctor_checked_in {
|
Line 208 sub proctor_checked_in {
|
} |
} |
|
|
sub check_slot_access { |
sub check_slot_access { |
my ($id,$type)=@_; |
my ($id,$type,$symb,$partlist)=@_; |
|
|
# does it pass normal muster |
# does it pass normal muster |
my ($status,$datemsg)=&check_access($id); |
my ($status,$datemsg)=&check_access($id,$symb); |
|
|
my $useslots = &Apache::lonnet::EXT("resource.0.useslots"); |
my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb); |
if ($useslots ne 'resource' && $useslots ne 'map' |
if ($useslots ne 'resource' && $useslots ne 'map' |
&& $useslots ne 'map_map') { |
&& $useslots ne 'map_map') { |
return ($status,$datemsg); |
return ($status,$datemsg); |
Line 237 sub check_slot_access {
|
Line 237 sub check_slot_access {
|
} |
} |
} |
} |
|
|
my $availablestudent = &Apache::lonnet::EXT("resource.0.availablestudent"); |
my $availablestudent = &Apache::lonnet::EXT("resource.0.availablestudent",$symb); |
my $available = &Apache::lonnet::EXT("resource.0.available"); |
my $available = &Apache::lonnet::EXT("resource.0.available",$symb); |
my @slots= (split(':',$availablestudent),split(':',$available)); |
my @slots= (split(':',$availablestudent),split(':',$available)); |
|
|
# if (!@slots) { |
# if (!@slots) { |
Line 248 sub check_slot_access {
|
Line 248 sub check_slot_access {
|
my ($returned_slot,$slot_name); |
my ($returned_slot,$slot_name); |
my $now = time; |
my $now = time; |
my $num_usable_slots = 0; |
my $num_usable_slots = 0; |
|
unless ($symb) { |
|
($symb) = &Apache::lonnet::whichuser(); |
|
} |
foreach my $slot (@slots) { |
foreach my $slot (@slots) { |
$slot =~ s/(^\s*|\s*$)//g; |
$slot =~ s/(^\s*|\s*$)//g; |
&Apache::lonxml::debug("getting $slot"); |
&Apache::lonxml::debug("getting $slot"); |
Line 271 sub check_slot_access {
|
Line 274 sub check_slot_access {
|
$slotstatus=$status; |
$slotstatus=$status; |
} |
} |
|
|
my ($is_correct,$got_grade,$checkedin); |
my ($is_correct,$got_grade,$checkin,$checkinslot,$checkedin,$consumed_uniq); |
if ($type eq 'Task') { |
if ($type eq 'Task') { |
my $version=$Apache::lonhomework::history{'resource.0.version'}; |
my $version=$Apache::lonhomework::history{'resource.0.version'}; |
|
$checkin = "resource.$version.0.checkedin"; |
$got_grade = |
$got_grade = |
($Apache::lonhomework::history{"resource.$version.0.status"} |
($Apache::lonhomework::history{"resource.$version.0.status"} |
=~ /^(?:pass|fail)$/); |
=~ /^(?:pass|fail)$/); |
Line 283 sub check_slot_access {
|
Line 287 sub check_slot_access {
|
$checkedin = |
$checkedin = |
$Apache::lonhomework::history{"resource.$version.0.checkedin"}; |
$Apache::lonhomework::history{"resource.$version.0.checkedin"}; |
} elsif ($type eq 'problem') { |
} elsif ($type eq 'problem') { |
$got_grade = 1; |
$checkin = 'resource.0.checkedin'; |
$checkedin = $Apache::lonhomework::history{"resource.0.checkedin"}; |
$checkedin = $Apache::lonhomework::history{$checkin}; |
$is_correct = |
} |
($Apache::lonhomework::history{"resource.0.solved"} =~/^correct_/); |
if ($checkedin) { |
|
$checkinslot = $Apache::lonhomework::history{"$checkin.slot"}; |
|
my %slot=&Apache::lonnet::get_slot($checkinslot); |
|
$consumed_uniq = $slot{'uniqueperiod'}; |
|
} |
|
if ($type eq 'problem') { |
|
if ((ref($partlist) eq 'ARRAY') && (@{$partlist} > 0)) { |
|
my ($numcorrect,$numgraded) = (0,0); |
|
foreach my $part (@{$partlist}) { |
|
my $currtries = $Apache::lonhomework::history{"resource.$part.tries"}; |
|
my $maxtries = &Apache::lonnet::EXT("resource.$part.maxtries",$symb); |
|
my $probstatus = &Apache::structuretags::get_problem_status($part); |
|
my $earlyout; |
|
unless (($probstatus eq 'no') || |
|
($probstatus eq 'no_feedback_ever')) { |
|
if ($Apache::lonhomework::history{"resource.$part.solved"} =~/^correct_/) { |
|
$numcorrect ++; |
|
} else { |
|
$earlyout = 1; |
|
} |
|
} |
|
if (($currtries == $maxtries) || ($is_correct)) { |
|
$earlyout = 1; |
|
} else { |
|
$numgraded ++; |
|
} |
|
last if ($earlyout); |
|
} |
|
my $numparts = scalar(@{$partlist}); |
|
if ($numparts == $numcorrect) { |
|
$is_correct = 1; |
|
} |
|
if ($numparts == $numgraded) { |
|
$got_grade = 1; |
|
} |
|
} else { |
|
my $currtries = $Apache::lonhomework::history{"resource.0.tries"}; |
|
my $maxtries = &Apache::lonnet::EXT("resource.0.maxtries",$symb); |
|
my $probstatus = &Apache::structuretags::get_problem_status('0'); |
|
unless (($probstatus eq 'no') || |
|
($probstatus eq 'no_feedback_ever')) { |
|
$is_correct = |
|
($Apache::lonhomework::history{"resource.0.solved"} =~/^correct_/); |
|
} |
|
unless (($currtries == $maxtries) || ($is_correct)) { |
|
$got_grade = 1; |
|
} |
|
} |
} |
} |
|
|
&Apache::lonxml::debug(" slot is $slotstatus checkedin ($checkedin) got_grade ($got_grade) is_correct ($is_correct)"); |
&Apache::lonxml::debug(" slot is $slotstatus checkedin ($checkedin) got_grade ($got_grade) is_correct ($is_correct)"); |
Line 310 sub check_slot_access {
|
Line 361 sub check_slot_access {
|
if ($env{'request.course.id'}) { |
if ($env{'request.course.id'}) { |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my ($symb)=&Apache::lonnet::whichuser(); |
|
$slotstatus = 'NOTRESERVABLE'; |
$slotstatus = 'NOTRESERVABLE'; |
my ($reservable_now_order,$reservable_now,$reservable_future_order, |
my ($reservable_now_order,$reservable_now,$reservable_future_order, |
$reservable_future) = |
$reservable_future) = |
&Apache::loncommon::get_future_slots($cnum,$cdom,$now,$symb); |
&Apache::loncommon::get_future_slots($cnum,$cdom,$now,$symb); |
if ((ref($reservable_now_order) eq 'ARRAY') && (ref($reservable_now) eq 'HASH')) { |
if ((ref($reservable_now_order) eq 'ARRAY') && (ref($reservable_now) eq 'HASH')) { |
if (@{$reservable_now_order} > 0) { |
if (@{$reservable_now_order} > 0) { |
$slotstatus = 'RESERVABLE'; |
if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) { |
$datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'}; |
$slotstatus = 'RESERVABLE'; |
|
$datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'}; |
|
} else { |
|
my ($uniqstart,$uniqend,$useslot); |
|
if (ref($consumed_uniq) eq 'ARRAY') { |
|
($uniqstart,$uniqend)=@{$consumed_uniq}; |
|
} |
|
foreach my $slot (reverse(@{$reservable_now_order})) { |
|
if ($reservable_now->{$slot}{'uniqueperiod'} =~ /^(\d+)\,(\d+)$/) { |
|
my ($new_uniq_start,$new_uniq_end) = ($1,$2); |
|
next if (! |
|
($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) || |
|
($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end )); |
|
} |
|
$useslot = $slot; |
|
last; |
|
} |
|
if ($useslot) { |
|
$slotstatus = 'RESERVABLE'; |
|
$datemsg = $reservable_now->{$useslot}{'endreserve'}; |
|
} |
|
} |
} |
} |
} |
} |
unless ($slotstatus eq 'RESERVABLE') { |
unless ($slotstatus eq 'RESERVABLE') { |
if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) { |
if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) { |
if (@{$reservable_future_order} > 0) { |
if (@{$reservable_future_order} > 0) { |
$slotstatus = 'RESERVABLE_LATER'; |
if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) { |
$datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'}; |
$slotstatus = 'RESERVABLE_LATER'; |
|
$datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'}; |
|
} else { |
|
my ($uniqstart,$uniqend,$useslot); |
|
if (ref($consumed_uniq) eq 'ARRAY') { |
|
($uniqstart,$uniqend)=@{$consumed_uniq}; |
|
} |
|
foreach my $slot (@{$reservable_future_order}) { |
|
if ($reservable_future->{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) { |
|
my ($new_uniq_start,$new_uniq_end) = ($1,$2); |
|
next if (! |
|
($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) || |
|
($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end )); |
|
} |
|
$useslot = $slot; |
|
last; |
|
} |
|
if ($useslot) { |
|
$slotstatus = 'RESERVABLE_LATER'; |
|
$datemsg = $reservable_future->{$useslot}{'startreserve'}; |
|
} |
|
} |
} |
} |
} |
} |
} |
} |
Line 364 sub check_slot_access {
|
Line 456 sub check_slot_access {
|
# JB, 9/24/2002: Any changes in this function may require a change |
# JB, 9/24/2002: Any changes in this function may require a change |
# in lonnavmaps::resource::getDateStatus. |
# in lonnavmaps::resource::getDateStatus. |
sub check_access { |
sub check_access { |
my ($id) = @_; |
my ($id,$symb) = @_; |
my $date =''; |
my $date =''; |
my $status; |
my $status; |
my $datemsg = ''; |
my $datemsg = ''; |
Line 394 sub check_access {
|
Line 486 sub check_access {
|
&Apache::lonxml::debug("checking for part :$id:"); |
&Apache::lonxml::debug("checking for part :$id:"); |
&Apache::lonxml::debug("time:".time); |
&Apache::lonxml::debug("time:".time); |
|
|
my ($symb)=&Apache::lonnet::whichuser(); |
unless ($symb) { |
|
($symb)=&Apache::lonnet::whichuser(); |
|
} |
&Apache::lonxml::debug("symb:".$symb); |
&Apache::lonxml::debug("symb:".$symb); |
#if ($env{'request.state'} ne "construct" && $symb ne '') { |
#if ($env{'request.state'} ne "construct" && $symb ne '') { |
if ($env{'request.state'} ne "construct") { |
if ($env{'request.state'} ne "construct") { |
my $idacc = &Apache::lonnet::EXT("resource.$id.acc"); |
my $idacc = &Apache::lonnet::EXT("resource.$id.acc",$symb); |
my $allowed=&Apache::loncommon::check_ip_acc($idacc); |
my $allowed=&Apache::loncommon::check_ip_acc($idacc); |
if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { |
if (!$allowed && ($Apache::lonhomework::browse ne 'F')) { |
$status='INVALID_ACCESS'; |
$status='INVALID_ACCESS'; |
Line 414 sub check_access {
|
Line 508 sub check_access {
|
foreach my $temp ("opendate","duedate","answerdate") { |
foreach my $temp ("opendate","duedate","answerdate") { |
$lastdate = $date; |
$lastdate = $date; |
if ($temp eq 'duedate') { |
if ($temp eq 'duedate') { |
$date = &due_date($id); |
$date = &due_date($id,$symb); |
} else { |
} else { |
$date = &Apache::lonnet::EXT("resource.$id.$temp"); |
$date = &Apache::lonnet::EXT("resource.$id.$temp",$symb); |
} |
} |
|
|
my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type"); |
my $thistype = &Apache::lonnet::EXT("resource.$id.$temp.type",$symb); |
if ($thistype =~ /^(con_lost|no_such_host)/ || |
if ($thistype =~ /^(con_lost|no_such_host)/ || |
$date =~ /^(con_lost|no_such_host)/) { |
$date =~ /^(con_lost|no_such_host)/) { |
$status='UNAVAILABLE'; |
$status='UNAVAILABLE'; |
Line 428 sub check_access {
|
Line 522 sub check_access {
|
} |
} |
if ($thistype eq 'date_interval') { |
if ($thistype eq 'date_interval') { |
if ($temp eq 'opendate') { |
if ($temp eq 'opendate') { |
$date=&Apache::lonnet::EXT("resource.$id.duedate")-$date; |
$date=&Apache::lonnet::EXT("resource.$id.duedate",$symb)-$date; |
} |
} |
if ($temp eq 'answerdate') { |
if ($temp eq 'answerdate') { |
$date=&Apache::lonnet::EXT("resource.$id.duedate")+$date; |
$date=&Apache::lonnet::EXT("resource.$id.duedate",$symb)+$date; |
} |
} |
} |
} |
&Apache::lonxml::debug("found :$date: for :$temp:"); |
&Apache::lonxml::debug("found :$date: for :$temp:"); |
Line 465 sub check_access {
|
Line 559 sub check_access {
|
(($Apache::lonhomework::browse eq 'F') && ($status eq 'CLOSED'))) { |
(($Apache::lonhomework::browse eq 'F') && ($status eq 'CLOSED'))) { |
#check #tries, and if correct. |
#check #tries, and if correct. |
my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; |
my $tries = $Apache::lonhomework::history{"resource.$id.tries"}; |
my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries"); |
my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries",$symb); |
if ( $tries eq '' ) { $tries = '0'; } |
if ( $tries eq '' ) { $tries = '0'; } |
if ( $maxtries eq '' && |
if ( $maxtries eq '' && |
$env{'request.state'} ne 'construct') { $maxtries = '2'; } |
$env{'request.state'} ne 'construct') { $maxtries = '2'; } |
$Apache::lonhomework::results{'resource.'.$id.'.maxtries'}=$maxtries; |
|
if ($maxtries && $tries >= $maxtries) { $status = 'CANNOT_ANSWER'; } |
if ($maxtries && $tries >= $maxtries) { $status = 'CANNOT_ANSWER'; } |
# if (correct and show prob status) or excused then CANNOT_ANSWER |
# if (correct and show prob status) or excused then CANNOT_ANSWER |
if ( ($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/) |
if ( ($Apache::lonhomework::history{"resource.$id.solved"}=~/^correct/) |
&& (&show_problem_status()) ) { |
&& (&show_problem_status()) ) { |
if (($Apache::lonhomework::history{"resource.$id.awarded"} >= 1) || |
if (($Apache::lonhomework::history{"resource.$id.awarded"} >= 1) || |
(&Apache::lonnet::EXT("resource.$id.retrypartial") !~/^1|on|yes$/i)) { |
(&Apache::lonnet::EXT("resource.$id.retrypartial",$symb) !~/^1|on|yes$/i)) { |
$status = 'CANNOT_ANSWER'; |
$status = 'CANNOT_ANSWER'; |
} |
} |
} elsif ($Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) { |
} elsif ($Apache::lonhomework::history{"resource.$id.solved"}=~/^excused/) { |
Line 487 sub check_access {
|
Line 580 sub check_access {
|
} |
} |
} |
} |
if ($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER') { |
if ($status eq 'CAN_ANSWER' || $status eq 'CANNOT_ANSWER') { |
my @interval=&Apache::lonnet::EXT("resource.$id.interval"); |
my @interval=&Apache::lonnet::EXT("resource.$id.interval",$symb); |
&Apache::lonxml::debug("looking for interval @interval"); |
&Apache::lonxml::debug("looking for interval @interval"); |
if ($interval[0]) { |
if ($interval[0]) { |
my $first_access=&Apache::lonnet::get_first_access($interval[1]); |
my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb); |
&Apache::lonxml::debug("looking for accesstime $first_access"); |
&Apache::lonxml::debug("looking for accesstime $first_access"); |
if (!$first_access) { |
if (!$first_access) { |
$status='NOT_YET_VIEWED'; |
$status='NOT_YET_VIEWED'; |
my $due_date = &due_date($id); |
my $due_date = &due_date($id,$symb); |
my $seconds_left = $due_date - time; |
my $seconds_left = $due_date - time; |
if ($seconds_left > $interval[0] || $due_date eq '') { |
if ($seconds_left > $interval[0] || $due_date eq '') { |
$seconds_left = $interval[0]; |
$seconds_left = $interval[0]; |
Line 541 sub due_date {
|
Line 634 sub due_date {
|
} else { |
} else { |
$date = $due_date; |
$date = $due_date; |
} |
} |
return $date |
return $date; |
} |
} |
|
|
sub seconds_to_human_length { |
sub seconds_to_human_length { |
Line 590 sub showarray {
|
Line 683 sub showarray {
|
sub showhashsubset { |
sub showhashsubset { |
my ($hash,$keyre) = @_; |
my ($hash,$keyre) = @_; |
my $resultkey; |
my $resultkey; |
foreach $resultkey (sort keys %$hash) { |
foreach $resultkey (sort(keys(%$hash))) { |
if ($resultkey !~ /$keyre/) { next; } |
if ($resultkey !~ /$keyre/) { next; } |
if (ref($$hash{$resultkey}) eq 'ARRAY' ) { |
if (ref($$hash{$resultkey}) eq 'ARRAY' ) { |
&Apache::lonxml::debug("$resultkey ---- ". |
&Apache::lonxml::debug("$resultkey ---- ". |
Line 1176 sub get_template_list {
|
Line 1269 sub get_template_list {
|
# Provide example link |
# Provide example link |
my $filename=$file->[0]; |
my $filename=$file->[0]; |
$filename=~s{^\Q$londocroot\E}{}; |
$filename=~s{^\Q$londocroot\E}{}; |
if (!(grep $filename =~ $_, @noexamplelink)) { |
if (!(grep($filename =~ /\Q$_\E$/,@noexamplelink))) { |
$result .= ' <span class="LC_fontsize_small">' |
$result .= ' <span class="LC_fontsize_small">' |
.&Apache::loncommon::modal_link( |
.&Apache::loncommon::modal_link( |
$filename.'?inhibitmenu=yes',&mt('Example'),600,420,'sample') |
$filename.'?inhibitmenu=yes',&mt('Example'),600,420,'sample') |
.'</span>'; |
.'</span>'; |
}; |
} |
$result .= '<br />'."\n"; |
$result .= '<br />'."\n"; |
$count ++; |
$count ++; |
} |
} |
Line 1278 sub handler {
|
Line 1371 sub handler {
|
my $file=&Apache::lonnet::filelocation("",$request->uri); |
my $file=&Apache::lonnet::filelocation("",$request->uri); |
|
|
#check if we know where we are |
#check if we know where we are |
if ($env{'request.course.fn'} && !&Apache::lonnet::symbread()) { |
if ($env{'request.course.fn'} && !&Apache::lonnet::symbread('','',1,1)) { |
# if we are browsing we might not be able to know where we are |
# if we are browsing we might not be able to know where we are |
if ($Apache::lonhomework::browse ne 'F' && |
if ($Apache::lonhomework::browse ne 'F' && |
$env{'request.state'} ne "construct") { |
$env{'request.state'} ne "construct") { |