You are here

function usermerge_usermerge_merge_users in User Merge 7

Same name and namespace in other branches
  1. 6 usermerge.module \usermerge_usermerge_merge_users()

Implements hook_usermerge_merge_users().

File

./usermerge.module, line 176
Main file for the user merge module, which re-assigns data from an abandoned account to a live one.

Code

function usermerge_usermerge_merge_users($user_to_delete, $user_to_keep) {

  // Comment: change the uid to the new one.
  if (module_exists('comment')) {
    db_update('comment')
      ->fields(array(
      'uid' => $user_to_keep->uid,
    ))
      ->condition('uid', $user_to_delete->uid, '=')
      ->execute();
  }

  //updating node table
  db_update('node')
    ->fields(array(
    'uid' => $user_to_keep->uid,
  ))
    ->condition('uid', $user_to_delete->uid, '=')
    ->execute();

  //updating node_revisions table
  db_update('node_revision')
    ->fields(array(
    'uid' => $user_to_keep->uid,
  ))
    ->condition('uid', $user_to_delete->uid, '=')
    ->execute();

  //Update roles
  $merged_roles = $user_to_keep->roles + $user_to_delete->roles;

  // First, remove all roles from the user to keep to prevent duplicate key errors.
  db_delete('users_roles')
    ->condition('uid', $user_to_keep->uid)
    ->execute();

  // Then add them on to the user to keep.
  foreach (array_keys($merged_roles) as $rid) {
    if (!in_array($rid, array(
      DRUPAL_ANONYMOUS_RID,
      DRUPAL_AUTHENTICATED_RID,
    ))) {
      $id = db_insert('users_roles')
        ->fields(array(
        'uid' => $user_to_keep->uid,
        'rid' => $rid,
      ))
        ->execute();
    }
  }

  // Block the old user.
  user_block_user_action($user_to_delete);

  // Success!
  drupal_set_message(t('User %user_to_delete was successfully merged into user %user_to_keep.', array(
    '%user_to_delete' => $user_to_delete->name,
    '%user_to_keep' => $user_to_keep->name,
  )));
}