Diff for /loncom/interface/lonprintout.pm between versions 1.519.2.4 and 1.520

version 1.519.2.4, 2008/04/04 16:46:23 version 1.520, 2008/03/12 02:45:07
Line 38  use Apache::edit; Line 38  use Apache::edit;
 use Apache::File();  use Apache::File();
 use Apache::lonnavmaps;  use Apache::lonnavmaps;
 use Apache::admannotations;  use Apache::admannotations;
 use Apache::lonenc;  
 use HTTP::Response;  use HTTP::Response;
   
 use LONCAPA::map();  use LONCAPA::map();
Line 116  sub annotate { Line 115  sub annotate {
 #                      the number of times requested by the caller.  #                      the number of times requested by the caller.
 #                      If we still have a proble, no text is appended to the  #                      If we still have a proble, no text is appended to the
 #                      output and we set some global variables.  #                      output and we set some global variables.
 #                      to indicate to the caller an SSI error occurred.    #                      to indicate to the caller an SSI error occured.  
 #                      All of this is supposed to deal with the issues described  #                      All of this is supposed to deal with the issues described
 #                      in LonCAPA BZ 5631 see:  #                      in LonCAPA BZ 5631 see:
 #                      http://bugs.lon-capa.org/show_bug.cgi?id=5631  #                      http://bugs.lon-capa.org/show_bug.cgi?id=5631
Line 132  sub annotate { Line 131  sub annotate {
 #   On success, returns the rendered resource identified by the resource parameter.  #   On success, returns the rendered resource identified by the resource parameter.
 # Side Effects:  # Side Effects:
 #   The following global variables can be set:  #   The following global variables can be set:
 #    ssi_error                - If an unrecoverable error occurred this becomes true.  #    ssi_error                - If an unrecoverable error occured this becomes true.
 #                               It is up to the caller to initialize this to false  #                               It is up to the caller to initialize this to false
 #                               if desired.  #                               if desired.
 #    ssi_last_error_resource  - If an unrecoverable error occurred, this is the value  #    ssi_last_error_resource  - If an unrecoverable error occured, this is the value
 #                               of the resource that could not be rendered by the ssi  #                               of the resource that could not be rendered by the ssi
 #                               call.  #                               call.
 #    ssi_last_error           - The error string fetched from the ssi response  #    ssi_last_error           - The error string fetched from the ssi response
Line 150  sub ssi_with_retries { Line 149  sub ssi_with_retries {
  $ssi_error               = 1;   $ssi_error               = 1;
  $ssi_last_error_resource = $resource;   $ssi_last_error_resource = $resource;
  $ssi_last_error          = $response->code . " " . $response->message;   $ssi_last_error          = $response->code . " " . $response->message;
  $content='\section*{!!! An error occurred !!!}';  
  &Apache::lonnet::logthis("Error in SSI resource: $resource Error: $ssi_last_error");   &Apache::lonnet::logthis("Error in SSI resource: $resource Error: $ssi_last_error");
     }      }
   
Line 158  sub ssi_with_retries { Line 157  sub ssi_with_retries {
   
 }  }
   
 sub get_student_view_with_retries {  
     my ($curresline,$retries,$username,$userdomain,$courseid,$target,$moreenv)=@_;  
     my ($content, $response) = &Apache::loncommon::get_student_view_with_retries($curresline,$retries,$username,$userdomain,$courseid,$target,$moreenv);  
     if (!$response->is_success) {  
         $ssi_error               = 1;  
         $ssi_last_error_resource = $curresline.' for user '.$username.':'.$userdomain;  
         $ssi_last_error          = $response->code . " " . $response->message;  
         $content='\section*{!!! An error occurred !!!}';  
         &Apache::lonnet::logthis("Error in SSI (student view) resource: $curresline Error: $ssi_last_error User: $username:$userdomain");  
     }  
     return $content;  
 }  
   
 #  #
 #   printf_style_subst  item format_string repl  #   printf_style_subst  item format_string repl
 #    #  
Line 1487  ENDPART Line 1473  ENDPART
     }      }
           
     if ($helper->{'VARS'}->{'style_file'}=~/\w/) {      if ($helper->{'VARS'}->{'style_file'}=~/\w/) {
  &Apache::lonnet::appenv('construct.style' =>   &Apache::lonnet::appenv({'construct.style' =>
  $helper->{'VARS'}->{'style_file'});   $helper->{'VARS'}->{'style_file'}});
     } elsif ($env{'construct.style'}) {      } elsif ($env{'construct.style'}) {
  &Apache::lonnet::delenv('construct\\.style');   &Apache::lonnet::delenv('construct\\.style');
     }      }
Line 1531  ENDPART Line 1517  ENDPART
     $rndseed=$helper->{'VARS'}->{'curseed'};      $rndseed=$helper->{'VARS'}->{'curseed'};
  }   }
  $form{'rndseed'}=$rndseed;   $form{'rndseed'}=$rndseed;
  &Apache::lonnet::appenv(%moreenv);   &Apache::lonnet::appenv(\%moreenv);
   
  &Apache::lonxml::clear_problem_counter();   &Apache::lonxml::clear_problem_counter();
   
Line 1679  ENDPART Line 1665  ENDPART
  my $pbreakresources = keys %page_breaks;   my $pbreakresources = keys %page_breaks;
  for (my $i=0;$i<=$#master_seq;$i++) {   for (my $i=0;$i<=$#master_seq;$i++) {
   
             &Apache::lonenc::reset_enc();  
   
     # Note due to document structure, not allowed to put \newpage      # Note due to document structure, not allowed to put \newpage
     # prior to the first resource      # prior to the first resource
   
Line 1689  ENDPART Line 1673  ENDPART
     $result.="\\newpage\n";      $result.="\\newpage\n";
  }   }
     }      }
             my ($sequence,$middle_thingy,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);      my ($sequence,undef,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
     $urlp=&Apache::lonnet::clutter($urlp);      $urlp=&Apache::lonnet::clutter($urlp);
     $form{'symb'}=$master_seq[$i];      $form{'symb'}=$master_seq[$i];
   
     my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #title of the assignment which contains this problem      my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #title of the assignment which contains this problem
   
     if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;}      if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;}
     if ($i==0) {$prevassignment=$assignment;}      if ($i==0) {$prevassignment=$assignment;}
     my $texversion='';      my $texversion='';
Line 2001  ENDPART Line 1984  ENDPART
     $rndseed=$helper->{'VARS'}->{'curseed'};      $rndseed=$helper->{'VARS'}->{'curseed'};
  }   }
  for (my $i=0;$i<=$#list_of_files;$i++) {   for (my $i=0;$i<=$#list_of_files;$i++) {
   
             &Apache::lonenc::reset_enc();  
   
     my $urlp = $list_of_files[$i];      my $urlp = $list_of_files[$i];
     $urlp=~s|//|/|;      $urlp=~s|//|/|;
     if ($urlp=~/\//) {      if ($urlp=~/\//) {
Line 2102  ENDPART Line 2082  ENDPART
     # otherwise, we can write the tex file.      # otherwise, we can write the tex file.
     #      #
   
 #-- writing .tex file in prtspool       if ($ssi_error) {
     my $temp_file;   my $end_page = &Apache::loncommon::end_page();
     my $identifier = &Apache::loncommon::get_cgi_id();   $r->print(<<ERROR_END);
     my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex";  <br />
     if (!($#print_array>0)) {   <h2>An unrecoverable error occured:</h2>
         unless ($temp_file = Apache::File->new('>'.$filename)) {  <p>
     $r->log_error("Couldn't open $filename for output $!");    I was not able to render one of the print resources ($ssi_last_error_resource) 
     return SERVER_ERROR;   due to an unrecoverable error communicating with a server:
  }  <br />
  print $temp_file $result;  $ssi_last_error;
  my $begin=index($result,'\begin{document}',0);  <br />
  my $inc=substr($result,0,$begin+16);  </p>
   <p>
   I recommend that you try printing again later as this may mean the server was just 
   temporarily unavailable, or is down for maintenance.  If this error persists, then
   please contact your LonCAPA support folks for assistance and diagnosis. 
   <br />
   <br />
   We apologize for the inconvenience.
   </p>
   $end_page
   ERROR_END
     } else {      } else {
         my $begin=index($result,'\begin{document}',0);  
  my $inc=substr($result,0,$begin+16);  #-- writing .tex file in prtspool 
  for (my $i=0;$i<=$#print_array;$i++) {   my $temp_file;
     if ($i==0) {   my $identifier = &Apache::loncommon::get_cgi_id();
         $print_array[$i]=$result;   my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex";
     } else {   if (!($#print_array>0)) { 
         $print_array[$i].='\end{document}';      unless ($temp_file = Apache::File->new('>'.$filename)) {
         $print_array[$i] =    $r->log_error("Couldn't open $filename for output $!");
     &latex_corrections($number_of_columns,$print_array[$i],  
        $selectionmade,   
        $helper->{'VARS'}->{'ANSWER_TYPE'});  
       
  my $anobegin=index($print_array[$i],'\setcounter{page}',0);  
  substr($print_array[$i],0,$anobegin)='';  
  $print_array[$i]=$inc.$print_array[$i];  
     }  
     my $temp_file;  
     my $newfilename=$filename;  
     my $num=$i+1;  
     $newfilename =~s/\.tex$//;   
     $newfilename=sprintf("%s_%03d.tex",$newfilename, $num);  
     unless ($temp_file = Apache::File->new('>'.$newfilename)) {  
  $r->log_error("Couldn't open $newfilename for output $!");  
  return SERVER_ERROR;    return SERVER_ERROR; 
     }      }
     print $temp_file $print_array[$i];      print $temp_file $result;
  }      my $begin=index($result,'\begin{document}',0);
     }      my $inc=substr($result,0,$begin+16);
     my $student_names='';   } else {
     if ($#print_array>0) {      my $begin=index($result,'\begin{document}',0);
  for (my $i=0;$i<=$#print_array;$i++) {      my $inc=substr($result,0,$begin+16);
     $student_names.=$student_names[$i].'_ENDPERSON_';      for (my $i=0;$i<=$#print_array;$i++) {
    if ($i==0) {
       $print_array[$i]=$result;
    } else {
       $print_array[$i].='\end{document}';
       $print_array[$i] = 
    &latex_corrections($number_of_columns,$print_array[$i],
      $selectionmade, 
      $helper->{'VARS'}->{'ANSWER_TYPE'});
       
       my $anobegin=index($print_array[$i],'\setcounter{page}',0);
       substr($print_array[$i],0,$anobegin)='';
       $print_array[$i]=$inc.$print_array[$i];
    }
    my $temp_file;
    my $newfilename=$filename;
    my $num=$i+1;
    $newfilename =~s/\.tex$//; 
    $newfilename=sprintf("%s_%03d.tex",$newfilename, $num);
    unless ($temp_file = Apache::File->new('>'.$newfilename)) {
       $r->log_error("Couldn't open $newfilename for output $!");
       return SERVER_ERROR; 
    }
    print $temp_file $print_array[$i];
       }
       
  }   }
     } else {   my $student_names='';
  if ($#student_names>-1) {   if ($#print_array>0) {
     $student_names=$student_names[0].'_ENDPERSON_';      for (my $i=0;$i<=$#print_array;$i++) {
    $student_names.=$student_names[$i].'_ENDPERSON_';
       }
  } else {   } else {
     my $fullname = &get_name($env{'user.name'},$env{'user.domain'});      if ($#student_names>-1) {
     $student_names=join(':',$env{'user.name'},$env{'user.domain'},   $student_names=$student_names[0].'_ENDPERSON_';
         $env{'request.course.sec'},$fullname).      } else {
  '_ENDPERSON_'.'_END_';   my $fullname = &get_name($env{'user.name'},$env{'user.domain'});
    $student_names=join(':',$env{'user.name'},$env{'user.domain'},
       $env{'request.course.sec'},$fullname).
    '_ENDPERSON_'.'_END_';
       }
  }   }
     }  
   
     # logic for now is too complex to trace if this has been defined   # logic for now is too complex to trace if this has been defined
     #  yet.   #  yet.
     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};   my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};   my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     &Apache::lonnet::appenv('cgi.'.$identifier.'.file'   => $filename,   &Apache::lonnet::appenv({'cgi.'.$identifier.'.file'   => $filename,
     'cgi.'.$identifier.'.layout'  => $laystyle,   'cgi.'.$identifier.'.layout'  => $laystyle,
     'cgi.'.$identifier.'.numcol'  => $numberofcolumns,   'cgi.'.$identifier.'.numcol'  => $numberofcolumns,
     'cgi.'.$identifier.'.paper'  => $papersize,   'cgi.'.$identifier.'.paper'  => $papersize,
     'cgi.'.$identifier.'.selection' => $selectionmade,   'cgi.'.$identifier.'.selection' => $selectionmade,
     'cgi.'.$identifier.'.tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'},   'cgi.'.$identifier.'.tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'},
     'cgi.'.$identifier.'.tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'},   'cgi.'.$identifier.'.tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'},
     'cgi.'.$identifier.'.role' => $perm{'pav'},   'cgi.'.$identifier.'.role' => $perm{'pav'},
     'cgi.'.$identifier.'.numberoffiles' => $#print_array,   'cgi.'.$identifier.'.numberoffiles' => $#print_array,
     'cgi.'.$identifier.'.studentnames' => $student_names,   'cgi.'.$identifier.'.studentnames' => $student_names,
     'cgi.'.$identifier.'.backref' => $URLback,);   'cgi.'.$identifier.'.backref' => $URLback,});
     &Apache::lonnet::appenv("cgi.$identifier.user"    => $env{'user.name'},   &Apache::lonnet::appenv({"cgi.$identifier.user"    => $env{'user.name'},
     "cgi.$identifier.domain"  => $env{'user.domain'},   "cgi.$identifier.domain"  => $env{'user.domain'},
     "cgi.$identifier.courseid" => $cnum,    "cgi.$identifier.courseid" => $cnum, 
     "cgi.$identifier.coursedom" => $cdom,    "cgi.$identifier.coursedom" => $cdom, 
     "cgi.$identifier.resources" => $resources_printed);   "cgi.$identifier.resources" => $resources_printed});
     my $end_page = &Apache::loncommon::end_page();  
     my $continue_text = &mt('Continue');   my $end_page = &Apache::loncommon::end_page();
     # If there's been an unrecoverable SSI error, report it to the user  
     if ($ssi_error) {  
         my $helpurl = &Apache::loncommon::top_nav_help('Helpdesk');  
         $r->print('<br /><h2>'.&mt('An unrecoverable network error occurred:').'</h2><p>  '.  
                   &mt('At least one of the resources you chose to print could not be rendered due to an unrecoverable error when communicating with a server:').  
                   '<br />'.$ssi_last_error_resource.'<br />'.$ssi_last_error.  
                   '</p><p>'.&mt('You can continue using the link provided below, but make sure to carefully inspect your output file! The errors will be marked in the file.').'<br />'.  
                   &mt('You may be able to reprint the individual resources for which this error occurred, as the issue may be temporary.').  
                   '<br />'.&mt('If the error persists, please contact the [_1] for assistance.',$helpurl).'</p><p>'.  
                   &mt('We apologize for the inconvenience.').'</p>'.  
                   '<a href="/cgi-bin/printout.pl?'.$identifier.'">'.&mt('Continue').'</a>'.$end_page);  
     } else {  
  $r->print(<<FINALEND);   $r->print(<<FINALEND);
 <br />  <br />
 <meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$identifier" />  <meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$identifier" />
 <a href="/cgi-bin/printout.pl?$identifier">Continue</a>  <a href="/cgi-bin/printout.pl?$identifier">Continue</a>
 $end_page  $end_page
 FINALEND  FINALEND
     }                                       # endif ssi errors.    }                                       # endif ssi errors.
 }  }
   
   
Line 2272  sub print_resources { Line 2265  sub print_resources {
   
     &Apache::lonxml::remember_problem_counter();          &Apache::lonxml::remember_problem_counter();    
   
     my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);      my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
   
     if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||      if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
        ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {         ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
Line 2314  sub print_resources { Line 2307  sub print_resources {
     $current_output .= $rendered;          $current_output .= $rendered;    
  } elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {   } elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
     $printed .= $curresline.':';      $printed .= $curresline.':';
     my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);      my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
     if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {      if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
  my $url = &Apache::lonnet::clutter($res_url);   my $url = &Apache::lonnet::clutter($res_url);
  my $annotation = &annotate($url);   my $annotation = &annotate($url);

Removed from v.1.519.2.4  
changed lines
  Added in v.1.520


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