-
-
Notifications
You must be signed in to change notification settings - Fork 199
Expand file tree
/
Copy pathmeetings_controller.rb
More file actions
99 lines (77 loc) · 2.41 KB
/
meetings_controller.rb
File metadata and controls
99 lines (77 loc) · 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class Admin::MeetingsController < Admin::ApplicationController
before_action :set_meeting, except: %i[new create]
def new
@meeting = Meeting.new
end
def create
@meeting = Meeting.new(meeting_params)
set_organisers(organiser_ids)
set_chapters(chapter_ids)
if @meeting.save
redirect_to [:admin, @meeting], notice: t('admin.messages.meeting.created')
else
flash[:notice] = @meeting.errors.full_messages.join('<br/>')
render :new
end
end
def show
@invitations = @meeting.invitations.accepted.includes(:member).order(:created_at)
render plain: @meeting.attendees_csv if request.format.csv?
end
def edit; end
def update
set_organisers(organiser_ids)
set_chapters(chapter_ids)
if @meeting.update(meeting_params)
redirect_to [:admin, @meeting], notice: t('admin.messages.meeting.updated')
else
flash[:notice] = @meeting.errors.full_messages.join('<br/>')
render 'edit'
end
end
def attendees_emails
meeting = MeetingPresenter.new(@meeting)
return render plain: meeting.attendees_emails if request.format.text?
redirect_to admin_meeting_path(@meeting)
end
def invite
InvitationManager.new.send_meeting_emails(@meeting)
redirect_to admin_meeting_path(@meeting), notice: t('admin.messages.meeting.sending_invitations')
end
private
def set_meeting
@meeting = Meeting.find_by!(slug: slug)
end
def slug
params.permit(:id)[:id]
end
def meeting_params
params.require(:meeting).permit(
:name, :description, :slug, :date_and_time, :local_date, :local_time, :local_end_time,
:invitable, :spaces, :venue_id, :sponsor_id, :chapters
)
end
def organiser_ids
params[:meeting][:organisers]
end
def chapter_ids
params[:meeting][:chapters]
end
def grant_organiser_access(organiser_ids = [])
organiser_ids.each { |id| Member.find(id).add_role(:organiser, @meeting) }
end
def revoke_organiser_access(organiser_ids)
(@meeting.organisers.pluck(:id).map(&:to_s) - organiser_ids).each do |id|
Member.find(id).revoke(:organiser, @meeting)
end
end
def set_organisers(organiser_ids)
organiser_ids.reject!(&:empty?)
grant_organiser_access(organiser_ids)
revoke_organiser_access(organiser_ids)
end
def set_chapters(chapter_ids)
chapter_ids.reject!(&:empty?)
@meeting.chapters = chapter_ids.map { |id| Chapter.find(id) }
end
end