-
-
Notifications
You must be signed in to change notification settings - Fork 199
Expand file tree
/
Copy pathevents_controller.rb
More file actions
108 lines (83 loc) · 3.02 KB
/
events_controller.rb
File metadata and controls
108 lines (83 loc) · 3.02 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
100
101
102
103
104
105
106
107
108
class Admin::EventsController < Admin::ApplicationController
before_action :set_event, only: [:show]
before_action :find_event, only: %i[edit update]
def new
@event = Event.new
end
def create
@event = Event.new(event_params)
set_organisers(organiser_ids)
if @event.save
redirect_to [:admin, @event], notice: 'Event successfully created.'
else
flash[:notice] = 'Make sure you fill in all mandatory fields!'
render 'new'
end
end
def edit; end
def show
authorize @original_event
@address = AddressPresenter.new(@event.venue.address) if @event.venue.present?
@attending_students = InvitationPresenter.decorate_collection(@original_event.attending_students)
@attending_coaches = InvitationPresenter.decorate_collection(@original_event.attending_coaches)
render plain: @event.attendees_csv if request.format.csv?
end
def update
set_organisers(organiser_ids)
if @event.update(event_params)
redirect_to [:admin, @event], notice: 'You have just updated the event'
else
render 'edit', notice: 'Error'
end
end
def invite
@event = Event.find_by(slug: params[:event_id])
authorize @event
@event.chapters.each do |chapter|
InvitationManager.new.send_event_emails(@event, chapter)
end
redirect_to admin_event_path(@event), notice: 'Invitations will be emailed out soon.'
end
def attendees_emails
event = Event.find_by(slug: params[:event_id])
students = event.student_emails.join(', ')
coaches = event.coach_emails.join(', ')
@list = "STUDENTS\n\n" + students + "\n\nCOACHES\n\n" + coaches
return render plain: @list if request.format.text?
redirect_to admin_event_path(event)
end
private
def set_event
@original_event = Event.find_by!(slug: params[:id])
@event = EventPresenter.new(@original_event)
end
def event_params
params.require(:event).permit(
:virtual, :name, :slug, :date_and_time, :local_date, :local_time, :local_end_time, :description,
:info, :schedule, :venue_id, :external_url, :coach_spaces, :student_spaces, :email, :announce_only,
:tito_url, :invitable, :time_zone, :student_questionnaire, :confirmation_required, :surveys_required,
:audience, :coach_questionnaire, :show_faq, :display_coaches, :display_students,
bronze_sponsor_ids: [], silver_sponsor_ids: [], gold_sponsor_ids: [], sponsor_ids: [],
chapter_ids: []
)
end
def organiser_ids
params[:event][:organisers]
end
def grant_organiser_access(organiser_ids = [])
organiser_ids.each { |id| Member.find(id).add_role(:organiser, @event) }
end
def set_organisers(organiser_ids)
organiser_ids.reject!(&:empty?)
grant_organiser_access(organiser_ids)
revoke_organiser_access(organiser_ids)
end
def revoke_organiser_access(organiser_ids)
(@event.organisers.pluck(:id).map(&:to_s) - organiser_ids).each do |id|
Member.find(id).revoke(:organiser, @event)
end
end
def find_event
@event = Event.find_by(slug: params[:id])
end
end