mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 01:16:38 -06:00
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:
commit
112ca20c96
@ -78,7 +78,7 @@ class QueuedPost < ActiveRecord::Base
|
||||
# Do sidekiq work outside of the transaction
|
||||
creator.enqueue_jobs
|
||||
|
||||
DiscourseEvent.trigger(:approved_post, self)
|
||||
DiscourseEvent.trigger(:approved_post, self, created_post)
|
||||
created_post
|
||||
end
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
35
plugins/poll/spec/lib/new_post_manager_spec.rb
Normal file
35
plugins/poll/spec/lib/new_post_manager_spec.rb
Normal file
@ -0,0 +1,35 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe NewPostManager do
|
||||
let(:user) { Fabricate(:newuser) }
|
||||
let(:admin) { Fabricate(:admin) }
|
||||
|
||||
describe 'when new post containing a poll is queued for approval' do
|
||||
it 'should render the poll upon approval' do
|
||||
params = {
|
||||
raw: "[poll]\n* 1\n* 2\n* 3\n[/poll]",
|
||||
archetype: "regular",
|
||||
category: "",
|
||||
typing_duration_msecs: "2700",
|
||||
composer_open_duration_msecs: "12556",
|
||||
visible: true,
|
||||
image_sizes: nil,
|
||||
is_warning: false,
|
||||
title: "This is a test post with a poll",
|
||||
ip_address: "127.0.0.1",
|
||||
user_agent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
|
||||
referrer: "http://localhost:3000/",
|
||||
first_post_checks: true
|
||||
}
|
||||
|
||||
expect { NewPostManager.new(user, params).perform }
|
||||
.to change { QueuedPost.count }.by(1)
|
||||
|
||||
queued_post = QueuedPost.last
|
||||
queued_post.approve!(admin)
|
||||
|
||||
expect(Post.last.custom_fields[DiscoursePoll::POLLS_CUSTOM_FIELD])
|
||||
.to_not eq(nil)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user