From 25f3127886f0a787970c08a2b3ff9eabfc23d3f3 Mon Sep 17 00:00:00 2001 From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de> Date: Thu, 28 Mar 2024 08:47:25 +0000 Subject: [PATCH] pass questions_data as JSON string and fix invalid values, fixes #3526, #3691, #3460 Closes #3526, #3691, and #3460 Merge request studip/studip!2771 --- app/controllers/questionnaire.php | 2 +- .../5.3.23_fix_questionnaire_questiondata.php | 18 ++++++++++++++++++ .../assets/javascripts/lib/questionnaire.js | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 db/migrations/5.3.23_fix_questionnaire_questiondata.php diff --git a/app/controllers/questionnaire.php b/app/controllers/questionnaire.php index 66a4e0b6ad5..d0766ed132d 100644 --- a/app/controllers/questionnaire.php +++ b/app/controllers/questionnaire.php @@ -148,7 +148,7 @@ class QuestionnaireController extends AuthenticatedController : null; $this->questionnaire['user_id'] = User::findCurrent()->id; - $questions_data = Request::getArray('questions_data'); + $questions_data = json_decode(Request::get('questions_data'), true); $questions = []; foreach ($questions_data as $index => $question_data) { $class = $question_data['questiontype']; diff --git a/db/migrations/5.3.23_fix_questionnaire_questiondata.php b/db/migrations/5.3.23_fix_questionnaire_questiondata.php new file mode 100644 index 00000000000..be115fc0a92 --- /dev/null +++ b/db/migrations/5.3.23_fix_questionnaire_questiondata.php @@ -0,0 +1,18 @@ +<?php + +class FixQuestionnaireQuestiondata extends Migration +{ + public function description() + { + return 'fix invalid boolean values in questionnaire_questions'; + } + + public function up() + { + DBManager::get()->exec(" + UPDATE questionnaire_questions + SET questiondata = REPLACE(questiondata, ':\"false\"', ':false') + WHERE questiondata LIKE '%:\"false\"%' + "); + } +} diff --git a/resources/assets/javascripts/lib/questionnaire.js b/resources/assets/javascripts/lib/questionnaire.js index 2bca8c628aa..08d3a7565d7 100644 --- a/resources/assets/javascripts/lib/questionnaire.js +++ b/resources/assets/javascripts/lib/questionnaire.js @@ -86,7 +86,7 @@ const Questionnaire = { } $.post(STUDIP.URLHelper.getURL('dispatch.php/questionnaire/store/' + (this.data.id || '')), { questionnaire: data, - questions_data: questions, + questions_data: JSON.stringify(questions), range_type: this.range_type, range_id: this.range_id }).done(() => { -- GitLab