You are here

function usermerge_usermerge_merge_users in User Merge 6

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

Implement hook_usermerge_merge_users().

File

./usermerge.module, line 182
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.
  db_query('UPDATE {comments} SET uid = %d where uid = %d', $user_to_keep->uid, $user_to_delete->uid);

  // Node: change uid of node and revisions to the new one.
  db_query('UPDATE {node} SET uid = %d where uid = %d', $user_to_keep->uid, $user_to_delete->uid);
  db_query('UPDATE {node_revisions} SET uid = %d where uid = %d', $user_to_keep->uid, $user_to_delete->uid);

  //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_query("DELETE FROM {users_roles} WHERE uid = %d", $user_to_keep->uid);

  // 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,
    ))) {
      db_query('INSERT INTO {users_roles} (uid, rid) VALUES (%d, %d)', $user_to_keep->uid, $rid);
    }
  }

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

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