MDL-66017 block_myoverview: Oracle compatibility fix
authorDavo Smith <davo.smith@synergy-learning.com>
Thu, 10 Oct 2019 15:28:08 +0000 (16:28 +0100)
committerSara Arjona <sara@moodle.com>
Thu, 10 Oct 2019 22:09:56 +0000 (00:09 +0200)
blocks/myoverview/classes/output/main.php
course/lib.php

index 869718b..5f44bb3 100644 (file)
@@ -358,8 +358,9 @@ class main implements renderable, templatable {
         list($csql, $params) = $DB->get_in_or_equal(array_keys($courses), SQL_PARAMS_NAMED);
         $select = "instanceid $csql AND fieldid = :fieldid";
         $params['fieldid'] = $fieldid;
-        $values = $DB->get_records_select_menu('customfield_data', $select, $params, 'value',
-            'DISTINCT value, value AS value2');
+        $distinctablevalue = $DB->sql_compare_text('value');
+        $values = $DB->get_records_select_menu('customfield_data', $select, $params, $DB->sql_order_by_text('value'),
+            "DISTINCT $distinctablevalue, $distinctablevalue AS value2");
         $values = array_filter($values);
         if (!$values) {
             return [];
index 8c6ed90..fbeea7a 100644 (file)
@@ -4454,17 +4454,19 @@ function course_filter_courses_by_customfield(
 
     // Get a list of courseids that match that custom field value.
     if ($customfieldvalue == COURSE_CUSTOMFIELD_EMPTY) {
+        $comparevalue = $DB->sql_compare_text('cd.value');
         $sql = "
            SELECT c.id
              FROM {course} c
         LEFT JOIN {customfield_data} cd ON cd.instanceid = c.id AND cd.fieldid = :fieldid
             WHERE c.id $csql
-              AND (cd.value IS NULL OR cd.value = '' OR cd.value = '0')
+              AND (cd.value IS NULL OR $comparevalue = '' OR $comparevalue = '0')
         ";
         $params['fieldid'] = $fieldid;
         $matchcourseids = $DB->get_fieldset_sql($sql, $params);
     } else {
-        $select = "fieldid = :fieldid AND value = :customfieldvalue AND instanceid $csql";
+        $comparevalue = $DB->sql_compare_text('value');
+        $select = "fieldid = :fieldid AND $comparevalue = :customfieldvalue AND instanceid $csql";
         $params['fieldid'] = $fieldid;
         $params['customfieldvalue'] = $customfieldvalue;
         $matchcourseids = $DB->get_fieldset_select('customfield_data', 'instanceid', $select, $params);