[LON-CAPA-cvs] cvs: loncom /lonnet/perl lonnet.pm

www www@source.lon-capa.org
Thu, 03 Jun 2010 17:04:41 -0000


www		Thu Jun  3 17:04:41 2010 EDT

  Modified files:              
    /loncom/lonnet/perl	lonnet.pm 
  Log:
  Saving my work: reconstructing partorder when importing parts
  
  
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.1068 loncom/lonnet/perl/lonnet.pm:1.1069
--- loncom/lonnet/perl/lonnet.pm:1.1068	Thu Jun  3 01:46:43 2010
+++ loncom/lonnet/perl/lonnet.pm	Thu Jun  3 17:04:41 2010
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.1068 2010/06/03 01:46:43 www Exp $
+# $Id: lonnet.pm,v 1.1069 2010/06/03 17:04:41 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -8157,6 +8157,9 @@
 	if (defined($cached)) { return $result->{':'.$what}; }
     }
     {
+# Imported parts would go here
+        my @newpartorder=();
+        my $importedparts=0;
 #
 # Is this a recursive call for a library?
 #
@@ -8250,14 +8253,36 @@
                         my $dir=$filename;
                         $dir=~s|[^/]*$||;
                         $location=&filelocation($dir,$location);
- 
+                       
                         my $importmode=$token->[2]->{'importmode'};
                         if ($importmode eq 'problem') {
-# Import as problem
+# Import as problem/response
                            $unikey=&add_prefix_and_part($prefix,$token->[2]->{'part'});
                         } elsif ($importmode eq 'part') {
 # Import as part(s)
-                           $unikey=&add_prefix_and_part($prefix,$token->[2]->{'id'});
+                           $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
+                           my $origfilelocation=$perlvar{'lonDocRoot'}.&clutter($uri);
+                           my $origfile=&getfile($origfilelocation);
+                           my @origfileimportpartids=($origfile=~/<(part|import)[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs);
+# Load and inspect imported file
+                           my $impfile=&getfile($location);
+                           my @impfilepartids=($impfile=~/<part[^>]*id\s*=\s*[\"\']([^\"\']+)[\"\'][^>]*>/gs);
+
+#&logthis("Found imported parts".join(',',@impfilepartids));
+#&logthis("Found original parts and imports".join(',',@origfileimportpartids));
+                           if ($#impfilepartids>=0) {
+# This problem had parts
+#&logthis("Importing parted problem");
+                           } else {
+# Importing by turning a single problem into a problem part
+# It gets the import-tags ID as part-ID
+#&logthis("Importing unparted problem");
+                               $unikey=&add_prefix_and_part($prefix,$token->[2]->{'id'});
+                               push(@newpartorder,$token->[2]->{'id'});
+                           }
                         } else {
 # Normal import
                            $unikey=&add_prefix_and_part($prefix,$token->[2]->{'part'});