• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/operator.php
  • Класс: BitrixImOpenLinesOperator
  • Вызов: Operator::checkAccess
private function checkAccess()
{
	if (!$this->moduleLoad)
	{
		return [
			'RESULT' => false
		];
	}

	if ($this->chatId <= 0)
	{
		$this->error = new BasicError(__METHOD__, 'CHAT_ID', Loc::getMessage('IMOL_OPERATOR_ERROR_CHAT_ID'));

		return [
			'RESULT' => false
		];
	}
	if ($this->userId <= 0)
	{
		$this->error = new BasicError(__METHOD__, 'USER_ID', Loc::getMessage('IMOL_OPERATOR_ERROR_USER_ID'));

		return [
			'RESULT' => false
		];
	}

	$orm = BitrixImModelRelationTable::getList([
		"select" => ["ID", "ENTITY_TYPE" => "CHAT.ENTITY_TYPE"],
		"filter" => [
			"=CHAT_ID" => $this->chatId,
			"=USER_ID" => $this->userId,
		],
	]);

	if ($relation = $orm->fetch())
	{
		if ($relation["ENTITY_TYPE"] != "LINES")
		{
			$this->error = new BasicError(__METHOD__, 'CHAT_TYPE', Loc::getMessage('IMOL_OPERATOR_ERROR_CHAT_TYPE'));

			return [
				'RESULT' => false
			];
		}
	}
	else
	{
		$ormChat = BitrixImModelChatTable::getById($this->chatId);
		if($chat = $ormChat->fetch())
		{
			if($chat['TYPE'] == IM_MESSAGE_OPEN_LINE)
			{
				$parsedUserCode = SessionCommon::parseUserCode($chat['ENTITY_ID']);
				$lineId = $parsedUserCode['CONFIG_ID'];
				$fieldData = explode("|", $chat['ENTITY_DATA_1']);
				if(!BitrixImOpenLinesConfig::canJoin($lineId, ($fieldData[0] == 'Y'? $fieldData[1]: null), ($fieldData[0] == 'Y'? $fieldData[2]: null)))
				{
					$this->error = new BasicError(__METHOD__, 'ACCESS_DENIED', Loc::getMessage('IMOL_OPERATOR_ERROR_ACCESS_DENIED'));

					return [
						'RESULT' => false
					];
				}
			}
			else
			{
				$this->error = new BasicError(__METHOD__, 'CHAT_TYPE', Loc::getMessage('IMOL_OPERATOR_ERROR_CHAT_TYPE'));

				return [
					'RESULT' => false
				];
			}
		}
		else
		{
			$this->error = new BasicError(__METHOD__, 'CHAT_ID', Loc::getMessage('IMOL_OPERATOR_ERROR_CHAT_ID'));

			return [
				'RESULT' => false
			];
		}
	}

	return [
		'RESULT' => true
	];
}