diff --git a/auth/ldap/auth.php b/auth/ldap/auth.php index 0364657bc9d..3392f7046d6 100644 --- a/auth/ldap/auth.php +++ b/auth/ldap/auth.php @@ -534,6 +534,7 @@ class auth_plugin_ldap extends auth_plugin_base { * * @param object $user new user object * @param boolean $notify print notice with link and terminate + * @return boolean success */ function user_signup($user, $notify=true) { global $CFG, $DB, $PAGE, $OUTPUT; @@ -889,7 +890,7 @@ class auth_plugin_ldap extends auth_plugin_base { foreach ($users as $user) { echo "\t"; print_string('auth_dbupdatinguser', 'auth_db', array('name'=>$user->username, 'id'=>$user->id)); - if (!$this->update_user_record($user->username, $updatekeys)) { + if (!$this->update_user_record($user->username, $updatekeys, true)) { echo ' - '.get_string('skipped'); } echo "\n"; @@ -987,8 +988,11 @@ class auth_plugin_ldap extends auth_plugin_base { * * @param string $username username * @param boolean $updatekeys true to update the local record with the external LDAP values. + * @param bool $triggerevent set false if user_updated event should not be triggered. + * This will not affect user_password_updated event triggering. + * @return stdClass|bool updated user record or false if there is no new info to update. */ - function update_user_record($username, $updatekeys = false) { + protected function update_user_record($username, $updatekeys = false, $triggerevent = false) { global $CFG, $DB; // Just in case check text case @@ -1030,7 +1034,7 @@ class auth_plugin_ldap extends auth_plugin_base { } } } - user_update_user($newuser, false, false); + user_update_user($newuser, false, $triggerevent); } } else { return false; diff --git a/auth/ldap/tests/plugin_test.php b/auth/ldap/tests/plugin_test.php index abd997ad322..23cca677069 100644 --- a/auth/ldap/tests/plugin_test.php +++ b/auth/ldap/tests/plugin_test.php @@ -136,9 +136,25 @@ class auth_ldap_plugin_testcase extends advanced_testcase { $auth = get_auth_plugin('ldap'); ob_start(); + $sink = $this->redirectEvents(); $auth->sync_users(true); + $events = $sink->get_events(); + $sink->close(); ob_end_clean(); + // Check events, 5 users created with 2 users having roles. + $this->assertCount(7, $events); + foreach ($events as $index => $event) { + $usercreatedindex = array(0, 2, 4, 5, 6); + $roleassignedindex = array (1, 3); + if (in_array($index, $usercreatedindex)) { + $this->assertInstanceOf('\core\event\user_created', $event); + } + if (in_array($index, $roleassignedindex)) { + $this->assertInstanceOf('\core\event\role_assigned', $event); + } + } + $this->assertEquals(5, $DB->count_records('user', array('auth'=>'ldap'))); $this->assertEquals(2, $DB->count_records('role_assignments')); $this->assertEquals(2, $DB->count_records('role_assignments', array('roleid'=>$creatorrole->id))); @@ -150,9 +166,15 @@ class auth_ldap_plugin_testcase extends advanced_testcase { $this->delete_ldap_user($connection, $topdn, 1); ob_start(); + $sink = $this->redirectEvents(); $auth->sync_users(true); + $events = $sink->get_events(); + $sink->close(); ob_end_clean(); + // Check events, no new event. + $this->assertCount(0, $events); + $this->assertEquals(5, $DB->count_records('user', array('auth'=>'ldap'))); $this->assertEquals(0, $DB->count_records('user', array('suspended'=>1))); $this->assertEquals(0, $DB->count_records('user', array('deleted'=>1))); @@ -166,9 +188,17 @@ class auth_ldap_plugin_testcase extends advanced_testcase { $auth = get_auth_plugin('ldap'); ob_start(); + $sink = $this->redirectEvents(); $auth->sync_users(true); + $events = $sink->get_events(); + $sink->close(); ob_end_clean(); + // Check events, 1 user got updated. + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\core\event\user_updated', $event); + $this->assertEquals(5, $DB->count_records('user', array('auth'=>'ldap'))); $this->assertEquals(0, $DB->count_records('user', array('auth'=>'nologin', 'username'=>'username1'))); $this->assertEquals(1, $DB->count_records('user', array('auth'=>'ldap', 'suspended'=>'1', 'username'=>'username1'))); @@ -179,9 +209,17 @@ class auth_ldap_plugin_testcase extends advanced_testcase { $this->create_ldap_user($connection, $topdn, 1); ob_start(); + $sink = $this->redirectEvents(); $auth->sync_users(true); + $events = $sink->get_events(); + $sink->close(); ob_end_clean(); + // Check events, 1 user got updated. + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\core\event\user_updated', $event); + $this->assertEquals(5, $DB->count_records('user', array('auth'=>'ldap'))); $this->assertEquals(0, $DB->count_records('user', array('suspended'=>1))); $this->assertEquals(0, $DB->count_records('user', array('deleted'=>1))); @@ -191,9 +229,17 @@ class auth_ldap_plugin_testcase extends advanced_testcase { $DB->set_field('user', 'auth', 'nologin', array('username'=>'username1')); ob_start(); + $sink = $this->redirectEvents(); $auth->sync_users(true); + $events = $sink->get_events(); + $sink->close(); ob_end_clean(); + // Check events, 1 user got updated. + $this->assertCount(1, $events); + $event = reset($events); + $this->assertInstanceOf('\core\event\user_updated', $event); + $this->assertEquals(5, $DB->count_records('user', array('auth'=>'ldap'))); $this->assertEquals(0, $DB->count_records('user', array('suspended'=>1))); $this->assertEquals(0, $DB->count_records('user', array('deleted'=>1))); @@ -208,9 +254,19 @@ class auth_ldap_plugin_testcase extends advanced_testcase { $this->delete_ldap_user($connection, $topdn, 1); ob_start(); + $sink = $this->redirectEvents(); $auth->sync_users(true); + $events = $sink->get_events(); + $sink->close(); ob_end_clean(); + // Check events, 2 events role_unassigned and user_deleted. + $this->assertCount(2, $events); + $event = array_pop($events); + $this->assertInstanceOf('\core\event\user_deleted', $event); + $event = array_pop($events); + $this->assertInstanceOf('\core\event\role_unassigned', $event); + $this->assertEquals(5, $DB->count_records('user', array('auth'=>'ldap'))); $this->assertEquals(0, $DB->count_records('user', array('username'=>'username1'))); $this->assertEquals(0, $DB->count_records('user', array('suspended'=>1))); @@ -221,9 +277,19 @@ class auth_ldap_plugin_testcase extends advanced_testcase { $this->create_ldap_user($connection, $topdn, 1); ob_start(); + $sink = $this->redirectEvents(); $auth->sync_users(true); + $events = $sink->get_events(); + $sink->close(); ob_end_clean(); + // Check events, 2 events role_assigned and user_created. + $this->assertCount(2, $events); + $event = array_pop($events); + $this->assertInstanceOf('\core\event\role_assigned', $event); + $event = array_pop($events); + $this->assertInstanceOf('\core\event\user_created', $event); + $this->assertEquals(6, $DB->count_records('user', array('auth'=>'ldap'))); $this->assertEquals(1, $DB->count_records('user', array('username'=>'username1'))); $this->assertEquals(0, $DB->count_records('user', array('suspended'=>1))); diff --git a/auth/ldap/upgrade.txt b/auth/ldap/upgrade.txt new file mode 100644 index 00000000000..90aa44fe957 --- /dev/null +++ b/auth/ldap/upgrade.txt @@ -0,0 +1,4 @@ +This files describes API changes in the auth_ldap code. +=== 2.8.7 === +* auth_plugin_ldap::update_user_record() accepts an additional (optional) param + to trigger update event.