diff --git a/enrol/database/lib.php b/enrol/database/lib.php index 50f2571fb53be..818b05ecc26ce 100644 --- a/enrol/database/lib.php +++ b/enrol/database/lib.php @@ -74,7 +74,7 @@ public function sync_user_enrolments($user) { $localrolefield = $this->get_config('localrolefield'); $localuserfield = $this->get_config('localuserfield'); - $localcoursefiled = $this->get_config('localcoursefield'); + $localcoursefield = $this->get_config('localcoursefield'); $unenrolaction = $this->get_config('unenrolaction'); $defaultrole = $this->get_config('defaultrole'); @@ -117,7 +117,7 @@ public function sync_user_enrolments($user) { // missing course info continue; } - if (!$course = $DB->get_record('course', array($localcoursefiled=>$fields[$coursefield]), 'id,visible')) { + if (!$course = $DB->get_record('course', array($localcoursefield=>$fields[$coursefield]), 'id,visible')) { continue; } if (!$course->visible and $ignorehidden) { @@ -265,7 +265,7 @@ public function sync_enrolments() { $localrolefield = $this->get_config('localrolefield'); $localuserfield = $this->get_config('localuserfield'); - $localcoursefiled = $this->get_config('localcoursefield'); + $localcoursefield = $this->get_config('localcoursefield'); $unenrolaction = $this->get_config('unenrolaction'); $defaultrole = $this->get_config('defaultrole'); @@ -308,7 +308,7 @@ public function sync_enrolments() { // first find all existing courses with enrol instance $existing = array(); - $sql = "SELECT c.id, c.visible, c.$localcoursefiled AS mapping, e.id AS enrolid + $sql = "SELECT c.id, c.visible, c.$localcoursefield AS mapping, e.id AS enrolid FROM {course} c JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'database')"; $rs = $DB->get_recordset_sql($sql); // watch out for idnumber duplicates @@ -321,11 +321,17 @@ public function sync_enrolments() { $rs->close(); // add necessary enrol instances that are not present yet - $sql = "SELECT c.id, c.visible, c.$localcoursefiled AS mapping + $params = array(); + $localnotempty = ""; + if ($localcoursefield !== 'id') { + $localnotempty = "AND c.$localcoursefield <> :lcfe"; + $params['lcfe'] = $DB->sql_empty(); + } + $sql = "SELECT c.id, c.visible, c.$localcoursefield AS mapping FROM {course} c LEFT JOIN {enrol} e ON (e.courseid = c.id AND e.enrol = 'database') - WHERE e.id IS NULL AND c.$localcoursefiled <> ?"; - $rs = $DB->get_recordset_sql($sql, array($DB->sql_empty())); + WHERE e.id IS NULL $localnotempty"; + $rs = $DB->get_recordset_sql($sql, $params); foreach ($rs as $course) { if (empty($course->mapping)) { continue;