bigbluebutton_rails 1.4.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.ruby-version +1 -1
- data/.travis.yml +10 -1
- data/CHANGELOG.md +259 -0
- data/Gemfile +14 -19
- data/Gemfile.lock +194 -188
- data/README.md +416 -0
- data/Rakefile +12 -12
- data/TODO.md +13 -0
- data/app/controllers/bigbluebutton/playback_types_controller.rb +44 -0
- data/app/controllers/bigbluebutton/recordings_controller.rb +17 -10
- data/app/controllers/bigbluebutton/rooms_controller.rb +65 -36
- data/app/controllers/bigbluebutton/servers_controller.rb +12 -8
- data/app/models/bigbluebutton_metadata.rb +1 -1
- data/app/models/bigbluebutton_playback_format.rb +22 -1
- data/app/models/bigbluebutton_playback_type.rb +29 -0
- data/app/models/bigbluebutton_recording.rb +38 -19
- data/app/models/bigbluebutton_room.rb +150 -73
- data/app/models/bigbluebutton_room_options.rb +10 -7
- data/app/models/bigbluebutton_server.rb +69 -13
- data/app/models/bigbluebutton_server_config.rb +49 -0
- data/app/views/bigbluebutton/recordings/_form.html.erb +4 -0
- data/app/views/bigbluebutton/recordings/_recordings.html.erb +10 -3
- data/app/views/bigbluebutton/rooms/_form.html.erb +18 -6
- data/app/views/bigbluebutton/rooms/_rooms.html.erb +6 -3
- data/app/views/bigbluebutton/rooms/invite.html.erb +5 -5
- data/app/views/bigbluebutton/rooms/show.html.erb +18 -6
- data/app/views/bigbluebutton/servers/_form.html.erb +1 -1
- data/app/views/bigbluebutton/servers/show.html.erb +5 -0
- data/app/workers/bigbluebutton_finish_meetings.rb +11 -0
- data/app/workers/bigbluebutton_update_recordings.rb +11 -0
- data/app/workers/bigbluebutton_update_server_configs.rb +18 -0
- data/bigbluebutton_rails.gemspec +8 -7
- data/config/locales/en.yml +52 -7
- data/config/locales/pt-br.yml +162 -0
- data/config/resque/resque.rake +27 -0
- data/config/resque/workers_schedule.yml +17 -0
- data/lib/bigbluebutton_rails.rb +30 -2
- data/lib/bigbluebutton_rails/background_tasks.rb +31 -0
- data/lib/bigbluebutton_rails/controller_methods.rb +12 -8
- data/lib/bigbluebutton_rails/dial_number.rb +48 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +9 -2
- data/lib/bigbluebutton_rails/utils.rb +9 -2
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/generators/bigbluebutton_rails/install_generator.rb +0 -8
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +28 -6
- data/lib/generators/bigbluebutton_rails/templates/migration_2_0_0.rb +56 -0
- data/lib/tasks/bigbluebutton_rails/meetings.rake +1 -13
- data/lib/tasks/bigbluebutton_rails/recordings.rake +1 -12
- data/lib/tasks/bigbluebutton_rails/server_configs.rake +10 -0
- data/spec/bigbluebutton_rails_spec.rb +0 -13
- data/spec/controllers/bigbluebutton/playback_types_controller_spec.rb +76 -0
- data/spec/controllers/bigbluebutton/recordings_controller_spec.rb +109 -37
- data/spec/controllers/bigbluebutton/rooms_controller_exception_handling_spec.rb +1 -0
- data/spec/controllers/bigbluebutton/rooms_controller_json_responses_spec.rb +27 -3
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +338 -77
- data/spec/controllers/bigbluebutton/servers_controller_json_responses_spec.rb +8 -0
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +182 -47
- data/spec/factories/bigbluebutton_meeting.rb +2 -2
- data/spec/factories/bigbluebutton_playback_format.rb +2 -2
- data/spec/factories/bigbluebutton_playback_type.rb +7 -0
- data/spec/factories/bigbluebutton_recording.rb +8 -0
- data/spec/factories/bigbluebutton_room.rb +10 -3
- data/spec/factories/bigbluebutton_server.rb +6 -1
- data/spec/factories/bigbluebutton_server_config.rb +6 -0
- data/spec/generators/install_generator_spec.rb +0 -16
- data/spec/lib/bigbluebutton_rails/background_tasks_spec.rb +61 -0
- data/spec/lib/bigbluebutton_rails/dial_number_spec.rb +78 -0
- data/spec/lib/bigbluebutton_rails/utils_spec.rb +56 -0
- data/spec/lib/tasks/meetings_rake_spec.rb +14 -1
- data/spec/lib/tasks/recordings_rake_spec.rb +14 -1
- data/spec/models/bigbluebutton_meeting_db_spec.rb +3 -3
- data/spec/models/bigbluebutton_meeting_spec.rb +4 -4
- data/spec/models/bigbluebutton_playback_format_db_spec.rb +0 -1
- data/spec/models/bigbluebutton_playback_format_spec.rb +75 -4
- data/spec/models/bigbluebutton_playback_type_db_spec.rb +14 -0
- data/spec/models/bigbluebutton_playback_type_spec.rb +76 -0
- data/spec/models/bigbluebutton_recording_db_spec.rb +3 -1
- data/spec/models/bigbluebutton_recording_spec.rb +234 -58
- data/spec/models/bigbluebutton_room_db_spec.rb +8 -6
- data/spec/models/bigbluebutton_room_options_db_spec.rb +1 -0
- data/spec/models/bigbluebutton_room_options_spec.rb +137 -38
- data/spec/models/bigbluebutton_room_spec.rb +540 -153
- data/spec/models/bigbluebutton_server_config_spec.rb +115 -0
- data/spec/models/bigbluebutton_server_spec.rb +180 -23
- data/spec/rails_app/app/controllers/my_playback_types_controller.rb +7 -0
- data/spec/rails_app/app/views/frontpage/show.html.erb +1 -0
- data/spec/rails_app/app/views/my_playback_types/index.html.erb +33 -0
- data/spec/rails_app/config/application.rb +0 -3
- data/spec/rails_app/config/database.yml.travis +10 -0
- data/spec/rails_app/config/environments/development.rb +1 -6
- data/spec/rails_app/config/environments/production.rb +2 -0
- data/spec/rails_app/config/environments/test.rb +2 -0
- data/spec/rails_app/config/routes.rb +5 -2
- data/spec/rails_app/db/seeds.rb +1 -1
- data/spec/rails_app/features/config.yml.example +3 -4
- data/spec/rails_app/features/join_rooms.feature +14 -14
- data/spec/rails_app/features/step_definitions/activity_monitor_servers_step.rb +2 -2
- data/spec/rails_app/features/step_definitions/create_rooms_steps.rb +4 -4
- data/spec/rails_app/features/step_definitions/destroy_rooms_steps.rb +2 -2
- data/spec/rails_app/features/step_definitions/join_rooms_steps.rb +10 -10
- data/spec/rails_app/features/step_definitions/web_steps.rb +2 -2
- data/spec/rails_app/features/support/configurations.rb +1 -1
- data/spec/rails_app/features/support/templates.rb +12 -12
- data/spec/rails_app/lib/tasks/db/populate.rake +19 -6
- data/spec/routing/bigbluebutton/custom_controllers_routing_spec.rb +1 -1
- data/spec/routing/bigbluebutton/recordings_only_routing_spec.rb +2 -2
- data/spec/routing/bigbluebutton/recordings_routing_spec.rb +2 -2
- data/spec/routing/bigbluebutton/rooms_only_routing_spec.rb +1 -1
- data/spec/routing/bigbluebutton/rooms_routing_spec.rb +15 -1
- data/spec/routing/bigbluebutton/servers_only_routing_spec.rb +1 -1
- data/spec/routing/bigbluebutton/servers_routing_spec.rb +1 -1
- data/spec/spec_helper.rb +23 -31
- data/spec/support/matchers/delegate_matcher.rb +8 -1
- data/spec/support/matchers/shoulda/respond_with_json_matcher.rb +2 -2
- data/spec/support/mocked_server.rb +2 -0
- data/spec/support/shared_contexts/rake.rb +23 -0
- data/spec/workers/bigbluebutton_finish_meetings_spec.rb +14 -0
- data/spec/workers/bigbluebutton_update_recordings_spec.rb +14 -0
- data/spec/workers/bigbluebutton_update_server_configs_spec.rb +47 -0
- metadata +70 -59
- data/CHANGELOG.rdoc +0 -111
- data/README.rdoc +0 -319
- data/TODO.rdoc +0 -16
- data/config/schedule.rb +0 -7
data/TODO.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
TODO:
|
|
2
|
+
* Pre-upload of slides
|
|
3
|
+
* Options 'redirectClient' and 'clientURL' on 'create'
|
|
4
|
+
* Option 'avatarURL' on 'join'
|
|
5
|
+
* 'getDefaultConfigXML' and 'setConfigXML'. They are already used when a
|
|
6
|
+
user joins a meeting, to set the custom options configured in the target
|
|
7
|
+
room. But these API methods cannot be called individually yet.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
See:
|
|
11
|
+
* http://docs.bigbluebutton.org/dev/api.html
|
|
12
|
+
* http://groups.google.com/group/bigbluebutton-dev/browse_thread/thread/c214
|
|
13
|
+
cbe9bdb2268a?pli=1
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class Bigbluebutton::PlaybackTypesController < ApplicationController
|
|
2
|
+
include BigbluebuttonRails::InternalControllerMethods
|
|
3
|
+
|
|
4
|
+
respond_to :html
|
|
5
|
+
respond_to :json
|
|
6
|
+
before_filter :find_playback_type, only: [:update]
|
|
7
|
+
|
|
8
|
+
def update
|
|
9
|
+
respond_with @playback_type do |format|
|
|
10
|
+
if @playback_type.update_attributes(playback_type_params)
|
|
11
|
+
format.html {
|
|
12
|
+
message = t('bigbluebutton_rails.playback_types.notice.update.success')
|
|
13
|
+
redirect_to_using_params request.referer, :notice => message
|
|
14
|
+
}
|
|
15
|
+
format.json { render :json => true, :status => :ok }
|
|
16
|
+
else
|
|
17
|
+
format.html {
|
|
18
|
+
flash[:error] = @playback_type.errors.full_messages.join(", ")
|
|
19
|
+
redirect_to_using_params request.referer
|
|
20
|
+
}
|
|
21
|
+
format.json { render :json => @playback_type.errors.full_messages, :status => :unprocessable_entity }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
protected
|
|
27
|
+
|
|
28
|
+
def find_playback_type
|
|
29
|
+
@playback_type ||= BigbluebuttonPlaybackType.find(params[:id])
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def playback_type_params
|
|
33
|
+
unless params[:bigbluebutton_playback_type].nil?
|
|
34
|
+
params[:bigbluebutton_playback_type].permit(*playback_type_allowed_params)
|
|
35
|
+
else
|
|
36
|
+
{}
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def playback_type_allowed_params
|
|
41
|
+
[ :visible, :default ]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -5,9 +5,11 @@ class Bigbluebutton::RecordingsController < ApplicationController
|
|
|
5
5
|
respond_to :json, :only => [:index, :show, :update, :destroy, :publish, :unpublish]
|
|
6
6
|
before_filter :find_recording, :except => [:index]
|
|
7
7
|
before_filter :check_for_server, :only => [:publish, :unpublish]
|
|
8
|
+
before_filter :find_playback, :only => [:play]
|
|
8
9
|
|
|
9
10
|
def index
|
|
10
|
-
|
|
11
|
+
@recordings ||= BigbluebuttonRecording.all
|
|
12
|
+
respond_with(@recordings)
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
def show
|
|
@@ -69,15 +71,10 @@ class Bigbluebutton::RecordingsController < ApplicationController
|
|
|
69
71
|
end
|
|
70
72
|
|
|
71
73
|
def play
|
|
72
|
-
if params[:type]
|
|
73
|
-
playback = @recording.playback_formats.where(:format_type => params[:type]).first
|
|
74
|
-
else
|
|
75
|
-
playback = @recording.playback_formats.first
|
|
76
|
-
end
|
|
77
74
|
respond_with do |format|
|
|
78
75
|
format.html {
|
|
79
|
-
if playback
|
|
80
|
-
redirect_to playback.url
|
|
76
|
+
if @playback
|
|
77
|
+
redirect_to @playback.url
|
|
81
78
|
else
|
|
82
79
|
flash[:error] = t('bigbluebutton_rails.recordings.errors.play.no_format')
|
|
83
80
|
redirect_to_using_params bigbluebutton_recording_url(@recording)
|
|
@@ -97,7 +94,7 @@ class Bigbluebutton::RecordingsController < ApplicationController
|
|
|
97
94
|
protected
|
|
98
95
|
|
|
99
96
|
def find_recording
|
|
100
|
-
@recording
|
|
97
|
+
@recording ||= BigbluebuttonRecording.find_by_recordid(params[:id])
|
|
101
98
|
end
|
|
102
99
|
|
|
103
100
|
def check_for_server
|
|
@@ -146,7 +143,7 @@ class Bigbluebutton::RecordingsController < ApplicationController
|
|
|
146
143
|
unless params[:bigbluebutton_recording].nil?
|
|
147
144
|
params[:bigbluebutton_recording].permit(*recording_allowed_params)
|
|
148
145
|
else
|
|
149
|
-
|
|
146
|
+
{}
|
|
150
147
|
end
|
|
151
148
|
end
|
|
152
149
|
|
|
@@ -154,4 +151,14 @@ class Bigbluebutton::RecordingsController < ApplicationController
|
|
|
154
151
|
[ :recordid, :meetingid, :name, :published, :start_time, :end_time, :available, :description ]
|
|
155
152
|
end
|
|
156
153
|
|
|
154
|
+
protected
|
|
155
|
+
|
|
156
|
+
def find_playback
|
|
157
|
+
if params[:type]
|
|
158
|
+
@playback = @recording.playback_formats.where(:playback_type_id => BigbluebuttonPlaybackType.find_by_identifier(params[:type])).first
|
|
159
|
+
else
|
|
160
|
+
@playback = @recording.default_playback_format || @recording.playback_formats.first
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
157
164
|
end
|
|
@@ -18,7 +18,8 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
18
18
|
respond_to :json, :only => [:running, :show, :new, :index, :create, :update]
|
|
19
19
|
|
|
20
20
|
def index
|
|
21
|
-
|
|
21
|
+
@rooms ||= BigbluebuttonRoom.all
|
|
22
|
+
respond_with(@rooms)
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
def show
|
|
@@ -26,7 +27,8 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def new
|
|
29
|
-
|
|
30
|
+
@room ||= BigbluebuttonRoom.new
|
|
31
|
+
respond_with(@room)
|
|
30
32
|
end
|
|
31
33
|
|
|
32
34
|
def edit
|
|
@@ -34,7 +36,7 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
def create
|
|
37
|
-
@room
|
|
39
|
+
@room ||= BigbluebuttonRoom.new(room_params)
|
|
38
40
|
|
|
39
41
|
if params[:bigbluebutton_room] and
|
|
40
42
|
(not params[:bigbluebutton_room].has_key?(:meetingid) or
|
|
@@ -214,13 +216,34 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
214
216
|
end
|
|
215
217
|
|
|
216
218
|
def recordings
|
|
217
|
-
|
|
219
|
+
@recordings ||= @room.recordings
|
|
220
|
+
respond_with(@recordings)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def generate_dial_number
|
|
224
|
+
pattern = params[:pattern].blank? ? nil : params[:pattern]
|
|
225
|
+
if @room.generate_dial_number!(pattern)
|
|
226
|
+
message = t('bigbluebutton_rails.rooms.notice.generate_dial_number.success')
|
|
227
|
+
respond_with do |format|
|
|
228
|
+
format.html { redirect_to_using_params :back, notice: message }
|
|
229
|
+
format.json { render json: true, status: :ok }
|
|
230
|
+
end
|
|
231
|
+
else
|
|
232
|
+
message = t('bigbluebutton_rails.rooms.errors.generate_dial_number.not_unique')
|
|
233
|
+
respond_with do |format|
|
|
234
|
+
format.html {
|
|
235
|
+
flash[:error] = message
|
|
236
|
+
redirect_to_using_params :back
|
|
237
|
+
}
|
|
238
|
+
format.json { render json: { message: message }, status: :error }
|
|
239
|
+
end
|
|
240
|
+
end
|
|
218
241
|
end
|
|
219
242
|
|
|
220
243
|
protected
|
|
221
244
|
|
|
222
245
|
def find_room
|
|
223
|
-
@room
|
|
246
|
+
@room ||= BigbluebuttonRoom.find_by_param(params[:id])
|
|
224
247
|
end
|
|
225
248
|
|
|
226
249
|
def set_request_headers
|
|
@@ -230,7 +253,7 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
230
253
|
end
|
|
231
254
|
|
|
232
255
|
def join_check_room
|
|
233
|
-
@room
|
|
256
|
+
@room ||= BigbluebuttonRoom.find_by_param(params[:id]) unless params[:id].blank?
|
|
234
257
|
if @room.nil?
|
|
235
258
|
message = t('bigbluebutton_rails.rooms.errors.join.wrong_params')
|
|
236
259
|
redirect_to :back, :notice => message
|
|
@@ -250,12 +273,12 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
250
273
|
@user_id = bigbluebutton_user.id
|
|
251
274
|
end
|
|
252
275
|
|
|
253
|
-
# the role: nil means access denied, :
|
|
254
|
-
#
|
|
276
|
+
# the role: nil means access denied, :key means check the room
|
|
277
|
+
# key, otherwise just use it
|
|
255
278
|
@user_role = bigbluebutton_role(@room)
|
|
256
279
|
if @user_role.nil?
|
|
257
280
|
raise BigbluebuttonRails::RoomAccessDenied.new
|
|
258
|
-
elsif @user_role == :
|
|
281
|
+
elsif @user_role == :key
|
|
259
282
|
@user_role = @room.user_role(params[:user])
|
|
260
283
|
end
|
|
261
284
|
|
|
@@ -268,37 +291,34 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
268
291
|
# Aborts and redirects to an error if the user can't create a meeting in
|
|
269
292
|
# the room and it needs to be created.
|
|
270
293
|
def join_check_can_create
|
|
271
|
-
|
|
272
|
-
unless @room
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
redirect_to_on_join_error
|
|
276
|
-
end
|
|
294
|
+
unless @room.fetch_is_running?
|
|
295
|
+
unless bigbluebutton_can_create?(@room, @user_role)
|
|
296
|
+
flash[:error] = t('bigbluebutton_rails.rooms.errors.join.cannot_create')
|
|
297
|
+
redirect_to_on_join_error
|
|
277
298
|
end
|
|
278
|
-
rescue BigBlueButton::BigBlueButtonException => e
|
|
279
|
-
flash[:error] = e.to_s[0..200]
|
|
280
|
-
redirect_to_on_join_error
|
|
281
299
|
end
|
|
300
|
+
rescue BigBlueButton::BigBlueButtonException => e
|
|
301
|
+
flash[:error] = e.to_s[0..200]
|
|
302
|
+
redirect_to_on_join_error
|
|
282
303
|
end
|
|
283
304
|
|
|
284
305
|
# If the user called the join from a mobile device, he will be redirected to
|
|
285
306
|
# an intermediary page with information about the mobile client. A few flags set
|
|
286
307
|
# in the params can override this behavior and skip this intermediary page.
|
|
287
308
|
def join_check_redirect_to_mobile
|
|
288
|
-
if
|
|
289
|
-
|
|
290
|
-
|
|
309
|
+
return if !BigbluebuttonRails.use_mobile_client?(browser) ||
|
|
310
|
+
BigbluebuttonRails.value_to_boolean(params[:auto_join]) ||
|
|
311
|
+
BigbluebuttonRails.value_to_boolean(params[:desktop])
|
|
291
312
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
redirect_to join_mobile_bigbluebutton_room_path(@room, filtered_params)
|
|
313
|
+
# since we're redirecting to an intermediary page, we set in the params the params
|
|
314
|
+
# we received, including the referer, so we can go back to the previous page if needed
|
|
315
|
+
filtered_params = select_params_for_join_mobile(params.clone)
|
|
316
|
+
begin
|
|
317
|
+
filtered_params[:redir_url] = Addressable::URI.parse(request.env["HTTP_REFERER"]).path
|
|
318
|
+
rescue
|
|
301
319
|
end
|
|
320
|
+
|
|
321
|
+
redirect_to join_mobile_bigbluebutton_room_path(@room, filtered_params)
|
|
302
322
|
end
|
|
303
323
|
|
|
304
324
|
# Selects the params from `params` that should be passed in a redirect to `join_mobile` and
|
|
@@ -319,7 +339,9 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
319
339
|
unless @room.fetch_is_running?
|
|
320
340
|
if bigbluebutton_can_create?(@room, role)
|
|
321
341
|
user_opts = bigbluebutton_create_options(@room)
|
|
322
|
-
@room.create_meeting(bigbluebutton_user, request, user_opts)
|
|
342
|
+
if @room.create_meeting(bigbluebutton_user, request, user_opts)
|
|
343
|
+
logger.info "Meeting created: id: #{@room.meetingid}, name: #{@room.name}, created_by: #{bigbluebutton_user.username}, time: #{Time.now.iso8601}"
|
|
344
|
+
end
|
|
323
345
|
else
|
|
324
346
|
flash[:error] = t('bigbluebutton_rails.rooms.errors.join.cannot_create')
|
|
325
347
|
redirect_to_on_join_error
|
|
@@ -331,12 +353,17 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
331
353
|
token = @room.fetch_new_token
|
|
332
354
|
options = if token.nil? then {} else { :configToken => token } end
|
|
333
355
|
|
|
356
|
+
# set the create time and the user id, if they exist
|
|
357
|
+
options.merge!({ createTime: @room.create_time }) unless @room.create_time.blank?
|
|
358
|
+
options.merge!({ userID: id }) unless id.blank?
|
|
359
|
+
|
|
334
360
|
# room created and running, try to join it
|
|
335
361
|
url = @room.join_url(username, role, nil, options)
|
|
336
362
|
unless url.nil?
|
|
337
363
|
|
|
338
364
|
# change the protocol to join with a mobile device
|
|
339
|
-
if
|
|
365
|
+
if BigbluebuttonRails.use_mobile_client?(browser) &&
|
|
366
|
+
!BigbluebuttonRails.value_to_boolean(params[:desktop])
|
|
340
367
|
url.gsub!(/^[^:]*:\/\//i, "bigbluebutton://")
|
|
341
368
|
end
|
|
342
369
|
|
|
@@ -361,14 +388,16 @@ class Bigbluebutton::RoomsController < ApplicationController
|
|
|
361
388
|
unless params[:bigbluebutton_room].nil?
|
|
362
389
|
params[:bigbluebutton_room].permit(*room_allowed_params)
|
|
363
390
|
else
|
|
364
|
-
|
|
391
|
+
{}
|
|
365
392
|
end
|
|
366
393
|
end
|
|
367
394
|
|
|
368
395
|
def room_allowed_params
|
|
369
|
-
[ :name, :server_id, :meetingid, :
|
|
396
|
+
[ :name, :server_id, :meetingid, :attendee_key, :moderator_key, :welcome_msg,
|
|
370
397
|
:private, :logout_url, :dial_number, :voice_bridge, :max_participants, :owner_id,
|
|
371
|
-
:owner_type, :external, :param, :
|
|
372
|
-
:auto_start_video, :auto_start_audio, :
|
|
398
|
+
:owner_type, :external, :param, :record_meeting, :duration, :default_layout, :presenter_share_only,
|
|
399
|
+
:auto_start_video, :auto_start_audio, :background,
|
|
400
|
+
:moderator_only_message, :auto_start_recording, :allow_start_stop_recording,
|
|
401
|
+
:metadata_attributes => [ :id, :name, :content, :_destroy, :owner_id ] ]
|
|
373
402
|
end
|
|
374
403
|
end
|
|
@@ -6,7 +6,8 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
|
6
6
|
before_filter :find_server, :except => [:index, :new, :create]
|
|
7
7
|
|
|
8
8
|
def index
|
|
9
|
-
|
|
9
|
+
@servers ||= BigbluebuttonServer.all
|
|
10
|
+
respond_with(@servers)
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def show
|
|
@@ -14,7 +15,8 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def new
|
|
17
|
-
|
|
18
|
+
@server ||= BigbluebuttonServer.new
|
|
19
|
+
respond_with(@server)
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
def edit
|
|
@@ -58,7 +60,7 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
|
58
60
|
end
|
|
59
61
|
|
|
60
62
|
def create
|
|
61
|
-
@server
|
|
63
|
+
@server ||= BigbluebuttonServer.new(server_params)
|
|
62
64
|
|
|
63
65
|
respond_with @server do |format|
|
|
64
66
|
if @server.save
|
|
@@ -100,11 +102,13 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
|
100
102
|
end
|
|
101
103
|
|
|
102
104
|
def recordings
|
|
103
|
-
|
|
105
|
+
@recordings ||= @server.recordings
|
|
106
|
+
respond_with(@recordings)
|
|
104
107
|
end
|
|
105
108
|
|
|
106
109
|
def rooms
|
|
107
|
-
|
|
110
|
+
@rooms ||= @server.rooms
|
|
111
|
+
respond_with(@rooms)
|
|
108
112
|
end
|
|
109
113
|
|
|
110
114
|
def publish_recordings
|
|
@@ -156,7 +160,7 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
|
156
160
|
protected
|
|
157
161
|
|
|
158
162
|
def find_server
|
|
159
|
-
@server
|
|
163
|
+
@server ||= BigbluebuttonServer.find_by_param(params[:id])
|
|
160
164
|
end
|
|
161
165
|
|
|
162
166
|
def publish_unpublish(ids, publish)
|
|
@@ -188,12 +192,12 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
|
188
192
|
unless params[:bigbluebutton_server].nil?
|
|
189
193
|
params[:bigbluebutton_server].permit(*server_allowed_params)
|
|
190
194
|
else
|
|
191
|
-
|
|
195
|
+
{}
|
|
192
196
|
end
|
|
193
197
|
end
|
|
194
198
|
|
|
195
199
|
def server_allowed_params
|
|
196
|
-
[ :name, :url, :
|
|
200
|
+
[ :name, :url, :salt, :param ]
|
|
197
201
|
end
|
|
198
202
|
|
|
199
203
|
end
|
|
@@ -8,7 +8,7 @@ class BigbluebuttonMetadata < ActiveRecord::Base
|
|
|
8
8
|
|
|
9
9
|
validates :name, :presence => true
|
|
10
10
|
validates :name, :format => {
|
|
11
|
-
:with =>
|
|
11
|
+
:with => /\A[a-zA-Z]+[a-zA-Z\d-]*\z/,
|
|
12
12
|
:message => I18n.t('bigbluebutton_rails.metadata.errors.name_format')
|
|
13
13
|
}
|
|
14
14
|
validates :name,
|
|
@@ -2,8 +2,29 @@ class BigbluebuttonPlaybackFormat < ActiveRecord::Base
|
|
|
2
2
|
include ActiveModel::ForbiddenAttributesProtection
|
|
3
3
|
|
|
4
4
|
belongs_to :recording, :class_name => 'BigbluebuttonRecording'
|
|
5
|
+
belongs_to :playback_type, :class_name => 'BigbluebuttonPlaybackType'
|
|
6
|
+
|
|
7
|
+
delegate :name, :identifier, :visible, :visible?, :default, :default?, :description,
|
|
8
|
+
to: :playback_type, allow_nil: true
|
|
9
|
+
alias_attribute :format_type, :identifier
|
|
5
10
|
|
|
6
11
|
validates :recording_id, :presence => true
|
|
7
12
|
|
|
8
|
-
|
|
13
|
+
scope :ordered, -> {
|
|
14
|
+
default = joins(:playback_type).where("bigbluebutton_playback_types.default = ?", true)
|
|
15
|
+
if default.pluck(:id).empty?
|
|
16
|
+
others = all
|
|
17
|
+
else
|
|
18
|
+
others = where("id NOT IN (?)", default.pluck(:id))
|
|
19
|
+
end
|
|
20
|
+
default.concat others
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
def length_in_secs
|
|
24
|
+
if self.length.blank? || self.length < 0
|
|
25
|
+
0
|
|
26
|
+
else
|
|
27
|
+
self.length * 60
|
|
28
|
+
end
|
|
29
|
+
end
|
|
9
30
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
class BigbluebuttonPlaybackType < ActiveRecord::Base
|
|
2
|
+
include ActiveModel::ForbiddenAttributesProtection
|
|
3
|
+
|
|
4
|
+
validates :identifier, :presence => true
|
|
5
|
+
|
|
6
|
+
has_many :playback_formats,
|
|
7
|
+
:class_name => 'BigbluebuttonPlaybackFormat',
|
|
8
|
+
:foreign_key => 'playback_type_id',
|
|
9
|
+
:dependent => :nullify
|
|
10
|
+
|
|
11
|
+
# Ensure there will be 0 or 1 (no more) records with default=true.
|
|
12
|
+
# Setting a record with default=true will automatically set all others to default=false.
|
|
13
|
+
before_save :ensure_default_uniqueness
|
|
14
|
+
def ensure_default_uniqueness
|
|
15
|
+
if default_changed? && default?
|
|
16
|
+
self.class.where('id != ?', self.id).update_all(default: false)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def name
|
|
21
|
+
default = self.identifier.gsub("_", " ").titleize
|
|
22
|
+
I18n.t("bigbluebutton_rails.playback_types.#{self.identifier}.name", default: default)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def description
|
|
26
|
+
default = self.identifier.gsub("_", " ").titleize
|
|
27
|
+
I18n.t("bigbluebutton_rails.playback_types.#{self.identifier}.tip", default: default)
|
|
28
|
+
end
|
|
29
|
+
end
|