Diff for /loncom/interface/printout.pl between versions 1.135 and 1.146.4.1

version 1.135, 2008/03/26 09:50:21 version 1.146.4.1, 2010/08/26 08:32:58
Line 45  use strict; Line 45  use strict;
   
 my $busy_wait_timeout = 30;   my $busy_wait_timeout = 30; 
   
   
   my $debugging = 0;
   
 sub debug {  sub debug {
     my ($text) = @_;      if ($debugging) {
     print "$text <br />\n";   my ($text) = @_;
    print "$text <br />\n";
       }
 }  }
   
 #   Determine if a user is operating as a student for this course/domain.  #   Determine if a user is operating as a student for this course/domain.
Line 118  sub send_error_mail { Line 123  sub send_error_mail {
   
  if (&is_student()) {   if (&is_student()) {
     # build the subject and message body:      # build the subject and message body:
     # print "sending message to course coordinators.<br />";      &debug("sending message to course coordinators.");
   
     # Todo: Convert badurl into a url from file path:      # Todo: Convert badurl into a url from file path:
   
Line 137  sub send_error_mail { Line 142  sub send_error_mail {
     }      }
     my (undef, %receivers) = &Apache::lonmsg::decide_receiver(undef, 0,      my (undef, %receivers) = &Apache::lonmsg::decide_receiver(undef, 0,
       1,1,1);        1,1,1);
     # print "<br /> sending...section:  $env{'request.course.sec'}";      &debug("sending...section:  $env{'request.course.sec'}");
     foreach my $dest (keys %receivers) {      foreach my $dest (keys %receivers) {
  # print "<br /> dest is $dest";   &debug("dest is $dest");
  my @destinfo = split(/:/,$dest);   my @destinfo = split(/:/,$dest);
  my $user = $destinfo[0];   my $user = $destinfo[0];
  my $dom  = $destinfo[1];   my $dom  = $destinfo[1];
Line 166  Your cookie information is incorrect. Line 171  Your cookie information is incorrect.
 </body>  </body>
 </html>  </html>
 END  END
     return;      exit;
 }  }
   
 my %perlvar=%{&LONCAPA::Configuration::read_conf('loncapa.conf')};  my %perlvar=%{&LONCAPA::Configuration::read_conf('loncapa.conf')};
 &Apache::lonlocal::get_language_handle();  &Apache::lonlocal::get_language_handle();
 &Apache::loncommon::content_type(undef,'text/html');  &Apache::loncommon::content_type(undef,'text/html');
 $env{'request.noversionuri'} = '/cgi-bin/printout.pl';  $env{'request.noversionuri'} = '/cgi-bin/printout.pl';
 print(&Apache::loncommon::start_page('Creating PDF'));  # Breadcrumbs
   #FIXME: Choose better/different breadcrumbs?!? Links?
   my $brcrum = [{'href' => '',
                  'text' => 'Helper'}, #FIXME: Different origin possible than print out helper?
                 {'href' => '',
                  'text' => 'Preparing Printout'},
                 {'href' => '',
                  'text' => 'Creating PDF'}];
   print(&Apache::loncommon::start_page('Creating PDF',
                                        undef,
                                        {'bread_crumbs' => $brcrum,}));
   
 my $identifier = $ENV{'QUERY_STRING'};  my $identifier = $ENV{'QUERY_STRING'};
 my $texfile = $env{'cgi.'.$identifier.'.file'};  my $texfile = $env{'cgi.'.$identifier.'.file'};
Line 211  $duefile =~ s/^(.*_printout)_\d+_\d+_\d+ Line 226  $duefile =~ s/^(.*_printout)_\d+_\d+_\d+
 #   it contains the names of the files that need to be converted, one per line.  #   it contains the names of the files that need to be converted, one per line.
 #  #
   
   &debug("Figure file is $figfile");
   
 if (-e $figfile) {  if (-e $figfile) {
     # print "$figfile exists\n";      &debug( "Figure file exists");
       &debug("$figfile exists");
     my %done_conversion;      my %done_conversion;
     my $temporary_file=IO::File->new($figfile) || die "Couldn't open fig file $figfile for reading: $!\n";      my $temporary_file=IO::File->new($figfile) || die "Couldn't open fig file $figfile for reading: $!\n";
     my @content_of_file = <$temporary_file>;      my @content_of_file = <$temporary_file>;
Line 223  if (-e $figfile) { Line 241  if (-e $figfile) {
     print('<br />');      print('<br />');
     foreach my $not_eps (@content_of_file) {      foreach my $not_eps (@content_of_file) {
  chomp($not_eps);   chomp($not_eps);
    &debug( "Being asked to convert $not_eps");
  if ($not_eps ne '') {   if ($not_eps ne '') {
     $not_eps=~s|\/\.\/|\/|g;      $not_eps=~s|\/\.\/|\/|g;
     if (!$done_conversion{$not_eps}) { #  Only convert multiple includes once.      if (!$done_conversion{$not_eps}) { #  Only convert multiple includes once.
Line 264  my $ind=-1; Line 283  my $ind=-1;
   
 my %prog_state;  my %prog_state;
 if ($advanced_role) {   if ($advanced_role) { 
     %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Print Status','Class Print Status',$number_of_files,'inline','80');       %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Print Status',&mt('Class Print Status'),$number_of_files,'inline','80'); 
 }  }
 print "<br />";  print "<br />";
 my $num_files = @texfile; # How does this differ from $number_of_files , can that be 0?  my $num_files = @texfile; # How does this differ from $number_of_files , can that be 0?
Line 403  foreach $texfile (@texfile) { Line 422  foreach $texfile (@texfile) {
   my $papera=$paper;    my $papera=$paper;
   if ($papera eq 'letter') {$papera='';}    if ($papera eq 'letter') {$papera='';}
   if ($papera ne '') {$papera='-t'.$papera;}    if ($papera ne '') {$papera='-t'.$papera;}
   my $comma = "dvips $papera -Ppdf -G0 -o $new_name_file";    my $extra_ps_header = $perlvar{'lonLib'} .'/includepsheader.ps';
     my $comma = "dvips $papera -h $extra_ps_header -Ppdf -G0 -o  $new_name_file";
   &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",    &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
      "for $status_statement now Converting to PS",       "for $status_statement now Converting to PS",
      \%prog_state,$new_name_file);       \%prog_state,$new_name_file);
Line 459  foreach $texfile (@texfile) { Line 479  foreach $texfile (@texfile) {
       $papera=~s/t/p/;        $papera=~s/t/p/;
       if ($laystyle eq 'album' and $numberofcolumns eq '2') {        if ($laystyle eq 'album' and $numberofcolumns eq '2') {
   $comma = "psnup $papera -2 -s1.0 $new_name_file";    $comma = "psnup $papera -2 -s1.0 $new_name_file";
     &debug("PSNUP command: $comma");
   &busy_wait_command("$comma $tempo_file 1>/dev/null 2>/dev/null",    &busy_wait_command("$comma $tempo_file 1>/dev/null 2>/dev/null",
      "for $status_statement now Modifying PS layout",       "for $status_statement now Modifying PS layout",
      \%prog_state,$tempo_file);       \%prog_state,$tempo_file);
       } elsif ($laystyle eq 'book' and $numberofcolumns eq '2') {        } elsif ($laystyle eq 'book' and $numberofcolumns eq '2') {
   $comma = 'pstops '.$papera.' "2:0+1(0.48w,0)"';    $comma = 'pstops '.$papera.' "2:0+1(0.48w,0)" '.$new_name_file;
   &busy_wait_command("$comma $new_name_file $tempo_file 1>/dev/null 2>/dev/null",    &debug("PSTOPS command: $comma ");
     &busy_wait_command("$comma $tempo_file 1>/dev/null 2>/dev/null",
      "for $status_statement now Modifying PS layout",       "for $status_statement now Modifying PS layout",
      \%prog_state,$tempo_file);        \%prog_state,$tempo_file); 
       } else {        } else {
Line 491  foreach $texfile (@texfile) { Line 513  foreach $texfile (@texfile) {
   close(FFHS);    close(FFHS);
   $ps_file=$new_ps_file;      $ps_file=$new_ps_file;  
       }        }
       &busy_wait_command("ps2pdf $ps_file $pdf_file 1>/dev/null 2>/dev/null",        &busy_wait_command("ps2pdf13 $ps_file $pdf_file 1>/dev/null 2>/dev/null",
  "for $status_statement now Converting PS to PDF",   "for $status_statement now Converting PS to PDF",
  \%prog_state,$pdf_file);   \%prog_state,$pdf_file);
           
Line 594  sub busy_wait_command { Line 616  sub busy_wait_command {
 # various bits and pieces that control how the latex file is processed:  # various bits and pieces that control how the latex file is processed:
 # LaTeX is run as many times a needed to make this all happen... this may  # LaTeX is run as many times a needed to make this all happen... this may
 # result in several runs of LaTeX that just are errors if the LaTeX is  # result in several runs of LaTeX that just are errors if the LaTeX is
 # bad, butthe printing subsystem is _supposed_ to not do that.  # bad, but the printing subsystem is _supposed_ to not do that.
 #  #
 # Parameters:  # Parameters:
 #   name_file        - Name of the LaTeX file to process.  #   name_file        - Name of the LaTeX file to process.
Line 845  sub create_missing_fonts { Line 867  sub create_missing_fonts {
 #  #
 sub convert_figure {  sub convert_figure {
     my ($not_eps) = @_;      my ($not_eps) = @_;
       &debug("in convert_figure");
   
     my $status_statement='EPS picture for '.$not_eps;      my $status_statement='EPS picture for '.$not_eps;
     my $eps_f = $not_eps;      my $eps_f = $not_eps;
Line 888  sub convert_figure { Line 911  sub convert_figure {
     &Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state,      &Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state,
   'Converting to EPS '.$prettyname);    'Converting to EPS '.$prettyname);
  }   }
  system("convert $not_eps $eps_f");   #
    #  If the file is a PDF, need to use pdftops to convert it to a ps file.
    #  otherwise use imagemagik:
    #
    if($not_eps =~/\.(pdf|PDF)$/) {
   
       #
       # For whatever reason, pure postscript conversions have to be
       # in the same dir as the base file:
       #
       $eps_f = &basename($eps_f);
       $eps_f = $perlvar{'lonPrtDir'}.'/'.$eps_f;
   
       &debug("Converting pdf $not_eps to postscript: $eps_f");
       system("pdftops $not_eps $eps_f");
    } else {
       system("convert $not_eps $eps_f");
    }
   
  if (not -e $eps_f) {   if (not -e $eps_f) {
     # converting an animated gif creates either:      # converting an animated gif creates either:
Line 966  sub analyze_logfile { Line 1006  sub analyze_logfile {
       length($badtext) - $whereitbegins - 48);        length($badtext) - $whereitbegins - 48);
  # print "<br />failing resourcename: $badresource<br />";   # print "<br />failing resourcename: $badresource<br />";
     }      }
  }          }
   
  # Guys with privileged roles get a more detailed error output:   # Guys with privileged roles get a more detailed error output:
   
  if ($advanced_role) {     if ($advanced_role) {  
     #LaTeX failed to parse tex file       #LaTeX failed to parse tex file 
     print "<h2>LaTeX could not successfully parse your tex file.</h2>";      print "<h2>".&mt('LaTeX could not successfully parse your TeX file.')."</h2>";
     print "It probably has errors in it.<br />";      print &mt('It probably has errors in it.')."<br />";
     print "With very high probability this error occured in ".$badtext."<br /><br />";      if ($badtext) {
     print "Here are the error messages in the LaTeX log file<br /><pre>";                  print &mt('With very high probability this error occured in [_1].',$badtext)
                        ."<br /><br />";
               }
       print &mt('Here are the error messages in the LaTeX log file:')
                    ."<br /><pre>";
           
     my $sygnal = 0;      my $sygnal = 0;
     for (my $i=0;$i<=$#content_of_file;$i++) {      for (my $i=0;$i<=$#content_of_file;$i++) {
Line 991  sub analyze_logfile { Line 1035  sub analyze_logfile {
     }      }
     print "</pre>\n";      print "</pre>\n";
     # print "<br /> Advanced role <br />";      # print "<br /> Advanced role <br />";
     print "<b><big>The link to ";  
     $logfilename=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};      $logfilename=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
     print "<a href=\"$logfilename\">Your log file </a></big></b>";      print "<b><big>"
     print "\n";                   .&mt('The link to [_1]Your log file[_2]','<a href="'.$logfilename.'">','</a>')
            ."</big></b>\n";
     #link to original LaTeX file      #link to original LaTeX file
     my $tex_temporary_file=IO::File->new($texfile) || die "Couldn't open tex file $texfile for reading: $!\n";      my $tex_temporary_file=IO::File->new($texfile) || die "Couldn't open tex file $texfile for reading: $!\n";
     my @tex_content_of_file = <$tex_temporary_file>;      my @tex_content_of_file = <$tex_temporary_file>;
Line 1004  sub analyze_logfile { Line 1048  sub analyze_logfile {
     $tex_temporary_file = IO::File->new('>'.$texfile);       $tex_temporary_file = IO::File->new('>'.$texfile); 
     print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";      print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";
     print "<br /><br />";      print "<br /><br />";
     print "<b><big>The link to ";  
     $texfile=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};      $texfile=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
     print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";      print "<b><big>"
     print "\n";                   .&mt('The link to [_1]Your original LaTeX file[_2]','<a href="'.$texfile.'">','</a>')
     my $help_text = &Apache::loncommon::help_open_topic("Print_Resource", "Help on printing");           ."</big></b><br /><br />\n";
       my $help_text = &Apache::loncommon::help_open_topic("Print_Resource", &mt('Help on printing'));
     print ("$help_text");      print ("$help_text");
   
     # Students on the other hand get a minimal error message, since they won't      # Students on the other hand get a minimal error message, since they won't
Line 1021  sub analyze_logfile { Line 1065  sub analyze_logfile {
     #    $name_file     - is the name of the LaTeX file.      #    $name_file     - is the name of the LaTeX file.
     #    $identifier    - is the unique LaTeX identifier.l      #    $identifier    - is the unique LaTeX identifier.l
           
     print "<br />There are errors in $badtext";              print '<p class="LC_error">';
     print "<br />These errors prevent this resource from printing correctly";      if ($badtext) {
                   print &mt('There are errors in [_1].',$badtext);
               } else {
                   print &mt('There are errors.');
               }
               print '</p>'
                    .&mt('These errors prevent this resource from printing correctly.');
   
     my $tex_handle = IO::File->new($texfile);      my $tex_handle = IO::File->new($texfile);
     my @tex_contents = <$tex_handle>;      my @tex_contents = <$tex_handle>;
     &send_error_mail($identifier, $badresource, $body_log_file, \@tex_contents);      &send_error_mail($identifier, $badresource, $body_log_file, \@tex_contents);
     print "<br />A message has been sent to the instructor describing this failure<br />";      print "<p>"
     my $help_text = &Apache::loncommon::help_open_topic("Print_Resource", "Help on printing");                   .&mt('A message has been sent to the instructor describing this failure.')
                    ."</p>";
       my $help_text = &Apache::loncommon::help_open_topic("Print_Resource", &mt('Help on printing'));
     print  ("$help_text");      print  ("$help_text");
           
   }    }
Line 1044  sub analyze_logfile { Line 1097  sub analyze_logfile {
   
     } elsif ($body_log_file=~m/<inserted text>/) {      } elsif ($body_log_file=~m/<inserted text>/) {
  my $whereitbegins = index $body_log_file,'<inserted text>';   my $whereitbegins = index $body_log_file,'<inserted text>';
  print "You are running LaTeX in <b>batch mode</b>.";   print &mt('You are running LaTeX in [_1]batch mode[_2].','<b>','</b>');
  while ($whereitbegins != -1) {   while ($whereitbegins != -1) {
     my $tempobegin=$whereitbegins;      my $tempobegin=$whereitbegins;
     $whereitbegins = rindex $body_log_file,'STAMPOFPASSEDRESOURCESTART',$whereitbegins;      $whereitbegins = rindex $body_log_file,'STAMPOFPASSEDRESOURCESTART',$whereitbegins;
     my $whereitends = index $body_log_file,'STAMPOFPASSEDRESOURCEEND',$whereitbegins;      my $whereitends = index $body_log_file,'STAMPOFPASSEDRESOURCEEND',$whereitbegins;
     print "<br />It has found an error in".substr($body_log_file,$whereitbegins+26,$whereitends-$whereitbegins-26)." <br /> and corrected it.\n";      print "<br />"
     print "Usually this correction is valid but you probably need to check the indicated resource one more time and implement neccessary corrections by yourself.\n";                   .&mt('It has found an error in [_1][_2]and corrected it.',substr($body_log_file,$whereitbegins+26,$whereitends-$whereitbegins-26),"<br />")."\n";
       print &mt('Usually this correction is valid but you probably need to check the indicated resource one more time and implement neccessary corrections by yourself.')."\n";
     $whereitbegins = index $body_log_file,'<inserted text>',$tempobegin+10;      $whereitbegins = index $body_log_file,'<inserted text>',$tempobegin+10;
  }   }
   
  if ($advanced_role) {     if ($advanced_role) {  
     print "<br /><br />";      print "<br /><br />";
     print "<b><big>The link to ";  
     $logfilename=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};      $logfilename=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
     print "<a href=\"$logfilename\">Your log file </a></big></b>";      print "<b><big>"
     print "\n";                   .&mt('The link to [_1]Your log file[_2]'
                        ,'<a href="'.$logfilename.'">','</a>')
            ."</big></b>\n";
     #link to original LaTeX file      #link to original LaTeX file
     my $tex_temporary_file=IO::File->new($texfile) || die "Couldn't open tex file $texfile for reading: $!\n";      my $tex_temporary_file=IO::File->new($texfile) || die "Couldn't open tex file $texfile for reading: $!\n";
     my @tex_content_of_file = <$tex_temporary_file>;      my @tex_content_of_file = <$tex_temporary_file>;
Line 1069  sub analyze_logfile { Line 1124  sub analyze_logfile {
     $tex_temporary_file = IO::File->new('>'.$texfile);       $tex_temporary_file = IO::File->new('>'.$texfile); 
     print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";      print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";
     print "<br /><br />";      print "<br /><br />";
     print "<b><big>The link to ";  
     $texfile=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};      $texfile=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool};
     print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";      print "<b><big>"
     print "\n";                    .&mt('The link to [_1]Your original LaTeX file[_2]','<a href="'.$texfile.'">','</a>');
       print "</big></b>\n";
  }   }
  return 1;   return 1;
     }      }

Removed from v.1.135  
changed lines
  Added in v.1.146.4.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>