function RemoveAllMessage($userId) { global $DB; $userId = intval($userId); $strSql = "\n\t\t\tSELECT\n\t\t\t\tMAX(M.ID)+1 MAX_ID,\n\t\t\t\tM.CHAT_ID,\n\t\t\t\tR1.ID R1_ID,\n\t\t\t\tR1.START_ID R1_START_ID,\n\t\t\t\tR2.ID R2_ID,\n\t\t\t\tR2.START_ID R2_START_ID\n\t\t\tFROM b_im_relation R1\n\t\t\tINNER JOIN b_im_relation R2 on R2.CHAT_ID = R1.CHAT_ID\n\t\t\tINNER JOIN b_im_message M ON M.ID >= R1.START_ID AND M.CHAT_ID = R1.CHAT_ID\n\t\t\tWHERE\n\t\t\t\tR1.USER_ID = " . $this->user_id . "\n\t\t\tAND R2.USER_ID = " . $userId . "\n\t\t\tAND R1.MESSAGE_TYPE = '" . IM_MESSAGE_PRIVATE . "'\n\t\t\tGROUP BY M.CHAT_ID, R1.ID, R1.START_ID, R2.ID, R2.START_ID\n\t\t"; $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if ($arRes = $dbRes->Fetch()) { $strSql = "UPDATE b_im_relation SET START_ID = " . intval($arRes['MAX_ID']) . ", LAST_ID = " . (intval($arRes['MAX_ID']) - 1) . " WHERE ID = " . intval($arRes['R1_ID']); $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if ($arRes['MAX_ID'] >= $arRes['R2_START_ID'] && $arRes['R2_START_ID'] > 0) { $messages = IM\MessageTable::getList(array('select' => array('ID'), 'filter' => array('<ID' => $arRes['R2_START_ID'], '=CHAT_ID' => $arRes['CHAT_ID']))); while ($messageInfo = $messages->fetch()) { IM\MessageParamTable::delete($messageInfo['ID']); } } $obCache = new CPHPCache(); $obCache->CleanDir('/bx/imc/recent' . CIMMessenger::GetCachePath($this->user_id)); } return true; }
public static function Delete($id) { $message = self::CheckPossibilityUpdateMessage($id); if (!$message) { return false; } $date = FormatDate("FULL", $message['DATE_CREATE'] + CTimeZone::GetOffset()); IM\MessageTable::update($message['ID'], array("MESSAGE" => GetMessage('IM_MESSAGE_DELETED'), "MESSAGE_OUT" => GetMessage('IM_MESSAGE_DELETED_OUT', array('#DATE#' => $date)))); CIMMessageParam::Set($message['ID'], array('IS_DELETED' => 'Y')); $arFields = $message; $arFields['MESSAGE'] = GetMessage('IM_MESSAGE_DELETED_OUT', array('#DATE#' => $date)); $arFields['DATE_MODIFY'] = time() + CTimeZone::GetOffset(); $relations = CIMMessenger::GetRelationById($message['ID']); $arPullMessage = array('id' => $arFields['ID'], 'type' => $arFields['MESSAGE_TYPE'] == IM_MESSAGE_PRIVATE ? 'private' : 'chat', 'date' => $arFields['DATE_MODIFY'], 'text' => GetMessage('IM_MESSAGE_DELETED')); if ($message['MESSAGE_TYPE'] == IM_MESSAGE_PRIVATE) { $arFields['FROM_USER_ID'] = $arFields['AUTHOR_ID']; foreach ($relations as $rel) { if ($rel['USER_ID'] != $arFields['AUTHOR_ID']) { $arFields['TO_USER_ID'] = $rel['USER_ID']; } } $arPullMessage['fromUserId'] = $arFields['FROM_USER_ID']; $arPullMessage['toUserId'] = $arFields['TO_USER_ID']; } else { $arPullMessage['chatId'] = $arFields['CHAT_ID']; $arPullMessage['senderId'] = $arFields['AUTHOR_ID']; } foreach ($relations as $rel) { CPullStack::AddByUser($rel['USER_ID'], array('module_id' => 'im', 'command' => 'messageDelete', 'params' => $arPullMessage)); $obCache = new CPHPCache(); $obCache->CleanDir('/bx/imc/recent' . self::GetCachePath($rel['USER_ID'])); } foreach (GetModuleEvents("im", "OnAfterMessagesDelete", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array(intval($id), $arFields)); } return true; }
public static function Delete($ID) { $ID = intval($ID); \Bitrix\Im\MessageTable::delete($ID); foreach (GetModuleEvents("im", "OnAfterDeleteMessage", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID)); } return true; }
public function DeleteWithCheck($ID) { global $DB; $ID = intval($ID); $strSql = "SELECT M.* FROM b_im_relation R, b_im_message M WHERE M.ID = " . $ID . " AND R.USER_ID = " . $this->user_id . " AND R.MESSAGE_TYPE = '" . IM_MESSAGE_SYSTEM . "' AND R.CHAT_ID = M.CHAT_ID"; $dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if ($arRes = $dbRes->Fetch()) { IM\MessageTable::delete($ID); $messageParameters = IM\MessageParamTable::getList(array('select' => array('ID'), 'filter' => array('=MESSAGE_ID' => $ID))); while ($ar = $messageParameters->fetch()) { IM\MessageParamTable::delete($ar['ID']); } $arRes['RELATION_USER_ID'] = $this->user_id; foreach (GetModuleEvents("im", "OnAfterDeleteNotify", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $arRes)); } CIMMessenger::SpeedFileDelete($this->user_id, IM_SPEED_NOTIFY); return true; } return false; }