Опросы в Discourse

:discourse2: Краткое описание Плагин Discourse Surveys позволяет создавать опросы непосредственно в постах вашего форума Discourse, используя простой синтаксис Markdown.
:hammer_and_wrench: Ссылка на репозиторий https://github.com/discourse/discourse-surveys
:open_book: Руководство по установке Как установить плагины в Discourse

Плагин Discourse Surveys позволяет создавать опросы непосредственно в постах вашего форума Discourse, используя простой синтаксис Markdown. В настоящее время плагин поддерживает различные типы вопросов, такие как переключатели (radio buttons), флажки (checkboxes), выпадающие списки, числовые поля, текстовые области, рейтинги звездами и рейтинги «палец вверх/вниз».

Возможности

  • 7 различных типов полей: Переключатели, флажки, выпадающие списки, текстовые области, выбор числа, рейтинги звездами и рейтинги «палец вверх/вниз»

  • Обязательные/необязательные поля: Отметьте поля как обязательные, чтобы обеспечить заполнение

  • Поддержка эмодзи: Используйте эмодзи в вариантах ответов вашего опроса

  • Поддержка Markdown: Форматирование текста в вопросах и вариантах ответов

  • Аутентификация пользователей: Автоматические запросы на вход для анонимных пользователей

  • Отслеживание ответов: Предотвращение дублирования отправлений от одного и того же пользователя

  • Учет разрешений: Соблюдение прав доступа к темам и категориям

  • Адаптивность для мобильных устройств: Безупречная работа на всех устройствах

Использование

Базовая структура опроса

Все опросы должны быть обернуты в теги [survey]:


[survey name="my-survey" title="Опрос обратной связи от клиентов"]

<!-- Поля опроса размещаются здесь -->

[/survey]

Атрибуты опроса

  • name: Уникальный идентификатор опроса (по умолчанию «survey»)

  • title: Необязательный заголовок, отображаемый в верхней части опроса

  • public: Установка видимости (будущая функция)

  • status: Статус опроса (будущая функция)

Типы полей

1. Переключатели (один выбор)


[radio question="Какой ваш любимый цвет?"]

- Красный

- Синий

- Зеленый

- Желтый

[/radio]

2. Флажки (несколько выборов)


[checkbox question="Какими функциями вы пользуетесь? (Выберите все подходящие)"]

- Уведомления по электронной почте

- Мобильное приложение

- Уведомления на рабочем столе

- Доступ к API

[/checkbox]

3. Выпадающий список


[dropdown question="К какой возрастной группе вы относитесь?"]

- До 18 лет

- 18–24

- 25–34

- 35–44

- 45–54

- 55+

[/dropdown]

4. Текстовая область (развернутый текст)


[textarea question="Пожалуйста, предоставьте подробную обратную связь:" required="false"]

[/textarea]

5. Выбор числа


[number question="Оцените эту функцию от 1 до 10:" min="1" max="10"]

[/number]

6. Рейтинг звездами


[star question="Как бы вы оценили свой общий опыт?"]

[/star]

7. Палец вверх/вниз


[thumbs question="Порекомендовали бы вы это другим?"]

[/thumbs]

Атрибуты полей

Все типы полей поддерживают следующие атрибуты:

  • question: Текст вопроса (обязательно)

  • required: Должно ли поле быть заполнено (true/false, по умолчанию true)

  • min: Минимальное значение для числовых полей

  • max: Максимальное значение для числовых полей

Полный пример

Базовый Markdown опроса

Вот базовый пример Markdown опроса, включающий все доступные поля:

[survey name="awesome-survey-thumbs" title="Удивительный опрос"]

[radio question="Выберите любой один вариант:"]
- кошка
- собака
[/radio]

[checkbox question="Выберите несколько вариантов:"]
- красный
- синий
- зеленый
[/checkbox]

[dropdown question="Пол:"]
- Мужской
- Женский
[/dropdown]

[number question="Оцените этот опрос от 1 до 10:"]
[/number]

[textarea question="Что вы думаете о xyz?" required="false"]
[/textarea]

[star question="Как бы вы оценили общий опыт?"]
[/star]

[thumbs question="Вы были довольны нашими услугами?"]
[/thumbs]

[/survey]

Отрисовка опроса

Ниже приведен пример того, как вышеуказанный Markdown отображается в Discourse:

Продвинутое использование

Использование эмодзи в вариантах ответов


[radio question="Выберите ваше любимое животное:"]

- 🐈 Кошка

- 🐶 Собака

- 🐦 Птица

- 🐠 Рыба

[/radio]

Форматирование Markdown в вопросах


[radio question="Какой **язык программирования** вы предпочитаете?"]
- JavaScript
- Python
- Ruby
- Go
[/radio]

[checkbox question="Выберите свои *любимые* функции:"]
- Скорость
- Безопасность
- Простота использования
[/checkbox]

[textarea question="Пожалуйста, прочитайте наши [правила](https://example.com) и предоставьте обратную связь:"]
[/textarea]

Поддерживаемое форматирование:

  • Жирный: **текст**
  • Курсив: *текст*
  • Зачеркнутый: ~~текст~~
  • Встроенный код: `код`
  • Ссылки: [текст](url)

Смешанные обязательные и необязательные поля


[survey name="mixed-survey"]

[radio question="Какова ваша роль?" required="true"]

- Разработчик

- Дизайнер

- Менеджер

- Другое

[/radio]

[textarea question="Есть ли дополнительные мысли?" required="false"]

[/textarea]

[/survey]

Результаты опроса

В настоящее время у этого плагина нет интерфейса на стороне сервера для просмотра результатов опроса напрямую. Вместо этого вы можете использовать запросы Data Explorer для получения и анализа ответов на опросы. Вот пример запроса:

-- [params]
-- text :survey_name = survey

SELECT
  s.id,
  s.name,
  s.post_id,
  sf.question,
  COALESCE(sr.value, sfo.html) AS value,
  sr.user_id,
  sr.created_at AS responded_at
FROM
  surveys s
  JOIN survey_fields sf ON sf.survey_id = s.id
  JOIN survey_responses sr ON sr.survey_field_id = sf.id
  LEFT JOIN survey_field_options sfo ON sfo.id = sr.survey_field_option_id
WHERE
  s.name = :survey_name
ORDER BY
  s.id DESC

Разрешения и безопасность

  • Требуется вход: Анонимные пользователи должны войти в систему перед отправкой ответов

  • Один ответ на пользователя: Каждый пользователь может отправить только один ответ на опрос

  • Разрешения по темам: Пользователи должны иметь право на чтение темы, чтобы просматривать опросы

  • Разрешения на публикацию: Пользователи должны иметь право на публикацию в теме, чтобы отправлять ответы

  • Архивированные темы: Опросы в архивированных темах не могут принимать новые ответы

  • Удаленные посты: Опросы в удаленных постах больше недоступны

Ограничения

  • В одном посте разрешен только один опрос

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

  • Все вопросы полей опроса должны быть уникальными в рамках одного опроса

  • Вопросы полей опроса не могут быть пустыми

Технические детали

Схема базы данных

Плагин создает четыре основные таблицы базы данных:

  • surveys: Основные записи опросов

  • survey_fields: Отдельные поля внутри опросов

  • survey_field_options: Варианты ответов для полей с выбором

  • survey_responses: Ответы пользователей на поля опроса

Стилизация

Плагин включает адаптивные CSS-стили, которые подстраиваются под вашу тему. Пользовательские стили можно добавить, нацелившись на следующие CSS-классы:

  • .survey - Основной контейнер опроса

  • .survey-field - Обертка отдельного поля

  • .field-[type] - Контейнеры для конкретных типов полей

  • .submit-response - Кнопка отправки

32 лайка