Browse Source

And add to group

Maarten van den Berg 7 years ago
parent
commit
26ddf7c510

+ 22 - 1
app/controllers/groups_controller.rb

@@ -1,7 +1,7 @@
1 1
 class GroupsController < ApplicationController
2 2
   include GroupsHelper
3 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 5
   before_action :require_membership!, only: [:show]
6 6
   before_action :require_leader!, only: [:edit, :update, :destroy]
7 7
 
@@ -96,6 +96,27 @@ class GroupsController < ApplicationController
96 96
     end
97 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 120
   private
100 121
     # Use callbacks to share common setup or constraints between actions.
101 122
     def set_group

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

@@ -0,0 +1,9 @@
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,6 +29,9 @@ Rails.application.routes.draw do
29 29
     get 'invite', to: 'members#invite'
30 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 35
     resources :members do
33 36
       post 'promote', to: 'members#promote', on: :member
34 37
       post 'demote', to: 'members#demote', on: :member