From 6073203ab5c9dc6441fe877bc4e46210e73bd981 Mon Sep 17 00:00:00 2001
From: ben <bendubuisson@gmail.com>
Date: Fri, 5 Sep 2014 23:52:12 +1200
Subject: [PATCH] fix for bug MDL-46803;

---
 lib/enrollib.php  | 21 +++++++++++++++++++++
 lib/moodlelib.php | 15 +++++++++++++--
 2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/lib/enrollib.php b/lib/enrollib.php
index 2f9351a..721c1ab 100644
--- a/lib/enrollib.php
+++ b/lib/enrollib.php
@@ -134,6 +134,27 @@ function enrol_get_plugin($name) {
 
     return new $class();
 }
+/*
+*Returns true if user has multiple roles
+*@params int $contextid
+* @params int $userid
+* @return boolean
+*/
+
+function user_has_multiple_roles($contextid, $userid)
+{
+    global $DB;
+    $count = $DB->count_records('role_assignments', array('contextid'=>$contextid, 'userid'=>$userid));
+    if($count>1)
+    {
+        return true;
+    }
+    else
+    {
+        return false;
+    }
+}
+
 
 /**
  * Returns enrolment instances in given course.
diff --git a/lib/moodlelib.php b/lib/moodlelib.php
index f4ffd63..cf2045c 100644
--- a/lib/moodlelib.php
+++ b/lib/moodlelib.php
@@ -5397,8 +5397,12 @@ function reset_course_userdata($data) {
                 $params = array('courseid' => $data->courseid, 'courselevel' => CONTEXT_COURSE);
             }
 
+
+
             $rs = $DB->get_recordset_sql($sql, $params);
+
             foreach ($rs as $ue) {
+
                 if (!isset($instances[$ue->enrolid])) {
                     continue;
                 }
@@ -5408,8 +5412,15 @@ function reset_course_userdata($data) {
                     continue;
                 }
 
-                $plugin->unenrol_user($instance, $ue->userid);
-                $data->unenrolled[$ue->userid] = $ue->userid;
+                 if (user_has_multiple_roles($context->id, $ue->userid)) //if user has multiple roles
+                 {
+                        role_unassign($withroleid, $ue->userid, $context->id);
+                 }
+                 else
+                 {
+                      $plugin->unenrol_user($instance, $ue->userid);
+                      $data->unenrolled[$ue->userid] = $ue->userid;
+                 }
             }
             $rs->close();
         }