Перейти к содержимому

Ограничения веб-формы - одна анкета и правка результата

Настраиваем форму так, чтобы человек прислал одну анкету, видел её статус и мог поправить её по замечанию модератора. Задача типична для конкурсов, заявок на участие и внутренних согласований.

Решение

Статусы первыми, ограничения потом

Описываем путь анкеты статусами:

Статус «На проверке» - «присваивать по умолчанию» = ДА
Статус «Принято» - по умолчанию = НЕТ
Статус «На исправление» - по умолчанию = НЕТ, здесь анкету правит её создатель

Статусы и права по ним живут только в расширенном режиме редактирования форм. Ровно один статус помечается назначаемым по умолчанию, и его получают все поступившие анкеты.

Соблюдаем порядок настройки формы:

1. статусы результата
2. права групп на каждый статус
3. вкладка «Ограничения»: от одного пользователя принимается одна анкета

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

Права групп на статус

Раздаём права по группам пользователей:

Статус «На проверке»
Зарегистрированные [15] - создателю: просмотр своей анкеты
Редакторы сайта [20] - по всем результатам: просмотр, смена статуса
Статус «На исправление»
Зарегистрированные [15] - создателю: просмотр и редактирование

Права на статус задаются отдельно для создателя результата и отдельно для прочих пользователей. На этой паре и держится модерация: посетитель распоряжается только своей анкетой.

Публикация со списком результатов

Выводим форму и связываем её страницы:

$APPLICATION->IncludeComponent('bitrix:form.result.new', '', [
'WEB_FORM_ID' => 'ANKETA', // ID или символьный код формы
'LIST_URL' => '/form/list.php', // список анкет посетителя
'EDIT_URL' => '/form/edit.php', // страница правки анкеты
'VIEW_URL' => '/form/view.php', // просмотр анкеты
'SUCCESS_URL' => '?WEB_FORM_ID=#FORM_ID#',
]);

Для формы с модерацией начальной страницей выбирают «Список результатов», а не страницу добавления. Тогда после отправки посетитель видит статус своей анкеты и попадает с него на правку.

Правка анкеты посетителем

Ставим страницу редактирования результата:

$APPLICATION->IncludeComponent('bitrix:form.result.edit', '', [
'WEB_FORM_ID' => 'ANKETA',
'LIST_URL' => '/form/list.php', // возврат к списку своих анкет
'SUCCESS_URL' => '/form/list.php',
]);
// адрес именно этой страницы указывают параметром EDIT_URL у приёма анкет

Компонент правки открывает анкету только в том статусе, где группе посетителя выдано право редактирования. В остальных статусах анкета остаётся доступной исключительно на просмотр.

Возврат анкеты на исправление

Замыкаем цикл модерации на автора анкеты:

Редактор ставит анкете статус «На исправление»
-> создатель получает право редактирования в этом статусе
-> исправленную анкету он сам переводит обратно в «На проверке»

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

Проверка ограничения

Считаем принятые анкеты по пользователям:

SELECT USER_ID, COUNT(*) AS cnt FROM b_form_result
WHERE FORM_ID = 3 GROUP BY USER_ID ORDER BY cnt DESC LIMIT 5;
-- вторая анкета у того же пользователя означает, что ограничение не работает

Проверяем под обычной учётной записью, а не под администратором сайта. Права на модуль форм перекрывают права отдельной формы, и картина доступа у администратора получается другая.

Типичные проблемы

От одного человека приходят три анкеты подряд.

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

Сотрудник меняет статус, но саму заявку открыть не может.

Группе выдано право смены статуса и не выдано право просмотра результатов в нём. Просмотр и смена статуса - два разных права одного и того же статуса.

Публичный список показывает не все анкеты формы.

Посетитель не видит результаты в тех статусах, где у его группы нет права просмотра. Счётчик в административном разделе и список на сайте расходятся именно поэтому.

Посетитель отправил анкету и больше её не нашёл.

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

Анкета вернулась на исправление, а правка недоступна.

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

Частые вопросы

Как принять от одного человека только одну анкету?

Вкладкой «Ограничения» у формы: там задаётся приём одной анкеты от пользователя. Заполняют эту вкладку после того, как у формы созданы статусы результата, иначе ограничение настраивают вхолостую.

Может ли посетитель сам исправить отправленную анкету?

Да, компонентом bitrix:form.result.edit в публичной части сайта. Анкета открывается на правку только в том статусе, где группе посетителя выдано право редактирования результата.

Почему в списке на сайте анкет меньше, чем в админке?

Список отдаёт только результаты в тех статусах, что доступны группе на просмотр. Права на статус различаются для создателя результата и для остальных пользователей.

Где вообще включаются статусы и права по ним?

В расширенном режиме редактирования форм. В упрощённом режиме нет ни статусов, ни прав по ним, а обратное переключение режима повреждает структуру формы.

Как вернуть анкету автору на доработку?

Отдельным статусом вроде «На исправление», в котором создателю выдано право редактирования. Оттуда исправленная анкета возвращается автором в статус проверки.

Смежное

Первоисточник