Started fixing Survey responseId handling

This commit is contained in:
Patrick Donelan 2009-05-23 09:53:28 +00:00
parent f622854a3d
commit 5e7c594440
2 changed files with 34 additions and 55 deletions

View file

@ -1236,12 +1236,13 @@ sub view {
my $self = shift; my $self = shift;
my $var = $self->getMenuVars; my $var = $self->getMenuVars;
my $responseDetails = $self->getResponseDetails(); my $responseDetails = $self->getResponseDetails;
# Add lastResponse template vars # Add lastResponse template vars
for my $tv qw(endDate feedback complete restart timeout timeoutRestart) { for my $tv qw(endDate complete restart timeout timeoutRestart) {
$var->{"lastResponse\u$tv"} = $responseDetails->{$tv}; $var->{"lastResponse\u$tv"} = $responseDetails->{$tv};
} }
$var->{lastResponseFeedback} = $responseDetails->{templateText};
$var->{maxResponsesSubmitted} = !$self->canTakeSurvey(); $var->{maxResponsesSubmitted} = !$self->canTakeSurvey();
return $self->processTemplate( $var, undef, $self->{_viewTemplate} ); return $self->processTemplate( $var, undef, $self->{_viewTemplate} );
@ -1274,68 +1275,44 @@ sub getMenuVars {
#------------------------------------------------------------------- #-------------------------------------------------------------------
=head2 getResponseDetails ( [$responseId] ) =head2 getResponseDetails ( [$options] )
Looks up details about a given response. Looks up details about a given response.
=head3 responseId =head3 options
=head4 responseId
A specific responseId to use. If none given, the most recent completed response is used. A specific responseId to use. If none given, the most recent completed response is used.
=head4 userId
A specific userId to use. Defaults to the current user
=head4 templateId
A template to use. Defaults to this Survey's feedbackTemplateId
=cut =cut
sub getResponseDetails { sub getResponseDetails {
my $self = shift; my $self = shift;
my $responseId = shift; my %opts = validate(@_, { userId => 0, responseId => 0, templateId => 0 } );
my $responseId = $opts{responseId};
my $userId = $opts{userId} || $self->session->user->userId;
my $templateId = $opts{templateId} || $self->get('feedbackTemplateId') || 'nWNVoMLrMo059mDRmfOp9g';
my ($lastResponseCompleteCode, $lastResponseEndDate, $rJSON); $responseId
||= $self->session->db->quickScalar("select Survey_responseId from Survey_response where userId = ? and assetId = ? and isComplete > 0", [ $userId, $self->getId ]);
if ( $responseId ) { if (!$responseId) {
$self->session->log->debug("ResponseId provided: $responseId"); $self->session->log->debug("ResponseId not found");
($lastResponseCompleteCode, $lastResponseEndDate, $rJSON) = $self->session->db->quickArray( return {};
'select isComplete, endDate, responseJSON from Survey_response where Survey_responseId = ?', [ $responseId ]
);
} else {
my $userId = $self->session->user->userId();
my $anonId
= $self->session->form->process('userid')
|| $self->session->http->getCookies->{Survey2AnonId}
|| undef;
$anonId && $self->session->http->setCookie( Survey2AnonId => $anonId );
my $ip = $self->session->env->getIp;
my $string;
if ( $anonId or $userId != 1 ) {
$string = 'userId';
if ($anonId) {
$string = 'anonId';
$userId = $anonId;
}
my $lastResponseId
= $self->session->db->quickScalar(
"select Survey_responseId from Survey_response where $string = ? and assetId = ? and isComplete = 0",
[ $userId, $self->getId() ] );
if ( !$lastResponseId ) {
($lastResponseCompleteCode, $lastResponseEndDate, $rJSON) = $self->session->db->quickArray(
"select isComplete, endDate, responseJSON from Survey_response where $string = ? and assetId = ? and isComplete > 0 order by endDate desc limit 1",
[ $userId, $self->getId() ]
);
}
}
elsif ( $userId == 1 ) {
my $lastResponseId = $self->session->db->quickScalar(
'select Survey_responseId from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete = 0',
[ $userId, $ip, $self->getId() ]
);
if ( !$lastResponseId ) {
($lastResponseCompleteCode, $lastResponseEndDate, $rJSON) = $self->session->db->quickArray(
'select isComplete, endDate, responseJSON from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete > 0 order by endDate desc limit 1',
[ $userId, $ip, $self->getId() ]
);
}
}
} }
my ($lastResponseCompleteCode, $lastResponseEndDate, $rJSON)
= $self->session->db->quickArray('select isComplete, endDate, responseJSON from Survey_response where Survey_responseId = ?', [ $responseId ]);
# Process the feedback text # Process the feedback text
my $feedback; my $feedback;
my $tags = {}; my $tags = {};
@ -1349,12 +1326,13 @@ sub getResponseDetails {
$tags->{timeout} = $lastResponseCompleteCode == 3; $tags->{timeout} = $lastResponseCompleteCode == 3;
$tags->{timeoutRestart} = $lastResponseCompleteCode == 4; $tags->{timeoutRestart} = $lastResponseCompleteCode == 4;
$tags->{endDate} = $lastResponseEndDate && WebGUI::DateTime->new($self->session, $lastResponseEndDate)->toUserTimeZone; $tags->{endDate} = $lastResponseEndDate && WebGUI::DateTime->new($self->session, $lastResponseEndDate)->toUserTimeZone;
$feedback = $self->processTemplate($tags, $self->get('feedbackTemplateId') || 'nWNVoMLrMo059mDRmfOp9g'); $feedback = $self->processTemplate($tags, $templateId);
} }
return { return {
completeCode => $lastResponseCompleteCode, completeCode => $lastResponseCompleteCode,
templateText => $feedback,
templateVars => $tags,
endDate => $tags->{endDate}, endDate => $tags->{endDate},
feedback => $feedback,
complete => $tags->{complete}, complete => $tags->{complete},
restart => $tags->{restart}, restart => $tags->{restart},
timeout => $tags->{timeout}, timeout => $tags->{timeout},
@ -1571,7 +1549,7 @@ sub www_showFeedback {
# Only continue if user owns the response # Only continue if user owns the response
return if $userId ne $self->session->user->userId; return if $userId ne $self->session->user->userId;
my $out = $self->getResponseDetails($responseId)->{feedback}; my $out = $self->getResponseDetails( { responseId => $responseId } )->{templateText};
return $self->session->style->process( $out, $self->get('styleTemplateId') ); return $self->session->style->process( $out, $self->get('styleTemplateId') );
} }
@ -2008,7 +1986,6 @@ sub takenCount {
} }
my $count = $self->session->db->quickScalar($sql); my $count = $self->session->db->quickScalar($sql);
$self->session->log->debug($count);
return $count; return $count;
} }

View file

@ -207,6 +207,8 @@ sub run {
} }
} }
$survey->persistResponseJSON;
my $tap = "1..$testCount\n"; my $tap = "1..$testCount\n";
$tap .= join "\n", @tap; $tap .= join "\n", @tap;
return { tap => "$tap" }; return { tap => "$tap" };