- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_history.php
- Класс: CIMHistory
- Вызов: CIMHistory::RemoveAllMessage
function RemoveAllMessage($userId)
{
global $DB;
$userId = intval($userId);
if ($this->user_id == $userId)
{
return false;
}
$strSql ="
SELECT
MAX(M.ID)+1 MAX_ID,
M.CHAT_ID,
R1.ID R1_ID,
R1.START_ID R1_START_ID,
R2.ID R2_ID,
R2.START_ID R2_START_ID
FROM b_im_relation R1
INNER JOIN b_im_relation R2 on R2.CHAT_ID = R1.CHAT_ID
INNER JOIN b_im_message M ON M.ID >= R1.START_ID AND M.CHAT_ID = R1.CHAT_ID
WHERE
R1.USER_ID = ".$this->user_id."
AND R2.USER_ID = ".$userId."
AND R1.MESSAGE_TYPE = '".IM_MESSAGE_PRIVATE."'
GROUP BY M.CHAT_ID, R1.ID, R1.START_ID, R2.ID, R2.START_ID
";
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
if ($arRes = $dbRes->Fetch())
{
$strSql = "UPDATE b_im_relation SET START_ID = ".intval($arRes['MAX_ID'])." WHERE ID = ".intval($arRes['R1_ID']);
$DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$counterService = new IMV2MessageCounterService($this->user_id);
$counterService->deleteByChatId((int)$arRes['CHAT_ID']);
if ($arRes['MAX_ID'] >= $arRes['R2_START_ID'] && $arRes['R2_START_ID'] > 0)
{
$messages = IMModelMessageTable::getList(array(
'select' => array('ID'),
'filter' => array(
' $arRes['R2_START_ID'],
'=CHAT_ID' => $arRes['CHAT_ID'],
),
));
while ($messageInfo = $messages->fetch())
{
IMModelMessageTable::delete($messageInfo['ID']);
}
}
$primaryKey = ['USER_ID' => $this->user_id, 'ITEM_TYPE' => IM_MESSAGE_PRIVATE, 'ITEM_ID' => $userId];
IMModelRecentTable::update($primaryKey, ['ITEM_MID' => 0]);
}
return true;
}