diff options
author | ThibG <thib@sitedethib.com> | 2019-05-15 18:44:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-15 18:44:21 +0200 |
commit | c1cf8c1636e0a639cced585f0cb234547a64d417 (patch) | |
tree | 77b40e8bb0b1682bebaebebfa32d135ba406ac14 /app/models/account.rb | |
parent | 4bab7d7640a72ffeb04c104a93ad6d3d5700c712 (diff) | |
parent | 6badf2d252a980d496b894c7258a778c57639953 (diff) |
Merge pull request #1049 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/models/account.rb')
-rw-r--r-- | app/models/account.rb | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/app/models/account.rb b/app/models/account.rb index a82251d2e..70697db30 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -28,8 +28,6 @@ # header_updated_at :datetime # avatar_remote_url :string # subscription_expires_at :datetime -# silenced :boolean default(FALSE), not null -# suspended :boolean default(FALSE), not null # locked :boolean default(FALSE), not null # header_remote_url :string default(""), not null # last_webfingered_at :datetime @@ -45,6 +43,8 @@ # actor_type :string # discoverable :boolean # also_known_as :string is an Array +# silenced_at :datetime +# suspended_at :datetime # class Account < ApplicationRecord @@ -86,10 +86,10 @@ class Account < ApplicationRecord scope :local, -> { where(domain: nil) } scope :expiring, ->(time) { remote.where.not(subscription_expires_at: nil).where('subscription_expires_at < ?', time) } scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } - scope :silenced, -> { where(silenced: true) } - scope :suspended, -> { where(suspended: true) } - scope :without_suspended, -> { where(suspended: false) } - scope :without_silenced, -> { where(silenced: false) } + scope :silenced, -> { where.not(silenced_at: nil) } + scope :suspended, -> { where.not(suspended_at: nil) } + scope :without_suspended, -> { where(suspended_at: nil) } + scope :without_silenced, -> { where(silenced_at: nil) } scope :recent, -> { reorder(id: :desc) } scope :bots, -> { where(actor_type: %w(Application Service)) } scope :alphabetic, -> { order(domain: :asc, username: :asc) } @@ -169,25 +169,35 @@ class Account < ApplicationRecord ResolveAccountService.new.call(acct) end - def silence! - update!(silenced: true) + def silenced? + silenced_at.present? + end + + def silence!(date = nil) + date ||= Time.now.utc + update!(silenced_at: date) end def unsilence! - update!(silenced: false) + update!(silenced_at: nil) + end + + def suspended? + suspended_at.present? end - def suspend! + def suspend!(date = nil) + date ||= Time.now.utc transaction do user&.disable! if local? - update!(suspended: true) + update!(suspended_at: date) end end def unsuspend! transaction do user&.enable! if local? - update!(suspended: false) + update!(suspended_at: nil) end end @@ -401,7 +411,7 @@ class Account < ApplicationRecord ts_rank_cd(#{textsearch}, #{query}, 32) AS rank FROM accounts WHERE #{query} @@ #{textsearch} - AND accounts.suspended = false + AND accounts.suspended_at IS NULL AND accounts.moved_to_account_id IS NULL ORDER BY rank DESC LIMIT ? OFFSET ? @@ -429,7 +439,7 @@ class Account < ApplicationRecord LEFT OUTER JOIN follows AS f ON (accounts.id = f.account_id AND f.target_account_id = ?) OR (accounts.id = f.target_account_id AND f.account_id = ?) WHERE accounts.id IN (SELECT * FROM first_degree) AND #{query} @@ #{textsearch} - AND accounts.suspended = false + AND accounts.suspended_at IS NULL AND accounts.moved_to_account_id IS NULL GROUP BY accounts.id ORDER BY rank DESC @@ -445,7 +455,7 @@ class Account < ApplicationRecord FROM accounts LEFT OUTER JOIN follows AS f ON (accounts.id = f.account_id AND f.target_account_id = ?) OR (accounts.id = f.target_account_id AND f.account_id = ?) WHERE #{query} @@ #{textsearch} - AND accounts.suspended = false + AND accounts.suspended_at IS NULL AND accounts.moved_to_account_id IS NULL GROUP BY accounts.id ORDER BY rank DESC |