Операции с данными Visual Form Builder из приложения 1С:Предприятие 8.3

Для сайта на движке WordPress существует плагин Visual Form Builder, который позволяет создавать шаблоны произвольных форм для публикации их на страницах сайта, где пользователи могут заполнить их данными для каких-либо практических целей и сохранить их в базе данных сайта.

Штатный инструмент экспорта данных заполненных форм плагина Visual Form Builder предлагает ручную настройку сеанса экспорта и выгрузку в файл в формате CSV или XLS для дальнейшей обработки и загрузки его, например, в 1С:Предприятие. Поскольку этот путь требует участия человека, он не может выполняться автоматически, а кроме того, в цепочке конвертирования данных из-за неоднозначности форматов иногда возникают ошибки.

Тем временем существует возможность получения данных заполненных форм непосредственно из базы данных сайта, которая выполняет минимальное число преобразований и может был полностью автоматизирована. Более того, существует возможность автоматического экспорта шаблона анкеты 1С:Предприятие в шаблон формы Visual Form Builder .

Таблицы

Плагина Visual Form Builder создает в базе данных WordPress три таблицы для шаблонов форм, для элементов входящих в шаблоны, для данных форм заполненных пользователями сайта.

wp_visual_form_builder_forms

Таблица содержит записи о всех шаблонах форм VFB. Каждая запись описывает свойства шаблона формы и свойства почтового сообщения, которое будет отправлено после каждого заполнения формы пользователем.

Name Type Length Not NULL Comment
form_id bigint 20 + Ключевой идентификатор формы
form_key tinytext 0 + Ключ формы создается на основе заголовка формы, из которого удалены знаки, пробелы замещены минусами, символы приведены к нижнему регистру, закодировано UTF-8: «%d0%be%d0%b4%d0%bd…»)
form_title text 0 + Строковый заголовок формы на любом языке
form_email_subject text 0 Строковый E-mail Subject используется при отправке сообщения почтой после заполнения формы.
form_email_to text 0 Строковая php-сериализация массива адресов eMail для отправки сообщения о заполнении формы (a:1:{i:0;s:0:»»;})
form_email_from varchar 255 Строковый <Reply-To E-mail> ответный адрес eMail сообщения
form_email_from_name varchar 255 Строковый <Your Name or Company> отправитель сообщения
form_email_from_override varchar 255
form_email_from_name_override varchar 255
form_success_type varchar 25 Тип завершения успешного заполнения формы: { text, page, redirect } — сообщение, страница, перенаправление на произвольный url. Опция каждого варианта завершения находится в form_success_message
form_success_message text 0 Опция завершения заполнения формы.
для text произвольное html-выражение: &lt;p id=\»form_success\»&gt;Огромное вам Спасибо!&lt;/p&gt;
для page номер любой страницы в базе WP: 1234
для redirect произвольный url: http://confirmation.redirect.com
form_notification_setting varchar 25 Признак отправления уведомления { , 1 }
form_notification_email_name varchar 255 Имя отправителя в уведомлении
form_notification_email_from varchar 255 Адрес отправителя в уведомлениb
form_notification_email varchar 25 уведомление
form_notification_subject varchar 255 Тема Subject в уведомлении
form_notification_message text 0 Текст уведомления
form_notification_entry varchar 25 Признак включения в уведомление данных заполненной формы.
form_label_alignment varchar 25 Выравнивание лейбы: вверх, влево, вправо {, left-label, right-label }.

Все поля таблицы (кроме ключа form_id) имеют строковый или текстовый тип, поэтому для упрощения восприятия примеров кавычки в них были опущены.

Данные в таблице можно создавать, удалять и модифицировать.

wp_visual_form_builder_fields

Таблица полей входящих в шаблоны форм VFB

Name Type Length Not NULL Comment
field_id bigint 20 + Ключевой идентификатор поля
form_id bigint 20 + Ключевой идентификатор формы, включающей поле
field_key varchar 255 + Ключ поля создается на основе имени поля, из которого удалены знаки, пробелы замещены минусами, символы приведены к нижнему регистру, выполнено кодирование UTF-8, спецсимволы UTF-8 удалены (d0b0d0bdd182…)
У служебных элементов типа fieldset, section, verification и submit значение поля часто идентично ключу поля.
field_type varchar 25 + имя типа поля {address, currency, date, radio, email, fieldset, file-upload, html, instructions, number, phone, secret, section, select, submit, checkbox, radio, textarea, text, time, url, verification}
field_options text 0 Строковая сериализация опций поля (пример для checkbox «a:3:{i:0;s:8:»Option 1″;i:1;s:8:»Option 2″;i:2;s:8:»Option 3″;}»)
field_description text 0 Текст описания поля Description, который располагается над или под полем формы
field_name text 0 + Имя поля Name, которое отображается над полем формы
field_sequence bigint 20 Порядковый номер поля в форме
field_parent bigint 20 Ключевой идентификатор родительского поля типа section, verification
field_validation varchar 25 пустой Проверка поля Validation
field_required varchar 25 Обязательное поле Required (значения {,no,yes} кроме полей типа section, verification
field_size varchar 25 Размер поля {,medium,…}
field_css varchar 255 Значение (CSS Classes)
field_layout varchar 255
field_default text 0 Строковое значение, которое будет установлено в поле формы при открытии (Default Value)

Данные в таблице можно создавать, удалять и модифицировать.

field_type

Строковое значение в поле field_type таблицы определяет тип поля формы. Для некоторых типов предусмотрена возможность определения дополнительных опций

field_type field_options Comment
fieldset Поле типа fieldset объединяет другие поля в основные группы. Первое служебное поле типа fieldset оглавляет набор полей и вставляется автоматически, поэтому в наборе полей оно одно и всегда имеет field_sequence=0, следующие после него поля, могут не иметь field_parent равным его field_id, но они все равно считаются входящим в него, при нарушении этого правила в работе формы возникнет ошибка. Полей типа fieldset в форме может быть несколько, включение в fieldset допустимо для всех типов (кроме системных fieldset, verification, secret, submit), для этого дочерним полям надо установить field_parent.
section Поле секции позволяет объединить в себе другие поля, у которых field_parent будет равен field_id секции. Секции входить в fieldset, могут включать в себя другие секции. Поля могут размещается вне секций, тогда их field_parent=0, при этом они будут входить в начальный fieldset.
address Комплексное поле Адрес включает описание, улицу, дом, опцию, город, выбор страны.
checkbox a:3:{i:0;s:8:»Option 1″;i:1;s:8:»Option 2″;i:2;s:8:»Option 3″;} Набор флажков, состав которых описывается в опциях.
currency Денежное
date a:1:{s:10:»dateFormat»;s:10:»dd/mm/yyyy»;} Поле даты
email Поле eMail предусматривает проверку корректности введенного значения
file-upload a:1:{i:0;s:13:»png|jpe?g|gif»;} Поле выбора файла для загрузки
html Поле гипертекстовой разметки
instructions Надпись допускающая описание с помощью html
number Числовое поле
phone Поле номера телефона
radio a:3:{i:0;s:8:»Option 1″;i:1;s:8:»Option 2″;i:2;s:8:»Option 3″;} Поле выбора, состав которого описывается в опциях
radio a:3:{i:0;s:8:»Option 1″;i:1;s:8:»Option 2″;i:2;s:8:»Option 3″;}
radio a:3:{i:0;s:8:»Option 1″;i:1;s:8:»Option 2″;i:2;s:8:»Option 3″;}
select a:3:{i:0;s:8:»Select 1″;i:1;s:8:»Select 2″;i:2;s:8:»Select 3″;} Выбор из списка
text Поле текстовой строки
textarea Поле многострочного текста
time Поле времени
url Поле URL
verification Обязательная секция проверки
secret Обязательное поле секретного ответа должно быть заполнено пользователями, которые не были авторизованы на сайте.
submit Обязательный элемент Кнопка подтверждения

///

field_validation

Строковое значение в поле field_validation таблицы назначает проверку значению, которое пользователь введет в поле формы

field_type Описание
email должно быть адресом электронной почты
url должно быть адресом URL
number соответствует числу
digits
time-12 время в формате 12 часов
time-24 время в формате 24 часа
phone телефонный номер

field_required

Строковое значение в поле field_required таблицы служит признаком обязательного заполнения поля формы

field_required Описание
У служебных элементов тип fieldset, section, verification, submit и поля надписи типа instructions поле
yes Признак поля обязательного к заполнению
no Признак необязательного поля

field_size

Строковое значение в поле field_size таблицы определяет размер или компоновку поля ///

field_size Описание
small Поле будет маленьким
medium Поле будет средним
large Поле будет большим
two-column Поле будет скомпоновано в две колонки
three-column Поле будет скомпоновано в три колонки
auto-column Компоновка поля будет выполнена автоматически

field_layout

Строковое значение в поле field_layout таблицы определяет положение и ширину элементов типа address, checkbox, currency, date, email, file-upload, html, instructions, number, phone, radio, radio, secret, select, text, time, url (исключая типы fieldset, section, submit, verification)

field_layout Описание
left-half левую половину
right-half правую половину
left-third левую треть
middle-third центральную треть
right-third правую треть
left-two-thirds левые две трети
right-two-thirds правые две трети

///

wp_visual_form_builder_entries

Таблица содержит записи данных заполненных форм VFB и свойства почтовых сообщений, которые были отправлены.

Name Type Lenght Not NULL Comment
entries_id bigint 20 + Ключевой идентификатор заполненной формы
form_id bigint 20 + Ключевой идентификатор формы.
data longtext 0 + Строковая сериализация заполненных данных (a:9:{i:0;a:7:{s:2:»id»;s:1:»1″;s:4:»slug»;s:69:»d0b7d0b0″;s:4:»name»;s:35:»Запись исполнителя»;s:4:»type»;s:8:»fieldset»;s…)
subject text 0 Строковая Тема указанная в сообщении
sender_name varchar 255 Строковый Отправитель указанный в сообщении.
sender_email varchar 255 Строковый адрес отправителя указанный в сообщении.
emails_to text 0 Строковый список адресов, которым было отправлено сообщение в формате строки сериализации (a:1:{i:0;s:0:»»;})
date_submitted datetime 0 Время сохранения данных формы в часовом поясе сервера
ip_address varchar 50 Строковый ip пользователя, заполнившего анкету
entry_approved varchar 20 Строковый признак Одобрение заполнения (всегда 1)

Данные в таблице можно создавать, удалять и модифицировать. Заполненные формы автономны и не зависят от своего шаблона формы, поэтому если структура шаблона будет изменена после заполнения, в заполненной форме это никак не проявится и ее структура останется прежней.

data

Строковое значение в поле data таблицы содержит все данные введенные пользователем в форме. Данные представляют собой строковую php-сериализацию массива всех полей формы (включая служебные), в котором ключами элементов служат числовые порядковые номера (вероятно, совпадающие с field_sequence), а значениями являются массивы содержащие данные каждого поля формы.

В массиве каждого поля формы находится семь элементов. Элементы используют строковые ключи и строковые значения.

key Описание
id Строковый порядковый номер, начинающийся от 0 (вероятно совпадает с полем field_sequence таблицы wp_visual_form_builder_fields).
name Имя поля в форме повторяет значение field_name.
options Опция поля повторяет значение поля field_options, в тех элементах, где она была и отсутствует там, где ее не было.
a:3:{i:0;s:8:»Option 1″;i:1;s:8:»Option 2″;i:2;s:8:»Option 3″;}
parent_id Родительский ключевой идентификатор повторяет значение поля field_parent.
slug Ключ поля повторяет значение поля field_key.
type Тип поля формы повторяет значение поля field_type.
value Содержит заполненное строковое значение, интерпретация которого зависит от типа поля.
address
currency
date
email
number
phone
secret
select
text
textarea
time
url
Поля простых типов содержат значение непосредственно введенное в поле.
«123»
html Поле html по сути не отличается от простых типов и содержит строку html-кода введенного текста с тэгами форматирования.
«&lt;strong&gt;Однажды&lt;/strong&gt; в студеную зимнюю &lt;strong&gt;&lt;em&gt;пору&lt;/em&gt;&lt;/strong&gt;»
file-upload Поле file-upload тоже содержит указанный путь файла, но сам файл в данных не содержится.
radio
select
Поля с выбором единственного значения содержат выбранное значение так, как оно указано в строковом значении для выбора
«Option 3»
checkbox Поля с множественным выбором содержат все выбранные значения через запятую в том виде и порядке, как они указаны для выбора.
«Option 1, Option 2, Option 3»
fieldset
instructions
section
submit
verification
Служебные поля оставляют значение пустым.
«»

Для лучшего понимания того, как данные полей лежат в массиве php-массивов, для тех кто не знаком с PHP, надо заметить, что в PHP концепция массива отличается от классической и больше напоминает структуру, в которой элемент может быть получен по ключу, почти как по индексу, но при этом к ключу не предъявляется никаких требований, кроме уникальности.

Если способ, которым разработчики Visual Form Builder сохраняют заполненные анкеты, покажется вам избыточным, неудобным и рискованным, то я готов с этим согласиться.

Дополнения и замечания

Кодировка полей form_key

Для синтеза ключа формы form_key и ключа поля field_key плагин VFB выполняет следующее преобразование: за основу берется имя формы или поля, из имени удаляются все знаки, пробелы заменяются символом «-«, буквы приводятся к нижнему регистру, полученная строка кодируется в UTF-8. Для field_key из кода дополнительно удаляются знаки «%», после чего обратное декодирование становится невозможным, но это и не требуется.

Поля сериализации form_email_to, field_options, emails_to, data

Формат php-сериализации имеет вид подобный примеру или сложней:

Этот формат используется в полях form_email_to, field_options, emails_to, data, подробно он описан в публикации Сериализация и десериализация в формате PHP для 1С:Предприятие 8.х

Иллюстрации

Штатные инструменты плагина не предусматривают специальных средств для вставки иллюстраций в элементы форм, тем не менее использование тэга <img…/> в имени (field_name) и описании (field_description) позволяет придать дизайну формы более выразительный вид.

Операции

Формами и данными можно управлять посредством прямого подключения к серверу MySQL выражениями языка SQL. Ниже будут приведены примеры всех операций, и хотя некоторые операции совершенно очевидны, они будут приведены для полноты картины.

Получение списка форм

Пример получения алфавитного списка форм:

Добавление новой формы с полями

Пример добавления новой формы с полями:

Удаление формы

Пример удаления формы с полями:

Получение списка заполненных форм

Пример получения полного списка форм и сведений о идентификаторах, дате/времени и адресе их заполнения в хронологическом порядке:

Получение заполненной формы

Пример получения данных заполненной формы по идентификатору 1234:

Удаление заполненных форм

Добавить комментарий