Olá, @pfaffman, boas festas e obrigado pela resposta!
Tentei criar um fluxograma para deixar mais claro:
flowchart TB
A0(Usuário tenta criar um novo tópico na Categoria A ou B) -- --> A1{Usuário pertence a um grupo isento<br>Admin, Mod, TL3, TL4, Assinantes?}
A1 -- Não --> B1(Verificar último tópico do usuário nas Categorias A, B ou C,<br>incluindo registros ocultos ou excluídos)
A1 -- Sim --> Z1(Permitir postagem)
B1 -- --> B2{Último tópico criado<br>há menos de 14 dias?}
B2 -- Sim --> C1(Bloquear postagem + mostrar erro,<br>exibir cooldown,<br>link para regras)
C1 -- --> E1(Salvar rascunho +<br>desabilitar botão de envio) ---> Fim(Fim)
B2 -- Não --> D1(Permitir postagem)
D1 -- --> Fim(Fim)
Z1 -- --> Fim(Fim)
E também tentei criar uma especificação simples para ajudar a esclarecer
```mermaid
flowchart TB
A0(Usuário tenta criar um novo tópico na Categoria A ou B) -- --> A1{Usuário pertence a um grupo isento<br>Admin, Mod, TL3, TL4, Assinantes?}
A1 -- Não --> B1(Verificar último tópico do usuário nas Categorias A, B ou C,<br>incluindo registros ocultos ou excluídos)
A1 -- Sim --> Z1(Permitir postagem)
B1 -- --> B2{Último tópico criado<br>há menos de 14 dias?}
B2 -- Sim --> C1(Bloquear postagem + mostrar erro,<br>exibir cooldown,<br>link para regras)
C1 -- --> E1(Salvar rascunho +<br>desabilitar botão de envio) ---> Fim(Fim)
B2 -- Não --> D1(Permitir postagem)
D1 -- --> Fim(Fim)
Z1 -- --> Fim(Fim)
Explicação do Fluxo
-
A0: Um usuário tenta criar um novo tópico na Categoria A ou B.
-
A1: O sistema verifica se o usuário pertence a algum grupo isento:
- Administradores
- Moderadores
- Nível de Confiança 3 (TL3)
- Nível de Confiança 4 (TL4)
- Um grupo personalizado de “Assinantes”
- Se Sim, pula a verificação de cooldown e permite a postagem imediatamente (Z1).
- Se Não, prossegue para B1.
-
B1: O sistema recupera o último tópico criado pelo usuário nas Categorias A, B ou C. Essa busca deve incluir:
- Tópicos com exclusão lógica (não removidos permanentemente do banco de dados).
- Tópicos movidos para categorias ocultas ou de conformidade (por exemplo, Categoria C).
-
B2: O sistema verifica se a data de criação desse último tópico está dentro dos últimos 14 dias.
- Sim → Continua para C1 (a postagem é bloqueada).
- Não → Prossegue para D1 (permite a postagem).
-
C1: O sistema exibe uma mensagem de erro informando ao usuário que ele ainda está em cooldown. A mensagem deve incluir:
- Uma declaração simplificada de que ele ainda não pode postar.
- O tempo restante em dias e horas (sem minutos).
- Um link para a página de regras da comunidade (fornecida abaixo).
-
E1: Após exibir o erro, o conteúdo do usuário é salvo automaticamente como rascunho, e o botão “Enviar” ou “Criar Tópico” é desabilitado.
-
D1: Se mais de 14 dias se passaram desde o último tópico do usuário, o sistema permite que o novo tópico seja postado.
-
Z1: O usuário pertence a um grupo isento, portanto, pode postar sem restrições.
2. Especificação Detalhada
2.1 Grupos Restritos vs. Isentos
- Grupos Restritos:
- Qualquer usuário não pertencente aos seguintes grupos isentos (comumente TL0, TL1, TL2).
- Grupos Isentos:
- Administradores
- Moderadores
- Nível de Confiança 3 (TL3)
- Nível de Confiança 4 (TL4)
- Assinantes (um grupo personalizado)
Esses grupos isentos pulam a verificação de 14 dias completamente.
2.2 Categorias em Escopo
- Tentativa de Novo Tópico:
- Ativada quando um usuário (em um grupo restrito) tenta criar um novo tópico na Categoria A ou B.
- Verificação do Último Tópico:
- O sistema verifica o último tópico criado pelo usuário nas Categorias A, B ou C (onde C é a categoria “oculta” ou de “conformidade”).
Observação: A Categoria C é incluída para capturar situações em que o tópico de um usuário é movido para exclusão/ocultação/conformidade. Se o usuário criou um tópico na Categoria C nos últimos 14 dias, isso também conta para o cooldown.
2.3 Lógica de Cooldown de 14 Dias
- Se o tópico mais recente do usuário (em A/B/C) foi criado dentro de 14 dias, bloqueia a criação de um novo tópico em A ou B.
- Se mais de 14 dias se passaram, permite.
Cálculo de Tempo
- Exibe o tempo restante em dias e horas (por exemplo, “3 dias e 12 horas restantes”).
- Não é necessário mostrar minutos ou segundos.
2.4 Bloqueio e Salvamento de Rascunho
- Comportamento de Bloqueio:
- Quando o usuário é bloqueado, exibe uma mensagem de erro (C1).
- O sistema salva automaticamente o conteúdo do usuário como um rascunho.
- O botão “Enviar” fica desabilitado, para que o usuário não possa prosseguir.
- Mensagem de Erro de Exemplo (simplificada):
Desculpe, você ainda não pode criar um novo tópico nesta categoria.
Seu último tópico foi postado há menos de 14 dias,
e faltam {X dias e Y horas} antes que você possa postar novamente.
Para mais detalhes, consulte nossas regras da comunidade:
https://community.lezismore.org/t/topic/26/2
2.5 Flexibilidade Futura
-
Categorias Adicionais:
- Atualmente, apenas A, B e C estão configuradas.
- Se você precisar adicionar ou remover categorias desta regra de cooldown no futuro, certifique-se de que o sistema ou plugin possa ser estendido sem grandes alterações de código.
-
Períodos de Tempo Diferentes:
- O período de 14 dias pode ser configurável nas configurações do plugin (caso você queira 7 dias, 30 dias, etc.).
-
Atribuições Dinâmicas de Grupo:
- Grupos isentos adicionais ou menos (por exemplo, se você adicionar “Assinantes” ou removê-lo) devem ser suportados.
3. Resumo
- Grupos Restritos (TL0, TL1, TL2, ou qualquer usuário não em um grupo isento) estão sujeitos a um cooldown de 14 dias antes de criar outro tópico nas Categorias A ou B.
- Grupos Isentos (Admin, Moderador, TL3, TL4, “Assinantes”) podem postar sem restrições.
- O sistema verifica a criação do tópico mais recente nas Categorias A, B ou C (incluindo exclusões lógicas ou ocultas). Se foi criado dentro de 14 dias, o novo tópico é bloqueado.
- Mensagem de Erro: Exibe o tempo restante em dias/horas e links para as regras da comunidade em:
- Rascunho: Quando bloqueado, a postagem do usuário é salva como rascunho e o botão de envio é desabilitado.
- Esta especificação pode ser estendida para categorias adicionais ou prazos diferentes no futuro.
Agradeceria quaisquer sugestões!