diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 9affdf4c..2d8f818f 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -16,7 +16,19 @@ class UsersController < ApplicationController
@users.active.where.not(role: 'integration')
end
- @pagy, @users = pagy(@users.preload(account: :account_accesses).where(account: current_account).order(id: :desc))
+ @users = @users.preload(account: :account_accesses).where(account: current_account).order(id: :desc)
+
+ respond_to do |format|
+ format.html do
+ @pagy, @users = pagy(@users)
+ end
+
+ if current_ability.can?(:manage, current_account)
+ format.csv do
+ send_data Users.generate_csv(@users), filename: "users-#{Time.current.iso8601}.csv", type: 'text/csv'
+ end
+ end
+ end
end
def new; end
diff --git a/app/views/users/_bottom_links.html.erb b/app/views/users/_bottom_links.html.erb
index 8fbc73e1..7f8c234b 100644
--- a/app/views/users/_bottom_links.html.erb
+++ b/app/views/users/_bottom_links.html.erb
@@ -1,15 +1,27 @@
+ <% if (is_with_download = can?(:manage, :download_users) && can?(:manage, current_account)) %>
+ <%= button_to(t(:download), url_for(format: :csv), class: 'link text-sm', form: { class: 'flex' }, method: :get) %>
+ <% end %>
<% if %w[archived integration].include?(params[:status]) %>
+ <% if is_with_download %>
+ |
+ <% end %>
<%= link_to t('view_active'), settings_users_path, class: 'link text-sm' %>
<% else %>
<% archived_exists = current_account.users.archived.where.not(role: 'integration').exists? %>
- <% if current_account.users.active.exists?(role: 'integration') %>
+ <% if (integration_exists = current_account.users.active.exists?(role: 'integration')) %>
+ <% if is_with_download %>
+ |
+ <% end %>
<%= link_to t('view_embedding_users'), settings_integration_users_path, class: 'link text-sm' %>
<% if archived_exists %>
|
<% end %>
<% end %>
<% if archived_exists %>
+ <% if !integration_exists && is_with_download %>
+ |
+ <% end %>
<%= link_to t('view_archived'), settings_archived_users_path, class: 'link text-sm' %>
<% end %>
<% end %>
diff --git a/lib/users.rb b/lib/users.rb
new file mode 100644
index 00000000..49989a4f
--- /dev/null
+++ b/lib/users.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Users
+ module_function
+
+ def generate_csv(users)
+ headers = %w[email first_name last_name role current_sign_in_at last_sign_in_at updated_at created_at]
+
+ CSVSafe.generate do |csv|
+ csv << headers
+
+ users.each { |user| csv << user.values_at(*headers) }
+ end
+ end
+end