Напишу пока не забыл, сам же потом и буду искать) Всю голову сломал пока искал решение, а оказалось проще простого.
Задача: передать в тело письма не только строковые поля такие как Имя, Фамилия и Номер телефона, но и как минимум путь до загруженного файла с формы. Причём файл грузится в пользовательское свойство типа файл (не множественное).
Код |
---|
use Bitrix\Main\Loader;
Loader::includeModule("iblock");
AddEventHandler('iblock', 'OnAfterIBlockElementAdd', 'IBFeedForm');
function IBFeedForm(&$arFields) {
$SITE_ID = 's1';
$IBLOCK_ID = 22;
$EVEN_TYPE = 'MODAL';
$DOMAIN = ((!empty($_SERVER['HTTPS'])) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
if ($arFields['IBLOCK_ID'] == $IBLOCK_ID) {
$fileUrl = CIBlockElement::GetList(
false,
[
'IBLOCK_ID' => $IBLOCK_ID,
'ACTIVE' => 'Y',
'ID' => $arFields['ID']
],
false,
false,
[
'PROPERTY_FORM_FILE'
]
)->Fetch()['PROPERTY_FORM_FILE_VALUE'];
$filePath = CFile::GetPath($fileUrl);
$file = $DOMAIN . $filePath;
$arFeedForm = array(
"PHONE" => $arFields['NAME'],
"NAME" => $arFields['PROPERTY_VALUES']['110'],
"MAIL" => $arFields['PROPERTY_VALUES']['112'],
"COMMENT" => $arFields['PROPERTY_VALUES']['113'],
"FILE" => $file
);
CEvent::Send($EVEN_TYPE, $SITE_ID, $arFeedForm);
}
} |
Основной смысл в том, что Миша предлагает в своём решении обработчик который отлавливает событие ДО создания элемента в инфоблоке "OnBeforeIBlockElementAdd". Таким методом я не мог получить полный путь до файла в созданном элементе, поэтому использовал обработчик который отлавливает событие ПОСЛЕ создания элемента в инфоблоке "OnAfterIBlockElementAdd". Тогда в массиве $arFields я получаю ID элемента, по нему через CIBlockElement::GetList получил значение этого свойства, форматировал значение через CFile::GetPath и получил полный путь до файла.