[LON-CAPA-cvs] cvs: loncom /interface lonprintout.pm

raeburn raeburn at source.lon-capa.org
Sun Dec 9 20:09:07 EST 2012


raeburn		Mon Dec 10 01:09:07 2012 EDT

  Modified files:              
    /loncom/interface	lonprintout.pm 
  Log:
  - Printing Problems/Resources from folder for CODEd assignments.
  - Change in first arg passed to &master_seq_to_person_seq().
    - Arg is now URL of folder, instead of $helper object (which had been
      used to retrieve the symb, which was unused).
  - Set start and finish for iterator to first and last items in map
  - During iteration test if current item is a reference in place of
    checking if item is key in %nonResourceItems hash. 
  
  
Index: loncom/interface/lonprintout.pm
diff -u loncom/interface/lonprintout.pm:1.625 loncom/interface/lonprintout.pm:1.626
--- loncom/interface/lonprintout.pm:1.625	Sat Dec  8 20:10:26 2012
+++ loncom/interface/lonprintout.pm	Mon Dec 10 01:09:06 2012
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.625 2012/12/08 20:10:26 raeburn Exp $
+# $Id: lonprintout.pm,v 1.626 2012/12/10 01:09:06 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -705,11 +705,14 @@
 #  to only those that are in the original set selcted to be printed.
 #
 # Parameters:
-#   $helper - The helper we need $helper->{'VARS'}->{'symb'}
-#            to construct the navmap and the iteration.
-#   $seq   - The original set of resources to print 
+#   $map - The URL of the folder being printed.
+#          Used to determine which startResource and finishResource
+#          to use when using the navmap's getIterator method.
+#   $seq   - The original set of resources to print.
 #            (really an array of resource names (array of symb's).
 #   $who   - Student/domain for whome the sequence will be generated.
+#   $code  - CODE being printed when printing Problems/Resources
+#            from folder for CODEd assignments
 #
 # Implicit inputs:
 #   $
@@ -718,34 +721,35 @@
 #   print_resources.
 # 
 sub master_seq_to_person_seq {
-    my ($helper, $seq, $who, $code) = @_;
+    my ($map, $seq, $who, $code) = @_;
 
 
     my ($username, $userdomain, $usersection) = split(/:/, $who);
 
-
     # Toss the sequence up into a hash so that we have O(1) lookup time.
     # on the items that come out of the user's list of resources.
     #
-    
+
     my %seq_hash = map {$_  => 1} @$seq;
     my @output_seq;
     
-    my ($map, $id, $url) = &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'});
     my $navmap           = Apache::lonnavmaps::navmap->new($username, $userdomain,
                                                            $code);
-    my $iterator         = $navmap->getIterator($navmap->firstResource(),
-						$navmap->finishResource(),
-						{}, 1);
-    my %nonResourceItems = (
-	$iterator->BEGIN_MAP    => 1,
-	$iterator->BEGIN_BRANCH => 1,
-	$iterator->END_BRANCH   => 1,
-	$iterator->END_MAP      => 1,
-	$iterator->FORWARD      => 1,
-	$iterator->BACKWARD     => 1
+    my ($start,$finish);
 
-    );		# These items are not resources but appear in the midst of iteration.
+    if ($map) {
+        my $mapres = $navmap->getResourceByUrl($map);
+        if ($mapres->is_map()) {
+            $start = $mapres->map_start();
+            $finish = $mapres->map_finish();
+        }
+    }
+    unless ($start && $finish) {
+        $start = $navmap->firstResource();
+        $finish = $navmap->finishResource();
+    }
+
+    my $iterator         = $navmap->getIterator($start,$finish,{},1);
 
     #  Iterate on the resource..select the items that are randomly selected
     #  and that are in the seq_has.  Presumably the iterator will take care
@@ -757,15 +761,14 @@
 	#  Only process resources..that are not removed by randomout...
 	#  and are selected for printint as well.
 	#
-     
-	if (! exists $nonResourceItems{$curres} && ! $curres->randomout()) {
-	    my $symb = $curres->symb();
-	    if (exists $seq_hash{$symb}) {
-		push(@output_seq, $symb);
+
+        if (ref($curres) && ! $curres->randomout()) {
+            my $currsymb = $curres->symb();
+            if (exists($seq_hash{$currsymb})) {
+                push(@output_seq, $currsymb);
 	    }
 	}
     }
-   				
 
     return \@output_seq;		# for now.
     
@@ -3145,6 +3148,12 @@
 	 }
 	 my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
 
+         my $map;
+         if ($helper->{VARS}->{'symb'}) {
+             ($map, my $id, my $resource) =
+                 &Apache::lonnet::decode_symb($helper->{VARS}->{'symb'});
+         }
+
 	 #loop over students
 
  	 my $flag_latex_header_remove = 'NO';
@@ -3179,7 +3188,8 @@
 	     } else {
 		 $i=int($student_counter/$helper->{'VARS'}{'NUMBER_TO_PRINT'});
 	     }
-	     my $actual_seq = master_seq_to_person_seq($helper, \@master_seq, $person);
+	     my $actual_seq = master_seq_to_person_seq($map, \@master_seq,
+                                                       $person);
 	     my ($output,$fullname, $printed)=&print_resources($r,$helper,
 						     $person,$type,
 						     \%moreenv,  $actual_seq,
@@ -3221,16 +3231,16 @@
                  }
 	     }
 	 }
-         my ($randomorder,$randompick);
+         my ($randomorder,$randompick,$map);
          if ($helper->{VARS}{'symb'}) {
+             ($map, my $id, my $resource) =
+                 &Apache::lonnet::decode_symb($helper->{VARS}{'symb'});
              my $navmap = Apache::lonnavmaps::navmap->new();
              if (defined($navmap)) {
-                 my ($map,$id,$resource) = 
-                     &Apache::lonnet::decode_symb($helper->{VARS}{'symb'});
                  if ($map) {
-                     my $res = $navmap->getResourceByUrl($map);
-                     $randomorder = $res->randomorder();
-                     $randompick = $res->randompick();
+                     my $mapres = $navmap->getResourceByUrl($map);
+                     $randomorder = $mapres->randomorder();
+                     $randompick = $mapres->randompick();
                  }
              }
          }
@@ -3298,7 +3308,8 @@
              my $actual_seq = \@master_seq;
              if ($randomorder) {
                  $env{'form.CODE'} = $moreenv{'CODE'};
-                 $actual_seq = master_seq_to_person_seq($helper,\@master_seq,undef,
+                 $actual_seq = master_seq_to_person_seq($map, \@master_seq,
+                                                        undef,
                                                         $moreenv{'CODE'});
                  delete($env{'form.CODE'});
              }




More information about the LON-CAPA-cvs mailing list