Merge branch 'MDL-40481' of git://github.com/timhunt/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 11 Nov 2013 23:38:35 +0000 (00:38 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 11 Nov 2013 23:38:35 +0000 (00:38 +0100)
lib/tablelib.php
mod/quiz/report/responses/responses_table.php

index 4c1e2fc..657c72e 100644 (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) {
index 3c9c7c9..8d2a5ac 100644 (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() && $this->is_downloading() != 'xhtml') {
@@ -141,8 +147,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";
+        }
     }
 }