protected function UserStorageController::postSave

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

Overrides DatabaseStorageController::postSave

File

drupal/core/modules/user/lib/Drupal/user/UserStorageController.php, line 109
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 != $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();
    }
  }
}