Вот моё решение для модуля Веб-форм битрикса:[CODE]Bitrix\Main\EventManager::getInstance()->addEventHandler(
"main",
"OnBeforeEventAdd",
["MailEventHandler", "onBeforeEventAddHandler"]
);
class MailEventHandler
{
static function onBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files)
{
if (strpos($event, 'FORM_FILLING_') !== false) {
if (!is_array($files)) $files = [];
foreach ($arFields as $key => $field) {
if ($link = self::getLinkFromField($field)) {
if ($arFile = self::getFileFromLink($link)) {
$files[] = $arFile['FILE_ID'];
}
}
}
}
}
static function getLinkFromField($field)
{
preg_match("/href=[\"'](.*form_show_file.*)[\"']/", $field, $out);
return ($out[1] ?: false);
}
static function getFileFromLink($link)
{
$uri = new \Bitrix\Main\Web\Uri($link);
parse_str($uri->getQuery(), $query);
return CFormResult::GetFileByHash($query["rid"], $query["hash"]);
}
}[/CODE]Этот код в init.php сделает так, что все файлы, которые выбрал пользователь попадут в атач письма (а не только как ссылка на скачивание).
Работает именно с вебформами.
"main",
"OnBeforeEventAdd",
["MailEventHandler", "onBeforeEventAddHandler"]
);
class MailEventHandler
{
static function onBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files)
{
if (strpos($event, 'FORM_FILLING_') !== false) {
if (!is_array($files)) $files = [];
foreach ($arFields as $key => $field) {
if ($link = self::getLinkFromField($field)) {
if ($arFile = self::getFileFromLink($link)) {
$files[] = $arFile['FILE_ID'];
}
}
}
}
}
static function getLinkFromField($field)
{
preg_match("/href=[\"'](.*form_show_file.*)[\"']/", $field, $out);
return ($out[1] ?: false);
}
static function getFileFromLink($link)
{
$uri = new \Bitrix\Main\Web\Uri($link);
parse_str($uri->getQuery(), $query);
return CFormResult::GetFileByHash($query["rid"], $query["hash"]);
}
}[/CODE]Этот код в init.php сделает так, что все файлы, которые выбрал пользователь попадут в атач письма (а не только как ссылка на скачивание).
Работает именно с вебформами.