about summary refs log tree commit diff
path: root/app/controllers/relationships_controller.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2019-03-16 11:23:22 +0100
committerGitHub <noreply@github.com>2019-03-16 11:23:22 +0100
commit1c113fd72df18999de1d6f09fa3790dd1f715506 (patch)
tree6a2683eb7d63cca3e568f6f2786f77e606320bb1 /app/controllers/relationships_controller.rb
parent8da5b8e6695e3bcca8eb4bca754faef83a6656eb (diff)
Add relationship manager UI (#10268)
Diffstat (limited to 'app/controllers/relationships_controller.rb')
-rw-r--r--app/controllers/relationships_controller.rb98
1 files changed, 98 insertions, 0 deletions
diff --git a/app/controllers/relationships_controller.rb b/app/controllers/relationships_controller.rb
new file mode 100644
index 000000000..e6dd65e44
--- /dev/null
+++ b/app/controllers/relationships_controller.rb
@@ -0,0 +1,98 @@
+# frozen_string_literal: true
+
+class RelationshipsController < ApplicationController
+  layout 'admin'
+
+  before_action :authenticate_user!
+  before_action :set_accounts, only: :show
+  before_action :set_body_classes
+
+  helper_method :following_relationship?, :followed_by_relationship?, :mutual_relationship?
+
+  def show
+    @form = Form::AccountBatch.new
+  end
+
+  def update
+    @form = Form::AccountBatch.new(form_account_batch_params.merge(current_account: current_account, action: action_from_button))
+    @form.save
+  rescue ActionController::ParameterMissing
+    # Do nothing
+  ensure
+    redirect_to relationships_path(current_params)
+  end
+
+  private
+
+  def set_accounts
+    @accounts = relationships_scope.page(params[:page]).per(40)
+  end
+
+  def relationships_scope
+    scope = begin
+      if following_relationship?
+        current_account.following.includes(:account_stat)
+      else
+        current_account.followers.includes(:account_stat)
+      end
+    end
+
+    scope.merge!(Follow.recent)
+    scope.merge!(mutual_relationship_scope) if mutual_relationship?
+    scope.merge!(abandoned_account_scope)   if params[:status] == 'abandoned'
+    scope.merge!(active_account_scope)      if params[:status] == 'active'
+    scope.merge!(by_domain_scope)           if params[:by_domain].present?
+
+    scope
+  end
+
+  def mutual_relationship_scope
+    Account.where(id: current_account.following)
+  end
+
+  def abandoned_account_scope
+    Account.where.not(moved_to_account_id: nil)
+  end
+
+  def active_account_scope
+    Account.where(moved_to_account_id: nil)
+  end
+
+  def by_domain_scope
+    Account.where(domain: params[:by_domain])
+  end
+
+  def form_account_batch_params
+    params.require(:form_account_batch).permit(:action, account_ids: [])
+  end
+
+  def following_relationship?
+    params[:relationship].blank? || params[:relationship] == 'following'
+  end
+
+  def mutual_relationship?
+    params[:relationship] == 'mutual'
+  end
+
+  def followed_by_relationship?
+    params[:relationship] == 'followed_by'
+  end
+
+  def current_params
+    params.slice(:page, :status, :relationship, :by_domain).permit(:page, :status, :relationship, :by_domain)
+  end
+
+  def action_from_button
+    if params[:unfollow]
+      'unfollow'
+    elsif params[:remove_from_followers]
+      'remove_from_followers'
+    elsif params[:block_domains]
+      'block_domains'
+    end
+  end
+
+  def set_body_classes
+    @body_classes = 'admin'
+  end
+end