From de9a88cdaf254c7be29122c5a7a38883d7e1fbf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mudr=C3=A1k?= Date: Wed, 4 Sep 2013 23:42:35 +0200 Subject: [PATCH] MDL-29378 Fix regression in the Survey/COLLES P+A module This basically reverts the commit 5196df589b0fbcead4a0943c8e7b227f8a98c897 that I believe was a result of misunderstanding of how question type field is (ab)used in the Survey module. As it took significant time to get familiar with the overall logic of questions and their processing in the module, I left my findings in added inline comments. The point is that it is $question->type that matters. Types of questions listed as subquestions in the multi field is irrelevant in that case (and all have it set to 1 IIRC). This patch re-enables the "COLLES (Preferred and Actual)" survey type that did not work at all due to regression. --- mod/survey/lib.php | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/mod/survey/lib.php b/mod/survey/lib.php index a4e3e7ba4e0db..d6ae051216913 100644 --- a/mod/survey/lib.php +++ b/mod/survey/lib.php @@ -509,8 +509,22 @@ function survey_print_multi($question) { $options = explode( ",", $question->options); $numoptions = count($options); + // COLLES Actual (which is having questions of type 1) and COLLES Preferred (type 2) + // expect just one answer per question. COLLES Actual and Preferred (type 3) expects + // two answers per question. ATTLS (having a single question of type 1) expects one + // answer per question. CIQ is not using multiquestions (i.e. a question with subquestions). + // Note that the type of subquestions does not really matter, it's the type of the + // question itself that determines everything. $oneanswer = ($question->type == 1 || $question->type == 2) ? true : false; + // COLLES Preferred (having questions of type 2) will use the radio elements with the name + // like qP1, qP2 etc. COLLES Actual and ATTLS have radios like q1, q2 etc. + if ($question->type == 2) { + $P = "P"; + } else { + $P = ""; + } + echo "$strresponses"; echo "". get_string('notyetanswered', 'survey'). ""; while (list ($key, $val) = each ($options)) { @@ -533,13 +547,6 @@ function survey_print_multi($question) { $q->text = get_string($q->text, "survey"); } - $oneanswer = ($q->type == 1 || $q->type == 2) ? true : false; - if ($q->type == 2) { - $P = "P"; - } else { - $P = ""; - } - echo ""; if ($oneanswer) { echo "";