- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/chat.php
- Класс: BitrixImOpenLinesChat
- Вызов: Chat::setOperators
public function setOperators($users = [], $sessionId = 0): bool
{
$result = false;
if(
$this->isDataLoaded() &&
is_array($users)
)
{
$users = array_unique($users);
$addUsers = $users;
$delete = [];
$relationList = RelationTable::getList([
"select" => [
'ID',
'USER_ID'
],
"filter" => [
"=CHAT_ID" => $this->chat['ID']
],
]);
while ($relation = $relationList->fetch())
{
if(Queue::isRealOperator($relation['USER_ID']))
{
$keySearch = array_search($relation['USER_ID'], $addUsers);
if($keySearch !== false)
{
unset($addUsers[$keySearch]);
}
else
{
$delete[] = $relation['USER_ID'];
}
}
}
if(
!empty($addUsers) ||
!empty($delete)
)
{
$chat = new CIMChat($this->joinByUserId);
if(!empty($addUsers))
{
$result = $chat->AddUser($this->chat['ID'], $addUsers, false, true);
$options['SESSION_ID'] = (int)$sessionId;
$options['CHAT_DATA'] = ChatTable::getList([
'select' => [
'TYPE',
'LAST_MESSAGE_ID',
'LAST_MESSAGE_DATE' => 'MESSAGE.DATE_CREATE'
],
'filter' => [
'=ID' => $this->chat['ID'],
],
'runtime' => [
new ReferenceField(
'MESSAGE',
'BitrixImModelMessageTable',
["=ref.ID" => "this.LAST_MESSAGE_ID"],
["join_type" => "LEFT"]
),
]
])->fetch();
self::setCounterRelationForChat($this->chat['ID'], $addUsers);
foreach($addUsers as $userId)
{
Recent::show('chat'.$this->chat['ID'], $options, $userId);
}
}
if(!empty($delete))
{
foreach ($delete as $userId)
{
$result = $chat->DeleteUser($this->chat['ID'], $userId, false, true);
}
}
}
}
return $result;
}