Class: ReviewablePost

Inherits:
Reviewable
  • Object
show all
Defined in:
app/models/reviewable_post.rb

Constant Summary

Constants inherited from Reviewable

Reviewable::TYPE_TO_BASIC_SERIALIZER

Instance Attribute Summary

Attributes inherited from Reviewable

#created_new

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Reviewable

#actions_for, add_custom_filter, #add_score, #apply_review_group, #basic_serializer, basic_serializers_for_list, #build_editable_fields, bulk_perform_targets, clear_custom_filters!, count_by_date, #create_result, #created_new!, custom_filters, default_visible, #delete_user_actions, #editable_for, #explain_score, #history, list_for, #log_history, lookup_serializer_for, min_score_for_priority, needs_review!, pending_count, #perform, #recalculate_score, score_required_to_hide_post, score_to_auto_close_topic, scores_with_topics, sensitivity_score, sensitivity_score_value, #serializer, serializer_for, set_priorities, spam_score_to_silence_new_user, #transition_to, types, typical_sensitivity, unseen_list_for, unseen_reviewable_count, #updatable_reviewable_scores, #update_fields, user_menu_list_for, valid_type?, viewable_by

Class Method Details

.action_aliasesObject



4
5
6
# File 'app/models/reviewable_post.rb', line 4

def self.action_aliases
  { reject_and_silence: :reject_and_suspend }
end

.queue_for_review_if_possible(post, created_or_edited_by) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/models/reviewable_post.rb', line 8

def self.queue_for_review_if_possible(post, created_or_edited_by)
  return unless SiteSetting.review_every_post
  return if post.post_type != Post.types[:regular] || post.topic.private_message?
  return if Reviewable.pending.where(target: post).exists?
  if created_or_edited_by.bot? || created_or_edited_by.staff? ||
       created_or_edited_by.has_trust_level?(TrustLevel[4])
    return
  end
  system_user = Discourse.system_user

  needs_review!(
    target: post,
    topic: post.topic,
    created_by: system_user,
    reviewable_by_moderator: true,
    potential_spam: false,
  ).tap do |reviewable|
    reviewable.add_score(system_user, ReviewableScore.types[:needs_approval], force_review: true)
  end
end

Instance Method Details

#build_actions(actions, guardian, args) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'app/models/reviewable_post.rb', line 29

def build_actions(actions, guardian, args)
  return unless pending?

  if post.trashed? && guardian.can_recover_post?(post)
    build_action(actions, :approve_and_restore, icon: "check")
  elsif post.hidden?
    build_action(actions, :approve_and_unhide, icon: "check")
  else
    build_action(actions, :approve, icon: "check")
  end

  reject =
    actions.add_bundle(
      "#{id}-reject",
      icon: "times",
      label: "reviewables.actions.reject.bundle_title",
    )

  if post.trashed?
    build_action(actions, :reject_and_keep_deleted, icon: "trash-alt", bundle: reject)
  elsif guardian.can_delete_post_or_topic?(post)
    build_action(actions, :reject_and_delete, icon: "trash-alt", bundle: reject)
  end

  if guardian.can_suspend?(target_created_by)
    build_action(
      actions,
      :reject_and_suspend,
      icon: "ban",
      bundle: reject,
      client_action: "suspend",
    )
    build_action(
      actions,
      :reject_and_silence,
      icon: "microphone-slash",
      bundle: reject,
      client_action: "silence",
    )
  end
end

#perform_approve(performed_by, _args) ⇒ Object



71
72
73
# File 'app/models/reviewable_post.rb', line 71

def perform_approve(performed_by, _args)
  successful_transition :approved, recalculate_score: false
end

#perform_approve_and_restore(performed_by, _args) ⇒ Object



79
80
81
82
83
# File 'app/models/reviewable_post.rb', line 79

def perform_approve_and_restore(performed_by, _args)
  PostDestroyer.new(performed_by, post).recover

  successful_transition :approved, recalculate_score: false
end

#perform_approve_and_unhide(performed_by, _args) ⇒ Object



85
86
87
88
89
# File 'app/models/reviewable_post.rb', line 85

def perform_approve_and_unhide(performed_by, _args)
  post.unhide!

  successful_transition :approved, recalculate_score: false
end

#perform_reject_and_delete(performed_by, _args) ⇒ Object



91
92
93
94
95
# File 'app/models/reviewable_post.rb', line 91

def perform_reject_and_delete(performed_by, _args)
  PostDestroyer.new(performed_by, post, reviewable: self).destroy

  successful_transition :rejected, recalculate_score: false
end

#perform_reject_and_keep_deleted(performed_by, _args) ⇒ Object



75
76
77
# File 'app/models/reviewable_post.rb', line 75

def perform_reject_and_keep_deleted(performed_by, _args)
  successful_transition :rejected, recalculate_score: false
end

#perform_reject_and_suspend(performed_by, _args) ⇒ Object



97
98
99
# File 'app/models/reviewable_post.rb', line 97

def perform_reject_and_suspend(performed_by, _args)
  successful_transition :rejected, recalculate_score: false
end