function _profile2_usermerge_merge_accounts_by_bundle in User Merge 7.2
Merge accounts by profile2 bundle name.
Parameters
string $bundle: Profile2 bundle name.
object $user_to_delete: User entity to delete.
object $user_to_keep: User entity to keep.
Return value
array The form array to render.
1 call to _profile2_usermerge_merge_accounts_by_bundle()
- profile2_usermerge_merge_accounts in includes/
profile2.usermerge.inc - Implements hook_usermerge_merge_accounts().
File
- includes/
profile2.usermerge.inc, line 216 - Adds support for Profile 2. Supplemental include loaded via usermerge_load_includes().
Code
function _profile2_usermerge_merge_accounts_by_bundle($bundle, $user_to_delete, $user_to_keep, $review) {
// Load the profile for the user to delete and keep.
$profile_delete = profile2_load_by_user($user_to_delete, $bundle);
$profile_keep = profile2_load_by_user($user_to_keep, $bundle);
// Do nothing if both of the profiles do not exist; otherwise create any missing profiles.
if (empty($profile_delete) && empty($profile_keep)) {
return;
}
if (empty($profile_delete)) {
$profile_delete = profile_create(array(
'type' => $bundle,
'uid' => $user_to_delete->uid,
));
}
if (empty($profile_keep)) {
$profile_keep = profile_create(array(
'type' => $bundle,
'uid' => $user_to_keep->uid,
));
}
// ===============
// Merge fields based on review.
// ===============
foreach ($review as $name => $options) {
$option = $options['options'];
// Switch on the name.
switch ($option) {
// Get value from merge (nust be an array).
case 'merge':
$value = array();
$field_delete = isset($profile_delete->{$name}) ? $profile_delete->{$name} : array();
$field_keep = isset($profile_keep->{$name}) ? $profile_keep->{$name} : array();
// Retrieve the languages.
$languages = array_unique(array_merge(array_keys($field_delete), array_keys($field_keep)));
// Set language keys.
foreach ($languages as $lang) {
// Init to array.
$value[$lang] = array();
// Add user to keep items first.
if (!empty($field_keep[$lang])) {
$value[$lang] = $field_keep[$lang];
}
// Add user to delete items, remove duplicates.
if (!empty($field_delete[$lang])) {
$value[$lang] = array_merge($value[$lang], $field_delete[$lang]);
// Remove duplicates.
$serialized = array_map('serialize', $value[$lang]);
$serialized = array_values(array_unique($serialized));
$value[$lang] = array_map('unserialize', $serialized);
}
// Enforce maximum number of values.
if ($options['cardinality'] > 1) {
$value[$lang] = array_slice($value[$lang], 0, $options['cardinality']);
}
}
break;
// Get value from delete.
case 'user_to_delete':
$value = isset($profile_delete->{$name}) ? $profile_delete->{$name} : NULL;
break;
// User to keep is the default case.
case 'user_to_keep':
default:
$value = isset($profile_keep->{$name}) ? $profile_keep->{$name} : NULL;
break;
}
// Set the value.
$profile_keep->{$name} = $value;
}
// Save the updated profile.
profile2_save($profile_keep);
// Delete the profile for the deleted user.
profile2_delete($profile_delete);
}