public function mergeActivities($OldActivity, $NewActivity, $Options = [])
{
// Group the two activities together.
$ActivityUserIDs = val('ActivityUserIDs', $OldActivity['Data'], []);
$ActivityUserCount = val('ActivityUserID_Count', $OldActivity['Data'], 0);
array_unshift($ActivityUserIDs, $OldActivity['ActivityUserID']);
if (($i = array_search($NewActivity['ActivityUserID'], $ActivityUserIDs)) !== false) {
unset($ActivityUserIDs[$i]);
$ActivityUserIDs = array_values($ActivityUserIDs);
}
$ActivityUserIDs = array_unique($ActivityUserIDs);
if (count($ActivityUserIDs) > self::$MaxMergeCount) {
array_pop($ActivityUserIDs);
$ActivityUserCount++;
}
$RegardingUserCount = 0;
if (val('RegardingUserID', $NewActivity)) {
$RegardingUserIDs = val('RegardingUserIDs', $OldActivity['Data'], []);
$RegardingUserCount = val('RegardingUserID_Count', $OldActivity['Data'], 0);
array_unshift($RegardingUserIDs, $OldActivity['RegardingUserID']);
if (($i = array_search($NewActivity['RegardingUserID'], $RegardingUserIDs)) !== false) {
unset($RegardingUserIDs[$i]);
$RegardingUserIDs = array_values($RegardingUserIDs);
}
if (count($RegardingUserIDs) > self::$MaxMergeCount) {
array_pop($RegardingUserIDs);
$RegardingUserCount++;
}
}
$RecordIDs = [];
if ($OldActivity['RecordID']) {
$RecordIDs[] = $OldActivity['RecordID'];
}
$RecordIDs = array_unique($RecordIDs);
$NewActivity = array_merge($OldActivity, $NewActivity);
if (count($ActivityUserIDs) > 0) {
$NewActivity['Data']['ActivityUserIDs'] = $ActivityUserIDs;
}
if ($ActivityUserCount) {
$NewActivity['Data']['ActivityUserID_Count'] = $ActivityUserCount;
}
if (count($RecordIDs) > 0) {
$NewActivity['Data']['RecordIDs'] = $RecordIDs;
}
if (isset($RegardingUserIDs) && count($RegardingUserIDs) > 0) {
$NewActivity['Data']['RegardingUserIDs'] = $RegardingUserIDs;
if ($RegardingUserCount) {
$NewActivity['Data']['RegardingUserID_Count'] = $RegardingUserCount;
}
}
return $NewActivity;
}