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