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 DeleteBySubTag($notifySubTag, $authorId = false) { global $DB; if (strlen($notifySubTag) <= 0) { return false; } $sqlUser = ""; $sqlUser2 = ""; if ($authorId !== false) { $sqlUser = "******" . intval($authorId); $sqlUser2 = " AND AUTHOR_ID = " . intval($authorId); } $dbRes = $DB->Query("SELECT M.ID, M.NOTIFY_TYPE, R.USER_ID, R.STATUS FROM b_im_relation R, b_im_message M WHERE M.CHAT_ID = R.CHAT_ID AND M.NOTIFY_SUB_TAG = '" . $DB->ForSQL($notifySubTag) . "'" . $sqlUser, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $arUsers = array(); $messages = array(); while ($row = $dbRes->Fetch()) { $messages[$row['ID']] = $row['NOTIFY_TYPE']; $count = $row['STATUS'] < IM_STATUS_READ ? 1 : 0; if (isset($arUsers[$row['USER_ID']])) { $arUsers[$row['USER_ID']] += $count; } else { $arUsers[$row['USER_ID']] = $count; } } $pullActive = false; if (CModule::IncludeModule("pull")) { $pullActive = true; } $arUsersSend = array(); foreach ($arUsers as $userId => $count) { CIMMessenger::SpeedFileDelete($userId, IM_SPEED_NOTIFY); if ($count > 0) { $arUsersSend[] = $userId; //CUserCounter::Decrement($userId, 'im_notify_v2', '**', false); } if ($pullActive) { CPushManager::DeleteFromQueueBySubTag($userId, $notifySubTag); } } if ($pullActive) { CPullStack::AddByUsers(array_keys($arUsers), array('module_id' => 'im', 'command' => 'massDeleteMessage', 'params' => array('MESSAGE' => $messages))); } if (count($messages) > 0) { $messageParameters = IM\MessageParamTable::getList(array('select' => array('ID'), 'filter' => array('=MESSAGE_ID' => array_keys($messages)))); while ($ar = $messageParameters->fetch()) { IM\MessageParamTable::delete($ar['ID']); } $strSql = "DELETE FROM b_im_message WHERE NOTIFY_SUB_TAG = '" . $DB->ForSQL($notifySubTag) . "'" . $sqlUser2; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } CIMMessenger::SendBadges($arUsersSend); return true; }
public static function Set($messageId, $params = array()) { global $DB; $messageId = intval($messageId); if (!(is_array($params) || is_null($params)) || $messageId <= 0) { return false; } if (is_null($params) || count($params) <= 0) { $messageParameters = IM\MessageParamTable::getList(array('select' => array('ID'), 'filter' => array('=MESSAGE_ID' => $messageId))); while ($parameterInfo = $messageParameters->fetch()) { IM\MessageParamTable::delete($parameterInfo['ID']); } return true; } $default = self::GetDefault(); $arToDelete = array(); foreach ($params as $key => $val) { if (isset($default[$key]) && $default[$key] == $val) { $arToDelete[$key] = array("=MESSAGE_ID" => $messageId, "=PARAM_NAME" => $key); } } $arToInsert = array(); foreach ($params as $k1 => $v1) { $name = substr(trim($k1), 0, 100); if (strlen($name)) { if (!is_array($v1)) { $v1 = array($v1); } if (empty($v1)) { $arToDelete[$name] = array("=MESSAGE_ID" => $messageId, "=PARAM_NAME" => $name); } else { foreach ($v1 as $v2) { $value = substr(trim($v2), 0, 100); if (strlen($value)) { $key = md5($name) . md5($value); $arToInsert[$key] = array("MESSAGE_ID" => $messageId, "PARAM_NAME" => $name, "PARAM_VALUE" => $value); } } } } } if (!empty($arToInsert)) { $messageParameters = IM\MessageParamTable::getList(array('select' => array('ID', 'PARAM_NAME', 'PARAM_VALUE'), 'filter' => array('=MESSAGE_ID' => $messageId))); while ($ar = $messageParameters->fetch()) { $key = md5($ar["PARAM_NAME"]) . md5($ar["PARAM_VALUE"]); if (array_key_exists($key, $arToInsert)) { unset($arToInsert[$key]); } else { if (isset($params[$ar["PARAM_NAME"]])) { IM\MessageParamTable::delete($ar['ID']); } } } } foreach ($arToInsert as $parameterInfo) { IM\MessageParamTable::add($parameterInfo); } foreach ($arToDelete as $filter) { $messageParameters = IM\MessageParamTable::getList(array('select' => array('ID'), 'filter' => $filter)); while ($parameterInfo = $messageParameters->fetch()) { IM\MessageParamTable::delete($parameterInfo['ID']); } } }
public static function DeleteAll($messageId) { $messageId = intval($messageId); if ($messageId <= 0) { return false; } $messageParameters = IM\MessageParamTable::getList(array('select' => array('ID'), 'filter' => array('=MESSAGE_ID' => $messageId))); while ($parameterInfo = $messageParameters->fetch()) { IM\MessageParamTable::delete($parameterInfo['ID']); } return true; }