diff --git a/auth/db/auth.php b/auth/db/auth.php index 57095139adc..5882bcf6c63 100644 --- a/auth/db/auth.php +++ b/auth/db/auth.php @@ -65,7 +65,7 @@ class auth_plugin_db extends auth_plugin_base { $authdb->Close(); // user exists externally // check username/password internally - if ($user = $DB->get_record('user', array('username'=>$username, 'mnethostid'=>$CFG->mnet_localhost_id))) { + if ($user = $DB->get_record('user', array('username'=>$username, 'mnethostid'=>$CFG->mnet_localhost_id, 'auth'=>$this->authtype))) { return validate_internal_user_password($user, $password); } } else { @@ -191,8 +191,16 @@ class auth_plugin_db extends auth_plugin_base { * @return bool True on success */ function user_update_password($user, $newpassword) { + global $DB; + if ($this->is_internal()) { - return update_internal_user_password($user, $newpassword); + $puser = $DB->get_record('user', array('id'=>$user->id), '*', MUST_EXIST); + if (update_internal_user_password($puser, $newpassword)) { + $user->password = $puser->password; + return true; + } else { + return false; + } } else { // we should have never been called! return false; @@ -346,7 +354,7 @@ class auth_plugin_db extends auth_plugin_base { if ($verbose) { mtrace(get_string('auth_dbuserstoadd','auth_db',count($add_users))); } - $transaction = $DB->start_delegated_transaction(); + // Do not use transactions around this foreach, we want to skip problematic users, not revert everything. foreach($add_users as $user) { $username = $user; $user = $this->get_userinfo_asobj($user); @@ -372,9 +380,16 @@ class auth_plugin_db extends auth_plugin_base { } else { $user->timecreated = time(); $user->timemodified = $user->timecreated; - $id = $DB->insert_record ('user', $user); // it is truly a new user - if ($verbose) { - mtrace("\t".get_string('auth_dbinsertuser', 'auth_db', array('name'=>$user->username, 'id'=>$id))); + try { + $id = $DB->insert_record('user', $user); // it is truly a new user + if ($verbose) { + mtrace("\t".get_string('auth_dbinsertuser', 'auth_db', array('name'=>$user->username, 'id'=>$id))); + } + } catch (moodle_exception $e) { + if ($verbose) { + mtrace("\t".get_string('auth_dbinsertusererror', 'auth_db', $user->username)); + } + continue; } // if relevant, tag for password generation if ($this->is_internal()) { @@ -383,7 +398,6 @@ class auth_plugin_db extends auth_plugin_base { } } } - $transaction->allow_commit(); unset($add_users); // free mem } return 0;