version 1.509, 2015/09/25 17:39:36
|
version 1.515, 2016/03/02 14:14:06
|
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 915 sub render_resource {
|
Line 914 sub render_resource {
|
my $nonLinkedText = ''; # stuff after resource title not in link |
my $nonLinkedText = ''; # stuff after resource title not in link |
|
|
my $link = $params->{"resourceLink"}; |
my $link = $params->{"resourceLink"}; |
|
if ($resource->ext()) { |
|
$link =~ s/\#.+(\?)/$1/g; |
|
} |
|
|
# The URL part is not escaped at this point, but the symb is... |
# The URL part is not escaped at this point, but the symb is... |
|
|
Line 2119 sub change_user {
|
Line 2121 sub change_user {
|
|
|
|
|
|
|
# Now clear the parm cache and reconstruct the parm hash fromt he big_hash |
# Now clear the parm cache and reconstruct the parm hash from the big_hash |
# param.xxxx keys. |
# param.xxxx keys. |
|
|
$self->{PARM_CACHE} = {}; |
$self->{PARM_CACHE} = {}; |
Line 2584 sub parmval {
|
Line 2586 sub parmval {
|
return $self->{PARM_CACHE}->{$hashkey}; |
return $self->{PARM_CACHE}->{$hashkey}; |
} |
} |
} |
} |
|
|
my $result = $self->parmval_real($what, $symb, $recurse); |
my $result = $self->parmval_real($what, $symb, $recurse); |
$self->{PARM_CACHE}->{$hashkey} = $result; |
$self->{PARM_CACHE}->{$hashkey} = $result; |
if (wantarray) { |
if (wantarray) { |
Line 2617 sub parmval_real {
|
Line 2620 sub parmval_real {
|
|
|
my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb); |
my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb); |
$mapname = &Apache::lonnet::deversion($mapname); |
$mapname = &Apache::lonnet::deversion($mapname); |
|
my ($recursed,@recurseup); |
|
|
# ----------------------------------------------------- Cascading lookup scheme |
# ----------------------------------------------------- Cascading lookup scheme |
my $rwhat=$what; |
my $rwhat=$what; |
$what=~s/^parameter\_//; |
$what=~s/^parameter\_//; |
$what=~s/\_/\./; |
$what=~s/\_/\./; |
|
|
my $symbparm=$symb.'.'.$what; |
my $symbparm=$symb.'.'.$what; |
|
my $recurseparm=$mapname.'___(rec).'.$what; |
my $mapparm=$mapname.'___(all).'.$what; |
my $mapparm=$mapname.'___(all).'.$what; |
my $usercourseprefix=$cid; |
my $usercourseprefix=$cid; |
|
|
|
|
|
|
my $grplevel=$usercourseprefix.'.['.$cgroup.'].'.$what; |
my $grplevel=$usercourseprefix.'.['.$cgroup.'].'.$what; |
my $grplevelr=$usercourseprefix.'.['.$cgroup.'].'.$symbparm; |
my $grplevelr=$usercourseprefix.'.['.$cgroup.'].'.$symbparm; |
|
my $grpleveli=$usercourseprefix.'.['.$cgroup.'].'.$recurseparm; |
my $grplevelm=$usercourseprefix.'.['.$cgroup.'].'.$mapparm; |
my $grplevelm=$usercourseprefix.'.['.$cgroup.'].'.$mapparm; |
|
|
|
|
my $seclevel= $usercourseprefix.'.['.$csec.'].'.$what; |
my $seclevel= $usercourseprefix.'.['.$csec.'].'.$what; |
my $seclevelr=$usercourseprefix.'.['.$csec.'].'.$symbparm; |
my $seclevelr=$usercourseprefix.'.['.$csec.'].'.$symbparm; |
|
my $secleveli=$usercourseprefix.'.['.$csec.'].'.$recurseparm; |
my $seclevelm=$usercourseprefix.'.['.$csec.'].'.$mapparm; |
my $seclevelm=$usercourseprefix.'.['.$csec.'].'.$mapparm; |
|
|
|
|
my $courselevel= $usercourseprefix.'.'.$what; |
my $courselevel= $usercourseprefix.'.'.$what; |
my $courselevelr=$usercourseprefix.'.'.$symbparm; |
my $courselevelr=$usercourseprefix.'.'.$symbparm; |
|
my $courseleveli=$usercourseprefix.'.'.$recurseparm; |
my $courselevelm=$usercourseprefix.'.'.$mapparm; |
my $courselevelm=$usercourseprefix.'.'.$mapparm; |
|
|
|
|
Line 2651 sub parmval_real {
|
Line 2660 sub parmval_real {
|
if ($uname and defined($useropt)) { |
if ($uname and defined($useropt)) { |
if (defined($$useropt{$courselevelr})) { return [$$useropt{$courselevelr},'resource']; } |
if (defined($$useropt{$courselevelr})) { return [$$useropt{$courselevelr},'resource']; } |
if (defined($$useropt{$courselevelm})) { return [$$useropt{$courselevelm},'map']; } |
if (defined($$useropt{$courselevelm})) { return [$$useropt{$courselevelm},'map']; } |
|
if (defined($$useropt{$courseleveli})) { return [$$useropt{$courseleveli},'map']; } |
|
unless ($recursed) { |
|
@recurseup = $self->recurseup_maps($mapname); |
|
$recursed = 1; |
|
} |
|
foreach my $item (@recurseup) { |
|
my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what; |
|
last if (defined($$useropt{$norecursechk})); |
|
my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; |
|
if (defined($$useropt{$recursechk})) { return [$$useropt{$recursechk},'map']; } |
|
} |
if (defined($$useropt{$courselevel})) { return [$$useropt{$courselevel},'course']; } |
if (defined($$useropt{$courselevel})) { return [$$useropt{$courselevel},'course']; } |
} |
} |
|
|
Line 2658 sub parmval_real {
|
Line 2678 sub parmval_real {
|
if ($cgroup ne '' and defined($courseopt)) { |
if ($cgroup ne '' and defined($courseopt)) { |
if (defined($$courseopt{$grplevelr})) { return [$$courseopt{$grplevelr},'resource']; } |
if (defined($$courseopt{$grplevelr})) { return [$$courseopt{$grplevelr},'resource']; } |
if (defined($$courseopt{$grplevelm})) { return [$$courseopt{$grplevelm},'map']; } |
if (defined($$courseopt{$grplevelm})) { return [$$courseopt{$grplevelm},'map']; } |
|
if (defined($$courseopt{$grpleveli})) { return [$$courseopt{$grpleveli},'map']; } |
|
unless ($recursed) { |
|
@recurseup = $self->recurseup_maps($mapname); |
|
$recursed = 1; |
|
} |
|
foreach my $item (@recurseup) { |
|
my $norecursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(all).'.$what; |
|
last if (defined($$courseopt{$norecursechk})); |
|
my $recursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(rec).'.$what; |
|
if (defined($$courseopt{$recursechk})) { return [$$courseopt{$recursechk},'map']; } |
|
} |
if (defined($$courseopt{$grplevel})) { return [$$courseopt{$grplevel},'course']; } |
if (defined($$courseopt{$grplevel})) { return [$$courseopt{$grplevel},'course']; } |
} |
} |
|
|
if ($csec and defined($courseopt)) { |
if ($csec ne '' and defined($courseopt)) { |
if (defined($$courseopt{$seclevelr})) { return [$$courseopt{$seclevelr},'resource']; } |
if (defined($$courseopt{$seclevelr})) { return [$$courseopt{$seclevelr},'resource']; } |
if (defined($$courseopt{$seclevelm})) { return [$$courseopt{$seclevelm},'map']; } |
if (defined($$courseopt{$seclevelm})) { return [$$courseopt{$seclevelm},'map']; } |
|
if (defined($$courseopt{$secleveli})) { return [$$courseopt{$secleveli},'map']; } |
|
unless ($recursed) { |
|
@recurseup = $self->recurseup_maps($mapname); |
|
$recursed = 1; |
|
} |
|
foreach my $item (@recurseup) { |
|
my $norecursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(all).'.$what; |
|
last if (defined($$courseopt{$norecursechk})); |
|
my $recursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(rec).'.$what; |
|
if (defined($$courseopt{$recursechk})) { return [$$courseopt{$recursechk},'map']; } |
|
} |
if (defined($$courseopt{$seclevel})) { return [$$courseopt{$seclevel},'course']; } |
if (defined($$courseopt{$seclevel})) { return [$$courseopt{$seclevel},'course']; } |
} |
} |
|
|
Line 2687 sub parmval_real {
|
Line 2729 sub parmval_real {
|
# --------------------------------------------------- fifth, check more course |
# --------------------------------------------------- fifth, check more course |
if (defined($courseopt)) { |
if (defined($courseopt)) { |
if (defined($$courseopt{$courselevelm})) { return [$$courseopt{$courselevelm},'map']; } |
if (defined($$courseopt{$courselevelm})) { return [$$courseopt{$courselevelm},'map']; } |
|
if (defined($$courseopt{$courseleveli})) { return [$$courseopt{$courseleveli},'map']; } |
|
unless ($recursed) { |
|
@recurseup = $self->recurseup_maps($mapname); |
|
$recursed = 1; |
|
} |
|
foreach my $item (@recurseup) { |
|
my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what; |
|
last if (defined($$courseopt{$norecursechk})); |
|
my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; |
|
if (defined($$courseopt{$recursechk})) { |
|
return [$$courseopt{$recursechk},'map']; |
|
} |
|
} |
if (defined($$courseopt{$courselevel})) { |
if (defined($$courseopt{$courselevel})) { |
my $ret = [$$courseopt{$courselevel},'course']; |
my $ret = [$$courseopt{$courselevel},'course']; |
return $ret; |
return $ret; |
Line 2709 sub parmval_real {
|
Line 2764 sub parmval_real {
|
if (defined($pack_def)) { return [$pack_def,'resource']; } |
if (defined($pack_def)) { return [$pack_def,'resource']; } |
return ['']; |
return ['']; |
} |
} |
|
|
|
sub recurseup_maps { |
|
my ($self,$mapname) = @_; |
|
my @recurseup; |
|
my @pcs = split(/,/,$self->getResourceByUrl(&Apache::lonnet::clutter($mapname))->map_hierarchy()); |
|
shift(@pcs); |
|
pop(@pcs); |
|
if (@pcs) { |
|
@recurseup = map { &Apache::lonnet::declutter($self->getByMapPc($_)->src()); } reverse(@pcs); |
|
} |
|
return @recurseup; |
|
} |
|
|
# |
# |
# Determines the open/close dates for printing a map that |
# Determines the open/close dates for printing a map that |
# encloses a resource. |
# encloses a resource. |
Line 2765 sub get_mapparam {
|
Line 2833 sub get_mapparam {
|
|
|
my $symbparm=$symb.'.'.$what; |
my $symbparm=$symb.'.'.$what; |
my $mapparm=$mapname.'___(all).'.$what; |
my $mapparm=$mapname.'___(all).'.$what; |
|
my $recurseparm=$mapname.'___(rec).'.$what; |
my $usercourseprefix=$cid; |
my $usercourseprefix=$cid; |
|
|
|
|
my $grplevel = "$usercourseprefix.[$cgroup].$mapparm"; |
my $grplevelm = "$usercourseprefix.[$cgroup].$mapparm"; |
my $seclevel = "$usercourseprefix.[$csec].$mapparm"; |
my $seclevelm = "$usercourseprefix.[$csec].$mapparm"; |
my $courselevel = "$usercourseprefix.$mapparm"; |
my $courselevelm = "$usercourseprefix.$mapparm"; |
|
|
|
my $grpleveli = "$usercourseprefix.[$cgroup].$recurseparm"; |
|
my $secleveli = "$usercourseprefix.[$csec].$recurseparm"; |
|
my $courseleveli = "$usercourseprefix.$recurseparm"; |
|
|
# Get handy references to the hashes we need in $self: |
# Get handy references to the hashes we need in $self: |
|
|
Line 2784 sub get_mapparam {
|
Line 2856 sub get_mapparam {
|
|
|
|
|
if ($uname and defined($useropt)) { |
if ($uname and defined($useropt)) { |
if (defined($$useropt{$courselevel})) { |
if (defined($$useropt{$courselevelm})) { |
return $$useropt{$courselevel}; |
return $$useropt{$courselevelm}; |
} |
} |
|
if (defined($$useropt{$courseleveli})) { |
|
return $$useropt{$courseleveli}; |
|
} |
} |
} |
|
|
# Check course -- group |
# Check course -- group |
Line 2794 sub get_mapparam {
|
Line 2869 sub get_mapparam {
|
|
|
|
|
if ($cgroup ne '' and defined ($courseopt)) { |
if ($cgroup ne '' and defined ($courseopt)) { |
if (defined($$courseopt{$grplevel})) { |
if (defined($$courseopt{$grplevelm})) { |
return $$courseopt{$grplevel}; |
return $$courseopt{$grplevelm}; |
} |
} |
|
if (defined($$courseopt{$grpleveli})) { |
|
return $$courseopt{$grpleveli}; |
|
} |
} |
} |
|
|
# Check course -- section |
# Check course -- section |
|
|
|
|
|
|
|
|
|
|
if ($csec and defined($courseopt)) { |
if ($csec and defined($courseopt)) { |
if (defined($$courseopt{$seclevel})) { |
if (defined($$courseopt{$seclevelm})) { |
return $$courseopt{$seclevel}; |
return $$courseopt{$seclevelm}; |
} |
} |
|
if (defined($$courseopt{$secleveli})) { |
|
return $$courseopt{$secleveli}; |
|
} |
} |
} |
# Check the map parameters themselves: |
# Check the map parameters themselves: |
|
|
Line 2821 sub get_mapparam {
|
Line 2899 sub get_mapparam {
|
# Additional course parameters: |
# Additional course parameters: |
|
|
if (defined($courseopt)) { |
if (defined($courseopt)) { |
if (defined($$courseopt{$courselevel})) { |
if (defined($$courseopt{$courselevelm})) { |
return $$courseopt{$courselevel}; |
return $$courseopt{$courselevelm}; |
} |
} |
} |
} |
return undef; # Unefined if we got here. |
return undef; # Unefined if we got here. |
Line 2867 sub getcourseparam {
|
Line 2945 sub getcourseparam {
|
$what=~s/^parameter\_//; |
$what=~s/^parameter\_//; |
$what=~s/\_/\./; |
$what=~s/\_/\./; |
|
|
|
|
my $symbparm = $symb . '.' . $what; |
|
my $mapparm=$mapname.'___(all).'.$what; |
|
|
|
# Local refs to the hashes we're going to look at: |
# Local refs to the hashes we're going to look at: |
|
|
my $useropt = $self->{USER_OPT}; |
my $useropt = $self->{USER_OPT}; |
Line 2879 sub getcourseparam {
|
Line 2953 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: Fator some of this stuff out of |
# TODO: Factor 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 2896 sub getcourseparam {
|
Line 2970 sub getcourseparam {
|
} |
} |
# Try for the group's course level option: |
# Try for the group's course level option: |
|
|
if ($uname ne '' and defined($courseopt)) { |
if ($cgroup ne '' and defined($courseopt)) { |
if (defined($$courseopt{$grplevel})) { |
if (defined($$courseopt{$grplevel})) { |
return $$courseopt{$grplevel}; |
return $$courseopt{$grplevel}; |
} |
} |
Line 2904 sub getcourseparam {
|
Line 2978 sub getcourseparam {
|
|
|
# Try for section level parameters: |
# Try for section level parameters: |
|
|
if ($csec and defined($courseopt)) { |
if ($csec ne '' and defined($courseopt)) { |
if (defined($$courseopt{$seclevel})) { |
if (defined($$courseopt{$seclevel})) { |
return $$courseopt{$seclevel}; |
return $$courseopt{$seclevel}; |
} |
} |
} |
} |
# Try for 'additional' course parameterse: |
# Try for 'additional' course parameters: |
|
|
if (defined($courseopt)) { |
if (defined($courseopt)) { |
if (defined($$courseopt{$courselevel})) { |
if (defined($$courseopt{$courselevel})) { |
Line 3873 sub new {
|
Line 3947 sub new {
|
|
|
# This is a speed optimization, to avoid calling symb() too often. |
# This is a speed optimization, to avoid calling symb() too often. |
$self->{SYMB} = $self->symb(); |
$self->{SYMB} = $self->symb(); |
|
|
return $self; |
return $self; |
} |
} |
|
|
Line 4530 sub duedate {
|
Line 4604 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 4612 sub part_display {
|
Line 4686 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 5473 sub check_for_slot {
|
Line 5547 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'}})) { |
if (($reservable->{'now'}{$slot}{'symb'} eq '') || |
my $canuse; |
($reservable->{'now'}{$slot}{'symb'} eq $symb)) { |
if ($reservable->{'now'}{$slot}{'symb'} eq '') { |
|
$canuse = 1; |
|
} else { |
|
my %oksymbs; |
|
my @slotsymbs = split(/\s*,\s*/,$reservable->{'now'}{$slot}{'symb'}); |
|
map { $oksymbs{$_} = 1; } @slotsymbs; |
|
if ($oksymbs{$symb}) { |
|
$canuse = 1; |
|
} else { |
|
foreach my $item (@slotsymbs) { |
|
if ($item =~ /\.(page|sequence)$/) { |
|
(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'}); |
} |
} |
} |
} |
} |
} |
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'}}) { |
if (($reservable->{'future'}{$slot}{'symb'} eq '') || |
my $canuse; |
($reservable->{'future'}{$slot}{'symb'} eq $symb)) { |
if ($reservable->{'future'}{$slot}{'symb'} eq '') { |
|
$canuse = 1; |
|
} elsif ($reservable->{'future'}{$slot}{'symb'} =~ /,/) { |
|
my %oksymbs; |
|
my @slotsymbs = split(/\s*,\s*/,$reservable->{'future'}{$slot}{'symb'}); |
|
map { $oksymbs{$_} = 1; } @slotsymbs; |
|
if ($oksymbs{$symb}) { |
|
$canuse = 1; |
|
} else { |
|
foreach my $item (@slotsymbs) { |
|
if ($item =~ /\.(page|sequence)$/) { |
|
(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'}); |
} |
} |
} |
} |