Перейти к основному контенту

Прикреплять файла к письму (Веб-формы)

$eventManager = \Bitrix\Main\EventManager::getInstance();
 
$eventManager->addEventHandler("main", "OnBeforeEventAdd", array("MailEventHandler", "onBeforeEventAddHandler"));
class MailEventHandler{
 
    static function onBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files){
        // Названия типов почтовых событий и идентификаторы почтовых шаблонов, по которым будет проходить фильтрация при отлавливании события
        $events = array('FORM_FILLING_resume');
        $messageIds = array('37');

        if (in_array($event, $events) && in_array($message_id, $messageIds)){
            // Определяем массив прикрепляемых к письму идентификаторов файлов, если не задан
            if (!is_array($files)){
                $files = [];
            }
            // Перебираем поля письма
            foreach ($arFields as $field){
                // Если находим ссылку на файл, передаем ее дальше
                if ($link = self::getLinkFromField($field)){
                    // Если получаем идентификатор файла, сохраняем его в массив идентификаторов файлов письма
                    if ($fileID = self::getFileFromLink($link)){
                        $files[] = $fileID;
                    }
                }
            }
        }
    }
 
    // Метод возвращает ссылку на файл
    private static function getLinkFromField($field){
        preg_match("/(http\:.*form_show_file.*action\=download)/", $field, $out);
        // Если поле соответствует маске пути к файлу, возвращаем путь
        return ($out[1] ?: false);
    }
    // Метод возвращает идентификатор файла
    private static function getFileFromLink($link){
        // Создаем новый объект, в который записываем ссылку
        $uri = new \Bitrix\Main\Web\Uri($link);
        // Разбираем строку URI и создаем массив из параметров запроса
        parse_str($uri->getQuery(), $query);
        // Метод возвращает массив свойств файла по идентификатору результата веб-формы и хэшу
        $arFile = CFormResult::GetFileByHash($query["rid"], $query["hash"]);
        // Возвращаем идентификатор файла
        return $arFile['FILE_ID'];
    }
}