Add moderation API (#9387)

Fix #8580
Fix #7143
This commit is contained in:
Eugen Rochko
2019-06-20 02:52:34 +02:00
committed by GitHub
parent 33144e132d
commit 7696f77245
18 changed files with 735 additions and 1 deletions

View File

@ -106,6 +106,8 @@ class Account < ApplicationRecord
:confirmed?,
:approved?,
:pending?,
:disabled?,
:role,
:admin?,
:moderator?,
:staff?,

View File

@ -37,6 +37,8 @@ class AccountFilter
Account.without_suspended
when 'pending'
accounts_with_users.merge User.pending
when 'disabled'
accounts_with_users.merge User.disabled
when 'silenced'
Account.silenced
when 'suspended'

View File

@ -13,6 +13,20 @@ module UserRoles
admin? || moderator?
end
def role=(value)
case value
when 'admin'
self.admin = true
self.moderator = false
when 'moderator'
self.admin = false
self.moderator = true
else
self.admin = false
self.moderator = false
end
end
def role
if admin?
'admin'

View File

@ -17,6 +17,8 @@
#
class Report < ApplicationRecord
include Paginable
belongs_to :account
belongs_to :target_account, class_name: 'Account'
belongs_to :action_taken_by_account, class_name: 'Account', optional: true
@ -26,6 +28,7 @@ class Report < ApplicationRecord
scope :unresolved, -> { where(action_taken: false) }
scope :resolved, -> { where(action_taken: true) }
scope :with_accounts, -> { includes([:account, :target_account, :action_taken_by_account, :assigned_account].each_with_object({}) { |k, h| h[k] = { user: [:invite_request, :invite] } }) }
validates :comment, length: { maximum: 1000 }

View File

@ -9,9 +9,11 @@ class ReportFilter
def results
scope = Report.unresolved
params.each do |key, value|
scope = scope.merge scope_for(key, value)
end
scope
end

View File

@ -87,6 +87,7 @@ class User < ApplicationRecord
scope :approved, -> { where(approved: true) }
scope :confirmed, -> { where.not(confirmed_at: nil) }
scope :enabled, -> { where(disabled: false) }
scope :disabled, -> { where(disabled: true) }
scope :inactive, -> { where(arel_table[:current_sign_in_at].lt(ACTIVE_DURATION.ago)) }
scope :active, -> { confirmed.where(arel_table[:current_sign_in_at].gteq(ACTIVE_DURATION.ago)).joins(:account).where(accounts: { suspended_at: nil }) }
scope :matches_email, ->(value) { where(arel_table[:email].matches("#{value}%")) }