Ejemplo n.º 1
0
 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);
 }