Как создать список пользователей, которые не отправили какую-либо веб-форму?


У меня есть веб-форма, в которой все пользователи должны записывать свои данные онлайн.

Я хотел бы перечислить всех пользователей, которые еще не отправили веб-форму. Я пытался использовать Представления , но не могу найти способ сделать это.

Чтобы перечислить отправивших пользователей, это не проблема, просто отобразите отправляющих пользователей в таблице просмотров.

Как я могу перечислить всех пользователей, которые не отправили веб-форму?

Author: Waluyo Adi Siswanto, 2016-05-10

2 answers

Шаг 1 - Введите флаг отправки веб-формы

Установите/включите модуль Флаг. Перейдите к /admin/structure/flags/add/node и создайте флаг (не устанавливайте флажок "глобальный"). Предположим, вы обозначите это как-то вроде " Отправка веб-формы". Для "Пакетов" (в той же форме) проверьте "Веб-форму".

Вот такое определение флага (в формате экспорта), которое вы могли бы использовать для него (просто импортируйте его на свой собственный сайт):

$flags = array();
// Exported flag: "Webform submission".
$flags['webform_submission'] = array (
  'entity_type' => 'node',
  'title' => 'Webform submission',
  'global' => '0',
  'types' => 
  array (
    0 => 'webform',
  ),
  'flag_short' => 'Webform submitted',
  'flag_long' => 'Indication that the Webform was submitted already',
  'flag_message' => 'Webform submission recorded',
  'unflag_short' => 'Webform NOT submitted',
  'unflag_long' => 'Indication that the Webform is not yet submitted',
  'unflag_message' => 'Webform submission recording removed',
  'unflag_denied_text' => '',
  'link_type' => 'toggle',
  'weight' => 0,
  'show_in_links' => 
  array (
    'full' => 0,
    'teaser' => 0,
    'rss' => 0,
    'search_index' => 0,
    'search_result' => 0,
    'answers_full_node' => 0,
    'print' => 0,
  ),
  'show_as_field' => 0,
  'show_on_form' => 0,
  'access_author' => '',
  'show_contextual_link' => 0,
  'i18n' => 0,
  'api_version' => 3,
);
return $flags;

Шаг 2 - Регистрация веб-формы материалы

Установите/включите модуль Правила и создайте правило для пометки веб-формы при ее отправке (пользователем, отправившим веб-форму и использующим флаг "Отправка веб-формы" (с шага 1).

Вот такое определение правила (в формате экспорта), которое вы могли бы использовать для него (просто импортируйте его на свой собственный сайт, что вы можете сделать, если у вас включен пользовательский интерфейс правил):

{ "rules_flag_a_submitted_webform" : {
    "LABEL" : "Flag a submitted webform",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "flag", "webform_rules" ],
    "ON" : { "webform_rules_submit" : [] },
    "IF" : [
      { "data_is" : { "data" : [ "node:nid" ], "value" : "5" } },
      { "user_has_role" : { "account" : [ "user" ], "roles" : { "value" : { "2" : "2" } } } }
    ],
    "DO" : [
      { "flag_flagnode" : {
          "flag" : "webform_submission",
          "node" : [ "node" ],
          "flagging_user" : [ "user" ],
          "permission_check" : "1"
        }
      }
    ]
  }
}

Шаг 3 - Перечислите отправленные веб-формы

Создайте представление (используя Просмотры модуль), чтобы перечислить пользователей, которые отметили веб-форму "да" или "нет" с помощью флага "Отправка веб-формы" (Шаг 1).

Вот такое определение представлений (в формате экспорта), которое вы могли бы использовать для этого (просто импортируйте его на свой собственный сайт, что вы можете сделать, если у вас включен "Пользовательский интерфейс представлений"):

$view = new view();
$view->name = 'webform_submissions_by_users';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'users';
$view->human_name = 'Webform submissions by users';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'Webform submissions by users';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['access']['perm'] = 'access user profiles';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['items_per_page'] = '10';
$handler->display->display_options['style_plugin'] = 'table';
/* Relationship: Flags: User's flaggings */
$handler->display->display_options['relationships']['flag_user_content_rel']['id'] = 'flag_user_content_rel';
$handler->display->display_options['relationships']['flag_user_content_rel']['table'] = 'users';
$handler->display->display_options['relationships']['flag_user_content_rel']['field'] = 'flag_user_content_rel';
$handler->display->display_options['relationships']['flag_user_content_rel']['required'] = 0;
$handler->display->display_options['relationships']['flag_user_content_rel']['flag'] = 'webform_submission';
/* Field: User: Name */
$handler->display->display_options['fields']['name']['id'] = 'name';
$handler->display->display_options['fields']['name']['table'] = 'users';
$handler->display->display_options['fields']['name']['field'] = 'name';
$handler->display->display_options['fields']['name']['alter']['word_boundary'] = FALSE;
$handler->display->display_options['fields']['name']['alter']['ellipsis'] = FALSE;
/* Field: Flags: User uid */
$handler->display->display_options['fields']['uid']['id'] = 'uid';
$handler->display->display_options['fields']['uid']['table'] = 'flagging';
$handler->display->display_options['fields']['uid']['field'] = 'uid';
$handler->display->display_options['fields']['uid']['relationship'] = 'flag_user_content_rel';
/* Field: Flags: Flagged time */
$handler->display->display_options['fields']['timestamp']['id'] = 'timestamp';
$handler->display->display_options['fields']['timestamp']['table'] = 'flagging';
$handler->display->display_options['fields']['timestamp']['field'] = 'timestamp';
$handler->display->display_options['fields']['timestamp']['relationship'] = 'flag_user_content_rel';
$handler->display->display_options['fields']['timestamp']['date_format'] = 'long';
$handler->display->display_options['fields']['timestamp']['second_date_format'] = 'long';
/* Sort criterion: User: Uid */
$handler->display->display_options['sorts']['uid']['id'] = 'uid';
$handler->display->display_options['sorts']['uid']['table'] = 'users';
$handler->display->display_options['sorts']['uid']['field'] = 'uid';
/* Filter criterion: Flags: User uid */
$handler->display->display_options['filters']['uid']['id'] = 'uid';
$handler->display->display_options['filters']['uid']['table'] = 'flagging';
$handler->display->display_options['filters']['uid']['field'] = 'uid';
$handler->display->display_options['filters']['uid']['relationship'] = 'flag_user_content_rel';
$handler->display->display_options['filters']['uid']['value'] = '';
$handler->display->display_options['filters']['uid']['exposed'] = TRUE;
$handler->display->display_options['filters']['uid']['expose']['operator_id'] = 'uid_op';
$handler->display->display_options['filters']['uid']['expose']['label'] = 'User uid';
$handler->display->display_options['filters']['uid']['expose']['use_operator'] = TRUE;
$handler->display->display_options['filters']['uid']['expose']['operator'] = 'uid_op';
$handler->display->display_options['filters']['uid']['expose']['identifier'] = 'uid';
$handler->display->display_options['filters']['uid']['expose']['remember_roles'] = array(
  2 => '2',
  1 => 0,
  3 => 0,
  4 => 0,
  5 => 0,
  6 => 0,
);
/* Filter criterion: User: Active */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'users';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = '1';

/* Display: Page */
$handler = $view->new_display('page', 'Page', 'page');
$handler->display->display_options['path'] = 'webform-submissions-by-users';

Плод вашего труда

Если вы импортируете приведенные выше определения флага, правила и представления, и у вас есть несколько пользователей, отправляющих веб-форму (= записывающих свои данные), вы можете перейдите по относительному пути на своем собственном сайте, который затем должен отображать таблицу, похожую на этот пример:

Name            User uid   Flagged time
--------------+----------+--------------------------------
Demo.User     !          !                                
Famous.Dries  ! 8        ! Wednesday, May 11, 2016 - 19:13
Pierre.Vriens ! 19       ! Wednesday, May 11, 2016 - 18:07 

В приведенном выше примере пользователь "Demo.User" еще не отправил веб-форму. Представление содержит открытый фильтр, так что вы можете ограничить отображение только теми, кто отправил форму, или теми, кто еще не отправил форму.

Начните придираться к пользователям

Если бы вы улучшили свое представление с шага 3 с помощью модуля Просмотр массовых операций, и вы бы создали компонент правил (используя модуль Правила ) для отправки электронной почты, вы могли бы использовать его для отправки электронной почты всем этим пользователям в этом представлении с помощью какого-либо назойливого письма типа "Пожалуйста, запишите свои данные...".

Что дальше?

Вышеизложенное не учитывает никаких отправлений веб-форм до реализации вышеуказанной логики. Однако было бы неплохо использовать смесь вышеперечисленных (4) модулей, включая VBO, для выполнения такого обновления только один раз (чтобы также отметьте пользователей, которые уже отправляли веб-форму в прошлом). Всем, кому интересно узнать об этом: Задайте (последующий) вопрос ...

 2
Author: Pierre.Vriens, 2017-04-13 12:47:06

Приведенное выше решение может сработать, но на мой взгляд оно выглядит слишком сложным. ;)

Я достиг этого на Drupal 8, выполнив следующие шаги,

  1. Создать представление пользователя
  2. Загрузка пользовательских данных в поля
  3. Добавьте связь в "представления веб-форм" (не включайте "Требовать эту связь")
  4. Добавить фильтр "Отправка веб-формы: Отправлено"
  5. Установите для этого фильтра значение "Пусто (НОЛЬ)"

Здесь будут показаны все пользователи, которые не отправили никаких веб-форма.

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

Или есть другой фильтр, где вы можете выбрать конкретную веб-форму, но почему-то она не работает на моем сайте drupal. Вы можете попробовать, это может сработать на вашем сайте drupal.

Это также должно работать для Drupal 7, я еще не пробовал.

Наслаждайтесь:)

 1
Author: Umesh Patil, 2019-06-06 09:18:15