|
@@ -1,16 +1,16 @@
|
1
|
1
|
class MembersController < ApplicationController
|
2
|
2
|
include GroupsHelper
|
3
|
3
|
before_action :set_group
|
4
|
|
- before_action :set_member, only: [:show, :edit, :update, :destroy]
|
5
|
|
- before_action :require_leader!
|
|
4
|
+ before_action :set_member, only: [:show, :edit, :update, :destroy, :promote, :demote]
|
|
5
|
+ before_action :require_leader!, except: [ :index ]
|
6
|
6
|
|
7
|
7
|
# GET /members
|
8
|
8
|
# GET /members.json
|
9
|
9
|
def index
|
|
10
|
+ @admin = @group.is_leader?(current_person)
|
10
|
11
|
@members = @group.members
|
11
|
12
|
.joins(:person)
|
12
|
|
- .order(is_leader: :desc)
|
13
|
|
- .order('people.first_name ASC')
|
|
13
|
+ .order('members.is_leader DESC, people.first_name ASC')
|
14
|
14
|
end
|
15
|
15
|
|
16
|
16
|
# GET /members/1
|
|
@@ -24,6 +24,56 @@ class MembersController < ApplicationController
|
24
|
24
|
@possible_members = Person.where.not(id: @group.person_ids)
|
25
|
25
|
end
|
26
|
26
|
|
|
27
|
+ def invite
|
|
28
|
+ @person = Person.new
|
|
29
|
+ end
|
|
30
|
+
|
|
31
|
+ def promote
|
|
32
|
+ @member.update_attribute(:is_leader, true)
|
|
33
|
+ flash_message(:success, "#{@member.person.full_name} is now a group leader.")
|
|
34
|
+ redirect_to group_members_path(@group)
|
|
35
|
+ end
|
|
36
|
+
|
|
37
|
+ def demote
|
|
38
|
+ @member.update_attribute(:is_leader, false)
|
|
39
|
+ flash_message(:success, "#{@member.person.full_name} is no longer a group leader.")
|
|
40
|
+ redirect_to group_members_path(@group)
|
|
41
|
+ end
|
|
42
|
+
|
|
43
|
+ def process_invite
|
|
44
|
+ @person = Person.find_by(email: params[:person][:email])
|
|
45
|
+ if not @person
|
|
46
|
+ @person = Person.new(invite_params)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+ if not @person.save
|
|
50
|
+ respond_to do |format|
|
|
51
|
+ format.html { render 'invite' }
|
|
52
|
+ format.json { render json: @person.errors, status: :unprocessable_entity }
|
|
53
|
+ end
|
|
54
|
+ return
|
|
55
|
+ end
|
|
56
|
+ end
|
|
57
|
+
|
|
58
|
+ new_rec = @member.new_record?
|
|
59
|
+ @member = Member.new(person: @person, group: @group, is_leader: false)
|
|
60
|
+ @member.save!
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+ respond_to do |format|
|
|
64
|
+ format.html do
|
|
65
|
+ invited = "invited to Aardbei and " if new_rec else ""
|
|
66
|
+ flash_message(
|
|
67
|
+ :success,
|
|
68
|
+ "#{@person.full_name} #{invited}added to group."
|
|
69
|
+ )
|
|
70
|
+ redirect_to group_members_path(@group)
|
|
71
|
+ end
|
|
72
|
+
|
|
73
|
+ format.json { render :show, status: :created, location: @person }
|
|
74
|
+ end
|
|
75
|
+ end
|
|
76
|
+
|
27
|
77
|
# GET /members/1/edit
|
28
|
78
|
def edit
|
29
|
79
|
@possible_members = Person.where.not(id: @group.person_ids)
|
|
@@ -39,7 +89,7 @@ class MembersController < ApplicationController
|
39
|
89
|
if @member.save
|
40
|
90
|
format.html {
|
41
|
91
|
redirect_to group_member_url(@group, @member)
|
42
|
|
- flash_message(:info, 'Member was successfully created.')
|
|
92
|
+ flash_message(:info, "#{@member.full_name} was added successfully.")
|
43
|
93
|
}
|
44
|
94
|
format.json { render :show, status: :created, location: @member }
|
45
|
95
|
else
|
|
@@ -75,7 +125,7 @@ class MembersController < ApplicationController
|
75
|
125
|
respond_to do |format|
|
76
|
126
|
format.html {
|
77
|
127
|
redirect_to group_members_url(@group)
|
78
|
|
- flash_message(:info, 'Member was successfully destroyed.')
|
|
128
|
+ flash_message(:info, "#{@member.person.full_name} was successfully removed.")
|
79
|
129
|
}
|
80
|
130
|
format.json { head :no_content }
|
81
|
131
|
end
|
|
@@ -95,4 +145,11 @@ class MembersController < ApplicationController
|
95
|
145
|
def member_params
|
96
|
146
|
params.require(:member).permit(:person_id, :is_leader)
|
97
|
147
|
end
|
|
148
|
+
|
|
149
|
+ # Never trust parameters from the scary internet, only allow the white list
|
|
150
|
+ # through. Note: differs from the ones in PeopleController because
|
|
151
|
+ # creating admins is not allowed.
|
|
152
|
+ def invite_params
|
|
153
|
+ params.require(:person).permit(:first_name, :infix, :last_name, :email, :birth_date)
|
|
154
|
+ end
|
98
|
155
|
end
|