Example #1
0
 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;
 }
Example #2
0
 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;
 }
Example #3
0
 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']);
         }
     }
 }
Example #4
0
 public static function GetMessageIdByParam($paramName, $paramValue)
 {
     $arResult = array();
     if (strlen($paramName) <= 0 || strlen($paramValue) <= 0) {
         return $arResult;
     }
     $messageParameters = IM\MessageParamTable::getList(array('select' => array('MESSAGE_ID'), 'filter' => array('=PARAM_NAME' => $paramName, '=PARAM_VALUE' => $paramValue)));
     while ($ar = $messageParameters->fetch()) {
         $arResult[] = $ar["MESSAGE_ID"];
     }
     return $arResult;
 }