You are here

function user_cancel in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/user/user.module \user_cancel()
  2. 7 modules/user/user.module \user_cancel()
  3. 9 core/modules/user/user.module \user_cancel()

Cancel a user account.

Since the user cancellation process needs to be run in a batch, either Form API will invoke it, or batch_process() needs to be invoked after calling this function and should define the path to redirect to.

Parameters

array $edit: An array of submitted form values.

int $uid: The user ID of the user account to cancel.

string $method: The account cancellation method to use.

See also

_user_cancel()

4 calls to user_cancel()
EntityResource::deleteIndividual in core/modules/jsonapi/src/Controller/EntityResource.php
Deletes an individual entity.
UserCancelForm::submitForm in core/modules/user/src/Form/UserCancelForm.php
UserController::confirmCancel in core/modules/user/src/Controller/UserController.php
Confirms cancelling a user account via an email link.
UserMultipleCancelConfirm::submitForm in core/modules/user/src/Form/UserMultipleCancelConfirm.php
Form submission handler.

File

core/modules/user/user.module, line 592
Enables the user registration and login system.

Code

function user_cancel($edit, $uid, $method) {
  $account = User::load($uid);
  if (!$account) {
    \Drupal::messenger()
      ->addError(t('The user account %id does not exist.', [
      '%id' => $uid,
    ]));
    \Drupal::logger('user')
      ->error('Attempted to cancel non-existing user account: %id.', [
      '%id' => $uid,
    ]);
    return;
  }

  // Initialize batch (to set title).
  $batch_builder = (new BatchBuilder())
    ->setTitle(t('Cancelling account'));
  batch_set($batch_builder
    ->toArray());

  // When the 'user_cancel_delete' method is used, user_delete() is called,
  // which invokes hook_ENTITY_TYPE_predelete() and hook_ENTITY_TYPE_delete()
  // for the user entity. Modules should use those hooks to respond to the
  // account deletion.
  if ($method != 'user_cancel_delete') {

    // Allow modules to add further sets to this batch.
    \Drupal::moduleHandler()
      ->invokeAll('user_cancel', [
      $edit,
      $account,
      $method,
    ]);
  }

  // Finish the batch and actually cancel the account.
  $batch_builder = (new BatchBuilder())
    ->setTitle(t('Cancelling user account'))
    ->addOperation('_user_cancel', [
    $edit,
    $account,
    $method,
  ]);

  // After cancelling account, ensure that user is logged out.
  if ($account
    ->id() == \Drupal::currentUser()
    ->id()) {

    // Batch API stores data in the session, so use the finished operation to
    // manipulate the current user's session id.
    $batch_builder
      ->setFinishCallback('_user_cancel_session_regenerate');
  }
  batch_set($batch_builder
    ->toArray());

  // Batch processing is either handled via Form API or has to be invoked
  // manually.
}