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->value != $entity->original->pass->value) {
drupal_session_destroy_uid($entity
->id());
if ($entity
->id() == $GLOBALS['user']->uid) {
drupal_session_regenerate();
}
}
// Update user roles if changed.
if ($entity->roles
->getValue() != $entity->original->roles
->getValue()) {
db_delete('users_roles')
->condition('uid', $entity
->id())
->execute();
$query = $this->database
->insert('users_roles')
->fields(array(
'uid',
'rid',
));
foreach ($entity->roles as $role) {
if (!in_array($role->value, array(
DRUPAL_ANONYMOUS_RID,
DRUPAL_AUTHENTICATED_RID,
))) {
$query
->values(array(
'uid' => $entity
->id(),
'rid' => $role->value,
));
}
}
$query
->execute();
}
// If the user was blocked, delete the user's sessions to force a logout.
if ($entity->original->status->value != $entity->status->value && $entity->status->value == 0) {
drupal_session_destroy_uid($entity
->id());
}
// Send emails after we have the new user object.
if ($entity->status->value != $entity->original->status->value) {
// The user's status is changing; conditionally send notification email.
$op = $entity->status->value == 1 ? 'status_activated' : 'status_blocked';
_user_mail_notify($op, $entity
->getBCEntity());
}
}
else {
// Save user roles.
if (count($entity->roles) > 1) {
$query = $this->database
->insert('users_roles')
->fields(array(
'uid',
'rid',
));
foreach ($entity->roles as $role) {
if (!in_array($role->value, array(
DRUPAL_ANONYMOUS_RID,
DRUPAL_AUTHENTICATED_RID,
))) {
$query
->values(array(
'uid' => $entity
->id(),
'rid' => $role->value,
));
}
}
$query
->execute();
}
}
}