Overrides Drupal\Core\Entity\DatabaseStorageController::postSave().
Overrides DatabaseStorageController::postSave
protected function postSave(EntityInterface $entity, $update) {
if ($update) {
// If the password has been changed, delete all open sessions for the
// user and recreate the current one.
if ($entity->pass != $entity->original->pass) {
drupal_session_destroy_uid($entity->uid);
if ($entity->uid == $GLOBALS['user']->uid) {
drupal_session_regenerate();
}
}
// Remove roles that are no longer enabled for the user.
$entity->roles = array_filter($entity->roles);
// Reload user roles if provided.
if ($entity->roles != $entity->original->roles) {
db_delete('users_roles')
->condition('uid', $entity->uid)
->execute();
$query = db_insert('users_roles')
->fields(array(
'uid',
'rid',
));
foreach (array_keys($entity->roles) as $rid) {
if (!in_array($rid, array(
DRUPAL_ANONYMOUS_RID,
DRUPAL_AUTHENTICATED_RID,
))) {
$query
->values(array(
'uid' => $entity->uid,
'rid' => $rid,
));
}
}
$query
->execute();
}
// If the user was blocked, delete the user's sessions to force a logout.
if ($entity->original->status != $entity->status && $entity->status == 0) {
drupal_session_destroy_uid($entity->uid);
}
// Send emails after we have the new user object.
if ($entity->status != $entity->original->status) {
// The user's status is changing; conditionally send notification email.
$op = $entity->status == 1 ? 'status_activated' : 'status_blocked';
_user_mail_notify($op, $entity);
}
}
else {
// Save user roles.
if (count($entity->roles) > 1) {
$query = db_insert('users_roles')
->fields(array(
'uid',
'rid',
));
foreach (array_keys($entity->roles) as $rid) {
if (!in_array($rid, array(
DRUPAL_ANONYMOUS_RID,
DRUPAL_AUTHENTICATED_RID,
))) {
$query
->values(array(
'uid' => $entity->uid,
'rid' => $rid,
));
}
}
$query
->execute();
}
}
}