Um usuário excluiu todas as suas postagens, uma das quais era a postagem “sobre” uma categoria. Restauramos a postagem e alteramos a propriedade para a conta do Sistema, no entanto, ela ainda aparece como “excluída” para um administrador e mostra um erro quando um não administrador visita a postagem:
Não tenho certeza se isso funcionaria, mas tente reconstruir o HTML da postagem. Você pode fazer isso clicando nos 3 pontos –\u003e Chave inglesa –\u003e “Reconstruir HTML”.
Quando você usa o botão Excluir todas as postagens na página de administração do usuário, o tópico sobre é excluído. (Em outros casos, a propriedade é transferida para @system)
Você poderia criar uma nova categoria e mover todos os tópicos para ela e excluir a categoria antiga. Mas isso é mais uma solução alternativa do que uma correção.
Embora eu tenha acabado de reproduzir isso em meu site de teste e a restauração tenha feito com que ele voltasse imediatamente, então não tenho certeza sobre qual é esse problema em particular.
É possível trocar o topic_id do tópico “Sobre” por um novo usando o console Rails, mas a “nova troca de categoria” pode ser uma opção mais fácil através da interface do usuário.
Existem dois problemas que são particularmente infelizes em combinação.
Ao usar “excluir todas as postagens” na página de administração do usuário, a postagem “sobre a categoria” é excluída. (Mas você pode restaurá-la)
Ao excluir postagens onde o autor também foi excluído, e você altera a propriedade antes de restaurar a postagem, você não pode restaurar a postagem. (Como solução alternativa, você pode excluir o tópico e restaurá-lo. Isso restaura a primeira postagem)
Portanto, quando você:
cria um usuário de teste e uma categoria de teste,
torna o usuário de teste o proprietário do tópico “sobre a categoria”,
exclui todas as suas postagens da página de administração do usuário,
(opcional) cria outro tópico de propriedade do usuário de teste,
(opcional) responde a ambos os tópicos usando um usuário diferente,
exclui o usuário de teste,
altera a propriedade do tópico “sobre” (e do outro tópico),
tenta restaurar as postagens,
você recebe um erro, porque não pode restaurar a postagem. Observação: as respostas nos tópicos são visíveis para outros usuários, mas eles não podem ver a primeira postagem.
Suponho que poderíamos criar uma nova categoria e fazer uma troca, no entanto, isso significaria que os usuários que se inscreveram/silenciaram/o que quer que seja na categoria original precisariam refazer isso com a nova?
Não tenho medo do console Rails, então se atribuir um novo topic_id for a maneira mais “correta” de estruturar as coisas, então estou inclinado a fazer isso. Mas eu apreciaria alguma orientação com os comandos específicos a serem executados; seria algo como Category.find(10).topic_id = 723…?
Por outro lado:
…talvez esta seja uma maneira mais rápida de resolver? (Embora eu só veja “Arquivar Tópico” e não “Excluir Tópico” no menu do ícone de chave inglesa…)
Ainda não testei isso tão minuciosamente quanto outros aqui (obrigado!!), mas me parece que a correção para o problema declarado na primeira postagem é bastante simples.
não permitir a exclusão de tópicos sobre em administração de usuários (por moderadores/administradores do site)
Quando o acima for tentado, impeça-o e exiba uma mensagem de erro informativa. Estou movendo para Bug porque é um bug que os tópicos sobre podem ser excluídos no caso acima.
Acabei de criar um usuário de teste e o usei para criar uma categoria e, em seguida, excluí o usuário da administração do usuário. Ele me permitiu excluir o usuário diretamente, mesmo que ele tivesse um tópico. A autoria do tópico sobre foi transferida para o usuário do sistema! Portanto, pelo menos esse caso de uso parece ser bastante seguro a esse respeito.
Também tentei o caso de autoexclusão (tenho que rebaixar o usuário primeiro para ver o botão excluir conta). Excluir esse usuário também deu a autoria do tópico ao sistema. Além disso, vejo que o padrão para delete user self max post count está definido como 1, o que significa que, por padrão, não é possível um usuário se excluir se tiver mais de um tópico. Portanto, estamos seguros aqui de qualquer maneira.
E testei a exclusão do usuário via administração do usuário. Curiosamente, enquanto havia apenas um tópico sobre, eu não obtive o botão de exclusão de postagem. Mas depois de criar um segundo tópico, obtive o botão de exclusão de postagem. Selecioná-lo e digitar o texto longo para confirmar funcionou - consegui excluir as postagens do usuário, incluindo o tópico sobre. Finalmente, uma reprodução!
E, finalmente, também consegui excluir o tópico sobre usando ações em massa. Outra reprodução! Oops, agora vejo que não tenho reprodução de ações em massa excluindo tópicos sobre. Simplesmente falha em fazê-lo silenciosamente.
Dado o acima, podemos ignorar os casos de exclusão de usuário (via administração de usuário e autoexclusão) porque a autoria é dada ao sistema.
Eu também tentei mover a postagem “sobre” para um tópico diferente. Funciona e então um temporizador de exclusão aparece, mas o tópico não é excluído após X dias. O temporizador simplesmente desaparece. Então, isso funciona bem.
Isso pode muito bem impedir que isso aconteça no futuro.
Dito isso, como devo me recuperar da situação agora, onde os usuários veem uma página de erro ao tentar ler a postagem “Sobre” desta categoria, mesmo que a postagem seja de propriedade do usuário system?
Ainda não tentei nada; eu estava esperando que alguém comentasse com “sim, esse é o comando correto” ou “não, não faça isso, vai arruinar tudo” primeiro…
@alxndr você pode confirmar que está auto-hospedando, não em nossa hospedagem? Se você estiver em nossa hospedagem ou mudar para nossa hospedagem, poderá entrar em contato com nossa equipe de suporte e um de nossos associados técnicos o ajudará a corrigir isso.
Se eu estivesse em sua posição, eu apenas criaria uma nova categoria e moveria todos os tópicos para a nova categoria. Isso parece o mais direto.
Se você decidir experimentar o console do Rails ou a API, você está em território desconhecido, então certifique-se de fazer um backup completo do seu site primeiro, caso precise reverter a alteração!
Ha Você parece não confiar no meu conselho @tobiaseigen
Usar a API seria uma opção mais segura do que o console do Rails, só não está claro se ela conseguiria recuperar este tópico específico devido às circunstâncias.
Eu não tinha certeza se a API funcionaria, pois tentar algo semelhante na interface do usuário foi bloqueado, mas parece que tive algum sucesso ().
Neste caso, usei o endpoint para recuperar a postagem em vez de recuperar o tópico (que é o que a opção de restaurar a exclusão na postagem estava tentando fazer):
Do meu teste, o botão de restaurar estava tentando usar o endpoint de recuperação de tópico (/t/TOPIC_ID/recover) e estava retornando 403. Mas pareceu funcionar quando usei a versão de recuperação de posts em vez disso.
Ah, obrigado pelo esclarecimento, você está correto.
Não tenho certeza de como identificar o ID individual da Postagem; o ID da Categoria é 10 e acho que o ID do Tópico é 723? Atualização: Aha, encontrei! Há um data-post-id no elemento DOM <article>…
Não vejo este endpoint na documentação da API… deveria ser um PUT? com algum dado? Atualização: sim um PUT, sem dados — funcionou! Obrigado @JammyDodger !!