version 1.1370, 2018/03/30 18:07:47
|
version 1.1376, 2018/05/01 14:28:41
|
Line 708 sub check_for_valid_session {
|
Line 708 sub check_for_valid_session {
|
$userhashref->{'name'} = $disk_env{'user.name'}; |
$userhashref->{'name'} = $disk_env{'user.name'}; |
$userhashref->{'domain'} = $disk_env{'user.domain'}; |
$userhashref->{'domain'} = $disk_env{'user.domain'}; |
$userhashref->{'lti'} = $disk_env{'request.lti.login'}; |
$userhashref->{'lti'} = $disk_env{'request.lti.login'}; |
|
if ($userhashref->{'lti'}) { |
|
$userhashref->{'ltitarget'} = $disk_env{'request.lti.target'}; |
|
$userhashref->{'ltiuri'} = $disk_env{'request.lti.uri'}; |
|
} |
} |
} |
|
|
return $handle; |
return $handle; |
Line 758 sub appenv {
|
Line 762 sub appenv {
|
$env{$key}=$newenv->{$key}; |
$env{$key}=$newenv->{$key}; |
} |
} |
} |
} |
my $opened = open(my $env_file,'+<',$env{'user.environment'}); |
my $lonids = $perlvar{'lonIDsDir'}; |
if ($opened |
if ($env{'user.environment'} =~ m{^\Q$lonids/\E$match_username\_\d+\_$match_domain\_[\w\-.]+\.id$}) { |
&& &timed_flock($env_file,LOCK_EX) |
my $opened = open(my $env_file,'+<',$env{'user.environment'}); |
&& |
if ($opened |
tie(my %disk_env,'GDBM_File',$env{'user.environment'}, |
&& &timed_flock($env_file,LOCK_EX) |
(&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) { |
&& |
while (my ($key,$value) = each(%{$newenv})) { |
tie(my %disk_env,'GDBM_File',$env{'user.environment'}, |
$disk_env{$key} = $value; |
(&GDBM_WRITER()|&GDBM_NOLOCK()),0640)) { |
} |
while (my ($key,$value) = each(%{$newenv})) { |
untie(%disk_env); |
$disk_env{$key} = $value; |
|
} |
|
untie(%disk_env); |
|
} |
} |
} |
} |
} |
return 'ok'; |
return 'ok'; |
Line 11928 sub metadata {
|
Line 11935 sub metadata {
|
# Check metadata for imported file to |
# Check metadata for imported file to |
# see if it contained response items |
# see if it contained response items |
# |
# |
|
my ($origfile,@libfilekeys); |
my %currmetaentry = %metaentry; |
my %currmetaentry = %metaentry; |
my $libresponseorder = &metadata($location,'responseorder'); |
@libfilekeys = split(/,/,&metadata($location,'keys',undef,undef,undef, |
my $origfile; |
$depthcount+1)); |
if ($libresponseorder ne '') { |
if (grep(/^responseorder$/,@libfilekeys)) { |
if ($#origfiletagids<0) { |
my $libresponseorder = &metadata($location,'responseorder',undef,undef, |
undef(%importedrespids); |
undef,$depthcount+1); |
undef(%importedpartids); |
if ($libresponseorder ne '') { |
} |
if ($#origfiletagids<0) { |
@{$importedrespids{$importid}} = split(/\s*,\s*/,$libresponseorder); |
undef(%importedrespids); |
if (@{$importedrespids{$importid}} > 0) { |
undef(%importedpartids); |
$importedresponses = 1; |
} |
|
my @respids = split(/\s*,\s*/,$libresponseorder); |
|
if (@respids) { |
|
$importedrespids{$importid} = join(',',map { $importid.'_'.$_ } @respids); |
|
} |
|
if ($importedrespids{$importid} ne '') { |
|
$importedresponses = 1; |
# We need to get the original file and the imported file to get the response order correct |
# We need to get the original file and the imported file to get the response order correct |
# Load and inspect original file |
# Load and inspect original file |
if ($#origfiletagids<0) { |
if ($#origfiletagids<0) { |
my $origfilelocation=$perlvar{'lonDocRoot'}.&clutter($uri); |
my $origfilelocation=$perlvar{'lonDocRoot'}.&clutter($uri); |
$origfile=&getfile($origfilelocation); |
$origfile=&getfile($origfilelocation); |
@origfiletagids=($origfile=~/<((?:\w+)response|import|part)[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs); |
@origfiletagids=($origfile=~/<((?:\w+)response|import|part)[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs); |
|
} |
} |
} |
} |
} |
} |
} |
Line 11952 sub metadata {
|
Line 11967 sub metadata {
|
# hash populated for imported library file |
# hash populated for imported library file |
%metaentry = %currmetaentry; |
%metaentry = %currmetaentry; |
undef(%currmetaentry); |
undef(%currmetaentry); |
if ($importmode eq 'problem') { |
if ($importmode eq 'part') { |
# Import as problem/response |
|
$unikey=&add_prefix_and_part($prefix,$token->[2]->{'part'}); |
|
} elsif ($importmode eq 'part') { |
|
# Import as part(s) |
# Import as part(s) |
$importedparts=1; |
$importedparts=1; |
# We need to get the original file and the imported file to get the part order correct |
# We need to get the original file and the imported file to get the part order correct |
Line 11970 sub metadata {
|
Line 11982 sub metadata {
|
@origfiletagids=($origfile=~/<(part|import)[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs); |
@origfiletagids=($origfile=~/<(part|import)[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs); |
} |
} |
} |
} |
|
my @impfilepartids; |
# Load and inspect imported file |
# If <partorder> tag is included in metadata for the imported file |
my $impfile=&getfile($location); |
# get the parts in the imported file from that. |
my @impfilepartids=($impfile=~/<part[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs); |
if (grep(/^partorder$/,@libfilekeys)) { |
|
%currmetaentry = %metaentry; |
|
my $libpartorder = &metadata($location,'partorder',undef,undef,undef, |
|
$depthcount+1); |
|
%metaentry = %currmetaentry; |
|
undef(%currmetaentry); |
|
if ($libpartorder ne '') { |
|
@impfilepartids=split(/\s*,\s*/,$libpartorder); |
|
} |
|
} else { |
|
# If no <partorder> tag available, load and inspect imported file |
|
my $impfile=&getfile($location); |
|
@impfilepartids=($impfile=~/<part[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs); |
|
} |
if ($#impfilepartids>=0) { |
if ($#impfilepartids>=0) { |
# This problem had parts |
# This problem had parts |
$importedpartids{$token->[2]->{'id'}}=join(',',@impfilepartids); |
$importedpartids{$token->[2]->{'id'}}=join(',',@impfilepartids); |
Line 11984 sub metadata {
|
Line 12009 sub metadata {
|
$importedpartids{$token->[2]->{'id'}}=$token->[2]->{'id'}; |
$importedpartids{$token->[2]->{'id'}}=$token->[2]->{'id'}; |
} |
} |
} else { |
} else { |
|
# Import as problem or as normal import |
|
$unikey=&add_prefix_and_part($prefix,$token->[2]->{'part'}); |
|
unless ($importmode eq 'problem') { |
# Normal import |
# Normal import |
$unikey=&add_prefix_and_part($prefix,$token->[2]->{'part'}); |
if (defined($token->[2]->{'id'})) { |
if (defined($token->[2]->{'id'})) { |
$unikey.='_'.$token->[2]->{'id'}; |
$unikey.='_'.$token->[2]->{'id'}; |
} |
} |
} |
|
# Check metadata for imported file to |
|
# see if it contained parts |
|
if (grep(/^partorder$/,@libfilekeys)) { |
|
%currmetaentry = %metaentry; |
|
my $libpartorder = &metadata($location,'partorder',undef,undef,undef, |
|
$depthcount+1); |
|
%metaentry = %currmetaentry; |
|
undef(%currmetaentry); |
|
if ($libpartorder ne '') { |
|
$importedparts = 1; |
|
$importedpartids{$token->[2]->{'id'}}=$libpartorder; |
|
} |
|
} |
} |
} |
|
|
if ($depthcount<20) { |
if ($depthcount<20) { |
my $metadata = |
my $metadata = |
&metadata($uri,'keys',$toolsymb,$location,$unikey, |
&metadata($uri,'keys',$toolsymb,$location,$unikey, |
Line 12102 sub metadata {
|
Line 12142 sub metadata {
|
} elsif ($origfiletagids[$index] eq 'import') { |
} elsif ($origfiletagids[$index] eq 'import') { |
if ($importedparts) { |
if ($importedparts) { |
# We have imported parts at this position |
# We have imported parts at this position |
$metaentry{':partorder'}.=','.$importedpartids{$origid}; |
if ($importedpartids{$origid} ne '') { |
|
$metaentry{':partorder'}.=','.$importedpartids{$origid}; |
|
} |
} |
} |
if ($importedresponses) { |
if ($importedresponses) { |
# We have imported responses at this position |
# We have imported responses at this position |
if (ref($importedrespids{$origid}) eq 'ARRAY') { |
if ($importedrespids{$origid} ne '') { |
$metaentry{':responseorder'}.=','.join(',',map { $origid.'_'.$_ } @{$importedrespids{$origid}}); |
$metaentry{':responseorder'}.=','.$importedrespids{$origid}; |
} |
} |
} |
} |
} else { |
} else { |
Line 12124 sub metadata {
|
Line 12166 sub metadata {
|
$metaentry{':responseorder'}=~s/^\,//; |
$metaentry{':responseorder'}=~s/^\,//; |
} |
} |
} |
} |
|
|
$metaentry{':keys'} = join(',',keys(%metathesekeys)); |
$metaentry{':keys'} = join(',',keys(%metathesekeys)); |
&metadata_generate_part0(\%metathesekeys,\%metaentry,$uri); |
&metadata_generate_part0(\%metathesekeys,\%metaentry,$uri); |
$metaentry{':allpossiblekeys'}=join(',',keys(%metathesekeys)); |
$metaentry{':allpossiblekeys'}=join(',',keys(%metathesekeys)); |
&do_cache_new('meta',$uri,\%metaentry,$cachetime); |
unless ($liburi) { |
|
&do_cache_new('meta',$uri,\%metaentry,$cachetime); |
|
} |
# this is the end of "was not already recently cached |
# this is the end of "was not already recently cached |
} |
} |
return $metaentry{':'.$what}; |
return $metaentry{':'.$what}; |
Line 14851 only used internally for recursive metad
|
Line 14894 only used internally for recursive metad
|
the toolsymb is only used where the uri is for an external tool (for which |
the toolsymb is only used where the uri is for an external tool (for which |
the uri as well as the symb are guaranteed to be unique). |
the uri as well as the symb are guaranteed to be unique). |
|
|
this function automatically caches all requests |
this function automatically caches all requests except any made recursively |
|
to retrieve a list of metadata keys for an imported library file ($liburi is |
|
defined). |
|
|
=item * |
=item * |
|
|