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

raeburn lon-capa-cvs-allow@mail.lon-capa.org
Fri, 04 Apr 2008 16:46:25 -0000


This is a MIME encoded message

--raeburn1207327585
Content-Type: text/plain

raeburn		Fri Apr  4 12:46:25 2008 EDT

  Modified files:              (Branch: version_2_6_X)
    /loncom/interface	lonprintout.pm 
  Log:
  - backport 1.524, 1.525, 1.526, 1.528, 1.529 
  
  
--raeburn1207327585
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20080404124625.txt"

Index: loncom/interface/lonprintout.pm
diff -u loncom/interface/lonprintout.pm:1.519.2.3 loncom/interface/lonprintout.pm:1.519.2.4
--- loncom/interface/lonprintout.pm:1.519.2.3	Mon Mar 24 14:24:30 2008
+++ loncom/interface/lonprintout.pm	Fri Apr  4 12:46:23 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.519.2.3 2008/03/24 18:24:30 raeburn Exp $
+# $Id: lonprintout.pm,v 1.519.2.4 2008/04/04 16:46:23 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -150,7 +150,7 @@
 	$ssi_error               = 1;
 	$ssi_last_error_resource = $resource;
 	$ssi_last_error          = $response->code . " " . $response->message;
-	
+	$content='\section*{!!! An error occurred !!!}';
 	&Apache::lonnet::logthis("Error in SSI resource: $resource Error: $ssi_last_error");
     }
 
@@ -158,6 +158,19 @@
 
 }
 
+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
 #  
@@ -2089,115 +2102,104 @@
     # otherwise, we can write the tex file.
     #
 
-    if ($ssi_error) {
-
-        my $helpurl = &Apache::loncommon::top_nav_help('Helpdesk');
-        my $end_page = &Apache::loncommon::end_page();
-        $r->print('
-<br />
-<h2>'.&mt('An unrecoverable network error occurred:').'</h2>
-<p>
-  '.&mt('One of the resources ([_1]) you chose to print could not be rendered due to an unrecoverable error when communicating with a server:',$ssi_last_error_resource).'
-<br />
-'.$ssi_last_error.'
-</p>
-<p>'.
-&mt('It is recommended that you try printing again later, as this error may mean the server was just temporarily unavailable, or is down for maintenance.').'<br />'.
-&mt('If the error persists, please contact the [_1] for assistance.',$helpurl).
-'</p><p>'.
-&mt('We apologize for the inconvenience.').
-'</p>'.
-$end_page);
-
-    } else {
-
 #-- writing .tex file in prtspool 
-	my $temp_file;
-	my $identifier = &Apache::loncommon::get_cgi_id();
-	my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex";
-	if (!($#print_array>0)) { 
-	    unless ($temp_file = Apache::File->new('>'.$filename)) {
-		$r->log_error("Couldn't open $filename for output $!");
-		return SERVER_ERROR; 
-	    }
-	    print $temp_file $result;
-	    my $begin=index($result,'\begin{document}',0);
-	    my $inc=substr($result,0,$begin+16);
-	} else {
-	    my $begin=index($result,'\begin{document}',0);
-	    my $inc=substr($result,0,$begin+16);
-	    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 $temp_file;
+    my $identifier = &Apache::loncommon::get_cgi_id();
+    my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex";
+    if (!($#print_array>0)) { 
+        unless ($temp_file = Apache::File->new('>'.$filename)) {
+	    $r->log_error("Couldn't open $filename for output $!");
+	    return SERVER_ERROR; 
+	}
+	print $temp_file $result;
+	my $begin=index($result,'\begin{document}',0);
+	my $inc=substr($result,0,$begin+16);
+    } else {
+        my $begin=index($result,'\begin{document}',0);
+	my $inc=substr($result,0,$begin+16);
+	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];
+		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];
 	}
-	my $student_names='';
-	if ($#print_array>0) {
-	    for (my $i=0;$i<=$#print_array;$i++) {
-		$student_names.=$student_names[$i].'_ENDPERSON_';
-	    }
+    }
+    my $student_names='';
+    if ($#print_array>0) {
+	for (my $i=0;$i<=$#print_array;$i++) {
+	    $student_names.=$student_names[$i].'_ENDPERSON_';
+	}
+    } else {
+	if ($#student_names>-1) {
+	    $student_names=$student_names[0].'_ENDPERSON_';
 	} else {
-	    if ($#student_names>-1) {
-		$student_names=$student_names[0].'_ENDPERSON_';
-	    } else {
-		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_';
-	    }
+	    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
-	#  yet.
-	my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
-	my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
-	&Apache::lonnet::appenv('cgi.'.$identifier.'.file'   => $filename,
-				'cgi.'.$identifier.'.layout'  => $laystyle,
-				'cgi.'.$identifier.'.numcol'  => $numberofcolumns,
-				'cgi.'.$identifier.'.paper'  => $papersize,
-				'cgi.'.$identifier.'.selection' => $selectionmade,
-				'cgi.'.$identifier.'.tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'},
-				'cgi.'.$identifier.'.tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'},
-				'cgi.'.$identifier.'.role' => $perm{'pav'},
-				'cgi.'.$identifier.'.numberoffiles' => $#print_array,
-				'cgi.'.$identifier.'.studentnames' => $student_names,
-				'cgi.'.$identifier.'.backref' => $URLback,);
-	&Apache::lonnet::appenv("cgi.$identifier.user"    => $env{'user.name'},
-				"cgi.$identifier.domain"  => $env{'user.domain'},
-				"cgi.$identifier.courseid" => $cnum, 
-				"cgi.$identifier.coursedom" => $cdom, 
-				"cgi.$identifier.resources" => $resources_printed);
-	
-	my $end_page = &Apache::loncommon::end_page();
+    # logic for now is too complex to trace if this has been defined
+    #  yet.
+    my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+    my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+    &Apache::lonnet::appenv('cgi.'.$identifier.'.file'   => $filename,
+			    'cgi.'.$identifier.'.layout'  => $laystyle,
+			    'cgi.'.$identifier.'.numcol'  => $numberofcolumns,
+			    'cgi.'.$identifier.'.paper'  => $papersize,
+			    'cgi.'.$identifier.'.selection' => $selectionmade,
+			    'cgi.'.$identifier.'.tableofcontents' => $helper->{'VARS'}->{'TABLE_CONTENTS'},
+			    'cgi.'.$identifier.'.tableofindex' => $helper->{'VARS'}->{'TABLE_INDEX'},
+			    'cgi.'.$identifier.'.role' => $perm{'pav'},
+			    'cgi.'.$identifier.'.numberoffiles' => $#print_array,
+			    'cgi.'.$identifier.'.studentnames' => $student_names,
+			    'cgi.'.$identifier.'.backref' => $URLback,);
+    &Apache::lonnet::appenv("cgi.$identifier.user"    => $env{'user.name'},
+			    "cgi.$identifier.domain"  => $env{'user.domain'},
+			    "cgi.$identifier.courseid" => $cnum, 
+			    "cgi.$identifier.coursedom" => $cdom, 
+			    "cgi.$identifier.resources" => $resources_printed);
+    my $end_page = &Apache::loncommon::end_page();
+    my $continue_text = &mt('Continue');
+    # 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);
 <br />
 <meta http-equiv="Refresh" content="0; url=/cgi-bin/printout.pl?$identifier" />
 <a href="/cgi-bin/printout.pl?$identifier">Continue</a>
 $end_page
 FINALEND
-  }                                       # endif ssi errors.
+    }                                       # endif ssi errors.
 }
 
 
@@ -2270,7 +2272,7 @@
 
 		    &Apache::lonxml::remember_problem_counter();    
 
-		    my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
+		    my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
 
 		    if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
 		       ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
@@ -2312,7 +2314,7 @@
 		    $current_output .= $rendered;		    
 		} elsif ($res_url=~/\/(smppg|syllabus|aboutme|bulletinboard)$/) {
 		    $printed .= $curresline.':';
-		    my $rendered = &Apache::loncommon::get_student_view($curresline,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
+		    my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv);
 		    if ($helper->{'VARS'}->{'PRINT_ANNOTATIONS'} eq 'yes') {
 			my $url = &Apache::lonnet::clutter($res_url);
 			my $annotation = &annotate($url);

--raeburn1207327585--