Refactored returnResponseForReporting

This commit is contained in:
Patrick Donelan 2009-02-06 05:51:08 +00:00
parent fa6976fb40
commit 6fddcdaf5f

View file

@ -1105,48 +1105,57 @@ sub aIndexes {
=cut =cut
# TODO: This sub should make use of recordedResponses
sub returnResponseForReporting { sub returnResponseForReporting {
my $self = shift; my $self = shift;
my @responses = (); my @report = ();
for my $entry ( @{ $self->surveyOrder } ) { for my $address ( @{ $self->surveyOrder } ) {
if ( @$entry == 1 ) { my ($sIndex, $qIndex) = (sIndex($address), qIndex($address));
my $section = $self->survey->section( $address );
my $question = $self->survey->question( [ $sIndex, $qIndex ] );
my $questionId = $self->questionId($sIndex, $qIndex);
# Skip if this is a Section without a Question
if ( !defined $qIndex ) {
next; next;
} }
my @answers;
for ( @{ $$entry[2] } ) { my @responses;
if ( defined $self->responses->{"$$entry[0]-$$entry[1]-$_"} ) { for my $aIndex (aIndexes($address)) {
$self->responses->{"$$entry[0]-$$entry[1]-$_"}->{id} = $_; my $answerId = $self->answerId($sIndex, $qIndex, $aIndex);
if ( $self->survey->answer( [ $$entry[0], $$entry[1], $_ ] )->{isCorrect} ) {
my $value; if ( $self->responses->{$answerId} ) {
if ( $self->survey->answer( [ $$entry[0], $$entry[1], $_ ] )->{value} =~ /\w/ ) {
$value = $self->survey->answer( [ $$entry[0], $$entry[1], $_ ] )->{value}; # Make a safe copy of the response
} my %response = %{$self->responses->{$answerId}};
else { $response{id} = $aIndex;
$value = $self->survey->question( [ $$entry[0], $$entry[1] ] )->{value};
} my $answer = $self->survey->answer( [ $sIndex, $qIndex, $aIndex ] );
$self->responses->{"$$entry[0]-$$entry[1]-$_"}->{value} = $value; if ( $answer->{isCorrect} ) {
$self->responses->{"$$entry[0]-$$entry[1]-$_"}->{isCorrect} = 1; $response{value}
= $answer->{value} =~ /\w/ ? $answer->{value}
: $question->{value}
;
$response{isCorrect} = 1;
} }
else { else {
$self->responses->{"$$entry[0]-$$entry[1]-$_"}->{isCorrect} = 0; $response{isCorrect} = 0;
} }
push( @answers, ( $self->responses->{"$$entry[0]-$$entry[1]-$_"} ) ); push @responses, \%response;
} ## end if ( defined $self->responses... }
} ## end for ( @{ $$entry[2] } ) }
push( push @report, {
@responses, ( { section => $sIndex,
'section', $$entry[0], question => $qIndex,
'question', $$entry[1], sectionName => $section->{variable},
'sectionName', $self->survey->section( [ $$entry[0] ] )->{variable}, questionName => $question->{variable},
'questionName', $self->survey->question( [ $$entry[0], $$entry[1] ] )->{variable}, questionComment => $self->responses->{$questionId}->{comment},
'questionComment', $self->responses->{"$$entry[0]-$$entry[1]"}->{comment}, answers => \@responses
'answers', \@answers };
} }
) return \@report;
); }
} ## end for my $entry ( @{ $self...
return \@responses;
} ## end sub returnResponseForReporting
#------------------------------------------------------------------- #-------------------------------------------------------------------