Прикрепить файл из веб-формы к письму в Bitrix

Последнее время жизнь меня сталкивает с bitrix… и я встречаю на своем пути разного вида трудности. И вот буквально вчера мне необходимо было реализовать прикрепление к файла из формы к письму, облазил форумы интернеты, проблеме овер дофига лет, в методе отправки письма это все не так давно было реализовано, но в функционале битры нет.


В итоге на одном из форумов нашел интересное решение, не особо правильное, но я считаю оптимальное. Ссылка на оригинал
Добавляем в init.php следующий код:
AddEventHandler("main", "OnBeforeEventAdd", array("MailEventHandler","onBeforeEventAddHandler"));
class MailEventHandler
{
    static function onBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files)
    {
        if ($event === 'FORM_FILLING_SIMPLE_FORM_3' && $message_id === '29') {
            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("/(http\:.*form_show_file.*action\=download)/", $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"]);
    }
}
Во первых перед отправкой сообщения мы смотрим символьный идентификатор формы и message_id(message_id это шаблон письма, допустим с одной формы у нас уходит два письма, одно заказчику, другое владельцу, и файл прикреплять нужно не всем.)
Далее прогоняем все поля и ищем в них ссылку на файл, регуляркой, если ссылка найдена ищем в ней hash и rid
и прикрепляем данный файл к письму.

Все легко и просто… если бы я так мог сказать… битрикс… за что… кары…

Комментарии ()

    Есть вопрос или предложение пиши в Telegram @cloudsv

    MTProto прokси для Telegram

    Прямой эфир

    cloudsv 01 октября 2019, 11:00
    Arch Linux Локальный редирект порта в Linux 0
    cloudsv 25 августа 2019, 19:14
    О жизни Социальная сеть от Яндекса Aura 0
    cloudsv 31 июля 2019, 00:34
    О жизни 33 year old 0
    cloudsv 25 июня 2019, 21:29
    Telegram Полезные боты в Telegram 0
    cloudsv 24 октября 2018, 00:27
    О жизни Обновление Scala Rider G4 11
    cloudsv 21 октября 2018, 23:16
    Arch Linux Памятка по основным утилитам Linux 0