Я пытаюсь сохранить пользовательские поля для поста, требующего проверки. Когда я одобряю пост, пользовательские поля не сохраняются.
Я проверил событие :approved_post, и пользовательские поля не передаются в полезной нагрузке (payload).
Как сохранить пользовательские поля для постов, требующих проверки?
Также я использовал NewPostManager, и в обработчике пользовательские поля доступны, но, разумеется, это срабатывает до сохранения данных в reviewables.
Я исправляю проблему с плагином событий, при которой данные событий в post_custom_field не сохраняются, если для категории установлена настройка «требовать одобрения тем». Я обратился к плагику polls, и там, похоже, пользовательские поля устанавливаются на :approved_post.
Вот фрагмент кода из плагина 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
В моей попытке данные пользовательских полей доступны в NewPostManager, но экземпляр ReviewableQueuedPost в обратном вызове :approved_post (который в идеале должен содержать пользовательское поле в своём payload) не содержит их.
Я попробовал:
NewPostManager.add_handler do |manager|
if manager.args['event'] && NewPostManager.post_needs_approval?(manager) # это условие истинно
manager.args['is_event'] = true
end
затем:
on(:approved_post) do |reviewable, post|
p reviewable.payload['is_event'] #данные здесь недоступны
end
Это интересно, потому что я тоже не ожидал, что опросы будут работать здесь. Аргументы, переданные менеджеру, автоматически не добавляются в полезную нагрузку проверяемого объекта.
Подозреваю, что здесь есть ошибка, связанная с опросами и постами в очереди. Похоже, validate_polls никогда не вызывается после утверждения. @Roman, можешь разобраться в этом?
@Roman, как ты думаешь, нужно ли портировать эту функцию обратно?
Я считаю, что это необходимо, чтобы пользователи веток tests-passed и release тоже могли этим воспользоваться. Думаю, что некоторые, если не большинство плагинов, использующих post_custom_fields, должны обрабатывать этот крайний случай.