protected function UserStorageController::postSave

Overrides Drupal\Core\Entity\DatabaseStorageController::postSave().

Overrides DatabaseStorageController::postSave

File

drupal/core/modules/user/lib/Drupal/user/UserStorageController.php, line 161
Definition of Drupal\user\UserStorageController.

Class

UserStorageController
Controller class for users.

Namespace

Drupal\user

Code

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();
    }
  }
}