--- loncom/homework/response.pm	2015/10/30 03:49:47	1.244
+++ loncom/homework/response.pm	2019/08/11 12:27:11	1.247
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # various response type definitons response definition
 #
-# $Id: response.pm,v 1.244 2015/10/30 03:49:47 raeburn Exp $
+# $Id: response.pm,v 1.247 2019/08/11 12:27:11 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -265,10 +265,15 @@ sub mandatory_part_meta {
 }
 
 sub meta_part_order {
+    my ($type) = @_; 
     if (@Apache::inputtags::partlist) {
 	my @parts=@Apache::inputtags::partlist;
-	shift(@parts);
+        unless ($type eq 'library') {
+	    shift(@parts);
+        }
 	return '<partorder>'.join(',',@parts).'</partorder>'."\n";
+    } elsif ($type eq 'library') {
+        return '<partorder></partorder>'."\n";
     } else {
 	return '<partorder>0</partorder>'."\n";
     }
@@ -1307,7 +1312,7 @@ sub submitted {
 	return 1;
     }
     # Submit All button on a .page was pressed
-    if (defined($env{'form.all_submit'})) { return 1; }
+    if ($env{'form.all_submit'}) { return 1; }
     # otherwise no submission occurred
     return 0;
 }
@@ -1343,10 +1348,12 @@ basically undef and 0 (both false) mean
 and all true values mean that they can't do any more work
 
 	a return of undef means it is unattempted
-	a return of 0 means it is attmpted and wrong but still has tries
+	a return of 0 means it is both attempted and still has tries and
+                      is wrong or is only partially correct, and retries 
+                      are allowed.
 	a return of 1 means it is marked correct
-	a return of 2 means they have exceed maximum number of tries
-	a return of 3 means it after the answer date
+	a return of 2 means they have exceeded maximum number of tries
+	a return of 3 means it is after the answer date
 
 =cut
 
@@ -1363,7 +1370,13 @@ sub check_status {
         return 3;
     }
     my $status=&Apache::lonnet::EXT("user.resource.resource.$id.solved");
-    if ($status =~ /^correct/) { return 1; }
+    if ($status =~ /^correct/) { 
+        my $awarded=&Apache::lonnet::EXT("user.resource.resource.$id.awarded");
+        my $retrypartial=&Apache::lonnet::EXT("resource.$id.retrypartial");
+        unless (($retrypartial =~ /^1|on|yes$/) && ($awarded <1))  {
+            return 1;
+        }
+    }
     if (!$status) { return undef; }
     my $maxtries=&Apache::lonnet::EXT("resource.$id.maxtries");
     if ($maxtries eq '') { $maxtries=2; }