--- loncom/lonmap.pm 2013/05/30 04:02:02 1.10 +++ loncom/lonmap.pm 2013/05/30 05:04:16 1.11 @@ -2,7 +2,7 @@ # # Read maps into a 'big hash'. # -# $Id: lonmap.pm,v 1.10 2013/05/30 04:02:02 raeburn Exp $ +# $Id: lonmap.pm,v 1.11 2013/05/30 05:04:16 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -617,7 +617,16 @@ sub traceroute { my $hidden=&Apache::lonnet::EXT('resource.0.hiddenresource',$symb); if ($hdnflag || lc($hidden) eq 'yes') { - $hiddenurl{$rid}=1; + my $ignorehidden; + if (defined($hash->{'is_map_'.$rid})) { + if (($hash->{'context.nohideurl'}) && ($hash->{'context.nohideurl'} eq $hash->{'src_'.$rid})) { + $ignorehidden = 1; # Hidden parameter explicitly deleted + # if printing/grading bubblesheet exam + } + } + unless ($ignorehidden) { + $hiddenurl{$rid}=1; + } } if (!$hdnflag && lc($hidden) eq 'no') { delete($hiddenurl{$rid}); @@ -782,7 +791,6 @@ sub parse_param { $hiddenurl{$referid}=1; } } - } @@ -970,6 +978,14 @@ sub parse_resource { if (($turi=~/\.sequence$/) || ($turi=~/\.page$/)) { $hash->{'is_map_'.$rid}='1'; # String in lonuserstate. + if ($hiddenurl{$rid}) { + if (($hash->{'context.nohideurl'}) && + ($hash->{'context.nohideurl'} eq $hash->{'src_'.$rid})) { + delete($hiddenurl{$rid}); # Hidden parameter explicitly deleted + # if printing/grading bubblesheet exam + } + } + &read_map($turi,$rid,$code,$hash); } return $token->[2]->{'id'}; @@ -1399,6 +1415,7 @@ sub read_map { # $uname - Name of the user for whom the course is being read # $udom - Name of the domain of the user for whom the course is being read. # $code - CODE for which course is being read (CODEd assignments) +# $nohideurl - URL for an exam folder for which hidden state is to be ignored. # $target_hash- Reference to the target hash into which all of this is read. # Note tht some of the hash entries we need to build require knowledge of the # course URI.. these are expected to be filled in by the caller. @@ -1407,7 +1424,7 @@ sub read_map { # # sub loadmap { - my ($cnum, $cdom, $uname, $udom, $code, $target_hash) = @_; + my ($cnum, $cdom, $uname, $udom, $code, $nohideurl, $target_hash) = @_; @@ -1426,7 +1443,7 @@ sub loadmap { %mapalias_cache = (); %cenv = (); $map_number = 0; - + # $username = $uname; @@ -1477,12 +1494,13 @@ sub loadmap { $target_hash->{'context.username'} = $username; $target_hash->{'context.userdom'} = $userdomain; $target_hash->{'context.courseid'} = $course_id; - + + # When grading or printing a bubblesheet exam ignore + # "hidden" parameter set in the map containing the exam folder. + $target_hash->{'context.nohideurl'} = $nohideurl; &read_map($course_uri, '0.0', $code, $target_hash); - # - if (defined($target_hash->{'map_start_'.$map_uri})) { &traceroute('0',$target_hash->{'map_start_'.$course_uri},'&', 0, 0, $target_hash); @@ -1561,28 +1579,39 @@ Apache::lonmap - Construct a hash that r =head1 SYNOPSIS -&Apache::lonmap::loadmap($filepath, \%target_hash); +&Apache::lonmap::loadmap($cnum, $cdom, $uname, $udom, $code, $nohideurl, \%target_hash); =head1 INTRODUCTION This module reads a course filename into a hash reference. It's up to the caller -to to things like decide the has should be tied to some external file and handle the locking -if this file should be shared amongst several Apache children. +to do things like decide that the hash should be tied to some external file and handle the +the locking if this file should be shared amongst several Apache children. =head1 SUBROUTINES =over -=item loadmap($filepath, $targethash) +=item loadmap($cnum, $cdom, $uname, $udom, $code, $nohideurl, $targethash) -Reads the map file into a target hash. +Reads the top-level map file into a target hash. This is done by first parsing the +map file into local hashes and then unrolling those hashes into the big hash. =over -=item $filepath - The path to the map file to read. +=item $cnum - number of course being read. + +=item $cdom - domain in which the course is evaluated. + +=item $uname - name of the user for whom the course is being read. + +=item $udom - name of the domain of the user for whom the course is being read. + +=item $code - CODE for which course is being read (CODEd assignments). + +=item $nohideurl - URL for an exam folder for which hidden state is to be ignored. -=item $targethash - A reference to hash into which the course is read. +=item $targethash - A reference to hash into which the course is read =back