diff --git a/report/questioninstances/index.php b/report/questioninstances/index.php index 33e42376281..3a34cb25b7f 100644 --- a/report/questioninstances/index.php +++ b/report/questioninstances/index.php @@ -89,14 +89,29 @@ if ($requestedqtype) { $ctxpreload = context_helper::get_preload_record_columns_sql('con'); $ctxgroupby = implode(',', array_keys(context_helper::get_preload_record_columns('con'))); $counts = $DB->get_records_sql(" - SELECT qc.contextid, count(1) as numquestions, sum(hidden) as numhidden, $ctxpreload - FROM {question} q - JOIN {question_categories} qc ON q.category = qc.id - JOIN {context} con ON con.id = qc.contextid - $sqlqtypetest - AND (q.parent = 0 OR q.parent = q.id) - GROUP BY qc.contextid, $ctxgroupby - ORDER BY numquestions DESC, numhidden ASC, con.contextlevel ASC, con.id ASC", $params); + SELECT result.contextid, SUM(numquestions) AS numquestions, SUM(numhidden) AS numhidden, $ctxpreload + FROM (SELECT data.contextid, COUNT(data.numquestions) AS numquestions, + (SELECT COUNT(qv.id) + FROM {question_versions} qv + WHERE qv.id = data.versionid + AND qv.status = 1) AS numhidden + FROM (SELECT qv.id as versionid, qc.contextid, 1 AS numquestions + FROM {question} q + JOIN {question_versions} qv ON qv.questionid = q.id + JOIN {question_bank_entries} qbe ON qbe.id = qv.questionbankentryid + JOIN {question_categories} qc ON qc.id = qbe.questioncategoryid + JOIN {context} con ON con.id = qc.contextid + $sqlqtypetest + AND qv.version = (SELECT MAX(v.version) + FROM {question_versions} v + JOIN {question_bank_entries} be + ON be.id = v.questionbankentryid + WHERE be.id = qbe.id) + AND (q.parent = 0 OR q.parent = q.id)) data + GROUP BY data.contextid, data.versionid) result + JOIN {context} con ON con.id = result.contextid + GROUP BY result.contextid, $ctxgroupby + ORDER BY numquestions DESC, numhidden ASC, con.contextlevel ASC, con.id ASC", $params); // Print the report heading. echo $OUTPUT->heading($title); diff --git a/report/questioninstances/tests/behat/question_reports.feature b/report/questioninstances/tests/behat/question_reports.feature new file mode 100644 index 00000000000..78d2d2b2f47 --- /dev/null +++ b/report/questioninstances/tests/behat/question_reports.feature @@ -0,0 +1,61 @@ +@core @core_question @javascript @report @report_questioninstance +Feature: A Teacher can generate question instance reports + In order to see question instance reports + As a Teacher + I need to generate them + + Background: + Given the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + And the following "courses" exist: + | fullname | shortname | format | + | Course 1 | C1 | weeks | + And the following "question categories" exist: + | contextlevel | reference | name | + | Course | C1 | Test questions | + And the following "activities" exist: + | activity | course | name | + | quiz | C1 | Test quiz Q001 | + And the following "questions" exist: + | questioncategory | qtype | name | + | Test questions | truefalse | TF | + | Test questions | shortanswer | SA | + And quiz "Test quiz Q001" contains the following questions: + | question | page | maxmark | + | TF | 1 | 5.0 | + | SA | 1 | 5.0 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + And the following "question categories" exist: + | contextlevel | reference | name | + | Activity module | Test quiz Q001 | Quiz category | + + @javascript + Scenario: Generate general and specific report + Given I am on the "C1" "Course" page logged in as "admin" + And I navigate to "Reports > Question instances" in site administration + When I press "Get the report" + Then "Course: Course 1" row "Total" column of "generaltable" table should contain "2" + And "Course: Course 1" row "Visible" column of "generaltable" table should contain "2" + And "Course: Course 1" row "Hidden" column of "generaltable" table should contain "0" + + @javascript + Scenario: Generate report displaying hidden questions + Given I am on the "Test quiz Q001" "quiz activity" page logged in as "admin" + And I navigate to "Question bank > Questions" in current page administration + And I click on "Edit" "link" in the "TF" "table_row" + And I choose "Delete" in the open action menu + And I press "Delete" + And I navigate to "Reports > Question instances" in site administration + When I press "Get the report" + Then "Course: Course 1" row "Total" column of "generaltable" table should contain "2" + And "Course: Course 1" row "Visible" column of "generaltable" table should contain "1" + And "Course: Course 1" row "Hidden" column of "generaltable" table should contain "1" + And I click on "menuqtype" "select" + And I click on "True/False" "option" + And I press "Get the report" + And "Course: Course 1" row "Total" column of "generaltable" table should contain "1" + And "Course: Course 1" row "Visible" column of "generaltable" table should contain "0" + And "Course: Course 1" row "Hidden" column of "generaltable" table should contain "1"