Skip to content

Commit

Permalink
Fixed issue #16566: We cannot create multiple choice questions (#1543)
Browse files Browse the repository at this point in the history
Dev: Before issue #16469, QuestionEditorController tried to find the questions using 'findByPk', which automatically casts the value to int. Now, 'find' is used because the survey ID, as the search is done by multiple criterias.
Dev: When saving a new question, 'qid' is an empty string, and the resulting SQL fails in Postgres because of the data type. Solved by casting 'qid' to int.
Dev: This also helps with issue #16563.
Dev: Casting subquestion id as to remove the random characters vue id adds for its view.
  • Loading branch information
gabrieljenik committed Aug 12, 2020
1 parent b2c63ba commit 16425ff
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions application/controllers/QuestionEditorController.php
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ function ($value) {
);

// Store changes to the actual question data, by either storing it, or updating an old one
$oQuestion = Question::model()->find('sid = :sid AND qid = :qid', [':sid' => $iSurveyId, ':qid' => $questionData['question']['qid']]);
$oQuestion = Question::model()->find('sid = :sid AND qid = :qid', [':sid' => $iSurveyId, ':qid' => (int)$questionData['question']['qid']]);
if ($oQuestion == null || $questionCopy == true) {
$oQuestion = $this->storeNewQuestionData($questionData['question']);
} else {
Expand Down Expand Up @@ -348,7 +348,7 @@ function ($value) {
}

// Compile the newly stored data to update the FE
$oNewQuestion = Question::model()->find('sid = :sid AND qid = :qid', [':sid' => $iSurveyId, ':qid' => $oQuestion->qid]);
$oNewQuestion = Question::model()->find('sid = :sid AND qid = :qid', [':sid' => $iSurveyId, ':qid' => (int)$oQuestion->qid]);
$aCompiledQuestionData = $this->getCompiledQuestionData($oNewQuestion);
$aQuestionAttributeData = QuestionAttribute::model()->getQuestionAttributes($oQuestion->qid);
$aQuestionGeneralOptions = $this->getGeneralOptions(
Expand Down Expand Up @@ -695,7 +695,7 @@ private function getQuestionObject($iQuestionId = null, $sQuestionType = null, $
if (!Permission::model()->hasSurveyPermission($iSurveyId, 'surveycontent', 'read')) {
throw new CHttpException(403);
}
$oQuestion = Question::model()->find('sid = :sid AND qid = :qid', [':sid' => $iSurveyId, ':qid' => $iQuestionId]);
$oQuestion = Question::model()->find('sid = :sid AND qid = :qid', [':sid' => $iSurveyId, ':qid' => (int)$iQuestionId]);

if ($oQuestion == null) {
$oQuestion = QuestionCreate::getInstance($iSurveyId, $sQuestionType);
Expand Down Expand Up @@ -1172,7 +1172,7 @@ private function storeSubquestions(&$oQuestion, $dataSet, $isCopyProcess = false
$this->cleanSubquestions($oQuestion, $dataSet);
foreach ($dataSet as $aSubquestions) {
foreach ($aSubquestions as $aSubquestionDataSet) {
$oSubQuestion = Question::model()->find('sid = :sid AND qid = :qid', [':sid' => $oQuestion->sid, ':qid' => $aSubquestionDataSet['qid']]);
$oSubQuestion = Question::model()->find('sid = :sid AND qid = :qid', [':sid' => $oQuestion->sid, ':qid' => (int)$aSubquestionDataSet['qid']]);
if ($oSubQuestion != null && !$isCopyProcess) {
$oSubQuestion = $this->updateQuestionData($oSubQuestion, $aSubquestionDataSet);
} elseif (!$oQuestion->survey->isActive) {
Expand Down

0 comments on commit 16425ff

Please sign in to comment.