From c4eeee3d40414401f297bdd26cb9026cc127a484 Mon Sep 17 00:00:00 2001 From: shawn-higgins1 <23224097+shawn-higgins1@users.noreply.github.com> Date: Mon, 22 Jul 2019 15:39:49 -0400 Subject: [PATCH] Add setting for recording visibility (#634) --- app/controllers/admins_controller.rb | 9 +++++++- app/controllers/application_controller.rb | 2 ++ app/helpers/admins_helper.rb | 9 ++++++++ app/models/room.rb | 2 +- .../admins/components/_settings.html.erb | 21 +++++++++++++++++++ config/locales/en.yml | 6 ++++++ config/routes.rb | 1 + spec/controllers/admins_controller_spec.rb | 16 ++++++++++++++ 8 files changed, 64 insertions(+), 2 deletions(-) diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb index 8a128b23..193cc4ff 100644 --- a/app/controllers/admins_controller.rb +++ b/app/controllers/admins_controller.rb @@ -24,7 +24,7 @@ class AdminsController < ApplicationController manage_users = [:edit_user, :promote, :demote, :ban_user, :unban_user, :approve] site_settings = [:branding, :coloring, :coloring_lighten, :coloring_darken, - :registration_method, :room_authentication, :room_limit] + :registration_method, :room_authentication, :room_limit, :default_recording_visibility] authorize_resource class: false before_action :find_user, only: manage_users @@ -176,6 +176,13 @@ class AdminsController < ApplicationController redirect_to admin_site_settings_path, flash: { success: I18n.t("administrator.flash.settings") } end + # POST /admins/default_recording_visibility + def default_recording_visibility + @settings.update_value("Default Recording Visibility", params[:visibility]) + redirect_to admins_path, flash: { success: I18n.t("administrator.flash.settings") + ". " + + I18n.t("administrator.site_settings.recording_visibility.warning") } + end + private def find_user diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index fc86a331..125db706 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -106,6 +106,8 @@ class ApplicationController < ActionController::Base meeting_logout_url: request.base_url + logout_room_path(@room), meeting_recorded: true, moderator_message: "#{invite_msg}\n\n#{request.base_url + room_path(@room)}", + recording_default_visibility: Setting.find_or_create_by!(provider: user_settings_provider) + .get_value("Default Recording Visibility") == "public" } end diff --git a/app/helpers/admins_helper.rb b/app/helpers/admins_helper.rb index 40193283..faf4b1cd 100644 --- a/app/helpers/admins_helper.rb +++ b/app/helpers/admins_helper.rb @@ -55,6 +55,15 @@ module AdminsHelper end end + def recording_default_visibility_string + if Setting.find_or_create_by!(provider: user_settings_provider) + .get_value("Default Recording Visibility") == "public" + I18n.t("administrator.site_settings.recording_visibility.public") + else + I18n.t("administrator.site_settings.recording_visibility.private") + end + end + def registration_method_string case registration_method when Rails.configuration.registration_methods[:open] diff --git a/app/models/room.rb b/app/models/room.rb index 728278fd..09bbc70e 100644 --- a/app/models/room.rb +++ b/app/models/room.rb @@ -56,7 +56,7 @@ class Room < ApplicationRecord attendeePW: attendee_pw, moderatorOnlyMessage: options[:moderator_message], muteOnStart: options[:mute_on_start] || false, - "meta_#{META_LISTED}": false, + "meta_#{META_LISTED}": options[:recording_default_visibility] || false } # Send the create request. diff --git a/app/views/admins/components/_settings.html.erb b/app/views/admins/components/_settings.html.erb index e9721d84..a32cfe0a 100644 --- a/app/views/admins/components/_settings.html.erb +++ b/app/views/admins/components/_settings.html.erb @@ -98,6 +98,27 @@ + +
+
+
+ + + +
+
diff --git a/config/locales/en.yml b/config/locales/en.yml index de2128b1..fceae826 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -48,6 +48,12 @@ en: regular: Regular lighten: Lighten Darken: Darken + recording_visibility: + public: Public + private: Private + info: Set the default recording visbility for new recordings + title: Recording Default Visibility + warning: This setting will only be applied to rooms that aren't running registration: info: Change the way that users register to the website title: Registration Method diff --git a/config/routes.rb b/config/routes.rb index 1155b2ac..445103d9 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -54,6 +54,7 @@ Rails.application.routes.draw do post '/registration_method/:method', to: 'admins#registration_method', as: :admin_change_registration post '/approve/:user_uid', to: 'admins#approve', as: :admin_approve post '/room_limit', to: 'admins#room_limit', as: :admin_room_limit + post '/default_recording_visibility', to: 'admins#default_recording_visibility', as: :admin_recording_visibility end scope '/themes' do diff --git a/spec/controllers/admins_controller_spec.rb b/spec/controllers/admins_controller_spec.rb index d03576ca..e114743b 100644 --- a/spec/controllers/admins_controller_spec.rb +++ b/spec/controllers/admins_controller_spec.rb @@ -312,5 +312,21 @@ describe AdminsController, type: :controller do expect(response).to redirect_to(admin_site_settings_path) end end + + context "POST #default_recording_visibility" do + it "changes the default recording visibility setting" do + allow(Rails.configuration).to receive(:loadbalanced_configuration).and_return(true) + allow_any_instance_of(User).to receive(:greenlight_account?).and_return(true) + + @request.session[:user_id] = @admin.id + + post :default_recording_visibility, params: { visibility: "public" } + + feature = Setting.find_by(provider: "provider1").features.find_by(name: "Default Recording Visibility") + + expect(feature[:value]).to eq("public") + expect(response).to redirect_to(admins_path) + end + end end end