discourse/lib/post_jobs_enqueuer.rb
Régis Hanol bddffa7f9a FEATURE: flag dispositions normalization
All flags should end up in one of the three dispositions
  - Agree
  - Disagree
  - Defer

In the administration area, the *active* flags section displays 4 buttons
  - Agree (hide post + send PM)
  - Disagree
  - Defer
  - Delete

Clicking "Delete" will open a modal that offer to
  - Delete Post & Defer Flags
  - Delete Post & Agree with Flags
  - Delete Spammer (if available)

When the flag has a list associated, the list will now display 1
response and 1 reply and a "show more..." link if there are more in the
conversation. Replying to the conversation will NOT give a disposition.
Moderators must click the buttons that does that.

If someone clicks one buttons, this will add a default moderator message
from that moderator saying what happened.

The *old* flags section now displays the proper dispositions and is
super duper fast (no more N+9999 queries).

FIX: the old list includes deleted topics
FIX: the lists now properly display the topic states (deleted, closed,
archived, hidden, PM)
FIX: flagging a topic that you've already flagged the first post
2014-07-28 19:28:07 +02:00

56 lines
1.3 KiB
Ruby

class PostJobsEnqueuer
def initialize(post, topic, new_topic, opts={})
@post = post
@topic = topic
@new_topic = new_topic
@opts = opts
end
def enqueue_jobs
# We need to enqueue jobs after the transaction. Otherwise they might begin before the data has
# been comitted.
feature_topic_users unless @opts[:import_mode]
trigger_post_post_process
unless skip_after_create?
after_post_create
after_topic_create
end
end
private
def feature_topic_users
Jobs.enqueue(:feature_topic_users, topic_id: @topic.id)
end
def trigger_post_post_process
@post.trigger_post_process
end
def after_post_create
TopicTrackingState.publish_unread(@post) if @post.post_number > 1
Jobs.enqueue_in(
SiteSetting.email_time_window_mins.minutes,
:notify_mailing_list_subscribers,
post_id: @post.id
)
end
def after_topic_create
return unless @new_topic
# Don't publish invisible topics
return unless @topic.visible?
@topic.posters = @topic.posters_summary
@topic.posts_count = 1
TopicTrackingState.publish_new(@topic)
end
def skip_after_create?
@opts[:import_mode] || @topic.private_message? || @post.post_type == Post.types[:moderator_action]
end
end