function user_cancel

Same name in other branches
  1. 7.x modules/user/user.module \user_cancel()
  2. 9 core/modules/user/user.module \user_cancel()
  3. 8.9.x core/modules/user/user.module \user_cancel()
  4. 11.x 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()

5 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
WorkspaceTest::testWorkspaceList in core/modules/workspaces/tests/src/Functional/WorkspaceTest.php
Tests the Workspaces listing UI.

File

core/modules/user/user.module, line 611

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.
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.