diff --git a/app/controllers/broadcasts_controller.rb b/app/controllers/broadcasts_controller.rb index fa93af8..bc7c561 100644 --- a/app/controllers/broadcasts_controller.rb +++ b/app/controllers/broadcasts_controller.rb @@ -18,25 +18,6 @@ class BroadcastsController < ApplicationController def create @broadcast.attributes = broadcast_params - begin - graph_api = MicrosoftGraph.new( - current_user, - ENV['AZURE_CLIENT_ID'], - ENV['AZURE_CLIENT_SECRET'], - ENV['AZURE_TENANT_ID'], - ENV['AZURE_SCOPES'] - ) - - subject = "#{@broadcast.name} Online Meeting" - teams_meeting = graph_api.create_teams_meeting(subject) - join_url = teams_meeting['joinUrl'] - @broadcast.microsoft_teams_meeting_url = join_url if join_url.present? - rescue StandardError => e - @broadcast.errors[:base] << e.message - render :new - return - end - if @broadcast.save log_create_analytics redirect_to [@project, :broadcasts], notice: t(".notice") @@ -46,8 +27,7 @@ class BroadcastsController < ApplicationController end def show - # @conference_url = url_for [@broadcast.project, @broadcast, :zoom_meeting] - @conference_url = @broadcast.microsoft_teams_meeting_url + @conference_url = url_for [@broadcast.project, @broadcast, :conference_meeting] @recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page]) @files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page]) render layout: 'application' @@ -93,7 +73,7 @@ class BroadcastsController < ApplicationController end def broadcast_params - params.require(:broadcast).permit(:name, :shoot_location_time_zone, files: []) + params.require(:broadcast).permit(:name, :shoot_location_time_zone, :conference_option, files: []) end def set_project diff --git a/app/controllers/conference_meetings_controller.rb b/app/controllers/conference_meetings_controller.rb new file mode 100644 index 0000000..2515ea7 --- /dev/null +++ b/app/controllers/conference_meetings_controller.rb @@ -0,0 +1,42 @@ +class ConferenceMeetingsController < ApplicationController + def show + authorize broadcast = Broadcast.find(params[:broadcast_id]) + case broadcast.conference_option + when 'zoom' + redirect_to broadcast.zoom_meeting_url + when 'ms_teams' + if broadcast.conference_join_url.nil? + begin + graph_api = MicrosoftGraph.new( + current_user, + ENV['AZURE_CLIENT_ID'], + ENV['AZURE_CLIENT_SECRET'], + ENV['AZURE_TENANT_ID'], + ENV['AZURE_SCOPES'] + ) + + subject = "#{broadcast.name} Online Meeting" + teams_meeting = graph_api.create_teams_meeting(subject) + join_url = teams_meeting['joinUrl'] + if join_url.present? + broadcast.conference_join_url = join_url + broadcast.save + else + raise StandardError, 'Failed to read teams meeting join URL' + end + rescue ActionController::InvalidAuthenticityToken => e + Rails.logger.error(e.message) + redirect_to project_broadcast_url(broadcast.project, broadcast), alert: 'You are not authenticated via Microsoft, please authenticate and try again' + return + rescue StandardError => e + Rails.logger.error(e.message) + redirect_to project_broadcast_url(broadcast.project, broadcast), alert: 'Failed to join conference' + return + end + end + redirect_to broadcast.conference_join_url + else + redirect_to project_broadcast_url(broadcast.project, broadcast), alert: 'Unknown conference option' + end + end +end \ No newline at end of file diff --git a/app/helpers/broadcast_conferences_helper.rb b/app/helpers/broadcast_conferences_helper.rb new file mode 100644 index 0000000..05ab097 --- /dev/null +++ b/app/helpers/broadcast_conferences_helper.rb @@ -0,0 +1,17 @@ +module BroadcastConferencesHelper + def options_for_conference_select + [ + ['Zoom', 'zoom'], + ['MS Teams', 'ms_teams'] + ] + end + + def conference_option_name_from_key(key) + option = options_for_conference_select.find { |option| option[1] == key } + if option.present? + option.first + else + 'Unknown conference option' + end + end +end \ No newline at end of file diff --git a/app/views/broadcasts/_form.html.erb b/app/views/broadcasts/_form.html.erb index 2efc4bd..b60665d 100644 --- a/app/views/broadcasts/_form.html.erb +++ b/app/views/broadcasts/_form.html.erb @@ -2,6 +2,7 @@ <%= bootstrap_form_with model: model, local: true do |form| %> <%= form.text_field :name %> + <%= form.select :conference_option, options_for_conference_select, { label: t('.labels.conference_option') }, class: "form-control custom-select" %> <%= form.time_zone_select(:shoot_location_time_zone, nil, label: "Time zone of shoot location") %>
If you want to join the ZOOM meeting dedicated to this broadcast, follow the link below.
- <%= link_to 'Video Conference', @conference_url, class: "btn btn-primary btn-block #{@conference_url.present? ? '' : 'disabled'}", target: '_blank' %> +<%= "If you want to join the #{conference_option_name_from_key(@broadcast.conference_option)} meeting dedicated to this broadcast, follow the link below." %>
+ <%= link_to 'Video Conference', @conference_url, class: "btn btn-primary btn-block", target: '_blank' %>