bigbluebutton_rails 1.4.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -6,10 +6,6 @@ class BigbluebuttonRoomOptions < ActiveRecord::Base
|
|
6
6
|
belongs_to :room, :class_name => 'BigbluebuttonRoom'
|
7
7
|
validates :room_id, :presence => true
|
8
8
|
|
9
|
-
def get_available_layouts
|
10
|
-
["Default", "Video Chat", "Meeting", "Webinar", "Lecture assistant", "Lecture"]
|
11
|
-
end
|
12
|
-
|
13
9
|
# Sets the attributes from the model into the config.xml passed in the arguments.
|
14
10
|
# If anything was modified in the XML, returns the new XML generated as string.
|
15
11
|
# Otherwise returns false.
|
@@ -17,7 +13,7 @@ class BigbluebuttonRoomOptions < ActiveRecord::Base
|
|
17
13
|
# xml (string):: The config.xml in which the attributes will be set
|
18
14
|
def set_on_config_xml(xml)
|
19
15
|
config_xml = BigBlueButton::BigBlueButtonConfigXml.new(xml)
|
20
|
-
|
16
|
+
if self.default_layout.present?
|
21
17
|
config_xml.set_attribute("layout", "defaultLayout", self.default_layout, false)
|
22
18
|
end
|
23
19
|
unless self.presenter_share_only.nil?
|
@@ -30,6 +26,9 @@ class BigbluebuttonRoomOptions < ActiveRecord::Base
|
|
30
26
|
unless self.auto_start_audio.nil?
|
31
27
|
config_xml.set_attribute("PhoneModule", "autoJoin", self.auto_start_audio, true)
|
32
28
|
end
|
29
|
+
if self.background.present?
|
30
|
+
config_xml.set_attribute("branding", "background", self.background, false)
|
31
|
+
end
|
33
32
|
if config_xml.is_modified?
|
34
33
|
config_xml.as_string
|
35
34
|
else
|
@@ -39,8 +38,12 @@ class BigbluebuttonRoomOptions < ActiveRecord::Base
|
|
39
38
|
|
40
39
|
# Returns true if any of the attributes was set. Is used to check whether the options
|
41
40
|
# have to be sent to the server (setConfigXML) or not.
|
41
|
+
# Note: have to use ".nil?" for booleans, otherwise setting it to 'false' would be
|
42
|
+
# taken as not setting it.
|
42
43
|
def is_modified?
|
43
|
-
|
44
|
-
|
44
|
+
booleans = [ :presenter_share_only, :auto_start_audio, :auto_start_video ]
|
45
|
+
others = [ :default_layout, :background ]
|
46
|
+
booleans.any? { |method| !self.send(method).nil? } ||
|
47
|
+
others.any? { |method| self.send(method).present? }
|
45
48
|
end
|
46
49
|
end
|
@@ -13,6 +13,16 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
13
13
|
:foreign_key => 'server_id',
|
14
14
|
:dependent => :nullify
|
15
15
|
|
16
|
+
has_one :config,
|
17
|
+
class_name: 'BigbluebuttonServerConfig',
|
18
|
+
foreign_key: 'server_id',
|
19
|
+
dependent: :destroy
|
20
|
+
|
21
|
+
delegate :update_config, to: :config
|
22
|
+
delegate :available_layouts, to: :config
|
23
|
+
delegate :available_layouts_names, to: :config
|
24
|
+
delegate :available_layouts_for_select, to: :config
|
25
|
+
|
16
26
|
validates :name,
|
17
27
|
:presence => true,
|
18
28
|
:uniqueness => true,
|
@@ -22,14 +32,14 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
22
32
|
:presence => true,
|
23
33
|
:uniqueness => true,
|
24
34
|
:length => { :maximum => 500 },
|
25
|
-
:format => { :with => /http
|
35
|
+
:format => { :with => /http[s]?:\/\/.*\/bigbluebutton\/api/,
|
26
36
|
:message => I18n.t('bigbluebutton_rails.servers.errors.url_format') }
|
27
37
|
|
28
38
|
validates :param,
|
29
39
|
:presence => true,
|
30
40
|
:uniqueness => true,
|
31
41
|
:length => { :minimum => 3 },
|
32
|
-
:format => { :with =>
|
42
|
+
:format => { :with => /\A[a-zA-Z\d_]+[a-zA-Z\d_-]*[a-zA-Z\d_]+\z/,
|
33
43
|
:message => I18n.t('bigbluebutton_rails.servers.errors.param_format') }
|
34
44
|
|
35
45
|
validates :salt,
|
@@ -37,8 +47,8 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
37
47
|
:length => { :minimum => 1, :maximum => 500 }
|
38
48
|
|
39
49
|
validates :version,
|
40
|
-
:
|
41
|
-
:
|
50
|
+
:inclusion => { :in => ['0.8', '0.81', '0.9', '1.0'] },
|
51
|
+
:allow_blank => true
|
42
52
|
|
43
53
|
# Array of <tt>BigbluebuttonMeeting</tt>
|
44
54
|
attr_reader :meetings
|
@@ -46,14 +56,26 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
46
56
|
after_initialize :init
|
47
57
|
before_validation :set_param
|
48
58
|
|
59
|
+
after_create :create_config
|
60
|
+
after_create :update_config
|
61
|
+
|
62
|
+
before_save :check_for_version_update
|
63
|
+
after_update :check_for_config_update
|
64
|
+
|
65
|
+
# In case there's no config created yet, build one.
|
66
|
+
def config_with_initialize
|
67
|
+
config_without_initialize || build_config
|
68
|
+
end
|
69
|
+
alias_method_chain :config, :initialize
|
70
|
+
|
49
71
|
# Returns the API object (<tt>BigBlueButton::BigBlueButtonAPI</tt> defined in
|
50
72
|
# <tt>bigbluebutton-api-ruby</tt>) associated with this server.
|
51
73
|
def api
|
52
|
-
if @api.
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
@api
|
74
|
+
return @api if @api.present?
|
75
|
+
|
76
|
+
version = self.version
|
77
|
+
version = set_api_version_from_server if version.blank?
|
78
|
+
@api = BigBlueButton::BigBlueButtonApi.new(self.url, self.salt, version.to_s, false)
|
57
79
|
end
|
58
80
|
|
59
81
|
# Fetches the meetings currently created in the server (running or not).
|
@@ -72,11 +94,11 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
72
94
|
# TODO: there might be more attributes returned by the API, review them all
|
73
95
|
if room.nil?
|
74
96
|
room = BigbluebuttonRoom.new(:server => self, :meetingid => attr[:meetingID],
|
75
|
-
:name => attr[:meetingID], :
|
76
|
-
:
|
97
|
+
:name => attr[:meetingID], :attendee_api_password => attr[:attendeePW],
|
98
|
+
:moderator_api_password => attr[:moderatorPW], :external => true, :private => true)
|
77
99
|
else
|
78
|
-
room.update_attributes(:
|
79
|
-
:
|
100
|
+
room.update_attributes(:attendee_api_password => attr[:attendeePW],
|
101
|
+
:moderator_api_password => attr[:moderatorPW])
|
80
102
|
end
|
81
103
|
room.running = attr[:running]
|
82
104
|
room.update_current_meeting
|
@@ -131,6 +153,20 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
131
153
|
self.param
|
132
154
|
end
|
133
155
|
|
156
|
+
def set_api_version_from_server
|
157
|
+
begin
|
158
|
+
# creating the object with version=nil makes the gem fetch the version from the server
|
159
|
+
api = BigBlueButton::BigBlueButtonApi.new(self.url, self.salt, nil, false)
|
160
|
+
self.version = api.version
|
161
|
+
rescue BigBlueButton::BigBlueButtonException
|
162
|
+
# we just ignore errors in case the server is not responding
|
163
|
+
# in these cases, the version will be fetched later on
|
164
|
+
Rails.logger.error "Could not fetch the API version from the server #{self.id}. The URL probably incorrect."
|
165
|
+
self.version = nil
|
166
|
+
end
|
167
|
+
self.version
|
168
|
+
end
|
169
|
+
|
134
170
|
protected
|
135
171
|
|
136
172
|
def init
|
@@ -145,4 +181,24 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
145
181
|
end
|
146
182
|
end
|
147
183
|
|
184
|
+
def create_config
|
185
|
+
BigbluebuttonServerConfig.create(server: self)
|
186
|
+
end
|
187
|
+
|
188
|
+
# Checks if we have to update the server version or not and do it if needed.
|
189
|
+
# If the user only changes the version, we assume he's trying to force an API version.
|
190
|
+
# If the user changes url/salt and the version, we also assume that he wants
|
191
|
+
# to force the API version
|
192
|
+
def check_for_version_update
|
193
|
+
if [:url, :salt, :version].any? { |k| self.changes.key?(k) }
|
194
|
+
self.set_api_version_from_server
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def check_for_config_update
|
199
|
+
if [:url, :salt, :version].any?{ |k| self.changes.key?(k) }
|
200
|
+
self.update_config
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
148
204
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'bigbluebutton_api'
|
3
|
+
|
4
|
+
class BigbluebuttonServerConfig < ActiveRecord::Base
|
5
|
+
include ActiveModel::ForbiddenAttributesProtection
|
6
|
+
|
7
|
+
belongs_to :server, class_name: 'BigbluebuttonServer'
|
8
|
+
validates :server_id, presence: true
|
9
|
+
|
10
|
+
serialize :available_layouts, Array
|
11
|
+
|
12
|
+
# This is called when the config.xml is requested to update the info that is
|
13
|
+
# being stored locally. Currently the only info stored is about the available
|
14
|
+
# layouts. It is also called without the config_xml parameter when we are
|
15
|
+
# forcing the update (via Resque task for example).
|
16
|
+
def update_config(config_xml = nil)
|
17
|
+
begin
|
18
|
+
config_xml = self.server.api.get_default_config_xml if config_xml.nil?
|
19
|
+
layouts = self.server.api.get_available_layouts(config_xml)
|
20
|
+
self.update_attributes(available_layouts: layouts) unless layouts.nil?
|
21
|
+
rescue BigBlueButton::BigBlueButtonException
|
22
|
+
Rails.logger.error "Could not fetch configurations for the server #{self.server.id}. The URL probably incorrect."
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def available_layouts_names
|
27
|
+
# Translate the keys that come from server.available_layouts.
|
28
|
+
# If it's not a valid key (e.g. it's already a name) keep it as it is.
|
29
|
+
available_layouts.map { |layout|
|
30
|
+
# Ignores everything up to the last point
|
31
|
+
# e.g. from 'bbb.layout.name.defaultlayout' to 'defaultlayout'
|
32
|
+
# e.g. from 'defaultlayout' to 'defaultlayout'
|
33
|
+
basename = layout.gsub(/(.*[.])?/, '')
|
34
|
+
|
35
|
+
# We parameterize the id since the value can be anything, possibly an invalid
|
36
|
+
# key for yml (e.g. "Reunião").
|
37
|
+
key = "bigbluebutton_rails.server_configs.layouts.#{basename.parameterize('_')}"
|
38
|
+
|
39
|
+
I18n.t(key, default: basename)
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns an array of arrays for showing layouts in a select.
|
44
|
+
# The first member of the internal array is the layout's name, the second is the
|
45
|
+
# layout's ID (the raw value used to set the layout in the webconf server).
|
46
|
+
def available_layouts_for_select
|
47
|
+
available_layouts_names.zip(available_layouts)
|
48
|
+
end
|
49
|
+
end
|
@@ -50,6 +50,10 @@
|
|
50
50
|
<%= f.label :description %><br />
|
51
51
|
<%= f.text_field :description %>
|
52
52
|
</div>
|
53
|
+
<div class="field">
|
54
|
+
<%= f.label :size %><br />
|
55
|
+
<%= f.text_field :size %>
|
56
|
+
</div>
|
53
57
|
|
54
58
|
<p>
|
55
59
|
<b><%= BigbluebuttonRecording.human_attribute_name(:metadata) %>:</b>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<div id="bbbrails_recordings_links">
|
2
2
|
<%= link_to('View server list', bigbluebutton_servers_path) %><br/>
|
3
|
-
<%= link_to('View room list', bigbluebutton_rooms_path)
|
3
|
+
<%= link_to('View room list', bigbluebutton_rooms_path) %><br/>
|
4
4
|
</div>
|
5
5
|
|
6
6
|
<ul id="bbbrails_list">
|
@@ -23,6 +23,7 @@
|
|
23
23
|
<div class="field"><label><%= BigbluebuttonRecording.human_attribute_name(:start_time) %></label> <%= recording.start_time %></div>
|
24
24
|
<div class="field"><label><%= BigbluebuttonRecording.human_attribute_name(:end_time) %></label> <%= recording.end_time %></div>
|
25
25
|
<div class="field"><label><%= BigbluebuttonRecording.human_attribute_name(:description) %></label> <%= recording.description %></div>
|
26
|
+
<div class="field"><label><%= BigbluebuttonRecording.human_attribute_name(:size) %></label> <%= recording.size %></div>
|
26
27
|
<div class="field">
|
27
28
|
<label><%= BigbluebuttonRecording.human_attribute_name(:metadata) %></label>
|
28
29
|
<div>
|
@@ -48,8 +49,14 @@
|
|
48
49
|
</div>
|
49
50
|
<div class="field"><label>Play</label>
|
50
51
|
<%= link_to "default", play_bigbluebutton_recording_path(recording) %>
|
51
|
-
|
52
|
-
|
52
|
+
|
|
53
|
+
<% recording.playback_formats.ordered.each do |format| %>
|
54
|
+
<%= link_to format.name, play_bigbluebutton_recording_path(recording, :type => format.playback_type.identifier), :title => format.description %>
|
55
|
+
<%= "(visible: #{format.visible})" %>
|
56
|
+
<% if format.default? %>
|
57
|
+
<%= "(duration: #{format.length} mins)" %>
|
58
|
+
<% end %>
|
59
|
+
|
|
53
60
|
<% end %>
|
54
61
|
</div>
|
55
62
|
</li>
|
@@ -37,12 +37,12 @@
|
|
37
37
|
<%= f.check_box :private %>
|
38
38
|
</div>
|
39
39
|
<div class="field">
|
40
|
-
<%= f.label :
|
41
|
-
<%= f.text_field :
|
40
|
+
<%= f.label :attendee_key %><br />
|
41
|
+
<%= f.text_field :attendee_key %>
|
42
42
|
</div>
|
43
43
|
<div class="field">
|
44
|
-
<%= f.label :
|
45
|
-
<%= f.text_field :
|
44
|
+
<%= f.label :moderator_key %><br />
|
45
|
+
<%= f.text_field :moderator_key %>
|
46
46
|
</div>
|
47
47
|
<div class="field">
|
48
48
|
<%= f.label :welcome_msg %><br />
|
@@ -73,13 +73,25 @@
|
|
73
73
|
<%= f.text_field :param %>
|
74
74
|
</div>
|
75
75
|
<div class="field">
|
76
|
-
<%= f.label :
|
77
|
-
<%= f.check_box :
|
76
|
+
<%= f.label :record_meeting %><br />
|
77
|
+
<%= f.check_box :record_meeting %>
|
78
78
|
</div>
|
79
79
|
<div class="field">
|
80
80
|
<%= f.label :duration %><br />
|
81
81
|
<%= f.text_field :duration %>
|
82
82
|
</div>
|
83
|
+
<div class="field">
|
84
|
+
<%= f.label :moderator_only_message %><br />
|
85
|
+
<%= f.text_field :moderator_only_message %><br />
|
86
|
+
</div>
|
87
|
+
<div class="field">
|
88
|
+
<%= f.label :auto_start_recording %><br />
|
89
|
+
<%= f.check_box :auto_start_recording %><br />
|
90
|
+
</div>
|
91
|
+
<div class="field">
|
92
|
+
<%= f.label :allow_start_stop_recording %><br />
|
93
|
+
<%= f.check_box :allow_start_stop_recording %><br />
|
94
|
+
</div>
|
83
95
|
<div class="field">
|
84
96
|
<b>Metadata</b> (by default we have 10 metadata in this view, but it's not limited to it)<br />
|
85
97
|
<%= f.fields_for :metadata do |metadata_form| %>
|
@@ -15,8 +15,8 @@
|
|
15
15
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:name) %></label> <%= room.name %></div>
|
16
16
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:meetingid) %></label> <%= room.meetingid %></div>
|
17
17
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:private) %></label> <%= room.private %></div>
|
18
|
-
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:
|
19
|
-
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:
|
18
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:attendee_key) %></label> <%= room.attendee_key %></div>
|
19
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:moderator_key) %></label> <%= room.moderator_key %></div>
|
20
20
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:welcome_msg) %></label> <%= room.welcome_msg %></div>
|
21
21
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:logout_url) %></label> <%= room.logout_url %></div>
|
22
22
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:dial_number) %></label> <%= room.dial_number %></div>
|
@@ -24,8 +24,11 @@
|
|
24
24
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:max_participants) %></label> <%= room.max_participants %></div>
|
25
25
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:external) %></label> <%= room.external %></div>
|
26
26
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:param) %></label> <%= room.param %></div>
|
27
|
-
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:
|
27
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:record_meeting) %></label> <%= room.record_meeting %></div>
|
28
28
|
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:duration) %></label> <%= room.duration %></div>
|
29
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:moderator_only_message) %></label> <%= room.moderator_only_message %></div>
|
30
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:auto_start_recording) %></label> <%= room.auto_start_recording %></div>
|
31
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:allow_start_stop_recording) %></label> <%= room.allow_start_stop_recording %></div>
|
29
32
|
<div class="field">
|
30
33
|
<label><%= BigbluebuttonRoom.human_attribute_name(:metadata) %></label>
|
31
34
|
<div>
|
@@ -43,7 +43,7 @@ $(document).ready(function(){
|
|
43
43
|
<% end %>
|
44
44
|
</div>
|
45
45
|
|
46
|
-
<p><%= @room.name %> requires a name and/or
|
46
|
+
<p><%= @room.name %> requires a name and/or key to join:</p>
|
47
47
|
<%= form_tag join_bigbluebutton_room_path(@room, :mobile => params[:mobile]) do %>
|
48
48
|
|
49
49
|
<div class="field">
|
@@ -55,13 +55,13 @@ $(document).ready(function(){
|
|
55
55
|
<% end %>
|
56
56
|
</div>
|
57
57
|
<div class="field">
|
58
|
-
<label for="
|
58
|
+
<label for="user_key">Key:</label><br />
|
59
59
|
<% if @user_role == :attendee %>
|
60
|
-
<%= password_field_tag "user[
|
60
|
+
<%= password_field_tag "user[key]", @room.attendee_key, :readonly => true %>
|
61
61
|
<% elsif @user_role == :moderator %>
|
62
|
-
<%= password_field_tag "user[
|
62
|
+
<%= password_field_tag "user[key]", @room.moderator_key, :readonly => true %>
|
63
63
|
<% else %>
|
64
|
-
<%= password_field_tag "user[
|
64
|
+
<%= password_field_tag "user[key]", "" %>
|
65
65
|
<% end %>
|
66
66
|
</div>
|
67
67
|
|
@@ -21,12 +21,12 @@
|
|
21
21
|
<%= @room.private %>
|
22
22
|
</p>
|
23
23
|
<p>
|
24
|
-
<b><%= BigbluebuttonRoom.human_attribute_name(:
|
25
|
-
<%= @room.
|
24
|
+
<b><%= BigbluebuttonRoom.human_attribute_name(:attendee_key) %>:</b>
|
25
|
+
<%= @room.attendee_key %>
|
26
26
|
</p>
|
27
27
|
<p>
|
28
|
-
<b><%= BigbluebuttonRoom.human_attribute_name(:
|
29
|
-
<%= @room.
|
28
|
+
<b><%= BigbluebuttonRoom.human_attribute_name(:moderator_key) %>:</b>
|
29
|
+
<%= @room.moderator_key %>
|
30
30
|
</p>
|
31
31
|
<p>
|
32
32
|
<b><%= BigbluebuttonRoom.human_attribute_name(:welcome_msg) %>:</b>
|
@@ -57,13 +57,25 @@
|
|
57
57
|
<%= @room.param %>
|
58
58
|
</p>
|
59
59
|
<p>
|
60
|
-
<b><%= BigbluebuttonRoom.human_attribute_name(:
|
61
|
-
<%= @room.
|
60
|
+
<b><%= BigbluebuttonRoom.human_attribute_name(:record_meeting) %>:</b>
|
61
|
+
<%= @room.record_meeting %>
|
62
62
|
</p>
|
63
63
|
<p>
|
64
64
|
<b><%= BigbluebuttonRoom.human_attribute_name(:duration) %>:</b>
|
65
65
|
<%= @room.duration %>
|
66
66
|
</p>
|
67
|
+
<p>
|
68
|
+
<b><%= BigbluebuttonRoom.human_attribute_name(:moderator_only_message) %>:</b>
|
69
|
+
<%= @room.moderator_only_message %>
|
70
|
+
</p>
|
71
|
+
<p>
|
72
|
+
<b><%= BigbluebuttonRoom.human_attribute_name(:auto_start_recording) %>:</b>
|
73
|
+
<%= @room.auto_start_recording %>
|
74
|
+
</p>
|
75
|
+
<p>
|
76
|
+
<b><%= BigbluebuttonRoom.human_attribute_name(:allow_start_stop_recording) %>:</b>
|
77
|
+
<%= @room.allow_start_stop_recording %>
|
78
|
+
</p>
|
67
79
|
<p>
|
68
80
|
<b><%= BigbluebuttonRoom.human_attribute_name(:metadata) %></b>
|
69
81
|
<% @room.metadata.each do |metadata| %>
|
@@ -59,6 +59,11 @@
|
|
59
59
|
<%= @server.param %>
|
60
60
|
</p>
|
61
61
|
|
62
|
+
<p>
|
63
|
+
<b><%= BigbluebuttonServerConfig.human_attribute_name(:available_layouts) %></b>
|
64
|
+
<%= @server.config.available_layouts %>
|
65
|
+
</p>
|
66
|
+
|
62
67
|
<p>
|
63
68
|
<span>Access:</span>
|
64
69
|
<%= link_to 'Edit', edit_bigbluebutton_server_path(@server) %> |
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# A resque worker to check for meetings that already finished and mark
|
2
|
+
# them as finished.
|
3
|
+
# Same as "rake bigbluebutton_rails:meetings:finish".
|
4
|
+
class BigbluebuttonFinishMeetings
|
5
|
+
@queue = :bigbluebutton_rails
|
6
|
+
|
7
|
+
def self.perform
|
8
|
+
Rails.logger.info "BigbluebuttonFinishMeetings worker running"
|
9
|
+
BigbluebuttonRails::BackgroundTasks.finish_meetings
|
10
|
+
end
|
11
|
+
end
|