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 %>
+