[LON-CAPA-cvs] cvs: loncom /homework structuretags.pm /lonnet/perl lonnet.pm
raeburn
raeburn at source.lon-capa.org
Tue Mar 27 00:36:28 EDT 2018
raeburn Tue Mar 27 04:36:28 2018 EDT
Modified files:
/loncom/lonnet/perl lonnet.pm
/loncom/homework structuretags.pm
Log:
- "Student Submission Reports" nneds to include submissions for imported responses.
- Include <responseorder> in metadata for library file.
- Rebuild responseorder metadata-field for problem with imported library
file containing response items.
-------------- next part --------------
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.1368 loncom/lonnet/perl/lonnet.pm:1.1369
--- loncom/lonnet/perl/lonnet.pm:1.1368 Fri Mar 23 01:02:04 2018
+++ loncom/lonnet/perl/lonnet.pm Tue Mar 27 04:36:11 2018
@@ -1,7 +1,7 @@
# The LearningOnline Network
# TCP networking package
#
-# $Id: lonnet.pm,v 1.1368 2018/03/23 01:02:04 raeburn Exp $
+# $Id: lonnet.pm,v 1.1369 2018/03/27 04:36:11 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -11735,6 +11735,7 @@
my %metaentry;
my %importedpartids;
+my %importedrespids;
sub metadata {
my ($uri,$what,$toolsymb,$liburi,$prefix,$depthcount)=@_;
$uri=&declutter($uri);
@@ -11821,9 +11822,11 @@
{
# Imported parts would go here
- my %importedids=();
- my @origfileimportpartids=();
+ my @origfiletagids=();
my $importedparts=0;
+
+# Imported responseids would go here
+ my $importedresponses=0;
#
# Is this a recursive call for a library?
#
@@ -11918,8 +11921,32 @@
my $dir=$filename;
$dir=~s|[^/]*$||;
$location=&filelocation($dir,$location);
-
+
+ my $importid=$token->[2]->{'id'};
my $importmode=$token->[2]->{'importmode'};
+#
+# Check metadata for imported file to
+# see if it contained response items
+#
+ my $libresponseorder = &metadata($location,'responseorder');
+ my $origfile;
+ if ($libresponseorder ne '') {
+ if ($#origfiletagids<0) {
+ undef(%importedrespids);
+ undef(%importedpartids);
+ }
+ @{$importedrespids{$importid}} = split(/\s*,\s*/,$libresponseorder);
+ if (@{$importedrespids{$importid}} > 0) {
+ $importedresponses = 1;
+# We need to get the original file and the imported file to get the response order correct
+# Load and inspect original file
+ if ($#origfiletagids<0) {
+ my $origfilelocation=$perlvar{'lonDocRoot'}.&clutter($uri);
+ $origfile=&getfile($origfilelocation);
+ @origfiletagids=($origfile=~/<((?:\w+)response|import|part)[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs);
+ }
+ }
+ }
if ($importmode eq 'problem') {
# Import as problem/response
$unikey=&add_prefix_and_part($prefix,$token->[2]->{'part'});
@@ -11928,12 +11955,15 @@
$importedparts=1;
# We need to get the original file and the imported file to get the part order correct
# Good news: we do not need to worry about nested libraries, since parts cannot be nested
-# Load and inspect original file
- if ($#origfileimportpartids<0) {
- undef(%importedpartids);
- my $origfilelocation=$perlvar{'lonDocRoot'}.&clutter($uri);
- my $origfile=&getfile($origfilelocation);
- @origfileimportpartids=($origfile=~/<(part|import)[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs);
+# Load and inspect original file if we didn't do that already
+ if ($#origfiletagids<0) {
+ undef(%importedrespids);
+ undef(%importedpartids);
+ if ($origfile eq '') {
+ my $origfilelocation=$perlvar{'lonDocRoot'}.&clutter($uri);
+ $origfile=&getfile($origfilelocation);
+ @origfiletagids=($origfile=~/<(part|import)[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs);
+ }
}
# Load and inspect imported file
@@ -11964,7 +11994,6 @@
$metaentry{':'.$meta}=$metaentry{':'.$meta};
$metathesekeys{$meta}=1;
}
-
}
} else {
#
@@ -12047,20 +12076,48 @@
grep { ! $seen{$_} ++ } (split(',',$metaentry{':packages'}));
$metaentry{':packages'} = join(',', at uniq_packages);
- if ($importedparts) {
+ if (($importedresponses) || ($importedparts)) {
+ if ($importedparts) {
# We had imported parts and need to rebuild partorder
- $metaentry{':partorder'}='';
- $metathesekeys{'partorder'}=1;
- for (my $index=0;$index<$#origfileimportpartids;$index+=2) {
- if ($origfileimportpartids[$index] eq 'part') {
-# original part, part of the problem
- $metaentry{':partorder'}.=','.$origfileimportpartids[$index+1];
- } else {
-# we have imported parts at this position
- $metaentry{':partorder'}.=','.$importedpartids{$origfileimportpartids[$index+1]};
- }
- }
- $metaentry{':partorder'}=~s/^\,//;
+ $metaentry{':partorder'}='';
+ $metathesekeys{'partorder'}=1;
+ }
+ if ($importedresponses) {
+# We had imported responses and need to rebuil responseorder
+ $metaentry{':responseorder'}='';
+ $metathesekeys{'responseorder'}=1;
+ }
+ for (my $index=0;$index<$#origfiletagids;$index+=2) {
+ my $origid = $origfiletagids[$index+1];
+ if ($origfiletagids[$index] eq 'part') {
+# Original part, part of the problem
+ if ($importedparts) {
+ $metaentry{':partorder'}.=','.$origid;
+ }
+ } elsif ($origfiletagids[$index] eq 'import') {
+ if ($importedparts) {
+# We have imported parts at this position
+ $metaentry{':partorder'}.=','.$importedpartids{$origid};
+ }
+ if ($importedresponses) {
+# We have imported responses at this position
+ if (ref($importedrespids{$origid}) eq 'ARRAY') {
+ $metaentry{':responseorder'}.=','.join(',',map { $origid.'_'.$_ } @{$importedrespids{$origid}});
+ }
+ }
+ } else {
+# Original response item, part of the problem
+ if ($importedresponses) {
+ $metaentry{':responseorder'}.=','.$origid;
+ }
+ }
+ }
+ if ($importedparts) {
+ $metaentry{':partorder'}=~s/^\,//;
+ }
+ if ($importedresponses) {
+ $metaentry{':responseorder'}=~s/^\,//;
+ }
}
$metaentry{':keys'} = join(',',keys(%metathesekeys));
Index: loncom/homework/structuretags.pm
diff -u loncom/homework/structuretags.pm:1.557 loncom/homework/structuretags.pm:1.558
--- loncom/homework/structuretags.pm:1.557 Fri Dec 22 01:55:28 2017
+++ loncom/homework/structuretags.pm Tue Mar 27 04:36:28 2018
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.557 2017/12/22 01:55:28 raeburn Exp $
+# $Id: structuretags.pm,v 1.558 2018/03/27 04:36:28 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2134,6 +2134,8 @@
&& ($#$tagstack eq 0 && $$tagstack[0] eq 'library')
&& $env{'request.state'} eq "construct") {
$result.='</form>'.&Apache::loncommon::end_page({'discussion' => 1});
+ } elsif ($target eq 'meta') {
+ $result.=&Apache::response::meta_response_order();
}
if ( $#$tagstack eq 0 && $$tagstack[0] eq 'library') {
&reset_problem_globals('library');
More information about the LON-CAPA-cvs
mailing list