[LON-CAPA-cvs] cvs: loncom /interface printout.pl

foxr lon-capa-cvs@mail.lon-capa.org
Wed, 03 Aug 2005 10:34:06 -0000


foxr		Wed Aug  3 06:34:06 2005 EDT

  Modified files:              
    /loncom/interface	printout.pl 
  Log:
  Addressing Bug 4047:
  Give a bit more indication what's going on in both status and download
  when multiple files are created.  There are two cases that are handled
  more or less ok:
  - Multiple selected students:  The files are now created in the
    form (oldfilename_serialfirst-last.*  where first and last are
    the last names of the first and last students in the range.
    The download links for the  individual files show the name range as
    before.
  - Multiple anonymous students:  This had given only @ on the status line
    and for each of the download links. Now we present the name of the .tex
    file (not dir path, just name.tex) in the status window and for the
    individual download links as well.  
  
  
  
  
Index: loncom/interface/printout.pl
diff -u loncom/interface/printout.pl:1.87 loncom/interface/printout.pl:1.88
--- loncom/interface/printout.pl:1.87	Mon Jul 25 06:43:29 2005
+++ loncom/interface/printout.pl	Wed Aug  3 06:34:03 2005
@@ -28,6 +28,7 @@
 use lib '/home/httpd/lib/perl';
 use LONCAPA::loncgi;
 use File::Path;
+use File::Basename;
 use IO::File;
 use Image::Magick;
 use Apache::lonhtmlcommon;
@@ -273,6 +274,7 @@
 print "<a href=\"$backref\"><b>Return</b></a> to last resource.<br /><br />";
 if ($adv) { %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Print Status','Class Print Status',$number_of_files,'inline','80'); }
 print "<br />";
+my $num_files = @texfile;
 foreach $texfile (@texfile) {
   my $status_statement='';
   my $link_text='download PDF';
@@ -280,30 +282,57 @@
   my @stud_info=split(/_END_/,$names_pack[$ind]);
   my @tempo_array=split(/:/,$stud_info[0]);
   my $name;
+  my $name_range='';
   if ($tempo_array[3]) {
       $name=$tempo_array[3];
+      my @full_names = split(/,/,$name); # split last name from others...
+      $name_range = $full_names[0];
   } else {
       $name=$tempo_array[0].'@'.$tempo_array[1];
+      $name_range = $tempo_array[0];
+  }
+  if (($name ne "") && ($name ne '@') ) { # Could be printing codes...
+      $link_text='<b>'.$name.'</b>';
+      $status_statement.=$name;
   }
-  $link_text='<b>'.$name.'</b>';
-  $status_statement.=$name;
   if ($#stud_info>0) {
       @tempo_array=split(/:/,$stud_info[-1]);
       if ($tempo_array[3]) {
 	  $name=$tempo_array[3];
+	  my @full_names = split(/,/, $name);
+	  $name_range .= "-".$full_names[0];
       } else {
 	  $name=$tempo_array[0].'@'.$tempo_array[1];
+	  $name_range .= '-'.$tempo_array[0];
+      }
+      if (($name ne "") && ($name ne '@')) {
+	  $link_text.=' - <b>'.$name.'</b>';
+	  $status_statement.=' -  '.$name;
+  
       }
-      $link_text.=' - <b>'.$name.'</b>';
-      $status_statement.=' -  '.$name;
-  } 
+  }
+  if(($num_files > 1) && ($link_text eq 'download PDF')) { # Printing codes
+      $link_text = '<b>'.basename($texfile,'.tex').'.pdf</b>';
+      $status_statement .= basename($texfile);
+  }
+  $name_range =~ s/'//g;	# O'Neil -> ONeil e.g.
+  print "<br/>";
   if ($adv) { &Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state,'Creating PDF for '.$status_statement); }
+  #  This little piece of dirt puts username ranges into the original tex
+  #  Tex filename from which they'll propagate into the other filenames as well.
+  #
   if (-e $texfile) {
+      if (($name_range ne '') && ($num_files > 1)) {
+	  my $newtexfile = $texfile;
+	  $newtexfile    =~ s/\.tex/$name_range\.tex/;
+	  rename($texfile, $newtexfile);
+	  $texfile       = $newtexfile;
+      }
       $texfile =~ m/^(.*)\/([^\/]+)$/; 
       my $name_file = $2;
       my $path_file = $1.'/';
       chdir $path_file;
-      my $dvi_file= $name_file; $dvi_file =~ s/\.tex/\.dvi/;
+      my $dvi_file= $name_file; $dvi_file =~ s/\.tex/$name_range\.dvi/;
       &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",
 			 "for $status_statement now LaTeXing file",
 			 \%prog_state,$dvi_file);