Привет, @pfaffman, с праздниками и спасибо за ответ!
Я попытался создать блок-схему, чтобы всё стало понятнее:
flowchart TB
A0(Пользователь пытается создать новую тему в категории A или B) --> A1{Входит ли пользователь в<br>исключённую группу -- Админ, Мод, УД3, УД4, Подписчики?}
A1 -- Нет --> B1(Проверить последнюю тему пользователя в категориях A, B или C,<br>включая скрытые или удалённые записи)
A1 -- Да --> Z1(Разрешить публикацию)
B1 --> B2{Был ли эта последняя тема<br>создана в течение 14 дней?}
B2 -- Да --> C1(Заблокировать пост + показать ошибку,<br>отобразить время ожидания,<br>ссылку на правила)
C1 --> E1(Сохранить черновик +<br>отключить кнопку отправки) ---> End(Конец)
B2 -- Нет --> D1(Разрешить пост)
D1 --> End(Конец)
Z1 --> End(Конец)
Я также попытался составить простую спецификацию для уточнения
```mermaid
flowchart TB
A0(Пользователь пытается создать новую тему в категории A или B) --> A1{Входит ли пользователь в<br>исключённую группу -- Админ, Мод, УД3, УД4, Подписчики?}
A1 -- Нет --> B1(Проверить последнюю тему пользователя в категориях A, B или C,<br>включая скрытые или удалённые записи)
A1 -- Да --> Z1(Разрешить публикацию)
B1 --> B2{Был ли эта последняя тема<br>создана в течение 14 дней?}
B2 -- Да --> C1(Заблокировать пост + показать ошибку,<br>отобразить время ожидания,<br>ссылку на правила)
C1 --> E1(Сохранить черновик +<br>отключить кнопку отправки) ---> End(Конец)
B2 -- Нет --> D1(Разрешить пост)
D1 --> End(Конец)
Z1 --> End(Конец)
Объяснение блок-схемы
-
A0: Пользователь инициирует создание новой темы в категории A или B.
-
A1: Система проверяет, входит ли пользователь в любую исключённую группу:
• Администраторы
• Модераторы
• Уровень доверия 3 (УД3)
• Уровень доверия 4 (УД4)
• Пользовательская группа «Подписчики»
• Если Да, проверка периода ожидания пропускается, и публикация сразу разрешается (Z1).
• Если Нет, переход к B1.
-
B1: Система получает последнюю созданную тему пользователя в категориях A, B или C. Этот поиск должен включать:
• Мягко удалённые темы (не окончательно удалённые из базы данных).
• Темы, перемещённые в скрытые или комплаенс-категории (например, категория C).
-
B2: Система проверяет, была ли дата создания этой последней темы в течение последних 14 дней.
• Да → Переход к C1 (пост блокируется).
• Нет → Переход к D1 (пост разрешается).
-
C1: Система показывает сообщение об ошибке, информирующее пользователя о том, что он всё ещё находится в периоде ожидания. Сообщение должно включать:
• Упрощённое заявление о том, что публикация пока невозможна.
• Оставшееся время в днях и часах (без минут).
• Ссылку на страницу правил сообщества (приведена ниже).
-
E1: После показа ошибки содержимое пользователя автоматически сохраняется как черновик, а кнопка «Отправить» или «Создать тему» отключается.
-
D1: Если с момента создания последней темы пользователя прошло более 14 дней, система разрешает публикацию новой темы.
-
Z1: Пользователь входит в исключённую группу, поэтому может публиковать без ограничений.
2. Детальная спецификация
2.1 Ограниченные и исключённые группы
• Ограниченные группы:
• Все пользователи, не входящие в следующие исключённые группы (обычно УД0, УД1, УД2).
• Исключённые группы:
- Администраторы
- Модераторы
- Уровень доверия 3 (УД3)
- Уровень доверия 4 (УД4)
- Подписчики (пользовательская группа)
Эти исключённые группы полностью пропускают проверку 14-дневного периода.
2.2 Затрагиваемые категории
• Попытка создания новой темы:
• Запускается, когда пользователь (из ограниченной группы) пытается создать новую тему в категории A или B.
• Проверка последней темы:
• Система проверяет последнюю созданную тему пользователя в категориях A, B или C (где C — «скрытая» или «комплаенс-категория»).
Примечание: Категория C включена для учёта ситуаций, когда тема пользователя была перемещена для удаления/скрытия/комплаенса. Если пользователь создал тему в категории C в течение последних 14 дней, это также учитывается в периоде ожидания.
2.3 Логика 14-дневного периода ожидания
• Если последняя тема пользователя (в A/B/C) была создана в течение 14 дней, создание новой темы в A или B блокируется.
• Если прошло более 14 дней, создание разрешается.
Расчёт времени
• Оставшееся время отображается в днях и часах (например, «Осталось 3 дня 12 часов»).
• Нет необходимости показывать минуты или секунды.
2.4 Блокировка и сохранение черновиков
• Поведение при блокировке:
• При блокировке пользователя показывается сообщение об ошибке (C1).
• Система автоматически сохраняет содержимое пользователя как черновик.
• Кнопка «Отправить» отключается, чтобы пользователь не мог продолжить.
• Пример сообщения об ошибке (упрощённый):
Извините, вы пока не можете создать новую тему в этой категории.
Ваша последняя тема была опубликована менее 14 дней назад,
и до следующей публикации осталось {X дней и Y часов}.
Для получения дополнительной информации ознакомьтесь с правилами сообщества:
https://community.lezismore.org/t/topic/26/2
2.5 Гибкость в будущем
- Дополнительные категории:
• В настоящее время настроены только категории A, B и C.
• Если в будущем потребуется добавить или удалить категории из этого периода ожидания, убедитесь, что система или плагин могут быть расширены без существенных изменений в коде.
- Различные периоды времени:
• Период в 14 дней может быть настраиваемым в параметрах плагина (на случай, если вы захотите установить 7 дней, 30 дней и т. д.).
- Динамическое назначение групп:
• Должна поддерживаться возможность добавления или исключения групп (например, если вы добавите «Подписчиков» или уберёте их).
3. Резюме
-
Ограниченные группы (УД0, УД1, УД2 или любой пользователь, не входящий в исключённую группу) подлежат 14-дневному периоду ожидания перед созданием новой темы в категориях A или B.
-
Исключённые группы (Админ, Модератор, УД3, УД4, «Подписчики») могут публиковать без ограничений.
-
Система проверяет создание самой последней темы в категориях A, B или C (включая мягко удалённые или скрытые). Если она была создана в течение 14 дней, новая тема блокируется.
-
Сообщение об ошибке: Отображает оставшееся время в днях/часах и содержит ссылку на правила сообщества по адресу:
• https://community.lezismore.org/t/topic/26/2
-
Черновик: При блокировке пост пользователя сохраняется как черновик, а кнопка отправки отключается.
-
Данная спецификация может быть расширена для включения дополнительных категорий или других временных рамок в будущем.
Буду признателен за любые предложения!