Added Survey feedback template

Added survey feedback template and method for returning the templated feedback for a given response
Used this to clean up the default survey template, and updated the i18n and help
This commit is contained in:
Patrick Donelan 2009-05-13 08:59:50 +00:00
parent c4cd3c0940
commit fdf7e68827
7 changed files with 220 additions and 75 deletions

View file

@ -168,6 +168,14 @@ sub definition {
defaultValue => 'AjhlNO3wZvN5k4i4qioWcg',
namespace => 'Survey/Edit',
},
feedbackTemplateId => {
tab => 'display',
fieldType => 'template',
defaultValue => 'nWNVoMLrMo059mDRmfOp9g',
label => $i18n->get('Feedback Template'),
hoverHelp => $i18n->get('Feedback Template help'),
namespace => 'Survey/Feedback',
},
overviewTemplateId => {
tab => 'display',
fieldType => 'template',
@ -1212,16 +1220,15 @@ sub view {
my $self = shift;
my $var = $self->getMenuVars;
my ($lastResponseCompleteCode, $lastResponseEndDate) = $self->getLastResponseDetails();
$var->{lastResponseCompleted} = $lastResponseCompleteCode == 1;
$var->{lastResponseEndDate} = WebGUI::DateTime->new($self->session, $lastResponseEndDate)->toUserTimeZone;
$var->{lastResponseTimedOut} = $lastResponseCompleteCode == 3;
my $responseDetails = $self->getResponseDetails();
# Add lastResponse template vars
for my $tv qw(endDate feedback complete restart timeout timeoutRestart) {
$var->{"lastResponse\u$tv"} = $responseDetails->{$tv};
}
$var->{maxResponsesSubmitted} = !$self->canTakeSurvey();
my $out = $self->processTemplate( $var, undef, $self->{_viewTemplate} );
return $out;
return $self->processTemplate( $var, undef, $self->{_viewTemplate} );
}
#-------------------------------------------------------------------
@ -1251,57 +1258,91 @@ sub getMenuVars {
#-------------------------------------------------------------------
=head2 getLastResponseDetails ( )
=head2 getResponseDetails ( [$responseId] )
Gets the completeCode and endDate for the most recent response
Looks up details about a given response.
=head3 responseId
A specific responseId to use. If none given, the most recent completed response is used.
=cut
sub getLastResponseDetails {
sub getResponseDetails {
my $self = shift;
my ($lastResponseCompleteCode, $lastResponseEndDate);
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 $responseId
= $self->session->db->quickScalar(
"select Survey_responseId from Survey_response where $string = ? and assetId = ? and isComplete = 0",
[ $userId, $self->getId() ] );
if ( !$responseId ) {
($lastResponseCompleteCode, $lastResponseEndDate) = $self->session->db->quickArray(
"select isComplete, endDate from Survey_response where $string = ? and assetId = ? and isComplete > 0 order by endDate desc limit 1",
[ $userId, $self->getId() ]
);
}
}
elsif ( $userId == 1 ) {
my $responseId = $self->session->db->quickScalar(
'select Survey_responseId from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete = 0',
[ $userId, $ip, $self->getId() ]
my $responseId = shift;
my ($lastResponseCompleteCode, $lastResponseEndDate, $rJSON);
if ( $responseId ) {
($lastResponseCompleteCode, $lastResponseEndDate, $rJSON) = $self->session->db->quickArray(
'select isComplete, endDate, responseJSON from Survey_response where responseId = ?', [ $responseId ]
);
if ( !$responseId ) {
($lastResponseCompleteCode, $lastResponseEndDate) = $self->session->db->quickArray(
'select isComplete, endDate from Survey_response where userId = ? and ipAddress = ? and assetId = ? and isComplete > 0 order by endDate desc limit 1',
} 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() ]
);
}
}
}
return ($lastResponseCompleteCode, $lastResponseEndDate);
# Process the feedback text
my $feedback;
my $tags = {};
if ($rJSON) {
$rJSON = from_json($rJSON) || {};
# All tags become template vars
$tags = $rJSON->{tags} || {};
$tags->{complete} = $lastResponseCompleteCode == 1;
$tags->{restart} = $lastResponseCompleteCode == 2;
$tags->{timeout} = $lastResponseCompleteCode == 3;
$tags->{timeoutRestart} = $lastResponseCompleteCode == 4;
$tags->{endDate} = $lastResponseEndDate && WebGUI::DateTime->new($self->session, $lastResponseEndDate)->toUserTimeZone;
$feedback = $self->processTemplate($tags, $self->get('feedbackTemplateId') || 'nWNVoMLrMo059mDRmfOp9g');
}
return {
completeCode => $lastResponseCompleteCode,
endDate => $tags->{endDate},
feedback => $feedback,
complete => $tags->{complete},
restart => $tags->{restart},
timeout => $tags->{timeout},
timeoutRestart => $tags->{timeoutRestart},
};
}
#-------------------------------------------------------------------