From e401ba39df9f652cf7c28da08c4d8f1499b278c8 Mon Sep 17 00:00:00 2001 From: toanlamt <67050522+toanlamt@users.noreply.github.com> Date: Sat, 1 Nov 2025 21:08:13 +0700 Subject: [PATCH 01/13] Questionnaire: All branching shown in View your response (#616) * Questionnaire: All branching shown in View your response --------- Co-authored-by: toanlamt --- questionnaire.class.php | 4 ++++ tests/behat/dependency_question.feature | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/questionnaire.class.php b/questionnaire.class.php index 5fd3bebee..8ce677427 100644 --- a/questionnaire.class.php +++ b/questionnaire.class.php @@ -423,6 +423,10 @@ public function view_response($rid, $referer= '', $resps = '', $compare = false, } $pdf = ($outputtarget == 'pdf') ? true : false; foreach ($this->questions as $question) { + // Only show eligible questions in the response. + if (!$question->dependency_fulfilled($rid, $this->questions)) { + continue; + } if ($question->type_id < QUESPAGEBREAK) { $i++; } diff --git a/tests/behat/dependency_question.feature b/tests/behat/dependency_question.feature index 8a9a8ccb9..a35213892 100644 --- a/tests/behat/dependency_question.feature +++ b/tests/behat/dependency_question.feature @@ -106,3 +106,21 @@ Feature: Questions can be defined to be dependent on answers to multiple previou And I should see "Do you own a dog?" And I should see "Parent Question : position 1 (Q1->Dog) set" And I log out + + @javascript + Scenario: Students can only view answers to questions asked on the individual responses page. + Given I log in as "student1" + And I am on "Course 1" course homepage + And I follow "Test questionnaire" + When I navigate to "Answer the questions..." in current page administration + And I should see "Do you own a car?" + And I click on "Yes" "radio" + And I press "Next Page >>" + And I should see "What colour is the car?" + And I set the field "What colour is the car?" to "Black" + And I press "Next Page >>" + And I press "Submit questionnaire" + And I navigate to "View your response(s)" in current page administration + And I should see "Do you own a car?" + And I should see "What colour is the car?" + Then I should not see "Will you buy a car this year?" From c4dc5a95ab86b1ae7dad93fd4bc3154737d26590 Mon Sep 17 00:00:00 2001 From: Jean-Marie DUMONT <151168938+dumontj01@users.noreply.github.com> Date: Sat, 1 Nov 2025 15:11:47 +0100 Subject: [PATCH 02/13] Fix298 (#445) (#635) * add idnumber export option * Fix up lang strings for export fields. Co-authored-by: root cherry-pick form commit 566a116 Co-authored-by: Dan Marsden --- classes/responsetype/responsetype.php | 1 + lang/en/questionnaire.php | 3 ++- questionnaire.class.php | 6 +++++- settings.php | 1 + tests/csvexport_test.php | 22 +++++++++++----------- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/classes/responsetype/responsetype.php b/classes/responsetype/responsetype.php index aa9c5dd25..841ea11d4 100644 --- a/classes/responsetype/responsetype.php +++ b/classes/responsetype/responsetype.php @@ -287,6 +287,7 @@ protected function user_fields_sql() { $userfieldsarr = get_all_user_name_fields(); } $userfieldsarr = array_merge($userfieldsarr, ['username', 'department', 'institution']); + $userfieldsarr = array_merge($userfieldsarr, ['username', 'department', 'institution', 'idnumber']); $userfields = ''; foreach ($userfieldsarr as $field) { $userfields .= $userfields === '' ? '' : ', '; diff --git a/lang/en/questionnaire.php b/lang/en/questionnaire.php index e28d93520..f36e5fc13 100644 --- a/lang/en/questionnaire.php +++ b/lang/en/questionnaire.php @@ -264,7 +264,8 @@ $string['gradesdeleted'] = 'Questionnaire grades deleted'; $string['headingtext'] = 'Heading text'; $string['horizontal'] = 'Horizontal'; -$string['id'] = 'ID'; +$string['id'] = 'User id'; +$string['useridnumber'] = 'User idnumber'; $string['includerankaverages'] = 'Include rank question averages'; $string['includechoicecodes'] = 'Include choice codes'; $string['includechoicetext'] = 'Include choice text'; diff --git a/questionnaire.class.php b/questionnaire.class.php index 8ce677427..c2f8a1751 100644 --- a/questionnaire.class.php +++ b/questionnaire.class.php @@ -3016,6 +3016,7 @@ protected function user_fields() { $userfieldsarr = get_all_user_name_fields(); } $userfieldsarr = array_merge($userfieldsarr, ['username', 'department', 'institution']); + $userfieldsarr = array_merge($userfieldsarr, ['username', 'department', 'institution', 'idnumber']); return $userfieldsarr; } @@ -3186,6 +3187,9 @@ protected function process_csv_row(array &$row, if (in_array('id', $options)) { array_push($positioned, $uid); } + if (in_array('useridnumber', $options)) { + array_push($positioned, $user->idnumber); + } if (in_array('fullname', $options)) { array_push($positioned, $fullname); } @@ -3245,7 +3249,7 @@ public function generate_csv($currentgroupid, $rid='', $userid='', $choicecodes= $columns = array(); $types = array(); foreach ($options as $option) { - if (in_array($option, array('response', 'submitted', 'id'))) { + if (in_array($option, array('response', 'submitted', 'id', 'useridnumber'))) { $columns[] = get_string($option, 'questionnaire'); $types[] = 0; } else if ($option == 'useridentityfields') { diff --git a/settings.php b/settings.php index 30e640574..a21bd9b0a 100644 --- a/settings.php +++ b/settings.php @@ -43,6 +43,7 @@ 'course' => get_string('course'), 'group' => get_string('group'), 'id' => get_string('id', 'questionnaire'), + 'useridnumber' => get_string('useridnumber', 'questionnaire'), 'fullname' => get_string('fullname'), 'username' => get_string('username'), 'useridentityfields' => get_string('showuseridentity', 'admin') diff --git a/tests/csvexport_test.php b/tests/csvexport_test.php index bf90dbef6..f594ee7ca 100644 --- a/tests/csvexport_test.php +++ b/tests/csvexport_test.php @@ -199,7 +199,7 @@ private function do_test_csvexport_identity_fields($course, $cm, $user, $roleid, * @return string[] */ private function expected_complete_output() { - return ["Institution Department Course Group Full name Username Q01_Text Box 1000 Q02_Essay Box 1002 " . + return ["Institution Department Course Group User idnumber Full name Username Q01_Text Box 1000 Q02_Essay Box 1002 " . "Q03_Numeric 1004 Q04_Date 1006 Q05_Radio Buttons 1008 Q06_Drop Down 1010 Q07_Check Boxes 1012->four " . "Q07_Check Boxes 1012->five Q07_Check Boxes 1012->six Q07_Check Boxes 1012->seven Q07_Check Boxes 1012->eight " . "Q07_Check Boxes 1012->nine Q07_Check Boxes 1012->ten Q07_Check Boxes 1012->eleven " . @@ -207,13 +207,13 @@ private function expected_complete_output() { "Q08_Rate Scale 1014->fifteen Q08_Rate Scale 1014->sixteen Q08_Rate Scale 1014->seventeen " . "Q08_Rate Scale 1014->eighteen Q08_Rate Scale 1014->nineteen Q08_Rate Scale 1014->twenty " . "Q08_Rate Scale 1014->happy Q08_Rate Scale 1014->sad Q08_Rate Scale 1014->jealous Q09_Slider 1016", - " Test course 1 Testy Lastname1 username1 Test answer Some header textSome paragraph text 83 " . + " Test course 1 Testy Lastname1 username1 Test answer Some header textSome paragraph text 83 " . "27/12/2017 wind three 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 1 2 3 4 5", - " Test course 1 Testy Lastname2 username2 Test answer Some header textSome paragraph text 83 " . + " Test course 1 Testy Lastname2 username2 Test answer Some header textSome paragraph text 83 " . "27/12/2017 wind three 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 1 2 3 4 5", - " Test course 1 Testy Lastname3 username3 Test answer Some header textSome paragraph text 83 " . + " Test course 1 Testy Lastname3 username3 Test answer Some header textSome paragraph text 83 " . "27/12/2017 wind three 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 1 2 3 4 5", - " Test course 1 Testy Lastname4 username4 Test answer Some header textSome paragraph text 83 " . + " Test course 1 Testy Lastname4 username4 Test answer Some header textSome paragraph text 83 " . "27/12/2017 wind three 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 1 2 3 4 5"]; } @@ -222,7 +222,7 @@ private function expected_complete_output() { * @return string[] */ private function expected_incomplete_output() { - return ["Institution Department Course Group Full name Username Complete Q01_Text Box 1000 " . + return ["Institution Department Course Group User idnumber Full name Username Complete Q01_Text Box 1000 " . "Q02_Essay Box 1002 " . "Q03_Numeric 1004 Q04_Date 1006 Q05_Radio Buttons 1008 Q06_Drop Down 1010 Q07_Check Boxes 1012->four " . "Q07_Check Boxes 1012->five Q07_Check Boxes 1012->six Q07_Check Boxes 1012->seven Q07_Check Boxes 1012->eight " . @@ -231,15 +231,15 @@ private function expected_incomplete_output() { "Q08_Rate Scale 1014->fifteen Q08_Rate Scale 1014->sixteen Q08_Rate Scale 1014->seventeen " . "Q08_Rate Scale 1014->eighteen Q08_Rate Scale 1014->nineteen Q08_Rate Scale 1014->twenty " . "Q08_Rate Scale 1014->happy Q08_Rate Scale 1014->sad Q08_Rate Scale 1014->jealous Q09_Slider 1016", - " Test course 1 Testy Lastname1 username1 y Test answer Some header textSome paragraph text 83 " . + " Test course 1 Testy Lastname1 username1 y Test answer Some header textSome paragraph text 83 " . "27/12/2017 wind three 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 1 2 3 4 5", - " Test course 1 Testy Lastname2 username2 y Test answer Some header textSome paragraph text 83 " . + " Test course 1 Testy Lastname2 username2 y Test answer Some header textSome paragraph text 83 " . "27/12/2017 wind three 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 1 2 3 4 5", - " Test course 1 Testy Lastname3 username3 y Test answer Some header textSome paragraph text 83 " . + " Test course 1 Testy Lastname3 username3 y Test answer Some header textSome paragraph text 83 " . "27/12/2017 wind three 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 1 2 3 4 5", - " Test course 1 Testy Lastname4 username4 y Test answer Some header textSome paragraph text 83 " . + " Test course 1 Testy Lastname4 username4 y Test answer Some header textSome paragraph text 83 " . "27/12/2017 wind three 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 1 2 3 4 5", - " Test course 1 Testy Lastname5 username5 n Test answer Some header textSome paragraph text 83 " . + " Test course 1 Testy Lastname5 username5 n Test answer Some header textSome paragraph text 83 " . "27/12/2017 wind three 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 1 2 3 4 5"]; } } From e8c57588a62a3c4c4be71e059435600baec204ec Mon Sep 17 00:00:00 2001 From: Ahmed Raza Date: Sat, 1 Nov 2025 19:13:22 +0500 Subject: [PATCH 03/13] Added question name as data attribute for anchoring. This PR is made for #253 (#637) --- classes/output/renderer.php | 3 ++- templates/question_container.mustache | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/classes/output/renderer.php b/classes/output/renderer.php index 85497f8a3..a35cdb944 100755 --- a/classes/output/renderer.php +++ b/classes/output/renderer.php @@ -244,7 +244,8 @@ public function question_output($question, $response, $qnum, $blankquestionnaire $pagetags->notifications = $this->notification($notification, \core\output\notification::NOTIFY_ERROR); } } - + $pagetags->questionname = $question->name; + return $this->render_from_template('mod_questionnaire/question_container', $pagetags); } diff --git a/templates/question_container.mustache b/templates/question_container.mustache index f29c93acf..97ebd1a96 100644 --- a/templates/question_container.mustache +++ b/templates/question_container.mustache @@ -58,7 +58,7 @@ {{{required}}} {{/qnum}} -
+
{{#label}}