You are here

function usermerge_do in User Merge 7.2

Merges two accounts automatically, making decisions on which data should be preserved.

Modules that need to implement a straightforward way to merge accounts should use this function.

Parameters

object $user_to_delete: A fully loaded user object from user_load() that will be merged and blocked or deleted.

object $user_to_keep: A fully loaded user object from user_load() that will be merged and retained.

1 call to usermerge_do()
usermerge_self_merge_form_submit in usermerge_self/usermerge_self.module
Submits the self-serve user merge form.

File

./usermerge.module, line 339
Main file for the User Merge module.

Code

function usermerge_do($user_to_delete, $user_to_keep) {

  // Build (but not display) data-review form
  usermerge_load_includes();
  $review_form_state['values']['user_to_delete'] = $user_to_delete;
  $review_form_state['values']['user_to_keep'] = $user_to_keep;

  // This allows to call the data-review table instead of the account-selection form
  $review_form_state['form_page'] = 'review_table';
  $review_form = usermerge_merge_form(array(), $review_form_state);

  // Build form values
  // This makes a few assumptions on modules' behavior. It would be advisable to
  // make the User Merge API documentation clearer on what modules should do.
  $review_form_state['page_values']['merge_form'] = $review_form_state['values'];
  $review = array_intersect_key($review_form['review'], array_flip(element_children($review_form['review'])));
  foreach ($review as $component => $items) {
    if (isset($items['#value'])) {
      $review_form_state['values'][$component] = $items['#value'];
    }
    else {
      $items = array_intersect_key($items, array_flip(element_children($items)));
      foreach ($items as $name => $properties) {
        if (isset($properties['options']['#options'])) {

          // If the property has a merge options, merge data
          if (isset($properties['options']['#options']['merge']) && $properties['options']['#options']['merge'] == 'merge') {
            $review_form_state['values']['review'][$component][$name]['options'] = 'merge';
          }
          else {
            $review_form_state['values']['review'][$component][$name]['options'] = 'user_to_keep';
          }
        }
        else {

          // If there are no set options, check if the module sets other form fields
          unset($properties['property_name'], $properties['options']);
          if (count($properties)) {
            foreach ($properties as $property_name => $property) {
              if (isset($property['#value'])) {
                $review_form_state['values']['review'][$component][$name][$property_name] = $property['#value'];
              }
            }
          }
        }
      }
    }
  }

  // Merge accounts
  // Force-delete old account
  $review_form_state['page_values']['merge_form']['usermerge_user_delete_action'] = 'delete';
  drupal_form_submit('usermerge_merge_form', $review_form_state);
}