8.3.x user.api.php hook_user_cancel($edit, $account, $method)
8.0.x user.api.php hook_user_cancel($edit, $account, $method)
8.1.x user.api.php hook_user_cancel($edit, $account, $method)
8.2.x user.api.php hook_user_cancel($edit, $account, $method)
8.4.x user.api.php hook_user_cancel($edit, $account, $method)
7.x user.api.php hook_user_cancel($edit, $account, $method)

Act on user account cancellations.

This hook is invoked from user_cancel() before a user account is canceled. Depending on the account cancellation method, the module should either do nothing, unpublish content, or anonymize content. See user_cancel_methods() for the list of default account cancellation methods provided by User module. Modules may add further methods via hook_user_cancel_methods_alter().

This hook is NOT invoked for the 'user_cancel_delete' account cancellation method. To react on this method, implement hook_user_delete() instead.

Expensive operations should be added to the global account cancellation batch by using batch_set().

Parameters

$edit: The array of form values submitted by the user.

$account: The user object on which the operation is being performed.

$method: The account cancellation method.

See also

user_cancel_methods()

hook_user_cancel_methods_alter()

Related topics

6 functions implement hook_user_cancel()

Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.

comment_user_cancel in modules/comment/comment.module
Implements hook_user_cancel().
node_user_cancel in modules/node/node.module
Implements hook_user_cancel().
poll_user_cancel in modules/poll/poll.module
Implements hook_user_cancel().
profile_user_cancel in modules/profile/profile.module
Implements hook_user_cancel().
statistics_user_cancel in modules/statistics/statistics.module
Implements hook_user_cancel().

... See full list

1 invocation of hook_user_cancel()
user_cancel in modules/user/user.module
Cancel a user account.

File

modules/user/user.api.php, line 78
Hooks provided by the User module.

Code

function hook_user_cancel($edit, $account, $method) {
  switch ($method) {
    case 'user_cancel_block_unpublish':
      // Unpublish nodes (current revisions).
      module_load_include('inc', 'node', 'node.admin');
      $nodes = db_select('node', 'n')
        ->fields('n', array('nid'))
        ->condition('uid', $account->uid)
        ->execute()
        ->fetchCol();
      node_mass_update($nodes, array('status' => 0));
      break;

    case 'user_cancel_reassign':
      // Anonymize nodes (current revisions).
      module_load_include('inc', 'node', 'node.admin');
      $nodes = db_select('node', 'n')
        ->fields('n', array('nid'))
        ->condition('uid', $account->uid)
        ->execute()
        ->fetchCol();
      node_mass_update($nodes, array('uid' => 0));
      // Anonymize old revisions.
      db_update('node_revision')
        ->fields(array('uid' => 0))
        ->condition('uid', $account->uid)
        ->execute();
      // Clean history.
      db_delete('history')
        ->condition('uid', $account->uid)
        ->execute();
      break;
  }
}

Comments

djouuuuh’s picture

If you don't want to apply the same account cancellation method to all roles, you can check them in hook_user_cancel. In my example, if a user is not an 'editor' (and hasn't created any content in my site), I prefer delete completely his account. I hope this can be helpful.

function mymodule_user_cancel($edit, $account, $method) {
  if (!in_array('editor', $account->roles)) {
    user_delete($account->uid);
  }
  // else, the method set in admin>config>account will be applicated
}