bigbluebutton_rails 0.0.4 → 0.0.5
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.
- data/.gitignore +2 -1
- data/CHANGELOG.rdoc +12 -0
- data/Gemfile.lock +53 -14
- data/README.rdoc +31 -29
- data/Rakefile +63 -11
- data/app/controllers/bigbluebutton/rooms_controller.rb +89 -26
- data/app/controllers/bigbluebutton/servers_controller.rb +38 -5
- data/app/helpers/bigbluebutton_rails_helper.rb +12 -0
- data/app/models/bigbluebutton_room.rb +44 -1
- data/app/models/bigbluebutton_server.rb +48 -12
- data/app/views/bigbluebutton/rooms/_form.html.erb +8 -0
- data/app/views/bigbluebutton/rooms/index.html.erb +34 -43
- data/app/views/bigbluebutton/rooms/join_mobile.html.erb +9 -0
- data/app/views/bigbluebutton/rooms/show.html.erb +8 -0
- data/app/views/bigbluebutton/servers/_activity_list.html.erb +48 -0
- data/app/views/bigbluebutton/servers/_form.html.erb +4 -0
- data/app/views/bigbluebutton/servers/activity.html.erb +51 -0
- data/app/views/bigbluebutton/servers/index.html.erb +21 -25
- data/app/views/bigbluebutton/servers/show.html.erb +5 -0
- data/bigbluebutton_rails.gemspec +9 -6
- data/config/locales/en.yml +11 -2
- data/lib/bigbluebutton_rails/controller_methods.rb +47 -14
- data/lib/bigbluebutton_rails/exceptions.rb +6 -0
- data/lib/bigbluebutton_rails/rails/routes.rb +17 -12
- data/lib/bigbluebutton_rails/rails.rb +4 -0
- data/lib/bigbluebutton_rails/version.rb +1 -1
- data/lib/bigbluebutton_rails.rb +1 -0
- data/lib/generators/bigbluebutton_rails/install_generator.rb +28 -5
- data/lib/generators/bigbluebutton_rails/templates/migration.rb +3 -0
- data/lib/generators/bigbluebutton_rails/templates/migration_0_0_4.rb +38 -0
- data/lib/generators/bigbluebutton_rails/templates/migration_0_0_5.rb +23 -0
- data/{lib/generators/bigbluebutton_rails/templates/public → public}/images/loading.gif +0 -0
- data/{lib/generators/bigbluebutton_rails/templates/public → public}/javascripts/jquery.min.js +0 -0
- data/public/stylesheets/bigbluebutton_rails.css +138 -0
- data/spec/controllers/bigbluebutton/rooms_controller_spec.rb +284 -25
- data/spec/controllers/bigbluebutton/servers_controller_spec.rb +93 -1
- data/spec/factories/bigbluebutton_room.rb +1 -0
- data/spec/factories/bigbluebutton_server.rb +1 -0
- data/spec/factories/integration/bigbluebutton_server_integration.rb +8 -0
- data/spec/generators/install_generator_spec.rb +53 -10
- data/spec/generators/views_generator_spec.rb +6 -2
- data/spec/helpers/bigbluebutton_rails_helper_spec.rb +19 -0
- data/spec/integration_conf.yml.example +5 -0
- data/spec/models/bigbluebutton_room_spec.rb +99 -72
- data/spec/models/bigbluebutton_server_spec.rb +81 -20
- data/spec/rails_app/.gitignore +2 -1
- data/spec/rails_app/app/views/layouts/application.html.erb +1 -1
- data/spec/rails_app/config/cucumber.yml +8 -0
- data/spec/rails_app/config/database.yml +4 -1
- data/spec/rails_app/db/seeds.rb +6 -5
- data/spec/rails_app/features/manage_bigbluebutton_rooms.feature +9 -0
- data/spec/rails_app/features/manage_bigbluebutton_servers.feature +9 -0
- data/spec/rails_app/features/step_definitions/bigbluebutton_room_steps.rb +38 -0
- data/spec/rails_app/features/step_definitions/bigbluebutton_server_steps.rb +23 -0
- data/spec/rails_app/features/step_definitions/common_steps.rb +3 -0
- data/spec/rails_app/features/step_definitions/web_steps.rb +211 -0
- data/spec/rails_app/features/support/content.rb +11 -0
- data/spec/rails_app/features/support/env.rb +50 -0
- data/spec/rails_app/features/support/env_gem.rb +9 -0
- data/spec/rails_app/features/support/paths.rb +38 -0
- data/spec/rails_app/features/support/selectors.rb +39 -0
- data/spec/rails_app/lib/tasks/cucumber.rake +65 -0
- data/spec/rails_app/public/images/loading.gif +0 -0
- data/spec/rails_app/public/javascripts/jquery.min.js +16 -0
- data/spec/rails_app/public/stylesheets/bigbluebutton_rails.css +138 -0
- data/spec/rails_app/script/cucumber +10 -0
- data/spec/routing/bigbluebutton/rooms_routing_spec.rb +12 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/support/integration/integration_conf.rb +16 -0
- data/spec/support/matchers/shoulda/respond_with_json_matcher.rb +67 -0
- data/spec/support/mocked_server.rb +1 -0
- metadata +91 -29
- data/lib/generators/bigbluebutton_rails/public_generator.rb +0 -16
- data/spec/generators/public_generator_spec.rb +0 -31
@@ -1,13 +1,14 @@
|
|
1
1
|
class Bigbluebutton::ServersController < ApplicationController
|
2
2
|
|
3
3
|
respond_to :html
|
4
|
+
respond_to :json, :only => [:index, :show, :new, :create, :update, :destroy]
|
4
5
|
|
5
6
|
def index
|
6
7
|
respond_with(@servers = BigbluebuttonServer.all)
|
7
8
|
end
|
8
9
|
|
9
10
|
def show
|
10
|
-
respond_with(@server = BigbluebuttonServer.
|
11
|
+
respond_with(@server = BigbluebuttonServer.find_by_param(params[:id]))
|
11
12
|
end
|
12
13
|
|
13
14
|
def new
|
@@ -15,7 +16,31 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def edit
|
18
|
-
respond_with(@server = BigbluebuttonServer.
|
19
|
+
respond_with(@server = BigbluebuttonServer.find_by_param(params[:id]))
|
20
|
+
end
|
21
|
+
|
22
|
+
def activity
|
23
|
+
@server = BigbluebuttonServer.find_by_param(params[:id])
|
24
|
+
# @new_meetings = @server.rooms
|
25
|
+
@server.fetch_meetings
|
26
|
+
# @new_meetings = @server.meetings.reject{ |r|
|
27
|
+
# i = @new_meetings.index(r)
|
28
|
+
# i.nil? ? false : r.attr_equal?(@new_meetings[i])
|
29
|
+
#}
|
30
|
+
@server.meetings.each do |meeting|
|
31
|
+
meeting.fetch_meeting_info
|
32
|
+
end
|
33
|
+
|
34
|
+
# TODO catch exceptions
|
35
|
+
|
36
|
+
if params[:update_list]
|
37
|
+
render :partial => 'activity_list'
|
38
|
+
return
|
39
|
+
end
|
40
|
+
|
41
|
+
# TODO json response
|
42
|
+
|
43
|
+
respond_with(@server)
|
19
44
|
end
|
20
45
|
|
21
46
|
def create
|
@@ -27,14 +52,16 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
27
52
|
message = t('bigbluebutton_rails.servers.notice.create.success')
|
28
53
|
redirect_to(@server, :notice => message)
|
29
54
|
}
|
55
|
+
format.json { render :json => @server, :status => :created }
|
30
56
|
else
|
31
57
|
format.html { render :action => "new" }
|
58
|
+
format.json { render :json => @server.errors.full_messages, :status => :unprocessable_entity }
|
32
59
|
end
|
33
60
|
end
|
34
61
|
end
|
35
62
|
|
36
63
|
def update
|
37
|
-
@server = BigbluebuttonServer.
|
64
|
+
@server = BigbluebuttonServer.find_by_param(params[:id])
|
38
65
|
|
39
66
|
respond_with @server do |format|
|
40
67
|
if @server.update_attributes(params[:bigbluebutton_server])
|
@@ -42,15 +69,21 @@ class Bigbluebutton::ServersController < ApplicationController
|
|
42
69
|
message = t('bigbluebutton_rails.servers.notice.update.success')
|
43
70
|
redirect_to(@server, :notice => message)
|
44
71
|
}
|
72
|
+
format.json { head :ok }
|
45
73
|
else
|
46
74
|
format.html { render :action => "edit" }
|
75
|
+
format.json { render :json => @server.errors.full_messages, :status => :unprocessable_entity }
|
47
76
|
end
|
48
77
|
end
|
49
78
|
end
|
50
79
|
|
51
80
|
def destroy
|
52
|
-
@server = BigbluebuttonServer.
|
81
|
+
@server = BigbluebuttonServer.find_by_param(params[:id])
|
53
82
|
@server.destroy
|
54
|
-
|
83
|
+
|
84
|
+
respond_with do |format|
|
85
|
+
format.html { redirect_to(bigbluebutton_servers_url) }
|
86
|
+
format.json { head :ok }
|
87
|
+
end
|
55
88
|
end
|
56
89
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module BigbluebuttonRailsHelper
|
2
|
+
|
3
|
+
# Returns the URL for a QR-code image usign Google Charts API
|
4
|
+
def qrcode_url(content, size=nil)
|
5
|
+
size ||= "200x200"
|
6
|
+
content = CGI::escape(content)
|
7
|
+
"https://chart.googleapis.com/chart?cht=qr&chs=#{size}&chl=#{content}&choe=UTF-8"
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
|
@@ -14,20 +14,32 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
14
14
|
validates :randomize_meetingid, :inclusion => { :in => [true, false] }
|
15
15
|
validates :voice_bridge, :presence => true, :uniqueness => true
|
16
16
|
|
17
|
+
validates :param,
|
18
|
+
:presence => true,
|
19
|
+
:uniqueness => true,
|
20
|
+
:length => { :minimum => 3 },
|
21
|
+
:format => { :with => /^[a-zA-Z\d_]+[a-zA-Z\d_-]*[a-zA-Z\d_]+$/,
|
22
|
+
:message => I18n.t('bigbluebutton_rails.rooms.errors.param_format') }
|
23
|
+
|
17
24
|
# Passwords are 16 character strings
|
18
25
|
# See http://groups.google.com/group/bigbluebutton-dev/browse_thread/thread/9be5aae1648bcab?pli=1
|
19
26
|
validates :attendee_password, :length => { :maximum => 16 }
|
20
27
|
validates :moderator_password, :length => { :maximum => 16 }
|
21
28
|
|
29
|
+
validates :attendee_password, :presence => true, :if => :private?
|
30
|
+
validates :moderator_password, :presence => true, :if => :private?
|
31
|
+
|
22
32
|
attr_accessible :name, :server_id, :meetingid, :attendee_password, :moderator_password,
|
23
33
|
:welcome_msg, :owner, :server, :private, :logout_url, :dial_number,
|
24
|
-
:voice_bridge, :max_participants, :owner_id, :owner_type, :randomize_meetingid
|
34
|
+
:voice_bridge, :max_participants, :owner_id, :owner_type, :randomize_meetingid,
|
35
|
+
:external, :param
|
25
36
|
|
26
37
|
# Note: these params need to be fetched from the server before being accessed
|
27
38
|
attr_accessor :running, :participant_count, :moderator_count, :attendees,
|
28
39
|
:has_been_forcibly_ended, :start_time, :end_time
|
29
40
|
|
30
41
|
after_initialize :init
|
42
|
+
before_validation :set_param
|
31
43
|
|
32
44
|
# Convenience method to access the attribute <tt>running</tt>
|
33
45
|
def is_running?
|
@@ -155,6 +167,30 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
155
167
|
role
|
156
168
|
end
|
157
169
|
|
170
|
+
# Compare the instance variables of two models to define if they are equal
|
171
|
+
# Returns a hash with the variables with different values or an empty hash
|
172
|
+
# if they are have all equal values.
|
173
|
+
# From: http://alicebobandmallory.com/articles/2009/11/02/comparing-instance-variables-in-ruby
|
174
|
+
def instance_variables_compare(o)
|
175
|
+
vars = [ :@running, :@participant_count, :@moderator_count, :@attendees,
|
176
|
+
:@has_been_forcibly_ended, :@start_time, :@end_time ]
|
177
|
+
Hash[*vars.map { |v|
|
178
|
+
self.instance_variable_get(v)!=o.instance_variable_get(v) ?
|
179
|
+
[v,o.instance_variable_get(v)] : []}.flatten]
|
180
|
+
end
|
181
|
+
|
182
|
+
# A more complete equal? method, comparing also the attibutes and
|
183
|
+
# the instance variables
|
184
|
+
def attr_equal?(o)
|
185
|
+
self == o and
|
186
|
+
self.instance_variables_compare(o).empty? and
|
187
|
+
self.attributes == o.attributes
|
188
|
+
end
|
189
|
+
|
190
|
+
def to_param
|
191
|
+
self.param
|
192
|
+
end
|
193
|
+
|
158
194
|
protected
|
159
195
|
|
160
196
|
def init
|
@@ -197,4 +233,11 @@ class BigbluebuttonRoom < ActiveRecord::Base
|
|
197
233
|
self.logout_url, self.max_participants, self.voice_bridge)
|
198
234
|
end
|
199
235
|
|
236
|
+
# if :param wasn't set, sets it as :name downcase and parameterized
|
237
|
+
def set_param
|
238
|
+
if self.param.blank?
|
239
|
+
self.param = self.name.parameterize.downcase unless self.name.nil?
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
200
243
|
end
|
@@ -1,23 +1,45 @@
|
|
1
1
|
require 'bigbluebutton-api'
|
2
2
|
|
3
3
|
class BigbluebuttonServer < ActiveRecord::Base
|
4
|
-
has_many :rooms,
|
5
|
-
|
4
|
+
has_many :rooms,
|
5
|
+
:class_name => 'BigbluebuttonRoom',
|
6
|
+
:foreign_key => 'server_id',
|
7
|
+
:dependent => :destroy
|
6
8
|
|
7
|
-
validates :name,
|
9
|
+
validates :name,
|
10
|
+
:presence => true,
|
11
|
+
:uniqueness => true,
|
12
|
+
:length => { :minimum => 1, :maximum => 500 }
|
8
13
|
|
9
|
-
validates :url,
|
10
|
-
|
11
|
-
|
14
|
+
validates :url,
|
15
|
+
:presence => true,
|
16
|
+
:uniqueness => true,
|
17
|
+
:length => { :maximum => 500 },
|
18
|
+
:format => { :with => /http:\/\/.*\/bigbluebutton\/api/,
|
19
|
+
:message => I18n.t('bigbluebutton_rails.servers.errors.url_format') }
|
12
20
|
|
13
|
-
validates :
|
21
|
+
validates :param,
|
22
|
+
:presence => true,
|
23
|
+
:uniqueness => true,
|
24
|
+
:length => { :minimum => 3 },
|
25
|
+
:format => { :with => /^[a-zA-Z\d_]+[a-zA-Z\d_-]*[a-zA-Z\d_]+$/,
|
26
|
+
:message => I18n.t('bigbluebutton_rails.servers.errors.param_format') }
|
14
27
|
|
15
|
-
validates :
|
28
|
+
validates :salt,
|
29
|
+
:presence => true,
|
30
|
+
:length => { :minimum => 1, :maximum => 500 }
|
31
|
+
|
32
|
+
validates :version,
|
33
|
+
:presence => true,
|
34
|
+
:inclusion => { :in => ['0.64', '0.7'] }
|
35
|
+
|
36
|
+
attr_accessible :name, :url, :version, :salt, :param
|
16
37
|
|
17
38
|
# Array of <tt>BigbluebuttonMeeting</tt>
|
18
39
|
attr_reader :meetings
|
19
40
|
|
20
41
|
after_initialize :init
|
42
|
+
before_validation :set_param
|
21
43
|
|
22
44
|
# Returns the API object (<tt>BigBlueButton::BigBlueButtonAPI</tt> defined in
|
23
45
|
# <tt>bigbluebutton-api-ruby</tt>) associated with this server.
|
@@ -43,19 +65,26 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
43
65
|
response[:meetings].each do |attr|
|
44
66
|
room = BigbluebuttonRoom.find_by_server_id_and_meetingid(self.id, attr[:meetingID])
|
45
67
|
if room.nil?
|
46
|
-
room = BigbluebuttonRoom.
|
47
|
-
|
48
|
-
|
68
|
+
room = BigbluebuttonRoom.create(:server => self, :meetingid => attr[:meetingID],
|
69
|
+
:name => attr[:meetingID], :attendee_password => attr[:attendeePW],
|
70
|
+
:moderator_password => attr[:moderatorPW], :external => true,
|
71
|
+
:randomize_meetingid => false)
|
49
72
|
else
|
50
73
|
room.update_attributes(:attendee_password => attr[:attendeePW],
|
51
74
|
:moderator_password => attr[:moderatorPW])
|
52
|
-
room.running = attr[:running]
|
53
75
|
end
|
76
|
+
room.running = attr[:running]
|
77
|
+
|
78
|
+
# TODO What if the update/save above fails?
|
54
79
|
|
55
80
|
@meetings << room
|
56
81
|
end
|
57
82
|
end
|
58
83
|
|
84
|
+
def to_param
|
85
|
+
self.param
|
86
|
+
end
|
87
|
+
|
59
88
|
protected
|
60
89
|
|
61
90
|
def init
|
@@ -63,4 +92,11 @@ class BigbluebuttonServer < ActiveRecord::Base
|
|
63
92
|
@meetings = []
|
64
93
|
end
|
65
94
|
|
95
|
+
# if :param wasn't set, sets it as :name downcase and parameterized
|
96
|
+
def set_param
|
97
|
+
if self.param.blank?
|
98
|
+
self.param = self.name.parameterize.downcase unless self.name.nil?
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
66
102
|
end
|
@@ -60,6 +60,14 @@
|
|
60
60
|
<%= f.label :max_participants %><br />
|
61
61
|
<%= f.text_field :max_participants %>
|
62
62
|
</div>
|
63
|
+
<div class="field">
|
64
|
+
<%= f.label :external %><br />
|
65
|
+
<%= f.check_box :external %>
|
66
|
+
</div>
|
67
|
+
<div class="field">
|
68
|
+
<%= f.label :param %><br />
|
69
|
+
<%= f.text_field :param %>
|
70
|
+
</div>
|
63
71
|
<div class="actions">
|
64
72
|
<%= f.submit %>
|
65
73
|
</div>
|
@@ -1,46 +1,37 @@
|
|
1
1
|
<h1>Listing <%= BigbluebuttonRoom.model_name.human %>:</h1>
|
2
2
|
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
<th><%= BigbluebuttonRoom.human_attribute_name(:meeting_name) %></th>
|
9
|
-
<th><%= BigbluebuttonRoom.human_attribute_name(:private) %></th>
|
10
|
-
<th><%= BigbluebuttonRoom.human_attribute_name(:attendee_password) %></th>
|
11
|
-
<th><%= BigbluebuttonRoom.human_attribute_name(:moderator_password) %></th>
|
12
|
-
<th><%= BigbluebuttonRoom.human_attribute_name(:welcome_msg) %></th>
|
13
|
-
<th><%= BigbluebuttonRoom.human_attribute_name(:logout_url) %></th>
|
14
|
-
<th><%= BigbluebuttonRoom.human_attribute_name(:dial_number) %></th>
|
15
|
-
<th><%= BigbluebuttonRoom.human_attribute_name(:voice_bridge) %></th>
|
16
|
-
<th><%= BigbluebuttonRoom.human_attribute_name(:max_participants) %></th>
|
17
|
-
<th></th>
|
18
|
-
<th></th>
|
19
|
-
<th></th>
|
20
|
-
</tr>
|
3
|
+
<div id="bbbrails_rooms_links">
|
4
|
+
<%= link_to 'Back to server', bigbluebutton_server_path(@server) %> |
|
5
|
+
<%= link_to 'Back to server list', bigbluebutton_servers_path %><br/>
|
6
|
+
<%= link_to 'New room', new_bigbluebutton_server_room_path %>
|
7
|
+
</div>
|
21
8
|
|
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
|
-
<%= link_to '
|
9
|
+
<ul id="bbbrails_rooms_list">
|
10
|
+
<% @rooms.each do |room| %>
|
11
|
+
<li>
|
12
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:server_id) %></label> <%= room.server_id %></div>
|
13
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:meetingid) %></label> <%= room.meetingid %></div>
|
14
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:randomize_meetingid) %></label> <%= room.randomize_meetingid %></div>
|
15
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:name) %></label> <%= room.name %></div>
|
16
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:private) %></label> <%= room.private %></div>
|
17
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:attendee_password) %></label> <%= room.attendee_password %></div>
|
18
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:moderator_password) %></label> <%= room.moderator_password %></div>
|
19
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:welcome_msg) %></label> <%= room.welcome_msg %></div>
|
20
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:logout_url) %></label> <%= room.logout_url %></div>
|
21
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:dial_number) %></label> <%= room.dial_number %></div>
|
22
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:voice_bridge) %></label> <%= room.voice_bridge %></div>
|
23
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:max_participants) %></label> <%= room.max_participants %></div>
|
24
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:external) %></label> <%= room.external %></div>
|
25
|
+
<div class="field"><label><%= BigbluebuttonRoom.human_attribute_name(:param) %></label> <%= room.param %></div>
|
26
|
+
<div class="field"><label>Access</label>
|
27
|
+
<%= link_to 'Show', bigbluebutton_server_room_path(@server, room) %> |
|
28
|
+
<%= link_to 'Join', join_bigbluebutton_server_room_path(@server, room) %> |
|
29
|
+
<%= link_to 'Invite', invite_bigbluebutton_server_room_path(@server, room) %> |
|
30
|
+
<%= link_to 'Mobile Join', join_mobile_bigbluebutton_server_room_path(@server, room) %> |
|
31
|
+
<%= link_to 'Edit', edit_bigbluebutton_server_room_path(@server, room) %> |
|
32
|
+
<%= link_to 'End', end_bigbluebutton_server_room_path(@server, room), :confirm => 'Are you sure?' %> |
|
33
|
+
<%= link_to 'Destroy', bigbluebutton_server_room_path(@server, room), :confirm => 'Are you sure?', :method => :delete %>
|
34
|
+
</div>
|
35
|
+
</li>
|
36
|
+
<% end %>
|
37
|
+
</ul>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<h1>Mobile access to <%= @room.name %></h1>
|
2
|
+
|
3
|
+
<div style="text-align:center; width:250px;">
|
4
|
+
<a href="<%= @join_url %>"><b>Click here</b><br/>to join from a mobile device</a><br><br/>
|
5
|
+
<span>Or scan the code below:</span><br/>
|
6
|
+
<img src="<%= qrcode_url(@join_url) %>" style="float:left; border:1px solid #ccc;"/>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
|
@@ -50,6 +50,14 @@
|
|
50
50
|
<b><%= BigbluebuttonRoom.human_attribute_name(:max_participants) %>:</b>
|
51
51
|
<%= @room.max_participants %>
|
52
52
|
</p>
|
53
|
+
<p>
|
54
|
+
<b><%= BigbluebuttonRoom.human_attribute_name(:external) %>:</b>
|
55
|
+
<%= @room.external %>
|
56
|
+
</p>
|
57
|
+
<p>
|
58
|
+
<b><%= BigbluebuttonRoom.human_attribute_name(:param) %>:</b>
|
59
|
+
<%= @room.param %>
|
60
|
+
</p>
|
53
61
|
|
54
62
|
<%= link_to 'Edit', edit_bigbluebutton_server_room_path(@room.server, @room) %> |
|
55
63
|
<%= link_to 'Back', bigbluebutton_server_rooms_path(@room.server) %>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<% @server.meetings.each do |room| %>
|
2
|
+
<div class="bbbrails_meeting_description">
|
3
|
+
<div class="title_bar">
|
4
|
+
<% unless room.new_record? %>
|
5
|
+
<div class="button_bar">
|
6
|
+
<%= link_to 'Show', bigbluebutton_server_room_path(@server, room) %>
|
7
|
+
<%= link_to 'Edit', edit_bigbluebutton_server_room_path(@server, room) %>
|
8
|
+
<%= link_to 'Destroy', bigbluebutton_server_room_path(@server, room), :confirm => 'Are you sure?', :method => :delete %>
|
9
|
+
</div>
|
10
|
+
<div class="button_bar">
|
11
|
+
<%= link_to 'Join', join_bigbluebutton_server_room_path(@server, room) %>
|
12
|
+
<%= link_to 'Mobile Join', join_mobile_bigbluebutton_server_room_path(@server, room) %>
|
13
|
+
<%= link_to 'End', end_bigbluebutton_server_room_path(@server, room), :confirm => 'Are you sure?' %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
16
|
+
<b><%= room.name %></b> (ID: <%= room.meetingid %>) -
|
17
|
+
<% if room.is_running? %>
|
18
|
+
<span class="running">Running!</span>
|
19
|
+
<% else %>
|
20
|
+
<span class="not_running">Not running</span>
|
21
|
+
<% end %>
|
22
|
+
</div>
|
23
|
+
<% unless room.start_time.nil? %>
|
24
|
+
Started at: <%= room.start_time.strftime("%F, %R UTC%z") %><br/>
|
25
|
+
<% end %>
|
26
|
+
<% unless room.end_time.nil? %>
|
27
|
+
Ended at: <%= room.end_time.strftime("%F, %R UTC%z") %> (forcibly ended: <%= room.has_been_forcibly_ended %>)
|
28
|
+
<% end %>
|
29
|
+
<% unless room.attendees.count == 0 %>
|
30
|
+
Participants (<%= room.participant_count %> total, <%= room.moderator_count %> moderators):
|
31
|
+
<div class="bbbrails_meeting_attendees">
|
32
|
+
<div class="header">
|
33
|
+
<div class="field">Role</div>
|
34
|
+
<div class="field">ID</div>
|
35
|
+
<div class="field">Name</div>
|
36
|
+
</div>
|
37
|
+
<% room.attendees.each do |attendee| %>
|
38
|
+
<div class="row">
|
39
|
+
<div class="field"><%= attendee.role %></div>
|
40
|
+
<div class="field"><%= attendee.user_id %></div>
|
41
|
+
<div class="field"><%= attendee.full_name %></div>
|
42
|
+
</div>
|
43
|
+
<% end %>
|
44
|
+
</div>
|
45
|
+
<% end %>
|
46
|
+
<div style="clear:both;"></div>
|
47
|
+
</div>
|
48
|
+
<% end %>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<script type="text/javascript">
|
2
|
+
var serverActivityCountdown = 0
|
3
|
+
var serverActivityCountdownInterval = 30 // in seconds
|
4
|
+
|
5
|
+
function serverActivityUpdateMeetingsLoad() {
|
6
|
+
$("#bbbrails_server_activity_meetings").load("<%= activity_bigbluebutton_server_path(@server, :update_list => true) %>", serverActivityUpdateMeetingsEnd());
|
7
|
+
}
|
8
|
+
|
9
|
+
function serverActivityUpdateMeetingsStart() {
|
10
|
+
clearInterval(serverActivityCountdown);
|
11
|
+
$(".bbbrails_countdown_value").html("Now...");
|
12
|
+
serverActivityUpdateMeetingsLoad();
|
13
|
+
}
|
14
|
+
|
15
|
+
function serverActivityUpdateMeetingsEnd() {
|
16
|
+
$(".bbbrails_countdown_value").html("Done!");
|
17
|
+
serverActivitySetCountdown();
|
18
|
+
}
|
19
|
+
|
20
|
+
function serverActivitySetCountdown() {
|
21
|
+
var count = serverActivityCountdownInterval;
|
22
|
+
serverActivityCountdown = setInterval(function(){
|
23
|
+
$(".bbbrails_countdown_value").html(count + " seconds");
|
24
|
+
if (count == 0) {
|
25
|
+
serverActivityUpdateMeetingsStart();
|
26
|
+
}
|
27
|
+
count--;
|
28
|
+
}, 1000);
|
29
|
+
}
|
30
|
+
|
31
|
+
$(document).ready(function(){
|
32
|
+
serverActivitySetCountdown();
|
33
|
+
|
34
|
+
$('.bbbrails_countdown a.bbbrails_refresh_now').click(function() {
|
35
|
+
serverActivityUpdateMeetingsStart();
|
36
|
+
return false;
|
37
|
+
});
|
38
|
+
});
|
39
|
+
|
40
|
+
</script>
|
41
|
+
|
42
|
+
<div class="bbbrails_countdown">
|
43
|
+
Refreshing in: <span class="bbbrails_countdown_value"></span>
|
44
|
+
(<a class="bbbrails_refresh_now" href="<%= activity_bigbluebutton_server_path(@server) %>">refresh now</a>)
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<h1>Server activity monitor:</h1>
|
48
|
+
|
49
|
+
<div id="bbbrails_server_activity_meetings">
|
50
|
+
<%= render :partial => 'activity_list' %>
|
51
|
+
</div>
|
@@ -1,29 +1,25 @@
|
|
1
1
|
<h1>Listing <%= BigbluebuttonServer.model_name.human %>:</h1>
|
2
2
|
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
<th><%= BigbluebuttonServer.human_attribute_name(:url) %></th>
|
7
|
-
<th><%= BigbluebuttonServer.human_attribute_name(:salt) %></th>
|
8
|
-
<th><%= BigbluebuttonServer.human_attribute_name(:version) %></th>
|
9
|
-
<th></th>
|
10
|
-
<th></th>
|
11
|
-
<th></th>
|
12
|
-
</tr>
|
3
|
+
<div id="bbbrails_servers_links">
|
4
|
+
<%= link_to 'New server', new_bigbluebutton_server_path %>
|
5
|
+
</div>
|
13
6
|
|
14
|
-
|
15
|
-
|
16
|
-
<
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
7
|
+
<ul id="bbbrails_servers_list">
|
8
|
+
<% @servers.each do |server| %>
|
9
|
+
<li>
|
10
|
+
<div><label><%= BigbluebuttonServer.human_attribute_name(:name) %></label> <%= server.name %></div>
|
11
|
+
<div><label><%= BigbluebuttonServer.human_attribute_name(:url) %></label> <%= server.url %></div>
|
12
|
+
<div><label><%= BigbluebuttonServer.human_attribute_name(:salt) %></label> <%= server.salt %></div>
|
13
|
+
<div><label><%= BigbluebuttonServer.human_attribute_name(:version) %></label> <%= server.version %></div>
|
14
|
+
<div><label><%= BigbluebuttonServer.human_attribute_name(:param) %></label> <%= server.param %></div>
|
15
|
+
<div><label>Access</label>
|
16
|
+
<%= link_to 'Show', server %> |
|
17
|
+
<%= link_to 'View rooms', bigbluebutton_server_rooms_path(server) %> |
|
18
|
+
<%= link_to 'Activity monitor', activity_bigbluebutton_server_path(server) %> |
|
19
|
+
<%= link_to 'Edit', edit_bigbluebutton_server_path(server) %> |
|
20
|
+
<%= link_to 'Destroy', server, :confirm => 'Are you sure?', :method => :delete %>
|
21
|
+
</div>
|
22
|
+
</li>
|
23
|
+
<% end %>
|
24
|
+
</ul>
|
26
25
|
|
27
|
-
<br />
|
28
|
-
|
29
|
-
<%= link_to 'New Server', new_bigbluebutton_server_path %>
|
@@ -22,6 +22,11 @@
|
|
22
22
|
<%= @server.version %>
|
23
23
|
</p>
|
24
24
|
|
25
|
+
<p>
|
26
|
+
<b><%= BigbluebuttonServer.human_attribute_name(:param) %>:</b>
|
27
|
+
<%= @server.param %>
|
28
|
+
</p>
|
29
|
+
|
25
30
|
|
26
31
|
<%= link_to 'Edit', edit_bigbluebutton_server_path(@server) %> |
|
27
32
|
<%= link_to 'Back', bigbluebutton_servers_path %>
|
data/bigbluebutton_rails.gemspec
CHANGED
@@ -6,22 +6,25 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.version = BigbluebuttonRails::VERSION.dup
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.summary = "BigBlueButton integration for Ruby on Rails"
|
9
|
-
s.email = "mconf@googlegroups.com"
|
9
|
+
s.email = "mconf-dev@googlegroups.com"
|
10
10
|
s.homepage = "http://github.com/mconf/bigbluebutton_rails"
|
11
|
-
s.description = "It allows you to interact with
|
12
|
-
s.authors = ['Leonardo Crauss Daronco']
|
11
|
+
s.description = "It allows you to interact with BigBlueButton from your Ruby on Rails application"
|
12
|
+
s.authors = ['Mconf', 'Leonardo Crauss Daronco']
|
13
13
|
|
14
14
|
s.files = `git ls-files`.split("\n")
|
15
15
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
|
18
|
-
s.add_runtime_dependency("rails", "
|
18
|
+
s.add_runtime_dependency("rails", ">= 3.0.3")
|
19
19
|
s.add_runtime_dependency("bigbluebutton-api-ruby", "~> 0.0.10")
|
20
20
|
|
21
|
-
s.add_development_dependency("rspec-rails", "~> 2.
|
21
|
+
s.add_development_dependency("rspec-rails", "~> 2.6.0")
|
22
22
|
s.add_development_dependency("factory_girl", "~> 1.3.2")
|
23
23
|
s.add_development_dependency("sqlite3-ruby", "~> 1.3.3")
|
24
24
|
s.add_development_dependency("generator_spec", "~> 0.8.2")
|
25
25
|
s.add_development_dependency("shoulda-matchers", "~> 1.0.0.beta")
|
26
26
|
s.add_development_dependency("forgery", "~> 0.3.7")
|
27
|
-
|
27
|
+
s.add_development_dependency("cucumber-rails", "~> 0.5.2")
|
28
|
+
s.add_development_dependency("database_cleaner", "~> 0.6.7")
|
29
|
+
s.add_development_dependency("rdoc", "~> 3.6.0")
|
30
|
+
end
|