Создание формы обратной связи на Drupal Webform с мультизагрузкой файлов

Опубликовано: 17.06.2017

Всем, аллоха! Сегодня пост будет про то, как в Drupal создавать формы обратной связи через Webform с возможностью прикрепления файлов. Казалось бы, «Ха, да очень просто!» , но я потратил на решение этой задачи неделю. Хотите знать почему? Тогда прошу к прочтению.

Началась вся эта история, когда меня попросили сделать сайт для одной компании. Решил делать сайт с душой, так как обратились ко мне хорошо знакомые люди. Описывать подробно, что это за сайт и как он разрабатывался, я сейчас не буду. Расскажу лишь про самую интересную задачу в рамках этого проекта, с которой я столкнулся – создание формы обратной связи для привлечения клиентов.

Согласитесь, что при обращении за услугами в любую компанию, вам, как правило, необходимо приложить к письму какие-либо документы. А эти документы в свою очередь могут содержать корпоративную или личную информацию, доступ к которой лучше оставлять ограниченным. Собственно после таких рассуждений я и составил список требований к «правильной» форме обратной связи:

Возможность загрузки произвольного количества файлов; Управление списком доступных расширений файлов для загрузки; Разграничение прав и управление доступом к загруженным файлам; Отправка письма с прикрепленными файлами (а не ссылкой на них) на указанную почту при успешном заполнении формы.

В моем видении проекта должно быть так: после загрузки файлов доступ к ним имеют лишь пользователи с определенной ролью.

Элемент Webform для загрузки файлов

Да, именно для этого проекта я изначально и написал модуль Webform Multiple File потому, что так и не смог найти никакого другого мало-мальски приличного решения. Разумеется, первым, что мне попалось под руку, был уже готовый модуль Webform Multiple File Upload с Drupal.org. Но даже, если бегло пробежаться глазами по коду, становится понятно, что он не подходит. Модуль работает на JS-библиотеке, которая не позволяет в нужной мере оперировать с файлами: ни валидации, ни возможности использовать AJAX на форме.

rss