From 5e6b0e0b2e5ed95f75b0b7f18033a8a6ba7db9b4 Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Thu, 3 Apr 2008 14:53:27 +0000 Subject: [PATCH] fixed: unable to respond to poll multiple times in same session --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/Survey.pm | 34 +++++++++++++++--------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index b8f1beb72..f270c1537 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -21,6 +21,7 @@ - fixed: CS rating links are exposed to site spiders - improved behavior of CS mail message filtering - fixed: Thingy: "cancel" -- cannot cancel when adding a thing + - fixed: unable to respond to poll multiple times in same session 7.5.8 - moved Gallery utility methods to WebGUI::Utility::Gallery diff --git a/lib/WebGUI/Asset/Wobject/Survey.pm b/lib/WebGUI/Asset/Wobject/Survey.pm index c64b23801..b14bc2626 100644 --- a/lib/WebGUI/Asset/Wobject/Survey.pm +++ b/lib/WebGUI/Asset/Wobject/Survey.pm @@ -486,7 +486,7 @@ sub getResponseDrivenQuestionIds { Survey_questionId=".$self->session->db->quote($previousResponse->{Survey_questionId})); } if (!$questionId || $questionId eq '-1') { # terminate survey - $self->completeResponse($responseId); + $self->completeResponse($responseId); return (); } } else { @@ -675,14 +675,16 @@ sub view { $var->{'user.canTakeSurvey'} = $self->session->user->isInGroup($self->get("groupToTakeSurvey")); if ($var->{'user.canTakeSurvey'}) { - $var->{'response.Id'} = $self->getResponseId(); + $var->{'response.Id'} = $self->getResponseId; $var->{'response.Count'} = $self->getResponseCount; $var->{'user.isFirstResponse'} = ($var->{'response.Count'} == 0 && !(exists $var->{'response.id'})); $var->{'user.canRespondAgain'} = ($var->{'response.Count'} < $self->get("maxResponsesPerUser")); - if (($var->{'user.isFirstResponse'}) || ($self->session->form->process("startNew") && $var->{'user.canRespondAgain'})) { - $var->{'response.Id'} = "new"; #Added 7-11-07 by fdillon - #$var->{'response.Id'} = $self->generateResponseId; #Removed 7-11-07 by fdillon - } + if ($self->session->form->process("startNew") && $var->{'user.canRespondAgain'}) { + $var->{'response.Id'} = "new"; + } + elsif ($var->{'user.isFirstResponse'}) { + $var->{'response.Id'} ||= "new"; + } if ($var->{'response.Id'}) { $var->{'questions.soFar.count'} = $self->getQuestionResponseCount($var->{'response.Id'}); ($var->{'questions.correct.count'}) = $self->session->db->quickArray("select count(*) from Survey_questionResponse a, Survey_answer b where a.Survey_responseId=" @@ -699,10 +701,9 @@ sub view { name=>'func', value=>'respond' }); - $var->{'form.header'} .= WebGUI::Form::hidden($self->session, { #Added 7-11-07 by fdillon - name=>"startNew", - value=>$self->session->form->process("startNew") - }); + if ($var->{'response.Id'}) { + $var->{'form.header'} .= WebGUI::Form::hidden($self->session,{name=>'responseId',value=>$var->{'response.Id'}}); + } $var->{'form.footer'} = WebGUI::Form::formFooter($self->session,); $var->{'form.submit'} = WebGUI::Form::submit($self->session,{ value=>$i18n->get(50) @@ -1205,13 +1206,12 @@ sub www_respond { return "" unless ($self->session->user->isInGroup($self->get("groupToTakeSurvey"))); #If user has not responded before, create the responseId binding the survey to this session: fdillon 7-11-07 my $responseCount = $self->getResponseCount; - my $responseId = $self->getResponseId(); - my $isFirstResponse = ($responseCount == 0 && !(defined $responseId)); - my $canRespondAgain = ($responseCount < $self->get("maxResponsesPerUser")); - if ($isFirstResponse || ($self->session->form->process("startNew") && $canRespondAgain)) { - $self->generateResponseId; - } - + my $responseId = $self->getResponseId; + my $canRespond = ($responseCount < $self->get("maxResponsesPerUser")); + if ($canRespond && (!defined $responseId || $self->session->form->param('responseId') eq 'new')) { + $self->generateResponseId; + } + my $varname = $self->getResponseIdString; return "" unless ($self->session->scratch->get($varname)); my $userId = ($self->get("anonymous")) ? substr(md5_hex($self->session->user->userId),0,8) : $self->session->user->userId;