Вывести переписку сообщений между пользователями. API Bitrix

У меня появилась необходимость создать свою маленькую социальную сеть, но так как стандартные компонент социальной сети битрикс очень не удобен и реализовать и кастамизировать его под свои нужды очень сложно, я решил это сделать через API Битрикс. 
Вот мой код и что из этого получилось:


<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("message");
CModule::IncludeModule('socialnetwork');
GLOBAL $USER;

?>
<?php
$currentUserID=$USER->GetID();
$userID=$_REQUEST[id];

$arNavParams = array("nPageSize" => 20, "bDescPageNumbering" => false);
$dbMessages = CSocNetMessages::GetMessagesUsers($GLOBALS["USER"]->GetID(), $arNavParams);
while ($arMessages = $dbMessages->GetNext())
{
    printr($arMessages);
}


$arFilter = array("TO_USER_ID" => $userID, "FROM_USER_ID" => $currentUserID);
$dbMessages = CSocNetMessages::GetList($arOrder = array("ID" => "DESC"), $arFilter, $arGroupBy = false, $arNavStartParams = false,
    $arSelectFields = array());
while($arMessages = $dbMessages->GetNext()):
    $result[] = $arMessages;
endwhile;

$arFilter = array("TO_USER_ID" => $currentUserID, "FROM_USER_ID" => $userID);
$dbMessages = CSocNetMessages::GetList($arOrder = array("ID" => "ASC"), $arFilter, $arGroupBy = false, $arNavStartParams = false,
    $arSelectFields = array());
while($arMessages = $dbMessages->GetNext()):
    $result_2[] = $arMessages;
endwhile;
$result_3 = array_merge($result, $result_2);


function mysort($b, $result_3) {
    return strtotime($b['DATE_CREATE']) - strtotime($result_3['DATE_CREATE']);
}

usort($result_3, 'mysort');
$rsUser = CUser::GetByID($userID);
$toUser = $rsUser->Fetch();

?>
<div class = 'message_from_to'>
    <p>переписка с <?=$toUser['LAST_NAME']?></p>
</div>
<?php foreach ($result_3 as $message):?>
<p><b><?php if($message['FROM_USER_ID'] === $toUser['ID']) echo $toUser['LAST_NAME']; else echo CUser::GetFullName(); ?></b> <?=$message['DATE_CREATE']?></p>
<p><?=$message['MESSAGE']?></p>


<?php endforeach;

?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

В данном коде через апи битрикс мы получаем 2 массива с сообщениями.  Первый массив $result с сообщениями от текущего пользователя с пользователем которым ведем переписку. ID пользователя с кем ведем обмен сообщениями передаем через request. Второй массив $result_2 обратный получаем все сообщения от пользователя с кем видим переписку с текущем пользователем. Список сообщений получаем через  функцию CSocNetMessages::GetList. Далеее мы объединяем 2 массива в 1 массив $result_3 и через функцию mysort() сортируем по дате создания сообщений и выводим их в публичную часть и оформляем их уже так как нам нужно.

Так же ниже мы можем вывести форму отправки сообщений и отправлять сообщения в данный чат используя так же апи Битрикс метод CSocNetMessages::Add

<?
$arFields = array( 
   "FROM_USER_ID" => 1, 
   "TO_USER_ID" => 2, 
   "MESSAGE" => "Привет!", 
   "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), 
   "MESSAGE_TYPE" => "P", 
); 
CSocNetMessages::Add($arFields);
?>


Загрузка комментариев...