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…)
Não testei isso tão exaustivamente quanto outros aqui (obrigado!!), mas, na minha opinião, a correção para o problema mencionado na primeira postagem é bastante simples.
não permitir a exclusão de tópicos “Sobre” na administração de usuários (por moderadores/administradores do site)
Quando o acima for tentado, impeça a ação e exiba uma mensagem de erro informativa. Estou movendo isso para Contribute > Bug, pois é um bug que os tópicos “Sobre” possam ser excluídos no caso acima.
Acabei de criar um usuário de teste e o usei para criar uma categoria, e então excluí o usuário na administração de usuários. 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 nesse aspecto.
Também testei o caso de autoexclusão (é preciso rebaixar o usuário primeiro para ver o botão de excluir conta). Excluir esse usuário também transferiu a autoria do tópico para o sistema. Além disso, notei 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 para um usuário se autoexcluir se ele tiver mais de um tópico. Portanto, estamos seguros nesse aspecto de qualquer maneira.
E testei excluir o usuário por meio da administração de usuários. Curiosamente, enquanto havia apenas o tópico “Sobre”, não recebi o botão de excluir postagem. Mas, após criar um segundo tópico, recebi o botão de excluir postagem. Selecioná-lo e digitar o texto longo de confirmação então funcionou — pude excluir as postagens do usuário, incluindo o tópico “Sobre”. Finalmente, consegui reproduzir!
E, finalmente, também consegui excluir o tópico “Sobre” usando ações em massa. Outra reprodução! Ops, agora percebo que não tenho como reproduzir a exclusão de tópicos “Sobre” por meio de ações em massa. Ele simplesmente falha em fazê-lo silenciosamente.
Dado o exposto acima, podemos ignorar os casos de exclusão de usuário (via administração de usuários e autoexclusão), pois a autoria é transferida para o 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 !!