- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/session/agent.php
- Класс: BitrixImOpenLinesSessionAgent
- Вызов: Agent::replacementUserAgent
static function replacementUserAgent(int $replaceId, int $searchId): string
{
$chatIds = [];
$oldUserCode = [];
$newUserCode = [];
$sessionRaw = SessionTable::getList([
'select' => ['ID', 'USER_CODE', 'CHAT_ID'],
'filter' => ['USER_ID' => $searchId],
]);
while ($sessionRow = $sessionRaw->fetch())
{
if (empty($newUserCode[$sessionRow['USER_CODE']]))
{
$newUserCode[$sessionRow['USER_CODE']] = self::convertUserCode($sessionRow['USER_CODE'], $replaceId);
}
$resultUpdate = SessionTable::update(
$sessionRow['ID'],
[
'USER_ID' => $replaceId,
'USER_CODE' => $newUserCode[$sessionRow['USER_CODE']],
]
);
if ($resultUpdate->isSuccess())
{
$chatIds[$sessionRow['CHAT_ID']] = $sessionRow['CHAT_ID'];
$oldUserCode[$sessionRow['USER_CODE']] = $sessionRow['USER_CODE'];
}
}
if (!empty($chatIds))
{
$chat = new CIMChat(0);
foreach ($chatIds as $chatId)
{
if (!empty($chatId))
{
$chat->AddUser($chatId, $replaceId, false, true);
$chat->DeleteUser($chatId, $searchId, false, true);
$chatImol = new Chat($chatId);
if ($chatImol->isDataLoaded())
{
$entityId = $chatImol->getData('ENTITY_ID');
if(empty($newUserCode[$entityId]))
{
$newUserCode[$entityId] = self::convertUserCode($entityId, $replaceId);
}
$chatImol->updateChatLineData($newUserCode[$entityId]);
}
}
}
}
if (!empty($oldUserCode))
{
foreach ($oldUserCode as $userCode)
{
if (!empty($userCode))
{
if(empty($newUserCode[$userCode]))
{
$newUserCode[$userCode] = self::convertUserCode($userCode, $replaceId);
}
CrmAgent::addUniqueReplacementUserCodeAgent($userCode, $newUserCode[$userCode]);
$relation = UserRelationTable::getByPrimary($userCode);
if ($resultUserRelation = $relation->fetch())
{
UserRelationTable::delete($userCode);
if ($resultUserRelation['CHAT_ID'])
{
$relationNew = UserRelationTable::getByPrimary($newUserCode[$userCode]);
if ($relationNew->fetch())
{
UserRelationTable::delete($newUserCode[$userCode]);
}
UserRelationTable::add(
[
'USER_CODE' => $newUserCode[$userCode],
'USER_ID' => $replaceId,
'CHAT_ID' => $resultUserRelation['CHAT_ID'],
]
);
}
}
}
}
}
$userRaw = MainUserTable::getList([
'filter' => ['ID' => $searchId],
'select' => ['XML_ID'],
]);
if ($xmlId = $userRaw->fetch()['XML_ID'])
{
$cUser = new CUser;
$cUser->Update($searchId, ['XML_ID' => 'bad' . time() . $xmlId]);
}
return '';
}