MDL-40481 quiz responses report needs cols need text_sorting

This commit is contained in:
Tim Hunt 2013-11-01 17:59:53 +00:00
parent 5386f0bbfe
commit 94ffbef19a
2 changed files with 26 additions and 5 deletions

View File

@ -218,6 +218,8 @@ class flexible_table {
/**
* Use text sorting functions for this column (required for text columns with Oracle).
* Be warned that you cannot use this with column aliases. You can only do this
* with real columns. See MDL-40481 for an example.
* @param string column name
*/
function text_sorting($column) {

View File

@ -91,10 +91,16 @@ class quiz_responses_table extends quiz_attempts_report_table {
$stepdata = $this->lateststeps[$attempt->usageid][$slot];
if (is_null($stepdata->$field)) {
if (property_exists($stepdata, $field . 'full')) {
$value = $stepdata->{$field . 'full'};
} else {
$value = $stepdata->$field;
}
if (is_null($value)) {
$summary = '-';
} else {
$summary = trim($stepdata->$field);
$summary = trim($value);
}
if ($this->is_downloading() || $field != 'responsesummary') {
@ -136,8 +142,21 @@ class quiz_responses_table extends quiz_attempts_report_table {
* @param string $alias the table alias for latest state information relating to that slot.
*/
protected function get_required_latest_state_fields($slot, $alias) {
return "$alias.questionsummary AS question$slot,
$alias.rightanswer AS right$slot,
$alias.responsesummary AS response$slot";
global $DB;
$sortableresponse = $DB->sql_order_by_text("{$alias}.questionsummary");
if ($sortableresponse === "{$alias}.questionsummary") {
// Can just order by text columns. No complexity needed.
return "{$alias}.questionsummary AS question{$slot},
{$alias}.rightanswer AS right{$slot},
{$alias}.responsesummary AS response{$slot}";
} else {
// Work-around required.
return $DB->sql_order_by_text("{$alias}.questionsummary") . " AS question{$slot},
{$alias}.questionsummary AS question{$slot}full,
" . $DB->sql_order_by_text("{$alias}.rightanswer") . " AS right{$slot},
{$alias}.rightanswer AS right{$slot}full,
" . $DB->sql_order_by_text("{$alias}.responsesummary") . " AS response{$slot},
{$alias}.responsesummary AS response{$slot}full";
}
}
}