version 1.145, 2013/05/06 18:08:39
|
version 1.146, 2013/06/26 21:22:55
|
Line 59 my $retfurl; # first URL
|
Line 59 my $retfurl; # first URL
|
my %randompick; # randomly picked resources |
my %randompick; # randomly picked resources |
my %randompickseed; # optional seed for randomly picking resources |
my %randompickseed; # optional seed for randomly picking resources |
my %randomorder; # maps to order contents randomly |
my %randomorder; # maps to order contents randomly |
|
my %randomizationcode; # code used to grade folder for bubblesheet exam |
my %encurl; # URLs in this folder are supposed to be encrypted |
my %encurl; # URLs in this folder are supposed to be encrypted |
my %hiddenurl; # this URL (or complete folder) is supposed to be hidden |
my %hiddenurl; # this URL (or complete folder) is supposed to be hidden |
|
|
Line 140 sub processversionfile {
|
Line 141 sub processversionfile {
|
# Parameters: |
# Parameters: |
# uri - URI of the map file. |
# uri - URI of the map file. |
# parent_rid - Resource id in the map of the parent resource (0.0 for the top level map) |
# parent_rid - Resource id in the map of the parent resource (0.0 for the top level map) |
# |
# courseid - Course id for the course for which the map is being loaded |
# |
# |
sub loadmap { |
sub loadmap { |
my ($uri,$parent_rid)=@_; |
my ($uri,$parent_rid,$courseid)=@_; |
|
|
# Is the map already included? |
# Is the map already included? |
|
|
Line 236 sub loadmap {
|
Line 237 sub loadmap {
|
# This is handled in the next chunk of code. |
# This is handled in the next chunk of code. |
|
|
my @map_ids; |
my @map_ids; |
|
my $codechecked; |
while (my $token = $parser->get_token) { |
while (my $token = $parser->get_token) { |
next if ($token->[0] ne 'S'); |
next if ($token->[0] ne 'S'); |
|
|
# Resource |
# Resource |
|
|
if ($token->[1] eq 'resource') { |
if ($token->[1] eq 'resource') { |
my $resource_id = &parse_resource($token,$lpc,$ispage,$uri); |
my $resource_id = &parse_resource($token,$lpc,$ispage,$uri,$courseid); |
if (defined $resource_id) { |
if (defined $resource_id) { |
push(@map_ids, $resource_id); |
push(@map_ids, $resource_id); |
|
unless ($codechecked) { |
|
my $startsymb = |
|
&Apache::lonnet::encode_symb($hash{'map_id_'.$lpc},$resource_id, |
|
$hash{'src_'."$lpc.$resource_id"}); |
|
my $code = |
|
&Apache::lonnet::EXT('resource.0.examcode',$startsymb,undef,undef, |
|
undef,undef,$courseid); |
|
if ($code) { |
|
$randomizationcode{$parent_rid} = $code; |
|
} |
|
$codechecked = 1; |
|
} |
} |
} |
|
|
# Link |
# Link |
Line 260 sub loadmap {
|
Line 274 sub loadmap {
|
&parse_condition($token,$lpc); |
&parse_condition($token,$lpc); |
} |
} |
} |
} |
|
undef($codechecked); |
|
|
|
|
# Handle randomization and random selection |
# Handle randomization and random selection |
Line 289 sub loadmap {
|
Line 304 sub loadmap {
|
# TODO: Here for sure we need to pass along the username/domain |
# TODO: Here for sure we need to pass along the username/domain |
# so that we can impersonate users in lonprintout e.g. |
# so that we can impersonate users in lonprintout e.g. |
|
|
|
my $setcode; |
|
if (defined($randomizationcode{$parent_rid})) { |
|
if ($env{'form.CODE'} eq '') { |
|
$env{'form.CODE'} = $randomizationcode{$parent_rid}; |
|
$setcode = 1; |
|
} |
|
} |
|
|
my $rndseed=&Apache::lonnet::rndseed($seed); |
my $rndseed=&Apache::lonnet::rndseed($seed); |
&Apache::lonnet::setup_random_from_rndseed($rndseed); |
&Apache::lonnet::setup_random_from_rndseed($rndseed); |
|
|
|
if ($setcode) { |
|
undef($env{'form.CODE'}); |
|
undef($setcode); |
|
} |
|
|
# Take the set of map ids we have decoded and permute them to a |
# Take the set of map ids we have decoded and permute them to a |
# random order based on the seed set above. All of this is |
# random order based on the seed set above. All of this is |
# processing the randomorder parameter if it is set, not |
# processing the randomorder parameter if it is set, not |
Line 352 sub loadmap {
|
Line 380 sub loadmap {
|
# $lpc - Map nesting level (?) |
# $lpc - Map nesting level (?) |
# $ispage - True if this resource is encapsulated in a .page (assembled resourcde). |
# $ispage - True if this resource is encapsulated in a .page (assembled resourcde). |
# $uri - URI of the enclosing resource. |
# $uri - URI of the enclosing resource. |
|
# $courseid - Course id of the course containing the resource being parsed. |
# Returns: |
# Returns: |
# Value of the id attribute of the tag. |
# Value of the id attribute of the tag. |
# |
# |
Line 372 sub loadmap {
|
Line 401 sub loadmap {
|
|
|
|
|
sub parse_resource { |
sub parse_resource { |
my ($token,$lpc,$ispage,$uri) = @_; |
my ($token,$lpc,$ispage,$uri,$courseid) = @_; |
|
|
# I refuse to countenance code like this that has |
# I refuse to countenance code like this that has |
# such a dirty side effect (and forcing this sub to be called within a loop). |
# such a dirty side effect (and forcing this sub to be called within a loop). |
Line 511 sub parse_resource {
|
Line 540 sub parse_resource {
|
if (($turi=~/\.sequence$/) || |
if (($turi=~/\.sequence$/) || |
($turi=~/\.page$/)) { |
($turi=~/\.page$/)) { |
$hash{'is_map_'.$rid}=1; |
$hash{'is_map_'.$rid}=1; |
&loadmap($turi,$rid); |
&loadmap($turi,$rid,$courseid); |
} |
} |
return $token->[2]->{'id'}; |
return $token->[2]->{'id'}; |
} |
} |
Line 1052 sub hiddenurls {
|
Line 1081 sub hiddenurls {
|
# -------------------------------- randomly eliminate the ones that should stay |
# -------------------------------- randomly eliminate the ones that should stay |
my (undef,$id)=split(/\./,$rid); |
my (undef,$id)=split(/\./,$rid); |
if ($randompickseed{$rid}) { $id=$randompickseed{$rid}; } |
if ($randompickseed{$rid}) { $id=$randompickseed{$rid}; } |
|
my $setcode; |
|
if (defined($randomizationcode{$rid})) { |
|
if ($env{'form.CODE'} eq '') { |
|
$env{'form.CODE'} = $randomizationcode{$rid}; |
|
$setcode = 1; |
|
} |
|
} |
my $rndseed=&Apache::lonnet::rndseed($id); # use id instead of symb |
my $rndseed=&Apache::lonnet::rndseed($id); # use id instead of symb |
|
if ($setcode) { |
|
undef($env{'form.CODE'}); |
|
undef($setcode); |
|
} |
&Apache::lonnet::setup_random_from_rndseed($rndseed); |
&Apache::lonnet::setup_random_from_rndseed($rndseed); |
my @whichids=&Math::Random::random_permuted_index($#currentrids+1); |
my @whichids=&Math::Random::random_permuted_index($#currentrids+1); |
for (my $i=1;$i<=$rndpick;$i++) { $currentrids[$whichids[$i]]=''; } |
for (my $i=1;$i<=$rndpick;$i++) { $currentrids[$whichids[$i]]=''; } |
Line 1370 sub build_tmp_hashes {
|
Line 1410 sub build_tmp_hashes {
|
# sub-maps. |
# sub-maps. |
|
|
|
|
&loadmap($uri,'0.0'); |
&loadmap($uri,'0.0',$short); |
|
|
# The code below only executes if there is a starting point for the map> |
# The code below only executes if there is a starting point for the map> |
# Q/BUG??? If there is no start resource for the map should that be an error? |
# Q/BUG??? If there is no start resource for the map should that be an error? |