version 1.509.2.2, 2016/08/06 23:22:30
|
version 1.512, 2016/02/22 03:37:02
|
Line 2
|
Line 2
|
# Navigate Maps Handler |
# Navigate Maps Handler |
# |
# |
# $Id$ |
# $Id$ |
|
|
# |
# |
# Copyright Michigan State University Board of Trustees |
# Copyright Michigan State University Board of Trustees |
# |
# |
Line 2882 sub getcourseparam {
|
Line 2881 sub getcourseparam {
|
# |
# |
# We want the course level stuff from the way |
# We want the course level stuff from the way |
# parmval_real operates |
# parmval_real operates |
# TODO: Factor some of this stuff out of |
# TODO: Fator some of this stuff out of |
# both parmval_real and here |
# both parmval_real and here |
# |
# |
my $courselevel = $cid . '.' . $what; |
my $courselevel = $cid . '.' . $what; |
Line 2899 sub getcourseparam {
|
Line 2898 sub getcourseparam {
|
} |
} |
# Try for the group's course level option: |
# Try for the group's course level option: |
|
|
if ($cgroup ne '' and defined($courseopt)) { |
if ($uname ne '' and defined($courseopt)) { |
if (defined($$courseopt{$grplevel})) { |
if (defined($$courseopt{$grplevel})) { |
return $$courseopt{$grplevel}; |
return $$courseopt{$grplevel}; |
} |
} |
Line 2907 sub getcourseparam {
|
Line 2906 sub getcourseparam {
|
|
|
# Try for section level parameters: |
# Try for section level parameters: |
|
|
if ($csec ne '' and defined($courseopt)) { |
if ($csec and defined($courseopt)) { |
if (defined($$courseopt{$seclevel})) { |
if (defined($$courseopt{$seclevel})) { |
return $$courseopt{$seclevel}; |
return $$courseopt{$seclevel}; |
} |
} |
} |
} |
# Try for 'additional' course parameters: |
# Try for 'additional' course parameterse: |
|
|
if (defined($courseopt)) { |
if (defined($courseopt)) { |
if (defined($$courseopt{$courselevel})) { |
if (defined($$courseopt{$courselevel})) { |
Line 4533 sub duedate {
|
Line 4532 sub duedate {
|
my $due_date=$self->parmval("duedate", $part); |
my $due_date=$self->parmval("duedate", $part); |
if ($interval[0] =~ /\d+/) { |
if ($interval[0] =~ /\d+/) { |
my $first_access=&Apache::lonnet::get_first_access($interval[1], |
my $first_access=&Apache::lonnet::get_first_access($interval[1], |
$self->{SYMB}); |
$self->symb); |
if (defined($first_access)) { |
if (defined($first_access)) { |
my $interval = $first_access+$interval[0]; |
my $interval = $first_access+$interval[0]; |
$date = (!$due_date || $interval < $due_date) ? $interval |
$date = (!$due_date || $interval < $due_date) ? $interval |
Line 4615 sub part_display {
|
Line 4614 sub part_display {
|
my $self= shift(); my $partID = shift(); |
my $self= shift(); my $partID = shift(); |
if (! defined($partID)) { $partID = '0'; } |
if (! defined($partID)) { $partID = '0'; } |
my $display=&Apache::lonnet::EXT('resource.'.$partID.'.display', |
my $display=&Apache::lonnet::EXT('resource.'.$partID.'.display', |
$self->{SYMB}); |
$self->symb); |
if (! defined($display) || $display eq '') { |
if (! defined($display) || $display eq '') { |
$display = $partID; |
$display = $partID; |
} |
} |
Line 5411 sub check_for_slot {
|
Line 5410 sub check_for_slot {
|
my $cnum=$env{'course.'.$cid.'.num'}; |
my $cnum=$env{'course.'.$cid.'.num'}; |
my $now = time; |
my $now = time; |
my $num_usable_slots = 0; |
my $num_usable_slots = 0; |
my ($checkedin,$checkedinslot,%consumed_uniq,%slots); |
|
if (@slots > 0) { |
if (@slots > 0) { |
%slots=&Apache::lonnet::get('slots',[@slots],$cdom,$cnum); |
my %slots=&Apache::lonnet::get('slots',[@slots],$cdom,$cnum); |
if (&Apache::lonnet::error(%slots)) { |
if (&Apache::lonnet::error(%slots)) { |
return (UNKNOWN); |
return (UNKNOWN); |
} |
} |
my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots,'starttime'); |
my @sorted_slots = &Apache::loncommon::sorted_slots(\@slots,\%slots,'starttime'); |
|
my ($checkedin,$checkedinslot); |
foreach my $slot_name (@sorted_slots) { |
foreach my $slot_name (@sorted_slots) { |
next if (!defined($slots{$slot_name}) || !ref($slots{$slot_name})); |
next if (!defined($slots{$slot_name}) || !ref($slots{$slot_name})); |
my $end = $slots{$slot_name}->{'endtime'}; |
my $end = $slots{$slot_name}->{'endtime'}; |
Line 5451 sub check_for_slot {
|
Line 5450 sub check_for_slot {
|
$num_usable_slots ++; |
$num_usable_slots ++; |
} |
} |
} |
} |
my ($is_correct,$wait_for_grade); |
my ($is_correct,$got_grade); |
if ($self->is_task()) { |
if ($self->is_task()) { |
my $taskstatus = $self->taskstatus(); |
my $taskstatus = $self->taskstatus(); |
$is_correct = (($taskstatus eq 'pass') || |
$is_correct = (($taskstatus eq 'pass') || |
($self->solved() =~ /^correct_/)); |
($self->solved() =~ /^correct_/)); |
unless ($taskstatus =~ /^(?:pass|fail)$/) { |
$got_grade = ($taskstatus =~ /^(?:pass|fail)$/); |
$wait_for_grade = 1; |
|
} |
|
} else { |
} else { |
unless ($self->completable()) { |
$got_grade = 1; |
$wait_for_grade = 1; |
$is_correct = ($self->solved() =~ /^correct_/); |
} |
|
unless (($self->problemstatus($part) eq 'no') || |
|
($self->problemstatus($part) eq 'no_feedback_ever')) { |
|
$is_correct = ($self->solved($part) =~ /^correct_/); |
|
$wait_for_grade = 0; |
|
} |
|
} |
} |
($checkedin,$checkedinslot) = $self->checkedin(); |
($checkedin,$checkedinslot) = $self->checkedin(); |
if ($checkedin) { |
if ($checkedin) { |
if (ref($slots{$checkedinslot}) eq 'HASH') { |
if (!$got_grade) { |
$consumed_uniq{$checkedinslot} = $slots{$checkedinslot}{'uniqueperiod'}; |
|
} |
|
if ($wait_for_grade) { |
|
return (WAITING_FOR_GRADE); |
return (WAITING_FOR_GRADE); |
} elsif ($is_correct) { |
} elsif ($is_correct) { |
return (CORRECT); |
return (CORRECT); |
Line 5487 sub check_for_slot {
|
Line 5475 sub check_for_slot {
|
my $reservable = &Apache::lonnet::get_reservable_slots($cnum,$cdom,$env{'user.name'}, |
my $reservable = &Apache::lonnet::get_reservable_slots($cnum,$cdom,$env{'user.name'}, |
$env{'user.domain'}); |
$env{'user.domain'}); |
if (ref($reservable) eq 'HASH') { |
if (ref($reservable) eq 'HASH') { |
|
my ($map) = &Apache::lonnet::decode_symb($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')) { |
foreach my $slot (reverse (@{$reservable->{'now_order'}})) { |
foreach my $slot (reverse (@{$reservable->{'now_order'}})) { |
my $canuse; |
my $canuse; |
if (($reservable->{'now'}{$slot}{'symb'} eq '') || |
if ($reservable->{'now'}{$slot}{'symb'} eq '') { |
($reservable->{'now'}{$slot}{'symb'} eq $symb)) { |
|
$canuse = 1; |
$canuse = 1; |
} |
} else { |
if ($canuse) { |
my %oksymbs; |
if ($checkedin) { |
my @slotsymbs = split(/\s*,\s*/,$reservable->{'now'}{$slot}{'symb'}); |
if (ref($consumed_uniq{$checkedinslot}) eq 'ARRAY') { |
map { $oksymbs{$_} = 1; } @slotsymbs; |
my ($uniqstart,$uniqend)=@{$consumed_uniq{$checkedinslot}}; |
if ($oksymbs{$symb}) { |
if ($reservable->{'now'}{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) { |
$canuse = 1; |
my ($new_uniq_start,$new_uniq_end) = ($1,$2); |
} else { |
next if (! |
foreach my $item (@slotsymbs) { |
($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) || |
if ($item =~ /\.(page|sequence)$/) { |
($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end )); |
(undef,undef, my $sloturl) = &Apache::lonnet::decode_symb($item); |
|
if (($map ne '') && ($map eq $sloturl)) { |
|
$canuse = 1; |
|
last; |
|
} |
} |
} |
} |
} |
} |
} |
|
} |
|
if ($canuse) { |
return(RESERVABLE,$reservable->{'now'}{$slot}{'endreserve'}); |
return(RESERVABLE,$reservable->{'now'}{$slot}{'endreserve'}); |
} |
} |
} |
} |
Line 5513 sub check_for_slot {
|
Line 5507 sub check_for_slot {
|
if ((ref($reservable->{'future_order'}) eq 'ARRAY') && (ref($reservable->{'future'}) eq 'HASH')) { |
if ((ref($reservable->{'future_order'}) eq 'ARRAY') && (ref($reservable->{'future'}) eq 'HASH')) { |
foreach my $slot (@{$reservable->{'future_order'}}) { |
foreach my $slot (@{$reservable->{'future_order'}}) { |
my $canuse; |
my $canuse; |
if (($reservable->{'future'}{$slot}{'symb'} eq '') || |
if ($reservable->{'future'}{$slot}{'symb'} eq '') { |
($reservable->{'future'}{$slot}{'symb'} eq $symb)) { |
|
$canuse = 1; |
$canuse = 1; |
} |
} elsif ($reservable->{'future'}{$slot}{'symb'} =~ /,/) { |
if ($canuse) { |
my %oksymbs; |
if ($checkedin) { |
my @slotsymbs = split(/\s*,\s*/,$reservable->{'future'}{$slot}{'symb'}); |
if (ref($consumed_uniq{$checkedinslot}) eq 'ARRAY') { |
map { $oksymbs{$_} = 1; } @slotsymbs; |
my ($uniqstart,$uniqend)=@{$consumed_uniq{$checkedinslot}}; |
if ($oksymbs{$symb}) { |
if ($reservable->{'future'}{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) { |
$canuse = 1; |
my ($new_uniq_start,$new_uniq_end) = ($1,$2); |
} else { |
next if (! |
foreach my $item (@slotsymbs) { |
($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) || |
if ($item =~ /\.(page|sequence)$/) { |
($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end )); |
(undef,undef, my $sloturl) = &Apache::lonnet::decode_symb($item); |
|
if (($map ne '') && ($map eq $sloturl)) { |
|
$canuse = 1; |
|
last; |
|
} |
} |
} |
} |
} |
} |
} |
|
} elsif ($reservable->{'future'}{$slot}{'symb'} eq $symb) { |
|
$canuse = 1; |
|
} |
|
if ($canuse) { |
return(RESERVABLE_LATER,$reservable->{'future'}{$slot}{'startreserve'}); |
return(RESERVABLE_LATER,$reservable->{'future'}{$slot}{'startreserve'}); |
} |
} |
} |
} |