• Модуль: imconnector
  • Путь к файлу: ~/bitrix/modules/imconnector/lib/connectors/base.php
  • Класс: BitrixImConnectorConnectorsBase
  • Вызов: Base::processingInputNewAndUpdateMessage
protected function processingInputNewAndUpdateMessage($message): Result
{
	$result = new Result();

	if (
		isset($message['user'], $message['user']['skip_phone_validate'])
		&& $message['user']['skip_phone_validate'] === 'Y'
	)
	{
		$message['extra']['skip_phone_validate'] = 'Y';
		unset($message['user']['skip_phone_validate']);
	}


	$resultProcessingUserAndChat = $this->processingUserAndChat($message);
	if ($resultProcessingUserAndChat->isSuccess())
	{
		$message = $resultProcessingUserAndChat->getResult();
	}
	else
	{
		$result->addErrors($resultProcessingUserAndChat->getErrors());
	}

	//Handling attachments
	if (
		$result->isSuccess()
		&& !empty($message['message']['attachments'])
	)
	{
		foreach ($message['message']['attachments'] as $attachment)
		{
			//Forwarded message
			if (!Library::isEmpty($attachment['forward']))
			{
				$text = $this->formationQuotedText($attachment['forward']);

				$message['message']['text'] =
					"------------------------------------------------------n"
					. $text
					. "n[b]" . Loc::getMessage("IMCONNECTOR_FORWARDED_MESSAGE") . "[/B]n"
					. $message['message']['text']
					. "n------------------------------------------------------n";
			}
			//Answered message
			if (!Library::isEmpty($attachment['reply']))
			{
				$text = $this->formationQuotedText($attachment['reply']);

				$message['message']['text'] =
					"------------------------------------------------------n"
					. $text
					. "n"
					. $message['message']['text']
					. "n------------------------------------------------------n";
			}
			//Geolocation
			if (!empty($attachment['location']))
			{
				$text = Loc::getMessage('IMCONNECTOR_MAPS_NAME');
				if (
					!Library::isEmpty($attachment['location']['title'])
					&& !Library::isEmpty($attachment['location']['text'])
				)
				{
					$text = $attachment['location']['title'] . "n" . $attachment['location']['text'];
				} elseif (!Library::isEmpty($attachment['location']['title']))
				{
					$text = $attachment['location']['title'];
				} elseif (!Library::isEmpty($attachment['location']['text']))
				{
					$text = $attachment['location']['text'];
				}

				$message['message']['text'] =
					$message['message']['text']
					. "n"
					. $text
					. "n"
					. "https://yandex.ru/maps/?ll="
					. $attachment['location']['coordinates']['longitude']
					. ","
					. $attachment['location']['coordinates']['latitude']
					. "&z=14&pt="
					. $attachment['location']['coordinates']['longitude']
					. ","
					. $attachment['location']['coordinates']['latitude']
					. ",comma";
			}
			//Contact
			if (!empty($attachment['contact']))
			{
				if (!Library::isEmpty($attachment['contact']['name']))
				{
					$message['message']['text'] .= "n" . Loc::getMessage('IMCONNECTOR_CONTACT_NAME') . $attachment['contact']['name'];
				}
				if (!Library::isEmpty($attachment['contact']['phone']))
				{
					$message['message']['text'] .= "n" . Loc::getMessage('IMCONNECTOR_CONTACT_PHONE') . $attachment['contact']['phone'];
				}
			}
			//Wall
			if (!empty($attachment['wall']))
			{
				$message['message']['text'] .=
					"n[URL="
					. $attachment['wall']['url']
					. "]"
					. Loc::getMessage('IMCONNECTOR_WALL_TEXT');

				if (!Library::isEmpty($attachment['wall']['name']))
				{
					$message['message']['text'] .= " " . $attachment['wall']['name'];
				}
				if (!empty($attachment['wall']['date']))
				{
					$message['message']['text'] .=
						" "
						. Loc::getMessage('IMCONNECTOR_WALL_DATE_TEXT')
						. " "
						. DateTime::createFromTimestamp((int)$attachment['wall']['date'])->toString();
				}
				$message['message']['text'] .= "[/URL]";

				if (!Library::isEmpty($attachment['wall']['text']))
				{
					$message['message']['text'] .= "n" . $attachment['wall']['text'];
				}
			}
		}
	}

	if (
		$result->isSuccess()
		&& !Library::isEmpty($message['message']['date'])
	)
	{
		$message['message']['date'] = DateTime::createFromTimestamp((int)$message['message']['date']);
	}

	if (
		$result->isSuccess()
		&& !empty($message['message']['files'])
	)
	{
		$files = $this->saveFiles($message['message']['files']);
		if (!$files->isSuccess())
		{
			$result->addErrors($files->getErrors());
		}
		$message['message']['files'] = $files->getData();
	}

	if (
		$result->isSuccess()
		&& !empty($message['message']['failed_big_file'])
	)
	{
		$message['message']['text'] = Loc::getMessage("IMCONNECTOR_WARNING_LARGE_FILE") . $message['message']['text'];
	}

	if (
		$result->isSuccess()
		&& !Library::isEmpty($message['message']['text'])
	)
	{
		if (Application::isUtfMode())
		{
			$message['message']['text'] = Emoji::decode($message['message']['text']);
		} else
		{
			$message['message']['text'] = preg_replace('/:([A-F0-9]{8}):/i', '(emoji)', $message['message']['text']);
		}
	}

	if (
		isset($message['message']['disable_crm'])
		&& $message['message']['disable_crm'] === 'Y'
		&& $result->isSuccess()
	)
	{
		$message['extra']['disable_tracker'] = 'Y';
		unset($message['message']['disable_crm']);
	}

	if (
		$result->isSuccess()
		&& Library::isEmpty($message['message']['text'])
		&& empty($message['message']['files'])
	)
	{
		$result->addError(new Error(Loc::getMessage('IMCONNECTOR_NOT_ALL_THE_REQUIRED_DATA'),
			Library::ERROR_IMCONNECTOR_NOT_ALL_THE_REQUIRED_DATA,
			__METHOD__,
			$message
		));
	}

	if ($result->isSuccess())
	{
		$result->setResult($message);
	}

	return $result;
}