--- loncom/interface/lonprintout.pm	2003/01/10 15:41:26	1.103
+++ loncom/interface/lonprintout.pm	2003/01/27 16:01:13	1.106
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.103 2003/01/10 15:41:26 sakharuk Exp $
+# $Id: lonprintout.pm,v 1.106 2003/01/27 16:01:13 sakharuk Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -159,11 +159,18 @@ sub sequence_content_menu {
     if ($sequence[0]=~/^uploaded/) {$primary_sequence = '/'.$sequence[0];} 
       else {$primary_sequence = '/res/'.$sequence[0];} 
     my @master_seq = &coming_from_hash($primary_sequence,$sequence[0]);
-    my @master_seq_view = sort @master_seq;
-    @master_seq = sort @master_seq;
-    for (my $i=0;$i<=$#master_seq_view;$i++) {
-	$master_seq_view[$i]=~/\/([^\/]+)$/;
-	$master_seq_view[$i]=$1;
+    my @titles_master_seq = &titles_coming_from_hash($primary_sequence,$sequence[0]);
+    foreach my $entity (@titles_master_seq) {$entity=~/^(.*)&&/; $entity=$1}
+    my @master_seq_view = @master_seq;
+    if (not $ENV{'request.role'}=~/^st\./) {
+      for (my $i=0;$i<=$#master_seq_view;$i++) {
+	 $master_seq_view[$i]=~/___\d+___(.+)$/;
+	 $master_seq_view[$i]='/'.$1;
+      }
+    } else {
+      for (my $i=0;$i<=$#master_seq_view;$i++) {
+	  $master_seq_view[$i]=' ';
+      }
     }
     $r->print(<<ENDMENUOUT1);
 <input type="hidden" name="url" value="$ENV{'form.url'}">
@@ -192,18 +199,19 @@ sub sequence_content_menu {
     }
 </script>
 <input type=button onClick="checkall()" value="Check All">&nbsp;
-<input type=button onClick="uncheckall()" value="Uncheck">
+<input type=button onClick="uncheckall()" value="Uncheck">&nbsp;
+<input type="submit" value="Submit">
 <p>
 ENDMENUOUT1
     my $inc=0; 
     for (my $i=0;$i<=$#master_seq_view;$i++) {
-      if ($key_to==1 && $master_seq_view[$i]=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
-	$r->print('<br /><input type=checkbox name="whatfile'.$inc.'" value="'.$master_seq[$i].'"> '."\n".
-                  $master_seq_view[$i]);
+      if ($key_to==1 && $master_seq[$i]=~/\.(problem|exam|quiz|assess|survey|form|library)$/) {
+	$r->print('<br /><input type=checkbox name="whatfile'.$inc.'" value="'.$master_seq[$i].'"> '."\n".'<b>'.
+                  $titles_master_seq[$i].'</b>&nbsp;&nbsp;&nbsp;<small>'.$master_seq_view[$i].'</small>');
         $inc++;
-    } elsif ($key_to==0 && $master_seq_view[$i]=~/\.(problem|exam|quiz|assess|survey|form|library|xml|htm|html|page)$/) {
-	$r->print('<br /><input type=checkbox name="whatfile'.$inc.'" value="'.$master_seq[$i].'"> '.
-                  $master_seq_view[$i]);
+    } elsif ($key_to==0 && $master_seq[$i]=~/\.(problem|exam|quiz|assess|survey|form|library|xml|htm|html|page)$/) {
+	$r->print('<br /><input type=checkbox name="whatfile'.$inc.'" value="'.$master_seq[$i].'"> '."\n".'<b>'.
+                  $titles_master_seq[$i].'</b>&nbsp;&nbsp;&nbsp;<small>'.$master_seq_view[$i].'</small>');
         $inc++;
       }
     }
@@ -445,8 +453,11 @@ ENDPART
     my $number_of_columns = 1; #used only for pages to determine the width of the cell
     my $selectionmade = '';
     my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$layout,$numberofcolumns);
-    my $LaTeXwidth;
- 
+    if ($numberofcolumns == 1) {
+	$textwidth=$ENV{'form.width'};
+	$textheight=$ENV{'form.height'};
+    }
+    my $LaTeXwidth; 
     if ($textwidth=~/(\d+\s*cm)/) {
 	$LaTeXwidth = $1*10;
     } elsif ($textwidth=~/(\d+\s*mm)/) {
@@ -493,7 +504,7 @@ ENDPART
 	my $flag_latex_header_remove = 'NO';
 	my $flag_page_in_sequence = 'NO';
 	for (my $i=0;$i<=$#master_seq;$i++) {
-           my ($urlp,$symb) = split /&&/, $master_seq[$i];		
+           my ($urlp,$symb) = split /&&/, $master_seq[$i];
 	    if ($choice eq 'Standard LaTeX output for the primary sequence') {
               $selectionmade = 2;
 	    } elsif ($choice eq 'Standard LaTeX output for whole primary sequence') {
@@ -526,14 +537,20 @@ ENDPART
     }  elsif ($choice eq 'Standard LaTeX output for the top level sequence') {
         # where is the main sequence of the course?
 	$selectionmade = 4;
-	my $main_seq = '/res/'.$ENV{'request.course.uri'};
+	my $main_seq;
+	if ($ENV{'request.course.uri'}=~/\/?uploaded\//) {
+	    $main_seq = $ENV{'request.course.uri'};
+	} else {
+	    $main_seq = '/res/'.$ENV{'request.course.uri'};
+	}
 	my @file_seq = &coming_from_hash_whole($main_seq);
 	my $flag_latex_header_remove = 'NO';
         #-- produce an output string
 	for (my $i=0;$i<=$#file_seq;$i++) {
-            my ($urlp,$symb) = split /&&/, $file_seq[$i];
-	    $urlp=~s/\/home\/httpd\/html//;	    
-            if ($urlp=~m/\.(problem|exam|quiz|assess|survey|form|library)/) {
+	   if (not $file_seq[$i]=~/^&&/) {
+	     my ($urlp,$symb) = split /&&/, $file_seq[$i];
+	     $urlp=~s/\/home\/httpd\/html//;	    
+	     if ($urlp=~m/\.(problem|exam|quiz|assess|survey|form|library)/) {
 		my %moreenv;
 		$moreenv{'form.grade_target'}='tex';
 		$moreenv{'form.textwidth'}=$LaTeXwidth;
@@ -547,7 +564,8 @@ ENDPART
 		}
 		$result .= $texversion;  
 		$flag_latex_header_remove = 'YES';
-	    }		
+	     }		
+	   }
 	}	    
 	$result .= '\end{document}';
     } elsif ($choice eq 'All class print') { 
@@ -698,10 +716,11 @@ sub coming_from_hash_whole {
 	if ($hash{'src_'.$current_resource}=~/\.sequence$/) {
 	    push @resourcelist,&coming_from_hash_whole($hash{'src_'.$current_resource});
 	} else {
-            $mainsequence =~ /\/res\/(.*)$/;
-	    my $presymb = $1;
+	    my $presymb; 
+	    if ($mainsequence =~ /\/res\/(.*)$/) {$presymb = $1;} 
+              elsif ($mainsequence =~ /\/?(uploaded\/(.*))$/) {$presymb = $1;} 
 	    my $rid = $hash{'ids_'.$hash{'src_'.$current_resource}};
-            if ($rid=~/,/) {
+	    if ($rid=~/,/) {
 		my @rid = split /,/, $rid;
 		foreach my $rid_element (@rid) {
 		    if ($rid_element =~ m/^$mapid\.(\d*)/) {
@@ -710,7 +729,7 @@ sub coming_from_hash_whole {
 		    }
 		}
 	    } else {
-		$rid =~ m/^$mapid\.(\d*)/;
+	        $rid =~ m/^$mapid\.(\d*)/;
                 $rid = $1;  
 	    }
 	    $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;
@@ -787,6 +806,69 @@ sub coming_from_hash {
 }
 
 
+sub titles_coming_from_hash {
+
+    my ($mainsequence,$symb) = @_;
+    my @resourcelist = ();
+    my $mapid = $hash{'map_pc_'.$mainsequence};
+    my $mapstart = $hash{'map_start_'.$mainsequence};
+    my $mapfinish = $hash{'map_finish_'.$mainsequence};
+    my ($presymb);
+    if ($symb) {
+	($presymb)=split(/___/,$symb);
+    } else {
+	$presymb=$mainsequence;
+	$presymb=~s|^/res/||;
+    }
+    $presymb = $presymb.'___';
+    my $current_resource = $mapstart;
+    while ($current_resource ne $mapfinish) {
+	if (not $hash{'src_'.$current_resource}=~/\.sequence$/) {
+	    my $rid = $hash{'ids_'.$hash{'src_'.$current_resource}};
+            if ($rid=~/,/) {
+		my @rid = split /,/, $rid;
+		foreach my $rid_element (@rid) {
+		    if ($rid_element =~ m/^$mapid\.(\d*)/) {
+			$rid = $1; 
+			last;
+		    }
+		}
+	    } else {
+		$rid =~ m/^$mapid\.(\d*)/;
+                $rid = $1;  
+	    }
+	    $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;
+	    $symb = $presymb.$rid.'___'.$1;
+	    push @resourcelist,$hash{'title_'.$current_resource}.'&&'.$symb;
+	} else {
+	    push @resourcelist,&titles_coming_from_hash($hash{'src_'.$current_resource});
+	}
+	$current_resource = $hash{'goesto_'.$hash{'to_'.$current_resource}};
+    }
+    #needs if final resource in the map (type="finish") contains something
+    if (not $hash{'src_'.$current_resource}=~/\.sequence$/) {
+		    my $rid = $hash{'ids_'.$hash{'src_'.$current_resource}};
+            if ($rid=~/,/) {
+		my @rid = split /,/, $rid;
+		foreach my $rid_element (@rid) {
+		    if ($rid_element =~ m/^$mapid\.(\d*)/) {
+			$rid = $1; 
+			last;
+		    }
+		}
+	    } else {
+		$rid =~ m/^$mapid\.(\d*)/;
+                $rid = $1;  
+	    }
+	    $hash{'src_'.$current_resource} =~ m/\/res\/(.*)$/;
+	    $symb = $presymb.$rid.'___'.$1;
+	push @resourcelist,$hash{'title_'.$current_resource}.'&&'.$symb;
+    } else {
+	push @resourcelist,&titles_coming_from_hash($hash{'src_'.$current_resource});
+    }
+    return @resourcelist;
+}
+
 sub latex_header_footer_remove {
     my $text = shift;
     $text =~ s/\\end{document}//;
@@ -1189,9 +1271,14 @@ sub character_chart {
 
 
 sub page_format_transformation {
-	my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment) = @_; 
+    my ($papersize,$layout,$numberofcolumns,$choice,$text,$assignment) = @_; 
+    my ($textwidth,$textheight,$oddoffset,$evenoffset);
 	$assignment=~s/_/ /g;
-	my ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$layout,$numberofcolumns);
+        if ($numberofcolumns != 1) {
+          ($textwidth,$textheight,$oddoffset,$evenoffset) = &page_format($papersize,$layout,$numberofcolumns);
+	} else {
+	  ($textwidth,$textheight,$oddoffset,$evenoffset) = ($ENV{'form.width'},$ENV{'form.height'},$ENV{'form.leftmargin'},$ENV{'form.leftmargin'});
+	}
 	my $courseidinfo = $ENV{'course.'.$ENV{'request.course.id'}.'.description'};	
 	if ($layout eq 'CBI') {
 	    $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}\\setlength{\\topmargin}{200pt}\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\parindent}{20pt}\\setlength{\\marginparwidth}{90pt}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm} \\begin{document}\\setcounter{page}{1}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$ENV{'environment.firstname'} $ENV{'environment.lastname'}}} \\hfill  $courseidinfo} \\vskip 5 mm /;