Merge pull request #4675 from tgxworld/fix_polls_forever_broken_if_approval_required

FIX: Polls permanently broken if post requires approval.
This commit is contained in:
Guo Xiang Tan
2017-03-01 12:56:03 +08:00
committed by GitHub
3 changed files with 61 additions and 3 deletions

View File

@ -295,11 +295,11 @@ after_initialize do
end
end
validate(:post, :validate_polls) do
validate(:post, :validate_polls) do |force=nil|
return if !SiteSetting.poll_enabled? && (self.user && !self.user.staff?)
# only care when raw has changed!
return unless self.raw_changed?
return unless self.raw_changed? || force
validator = DiscoursePoll::PollsValidator.new(self)
return unless (polls = validator.validate_polls)
@ -316,6 +316,29 @@ after_initialize do
true
end
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.post_options["is_poll"]
created_post.validate_polls(true)
end
end
Post.register_custom_field_type(DiscoursePoll::POLLS_CUSTOM_FIELD, :json)
Post.register_custom_field_type(DiscoursePoll::VOTES_CUSTOM_FIELD, :json)