• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_event.php
  • Класс: CIMEvent
  • Вызов: CIMEvent::OnUserDelete
static function OnUserDelete($ID)
{
	$ID = intval($ID);
	if ($ID <= 0)
	{
		return false;
	}

	global $DB;

	$isRecentExists = BitrixImModelRecentTable::getList([
		'filter' => [
			'=ITEM_TYPE' => IM_MESSAGE_PRIVATE,
			'=ITEM_ID' => $ID,
		]
	])->fetch();

	$arChat = [];
	$strSQL = "
		SELECT R.CHAT_ID
		FROM b_im_chat C, b_im_relation R
		WHERE R.USER_ID = ".$ID." and R.MESSAGE_TYPE IN ('".IM_MESSAGE_PRIVATE."', '".IM_MESSAGE_SYSTEM."') and R.CHAT_ID = C.ID
	";
	$dbRes = $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); while ($arRes = $dbRes->Fetch()) { $arChat[$arRes['CHAT_ID']] = $arRes['CHAT_ID']; } $accessProvider = new BitrixImAccessChatAuthProvider; $accessProvider->deleteByUser($ID); if (count($arChat) > 0) { $strSQL = "DELETE FROM b_im_chat WHERE ID IN (".implode(',', $arChat).")"; $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); $strSQL = "DELETE FROM b_im_message WHERE CHAT_ID IN (".implode(',', $arChat).")"; $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); $strSQL = "DELETE FROM b_im_relation WHERE CHAT_ID IN (".implode(',', $arChat).")"; $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); IMV2LinkUrlUrlCollection::deleteByChatsIds($arChat); foreach ($arChat as $id) { IMV2Chat::cleanCache((int)$id); } } else { $strSQL = "DELETE FROM b_im_message WHERE AUTHOR_ID = ".$ID; $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); $strSQL = "DELETE FROM b_im_relation WHERE USER_ID =".$ID; $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); IMV2LinkUrlUrlCollection::deleteByAuthorsIds([$ID]); } BitrixImBot::unRegister(['BOT_ID' => $ID]); $strSQL = "DELETE FROM b_im_recent WHERE USER_ID = ".$ID; $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); $strSQL = "DELETE FROM b_im_recent WHERE ITEM_TYPE = '".IM_MESSAGE_PRIVATE."' AND ITEM_ID = ".$ID; $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); $strSQL = "DELETE FROM b_im_status WHERE USER_ID = ".$ID; $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); $strSQL = "DELETE FROM b_im_recent WHERE ITEM_TYPE = '".IM_MESSAGE_PRIVATE."' and ITEM_ID = ".$ID; $DB->Query($strSQL, true, "File: ".__FILE__."
Line: ".__LINE__); if ($isRecentExists && CModule::IncludeModule('pull')) { $users = BitrixImHelper::getOnlineIntranetUsers(); BitrixPullEvent::add($users, [ 'module_id' => 'im', 'command' => 'chatHide', 'expiry' => 3600, 'params' => [ 'dialogId' => $ID ], 'extra' => BitrixImCommon::getPullExtra() ]); } return true; }