Политика Discourse

:discourse2: Краткое описание Discourse Policy позволяет убедиться, что ваши пользователи ознакомились с чем-либо или выполнили какое-то действие, с возможностью отправки напоминаний.
:open_book: Руководство по установке Этот плагин входит в состав ядра Discourse. Отдельная установка плагина не требуется.

Возможности

Discourse Policy во многом перекликается с опросами: его цель — убедиться, что участники группы принимают определенные политики, нажимая на кнопку.

У него есть несколько специфических функций, отличающих его от опросов:

  1. Он должен применяться к группе.

  2. Он может периодически напоминать участникам группы еженедельно или ежедневно нажать кнопку принятия политики.

  3. Интерфейс позволяет очень легко увидеть, кто принял политику, а кто нет.

Настройка

Скриншоты

До нажатия кнопки принятия

После нажатия на «серую» иконку человека в правом верхнем углу

После нажатия кнопки принятия

Создание политики

Discourse Policy регистрирует пользовательский элемент BBCode [policy]. Это означает, что вам нужно написать этот блок кода в вашем сообщении там, где вы хотите показать эту политику.

[policy group=founders reminder=daily]
Я принимаю, что эта политика будет раздражать меня ежедневно, пока я не нажму кнопку принятия
[/policy]

В данном случае политика применяется к группе founders, и напоминание отправляется ежедневно всем пользователям, которые не приняли политику.

Настройки сайта

policy_enabled : Включить плагин discourse policy на сайте.

policy_restrict_to_staff_posts: Политики могут отображаться только в сообщениях сотрудников.

policy easy revoke: Одновременно отображать кнопки принятия и отзыва.

Атрибуты BBCode

Элемент [policy] может принимать следующие атрибуты.

  • group: имя группы, к которой применяется политика обязательный
  • version: номер версии политики; увеличьте число, чтобы потребовать повторного принятия политики всеми пользователями
  • reminder: напоминать пользователям группы о необходимости принять политику (еженедельно или ежедневно), необязательный, по умолчанию выключено
  • accept: текст для кнопки принятия, по умолчанию «Принять политику»
  • revoke: текст для кнопки отзыва, по умолчанию «Отменить политику»
  • renew: количество дней или текст, описывающий период (ежемесячно, ежеквартально или ежегодно), через который пользователь должен повторно принять политику
  • renew-start: первая дата, с которой начнется действие периода повторного принятия, например 17-10-2017, полезно, если вы хотите установить периодичность повторного принятия так, чтобы она происходила каждые полгода (январь, июнь)
  • add-users-to-group: принимает одну группу в качестве ввода; пользователи, принявшие политику, будут автоматически добавлены в эту группу (когда политика отзывается вручную или если версия политики обновляется, пользователь(и) удаляется из группы)
  • private: скрыть пользователей, принявших/не принявших политику

:information_source: Фоновая задача для проверки напоминаний о политике выполняется каждые 6 часов. Если элемент reminder установлен в еженедельный или ежедневный режим, пользователям, не принявшим политику, будут отправлены уведомления-напоминания о необходимости принять политику только в том случае, если они еще не получали уведомление-напоминание по этой политике за последние неделю или день.

Примеры использования

Базовая политика:

[policy group="team" reminder="daily" accept="Принять" revoke="Игнорировать" version="1"]
Я прочитал, понял и подтверждаю эту политику.
[/policy]

Увеличение номера ревизии, чтобы потребовать, чтобы все прочитали обновление:

[policy group="team" reminder="daily" accept="Принять" revoke="Игнорировать" version="2"]
Я прочитал, понял и подтверждаю эту политику. (Последнее обновление [date=2020-04-23 timezone="America/Los_Angeles"])
[/policy]

Задача периодического аудита:

[policy group="audit_committee" reminder="weekly" renew="90" renew-start="01-07-2019" version="1" accept="Задание выполнено"] 
Я убедился, что кому-то назначено это ежеквартальное задание по аудиту.
[/policy]

ЖУРНАЛ ИЗМЕНЕНИЙ

ПЛАН РАБОТЫ

  • Необязательное немедленное напоминание для новых политик
  • Возможно, разрешить применение политик определенными группами (расширение возможностей для сотрудников)
65 лайков
How to make users to explicitly agree to ToS
Have-to-read topics? (or RSVP topics)
Plugin to maintain group membership based on accepting a Policy
Ability to view if PM has been read (Moderation ability?)
Group Membership base on accepting a Discourse Policy
Force existing users to accept ToS
Dashboard Report - Unaccepted Policies
Improving Discourse Policy for large groups
How to get email notifications when new users have signed up?
Best practices for communicating to user base
Is there a plugin that helps with Age Verification on the site?
Restrict posting in a category until they "like" a topic
Restrict posting in a category until they "like" a topic
Topic should be a notification
Plugin or other option to require a post and a like?
Watching category mandatory
Policy reminder cannot be left empty
Bundling more popular plugins with Discourse core
Age prompt for NSFW catagories
Button to join group on post
Bump topic with API
Publish group read state
How to handle changing organizational roles, re. past mentions on the forum
Delivered and read notifications?
Habit tracking within Discourse...is it possible?
Changing policy texts
Agree to additional terms before joining group
Know who has viewed your post
How can I compare arbitrary revisions of a post?
Require accepting new terms (after changes) as a modal inside forum
Tips into building a community aside a variety of already existing tools
How to force existing users to accept ToS
Plugin to gather approvals / signatures on an initiative?
Recommnded plugins for supporting a tech community run by a big enterprise?
AUP location
I can't display my policy

2 сообщения были перенесены в новую тему: Ограничить создание политик только для сотрудников?

4 сообщения были перенесены в новую тему: Можно ли запретить отмену согласия с определенными политиками?

Похоже, что ограничение в 200 и параметр policy_max_group_size были удалены в этом коммите. Я что-то упускаю?

3 лайка

6 сообщений были перенесены в новую тему: Пользователи получают напоминания, хотя уже приняли политику

Когда политика с длинным текстом кнопки применяется к большой группе, интерфейс искажается: на скриншоте ниже видно, что аватары образуют почти бесконечную колонку, что выглядит немного неудобно. Я изучу CSS, чтобы понять, можно ли это легко исправить, но, вероятно, потребуется какой-то редизайн:

Удаление display: flex для .cooked .policy .user-lists делает отображение корректным на рабочем столе:

В итоге я использовал следующий CSS:

/* Предотвратить переполнение списка пользователей политики */
.cooked .policy .user-lists {
    display: block;
}
3 лайка

Ошибка после установки плагина. Не знаю, почему. Что-то связано с «при попытке загрузить /admin/dashboard/general.json».

Ошибка сервера

при попытке загрузить [/admin/plugins]

Код ошибки: 500

Упс

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

Подробная информация об ошибке была зафиксирована в логах, и автоматически создана уведомление. Мы разберёмся в этом.

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

Здравствуйте,

Будут ли отображаться кнопки «Принять» и «Отклонить», если политика находится в теме категории, которая закрыта и не позволяет отвечать?

Спасибо

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

1 лайк

Привет, у меня есть вопрос:
Мы хотим использовать плагин Discourse Policy для: принудительного принятия Пользовательского соглашения (ToS) новыми пользователями. Требования:

  • Если они не принимают → они не могут использовать форум (видят только страницу ToS)
  • Когда они принимают → они могут использовать форум + получают значок “ToS”

Моё решение заключалось в создании новой темы, внутри которой я добавил следующее:
[policy group=trust_level_0 reminder=daily add-users-to-group=tos_accepted accept=“Я принимаю условия” version=“1”]
Нажимая «Я принимаю условия», я подтверждаю, что прочитал и согласен с Пользовательским соглашением.
[/policy]

Но если новый пользователь входит в систему, политика вообще не отображается, и он может делать всё что угодно. Мы хотим, чтобы доступ к нашей странице был возможен только после нажатия кнопки «Принять». Как это сделать? Спасибо.

Вы можете использовать пользовательское поле и добавить ссылки на страницы Условий использования (ToS) и Часто задаваемых вопросов (FAQ). Как только пользователь ознакомится с ними, он получит значок «Прочитал правила».

2 лайка

Спасибо за ваш ответ — всё сработало именно так, как вы и говорили. Однако я хочу, чтобы этот баннер появлялся после входа пользователя в систему, и доступ к странице открывался только после нажатия кнопки «Принять». В противном случае баннер должен оставаться видимым, а пользователь не сможет взаимодействовать со страницей.

То, что у меня есть сейчас, выглядит так:


после этого пользователь может свободно пользоваться нашей страницей.

Есть ли способ реализовать такое? Спасибо.

:partying_face: Этот плагин теперь включён в ядро Discourse в рамках Bundling more popular plugins with Discourse core. Если вы используете самостоятельный хостинг и применяете этот плагин, вам необходимо удалить его из вашего файла app.yml перед следующим обновлением.

3 лайка

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

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

Спасибо!

3 лайка

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

Вот запрос, который позволит идентифицировать всех активных пользователей в группе, не согласившихся с политикой. Полезно, если требуется дополнительное отслеживание.

WITH target_policy AS (
-- Найти идентификатор основной политики, связанной с вашей темой
SELECT pp.id AS post_policy_id
FROM post_policies pp
JOIN posts p ON p.id = pp.post_id
WHERE p.topic_id = YOUR_TOPIC_ID
LIMIT 1
),
any_accepted_users AS (
-- Собрать все идентификаторы пользователей, связанные с этой записью журнала политики
-- Пропуск проверок версий предотвращает искажение результатов старыми подписями
SELECT DISTINCT pu.user_id
FROM policy_users pu
JOIN target_policy tp ON tp.post_policy_id = pu.post_policy_id
WHERE pu.accepted_at IS NOT NULL
)
SELECT
u.id AS user_id,
u.username,
u.name,
ue.email,
u.last_seen_at
FROM users u
-- Безопасно получить основной аккаунт электронной почты
LEFT JOIN user_emails ue ON ue.user_id = u.id AND ue.primary = true
-- Ограничить целевую группу строго определенной группой
JOIN group_users gu ON gu.user_id = u.id
JOIN groups g ON g.id = gu.group_id
WHERE g.name = 'YOUR_GROUP'
AND u.active = true
AND u.id > 0 -- Исключить учетные записи системы/бота по умолчанию
-- Исключить любой идентификатор пользователя, присутствующий в блоке базы данных журнала политики
AND u.id NOT IN (SELECT user_id FROM any_accepted_users)
ORDER BY u.last_seen_at DESC

2 лайка