[LON-CAPA-cvs] cvs: loncom /interface/statistics lonstathelpers.pm

matthew lon-capa-cvs@mail.lon-capa.org
Mon, 08 Mar 2004 19:12:18 -0000


matthew		Mon Mar  8 14:12:18 2004 EDT

  Modified files:              
    /loncom/interface/statistics	lonstathelpers.pm 
  Log:
  Modified &analyze_problem_as_student to be able to return multiple
  answers at a time.
  
  
Index: loncom/interface/statistics/lonstathelpers.pm
diff -u loncom/interface/statistics/lonstathelpers.pm:1.5 loncom/interface/statistics/lonstathelpers.pm:1.6
--- loncom/interface/statistics/lonstathelpers.pm:1.5	Wed Mar  3 17:57:31 2004
+++ loncom/interface/statistics/lonstathelpers.pm	Mon Mar  8 14:12:18 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstathelpers.pm,v 1.5 2004/03/03 22:57:31 matthew Exp $
+# $Id: lonstathelpers.pm,v 1.6 2004/03/08 19:12:18 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -354,6 +354,12 @@
 
 Returns: $answer
 
+If $partid and $respid are specified, $answer is simply a scalar containing
+the correct answer for the response.
+
+If $partid or $respid are undefined, $answer will be a hash reference with
+keys $partid.'.'.$respid.'.answer'.
+
 =cut
 
 #####################################################
@@ -371,8 +377,35 @@
                                         'grade_courseid' => $courseid));
     (my $garbage,$Answ)=split(/_HASH_REF__/,$Answ,2);
     my %Answer=&Apache::lonnet::str2hash($Answ);
-    my $prefix = $partid.'.'.$respid;
-    my $key = $prefix.'.answer';
+    #
+    if (! defined($partid)) {
+        # If you do not specify a partid, you get them all.
+        foreach my $partid (@{$resource->{'parts'}}) {
+            my $partdata = $resource->{'partdata'}->{$partid};
+            foreach my $respid (@{$partdata->{'ResponseIds'}}) {
+                my $prefix = $partid.'.'.$respid;
+                my $key = $prefix.'.answer';
+                $returnvalue->{$key} = &get_answer($prefix,$key,%Answer);
+            }
+        }
+    } elsif (! defined($respid)) {
+        my $partdata = $resource->{'partdata'}->{$partid};
+        foreach my $respid (@{$partdata->{'ResponseIds'}}) {
+            my $prefix = $partid.'.'.$respid;
+            my $key = $prefix.'.answer';
+            $returnvalue->{$key} = &get_answer($prefix,$key,%Answer);
+        }
+    } else {
+        my $prefix = $partid.'.'.$respid;
+        my $key = $prefix.'.answer';
+        $returnvalue = &get_answer($prefix,$key,%Answer);
+    }
+    return $returnvalue;
+}
+
+sub get_answer {
+    my ($prefix,$key,%Answer) = @_;
+    my $returnvalue;
     if (exists($Answer{$key})) {
         my $student_answer = $Answer{$key}->[0];
         if (! defined($student_answer)) {
@@ -403,7 +436,6 @@
     }
     return $returnvalue;
 }
-
 
 ##
 ## The following is copied from datecalc1.pl, part of the