From d3a9ae32a92da97dcbfcec296d90e530eed70196 Mon Sep 17 00:00:00 2001 From: shawn-higgins1 <23224097+shawn-higgins1@users.noreply.github.com> Date: Tue, 23 Jul 2019 14:54:46 -0400 Subject: [PATCH] GRN2-202: Create a room in which everyone joins as Moderator (Fixed #628) (#650) * Room setting to allow anyone to start a room * Update sample.env * merge v2.2.1 --- app/assets/javascripts/room.js.erb | 7 ++++++ app/controllers/rooms_controller.rb | 25 +++++++++++++------ app/views/rooms/join.html.erb | 2 +- .../shared/modals/_create_room_modal.html.erb | 8 ++++++ config/locales/en.yml | 1 + sample.env | 3 ++- spec/controllers/rooms_controller_spec.rb | 21 +++++++++++++--- 7 files changed, 54 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/room.js.erb b/app/assets/javascripts/room.js.erb index 15893e68..892cf313 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_anyone_can_start").prop("checked", false) //show all elements & their children with a create-only class $(".create-only").each(function() { @@ -104,6 +105,12 @@ $(document).on('turbolinks:load', function(){ $("#room_mute_on_join").prop("checked", false) } + if(settings.anyoneCanStart){ + $("#room_anyone_can_start").prop("checked", true) + } else { //default option + $("#room_anyone_can_start").prop("checked", false) + } + //set dropdown value if (settings.joinViaHtml5) { updateDropdown($(".dropdown-item[value='html5']")) diff --git a/app/controllers/rooms_controller.rb b/app/controllers/rooms_controller.rb index 5a92f114..311d357c 100644 --- a/app/controllers/rooms_controller.rb +++ b/app/controllers/rooms_controller.rb @@ -38,7 +38,8 @@ 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.room_settings = create_room_settings_string(room_params[:mute_on_join], room_params[:client], + room_params[:anyone_can_start]) if @room.save if room_params[:auto_join] == "1" @@ -55,13 +56,15 @@ class RoomsController < ApplicationController # GET /:room_uid def show + @is_running = @room.running? + @anyone_can_start = JSON.parse(@room[:room_settings])["anyoneCanStart"] + if current_user && @room.owned_by?(current_user) @search, @order_column, @order_direction, recs = recordings(@room.bbb_id, @user_domain, params.permit(:search, :column, :direction), true) @pagy, @recordings = pagy_array(recs) - @is_running = @room.running? else # Get users name @name = if current_user @@ -199,7 +202,8 @@ class RoomsController < ApplicationController if update_type.eql? "name" @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_settings_string = create_room_settings_string(room_params[:mute_on_join], room_params[:client], + 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]) @@ -207,7 +211,7 @@ class RoomsController < ApplicationController end end - def create_room_settings_string(mute_res, client_res) + def create_room_settings_string(mute_res, client_res, start_res) room_settings = {} room_settings["muteOnStart"] = mute_res == "1" @@ -217,11 +221,13 @@ class RoomsController < ApplicationController room_settings["joinViaHtml5"] = false end + room_settings["anyoneCanStart"] = start_res == "1" + room_settings.to_json end def room_params - params.require(:room).permit(:name, :auto_join, :mute_on_join, :client, :access_code) + params.require(:room).permit(:name, :auto_join, :mute_on_join, :client, :access_code, :anyone_can_start) end # Find the room from the uid. @@ -289,12 +295,15 @@ class RoomsController < ApplicationController end def join_room(opts) - if @room.running? || @room.owned_by?(current_user) + room_settings = JSON.parse(@room[:room_settings]) + + if @room.running? || @room.owned_by?(current_user) || room_settings["anyoneCanStart"] + # Determine if the user needs to join as a moderator. - opts[:user_is_moderator] = @room.owned_by?(current_user) + opts[:user_is_moderator] = @room.owned_by?(current_user) || + (room_settings["anyoneCanStart"] && !@room.running?) # Check if the user has specified which client to use - room_settings = JSON.parse(@room[:room_settings]) opts[:join_via_html5] = room_settings["joinViaHtml5"] if room_settings["joinViaHtml5"] if current_user diff --git a/app/views/rooms/join.html.erb b/app/views/rooms/join.html.erb index 9cd55d5d..e457e6ad 100644 --- a/app/views/rooms/join.html.erb +++ b/app/views/rooms/join.html.erb @@ -40,7 +40,7 @@ placeholder: t("enter_your_name"), value: "#{@name}", readonly: !current_user.nil? %> - <%= f.submit t("room.join"), class: "btn btn-primary btn-sm col-sm-3 form-control join-form" %> + <%= f.submit (!@is_running && @anyone_can_start)? t("room.start") : t("room.join"), class: "btn btn-primary btn-sm col-sm-3 form-control join-form" %> <% end %> <% end %> diff --git a/app/views/shared/modals/_create_room_modal.html.erb b/app/views/shared/modals/_create_room_modal.html.erb index 658f6f9e..e274f55f 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? "anyone-can-start" %> + + <% end %> +