version 1.5, 2011/10/21 10:10:07
|
version 1.6, 2011/11/29 11:50:53
|
Line 40 use HTML::TokeParser;
|
Line 40 use HTML::TokeParser;
|
|
|
use LONCAPA; |
use LONCAPA; |
use Apache::lonnet; |
use Apache::lonnet; |
|
use Apache::lonlocal; |
|
|
use Data::Dumper; |
use Data::Dumper; |
|
|
|
|
Line 68 my $retfrid;
|
Line 70 my $retfrid;
|
|
|
my $username; # User for whom the map is being read. |
my $username; # User for whom the map is being read. |
my $userdomain; # Domain the user lives in. |
my $userdomain; # Domain the user lives in. |
|
my $short_name; # Course shortname. |
my %mapalias_cache; # Keeps track of map aliases -> resources detects duplicates. |
my %mapalias_cache; # Keeps track of map aliases -> resources detects duplicates. |
my %cenv; # Course environment. |
my %cenv; # Course environment. |
|
|
Line 371 sub append_version {
|
Line 374 sub append_version {
|
return $uri; |
return $uri; |
|
|
} |
} |
|
#------------------------------------------------------------------------------ |
|
# |
|
# Misc. utilities that don't fit into the other classifications. |
|
|
|
# Determine if the specified user has an 'advanced' role in a course. |
|
# Parameters: |
|
# cenv - reference to a course environment. |
|
# username - Name of the user we care about. |
|
# domain - Domain in which the user is defined. |
|
# Returns: |
|
# 0 - User does not have an advanced role in the course. |
|
# 1 - User does have an advanced role in the course. |
|
# |
|
sub has_advanced_role { |
|
my ($username, $domain) = @_; |
|
|
|
my %adv_roles = &Apache::lonnet::get_course_adv_roles($short_name); |
|
my $merged_username = $username . ':' . $domain; |
|
foreach my $user (values %adv_roles) { |
|
if ($merged_username eq $user) { |
|
return 1; |
|
} |
|
} |
|
return 0; |
|
} |
|
|
#-------------------------------------------------------------------------------- |
#-------------------------------------------------------------------------------- |
# Post processing subs: |
# Post processing subs: |
sub hiddenurls { |
sub hiddenurls { |
Line 1205 sub read_map {
|
Line 1234 sub read_map {
|
|
|
my $ispage = ($filename =~/\.page$/); |
my $ispage = ($filename =~/\.page$/); |
unless ($ispage || ($filename =~ /\.sequence$/)) { |
unless ($ispage || ($filename =~ /\.sequence$/)) { |
|
&Apache::lonnet::logthis("invalid: $filename : $uri"); |
throw Error::Simple(&mt("<br />Invalid map: <tt>[_1]</tt>", $filename)); |
throw Error::Simple(&mt("<br />Invalid map: <tt>[_1]</tt>", $filename)); |
} |
} |
|
|
Line 1283 sub read_map {
|
Line 1313 sub read_map {
|
# |
# |
|
|
if ($randomize) { |
if ($randomize) { |
if (!$env{'request.role.adv'}) { |
if (!&has_advanced_role($username, $userdomain) ) { |
my $seed; |
my $seed; |
|
|
# In the advanced role, the map's random seed |
# In the advanced role, the map's random seed |
Line 1305 sub read_map {
|
Line 1335 sub read_map {
|
} |
} |
|
|
|
|
my $rndseed=&Apache::lonnet::rndseed($seed, $username, $userdomain); |
my $rndseed=&Apache::lonnet::rndseed($seed, '', |
|
$userdomain, $username, |
|
\%cenv); |
|
|
|
|
&Apache::lonnet::setup_random_from_rndseed($rndseed); |
&Apache::lonnet::setup_random_from_rndseed($rndseed); |
|
|
# 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 |
Line 1313 sub read_map {
|
Line 1347 sub read_map {
|
# processing the randomorder parameter if it is set, not |
# processing the randomorder parameter if it is set, not |
# randompick. |
# randompick. |
|
|
@map_ids=&math::Random::random_permutation(@map_ids); |
@map_ids=&Math::Random::random_permutation(@map_ids); |
} |
} |
|
|
|
|
my $from = shift(@map_ids); |
my $from = shift(@map_ids); |
my $from_rid = $lmap_no.'.'.$from; |
my $from_rid = $lmap_no.'.'.$from; |
$hash->{'map_start_'.$uri} = $from_rid; |
$hash->{'map_start_'.$uri} = $from_rid; |
Line 1338 sub read_map {
|
Line 1370 sub read_map {
|
$hash->{'type_'.$from_rid}='finish'; |
$hash->{'type_'.$from_rid}='finish'; |
} |
} |
|
|
|
|
# The last parsing pass parses the <mapalias> tags that associate a name |
# The last parsing pass parses the <mapalias> tags that associate a name |
# with resource ids. |
# with resource ids. |
|
|
Line 1397 sub loadmap {
|
Line 1430 sub loadmap {
|
$username = $uname; |
$username = $uname; |
$userdomain = $udom; |
$userdomain = $udom; |
|
|
my $short_name = $cdom .'/' . $cnum; |
$short_name = $cdom .'/' . $cnum; |
my $retfurl; |
my $retfurl; |
|
|
try { |
try { |
|
|
|
|
# Get the information we need about the course. |
# Get the information we need about the course. |
# Return without filling in anything if we can't get any info: |
# Return without filling in anything if we can't get any info: |
|
|
%cenv = &Apache::lonnet::coursedescription($short_name, |
%cenv = &Apache::lonnet::coursedescription($short_name, |
{'freshen_cache' => 1, |
{'freshen_cache' => 1, |
'user' => $uname}); |
'user' => $uname}); |
|
|
unless ($cenv{'url'}) { |
unless ($cenv{'url'}) { |
&Apache::lonnet::logthis("lonmap::loadmap failed: $cnum/$cdom - did not get url"); |
&Apache::lonnet::logthis("lonmap::loadmap failed: $cnum/$cdom - did not get url"); |
return; |
return; |
} |
} |
|
|
$course_id = $cdom . '_' . $cnum; # Long course id. |
$course_id = $cdom . '_' . $cnum; # Long course id. |
|
|
# Load the version information into the hash |
# Load the version information into the hash |
|
|
|
|
&process_versions(\%cenv, $target_hash); |
&process_versions(\%cenv, $target_hash); |
|
|
|
|
Line 1443 sub loadmap {
|
Line 1476 sub loadmap {
|
$target_hash->{'context.userdom'} = $userdomain; |
$target_hash->{'context.userdom'} = $userdomain; |
$target_hash->{'context.courseid'} = $course_id; |
$target_hash->{'context.courseid'} = $course_id; |
|
|
|
|
&read_map($course_uri, '0.0', $target_hash); |
&read_map($course_uri, '0.0', $target_hash); |
|
|
# |
# |