-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsalesforce_merge_helper.module
77 lines (64 loc) · 2.93 KB
/
salesforce_merge_helper.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
/**
* @file
* Code for the salesforce_merge_helper.
*/
/**
* Implements hook_salesforce_pull_entity_merge().
*/
function salesforce_merge_helper_salesforce_pull_entity_merge($entity_mapping_to_delete, $merged_mapping_entity) {
// If we're not allowed to merge with this mapping, bail out.
if (!_salesforce_merge_helper_is_mapping_merge_allowed($merged_mapping_entity)) {
return;
}
// We're assuming these two merged entities always have the same type.
$entity_type = $entity_mapping_to_delete->entity_type;
$entities = entity_load($entity_type, array($entity_mapping_to_delete->entity_id, $merged_mapping_entity->entity_id));
$merged_entity = $entities[$merged_mapping_entity->entity_id];
$entity_to_delete = $entities[$entity_mapping_to_delete->entity_id];
if ($entity_type == 'redhen_contact') {
// Attempt to get the user ids for the two contacts.
$userid1 = isset($merged_entity->uid) ? $merged_entity->uid : 0;
$userid2 = isset($entity_to_delete->uid) ? $entity_to_delete->uid : 0;
// The deleted contact has a user but the remaining one does not:
// Move the user to the remaining contact.
if ($userid1 == 0 && $userid2 != 0) {
// Remove the user linkage with the old contact.
$entity_to_delete->deleteUser(TRUE);
// Assign user to the remaining contact.
$merged_entity->uid = $userid2;
$merged_entity->setUser();
}
// Both contacts have mergable users and the usermerge module is installed:
// Merge the users.
if ($userid1 && $userid2 && ($userid1 != $userid2) && module_exists('usermerge')) {
$user_to_delete = user_load($entity_to_delete->uid);
$user_to_keep = user_load($merged_entity->uid);
// Simulating submitting the form at /admin/people/merge with all default
// values checked.
$form_state = array();
$form_state['form_page'] = 'review_table';
$form_state['values']['user_to_delete'] = $user_to_delete;
$form_state['values']['user_to_keep'] = $user_to_keep;
$form_state['page_values']['merge_form']['usermerge_user_delete_action'] = 'delete';
$form = drupal_build_form('usermerge_merge_form', $form_state);
$form_state['page_values']['merge_form']['user_to_delete'] = $user_to_delete;
$form_state['page_values']['merge_form']['user_to_keep'] = $user_to_keep;
usermerge_merge_form_submit($form, $form_state);
}
}
}
/**
* Determines whether the mapping passed in should trigger a user delete.
*
* @param SalesforceMappingObject $mapping
* The SalesforceMappingObject that might be merged.
*
* @return bool
* True if this mapping's associated users can be merged.
*/
function _salesforce_merge_helper_is_mapping_merge_allowed(SalesforceMappingObject $mapping) {
$mappings_to_not_merge = array();
module_invoke_all('salesforce_merge_helper_to_not_merge', $mappings_to_not_merge);
return !in_array($mapping->salesforce_mapping_object_id, $mappings_to_not_merge);
}