Compare commits
2 Commits
microsoft-
...
change-big
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
015ed83ac2 | ||
|
|
1045a8c328 |
17
.env.sample
17
.env.sample
@@ -7,6 +7,8 @@ AWS_SECRET_ACCESS_KEY=
|
||||
AWS_REGION=
|
||||
|
||||
BRAYNIAC_AI_API_ENDPOINT=https://z99cprg2eg.execute-api.us-east-1.amazonaws.com/dev/v0.0.1
|
||||
SOURCE_AUDIO_API_ENDPOINT=https://bigmedia.sourceaudio.com/api
|
||||
SOURCE_AUDIO_TOKEN=
|
||||
|
||||
# Optional
|
||||
REDIS_URL=
|
||||
@@ -14,6 +16,7 @@ REDIS_URL=
|
||||
# Required for Zoom.us integration
|
||||
ZOOM_API_KEY=
|
||||
ZOOM_API_SECRET=
|
||||
ZOOM_ACCOUNT_NUMBER=
|
||||
ZOOM_PRO_USERS_LIMIT= # defaults to 3
|
||||
ZOOM_USER_TYPE= # 'pro' / 'basic'
|
||||
ZOOM_ENABLE_RECORDINGS= # true / false (default: false)
|
||||
@@ -25,17 +28,3 @@ MUX_TOKEN_ID=
|
||||
MUX_TOKEN_SECRET=
|
||||
MUX_BROADCAST_SERVER_URL=rtmp://global-live.mux.com:5222/app
|
||||
MUX_TEST_MODE_DISABLED=
|
||||
|
||||
# Required for creating user through API
|
||||
CUSTOM_API_TOKEN=
|
||||
|
||||
# Required for simulcasting to Millicast for director mode
|
||||
MILLICAST_API_SECRET=
|
||||
MILLICAST_ACCOUNT_ID=
|
||||
|
||||
# Required for Microsoft Azure AD Auth
|
||||
AZURE_CLIENT_ID = Client App ID
|
||||
AZURE_CLIENT_SECRET = Client App Secret
|
||||
AZURE_TENANT_ID = Client App Tenant ID
|
||||
AZURE_REDIRECT_URI = where microsoft will redirect after login, eg. http://localhost:3000/auth/azure_ad/callback
|
||||
AZURE_SCOPES = Scopes required for Application, eg. 'openid email profile User.Read offline_access OnlineMeetings.ReadWrite'
|
||||
5
Gemfile
5
Gemfile
@@ -139,11 +139,6 @@ gem 'rack-cors'
|
||||
# Ruby wrappers for the HubSpot REST API
|
||||
gem "hubspot-ruby"
|
||||
|
||||
# OAuth
|
||||
gem 'omniauth-oauth2', '~> 1.6'
|
||||
# OmniAuth CSRF protection
|
||||
gem 'omniauth-rails_csrf_protection', '~> 0.1.2'
|
||||
|
||||
group :development, :test, :review do
|
||||
# Call "byebug" anywhere in the code to stop execution and get a debugger console
|
||||
gem "byebug", "~> 11.0.1", platforms: [:mri, :mingw, :x64_mingw]
|
||||
|
||||
19
Gemfile.lock
19
Gemfile.lock
@@ -220,7 +220,6 @@ GEM
|
||||
activesupport (>= 4.2.0)
|
||||
hashdiff (1.0.1)
|
||||
hashery (2.1.2)
|
||||
hashie (4.1.0)
|
||||
hexapdf (0.9.3)
|
||||
cmdparse (~> 3.0, >= 3.0.3)
|
||||
geom2d (~> 0.2)
|
||||
@@ -298,7 +297,6 @@ GEM
|
||||
money (~> 6.13.2)
|
||||
railties (>= 3.0)
|
||||
msgpack (1.3.1)
|
||||
multi_json (1.15.0)
|
||||
multi_xml (0.6.0)
|
||||
multipart-post (2.1.1)
|
||||
nio4r (2.5.2)
|
||||
@@ -310,21 +308,6 @@ GEM
|
||||
warden
|
||||
oath-generators (1.0.1)
|
||||
oath (>= 0.0.12)
|
||||
oauth2 (1.4.4)
|
||||
faraday (>= 0.8, < 2.0)
|
||||
jwt (>= 1.0, < 3.0)
|
||||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (>= 1.2, < 3)
|
||||
omniauth (1.9.1)
|
||||
hashie (>= 3.4.6)
|
||||
rack (>= 1.6.2, < 3)
|
||||
omniauth-oauth2 (1.6.0)
|
||||
oauth2 (~> 1.1)
|
||||
omniauth (~> 1.9)
|
||||
omniauth-rails_csrf_protection (0.1.2)
|
||||
actionpack (>= 4.2)
|
||||
omniauth (>= 1.3.1)
|
||||
parallel (1.19.1)
|
||||
parity (3.2.0)
|
||||
parser (2.6.5.0)
|
||||
@@ -569,8 +552,6 @@ DEPENDENCIES
|
||||
mux_ruby!
|
||||
oath (~> 1.1.0)
|
||||
oath-generators (~> 1.0.1)
|
||||
omniauth-oauth2 (~> 1.6)
|
||||
omniauth-rails_csrf_protection (~> 0.1.2)
|
||||
parity (~> 3.2.0)
|
||||
pdf-reader (~> 2.1.0)
|
||||
pdfkit (~> 0.8.2)
|
||||
|
||||
@@ -18,6 +18,7 @@ class AcquiredMediaReleasesController < ApplicationController
|
||||
@acquired_media_release = build_acquired_media_release(acquired_media_release_params)
|
||||
|
||||
if @acquired_media_release.save
|
||||
log_create_analytics
|
||||
SetTagsForReleasableJob.perform_later(@acquired_media_release)
|
||||
redirect_to [@project, :acquired_media_releases], notice: t(".notice")
|
||||
else
|
||||
@@ -118,8 +119,11 @@ class AcquiredMediaReleasesController < ApplicationController
|
||||
:term_id, :term_text,
|
||||
:restriction_id, :restriction_text,
|
||||
categories: [],
|
||||
files: []
|
||||
)
|
||||
file_infos_attributes: %i[
|
||||
filename
|
||||
content_type
|
||||
byte_size
|
||||
])
|
||||
end
|
||||
|
||||
def build_acquired_media_release(attrs = {})
|
||||
@@ -135,4 +139,8 @@ class AcquiredMediaReleasesController < ApplicationController
|
||||
|
||||
results
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_non_native_release, release_type: AcquiredMediaRelease.to_s, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -19,11 +19,6 @@ class Admin::BroadcastsController < Admin::ApplicationController
|
||||
end
|
||||
|
||||
def broadcast_update_params
|
||||
params.require(:broadcast).permit(
|
||||
:video_conference_url_override,
|
||||
:stream_url_override,
|
||||
:stream_key_override,
|
||||
:director_mode_video_embed
|
||||
)
|
||||
params.require(:broadcast).permit(:stream_url_override, :stream_key_override, :director_mode_video_embed)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -21,6 +21,7 @@ class Api::ReleasesController < Api::ApiController
|
||||
release.contract_template_id = @contract_template.id
|
||||
handle_attachments(release, release_create_params[:photos])
|
||||
release.save!(context: :native)
|
||||
log_create_analytics
|
||||
after_create(release)
|
||||
handle_response(release, :created)
|
||||
end
|
||||
@@ -180,4 +181,8 @@ class Api::ReleasesController < Api::ApiController
|
||||
parameters = parameters.slice(*keys).except(:created_at, :updated_at, :id, :user_id, :signature)
|
||||
parameters
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_native_release, release_type: model_constant.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip, application: :ios)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require './lib/knock_monkeypatch'
|
||||
|
||||
class Api::UserTokenController < Knock::AuthTokenController
|
||||
include Oath::ControllerHelpers
|
||||
|
||||
skip_before_action :verify_authenticity_token
|
||||
before_action :sign_in_user
|
||||
|
||||
rescue_from Exception, :with => :return_error
|
||||
|
||||
@@ -17,7 +10,7 @@ class Api::UserTokenController < Knock::AuthTokenController
|
||||
logger.error "==Handled======="
|
||||
logger.error exception.message
|
||||
logger.error exception.backtrace.join("\n")
|
||||
logger.error "==Handled======="
|
||||
logger.error "==Handled======="
|
||||
case exception
|
||||
when ActiveRecord::RecordNotFound
|
||||
@status = 404
|
||||
@@ -34,18 +27,12 @@ class Api::UserTokenController < Knock::AuthTokenController
|
||||
end
|
||||
|
||||
# for some reason render json_errors is not working
|
||||
# simulating JSON API support
|
||||
render json: {
|
||||
# simulating JSON API support
|
||||
render json: {
|
||||
errors: [{
|
||||
status: @status.to_s,
|
||||
title: @message
|
||||
}]
|
||||
}
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def sign_in_user
|
||||
sign_in(entity)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Api::UsersController < Api::ApiController
|
||||
skip_before_action :authenticate_user
|
||||
before_action :verify_custom_token, only: :create
|
||||
|
||||
def create
|
||||
if user_params[:email].nil? || user_params[:password].nil?
|
||||
raise ActionController::ParameterMissing.new 'Missing email or password'
|
||||
end
|
||||
|
||||
user = Oath::Services::SignUp.new(user_params).perform
|
||||
render json: user.slice(:email, :created_at, :first_name, :last_name)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def user_params
|
||||
params.require(:user).permit(%i[
|
||||
email
|
||||
password
|
||||
first_name
|
||||
last_name
|
||||
])
|
||||
end
|
||||
|
||||
def verify_custom_token
|
||||
if token.blank? || token != ENV['CUSTOM_API_TOKEN']
|
||||
unauthorized_entity(:user)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -18,6 +18,7 @@ class AppearanceReleasesController < ApplicationController
|
||||
@appearance_release = build_appearance_release(appearance_release_params)
|
||||
|
||||
if @appearance_release.save(context: :non_native)
|
||||
log_create_analytics
|
||||
AddHeadshotCollectionUidToProjectJob.perform_later(@project)
|
||||
SetTagsForReleasableJob.perform_later(@appearance_release)
|
||||
redirect_to [@project, :appearance_releases], notice: "The release has been imported. #{link_to_import_another}"
|
||||
@@ -126,4 +127,8 @@ class AppearanceReleasesController < ApplicationController
|
||||
def link_to_import_another
|
||||
view_context.link_to "Import Another", [:new, @project, :appearance_release]
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_non_native_release, release_type: AppearanceRelease.to_s, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -23,13 +23,10 @@ class BroadcastsController < ApplicationController
|
||||
else
|
||||
render :new
|
||||
end
|
||||
rescue MuxRuby::ApiError, ActiveResource::ConnectionError => e
|
||||
Raven.capture_exception(e)
|
||||
redirect_to [@project, :broadcasts], alert: t(".alert")
|
||||
end
|
||||
|
||||
def show
|
||||
@conference_url = conference_url_for(@broadcast)
|
||||
@conference_url = url_for [@broadcast.project, @broadcast, :zoom_meeting]
|
||||
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
|
||||
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
|
||||
render layout: 'application'
|
||||
@@ -75,7 +72,7 @@ class BroadcastsController < ApplicationController
|
||||
end
|
||||
|
||||
def broadcast_params
|
||||
params.require(:broadcast).permit(:name, :shoot_location_time_zone, :conference_option, files: [])
|
||||
params.require(:broadcast).permit(:name, :shoot_location_time_zone, files: [])
|
||||
end
|
||||
|
||||
def set_project
|
||||
@@ -112,10 +109,6 @@ class BroadcastsController < ApplicationController
|
||||
results
|
||||
end
|
||||
|
||||
def conference_url_for(broadcast)
|
||||
broadcast.video_conference_url_override || url_for([broadcast.project, broadcast, :conference_meeting])
|
||||
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
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
class CallbacksController < ApplicationController
|
||||
skip_before_action :require_login
|
||||
skip_after_action :verify_authorized, except: :index
|
||||
skip_after_action :verify_policy_scoped, only: :index
|
||||
skip_before_action :verify_authenticity_token
|
||||
|
||||
def create
|
||||
uid = request.env['omniauth.auth'][:uid]
|
||||
token_data = request.env['omniauth.auth'][:credentials]
|
||||
|
||||
current_user&.tap do |user|
|
||||
user.microsoft_user_id = uid
|
||||
user.microsoft_access_token = token_data.token
|
||||
user.microsoft_refresh_token = token_data.refresh_token
|
||||
user.microsoft_token_expires_at = token_data.expires_at # Expiration time is returned in seconds
|
||||
user.save
|
||||
end
|
||||
|
||||
redirect_to profile_path
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,45 +0,0 @@
|
||||
class ConferenceMeetingsController < ApplicationController
|
||||
require 'microsoft_graph'
|
||||
|
||||
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: t('.alerts.not_authenticated')
|
||||
return
|
||||
rescue StandardError => e
|
||||
Rails.logger.error(e.message)
|
||||
redirect_to project_broadcast_url(broadcast.project, broadcast), alert: t('.alerts.failed_to_join')
|
||||
return
|
||||
end
|
||||
end
|
||||
redirect_to broadcast.conference_join_url
|
||||
else
|
||||
redirect_to project_broadcast_url(broadcast.project, broadcast), alert: t('.alerts.unknown_conference_option')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -26,7 +26,6 @@ class ContractTemplatesController < ApplicationController
|
||||
contract = Contract.new releasable_instance, true
|
||||
send_file contract.to_pdf, download_attributes
|
||||
elsif @contract_template.save
|
||||
log_create_analytics
|
||||
redirect_to [@project, :contract_templates], notice: t('.notice')
|
||||
else
|
||||
@release_type = contract_template_params[:release_type]
|
||||
@@ -95,9 +94,7 @@ class ContractTemplatesController < ApplicationController
|
||||
:question_9_text, :question_10_text,
|
||||
:question_11_text, :question_12_text,
|
||||
:question_13_text, :question_14_text,
|
||||
:question_15_text, :questionnaire_legal_text,
|
||||
:exhibit_a_legal_text, :exhibit_a_question_text,
|
||||
:exhibit_b_legal_text, :exhibit_b_question_text)
|
||||
:question_15_text)
|
||||
end
|
||||
|
||||
def download_attributes
|
||||
@@ -107,8 +104,4 @@ class ContractTemplatesController < ApplicationController
|
||||
type: 'application/pdf'
|
||||
}
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_contract_template, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
class FilesController < ApplicationController
|
||||
class FileInfosController < ApplicationController
|
||||
before_action :set_releasable
|
||||
|
||||
layout "project"
|
||||
@@ -16,7 +16,7 @@ class FilesController < ApplicationController
|
||||
|
||||
if @releasable.update(releasable_params)
|
||||
SetTagsForReleasableJob.perform_later(@releasable)
|
||||
redirect_to [@project, @releasable.model_name.plural], notice: "Files added successfully to the release."
|
||||
redirect_to [@project, @releasable.model_name.plural], notice: t(".notice")
|
||||
else
|
||||
render :edit
|
||||
end
|
||||
@@ -29,10 +29,16 @@ class FilesController < ApplicationController
|
||||
end
|
||||
|
||||
def set_releasable
|
||||
@releasable = authorize policy_scope(releasable_param.type).find(releasable_param.id), :edit_files?
|
||||
@releasable = authorize policy_scope(releasable_param.type).find(releasable_param.id), :"#{action_name}_file_infos?"
|
||||
end
|
||||
|
||||
def releasable_params
|
||||
params.fetch(releasable_param.name, {}).permit(files: [])
|
||||
params.fetch(releasable_param.name, {}).permit(
|
||||
file_infos_attributes: [
|
||||
:filename,
|
||||
:content_type,
|
||||
:byte_size
|
||||
],
|
||||
)
|
||||
end
|
||||
end
|
||||
@@ -18,6 +18,7 @@ class LocationReleasesController < ApplicationController
|
||||
@location_release = build_location_release(location_release_params)
|
||||
|
||||
if @location_release.save
|
||||
log_create_analytics
|
||||
SetTagsForReleasableJob.perform_later(@location_release)
|
||||
redirect_to [@project, :location_releases], notice: t(".notice")
|
||||
else
|
||||
@@ -89,4 +90,8 @@ class LocationReleasesController < ApplicationController
|
||||
|
||||
results
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_non_native_release, release_type: LocationRelease.to_s, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -18,6 +18,7 @@ class MaterialReleasesController < ApplicationController
|
||||
@material_release = build_material_release(material_release_params)
|
||||
|
||||
if @material_release.save
|
||||
log_create_analytics
|
||||
SetTagsForReleasableJob.perform_later(@material_release)
|
||||
redirect_to [@project, :material_releases], notice: t(".notice")
|
||||
else
|
||||
@@ -135,4 +136,8 @@ class MaterialReleasesController < ApplicationController
|
||||
|
||||
results
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_non_native_release, release_type: MaterialRelease.to_s, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -22,6 +22,7 @@ class MusicReleasesController < ApplicationController
|
||||
@music_release = build_music_release(music_release_params)
|
||||
|
||||
if @music_release.save
|
||||
log_create_analytics
|
||||
SetTagsForReleasableJob.perform_later(@music_release)
|
||||
redirect_to [@project, :music_releases], notice: t(".notice")
|
||||
else
|
||||
@@ -110,4 +111,8 @@ class MusicReleasesController < ApplicationController
|
||||
|
||||
results
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_non_native_release, release_type: MusicRelease.to_s, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,7 +6,7 @@ class ProjectsController < ApplicationController
|
||||
before_action :set_project, only: [:show, :edit, :update, :destroy]
|
||||
|
||||
def index
|
||||
@projects = filtered_projects.order_by_name
|
||||
@projects = policy_scope(Current.account.projects).order_by_name
|
||||
end
|
||||
|
||||
def new
|
||||
@@ -46,20 +46,6 @@ class ProjectsController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def filtered_projects
|
||||
results = projects
|
||||
|
||||
if params[:query].present?
|
||||
results = results.search(params[:query])
|
||||
end
|
||||
|
||||
results
|
||||
end
|
||||
|
||||
def projects
|
||||
authorize policy_scope(Current.account.projects)
|
||||
end
|
||||
|
||||
def set_project
|
||||
@project = authorize projects.find(params[:id])
|
||||
end
|
||||
|
||||
@@ -10,6 +10,7 @@ class Public::AcquiredMediaReleasesController < Public::BaseController
|
||||
@acquired_media_release = build_acquired_media_release(acquired_media_release_params_with_locale_and_contract_template)
|
||||
|
||||
if @acquired_media_release.save(context: :native)
|
||||
log_create_analytics
|
||||
after_create(@acquired_media_release)
|
||||
else
|
||||
render :new
|
||||
@@ -99,8 +100,11 @@ class Public::AcquiredMediaReleasesController < Public::BaseController
|
||||
:signature_base64,
|
||||
:locale, :contract_template,
|
||||
categories: [],
|
||||
files: []
|
||||
)
|
||||
file_infos_attributes: %i[
|
||||
filename
|
||||
content_type
|
||||
byte_size
|
||||
])
|
||||
end
|
||||
|
||||
def acquired_media_release_params_with_locale
|
||||
@@ -110,4 +114,8 @@ class Public::AcquiredMediaReleasesController < Public::BaseController
|
||||
def acquired_media_release_params_with_locale_and_contract_template
|
||||
acquired_media_release_params_with_locale.merge(contract_template: @contract_template)
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(nil, nil, :track_create_native_release, release_type: AcquiredMediaRelease.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -10,6 +10,7 @@ class Public::AppearanceReleasesController < Public::BaseController
|
||||
@appearance_release = build_appearance_release(appearance_release_params_with_locale_and_contract_template)
|
||||
|
||||
if @appearance_release.save(context: :native)
|
||||
log_create_analytics
|
||||
after_create(@appearance_release)
|
||||
else
|
||||
render :new
|
||||
@@ -86,35 +87,12 @@ class Public::AppearanceReleasesController < Public::BaseController
|
||||
]
|
||||
end
|
||||
|
||||
def questionnaire_params
|
||||
[
|
||||
:question_1_answer,
|
||||
:question_2_answer,
|
||||
:question_3_answer,
|
||||
:question_4_answer,
|
||||
:question_5_answer,
|
||||
:question_6_answer,
|
||||
:question_7_answer,
|
||||
:question_8_answer,
|
||||
:question_9_answer,
|
||||
:question_10_answer,
|
||||
:question_11_answer,
|
||||
:question_12_answer,
|
||||
:question_13_answer,
|
||||
:question_14_answer,
|
||||
:question_15_answer,
|
||||
]
|
||||
end
|
||||
|
||||
def appearance_release_params
|
||||
params.require(:appearance_release).permit(person_params, guardian_params,
|
||||
second_guardian_params,
|
||||
questionnaire_params,
|
||||
:minor, :signature_base64,
|
||||
:person_date_of_birth,
|
||||
:locale, :contract_template,
|
||||
:exhibit_a_answer, :exhibit_b_answer
|
||||
)
|
||||
:locale, :contract_template)
|
||||
end
|
||||
|
||||
def appearance_release_params_with_locale
|
||||
@@ -124,4 +102,8 @@ class Public::AppearanceReleasesController < Public::BaseController
|
||||
def appearance_release_params_with_locale_and_contract_template
|
||||
appearance_release_params_with_locale.merge(contract_template: @contract_template)
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(nil, nil, :track_create_native_release, release_type: AppearanceRelease.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,7 +3,7 @@ class Public::BroadcastsController < Public::BaseController
|
||||
before_action :set_broadcast, only: [:show, :update]
|
||||
|
||||
def show
|
||||
@conference_url = conference_url_for(@broadcast)
|
||||
@conference_url = broadcast_zoom_meeting_url(@broadcast.token)
|
||||
@multi_view_broadcasts = multi_view_broadcasts
|
||||
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
|
||||
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
|
||||
@@ -43,10 +43,6 @@ class Public::BroadcastsController < Public::BaseController
|
||||
end
|
||||
end
|
||||
|
||||
def conference_url_for(broadcast)
|
||||
broadcast.video_conference_url_override || broadcast_zoom_meeting_url(broadcast.token)
|
||||
end
|
||||
|
||||
class MultiViewBroadcast
|
||||
include Rails.application.routes.url_helpers
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ class Public::LocationReleasesController < Public::BaseController
|
||||
@location_release = build_location_release(location_release_params_with_locale_and_contract_template)
|
||||
|
||||
if @location_release.save(context: :native)
|
||||
log_create_analytics
|
||||
after_create(@location_release)
|
||||
else
|
||||
render :new
|
||||
@@ -75,4 +76,8 @@ class Public::LocationReleasesController < Public::BaseController
|
||||
def location_release_params_with_locale_and_contract_template
|
||||
location_release_params_with_locale.merge(contract_template: @contract_template)
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(nil, nil, :track_create_native_release, release_type: LocationRelease.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -10,6 +10,7 @@ class Public::MaterialReleasesController < Public::BaseController
|
||||
@material_release = build_material_release(material_release_params_with_locale_and_contract_template)
|
||||
|
||||
if @material_release.save(context: :native)
|
||||
log_create_analytics
|
||||
after_create(@material_release)
|
||||
else
|
||||
render :new
|
||||
@@ -103,4 +104,8 @@ class Public::MaterialReleasesController < Public::BaseController
|
||||
def material_release_params_with_locale_and_contract_template
|
||||
material_release_params_with_locale.merge(contract_template: @contract_template)
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(nil, nil, :track_create_native_release, release_type: MaterialRelease.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -12,6 +12,7 @@ class Public::MedicalReleasesController < Public::BaseController
|
||||
if @medical_release.contract_template.present?
|
||||
AttachContractToReleasableJob.perform_later(@medical_release)
|
||||
end
|
||||
log_create_analytics
|
||||
else
|
||||
render :new
|
||||
end
|
||||
@@ -115,4 +116,8 @@ class Public::MedicalReleasesController < Public::BaseController
|
||||
def medical_release_params_with_locale_and_contract_template
|
||||
medical_release_params_with_locale.merge(contract_template: @contract_template)
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(nil, nil, :track_create_native_release, release_type: MedicalRelease.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -12,6 +12,7 @@ class Public::MiscReleasesController < Public::BaseController
|
||||
if @misc_release.contract_template.present?
|
||||
AttachContractToReleasableJob.perform_later(@misc_release)
|
||||
end
|
||||
log_create_analytics
|
||||
else
|
||||
render :new
|
||||
end
|
||||
@@ -49,14 +50,6 @@ class Public::MiscReleasesController < Public::BaseController
|
||||
:signature_base64,
|
||||
:locale,
|
||||
:contract_template,
|
||||
:applicable_medium_id,
|
||||
:applicable_medium_text,
|
||||
:territory_id,
|
||||
:territory_text,
|
||||
:term_id,
|
||||
:term_text,
|
||||
:restriction_id,
|
||||
:restriction_text,
|
||||
photos: [],
|
||||
)
|
||||
end
|
||||
@@ -120,4 +113,8 @@ class Public::MiscReleasesController < Public::BaseController
|
||||
def misc_release_params_with_locale_and_contract_template
|
||||
misc_release_params_with_locale.merge(contract_template: @contract_template)
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(nil, nil, :track_create_native_release, release_type: MiscRelease.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -10,6 +10,7 @@ class Public::TalentReleasesController < Public::BaseController
|
||||
@talent_release = build_talent_release(talent_release_params_with_locale_and_contract_template)
|
||||
|
||||
if @talent_release.save(context: :native)
|
||||
log_create_analytics
|
||||
after_create(@talent_release)
|
||||
else
|
||||
render :new
|
||||
@@ -107,4 +108,8 @@ class Public::TalentReleasesController < Public::BaseController
|
||||
def talent_release_params_with_locale_and_contract_template
|
||||
talent_release_params_with_locale.merge(contract_template: @contract_template)
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(nil, nil, :track_create_native_release, release_type: TalentRelease.to_s, account: @account, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -18,6 +18,7 @@ class TalentReleasesController < ApplicationController
|
||||
@talent_release = build_talent_release(talent_release_params)
|
||||
|
||||
if @talent_release.save
|
||||
log_create_analytics
|
||||
AddHeadshotCollectionUidToProjectJob.perform_later(@project)
|
||||
SetTagsForReleasableJob.perform_later(@talent_release)
|
||||
redirect_to [@project, :talent_releases], notice: t(".notice")
|
||||
@@ -136,4 +137,8 @@ class TalentReleasesController < ApplicationController
|
||||
|
||||
results
|
||||
end
|
||||
|
||||
def log_create_analytics
|
||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_non_native_release, release_type: TalentRelease.to_s, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||
end
|
||||
end
|
||||
|
||||
6
app/controllers/zoom_meetings_controller.rb
Normal file
6
app/controllers/zoom_meetings_controller.rb
Normal file
@@ -0,0 +1,6 @@
|
||||
class ZoomMeetingsController < ApplicationController
|
||||
def show
|
||||
authorize broadcast = Broadcast.find(params[:broadcast_id])
|
||||
redirect_to broadcast.zoom_meeting_url
|
||||
end
|
||||
end
|
||||
@@ -1,17 +0,0 @@
|
||||
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
|
||||
@@ -67,23 +67,6 @@ class ActiveStorageDropzone {
|
||||
var upload = new that.UploaderClass(file, url, delegate);
|
||||
createUpload(this, upload);
|
||||
});
|
||||
|
||||
this.on("addedfile", function(file) {
|
||||
// Show download link in dropzone previews
|
||||
|
||||
let div = document.createElement("div");
|
||||
let anchor = document.createElement("a");
|
||||
let download_icon = "<i class='fa fa-download' aria-hidden='true'></i> Download";
|
||||
|
||||
anchor.innerHTML = download_icon;
|
||||
anchor.href = file.dataURL;
|
||||
anchor.setAttribute('target', '_blank');
|
||||
anchor.setAttribute('style', 'background-color: rgba(255, 255, 255, 0.4); padding: 0 0.4em; border: 1px solid transparent; text-decoration: none;');
|
||||
div.append(anchor);
|
||||
div.setAttribute('class', 'dz-download-link')
|
||||
div.setAttribute('style', 'margin-top: 1em;')
|
||||
$(file.previewElement.childNodes[3]).append(div);
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -64,19 +64,6 @@ class Account < ApplicationRecord
|
||||
])).sum(:byte_size).to_f
|
||||
end
|
||||
|
||||
def total_number_of_releases
|
||||
[
|
||||
MiscRelease.where(project: projects).size,
|
||||
AppearanceRelease.where(project: projects).size,
|
||||
TalentRelease.where(project: projects).size,
|
||||
MaterialRelease.where(project: projects).size,
|
||||
MedicalRelease.where(project: projects).size,
|
||||
LocationRelease.where(project: projects).size,
|
||||
AcquiredMediaRelease.where(project: projects).size,
|
||||
MusicRelease.where(project: projects).size
|
||||
].sum
|
||||
end
|
||||
|
||||
def to_param
|
||||
slug
|
||||
end
|
||||
@@ -98,7 +85,7 @@ class Account < ApplicationRecord
|
||||
end
|
||||
|
||||
def taskme_enabled?
|
||||
plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme"
|
||||
ENV["TASKME_ENABLED"] && (plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme")
|
||||
end
|
||||
|
||||
def plan_name
|
||||
|
||||
@@ -18,14 +18,13 @@ class AcquiredMediaRelease < ApplicationRecord
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
%i[name files_count owner_info]
|
||||
%i[name file_infos_count]
|
||||
end
|
||||
end
|
||||
|
||||
# This association needs to be removed after changing the API. Removing it right now will cause failure in API specs.
|
||||
has_many :file_infos, as: :releasable, dependent: :destroy
|
||||
|
||||
has_many_attached :files
|
||||
accepts_nested_attributes_for :file_infos
|
||||
|
||||
composed_of :person_address,
|
||||
class_name: "Address",
|
||||
@@ -103,19 +102,7 @@ class AcquiredMediaRelease < ApplicationRecord
|
||||
true
|
||||
end
|
||||
|
||||
def files_count
|
||||
files.any? ? files.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
|
||||
end
|
||||
|
||||
def image_files
|
||||
files_blobs.where("content_type ILIKE ?", "%image%")
|
||||
end
|
||||
|
||||
def video_files
|
||||
files_blobs.where("content_type ILIKE ?", "%video%")
|
||||
end
|
||||
|
||||
def other_files
|
||||
files_blobs.where("NOT content_type ILIKE ANY (array[?])", ["%image%", "%video%"])
|
||||
def file_infos_count
|
||||
file_infos.any? ? file_infos.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,9 +17,6 @@ class AppearanceRelease < ApplicationRecord
|
||||
include SecondGuardianName
|
||||
include CsvExportable
|
||||
include Approvable
|
||||
include Amendmenable
|
||||
|
||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
|
||||
@@ -49,13 +49,11 @@ class Broadcast < ApplicationRecord
|
||||
private
|
||||
|
||||
def create_mux_live_stream
|
||||
stream = MuxLiveStream.create_with_simulcast
|
||||
stream = MuxLiveStream.new
|
||||
|
||||
self.stream_uid = stream.id
|
||||
self.stream_key = stream.key
|
||||
self.stream_playback_uid = stream.playback_id
|
||||
self.simulcast_uid = stream.simulcast_id
|
||||
self.director_mode_video_embed ||= stream.simulcast_destination.try(:playback_embed)
|
||||
self.save!
|
||||
end
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
module CsvExportable
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
COMMON_HEADERS = %i[approved notes tags signed_at].freeze
|
||||
COMMON_VALUES = %w[approved? clean_notes clean_tags signed_on].freeze
|
||||
COMMON_HEADERS = %i[approved? notes tags signed_at].freeze
|
||||
COMMON_VALUES = %w[clean_notes clean_tags signed_on].freeze
|
||||
|
||||
included do
|
||||
class << self
|
||||
@@ -29,20 +29,11 @@ module CsvExportable
|
||||
|
||||
private
|
||||
|
||||
def owner_info
|
||||
compact_contact_info(name: person_name, address: person_address, phone: person_phone, email: person_email)
|
||||
end
|
||||
|
||||
def contact_info
|
||||
owner_info
|
||||
end
|
||||
|
||||
def compact_contact_info(name: nil, address: nil, phone: nil, email: nil)
|
||||
contact_info = ''
|
||||
contact_info += "#{name}; " if name.present?
|
||||
contact_info += "#{address}; " if address.present?
|
||||
contact_info += "P: #{phone}; " if phone.present?
|
||||
contact_info += "E: #{email}" if email.present?
|
||||
contact_info += "#{person_address}; " if person_address.present?
|
||||
contact_info += "P: #{person_phone}; " if person_phone.present?
|
||||
contact_info += "E: #{person_email}" if person_email.present?
|
||||
contact_info.delete_suffix '; '
|
||||
end
|
||||
|
||||
|
||||
@@ -23,9 +23,6 @@ class ContractTemplate < ApplicationRecord
|
||||
has_rich_text :guardian_clause
|
||||
has_rich_text :signature_legal_text
|
||||
has_rich_text :amendment_clause
|
||||
has_rich_text :exhibit_a_legal_text
|
||||
has_rich_text :exhibit_b_legal_text
|
||||
has_rich_text :questionnaire_legal_text
|
||||
|
||||
validates :name, presence: true
|
||||
validates :release_type, presence: true
|
||||
@@ -73,14 +70,6 @@ class ContractTemplate < ApplicationRecord
|
||||
(1..NUMBER_OF_CUSTOM_FIELDS).any? { |n| public_send("question_#{n}_text").presence }
|
||||
end
|
||||
|
||||
def has_exhibit_a?
|
||||
exhibit_a_legal_text.present?
|
||||
end
|
||||
|
||||
def has_exhibit_b?
|
||||
exhibit_b_legal_text.present?
|
||||
end
|
||||
|
||||
def editable?
|
||||
releases.size.zero?
|
||||
end
|
||||
|
||||
@@ -16,7 +16,7 @@ class LocationRelease < ApplicationRecord
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
%i[location_info owner_info amendment_signed_column]
|
||||
%i[name address]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -67,18 +67,6 @@ class LocationRelease < ApplicationRecord
|
||||
true
|
||||
end
|
||||
|
||||
def location_info
|
||||
compact_contact_info(name: name, address: address)
|
||||
end
|
||||
|
||||
def amendment_signed_column
|
||||
if amendment_signable?
|
||||
amendment_signed?
|
||||
else
|
||||
I18n.t('location_releases.csv.no_amendment_clause')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def end_date_after_start_date
|
||||
|
||||
@@ -20,7 +20,7 @@ class MaterialRelease < ApplicationRecord
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
%i[name owner_info]
|
||||
%i[name]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
class MillicastDestination
|
||||
attr_reader :name, :token
|
||||
|
||||
def self.create
|
||||
token_stream_name = SecureRandom.urlsafe_base64
|
||||
|
||||
publish_token = Millicast::PublishToken.create(
|
||||
label: SecureRandom.urlsafe_base64,
|
||||
streams: [
|
||||
{ streamName: token_stream_name }
|
||||
]
|
||||
)
|
||||
|
||||
new(token_stream_name, publish_token.data.token)
|
||||
end
|
||||
|
||||
def initialize(name, token)
|
||||
@name = name
|
||||
@token = token
|
||||
end
|
||||
|
||||
def account_id
|
||||
ENV["MILLICAST_ACCOUNT_ID"]
|
||||
end
|
||||
|
||||
def key
|
||||
"#{name}?token=#{token}"
|
||||
end
|
||||
|
||||
def url
|
||||
"rtmp://live-rtmp-pub.millicast.com:1935/v2/pub"
|
||||
end
|
||||
|
||||
def playback_url
|
||||
"https://viewer.millicast.com/v2?streamId=#{account_id}/#{name}"
|
||||
end
|
||||
|
||||
def playback_embed
|
||||
"<iframe src=\"#{playback_url}\" allowfullscreen width=\"640\" height=\"480\"></iframe>"
|
||||
end
|
||||
end
|
||||
@@ -11,7 +11,6 @@ class MiscRelease < ApplicationRecord
|
||||
include GuardianPhotoable
|
||||
include CsvExportable
|
||||
include Approvable
|
||||
include Exploitable
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
|
||||
@@ -1,15 +1,4 @@
|
||||
class MuxLiveStream
|
||||
attr_accessor :simulcast_id, :simulcast_destination
|
||||
|
||||
def self.create_with_simulcast(destination = nil)
|
||||
destination ||= MillicastDestination.create
|
||||
|
||||
MuxLiveStream.new.tap do |stream|
|
||||
stream.id # force the live stream to be created by calling for its id
|
||||
stream.create_simulcast(destination)
|
||||
end
|
||||
end
|
||||
|
||||
def id
|
||||
live_stream.data.id
|
||||
end
|
||||
@@ -26,15 +15,6 @@ class MuxLiveStream
|
||||
client.delete_live_stream(stream_uid)
|
||||
end
|
||||
|
||||
def create_simulcast(destination)
|
||||
return if test_mode_enabled?
|
||||
|
||||
request = MuxRuby::CreateSimulcastTargetRequest.new(stream_key: destination.key, url: destination.url)
|
||||
result = client.create_live_stream_simulcast_target(id, request)
|
||||
self.simulcast_destination = destination
|
||||
self.simulcast_id = result.data.id
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def live_stream
|
||||
|
||||
@@ -2,7 +2,6 @@ class Project < ApplicationRecord
|
||||
include Archivable
|
||||
include Filterable
|
||||
include Syncable
|
||||
include PgSearch
|
||||
|
||||
SIGNABLE_RELEASE_TYPES = %w(talent appearance acquired_media location material medical misc)
|
||||
AVAILABLE_RELEASE_TYPES = %w(appearance location material acquired_media talent music medical misc)
|
||||
@@ -43,15 +42,6 @@ class Project < ApplicationRecord
|
||||
}
|
||||
end
|
||||
|
||||
pg_search_scope :search, {
|
||||
against: [:name],
|
||||
using: {
|
||||
tsearch: {any_word: true, prefix: true},
|
||||
trigram: {},
|
||||
dmetaphone: {any_word: true}
|
||||
}
|
||||
}
|
||||
|
||||
validates :name, presence: true, uniqueness: { scope: :account_id }
|
||||
|
||||
filterable_by :active, :inactive, :archived
|
||||
|
||||
@@ -19,7 +19,11 @@ class AcquiredMediaReleasePolicy < ApplicationPolicy
|
||||
true
|
||||
end
|
||||
|
||||
def edit_files?
|
||||
def edit_file_infos?
|
||||
true
|
||||
end
|
||||
|
||||
def update_file_infos?
|
||||
true
|
||||
end
|
||||
|
||||
|
||||
@@ -34,8 +34,4 @@ class AppearanceReleasePolicy < ReleasePolicy
|
||||
def approve?
|
||||
review?
|
||||
end
|
||||
|
||||
def sign_amendment?
|
||||
user.manager? || user.account_manager?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,5 +16,5 @@ class SerializableAcquiredMediaRelease < JSONAPI::Serializable::Resource
|
||||
meta do
|
||||
{ count: @object.file_infos.size }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -169,24 +169,6 @@ class Analytics
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def track_create_contract_template(user_agent:, user_ip:)
|
||||
if analytics_enabled?
|
||||
identify
|
||||
track(
|
||||
{
|
||||
user_id: user.id,
|
||||
event: "Contract Template Created",
|
||||
properties: {
|
||||
account: account.try(:name),
|
||||
account_id: account.try(:id),
|
||||
user_agent: user_agent,
|
||||
ip: user_ip,
|
||||
},
|
||||
}
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<%= bootstrap_form_with model: account, url: account_path, html: { autocorrect: :off, autocapitalize: :none, autocomplete: :off, spellcheck: false }, layout: :inline, remote: true do |form| %>
|
||||
<%= form.file_field :logo, hide_label: true, accept: "image/*", placeholder: "Upload Logo", direct_upload: true, wrapper_class: "mr-1", required: true %>
|
||||
<%= form.file_field :logo, hide_label: true, accept: "image/*", placeholder: "Upload Logo", direct_upload: true, wrapper_class: "mr-1" %>
|
||||
<%= form.button(fa_icon("upload", text: t(".submit")), class: "btn btn-md btn-primary", data: { disable_with: t("shared.disable_with") }) %>
|
||||
<% end %>
|
||||
|
||||
@@ -12,15 +12,12 @@
|
||||
<%= acquired_media_release.name %>
|
||||
</td>
|
||||
<td>
|
||||
<% if acquired_media_release.files.any? %>
|
||||
<%= acquired_media_release.files.size %>
|
||||
<% if acquired_media_release.file_infos.any? %>
|
||||
<%= acquired_media_release.file_infos.size %>
|
||||
<% else %>
|
||||
<%= fa_icon("warning", text: t(".no_media"), class: "text-danger") %>
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<%= contact_info_for(acquired_media_release.contact_person) %>
|
||||
</td>
|
||||
<td>
|
||||
<%= notes_preview acquired_media_release.notes.order_by_recent %>
|
||||
</td>
|
||||
@@ -40,8 +37,8 @@
|
||||
<% if policy(acquired_media_release.tags).new? %>
|
||||
<%= link_to fa_icon("tags fw", text: "Tags"), [:new, acquired_media_release, :acts_as_taggable_on_tag], class: "dropdown-item", remote: true %>
|
||||
<% end %>
|
||||
<% if policy(acquired_media_release).edit_files? %>
|
||||
<%= link_to fa_icon("file fw", text: "Media"), [:edit, acquired_media_release, :files], class: "dropdown-item" %>
|
||||
<% if policy(acquired_media_release).edit_file_infos? %>
|
||||
<%= link_to fa_icon("file fw", text: "Add Media"), [:edit, acquired_media_release, :file_infos], class: "dropdown-item" %>
|
||||
<% end %>
|
||||
<% if policy(Contract).show? && (acquired_media_release.contract.attached? || acquired_media_release.contract_template.present?) %>
|
||||
<%= link_to fa_icon("download fw", text: "Download"), [acquired_media_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<%= fa_icon "warning" %>
|
||||
<strong>For optimal accuracy, please ensure video file names and photo file names match the source file name in the editing sequence.</strong>
|
||||
</div>
|
||||
<%= render "shared/releasable_files_dropzone", form: form, releasable: acquired_media_release %>
|
||||
<%= render "shared/file_infos_dropzone", form: form, releasable: acquired_media_release %>
|
||||
|
||||
<div class="<%= class_string("collapse" => !acquired_media_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||
<br>
|
||||
|
||||
@@ -28,8 +28,7 @@
|
||||
<th data-behavior="all-selectable"><%= check_box_tag "acquired_media_release_ids[]", false, false %></th>
|
||||
<th><%= t '.table_headers.approved'%></th>
|
||||
<th><%= AcquiredMediaRelease.human_attribute_name(:name) %></th>
|
||||
<th><%= t(".table_headers.files_count") %></th>
|
||||
<th><%= t(".table_headers.owner_info") %></th>
|
||||
<th><%= t(".table_headers.file_infos_count") %></th>
|
||||
<th><%= t(".table_headers.notes") %></th>
|
||||
<th><%= t(".table_headers.tags") %></th>
|
||||
<th><%= t(".table_headers.signed_at") %></th>
|
||||
|
||||
@@ -8,9 +8,6 @@
|
||||
<td>
|
||||
<%= account.projects.size %>
|
||||
</td>
|
||||
<td>
|
||||
<%= account.total_number_of_releases %>
|
||||
</td>
|
||||
<td>
|
||||
<%= number_with_delimiter convert_duration(account.current_month_video_duration_total, from: :seconds, to: :minutes).round %> minutes
|
||||
</td>
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
<th>Name</th>
|
||||
<th>Plan</th>
|
||||
<th># Projects</th>
|
||||
<th># Releases Signed</th>
|
||||
<th>Monthly Video Upload Minutes</th>
|
||||
<th>Total Video Upload Minutes</th>
|
||||
<th>Total Storage</th>
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
<dd class="col-sm-10"><%= @account.users.size %></dd>
|
||||
<dt class="col-sm-2">Created at</dt>
|
||||
<dd class="col-sm-10"><%= time_ago_in_words(@account.created_at) %> ago</dd>
|
||||
<dt class="col-sm-2"># of Releases</dt>
|
||||
<dd class="col-sm-10"><%= @account.total_number_of_releases %></dd>
|
||||
</dl>
|
||||
<% end %>
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<%= errors_summary_for broadcast %>
|
||||
|
||||
<%= bootstrap_form_with model: model, local: true do |form| %>
|
||||
<%= form.text_field :video_conference_url_override %>
|
||||
<%= form.text_field :stream_url_override %>
|
||||
<%= form.text_field :stream_key_override %>
|
||||
<%= form.text_area :director_mode_video_embed %>
|
||||
|
||||
@@ -34,17 +34,6 @@
|
||||
<td>
|
||||
<%= appearance_release.signed_on %>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<% if appearance_release.amendment_signed? %>
|
||||
<i class="fa fa-check-square-o text-dark"
|
||||
data-toggle="tooltip"
|
||||
title="<%= t '.messages.amendment_signed_tooltip' %>"></i>
|
||||
<% elsif appearance_release.amendment_signable? %>
|
||||
<i class="fa fa-square-o"
|
||||
data-toggle="tooltip"
|
||||
title="<%= t '.messages.amendment_not_signed_tooltip' %>"></i>
|
||||
<% end %>
|
||||
</td>
|
||||
<td class="text-right">
|
||||
<div class="btn-group">
|
||||
<%= button_tag t(".actions.manage"), class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
|
||||
@@ -55,9 +44,6 @@
|
||||
<% if policy(appearance_release.tags).new? %>
|
||||
<%= link_to fa_icon("tags fw", text: "Tags"), [:new, appearance_release, :acts_as_taggable_on_tag], class: "dropdown-item", remote: true %>
|
||||
<% end %>
|
||||
<% if policy(appearance_release).sign_amendment? && appearance_release.amendment_signable? && !appearance_release.amendment_signed? %>
|
||||
<%= link_to fa_icon("file-text fw", text: t('.actions.sign_amendment')), [:new, appearance_release.project.account, appearance_release.project, appearance_release.contract_template, appearance_release, :amendment], class: "dropdown-item", target: "_blank" %>
|
||||
<% end %>
|
||||
<% if policy(Contract).show? && (appearance_release.contract.attached? || appearance_release.contract_template.present?) %>
|
||||
<%= link_to fa_icon("download fw", text: "Download"), [appearance_release, :contracts, format: "pdf"], class: "dropdown-item", target: "_blank" %>
|
||||
<% end %>
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
<th><%= t(".table_headers.notes") %></th>
|
||||
<th><%= t(".table_headers.tags") %></th>
|
||||
<th><%= t(".table_headers.signed_at") %></th>
|
||||
<th><%= t '.table_headers.amendment_signed' %></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
<%= 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") %>
|
||||
|
||||
<div class="row align-items-center text-center mt-4">
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<% if broadcast.director_mode_video_embed.present? && params[:director_mode].present? %>
|
||||
<% if broadcast.streamer_recording? && broadcast.active? %>
|
||||
<div id="broadcast_video" class="embed-responsive-item" data-video-type="stream"></div>
|
||||
<% elsif broadcast.director_mode_video_embed.present? && params[:director_mode] == "true" %>
|
||||
<div class="embed-responsive-item" data-video-type="stream">
|
||||
<%= raw broadcast.director_mode_video_embed %>
|
||||
</div>
|
||||
<% elsif broadcast.streamer_recording? && broadcast.active? %>
|
||||
<div id="broadcast_video" class="embed-responsive-item" data-video-type="stream"></div>
|
||||
<% else %>
|
||||
<div id="broadcast_video" class="embed-responsive-item" data-video-type="stream">
|
||||
<table class="w-100 h-100 bg-secondary">
|
||||
|
||||
@@ -127,8 +127,8 @@
|
||||
</div>
|
||||
<hr>
|
||||
<% end %>
|
||||
<p class="card-text"><%= "If you want to join the #{conference_option_name_from_key(@broadcast.conference_option)} meeting dedicated to this broadcast, follow the link below." %></p>
|
||||
<%= link_to 'Video Conference', @conference_url, class: "btn btn-primary btn-block", target: '_blank' %>
|
||||
<p class="card-text">If you want to join the ZOOM meeting dedicated to this broadcast, follow the link below.</p>
|
||||
<%= link_to 'Video Conference', @conference_url, class: 'btn btn-primary btn-block', target: '_blank' %>
|
||||
</div>
|
||||
<div class="<%= class_string("tab-pane fade show", "active" => params[:active_tab] == 'recordings') %>" id="recordings">
|
||||
<div id="broadcast_recordings">
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<%= field_set_tag content_tag(:span, t(".release_info.heading"), class: "h6 text-muted text-uppercase") do %>
|
||||
<div class="form-row">
|
||||
<%= form.text_field :name, wrapper_class: "col-sm-6" %>
|
||||
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(acquired_media appearance talent material misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media misc), "#custom_fields": %w(medical misc appearance), "#amendment_clause": %w(appearance location), "#exhibit_fields": %w(appearance) } }, class: "form-control custom-select" %>
|
||||
<%= form.select :release_type, options_for_release_type_select(project, @release_type), { wrapper_class: "col-sm-6" }, data: { toggle: "collapse-select", target_show_values_mapping: { "#guardian_clause": %w(acquired_media appearance talent material misc medical), "#fee_field": %w(appearance talent location material acquired_media), "#exploitable_rights_fields": %w(appearance talent location material acquired_media), "#custom_fields": %w(medical misc), "#amendment_clause": %w(location) } }, class: "form-control custom-select" %>
|
||||
</div>
|
||||
<div class="form-row mb-3">
|
||||
<%= form.radio_button :accessibility, :public_template, label: "Public", wrapper_class: "mr-3" %>
|
||||
@@ -34,25 +34,6 @@
|
||||
<%= form.rich_text_area :amendment_clause %>
|
||||
<% end %>
|
||||
</div>
|
||||
<div id="exhibit_fields">
|
||||
<%= form.form_group do %>
|
||||
<%= form.rich_text_area :exhibit_a_legal_text %>
|
||||
<small class="form-text text-muted mb-4"><%= t(".exhibits.help.option_field")%></small>
|
||||
<% end %>
|
||||
<%= form.form_group do %>
|
||||
<%= form.text_area :exhibit_a_question_text %>
|
||||
<small class="form-text text-muted mb-4"><%= t(".exhibits.help.option_field")%></small>
|
||||
<% end %>
|
||||
<%= form.form_group do %>
|
||||
<%= form.rich_text_area :exhibit_b_legal_text %>
|
||||
<small class="form-text text-muted mb-4"><%= t(".exhibits.help.option_field")%></small>
|
||||
<% end %>
|
||||
<%= form.form_group do %>
|
||||
<%= form.text_area :exhibit_b_question_text %>
|
||||
<small class="form-text text-muted mb-4"><%= t(".exhibits.help.option_field")%></small>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div id="signature_legal_text">
|
||||
<%= form.form_group do %>
|
||||
<%= form.rich_text_area :signature_legal_text %>
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
<p class="heading"><strong><u><%= t ".heading.#{releasable.model_name.param_key}" %></u></strong></p>
|
||||
<h4>Legal</h4>
|
||||
<p><%= releasable.contract_template.exhibit_a_legal_text %></p>
|
||||
<% if releasable.contract_template.exhibit_a_question_text.present? %>
|
||||
<h4>Question</h4>
|
||||
<p><strong><%= releasable.contract_template.exhibit_a_question_text %></strong></p>
|
||||
<p><%= releasable.exhibit_a_answer %></p>
|
||||
<% end %>
|
||||
@@ -1,8 +0,0 @@
|
||||
<p class="heading"><strong><u><%= t ".heading.#{releasable.model_name.param_key}" %></u></strong></p>
|
||||
<h4>Legal</h4>
|
||||
<p><%= releasable.contract_template.exhibit_b_legal_text %></p>
|
||||
<% if releasable.contract_template.exhibit_b_question_text.present? %>
|
||||
<h4>Question</h4>
|
||||
<p><strong><%= releasable.contract_template.exhibit_b_question_text %></strong></p>
|
||||
<p><%= releasable.exhibit_b_answer %></p>
|
||||
<% end %>
|
||||
@@ -8,37 +8,38 @@
|
||||
Description: <%= release.description %>
|
||||
</p>
|
||||
<% end %>
|
||||
<% photos = release.image_files %>
|
||||
|
||||
<% photos = release.file_infos.photo %>
|
||||
<% unless photos.empty? %>
|
||||
<h3>Photos</h3>
|
||||
<ul>
|
||||
<% photos.each do |blob| %>
|
||||
<% photos.each do |file_info| %>
|
||||
<li>
|
||||
<%= blob.filename %>
|
||||
<%= file_info.filename %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
<% videos = release.video_files %>
|
||||
<% videos = release.file_infos.video %>
|
||||
<% unless videos.empty? %>
|
||||
<h3>Videos</h3>
|
||||
<ul>
|
||||
<% videos.each do |blob| %>
|
||||
<% videos.each do |file_info| %>
|
||||
<li>
|
||||
<%= blob.filename %>
|
||||
<%= file_info.filename %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
<% other = release.other_files %>
|
||||
<% other = release.file_infos.other %>
|
||||
<% unless other.empty? %>
|
||||
<h3>Other files</h3>
|
||||
<ul>
|
||||
<% other.each do |blob| %>
|
||||
<% other.each do |file_info| %>
|
||||
<li>
|
||||
<%= blob.filename %>
|
||||
<%= file_info.filename %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
@@ -6,5 +6,3 @@
|
||||
<p><%= releasable.public_send("question_#{n}_answer") %></p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= contract_template.questionnaire_legal_text %>
|
||||
|
||||
@@ -16,8 +16,7 @@
|
||||
<%= contract_template.guardian_clause %>
|
||||
<% end %>
|
||||
|
||||
<%# if releasable.model_name.in? %w(MedicalRelease MiscRelease AppearanceRelease) %>
|
||||
<% if releasable.respond_to?(:question_1_answer) %>
|
||||
<% if releasable.model_name.in? %w(MedicalRelease MiscRelease) %>
|
||||
<div class="page">
|
||||
<%= render "contracts/questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
|
||||
</div>
|
||||
@@ -31,22 +30,7 @@
|
||||
<div class="page">
|
||||
<%= render "contracts/amendment_page", releasable: releasable, preview: preview %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if releasable.respond_to?(:exhibit_a_answer) %>
|
||||
<% if contract_template.has_exhibit_a? %>
|
||||
<div class="page">
|
||||
<%= render "contracts/exhibit_a_page", releasable: releasable, preview: preview %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if contract_template.has_exhibit_b? %>
|
||||
<div class="page">
|
||||
<%= render "contracts/exhibit_b_page", releasable: releasable, preview: preview %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%end %>
|
||||
|
||||
<% if releasable.respond_to?(:approved?) && releasable.approved? %>
|
||||
<div class="page">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div class="card shadow-sm">
|
||||
<%= card_header text: t(".heading"), subtext: @releasable.name, close_action_path: [@project, @releasable.model_name.plural] %>
|
||||
<div class="card-body">
|
||||
<% if @releasable.files.any? %>
|
||||
<% if @releasable.file_infos.any? %>
|
||||
<div class="alert alert-info text-center text-md-left">
|
||||
<%= fa_icon "info-circle" %>
|
||||
<strong>To Add Photos & Videos to the release: Drag & Drop Files or Click or Tap here to browse media.</strong>
|
||||
@@ -11,8 +11,8 @@
|
||||
<%= fa_icon "warning" %>
|
||||
<strong>For optimal accuracy, please ensure video file names and photo file names match the source file name in the editing sequence.</strong>
|
||||
</div>
|
||||
<%= bootstrap_form_with model: @releasable, url: [@releasable, :files] do |form| %>
|
||||
<%= render "shared/releasable_files_dropzone", form: form, releasable: @releasable %>
|
||||
<%= bootstrap_form_with model: @releasable, url: [@releasable, :file_infos] do |form| %>
|
||||
<%= render "shared/file_infos_dropzone", form: form, releasable: @releasable %>
|
||||
|
||||
<div class="row align-items-center text-center mt-4">
|
||||
<%= link_to t("shared.cancel"), [@project, @releasable.model_name.plural], class: "col-3 text-reset" %>
|
||||
@@ -18,9 +18,6 @@
|
||||
<td>
|
||||
<%= material_release.name %>
|
||||
</td>
|
||||
<td>
|
||||
<%= contact_info_for(material_release.contact_person) %>
|
||||
</td>
|
||||
<td>
|
||||
<%= notes_preview material_release.notes.order_by_recent %>
|
||||
</td>
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
<th><%= t '.table_headers.approved'%></th>
|
||||
<th></th>
|
||||
<th><%= MaterialRelease.human_attribute_name(:name) %></th>
|
||||
<th><%= t(".table_headers.owner_info") %>
|
||||
<th><%= t(".table_headers.notes") %></th>
|
||||
<th><%= t(".table_headers.tags") %></th>
|
||||
<th><%= t(".table_headers.signed_at") %></th>
|
||||
<th><%= t(".table_headers.signed_at") %></th>
|
||||
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
<%= @user.role_for(Current.account).to_s.titleize %>
|
||||
<% end %>
|
||||
</p>
|
||||
<%= link_to 'Auth to Microsoft', '/auth/azure_ad', method: :post, class: "btn btn-primary" %>
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<% if policy(Project).new? %>
|
||||
<div class="col-sm-6 col-md-4 col-lg-3 mt-4">
|
||||
<li class="card h-100 shadow-sm">
|
||||
<div class="card-body d-flex flex-column justify-content-center align-items-center">
|
||||
<%= fa_icon("plus-circle", class: "text-success", style: "font-size:4rem") %>
|
||||
<%= link_to t(".actions.new"), [:new, :project], class: "mt-4 text-reset text-decoration-none stretched-link" %>
|
||||
</div>
|
||||
</li>
|
||||
</div>
|
||||
<% end %>
|
||||
@@ -1,14 +1,17 @@
|
||||
<% if @projects.any? %>
|
||||
<section class="container mt-5">
|
||||
<div class="d-flex flex-row justify-content-between align-items-center mb-3">
|
||||
<h1 class="h3"><%= t(".heading") %> (<%= @projects.size %>)</h1>
|
||||
|
||||
<%= bootstrap_form_with url: [@account, :projects], method: :get, remote: true, layout: :inline, id: "search" do |form| %>
|
||||
<%= form.search_field :query, hide_label: true, placeholder: t(".actions.search"), class: "rounded-pill-right", value: params[:query], prepend: form.button(fa_icon("search"), class: "btn btn-light border rounded-pill-left") %>
|
||||
<h1 class="h3"><%= t(".heading") %> (<%= @projects.size %>)</h1>
|
||||
<ul class="list-unstyled mt-2 row">
|
||||
<% if policy(Project).new? %>
|
||||
<div class="col-sm-6 col-md-4 col-lg-3 mt-4">
|
||||
<li class="card h-100 shadow-sm">
|
||||
<div class="card-body d-flex flex-column justify-content-center align-items-center">
|
||||
<%= fa_icon("plus-circle", class: "text-success", style: "font-size:4rem") %>
|
||||
<%= link_to t(".actions.new"), [:new, :project], class: "mt-4 text-reset text-decoration-none stretched-link" %>
|
||||
</div>
|
||||
</li>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<ul id="projects" class="list-unstyled mt-2 row">
|
||||
<%= render partial: "new_project_button" %>
|
||||
<%= render @projects %>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
$("#projects").html("")
|
||||
$("#projects").append("<%= j render(partial: "new_project_button") %>");
|
||||
$("#projects").append("<%= j render(@projects) %>");
|
||||
$("form input[type='search']").val("<%= params[:query] %>");
|
||||
@@ -55,7 +55,7 @@
|
||||
<hr>
|
||||
|
||||
<%= card_field_set_tag t(".files.heading") do %>
|
||||
<%= render "shared/releasable_files_dropzone", form: form, releasable: @acquired_media_release %>
|
||||
<%= render "shared/file_infos_dropzone", form: form, releasable: @acquired_media_release %>
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -13,29 +13,6 @@
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
<% if @contract_template.has_exhibit_a? %>
|
||||
<%= card_field_set_tag t(".exhibits.exhibit_a.heading") do %>
|
||||
<p><%= @contract_template.exhibit_a_legal_text %></p>
|
||||
<% if @contract_template.exhibit_a_question_text.present? %>
|
||||
<div class="form-row">
|
||||
<%= form.text_area :exhibit_a_answer, label: @contract_template.exhibit_a_question_text, wrapper_class: "col-sm-12" %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr>
|
||||
<% end %>
|
||||
|
||||
<% if @contract_template.has_exhibit_b? %>
|
||||
<%= card_field_set_tag t(".exhibits.exhibit_b.heading") do %>
|
||||
<p><%= @contract_template.exhibit_b_legal_text %></p>
|
||||
<% if @contract_template.exhibit_b_question_text.present? %>
|
||||
<div class="form-row">
|
||||
<%= form.text_area :exhibit_b_answer, label: @contract_template.exhibit_b_question_text, wrapper_class: "col-sm-12" %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr>
|
||||
<% end %>
|
||||
|
||||
<% unless @contract_template.guardian_clause.blank? %>
|
||||
<%= form.form_group :minor do %>
|
||||
@@ -48,19 +25,6 @@
|
||||
<hr>
|
||||
<% end %>
|
||||
|
||||
<% if @contract_template.has_questionnaire? %>
|
||||
<%= card_field_set_tag t(".questionnaire.heading") do %>
|
||||
<% (1..AppearanceRelease::NUMBER_OF_CUSTOM_FIELDS).each do |n| %>
|
||||
<% if @contract_template.public_send("question_#{n}_text").present? %>
|
||||
<div class="form-row">
|
||||
<%= form.text_area "question_#{n}_answer", wrapper_class: "col-sm-12", label: @contract_template.public_send("question_#{n}_text") %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr>
|
||||
<% end %>
|
||||
|
||||
<%= card_field_set_tag t(".personal_info.heading") do %>
|
||||
<div class="alert alert-warning font-weight-bold"><%= t ".personal_info.instructions" %></div>
|
||||
<div class="form-row">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<%= bootstrap_form_with model: [@account, @project, @contract_template, @medical_release], local: true, validation_context: :native do |form| %>
|
||||
<div class="alert alert-warning font-weight-bold"><%= t ".instructions_html", name: @project.name %></div>
|
||||
<%= card_field_set_tag t(".legal.heading") do %>
|
||||
<%= @contract_template.body %>
|
||||
<p><%= @contract_template.body %></p>
|
||||
<% if @contract_template.fee? %>
|
||||
<p>
|
||||
Fee <span class="font-weight-bold text-success"><%= number_to_currency @contract_template.fee %></span>
|
||||
@@ -34,9 +34,6 @@
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if @contract_template.questionnaire_legal_text.present? %>
|
||||
<%= @contract_template.questionnaire_legal_text %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr>
|
||||
<% end %>
|
||||
@@ -156,4 +153,4 @@
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -3,6 +3,3 @@
|
||||
<%= form.text_area "question_#{n}_text", wrapper_class: "col-sm-12" %>
|
||||
</div>
|
||||
<% end%>
|
||||
<%= form.form_group do %>
|
||||
<%= form.rich_text_area :questionnaire_legal_text, hint: true %>
|
||||
<% end %>
|
||||
|
||||
@@ -15,3 +15,4 @@
|
||||
data-placeholder="<%= dropzone_placeholder_message_for(releasable) %>"
|
||||
data-submit-button="#submit_release">
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<div class="field d-none">
|
||||
<%= form.label :files %>
|
||||
<%= form.file_field :files, disable: true, direct_upload: true, multiple: true, id: "releasable_files", hide_label: true %>
|
||||
<% releasable.files.each do |file| %>
|
||||
<% unless file.persisted? %>
|
||||
<%= hidden_field_tag "#{releasable.model_name.param_key}[files][]", file.signed_id %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="dropzone field border-dashed"
|
||||
data-accepted-files="audio/*,image/*,video/*,application/*"
|
||||
data-behavior="dropzone"
|
||||
data-file-input-id="releasable_files"
|
||||
data-existing-files="<%= mock_photos_json(releasable.files) %>"
|
||||
data-placeholder="<%= dropzone_placeholder_message_for(releasable) %>"
|
||||
data-submit-button="#submit_folder"></div>
|
||||
@@ -18,7 +18,15 @@
|
||||
<div class="card-body p-0">
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<div class="embed-responsive-item">
|
||||
<div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/444718363" style="position:absolute;top:0;left:0;width:100%;height:100%;" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div><script src="https://player.vimeo.com/api/player.js"></script>
|
||||
<table class="w-100 h-100 bg-secondary">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-center align-middle text-white">
|
||||
Video tutorial will be available soon
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -49,5 +49,4 @@ Rails.application.configure do
|
||||
|
||||
ENV["ENABLE_ANALYTICS"] = "true"
|
||||
ENV["BRAYNIAC_AI_API_ENDPOINT"] ||= ""
|
||||
ENV["MILLICAST_API_SECRET"] ||= ""
|
||||
end
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
require "millicast"
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
require 'azure_ad'
|
||||
|
||||
Rails.application.config.middleware.use OmniAuth::Builder do
|
||||
provider :azure_ad,
|
||||
client_id: ENV['AZURE_CLIENT_ID'],
|
||||
client_secret: ENV['AZURE_CLIENT_SECRET'],
|
||||
redirect_uri: ENV['AZURE_REDIRECT_URI'],
|
||||
client_options: {
|
||||
token_url: "#{ENV['AZURE_TENANT_ID']}/oauth2/v2.0/token",
|
||||
authorize_url: "#{ENV['AZURE_TENANT_ID']}/oauth2/v2.0/authorize"
|
||||
},
|
||||
scope: ENV['AZURE_SCOPES']
|
||||
end
|
||||
@@ -62,10 +62,9 @@ en:
|
||||
empty: Acquired Media Releases will appear here
|
||||
table_headers:
|
||||
approved: Approved
|
||||
files_count: No. Files
|
||||
file_infos_count: No. Files
|
||||
name: Name
|
||||
notes: Notes
|
||||
owner_info: Owner Info
|
||||
signed_at: Date Signed
|
||||
tags: Tags
|
||||
new:
|
||||
@@ -141,10 +140,7 @@ en:
|
||||
actions:
|
||||
manage: Manage
|
||||
review: Review
|
||||
sign_amendment: Sign Additional Clause
|
||||
messages:
|
||||
amendment_not_signed_tooltip: Additional Clause Not Yet Signed
|
||||
amendment_signed_tooltip: Additional Clause Signed
|
||||
approved_tooltip: Approved by %{user} on %{timestamp}
|
||||
no_photos: Needs Photo
|
||||
create:
|
||||
@@ -177,7 +173,6 @@ en:
|
||||
empty: Appearance Releases will appear here
|
||||
imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release
|
||||
table_headers:
|
||||
amendment_signed: Additional Clause
|
||||
approved: Approved
|
||||
contact_info: Contact info
|
||||
name: Name
|
||||
@@ -231,7 +226,6 @@ en:
|
||||
broadcast_recordings:
|
||||
confirm_hide: Are you sure you want to hide this recording from everyone?
|
||||
create:
|
||||
alert: A live stream could not be created. Please try again later or contact support.
|
||||
notice: A live stream has been created
|
||||
destroy:
|
||||
alert: A live stream has been deleted
|
||||
@@ -275,9 +269,6 @@ en:
|
||||
stream_multiple_cameras: Stream multiple cameras at one time
|
||||
update:
|
||||
reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
|
||||
form:
|
||||
labels:
|
||||
conference_option: Conference Option
|
||||
bulk_taggings:
|
||||
new_bulk_tag_modal:
|
||||
submit: Add
|
||||
@@ -315,10 +306,6 @@ en:
|
||||
custom_fields:
|
||||
heading: Questionnaire
|
||||
instructions: Please list the questions you wish the signer to answer. Any unused question fields will be hidden.
|
||||
exhibits:
|
||||
heading: Exhibits
|
||||
help:
|
||||
option_field: Leave blank if not required for this contract.
|
||||
exploitable_rights:
|
||||
heading: Exploitable Rights
|
||||
legal:
|
||||
@@ -359,16 +346,10 @@ en:
|
||||
contracts:
|
||||
amendment_page:
|
||||
description_labels:
|
||||
amendment_clause: Clause
|
||||
amendment_signature: Clause Signature
|
||||
amendment_signer_name: Clause Signer Name
|
||||
heading: Additional Clause
|
||||
exhibit_a_page:
|
||||
heading:
|
||||
appearance_release: Exhibit A
|
||||
exhibit_b_page:
|
||||
heading:
|
||||
appearance_release: Exhibit B
|
||||
amendment_clause: Amendment Clause
|
||||
amendment_signature: Amendment Signature
|
||||
amendment_signer_name: Amendment Signer Name
|
||||
heading: Amendment
|
||||
for_office_use_only:
|
||||
description_labels:
|
||||
date_issued: Date Issued
|
||||
@@ -388,7 +369,6 @@ en:
|
||||
other: Minor photos
|
||||
questionnaire:
|
||||
heading:
|
||||
appearance_release: Questionnaire
|
||||
medical_release: Medical Questionnaire
|
||||
misc_release: Questionnaire
|
||||
signature_page:
|
||||
@@ -450,16 +430,17 @@ en:
|
||||
download_type: Type
|
||||
errors_helper:
|
||||
failure_message: "The following errors have prevented this %{model_name} from being submitted:"
|
||||
files:
|
||||
file_infos:
|
||||
edit:
|
||||
heading: Media
|
||||
heading: Add Media
|
||||
update:
|
||||
notice: The release has been updated
|
||||
helpers:
|
||||
help:
|
||||
contract_template:
|
||||
amendment_clause: Leave blank if not required for this contract
|
||||
fee: Leave at $0.00 for no-fee
|
||||
guardian_clause: Leave blank if not required for this contract
|
||||
questionnaire_legal_text: Leave blank if not required for this contract
|
||||
signature_legal_text: Leave blank if not required for this contract
|
||||
task_request:
|
||||
time_allowed: Minimum of 2 hours, no partial hours allowed
|
||||
@@ -537,8 +518,6 @@ en:
|
||||
person_last_name: Last name
|
||||
person_name: Name
|
||||
person_phone: Phone number
|
||||
contract_template:
|
||||
amendment_clause: Additional Contract Clause
|
||||
location_release:
|
||||
address_city: City
|
||||
address_country: Country
|
||||
@@ -847,8 +826,6 @@ en:
|
||||
location_releases:
|
||||
create:
|
||||
notice: The location release has been created
|
||||
csv:
|
||||
no_amendment_clause: No additional contract clause
|
||||
destroy:
|
||||
alert: The location release has been deleted
|
||||
edit:
|
||||
@@ -871,9 +848,7 @@ en:
|
||||
search: Search
|
||||
empty: Location Releases will appear here
|
||||
table_headers:
|
||||
address: Address
|
||||
amendment_signed: Additional Clause
|
||||
amendment_signed_column: Additional Clause
|
||||
amendment_signed: Amendment
|
||||
approved: Approved
|
||||
location_info: Location Info
|
||||
notes: Notes
|
||||
@@ -884,10 +859,10 @@ en:
|
||||
actions:
|
||||
manage: Manage
|
||||
review: Review
|
||||
sign_amendment: Sign Additional Clause
|
||||
sign_amendment: Sign Amendment
|
||||
messages:
|
||||
amendment_not_signed_tooltip: Additional clause not yet signed
|
||||
amendment_signed_tooltip: Additional clause signed
|
||||
amendment_not_signed_tooltip: Amendment not yet signed
|
||||
amendment_signed_tooltip: Amendment Signed
|
||||
approved_tooltip: Approved by %{user} on %{timestamp}
|
||||
no_photos: Needs Photo
|
||||
new:
|
||||
@@ -928,7 +903,6 @@ en:
|
||||
approved: Approved
|
||||
name: Name
|
||||
notes: Notes
|
||||
owner_info: Owner Info
|
||||
signed_at: Date Signed
|
||||
tags: Tags
|
||||
material_release:
|
||||
@@ -953,6 +927,7 @@ en:
|
||||
empty: Medical releases will appear here
|
||||
table_headers:
|
||||
approved: Approved
|
||||
approved?: Approved
|
||||
contact_info: Contact info
|
||||
name: Person name
|
||||
notes: Notes
|
||||
@@ -1102,13 +1077,9 @@ en:
|
||||
actions:
|
||||
folder: Add Folder
|
||||
new: Create New Project
|
||||
search: Search
|
||||
heading: Open Projects
|
||||
new:
|
||||
heading: Create New Project
|
||||
new_project_button:
|
||||
actions:
|
||||
new: Create New Project
|
||||
project:
|
||||
actions:
|
||||
delete: Delete
|
||||
@@ -1166,12 +1137,12 @@ en:
|
||||
heading: Signature
|
||||
amendments:
|
||||
create:
|
||||
amendment_already_signed_message: Release additional clause is already signed!
|
||||
amendment_signed_message: Release additional clause signed successfully! Thank you
|
||||
amendment_already_signed_message: Release amendment is already signed!
|
||||
amendment_signed_message: Release amendment signed successfully! Thank you
|
||||
new:
|
||||
amendment:
|
||||
heading: Additional Clause
|
||||
copy_url: Copy sign additional clause URL
|
||||
heading: Amendment
|
||||
copy_url: Copy sign amendment URL
|
||||
signature:
|
||||
heading: Signature
|
||||
signed_contract_preview: Signed Contract Preview
|
||||
@@ -1180,11 +1151,6 @@ en:
|
||||
notice: Your release has been signed. Thank you!
|
||||
new:
|
||||
cancel: Cancel
|
||||
exhibits:
|
||||
exhibit_a:
|
||||
heading: Exhibit A
|
||||
exhibit_b:
|
||||
heading: Exhibit B
|
||||
guardian_2_info:
|
||||
heading: Second Guardian Information (if company requires)
|
||||
guardian_2_photo:
|
||||
@@ -1214,8 +1180,6 @@ en:
|
||||
no_photo: No photo yet
|
||||
take_photo: Take Photo
|
||||
warning: If your photo appears sideways, it will be autocorrected when you submit your release.
|
||||
questionnaire:
|
||||
heading: Questionnaire
|
||||
signature:
|
||||
heading: Sign Below
|
||||
broadcasts:
|
||||
@@ -1645,9 +1609,3 @@ en:
|
||||
edit: Edit
|
||||
report: Report
|
||||
generating: Generating...
|
||||
conference_meetings:
|
||||
show:
|
||||
alerts:
|
||||
not_authenticated: You are not authenticated via Microsoft, please authenticate and try again
|
||||
failed_to_join: Failed to join conference
|
||||
unknown_conference_option: Unknown conference option
|
||||
|
||||
@@ -16,11 +16,9 @@ es:
|
||||
heading: Guardian Photo
|
||||
index:
|
||||
table_headers:
|
||||
approved: Appproved (ES)
|
||||
file_infos_count: No. Files (ES)
|
||||
name: Name (ES)
|
||||
notes: Notes (ES)
|
||||
owner_info: Owner Info (ES)
|
||||
signed_at: Date Signed (ES)
|
||||
tags: Tags (ES)
|
||||
activerecord:
|
||||
@@ -47,13 +45,6 @@ es:
|
||||
models:
|
||||
appearance_release: Autorización de Aparacimiento
|
||||
appearance_releases:
|
||||
appearance_release:
|
||||
actions:
|
||||
manage: Manage (ES)
|
||||
sign_amendment: Sign Additional Clause (ES)
|
||||
messages:
|
||||
amendment_not_signed_tooltip: Amendment not yet signed (ES)
|
||||
amendment_signed_tooltip: Amendment signed (ES)
|
||||
create:
|
||||
failed_import: Failed to create appearance release for files listed below (ES)
|
||||
matching_started: Matching started (ES)
|
||||
@@ -73,8 +64,6 @@ es:
|
||||
index:
|
||||
imported_appearance_release_missing_attachment: Person photo or contract missing for imported appearance release (ES)
|
||||
table_headers:
|
||||
amendment_signed: Additional Clause (ES)
|
||||
approved: Approved (ES)
|
||||
contact_info: ""
|
||||
name: ""
|
||||
notes: ""
|
||||
@@ -131,9 +120,6 @@ es:
|
||||
stream_multiple_cameras: Stream multiple cameras at one time
|
||||
update:
|
||||
reset_notice: The Share URL has been reset, and the previous URL will no longer work. Please click "Copy URL" and share it again with those who you want to have access to this live stream
|
||||
form:
|
||||
labels:
|
||||
conference_option: Conference Option (ES)
|
||||
contract_templates:
|
||||
blank_contracts:
|
||||
create:
|
||||
@@ -183,7 +169,7 @@ es:
|
||||
amendment_clause: Amendment Clause (ES)
|
||||
amendment_signature: Amendment Signature (ES)
|
||||
amendment_signer_name: Amendment Signer Name (ES)
|
||||
heading: Secondary Clause (ES)
|
||||
heading: Amendment (ES)
|
||||
for_office_use_only:
|
||||
description_labels:
|
||||
date_issued: Date Issued (ES)
|
||||
@@ -299,8 +285,6 @@ es:
|
||||
person_email: Dirección de correo electrónico
|
||||
person_name: Nómbre
|
||||
person_phone: Número de teléfono
|
||||
contract_template:
|
||||
amendment_clause: Additional Contract Clause (ES)
|
||||
material_release:
|
||||
guardian_2_address_city: Guardian 2 city (ES)
|
||||
guardian_2_address_country: Guardian 2 country (ES)
|
||||
@@ -418,23 +402,19 @@ es:
|
||||
update: Approve (ES)
|
||||
update: 'Actualizar %{model}'
|
||||
location_releases:
|
||||
csv:
|
||||
no_amendment_clause: No amendment clause (ES)
|
||||
form:
|
||||
photos:
|
||||
dropzone_label: Tap to take a photo of the Property (optional) (ES)
|
||||
index:
|
||||
table_headers:
|
||||
address: Address (ES)
|
||||
amendment_signed: Additional Clause (ES)
|
||||
amendment_signed_column: Amendment signed (ES)
|
||||
approved: Approved (ES)
|
||||
amendment_signed: Amendment (ES)
|
||||
notes: Notes (ES)
|
||||
signed_at: Date Signed (ES)
|
||||
tags: Tags (ES)
|
||||
location_release:
|
||||
actions:
|
||||
sign_amendment: Sign Additional Clause (ES)
|
||||
sign_amendment: Sign Amendment (ES)
|
||||
messages:
|
||||
amendment_not_signed_tooltip: Amendment not yet signed (ES)
|
||||
amendment_signed_tooltip: Amendment Signed (ES)
|
||||
@@ -454,10 +434,8 @@ es:
|
||||
heading: Guardian Photo
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
name: Name (ES)
|
||||
notes: Notes (ES)
|
||||
owner_info: Owner Info
|
||||
signed_at: Date Signed (ES)
|
||||
tags: Tags (ES)
|
||||
medical_releases:
|
||||
@@ -466,6 +444,7 @@ es:
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
approved?: Approved (ES)
|
||||
contact_info: Contact info (ES)
|
||||
name: Person name (ES)
|
||||
notes: Notes (ES)
|
||||
@@ -479,7 +458,6 @@ es:
|
||||
misc_releases:
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
contact_info: Contact info (ES)
|
||||
name: Person name (ES)
|
||||
notes: Notes (ES)
|
||||
@@ -488,7 +466,6 @@ es:
|
||||
music_releases:
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
composers_count: No. Composers (ES)
|
||||
file_infos_count: No. Files (ES)
|
||||
name: Name (ES)
|
||||
@@ -523,7 +500,7 @@ es:
|
||||
amendment_signed_message: Release amendment signed successfully! Thank you (ES)
|
||||
new:
|
||||
amendment:
|
||||
heading: Additional Clause (ES)
|
||||
heading: Amendment
|
||||
copy_url: Copy sign amendment URL (ES)
|
||||
signature:
|
||||
heading: Signature (ES)
|
||||
@@ -650,7 +627,6 @@ es:
|
||||
heading: Guardian Photo (ES)
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
email: Email (ES)
|
||||
name: Name (ES)
|
||||
notes: Notes (ES)
|
||||
@@ -708,9 +684,3 @@ es:
|
||||
production_elements_logs: Production Elements Logs, and more (ES)
|
||||
reduces_labor_cost: Reduces labor costs (ES)
|
||||
simplifies_cue_sheets: Simplifies Music Cue Sheets, Graphic Cue Sheets (ES)
|
||||
conference_meetings:
|
||||
show:
|
||||
alerts:
|
||||
not_authenticated: You are not authenticated via Microsoft, please authenticate and try again (ES)
|
||||
failed_to_join: Failed to join conference (ES)
|
||||
unknown_conference_option: Unknown conference option (ES)
|
||||
|
||||
@@ -4,8 +4,6 @@ require 'sidekiq/web'
|
||||
Rails.application.routes.draw do
|
||||
AVAILABLE_LOCALES_REGEX = /#{I18n.available_locales.join("|")}/.freeze
|
||||
|
||||
get 'auth/azure_ad/callback', to: 'callbacks#create'
|
||||
|
||||
concern :confirmable do
|
||||
resources :video_release_confirmations, only: [:new, :create, :destroy]
|
||||
end
|
||||
@@ -21,8 +19,8 @@ Rails.application.routes.draw do
|
||||
concern :taggable do
|
||||
resources :acts_as_taggable_on_tags, only: [:new, :create, :destroy], controller: "tags"
|
||||
end
|
||||
concern :file_uploadable do
|
||||
resource :files, only: [:edit, :update]
|
||||
concern :file_infoable do
|
||||
resource :file_infos, only: [:edit, :update]
|
||||
end
|
||||
concern :approvable do
|
||||
resource :approvals, only: [:new, :create]
|
||||
@@ -53,7 +51,7 @@ Rails.application.routes.draw do
|
||||
resource :account, only: [:new, :create, :update]
|
||||
resources :account_auths, only: [:index, :create, :update, :destroy]
|
||||
resources :projects, shallow: true do
|
||||
resources :acquired_media_releases, except: [:show], concerns: [:contractable, :notable, :file_uploadable]
|
||||
resources :acquired_media_releases, except: [:show], concerns: [:contractable, :notable, :file_infoable]
|
||||
resources :appearance_releases, except: [:show], concerns: [:contractable, :notable]
|
||||
resources :appearance_release_imports, only: [:create]
|
||||
resources :location_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
|
||||
@@ -102,7 +100,7 @@ Rails.application.routes.draw do
|
||||
member do
|
||||
delete :destroy_file
|
||||
end
|
||||
resource :conference_meeting, only: [:show]
|
||||
resource :zoom_meeting, only: [:show]
|
||||
resources :broadcast_recordings, only: :destroy
|
||||
end
|
||||
resources :directories, except: [:index] do
|
||||
@@ -133,9 +131,7 @@ Rails.application.routes.draw do
|
||||
resources :projects, only: [] do
|
||||
resources :contract_templates, only: [:index] do
|
||||
resources :talent_releases, only: [:new, :create]
|
||||
resources :appearance_releases, only: [:new, :create] do
|
||||
resources :amendments, only: [:new, :create]
|
||||
end
|
||||
resources :appearance_releases, only: [:new, :create]
|
||||
resources :acquired_media_releases, only: [:new, :create]
|
||||
resources :location_releases, only: [:new, :create] do
|
||||
resources :amendments, only: [:new, :create]
|
||||
@@ -164,7 +160,6 @@ Rails.application.routes.draw do
|
||||
scope 'v1' do
|
||||
get 'sync' => 'sync#index'
|
||||
post 'user_token' => 'user_token#create'
|
||||
post 'users' => 'users#create'
|
||||
resource :profiles, only: [:show]
|
||||
resources :projects, only: [:index] do
|
||||
resources :broadcasts, only: [:index, :show, :update]
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
class AddAmendmentSignerDetailsToAppearanceReleases < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :appearance_releases, :amendment_signer_name, :string
|
||||
end
|
||||
end
|
||||
@@ -1,5 +0,0 @@
|
||||
class AddSimulcastUidToBroadcasts < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :broadcasts, :simulcast_uid, :string
|
||||
end
|
||||
end
|
||||
@@ -1,11 +0,0 @@
|
||||
class AddExhibitFieldsToContractTemplates < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :contract_templates, :exhibit_a_legal_text, :text
|
||||
add_column :contract_templates, :exhibit_a_question_text, :text
|
||||
add_column :contract_templates, :exhibit_b_legal_text, :text
|
||||
add_column :contract_templates, :exhibit_b_question_text, :text
|
||||
|
||||
add_column :appearance_releases, :exhibit_a_answer, :text
|
||||
add_column :appearance_releases, :exhibit_b_answer, :text
|
||||
end
|
||||
end
|
||||
@@ -1,19 +0,0 @@
|
||||
class AddQuestionAnswersToAppearanceReleases < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :appearance_releases, :question_1_answer, :text
|
||||
add_column :appearance_releases, :question_2_answer, :text
|
||||
add_column :appearance_releases, :question_3_answer, :text
|
||||
add_column :appearance_releases, :question_4_answer, :text
|
||||
add_column :appearance_releases, :question_5_answer, :text
|
||||
add_column :appearance_releases, :question_6_answer, :text
|
||||
add_column :appearance_releases, :question_7_answer, :text
|
||||
add_column :appearance_releases, :question_8_answer, :text
|
||||
add_column :appearance_releases, :question_9_answer, :text
|
||||
add_column :appearance_releases, :question_10_answer, :text
|
||||
add_column :appearance_releases, :question_11_answer, :text
|
||||
add_column :appearance_releases, :question_12_answer, :text
|
||||
add_column :appearance_releases, :question_13_answer, :text
|
||||
add_column :appearance_releases, :question_14_answer, :text
|
||||
add_column :appearance_releases, :question_15_answer, :text
|
||||
end
|
||||
end
|
||||
@@ -1,5 +0,0 @@
|
||||
class AddVideoConferenceUrlOverrideToBroadcasts < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :broadcasts, :video_conference_url_override, :string
|
||||
end
|
||||
end
|
||||
@@ -1,8 +0,0 @@
|
||||
class AddMicrosoftInfoToUsers < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :users, :microsoft_user_id, :string
|
||||
add_column :users, :microsoft_access_token, :string
|
||||
add_column :users, :microsoft_refresh_token, :string
|
||||
add_column :users, :microsoft_token_expires_at, :integer
|
||||
end
|
||||
end
|
||||
@@ -1,6 +0,0 @@
|
||||
class AddConferenceDetailsToBroadcasts < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :broadcasts, :conference_option, :string
|
||||
add_column :broadcasts, :conference_join_url, :string
|
||||
end
|
||||
end
|
||||
@@ -365,25 +365,7 @@ CREATE TABLE public.appearance_releases (
|
||||
guardian_2_address_country character varying,
|
||||
approved_by_user_name text,
|
||||
approved_by_user_email text,
|
||||
approved_at timestamp without time zone,
|
||||
amendment_signer_name character varying,
|
||||
exhibit_a_answer text,
|
||||
exhibit_b_answer text,
|
||||
question_1_answer text,
|
||||
question_2_answer text,
|
||||
question_3_answer text,
|
||||
question_4_answer text,
|
||||
question_5_answer text,
|
||||
question_6_answer text,
|
||||
question_7_answer text,
|
||||
question_8_answer text,
|
||||
question_9_answer text,
|
||||
question_10_answer text,
|
||||
question_11_answer text,
|
||||
question_12_answer text,
|
||||
question_13_answer text,
|
||||
question_14_answer text,
|
||||
question_15_answer text
|
||||
approved_at timestamp without time zone
|
||||
);
|
||||
|
||||
|
||||
@@ -584,11 +566,7 @@ CREATE TABLE public.broadcasts (
|
||||
full_live_stream_playback_uid character varying,
|
||||
stream_url_override character varying,
|
||||
stream_key_override character varying,
|
||||
director_mode_video_embed text,
|
||||
simulcast_uid character varying,
|
||||
video_conference_url_override character varying,
|
||||
conference_option character varying,
|
||||
conference_join_url character varying
|
||||
director_mode_video_embed text
|
||||
);
|
||||
|
||||
|
||||
@@ -686,11 +664,7 @@ CREATE TABLE public.contract_templates (
|
||||
question_13_text text,
|
||||
question_14_text text,
|
||||
question_15_text text,
|
||||
accessibility integer DEFAULT 0,
|
||||
exhibit_a_legal_text text,
|
||||
exhibit_a_question_text text,
|
||||
exhibit_b_legal_text text,
|
||||
exhibit_b_question_text text
|
||||
accessibility integer DEFAULT 0
|
||||
);
|
||||
|
||||
|
||||
@@ -1806,11 +1780,7 @@ CREATE TABLE public.users (
|
||||
remember_created_at timestamp without time zone,
|
||||
first_name character varying,
|
||||
last_name character varying,
|
||||
time_zone character varying DEFAULT 'UTC'::character varying NOT NULL,
|
||||
microsoft_user_id character varying,
|
||||
microsoft_access_token character varying,
|
||||
microsoft_refresh_token character varying,
|
||||
microsoft_token_expires_at integer
|
||||
time_zone character varying DEFAULT 'UTC'::character varying NOT NULL
|
||||
);
|
||||
|
||||
|
||||
@@ -4026,13 +3996,6 @@ INSERT INTO "schema_migrations" (version) VALUES
|
||||
('20200727143209'),
|
||||
('20200730050903'),
|
||||
('20200803145912'),
|
||||
('20200803150138'),
|
||||
('20200804093409'),
|
||||
('20200807190607'),
|
||||
('20200811102720'),
|
||||
('20200812060406'),
|
||||
('20200819070738'),
|
||||
('20200820081251'),
|
||||
('20200820081524');
|
||||
('20200803150138');
|
||||
|
||||
|
||||
|
||||
124
lib/azure_ad.rb
124
lib/azure_ad.rb
@@ -1,124 +0,0 @@
|
||||
require 'omniauth-oauth2'
|
||||
|
||||
# This file is from omniauth-microsoft_graph lib (not installed)
|
||||
# It is modified to make auth work
|
||||
|
||||
module OmniAuth
|
||||
module Strategies
|
||||
class AzureAd < OmniAuth::Strategies::OAuth2
|
||||
BASE_SCOPE_URL = 'https://graph.microsoft.com/'
|
||||
BASE_SCOPES = %w[offline_access openid email profile].freeze
|
||||
DEFAULT_SCOPE = 'offline_access openid email profile User.Read'.freeze
|
||||
|
||||
option :name, :azure_ad
|
||||
|
||||
option :client_options,
|
||||
site: 'https://login.microsoftonline.com/'
|
||||
|
||||
option :authorize_options, %i[state callback_url scope response_mode]
|
||||
|
||||
option :token_params, {}
|
||||
|
||||
option :scope, DEFAULT_SCOPE
|
||||
option :authorized_client_ids, []
|
||||
|
||||
uid { raw_info["id"] }
|
||||
|
||||
info do
|
||||
{
|
||||
# 'email' => raw_info["mail"],
|
||||
# 'first_name' => raw_info["givenName"],
|
||||
# 'last_name' => raw_info["surname"],
|
||||
# 'name' => [raw_info["givenName"], raw_info["surname"]].join(' '),
|
||||
# 'nickname' => raw_info["displayName"],
|
||||
}
|
||||
end
|
||||
|
||||
extra do
|
||||
{
|
||||
# 'raw_info' => raw_info,
|
||||
# 'params' => access_token.params,
|
||||
# 'aud' => options.client_id
|
||||
}
|
||||
end
|
||||
|
||||
def authorize_params
|
||||
super.tap do |params|
|
||||
options[:authorize_options].each do |k|
|
||||
params[k] = request.params[k.to_s] unless [nil, ''].include?(request.params[k.to_s])
|
||||
end
|
||||
|
||||
params[:scope] = get_scope(params)
|
||||
|
||||
session['omniauth.state'] = params[:state] if params[:state]
|
||||
end
|
||||
end
|
||||
|
||||
def raw_info
|
||||
@raw_info ||= access_token.get('https://graph.microsoft.com/v1.0/me').parsed
|
||||
end
|
||||
|
||||
def callback_url
|
||||
options[:callback_url] || full_host + script_name + callback_path
|
||||
end
|
||||
|
||||
def custom_build_access_token
|
||||
token_response = get_access_token(request)
|
||||
session[:microsoft_graph_api_token] = token_response.token
|
||||
token_response
|
||||
end
|
||||
|
||||
alias build_access_token custom_build_access_token
|
||||
|
||||
private
|
||||
|
||||
def get_access_token(request)
|
||||
verifier = request.params['code']
|
||||
redirect_uri = request.params['redirect_uri'] || request.params['callback_url']
|
||||
if verifier && request.xhr?
|
||||
client_get_token(verifier, redirect_uri || '/auth/azure_ad/callback')
|
||||
elsif verifier
|
||||
client_get_token(verifier, redirect_uri || callback_url)
|
||||
elsif verify_token(request.params['access_token'])
|
||||
::OAuth2::AccessToken.from_hash(client, request.params.dup)
|
||||
elsif request.content_type =~ /json/i
|
||||
begin
|
||||
body = JSON.parse(request.body.read)
|
||||
request.body.rewind # rewind request body for downstream middlewares
|
||||
verifier = body && body['code']
|
||||
client_get_token(verifier, '/auth/azure_ad/callback') if verifier
|
||||
rescue JSON::ParserError => e
|
||||
warn "[omniauth google-oauth2] JSON parse error=#{e}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def client_get_token(verifier, redirect_uri)
|
||||
client.auth_code.get_token(verifier, get_token_options(redirect_uri), get_token_params)
|
||||
end
|
||||
|
||||
def get_token_params
|
||||
deep_symbolize(options.auth_token_params || {})
|
||||
end
|
||||
|
||||
def get_token_options(redirect_uri = '')
|
||||
{ redirect_uri: redirect_uri }.merge(token_params.to_hash(symbolize_keys: true))
|
||||
end
|
||||
|
||||
def get_scope(params)
|
||||
raw_scope = params[:scope] || DEFAULT_SCOPE
|
||||
scope_list = raw_scope.split(' ').map { |item| item.split(',') }.flatten
|
||||
scope_list.map! { |s| s =~ %r{^https?://} || BASE_SCOPES.include?(s) ? s : "#{BASE_SCOPE_URL}#{s}" }
|
||||
scope_list.join(' ')
|
||||
end
|
||||
|
||||
def verify_token(access_token)
|
||||
return false unless access_token
|
||||
# access_token.get('https://graph.microsoft.com/v1.0/me').parsed
|
||||
raw_response = client.request(:get, 'https://graph.microsoft.com/v1.0/me',
|
||||
params: { access_token: access_token }).parsed
|
||||
(raw_response['aud'] == options.client_id) || options.authorized_client_ids.include?(raw_response['aud'])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,7 +0,0 @@
|
||||
module Knock
|
||||
class AuthTokenController < ApplicationController
|
||||
skip_before_action :authenticate
|
||||
alias authenticate_with_token authenticate
|
||||
before_action :authenticate_with_token
|
||||
end
|
||||
end
|
||||
@@ -1,107 +0,0 @@
|
||||
require 'httparty'
|
||||
|
||||
class MicrosoftGraph
|
||||
BASE_URL = 'https://graph.microsoft.com/v1.0'.freeze
|
||||
|
||||
def initialize(current_user, client_id, client_secret, tenant_id, scopes)
|
||||
@current_user = current_user
|
||||
@uid = current_user.microsoft_user_id
|
||||
@token = current_user.microsoft_access_token
|
||||
@refresh_token = current_user.microsoft_refresh_token
|
||||
@token_expires_at = current_user.microsoft_token_expires_at
|
||||
|
||||
@client_id = client_id
|
||||
@client_secret = client_secret
|
||||
@tenant_id = tenant_id
|
||||
@scopes = scopes
|
||||
end
|
||||
|
||||
def create_teams_meeting(subject)
|
||||
if @refresh_token.nil? || @token_expires_at.nil?
|
||||
raise ActionController::InvalidAuthenticityToken, 'Missing refresh token / token expiration'
|
||||
return
|
||||
end
|
||||
|
||||
# Obtain new token if token is expired or will expire in less than 5 minutes
|
||||
if 5.minutes.from_now.to_i > @token_expires_at.seconds
|
||||
refresh_access_token
|
||||
end
|
||||
|
||||
if @token.nil?
|
||||
raise ActionController::InvalidAuthenticityToken, 'Missing access token'
|
||||
return
|
||||
end
|
||||
|
||||
response = HTTParty.post(
|
||||
"#{BASE_URL}/me/onlineMeetings",
|
||||
body: {
|
||||
subject: subject,
|
||||
participants: {
|
||||
organizer: {
|
||||
identity: {
|
||||
user: {
|
||||
id: @uid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}.to_json,
|
||||
headers: {
|
||||
Authorization: "Bearer #{@token}",
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
)
|
||||
|
||||
raise StandardError, 'Authenticated user does not have a permission to create Teams Online Meeting' if response.code == 403
|
||||
|
||||
if response.code != 201
|
||||
Rails.logger.error('[Microsoft Graph Error]')
|
||||
Rails.logger.error(response.inspect)
|
||||
raise StandardError, "Failed to create teams meeting [#{response.code}]"
|
||||
else
|
||||
JSON.parse(response.body)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def refresh_token_url
|
||||
"https://login.microsoftonline.com/#{@tenant_id}/oauth2/v2.0/token"
|
||||
end
|
||||
|
||||
def refresh_access_token
|
||||
response = HTTParty.post(refresh_token_url,
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
},
|
||||
body: {
|
||||
client_id: @client_id,
|
||||
client_secret: @client_secret,
|
||||
refresh_token: @refresh_token,
|
||||
grant_type: 'refresh_token',
|
||||
scope: @scopes
|
||||
})
|
||||
|
||||
if response.code != 200
|
||||
Rails.logger.error '[Microsoft Graph Error] Failed to obtain new access token using refresh token'
|
||||
Rails.logger.error(response.inspect)
|
||||
raise StandardError, 'Failed to obtain new access token'
|
||||
end
|
||||
|
||||
parsed_response = JSON.parse(response.body)
|
||||
|
||||
new_access_token = parsed_response['access_token']
|
||||
new_refresh_token = parsed_response['refresh_token']
|
||||
token_expires_in = parsed_response['expires_in'] # For how long access token is valid (in seconds)
|
||||
token_new_expiration_time = Time.now.to_i + token_expires_in
|
||||
|
||||
@current_user.microsoft_access_token = new_access_token
|
||||
@current_user.microsoft_refresh_token = new_refresh_token
|
||||
@current_user.microsoft_token_expires_at = token_new_expiration_time
|
||||
@current_user.save!
|
||||
|
||||
@token = new_access_token
|
||||
@refresh_token = new_refresh_token
|
||||
@token_expires_at = token_new_expiration_time
|
||||
end
|
||||
end
|
||||
@@ -1,2 +0,0 @@
|
||||
require_relative "./millicast/base"
|
||||
require_relative "./millicast/publish_token"
|
||||
@@ -1,14 +0,0 @@
|
||||
module Millicast
|
||||
class Base < ActiveResource::Base
|
||||
self.site = 'https://api.millicast.com/api'
|
||||
self.connection.auth_type = :bearer
|
||||
self.connection.bearer_token = ENV.fetch("MILLICAST_API_SECRET")
|
||||
self.include_format_in_path = false
|
||||
|
||||
def self.enable_logging
|
||||
ActiveSupport::Notifications.subscribe('request.active_resource') do |name, start, finish, id, payload|
|
||||
puts payload
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,5 +0,0 @@
|
||||
module Millicast
|
||||
class PublishToken < Base
|
||||
self.collection_name = "publish_token"
|
||||
end
|
||||
end
|
||||
@@ -87,10 +87,26 @@ RSpec.describe AcquiredMediaReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(AcquiredMediaRelease.last)
|
||||
end
|
||||
|
||||
it "adds files to release" do
|
||||
post :create, params: { project_id: project, acquired_media_release: acquired_media_release_params.merge(file_params) }
|
||||
it "creates nested file info records" do
|
||||
expect {
|
||||
post :create, params: {
|
||||
project_id: project,
|
||||
acquired_media_release: acquired_media_release_params.merge(
|
||||
file_infos_attributes: {
|
||||
0 => attributes_for(:file_info)
|
||||
}
|
||||
)
|
||||
}
|
||||
}.to change(FileInfo, :count).by(1)
|
||||
expect(AcquiredMediaRelease.last.file_infos.size).to eq(1)
|
||||
end
|
||||
|
||||
expect(AcquiredMediaRelease.last.files.size).to eq(1)
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, acquired_media_release: acquired_media_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "AcquiredMediaRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
@@ -190,11 +206,4 @@ RSpec.describe AcquiredMediaReleasesController, type: :controller do
|
||||
restriction_text: "restrictions",
|
||||
}
|
||||
end
|
||||
|
||||
def file_params
|
||||
path = Rails.root.join("spec", "fixtures", "files", "contract.pdf")
|
||||
contract_file = Rack::Test::UploadedFile.new(path, "application/pdf")
|
||||
|
||||
{ files: [contract_file] }
|
||||
end
|
||||
end
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user