Webform. Переменная в скрытом поле

Главные вкладки

Аватар пользователя Никки Никки 13 января 2020 в 11:20

Подскажите пожалуйста, как лучше всего организовать заполнение скрытого поля некой динамической переменной? Форма представляет из себя заявку. У заявки должен быть номер, который формируется автоматически. Номер заявки имеет вид: №пп_YYYY.
№пп - порядковый номер заявки в году. Инкрементное значение, начинающееся с 1 для каждого нового года.
YYYY - соответственно, год.

Через токены можно подгрузить текущий год. А вот с номером, обнуляющимся каждый год - проблема. Токенов подходящих не вижу.

Можно, конечно, через JS+Ajax организовать заполнение поля. Но может сам модуль предоставляет какие-то возможности? На худой конец какие-нибудь хуки?

Комментарии

Аватар пользователя Andruxa Andruxa 13 января 2020 в 18:34

Номер будет присвоен после записи в базу, т.е. уже после сабмита формы, и он не обнуляется раз в год.
Но ход мысли правльный.
Дело в т.н. race condition - два пользователя сабмитят форму с небольшим интервалом по времени, и если присваивать номер на фронте, то он продублируется в их отправлениях.
Лучше поручить друпалу разруливать уникальность номеров.
Т.е., я предполагаю какой-то такой алгоритм:

  • использовать hook_webform_submission_insert($node, $submission);
  • брать id из $submission
  • вычислять id первого отправления с начала года (это можно закешировать)
  • разность этих двух id - будет id отправления с начала года
  • добавить к нему год и записать это в нужное поле
  • пересохранить отправление

как-то так

Аватар пользователя Никки Никки 14 января 2020 в 15:50

Спасибо за идеи!
В итоге сделал похоже, но немного по-своему.
Использую хук hook_webform_submission_presave ($node, $submission) - он как раз меняет данные перед сохранением. Считываю поле с номером заявки, парсю его, сравниваю текущий год с тем, что в номере и в зависимости от этого генерю следующий номер.