• Модуль: 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 '';
}