J’essaie d’enregistrer des champs personnalisés pour un article nécessitant une validation. Lorsque j’approuve l’article, les champs personnalisés ne sont pas enregistrés.
J’ai vérifié l’événement :approved_post et les champs personnalisés ne sont pas inclus dans la charge utile.
Comment préserver les champs personnalisés pour les articles soumis à validation.
De plus, j’ai utilisé NewPostManager et, dans le gestionnaire, les champs personnalisés sont disponibles, mais bien sûr, cela se déclenche avant l’enregistrement des données dans les tables de validation.
Je corrige un problème avec le plugin events où les données d’événements dans post_custom_field ne sont pas sauvegardées si la catégorie est configurée pour exiger une approbation des sujets.
J’ai consulté le plugin polls et il semble que les champs personnalisés y soient définis sur :approved_post.
Voici l’extrait de code du 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
Dans ma tentative, les données des champs personnalisés sont disponibles dans NewPostManager, mais l’instance ReviewableQueuedPost dans le callback de :approved_post (qui devrait idéalement contenir le champ personnalisé dans son payload) ne les possède pas.
J’ai essayé :
NewPostManager.add_handler do |manager|
if manager.args['event'] && NewPostManager.post_needs_approval?(manager) # cette condition est vraie
manager.args['is_event'] = true
end
puis :
on(:approved_post) do |reviewable, post|
p reviewable.payload['is_event'] # les données ne sont pas disponibles ici
end
C’est intéressant car je ne m’attendrais pas non plus à ce que les sondages fonctionnent ici. Les arguments passés au gestionnaire ne sont pas automatiquement ajoutés au contenu de l’élément révisable.
Je soupçonne un bug ici concernant les sondages et les messages en file d’attente. Je pense que validate_polls n’est jamais appelé après la validation. @Roman, peux-tu regarder cela ?
@Roman, penses-tu que cette fonctionnalité doit être rétroportée ?
Je pense que oui, afin que les personnes sur les branches tests-passés et release puissent également en bénéficier. Je pense que certains, sinon la plupart des plugins utilisant post_custom_fields, doivent gérer ce cas limite.