MDL-45641 event: Option to trigger user event manually

On some pages full user data is not stored before user_created/
user_updated event is triggred. So giving option to trigger that
manually, so it can be triggred after all data is saved
This commit is contained in:
Rajesh Taneja
2014-06-27 16:18:45 +08:00
parent 5c1049f72b
commit 7345a2af94
7 changed files with 95 additions and 25 deletions
+20
View File
@@ -97,4 +97,24 @@ class user_created extends base {
protected function get_legacy_logdata() {
return array(SITEID, 'user', 'add', '/view.php?id='.$this->objectid, fullname($this->get_legacy_eventdata()));
}
/**
* Create instance of event.
*
* @since Moodle 2.6.4, 2.7.1
*
* @param int $userid id of user
* @return user_created
*/
public static function create_from_userid($userid) {
$data = array(
'objectid' => $userid,
'relateduserid' => $userid,
'context' => \context_user::instance($userid)
);
// Create user_created event.
$event = self::create($data);
return $event;
}
}
+20
View File
@@ -97,4 +97,24 @@ class user_updated extends base {
protected function get_legacy_logdata() {
return array(SITEID, 'user', 'update', 'view.php?id='.$this->objectid, '');
}
/**
* Create instance of event.
*
* @since Moodle 2.6.4, 2.7.1
*
* @param int $userid id of user
* @return user_updated
*/
public static function create_from_userid($userid) {
$data = array(
'objectid' => $userid,
'relateduserid' => $userid,
'context' => \context_user::instance($userid)
);
// Create user_updated event.
$event = self::create($data);
return $event;
}
}
+7
View File
@@ -1,6 +1,13 @@
This files describes API changes in core libraries and APIs,
information provided here is intended especially for developers.
=== 2.6.4 / 2.7.1 ===
* update_internal_user_password() accepts optional boolean $fasthash for fast
hashing.
* user_update_user() and user_create_user() api's accept optional param
$triggerevent to avoid respective events to be triggred from the api's.
=== 2.5.5 / 2.6.2 / 2.7 ===
* New "Time spent waiting for the database" performance metric displayed along with the
+3 -2
View File
@@ -156,6 +156,7 @@ $userform = new user_editadvanced_form(null, array(
$userform->set_data($user);
if ($usernew = $userform->get_data()) {
$usercreated = false;
if (empty($usernew->auth)) {
//user editing self
@@ -182,7 +183,7 @@ if ($usernew = $userform->get_data()) {
} else {
$usernew->password = hash_internal_user_password($usernew->newpassword);
}
$usernew->id = user_create_user($usernew, false);
$usernew->id = user_create_user($usernew, false, false);
} else {
$usernew = file_postupdate_standard_editor($usernew, 'description', $editoroptions, $usercontext, 'user', 'profile', 0);
// Pass a true old $user here.
@@ -190,7 +191,7 @@ if ($usernew = $userform->get_data()) {
// Auth update failed.
print_error('cannotupdateuseronexauth', '', '', $user->auth);
}
user_update_user($usernew, false);
user_update_user($usernew, false, false);
//set new password if specified
if (!empty($usernew->newpassword)) {
+9 -4
View File
@@ -158,8 +158,8 @@ class core_user_external extends external_api {
}
// End of user info validation.
// create the user data now!
$user['id'] = user_create_user($user);
// Create the user data now!
$user['id'] = user_create_user($user, true, false);
// custom fields
if(!empty($user['customfields'])) {
@@ -171,6 +171,9 @@ class core_user_external extends external_api {
profile_save_data((object) $user);
}
// Trigger event.
\core\event\user_created::create_from_userid($user['id'])->trigger();
//preferences
if (!empty($user['preferences'])) {
foreach($user['preferences'] as $preference) {
@@ -341,10 +344,9 @@ class core_user_external extends external_api {
$transaction = $DB->start_delegated_transaction();
foreach ($params['users'] as $user) {
user_update_user($user);
user_update_user($user, true, false);
//update user custom fields
if(!empty($user['customfields'])) {
foreach($user['customfields'] as $customfield) {
$user["profile_field_".$customfield['type']] = $customfield['value']; //profile_save_data() saves profile file
//it's expecting a user with the correct id,
@@ -352,6 +354,9 @@ class core_user_external extends external_api {
}
profile_save_data((object) $user);
}
// Trigger event.
\core\event\user_updated::create_from_userid($user['id'])->trigger();
//preferences
if (!empty($user['preferences'])) {
+12 -19
View File
@@ -30,9 +30,10 @@
*
* @param stdClass $user user to create
* @param bool $updatepassword if true, authentication plugin will update password.
* @param bool $triggerevent set false if user_created event should not be triggred.
* @return int id of the newly created user
*/
function user_create_user($user, $updatepassword = true) {
function user_create_user($user, $updatepassword = true, $triggerevent = true) {
global $CFG, $DB;
// Set the timecreate field to the current time.
@@ -88,14 +89,10 @@ function user_create_user($user, $updatepassword = true) {
$authplugin->user_update_password($newuser, $userpassword);
}
// Trigger event.
$event = \core\event\user_created::create(
array(
'objectid' => $newuserid,
'context' => $usercontext
)
);
$event->trigger();
// Trigger event If required.
if ($triggerevent) {
\core\event\user_created::create_from_userid($newuserid)->trigger();
}
return $newuserid;
}
@@ -105,8 +102,9 @@ function user_create_user($user, $updatepassword = true) {
*
* @param stdClass $user the user to update
* @param bool $updatepassword if true, authentication plugin will update password.
* @param bool $triggerevent set false if user_updated event should not be triggred.
*/
function user_update_user($user, $updatepassword = true) {
function user_update_user($user, $updatepassword = true, $triggerevent = true) {
global $DB;
// set the timecreate field to the current time
@@ -164,15 +162,10 @@ function user_update_user($user, $updatepassword = true) {
}
}
}
// Trigger event.
$event = \core\event\user_updated::create(
array(
'objectid' => $user->id,
'context' => context_user::instance($user->id)
)
);
$event->trigger();
// Trigger event if required.
if ($triggerevent) {
\core\event\user_updated::create_from_userid($user->id)->trigger();
}
}
/**
+24
View File
@@ -76,6 +76,22 @@ class core_userliblib_testcase extends advanced_testcase {
user_update_user($user, false);
$dbuser = $DB->get_record('user', array('id' => $user->id));
$this->assertSame($password, $dbuser->password);
// Verify event is not triggred by user_update_user when needed.
$sink = $this->redirectEvents();
user_update_user($user, false, false);
$events = $sink->get_events();
$sink->close();
$this->assertCount(0, $events);
// With password, there should be 1 event.
$sink = $this->redirectEvents();
user_update_user($user, true, false);
$events = $sink->get_events();
$sink->close();
$this->assertCount(1, $events);
$event = array_pop($events);
$this->assertInstanceOf('\core\event\user_updated', $event);
}
/**
@@ -128,5 +144,13 @@ class core_userliblib_testcase extends advanced_testcase {
$this->assertEventLegacyData($dbuser, $event);
$expectedlogdata = array(SITEID, 'user', 'add', '/view.php?id='.$event->objectid, fullname($dbuser));
$this->assertEventLegacyLogData($expectedlogdata, $event);
// Verify event is not triggred by user_create_user when needed.
$user = array('username' => 'usernametest2'); // Create another user.
$sink = $this->redirectEvents();
user_create_user($user, true, false);
$events = $sink->get_events();
$sink->close();
$this->assertCount(0, $events);
}
}