Files
old-holivud2/app/controllers/broadcasts_controller.rb

127 lines
3.4 KiB
Ruby
Raw Normal View History

2020-05-31 22:38:19 +02:00
class BroadcastsController < ApplicationController
layout "project"
2020-06-03 17:14:04 +02:00
2020-05-31 22:38:19 +02:00
before_action :set_project
before_action :build_broadcast, only: [:new, :create]
before_action :set_broadcast, only: [:show, :destroy, :update]
before_action :set_multi_view_broadcasts, only: [:show]
2020-07-03 10:23:03 +02:00
before_action :show_splash_screen, only: :index
2020-05-31 22:38:19 +02:00
def index
@broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page])
end
def new
end
def create
@broadcast.attributes = broadcast_params
if @broadcast.save
log_create_analytics
redirect_to [@project, :broadcasts], notice: t(".notice")
else
render :new
end
end
def show
@conference_url = url_for [@broadcast.project, @broadcast, :zoom_meeting]
@recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
2020-06-03 17:14:04 +02:00
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
2020-05-31 22:38:19 +02:00
render layout: 'application'
end
2020-06-03 17:14:04 +02:00
def update
@broadcast.update(broadcast_params)
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
pagination_content = ApplicationController.render html: helpers.will_paginate(@files, params: { active_tab: params[:active_tab], page: params[:page], active_files_tab: params[:active_files_tab] })
BroadcastsChannel.broadcast_file_upload_updates(@broadcast, @files, pagination_content)
end
2020-05-31 22:38:19 +02:00
def destroy
if @broadcast.destroy
redirect_to [@project, :broadcasts], alert: t(".alert")
else
redirect_to [@project, :broadcasts], alert: t(".api_error")
end
end
private
2020-07-03 10:23:03 +02:00
def show_splash_screen
render :splash if broadcasts.count.zero?
end
2020-05-31 22:38:19 +02:00
def broadcast_params
params.require(:broadcast).permit(:name, files: [])
end
def set_project
@project = policy_scope(Project).find(params[:project_id])
end
def set_broadcast
@broadcast = authorize policy_scope(Broadcast).find(params[:id])
end
def build_broadcast
@broadcast = authorize @project.broadcasts.build
end
def broadcasts
authorize policy_scope(@project.broadcasts)
end
def set_multi_view_broadcasts
authorized_broadcasts = authorize policy_scope(Broadcast).where(id: params[:multi_view_ids]).order_by_recent
2020-06-03 17:14:04 +02:00
@multi_view_broadcasts = authorized_broadcasts.map do |b|
files_page = params[:files_page] if params[:active_files_tab] == b.token
MultiViewBroadcast.new(b, params[:multi_view_ids], files_page)
end
2020-05-31 22:38:19 +02:00
end
def filtered_broadcasts
results = broadcasts
if params[:query].present?
results = results.search(params[:query])
end
results
end
def log_create_analytics
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_live_stream, user_agent: request.user_agent, user_ip: request.remote_ip)
end
class MultiViewBroadcast
include Rails.application.routes.url_helpers
2020-06-03 17:14:04 +02:00
2020-05-31 22:38:19 +02:00
delegate_missing_to :@broadcast
2020-06-03 17:14:04 +02:00
def initialize(broadcast, multi_view_ids, paginate_page)
2020-05-31 22:38:19 +02:00
@broadcast = broadcast
@multi_view_ids = multi_view_ids
2020-06-03 17:14:04 +02:00
@paginate_page = paginate_page
2020-05-31 22:38:19 +02:00
end
def url
project_broadcast_path(@broadcast.project, @broadcast, multi_view_ids: @multi_view_ids, locale: I18n.locale)
end
2020-06-03 17:14:04 +02:00
def files
@broadcast.files.order("created_at DESC").paginate(page: @paginate_page)
end
2020-05-31 22:38:19 +02:00
def uid
id
end
2020-06-03 17:14:04 +02:00
def self.model_name
Broadcast.model_name
end
2020-05-31 22:38:19 +02:00
end
end