]> cat aescling's git repositories - mastodon.git/commitdiff
Add CSV export for lists and domain blocks (#9677)
authorEugen Rochko <eugen@zeonfederated.com>
Tue, 1 Jan 2019 12:44:04 +0000 (13:44 +0100)
committerGitHub <noreply@github.com>
Tue, 1 Jan 2019 12:44:04 +0000 (13:44 +0100)
Fix #6893
Fix #9268

app/controllers/settings/exports/blocked_domains_controller.rb [new file with mode: 0644]
app/controllers/settings/exports/lists_controller.rb [new file with mode: 0644]
app/models/export.rb
app/views/settings/exports/show.html.haml
config/routes.rb

diff --git a/app/controllers/settings/exports/blocked_domains_controller.rb b/app/controllers/settings/exports/blocked_domains_controller.rb
new file mode 100644 (file)
index 0000000..6676ce3
--- /dev/null
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Settings
+  module Exports
+    class BlockedDomainsController < ApplicationController
+      include ExportControllerConcern
+
+      def index
+        send_export_file
+      end
+
+      private
+
+      def export_data
+        @export.to_blocked_domains_csv
+      end
+    end
+  end
+end
diff --git a/app/controllers/settings/exports/lists_controller.rb b/app/controllers/settings/exports/lists_controller.rb
new file mode 100644 (file)
index 0000000..cf5a9de
--- /dev/null
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Settings
+  module Exports
+    class ListsController < ApplicationController
+      include ExportControllerConcern
+
+      def index
+        send_export_file
+      end
+
+      private
+
+      def export_data
+        @export.to_lists_csv
+      end
+    end
+  end
+end
index 0eeac0dc0740c338d0f8e2df54d260b4a908fd67..a2520e9c244f34cf0ef609be5b06a8d4e169672f 100644 (file)
@@ -9,15 +9,33 @@ class Export
   end
 
   def to_blocked_accounts_csv
-    to_csv account.blocking
+    to_csv account.blocking.select(:username, :domain)
   end
 
   def to_muted_accounts_csv
-    to_csv account.muting
+    to_csv account.muting.select(:username, :domain)
   end
 
   def to_following_accounts_csv
-    to_csv account.following
+    to_csv account.following.select(:username, :domain)
+  end
+
+  def to_lists_csv
+    CSV.generate do |csv|
+      account.owned_lists.select(:title).each do |list|
+        list.accounts.select(:username, :domain).each do |account|
+          csv << [list.title, acct(account)]
+        end
+      end
+    end
+  end
+
+  def to_blocked_domains_csv
+    CSV.generate do |csv|
+      account.domain_blocks.pluck(:domain).each do |domain|
+        csv << [domain]
+      end
+    end
   end
 
   def total_storage
@@ -32,6 +50,10 @@ class Export
     account.following_count
   end
 
+  def total_lists
+    account.owned_lists.count
+  end
+
   def total_followers
     account.followers_count
   end
@@ -44,13 +66,21 @@ class Export
     account.muting.count
   end
 
+  def total_domain_blocks
+    account.domain_blocks.count
+  end
+
   private
 
   def to_csv(accounts)
     CSV.generate do |csv|
       accounts.each do |account|
-        csv << [(account.local? ? account.local_username_and_domain : account.acct)]
+        csv << [acct(account)]
       end
     end
   end
+
+  def acct(account)
+    account.local? ? account.local_username_and_domain : account.acct
+  end
 end
index 6c030b1ab771db472513630b403427618deed461..b13cea976a1de6e1a4b20a6418259f033dd0053c 100644 (file)
         %th= t('exports.follows')
         %td= number_with_delimiter @export.total_follows
         %td= table_link_to 'download', t('exports.csv'), settings_exports_follows_path(format: :csv)
+      %tr
+        %th= t('exports.lists')
+        %td= number_with_delimiter @export.total_lists
+        %td= table_link_to 'download', t('exports.csv'), settings_exports_lists_path(format: :csv)
       %tr
         %th= t('accounts.followers', count: @export.total_followers)
         %td= number_with_delimiter @export.total_followers
         %th= t('exports.mutes')
         %td= number_with_delimiter @export.total_mutes
         %td= table_link_to 'download', t('exports.csv'), settings_exports_mutes_path(format: :csv)
+      %tr
+        %th= t('exports.domain_blocks')
+        %td= number_with_delimiter @export.total_domain_blocks
+        %td= table_link_to 'download', t('exports.csv'), settings_exports_domain_blocks_path(format: :csv)
 
 %p.muted-hint= t('exports.archive_takeout.hint_html')
 
index 1556aa57741c80e7bdf875a5783f92a2ac7ad6b3..6e4da48a08b9aa1fccc00371314593b59084984f 100644 (file)
@@ -94,6 +94,8 @@ Rails.application.routes.draw do
       resources :follows, only: :index, controller: :following_accounts
       resources :blocks, only: :index, controller: :blocked_accounts
       resources :mutes, only: :index, controller: :muted_accounts
+      resources :lists, only: :index, controller: :lists
+      resources :domain_blocks, only: :index, controller: :blocked_domains
     end
 
     resource :two_factor_authentication, only: [:show, :create, :destroy]