--- loncom/homework/grades.pm	2008/03/04 11:23:12	1.513
+++ loncom/homework/grades.pm	2008/03/24 18:45:04	1.516
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.513 2008/03/04 11:23:12 foxr Exp $
+# $Id: grades.pm,v 1.516 2008/03/24 18:45:04 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -73,7 +73,7 @@ my $ssi_error_message;
 #                      the number of times requested by the caller.
 #                      If we still have a proble, no text is appended to the
 #                      output and we set some global variables.
-#                      to indicate to the caller an SSI error occured.  
+#                      to indicate to the caller an SSI error occurred.  
 #                      All of this is supposed to deal with the issues described
 #                      in LonCAPA BZ 5631 see:
 #                      http://bugs.lon-capa.org/show_bug.cgi?id=5631
@@ -89,13 +89,13 @@ my $ssi_error_message;
 #   On success, returns the rendered resource identified by the resource parameter.
 # Side Effects:
 #   The following global variables can be set:
-#    ssi_error                - If an unrecoverable error occured this becomes true.
+#    ssi_error                - If an unrecoverable error occurred this becomes true.
 #                               It is up to the caller to initialize this to false
 #                               if desired.
-#    ssi_last_error_resource  - If an unrecoverable error occured, this is the value
+#    ssi_error_resource  - If an unrecoverable error occurred, this is the value
 #                               of the resource that could not be rendered by the ssi
 #                               call.
-#    ssi_last_error           - The error string fetched from the ssi response
+#    ssi_error_message   - The error string fetched from the ssi response
 #                               in the event of an error.
 #
 sub ssi_with_retries {
@@ -116,11 +116,20 @@ sub ssi_with_retries {
 
 sub ssi_print_error {
     my ($r) = @_;
-    $r->print('<h2>Unrecoverable network error</h2>');
-    $r->print('<p>Unable to perform a resource fetch from a server: <br />');
-    $r->print("Resource: $ssi_error_resource <br />");
-    $r->print("Error: $ssi_error_message <br /> Try again later.");
-    $r->print('If errors persist, contact LonCAPA support for assistance</p>');
+    my $helpurl = &Apache::loncommon::top_nav_help('Helpdesk');
+    $r->print('
+<br />
+<h2>'.&mt('An unrecoverable network error occurred:').'</h2>
+<p>
+'.&mt('Unable to retrieve a resource from a server:').'<br />
+'.&mt('Resource:').' '.$ssi_error_resource.'<br />
+'.&mt('Error:').' '.$ssi_error_message.'
+</p>
+<p>'.
+&mt('It is recommended that you try 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>');
+    return;
 }
 
 #
@@ -276,12 +285,12 @@ sub reset_caches {
 	my (undef,undef,$url)=&Apache::lonnet::decode_symb($symb);
 	$url=&Apache::lonnet::clutter($url);
 	my $subresult=&ssi_with_retries($url, $ssi_retries,
-					   ('grade_target' => 'analyze'),
-					   ('grade_domain' => $udom),
-					   ('grade_symb' => $symb),
-					   ('grade_courseid' => 
-					    $env{'request.course.id'}),
-					   ('grade_username' => $uname));
+					   ('grade_target' => 'analyze',
+					    'grade_domain' => $udom,
+					    'grade_symb' => $symb,
+					    'grade_courseid' => 
+					    $env{'request.course.id'},
+					    'grade_username' => $uname));
 	(undef,$subresult)=split(/_HASH_REF__/,$subresult,2);
 	my %analyze=&Apache::lonnet::str2hash($subresult);
 	return $analyze_cache{$key} = \%analyze;
@@ -1833,9 +1842,9 @@ sub download_all_link {
 	join("\n",&Apache::loncommon::get_env_multiple('form.vPart'));
 
     my $identifier = &Apache::loncommon::get_cgi_id();
-    &Apache::lonnet::appenv('cgi.'.$identifier.'.students' => $all_students,
-                            'cgi.'.$identifier.'.symb' => $symb,
-                            'cgi.'.$identifier.'.parts' => $parts,);
+    &Apache::lonnet::appenv({'cgi.'.$identifier.'.students' => $all_students,
+                             'cgi.'.$identifier.'.symb' => $symb,
+                             'cgi.'.$identifier.'.parts' => $parts,});
     $r->print('<a href="/cgi-bin/multidownload.pl?'.$identifier.'">'.
 	      &mt('Download All Submitted Documents').'</a>');
     return
@@ -7231,24 +7240,27 @@ sub scantron_get_maxbubble {
     my $response_number = 0;
     my $bubble_line     = 0;
     foreach my $resource (@resources) {
+        my $symb = $resource->symb();
         # Need to retrieve part IDs and response IDs because essayresponse,
         # reactionresponse and organicresponse items are not included in 
         # $analysis{'parts'} from lonnet::ssi.  
         my %possible_part_ids; 
         if (ref($resource->parts()) eq 'ARRAY') { 
             foreach my $part (@{$resource->parts()}) {
-                my @resp_ids = $resource->responseIds($part);
-                foreach my $id (@resp_ids) {
-                    $possible_part_ids{$part.'.'.$id} = 1;
+                if (!&Apache::loncommon::check_if_partid_hidden($part,$symb,$udom,$uname)) {
+                    my @resp_ids = $resource->responseIds($part);
+                    foreach my $id (@resp_ids) {
+                        $possible_part_ids{$part.'.'.$id} = 1;
+                    }
                 }
             }
         }
 	my $result=&ssi_with_retries($resource->src(), $ssi_retries,
-					('symb' => $resource->symb()),
-					('grade_target' => 'analyze'),
-					('grade_courseid' => $cid),
-					('grade_domain' => $udom),
-					('grade_username' => $uname));
+					('symb' => $symb,
+					 'grade_target' => 'analyze',
+					 'grade_courseid' => $cid,
+					 'grade_domain' => $udom,
+					 'grade_username' => $uname));
 	my (undef, $an) =
 	    split(/_HASH_REF__/,$result, 2);
 
@@ -7257,7 +7269,12 @@ sub scantron_get_maxbubble {
 	my %analysis = &Apache::lonnet::str2hash($an);
 
         if (ref($analysis{'parts'}) eq 'ARRAY') {
-            @parts = @{$analysis{'parts'}};
+            foreach my $part (@{$analysis{'parts'}}) {
+                my ($id,$respid) = split(/\./,$part);
+                if (!&Apache::loncommon::check_if_partid_hidden($id,$symb,$udom,$uname)) {
+                    push(@parts,$part);
+                }
+            }
         }
         # Add part_ids for any essayresponse items. 
         foreach my $part_id (keys(%possible_part_ids)) {
@@ -7492,7 +7509,7 @@ SCANTRONFORM
   	($uname,$udom)=split(/:/,$uname);
 
 	&Apache::lonxml::clear_problem_counter();
-  	&Apache::lonnet::appenv(%$scan_record);
+  	&Apache::lonnet::appenv($scan_record);
 
 	if (&scantron_clear_skip($scanlines,$scan_data,$i)) {
 	    &scantron_putfile($scanlines,$scan_data);