Merge pull request #97 from zach-chai/room_rework

Room rework
This commit is contained in:
Zachary Chai 2017-01-26 16:06:09 -08:00 committed by GitHub
commit 0ce2a226a7
5 changed files with 77 additions and 26 deletions

View File

@ -134,19 +134,6 @@
} }
}); });
$('.center-panel-wrapper').on('keyup', '.meeting-name', function (event, msg) {
var newId = $(this).val();
Meeting.getInstance().setMeetingId(newId);
$(".page-wrapper.meetings").data('id', newId);
$('.meeting-url').val(Meeting.getInstance().getURL());
$('.join-meeting-title').html(I18n.join_title.replace(/%{id}/, newId));
if (newId === '') {
$('.invite-join-wrapper').addClass('hidden');
} else {
$('.invite-join-wrapper').removeClass('hidden');
}
});
// enable tooltips // enable tooltips
var options = { var options = {
selector: '.has-tooltip', selector: '.has-tooltip',
@ -172,6 +159,19 @@
var initIndex = function() { var initIndex = function() {
$('.center-panel-wrapper').on('keyup', '.meeting-name', function (event, msg) {
var newId = $(this).val();
Meeting.getInstance().setMeetingId(newId);
$(".page-wrapper.meetings").data('id', newId);
$('.meeting-url').val(Meeting.getInstance().getURL());
$('.join-meeting-title').html(I18n.join_title.replace(/%{id}/, newId));
if (newId === '') {
$('.invite-join-wrapper').addClass('hidden');
} else {
$('.invite-join-wrapper').removeClass('hidden');
}
});
$('ul.previously-joined').empty(); $('ul.previously-joined').empty();
var joinedMeetings = localStorage.getItem('joinedMeetings'); var joinedMeetings = localStorage.getItem('joinedMeetings');
if (joinedMeetings && joinedMeetings.length > 0) { if (joinedMeetings && joinedMeetings.length > 0) {
@ -191,6 +191,15 @@
var initRooms = function() { var initRooms = function() {
displayRoomURL(); displayRoomURL();
$('.center-panel-wrapper').on('keyup', '.meeting-name', function (event, msg) {
var newName = $(this).val();
// Meeting.getInstance().setMeetingId(newId);
Meeting.getInstance().setMeetingName(newName);
// $(".page-wrapper.meetings").data('id', newId);
// $('.meeting-url').val(Meeting.getInstance().getURL());
// $('.join-meeting-title').html(I18n.join_title.replace(/%{id}/, newId));
});
Recordings.getInstance().refresh(); Recordings.getInstance().refresh();
Recordings.getInstance().setupActionHandlers(); Recordings.getInstance().setupActionHandlers();
}; };

View File

@ -19,7 +19,7 @@
_meetingInstance = null _meetingInstance = null
class @Meeting class @Meeting
constructor: (@meetingId, @type, @userName) -> constructor: (@meetingId, @type, @userName, @meetingName) ->
# Gets the current instance or creates a new one # Gets the current instance or creates a new one
@getInstance: -> @getInstance: ->
@ -35,8 +35,12 @@ class @Meeting
@clear: -> @clear: ->
_meetingInstance = null _meetingInstance = null
@buildMeetingURL: (id, type) -> @buildMeetingURL: (id, type, name) ->
return @buildFullDomainURL() + '/' + type + '/' + encodeURIComponent(id) if name
name = '/' + encodeURIComponent(name)
else
name = ''
return @buildFullDomainURL() + '/' + type + '/' + encodeURIComponent(id) + name
@buildFullDomainURL: -> @buildFullDomainURL: ->
url = location.protocol + '//' + location.hostname url = location.protocol + '//' + location.hostname
@ -80,6 +84,10 @@ class @Meeting
@meetingId = id @meetingId = id
return this return this
setMeetingName: (name) ->
@meetingName = name
return this
getType: -> getType: ->
return @type return @type
@ -88,7 +96,7 @@ class @Meeting
return this return this
getURL: -> getURL: ->
return Meeting.buildMeetingURL(@meetingId, @type) return Meeting.buildMeetingURL(@meetingId, @type, @meetingName)
getUserName: -> getUserName: ->
return @userName return @userName

View File

@ -26,15 +26,34 @@ class BbbController < ApplicationController
# GET /:resource/:id/join # GET /:resource/:id/join
def join def join
if params[:name].blank? if params[:name].blank?
render_bbb_response("missing_parameter", "user name was not included", :unprocessable_entity) return render_bbb_response(
messageKey: "missing_parameter",
message: "user name was not included",
status: :unprocessable_entity
)
else else
if params[:room_id]
user = User.find_by encrypted_id: params[:room_id]
if !user
return render_bbb_response(
messageKey: "not_found",
message: "User Not Found",
status: :not_found
)
end
meeting_id = params[:room_id]
meeting_name = params[:id]
else
meeting_id = params[:id]
user = User.find_by encrypted_id: params[:id] user = User.find_by encrypted_id: params[:id]
end
options = if user options = if user
{ {
wait_for_moderator: true, wait_for_moderator: true,
meeting_recorded: true, meeting_recorded: true,
meeting_name: user.name, meeting_name: meeting_name,
user_is_moderator: current_user == user user_is_moderator: current_user == user
} }
else else
@ -42,23 +61,24 @@ class BbbController < ApplicationController
user_is_moderator: true user_is_moderator: true
} }
end end
base_url = "#{request.base_url}/#{params[:resource]}/#{params[:id]}"
base_url = "#{request.base_url}/#{params[:resource]}/#{meeting_id}"
options[:meeting_logout_url] = base_url options[:meeting_logout_url] = base_url
options[:hook_url] = "#{base_url}/callback" options[:hook_url] = "#{base_url}/callback"
bbb_res = bbb_join_url( bbb_res = bbb_join_url(
params[:id], meeting_id,
params[:name], params[:name],
options options
) )
# the user can join the meeting # the user can join the meeting
if bbb_res[:returncode] && current_user && current_user == user if bbb_res[:returncode] && current_user && current_user == user
JoinMeetingJob.perform_later(params[:id]) JoinMeetingJob.perform_later(meeting_id)
# user will be waiting for a moderator # user will be waiting for a moderator
else else
NotifyUserWaitingJob.perform_later(params[:id], params[:name]) NotifyUserWaitingJob.perform_later(meeting_id, params[:name])
end end
render_bbb_response bbb_res, bbb_res[:response] render_bbb_response bbb_res, bbb_res[:response]

View File

@ -30,10 +30,23 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<%= render layout: 'shared/center_panel' do %> <%= render layout: 'shared/center_panel' do %>
<div class="center-block center-panel-content-size col-xs-12"> <div class="center-block center-panel-content-size col-xs-12">
<% if admin? %> <% if admin? %>
<%= render 'shared/meeting_url', hidden: false %> <%= render 'shared/meeting_name_form' %>
<% else %> <div class="invite-join-wrapper">
<%= render 'shared/meeting_url', hidden: true %> <div class="col-xs-6">
<%= render 'shared/title', title: t('invite') do %>
<span><%= t('invite_description') %></span>
<% end %> <% end %>
<%= render 'shared/meeting_url', hidden: false %>
</div>
<div class="verticle-line"></div>
<div class="col-xs-6">
<%= render 'shared/title', title: t('join'), title_class: 'join-meeting-title' %>
<%= render 'shared/join_form' %> <%= render 'shared/join_form' %>
</div> </div>
</div>
<% else %>
<%= render 'shared/meeting_url', hidden: true %>
<%= render 'shared/join_form' %>
<% end %>
</div>
<% end %> <% end %>

View File

@ -34,6 +34,7 @@ Rails.application.routes.draw do
get '/:resource/:id/session_status_refresh', to: 'landing#session_status_refresh' get '/:resource/:id/session_status_refresh', to: 'landing#session_status_refresh'
post '/:resource/:id/callback', to: 'bbb#callback' #, defaults: {format: 'json'} post '/:resource/:id/callback', to: 'bbb#callback' #, defaults: {format: 'json'}
delete '/rooms/:id/end', to: 'bbb#end', defaults: {format: 'json'} delete '/rooms/:id/end', to: 'bbb#end', defaults: {format: 'json'}
get '/:resource/:room_id/:id/join', to: 'bbb#join', defaults: {format: 'json'}
get '/rooms/:id/recordings', to: 'bbb#recordings', defaults: {format: 'json'} get '/rooms/:id/recordings', to: 'bbb#recordings', defaults: {format: 'json'}
patch '/rooms/:id/recordings/:record_id', to: 'bbb#update_recordings', defaults: {format: 'json'} patch '/rooms/:id/recordings/:record_id', to: 'bbb#update_recordings', defaults: {format: 'json'}
delete '/rooms/:id/recordings/:record_id', to: 'bbb#delete_recordings', defaults: {format: 'json'} delete '/rooms/:id/recordings/:record_id', to: 'bbb#delete_recordings', defaults: {format: 'json'}