- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/operator.php
- Класс: BitrixImOpenLinesOperator
- Вызов: Operator::getSessionHistory
public function getSessionHistory($sessionId)
{
$sessionId = intval($sessionId);
if ($sessionId <= 0)
{
$this->error = new BasicError(__METHOD__, 'ACCESS_DENIED', Loc::getMessage('IMOL_OPERATOR_ERROR_ACCESS_DENIED'));
return false;
}
$orm = ModelSessionTable::getByIdPerformance($sessionId);
$session = $orm->fetch();
if (!$session)
{
$this->error = new BasicError(__METHOD__, 'ACCESS_DENIED', Loc::getMessage('IMOL_OPERATOR_ERROR_ACCESS_DENIED'));
return false;
}
if ($session['OPERATOR_ID'] != $this->userId && !isset($session[$this->userId]))
{
$permission = Permissions::createWithCurrentUser();
$allowedUserIds = Helper::getAllowedUserIds(
Helper::getCurrentUserId(),
$permission->getPermission(Permissions::ENTITY_HISTORY, Permissions::ACTION_VIEW)
);
if (
(is_array($allowedUserIds) && !in_array($session['OPERATOR_ID'], $allowedUserIds))
&& BitrixImOpenLinesCrmCommon::hasAccessToEntitiesBindingActivity($session['CRM_ACTIVITY_ID'])->getResult() == false
)
{
$this->error = new BasicError(__METHOD__, 'ACCESS_DENIED', Loc::getMessage('IMOL_OPERATOR_ERROR_ACCESS_DENIED'));
return false;
}
}
$chatId = $session['CHAT_ID'];
$CIMChat = new CIMChat();
$result = $CIMChat->GetLastMessageLimit($chatId, $session['START_ID'], $session['END_ID'], true, false);
if ($result && isset($result['message']))
{
foreach ($result['message'] as $id => $ar)
$result['message'][$id]['recipientId'] = 'chat'.$ar['recipientId'];
$result['usersMessage']['chat'.$chatId] = $result['usersMessage'][$chatId];
unset($result['usersMessage'][$chatId]);
}
else
{
$this->error = new BasicError(__METHOD__, 'ACCESS_DENIED', Loc::getMessage('IMOL_OPERATOR_ERROR_ACCESS_DENIED'));
return false;
}
$chatData = BitrixImModelChatTable::getList(
array(
'select' => array('ENTITY_ID', 'ENTITY_DATA_1'),
'filter' => array('ID' => $chatId)
)
)->fetch();
$crmEntityType = null;
$crmEntityId = null;
if ($chatData['ENTITY_DATA_1'])
{
//TODO: Replace with the method BitrixImOpenLinesChat::parseLinesChatEntityId or BitrixImOpenLinesChat::parseLiveChatEntityId
$chatFieldData = explode('|', $chatData['ENTITY_DATA_1']);
if ($chatFieldData[0] == 'Y')
{
$crmEntityType = $chatFieldData[1];
$crmEntityId = $chatFieldData[2];
}
}
$result['sessionId'] = $sessionId;
$result['canJoin'] = BitrixImOpenLinesConfig::canJoin($session['CONFIG_ID'], $crmEntityType, $crmEntityId)? 'Y':'N';
$result['canVoteAsHead'] = BitrixImOpenLinesConfig::canVoteAsHead($session['CONFIG_ID'])? 'Y':'N';
$result['sessionVoteHead'] = intval($session['VOTE_HEAD']);
$result['sessionCommentHead'] = $session['COMMENT_HEAD'];
$result['openlines']['canVoteAsHead'][$session['CONFIG_ID']] = BitrixImOpenLinesConfig::canVoteAsHead($session['CONFIG_ID']);
return $result;
}