Sto cercando di salvare i campi personalizzati per un post che richiede revisione. Quando approvo il post, i campi personalizzati non vengono salvati.
Ho controllato l’evento :approved_post e i campi personalizzati non vengono inseriti nel payload.
Come preservare i campi personalizzati per i post revocabili?
Inoltre, ho utilizzato NewPostManager, e lì nel gestore i campi personalizzati sono disponibili, ma ovviamente viene attivato prima di salvare i dati nei reviewables.
Sto risolvendo un problema con il plugin eventi in cui i dati degli eventi in post_custom_field non vengono salvati se la categoria è impostata per richiedere l’approvazione per i topic.
Ho fatto riferimento al plugin polls e lì sembra che i campi personalizzati vengano impostati su :approved_post.
Questo è il frammento di codice del plugin polls.
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
Nel mio tentativo, i dati dei campi personalizzati sono disponibili in NewPostManager, ma l’istanza ReviewableQueuedPost nel callback di :approved_post (che idealmente dovrebbe contenere il campo personalizzato nel suo payload) non li ha.
Ho provato:
NewPostManager.add_handler do |manager|
if manager.args['event'] && NewPostManager.post_needs_approval?(manager) # questa condizione risulta vera
manager.args['is_event'] = true
end
Poi:
on(:approved_post) do |reviewable, post|
p reviewable.payload['is_event'] # i dati non sono disponibili qui
end
È interessante perché non mi aspetterei che i sondaggi funzionino nemmeno qui. Gli argomenti passati a manager non vengono inseriti automaticamente nel payload di reviewable.
Sospetto ci sia un bug qui tra i sondaggi e i post in coda. Sospetto che validate_polls non venga mai chiamato dopo l’approvazione. @Roman, puoi dare un’occhiata?
@Roman, pensi che questa funzionalità debba essere retroportata?
Credo di sì, in modo che anche gli utenti sui rami con test superati e sui rami di rilascio ne possano beneficiare. Penso che alcuni, se non la maggior parte, dei plugin che utilizzano post_custom_fields debbano gestire questo caso limite.