@@ -33,6 +33,6 @@ class Admin::AccountsController < ApplicationController | |||||
end | end | ||||
def account_params | def account_params | ||||
params.require(:account).permit(:silenced) | |||||
params.require(:account).permit(:silenced, :suspended) | |||||
end | end | ||||
end | end |
@@ -104,22 +104,20 @@ class Status < ApplicationRecord | |||||
def as_public_timeline(account = nil) | def as_public_timeline(account = nil) | ||||
query = joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id') | query = joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id') | ||||
.where(visibility: :public) | .where(visibility: :public) | ||||
.where('accounts.silenced = FALSE') | |||||
.where('(statuses.in_reply_to_id IS NULL OR statuses.in_reply_to_account_id = statuses.account_id)') | .where('(statuses.in_reply_to_id IS NULL OR statuses.in_reply_to_account_id = statuses.account_id)') | ||||
.where('statuses.reblog_of_id IS NULL') | .where('statuses.reblog_of_id IS NULL') | ||||
query = filter_timeline(query, account) unless account.nil? | |||||
query | |||||
account.nil? ? filter_timeline_default(query) : filter_timeline(query, account) | |||||
end | end | ||||
def as_tag_timeline(tag, account = nil) | def as_tag_timeline(tag, account = nil) | ||||
query = tag.statuses | query = tag.statuses | ||||
.joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id') | .joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id') | ||||
.where(visibility: :public) | .where(visibility: :public) | ||||
.where('accounts.silenced = FALSE') | |||||
.where('(statuses.in_reply_to_id IS NULL OR statuses.in_reply_to_account_id = statuses.account_id)') | .where('(statuses.in_reply_to_id IS NULL OR statuses.in_reply_to_account_id = statuses.account_id)') | ||||
.where('statuses.reblog_of_id IS NULL') | .where('statuses.reblog_of_id IS NULL') | ||||
query = filter_timeline(query, account) unless account.nil? | |||||
query | |||||
account.nil? ? filter_timeline_default(query) : filter_timeline(query, account) | |||||
end | end | ||||
def favourites_map(status_ids, account_id) | def favourites_map(status_ids, account_id) | ||||
@@ -150,8 +148,13 @@ class Status < ApplicationRecord | |||||
def filter_timeline(query, account) | def filter_timeline(query, account) | ||||
blocked = Block.where(account: account).pluck(:target_account_id) | blocked = Block.where(account: account).pluck(:target_account_id) | ||||
return query if blocked.empty? | |||||
query.where('statuses.account_id NOT IN (?)', blocked) | |||||
query = query.where('statuses.account_id NOT IN (?)', blocked) unless blocked.empty? | |||||
query = query.where('accounts.silenced = TRUE') if account.silenced? | |||||
query | |||||
end | |||||
def filter_timeline_default(query) | |||||
query.where('accounts.silenced = FALSE') | |||||
end | end | ||||
end | end | ||||
@@ -93,6 +93,8 @@ class ProcessFeedService < BaseService | |||||
account = @account | account = @account | ||||
end | end | ||||
return if account.suspended? | |||||
status = Status.create!( | status = Status.create!( | ||||
uri: id(entry), | uri: id(entry), | ||||
url: url(entry), | url: url(entry), | ||||
@@ -23,6 +23,8 @@ class ProcessInteractionService < BaseService | |||||
account = follow_remote_account_service.call("#{username}@#{domain}") | account = follow_remote_account_service.call("#{username}@#{domain}") | ||||
end | end | ||||
return if account.suspended? | |||||
if salmon.verify(envelope, account.keypair) | if salmon.verify(envelope, account.keypair) | ||||
update_remote_profile_service.call(xml.at_xpath('/xmlns:entry', xmlns: TagManager::XMLNS), account, true) | update_remote_profile_service.call(xml.at_xpath('/xmlns:entry', xmlns: TagManager::XMLNS), account, true) | ||||
@@ -29,6 +29,7 @@ | |||||
= render 'shared/error_messages', object: @account | = render 'shared/error_messages', object: @account | ||||
= f.input :silenced, as: :boolean, wrapper: :with_label | = f.input :silenced, as: :boolean, wrapper: :with_label | ||||
= f.input :suspended, as: :boolean, wrapper: :with_label | |||||
.actions | .actions | ||||
= f.button :button, t('generic.save_changes'), type: :submit | = f.button :button, t('generic.save_changes'), type: :submit |
@@ -0,0 +1,5 @@ | |||||
class AddSuspendedToAccounts < ActiveRecord::Migration[5.0] | |||||
def change | |||||
add_column :accounts, :suspended, :boolean, null: false, default: false | |||||
end | |||||
end |
@@ -10,7 +10,7 @@ | |||||
# | # | ||||
# It's strongly recommended that you check this file into your version control system. | # It's strongly recommended that you check this file into your version control system. | ||||
ActiveRecord::Schema.define(version: 20161203164520) do | |||||
ActiveRecord::Schema.define(version: 20161205214545) do | |||||
# These are extensions that must be enabled in order to support this database | # These are extensions that must be enabled in order to support this database | ||||
enable_extension "plpgsql" | enable_extension "plpgsql" | ||||
@@ -41,6 +41,7 @@ ActiveRecord::Schema.define(version: 20161203164520) do | |||||
t.string "avatar_remote_url" | t.string "avatar_remote_url" | ||||
t.datetime "subscription_expires_at" | t.datetime "subscription_expires_at" | ||||
t.boolean "silenced", default: false, null: false | t.boolean "silenced", default: false, null: false | ||||
t.boolean "suspended", default: false, null: false | |||||
t.index ["username", "domain"], name: "index_accounts_on_username_and_domain", unique: true, using: :btree | t.index ["username", "domain"], name: "index_accounts_on_username_and_domain", unique: true, using: :btree | ||||
end | end | ||||