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