• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Send/PushService.php
  • Класс: BitrixImV2MessageSendPushService
  • Вызов: PushService::prepareEventForPush
private function prepareEventForPush(string $command, array $event): array
{
	$result = [
		'cmd' => $command,
		'chatId' => (int)$event['chatId'],
		'dialogId' => (string)$event['dialogId'],
		'counter' => (int)$event['counter'],
	];

	if ($event['notify'] !== true)
	{
		$result['notify'] = $event['notify'];
	}

	if (!empty($event['chat'][$event['chatId']]))
	{
		$eventChat = $event['chat'][$event['chatId']];

		$chat = [
			'id' => (int)$eventChat['id'],
			'name' => (string)$eventChat['name'],
			'owner' => (int)$eventChat['owner'],
			'color' => (string)$eventChat['color'],
			'type' => (string)$eventChat['type'],
			'date_create' => (string)$eventChat['date_create'],
		];

		if (
			!empty($eventChat['avatar'])
			&& $eventChat['avatar'] !== '/bitrix/js/im/images/blank.gif'
		)
		{
			$chat['avatar'] = $eventChat['avatar'];
		}
		if ($eventChat['call'])
		{
			$chat['call'] = (string)$eventChat['call'];
		}
		if ($eventChat['call_number'])
		{
			$chat['call_number'] = (string)$eventChat['call_number'];
		}
		if ($eventChat['entity_data_1'])
		{
			$chat['entity_data_1'] = (string)$eventChat['entity_data_1'];
		}
		if ($eventChat['entity_data_2'])
		{
			$chat['entity_data_2'] = (string)$eventChat['entity_data_2'];
		}
		if ($eventChat['entity_data_3'])
		{
			$chat['entity_data_3'] = (string)$eventChat['entity_data_3'];
		}
		if ($eventChat['entity_id'])
		{
			$chat['entity_id'] = (string)$eventChat['entity_id'];
		}
		if ($eventChat['entity_type'])
		{
			$chat['entity_type'] = (string)$eventChat['entity_type'];
		}
		if ($eventChat['extranet'])
		{
			$chat['extranet'] = true;
		}

		$result['chat'] = $chat;
	}

	if (!empty($event['lines']))
	{
		$result['lines'] = $event['lines'];
	}

	if (!empty($event['users'][$event['message']['senderId']]))
	{
		$eventUser = $event['users'][$event['message']['senderId']];

		$user = [
			'id' => (int)$eventUser['id'],
			'name' => (string)$eventUser['name'],
			'first_name' => (string)$eventUser['first_name'],
			'last_name' => (string)$eventUser['last_name'],
			'color' => (string)$eventUser['color'],
		];

		if (
			!empty($eventUser['avatar'])
			&& $eventUser['avatar'] !== '/bitrix/js/im/images/blank.gif'
		)
		{
			$user['avatar'] = (string)$eventUser['avatar'];
		}

		if ($eventUser['absent'])
		{
			$user['absent'] = true;
		}
		if (!$eventUser['active'])
		{
			$user['active'] = $eventUser['active'];
		}
		if ($eventUser['bot'])
		{
			$user['bot'] = true;
		}
		if ($eventUser['extranet'])
		{
			$user['extranet'] = true;
		}
		if ($eventUser['network'])
		{
			$user['network'] = true;
		}
		if ($eventUser['birthday'])
		{
			$user['birthday'] = $eventUser['birthday'];
		}
		if ($eventUser['connector'])
		{
			$user['connector'] = true;
		}
		if ($eventUser['external_auth_id'] !== 'default')
		{
			$user['external_auth_id'] = $eventUser['external_auth_id'];
		}
		if ($eventUser['gender'] === 'F')
		{
			$user['gender'] = 'F';
		}
		if ($eventUser['work_position'])
		{
			$user['work_position'] = (string)$eventUser['work_position'];
		}

		$result['users'] = $user;
	}

	if (!empty($event['files']))
	{
		foreach ($event['files'] as $key => $value)
		{
			$file = [
				'id' => (int)$value['id'],
				'extension' => (string)$value['extension'],
				'name' => (string)$value['name'],
				'size' => (int)$value['size'],
				'type' => (string)$value['type'],
				'image' => $value['image'],
				'urlDownload' => '',
				'urlPreview' => (new BitrixMainWebUri($value['urlPreview']))->deleteParams(['fileName'])->getUri(),
				'urlShow' => '',
			];
			if ($value['image'])
			{
				$file['image'] = $value['image'];
			}
			if ($value['progress'] !== 100)
			{
				$file['progress'] = (int)$value['progress'];
			}
			if ($value['status'] !== 'done')
			{
				$file['status'] = $value['status'];
			}

			$result['files'][$key] = $file;
		}
	}

	if (!empty($event['message']))
	{
		$eventMessage = $event['message'];

		$message = [
			'id' => (int)$eventMessage['id'],
			'date' => (string)$eventMessage['date'],
			'params' => $eventMessage['params'],
			'prevId' => (int)$eventMessage['prevId'],
			'senderId' => (int)$eventMessage['senderId'],
		];

		if (isset($message['params']['ATTACH']))
		{
			unset($message['params']['ATTACH']);
		}

		if ($eventMessage['system'] === 'Y')
		{
			$message['system'] = 'Y';
		}

		$result['message'] = $message;
	}

	$indexToNameMap = [
		'chat' => 1,
		'chatId' => 2,
		'counter' => 3,
		'dialogId' => 4,
		'files' => 5,
		'message' => 6,
		'users' => 8,
		'name' => 9,
		'avatar' => 10,
		'color' => 11,
		'notify' => 12,
		'type' => 13,
		'extranet' => 14,

		'date_create' => 20,
		'owner' => 21,
		'entity_id' => 23,
		'entity_type' => 24,
		'entity_data_1' => 203,
		'entity_data_2' => 204,
		'entity_data_3' => 205,
		'call' => 201,
		'call_number' => 202,
		'manager_list' => 209,
		'mute_list' => 210,

		'first_name' => 40,
		'last_name' => 41,
		'gender' => 42,
		'work_position' => 43,
		'active' => 400,
		'birthday' => 401,
		'bot' => 402,
		'connector' => 403,
		'external_auth_id' => 404,
		'network' => 406,


		'textLegacy' => 65,
		'date' => 61,
		'prevId' => 62,
		'params' => 63,
		'senderId' => 64,
		'system' => 601,

		'extension' => 80,
		'image' => 81,
		'progress' => 82,
		'size' => 83,
		'status' => 84,
		'urlDownload' => 85,
		'urlPreview' => 86,
		'urlShow' => 87,
		'width' => 88,
		'height' => 89,
	];

	return $this->changeKeysPushEvent($result, $indexToNameMap);
}