Estou tentando salvar campos personalizados para um post que precisa de revisão. Quando aprovo o post, os campos personalizados não são salvos.
Verifiquei o evento :approved_post e os campos personalizados não estão sendo incluídos no payload.
Como preservar os campos personalizados para posts revisáveis?
Além disso, usei o NewPostManager e, no manipulador, os campos personalizados estão disponíveis, mas, claro, ele é acionado antes de salvar os dados nos revisáveis.
Estou corrigindo um problema no plugin de eventos onde os dados do evento em post_custom_field não são salvos se a categoria estiver configurada para exigir aprovação de tópicos.
Consultei o plugin de enquetes e lá parece que os campos personalizados estão sendo definidos em :approved_post.
Este é o trecho do código das enquetes:
NewPostManager.add_handler(1) do |manager|
post = Post.new(raw: manager.args[:raw])
if !DiscoursePoll::PollsValidator.new(post).validate_polls
result = NewPostResult.new(:poll, false)
post.errors.full_messages.each do |message|
result.errors[:base] << message
end
result
else
manager.args["is_poll"] = true
nil
end
end
on(:approved_post) do |queued_post, created_post|
if queued_post.payload["is_poll"]
created_post.validate_polls(true)
end
end
Na minha tentativa, os dados dos campos personalizados estão disponíveis no NewPostManager, mas a instância ReviewableQueuedPost no callback de :approved_post (que idealmente deveria conter o campo personalizado em seu payload) não os possui.
Tentei:
NewPostManager.add_handler do |manager|
if manager.args['event'] && NewPostManager.post_needs_approval?(manager) # esta condição é verdadeira
manager.args['is_event'] = true
end
E então:
on(:approved_post) do |reviewable, post|
p reviewable.payload['is_event'] # os dados não estão disponíveis aqui
end
Isso é interessante, pois eu também não esperaria que as enquetes funcionassem aqui. Os argumentos passados para o manager não são automaticamente incluídos no payload do reviewable.
Suspeito que haja um bug aqui relacionado a enquetes e posts em fila. Acredito que validate_polls nunca é chamado após a aprovação. @Roman, você pode investigar isso?
@Roman, você acha que esse recurso precisa ser portado para versões anteriores?
Acho que sim, para que as pessoas nas branches de testes aprovados e de lançamento também possam se beneficiar. Acredito que alguns, senão a maioria dos plugins que usam post_custom_fields, precisam lidar com esse caso limite.