about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/assets/stylesheets/tables.scss32
-rw-r--r--app/controllers/admin/accounts_controller.rb25
-rw-r--r--app/views/admin/accounts/index.html.haml20
-rw-r--r--app/views/admin/accounts/show.html.haml34
-rw-r--r--config/routes.rb2
5 files changed, 109 insertions, 4 deletions
diff --git a/app/assets/stylesheets/tables.scss b/app/assets/stylesheets/tables.scss
index 89b35891d..b28b91191 100644
--- a/app/assets/stylesheets/tables.scss
+++ b/app/assets/stylesheets/tables.scss
@@ -3,6 +3,7 @@
   max-width: 100%;
   border-spacing: 0;
   border-collapse: collapse;
+  margin-bottom: 20px;
 
   th, td {
     padding: 8px;
@@ -18,8 +19,39 @@
     border-top: 0;
     font-weight: 500;
   }
+
+  & > tbody > tr > th {
+    font-weight: 500;
+  }
+
+  a {
+    color: #2b90d9;
+    text-decoration: underline;
+
+    &:hover {
+      text-decoration: none;
+    }
+  }
 }
 
 samp {
   font-family: 'Roboto Mono', monospace;
 }
+
+.filters {
+  list-style: none;
+  margin-bottom: 20px;
+
+  li {
+    display: inline-block;
+  }
+
+  a {
+    color: #2b90d9;
+    text-decoration: underline;
+
+    &:hover {
+      text-decoration: none;
+    }
+  }
+}
diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb
index 92ebffc87..79fb37eb9 100644
--- a/app/controllers/admin/accounts_controller.rb
+++ b/app/controllers/admin/accounts_controller.rb
@@ -2,14 +2,37 @@
 
 class Admin::AccountsController < ApplicationController
   before_action :require_admin!
+  before_action :set_account, except: :index
 
   layout 'public'
 
   def index
     @accounts = Account.order('domain ASC, username ASC').paginate(page: params[:page], per_page: 40)
+
+    @accounts = @accounts.local                             if params[:local].present?
+    @accounts = @accounts.remote                            if params[:remote].present?
+    @accounts = @accounts.where(domain: params[:by_domain]) if params[:by_domain].present?
+    @accounts = @accounts.where(silenced: true)             if params[:silenced].present?
+    @accounts = @accounts.reorder('id desc')                if params[:recent].present?
+  end
+
+  def show; end
+
+  def update
+    if @account.update(account_params)
+      redirect_to admin_accounts_path
+    else
+      render :show
+    end
   end
 
-  def show
+  private
+
+  def set_account
     @account = Account.find(params[:id])
   end
+
+  def account_params
+    params.require(:account).permit(:silenced)
+  end
 end
diff --git a/app/views/admin/accounts/index.html.haml b/app/views/admin/accounts/index.html.haml
index 32474c2a4..a074f0ad9 100644
--- a/app/views/admin/accounts/index.html.haml
+++ b/app/views/admin/accounts/index.html.haml
@@ -1,20 +1,36 @@
+%ul.filters
+  %li= link_to 'Local', admin_accounts_path(local: '1')
+  %li= link_to 'Remote', admin_accounts_path(remote: '1')
+  %li= link_to 'Silenced', admin_accounts_path(silenced: '1')
+  %li= link_to 'Most recent', admin_accounts_path(recent: '1')
+
 %table.table
   %thead
     %tr
       %th Username
       %th Domain
       %th Subscribed
+      %th Silenced
+      %th
   %tbody
     - @accounts.each do |account|
       %tr
         %td= account.username
-        %td= account.domain
-        %th
+        %td
+          - unless account.local?
+            = link_to account.domain, admin_accounts_path(by_domain: account.domain)
+        %td
           - if account.local?
             Local
           - elsif account.subscribed?
             %i.fa.fa-check
           - else
             %i.fa.fa-times
+        %td
+          - if account.silenced?
+            %i.fa.fa-check
+          - else
+            %i.fa.fa-times
+        %td= link_to 'Edit', admin_account_path(account.id)
 
 = will_paginate @accounts, pagination_options
diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml
index e69de29bb..02f7dcfe9 100644
--- a/app/views/admin/accounts/show.html.haml
+++ b/app/views/admin/accounts/show.html.haml
@@ -0,0 +1,34 @@
+%table.table
+  %tbody
+    %tr
+      %th Username
+      %td= @account.username
+    %tr
+      %th Domain
+      %td= @account.domain
+    %tr
+      %th Display name
+      %td= @account.display_name
+
+    - if @account.local?
+      %tr
+        %th E-mail
+        %td= @account.user.email
+      %tr
+        %th Current IP
+        %td= @account.user.current_sign_in_ip
+    - else
+      %tr
+        %th Profile URL
+        %td= link_to @account.url
+      %tr
+        %th Feed URL
+        %td= link_to @account.remote_url
+
+= simple_form_for @account, url: admin_account_path(@account.id) do |f|
+  = render 'shared/error_messages', object: @account
+
+  = f.input :silenced, as: :boolean, wrapper: :with_label
+
+  .actions
+    = f.button :button, t('generic.save_changes'), type: :submit
diff --git a/config/routes.rb b/config/routes.rb
index 35e5c269a..ac53bbed6 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -46,7 +46,7 @@ Rails.application.routes.draw do
 
   namespace :admin do
     resources :pubsubhubbub, only: [:index]
-    resources :accounts, only: [:index, :show]
+    resources :accounts, only: [:index, :show, :update]
   end
 
   namespace :api do