MDL-64950 core: Handle username in a case-insensitive fashion
authorJun Pataleta <jun@moodle.com>
Wed, 6 Mar 2019 04:25:25 +0000 (12:25 +0800)
committerJun Pataleta <jun@moodle.com>
Wed, 6 Mar 2019 04:45:27 +0000 (12:45 +0800)
lib/moodlelib.php

index 3c44836..c9d887d 100644 (file)
@@ -4769,9 +4769,22 @@ function get_complete_user_data($field, $value, $mnethostid = null) {
         return false;
     }
 
+    // Change the field to lowercase.
+    $field = core_text::strtolower($field);
+
+    // List of case insensitive fields.
+    $caseinsensitivefields = ['username'];
+
     // Build the WHERE clause for an SQL query.
     $params = array('fieldval' => $value);
-    $constraints = "$field = :fieldval AND deleted <> 1";
+
+    // Do a case-insensitive query, if necessary.
+    if (in_array($field, $caseinsensitivefields)) {
+        $fieldselect = $DB->sql_equal($field, ':fieldval', false);
+    } else {
+        $fieldselect = "$field = :fieldval";
+    }
+    $constraints = "$fieldselect AND deleted <> 1";
 
     // If we are loading user data based on anything other than id,
     // we must also restrict our search based on mnet host.