Compare commits
1 Commits
make-direc
...
import-arc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94b417d4c4 |
11
.env.sample
11
.env.sample
@@ -7,6 +7,8 @@ AWS_SECRET_ACCESS_KEY=
|
|||||||
AWS_REGION=
|
AWS_REGION=
|
||||||
|
|
||||||
BRAYNIAC_AI_API_ENDPOINT=https://z99cprg2eg.execute-api.us-east-1.amazonaws.com/dev/v0.0.1
|
BRAYNIAC_AI_API_ENDPOINT=https://z99cprg2eg.execute-api.us-east-1.amazonaws.com/dev/v0.0.1
|
||||||
|
SOURCE_AUDIO_API_ENDPOINT=https://bigmedia.sourceaudio.com/api
|
||||||
|
SOURCE_AUDIO_TOKEN=
|
||||||
|
|
||||||
# Optional
|
# Optional
|
||||||
REDIS_URL=
|
REDIS_URL=
|
||||||
@@ -16,7 +18,7 @@ ZOOM_API_KEY=
|
|||||||
ZOOM_API_SECRET=
|
ZOOM_API_SECRET=
|
||||||
ZOOM_PRO_USERS_LIMIT= # defaults to 3
|
ZOOM_PRO_USERS_LIMIT= # defaults to 3
|
||||||
ZOOM_USER_TYPE= # 'pro' / 'basic'
|
ZOOM_USER_TYPE= # 'pro' / 'basic'
|
||||||
ZOOM_ENABLE_RECORDINGS= # true / false (default: false)
|
ZOOM_ENABLE_RECORDINGS=0 # 0 / 1
|
||||||
# Token for webhooks authorization
|
# Token for webhooks authorization
|
||||||
ZOOM_VERIFICATION_TOKEN=
|
ZOOM_VERIFICATION_TOKEN=
|
||||||
|
|
||||||
@@ -25,10 +27,3 @@ MUX_TOKEN_ID=
|
|||||||
MUX_TOKEN_SECRET=
|
MUX_TOKEN_SECRET=
|
||||||
MUX_BROADCAST_SERVER_URL=rtmp://global-live.mux.com:5222/app
|
MUX_BROADCAST_SERVER_URL=rtmp://global-live.mux.com:5222/app
|
||||||
MUX_TEST_MODE_DISABLED=
|
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=
|
|
||||||
|
|||||||
6
Gemfile
6
Gemfile
@@ -4,7 +4,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|||||||
ruby "2.6.3"
|
ruby "2.6.3"
|
||||||
|
|
||||||
# Bundle edge Rails instead: gem "rails", github: "rails/rails"
|
# Bundle edge Rails instead: gem "rails", github: "rails/rails"
|
||||||
gem "rails", "~> 6.0.3.1"
|
gem "rails", "~> 6.0.0"
|
||||||
# Use postgresql as the database for Active Record
|
# Use postgresql as the database for Active Record
|
||||||
gem "pg", "~> 0.18"
|
gem "pg", "~> 0.18"
|
||||||
# Use Puma as the app server
|
# Use Puma as the app server
|
||||||
@@ -30,9 +30,9 @@ gem "active_storage_base64", "~> 1.0.0"
|
|||||||
gem "image_processing", "~> 1.2"
|
gem "image_processing", "~> 1.2"
|
||||||
|
|
||||||
# Use Amazon Web Services S3 for file uploads in production
|
# Use Amazon Web Services S3 for file uploads in production
|
||||||
gem "aws-sdk-s3", "~> 1.48", require: false, group: [:production, :review]
|
gem "aws-sdk-s3", "~> 1.31.0", require: false, group: [:production, :review]
|
||||||
# Allow AWS API requests to be signed using IAM credentials
|
# Allow AWS API requests to be signed using IAM credentials
|
||||||
gem "aws-sigv4", "~> 1.1"
|
gem "aws-sigv4", "~> 1.0.2"
|
||||||
|
|
||||||
# Reduces boot times through caching; required in config/boot.rb
|
# Reduces boot times through caching; required in config/boot.rb
|
||||||
gem "bootsnap", ">= 1.1.0", require: false
|
gem "bootsnap", ">= 1.1.0", require: false
|
||||||
|
|||||||
161
Gemfile.lock
161
Gemfile.lock
@@ -44,71 +44,71 @@ GEM
|
|||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
Ascii85 (1.0.3)
|
Ascii85 (1.0.3)
|
||||||
actioncable (6.0.3.2)
|
actioncable (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
websocket-driver (>= 0.6.1)
|
websocket-driver (>= 0.6.1)
|
||||||
actionmailbox (6.0.3.2)
|
actionmailbox (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
activejob (= 6.0.3.2)
|
activejob (= 6.0.0)
|
||||||
activerecord (= 6.0.3.2)
|
activerecord (= 6.0.0)
|
||||||
activestorage (= 6.0.3.2)
|
activestorage (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
mail (>= 2.7.1)
|
mail (>= 2.7.1)
|
||||||
actionmailer (6.0.3.2)
|
actionmailer (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
actionview (= 6.0.3.2)
|
actionview (= 6.0.0)
|
||||||
activejob (= 6.0.3.2)
|
activejob (= 6.0.0)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
actionpack (6.0.3.2)
|
actionpack (6.0.0)
|
||||||
actionview (= 6.0.3.2)
|
actionview (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
rack (~> 2.0, >= 2.0.8)
|
rack (~> 2.0)
|
||||||
rack-test (>= 0.6.3)
|
rack-test (>= 0.6.3)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||||
actiontext (6.0.3.2)
|
actiontext (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
activerecord (= 6.0.3.2)
|
activerecord (= 6.0.0)
|
||||||
activestorage (= 6.0.3.2)
|
activestorage (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
nokogiri (>= 1.8.5)
|
nokogiri (>= 1.8.5)
|
||||||
actionview (6.0.3.2)
|
actionview (6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubi (~> 1.4)
|
erubi (~> 1.4)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
||||||
active_storage_base64 (1.0.0)
|
active_storage_base64 (1.0.0)
|
||||||
rails (~> 6.0)
|
rails (~> 6.0)
|
||||||
activejob (6.0.3.2)
|
activejob (6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
globalid (>= 0.3.6)
|
globalid (>= 0.3.6)
|
||||||
activemodel (6.0.3.2)
|
activemodel (6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
activemodel-serializers-xml (1.0.2)
|
activemodel-serializers-xml (1.0.2)
|
||||||
activemodel (> 5.x)
|
activemodel (> 5.x)
|
||||||
activesupport (> 5.x)
|
activesupport (> 5.x)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
activerecord (6.0.3.2)
|
activerecord (6.0.0)
|
||||||
activemodel (= 6.0.3.2)
|
activemodel (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
activeresource (5.1.0)
|
activeresource (5.1.0)
|
||||||
activemodel (>= 5.0, < 7)
|
activemodel (>= 5.0, < 7)
|
||||||
activemodel-serializers-xml (~> 1.0)
|
activemodel-serializers-xml (~> 1.0)
|
||||||
activesupport (>= 5.0, < 7)
|
activesupport (>= 5.0, < 7)
|
||||||
activestorage (6.0.3.2)
|
activestorage (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
activejob (= 6.0.3.2)
|
activejob (= 6.0.0)
|
||||||
activerecord (= 6.0.3.2)
|
activerecord (= 6.0.0)
|
||||||
marcel (~> 0.3.1)
|
marcel (~> 0.3.1)
|
||||||
activesupport (6.0.3.2)
|
activesupport (6.0.0)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
i18n (>= 0.7, < 2)
|
i18n (>= 0.7, < 2)
|
||||||
minitest (~> 5.1)
|
minitest (~> 5.1)
|
||||||
tzinfo (~> 1.1)
|
tzinfo (~> 1.1)
|
||||||
zeitwerk (~> 2.2, >= 2.2.2)
|
zeitwerk (~> 2.1, >= 2.1.8)
|
||||||
addressable (2.7.0)
|
addressable (2.7.0)
|
||||||
public_suffix (>= 2.0.2, < 5.0)
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
afm (0.2.2)
|
afm (0.2.2)
|
||||||
@@ -117,22 +117,21 @@ GEM
|
|||||||
ast (2.4.0)
|
ast (2.4.0)
|
||||||
autoprefixer-rails (9.7.3)
|
autoprefixer-rails (9.7.3)
|
||||||
execjs
|
execjs
|
||||||
aws-eventstream (1.1.0)
|
aws-eventstream (1.0.3)
|
||||||
aws-partitions (1.337.0)
|
aws-partitions (1.210.0)
|
||||||
aws-sdk-core (3.102.1)
|
aws-sdk-core (3.46.2)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1.0)
|
||||||
aws-partitions (~> 1, >= 1.239.0)
|
aws-partitions (~> 1.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.0)
|
||||||
jmespath (~> 1.0)
|
jmespath (~> 1.0)
|
||||||
aws-sdk-kms (1.35.0)
|
aws-sdk-kms (1.13.0)
|
||||||
aws-sdk-core (~> 3, >= 3.99.0)
|
aws-sdk-core (~> 3, >= 3.39.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.0)
|
||||||
aws-sdk-s3 (1.72.0)
|
aws-sdk-s3 (1.31.0)
|
||||||
aws-sdk-core (~> 3, >= 3.102.1)
|
aws-sdk-core (~> 3, >= 3.39.0)
|
||||||
aws-sdk-kms (~> 1)
|
aws-sdk-kms (~> 1)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.0)
|
||||||
aws-sigv4 (1.2.1)
|
aws-sigv4 (1.0.3)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
|
||||||
axlsx (3.0.0.pre)
|
axlsx (3.0.0.pre)
|
||||||
htmlentities (~> 4.3, >= 4.3.4)
|
htmlentities (~> 4.3, >= 4.3.4)
|
||||||
mimemagic (~> 0.3)
|
mimemagic (~> 0.3)
|
||||||
@@ -182,7 +181,7 @@ GEM
|
|||||||
coffee-script-source
|
coffee-script-source
|
||||||
execjs
|
execjs
|
||||||
coffee-script-source (1.12.2)
|
coffee-script-source (1.12.2)
|
||||||
concurrent-ruby (1.1.6)
|
concurrent-ruby (1.1.5)
|
||||||
connection_pool (2.2.2)
|
connection_pool (2.2.2)
|
||||||
countries (2.1.4)
|
countries (2.1.4)
|
||||||
i18n_data (~> 0.8.0)
|
i18n_data (~> 0.8.0)
|
||||||
@@ -231,7 +230,7 @@ GEM
|
|||||||
hubspot-ruby (0.9.0)
|
hubspot-ruby (0.9.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
httparty (>= 0.10.0)
|
httparty (>= 0.10.0)
|
||||||
i18n (1.8.3)
|
i18n (1.8.2)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
i18n_data (0.8.0)
|
i18n_data (0.8.0)
|
||||||
i18n_yaml_sorter (0.2.0)
|
i18n_yaml_sorter (0.2.0)
|
||||||
@@ -271,22 +270,22 @@ GEM
|
|||||||
ruby_dep (~> 1.2)
|
ruby_dep (~> 1.2)
|
||||||
loaf (0.8.1)
|
loaf (0.8.1)
|
||||||
rails (>= 3.2)
|
rails (>= 3.2)
|
||||||
loofah (2.6.0)
|
loofah (2.4.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.5.9)
|
nokogiri (>= 1.5.9)
|
||||||
mail (2.7.1)
|
mail (2.7.1)
|
||||||
mini_mime (>= 0.1.1)
|
mini_mime (>= 0.1.1)
|
||||||
marcel (0.3.3)
|
marcel (0.3.3)
|
||||||
mimemagic (~> 0.3.2)
|
mimemagic (~> 0.3.2)
|
||||||
method_source (1.0.0)
|
method_source (0.9.2)
|
||||||
mime-types (3.3)
|
mime-types (3.3)
|
||||||
mime-types-data (~> 3.2015)
|
mime-types-data (~> 3.2015)
|
||||||
mime-types-data (3.2019.0904)
|
mime-types-data (3.2019.0904)
|
||||||
mimemagic (0.3.5)
|
mimemagic (0.3.3)
|
||||||
mini_magick (4.9.5)
|
mini_magick (4.9.5)
|
||||||
mini_mime (1.0.2)
|
mini_mime (1.0.2)
|
||||||
mini_portile2 (2.4.0)
|
mini_portile2 (2.4.0)
|
||||||
minitest (5.14.1)
|
minitest (5.14.0)
|
||||||
monetize (1.9.2)
|
monetize (1.9.2)
|
||||||
money (~> 6.12)
|
money (~> 6.12)
|
||||||
money (6.13.4)
|
money (6.13.4)
|
||||||
@@ -299,8 +298,8 @@ GEM
|
|||||||
msgpack (1.3.1)
|
msgpack (1.3.1)
|
||||||
multi_xml (0.6.0)
|
multi_xml (0.6.0)
|
||||||
multipart-post (2.1.1)
|
multipart-post (2.1.1)
|
||||||
nio4r (2.5.2)
|
nio4r (2.5.1)
|
||||||
nokogiri (1.10.9)
|
nokogiri (1.10.7)
|
||||||
mini_portile2 (~> 2.4.0)
|
mini_portile2 (~> 2.4.0)
|
||||||
oath (1.1.0)
|
oath (1.1.0)
|
||||||
bcrypt
|
bcrypt
|
||||||
@@ -338,20 +337,20 @@ GEM
|
|||||||
rack
|
rack
|
||||||
rack-test (1.1.0)
|
rack-test (1.1.0)
|
||||||
rack (>= 1.0, < 3)
|
rack (>= 1.0, < 3)
|
||||||
rails (6.0.3.2)
|
rails (6.0.0)
|
||||||
actioncable (= 6.0.3.2)
|
actioncable (= 6.0.0)
|
||||||
actionmailbox (= 6.0.3.2)
|
actionmailbox (= 6.0.0)
|
||||||
actionmailer (= 6.0.3.2)
|
actionmailer (= 6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
actiontext (= 6.0.3.2)
|
actiontext (= 6.0.0)
|
||||||
actionview (= 6.0.3.2)
|
actionview (= 6.0.0)
|
||||||
activejob (= 6.0.3.2)
|
activejob (= 6.0.0)
|
||||||
activemodel (= 6.0.3.2)
|
activemodel (= 6.0.0)
|
||||||
activerecord (= 6.0.3.2)
|
activerecord (= 6.0.0)
|
||||||
activestorage (= 6.0.3.2)
|
activestorage (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
bundler (>= 1.3.0)
|
bundler (>= 1.3.0)
|
||||||
railties (= 6.0.3.2)
|
railties (= 6.0.0)
|
||||||
sprockets-rails (>= 2.0.0)
|
sprockets-rails (>= 2.0.0)
|
||||||
rails-controller-testing (1.0.4)
|
rails-controller-testing (1.0.4)
|
||||||
actionpack (>= 5.0.1.x)
|
actionpack (>= 5.0.1.x)
|
||||||
@@ -364,9 +363,9 @@ GEM
|
|||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
rails-html-sanitizer (1.3.0)
|
rails-html-sanitizer (1.3.0)
|
||||||
loofah (~> 2.3)
|
loofah (~> 2.3)
|
||||||
railties (6.0.3.2)
|
railties (6.0.0)
|
||||||
actionpack (= 6.0.3.2)
|
actionpack (= 6.0.0)
|
||||||
activesupport (= 6.0.3.2)
|
activesupport (= 6.0.0)
|
||||||
method_source
|
method_source
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (>= 0.20.3, < 2.0)
|
thor (>= 0.20.3, < 2.0)
|
||||||
@@ -470,7 +469,7 @@ GEM
|
|||||||
turbolinks-source (5.2.0)
|
turbolinks-source (5.2.0)
|
||||||
typhoeus (1.3.1)
|
typhoeus (1.3.1)
|
||||||
ethon (>= 0.9.0)
|
ethon (>= 0.9.0)
|
||||||
tzinfo (1.2.7)
|
tzinfo (1.2.6)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
uglifier (4.1.20)
|
uglifier (4.1.20)
|
||||||
execjs (>= 0.3.0, < 3)
|
execjs (>= 0.3.0, < 3)
|
||||||
@@ -495,9 +494,9 @@ GEM
|
|||||||
activesupport (>= 4.2)
|
activesupport (>= 4.2)
|
||||||
rack-proxy (>= 0.6.1)
|
rack-proxy (>= 0.6.1)
|
||||||
railties (>= 4.2)
|
railties (>= 4.2)
|
||||||
websocket-driver (0.7.2)
|
websocket-driver (0.7.1)
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.5)
|
websocket-extensions (0.1.4)
|
||||||
will_paginate (3.2.1)
|
will_paginate (3.2.1)
|
||||||
will_paginate-bootstrap4 (0.2.2)
|
will_paginate-bootstrap4 (0.2.2)
|
||||||
will_paginate (~> 3.0, >= 3.0.0)
|
will_paginate (~> 3.0, >= 3.0.0)
|
||||||
@@ -505,7 +504,7 @@ GEM
|
|||||||
wkhtmltopdf-heroku (2.12.5.0)
|
wkhtmltopdf-heroku (2.12.5.0)
|
||||||
xpath (3.2.0)
|
xpath (3.2.0)
|
||||||
nokogiri (~> 1.8)
|
nokogiri (~> 1.8)
|
||||||
zeitwerk (2.3.1)
|
zeitwerk (2.2.2)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
@@ -515,8 +514,8 @@ DEPENDENCIES
|
|||||||
activeresource (= 5.1.0)
|
activeresource (= 5.1.0)
|
||||||
acts-as-taggable-on!
|
acts-as-taggable-on!
|
||||||
analytics-ruby
|
analytics-ruby
|
||||||
aws-sdk-s3 (~> 1.48)
|
aws-sdk-s3 (~> 1.31.0)
|
||||||
aws-sigv4 (~> 1.1)
|
aws-sigv4 (~> 1.0.2)
|
||||||
axlsx (~> 3.0.0.pre)
|
axlsx (~> 3.0.0.pre)
|
||||||
axlsx_rails (~> 0.5.2)
|
axlsx_rails (~> 0.5.2)
|
||||||
axlsx_styler (~> 0.2.0)
|
axlsx_styler (~> 0.2.0)
|
||||||
@@ -562,7 +561,7 @@ DEPENDENCIES
|
|||||||
rack!
|
rack!
|
||||||
rack-contrib (~> 2.0.1)
|
rack-contrib (~> 2.0.1)
|
||||||
rack-cors
|
rack-cors
|
||||||
rails (~> 6.0.3.1)
|
rails (~> 6.0.0)
|
||||||
rails-controller-testing (~> 1.0.4)
|
rails-controller-testing (~> 1.0.4)
|
||||||
rails-data-migrations (~> 1.2.0)
|
rails-data-migrations (~> 1.2.0)
|
||||||
redcarpet (~> 3.4.0)
|
redcarpet (~> 3.4.0)
|
||||||
|
|||||||
@@ -21,15 +21,11 @@ $(document).on "turbolinks:load", ->
|
|||||||
|
|
||||||
refreshBroadcastVideo: (data) ->
|
refreshBroadcastVideo: (data) ->
|
||||||
$("#broadcast_updates").html data.status_content
|
$("#broadcast_updates").html data.status_content
|
||||||
stream_selected = $("#broadcast_video").data('videoType') == 'stream';
|
if data.streamer_status == 'recording' && data.status == 'active'
|
||||||
if data.streamer_status == 'recording' && data.status == 'active' && stream_selected
|
|
||||||
$("#broadcast_video").html data.video_content
|
$("#broadcast_video").html data.video_content
|
||||||
$("#live_take").html data.live_take_content
|
|
||||||
|
|
||||||
new (Clappr.Player)(
|
new (Clappr.Player)(
|
||||||
<%= "baseUrl: 'http://cdn.clappr.io/latest'," if Rails.env.test? %>
|
|
||||||
parentId: '#broadcast_video'
|
parentId: '#broadcast_video'
|
||||||
source: data.full_live_stream_playback_url
|
source: data.playback_url
|
||||||
width: '100%',
|
width: '100%',
|
||||||
height: '100%',
|
height: '100%',
|
||||||
mute: true,
|
mute: true,
|
||||||
@@ -37,7 +33,6 @@ $(document).on "turbolinks:load", ->
|
|||||||
hlsMinimumDvrSize: 1)
|
hlsMinimumDvrSize: 1)
|
||||||
if data.streamer_status == "idle" && data.status == "idle"
|
if data.streamer_status == "idle" && data.status == "idle"
|
||||||
$("#broadcast_video").html data.video_content
|
$("#broadcast_video").html data.video_content
|
||||||
$("#live_take").html data.live_take_content
|
|
||||||
|
|
||||||
showBroadcastRecordings: (data) ->
|
showBroadcastRecordings: (data) ->
|
||||||
$(".flash-message").html data.flash_content
|
$(".flash-message").html data.flash_content
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
$(document).on("turbolinks:load", function() {
|
|
||||||
$("#upload_directory_files").on('click', function(e){
|
|
||||||
const newFilesCount = $('input[name = "directory[files][]"][type = "hidden"]').length;
|
|
||||||
|
|
||||||
if (newFilesCount === 0){
|
|
||||||
e.preventDefault();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
$(document).on("click", "[data-behavior=select_contract_template]", function() {
|
|
||||||
var _this = this;
|
|
||||||
var checkbox = $(this).children("input:checkbox");
|
|
||||||
|
|
||||||
selectContractTemplate(_this, checkbox);
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).on("click", "[data-behavior=select_contract_template] input[type='checkbox']", function(e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
|
|
||||||
var _this = this;
|
|
||||||
var checkbox = $(this);
|
|
||||||
|
|
||||||
selectContractTemplate(_this, checkbox);
|
|
||||||
});
|
|
||||||
|
|
||||||
function selectContractTemplate(clicked_element, checkbox) {
|
|
||||||
if (clicked_element.hasChildNodes()) {
|
|
||||||
if(checkbox.prop("checked")) {
|
|
||||||
checkbox.prop('checked', false);
|
|
||||||
} else {
|
|
||||||
checkbox.prop('checked', true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var checked = checkbox.prop("checked");
|
|
||||||
var project_id = JSON.parse($('#group_qr_code').attr('data-project-id'));
|
|
||||||
var contract_template_ids = JSON.parse($('#group_qr_code').attr('data-contract-template-ids'));
|
|
||||||
var selected_contract_template_id = checkbox.val();
|
|
||||||
|
|
||||||
if (checked && !contract_template_ids.includes(selected_contract_template_id)) {
|
|
||||||
contract_template_ids.push(selected_contract_template_id);
|
|
||||||
} else if(!checked && contract_template_ids.includes(selected_contract_template_id)) {
|
|
||||||
contract_template_ids.splice( $.inArray(selected_contract_template_id, contract_template_ids), 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#group_qr_code').attr('data-contract-template-ids', JSON.stringify(contract_template_ids));
|
|
||||||
|
|
||||||
if (contract_template_ids.length >= 2) {
|
|
||||||
multi_sign_ids = $.param({multi_sign_ids: contract_template_ids});
|
|
||||||
contract_template_url = "/en/contract_templates/" + contract_template_ids[0] + "/qr_codes?" + multi_sign_ids
|
|
||||||
|
|
||||||
$("#group_qr_code").attr("href", contract_template_url);
|
|
||||||
$("#group_qr_code").attr("target", "_blank");
|
|
||||||
$("#group_qr_code").removeClass('disabled');
|
|
||||||
} else if (contract_template_ids.length < 2) {
|
|
||||||
$("#group_qr_code").attr("href", "javascript:void(0);");
|
|
||||||
$("#group_qr_code").addClass('disabled');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -51,8 +51,10 @@ $(document).on("turbolinks:load", function() {
|
|||||||
$("[data-behavior=guardian-photo-preview]").each(function(index, element) {
|
$("[data-behavior=guardian-photo-preview]").each(function(index, element) {
|
||||||
App.PhotoPreview.init(element);
|
App.PhotoPreview.init(element);
|
||||||
});
|
});
|
||||||
$("[data-behavior=trigger-click]").click(function(e) {
|
$("[data-behavior=take-person-photo]").click(function(e) {
|
||||||
const target = $(this).data("target");
|
$("[data-ujs-target=person-photo-input]").trigger("click");
|
||||||
$(target).trigger("click");
|
});
|
||||||
|
$("[data-behavior=take-guardian-photo]").click(function(e) {
|
||||||
|
$("[data-ujs-target=guardian-photo-input]").trigger("click");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
24
app/assets/javascripts/play_previous_recordings.js
Normal file
24
app/assets/javascripts/play_previous_recordings.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
$(document).on("click", "[data-behavior=play_recording]", function() {
|
||||||
|
if ($(this).hasClass('active')){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var playback_url = $(this).attr("data-playback-url")
|
||||||
|
$("#broadcast_video").empty();
|
||||||
|
|
||||||
|
new Clappr.Player({
|
||||||
|
parentId: '#broadcast_video',
|
||||||
|
source: playback_url,
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
autoPlay: true
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".dropdown-menu").children().removeClass('active');
|
||||||
|
$(".dropdown-menu").children().children('i').remove();
|
||||||
|
$(this).siblings().removeClass('active');
|
||||||
|
$(this).siblings().children("i").remove();
|
||||||
|
$(this).addClass('active');
|
||||||
|
$(this).prepend('<i class="fa fa-check"> </i>');
|
||||||
|
});
|
||||||
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
$(document).on("click", "[data-behavior=play_recording]", function() {
|
|
||||||
if ($(this).hasClass('active')){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$("#broadcast_video").data('videoType', 'recording');
|
|
||||||
|
|
||||||
var playback_url = $(this).attr("data-playback-url")
|
|
||||||
$("#broadcast_video").empty();
|
|
||||||
|
|
||||||
new Clappr.Player({
|
|
||||||
<%= "baseUrl: 'http://cdn.clappr.io/latest'," if Rails.env.test? %>
|
|
||||||
parentId: '#broadcast_video',
|
|
||||||
source: playback_url,
|
|
||||||
width: '100%',
|
|
||||||
height: '100%',
|
|
||||||
autoPlay: true
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".dropdown-menu").children().removeClass('active');
|
|
||||||
$(".dropdown-menu").children().children('i').remove();
|
|
||||||
$(this).siblings().removeClass('active');
|
|
||||||
$(this).siblings().children("i").remove();
|
|
||||||
$(this).addClass('active');
|
|
||||||
$(this).prepend('<i class="fa fa-check"> </i>');
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).on("click", "[data-behavior=play_stream]", function() { $("#broadcast_video").data('videoType', 'stream'); });
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
$(document).on("click", "#director_mode_switch", function() {
|
|
||||||
// JQuery click event trigger was not working.
|
|
||||||
document.getElementById("director_mode_link").click();
|
|
||||||
});
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
$(document).on("turbolinks:load", function() {
|
|
||||||
$("[data-behavior=update-required-status]").click(function(e) {
|
|
||||||
const required = !!($(this)[0] && $(this)[0].checked);
|
|
||||||
|
|
||||||
|
|
||||||
$("[data-required-tag=guardian]").each(function(index, element) {
|
|
||||||
const labelForField = element.previousSibling;
|
|
||||||
|
|
||||||
element.required = required;
|
|
||||||
labelForField.classList.add("required");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -14,7 +14,6 @@ $red: #F9002B;
|
|||||||
$green: #51B61B;
|
$green: #51B61B;
|
||||||
$teal: #32C498;
|
$teal: #32C498;
|
||||||
$purple: #5139EE;
|
$purple: #5139EE;
|
||||||
$yellow: #F9BE1B;
|
|
||||||
$dark: $gray-900;
|
$dark: $gray-900;
|
||||||
$success: $teal;
|
$success: $teal;
|
||||||
$link-color: $body-color;
|
$link-color: $body-color;
|
||||||
|
|||||||
@@ -37,14 +37,14 @@ label {
|
|||||||
&.release-me {
|
&.release-me {
|
||||||
span:last-child {
|
span:last-child {
|
||||||
background-color: $teal;
|
background-color: $teal;
|
||||||
color: $white;
|
color: $body-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.direct-me {
|
&.direct-me {
|
||||||
span:last-child {
|
span:last-child {
|
||||||
background-color: $green;
|
background-color: $green;
|
||||||
color: $white;
|
color: $body-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,14 +58,7 @@ label {
|
|||||||
&.deliver-me {
|
&.deliver-me {
|
||||||
span:last-child {
|
span:last-child {
|
||||||
background-color: $purple;
|
background-color: $purple;
|
||||||
color: $white;
|
color: white;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.task-me {
|
|
||||||
span:last-child {
|
|
||||||
background-color: $yellow;
|
|
||||||
color: $white;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,16 +405,6 @@ a[data-behavior=seekable-timecode] {
|
|||||||
background-color: rgba($black, 0.05);
|
background-color: rgba($black, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Black background
|
|
||||||
.bg-black {
|
|
||||||
background-color: $black;
|
|
||||||
}
|
|
||||||
|
|
||||||
// White background
|
|
||||||
.bg-white {
|
|
||||||
background-color: $white;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom width
|
// Custom width
|
||||||
.w-65 {
|
.w-65 {
|
||||||
width: 65% !important;
|
width: 65% !important;
|
||||||
@@ -432,32 +415,8 @@ a[data-behavior=seekable-timecode] {
|
|||||||
max-height: 30rem;
|
max-height: 30rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Max-width 75%
|
|
||||||
.max-w-75 {
|
|
||||||
max-width: 75%;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fix height and width
|
// Fix height and width
|
||||||
.fix-h-and-w {
|
.fix-h-and-w {
|
||||||
width: 308px;
|
width: 308px;
|
||||||
height:308px;
|
height:308px;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dropdown shown state overrride
|
|
||||||
.override-dropdown-show-state {
|
|
||||||
color: $white !important;
|
|
||||||
background-color: $black !important;
|
|
||||||
border-color: transparent !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Override custom switch color
|
|
||||||
.override-custom-control-label::before {
|
|
||||||
background-color: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Override nav tab design
|
|
||||||
.override-nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active {
|
|
||||||
background: transparent;
|
|
||||||
border-color: transparent;
|
|
||||||
border-bottom: 3px solid #ff0000;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -11,15 +11,12 @@ class BroadcastsChannel < ApplicationCable::Channel
|
|||||||
def self.broadcast_stream_updates(broadcast)
|
def self.broadcast_stream_updates(broadcast)
|
||||||
status_content = ApplicationController.render partial: "broadcasts/broadcast_status", locals: { broadcast: broadcast }
|
status_content = ApplicationController.render partial: "broadcasts/broadcast_status", locals: { broadcast: broadcast }
|
||||||
video_content = ApplicationController.render partial: "broadcasts/video", locals: { broadcast: broadcast }
|
video_content = ApplicationController.render partial: "broadcasts/video", locals: { broadcast: broadcast }
|
||||||
live_take = ApplicationController.render partial: "broadcasts/live_take", locals: { broadcast: broadcast }
|
|
||||||
|
|
||||||
broadcast_to broadcast, {
|
broadcast_to broadcast, {
|
||||||
event: :broadcast_stream_update,
|
event: :broadcast_stream_update,
|
||||||
status: broadcast.status,
|
status: broadcast.status,
|
||||||
playback_url: broadcast.stream_playback_url,
|
playback_url: broadcast.stream_playback_url,
|
||||||
full_live_stream_playback_url: broadcast.full_live_stream_playback_url,
|
|
||||||
video_content: video_content,
|
video_content: video_content,
|
||||||
live_take_content: live_take,
|
|
||||||
status_content: status_content,
|
status_content: status_content,
|
||||||
streamer_status: broadcast.streamer_status
|
streamer_status: broadcast.streamer_status
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class AccountsController < ApplicationController
|
|||||||
|
|
||||||
if sign_in(user)
|
if sign_in(user)
|
||||||
TrackAnalyticsJob.perform_later(user, user.primary_account, :track_guest_sign_up, user_agent: request.user_agent, user_ip: request.remote_ip)
|
TrackAnalyticsJob.perform_later(user, user.primary_account, :track_guest_sign_up, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||||
SubmitHubspotFormJob.perform_later(user.first_name, user.last_name, user.email, account.name, i_m_interested_in: user.interested_product_name)
|
SubmitHubspotFormJob.perform_later(user.email, account.name, i_m_interested_in: user.interested_product_name)
|
||||||
redirect_to signed_in_root_path
|
redirect_to signed_in_root_path
|
||||||
else
|
else
|
||||||
redirect_to new_session_path, alert: t(".notice")
|
redirect_to new_session_path, alert: t(".notice")
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ class AcquiredMediaReleasesController < ApplicationController
|
|||||||
@acquired_media_release = build_acquired_media_release(acquired_media_release_params)
|
@acquired_media_release = build_acquired_media_release(acquired_media_release_params)
|
||||||
|
|
||||||
if @acquired_media_release.save
|
if @acquired_media_release.save
|
||||||
|
log_create_analytics
|
||||||
SetTagsForReleasableJob.perform_later(@acquired_media_release)
|
SetTagsForReleasableJob.perform_later(@acquired_media_release)
|
||||||
redirect_to [@project, :acquired_media_releases], notice: t(".notice")
|
redirect_to [@project, :acquired_media_releases], notice: t(".notice")
|
||||||
else
|
else
|
||||||
@@ -55,71 +56,35 @@ class AcquiredMediaReleasesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_company
|
|
||||||
person_email
|
|
||||||
person_title
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def acquired_media_release_params
|
def acquired_media_release_params
|
||||||
params.require(:acquired_media_release).permit(person_params,
|
params.require(:acquired_media_release).permit(
|
||||||
guardian_params,
|
:name,
|
||||||
second_guardian_params,
|
:territory,
|
||||||
:minor,
|
:term,
|
||||||
:name,
|
:person_first_name,
|
||||||
:territory,
|
:person_last_name,
|
||||||
:term,
|
:person_phone,
|
||||||
:contract,
|
:person_email,
|
||||||
:applicable_medium_id, :applicable_medium_text,
|
:person_company,
|
||||||
:territory_id, :territory_text,
|
:person_title,
|
||||||
:term_id, :term_text,
|
:person_address_street1,
|
||||||
:restriction_id, :restriction_text,
|
:person_address_street2,
|
||||||
categories: [],
|
:person_address_city,
|
||||||
files: []
|
:person_address_state,
|
||||||
)
|
:person_address_zip,
|
||||||
|
:person_address_country,
|
||||||
|
:contract,
|
||||||
|
:applicable_medium_id, :applicable_medium_text,
|
||||||
|
:territory_id, :territory_text,
|
||||||
|
:term_id, :term_text,
|
||||||
|
:restriction_id, :restriction_text,
|
||||||
|
categories: [],
|
||||||
|
file_infos_attributes: [
|
||||||
|
:filename,
|
||||||
|
:content_type,
|
||||||
|
:byte_size
|
||||||
|
]
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_acquired_media_release(attrs = {})
|
def build_acquired_media_release(attrs = {})
|
||||||
@@ -135,4 +100,8 @@ class AcquiredMediaReleasesController < ApplicationController
|
|||||||
|
|
||||||
results
|
results
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ class Admin::AccountsController < Admin::ApplicationController
|
|||||||
|
|
||||||
def show
|
def show
|
||||||
@videos = filtered_account_videos.order(created_at: :desc, project_id: :desc).paginate(page: params[:page])
|
@videos = filtered_account_videos.order(created_at: :desc, project_id: :desc).paginate(page: params[:page])
|
||||||
@broadcasts = account_broadcasts.order(created_at: :desc, project_id: :desc).paginate(page: params[:page])
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@@ -71,8 +70,4 @@ class Admin::AccountsController < Admin::ApplicationController
|
|||||||
@account.videos
|
@account.videos
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def account_broadcasts
|
|
||||||
@account.broadcasts
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
class Admin::BroadcastsController < Admin::ApplicationController
|
|
||||||
before_action :set_broadcast, only: [:edit, :update]
|
|
||||||
|
|
||||||
def edit
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
if @broadcast.update(broadcast_update_params)
|
|
||||||
redirect_to [:admin, @broadcast.project.account], notice: t(".notice")
|
|
||||||
else
|
|
||||||
render :edit
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_broadcast
|
|
||||||
@broadcast = authorize policy_scope(Broadcast).find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def broadcast_update_params
|
|
||||||
params.require(:broadcast).permit(
|
|
||||||
:video_conference_url_override,
|
|
||||||
:stream_url_override,
|
|
||||||
:stream_key_override,
|
|
||||||
:director_mode_video_embed
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
class Admin::TaskRequestsController < Admin::ApplicationController
|
|
||||||
before_action :set_task_request, only: [:edit, :update, :show]
|
|
||||||
|
|
||||||
def index
|
|
||||||
@task_requests = task_requests.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def edit
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
@files = @task_request.files.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
if @task_request.update(task_request_params)
|
|
||||||
redirect_to [:admin, :task_requests], notice: t(".notice")
|
|
||||||
else
|
|
||||||
render :edit
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def task_request_params
|
|
||||||
params.require(:task_request).permit(:status, :deliverable_url)
|
|
||||||
end
|
|
||||||
|
|
||||||
def task_requests
|
|
||||||
policy_scope TaskRequest
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_task_request
|
|
||||||
@task_request = authorize policy_scope(TaskRequest).find(params[:id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -17,9 +17,7 @@ class Api::ApiController < ActionController::Base
|
|||||||
def return_error(exception)
|
def return_error(exception)
|
||||||
raise exception if Rails.env.test?
|
raise exception if Rails.env.test?
|
||||||
|
|
||||||
Raven.capture_exception(exception)
|
logger.error "==Handled======="
|
||||||
|
|
||||||
logger.error "==Handled======"
|
|
||||||
logger.error exception.message
|
logger.error exception.message
|
||||||
logger.error exception.backtrace.join("\n")
|
logger.error exception.backtrace.join("\n")
|
||||||
logger.error "==Handled======="
|
logger.error "==Handled======="
|
||||||
|
|||||||
@@ -19,11 +19,5 @@ class Api::AppearanceReleasesController < Api::ReleasesController
|
|||||||
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
|
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
|
||||||
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
|
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
|
||||||
end
|
end
|
||||||
|
|
||||||
guardian_2_photo = release_create_params[:guardian_2_photo]
|
|
||||||
if guardian_2_photo
|
|
||||||
guardian_2_photo[:io] = StringIO.new(Base64.decode64(guardian_2_photo[:io]))
|
|
||||||
release.guardian_2_photo.attach(io: guardian_2_photo[:io], filename: guardian_2_photo[:filename])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -24,12 +24,8 @@ class Api::BroadcastsController < Api::ApiController
|
|||||||
|
|
||||||
def update
|
def update
|
||||||
file_params.each do |file|
|
file_params.each do |file|
|
||||||
if file.is_a?(String)
|
file[:io] = StringIO.new(Base64.decode64(file[:io]))
|
||||||
@broadcast.files.attach(file)
|
@broadcast.files.attach(io: file[:io], filename: file[:filename])
|
||||||
else
|
|
||||||
file[:io] = StringIO.new(Base64.decode64(file[:io]))
|
|
||||||
@broadcast.files.attach(file.to_h.symbolize_keys)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
@broadcast.save!
|
@broadcast.save!
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
class Api::MedicalReleasesController < Api::ReleasesController
|
|
||||||
deserializable_resource :medical_release, only: [:create, :update]
|
|
||||||
|
|
||||||
def model_name
|
|
||||||
"medical_release"
|
|
||||||
end
|
|
||||||
|
|
||||||
def attributes_for_index
|
|
||||||
[:name]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
class Api::MiscReleasesController < Api::ReleasesController
|
|
||||||
deserializable_resource :misc_release, only: [:create, :update]
|
|
||||||
|
|
||||||
def model_name
|
|
||||||
"misc_release"
|
|
||||||
end
|
|
||||||
|
|
||||||
def attributes_for_index
|
|
||||||
[:name]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -21,6 +21,7 @@ class Api::ReleasesController < Api::ApiController
|
|||||||
release.contract_template_id = @contract_template.id
|
release.contract_template_id = @contract_template.id
|
||||||
handle_attachments(release, release_create_params[:photos])
|
handle_attachments(release, release_create_params[:photos])
|
||||||
release.save!(context: :native)
|
release.save!(context: :native)
|
||||||
|
log_create_analytics
|
||||||
after_create(release)
|
after_create(release)
|
||||||
handle_response(release, :created)
|
handle_response(release, :created)
|
||||||
end
|
end
|
||||||
@@ -102,16 +103,10 @@ class Api::ReleasesController < Api::ApiController
|
|||||||
if ["appearance_release", "talent_release"].include?(name)
|
if ["appearance_release", "talent_release"].include?(name)
|
||||||
has_many :guardian_photos do
|
has_many :guardian_photos do
|
||||||
data do
|
data do
|
||||||
[
|
[@object.guardian_photo.try(:attachment)].compact
|
||||||
@object.guardian_photo.try(:attachment),
|
|
||||||
@object.guardian_2_photo.try(:attachment)
|
|
||||||
].compact
|
|
||||||
end
|
end
|
||||||
meta do
|
meta do
|
||||||
{ count:
|
{ count: @object.try(:guardian_photo).try(:attached?) ? 1 : 0 }
|
||||||
(@object.try(:guardian_photo).try(:attached?) ? 1 : 0) +
|
|
||||||
(@object.try(:guardian_2_photo).try(:attached?) ? 1 : 0)
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -175,9 +170,13 @@ class Api::ReleasesController < Api::ApiController
|
|||||||
|
|
||||||
def release_create_params
|
def release_create_params
|
||||||
parameters = params.require(model_name).permit!
|
parameters = params.require(model_name).permit!
|
||||||
keys = model_constant.new.attributes.keys + [:guardian_photo, :guardian_2_photo, :person_photo, :photos, :signature, :signature_base64, :file_infos_attributes]
|
keys = model_constant.new.attributes.keys + [:guardian_photo, :person_photo, :photos, :signature, :signature_base64, :file_infos_attributes]
|
||||||
parameters[:signature_base64] = parameters[:signature]
|
parameters[:signature_base64] = parameters[:signature]
|
||||||
parameters = parameters.slice(*keys).except(:created_at, :updated_at, :id, :user_id, :signature)
|
parameters = parameters.slice(*keys).except(:created_at, :updated_at, :id, :user_id, :signature)
|
||||||
parameters
|
parameters
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -10,10 +10,8 @@ class Api::SyncController < Api::ApiController
|
|||||||
@appearance_releases = (AppearanceRelease.where(project: accessible_projects))
|
@appearance_releases = (AppearanceRelease.where(project: accessible_projects))
|
||||||
@location_releases = (LocationRelease.where(project: accessible_projects))
|
@location_releases = (LocationRelease.where(project: accessible_projects))
|
||||||
@material_releases = (MaterialRelease.where(project: accessible_projects))
|
@material_releases = (MaterialRelease.where(project: accessible_projects))
|
||||||
@medical_releases = MedicalRelease.where(project: accessible_projects)
|
|
||||||
@misc_releases = MiscRelease.where(project: accessible_projects)
|
|
||||||
@talent_releases = (TalentRelease.where(project: accessible_projects))
|
@talent_releases = (TalentRelease.where(project: accessible_projects))
|
||||||
@notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @medical_releases + @misc_releases + @talent_releases + @acquired_media_releases ))
|
@notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @talent_releases + @acquired_media_releases ))
|
||||||
|
|
||||||
render json: {
|
render json: {
|
||||||
data: {
|
data: {
|
||||||
@@ -24,8 +22,6 @@ class Api::SyncController < Api::ApiController
|
|||||||
appearance_releases: releases_query(@appearance_releases),
|
appearance_releases: releases_query(@appearance_releases),
|
||||||
location_releases: releases_query(@location_releases),
|
location_releases: releases_query(@location_releases),
|
||||||
material_releases: releases_query(@material_releases),
|
material_releases: releases_query(@material_releases),
|
||||||
medical_releases: releases_query(@medical_releases),
|
|
||||||
misc_releases: releases_query(@misc_releases),
|
|
||||||
talent_releases: releases_query(@talent_releases),
|
talent_releases: releases_query(@talent_releases),
|
||||||
notes: @notes
|
notes: @notes
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,5 @@ class Api::TalentReleasesController < Api::ReleasesController
|
|||||||
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
|
guardian_photo[:io] = StringIO.new(Base64.decode64(guardian_photo[:io]))
|
||||||
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
|
release.guardian_photo.attach(io: guardian_photo[:io], filename: guardian_photo[:filename])
|
||||||
end
|
end
|
||||||
|
|
||||||
guardian_2_photo = release_create_params[:guardian_2_photo]
|
|
||||||
if guardian_2_photo
|
|
||||||
guardian_2_photo[:io] = StringIO.new(Base64.decode64(guardian_2_photo[:io]))
|
|
||||||
release.guardian_2_photo.attach(io: guardian_2_photo[:io], filename: guardian_2_photo[:filename])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,24 +1,14 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require './lib/knock_monkeypatch'
|
|
||||||
|
|
||||||
class Api::UserTokenController < Knock::AuthTokenController
|
class Api::UserTokenController < Knock::AuthTokenController
|
||||||
include Oath::ControllerHelpers
|
|
||||||
include RememberMe::Controller
|
|
||||||
|
|
||||||
skip_before_action :verify_authenticity_token
|
skip_before_action :verify_authenticity_token
|
||||||
before_action :sign_in_user
|
|
||||||
|
|
||||||
rescue_from Exception, :with => :return_error
|
rescue_from Exception, :with => :return_error
|
||||||
|
|
||||||
# Catch exception and return JSON-formatted error
|
# Catch exception and return JSON-formatted error
|
||||||
def return_error(exception)
|
def return_error(exception)
|
||||||
Raven.capture_exception(exception)
|
|
||||||
|
|
||||||
logger.error "==Handled======="
|
logger.error "==Handled======="
|
||||||
logger.error exception.message
|
logger.error exception.message
|
||||||
logger.error exception.backtrace.join("\n")
|
logger.error exception.backtrace.join("\n")
|
||||||
logger.error "==Handled======="
|
logger.error "==Handled======="
|
||||||
case exception
|
case exception
|
||||||
when ActiveRecord::RecordNotFound
|
when ActiveRecord::RecordNotFound
|
||||||
@status = 404
|
@status = 404
|
||||||
@@ -35,18 +25,12 @@ class Api::UserTokenController < Knock::AuthTokenController
|
|||||||
end
|
end
|
||||||
|
|
||||||
# for some reason render json_errors is not working
|
# for some reason render json_errors is not working
|
||||||
# simulating JSON API support
|
# simulating JSON API support
|
||||||
render json: {
|
render json: {
|
||||||
errors: [{
|
errors: [{
|
||||||
status: @status.to_s,
|
status: @status.to_s,
|
||||||
title: @message
|
title: @message
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def sign_in_user
|
|
||||||
sign_in(entity)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
class Api::UsersController < Api::ApiController
|
|
||||||
skip_before_action :authenticate_user
|
|
||||||
before_action :verify_custom_token, only: :create
|
|
||||||
|
|
||||||
def create
|
|
||||||
if user_params[:email].nil? || user_params[:password].nil?
|
|
||||||
raise ActionController::ParameterMissing.new 'Missing email or password'
|
|
||||||
end
|
|
||||||
|
|
||||||
user = Oath::Services::SignUp.new(user_params).perform
|
|
||||||
render json: user.slice(:email, :created_at, :first_name, :last_name)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def user_params
|
|
||||||
params.require(:user).permit(%i[
|
|
||||||
email
|
|
||||||
password
|
|
||||||
first_name
|
|
||||||
last_name
|
|
||||||
])
|
|
||||||
end
|
|
||||||
|
|
||||||
def verify_custom_token
|
|
||||||
if token.blank? || token != ENV['CUSTOM_API_TOKEN']
|
|
||||||
unauthorized_entity(:user)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
@@ -18,6 +18,7 @@ class AppearanceReleasesController < ApplicationController
|
|||||||
@appearance_release = build_appearance_release(appearance_release_params)
|
@appearance_release = build_appearance_release(appearance_release_params)
|
||||||
|
|
||||||
if @appearance_release.save(context: :non_native)
|
if @appearance_release.save(context: :non_native)
|
||||||
|
log_create_analytics
|
||||||
AddHeadshotCollectionUidToProjectJob.perform_later(@project)
|
AddHeadshotCollectionUidToProjectJob.perform_later(@project)
|
||||||
SetTagsForReleasableJob.perform_later(@appearance_release)
|
SetTagsForReleasableJob.perform_later(@appearance_release)
|
||||||
redirect_to [@project, :appearance_releases], notice: "The release has been imported. #{link_to_import_another}"
|
redirect_to [@project, :appearance_releases], notice: "The release has been imported. #{link_to_import_another}"
|
||||||
@@ -76,43 +77,9 @@ class AppearanceReleasesController < ApplicationController
|
|||||||
results
|
results
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_email
|
|
||||||
person_photo
|
|
||||||
person_address_street1
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def appearance_release_params
|
def appearance_release_params
|
||||||
params.require(:appearance_release).permit(person_params,
|
params.require(:appearance_release).permit(:contract, :guardian_address, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_photo, :guardian_email, :minor,
|
||||||
guardian_params, second_guardian_params,
|
:person_address, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
|
||||||
:contract, :minor,
|
|
||||||
:applicable_medium_id, :applicable_medium_text,
|
:applicable_medium_id, :applicable_medium_text,
|
||||||
:territory_id, :territory_text,
|
:territory_id, :territory_text,
|
||||||
:term_id, :term_text, :person_date_of_birth,
|
:term_id, :term_text, :person_date_of_birth,
|
||||||
@@ -126,4 +93,8 @@ class AppearanceReleasesController < ApplicationController
|
|||||||
def link_to_import_another
|
def link_to_import_another
|
||||||
view_context.link_to "Import Another", [:new, @project, :appearance_release]
|
view_context.link_to "Import Another", [:new, @project, :appearance_release]
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
class ApprovalsController < ApplicationController
|
|
||||||
before_action :set_releasable
|
|
||||||
before_action :set_project
|
|
||||||
|
|
||||||
layout "project"
|
|
||||||
|
|
||||||
def create
|
|
||||||
@releasable.approve_by(current_user)
|
|
||||||
@releasable.approved_by_user_signature.attach(approved_by_user_signature_params) if signature_data.present?
|
|
||||||
|
|
||||||
if @releasable.save(context: :approval)
|
|
||||||
redirect_to [@project, "#{@releasable_param.name.pluralize}"], notice: t('.release_approved', release_type: @releasable.model_name.human)
|
|
||||||
else
|
|
||||||
render :new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def releasable_param
|
|
||||||
@releasable_param ||= ReleasableParam.new(params.to_unsafe_h)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_releasable
|
|
||||||
@releasable = authorize policy_scope(releasable_param.type).find(releasable_param.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = @releasable.project
|
|
||||||
end
|
|
||||||
|
|
||||||
def releasable_params
|
|
||||||
params.require(releasable_param.name).permit(approved_by_user_signature: :data)
|
|
||||||
end
|
|
||||||
|
|
||||||
def signature_data
|
|
||||||
releasable_params.dig(:approved_by_user_signature, :data)
|
|
||||||
end
|
|
||||||
|
|
||||||
def approved_by_user_signature_params
|
|
||||||
{
|
|
||||||
data: signature_data,
|
|
||||||
filename: "approved_by_user_signature.png",
|
|
||||||
content_type: "image/png",
|
|
||||||
identify: false,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
class BroadcastRecordingStarringsController < ApplicationController
|
|
||||||
layout "project"
|
|
||||||
|
|
||||||
before_action :set_project
|
|
||||||
before_action :set_broadcast
|
|
||||||
before_action :set_recording
|
|
||||||
|
|
||||||
def create
|
|
||||||
@recording.toggle_star
|
|
||||||
set_recordings
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def broadcast_recording_params
|
|
||||||
params.require(:broadcast_recording).permit(:name, :description)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_broadcast
|
|
||||||
@broadcast = authorize policy_scope(@project.broadcasts).find(params[:broadcast_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_recording
|
|
||||||
@recording = authorize policy_scope(@broadcast.broadcast_recordings).find(params[:broadcast_recording_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_recordings
|
|
||||||
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
class BroadcastRecordingsController < ApplicationController
|
|
||||||
layout "project"
|
|
||||||
|
|
||||||
before_action :set_project
|
|
||||||
before_action :set_broadcast
|
|
||||||
before_action :set_recording
|
|
||||||
|
|
||||||
def edit
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
@recording.update(broadcast_recording_params)
|
|
||||||
set_recordings
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
|
||||||
@recording.update(hidden: true)
|
|
||||||
set_recordings
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def broadcast_recording_params
|
|
||||||
params.require(:broadcast_recording).permit(:name, :description)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_broadcast
|
|
||||||
@broadcast = authorize policy_scope(@project.broadcasts).find(params[:broadcast_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_recording
|
|
||||||
@recording = authorize policy_scope(@broadcast.broadcast_recordings).find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_recordings
|
|
||||||
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -3,9 +3,8 @@ class BroadcastsController < ApplicationController
|
|||||||
|
|
||||||
before_action :set_project
|
before_action :set_project
|
||||||
before_action :build_broadcast, only: [:new, :create]
|
before_action :build_broadcast, only: [:new, :create]
|
||||||
before_action :set_broadcast, only: [:show, :destroy, :update, :destroy_file]
|
before_action :set_broadcast, only: [:show, :destroy, :update]
|
||||||
before_action :set_multi_view_broadcasts, only: [:show]
|
before_action :set_multi_view_broadcasts, only: [:show]
|
||||||
before_action :show_splash_screen, only: :index
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page])
|
@broadcasts = filtered_broadcasts.order_by_recent.paginate(page: params[:page])
|
||||||
@@ -23,27 +22,21 @@ class BroadcastsController < ApplicationController
|
|||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
end
|
end
|
||||||
rescue MuxRuby::ApiError, ActiveResource::ConnectionError => e
|
|
||||||
Raven.capture_exception(e)
|
|
||||||
redirect_to [@project, :broadcasts], alert: t(".alert")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@conference_url = conference_url_for(@broadcast)
|
@conference_url = url_for [@broadcast.project, @broadcast, :zoom_meeting]
|
||||||
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
|
@recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
||||||
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
|
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
|
||||||
|
|
||||||
render layout: 'application'
|
render layout: 'application'
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
unless params.has_key?(:broadcast)
|
|
||||||
@broadcast.regenerate_token
|
|
||||||
redirect_to([@project, @broadcast], notice: t('.reset_notice')) and return
|
|
||||||
end
|
|
||||||
|
|
||||||
@broadcast.update(broadcast_params)
|
@broadcast.update(broadcast_params)
|
||||||
update_files_section
|
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
||||||
|
|
||||||
|
pagination_content = ApplicationController.render html: helpers.will_paginate(@files, params: { active_tab: params[:active_tab], page: params[:page], active_files_tab: params[:active_files_tab] })
|
||||||
|
BroadcastsChannel.broadcast_file_upload_updates(@broadcast, @files, pagination_content)
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@@ -54,29 +47,10 @@ class BroadcastsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy_file
|
|
||||||
authorize Broadcast
|
|
||||||
file = ActiveStorage::Attachment.find(params[:file_id])
|
|
||||||
file.destroy
|
|
||||||
|
|
||||||
update_files_section
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def update_files_section
|
|
||||||
@files = @broadcast.files.order("created_at DESC").paginate(page: 1)
|
|
||||||
|
|
||||||
pagination_content = ApplicationController.render html: helpers.will_paginate(@files, params: { active_tab: params[:active_tab], page: params[:page], active_files_tab: params[:active_files_tab] })
|
|
||||||
BroadcastsChannel.broadcast_file_upload_updates(@broadcast, @files, pagination_content)
|
|
||||||
end
|
|
||||||
|
|
||||||
def show_splash_screen
|
|
||||||
render :splash if broadcasts.count.zero?
|
|
||||||
end
|
|
||||||
|
|
||||||
def broadcast_params
|
def broadcast_params
|
||||||
params.require(:broadcast).permit(:name, :shoot_location_time_zone, files: [])
|
params.require(:broadcast).permit(:name, files: [])
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_project
|
def set_project
|
||||||
@@ -113,10 +87,6 @@ class BroadcastsController < ApplicationController
|
|||||||
results
|
results
|
||||||
end
|
end
|
||||||
|
|
||||||
def conference_url_for(broadcast)
|
|
||||||
broadcast.video_conference_url_override.presence || url_for([broadcast.project, broadcast, :zoom_meeting])
|
|
||||||
end
|
|
||||||
|
|
||||||
def log_create_analytics
|
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)
|
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_live_stream, user_agent: request.user_agent, user_ip: request.remote_ip)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
module MiscReleaseContext
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
def misc_releases
|
|
||||||
policy_scope(MiscRelease)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_misc_release
|
|
||||||
misc_release_id = params[:misc_release_id] || params[:id]
|
|
||||||
|
|
||||||
@misc_release = authorize misc_releases.find(misc_release_id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
class ContractTemplates::DuplicatesController < ApplicationController
|
|
||||||
before_action :set_contract_template
|
|
||||||
|
|
||||||
def create
|
|
||||||
authorize(ContractTemplate)
|
|
||||||
new_contract_template = @contract_template.dup
|
|
||||||
new_contract_template.name = I18n.t('contract_templates.duplicate.name_prefix', template_name: @contract_template.name)
|
|
||||||
|
|
||||||
# Duplicate rich text fields
|
|
||||||
|
|
||||||
new_contract_template.body = @contract_template.body
|
|
||||||
new_contract_template.guardian_clause = @contract_template.guardian_clause
|
|
||||||
new_contract_template.signature_legal_text = @contract_template.signature_legal_text
|
|
||||||
|
|
||||||
if new_contract_template.save
|
|
||||||
redirect_to [:edit, new_contract_template]
|
|
||||||
else
|
|
||||||
redirect_to [@contract_template.project, :contract_templates], alert: t('.error')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def contract_templates
|
|
||||||
policy_scope(ContractTemplate)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_contract_template
|
|
||||||
@contract_template = contract_templates.find(params[:contract_template_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -16,12 +16,7 @@ class ContractTemplates::QrCodesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def qr_code
|
def qr_code
|
||||||
if params[:multi_sign_ids].present?
|
authorize QrCode.build_from_contract_template(@contract_template)
|
||||||
contract_templates_group = authorize contract_templates.where(id: params[:multi_sign_ids]).order_by_recent
|
|
||||||
authorize QrCode.build_from_multiple_contract_templates(contract_templates_group, @contract_template.project)
|
|
||||||
else
|
|
||||||
authorize QrCode.build_from_contract_template(@contract_template)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def download_attributes
|
def download_attributes
|
||||||
|
|||||||
@@ -5,10 +5,8 @@ class ContractTemplatesController < ApplicationController
|
|||||||
|
|
||||||
layout 'project'
|
layout 'project'
|
||||||
|
|
||||||
before_action :set_project, except: [:destroy, :edit, :update]
|
before_action :set_project, except: [:destroy]
|
||||||
before_action :set_contract_template, only: [:destroy, :edit, :update]
|
before_action :set_contract_template, only: [:destroy]
|
||||||
before_action :set_project_from_contract_template, only: [:edit, :update]
|
|
||||||
before_action :show_splash_screen, only: :index
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@contract_templates = contract_templates.non_archived.order_by_name.paginate(page: params[:page])
|
@contract_templates = contract_templates.non_archived.order_by_name.paginate(page: params[:page])
|
||||||
@@ -26,7 +24,6 @@ class ContractTemplatesController < ApplicationController
|
|||||||
contract = Contract.new releasable_instance, true
|
contract = Contract.new releasable_instance, true
|
||||||
send_file contract.to_pdf, download_attributes
|
send_file contract.to_pdf, download_attributes
|
||||||
elsif @contract_template.save
|
elsif @contract_template.save
|
||||||
log_create_analytics
|
|
||||||
redirect_to [@project, :contract_templates], notice: t('.notice')
|
redirect_to [@project, :contract_templates], notice: t('.notice')
|
||||||
else
|
else
|
||||||
@release_type = contract_template_params[:release_type]
|
@release_type = contract_template_params[:release_type]
|
||||||
@@ -34,20 +31,6 @@ class ContractTemplatesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
|
||||||
@release_type = @contract_template.release_type
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
@contract_template.attributes = contract_template_params
|
|
||||||
|
|
||||||
if @contract_template.save
|
|
||||||
redirect_to [@project, :contract_templates], notice: t('.notice')
|
|
||||||
else
|
|
||||||
render :edit
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@contract_template.archive
|
@contract_template.archive
|
||||||
redirect_to [@contract_template.project, :contract_templates], alert: t('.archived_notice')
|
redirect_to [@contract_template.project, :contract_templates], alert: t('.archived_notice')
|
||||||
@@ -55,14 +38,6 @@ class ContractTemplatesController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_project_from_contract_template
|
|
||||||
@project = @contract_template.project
|
|
||||||
end
|
|
||||||
|
|
||||||
def show_splash_screen
|
|
||||||
render :splash if contract_templates.non_archived.count.zero?
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_contract_template
|
def set_contract_template
|
||||||
@contract_template = authorize contract_templates.find(params[:id])
|
@contract_template = authorize contract_templates.find(params[:id])
|
||||||
end
|
end
|
||||||
@@ -82,22 +57,16 @@ class ContractTemplatesController < ApplicationController
|
|||||||
def contract_template_params
|
def contract_template_params
|
||||||
params
|
params
|
||||||
.require(:contract_template)
|
.require(:contract_template)
|
||||||
.permit(:name, :release_type, :body, :guardian_clause,
|
.permit(:name, :release_type, :body, :guardian_clause, :fee,
|
||||||
:signature_legal_text, :fee, :amendment_clause,
|
|
||||||
:applicable_medium_id, :applicable_medium_text,
|
:applicable_medium_id, :applicable_medium_text,
|
||||||
:territory_id, :territory_text,
|
:territory_id, :territory_text,
|
||||||
:term_id, :term_text, :accessibility,
|
:term_id, :term_text,
|
||||||
:restriction_id, :restriction_text,
|
:restriction_id, :restriction_text,
|
||||||
:question_1_text, :question_2_text,
|
:question_1_text, :question_2_text,
|
||||||
:question_3_text, :question_4_text,
|
:question_3_text, :question_4_text,
|
||||||
:question_5_text, :question_6_text,
|
:question_5_text, :question_6_text,
|
||||||
:question_7_text, :question_8_text,
|
:question_7_text, :question_8_text,
|
||||||
:question_9_text, :question_10_text,
|
:question_9_text, :question_10_text)
|
||||||
:question_11_text, :question_12_text,
|
|
||||||
:question_13_text, :question_14_text,
|
|
||||||
:question_15_text, :questionnaire_legal_text,
|
|
||||||
:exhibit_a_legal_text, :exhibit_a_question_text,
|
|
||||||
:exhibit_b_legal_text, :exhibit_b_question_text)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def download_attributes
|
def download_attributes
|
||||||
@@ -107,8 +76,4 @@ class ContractTemplatesController < ApplicationController
|
|||||||
type: 'application/pdf'
|
type: 'application/pdf'
|
||||||
}
|
}
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -48,10 +48,8 @@ class ContractsController < ApplicationController
|
|||||||
# Native release contracts must be generated on-the-fly; non-native releases have a contract attachment
|
# Native release contracts must be generated on-the-fly; non-native releases have a contract attachment
|
||||||
if releasable.native?
|
if releasable.native?
|
||||||
send_file contract.to_pdf, download_attributes
|
send_file contract.to_pdf, download_attributes
|
||||||
elsif policy(contract).show?
|
|
||||||
redirect_to releasable.contract.service_url
|
|
||||||
else
|
else
|
||||||
raise Pundit::NotAuthorizedError
|
redirect_to releasable.contract.service_url
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class FilesController < ApplicationController
|
class FileInfosController < ApplicationController
|
||||||
before_action :set_releasable
|
before_action :set_releasable
|
||||||
|
|
||||||
layout "project"
|
layout "project"
|
||||||
@@ -16,7 +16,7 @@ class FilesController < ApplicationController
|
|||||||
|
|
||||||
if @releasable.update(releasable_params)
|
if @releasable.update(releasable_params)
|
||||||
SetTagsForReleasableJob.perform_later(@releasable)
|
SetTagsForReleasableJob.perform_later(@releasable)
|
||||||
redirect_to [@project, @releasable.model_name.plural], notice: "Files added successfully to the release."
|
redirect_to [@project, @releasable.model_name.plural], notice: t(".notice")
|
||||||
else
|
else
|
||||||
render :edit
|
render :edit
|
||||||
end
|
end
|
||||||
@@ -29,10 +29,16 @@ class FilesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_releasable
|
def set_releasable
|
||||||
@releasable = authorize policy_scope(releasable_param.type).find(releasable_param.id), :edit_files?
|
@releasable = authorize policy_scope(releasable_param.type).find(releasable_param.id), :"#{action_name}_file_infos?"
|
||||||
end
|
end
|
||||||
|
|
||||||
def releasable_params
|
def releasable_params
|
||||||
params.fetch(releasable_param.name, {}).permit(files: [])
|
params.fetch(releasable_param.name, {}).permit(
|
||||||
|
file_infos_attributes: [
|
||||||
|
:filename,
|
||||||
|
:content_type,
|
||||||
|
:byte_size
|
||||||
|
],
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -18,6 +18,7 @@ class LocationReleasesController < ApplicationController
|
|||||||
@location_release = build_location_release(location_release_params)
|
@location_release = build_location_release(location_release_params)
|
||||||
|
|
||||||
if @location_release.save
|
if @location_release.save
|
||||||
|
log_create_analytics
|
||||||
SetTagsForReleasableJob.perform_later(@location_release)
|
SetTagsForReleasableJob.perform_later(@location_release)
|
||||||
redirect_to [@project, :location_releases], notice: t(".notice")
|
redirect_to [@project, :location_releases], notice: t(".notice")
|
||||||
else
|
else
|
||||||
@@ -89,4 +90,8 @@ class LocationReleasesController < ApplicationController
|
|||||||
|
|
||||||
results
|
results
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ class MaterialReleasesController < ApplicationController
|
|||||||
@material_release = build_material_release(material_release_params)
|
@material_release = build_material_release(material_release_params)
|
||||||
|
|
||||||
if @material_release.save
|
if @material_release.save
|
||||||
|
log_create_analytics
|
||||||
SetTagsForReleasableJob.perform_later(@material_release)
|
SetTagsForReleasableJob.perform_later(@material_release)
|
||||||
redirect_to [@project, :material_releases], notice: t(".notice")
|
redirect_to [@project, :material_releases], notice: t(".notice")
|
||||||
else
|
else
|
||||||
@@ -49,64 +50,17 @@ class MaterialReleasesController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_company
|
|
||||||
person_email
|
|
||||||
person_title
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def material_release_params
|
def material_release_params
|
||||||
params.require(:material_release).permit(person_params, guardian_params, second_guardian_params, :minor,
|
params.require(:material_release).permit(
|
||||||
:name, :address_street1, :address_street2, :address_city, :address_state, :address_zip, :address_country,
|
:name, :address_street1, :address_street2, :address_city, :address_state, :address_zip, :address_country,
|
||||||
|
:person_first_name, :person_last_name, :person_title, :person_company, :person_phone, :person_email,
|
||||||
|
:person_address_street1, :person_address_street2, :person_address_city, :person_address_state, :person_address_zip, :person_address_country,
|
||||||
:applicable_medium_id, :applicable_medium_text,
|
:applicable_medium_id, :applicable_medium_text,
|
||||||
:territory_id, :territory_text,
|
:territory_id, :territory_text,
|
||||||
:term_id, :term_text,
|
:term_id, :term_text,
|
||||||
:restriction_id, :restriction_text,
|
:restriction_id, :restriction_text,
|
||||||
:description,
|
:description,
|
||||||
:contract, files: []
|
:contract, { photos: [] }
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -135,4 +89,8 @@ class MaterialReleasesController < ApplicationController
|
|||||||
|
|
||||||
results
|
results
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
class MiscReleasesController < ApplicationController
|
|
||||||
include ProjectContext, MiscReleaseContext
|
|
||||||
|
|
||||||
before_action :set_project, only: [:index]
|
|
||||||
before_action :set_misc_release, only: [:destroy]
|
|
||||||
|
|
||||||
include ProjectLayout
|
|
||||||
|
|
||||||
def index
|
|
||||||
@misc_releases = filtered_misc_releases.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy
|
|
||||||
@project = @misc_release.project
|
|
||||||
|
|
||||||
if @misc_release.destroy
|
|
||||||
redirect_to [@project, :misc_releases], alert: t(".alert")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def misc_releases
|
|
||||||
if @project
|
|
||||||
policy_scope(@project.misc_releases)
|
|
||||||
else
|
|
||||||
policy_scope(MiscRelease)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def filtered_misc_releases
|
|
||||||
results = misc_releases
|
|
||||||
|
|
||||||
if params[:query].present?
|
|
||||||
results = results.search(params[:query])
|
|
||||||
end
|
|
||||||
|
|
||||||
results
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -22,6 +22,7 @@ class MusicReleasesController < ApplicationController
|
|||||||
@music_release = build_music_release(music_release_params)
|
@music_release = build_music_release(music_release_params)
|
||||||
|
|
||||||
if @music_release.save
|
if @music_release.save
|
||||||
|
log_create_analytics
|
||||||
SetTagsForReleasableJob.perform_later(@music_release)
|
SetTagsForReleasableJob.perform_later(@music_release)
|
||||||
redirect_to [@project, :music_releases], notice: t(".notice")
|
redirect_to [@project, :music_releases], notice: t(".notice")
|
||||||
else
|
else
|
||||||
@@ -110,4 +111,8 @@ class MusicReleasesController < ApplicationController
|
|||||||
|
|
||||||
results
|
results
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ class ProjectsController < ApplicationController
|
|||||||
before_action :set_project, only: [:show, :edit, :update, :destroy]
|
before_action :set_project, only: [:show, :edit, :update, :destroy]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@projects = filtered_projects.order_by_name
|
@projects = policy_scope(Current.account.projects).order_by_name
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@@ -46,20 +46,6 @@ class ProjectsController < ApplicationController
|
|||||||
|
|
||||||
private
|
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
|
def set_project
|
||||||
@project = authorize projects.find(params[:id])
|
@project = authorize projects.find(params[:id])
|
||||||
end
|
end
|
||||||
@@ -74,7 +60,7 @@ class ProjectsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def features_settings_params
|
def features_settings_params
|
||||||
%i(appearance_release location_release material_release acquired_media_release music_release talent_release medical_release misc_release video_analysis)
|
%i(appearance_release location_release material_release acquired_media_release music_release talent_release medical_release video_analysis)
|
||||||
end
|
end
|
||||||
|
|
||||||
def project_params_with_current_account
|
def project_params_with_current_account
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ class Public::AcquiredMediaReleasesController < Public::BaseController
|
|||||||
@acquired_media_release = build_acquired_media_release(acquired_media_release_params_with_locale_and_contract_template)
|
@acquired_media_release = build_acquired_media_release(acquired_media_release_params_with_locale_and_contract_template)
|
||||||
|
|
||||||
if @acquired_media_release.save(context: :native)
|
if @acquired_media_release.save(context: :native)
|
||||||
|
log_create_analytics
|
||||||
after_create(@acquired_media_release)
|
after_create(@acquired_media_release)
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
@@ -40,67 +41,31 @@ class Public::AcquiredMediaReleasesController < Public::BaseController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_fax
|
|
||||||
person_email
|
|
||||||
person_title
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def acquired_media_release_params
|
def acquired_media_release_params
|
||||||
params.require(:acquired_media_release).permit(person_params,
|
params.require(:acquired_media_release).permit(
|
||||||
guardian_params,
|
:name,
|
||||||
second_guardian_params,
|
:description,
|
||||||
:minor,
|
:person_first_name,
|
||||||
:name,
|
:person_last_name,
|
||||||
:description,
|
:person_email,
|
||||||
:signature_base64,
|
:person_title,
|
||||||
:locale, :contract_template,
|
:person_phone,
|
||||||
categories: [],
|
:person_fax,
|
||||||
files: []
|
:person_address_street1,
|
||||||
)
|
:person_address_street2,
|
||||||
|
:person_address_city,
|
||||||
|
:person_address_state,
|
||||||
|
:person_address_zip,
|
||||||
|
:person_address_country,
|
||||||
|
:signature_base64,
|
||||||
|
:locale, :contract_template,
|
||||||
|
categories: [],
|
||||||
|
file_infos_attributes: [
|
||||||
|
:filename,
|
||||||
|
:content_type,
|
||||||
|
:byte_size
|
||||||
|
]
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def acquired_media_release_params_with_locale
|
def acquired_media_release_params_with_locale
|
||||||
@@ -110,4 +75,8 @@ class Public::AcquiredMediaReleasesController < Public::BaseController
|
|||||||
def acquired_media_release_params_with_locale_and_contract_template
|
def acquired_media_release_params_with_locale_and_contract_template
|
||||||
acquired_media_release_params_with_locale.merge(contract_template: @contract_template)
|
acquired_media_release_params_with_locale.merge(contract_template: @contract_template)
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
class Public::AmendmentsController < Public::BaseController
|
|
||||||
skip_after_action :verify_authorized, :verify_policy_scoped
|
|
||||||
before_action :set_account, :set_project, :set_contract_template, :set_release
|
|
||||||
|
|
||||||
def new
|
|
||||||
if @release.amendment_signed?
|
|
||||||
render :create, locals: { already_signed: true }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
if @release.amendment_signed?
|
|
||||||
render :create, locals: { already_signed: true }
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
@release.attributes = amendment_params
|
|
||||||
|
|
||||||
render :new unless @release.save(context: :amendment)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def amendment_params
|
|
||||||
params.require(releasable_param.name).permit(:amendment_signer_name, :amendment_signature_base64)
|
|
||||||
end
|
|
||||||
|
|
||||||
def releasable_param
|
|
||||||
@releasable_param ||= ReleasableParam.new(params.to_unsafe_h)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_release
|
|
||||||
@release = @contract_template.releases.find(releasable_param.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_contract_template
|
|
||||||
@contract_template = @project.contract_templates.find(params[:contract_template_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = @account.projects.find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_account
|
|
||||||
@account = Account.find_by(slug: params[:account_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -10,6 +10,7 @@ class Public::AppearanceReleasesController < Public::BaseController
|
|||||||
@appearance_release = build_appearance_release(appearance_release_params_with_locale_and_contract_template)
|
@appearance_release = build_appearance_release(appearance_release_params_with_locale_and_contract_template)
|
||||||
|
|
||||||
if @appearance_release.save(context: :native)
|
if @appearance_release.save(context: :native)
|
||||||
|
log_create_analytics
|
||||||
after_create(@appearance_release)
|
after_create(@appearance_release)
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
@@ -38,83 +39,11 @@ class Public::AppearanceReleasesController < Public::BaseController
|
|||||||
authorize appearance_releases.build(params)
|
authorize appearance_releases.build(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_email
|
|
||||||
person_photo
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
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
|
def appearance_release_params
|
||||||
params.require(:appearance_release).permit(person_params, guardian_params,
|
params.require(:appearance_release).permit(:person_address, :person_first_name, :person_last_name, :person_phone, :person_email, :person_photo,
|
||||||
second_guardian_params,
|
:guardian_address, :guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_email, :guardian_photo, :minor,
|
||||||
questionnaire_params,
|
:signature_base64, :person_date_of_birth,
|
||||||
:minor, :signature_base64,
|
:locale, :contract_template,)
|
||||||
:person_date_of_birth,
|
|
||||||
:locale, :contract_template,
|
|
||||||
:exhibit_a_answer, :exhibit_b_answer
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def appearance_release_params_with_locale
|
def appearance_release_params_with_locale
|
||||||
@@ -124,4 +53,8 @@ class Public::AppearanceReleasesController < Public::BaseController
|
|||||||
def appearance_release_params_with_locale_and_contract_template
|
def appearance_release_params_with_locale_and_contract_template
|
||||||
appearance_release_params_with_locale.merge(contract_template: @contract_template)
|
appearance_release_params_with_locale.merge(contract_template: @contract_template)
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ class Public::BroadcastsController < Public::BaseController
|
|||||||
before_action :set_broadcast, only: [:show, :update]
|
before_action :set_broadcast, only: [:show, :update]
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@conference_url = conference_url_for(@broadcast)
|
@conference_url = broadcast_zoom_meeting_url(@broadcast.token)
|
||||||
@multi_view_broadcasts = multi_view_broadcasts
|
@multi_view_broadcasts = multi_view_broadcasts
|
||||||
@recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
|
@recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
||||||
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
|
@files = @broadcast.files.order("created_at DESC").paginate(page: params[:files_page])
|
||||||
|
|
||||||
render 'broadcasts/show'
|
render 'broadcasts/show'
|
||||||
@@ -37,14 +37,6 @@ class Public::BroadcastsController < Public::BaseController
|
|||||||
|
|
||||||
def set_broadcast
|
def set_broadcast
|
||||||
@broadcast = Broadcast.find_by_token(params[:token])
|
@broadcast = Broadcast.find_by_token(params[:token])
|
||||||
|
|
||||||
unless @broadcast.present?
|
|
||||||
redirect_to [:new, :session], alert: t(".alert")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def conference_url_for(broadcast)
|
|
||||||
broadcast.video_conference_url_override.presence || broadcast_zoom_meeting_url(broadcast.token)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class MultiViewBroadcast
|
class MultiViewBroadcast
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
class Public::ContractTemplatesController < Public::BaseController
|
|
||||||
skip_after_action :verify_authorized, :verify_policy_scoped
|
|
||||||
before_action :set_account, :set_project
|
|
||||||
|
|
||||||
def index
|
|
||||||
@contract_templates = @project.contract_templates.where(id: params[:contract_template_ids]).order_by_name.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = @account.projects.find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_account
|
|
||||||
@account = Account.find_by(slug: params[:account_id])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -10,6 +10,7 @@ class Public::LocationReleasesController < Public::BaseController
|
|||||||
@location_release = build_location_release(location_release_params_with_locale_and_contract_template)
|
@location_release = build_location_release(location_release_params_with_locale_and_contract_template)
|
||||||
|
|
||||||
if @location_release.save(context: :native)
|
if @location_release.save(context: :native)
|
||||||
|
log_create_analytics
|
||||||
after_create(@location_release)
|
after_create(@location_release)
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
@@ -75,4 +76,8 @@ class Public::LocationReleasesController < Public::BaseController
|
|||||||
def location_release_params_with_locale_and_contract_template
|
def location_release_params_with_locale_and_contract_template
|
||||||
location_release_params_with_locale.merge(contract_template: @contract_template)
|
location_release_params_with_locale.merge(contract_template: @contract_template)
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ class Public::MaterialReleasesController < Public::BaseController
|
|||||||
@material_release = build_material_release(material_release_params_with_locale_and_contract_template)
|
@material_release = build_material_release(material_release_params_with_locale_and_contract_template)
|
||||||
|
|
||||||
if @material_release.save(context: :native)
|
if @material_release.save(context: :native)
|
||||||
|
log_create_analytics
|
||||||
after_create(@material_release)
|
after_create(@material_release)
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
@@ -38,61 +39,13 @@ class Public::MaterialReleasesController < Public::BaseController
|
|||||||
authorize material_releases.build(params)
|
authorize material_releases.build(params)
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_email
|
|
||||||
person_title
|
|
||||||
person_company
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def material_release_params
|
def material_release_params
|
||||||
params.require(:material_release).permit(person_params, guardian_params, second_guardian_params, :minor,
|
params.require(:material_release).permit(
|
||||||
:name, :address_street1, :address_street2, :address_city, :address_state, :address_zip, :address_country,
|
:name, :address_street1, :address_street2, :address_city, :address_state, :address_zip, :address_country,
|
||||||
|
:person_first_name, :person_last_name, :person_title, :person_company, :person_phone, :person_email,
|
||||||
|
:person_address_street1, :person_address_street2, :person_address_city, :person_address_state, :person_address_zip, :person_address_country,
|
||||||
:signature_base64,
|
:signature_base64,
|
||||||
:locale, :contract_template, :description, files: []
|
:locale, :contract_template, :description, photos: []
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -103,4 +56,8 @@ class Public::MaterialReleasesController < Public::BaseController
|
|||||||
def material_release_params_with_locale_and_contract_template
|
def material_release_params_with_locale_and_contract_template
|
||||||
material_release_params_with_locale.merge(contract_template: @contract_template)
|
material_release_params_with_locale.merge(contract_template: @contract_template)
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ class Public::MedicalReleasesController < Public::BaseController
|
|||||||
if @medical_release.contract_template.present?
|
if @medical_release.contract_template.present?
|
||||||
AttachContractToReleasableJob.perform_later(@medical_release)
|
AttachContractToReleasableJob.perform_later(@medical_release)
|
||||||
end
|
end
|
||||||
|
log_create_analytics
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
end
|
end
|
||||||
@@ -44,9 +45,6 @@ class Public::MedicalReleasesController < Public::BaseController
|
|||||||
.require(:medical_release)
|
.require(:medical_release)
|
||||||
.permit(
|
.permit(
|
||||||
person_params,
|
person_params,
|
||||||
guardian_params,
|
|
||||||
second_guardian_params,
|
|
||||||
:minor,
|
|
||||||
:signature_base64,
|
:signature_base64,
|
||||||
:locale,
|
:locale,
|
||||||
:contract_template,
|
:contract_template,
|
||||||
@@ -55,56 +53,22 @@ class Public::MedicalReleasesController < Public::BaseController
|
|||||||
:question_5_answer, :question_6_answer,
|
:question_5_answer, :question_6_answer,
|
||||||
:question_7_answer, :question_8_answer,
|
:question_7_answer, :question_8_answer,
|
||||||
:question_9_answer, :question_10_answer,
|
:question_9_answer, :question_10_answer,
|
||||||
:question_11_answer, :question_12_answer,
|
photos: [],
|
||||||
:question_13_answer, :question_14_answer,
|
|
||||||
:question_15_answer, photos: [],
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
def person_params
|
||||||
%i[
|
[
|
||||||
person_first_name
|
:person_first_name,
|
||||||
person_last_name
|
:person_last_name,
|
||||||
person_phone
|
:person_phone,
|
||||||
person_email
|
:person_email,
|
||||||
person_address_street1
|
:person_address_street1,
|
||||||
person_address_street2
|
:person_address_street2,
|
||||||
person_address_city
|
:person_address_city,
|
||||||
person_address_state
|
:person_address_state,
|
||||||
person_address_zip
|
:person_address_zip,
|
||||||
person_address_country
|
:person_address_country,
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
guardian_photo
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_photo
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -115,4 +79,8 @@ class Public::MedicalReleasesController < Public::BaseController
|
|||||||
def medical_release_params_with_locale_and_contract_template
|
def medical_release_params_with_locale_and_contract_template
|
||||||
medical_release_params_with_locale.merge(contract_template: @contract_template)
|
medical_release_params_with_locale.merge(contract_template: @contract_template)
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -1,123 +0,0 @@
|
|||||||
class Public::MiscReleasesController < Public::BaseController
|
|
||||||
before_action :set_account, :set_project, :set_contract_template
|
|
||||||
|
|
||||||
def new
|
|
||||||
@misc_release = build_misc_release
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
@misc_release = build_misc_release(misc_release_params_with_locale_and_contract_template)
|
|
||||||
|
|
||||||
if @misc_release.save(context: :native)
|
|
||||||
if @misc_release.contract_template.present?
|
|
||||||
AttachContractToReleasableJob.perform_later(@misc_release)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
render :new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = @account.projects.find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_account
|
|
||||||
@account = Account.find_by(slug: params[:account_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_contract_template
|
|
||||||
@contract_template = @project.contract_templates.find(params[:contract_template_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def misc_releases
|
|
||||||
policy_scope(@project.misc_releases)
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_misc_release(params = {})
|
|
||||||
authorize misc_releases.build(params)
|
|
||||||
end
|
|
||||||
|
|
||||||
def misc_release_params
|
|
||||||
params
|
|
||||||
.require(:misc_release)
|
|
||||||
.permit(
|
|
||||||
person_params,
|
|
||||||
guardian_params,
|
|
||||||
questionnaire_params,
|
|
||||||
: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
|
|
||||||
|
|
||||||
def person_params
|
|
||||||
[
|
|
||||||
:person_first_name,
|
|
||||||
:person_last_name,
|
|
||||||
:person_phone,
|
|
||||||
:person_email,
|
|
||||||
:person_address_street1,
|
|
||||||
:person_address_street2,
|
|
||||||
:person_address_city,
|
|
||||||
:person_address_state,
|
|
||||||
:person_address_zip,
|
|
||||||
:person_address_country,
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
[
|
|
||||||
:guardian_first_name,
|
|
||||||
:guardian_last_name,
|
|
||||||
:guardian_phone,
|
|
||||||
:guardian_email,
|
|
||||||
:minor,
|
|
||||||
:guardian_address_street1,
|
|
||||||
:guardian_address_street2,
|
|
||||||
:guardian_address_city,
|
|
||||||
:guardian_address_state,
|
|
||||||
:guardian_address_zip,
|
|
||||||
:guardian_address_country,
|
|
||||||
:guardian_photo
|
|
||||||
]
|
|
||||||
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 misc_release_params_with_locale
|
|
||||||
misc_release_params.merge(locale: I18n.locale)
|
|
||||||
end
|
|
||||||
|
|
||||||
def misc_release_params_with_locale_and_contract_template
|
|
||||||
misc_release_params_with_locale.merge(contract_template: @contract_template)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -10,6 +10,7 @@ class Public::TalentReleasesController < Public::BaseController
|
|||||||
@talent_release = build_talent_release(talent_release_params_with_locale_and_contract_template)
|
@talent_release = build_talent_release(talent_release_params_with_locale_and_contract_template)
|
||||||
|
|
||||||
if @talent_release.save(context: :native)
|
if @talent_release.save(context: :native)
|
||||||
|
log_create_analytics
|
||||||
after_create(@talent_release)
|
after_create(@talent_release)
|
||||||
else
|
else
|
||||||
render :new
|
render :new
|
||||||
@@ -44,59 +45,42 @@ class Public::TalentReleasesController < Public::BaseController
|
|||||||
.permit(
|
.permit(
|
||||||
person_params,
|
person_params,
|
||||||
guardian_params,
|
guardian_params,
|
||||||
second_guardian_params,
|
|
||||||
:signature_base64,
|
:signature_base64,
|
||||||
:locale,
|
:locale,
|
||||||
:contract_template,
|
:contract_template,
|
||||||
photos: []
|
photos: [],
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
def person_params
|
||||||
%i[
|
[
|
||||||
person_first_name
|
:person_first_name,
|
||||||
person_last_name
|
:person_last_name,
|
||||||
person_phone
|
:person_phone,
|
||||||
person_email
|
:person_email,
|
||||||
person_address_street1
|
:person_address_street1,
|
||||||
person_address_street2
|
:person_address_street2,
|
||||||
person_address_city
|
:person_address_city,
|
||||||
person_address_state
|
:person_address_state,
|
||||||
person_address_zip
|
:person_address_zip,
|
||||||
person_address_country
|
:person_address_country,
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def guardian_params
|
def guardian_params
|
||||||
%i[
|
[
|
||||||
guardian_first_name
|
:guardian_first_name,
|
||||||
guardian_last_name
|
:guardian_last_name,
|
||||||
guardian_phone
|
:guardian_phone,
|
||||||
guardian_email
|
:guardian_email,
|
||||||
minor
|
:minor,
|
||||||
guardian_address_street1
|
:guardian_address_street1,
|
||||||
guardian_address_street2
|
:guardian_address_street2,
|
||||||
guardian_address_city
|
:guardian_address_city,
|
||||||
guardian_address_state
|
:guardian_address_state,
|
||||||
guardian_address_zip
|
:guardian_address_zip,
|
||||||
guardian_address_country
|
:guardian_address_country,
|
||||||
guardian_photo
|
:guardian_photo,
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
guardian_2_photo
|
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -107,4 +91,8 @@ class Public::TalentReleasesController < Public::BaseController
|
|||||||
def talent_release_params_with_locale_and_contract_template
|
def talent_release_params_with_locale_and_contract_template
|
||||||
talent_release_params_with_locale.merge(contract_template: @contract_template)
|
talent_release_params_with_locale.merge(contract_template: @contract_template)
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -14,10 +14,6 @@ class StreamNotificationsController < ApplicationController
|
|||||||
when "video.live_stream.recording"
|
when "video.live_stream.recording"
|
||||||
@broadcast.streamer_recording!
|
@broadcast.streamer_recording!
|
||||||
notify_users
|
notify_users
|
||||||
when "video.asset.ready"
|
|
||||||
full_live_stream_playback_uid = notification.dig(:data, :playback_ids, 0, :id)
|
|
||||||
@broadcast.update(full_live_stream_playback_uid: full_live_stream_playback_uid)
|
|
||||||
notify_users
|
|
||||||
when "video.live_stream.active"
|
when "video.live_stream.active"
|
||||||
@broadcast.active!
|
@broadcast.active!
|
||||||
notify_users
|
notify_users
|
||||||
@@ -32,10 +28,9 @@ class StreamNotificationsController < ApplicationController
|
|||||||
asset_uid = notification.dig(:object, :id)
|
asset_uid = notification.dig(:object, :id)
|
||||||
playback_uid = notification.dig(:data, :playback_ids, 0, :id)
|
playback_uid = notification.dig(:data, :playback_ids, 0, :id)
|
||||||
file_name = notification.dig(:data, :static_renditions, :files, -1, :name)
|
file_name = notification.dig(:data, :static_renditions, :files, -1, :name)
|
||||||
duration = notification.dig(:data, :duration)
|
|
||||||
|
|
||||||
recording = @broadcast.broadcast_recordings.create!(asset_uid: asset_uid, asset_playback_uid: playback_uid, file_name: file_name, duration: duration)
|
recording = @broadcast.broadcast_recordings.create!(asset_uid: asset_uid, asset_playback_uid: playback_uid, file_name: file_name)
|
||||||
recordings = @broadcast.broadcast_recordings.visible.order_by_recent.paginate(page: params[:page])
|
recordings = @broadcast.broadcast_recordings.order_by_recent.paginate(page: params[:page])
|
||||||
|
|
||||||
link = helpers.link_to(recording.broadcast_name.titleize, recording.download_url, target: "_blank")
|
link = helpers.link_to(recording.broadcast_name.titleize, recording.download_url, target: "_blank")
|
||||||
message = "Your recent live stream has been recorded and is available for download here: #{link}"
|
message = "Your recent live stream has been recorded and is available for download here: #{link}"
|
||||||
@@ -63,17 +58,11 @@ class StreamNotificationsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_broadcast
|
def set_broadcast
|
||||||
case notification_type
|
if notification_type == "video.asset.static_renditions.ready"
|
||||||
when "video.asset.static_renditions.ready", "video.asset.ready"
|
|
||||||
live_stream_id = notification.dig(:stream_notification, :data, :live_stream_id)
|
live_stream_id = notification.dig(:stream_notification, :data, :live_stream_id)
|
||||||
@broadcast = Broadcast.find_by(stream_uid: live_stream_id)
|
@broadcast = Broadcast.find_by!(stream_uid: live_stream_id)
|
||||||
else
|
else
|
||||||
@broadcast = Broadcast.find_by(stream_uid: notification_object_id)
|
@broadcast = Broadcast.find_by!(stream_uid: notification_object_id)
|
||||||
end
|
|
||||||
|
|
||||||
if @broadcast.nil?
|
|
||||||
logger.info "Ignoring broadcast from other environment. Type = #{notification_type}. Id = #{live_stream_id} / #{notification_object_id}"
|
|
||||||
head :ok
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ class TalentReleasesController < ApplicationController
|
|||||||
@talent_release = build_talent_release(talent_release_params)
|
@talent_release = build_talent_release(talent_release_params)
|
||||||
|
|
||||||
if @talent_release.save
|
if @talent_release.save
|
||||||
|
log_create_analytics
|
||||||
AddHeadshotCollectionUidToProjectJob.perform_later(@project)
|
AddHeadshotCollectionUidToProjectJob.perform_later(@project)
|
||||||
SetTagsForReleasableJob.perform_later(@talent_release)
|
SetTagsForReleasableJob.perform_later(@talent_release)
|
||||||
redirect_to [@project, :talent_releases], notice: t(".notice")
|
redirect_to [@project, :talent_releases], notice: t(".notice")
|
||||||
@@ -60,67 +61,15 @@ class TalentReleasesController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_params
|
|
||||||
%i[
|
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_phone
|
|
||||||
person_email
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_first_name
|
|
||||||
guardian_last_name
|
|
||||||
guardian_phone
|
|
||||||
guardian_email
|
|
||||||
minor
|
|
||||||
guardian_address_street1
|
|
||||||
guardian_address_street2
|
|
||||||
guardian_address_city
|
|
||||||
guardian_address_state
|
|
||||||
guardian_address_zip
|
|
||||||
guardian_address_country
|
|
||||||
guardian_photo
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_params
|
|
||||||
%i[
|
|
||||||
guardian_2_first_name
|
|
||||||
guardian_2_last_name
|
|
||||||
guardian_2_phone
|
|
||||||
guardian_2_email
|
|
||||||
guardian_2_address_street1
|
|
||||||
guardian_2_address_street2
|
|
||||||
guardian_2_address_city
|
|
||||||
guardian_2_address_state
|
|
||||||
guardian_2_address_zip
|
|
||||||
guardian_2_address_country
|
|
||||||
guardian_2_photo
|
|
||||||
]
|
|
||||||
end
|
|
||||||
|
|
||||||
def talent_release_params
|
def talent_release_params
|
||||||
params.require(:talent_release).permit(person_params,
|
params.require(:talent_release).permit(
|
||||||
guardian_params,
|
:person_first_name, :person_last_name, :person_phone, :guardian_photo, :person_email,
|
||||||
second_guardian_params,
|
:person_address_street1, :person_address_street2, :person_address_city, :person_address_state, :person_address_zip, :person_address_country,
|
||||||
:contract, { photos: [] },
|
:guardian_first_name, :guardian_last_name, :guardian_phone, :guardian_email, :minor,
|
||||||
:applicable_medium_id,
|
:guardian_address_street1, :guardian_address_street2, :guardian_address_city, :guardian_address_state, :guardian_address_zip, :guardian_address_country,
|
||||||
:applicable_medium_text,
|
:contract, { photos: [] },
|
||||||
:territory_id,
|
:applicable_medium_id, :applicable_medium_text, :territory_id, :territory_text, :term_id, :term_text, :restriction_id, :restriction_text
|
||||||
:territory_text,
|
)
|
||||||
:term_id,
|
|
||||||
:term_text,
|
|
||||||
:restriction_id,
|
|
||||||
:restriction_text)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_talent_release(attrs = {})
|
def build_talent_release(attrs = {})
|
||||||
@@ -136,4 +85,8 @@ class TalentReleasesController < ApplicationController
|
|||||||
|
|
||||||
results
|
results
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
@@ -1,81 +0,0 @@
|
|||||||
class TaskRequestsController < ApplicationController
|
|
||||||
layout "project"
|
|
||||||
|
|
||||||
before_action :set_project
|
|
||||||
before_action :build_task_request, only: [:new, :create]
|
|
||||||
before_action :set_task_request, only: [:show, :edit, :update, :cancel]
|
|
||||||
before_action :show_splash_screen, only: :index
|
|
||||||
|
|
||||||
def index
|
|
||||||
@task_requests = task_requests.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def new
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
|
||||||
@task_request.attributes = task_request_params_with_email
|
|
||||||
|
|
||||||
if @task_request.save
|
|
||||||
log_create_analytics
|
|
||||||
taskme_url = url_for([:admin, @task_request])
|
|
||||||
SubmitHubspotTaskRequestFormJob.perform_later(@task_request.user_email, taskme_url)
|
|
||||||
else
|
|
||||||
render :new
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
@files = @task_request.files.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
def edit
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
|
||||||
if @task_request.update(task_request_params)
|
|
||||||
redirect_to [@project, :task_requests], notice: t(".notice")
|
|
||||||
else
|
|
||||||
render :edit
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def cancel
|
|
||||||
@task_request.cancelled!
|
|
||||||
redirect_to [@project, :task_requests], notice: t(".notice")
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def show_splash_screen
|
|
||||||
render :splash if task_requests.count.zero?
|
|
||||||
end
|
|
||||||
|
|
||||||
def task_request_params
|
|
||||||
params.require(:task_request).permit(:description, :deadline, :time_allowed, :additional_notes, files: [])
|
|
||||||
end
|
|
||||||
|
|
||||||
def task_request_params_with_email
|
|
||||||
task_request_params.merge(user_email: Current.user.email)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_task_request
|
|
||||||
@task_request = authorize policy_scope(TaskRequest).find(params[:id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def task_requests
|
|
||||||
authorize policy_scope(@project.task_requests)
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_task_request
|
|
||||||
@task_request = authorize @project.task_requests.build
|
|
||||||
end
|
|
||||||
|
|
||||||
def log_create_analytics
|
|
||||||
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_task_request, user_agent: request.user_agent, user_ip: request.remote_ip)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
class TasksController < ApplicationController
|
|
||||||
before_action :set_project
|
|
||||||
|
|
||||||
include ProjectLayout
|
|
||||||
|
|
||||||
def index
|
|
||||||
@tasks = task_requests.completed.order_by_recent.paginate(page: params[:page])
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_project
|
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
|
||||||
end
|
|
||||||
|
|
||||||
def task_requests
|
|
||||||
authorize policy_scope(@project.task_requests)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -3,7 +3,6 @@ class VideosController < ApplicationController
|
|||||||
|
|
||||||
before_action :set_project, only: [:index, :new, :create, :landing]
|
before_action :set_project, only: [:index, :new, :create, :landing]
|
||||||
before_action :set_video, only: [:edit, :update]
|
before_action :set_video, only: [:edit, :update]
|
||||||
before_action :show_splash_screen, only: :index
|
|
||||||
|
|
||||||
def landing
|
def landing
|
||||||
authorize Video, :new?
|
authorize Video, :new?
|
||||||
@@ -61,10 +60,6 @@ class VideosController < ApplicationController
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def show_splash_screen
|
|
||||||
render :splash if videos.count.zero?
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_project
|
def set_project
|
||||||
@project = policy_scope(Project).find(params[:project_id])
|
@project = policy_scope(Project).find(params[:project_id])
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ module DescriptionListHelper
|
|||||||
safe_join(tags)
|
safe_join(tags)
|
||||||
end
|
end
|
||||||
|
|
||||||
def description_list_pair_for(record, attribute, append: nil, custom_label: nil)
|
def description_list_pair_for(record, attribute, append: nil)
|
||||||
term = custom_label.nil? ? translation_for(record, attribute) : custom_label
|
term = translation_for(record, attribute)
|
||||||
definition = record.send(attribute)
|
definition = record.send(attribute)
|
||||||
|
|
||||||
description_list_pair(term, definition, append: append)
|
description_list_pair(term, definition, append: append)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ module DropzoneHelper
|
|||||||
def dropzone_placeholder_message_for(releasable)
|
def dropzone_placeholder_message_for(releasable)
|
||||||
case releasable.model_name.param_key
|
case releasable.model_name.param_key
|
||||||
when "acquired_media_release"
|
when "acquired_media_release"
|
||||||
'(Optional) To add the licensed photos or videos ("Property") to this release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera'
|
"To Add Photos & Videos to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera"
|
||||||
when "material_release"
|
when "material_release"
|
||||||
t 'material_releases.form.photos.dropzone_label'
|
t 'material_releases.form.photos.dropzone_label'
|
||||||
when "music_release"
|
when "music_release"
|
||||||
@@ -11,8 +11,6 @@ module DropzoneHelper
|
|||||||
t 'location_releases.form.photos.dropzone_label'
|
t 'location_releases.form.photos.dropzone_label'
|
||||||
when "directory"
|
when "directory"
|
||||||
"To Add Files to the Folder:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
|
"To Add Files to the Folder:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
|
||||||
when "task_request"
|
|
||||||
"To Add Files for the Task:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse files"
|
|
||||||
else
|
else
|
||||||
"To Add Photos to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera"
|
"To Add Photos to the release:<br>Drag & Drop Files<br>or<br>Click or Tap here to browse photos and connect to Camera"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -6,6 +6,6 @@ module MailHelper
|
|||||||
"1. Tell us the name of the video: \n\n" \
|
"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."
|
"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@mesuite.ai", content, subject: subject, body: body
|
mail_to "info@bigmedia.ai", content, subject: subject, body: body
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,12 +5,4 @@ module TooltipHelper
|
|||||||
concat tag.div(class: "tooltip-inner")
|
concat tag.div(class: "tooltip-inner")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_approval_data_for_releasable(release)
|
|
||||||
if release.approved_by_user_name.present?
|
|
||||||
"#{release.approved_by_user_name} [#{release.approved_by_user_email}]"
|
|
||||||
else
|
|
||||||
release.approved_by_user_email
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -13,13 +13,10 @@ module WordmarkHelper
|
|||||||
css += options[:class].to_s
|
css += options[:class].to_s
|
||||||
|
|
||||||
content_tag(:div, class: css) do
|
content_tag(:div, class: css) do
|
||||||
elements = [
|
safe_join [
|
||||||
content_tag(:span, t("shared.#{product_name}")),
|
content_tag(:span, t("shared.#{product_name}")),
|
||||||
content_tag(:span, t("shared.me"))
|
content_tag(:span, t("shared.me"))
|
||||||
]
|
]
|
||||||
prefix = options[:prefix]
|
|
||||||
elements.unshift content_tag(:span, "#{prefix} ") unless prefix.blank?
|
|
||||||
safe_join elements
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -67,23 +67,6 @@ class ActiveStorageDropzone {
|
|||||||
var upload = new that.UploaderClass(file, url, delegate);
|
var upload = new that.UploaderClass(file, url, delegate);
|
||||||
createUpload(this, upload);
|
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,6 +1,5 @@
|
|||||||
$(document).on("turbolinks:load", () => {
|
$(document).on("turbolinks:load", () => {
|
||||||
$('.datepicker-control').datepicker({
|
$('.datepicker-control').datepicker({
|
||||||
format: "yyyy-mm-dd",
|
format: "yyyy-mm-dd"
|
||||||
todayHighlight: true
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ class GenerateContractsZipJob < ApplicationJob
|
|||||||
before_perform do |job|
|
before_perform do |job|
|
||||||
@project = job.arguments.first
|
@project = job.arguments.first
|
||||||
@download = job.arguments.second
|
@download = job.arguments.second
|
||||||
@release_type = job.arguments.third
|
release_type = job.arguments.third
|
||||||
@folder_name = "#{@project.name.parameterize}_#{get_release_name(@release_type).gsub('_', '-')}"
|
@folder_name = "#{@project.name.parameterize}_#{get_release_name(release_type).gsub('_', '-')}"
|
||||||
@download.update!(name: @folder_name, status: :pending)
|
@download.update!(name: @folder_name, status: :pending)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -20,14 +20,9 @@ class GenerateContractsZipJob < ApplicationJob
|
|||||||
files.each do |attachment|
|
files.each do |attachment|
|
||||||
zipfile.add(attachment, File.join("#{dir}/", attachment))
|
zipfile.add(attachment, File.join("#{dir}/", attachment))
|
||||||
end
|
end
|
||||||
|
|
||||||
if @release_type.constantize.include?(CsvExportable)
|
|
||||||
csv_file = generate_csv releases
|
|
||||||
zipfile.get_output_stream("#{@folder_name}.csv") { |f| f.puts(csv_file) }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@download.file.attach(io: File.open(zipfile_name), filename: "#{@folder_name}.zip")
|
@download.file.attach(io: File.open(zipfile_name), filename: @folder_name)
|
||||||
end
|
end
|
||||||
rescue StandardError => e
|
rescue StandardError => e
|
||||||
Rails.logger.error("Failed to generate download for project (##{project.id}) with release type #{release_type}\n" + e.message)
|
Rails.logger.error("Failed to generate download for project (##{project.id}) with release type #{release_type}\n" + e.message)
|
||||||
@@ -48,19 +43,6 @@ class GenerateContractsZipJob < ApplicationJob
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def generate_csv(releases)
|
|
||||||
release_class = @release_type.constantize
|
|
||||||
headers = release_class.csv_headers
|
|
||||||
|
|
||||||
CSV.generate(headers: true) do |csv|
|
|
||||||
csv << headers
|
|
||||||
releases.each do |release|
|
|
||||||
csv_row_data = release.to_csv_row
|
|
||||||
csv << csv_row_data
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_release_name(release_type)
|
def get_release_name(release_type)
|
||||||
release_type.constantize.model_name.plural
|
release_type.constantize.model_name.plural
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
class SubmitHubspotFormJob < ApplicationJob
|
class SubmitHubspotFormJob < ApplicationJob
|
||||||
queue_as :default
|
queue_as :default
|
||||||
|
|
||||||
def perform(first_name, last_name, email, company_name, additional_params = {})
|
def perform(email, company_name, additional_params = {})
|
||||||
hubspot_form_guid = ENV["HUBSPOT_FORM_GUID"]
|
hubspot_form_guid = ENV["HUBSPOT_FORM_GUID"]
|
||||||
return unless hubspot_form_guid.present?
|
return unless hubspot_form_guid.present?
|
||||||
|
|
||||||
submission_params = {
|
submission_params = {
|
||||||
first_name: first_name,
|
email: email,
|
||||||
last_name: last_name,
|
|
||||||
email: email,
|
|
||||||
company: company_name
|
company: company_name
|
||||||
}.merge(additional_params)
|
}.merge(additional_params)
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
class SubmitHubspotTaskRequestFormJob < ApplicationJob
|
|
||||||
queue_as :default
|
|
||||||
|
|
||||||
def perform(user_email, taskme_url)
|
|
||||||
hubspot_task_request_form_guid = ENV["HUBSPOT_TASK_REQUEST_FORM_GUID"]
|
|
||||||
return unless hubspot_task_request_form_guid.present?
|
|
||||||
|
|
||||||
submission_params = {
|
|
||||||
email: user_email,
|
|
||||||
taskme_url: taskme_url
|
|
||||||
}
|
|
||||||
|
|
||||||
form = Hubspot::Form.new("guid" => hubspot_task_request_form_guid)
|
|
||||||
is_form_sumitted = form.submit(submission_params)
|
|
||||||
|
|
||||||
raise StandardError.new "Failed to submit the task request hubspot form data: #{is_form_sumitted}" unless is_form_sumitted
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
class AdminMailer < ApplicationMailer
|
class AdminMailer < ApplicationMailer
|
||||||
default to: %w[bray@mesuite.ai]
|
default to: %w(bray@bigmedia.ai lee@bigmedia.ai)
|
||||||
|
|
||||||
def new_video(video)
|
def new_video(video)
|
||||||
@video = video
|
@video = video
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class ApplicationMailer < ActionMailer::Base
|
class ApplicationMailer < ActionMailer::Base
|
||||||
default from: ENV.fetch("MAILER_FROM_ADDRESS") { "support@mesuite.ai" }
|
default from: ENV.fetch("MAILER_FROM_ADDRESS") { "support@bigmedia.ai" }
|
||||||
layout "mailer"
|
layout "mailer"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ class Account < ApplicationRecord
|
|||||||
has_many :users, through: :account_auths
|
has_many :users, through: :account_auths
|
||||||
has_many :projects, dependent: :destroy
|
has_many :projects, dependent: :destroy
|
||||||
has_many :videos, through: :projects
|
has_many :videos, through: :projects
|
||||||
has_many :broadcasts, through: :projects
|
|
||||||
has_many :contract_templates, through: :projects
|
has_many :contract_templates, through: :projects
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
@@ -55,28 +54,13 @@ class Account < ApplicationRecord
|
|||||||
Download.where(project: projects),
|
Download.where(project: projects),
|
||||||
User.joins(:project_memberships).where(project_memberships: { project: projects }),
|
User.joins(:project_memberships).where(project_memberships: { project: projects }),
|
||||||
Broadcast.where(project: projects),
|
Broadcast.where(project: projects),
|
||||||
TaskRequest.where(project: projects),
|
|
||||||
ZoomMeeting.where(project: projects),
|
ZoomMeeting.where(project: projects),
|
||||||
MedicalRelease.where(project: projects),
|
MedicalRelease.where(project: projects),
|
||||||
MiscRelease.where(project: projects),
|
|
||||||
MatchingRequest.where(project: projects),
|
MatchingRequest.where(project: projects),
|
||||||
self
|
self
|
||||||
])).sum(:byte_size).to_f
|
])).sum(:byte_size).to_f
|
||||||
end
|
end
|
||||||
|
|
||||||
def total_number_of_releases
|
|
||||||
[
|
|
||||||
MiscRelease.where(project: projects).size,
|
|
||||||
AppearanceRelease.where(project: projects).size,
|
|
||||||
TalentRelease.where(project: projects).size,
|
|
||||||
MaterialRelease.where(project: projects).size,
|
|
||||||
MedicalRelease.where(project: projects).size,
|
|
||||||
LocationRelease.where(project: projects).size,
|
|
||||||
AcquiredMediaRelease.where(project: projects).size,
|
|
||||||
MusicRelease.where(project: projects).size
|
|
||||||
].sum
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_param
|
def to_param
|
||||||
slug
|
slug
|
||||||
end
|
end
|
||||||
@@ -97,10 +81,6 @@ class Account < ApplicationRecord
|
|||||||
plan_uid.to_s == "me_suite" || plan_uid.to_s == "releaseme"
|
plan_uid.to_s == "me_suite" || plan_uid.to_s == "releaseme"
|
||||||
end
|
end
|
||||||
|
|
||||||
def taskme_enabled?
|
|
||||||
plan_uid.to_s == "me_suite" || plan_uid.to_s == "taskme"
|
|
||||||
end
|
|
||||||
|
|
||||||
def plan_name
|
def plan_name
|
||||||
case plan_uid.to_s
|
case plan_uid.to_s
|
||||||
when "deliverme"
|
when "deliverme"
|
||||||
@@ -109,8 +89,6 @@ class Account < ApplicationRecord
|
|||||||
"DirectME"
|
"DirectME"
|
||||||
when "releaseme"
|
when "releaseme"
|
||||||
"ReleaseME"
|
"ReleaseME"
|
||||||
when "taskme"
|
|
||||||
"TaskME"
|
|
||||||
when "me_suite"
|
when "me_suite"
|
||||||
"ME Suite"
|
"ME Suite"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -9,24 +9,10 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
include Signable
|
include Signable
|
||||||
include Syncable
|
include Syncable
|
||||||
include PersonName
|
include PersonName
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
include GuardianPhotoable
|
|
||||||
include SecondGuardianPhotoable
|
|
||||||
include GuardianName
|
|
||||||
include SecondGuardianName
|
|
||||||
include FilesFilterable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%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
|
has_many :file_infos, as: :releasable, dependent: :destroy
|
||||||
|
|
||||||
has_many_attached :files
|
accepts_nested_attributes_for :file_infos
|
||||||
|
|
||||||
composed_of :person_address,
|
composed_of :person_address,
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
@@ -39,38 +25,6 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
%w(person_address_country country)
|
%w(person_address_country country)
|
||||||
]
|
]
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_address_street1 street1],
|
|
||||||
%w[guardian_address_street2 street2],
|
|
||||||
%w[guardian_address_city city],
|
|
||||||
%w[guardian_address_state state],
|
|
||||||
%w[guardian_address_zip zip],
|
|
||||||
%w[guardian_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_2_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_2_address_street1 street1],
|
|
||||||
%w[guardian_2_address_street2 street2],
|
|
||||||
%w[guardian_2_address_city city],
|
|
||||||
%w[guardian_2_address_state state],
|
|
||||||
%w[guardian_2_address_zip zip],
|
|
||||||
%w[guardian_2_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
# We don't care for the argument but method WILL receive option name
|
|
||||||
# when called from inside with_option block, hence * argument
|
|
||||||
def self.face_photo_acceptable_content_types(*)
|
|
||||||
['image/png', 'image/jpeg']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.acceptable_import_file_extensions
|
|
||||||
['.png', '.jpeg', '.jpg', '.pdf']
|
|
||||||
end
|
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :person_email, email: true, allow_blank: true
|
validates :person_email, email: true, allow_blank: true
|
||||||
|
|
||||||
@@ -92,8 +46,8 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
# CATEGORIES = ["Artwork", "Film Footage", "Video Footage", "Still Photograph"].freeze
|
# CATEGORIES = ["Artwork", "Film Footage", "Video Footage", "Still Photograph"].freeze
|
||||||
CATEGORIES = ["Film Footage", "Video Footage", "Still Photograph"].freeze
|
CATEGORIES = ["Film Footage", "Video Footage", "Still Photograph"].freeze
|
||||||
|
|
||||||
def second_guardian_present?
|
def minor?
|
||||||
guardian_2_first_name.present?
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def contact_person
|
def contact_person
|
||||||
@@ -103,8 +57,4 @@ class AcquiredMediaRelease < ApplicationRecord
|
|||||||
def uses_edl?
|
def uses_edl?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def files_count
|
|
||||||
files.any? ? files.size : I18n.t('acquired_media_releases.acquired_media_release.no_media')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class AppHost
|
|||||||
use_ssl: false,
|
use_ssl: false,
|
||||||
},
|
},
|
||||||
production: {
|
production: {
|
||||||
host: "mesuite.ai",
|
host: "bigmedia.ai",
|
||||||
use_ssl: true,
|
use_ssl: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,57 +12,10 @@ class AppearanceRelease < ApplicationRecord
|
|||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
include GuardianPhotoable
|
include GuardianPhotoable
|
||||||
include SecondGuardianPhotoable
|
|
||||||
include GuardianName
|
include GuardianName
|
||||||
include SecondGuardianName
|
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
include Amendmenable
|
|
||||||
|
|
||||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name contact_info]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
has_one_attached :person_photo
|
has_one_attached :person_photo
|
||||||
|
|
||||||
composed_of :person_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[person_address_street1 street1],
|
|
||||||
%w[person_address_street2 street2],
|
|
||||||
%w[person_address_city city],
|
|
||||||
%w[person_address_state state],
|
|
||||||
%w[person_address_zip zip],
|
|
||||||
%w[person_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_address_street1 street1],
|
|
||||||
%w[guardian_address_street2 street2],
|
|
||||||
%w[guardian_address_city city],
|
|
||||||
%w[guardian_address_state state],
|
|
||||||
%w[guardian_address_zip zip],
|
|
||||||
%w[guardian_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_2_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_2_address_street1 street1],
|
|
||||||
%w[guardian_2_address_street2 street2],
|
|
||||||
%w[guardian_2_address_city city],
|
|
||||||
%w[guardian_2_address_state state],
|
|
||||||
%w[guardian_2_address_zip zip],
|
|
||||||
%w[guardian_2_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# These validations apply to all releases
|
# These validations apply to all releases
|
||||||
validates :person_email, email: true, allow_blank: true
|
validates :person_email, email: true, allow_blank: true
|
||||||
validates :person_first_name, :person_last_name, presence: true
|
validates :person_first_name, :person_last_name, presence: true
|
||||||
@@ -118,18 +71,7 @@ class AppearanceRelease < ApplicationRecord
|
|||||||
scope :having_no_person_photo, -> { left_joins(:person_photo_attachment).group(:id).having('COUNT(active_storage_attachments) = 0') }
|
scope :having_no_person_photo, -> { left_joins(:person_photo_attachment).group(:id).having('COUNT(active_storage_attachments) = 0') }
|
||||||
scope :with_person_name, ->(name) { where('person_first_name ILIKE ? OR person_last_name ILIKE ?', "%#{name}%") }
|
scope :with_person_name, ->(name) { where('person_first_name ILIKE ? OR person_last_name ILIKE ?', "%#{name}%") }
|
||||||
|
|
||||||
searchable_on %i[
|
searchable_on %i[person_first_name person_last_name person_address person_email person_phone]
|
||||||
person_first_name
|
|
||||||
person_last_name
|
|
||||||
person_address_street1
|
|
||||||
person_address_street2
|
|
||||||
person_address_city
|
|
||||||
person_address_state
|
|
||||||
person_address_zip
|
|
||||||
person_address_country
|
|
||||||
person_email
|
|
||||||
person_phone
|
|
||||||
]
|
|
||||||
|
|
||||||
# All releases must respond to the following messages
|
# All releases must respond to the following messages
|
||||||
def name
|
def name
|
||||||
@@ -156,10 +98,6 @@ class AppearanceRelease < ApplicationRecord
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def second_guardian_present?
|
|
||||||
self.guardian_2_first_name.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def contract_file_name
|
def contract_file_name
|
||||||
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime('%Y.%m.%d')}_#{release_number}_#{filename_suffix.parameterize}"
|
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime('%Y.%m.%d')}_#{release_number}_#{filename_suffix.parameterize}"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -30,16 +30,8 @@ class Broadcast < ApplicationRecord
|
|||||||
"https://stream.mux.com/#{stream_playback_uid}.m3u8"
|
"https://stream.mux.com/#{stream_playback_uid}.m3u8"
|
||||||
end
|
end
|
||||||
|
|
||||||
def full_live_stream_playback_url
|
|
||||||
full_live_stream_playback_uid.blank? ? stream_playback_url : "https://stream.mux.com/#{full_live_stream_playback_uid}.m3u8"
|
|
||||||
end
|
|
||||||
|
|
||||||
def stream_server_url
|
def stream_server_url
|
||||||
stream_url_override.presence || ENV["MUX_BROADCAST_SERVER_URL"]
|
ENV['MUX_BROADCAST_SERVER_URL']
|
||||||
end
|
|
||||||
|
|
||||||
def stream_server_key
|
|
||||||
stream_key_override.presence || stream_key
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def zoom_meeting_url
|
def zoom_meeting_url
|
||||||
@@ -49,13 +41,11 @@ class Broadcast < ApplicationRecord
|
|||||||
private
|
private
|
||||||
|
|
||||||
def create_mux_live_stream
|
def create_mux_live_stream
|
||||||
stream = MuxLiveStream.create_with_simulcast
|
stream = MuxLiveStream.new
|
||||||
|
|
||||||
self.stream_uid = stream.id
|
self.stream_uid = stream.id
|
||||||
self.stream_key = stream.key
|
self.stream_key = stream.key
|
||||||
self.stream_playback_uid = stream.playback_id
|
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!
|
self.save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -5,12 +5,8 @@ class BroadcastRecording < ApplicationRecord
|
|||||||
|
|
||||||
validates :asset_uid, uniqueness: true
|
validates :asset_uid, uniqueness: true
|
||||||
|
|
||||||
scope :visible, -> { where(hidden: false) }
|
|
||||||
|
|
||||||
before_save :set_title_and_description
|
|
||||||
|
|
||||||
def download_url
|
def download_url
|
||||||
"https://stream.mux.com/#{asset_playback_uid}/#{file_name}?download=#{name}"
|
"https://stream.mux.com/#{asset_playback_uid}/#{file_name}?download=#{download_file_name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def playback_url
|
def playback_url
|
||||||
@@ -18,21 +14,6 @@ class BroadcastRecording < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def download_file_name
|
def download_file_name
|
||||||
"#{broadcast_name}_Date_#{Time.now.in_time_zone(broadcast.shoot_location_time_zone).strftime("%Y-%m-%d")}_Time_#{Time.now.in_time_zone(broadcast.shoot_location_time_zone).strftime("%T")}".parameterize
|
"#{broadcast_name}_Date_#{created_at.strftime("%Y-%m-%d")}_Time_#{created_at.strftime("%T")}".parameterize
|
||||||
end
|
|
||||||
|
|
||||||
def toggle_star
|
|
||||||
toggle! :starred
|
|
||||||
end
|
|
||||||
|
|
||||||
def thumbnail_url(width = 300)
|
|
||||||
"https://image.mux.com/#{asset_playback_uid}/thumbnail.jpg?width=#{width}"
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_title_and_description
|
|
||||||
self.name ||= download_file_name
|
|
||||||
self.description ||= "No description provided for this recording."
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
module Amendmenable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
include ActiveStorageSupport::SupportForBase64
|
|
||||||
|
|
||||||
has_one_base64_attached :amendment_signature
|
|
||||||
|
|
||||||
with_options on: :amendment do
|
|
||||||
validates :amendment_signer_name, presence: true
|
|
||||||
validates :amendment_signature, attached: true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def amendment_signable?
|
|
||||||
contract_template.present? && contract_template.amendment_clause.present?
|
|
||||||
end
|
|
||||||
|
|
||||||
def amendment_signed?
|
|
||||||
amendment_signature.attached?
|
|
||||||
end
|
|
||||||
|
|
||||||
def amendment_signature_base64
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def amendment_signature_base64=(data_uri)
|
|
||||||
return if data_uri.blank?
|
|
||||||
|
|
||||||
amendment_signature.attach(data: data_uri, filename: "amendment_signature.png", content_type: "image/png", identify: "false")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
module Approvable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
include ActiveStorageSupport::SupportForBase64
|
|
||||||
|
|
||||||
has_one_base64_attached :approved_by_user_signature
|
|
||||||
|
|
||||||
# Requires signature when saving in the approval context
|
|
||||||
with_options on: :approval do
|
|
||||||
validates :approved_by_user_signature, attached: true
|
|
||||||
end
|
|
||||||
|
|
||||||
def approve_by(user)
|
|
||||||
return unless approved_at.nil?
|
|
||||||
|
|
||||||
self.approved_by_user_name = user.full_name
|
|
||||||
self.approved_by_user_email = user.email
|
|
||||||
self.approved_at = BigMediaTime.time_zone_now
|
|
||||||
end
|
|
||||||
|
|
||||||
def approved?
|
|
||||||
self.approved_at.present?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module CsvExportable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
COMMON_HEADERS = %i[approved notes tags signed_at].freeze
|
|
||||||
COMMON_VALUES = %w[approved? clean_notes clean_tags signed_on].freeze
|
|
||||||
|
|
||||||
included do
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
[]
|
|
||||||
end
|
|
||||||
|
|
||||||
def csv_headers
|
|
||||||
headers = custom_csv_exportable_headers + COMMON_HEADERS
|
|
||||||
|
|
||||||
headers.map do |header|
|
|
||||||
I18n.t("#{model_name.plural}.index.table_headers.#{header}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_csv_row
|
|
||||||
(self.class.custom_csv_exportable_headers + COMMON_VALUES).map do |function|
|
|
||||||
send(function)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def owner_info
|
|
||||||
compact_contact_info(name: person_name, address: person_address, phone: person_phone, email: person_email)
|
|
||||||
end
|
|
||||||
|
|
||||||
def contact_info
|
|
||||||
owner_info
|
|
||||||
end
|
|
||||||
|
|
||||||
def compact_contact_info(name: nil, address: nil, phone: nil, email: nil)
|
|
||||||
contact_info = ''
|
|
||||||
contact_info += "#{name}; " if name.present?
|
|
||||||
contact_info += "#{address}; " if address.present?
|
|
||||||
contact_info += "P: #{phone}; " if phone.present?
|
|
||||||
contact_info += "E: #{email}" if email.present?
|
|
||||||
contact_info.delete_suffix '; '
|
|
||||||
end
|
|
||||||
|
|
||||||
def clean_notes
|
|
||||||
notes = ''
|
|
||||||
self.notes.order_by_recent.each do |note|
|
|
||||||
notes += "#{note.content}(#{note.email}), "
|
|
||||||
end
|
|
||||||
notes.delete_suffix ', '
|
|
||||||
end
|
|
||||||
|
|
||||||
def clean_tags
|
|
||||||
tags = ''
|
|
||||||
self.tags.each do |tag|
|
|
||||||
tags += "#{tag.name}, "
|
|
||||||
end
|
|
||||||
tags.delete_suffix ', '
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
module FilesFilterable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
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
|
|
||||||
end
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
module SecondGuardianName
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
def guardian_2_name
|
|
||||||
"#{guardian_2_first_name} #{guardian_2_last_name}".titleize
|
|
||||||
end
|
|
||||||
|
|
||||||
def guardian_2_name=(value)
|
|
||||||
if value.include?(' ')
|
|
||||||
split = value.split(" ", 2)
|
|
||||||
self.guardian_2_first_name = split.first
|
|
||||||
self.guardian_2_last_name = split.last
|
|
||||||
else
|
|
||||||
self.guardian_2_first_name = value
|
|
||||||
self.guardian_2_last_name = "(Not Given)"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
module SecondGuardianPhotoable
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
has_one_attached :guardian_2_photo
|
|
||||||
|
|
||||||
validates :guardian_2_photo, content_type: ["image/png", "image/jpeg"]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -29,10 +29,6 @@ class Contract
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def medical_release?
|
|
||||||
@releasable.instance_of?(MedicalRelease)
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def contract_template
|
def contract_template
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ class ContractTemplate < ApplicationRecord
|
|||||||
include Syncable
|
include Syncable
|
||||||
include PgSearch
|
include PgSearch
|
||||||
|
|
||||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
|
||||||
|
|
||||||
belongs_to :project
|
belongs_to :project
|
||||||
belongs_to :parent, class_name: 'ContractTemplate', optional: true
|
belongs_to :parent, class_name: 'ContractTemplate', optional: true
|
||||||
has_many :duplicates, class_name: 'ContractTemplate', foreign_key: 'parent_id'
|
has_many :duplicates, class_name: 'ContractTemplate', foreign_key: 'parent_id'
|
||||||
@@ -16,16 +14,10 @@ class ContractTemplate < ApplicationRecord
|
|||||||
has_many :location_releases, dependent: :restrict_with_error
|
has_many :location_releases, dependent: :restrict_with_error
|
||||||
has_many :material_releases, dependent: :restrict_with_error
|
has_many :material_releases, dependent: :restrict_with_error
|
||||||
has_many :medical_releases, dependent: :restrict_with_error
|
has_many :medical_releases, dependent: :restrict_with_error
|
||||||
has_many :misc_releases, dependent: :restrict_with_error
|
|
||||||
|
|
||||||
monetize :fee_cents
|
monetize :fee_cents
|
||||||
has_rich_text :body
|
has_rich_text :body
|
||||||
has_rich_text :guardian_clause
|
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 :name, presence: true
|
||||||
validates :release_type, presence: true
|
validates :release_type, presence: true
|
||||||
@@ -47,8 +39,6 @@ class ContractTemplate < ApplicationRecord
|
|||||||
scope :non_archived, -> { where(archived_at: nil) }
|
scope :non_archived, -> { where(archived_at: nil) }
|
||||||
scope :order_by_name, -> { order(:name) }
|
scope :order_by_name, -> { order(:name) }
|
||||||
|
|
||||||
enum accessibility: [:public_template, :private_template]
|
|
||||||
|
|
||||||
def fee?
|
def fee?
|
||||||
!fee.zero?
|
!fee.zero?
|
||||||
end
|
end
|
||||||
@@ -68,26 +58,4 @@ class ContractTemplate < ApplicationRecord
|
|||||||
def archive
|
def archive
|
||||||
update(archived_at: Time.zone.now)
|
update(archived_at: Time.zone.now)
|
||||||
end
|
end
|
||||||
|
|
||||||
def has_questionnaire?
|
|
||||||
(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
|
|
||||||
|
|
||||||
def attributes
|
|
||||||
result = super()
|
|
||||||
result[:signature_legal_text] = signature_legal_text.as_json
|
|
||||||
result
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,15 +10,6 @@ class LocationRelease < ApplicationRecord
|
|||||||
include Syncable
|
include Syncable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
include Amendmenable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[location_info owner_info amendment_signed_column]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
composed_of :address,
|
composed_of :address,
|
||||||
mapping: [
|
mapping: [
|
||||||
@@ -67,18 +58,6 @@ class LocationRelease < ApplicationRecord
|
|||||||
true
|
true
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def end_date_after_start_date
|
def end_date_after_start_date
|
||||||
|
|||||||
@@ -3,28 +3,15 @@ class MaterialRelease < ApplicationRecord
|
|||||||
include Contractable
|
include Contractable
|
||||||
include Exploitable
|
include Exploitable
|
||||||
include Notable
|
include Notable
|
||||||
include Photoable # This association needs to be removed after changing the API. Removing it right now will cause failure in API specs.
|
include Photoable
|
||||||
include Releasable
|
include Releasable
|
||||||
include Searchable
|
include Searchable
|
||||||
include Signable
|
include Signable
|
||||||
include Syncable
|
include Syncable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
composed_of :person_address,
|
||||||
include GuardianPhotoable
|
|
||||||
include SecondGuardianPhotoable
|
|
||||||
include GuardianName
|
|
||||||
include SecondGuardianName
|
|
||||||
include FilesFilterable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name owner_info files_count]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
composed_of :person_address,
|
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
mapping: [
|
mapping: [
|
||||||
%w(person_address_street1 street1),
|
%w(person_address_street1 street1),
|
||||||
@@ -35,41 +22,6 @@ class MaterialRelease < ApplicationRecord
|
|||||||
%w(person_address_country country)
|
%w(person_address_country country)
|
||||||
]
|
]
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_address_street1 street1],
|
|
||||||
%w[guardian_address_street2 street2],
|
|
||||||
%w[guardian_address_city city],
|
|
||||||
%w[guardian_address_state state],
|
|
||||||
%w[guardian_address_zip zip],
|
|
||||||
%w[guardian_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_2_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_2_address_street1 street1],
|
|
||||||
%w[guardian_2_address_street2 street2],
|
|
||||||
%w[guardian_2_address_city city],
|
|
||||||
%w[guardian_2_address_state state],
|
|
||||||
%w[guardian_2_address_zip zip],
|
|
||||||
%w[guardian_2_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
has_many_attached :files
|
|
||||||
|
|
||||||
# We don't care for the argument but method WILL receive option name
|
|
||||||
# when called from inside with_option block, hence * argument
|
|
||||||
def self.face_photo_acceptable_content_types(*)
|
|
||||||
['image/png', 'image/jpeg']
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.acceptable_import_file_extensions
|
|
||||||
['.png', '.jpeg', '.jpg', '.pdf']
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
validates :name, presence: true
|
validates :name, presence: true
|
||||||
validates :person_email, email: true, allow_blank: true
|
validates :person_email, email: true, allow_blank: true
|
||||||
|
|
||||||
@@ -78,24 +30,20 @@ class MaterialRelease < ApplicationRecord
|
|||||||
validates :signature, attached: true
|
validates :signature, attached: true
|
||||||
end
|
end
|
||||||
|
|
||||||
searchable_on %i[
|
searchable_on %i[
|
||||||
name
|
name
|
||||||
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
||||||
]
|
]
|
||||||
|
|
||||||
def contact_person
|
def contact_person
|
||||||
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
||||||
end
|
end
|
||||||
|
|
||||||
def second_guardian_present?
|
def minor?
|
||||||
guardian_2_first_name.present?
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def uses_edl?
|
def uses_edl?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def files_count
|
|
||||||
files.any? ? files.size : I18n.t('material_releases.material_release.no_media')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -7,52 +7,16 @@ class MedicalRelease < ApplicationRecord
|
|||||||
include Signable
|
include Signable
|
||||||
include Syncable
|
include Syncable
|
||||||
include PersonName
|
include PersonName
|
||||||
include GuardianPhotoable
|
|
||||||
include SecondGuardianPhotoable
|
|
||||||
include GuardianName
|
|
||||||
include SecondGuardianName
|
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
|
|
||||||
class << self
|
composed_of :person_address,
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name contact_info]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
|
||||||
|
|
||||||
composed_of :person_address,
|
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
mapping: [
|
mapping: [
|
||||||
%w[person_address_street1 street1],
|
%w(person_address_street1 street1),
|
||||||
%w[person_address_street2 street2],
|
%w(person_address_street2 street2),
|
||||||
%w[person_address_city city],
|
%w(person_address_city city),
|
||||||
%w[person_address_state state],
|
%w(person_address_state state),
|
||||||
%w[person_address_zip zip],
|
%w(person_address_zip zip),
|
||||||
%w[person_address_country country]
|
%w(person_address_country country)
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_address_street1 street1],
|
|
||||||
%w[guardian_address_street2 street2],
|
|
||||||
%w[guardian_address_city city],
|
|
||||||
%w[guardian_address_state state],
|
|
||||||
%w[guardian_address_zip zip],
|
|
||||||
%w[guardian_address_country country]
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_2_address,
|
|
||||||
class_name: 'Address',
|
|
||||||
mapping: [
|
|
||||||
%w[guardian_2_address_street1 street1],
|
|
||||||
%w[guardian_2_address_street2 street2],
|
|
||||||
%w[guardian_2_address_city city],
|
|
||||||
%w[guardian_2_address_state state],
|
|
||||||
%w[guardian_2_address_zip zip],
|
|
||||||
%w[guardian_2_address_country country]
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def self.face_photo_acceptable_content_types
|
def self.face_photo_acceptable_content_types
|
||||||
@@ -62,16 +26,9 @@ class MedicalRelease < ApplicationRecord
|
|||||||
# These validations apply to all releases
|
# These validations apply to all releases
|
||||||
validates :person_first_name, :person_last_name, presence: true
|
validates :person_first_name, :person_last_name, presence: true
|
||||||
validates :person_email, email: true, allow_blank: true
|
validates :person_email, email: true, allow_blank: true
|
||||||
validate :valid_answers
|
|
||||||
|
|
||||||
acts_as_taggable_on :internal_tags, :tags
|
acts_as_taggable_on :internal_tags, :tags
|
||||||
|
|
||||||
# These validations apply to releases being signed by a minor
|
|
||||||
with_options if: :minor? do
|
|
||||||
validates :guardian_email, email: true, allow_blank: true
|
|
||||||
validates :guardian_2_email, email: true, allow_blank: true
|
|
||||||
end
|
|
||||||
|
|
||||||
# These validations apply to releases created natively by the system (i.e. not imported from elsewhere)
|
# These validations apply to releases created natively by the system (i.e. not imported from elsewhere)
|
||||||
with_options on: :native do
|
with_options on: :native do
|
||||||
validates :signature, attached: true
|
validates :signature, attached: true
|
||||||
@@ -104,18 +61,11 @@ class MedicalRelease < ApplicationRecord
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def minor?
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
def contract_file_name
|
def contract_file_name
|
||||||
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
|
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def valid_answers
|
|
||||||
(1..ContractTemplate::NUMBER_OF_CUSTOM_FIELDS).each do |index|
|
|
||||||
if contract_template && contract_template["question_#{index}_text"].present? &&
|
|
||||||
public_send("question_#{index}_answer").blank?
|
|
||||||
errors.add("question_#{index}", I18n.t('medical_releases.custom_validation_errors.question_answer_is_required'))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
class MillicastDestination
|
|
||||||
attr_reader :name, :token
|
|
||||||
|
|
||||||
def self.create
|
|
||||||
token_stream_name = SecureRandom.urlsafe_base64
|
|
||||||
|
|
||||||
publish_token = Millicast::PublishToken.create(
|
|
||||||
label: SecureRandom.urlsafe_base64,
|
|
||||||
streams: [
|
|
||||||
{ streamName: token_stream_name }
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
new(token_stream_name, publish_token.data.token)
|
|
||||||
end
|
|
||||||
|
|
||||||
def initialize(name, token)
|
|
||||||
@name = name
|
|
||||||
@token = token
|
|
||||||
end
|
|
||||||
|
|
||||||
def account_id
|
|
||||||
ENV["MILLICAST_ACCOUNT_ID"]
|
|
||||||
end
|
|
||||||
|
|
||||||
def key
|
|
||||||
"#{name}?token=#{token}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def url
|
|
||||||
"rtmp://live-rtmp-pub.millicast.com:1935/v2/pub"
|
|
||||||
end
|
|
||||||
|
|
||||||
def playback_url
|
|
||||||
"https://viewer.millicast.com/v2?streamId=#{account_id}/#{name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def playback_embed
|
|
||||||
"<iframe src=\"#{playback_url}\" allowfullscreen width=\"640\" height=\"480\"></iframe>"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
class MiscRelease < ApplicationRecord
|
|
||||||
include Contractable
|
|
||||||
include Notable
|
|
||||||
include Photoable
|
|
||||||
include Releasable
|
|
||||||
include Searchable
|
|
||||||
include Signable
|
|
||||||
include Syncable
|
|
||||||
include PersonName
|
|
||||||
include GuardianName
|
|
||||||
include GuardianPhotoable
|
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
include Exploitable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name contact_info]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
NUMBER_OF_CUSTOM_FIELDS = 15
|
|
||||||
|
|
||||||
composed_of :person_address,
|
|
||||||
class_name: "Address",
|
|
||||||
mapping: [
|
|
||||||
%w(person_address_street1 street1),
|
|
||||||
%w(person_address_street2 street2),
|
|
||||||
%w(person_address_city city),
|
|
||||||
%w(person_address_state state),
|
|
||||||
%w(person_address_zip zip),
|
|
||||||
%w(person_address_country country)
|
|
||||||
]
|
|
||||||
|
|
||||||
composed_of :guardian_address,
|
|
||||||
class_name: "Address",
|
|
||||||
mapping: [
|
|
||||||
%w(guardian_address_street1 street1),
|
|
||||||
%w(guardian_address_street2 street2),
|
|
||||||
%w(guardian_address_city city),
|
|
||||||
%w(guardian_address_state state),
|
|
||||||
%w(guardian_address_zip zip),
|
|
||||||
%w(guardian_address_country country)
|
|
||||||
]
|
|
||||||
|
|
||||||
def self.face_photo_acceptable_content_types
|
|
||||||
["image/png", "image/jpeg"]
|
|
||||||
end
|
|
||||||
|
|
||||||
# These validations apply to all releases
|
|
||||||
validates :person_first_name, :person_last_name, presence: true
|
|
||||||
validates :person_email, email: true, allow_blank: true
|
|
||||||
|
|
||||||
acts_as_taggable_on :internal_tags, :tags
|
|
||||||
|
|
||||||
# These validations apply to releases created natively by the system (i.e. not imported from elsewhere)
|
|
||||||
with_options on: :native do
|
|
||||||
validates :signature, attached: true
|
|
||||||
end
|
|
||||||
|
|
||||||
# These validations apply to releases imported to the system from an outside source
|
|
||||||
with_options on: :non_native do
|
|
||||||
validates :contract, attached: true
|
|
||||||
end
|
|
||||||
|
|
||||||
with_options if: :minor? do
|
|
||||||
validates :guardian_first_name, :guardian_last_name, presence: true
|
|
||||||
validates :guardian_phone, presence: true
|
|
||||||
end
|
|
||||||
|
|
||||||
searchable_on %i[
|
|
||||||
person_first_name person_last_name person_email person_phone
|
|
||||||
person_address_street1 person_address_street2 person_address_city person_address_state person_address_zip person_address_country
|
|
||||||
guardian_address_street1 guardian_address_street2 guardian_address_city guardian_address_state guardian_address_zip guardian_address_country
|
|
||||||
]
|
|
||||||
|
|
||||||
# All releases must respond to the following messages
|
|
||||||
def name
|
|
||||||
person_name
|
|
||||||
end
|
|
||||||
|
|
||||||
def filename_suffix
|
|
||||||
"#{person_last_name} #{person_first_name}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def contact_person
|
|
||||||
@contact_person ||= Contact.new(person_name, person_address, person_email, person_phone)
|
|
||||||
end
|
|
||||||
|
|
||||||
def uses_edl?
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
def contract_file_name
|
|
||||||
"#{project.name.parameterize}_#{contract_template.release_type}_#{(signed_at || created_at).strftime("%Y.%m.%d")}_#{release_number}_#{filename_suffix.parameterize}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -7,15 +7,7 @@ class MusicRelease < ApplicationRecord
|
|||||||
include Searchable
|
include Searchable
|
||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name file_infos_count composers_count publishers_count]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
has_many :file_infos, as: :releasable, dependent: :destroy
|
has_many :file_infos, as: :releasable, dependent: :destroy
|
||||||
has_many :composers, dependent: :destroy
|
has_many :composers, dependent: :destroy
|
||||||
has_many :publishers, dependent: :destroy
|
has_many :publishers, dependent: :destroy
|
||||||
@@ -80,18 +72,6 @@ class MusicRelease < ApplicationRecord
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
def file_infos_count
|
|
||||||
file_infos.size
|
|
||||||
end
|
|
||||||
|
|
||||||
def composers_count
|
|
||||||
composers.size
|
|
||||||
end
|
|
||||||
|
|
||||||
def publishers_count
|
|
||||||
publishers.size
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def publisher_percentages_add_up_to_100
|
def publisher_percentages_add_up_to_100
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
class MuxLiveStream
|
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
|
def id
|
||||||
live_stream.data.id
|
live_stream.data.id
|
||||||
end
|
end
|
||||||
@@ -26,15 +15,6 @@ class MuxLiveStream
|
|||||||
client.delete_live_stream(stream_uid)
|
client.delete_live_stream(stream_uid)
|
||||||
end
|
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
|
private
|
||||||
|
|
||||||
def live_stream
|
def live_stream
|
||||||
|
|||||||
@@ -2,10 +2,9 @@ class Project < ApplicationRecord
|
|||||||
include Archivable
|
include Archivable
|
||||||
include Filterable
|
include Filterable
|
||||||
include Syncable
|
include Syncable
|
||||||
include PgSearch
|
|
||||||
|
|
||||||
SIGNABLE_RELEASE_TYPES = %w(talent appearance acquired_media location material medical misc)
|
SIGNABLE_RELEASE_TYPES = %w(talent appearance acquired_media location material medical)
|
||||||
AVAILABLE_RELEASE_TYPES = %w(appearance location material acquired_media talent music medical misc)
|
AVAILABLE_RELEASE_TYPES = %w(appearance location material acquired_media talent music medical)
|
||||||
|
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
has_many :acquired_media_releases, dependent: :destroy
|
has_many :acquired_media_releases, dependent: :destroy
|
||||||
@@ -15,7 +14,6 @@ class Project < ApplicationRecord
|
|||||||
has_many :music_releases, dependent: :destroy
|
has_many :music_releases, dependent: :destroy
|
||||||
has_many :talent_releases, dependent: :destroy
|
has_many :talent_releases, dependent: :destroy
|
||||||
has_many :medical_releases, dependent: :destroy
|
has_many :medical_releases, dependent: :destroy
|
||||||
has_many :misc_releases, dependent: :destroy
|
|
||||||
has_many :videos, dependent: :destroy
|
has_many :videos, dependent: :destroy
|
||||||
has_many :imports, dependent: :destroy
|
has_many :imports, dependent: :destroy
|
||||||
has_many :contract_templates, dependent: :destroy
|
has_many :contract_templates, dependent: :destroy
|
||||||
@@ -25,7 +23,6 @@ class Project < ApplicationRecord
|
|||||||
has_many :downloads, dependent: :destroy
|
has_many :downloads, dependent: :destroy
|
||||||
has_many :broadcasts, dependent: :destroy
|
has_many :broadcasts, dependent: :destroy
|
||||||
has_many :zoom_meetings, dependent: :destroy
|
has_many :zoom_meetings, dependent: :destroy
|
||||||
has_many :task_requests, dependent: :destroy
|
|
||||||
|
|
||||||
accepts_nested_attributes_for :project_memberships
|
accepts_nested_attributes_for :project_memberships
|
||||||
|
|
||||||
@@ -38,20 +35,10 @@ class Project < ApplicationRecord
|
|||||||
music_release: false,
|
music_release: false,
|
||||||
talent_release: false,
|
talent_release: false,
|
||||||
medical_release: false,
|
medical_release: false,
|
||||||
misc_release: false,
|
|
||||||
video_analysis: false,
|
video_analysis: false,
|
||||||
}
|
}
|
||||||
end
|
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 }
|
validates :name, presence: true, uniqueness: { scope: :account_id }
|
||||||
|
|
||||||
filterable_by :active, :inactive, :archived
|
filterable_by :active, :inactive, :archived
|
||||||
@@ -81,7 +68,6 @@ class Project < ApplicationRecord
|
|||||||
music_release: true,
|
music_release: true,
|
||||||
talent_release: true,
|
talent_release: true,
|
||||||
medical_release: true,
|
medical_release: true,
|
||||||
misc_release: true,
|
|
||||||
video_analysis: true,
|
video_analysis: true,
|
||||||
}
|
}
|
||||||
when "nat_geo"
|
when "nat_geo"
|
||||||
@@ -94,7 +80,6 @@ class Project < ApplicationRecord
|
|||||||
music_release: true,
|
music_release: true,
|
||||||
talent_release: true,
|
talent_release: true,
|
||||||
medical_release: true,
|
medical_release: true,
|
||||||
misc_release: true,
|
|
||||||
video_analysis: true,
|
video_analysis: true,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -10,19 +10,7 @@ class QrCode
|
|||||||
url = Rails.application.routes.url_helpers.url_for(route)
|
url = Rails.application.routes.url_helpers.url_for(route)
|
||||||
filename = [contract_template.project.name, contract_template.name].map(&:parameterize).join("_")
|
filename = [contract_template.project.name, contract_template.name].map(&:parameterize).join("_")
|
||||||
|
|
||||||
new(url, "#{filename}.png")
|
new(url, filename)
|
||||||
end
|
|
||||||
|
|
||||||
def self.build_from_multiple_contract_templates(contract_templates, project)
|
|
||||||
account = project.account
|
|
||||||
locale = I18n.locale
|
|
||||||
host = AppHost.new.domain_with_port
|
|
||||||
route = [account, project, :contract_templates, contract_template_ids: contract_templates.ids, locale: I18n.locale, host: AppHost.new.domain_with_port]
|
|
||||||
|
|
||||||
url = Rails.application.routes.url_helpers.url_for(route)
|
|
||||||
filename = [project.account.name, project.name].map(&:parameterize).join("_")
|
|
||||||
|
|
||||||
new(url, "#{filename}.png")
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(url, filename = "qrcode.png")
|
def initialize(url, filename = "qrcode.png")
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
class ReleasableParam
|
class ReleasableParam
|
||||||
TYPES = %w(talent appearance location material acquired_media music medical misc)
|
TYPES = %w(talent appearance location material acquired_media music medical)
|
||||||
|
|
||||||
def initialize(params)
|
def initialize(params)
|
||||||
@params = params
|
@params = params
|
||||||
|
|||||||
@@ -8,12 +8,7 @@ class SampleAppearanceRelease < AppearanceRelease
|
|||||||
|
|
||||||
def default_attrs
|
def default_attrs
|
||||||
{
|
{
|
||||||
person_address_street1: "Street Address",
|
person_address: "Street Address, City, State Zipcode",
|
||||||
person_address_street2: "St2",
|
|
||||||
person_address_city: "City",
|
|
||||||
person_address_state: "State",
|
|
||||||
person_address_zip: "ZIP",
|
|
||||||
person_address_country: "Country",
|
|
||||||
person_first_name: "Some",
|
person_first_name: "Some",
|
||||||
person_last_name: "Person",
|
person_last_name: "Person",
|
||||||
person_phone: "555-555-5555",
|
person_phone: "555-555-5555",
|
||||||
|
|||||||
@@ -11,17 +11,7 @@ class TalentRelease < ApplicationRecord
|
|||||||
include Taggable
|
include Taggable
|
||||||
include PersonName
|
include PersonName
|
||||||
include GuardianPhotoable
|
include GuardianPhotoable
|
||||||
include SecondGuardianPhotoable
|
|
||||||
include GuardianName
|
include GuardianName
|
||||||
include SecondGuardianName
|
|
||||||
include CsvExportable
|
|
||||||
include Approvable
|
|
||||||
|
|
||||||
class << self
|
|
||||||
def custom_csv_exportable_headers
|
|
||||||
%i[name phone email]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
composed_of :person_address,
|
composed_of :person_address,
|
||||||
class_name: "Address",
|
class_name: "Address",
|
||||||
@@ -45,17 +35,6 @@ class TalentRelease < ApplicationRecord
|
|||||||
%w(guardian_address_country country)
|
%w(guardian_address_country country)
|
||||||
]
|
]
|
||||||
|
|
||||||
composed_of :guardian_2_address,
|
|
||||||
class_name: "Address",
|
|
||||||
mapping: [
|
|
||||||
%w(guardian_2_address_street1 street1),
|
|
||||||
%w(guardian_2_address_street2 street2),
|
|
||||||
%w(guardian_2_address_city city),
|
|
||||||
%w(guardian_2_address_state state),
|
|
||||||
%w(guardian_2_address_zip zip),
|
|
||||||
%w(guardian_2_address_country country)
|
|
||||||
]
|
|
||||||
|
|
||||||
def self.face_photo_acceptable_content_types
|
def self.face_photo_acceptable_content_types
|
||||||
["image/png", "image/jpeg"]
|
["image/png", "image/jpeg"]
|
||||||
end
|
end
|
||||||
@@ -79,7 +58,6 @@ class TalentRelease < ApplicationRecord
|
|||||||
# These validations apply to releases being signed by a minor
|
# These validations apply to releases being signed by a minor
|
||||||
with_options if: :minor? do
|
with_options if: :minor? do
|
||||||
validates :guardian_first_name, :guardian_last_name, presence: true
|
validates :guardian_first_name, :guardian_last_name, presence: true
|
||||||
validates :guardian_email, :guardian_2_email, email: true, allow_blank: true
|
|
||||||
validates :guardian_phone, presence: true
|
validates :guardian_phone, presence: true
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -94,14 +72,6 @@ class TalentRelease < ApplicationRecord
|
|||||||
person_name
|
person_name
|
||||||
end
|
end
|
||||||
|
|
||||||
def phone
|
|
||||||
person_phone
|
|
||||||
end
|
|
||||||
|
|
||||||
def email
|
|
||||||
person_email
|
|
||||||
end
|
|
||||||
|
|
||||||
def filename_suffix
|
def filename_suffix
|
||||||
"#{person_last_name} #{person_first_name}"
|
"#{person_last_name} #{person_first_name}"
|
||||||
end
|
end
|
||||||
@@ -111,11 +81,7 @@ class TalentRelease < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def uses_edl?
|
def uses_edl?
|
||||||
true
|
false
|
||||||
end
|
|
||||||
|
|
||||||
def second_guardian_present?
|
|
||||||
guardian_2_first_name.present?
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def contract_file_name
|
def contract_file_name
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
class TaskRequest < ApplicationRecord
|
|
||||||
belongs_to :project
|
|
||||||
has_many_attached :files
|
|
||||||
|
|
||||||
enum status: [:pending, :completed, :cancelled]
|
|
||||||
|
|
||||||
scope :order_by_recent, -> { order(created_at: :desc) }
|
|
||||||
|
|
||||||
validates :time_allowed, numericality: { only_integer: true, greater_than_or_equal_to: 2 }, allow_blank: true
|
|
||||||
end
|
|
||||||
@@ -12,26 +12,22 @@ class AcquiredMediaReleasePolicy < ApplicationPolicy
|
|||||||
end
|
end
|
||||||
|
|
||||||
def destroy?
|
def destroy?
|
||||||
user.manager? || user.account_manager?
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def tag_multiple?
|
def tag_multiple?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit_files?
|
def edit_file_infos?
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_file_infos?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def download_multiple?
|
def download_multiple?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def review?
|
|
||||||
user.account_manager?
|
|
||||||
end
|
|
||||||
|
|
||||||
def approve?
|
|
||||||
review?
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user