Upstream sync
This commit is contained in:
@@ -29,3 +29,6 @@ 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=
|
||||
|
||||
@@ -18,7 +18,6 @@ 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
|
||||
@@ -119,11 +118,8 @@ class AcquiredMediaReleasesController < ApplicationController
|
||||
:term_id, :term_text,
|
||||
:restriction_id, :restriction_text,
|
||||
categories: [],
|
||||
file_infos_attributes: %i[
|
||||
filename
|
||||
content_type
|
||||
byte_size
|
||||
])
|
||||
files: []
|
||||
)
|
||||
end
|
||||
|
||||
def build_acquired_media_release(attrs = {})
|
||||
@@ -139,8 +135,4 @@ 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,6 +19,11 @@ class Admin::BroadcastsController < Admin::ApplicationController
|
||||
end
|
||||
|
||||
def broadcast_update_params
|
||||
params.require(:broadcast).permit(:stream_url_override, :stream_key_override, :director_mode_video_embed)
|
||||
params.require(:broadcast).permit(
|
||||
:video_conference_url_override,
|
||||
:stream_url_override,
|
||||
:stream_key_override,
|
||||
:director_mode_video_embed
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -21,7 +21,6 @@ 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
|
||||
@@ -181,8 +180,4 @@ 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
|
||||
|
||||
@@ -18,7 +18,6 @@ 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}"
|
||||
@@ -127,8 +126,4 @@ 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,10 +23,13 @@ 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 = url_for [@broadcast.project, @broadcast, :zoom_meeting]
|
||||
@conference_url = conference_url_for(@broadcast)
|
||||
@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'
|
||||
@@ -109,6 +112,10 @@ class BroadcastsController < ApplicationController
|
||||
results
|
||||
end
|
||||
|
||||
def conference_url_for(broadcast)
|
||||
broadcast.video_conference_url_override || url_for([broadcast.project, broadcast, :zoom_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
|
||||
|
||||
@@ -26,6 +26,7 @@ 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]
|
||||
@@ -94,7 +95,9 @@ class ContractTemplatesController < ApplicationController
|
||||
:question_9_text, :question_10_text,
|
||||
:question_11_text, :question_12_text,
|
||||
:question_13_text, :question_14_text,
|
||||
:question_15_text)
|
||||
:question_15_text, :questionnaire_legal_text,
|
||||
:exhibit_a_legal_text, :exhibit_a_question_text,
|
||||
:exhibit_b_legal_text, :exhibit_b_question_text)
|
||||
end
|
||||
|
||||
def download_attributes
|
||||
@@ -104,4 +107,8 @@ 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 FileInfosController < ApplicationController
|
||||
class FilesController < ApplicationController
|
||||
before_action :set_releasable
|
||||
|
||||
layout "project"
|
||||
@@ -16,7 +16,7 @@ class FileInfosController < ApplicationController
|
||||
|
||||
if @releasable.update(releasable_params)
|
||||
SetTagsForReleasableJob.perform_later(@releasable)
|
||||
redirect_to [@project, @releasable.model_name.plural], notice: t(".notice")
|
||||
redirect_to [@project, @releasable.model_name.plural], notice: "Files added successfully to the release."
|
||||
else
|
||||
render :edit
|
||||
end
|
||||
@@ -29,16 +29,10 @@ class FileInfosController < ApplicationController
|
||||
end
|
||||
|
||||
def set_releasable
|
||||
@releasable = authorize policy_scope(releasable_param.type).find(releasable_param.id), :"#{action_name}_file_infos?"
|
||||
@releasable = authorize policy_scope(releasable_param.type).find(releasable_param.id), :edit_files?
|
||||
end
|
||||
|
||||
def releasable_params
|
||||
params.fetch(releasable_param.name, {}).permit(
|
||||
file_infos_attributes: [
|
||||
:filename,
|
||||
:content_type,
|
||||
:byte_size
|
||||
],
|
||||
)
|
||||
params.fetch(releasable_param.name, {}).permit(files: [])
|
||||
end
|
||||
end
|
||||
@@ -18,7 +18,6 @@ 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
|
||||
@@ -90,8 +89,4 @@ 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,7 +18,6 @@ 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
|
||||
@@ -136,8 +135,4 @@ 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,7 +22,6 @@ 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
|
||||
@@ -111,8 +110,4 @@ 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 = policy_scope(Current.account.projects).order_by_name
|
||||
@projects = filtered_projects.order_by_name
|
||||
end
|
||||
|
||||
def new
|
||||
@@ -46,6 +46,20 @@ 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,7 +10,6 @@ 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
|
||||
@@ -100,11 +99,8 @@ class Public::AcquiredMediaReleasesController < Public::BaseController
|
||||
:signature_base64,
|
||||
:locale, :contract_template,
|
||||
categories: [],
|
||||
file_infos_attributes: %i[
|
||||
filename
|
||||
content_type
|
||||
byte_size
|
||||
])
|
||||
files: []
|
||||
)
|
||||
end
|
||||
|
||||
def acquired_media_release_params_with_locale
|
||||
@@ -114,8 +110,4 @@ 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,7 +10,6 @@ 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
|
||||
@@ -87,12 +86,35 @@ 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)
|
||||
:locale, :contract_template,
|
||||
:exhibit_a_answer, :exhibit_b_answer
|
||||
)
|
||||
end
|
||||
|
||||
def appearance_release_params_with_locale
|
||||
@@ -102,8 +124,4 @@ 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 = broadcast_zoom_meeting_url(@broadcast.token)
|
||||
@conference_url = conference_url_for(@broadcast)
|
||||
@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,6 +43,10 @@ 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,7 +10,6 @@ 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
|
||||
@@ -76,8 +75,4 @@ 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,7 +10,6 @@ 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
|
||||
@@ -104,8 +103,4 @@ 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,7 +12,6 @@ class Public::MedicalReleasesController < Public::BaseController
|
||||
if @medical_release.contract_template.present?
|
||||
AttachContractToReleasableJob.perform_later(@medical_release)
|
||||
end
|
||||
log_create_analytics
|
||||
else
|
||||
render :new
|
||||
end
|
||||
@@ -116,8 +115,4 @@ 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,7 +12,6 @@ class Public::MiscReleasesController < Public::BaseController
|
||||
if @misc_release.contract_template.present?
|
||||
AttachContractToReleasableJob.perform_later(@misc_release)
|
||||
end
|
||||
log_create_analytics
|
||||
else
|
||||
render :new
|
||||
end
|
||||
@@ -50,6 +49,14 @@ 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
|
||||
@@ -113,8 +120,4 @@ 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,7 +10,6 @@ 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
|
||||
@@ -108,8 +107,4 @@ 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,7 +18,6 @@ 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")
|
||||
@@ -137,8 +136,4 @@ 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,6 +6,6 @@ module MailHelper
|
||||
"1. Tell us the name of the video: \n\n" \
|
||||
"2. Attach each EDL to this email. Please make sure to indicate whether the EDL is a Video Only, Graphics Only, or Audio Only EDL."
|
||||
|
||||
mail_to "info@bigmedia.ai", content, subject: subject, body: body
|
||||
mail_to "info@mesuite.ai", content, subject: subject, body: body
|
||||
end
|
||||
end
|
||||
|
||||
@@ -67,6 +67,23 @@ 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);
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class AdminMailer < ApplicationMailer
|
||||
default to: %w(bray@bigmedia.ai lee@bigmedia.ai)
|
||||
default to: %w[bray@mesuite.ai]
|
||||
|
||||
def new_video(video)
|
||||
@video = video
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
class ApplicationMailer < ActionMailer::Base
|
||||
default from: ENV.fetch("MAILER_FROM_ADDRESS") { "support@bigmedia.ai" }
|
||||
default from: ENV.fetch("MAILER_FROM_ADDRESS") { "support@mesuite.ai" }
|
||||
layout "mailer"
|
||||
end
|
||||
|
||||
@@ -18,13 +18,14 @@ class AcquiredMediaRelease < ApplicationRecord
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
%i[name file_infos_count]
|
||||
%i[name files_count owner_info]
|
||||
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
|
||||
|
||||
accepts_nested_attributes_for :file_infos
|
||||
has_many_attached :files
|
||||
|
||||
composed_of :person_address,
|
||||
class_name: "Address",
|
||||
@@ -102,7 +103,19 @@ class AcquiredMediaRelease < ApplicationRecord
|
||||
true
|
||||
end
|
||||
|
||||
def file_infos_count
|
||||
file_infos.any? ? file_infos.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
|
||||
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%"])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -40,7 +40,7 @@ class AppHost
|
||||
use_ssl: false,
|
||||
},
|
||||
production: {
|
||||
host: "bigmedia.ai",
|
||||
host: "mesuite.ai",
|
||||
use_ssl: true,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,9 @@ class AppearanceRelease < ApplicationRecord
|
||||
include SecondGuardianName
|
||||
include CsvExportable
|
||||
include Approvable
|
||||
include Amendmenable
|
||||
|
||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
|
||||
@@ -49,11 +49,13 @@ class Broadcast < ApplicationRecord
|
||||
private
|
||||
|
||||
def create_mux_live_stream
|
||||
stream = MuxLiveStream.new
|
||||
stream = MuxLiveStream.create_with_simulcast
|
||||
|
||||
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[clean_notes clean_tags signed_on].freeze
|
||||
COMMON_HEADERS = %i[approved notes tags signed_at].freeze
|
||||
COMMON_VALUES = %w[approved? clean_notes clean_tags signed_on].freeze
|
||||
|
||||
included do
|
||||
class << self
|
||||
@@ -29,11 +29,20 @@ 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 += "#{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 += "#{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.delete_suffix '; '
|
||||
end
|
||||
|
||||
|
||||
@@ -23,6 +23,9 @@ 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
|
||||
@@ -70,6 +73,14 @@ 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[name address]
|
||||
%i[location_info owner_info amendment_signed_column]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -67,6 +67,18 @@ 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]
|
||||
%i[name owner_info]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
41
app/models/millicast_destination.rb
Normal file
41
app/models/millicast_destination.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
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,6 +11,7 @@ class MiscRelease < ApplicationRecord
|
||||
include GuardianPhotoable
|
||||
include CsvExportable
|
||||
include Approvable
|
||||
include Exploitable
|
||||
|
||||
class << self
|
||||
def custom_csv_exportable_headers
|
||||
|
||||
@@ -1,4 +1,15 @@
|
||||
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
|
||||
@@ -15,6 +26,15 @@ 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,6 +2,7 @@ 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)
|
||||
@@ -42,6 +43,15 @@ 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,11 +19,7 @@ class AcquiredMediaReleasePolicy < ApplicationPolicy
|
||||
true
|
||||
end
|
||||
|
||||
def edit_file_infos?
|
||||
true
|
||||
end
|
||||
|
||||
def update_file_infos?
|
||||
def edit_files?
|
||||
true
|
||||
end
|
||||
|
||||
|
||||
@@ -34,4 +34,8 @@ 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,6 +169,24 @@ 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
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
<%= acquired_media_release.name %>
|
||||
</td>
|
||||
<td>
|
||||
<% if acquired_media_release.file_infos.any? %>
|
||||
<%= acquired_media_release.file_infos.size %>
|
||||
<% if acquired_media_release.files.any? %>
|
||||
<%= acquired_media_release.files.size %>
|
||||
<% else %>
|
||||
<%= fa_icon("warning", text: t(".no_media"), class: "text-danger") %>
|
||||
<% end %>
|
||||
@@ -40,8 +40,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_file_infos? %>
|
||||
<%= link_to fa_icon("file fw", text: "Add Media"), [:edit, acquired_media_release, :file_infos], class: "dropdown-item" %>
|
||||
<% if policy(acquired_media_release).edit_files? %>
|
||||
<%= link_to fa_icon("file fw", text: "Media"), [:edit, acquired_media_release, :files], 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/file_infos_dropzone", form: form, releasable: acquired_media_release %>
|
||||
<%= render "shared/releasable_files_dropzone", form: form, releasable: acquired_media_release %>
|
||||
|
||||
<div class="<%= class_string("collapse" => !acquired_media_release.minor?) %>" data-ujs-target="guardian-fields">
|
||||
<br>
|
||||
|
||||
@@ -28,7 +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.file_infos_count") %></th>
|
||||
<th><%= t(".table_headers.files_count") %></th>
|
||||
<th><%= t(".table_headers.owner_info") %></th>
|
||||
<th><%= t(".table_headers.notes") %></th>
|
||||
<th><%= t(".table_headers.tags") %></th>
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
<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,6 +15,7 @@
|
||||
<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>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<%= 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,6 +34,17 @@
|
||||
<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 } %>
|
||||
@@ -44,6 +55,9 @@
|
||||
<% 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,6 +51,7 @@
|
||||
<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,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), "#custom_fields": %w(medical misc), "#amendment_clause": %w(location) } }, 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 misc), "#custom_fields": %w(medical misc appearance), "#amendment_clause": %w(appearance location), "#exhibit_fields": %w(appearance) } }, 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,6 +34,25 @@
|
||||
<%= 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 %>
|
||||
|
||||
8
app/views/contracts/_exhibit_a_page.html.erb
Normal file
8
app/views/contracts/_exhibit_a_page.html.erb
Normal file
@@ -0,0 +1,8 @@
|
||||
<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 %>
|
||||
8
app/views/contracts/_exhibit_b_page.html.erb
Normal file
8
app/views/contracts/_exhibit_b_page.html.erb
Normal file
@@ -0,0 +1,8 @@
|
||||
<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,38 +8,37 @@
|
||||
Description: <%= release.description %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
<% photos = release.file_infos.photo %>
|
||||
<% photos = release.image_files %>
|
||||
<% unless photos.empty? %>
|
||||
<h3>Photos</h3>
|
||||
<ul>
|
||||
<% photos.each do |file_info| %>
|
||||
<% photos.each do |blob| %>
|
||||
<li>
|
||||
<%= file_info.filename %>
|
||||
<%= blob.filename %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
<% videos = release.file_infos.video %>
|
||||
<% videos = release.video_files %>
|
||||
<% unless videos.empty? %>
|
||||
<h3>Videos</h3>
|
||||
<ul>
|
||||
<% videos.each do |file_info| %>
|
||||
<% videos.each do |blob| %>
|
||||
<li>
|
||||
<%= file_info.filename %>
|
||||
<%= blob.filename %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
<% other = release.file_infos.other %>
|
||||
<% other = release.other_files %>
|
||||
<% unless other.empty? %>
|
||||
<h3>Other files</h3>
|
||||
<ul>
|
||||
<% other.each do |file_info| %>
|
||||
<% other.each do |blob| %>
|
||||
<li>
|
||||
<%= file_info.filename %>
|
||||
<%= blob.filename %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
@@ -6,3 +6,5 @@
|
||||
<p><%= releasable.public_send("question_#{n}_answer") %></p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= contract_template.questionnaire_legal_text %>
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
<%= contract_template.guardian_clause %>
|
||||
<% end %>
|
||||
|
||||
<% if releasable.model_name.in? %w(MedicalRelease MiscRelease) %>
|
||||
<%# if releasable.model_name.in? %w(MedicalRelease MiscRelease AppearanceRelease) %>
|
||||
<% if releasable.respond_to?(:question_1_answer) %>
|
||||
<div class="page">
|
||||
<%= render "contracts/questionnaire", releasable: releasable, contract_template: contract_template, preview: preview %>
|
||||
</div>
|
||||
@@ -30,7 +31,22 @@
|
||||
<div class="page">
|
||||
<%= render "contracts/amendment_page", releasable: releasable, preview: preview %>
|
||||
</div>
|
||||
<%end %>
|
||||
<% 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 %>
|
||||
|
||||
|
||||
<% 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.file_infos.any? %>
|
||||
<% if @releasable.files.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, :file_infos] do |form| %>
|
||||
<%= render "shared/file_infos_dropzone", form: form, releasable: @releasable %>
|
||||
<%= bootstrap_form_with model: @releasable, url: [@releasable, :files] do |form| %>
|
||||
<%= render "shared/releasable_files_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" %>
|
||||
10
app/views/projects/_new_project_button.html.erb
Normal file
10
app/views/projects/_new_project_button.html.erb
Normal file
@@ -0,0 +1,10 @@
|
||||
<% 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,17 +1,14 @@
|
||||
<% if @projects.any? %>
|
||||
<section class="container mt-5">
|
||||
<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>
|
||||
<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") %>
|
||||
<% end %>
|
||||
</div>
|
||||
<ul id="projects" class="list-unstyled mt-2 row">
|
||||
<%= render partial: "new_project_button" %>
|
||||
<%= render @projects %>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
4
app/views/projects/index.js.erb
Normal file
4
app/views/projects/index.js.erb
Normal file
@@ -0,0 +1,4 @@
|
||||
$("#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/file_infos_dropzone", form: form, releasable: @acquired_media_release %>
|
||||
<%= render "shared/releasable_files_dropzone", form: form, releasable: @acquired_media_release %>
|
||||
<% end %>
|
||||
|
||||
<hr>
|
||||
|
||||
@@ -13,6 +13,29 @@
|
||||
<% 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 %>
|
||||
@@ -25,6 +48,19 @@
|
||||
<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 %>
|
||||
<p><%= @contract_template.body %></p>
|
||||
<%= @contract_template.body %>
|
||||
<% if @contract_template.fee? %>
|
||||
<p>
|
||||
Fee <span class="font-weight-bold text-success"><%= number_to_currency @contract_template.fee %></span>
|
||||
@@ -34,6 +34,9 @@
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if @contract_template.questionnaire_legal_text.present? %>
|
||||
<%= @contract_template.questionnaire_legal_text %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<hr>
|
||||
<% end %>
|
||||
@@ -153,4 +156,4 @@
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -3,3 +3,6 @@
|
||||
<%= 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,4 +15,3 @@
|
||||
data-placeholder="<%= dropzone_placeholder_message_for(releasable) %>"
|
||||
data-submit-button="#submit_release">
|
||||
</div>
|
||||
|
||||
|
||||
17
app/views/shared/_releasable_files_dropzone.html.erb
Normal file
17
app/views/shared/_releasable_files_dropzone.html.erb
Normal file
@@ -0,0 +1,17 @@
|
||||
<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>
|
||||
@@ -10,5 +10,5 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you have questions about how to use the software, please visit <%= link_to "BiGMedia.ai", "https://www.bigmedia.ai/contact" %>.
|
||||
If you have questions about how to use the software, please visit <%= link_to "MESuite.ai", "https://www.mesuite.ai/contact" %>.
|
||||
</p>
|
||||
|
||||
@@ -7,4 +7,4 @@ Please click below to set your password.
|
||||
<%= edit_password_reset_url(id: @user.password_reset_token, host: AppHost.new.domain_with_port) %>
|
||||
<% end %>
|
||||
|
||||
If you have questions about how to use the software, please visit https://www.bigmedia.ai/contact.
|
||||
If you have questions about how to use the software, please visit https://www.mesuite.ai/contact.
|
||||
|
||||
@@ -49,4 +49,5 @@ Rails.application.configure do
|
||||
|
||||
ENV["ENABLE_ANALYTICS"] = "true"
|
||||
ENV["BRAYNIAC_AI_API_ENDPOINT"] ||= ""
|
||||
ENV["MILLICAST_API_SECRET"] ||= ""
|
||||
end
|
||||
|
||||
2
config/initializers/millicast.rb
Normal file
2
config/initializers/millicast.rb
Normal file
@@ -0,0 +1,2 @@
|
||||
require "millicast"
|
||||
|
||||
@@ -62,12 +62,12 @@ en:
|
||||
empty: Acquired Media Releases will appear here
|
||||
table_headers:
|
||||
approved: Approved
|
||||
file_infos_count: No. Files
|
||||
files_count: No. Files
|
||||
name: Name
|
||||
notes: Notes
|
||||
owner_info: Owner Info
|
||||
signed_at: Date Signed
|
||||
tags: Tags
|
||||
owner_info: Owner Info
|
||||
new:
|
||||
heading: Import Acquired Media Release
|
||||
update:
|
||||
@@ -141,7 +141,10 @@ 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:
|
||||
@@ -174,6 +177,7 @@ 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
|
||||
@@ -227,6 +231,7 @@ 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
|
||||
@@ -307,6 +312,10 @@ 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:
|
||||
@@ -347,10 +356,16 @@ en:
|
||||
contracts:
|
||||
amendment_page:
|
||||
description_labels:
|
||||
amendment_clause: Amendment Clause
|
||||
amendment_signature: Amendment Signature
|
||||
amendment_signer_name: Amendment Signer Name
|
||||
heading: Amendment
|
||||
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
|
||||
for_office_use_only:
|
||||
description_labels:
|
||||
date_issued: Date Issued
|
||||
@@ -370,6 +385,7 @@ en:
|
||||
other: Minor photos
|
||||
questionnaire:
|
||||
heading:
|
||||
appearance_release: Questionnaire
|
||||
medical_release: Medical Questionnaire
|
||||
misc_release: Questionnaire
|
||||
signature_page:
|
||||
@@ -431,17 +447,16 @@ en:
|
||||
download_type: Type
|
||||
errors_helper:
|
||||
failure_message: "The following errors have prevented this %{model_name} from being submitted:"
|
||||
file_infos:
|
||||
files:
|
||||
edit:
|
||||
heading: Add Media
|
||||
update:
|
||||
notice: The release has been updated
|
||||
heading: Media
|
||||
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
|
||||
@@ -829,6 +844,8 @@ 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:
|
||||
@@ -853,6 +870,7 @@ en:
|
||||
table_headers:
|
||||
address: Address
|
||||
amendment_signed: Additional Clause
|
||||
amendment_signed_column: Additional Clause
|
||||
approved: Approved
|
||||
location_info: Location Info
|
||||
notes: Notes
|
||||
@@ -865,8 +883,8 @@ en:
|
||||
review: Review
|
||||
sign_amendment: Sign Additional Clause
|
||||
messages:
|
||||
amendment_not_signed_tooltip: Amendment not yet signed
|
||||
amendment_signed_tooltip: Amendment Signed
|
||||
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
|
||||
new:
|
||||
@@ -932,7 +950,6 @@ en:
|
||||
empty: Medical releases will appear here
|
||||
table_headers:
|
||||
approved: Approved
|
||||
approved?: Approved
|
||||
contact_info: Contact info
|
||||
name: Person name
|
||||
notes: Notes
|
||||
@@ -1082,9 +1099,13 @@ 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
|
||||
@@ -1142,12 +1163,12 @@ en:
|
||||
heading: Signature
|
||||
amendments:
|
||||
create:
|
||||
amendment_already_signed_message: Release amendment is already signed!
|
||||
amendment_signed_message: Release amendment signed successfully! Thank you
|
||||
amendment_already_signed_message: Release additional clause is already signed!
|
||||
amendment_signed_message: Release additional clause signed successfully! Thank you
|
||||
new:
|
||||
amendment:
|
||||
heading: Additional Clause
|
||||
copy_url: Copy sign amendment URL
|
||||
copy_url: Copy sign additional clause URL
|
||||
signature:
|
||||
heading: Signature
|
||||
signed_contract_preview: Signed Contract Preview
|
||||
@@ -1156,6 +1177,11 @@ 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:
|
||||
@@ -1185,6 +1211,8 @@ 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:
|
||||
|
||||
@@ -16,12 +16,13 @@ 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)
|
||||
owner_info: Owner Info (ES)
|
||||
activerecord:
|
||||
attributes:
|
||||
appearance_release:
|
||||
@@ -46,6 +47,13 @@ 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)
|
||||
@@ -65,6 +73,8 @@ 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: ""
|
||||
@@ -170,7 +180,7 @@ es:
|
||||
amendment_clause: Amendment Clause (ES)
|
||||
amendment_signature: Amendment Signature (ES)
|
||||
amendment_signer_name: Amendment Signer Name (ES)
|
||||
heading: Amendment (ES)
|
||||
heading: Secondary Clause (ES)
|
||||
for_office_use_only:
|
||||
description_labels:
|
||||
date_issued: Date Issued (ES)
|
||||
@@ -405,6 +415,8 @@ 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)
|
||||
@@ -412,6 +424,8 @@ es:
|
||||
table_headers:
|
||||
address: Address (ES)
|
||||
amendment_signed: Additional Clause (ES)
|
||||
amendment_signed_column: Amendment signed (ES)
|
||||
approved: Approved (ES)
|
||||
notes: Notes (ES)
|
||||
signed_at: Date Signed (ES)
|
||||
tags: Tags (ES)
|
||||
@@ -437,6 +451,7 @@ es:
|
||||
heading: Guardian Photo
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
name: Name (ES)
|
||||
notes: Notes (ES)
|
||||
owner_info: Owner Info
|
||||
@@ -448,7 +463,6 @@ es:
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
approved?: Approved (ES)
|
||||
contact_info: Contact info (ES)
|
||||
name: Person name (ES)
|
||||
notes: Notes (ES)
|
||||
@@ -462,6 +476,7 @@ es:
|
||||
misc_releases:
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
contact_info: Contact info (ES)
|
||||
name: Person name (ES)
|
||||
notes: Notes (ES)
|
||||
@@ -470,6 +485,7 @@ es:
|
||||
music_releases:
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
composers_count: No. Composers (ES)
|
||||
file_infos_count: No. Files (ES)
|
||||
name: Name (ES)
|
||||
@@ -631,6 +647,7 @@ es:
|
||||
heading: Guardian Photo (ES)
|
||||
index:
|
||||
table_headers:
|
||||
approved: Approved (ES)
|
||||
email: Email (ES)
|
||||
name: Name (ES)
|
||||
notes: Notes (ES)
|
||||
|
||||
@@ -19,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_infoable do
|
||||
resource :file_infos, only: [:edit, :update]
|
||||
concern :file_uploadable do
|
||||
resource :files, only: [:edit, :update]
|
||||
end
|
||||
concern :approvable do
|
||||
resource :approvals, only: [:new, :create]
|
||||
@@ -51,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_infoable]
|
||||
resources :acquired_media_releases, except: [:show], concerns: [:contractable, :notable, :file_uploadable]
|
||||
resources :appearance_releases, except: [:show], concerns: [:contractable, :notable]
|
||||
resources :appearance_release_imports, only: [:create]
|
||||
resources :location_releases, except: [:show], concerns: [:contractable, :notable, :photoable]
|
||||
@@ -131,7 +131,9 @@ 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]
|
||||
resources :appearance_releases, only: [:new, :create] do
|
||||
resources :amendments, only: [:new, :create]
|
||||
end
|
||||
resources :acquired_media_releases, only: [:new, :create]
|
||||
resources :location_releases, only: [:new, :create] do
|
||||
resources :amendments, only: [:new, :create]
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddAmendmentSignerDetailsToAppearanceReleases < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :appearance_releases, :amendment_signer_name, :string
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddSimulcastUidToBroadcasts < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :broadcasts, :simulcast_uid, :string
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,11 @@
|
||||
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
|
||||
@@ -0,0 +1,19 @@
|
||||
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
|
||||
@@ -0,0 +1,5 @@
|
||||
class AddVideoConferenceUrlOverrideToBroadcasts < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :broadcasts, :video_conference_url_override, :string
|
||||
end
|
||||
end
|
||||
@@ -379,7 +379,25 @@ 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
|
||||
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
|
||||
);
|
||||
|
||||
|
||||
@@ -580,7 +598,9 @@ 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
|
||||
director_mode_video_embed text,
|
||||
simulcast_uid character varying,
|
||||
video_conference_url_override character varying
|
||||
);
|
||||
|
||||
|
||||
@@ -678,7 +698,11 @@ CREATE TABLE public.contract_templates (
|
||||
question_13_text text,
|
||||
question_14_text text,
|
||||
question_15_text text,
|
||||
accessibility integer DEFAULT 0
|
||||
accessibility integer DEFAULT 0,
|
||||
exhibit_a_legal_text text,
|
||||
exhibit_a_question_text text,
|
||||
exhibit_b_legal_text text,
|
||||
exhibit_b_question_text text
|
||||
);
|
||||
|
||||
|
||||
@@ -4007,6 +4031,11 @@ INSERT INTO "schema_migrations" (version) VALUES
|
||||
('20200727143209'),
|
||||
('20200730050903'),
|
||||
('20200803145912'),
|
||||
('20200803150138');
|
||||
('20200803150138'),
|
||||
('20200804093409'),
|
||||
('20200807190607'),
|
||||
('20200811102720'),
|
||||
('20200812060406'),
|
||||
('20200819070738');
|
||||
|
||||
|
||||
|
||||
2
lib/millicast.rb
Normal file
2
lib/millicast.rb
Normal file
@@ -0,0 +1,2 @@
|
||||
require_relative "./millicast/base"
|
||||
require_relative "./millicast/publish_token"
|
||||
14
lib/millicast/base.rb
Normal file
14
lib/millicast/base.rb
Normal file
@@ -0,0 +1,14 @@
|
||||
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
|
||||
5
lib/millicast/publish_token.rb
Normal file
5
lib/millicast/publish_token.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
module Millicast
|
||||
class PublishToken < Base
|
||||
self.collection_name = "publish_token"
|
||||
end
|
||||
end
|
||||
@@ -87,26 +87,10 @@ RSpec.describe AcquiredMediaReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(AcquiredMediaRelease.last)
|
||||
end
|
||||
|
||||
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
|
||||
it "adds files to release" do
|
||||
post :create, params: { project_id: project, acquired_media_release: acquired_media_release_params.merge(file_params) }
|
||||
|
||||
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")
|
||||
)
|
||||
expect(AcquiredMediaRelease.last.files.size).to eq(1)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
@@ -206,4 +190,11 @@ 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
|
||||
|
||||
@@ -117,7 +117,7 @@ RSpec.describe Admin::AccountsController, type: :controller do
|
||||
end
|
||||
|
||||
it "paginates the broadcast list" do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
project = create(:project, account: current_user.primary_account)
|
||||
create_list(:broadcast, 20, project: project )
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ RSpec.describe Admin::BroadcastsController, type: :controller do
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
describe "#edit" do
|
||||
|
||||
@@ -7,7 +7,7 @@ RSpec.describe Api::BroadcastsController, type: :controller do
|
||||
|
||||
describe '#index' do
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: 'id', key: 'key', playback_id: 'playback_id'))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it 'returns a list of all broadcasts ready for streaming in the project' do
|
||||
|
||||
@@ -152,14 +152,6 @@ RSpec.describe AppearanceReleasesController, tye: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(AppearanceRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, appearance_release: appearance_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "AppearanceRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before do
|
||||
allow_any_instance_of(AppearanceRelease).to receive(:save).and_return(false)
|
||||
|
||||
@@ -16,7 +16,7 @@ RSpec.describe BroadcastRecordingsController, type: :controller do
|
||||
let(:recording) { create(:broadcast_recording, broadcast: broadcast) }
|
||||
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it "hides the broadcast recording" do
|
||||
|
||||
@@ -13,7 +13,7 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
|
||||
describe "#index" do
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it "responds successfully" do
|
||||
@@ -79,7 +79,7 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
|
||||
describe "#create" do
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it "responds with a redirect" do
|
||||
@@ -108,13 +108,39 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
}.not_to change(Broadcast, :count)
|
||||
end
|
||||
end
|
||||
|
||||
context "when Mux API error occurs" do
|
||||
it "displays an alert message" do
|
||||
allow_any_instance_of(Broadcast).to receive(:create_mux_live_stream).and_raise(MuxRuby::ApiError)
|
||||
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, broadcast: broadcast_params }
|
||||
}.not_to change(Broadcast, :count)
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(flash.alert).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context "when ActiveResource API error occurs" do
|
||||
it "displays an alert message" do
|
||||
allow_any_instance_of(Broadcast).to receive(:create_mux_live_stream).and_raise(ActiveResource::ConnectionError.new(""))
|
||||
|
||||
expect {
|
||||
post :create, params: { project_id: project.id, broadcast: broadcast_params }
|
||||
}.not_to change(Broadcast, :count)
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(flash.alert).not_to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
let(:broadcast) { create(:broadcast, project: project, name: "Another Broadcast") }
|
||||
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
it "responds successfully" do
|
||||
@@ -213,6 +239,16 @@ RSpec.describe BroadcastsController, type: :controller do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when video conference url has been overriden' do
|
||||
let(:broadcast) { create(:broadcast, project: project, video_conference_url_override: 'https://test.com') }
|
||||
|
||||
it 'uses the override url for the video conference button' do
|
||||
get :show, params: { project_id: project, id: broadcast }
|
||||
|
||||
expect(response.body).to have_link("Video Conference", href: 'https://test.com')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
|
||||
@@ -95,7 +95,7 @@ describe ContractTemplatesController do
|
||||
describe '#create' do
|
||||
it 'redirects' do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params(valid: true) }
|
||||
|
||||
|
||||
expect(response).to redirect_to(project_contract_templates_path(project))
|
||||
end
|
||||
|
||||
@@ -112,6 +112,14 @@ describe ContractTemplatesController do
|
||||
end.to change(ContractTemplate, :count).by(1)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(current_user, current_user.primary_account, :track_create_contract_template, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context 'when save fails' do
|
||||
it 'responds ok' do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params(valid: false) }
|
||||
@@ -120,6 +128,15 @@ describe ContractTemplatesController do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when exhibit fields are present' do
|
||||
it 'saves them' do
|
||||
post :create, params: { project_id: project, contract_template: contract_template_params_with_exhibit_fields }
|
||||
|
||||
expect(ContractTemplate.last.has_exhibit_a?).to be_truthy
|
||||
expect(ContractTemplate.last.has_exhibit_b?).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
context 'when current user is an associate' do
|
||||
let(:current_user) { create(:user, :associate) }
|
||||
|
||||
@@ -214,12 +231,21 @@ describe ContractTemplatesController do
|
||||
|
||||
def contract_template_params(valid: true)
|
||||
if valid
|
||||
attributes_for(:contract_template).merge(exploitable_rights_params)
|
||||
attributes_for(:contract_template).merge(exploitable_rights_params).merge({exhibit_a_legal_text: "Legal Text Exhibit A"})
|
||||
else
|
||||
attributes_for(:contract_template).except(:name)
|
||||
end
|
||||
end
|
||||
|
||||
def contract_template_params_with_exhibit_fields
|
||||
contract_template_params(valid: true).merge({
|
||||
exhibit_a_legal_text: "Exhibit A legal text",
|
||||
exhibit_b_legal_text: "Exhibit B legal text",
|
||||
exhibit_a_question_text: "Exhibit A Question",
|
||||
exhibit_b_question_text: "Exhibit B Question",
|
||||
})
|
||||
end
|
||||
|
||||
def exploitable_rights_params
|
||||
{
|
||||
applicable_medium_id: ApplicableMedium.last.id,
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe FileInfosController, type: :controller do
|
||||
render_views
|
||||
|
||||
let(:current_user) { create(:user) }
|
||||
let(:project) { create(:project, account: current_user.accounts.first) }
|
||||
let(:acquired_media_release) { create(:acquired_media_release, project: project) }
|
||||
|
||||
before do
|
||||
sign_in(current_user)
|
||||
end
|
||||
|
||||
shared_examples "a file infoable releases controller" do
|
||||
describe "#edit" do
|
||||
it "responds successfully" do
|
||||
get :edit, params: { "#{subject.model_name.param_key}_id" => subject }
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
context "when releasable updated successfully" do
|
||||
it "responds with a redirect" do
|
||||
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => release_params }
|
||||
|
||||
expect(response).to be_redirect
|
||||
expect(response).to redirect_to [project, subject.model_name.plural]
|
||||
expect(flash.notice).to eq(t("file_infos.update.notice"))
|
||||
end
|
||||
|
||||
it "enqueues tagging job" do
|
||||
expect {
|
||||
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => {} }
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(subject.class.last)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when releasable NOT updated successfully" do
|
||||
before do
|
||||
allow_any_instance_of(subject.class).to receive(:update).and_return(false)
|
||||
end
|
||||
|
||||
it "renders edit with flash message" do
|
||||
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => release_params }
|
||||
|
||||
expect(controller).to have_rendered(:edit)
|
||||
end
|
||||
|
||||
it "does not enqueue tagging job" do
|
||||
expect {
|
||||
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => release_params }
|
||||
}.not_to have_enqueued_job(SetTagsForReleasableJob)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "for acquired media releases" do
|
||||
subject { create(:acquired_media_release, project: project) }
|
||||
|
||||
it_behaves_like "a file infoable releases controller"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def release_params
|
||||
files = 2.times.map { Rack::Test::UploadedFile.new(file_fixture("audio.mp3"), "audio/mp3") }
|
||||
|
||||
{ file_infos_attributes: files }
|
||||
end
|
||||
end
|
||||
@@ -90,14 +90,6 @@ RSpec.describe LocationReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(LocationRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, location_release: location_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "LocationRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before do
|
||||
allow_any_instance_of(LocationRelease).to receive(:save).and_return(false)
|
||||
|
||||
@@ -87,14 +87,6 @@ RSpec.describe MaterialReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(MaterialRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, material_release: material_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "MaterialRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before do
|
||||
allow_any_instance_of(MaterialRelease).to receive(:save).and_return(false)
|
||||
|
||||
@@ -145,14 +145,6 @@ RSpec.describe MusicReleasesController, type: :controller do
|
||||
}.to have_enqueued_job(SetTagsForReleasableJob).with(MusicRelease.last)
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
expect {
|
||||
post :create, params: { project_id: project, music_release: music_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob).with(user, account, :track_create_non_native_release, release_type: "MusicRelease", user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
context "when the record would be invalid" do
|
||||
before :each do
|
||||
allow_any_instance_of(MusicRelease).to receive(:save).and_return(false)
|
||||
|
||||
@@ -7,17 +7,6 @@ RSpec.describe Public::AcquiredMediaReleasesController, type: :controller do
|
||||
render_views
|
||||
|
||||
describe "#create" do
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: { account_id: project.account.to_param, project_id: project, contract_template_id: contract_template, acquired_media_release: acquired_media_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "AcquiredMediaRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
@@ -4,96 +4,108 @@ RSpec.describe Public::AmendmentsController, type: :controller do
|
||||
let(:user) { create(:user) }
|
||||
let(:account) { user.primary_account }
|
||||
let(:project) { create(:project, account: account) }
|
||||
let(:contract_template) { create(:location_release_contract_template, :with_amendment_clause, project: project) }
|
||||
let(:location_release) { create(:location_release, contract_template: contract_template, project: project) }
|
||||
|
||||
render_views
|
||||
|
||||
describe "#new" do
|
||||
it "shows amendment signing form for non-signed amendment of a release" do
|
||||
expect(location_release.amendment_signed?).to be_falsey
|
||||
shared_examples "amendments signing controller" do
|
||||
describe "#new" do
|
||||
it "shows amendment signing form for non-signed amendment of a release" do
|
||||
expect(subject.amendment_signed?).to be_falsey
|
||||
|
||||
get :new, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: location_release.contract_template,
|
||||
location_release_id: location_release
|
||||
}
|
||||
get :new, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: subject.contract_template,
|
||||
"#{subject.model_name.param_key}_id": subject
|
||||
}
|
||||
|
||||
expect(response).to be_successful
|
||||
expect(response).to be_successful
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).not_to match already_signed_message
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).not_to match already_signed_message
|
||||
end
|
||||
|
||||
it "shows already signed message for signed amendment of a release" do
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
|
||||
get :new, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: signed_release.contract_template,
|
||||
"#{signed_release.model_name.param_key}_id": signed_release
|
||||
}
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match already_signed_message
|
||||
end
|
||||
end
|
||||
|
||||
it "shows already signed message for signed amendment of a release" do
|
||||
signed_release = create(:location_release, :amendment_signed, contract_template: contract_template, project: project)
|
||||
describe "#create" do
|
||||
it "signs amendment" do
|
||||
expect(subject.amendment_signed?).to be_falsey
|
||||
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
post :create, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: subject.contract_template,
|
||||
"#{subject.model_name.param_key}_id": subject,
|
||||
"#{subject.model_name.param_key}": {
|
||||
amendment_signer_name: "Signer Name",
|
||||
amendment_signature_base64: signature_base64
|
||||
}
|
||||
}
|
||||
|
||||
get :new, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: location_release.contract_template,
|
||||
location_release_id: signed_release
|
||||
}
|
||||
expect(response).to be_successful
|
||||
|
||||
expect(response).to be_successful
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).not_to match already_signed_message
|
||||
expect(body).to match signed_successfully_message
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match already_signed_message
|
||||
expect(subject.class.last.amendment_signed?).to be_truthy
|
||||
expect(subject.class.last.amendment_signer_name).to eq "Signer Name"
|
||||
end
|
||||
|
||||
it "shows already signed message for signed amendment of a release" do
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
|
||||
post :create, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: signed_release.contract_template,
|
||||
"#{signed_release.model_name.param_key}_id": signed_release,
|
||||
"#{signed_release.model_name.param_key}": {
|
||||
amendment_signer_name: "Signer Who",
|
||||
amendment_signature_base64: signature_base64
|
||||
}
|
||||
}
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match already_signed_message
|
||||
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
expect(signed_release.amendment_signer_name).to eq "Amendment Signer"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "signs amendment" do
|
||||
expect(location_release.amendment_signed?).to be_falsey
|
||||
context "for location release" do
|
||||
let(:contract_template) { create(:location_release_contract_template, :with_amendment_clause, project: project) }
|
||||
let(:signed_release) { create(:location_release, :amendment_signed, contract_template: contract_template, project: project) }
|
||||
subject { create(:location_release, contract_template: contract_template, project: project) }
|
||||
|
||||
post :create, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: location_release.contract_template,
|
||||
location_release_id: location_release,
|
||||
location_release: {
|
||||
amendment_signer_name: "Signer Name",
|
||||
amendment_signature_base64: signature_base64
|
||||
}
|
||||
}
|
||||
it_behaves_like "amendments signing controller"
|
||||
end
|
||||
|
||||
expect(response).to be_successful
|
||||
context "for appearance release" do
|
||||
let(:contract_template) { create(:appearance_release_contract_template, :with_amendment_clause, project: project) }
|
||||
let(:signed_release) { create(:appearance_release, :amendment_signed, contract_template: contract_template, project: project) }
|
||||
subject { create(:appearance_release, contract_template: contract_template, project: project) }
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).not_to match already_signed_message
|
||||
expect(body).to match signed_successfully_message
|
||||
|
||||
expect(LocationRelease.last.amendment_signed?).to be_truthy
|
||||
expect(LocationRelease.last.amendment_signer_name).to eq "Signer Name"
|
||||
end
|
||||
|
||||
it "shows already signed message for signed amendment of a release" do
|
||||
signed_release = create(:location_release, :amendment_signed, name: "Test Loc", amendment_signer_name: "Big Signer", contract_template: contract_template, project: project)
|
||||
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
|
||||
post :create, params: {
|
||||
account_id: account,
|
||||
project_id: project,
|
||||
contract_template_id: location_release.contract_template,
|
||||
location_release_id: signed_release,
|
||||
location_release: {
|
||||
amendment_signer_name: "Signer Who",
|
||||
amendment_signature_base64: signature_base64
|
||||
}
|
||||
}
|
||||
|
||||
expect(response).to be_successful
|
||||
|
||||
body = CGI.unescape_html(response.body)
|
||||
expect(body).to match already_signed_message
|
||||
|
||||
expect(signed_release.amendment_signed?).to be_truthy
|
||||
expect(signed_release.amendment_signer_name).to eq "Big Signer"
|
||||
end
|
||||
it_behaves_like "amendments signing controller"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -11,22 +11,6 @@ describe Public::AppearanceReleasesController do
|
||||
end
|
||||
|
||||
describe "#create" do
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: {
|
||||
account_id: project.account.to_param,
|
||||
project_id: project,
|
||||
contract_template_id: contract_template,
|
||||
appearance_release: appearance_release_params
|
||||
}
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "AppearanceRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
@@ -8,7 +8,7 @@ RSpec.describe Public::BroadcastsController, type: :controller do
|
||||
let(:project) { create(:project, account: user.primary_account) }
|
||||
|
||||
before do
|
||||
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
||||
stub_mux_live_stream
|
||||
end
|
||||
|
||||
describe "#show" do
|
||||
@@ -81,6 +81,16 @@ RSpec.describe Public::BroadcastsController, type: :controller do
|
||||
expect(response.body).to have_selector(".dropdown-menu a.dropdown-item", text: recording.download_file_name)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when video conference url has been overriden' do
|
||||
let(:broadcast) { create(:broadcast, project: project, video_conference_url_override: 'https://test.com') }
|
||||
|
||||
it 'uses the override url for the video conference button' do
|
||||
get :show, params: { token: broadcast.token }
|
||||
|
||||
expect(response.body).to have_link("Video Conference", href: 'https://test.com')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#update" do
|
||||
|
||||
@@ -16,17 +16,6 @@ describe Public::LocationReleasesController do
|
||||
expect(LocationRelease.last.photos.attached?).to eq true
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: { account_id: project.account.to_param, project_id: project, contract_template_id: contract_template, location_release: location_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "LocationRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
@@ -16,17 +16,6 @@ describe Public::MaterialReleasesController do
|
||||
expect(MaterialRelease.last.photos.attached?).to eq true
|
||||
end
|
||||
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: { account_id: project.account.to_param, project_id: project, contract_template_id: contract_template, material_release: material_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "MaterialRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
sign_in(user)
|
||||
|
||||
@@ -7,17 +7,6 @@ RSpec.describe Public::MedicalReleasesController, type: :controller do
|
||||
render_views
|
||||
|
||||
describe "#create" do
|
||||
it "logs analytics" do
|
||||
contract_template = create(:contract_template, project: project)
|
||||
|
||||
expect {
|
||||
post :create, params: { account_id: project.account.to_param, project_id: project, contract_template_id: contract_template, medical_release: medical_release_params }
|
||||
}.to(
|
||||
have_enqueued_job(TrackAnalyticsJob)
|
||||
.with(nil, nil, :track_create_native_release, release_type: "MedicalRelease", account: project.account, user_agent: "Rails Testing", user_ip: "0.0.0.0")
|
||||
)
|
||||
end
|
||||
|
||||
it "displays validation errors" do
|
||||
contract_template = create(:contract_template,
|
||||
project: project,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user