Вызывается перед началом интеграции с amoCRM. Срабатывает только в том случае, если для веб-формы или почтового события настроено соотвествующее правило интеграции.
Событие может быть использовано как для модификации значений передаваемых полей, так и для отмены интеграции, если его обработчик вернёт результат, отличный от new EventResult(EventResult::SUCCESS, ...)
.
При загрузке файла в решениях от АСПРО, в почтовое событие передается только его имя и стандартными средствами получить путь до него невозможно. Чтобы обойти это ограничение, в файле /bitrix/php_interface/init.php
можно разместить подобный обработчик:
use Bitrix\Main\EventManager;
use Bitrix\Main\Loader;
use Rover\AmoCRM\Config\Options;
use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
use \Rover\AmoCRM\Entity\Source;
use \Bitrix\Main\ArgumentOutOfRangeException;
if (Loader::includeModule('rover.amocrm')){
EventManager::getInstance()->addEventHandler(
Options::MODULE_ID,
'onBeforeAmoPush',
["FixAspro", "onBeforeAmoPush"]
);
/**
* Class FixAspro
*
* @author Pavel Shulaev (https://rover-it.me)
*/
class FixAspro
{
/**
* @param Event $event
* @return EventResult
* @throws ArgumentOutOfRangeException
* @author Pavel Shulaev (https://rover-it.me)
*/
public static function onBeforeAmoPush(Event $event)
{
$source = $event->getParameter(0);
if (!$source instanceof Source)
return new EventResult(EventResult::ERROR, $event->getParameters());
if (($source->getType() == Source::TYPE__EVENT)
&& ($source->getName() == 'EXAMPLE_EVENT_NAME')) // EXAMPLE_EVENT_NAME = aspro event name with file
{
/** @var Rover\AmoCRM\Entity\Result $result */
$result = $event->getParameter(1);
$params = $result->getEventParams();
$fileName = trim($params['FILE_NAME']); // FILE_NAME = example field with file name
if (strlen($fileName))
{
$file = \CFile::getList(['ID' => 'DESC'], ['ORIGINAL_NAME' => $fileName])->Fetch();
if ($file)
{
$src = \CFile::GetFileSRC($file);
// if file not on external storage
if (strpos($src, 'http') === false)
{
$protocol = \CMain::IsHTTPS()
? 'https://'
: 'http://';
$src = $protocol . str_replace(DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR,
DIRECTORY_SEPARATOR, $_SERVER['HTTP_HOST'] . $src);
}
$params['FILE_NAME'] .= ' (' . $src . ')';
$result->setEventParams($params);
$event->setParameter('result', $result);
}
}
}
return new EventResult(EventResult::SUCCESS, $event->getParameters());
}
}
}
EXAMPLE_EVENT_NAME
- замените на имя почтового события, в котором надо передать файлFILE_NAME
- замените на поле, в котором имя файла передаётся в событие.