У меня появилась необходимость создать свою маленькую социальную сеть, но так как стандартные компонент социальной сети битрикс очень не удобен и реализовать и кастамизировать его под свои нужды очень сложно, я решил это сделать через 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);
?>