--- loncom/interface/statistics/lonstathelpers.pm 2004/03/03 22:57:31 1.5 +++ loncom/interface/statistics/lonstathelpers.pm 2004/03/08 19:12:18 1.6 @@ -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 @@ Inputs: $resource: a resource object 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 @@ sub analyze_problem_as_student { '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)) { @@ -404,7 +437,6 @@ sub analyze_problem_as_student { return $returnvalue; } - ## ## The following is copied from datecalc1.pl, part of the ## Spreadsheet::WriteExcel CPAN module.