Прикрепить файл из веб-формы к письму в 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

    Прямой эфир

    cloudsv 24 октября 2018, 00:27
    О жизни Обновление Scala Rider G4 0
    cloudsv 21 октября 2018, 23:16
    Arch Linux Памятка по основным утилитам Linux 0
    cloudsv 01 июня 2018, 01:39
    Telegram Настройка прокси mtproto для Telegram 26
    cloudsv 22 января 2018, 21:59
    Web Локальное зеркало обновлений Dr.web 0
    cloudsv 03 октября 2017, 10:55
    Web Пароль от резервной копии Bitrix 1
    cloudsv 09 июля 2017, 23:02
    Arch Linux Let's Encrypt это легко и просто 0

    Реклама

    @NormGIF Лучшие гифки интернетов в Telegram, подписывайся