diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 9ff1fdf4d..21c73a464 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -24,6 +24,7 @@ purge, and changeUrl - fix: editing posts loses changes in preview - change: Asset::getContainer no longer changes the session asset + - fix: Survey numeric multiple choice options 7.1.4 - Template variables in the main Survey Template were out of date in the diff --git a/docs/upgrades/upgrade_7.1.4-7.2.0.pl b/docs/upgrades/upgrade_7.1.4-7.2.0.pl index 8a0323e9d..eb91381d0 100644 --- a/docs/upgrades/upgrade_7.1.4-7.2.0.pl +++ b/docs/upgrades/upgrade_7.1.4-7.2.0.pl @@ -26,6 +26,7 @@ addRssUrlMacroProcessing($session); addLastExportedAs($session); addDeletionWorkflows($session); addRSSFromParent($session); +reorderSurveyCollateral($session); finish($session); # this line required @@ -180,6 +181,27 @@ EOT $oldTag->setWorking if $oldTag; } +##------------------------------------------------- +sub reorderSurveyCollateral { + my $session = shift; + print "\tFixing ordering problems with Survey answers.\n" unless ($quiet); + # and here's our code + my $sth1 = $session->db->prepare("select distinct(assetId) from Survey"); + my $sth2 = $session->db->prepare("select Survey_questionId from Survey_question where Survey_Id=?"); + $sth1->execute(); + while (my ($assetId) = $sth1->array) { ##Iterate over all surveys + my $survey = WebGUI::Asset->new($session, $assetId, 'WebGUI::Asset::Wobject::Survey'); + my $Survey_Id = $survey->get('Survey_id'); + $sth2->execute([$Survey_Id]); + while (my ($questionId) = $sth2->array) { ##iterate over all questions in the survey + $session->errorHandler->warn($questionId); + $survey->reorderCollateral("Survey_answer", "Survey_answerId","Survey_questionId", $questionId); + } + $sth2->finish; + } + $sth1->finish; +} + # ---- DO NOT EDIT BELOW THIS LINE ---- #------------------------------------------------- diff --git a/lib/WebGUI/Asset/Wobject.pm b/lib/WebGUI/Asset/Wobject.pm index 227a51d4f..89d407857 100644 --- a/lib/WebGUI/Asset/Wobject.pm +++ b/lib/WebGUI/Asset/Wobject.pm @@ -373,11 +373,14 @@ sub reorderCollateral { my $setName = shift || "assetId"; my $setValue = shift || $self->get($setName); my $i = 1; - my $sth = $self->session->db->read("select $keyName from $table where $setName=".$self->session->db->quote($setValue)." order by sequenceNumber"); + my $sth = $self->session->db->read("select $keyName from $table where $setName=? order by sequenceNumber", [$setValue]); + my $sth2 = $self->session->db->prepare("update $table set sequenceNumber=? where $setName=? and $keyName=?"); while (my ($id) = $sth->array) { - $self->session->db->write("update $table set sequenceNumber=$i where $setName=".$self->session->db->quote($setValue)." and $keyName=".$self->session->db->quote($id)); + $sth2->execute([$i, $setValue, $id]); $i++; } + $sth2->finish; + $sth->finish; $sth->finish; } @@ -437,7 +440,7 @@ sub setCollateral { my $dbvalues = ""; unless ($useSequence eq "0") { unless (exists $properties->{sequenceNumber}) { - my ($seq) = $self->session->db->quickArray("select max(sequenceNumber) from $table where $setName=".$self->session->db->quote($setValue)); + my ($seq) = $self->session->db->quickArray("select max(sequenceNumber) from $table where $setName=?",[$setValue]); $properties->{sequenceNumber} = $seq+1; } } diff --git a/lib/WebGUI/Asset/Wobject/DataForm.pm b/lib/WebGUI/Asset/Wobject/DataForm.pm index 8952f497b..e517f0cce 100644 --- a/lib/WebGUI/Asset/Wobject/DataForm.pm +++ b/lib/WebGUI/Asset/Wobject/DataForm.pm @@ -770,7 +770,6 @@ sub www_deleteTabConfirm { sub www_editField { my $self = shift; my $fid = shift || $self->session->form->process("fid") || 'new'; - $self->session->errorHandler->warn("fid: $fid"); return $self->session->privilege->insufficient() unless $self->canEdit; my $i18n = WebGUI::International->new($self->session,"Asset_DataForm"); my (%field, $f, %fieldStatus,$tab); diff --git a/lib/WebGUI/Asset/Wobject/Survey.pm b/lib/WebGUI/Asset/Wobject/Survey.pm index a252a4666..6755de3b2 100644 --- a/lib/WebGUI/Asset/Wobject/Survey.pm +++ b/lib/WebGUI/Asset/Wobject/Survey.pm @@ -432,7 +432,7 @@ sub getQuestionVars { name=>'textResponse_'.$questionId }); } else { - my $answer = $self->session->db->buildHashRef("select Survey_answerId,answer from Survey_answer where Survey_questionId=".$self->session->db->quote($question->{Survey_questionId})." order by sequenceNumber"); + my $answer = $self->session->db->buildHashRef("select Survey_answerId,answer from Survey_answer where Survey_questionId=? order by sequenceNumber", [$question->{Survey_questionId}]); if ($question->{randomizeAnswers}) { $answer = randomizeHash($answer); } @@ -885,14 +885,15 @@ sub www_editAnswer { sub www_editAnswerSave { my $self = shift; return $self->session->privilege->insufficient() unless ($self->canEdit); + my $qid = $self->session->form->process("qid"); $self->setCollateral("Survey_answer", "Survey_answerId", { Survey_answerId => $self->session->form->process("aid"), - Survey_questionId => $self->session->form->process("qid"), + Survey_questionId => $qid, answer => $self->session->form->process("answer"), isCorrect => $self->session->form->process("isCorrect"), Survey_id=>$self->get("Survey_id"), gotoQuestion => $self->session->form->process("gotoQuestion") - },1,0,"Survey_Id"); + },1,0,"Survey_questionId", $qid); if ($self->session->form->process("proceed") eq "addQuestion") { return $self->www_editQuestion('new'); } elsif ($self->session->form->process("proceed") eq "addAnswer") {