diff --git a/app/controllers/roles_controller.rb b/app/controllers/roles_controller.rb index 2de185b..24850ba 100644 --- a/app/controllers/roles_controller.rb +++ b/app/controllers/roles_controller.rb @@ -23,6 +23,8 @@ class RolesController < ApplicationController before_filter :find_role, :only => [:show, :edit, :update, :destroy] accept_api_auth :index, :show + include RolesHelper + require_sudo_mode :create, :update, :destroy def index @@ -106,6 +108,10 @@ class RolesController < ApplicationController flash[:notice] = l(:notice_successful_update) redirect_to roles_path end + respond_to do |format| + format.html + format.csv { send_data(permissions_to_csv(@roles, @permissions), :type => 'text/csv; header=present', :filename => 'permissions_export.csv') } + end end private diff --git a/app/helpers/roles_helper.rb b/app/helpers/roles_helper.rb index 737c11d..69e52f9 100644 --- a/app/helpers/roles_helper.rb +++ b/app/helpers/roles_helper.rb @@ -18,4 +18,27 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. module RolesHelper + def permissions_to_csv(roles, permissions) + Redmine::Export::CSV.generate do |csv| + # csv header fields + headers = [l(:field_cvs_module), l(:label_permissions)] + roles.collect {|role| role.name} + csv << headers + # csv lines + permissions.each do |p| + names = [ + l_or_humanize(p.project_module.to_s, :prefix => 'project_module_'), + l_or_humanize(p.name, :prefix => 'permission_').to_s, + ] + fields = names + roles.collect do |role| + if role.setable_permissions.include?(p) + role.permissions.include?(p.name) ? 1 : 0 + else + "" + end + + end + csv << fields + end + end + end end diff --git a/app/views/roles/permissions.html.erb b/app/views/roles/permissions.html.erb index b403cff..dcc270b 100644 --- a/app/views/roles/permissions.html.erb +++ b/app/views/roles/permissions.html.erb @@ -54,6 +54,9 @@ +<% other_formats_links do |f| %> + <%= f.link_to 'CSV' %> +<% end %>

<%= check_all_links 'permissions_form' %>

<%= submit_tag l(:button_save) %>

<% end %>