function GetMoreMessage($pageId, $toUserId, $fromUserId = false, $bTimeZone = true) { global $DB; $iNumPage = 1; if (intval($pageId) > 0) { $iNumPage = intval($pageId); } $fromUserId = IntVal($fromUserId); if ($fromUserId <= 0) { $fromUserId = $this->user_id; } $toUserId = IntVal($toUserId); if ($toUserId <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("IM_HISTORY_ERROR_TO_USER_ID"), "ERROR_TO_USER_ID"); return false; } $chatId = 0; $arMessages = array(); $arMessageId = array(); $arUnreadMessage = array(); $arMessageFiles = array(); $arUsers = array(); $limitById = ''; $arRelation = \CIMChat::GetPrivateRelation($fromUserId, $toUserId); if ($arRelation) { if ($arRelation['START_ID'] > 0) { $limitById = 'AND M.ID >= ' . intval($arRelation['START_ID']); } $sqlStr = "\n\t\t\t\tSELECT COUNT(M.ID) as CNT\n\t\t\t\tFROM b_im_message M\n\t\t\t\tWHERE M.CHAT_ID = " . $arRelation['CHAT_ID'] . "\n\t\t\t\t" . $limitById . "\n\t\t\t"; $res_cnt = $DB->Query($sqlStr); $res_cnt = $res_cnt->Fetch(); $cnt = $res_cnt["CNT"]; if ($cnt > 0 && ceil($cnt / 20) >= $iNumPage) { if (!$bTimeZone) { CTimeZone::Disable(); } $strSql = "\n\t\t\t\t\tSELECT\n\t\t\t\t\t\tM.ID,\n\t\t\t\t\t\tM.CHAT_ID,\n\t\t\t\t\t\tM.MESSAGE,\n\t\t\t\t\t\t" . $DB->DatetimeToTimestampFunction('M.DATE_CREATE') . " DATE_CREATE,\n\t\t\t\t\t\tM.AUTHOR_ID,\n\t\t\t\t\t\tM.NOTIFY_EVENT,\n\t\t\t\t\t\t" . $fromUserId . " R1_USER_ID,\n\t\t\t\t\t\t" . $toUserId . " R2_USER_ID\n\t\t\t\t\tFROM b_im_message M\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tM.CHAT_ID = " . $arRelation['CHAT_ID'] . "\n\t\t\t\t\t\t" . $limitById . "\n\t\t\t\t\tORDER BY M.DATE_CREATE DESC, M.ID DESC\n\t\t\t\t"; if (!$bTimeZone) { CTimeZone::Enable(); } $dbRes = new CDBResult(); $dbRes->NavQuery($strSql, $cnt, array('iNumPage' => $iNumPage, 'nPageSize' => 20)); $CCTP = new CTextParser(); $CCTP->MaxStringLen = 200; $CCTP->allow = array("HTML" => "N", "ANCHOR" => $this->bHideLink ? "N" : "Y", "BIU" => "Y", "IMG" => "N", "QUOTE" => "N", "CODE" => "N", "FONT" => "N", "LIST" => "N", "SMILES" => $this->bHideLink ? "N" : "Y", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N"); while ($arRes = $dbRes->Fetch()) { if ($fromUserId == $arRes['AUTHOR_ID']) { $arRes['TO_USER_ID'] = $arRes['R2_USER_ID']; $arRes['FROM_USER_ID'] = $arRes['R1_USER_ID']; $convId = $arRes['TO_USER_ID']; } else { $arRes['TO_USER_ID'] = $arRes['R1_USER_ID']; $arRes['FROM_USER_ID'] = $arRes['R2_USER_ID']; $convId = $arRes['FROM_USER_ID']; } $arMessages[$arRes['ID']] = array('id' => $arRes['ID'], 'chatId' => $arRes['CHAT_ID'], 'senderId' => $arRes['FROM_USER_ID'], 'recipientId' => $arRes['TO_USER_ID'], 'date' => $arRes['DATE_CREATE'], 'system' => $arRes['NOTIFY_EVENT'] == 'private' ? 'N' : 'Y', 'text' => $CCTP->convertText(htmlspecialcharsbx($arRes['MESSAGE']))); $arUsers[$convId][] = $arRes['ID']; $arMessageId[] = $arRes['ID']; $chatId = $arRes['CHAT_ID']; } $params = CIMMessageParam::Get($arMessageId); $arFiles = array(); foreach ($params as $messageId => $param) { $arMessages[$messageId]['params'] = $param; if (isset($param['FILE_ID'])) { foreach ($param['FILE_ID'] as $fileId) { $arFiles[$fileId] = $fileId; } } } $arMessageFiles = CIMDisk::GetFiles($chatId, $arFiles); } } return array('chatId' => $chatId, 'message' => $arMessages, 'usersMessage' => $arUsers, 'files' => $arMessageFiles); }