/
servers_controller.rb
203 lines (176 loc) · 5.47 KB
/
servers_controller.rb
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
class Bigbluebutton::ServersController < ApplicationController
include BigbluebuttonRails::InternalControllerMethods
respond_to :html
respond_to :json, :only => [:index, :show, :new, :create, :update, :destroy, :activity, :rooms]
before_filter :find_server, :except => [:index, :new, :create]
def index
@servers ||= BigbluebuttonServer.all
respond_with(@servers)
end
def show
respond_with(@server)
end
def new
@server ||= BigbluebuttonServer.new
respond_with(@server)
end
def edit
respond_with(@server)
end
def activity
error = false
begin
@server.fetch_meetings
@server.meetings.each do |meeting|
meeting.fetch_meeting_info
end
rescue BigBlueButton::BigBlueButtonException => e
error = true
message = e.to_s[0..200]
end
# update_list works only for html
if params[:update_list] && (params[:format].nil? || params[:format].to_s == "html")
render :partial => 'activity_list', :locals => { :server => @server }
return
end
respond_with @server.meetings do |format|
# we return/render the fetched meetings even in case of error
# but we set the error message in the response
if error
flash[:error] = message
format.html { render :activity }
format.json {
array = @server.meetings
array.insert(0, { :message => message })
render :json => array, :status => :error
}
else
format.html
format.json
end
end
end
def create
@server ||= BigbluebuttonServer.new(server_params)
respond_with @server do |format|
if @server.save
format.html {
message = t('bigbluebutton_rails.servers.notice.create.success')
redirect_to_using_params @server, :notice => message
}
format.json { render :json => @server, :status => :created }
else
format.html { redirect_to_params_or_render :new }
format.json { render :json => @server.errors.full_messages, :status => :unprocessable_entity }
end
end
end
def update
respond_with @server do |format|
if @server.update_attributes(server_params)
format.html {
message = t('bigbluebutton_rails.servers.notice.update.success')
redirect_to_using_params @server, :notice => message
}
format.json { render :json => true, :status => :ok }
else
format.html { redirect_to_params_or_render :edit }
format.json { render :json => @server.errors.full_messages, :status => :unprocessable_entity }
end
end
end
def destroy
# TODO: what if it fails?
@server.destroy
respond_with do |format|
format.html { redirect_to_using_params bigbluebutton_servers_url }
format.json { render :json => true, :status => :ok }
end
end
def recordings
@recordings ||= @server.recordings
respond_with(@recordings)
end
def rooms
@rooms ||= @server.rooms
respond_with(@rooms)
end
def publish_recordings
self.publish_unpublish(params[:recordings], true)
end
def unpublish_recordings
self.publish_unpublish(params[:recordings], false)
end
# Accepts the following parameters in URL:
# meetings:: A list of meetingIDs to be used as filter.
# meta_*:: To filter by metadata, where "*" can be anything.
#
# For example: fetch_recordings?meetings=meeting1,meeting2&meta_name=value
def fetch_recordings
error = false
begin
# accept meetingID and meta_* filters
filter = {}
filter.merge!({ :meetingID => params[:meetings] }) if params[:meetings]
params.each do |key, value|
filter.merge!({ key.to_sym => value }) if key.match(/^meta_/)
end
@server.fetch_recordings(filter)
message = t('bigbluebutton_rails.servers.notice.fetch_recordings.success')
rescue BigBlueButton::BigBlueButtonException => e
error = true
message = e.to_s[0..200]
end
respond_with do |format|
format.html {
flash[error ? :error : :notice] = message
redirect_to bigbluebutton_server_path(@server)
}
format.json {
if error
render :json => { :message => message }, :status => :error
else
render :json => true, :status => :ok
end
}
end
end
protected
def find_server
@server ||= BigbluebuttonServer.find_by_param(params[:id])
end
def publish_unpublish(ids, publish)
begin
@server.send_publish_recordings(ids, publish)
respond_with do |format|
format.html {
if publish
message = t('bigbluebutton_rails.servers.notice.publish_recordings.success')
else
message = t('bigbluebutton_rails.servers.notice.unpublish_recordings.success')
end
redirect_to_using_params recordings_bigbluebutton_server_path(@server), :notice => message
}
format.json { render :json => message }
end
rescue BigBlueButton::BigBlueButtonException => e
respond_with do |format|
format.html {
flash[:error] = e.to_s[0..200]
redirect_to_using_params recordings_bigbluebutton_server_path(@server)
}
format.json { render :json => e.to_s, :status => :error }
end
end
end
def server_params
unless params[:bigbluebutton_server].nil?
params[:bigbluebutton_server].permit(*server_allowed_params)
else
{}
end
end
def server_allowed_params
[ :name, :url, :secret, :param ]
end
end