From dc083bd9e3280fbe58da885f157c6e48707cae2f Mon Sep 17 00:00:00 2001 From: Kevin Foster Date: Sat, 23 Sep 2023 13:54:24 +0100 Subject: [PATCH] fixed issue #19108 - move subquestion code by typing instead of dragging --- .../QuestionAdministrationController.php | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/application/controllers/QuestionAdministrationController.php b/application/controllers/QuestionAdministrationController.php index bed1811b5a5..bd892d2e876 100644 --- a/application/controllers/QuestionAdministrationController.php +++ b/application/controllers/QuestionAdministrationController.php @@ -2858,8 +2858,16 @@ private function storeSubquestions($question, $subquestionsArray) $subquestionIds = []; foreach ($subquestionsArray as $subquestionArray) { foreach ($subquestionArray as $scaleId => $data) { - $subquestion = null; - if (isset($data['oldcode'])) { + // If the subquestion with given code already exists, update it. + $subquestion = Question::model()->findByAttributes([ + 'sid' => $question->sid, + 'parent_qid' => $question->qid, + 'title' => $data['code'], + 'scale_id' => $scaleId + ]); + if (!$subquestion && isset($data['oldcode'])) { + // If the subquestion with given code does not exist + // - but subquestion with old code exists, update it. $subquestion = Question::model()->findByAttributes([ 'sid' => $question->sid, 'parent_qid' => $question->qid, @@ -2871,8 +2879,8 @@ private function storeSubquestions($question, $subquestionsArray) $subquestion = new Question(); } - $subquestion->sid = $question->sid; - $subquestion->gid = $question->gid; + $subquestion->sid = $question->sid; + $subquestion->gid = $question->gid; $subquestion->parent_qid = $question->qid; $subquestion->question_order = $questionOrder; $questionOrder++; @@ -2882,11 +2890,11 @@ private function storeSubquestions($question, $subquestionsArray) 'Internal error: Missing mandatory field code for question: ' . json_encode($data) ); } - $subquestion->title = $data['code']; + $subquestion->title = $data['code']; if ($scaleId === 0) { - $subquestion->relevance = $data['relevance']; + $subquestion->relevance = $data['relevance']; } - $subquestion->scale_id = $scaleId; + $subquestion->scale_id = $scaleId; if (!$subquestion->save()) { array_push($errorQuestions, $subquestion); continue;