Browse Source

And add to group

Maarten van den Berg 7 years ago
parent
commit
26ddf7c510

+ 22 - 1
app/controllers/groups_controller.rb

1
 class GroupsController < ApplicationController
1
 class GroupsController < ApplicationController
2
   include GroupsHelper
2
   include GroupsHelper
3
   before_action :set_group, only: [:show, :edit, :update, :destroy]
3
   before_action :set_group, only: [:show, :edit, :update, :destroy]
4
-  before_action :require_admin!, only: [:index]
4
+  before_action :require_admin!, only: [:index, :process_mass_add_members, :mass_add_members]
5
   before_action :require_membership!, only: [:show]
5
   before_action :require_membership!, only: [:show]
6
   before_action :require_leader!, only: [:edit, :update, :destroy]
6
   before_action :require_leader!, only: [:edit, :update, :destroy]
7
 
7
 
96
     end
96
     end
97
   end
97
   end
98
 
98
 
99
+  def mass_add_members
100
+    @group = Group.find(params[:group_id])
101
+  end
102
+
103
+  def process_mass_add_members
104
+    @group = Group.find(params[:group_id])
105
+    require 'csv'
106
+    uploaded_io = params[:spreadsheet]
107
+    result = Person.from_csv(uploaded_io.read)
108
+
109
+    result.each do |p|
110
+      m = Member.find_by(person: p, group: @group)
111
+      if not m
112
+        m = Member.new(person: p, group: @group)
113
+        m.save!
114
+      end
115
+    end
116
+    flash_message(:success, "#{result.count} people added to group")
117
+    redirect_to group_members_path(@group)
118
+  end
119
+
99
   private
120
   private
100
     # Use callbacks to share common setup or constraints between actions.
121
     # Use callbacks to share common setup or constraints between actions.
101
     def set_group
122
     def set_group

+ 9 - 0
app/views/groups/mass_add_members.html.haml

1
+.container
2
+  .row
3
+    .col-md-12
4
+      %h1
5
+        Mass-adding members to
6
+        = @group.name
7
+      = form_tag("/groups/#{@group.id}/mass_add", method: 'post', multipart: true) do
8
+        = file_field_tag 'spreadsheet'
9
+        = submit_tag

+ 3 - 0
config/routes.rb

29
     get 'invite', to: 'members#invite'
29
     get 'invite', to: 'members#invite'
30
     post 'invite', to: 'members#process_invite'
30
     post 'invite', to: 'members#process_invite'
31
 
31
 
32
+    get 'mass_add', to: 'groups#mass_add_members'
33
+    post 'mass_add', to: 'groups#process_mass_add_members'
34
+
32
     resources :members do
35
     resources :members do
33
       post 'promote', to: 'members#promote', on: :member
36
       post 'promote', to: 'members#promote', on: :member
34
       post 'demote', to: 'members#demote', on: :member
37
       post 'demote', to: 'members#demote', on: :member