• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/connectors/network.php
  • Класс: BitrixImConnectorConnectorsNetwork
  • Вызов: Network::processingInputNewMessage
public function processingInputNewMessage($message, $line): Result
{
	$result = new Result();
	$userId = 0;

	if (empty($message['USER']) || empty($message['USER']['UUID']))
	{
		$result->addError(new Error(
			'User data not transmitted',
			'ERROR_IMCONNECTOR_NOT_TRANSMITTED_USER_DATA',
			__METHOD__,
			$message
		));
	}

	if ($result->isSuccess())
	{
		$userId = $this->getUserId($message['USER'], true);

		if (empty($userId))
		{
			$result->addError(new Error(
				'Failed to create or update user',
				'ERROR_IMCONNECTOR_FAILED_USER',
				__METHOD__,
				$message
			));
		}
	}

	if ($result->isSuccess())
	{
		$messageData = [
			'id' => $message['MESSAGE_ID'],
			'date' => '',
			'text' => $message['MESSAGE_TEXT'],
			'fileLinks' => $message['FILES'],
			'attach' => $message['ATTACH'],
			'params' => $message['PARAMS'],
		];

		if (isset($message['FILES_RAW']) && is_array($message['FILES_RAW']))
		{
			$filesIds = $this->createReceivedRawFiles($message['FILES_RAW']);
			if (count($filesIds) && Loader::includeModule('imopenlines'))
			{
				$chatParams = [
					'connector_id' => $this->idConnector,
					'line_id' => $message['LINE_ID'],
					'chat_id' => $message['GUID'],
					'user_id' => $userId
				];

				$chat = new Chat();
				$isLoaded = $chat->load([
					'USER_CODE' => Connector::getUserCode($chatParams),
					'ONLY_LOAD' => 'Y',
				]);

				if ($isLoaded && Loader::includeModule('disk'))
				{
					$diskFiles = CIMDisk::UploadFileFromMain(
						$chat->getData('ID'),
						$filesIds
					);

					if (!is_array($messageData['fileLinks']))
					{
						$messageData['fileLinks'] = [];
					}

					foreach ($diskFiles as $fileId)
					{
						$fileModel = File::loadById($fileId);
						if ($fileModel)
						{
							$messageData['fileLinks'][] = [
								'name' => $fileModel->getOriginalName(),
								'link' => CIMDisk::GetFileLink($fileModel),
								'size' => $fileModel->getSize(),
							];
						}
					}
				}
			}
		}

		$message['USER']['FULL_NAME'] = CUser::FormatName(
			CSite::GetNameFormat(false),
			$message['USER'],
			true,
			false
		);

		$extraFields = [];
		$description =
			'[B]'
			. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_NAME')
			. '[/B]: '
			. $message['USER']['FULL_NAME']
			. '[BR]';
		if (
			isset($message['USER']['WORK_POSITION'])
			&& !empty($message['USER']['WORK_POSITION'])
		)
		{
			$description .=
				'[B]'
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_POST')
				. '[/B]: '
				. $message['USER']['WORK_POSITION']
				. '[BR]';
		}
		if (
			isset($message['USER']['EMAIL'])
			&& !empty($message['USER']['EMAIL'])
		)
		{
			$description .= '[B]' . Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_EMAIL') . '[/B]: '.$message['USER']['EMAIL'] . '[BR]';
		}
		if (
			isset($message['USER']['TARIFF_LEVEL'])
			&& !empty($message['USER']['TARIFF_LEVEL'])
		)
		{
			$description .=
				'[BR][B]'
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_TARIFF_LEVEL')
				. '[/B]: '
				. Loc::getMessage(
					'IMCONNECTOR_CONNECTOR_NETWORK_TARIFF_LEVEL_'
					. mb_strtoupper($message['USER']['TARIFF_LEVEL'])
				)
				. '[BR]';
		}
		if (
			isset($message['USER']['TARIFF'])
			&& !empty($message['USER']['TARIFF'])
		)
		{
			if (!empty($message['USER']['TARIFF_NAME']))
			{
				$description .=
					'[B]'
					. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_TARIFF')
					. '[/B]: '
					. $message['USER']['TARIFF_NAME']
					. ' ('
					. $message['USER']['TARIFF']
					. ')[BR]';
			}
			else
			{
				$description .=
					'[B]'
					. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_TARIFF')
					. '[/B]: '
					. $message['USER']['TARIFF']
					. '[BR]';
			}

			$extraFields['EXTRA_TARIFF'] = $message['USER']['TARIFF'];
		}
		if (
			isset($message['USER']['USER_LEVEL'])
			&& in_array($message['USER']['USER_LEVEL'], ['ADMIN', 'INTEGRATOR'])
		)
		{
			$description .=
				'[B]'
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_USER_LEVEL')
				. '[/B]: '
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_USER_LEVEL_' . $message['USER']['USER_LEVEL'])
				. '[BR]';
			$extraFields['EXTRA_USER_LEVEL'] = $message['USER']['USER_LEVEL'];
		}
		if (
			isset($message['USER']['BOT_VERSION'])
			&& !empty($message['USER']['BOT_VERSION'])
		)
		{
			$description .=
				'[B]'
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_BOT_VERSION')
				. '[/B]: '
				. $message['USER']['BOT_VERSION']
				. '[BR]';
		}
		if (
			isset($message['USER']['PORTAL_TYPE'])
			&& in_array($message['USER']['PORTAL_TYPE'], ['PRODUCTION', 'STAGE', 'ETALON'])
		)
		{
			$description .=
				'[B]'
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_PORTAL_TYPE')
				. '[/B]: '
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_PORTAL_TYPE_' . $message['USER']['PORTAL_TYPE'])
				. '[BR]';
			$extraFields['EXTRA_PORTAL_TYPE'] = $message['USER']['PORTAL_TYPE'];
		}
		if (
			isset($message['USER']['REGISTER'])
			&& !empty($message['USER']['REGISTER'])
		)
		{
			$daysAgo = (int)((time() - $message['USER']['REGISTER']) / 60 / 60 / 24);
			$daysAgo = ($daysAgo > 0? $daysAgo: 1);
			$description .=
				'[B]'
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_REGISTER')
				. '[/B]: '
				. $daysAgo
				. '[BR]';
			$extraFields['EXTRA_REGISTER'] = $daysAgo;
		}
		if (
			isset($message['USER']['DEMO'])
			&& !empty($message['USER']['DEMO'])
		)
		{
			$daysAgo = (int)((time() - $message['USER']['DEMO']) / 60 / 60 / 24);
			$daysAgo = ($daysAgo > 0? $daysAgo: 1);
			$description .=
				'[B]'
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_DEMO')
				. '[/B]: '
				. $daysAgo
				. '[BR]';
		}
		if (
			isset($message['USER']['GEO_DATA'])
			&& !empty($message['USER']['GEO_DATA'])
		)
		{
			$description .=
				'[B]'
				. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_GEO_DATA')
				. '[/B]: '
				. $message['USER']['GEO_DATA']
				. '[BR]';
		}
		$description .=
			'[B]'
			. Loc::getMessage('IMCONNECTOR_CONNECTOR_NETWORK_WWW')
			. '[/B]: '
			. $message['USER']['PERSONAL_WWW'];
		$extraFields['EXTRA_URL'] = $message['USER']['PERSONAL_WWW'];

		$result->setResult([
			'user' => $userId,
			'chat' => [
				'id' => $message['GUID'],
				'description' => $description
			],
			'message' => $messageData,
			'extra' => $extraFields
		]);
	}

	return $result;
}