You are here

function salesforce_pull_process_merged_records in Salesforce Suite 7.3

Process merged records from salesforce.

1 call to salesforce_pull_process_merged_records()
salesforce_pull_process_updated_records in modules/salesforce_pull/salesforce_pull.module
Process records in the queue.

File

modules/salesforce_pull/salesforce_pull.module, line 703
Pull updates from Salesforce when a Salesforce object is updated.

Code

function salesforce_pull_process_merged_records($sf_object) {

  // Handle merges from Salesforce.
  $merge_fields = array(
    'old_contact_key' => 'Old_Contact__c',
    'merged_contact_key' => 'Contact__c',
  );
  drupal_alter('salesforce_pull_entity_merge_fields', $merge_fields);
  $entity_to_delete = salesforce_mapping_object_load_by_sfid($sf_object[$merge_fields['old_contact_key']]);
  $merged_entity = salesforce_mapping_object_load_by_sfid($sf_object[$merge_fields['merged_contact_key']]);

  // Load and wrap the Drupal entity linked to the SF object.
  if ($entity_to_delete && $merged_entity) {
    $wrapper = entity_metadata_wrapper($entity_to_delete->entity_type, $entity_to_delete);

    // Prevent processing by salesforce_push. We hate circular logic.
    $merged_entity->salesforce_pull = TRUE;

    // Delete the mapped Drupal entity. Catch any exceptions as
    // we want to ensure the mapping object is deleted even in
    // case of an error.
    module_invoke_all('salesforce_pull_entity_merge', $entity_to_delete, $merged_entity);
    watchdog('Salesforce Pull', 'Merged entity %label with ID: %id associated with Salesforce Object ID: %sfid to %label with ID: %newid associated with Salesforce Object ID: %newsfid', array(
      '%label' => $wrapper
        ->label(),
      '%id' => $entity_to_delete->entity_id,
      '%sfid' => $sf_object[$merge_fields['old_contact_key']],
      '%newid' => $merged_entity->entity_id,
      '%newsfid' => $sf_object[$merge_fields['merged_contact_key']],
    ));
  }
}