diff --git a/app/assets/javascripts/room.js.erb b/app/assets/javascripts/room.js.erb index 892cf313..cb51cb9d 100644 --- a/app/assets/javascripts/room.js.erb +++ b/app/assets/javascripts/room.js.erb @@ -50,6 +50,7 @@ $(document).on('turbolinks:load', function(){ $("#createRoomModal form").attr("action", $("body").data('relative-root')) updateDropdown($(".dropdown-item[value='default']")) $("#room_mute_on_join").prop("checked", false) + $("#room_require_moderator_approval").prop("checked", false) $("#room_anyone_can_start").prop("checked", false) //show all elements & their children with a create-only class @@ -105,6 +106,12 @@ $(document).on('turbolinks:load', function(){ $("#room_mute_on_join").prop("checked", false) } + if(settings.requireModeratorApproval){ + $("#room_require_moderator_approval").prop("checked", true) + } else { //default option + $("#room_require_moderator_approval").prop("checked", false) + } + if(settings.anyoneCanStart){ $("#room_anyone_can_start").prop("checked", true) } else { //default option diff --git a/app/controllers/rooms_controller.rb b/app/controllers/rooms_controller.rb index 311d357c..f232ab06 100644 --- a/app/controllers/rooms_controller.rb +++ b/app/controllers/rooms_controller.rb @@ -39,7 +39,7 @@ class RoomsController < ApplicationController @room = Room.new(name: room_params[:name], access_code: room_params[:access_code]) @room.owner = current_user @room.room_settings = create_room_settings_string(room_params[:mute_on_join], room_params[:client], - room_params[:anyone_can_start]) + room_params[:require_moderator_approval], room_params[:anyone_can_start]) if @room.save if room_params[:auto_join] == "1" @@ -148,6 +148,7 @@ class RoomsController < ApplicationController room_settings = JSON.parse(@room[:room_settings]) opts[:mute_on_start] = room_settings["muteOnStart"] if room_settings["muteOnStart"] opts[:join_via_html5] = room_settings["joinViaHtml5"] if room_settings["joinViaHtml5"] + opts[:require_moderator_approval] = room_settings["requireModeratorApproval"] begin redirect_to @room.join_path(current_user.name, opts, current_user.uid) @@ -203,7 +204,7 @@ class RoomsController < ApplicationController @room.update_attributes(name: params[:room_name] || room_params[:name]) elsif update_type.eql? "settings" room_settings_string = create_room_settings_string(room_params[:mute_on_join], room_params[:client], - room_params[:anyone_can_start]) + room_params[:require_moderator_approval], room_params[:anyone_can_start]) @room.update_attributes(room_settings: room_settings_string) elsif update_type.eql? "access_code" @room.update_attributes(access_code: room_params[:access_code]) @@ -211,10 +212,12 @@ class RoomsController < ApplicationController end end - def create_room_settings_string(mute_res, client_res, start_res) + def create_room_settings_string(mute_res, client_res, require_approval_res, start_res) room_settings = {} room_settings["muteOnStart"] = mute_res == "1" + room_settings["requireModeratorApproval"] = require_approval_res == "1" + if client_res.eql? "html5" room_settings["joinViaHtml5"] = true elsif client_res.eql? "flash" @@ -227,7 +230,8 @@ class RoomsController < ApplicationController end def room_params - params.require(:room).permit(:name, :auto_join, :mute_on_join, :client, :access_code, :anyone_can_start) + params.require(:room).permit(:name, :auto_join, :mute_on_join, :client, :access_code, + :require_moderator_approval, :anyone_can_start) end # Find the room from the uid. @@ -305,6 +309,7 @@ class RoomsController < ApplicationController # Check if the user has specified which client to use opts[:join_via_html5] = room_settings["joinViaHtml5"] if room_settings["joinViaHtml5"] + opts[:require_moderator_approval] = room_settings["requireModeratorApproval"] if current_user redirect_to @room.join_path(current_user.name, opts, current_user.uid) diff --git a/app/models/room.rb b/app/models/room.rb index b3ee4713..1d68e232 100644 --- a/app/models/room.rb +++ b/app/models/room.rb @@ -62,6 +62,8 @@ class Room < ApplicationRecord "meta_bbb-origin-server-name": options[:host] } + create_options[:guestPolicy] = "ASK_MODERATOR" if options[:require_moderator_approval] + # Send the create request. begin meeting = bbb(owner.provider).create_meeting(name, bbb_id, create_options) @@ -104,6 +106,8 @@ class Room < ApplicationRecord join_opts[:userID] = uid if uid join_opts[:joinViaHtml5] = options[:join_via_html5] if options[:join_via_html5] + join_opts[:guest] = true if options[:require_moderator_approval] && !options[:user_is_moderator] + bbb(owner.provider).join_meeting_url(bbb_id, name, password, join_opts) end diff --git a/app/views/shared/modals/_create_room_modal.html.erb b/app/views/shared/modals/_create_room_modal.html.erb index e274f55f..e65b1b98 100644 --- a/app/views/shared/modals/_create_room_modal.html.erb +++ b/app/views/shared/modals/_create_room_modal.html.erb @@ -68,6 +68,14 @@ <% end %> + <% if Rails.configuration.room_features.include? "require-moderator-approval" %> + + <% end %> + <% if Rails.configuration.room_features.include? "anyone-can-start" %>