Починить форму модуля webform

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

Аватар пользователя avtomoda avtomoda 2 ноября 2020 в 10:18

Добрый день!
Попросили починить сайт Drupal 7. На сайте есть несколько форм созданных с помощью модуля webform. Формы не отправляют письма и не заносят результаты в базу данных. Теперь подробнее:
1. Сделал тестовую копию сайта и развернул на локальной машине.
2. Посмотрел отправляет ли почт письма - зашел как юзер, нажал кнопку забыл пароль - письмо ко мне пришло. Значит сам сайт - почтовая система письма отправляет.
3. Создал с помощью webform новую форму - сделал 2 поля - имя, фамилия - чисто для проверки. В закладках обработка - написал текст, что мол форма отправлена ждите, установил, что страница перезагружается. Нажимаю кнопку отправить, как будто ничего не происходит - поля у формы очистились, сообщение никакое не вывелось. Форма не работает.
4. Удалил все формы созданные модулем webform, сбросил кеш, удалил модуль, заново модуль установил.
5. Вновь создал новую тестовую форму, так же 2 поля - результат то же - не работает.
6. Посмотрел в базу данных - при нажатии кнопки отправить, в базу данных, в таблицу webform_submission данные о результатах отправки не попадают - соответственно в закладках webform результаты пусто - форму пока никто не заполнял.
7. Посмотрел папку modules - думаю что стоит какой то custom модуль, которых что то с формами делает. В папке modules модулей штук 100 и все в одной куче, то есть разделения на contrib иcustom нет. По названию папок понять какой модуль за что отвечает - тяжело.
8. Догадываюсь, что где то написан модуль - в нем функция на form submit которая перехватывает действия кнопки отправить и что то делает.
9. Вопрос - какая существует технология у Вас для поиска неисправности? Как вообще ее найти? Ну в самом деле не открывать же каждую папку с модулями и не читать в каждой папке module?
Повторюсь - я заново создал форму и она то же не работает, так же как и старые формы.
В вновь созданной форме я никакие обработки на кнопку отправить не вешал.
В журнале - ни слова. (никакой ошибки об отправке или что то еще нет)
Ну включил Devel, ну вывел dsm($form) - ну вижу массив с моими полями, а дальше то что?
Как вообще искать неисправность в такой ситуации - с чего начинать? Должна быть какая то метода, найти какая из функций не дает отправлять данные из формы? Как искать то?
P.S.
То есть надо как-то отследить что происходит при нажатии кнопки отправить (что куда пошло и что сработало). Как это вообще сделать на любой форме что бы понять что где сработало?

Лучший ответ

Аватар пользователя avtomoda avtomoda 9 ноября 2020 в 13:55

charOFF wrote: Локальная установка с Xdebug + IDE + точки останова в нужных местах и пошаговое выполнение при необходимости.
Обработчики любой формы запускаются в функции form_execute_handlers()

Спасибо человеку, помог. подсказал. Единственное запускал удаленно через remotessh. В целом xdebug прошел весь цикл отправки формы и вывел на самописный модуль, в котором была написана функция на перехватку все форм созданных с помощью webform. Модуль был запихан в одну из папок контрибного модуля, поэтому я не смог его сразу найти. Ох уж эти разработчики .... Всем спасибо за подсказки.

Комментарии

Аватар пользователя adano adano 2 ноября 2020 в 10:35

Любые советы тут - это гадание на кофейной гуще... Смотреть нужно.
Попросите специалиста с опытом - "починит" за час-два.

Аватар пользователя veligursky veligursky 2 ноября 2020 в 10:59

avtomoda wrote:
Это понятно. Но я спрашивал какова технология поиска неисправности.

для начала тему проверь, может там инупут на батон меняли, а найти где альтерели форму не проблема если знаешь ее айди

Аватар пользователя avtomoda avtomoda 2 ноября 2020 в 12:52

Первое что я сделал включил тему по умолчанию seven. Нет не помогло. Второе вы не внимательно прочитали, что я написал. Я форму сам создаю и поэтому alter на основе id здесь ни причем. Новая форма, новый id.

Аватар пользователя charOFF charOFF 2 ноября 2020 в 17:15
1

avtomoda wrote: Вопрос - какая существует технология у Вас для поиска неисправности?

Локальная установка с Xdebug + IDE + точки останова в нужных местах и пошаговое выполнение при необходимости.
Обработчики любой формы запускаются в функции form_execute_handlers()
Общую схему работы Form API для Drupal 7 можно посмотреть здесь https://www.drupal.org/docs/7/api/form-api/form-api-internal-workflow-il...

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 3 ноября 2020 в 4:51

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

Аватар пользователя avtomoda avtomoda 3 ноября 2020 в 8:23

У меня не совсем так. У меня данные которые я в форму заношу даже в базу данных не попадают, не записываются. Причем добавлю больше что бы убрать все разнотолки по поводу настройки сервера.
Я разработку веду на виртуальной машине с Centos (реально рабочая среда используемая большинством хостеров).
Так вот. На этой же сервере я создал еще один виртуальный хост, куда установил ровно такую же версию Drupal 7 (только голую из коробки в базовой теме bartik), ровно такую же версию модуля webform. Там все прекрасно работает и отправляет. То есть - физически сервер один, и настройки и почтовая служба сервера одна. Тут что то другое. Повторюсь, в проблемном сайте сейчас разговор даже не про письма из формы - сама форма работает не корректно: не заносит данные из формы в базу данных, не выводит сообщение на странице.

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 3 ноября 2020 в 10:05

так очевидно тогда что проблема в таблицах базы данных webform. надо эти таблицы удалить и установить модуль заново. я использовал для переустановки модуль
Administration menu и Administration Development tools . наверняка можно в самом webform модуле посмот реть какие он таблицы создает. но я до этого еще не дошел.

Аватар пользователя avtomoda avtomoda 3 ноября 2020 в 10:29

Самый первый пост. Пункт 4. Написано же - удалил, заново установил. При удалении посмотрел в базу данных, при удалении модуля таблицы удалились. Заново модуль установил, таблицы создались. При создании формы и создании полей в форме и кнопки submit , определенные таблицы в базе данных заполняются. То есть в таблицах появляются мои поля из формы и наименование кнопки submit. Вроде все корректно. При нажатии кнопки submit (читай по русски - отправить) данные из полей формы в таблицу результатов действия формы (webform_submission) не попадают. Соответственно зайдя в форму в tab результаты - "Форма никогда не заполнялась". Ну расписал так что дальше просто некуда - разжевал и в рот положил.

Аватар пользователя avtomoda avtomoda 3 ноября 2020 в 8:33

charOFF wrote:
avtomoda wrote: Вопрос - какая существует технология у Вас для поиска неисправности?
Локальная установка с Xdebug + IDE + точки останова в нужных местах и пошаговое выполнение при необходимости.
Обработчики любой формы запускаются в функции form_execute_handlers()
Общую схему работы Form API для Drupal 7 можно посмотреть здесь https://www.drupal.org/docs/7/api/form-api/form-api-internal-wor

Вот это наверно пока лучший совет в этой теме. Занялся. Xdebug на web сервере запустил (поменял порт - поставил 9001, у меня на 9000 php-fpm стартует). Мучаюсь с vscode по настройке что бы подхватила xdebug. Почти все описания по настройке в сети - локальный сервер на хостовой машине и связка с phpstorm. У меня не совсем так. И сервер в виртуалке (правда в одном сегменте сети - адаптер в режиме моста) и vscode. Надо немного попыхтеть что бы заставить это связку заработать.

Аватар пользователя avtomoda avtomoda 3 ноября 2020 в 10:36

gun_dose wrote: В браузере хоть смотрели, какие данные отправляются на сервер и что приходит в ответ?

Да конечно. Firebag- filter - method:POST-данные есть
submitted[name]: test
submitted[family]: test
details[sid]:
details[page_num]: 1
details[page_count]: 1
details[finished]: 0
form_build_id: form-9mNsIHVA0nqd5Q2vEXJt8vCj_qjOgN39guBadeIVHs4
form_token: bPyPo7c7JPttoEK8CUxm2ldHE6OlIVY-hE9NUnihi48
form_id: webform_client_form_2
op: Отправить

Аватар пользователя avtomoda avtomoda 3 ноября 2020 в 10:51

Есть различия между головой версией и которую чиню в POST
голая версия из коробки - query string parameters q=node/2
ту что чиню - нет вообще такой строки
Возникает вопрос - а не все ли дело в Jqwery?
На сайте стоит модуль по обновлению версии Jqwery - jQuery Update
Может он наводит смуту и тут просто банально не состыковка версий.
Ведь за обработку форм он впрямую отвечает.

Аватар пользователя avtomoda avtomoda 9 ноября 2020 в 13:55

charOFF wrote: Локальная установка с Xdebug + IDE + точки останова в нужных местах и пошаговое выполнение при необходимости.
Обработчики любой формы запускаются в функции form_execute_handlers()

Спасибо человеку, помог. подсказал. Единственное запускал удаленно через remotessh. В целом xdebug прошел весь цикл отправки формы и вывел на самописный модуль, в котором была написана функция на перехватку все форм созданных с помощью webform. Модуль был запихан в одну из папок контрибного модуля, поэтому я не смог его сразу найти. Ох уж эти разработчики .... Всем спасибо за подсказки.