• Модуль: 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;
}