[LON-CAPA-cvs] cvs: loncom /homework structuretags.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Fri, 03 Jun 2005 18:18:00 -0000


raeburn		Fri Jun  3 14:18:00 2005 EDT

  Modified files:              
    /loncom/homework	structuretags.pm 
  Log:
  Increments aggregates (for number of users) appropriately in cases where aggregates have been reset by a CC from the whatsnew interface.
  
  
Index: loncom/homework/structuretags.pm
diff -u loncom/homework/structuretags.pm:1.291 loncom/homework/structuretags.pm:1.292
--- loncom/homework/structuretags.pm:1.291	Fri Apr 29 17:22:33 2005
+++ loncom/homework/structuretags.pm	Fri Jun  3 14:17:57 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # definition of tags that give a structure to a document
 #
-# $Id: structuretags.pm,v 1.291 2005/04/29 21:22:33 albertel Exp $
+# $Id: structuretags.pm,v 1.292 2005/06/03 18:17:57 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -372,16 +372,59 @@
         }
         if ($Apache::lonhomework::results{'resource.'.$part.'.tries'} == 1) {
             $aggregate{$symb."\0".$part."\0users"} = 1;
+        } else {
+            my $last_reset = &get_last_reset($symb,$cdomain,$cname,$part); 
+            if ($last_reset) {
+                if (&get_num_tries($last_reset,$part) == 0) {
+                    $aggregate{$symb."\0".$part."\0users"} = 1;
+                }
+            }
         }
         $aggregate{$symb."\0".$part."\0attempts"} = 1;
     }
-    if (%aggregate) {
+    if (keys (%aggregate) > 0) {
 	&Apache::lonnet::cinc('nohist_resourcetracker',\%aggregate,
-			      $cdomain,$cname); 
+                            $cdomain,$cname);
+    }
+}
 
+# ----------- Timestamp of last reset of aggregates
+sub get_last_reset {
+    my ($symb,$cdomain,$cname,$part) =@_;
+    my $last_reset = '';
+    my %resethash = &Apache::lonnet::restore($symb,'nohist_resourcetracker',$cdomain,$cname);
+    if ($resethash{'version'}) {
+        for (my $version=$resethash{'version'};$version>=1;$version--) {
+            if (exists($resethash{$version.':'.$part."\0".'prev_attempts'})) {
+                $last_reset = $resethash{$version.':timestamp'};
+                last;
+            }
+        }
     }
+    return $last_reset;
 }
 
+# ----------- Provides number of tries since last reset of aggregates
+sub get_num_tries {
+    my ($last_reset,$part) = @_;
+    my $timestamp = '';
+    my $num_tries = 0;
+    if ($Apache::lonhomework::history{'version'}) {
+        for (my $version=$Apache::lonhomework::history{'version'};$version>=1;$version--) {
+            if (exists($Apache::lonhomework::history{$version.':resource.'.$part.'.solved'})) {
+                $timestamp = $Apache::lonhomework::history{$version.':timestamp'};
+                if ($timestamp > $last_reset) {
+                    $num_tries ++;
+                } else {
+                    last;
+                }
+            }
+        }
+    }
+    return $num_tries;
+}
+
+
 sub checkout_msg {
     my %lt=&Apache::lonlocal::texthash( 
 		'resource'=>'The resource needs to be checked out',