Merge branch 'master_MDL-73778-oracle-behat-fix' of https://github.com/catalyst/moodle-MDL-70329

This commit is contained in:
Eloy Lafuente (stronk7) 2022-02-22 17:23:27 +01:00
commit ea403ad70d
3 changed files with 32 additions and 27 deletions

View File

@ -626,7 +626,7 @@ class quiz_grading_report extends quiz_default_report {
protected function get_usage_ids_where_question_in_state($summarystate, $slot,
$questionid = null, $orderby = 'random', $page = 0, $pagesize = null) {
$dm = new question_engine_data_mapper();
$extraselect = '';
if ($pagesize && $orderby != 'random') {
$limitfrom = $page * $pagesize;
} else {
@ -643,16 +643,17 @@ class quiz_grading_report extends quiz_default_report {
foreach ($userfieldsapi->get_required_fields([\core_user\fields::PURPOSE_IDENTITY]) as $field) {
$customfields[] = $field;
}
if ($orderby == 'date') {
if ($orderby === 'date') {
list($statetest, $params) = $dm->in_summary_state_test(
'manuallygraded', false, 'mangrstate');
$orderby = "(
$extraselect = "(
SELECT MAX(sortqas.timecreated)
FROM {question_attempt_steps} sortqas
WHERE sortqas.questionattemptid = qa.id
AND sortqas.state $statetest
)";
} else if ($orderby == 'studentfirstname' || $orderby == 'studentlastname' || in_array($orderby, $customfields)) {
) as tcreated";
$orderby = "tcreated";
} else if ($orderby === 'studentfirstname' || $orderby === 'studentlastname' || in_array($orderby, $customfields)) {
$qubaids->from .= " JOIN {user} u ON quiza.userid = u.id {$userfieldssql->joins}";
// For name sorting, map orderby form value to
// actual column names; 'idnumber' maps naturally.
@ -666,7 +667,7 @@ class quiz_grading_report extends quiz_default_report {
}
return $dm->load_questions_usages_where_question_in_state($qubaids, $summarystate,
$slot, $questionid, $orderby, $params, $limitfrom, $pagesize);
$slot, $questionid, $orderby, $params, $limitfrom, $pagesize, $extraselect);
}
/**

View File

@ -713,24 +713,29 @@ ORDER BY
* @param int $limitfrom implements paging of the results.
* Ignored if $orderby = random or $limitnum is null.
* @param int $limitnum implements paging of the results. null = all.
* @param string $extraselect anything passed here will be added to the SELECT list, use this to return extra data.
* @return array with two elements, an array of usage ids, and a count of the total number.
*/
public function load_questions_usages_where_question_in_state(
qubaid_condition $qubaids, $summarystate, $slot, $questionid = null,
$orderby = 'random', $params = array(), $limitfrom = 0, $limitnum = null) {
$orderby = 'random', $params = array(), $limitfrom = 0, $limitnum = null, $extraselect = '') {
$extrawhere = '';
if ($questionid) {
$extrawhere .= ' AND qa.questionid = :questionid';
$params['questionid'] = $questionid;
}
if ($summarystate != 'all') {
if ($summarystate !== 'all') {
list($test, $sparams) = $this->in_summary_state_test($summarystate);
$extrawhere .= ' AND qas.state ' . $test;
$params += $sparams;
}
if ($orderby == 'random') {
if (!empty($extraselect)) {
$extraselect = ', ' . $extraselect;
}
if ($orderby === 'random') {
$sqlorderby = '';
} else if ($orderby) {
$sqlorderby = 'ORDER BY ' . $orderby;
@ -747,29 +752,24 @@ ORDER BY
$qubaidswhere = $qubaids->where(); // Must call this before params.
$params += $qubaids->from_where_params();
$params['slot'] = $slot;
$sql = "SELECT qa.questionusageid,
1
$extraselect
FROM {$qubaids->from_question_attempts('qa')}
JOIN {question_attempt_steps} qas ON qas.questionattemptid = qa.id
AND qas.sequencenumber = {$this->latest_step_for_qa_subquery()}
JOIN {question} q ON q.id = qa.questionid
WHERE {$qubaidswhere}
AND qa.slot = :slot
$extrawhere
$sqlorderby";
$qubaids = $this->db->get_records_sql_menu("
SELECT
qa.questionusageid,
1
FROM {$qubaids->from_question_attempts('qa')}
JOIN {question_attempt_steps} qas ON qas.questionattemptid = qa.id
AND qas.sequencenumber = {$this->latest_step_for_qa_subquery()}
JOIN {question} q ON q.id = qa.questionid
WHERE
{$qubaidswhere} AND
qa.slot = :slot
$extrawhere
$sqlorderby
", $params);
$qubaids = $this->db->get_records_sql_menu($sql, $params);
$qubaids = array_keys($qubaids);
$count = count($qubaids);
if ($orderby == 'random') {
if ($orderby === 'random') {
shuffle($qubaids);
$limitfrom = 0;
}

View File

@ -1,5 +1,9 @@
This files describes API changes for the core question engine.
=== 4.0 ===
1) A new optional parameter $extraselect has been added as a part of load_questions_usages_where_question_in_state()
method in question/engine/datalib.php, anything passed here will be added to the SELECT list, use this to return extra data.
=== 3.9 ===
1) In the past, whenever a question_usage_by_activity was loaded from the database,